ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeQppbmRleCA2NDM0ZjBkLi42Y2Q2ZGFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2ltYV9wb2xpY3kKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9pbWFfcG9saWN5CkBAIC0yMCw3ICsyMCw3IEBACiAJCQlsc206CVtbc3Vial91c2VyPV0gW3N1Ympfcm9sZT1dIFtzdWJqX3R5cGU9XQogCQkJCSBbb2JqX3VzZXI9XSBbb2JqX3JvbGU9XSBbb2JqX3R5cGU9XV0KIAotCQliYXNlOiAJZnVuYzo9IFtCUFJNX0NIRUNLXVtGSUxFX01NQVBdW0lOT0RFX1BFUk1JU1NJT05dCisJCWJhc2U6IAlmdW5jOj0gW0JQUk1fQ0hFQ0tdW0ZJTEVfTU1BUF1bRklMRV9DSEVDS10KIAkJCW1hc2s6PSBbTUFZX1JFQURdIFtNQVlfV1JJVEVdIFtNQVlfQVBQRU5EXSBbTUFZX0VYRUNdCiAJCQlmc21hZ2ljOj0gaGV4IHZhbHVlCiAJCQl1aWQ6PSBkZWNpbWFsIHZhbHVlCkBAIC00MCwxMSArNDAsMTEgQEAKIAogCQkJbWVhc3VyZSBmdW5jPUJQUk1fQ0hFQ0sKIAkJCW1lYXN1cmUgZnVuYz1GSUxFX01NQVAgbWFzaz1NQVlfRVhFQwotCQkJbWVhc3VyZSBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRCB1aWQ9MAorCQkJbWVhc3VyZSBmdW5jPUZJTEVfQ0hFQ0sgbWFzaz1NQVlfUkVBRCB1aWQ9MAogCiAJCVRoZSBkZWZhdWx0IHBvbGljeSBtZWFzdXJlcyBhbGwgZXhlY3V0YWJsZXMgaW4gYnBybV9jaGVjaywKIAkJYWxsIGZpbGVzIG1tYXBwZWQgZXhlY3V0YWJsZSBpbiBmaWxlX21tYXAsIGFuZCBhbGwgZmlsZXMKLQkJb3BlbiBmb3IgcmVhZCBieSByb290IGluIGlub2RlX3Blcm1pc3Npb24uCisJCW9wZW4gZm9yIHJlYWQgYnkgcm9vdCBpbiBkb19maWxwX29wZW4uCiAKIAkJRXhhbXBsZXMgb2YgTFNNIHNwZWNpZmljIGRlZmluaXRpb25zOgogCkBAIC01NCw4ICs1NCw4IEBACiAKIAkJCWRvbnRfbWVhc3VyZSBvYmpfdHlwZT12YXJfbG9nX3QKIAkJCWRvbnRfbWVhc3VyZSBvYmpfdHlwZT1hdWRpdGRfbG9nX3QKLQkJCW1lYXN1cmUgc3Vial91c2VyPXN5c3RlbV91IGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECi0JCQltZWFzdXJlIHN1Ympfcm9sZT1zeXN0ZW1fciBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRAorCQkJbWVhc3VyZSBzdWJqX3VzZXI9c3lzdGVtX3UgZnVuYz1GSUxFX0NIRUNLIG1hc2s9TUFZX1JFQUQKKwkJCW1lYXN1cmUgc3Vial9yb2xlPXN5c3RlbV9yIGZ1bmM9RklMRV9DSEVDSyBtYXNrPU1BWV9SRUFECiAKIAkJU21hY2s6Ci0JCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECisJCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9RklMRV9DSEVDSyBtYXNrPU1BWV9SRUFECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtcG93ZXIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtcG93ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyM2M1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1wb3dlcgpAQCAtMCwwICsxLDc5IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzLy4uLi9wb3dlci8KK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9kZXZpY2VzLy4uLi9wb3dlciBkaXJlY3RvcnkgY29udGFpbnMgYXR0cmlidXRlcworCQlhbGxvd2luZyB0aGUgdXNlciBzcGFjZSB0byBjaGVjayBhbmQgbW9kaWZ5IHNvbWUgcG93ZXIKKwkJbWFuYWdlbWVudCByZWxhdGVkIHByb3BlcnRpZXMgb2YgZ2l2ZW4gZGV2aWNlLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzLy4uLi9wb3dlci93YWtldXAKK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9kZXZpY2VzLy4uLi9wb3dlci93YWtldXAgYXR0cmlidXRlIGFsbG93cyB0aGUgdXNlcgorCQlzcGFjZSB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgdG8gd2FrZSB1cCB0aGUgc3lzdGVtCisJCWZyb20gc2xlZXAgc3RhdGVzLCBzdWNoIGFzIHRoZSBtZW1vcnkgc2xlZXAgc3RhdGUgKHN1c3BlbmQgdG8KKwkJUkFNKSBhbmQgaGliZXJuYXRpb24gKHN1c3BlbmQgdG8gZGlzayksIGFuZCB0byBlbmFibGUgb3IgZGlzYWJsZQorCQlpdCB0byBkbyB0aGF0IGFzIGRlc2lyZWQuCisKKwkJU29tZSBkZXZpY2VzIHN1cHBvcnQgIndha2V1cCIgZXZlbnRzLCB3aGljaCBhcmUgaGFyZHdhcmUgc2lnbmFscworCQl1c2VkIHRvIGFjdGl2YXRlIHRoZSBzeXN0ZW0gZnJvbSBhIHNsZWVwIHN0YXRlLiAgU3VjaCBkZXZpY2VzCisJCWhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IgdGhlIHN5c2ZzIHBvd2VyL3dha2V1cAorCQlmaWxlOgorCisJCSsgImVuYWJsZWRcbiIgdG8gaXNzdWUgdGhlIGV2ZW50czsKKwkJKyAiZGlzYWJsZWRcbiIgbm90IHRvIGRvIHNvOworCisJCUluIHRoYXQgY2FzZXMgdGhlIHVzZXIgc3BhY2UgY2FuIGNoYW5nZSB0aGUgc2V0dGluZyByZXByZXNlbnRlZAorCQlieSB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGJ5IHdyaXRpbmcgZWl0aGVyICJlbmFibGVkIiwgb3IKKwkJImRpc2FibGVkIiB0byBpdC4KKworCQlGb3IgdGhlIGRldmljZXMgdGhhdCBhcmUgbm90IGNhcGFibGUgb2YgZ2VuZXJhdGluZyBzeXN0ZW0gd2FrZXVwCisJCWV2ZW50cyB0aGlzIGZpbGUgY29udGFpbnMgIlxuIi4gIEluIHRoYXQgY2FzZXMgdGhlIHVzZXIgc3BhY2UKKwkJY2Fubm90IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFuZCB0aGUgZGV2aWNlIGNhbm5vdCBiZQorCQllbmFibGVkIHRvIHdha2UgdXAgdGhlIHN5c3RlbS4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvY29udHJvbAorRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2NvbnRyb2wgYXR0cmlidXRlIGFsbG93cyB0aGUgdXNlcgorCQlzcGFjZSB0byBjb250cm9sIHRoZSBydW4tdGltZSBwb3dlciBtYW5hZ2VtZW50IG9mIHRoZSBkZXZpY2UuCisKKwkJQWxsIGRldmljZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzIGZvciB0aGUKKwkJcG93ZXIvY29udHJvbCBmaWxlOgorCisJCSsgImF1dG9cbiIgdG8gYWxsb3cgdGhlIGRldmljZSB0byBiZSBwb3dlciBtYW5hZ2VkIGF0IHJ1biB0aW1lOworCQkrICJvblxuIiB0byBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZyBwb3dlciBtYW5hZ2VkOworCisJCVRoZSBkZWZhdWx0IGZvciBhbGwgZGV2aWNlcyBpcyAiYXV0byIsIHdoaWNoIG1lYW5zIHRoYXQgdGhleSBtYXkKKwkJYmUgc3ViamVjdCB0byBhdXRvbWF0aWMgcG93ZXIgbWFuYWdlbWVudCwgZGVwZW5kaW5nIG9uIHRoZWlyCisJCWRyaXZlcnMuICBDaGFuZ2luZyB0aGlzIGF0dHJpYnV0ZSB0byAib24iIHByZXZlbnRzIHRoZSBkcml2ZXIKKwkJZnJvbSBwb3dlciBtYW5hZ2luZyB0aGUgZGV2aWNlIGF0IHJ1biB0aW1lLiAgRG9pbmcgdGhhdCB3aGlsZQorCQl0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZCBjYXVzZXMgaXQgdG8gYmUgd29rZW4gdXAuCisKK1doYXQ6CQkvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2FzeW5jCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZGV2aWNlcy8uLi4vYXN5bmMgYXR0cmlidXRlIGFsbG93cyB0aGUgdXNlciBzcGFjZSB0bworCQllbmFibGUgb3IgZGlhc2JsZSB0aGUgZGV2aWNlJ3Mgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyB0bworCQliZSBleGVjdXRlZCBhc3luY2hyb25vdXNseSAoaWUuIGluIHNlcGFyYXRlIHRocmVhZHMsIGluIHBhcmFsbGVsCisJCXdpdGggdGhlIG1haW4gc3VzcGVuZC9yZXN1bWUgdGhyZWFkKSBkdXJpbmcgc3lzdGVtLXdpZGUgcG93ZXIKKwkJdHJhbnNpdGlvbnMgKGVnLiBzdXNwZW5kIHRvIFJBTSwgaGliZXJuYXRpb24pLgorCisJCUFsbCBkZXZpY2VzIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IgdGhlCisJCXBvd2VyL2FzeW5jIGZpbGU6CisKKwkJKyAiZW5hYmxlZFxuIiB0byBwZXJtaXQgdGhlIGFzeW5jaHJvbm91cyBzdXNwZW5kL3Jlc3VtZTsKKwkJKyAiZGlzYWJsZWRcbiIgdG8gZm9yYmlkIGl0OworCisJCVRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBtYXkgYmUgY2hhbmdlZCBieSB3cml0aW5nIGVpdGhlcgorCQkiZW5hYmxlZCIsIG9yICJkaXNhYmxlZCIgdG8gaXQuCisKKwkJSXQgZ2VuZXJhbGx5IGlzIHVuc2FmZSB0byBwZXJtaXQgdGhlIGFzeW5jaHJvbm91cyBzdXNwZW5kL3Jlc3VtZQorCQlvZiBhIGRldmljZSB1bmxlc3MgaXQgaXMgY2VydGFpbiB0aGF0IGFsbCBvZiB0aGUgUE0gZGVwZW5kZW5jaWVzCisJCW9mIHRoZSBkZXZpY2UgYXJlIGtub3duIHRvIHRoZSBQTSBjb3JlLiAgSG93ZXZlciwgZm9yIHNvbWUKKwkJZGV2aWNlcyB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8gImVuYWJsZWQiIGJ5IGJ1cyB0eXBlIGNvZGUgb3IKKwkJZGV2aWNlIGRyaXZlcnMgYW5kIGluIHRoYXQgY2FzZXMgaXQgc2hvdWxkIGJlIHNhZmUgdG8gbGVhdmUgdGhlCisJCWRlZmF1bHQgdmFsdWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgppbmRleCBkY2ZmNGQwLi5kNmE4MDFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIKQEAgLTEwMSwzICsxMDEsMTYgQEAKIAogCQlDQVVUSU9OOiBVc2luZyBpdCB3aWxsIGNhdXNlIHlvdXIgbWFjaGluZSdzIHJlYWwtdGltZSAoQ01PUykKIAkJY2xvY2sgdG8gYmUgc2V0IHRvIGEgcmFuZG9tIGludmFsaWQgdGltZSBhZnRlciBhIHJlc3VtZS4KKworV2hhdDoJCS9zeXMvcG93ZXIvcG1fYXN5bmMKK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9wb3dlci9wbV9hc3luYyBmaWxlIGNvbnRyb2xzIHRoZSBzd2l0Y2ggYWxsb3dpbmcgdGhlCisJCXVzZXIgc3BhY2UgdG8gZW5hYmxlIG9yIGRpc2FibGUgYXN5bmNocm9ub3VzIHN1c3BlbmQgYW5kIHJlc3VtZQorCQlvZiBkZXZpY2VzLiAgSWYgZW5hYmxlZCwgdGhpcyBmZWF0dXJlIHdpbGwgY2F1c2Ugc29tZSBkZXZpY2UKKwkJZHJpdmVycycgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyB0byBiZSBleGVjdXRlZCBpbiBwYXJhbGxlbAorCQl3aXRoIGVhY2ggb3RoZXIgYW5kIHdpdGggdGhlIG1haW4gc3VzcGVuZCB0aHJlYWQuICBJdCBpcyBlbmFibGVkCisJCWlmIHRoaXMgZmlsZSBjb250YWlucyAiMSIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgSXQgbWF5IGJlCisJCWRpc2FibGVkIGJ5IHdyaXRpbmcgIjAiIHRvIHRoaXMgZmlsZSwgaW4gd2hpY2ggY2FzZSBhbGwgZGV2aWNlcworCQl3aWxsIGJlIHN1c3BlbmRlZCBhbmQgcmVzdW1lZCBzeW5jaHJvbm91c2x5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbAppbmRleCBmOTJmMjQzLi5lODcwMzMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbApAQCAtNTg5LDcgKzU4OSw4IEBACiAJICAgIDxlbnRyeT48L2VudHJ5PgogCSAgICA8ZW50cnk+QSBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KIChkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzCi08Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kIGhpZ2hlci48L2VudHJ5PgorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+IGFuZCBoaWdoZXIuIEFwcGxpY2F0aW9ucworc2hvdWxkIHNldCB0aGlzIHRvIDAuPC9lbnRyeT4KIAkgIDwvcm93PgogCTwvdGJvZHk+CiAgICAgICA8L3Rncm91cD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwKaW5kZXggMTg3MDgxNy4uYjg0M2JkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwKQEAgLTU0LDEyICs1NCwxMCBAQAogZHJpdmVyJ3MgaW5jb21pbmcgcXVldWUuIFRoZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzZWxlY3RlZCBJL08KIG1ldGhvZC48L3BhcmE+CiAKLSAgICA8cGFyYT5UbyBlbnF1ZXVlIGEgPGxpbmsgbGlua2VuZD0ibW1hcCI+bWVtb3J5IG1hcHBlZDwvbGluaz4KLWJ1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKLSZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseSAmdjRsMi1mb3JtYXQ7Ci08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KLWZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4gYW5kIHRoZQorICAgIDxwYXJhPlRvIGVucXVldWUgYSBidWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgorZmllbGQgb2YgYSAmdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHdhcyBwcmV2aW91c2x5IHVzZWQKK3dpdGggJnY0bDItZm9ybWF0OyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4uIEFwcGxpY2F0aW9ucyBtdXN0IGFsc28gc2V0IHRoZQogPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFZhbGlkIGluZGV4IG51bWJlcnMgcmFuZ2UgZnJvbQogemVybyB0byB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggJlZJRElPQy1SRVFCVUZTOwogKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLiBUaGUKQEAgLTcwLDggKzY4LDE5IEBACiA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUPC9jb25zdGFudD4pIGFwcGxpY2F0aW9ucyBtdXN0IGFsc28KIGluaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5ieXRlc3VzZWQ8L3N0cnVjdGZpZWxkPiwKIDxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+IGFuZAotPHN0cnVjdGZpZWxkPnRpbWVzdGFtcDwvc3RydWN0ZmllbGQ+IGZpZWxkcy4gU2VlIDx4cmVmCi0JbGlua2VuZD0iYnVmZmVyIiAvPiBmb3IgZGV0YWlscy4gV2hlbgorPHN0cnVjdGZpZWxkPnRpbWVzdGFtcDwvc3RydWN0ZmllbGQ+IGZpZWxkcywgc2VlIDx4cmVmCitsaW5rZW5kPSJidWZmZXIiIC8+IGZvciBkZXRhaWxzLgorQXBwbGljYXRpb25zIG11c3QgYWxzbyBzZXQgPHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD4gdG8gMC4gSWYgYSBkcml2ZXIKK3N1cHBvcnRzIGNhcHR1cmluZyBmcm9tIHNwZWNpZmljIHZpZGVvIGlucHV0cyBhbmQgeW91IHdhbnQgdG8gc3BlY2lmeSBhIHZpZGVvCitpbnB1dCwgdGhlbiA8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiBzaG91bGQgYmUgc2V0IHRvCis8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19JTlBVVDwvY29uc3RhbnQ+IGFuZCB0aGUgZmllbGQKKzxzdHJ1Y3RmaWVsZD5pbnB1dDwvc3RydWN0ZmllbGQ+IG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIGRlc2lyZWQgaW5wdXQuCitUaGUgPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4KKzwvcGFyYT4KKworICAgIDxwYXJhPlRvIGVucXVldWUgYSA8bGluayBsaW5rZW5kPSJtbWFwIj5tZW1vcnkgbWFwcGVkPC9saW5rPgorYnVmZmVyIGFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorZmllbGQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50Pi4gV2hlbgogPGNvbnN0YW50PlZJRElPQ19RQlVGPC9jb25zdGFudD4gaXMgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHNldHMgdGhlCiA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19NQVBQRUQ8L2NvbnN0YW50PiBhbmQKQEAgLTgxLDE0ICs5MCwxMCBAQAogJkVJTlZBTDsuPC9wYXJhPgogCiAgICAgPHBhcmE+VG8gZW5xdWV1ZSBhIDxsaW5rIGxpbmtlbmQ9InVzZXJwIj51c2VyIHBvaW50ZXI8L2xpbms+Ci1idWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhCi0mdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHByZXZpb3VzbHkgJnY0bDItZm9ybWF0OwotPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Ci08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCB0aGUgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+Ci1maWVsZCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfVVNFUlBUUjwvY29uc3RhbnQ+IGFuZCB0aGUKK2J1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9VU0VSUFRSPC9jb25zdGFudD4sIHRoZQogPHN0cnVjdGZpZWxkPm0udXNlcnB0cjwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHRoZSBhZGRyZXNzIG9mIHRoZQotYnVmZmVyIGFuZCA8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gdG8gaXRzIHNpemUuIFdoZW4gdGhlCi1idWZmZXIgaXMgaW50ZW5kZWQgZm9yIG91dHB1dCBhZGRpdGlvbmFsIGZpZWxkcyBtdXN0IGJlIHNldCBhcyBhYm92ZS4KK2J1ZmZlciBhbmQgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IHRvIGl0cyBzaXplLgogV2hlbiA8Y29uc3RhbnQ+VklESU9DX1FCVUY8L2NvbnN0YW50PiBpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcwogc3RydWN0dXJlIHRoZSBkcml2ZXIgc2V0cyB0aGUgPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfUVVFVUVEPC9jb25zdGFudD4KIGZsYWcgYW5kIGNsZWFycyB0aGUgPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4gYW5kCkBAIC05NiwxMyArMTAxLDE0IEBACiA8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCwgb3IgaXQgcmV0dXJucyBhbiBlcnJvciBjb2RlLgogVGhpcyBpb2N0bCBsb2NrcyB0aGUgbWVtb3J5IHBhZ2VzIG9mIHRoZSBidWZmZXIgaW4gcGh5c2ljYWwgbWVtb3J5LAogdGhleSBjYW5ub3QgYmUgc3dhcHBlZCBvdXQgdG8gZGlzay4gQnVmZmVycyByZW1haW4gbG9ja2VkIHVudGlsCi1kZXF1ZXVlZCwgdW50aWwgdGhlICZWSURJT0MtU1RSRUFNT0ZGOyBvciAmVklESU9DLVJFUUJVRlM7IGlvY3RsIGFyZQorZGVxdWV1ZWQsIHVudGlsIHRoZSAmVklESU9DLVNUUkVBTU9GRjsgb3IgJlZJRElPQy1SRVFCVUZTOyBpb2N0bCBpcwogY2FsbGVkLCBvciB1bnRpbCB0aGUgZGV2aWNlIGlzIGNsb3NlZC48L3BhcmE+CiAKICAgICA8cGFyYT5BcHBsaWNhdGlvbnMgY2FsbCB0aGUgPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+CiBpb2N0bCB0byBkZXF1ZXVlIGEgZmlsbGVkIChjYXB0dXJpbmcpIG9yIGRpc3BsYXllZCAob3V0cHV0KSBidWZmZXIKIGZyb20gdGhlIGRyaXZlcidzIG91dGdvaW5nIHF1ZXVlLiBUaGV5IGp1c3Qgc2V0IHRoZQotPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2FuZCA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPgogZmllbGRzIG9mIGEgJnY0bDItYnVmZmVyOyBhcyBhYm92ZSwgd2hlbiA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KIGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIGZpbGxzIHRoZQogcmVtYWluaW5nIGZpZWxkcyBvciByZXR1cm5zIGFuIGVycm9yIGNvZGUuPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sCmluZGV4IGQ4MzQ5OTMuLmU2NDk4MDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwKQEAgLTU0LDEyICs1NCwxMyBAQAogJlZJRElPQy1SRVFCVUZTOyBpb2N0bC48L3BhcmE+CiAKICAgICA8cGFyYT5BcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkCi0gICAgb2YgYSAmdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHByZXZpb3VzbHkKKyAgICBvZiBhICZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgd2FzIHByZXZpb3VzbHkgdXNlZCB3aXRoCiAmdjRsMi1mb3JtYXQ7IDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlcXVlc3RidWZmZXJzOwogPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiwgYW5kIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPgogICAgIGZpZWxkLiBWYWxpZCBpbmRleCBudW1iZXJzIHJhbmdlIGZyb20gemVybwogdG8gdGhlIG51bWJlciBvZiBidWZmZXJzIGFsbG9jYXRlZCB3aXRoICZWSURJT0MtUkVRQlVGUzsKICAgICAoJnY0bDItcmVxdWVzdGJ1ZmZlcnM7IDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+KSBtaW51cyBvbmUuCitUaGUgPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc2hvdWxkIHRvIHNldCB0byAwLgogQWZ0ZXIgY2FsbGluZyA8Y29uc3RhbnQ+VklESU9DX1FVRVJZQlVGPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8KICAgICB0aGlzIHN0cnVjdHVyZSBkcml2ZXJzIHJldHVybiBhbiBlcnJvciBjb2RlIG9yIGZpbGwgdGhlIHJlc3Qgb2YKIHRoZSBzdHJ1Y3R1cmUuPC9wYXJhPgpAQCAtNjgsOCArNjksOCBAQAogPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4sCiA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PiBhbmQKIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0RPTkU8L2NvbnN0YW50PiBmbGFncyB3aWxsIGJlIHZhbGlkLiBUaGUKLTxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBmaWVsZCB3aWxsIGJlIHNldCB0bwotPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50PiwgdGhlIDxzdHJ1Y3RmaWVsZD5tLm9mZnNldDwvc3RydWN0ZmllbGQ+Cis8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2lsbCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQKK0kvTyBtZXRob2QsIHRoZSA8c3RydWN0ZmllbGQ+bS5vZmZzZXQ8L3N0cnVjdGZpZWxkPgogY29udGFpbnMgdGhlIG9mZnNldCBvZiB0aGUgYnVmZmVyIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBkZXZpY2UgbWVtb3J5LAogdGhlIDxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPiBmaWVsZCBpdHMgc2l6ZS4gVGhlIGRyaXZlciBtYXkKIG9yIG1heSBub3Qgc2V0IHRoZSByZW1haW5pbmcgZmllbGRzIGFuZCBmbGFncywgdGhleSBhcmUgbWVhbmluZ2xlc3MgaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXJlcWJ1ZnMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKaW5kZXggYmFiMzgwOC4uMWMwODE2MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKQEAgLTU0LDIzICs1NCwyMyBAQAogYWxsb2NhdGVkIHdpdGggdGhpcyBpb2N0bCBiZWZvcmUgdGhleSBjYW4gYmUgbWFwcGVkIGludG8gdGhlCiBhcHBsaWNhdGlvbidzIGFkZHJlc3Mgc3BhY2UuIFVzZXIgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGJ5CiBhcHBsaWNhdGlvbnMgdGhlbXNlbHZlcywgYW5kIHRoaXMgaW9jdGwgaXMgbWVyZWx5IHVzZWQgdG8gc3dpdGNoIHRoZQotZHJpdmVyIGludG8gdXNlciBwb2ludGVyIEkvTyBtb2RlLjwvcGFyYT4KK2RyaXZlciBpbnRvIHVzZXIgcG9pbnRlciBJL08gbW9kZSBhbmQgdG8gc2V0dXAgc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzLjwvcGFyYT4KIAotICAgIDxwYXJhPlRvIGFsbG9jYXRlIGRldmljZSBidWZmZXJzIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIHRocmVlCi1maWVsZHMgb2YgYSA8c3RydWN0bmFtZT52NGwyX3JlcXVlc3RidWZmZXJzPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUuCisgICAgPHBhcmE+VG8gYWxsb2NhdGUgZGV2aWNlIGJ1ZmZlcnMgYXBwbGljYXRpb25zIGluaXRpYWxpemUgYWxsCitmaWVsZHMgb2YgdGhlIDxzdHJ1Y3RuYW1lPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS4KIFRoZXkgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHRoZSByZXNwZWN0aXZlCiBzdHJlYW0gb3IgYnVmZmVyIHR5cGUsIHRoZSA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiBmaWVsZCB0bwotdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMsIGFuZCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KLW11c3QgYmUgc2V0IHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4uIFdoZW4gdGhlIGlvY3RsCi1pcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBhdHRlbXB0cyB0bwotYWxsb2NhdGUgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnVmZmVycyBhbmQgc3RvcmVzIHRoZSBhY3R1YWwgbnVtYmVyCit0aGUgZGVzaXJlZCBudW1iZXIgb2YgYnVmZmVycywgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+CittdXN0IGJlIHNldCB0byB0aGUgcmVxdWVzdGVkIEkvTyBtZXRob2QgYW5kIHRoZSByZXNlcnZlZCBhcnJheQorbXVzdCBiZSB6ZXJvZWQuIFdoZW4gdGhlIGlvY3RsCitpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gYWxsb2NhdGUKK3RoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgYW5kIGl0IHN0b3JlcyB0aGUgYWN0dWFsIG51bWJlcgogYWxsb2NhdGVkIGluIHRoZSA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiBmaWVsZC4gSXQgY2FuIGJlCiBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQsIGV2ZW4gemVybywgd2hlbiB0aGUgZHJpdmVyIHJ1bnMgb3V0Ci1vZiBmcmVlIG1lbW9yeS4gQSBsYXJnZXIgbnVtYmVyIGlzIHBvc3NpYmxlIHdoZW4gdGhlIGRyaXZlciByZXF1aXJlcwotbW9yZSBidWZmZXJzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS48Zm9vdG5vdGU+Ci0JPHBhcmE+Rm9yIGV4YW1wbGUgdmlkZW8gb3V0cHV0IHJlcXVpcmVzIGF0IGxlYXN0IHR3byBidWZmZXJzLAorb2YgZnJlZSBtZW1vcnkuIEEgbGFyZ2VyIG51bWJlciBpcyBhbHNvIHBvc3NpYmxlIHdoZW4gdGhlIGRyaXZlciByZXF1aXJlcworbW9yZSBidWZmZXJzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gRm9yIGV4YW1wbGUgdmlkZW8gb3V0cHV0IHJlcXVpcmVzIGF0IGxlYXN0IHR3byBidWZmZXJzLAogb25lIGRpc3BsYXllZCBhbmQgb25lIGZpbGxlZCBieSB0aGUgYXBwbGljYXRpb24uPC9wYXJhPgotCTwvZm9vdG5vdGU+IFdoZW4gbWVtb3J5IG1hcHBpbmcgSS9PIGlzIG5vdCBzdXBwb3J0ZWQgdGhlIGlvY3RsCisgICAgPHBhcmE+V2hlbiB0aGUgSS9PIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIHRoZSBpb2N0bAogcmV0dXJucyBhbiAmRUlOVkFMOy48L3BhcmE+CiAKICAgICA8cGFyYT5BcHBsaWNhdGlvbnMgY2FuIGNhbGwgPGNvbnN0YW50PlZJRElPQ19SRVFCVUZTPC9jb25zdGFudD4KQEAgLTgxLDE0ICs4MSw2IEBACiByZWFzb24gd2h5IG11bm1hcCgpcGluZyBvbmUgb3IgZXZlbiBhbGwgYnVmZmVycyBtdXN0IGltcGx5CiBzdHJlYW1vZmYuLS0+PC9wYXJhPgogCi0gICAgPHBhcmE+VG8gbmVnb3RpYXRlIHVzZXIgcG9pbnRlciBJL08sIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIG9ubHkKLXRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCBzZXQKLTxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiB0bwotPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50Pi4gV2hlbiB0aGUgaW9jdGwgaXMgY2FsbGVkCi13aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHByZXBhcmVzIGZvciB1c2VyIHBvaW50ZXIKLUkvTywgd2hlbiB0aGlzIEkvTyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCB0aGUgaW9jdGwgcmV0dXJucyBhbgotJkVJTlZBTDsuPC9wYXJhPgotCiAgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj4KICAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT48L3RpdGxlPgogICAgICAgPHRncm91cCBjb2xzPSIzIj4KQEAgLTk3LDkgKzg5LDcgQEAKIAkgIDxyb3c+CiAJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CiAJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+Ci0JICAgIDxlbnRyeT5UaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgcmVxdWVzdGVkIG9yIGdyYW50ZWQuIFRoaXMKLWZpZWxkIGlzIG9ubHkgdXNlZCB3aGVuIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBpcyBzZXQgdG8KLTxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4uPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgb3IgZ3JhbnRlZC48L2VudHJ5PgogCSAgPC9yb3c+CiAJICA8cm93PgogCSAgICA8ZW50cnk+JnY0bDItYnVmLXR5cGU7PC9lbnRyeT4KQEAgLTEyMCw3ICsxMTAsNyBAQAogCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgogCSAgICA8ZW50cnk+QSBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KIChkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQKLWhpZ2hlci48L2VudHJ5PgoraGlnaGVyLiBUaGlzIGFycmF5IHNob3VsZCBiZSB6ZXJvZWQgYnkgYXBwbGljYXRpb25zLjwvZW50cnk+CiAJICA8L3Jvdz4KIAk8L3Rib2R5PgogICAgICAgPC90Z3JvdXA+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCmluZGV4IDliYjYyZjcuLjcxYjZmNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCkBAIC02LDE2ICs2LDIyIEBACiAJLSBSZXZpZXcgQ2hlY2tsaXN0IGZvciBSQ1UgUGF0Y2hlcwogbGlzdFJDVS50eHQKIAktIFVzaW5nIFJDVSB0byBQcm90ZWN0IFJlYWQtTW9zdGx5IExpbmtlZCBMaXN0cworbG9ja2RlcC50eHQKKwktIFJDVSBhbmQgbG9ja2RlcCBjaGVja2luZwogTk1JLVJDVS50eHQKIAktIFVzaW5nIFJDVSB0byBQcm90ZWN0IER5bmFtaWMgTk1JIEhhbmRsZXJzCityY3ViYXJyaWVyLnR4dAorCS0gUkNVIGFuZCBVbmxvYWRhYmxlIE1vZHVsZXMKK3JjdWxpc3RfbnVsbHMudHh0CisJLSBSQ1UgbGlzdCBwcmltaXRpdmVzIGZvciB1c2Ugd2l0aCBTTEFCX0RFU1RST1lfQllfUkNVCiByY3VyZWYudHh0CiAJLSBSZWZlcmVuY2UtY291bnQgZGVzaWduIGZvciBlbGVtZW50cyBvZiBsaXN0cy9hcnJheXMgcHJvdGVjdGVkIGJ5IFJDVQogcmN1LnR4dAogCS0gUkNVIENvbmNlcHRzCi1yY3ViYXJyaWVyLnR4dAotCS0gVW5sb2FkaW5nIG1vZHVsZXMgdGhhdCB1c2UgUkNVIGNhbGxiYWNrcwogUlRGUC50eHQKIAktIExpc3Qgb2YgUkNVIHBhcGVycyAoYmlibGlvZ3JhcGh5KSBnb2luZyBiYWNrIHRvIDE5ODAuCitzdGFsbHdhcm4udHh0CisJLSBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmdzIChDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUikKIHRvcnR1cmUudHh0CiAJLSBSQ1UgVG9ydHVyZSBUZXN0IE9wZXJhdGlvbiAoQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QpCiB0cmFjZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKaW5kZXggZDJiODUyMy4uNWFlYTQ1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKQEAgLTI1LDEwICsyNSwxMCBAQAogb3B0aW1pemVkIGZvciBtb2Rlcm4gY29tcHV0ZXIgc3lzdGVtcywgd2hpY2ggaXMgbm90IHN1cnByaXNpbmcgZ2l2ZW4KIHRoYXQgdGhlc2Ugb3ZlcmhlYWRzIHdlcmUgbm90IHNvIGV4cGVuc2l2ZSBpbiB0aGUgbWlkLTgwcy4gIE5vbmV0aGVsZXNzLAogcGFzc2l2ZSBzZXJpYWxpemF0aW9uIGFwcGVhcnMgdG8gYmUgdGhlIGZpcnN0IGRlZmVycmVkLWRlc3RydWN0aW9uCi1tZWNoYW5pc20gdG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uLiAgRnVydGhlcm1vcmUsIHRoZSByZWxldmFudCBwYXRlbnQgaGFzCi1sYXBzZWQsIHNvIHRoaXMgYXBwcm9hY2ggbWF5IGJlIHVzZWQgaW4gbm9uLUdQTCBzb2Z0d2FyZSwgaWYgZGVzaXJlZC4KLShJbiBjb250cmFzdCwgdXNlIG9mIFJDVSBpcyBwZXJtaXR0ZWQgb25seSBpbiBzb2Z0d2FyZSBsaWNlbnNlZCB1bmRlcgotR1BMLiAgU29ycnkhISEpCittZWNoYW5pc20gdG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uLiAgRnVydGhlcm1vcmUsIHRoZSByZWxldmFudCBwYXRlbnQKK2hhcyBsYXBzZWQsIHNvIHRoaXMgYXBwcm9hY2ggbWF5IGJlIHVzZWQgaW4gbm9uLUdQTCBzb2Z0d2FyZSwgaWYgZGVzaXJlZC4KKyhJbiBjb250cmFzdCwgaW1wbGVtZW50YXRpb24gb2YgUkNVIGlzIHBlcm1pdHRlZCBvbmx5IGluIHNvZnR3YXJlIGxpY2Vuc2VkCit1bmRlciBlaXRoZXIgR1BMIG9yIExHUEwuICBTb3JyeSEhISkKIAogSW4gMTk5MCwgUHVnaCBbUHVnaDkwXSBub3RlZCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tpbmcgd2hpY2ggdGhyZWFkcwogd2VyZSByZWFkaW5nIGEgZ2l2ZW4gZGF0YSBzdHJ1Y3R1cmUgcGVybWl0dGVkIGRlZmVycmVkIGZyZWUgdG8gb3BlcmF0ZQpAQCAtMTUwLDYgKzE1MCwxOCBAQAogTFdOICJXaGF0IGlzIFJDVT8iIHNlcmllcyBbUGF1bEVNY0tlbm5leTIwMDdXaGF0SXNSQ1VGdW5kYW1lbnRhbGx5LAogUGF1bEVNY0tlbm5leTIwMDhXaGF0SXNSQ1VVc2FnZSwgYW5kIFBhdWxFTWNLZW5uZXkyMDA4V2hhdElzUkNVQVBJXS4KIAorMjAwOCBzYXcgYSBqb3VybmFsIHBhcGVyIG9uIHJlYWwtdGltZSBSQ1UgW0RpbmFrYXJHdW5pZ3VudGFsYTIwMDhJQk1TeXNKXSwKK2EgaGlzdG9yeSBvZiBob3cgTGludXggY2hhbmdlZCBSQ1UgbW9yZSB0aGFuIFJDVSBjaGFuZ2VkIExpbnV4CitbUGF1bEVNY0tlbm5leTIwMDhSQ1VPU1JdLCBhbmQgYSBkZXNpZ24gb3ZlcnZpZXcgb2YgaGllcmFyY2hpY2FsIFJDVQorW1BhdWxFTWNLZW5uZXkyMDA4SGllcmFyY2hpY2FsUkNVXS4KKworMjAwOSBpbnRyb2R1Y2VkIHVzZXItbGV2ZWwgUkNVIGFsZ29yaXRobXMgW1BhdWxFTWNLZW5uZXkyMDA5TWFsaWNpb3VzVVJDVV0sCit3aGljaCBNYXRoaWV1IERlc25veWVycyBpcyBub3cgbWFpbnRhaW5pbmcgW01hdGhpZXVEZXNub3llcnMyMDA5VVJDVV0KK1tNYXRoaWV1RGVzbm95ZXJzUGhEXS4gIFRJTllfUkNVIFtQYXVsRU1jS2VubmV5MjAwOUJsb2F0V2F0Y2hSQ1VdIG1hZGUKK2l0cyBhcHBlYXJhbmNlLCBhcyBkaWQgZXhwZWRpdGVkIFJDVSBbUGF1bEVNY0tlbm5leTIwMDlleHBlZGl0ZWRSQ1VdLgorVGhlIHByb2JsZW0gb2YgcmVzaXplYWJsZSBSQ1UtcHJvdGVjdGVkIGhhc2ggdGFibGVzIG1heSBub3cgYmUgb24gYSBwYXRoCit0byBhIHNvbHV0aW9uIFtKb3NoVHJpcGxldHQyMDA5UlBIYXNoXS4KKwogQmlidGV4IEVudHJpZXMKIAogQGFydGljbGV7S3VuZzgwCkBAIC03MzAsNiArNzQyLDExIEBACiAiCiB9CiAKKyMKKyMJIldoYXQgaXMgUkNVPyIgTFdOIHNlcmllcy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiBAYXJ0aWNsZXtEaW5ha2FyR3VuaWd1bnRhbGEyMDA4SUJNU3lzSgogLGF1dGhvcj0iRC4gR3VuaWd1bnRhbGEgYW5kIFAuIEUuIE1jS2VubmV5IGFuZCBKLiBUcmlwbGV0dCBhbmQgSi4gV2FscG9sZSIKICx0aXRsZT0iVGhlIHJlYWQtY29weS11cGRhdGUgbWVjaGFuaXNtIGZvciBzdXBwb3J0aW5nIHJlYWwtdGltZSBhcHBsaWNhdGlvbnMgb24gc2hhcmVkLW1lbW9yeSBtdWx0aXByb2Nlc3NvciBzeXN0ZW1zIHdpdGgge0xpbnV4fSIKQEAgLTgyMCwzICs4MzcsMzkgQEAKIAlVbmlwcm9jZXNzb3IgYXNzdW1wdGlvbnMgYWxsb3cgc2ltcGxpZmllZCBSQ1UgaW1wbGVtZW50YXRpb24uCiAiCiB9CisKK0B1bnB1Ymxpc2hlZHtQYXVsRU1jS2VubmV5MjAwOWV4cGVkaXRlZFJDVQorLEF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSIKKyxUaXRsZT0iW3tQQVRDSH0gLXRpcCAwLzNdIGV4cGVkaXRlZCAnYmlnIGhhbW1lcicge1JDVX0gZ3JhY2UgcGVyaW9kcyIKKyxtb250aD0iSnVuZSIKKyxkYXk9IjI1IgorLHllYXI9IjIwMDkiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vbGttbC5vcmcvbGttbC8yMDA5LzYvMjUvMzA2fQorW1ZpZXdlZCBBdWd1c3QgMTYsIDIwMDldIgorLGFubm90YXRpb249IgorCUZpcnN0IHBvc3Rpbmcgb2YgZXhwZWRpdGVkIFJDVSB0byBiZSBhY2NlcHRlZCBpbnRvIC10aXAuCisiCit9CisKK0B1bnB1Ymxpc2hlZHtKb3NoVHJpcGxldHQyMDA5UlBIYXNoCissQXV0aG9yPSJKb3NoIFRyaXBsZXR0IgorLFRpdGxlPSJTY2FsYWJsZSBjb25jdXJyZW50IGhhc2ggdGFibGVzIHZpYSByZWxhdGl2aXN0aWMgcHJvZ3JhbW1pbmciCissbW9udGg9IlNlcHRlbWJlciIKKyx5ZWFyPSIyMDA5IgorLG5vdGU9IkxpbnV4IFBsdW1iZXJzIENvbmZlcmVuY2UgcHJlc2VudGF0aW9uIgorLGFubm90YXRpb249IgorCVJQIGZ1biB3aXRoIGhhc2ggdGFibGVzLgorIgorfQorCitAcGhkdGhlc2lze01hdGhpZXVEZXNub3llcnNQaEQKKywgdGl0bGUgID0gIkxvdy1JbXBhY3QgT3BlcmF0aW5nIFN5c3RlbSBUcmFjaW5nIgorLCBhdXRob3IgPSAiTWF0aGlldSBEZXNub3llcnMiCissIHNjaG9vbCA9ICJFY29sZSBQb2x5dGVjaG5pcXVlIGRlIE1vbnRyXCd7ZX1hbCIKKywgbW9udGggID0gIkRlY2VtYmVyIgorLCB5ZWFyICAgPSAyMDA5Cissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3Lmx0dG5nLm9yZy9wdWIvdGhlc2lzL2Rlc25veWVycy1kaXNzZXJ0YXRpb24tMjAwOS0xMi5wZGZ9CitbVmlld2VkIERlY2VtYmVyIDksIDIwMDldIgorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKaW5kZXggNTE1MjVhMy4uY2JjMTgwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CkBAIC04LDEzICs4LDEyIEBACiBvdmVyIGEgcmF0aGVyIGxvbmcgcGVyaW9kIG9mIHRpbWUsIGJ1dCBpbXByb3ZlbWVudHMgYXJlIGFsd2F5cyB3ZWxjb21lIQogCiAwLglJcyBSQ1UgYmVpbmcgYXBwbGllZCB0byBhIHJlYWQtbW9zdGx5IHNpdHVhdGlvbj8gIElmIHRoZSBkYXRhCi0Jc3RydWN0dXJlIGlzIHVwZGF0ZWQgbW9yZSB0aGFuIGFib3V0IDEwJSBvZiB0aGUgdGltZSwgdGhlbgotCXlvdSBzaG91bGQgc3Ryb25nbHkgY29uc2lkZXIgc29tZSBvdGhlciBhcHByb2FjaCwgdW5sZXNzCi0JZGV0YWlsZWQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzIHNob3cgdGhhdCBSQ1UgaXMgbm9uZXRoZWxlc3MKLQl0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gIFllcywgeW91IG1pZ2h0IHRoaW5rIG9mIFJDVQotCWFzIHNpbXBseSBjdXR0aW5nIG92ZXJoZWFkIG9mZiBvZiB0aGUgcmVhZGVycyBhbmQgaW1wb3NpbmcgaXQKLQlvbiB0aGUgd3JpdGVycy4gIFRoYXQgaXMgZXhhY3RseSB3aHkgbm9ybWFsIHVzZXMgb2YgUkNVIHdpbGwKLQlkbyBtdWNoIG1vcmUgcmVhZGluZyB0aGFuIHVwZGF0aW5nLgorCXN0cnVjdHVyZSBpcyB1cGRhdGVkIG1vcmUgdGhhbiBhYm91dCAxMCUgb2YgdGhlIHRpbWUsIHRoZW4geW91CisJc2hvdWxkIHN0cm9uZ2x5IGNvbnNpZGVyIHNvbWUgb3RoZXIgYXBwcm9hY2gsIHVubGVzcyBkZXRhaWxlZAorCXBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyBzaG93IHRoYXQgUkNVIGlzIG5vbmV0aGVsZXNzIHRoZSByaWdodAorCXRvb2wgZm9yIHRoZSBqb2IuICBZZXMsIFJDVSBkb2VzIHJlZHVjZSByZWFkLXNpZGUgb3ZlcmhlYWQgYnkKKwlpbmNyZWFzaW5nIHdyaXRlLXNpZGUgb3ZlcmhlYWQsIHdoaWNoIGlzIGV4YWN0bHkgd2h5IG5vcm1hbCB1c2VzCisJb2YgUkNVIHdpbGwgZG8gbXVjaCBtb3JlIHJlYWRpbmcgdGhhbiB1cGRhdGluZy4KIAogCUFub3RoZXIgZXhjZXB0aW9uIGlzIHdoZXJlIHBlcmZvcm1hbmNlIGlzIG5vdCBhbiBpc3N1ZSwgYW5kIFJDVQogCXByb3ZpZGVzIGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbi4gIEFuIGV4YW1wbGUgb2YgdGhpcyBzaXR1YXRpb24KQEAgLTM1LDEzICszNCwxMyBAQAogCiAJSWYgeW91IGNob29zZSAjYiwgYmUgcHJlcGFyZWQgdG8gZGVzY3JpYmUgaG93IHlvdSBoYXZlIGhhbmRsZWQKIAltZW1vcnkgYmFycmllcnMgb24gd2Vha2x5IG9yZGVyZWQgbWFjaGluZXMgKHByZXR0eSBtdWNoIGFsbCBvZgotCXRoZW0gLS0gZXZlbiB4ODYgYWxsb3dzIHJlYWRzIHRvIGJlIHJlb3JkZXJlZCksIGFuZCBiZSBwcmVwYXJlZAotCXRvIGV4cGxhaW4gd2h5IHRoaXMgYWRkZWQgY29tcGxleGl0eSBpcyB3b3J0aHdoaWxlLiAgSWYgeW91Ci0JY2hvb3NlICNjLCBiZSBwcmVwYXJlZCB0byBleHBsYWluIGhvdyB0aGlzIHNpbmdsZSB0YXNrIGRvZXMgbm90Ci0JYmVjb21lIGEgbWFqb3IgYm90dGxlbmVjayBvbiBiaWcgbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMgKGZvcgotCWV4YW1wbGUsIGlmIHRoZSB0YXNrIGlzIHVwZGF0aW5nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIGl0c2VsZgotCXRoYXQgb3RoZXIgdGFza3MgY2FuIHJlYWQsIHRoZXJlIGJ5IGRlZmluaXRpb24gY2FuIGJlIG5vCi0JYm90dGxlbmVjaykuCisJdGhlbSAtLSBldmVuIHg4NiBhbGxvd3MgbGF0ZXIgbG9hZHMgdG8gYmUgcmVvcmRlcmVkIHRvIHByZWNlZGUKKwllYXJsaWVyIHN0b3JlcyksIGFuZCBiZSBwcmVwYXJlZCB0byBleHBsYWluIHdoeSB0aGlzIGFkZGVkCisJY29tcGxleGl0eSBpcyB3b3J0aHdoaWxlLiAgSWYgeW91IGNob29zZSAjYywgYmUgcHJlcGFyZWQgdG8KKwlleHBsYWluIGhvdyB0aGlzIHNpbmdsZSB0YXNrIGRvZXMgbm90IGJlY29tZSBhIG1ham9yIGJvdHRsZW5lY2sgb24KKwliaWcgbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMgKGZvciBleGFtcGxlLCBpZiB0aGUgdGFzayBpcyB1cGRhdGluZworCWluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIGl0c2VsZiB0aGF0IG90aGVyIHRhc2tzIGNhbiByZWFkLCB0aGVyZQorCWJ5IGRlZmluaXRpb24gY2FuIGJlIG5vIGJvdHRsZW5lY2spLgogCiAyLglEbyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBtYWtlIHByb3BlciB1c2Ugb2YKIAlyY3VfcmVhZF9sb2NrKCkgYW5kIGZyaWVuZHM/ICBUaGVzZSBwcmltaXRpdmVzIGFyZSBuZWVkZWQKQEAgLTUxLDggKzUwLDEwIEBACiAJYWN0dWFyaWFsIHJpc2sgb2YgeW91ciBrZXJuZWwuCiAKIAlBcyBhIHJvdWdoIHJ1bGUgb2YgdGh1bWIsIGFueSBkZXJlZmVyZW5jZSBvZiBhbiBSQ1UtcHJvdGVjdGVkCi0JcG9pbnRlciBtdXN0IGJlIGNvdmVyZWQgYnkgcmN1X3JlYWRfbG9jaygpIG9yIHJjdV9yZWFkX2xvY2tfYmgoKQotCW9yIGJ5IHRoZSBhcHByb3ByaWF0ZSB1cGRhdGUtc2lkZSBsb2NrLgorCXBvaW50ZXIgbXVzdCBiZSBjb3ZlcmVkIGJ5IHJjdV9yZWFkX2xvY2soKSwgcmN1X3JlYWRfbG9ja19iaCgpLAorCXJjdV9yZWFkX2xvY2tfc2NoZWQoKSwgb3IgYnkgdGhlIGFwcHJvcHJpYXRlIHVwZGF0ZS1zaWRlIGxvY2suCisJRGlzYWJsaW5nIG9mIHByZWVtcHRpb24gY2FuIHNlcnZlIGFzIHJjdV9yZWFkX2xvY2tfc2NoZWQoKSwgYnV0CisJaXMgbGVzcyByZWFkYWJsZS4KIAogMy4JRG9lcyB0aGUgdXBkYXRlIGNvZGUgdG9sZXJhdGUgY29uY3VycmVudCBhY2Nlc3Nlcz8KIApAQCAtNjIsMjUgKzYzLDI3IEBACiAJb2Ygd2F5cyB0byBoYW5kbGUgdGhpcyBjb25jdXJyZW5jeSwgZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb246CiAKIAlhLglVc2UgdGhlIFJDVSB2YXJpYW50cyBvZiB0aGUgbGlzdCBhbmQgaGxpc3QgdXBkYXRlCi0JCXByaW1pdGl2ZXMgdG8gYWRkLCByZW1vdmUsIGFuZCByZXBsYWNlIGVsZW1lbnRzIG9uIGFuCi0JCVJDVS1wcm90ZWN0ZWQgbGlzdC4gIEFsdGVybmF0aXZlbHksIHVzZSB0aGUgUkNVLXByb3RlY3RlZAotCQl0cmVlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgTGludXgga2VybmVsLgorCQlwcmltaXRpdmVzIHRvIGFkZCwgcmVtb3ZlLCBhbmQgcmVwbGFjZSBlbGVtZW50cyBvbgorCQlhbiBSQ1UtcHJvdGVjdGVkIGxpc3QuCUFsdGVybmF0aXZlbHksIHVzZSB0aGUgb3RoZXIKKwkJUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8KKwkJdGhlIExpbnV4IGtlcm5lbC4KIAogCQlUaGlzIGlzIGFsbW9zdCBhbHdheXMgdGhlIGJlc3QgYXBwcm9hY2guCiAKIAliLglQcm9jZWVkIGFzIGluIChhKSBhYm92ZSwgYnV0IGFsc28gbWFpbnRhaW4gcGVyLWVsZW1lbnQKIAkJbG9ja3MgKHRoYXQgYXJlIGFjcXVpcmVkIGJ5IGJvdGggcmVhZGVycyBhbmQgd3JpdGVycykKIAkJdGhhdCBndWFyZCBwZXItZWxlbWVudCBzdGF0ZS4gIE9mIGNvdXJzZSwgZmllbGRzIHRoYXQKLQkJdGhlIHJlYWRlcnMgcmVmcmFpbiBmcm9tIGFjY2Vzc2luZyBjYW4gYmUgZ3VhcmRlZCBieSB0aGUKLQkJdXBkYXRlLXNpZGUgbG9jay4KKwkJdGhlIHJlYWRlcnMgcmVmcmFpbiBmcm9tIGFjY2Vzc2luZyBjYW4gYmUgZ3VhcmRlZCBieQorCQlzb21lIG90aGVyIGxvY2sgYWNxdWlyZWQgb25seSBieSB1cGRhdGVycywgaWYgZGVzaXJlZC4KIAogCQlUaGlzIHdvcmtzIHF1aXRlIHdlbGwsIGFsc28uCiAKIAljLglNYWtlIHVwZGF0ZXMgYXBwZWFyIGF0b21pYyB0byByZWFkZXJzLiAgRm9yIGV4YW1wbGUsCi0JCXBvaW50ZXIgdXBkYXRlcyB0byBwcm9wZXJseSBhbGlnbmVkIGZpZWxkcyB3aWxsIGFwcGVhcgotCQlhdG9taWMsIGFzIHdpbGwgaW5kaXZpZHVhbCBhdG9taWMgcHJpbWl0aXZlcy4gIE9wZXJhdGlvbnMKLQkJcGVyZm9ybWVkIHVuZGVyIGEgbG9jayBhbmQgc2VxdWVuY2VzIG9mIG11bHRpcGxlIGF0b21pYwotCQlwcmltaXRpdmVzIHdpbGwgLW5vdC0gYXBwZWFyIHRvIGJlIGF0b21pYy4KKwkJcG9pbnRlciB1cGRhdGVzIHRvIHByb3Blcmx5IGFsaWduZWQgZmllbGRzIHdpbGwKKwkJYXBwZWFyIGF0b21pYywgYXMgd2lsbCBpbmRpdmlkdWFsIGF0b21pYyBwcmltaXRpdmVzLgorCQlTZXF1ZW5jZXMgb2YgcGVyYXRpb25zIHBlcmZvcm1lZCB1bmRlciBhIGxvY2sgd2lsbCAtbm90LQorCQlhcHBlYXIgdG8gYmUgYXRvbWljIHRvIFJDVSByZWFkZXJzLCBub3Igd2lsbCBzZXF1ZW5jZXMKKwkJb2YgbXVsdGlwbGUgYXRvbWljIHByaW1pdGl2ZXMuCiAKIAkJVGhpcyBjYW4gd29yaywgYnV0IGlzIHN0YXJ0aW5nIHRvIGdldCBhIGJpdCB0cmlja3kuCiAKQEAgLTk4LDkgKzEwMSw5IEBACiAJCWEgbmV3IHN0cnVjdHVyZSBjb250YWluaW5nIHVwZGF0ZWQgdmFsdWVzLgogCiA0LglXZWFrbHkgb3JkZXJlZCBDUFVzIHBvc2Ugc3BlY2lhbCBjaGFsbGVuZ2VzLiAgQWxtb3N0IGFsbCBDUFVzCi0JYXJlIHdlYWtseSBvcmRlcmVkIC0tIGV2ZW4gaTM4NiBDUFVzIGFsbG93IHJlYWRzIHRvIGJlIHJlb3JkZXJlZC4KLQlSQ1UgY29kZSBtdXN0IHRha2UgYWxsIG9mIHRoZSBmb2xsb3dpbmcgbWVhc3VyZXMgdG8gcHJldmVudAotCW1lbW9yeS1jb3JydXB0aW9uIHByb2JsZW1zOgorCWFyZSB3ZWFrbHkgb3JkZXJlZCAtLSBldmVuIHg4NiBDUFVzIGFsbG93IGxhdGVyIGxvYWRzIHRvIGJlCisJcmVvcmRlcmVkIHRvIHByZWNlZGUgZWFybGllciBzdG9yZXMuICBSQ1UgY29kZSBtdXN0IHRha2UgYWxsIG9mCisJdGhlIGZvbGxvd2luZyBtZWFzdXJlcyB0byBwcmV2ZW50IG1lbW9yeS1jb3JydXB0aW9uIHByb2JsZW1zOgogCiAJYS4JUmVhZGVycyBtdXN0IG1haW50YWluIHByb3BlciBvcmRlcmluZyBvZiB0aGVpciBtZW1vcnkKIAkJYWNjZXNzZXMuICBUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGVuc3VyZXMgdGhhdApAQCAtMTEzLDE0ICsxMTYsMjUgQEAKIAkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyBhbHNvIGFuIGV4Y2VsbGVudAogCQlkb2N1bWVudGF0aW9uIGFpZCwgbGV0dGluZyB0aGUgcGVyc29uIHJlYWRpbmcgdGhlIGNvZGUKIAkJa25vdyBleGFjdGx5IHdoaWNoIHBvaW50ZXJzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVLgorCQlQbGVhc2Ugbm90ZSB0aGF0IGNvbXBpbGVycyBjYW4gYWxzbyByZW9yZGVyIGNvZGUsIGFuZAorCQl0aGV5IGFyZSBiZWNvbWluZyBpbmNyZWFzaW5nbHkgYWdncmVzc2l2ZSBhYm91dCBkb2luZworCQlqdXN0IHRoYXQuICBUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIHRoZXJlZm9yZQorCQlhbHNvIHByZXZlbnRzIGRlc3RydWN0aXZlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuCiAKLQkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyB1c2VkIGJ5IHRoZSB2YXJpb3VzCi0JCSJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2ggYXMgdGhlCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuICBOb3RlIHRoYXQgaXQgaXMgcGVyZmVjdGx5Ci0JCWxlZ2FsIChpZiByZWR1bmRhbnQpIGZvciB1cGRhdGUtc2lkZSBjb2RlIHRvIHVzZQotCQlyY3VfZGVyZWZlcmVuY2UoKSBhbmQgdGhlICJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsCi0JCXByaW1pdGl2ZXMuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gY29kZQotCQl0aGF0IGlzIGNvbW1vbiB0byByZWFkZXJzIGFuZCB1cGRhdGVycy4KKwkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyB1c2VkIGJ5IHRoZQorCQl2YXJpb3VzICJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2gKKwkJYXMgdGhlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuICBOb3RlIHRoYXQgaXQgaXMKKwkJcGVyZmVjdGx5IGxlZ2FsIChpZiByZWR1bmRhbnQpIGZvciB1cGRhdGUtc2lkZSBjb2RlIHRvCisJCXVzZSByY3VfZGVyZWZlcmVuY2UoKSBhbmQgdGhlICJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsCisJCXByaW1pdGl2ZXMuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gY29kZSB0aGF0CisJCWlzIGNvbW1vbiB0byByZWFkZXJzIGFuZCB1cGRhdGVycy4gIEhvd2V2ZXIsIGxvY2tkZXAKKwkJd2lsbCBjb21wbGFpbiBpZiB5b3UgYWNjZXNzIHJjdV9kZXJlZmVyZW5jZSgpIG91dHNpZGUKKwkJb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgU2VlIGxvY2tkZXAudHh0CisJCXRvIGxlYXJuIHdoYXQgdG8gZG8gYWJvdXQgdGhpcy4KKworCQlPZiBjb3Vyc2UsIG5laXRoZXIgcmN1X2RlcmVmZXJlbmNlKCkgbm9yIHRoZSAiX3JjdSgpIgorCQlsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzIGNhbiBzdWJzdGl0dXRlIGZvciBhIGdvb2QKKwkJY29uY3VycmVuY3kgZGVzaWduIGNvb3JkaW5hdGluZyBhbW9uZyBtdWx0aXBsZSB1cGRhdGVycy4KIAogCWIuCUlmIHRoZSBsaXN0IG1hY3JvcyBhcmUgYmVpbmcgdXNlZCwgdGhlIGxpc3RfYWRkX3RhaWxfcmN1KCkKIAkJYW5kIGxpc3RfYWRkX3JjdSgpIHByaW1pdGl2ZXMgbXVzdCBiZSB1c2VkIGluIG9yZGVyCkBAIC0xMzUsMTEgKzE0OSwxNCBAQAogCQlyZWFkZXJzLiAgU2ltaWxhcmx5LCBpZiB0aGUgaGxpc3QgbWFjcm9zIGFyZSBiZWluZyB1c2VkLAogCQl0aGUgaGxpc3RfZGVsX3JjdSgpIHByaW1pdGl2ZSBpcyByZXF1aXJlZC4KIAotCQlUaGUgbGlzdF9yZXBsYWNlX3JjdSgpIHByaW1pdGl2ZSBtYXkgYmUgdXNlZCB0bwotCQlyZXBsYWNlIGFuIG9sZCBzdHJ1Y3R1cmUgd2l0aCBhIG5ldyBvbmUgaW4gYW4KLQkJUkNVLXByb3RlY3RlZCBsaXN0LgorCQlUaGUgbGlzdF9yZXBsYWNlX3JjdSgpIGFuZCBobGlzdF9yZXBsYWNlX3JjdSgpIHByaW1pdGl2ZXMKKwkJbWF5IGJlIHVzZWQgdG8gcmVwbGFjZSBhbiBvbGQgc3RydWN0dXJlIHdpdGggYSBuZXcgb25lCisJCWluIHRoZWlyIHJlc3BlY3RpdmUgdHlwZXMgb2YgUkNVLXByb3RlY3RlZCBsaXN0cy4KIAotCWQuCVVwZGF0ZXMgbXVzdCBlbnN1cmUgdGhhdCBpbml0aWFsaXphdGlvbiBvZiBhIGdpdmVuCisJZC4JUnVsZXMgc2ltaWxhciB0byAoNGIpIGFuZCAoNGMpIGFwcGx5IHRvIHRoZSAiaGxpc3RfbnVsbHMiCisJCXR5cGUgb2YgUkNVLXByb3RlY3RlZCBsaW5rZWQgbGlzdHMuCisKKwllLglVcGRhdGVzIG11c3QgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgYSBnaXZlbgogCQlzdHJ1Y3R1cmUgaGFwcGVucyBiZWZvcmUgcG9pbnRlcnMgdG8gdGhhdCBzdHJ1Y3R1cmUgYXJlCiAJCXB1YmxpY2l6ZWQuICBVc2UgdGhlIHJjdV9hc3NpZ25fcG9pbnRlcigpIHByaW1pdGl2ZQogCQl3aGVuIHB1YmxpY2l6aW5nIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSB0aGF0IGNhbgpAQCAtMTUxLDE2ICsxNjgsMzEgQEAKIAlpdCBjYW5ub3QgYmxvY2suCiAKIDYuCVNpbmNlIHN5bmNocm9uaXplX3JjdSgpIGNhbiBibG9jaywgaXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tCi0JYW55IHNvcnQgb2YgaXJxIGNvbnRleHQuICBEaXR0byBmb3Igc3luY2hyb25pemVfc2NoZWQoKSBhbmQKLQlzeW5jaHJvbml6ZV9zcmN1KCkuCisJYW55IHNvcnQgb2YgaXJxIGNvbnRleHQuICBUaGUgc2FtZSBydWxlIGFwcGxpZXMgZm9yCisJc3luY2hyb25pemVfcmN1X2JoKCksIHN5bmNocm9uaXplX3NjaGVkKCksIHN5bmNocm9uaXplX3NyY3UoKSwKKwlzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKCksIHN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQoKSwKKwlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZSgpLCBhbmQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKS4KIAotNy4JSWYgdGhlIHVwZGF0ZXIgdXNlcyBjYWxsX3JjdSgpLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlYWRlcnMKLQltdXN0IHVzZSByY3VfcmVhZF9sb2NrKCkgYW5kIHJjdV9yZWFkX3VubG9jaygpLiAgSWYgdGhlIHVwZGF0ZXIKLQl1c2VzIGNhbGxfcmN1X2JoKCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0IHVzZQotCXJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkuICBJZiB0aGUgdXBkYXRlcgotCXVzZXMgY2FsbF9yY3Vfc2NoZWQoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QKLQlkaXNhYmxlIHByZWVtcHRpb24uICBNaXhpbmcgdGhpbmdzIHVwIHdpbGwgcmVzdWx0IGluIGNvbmZ1c2lvbgotCWFuZCBicm9rZW4ga2VybmVscy4KKwlUaGUgZXhwZWRpdGVkIGZvcm1zIG9mIHRoZXNlIHByaW1pdGl2ZXMgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MKKwlhcyB0aGUgbm9uLWV4cGVkaXRlZCBmb3JtcywgYnV0IGV4cGVkaXRpbmcgaXMgYm90aCBleHBlbnNpdmUKKwlhbmQgdW5mcmllbmRseSB0byByZWFsLXRpbWUgd29ya2xvYWRzLglVc2Ugb2YgdGhlIGV4cGVkaXRlZAorCXByaW1pdGl2ZXMgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gcmFyZSBjb25maWd1cmF0aW9uLWNoYW5nZQorCW9wZXJhdGlvbnMgdGhhdCB3b3VsZCBub3Qgbm9ybWFsbHkgYmUgdW5kZXJ0YWtlbiB3aGlsZSBhIHJlYWwtdGltZQorCXdvcmtsb2FkIGlzIHJ1bm5pbmcuCisKKzcuCUlmIHRoZSB1cGRhdGVyIHVzZXMgY2FsbF9yY3UoKSBvciBzeW5jaHJvbml6ZV9yY3UoKSwgdGhlbiB0aGUKKwljb3JyZXNwb25kaW5nIHJlYWRlcnMgbXVzdCB1c2UgcmN1X3JlYWRfbG9jaygpIGFuZAorCXJjdV9yZWFkX3VubG9jaygpLiAgSWYgdGhlIHVwZGF0ZXIgdXNlcyBjYWxsX3JjdV9iaCgpIG9yCisJc3luY2hyb25pemVfcmN1X2JoKCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0CisJdXNlIHJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkuICBJZiB0aGUKKwl1cGRhdGVyIHVzZXMgY2FsbF9yY3Vfc2NoZWQoKSBvciBzeW5jaHJvbml6ZV9zY2hlZCgpLCB0aGVuCisJdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0IGRpc2FibGUgcHJlZW1wdGlvbiwgcG9zc2libHkKKwlieSBjYWxsaW5nIHJjdV9yZWFkX2xvY2tfc2NoZWQoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCkuCisJSWYgdGhlIHVwZGF0ZXIgdXNlcyBzeW5jaHJvbml6ZV9zcmN1KCksIHRoZSB0aGUgY29ycmVzcG9uZGluZworCXJlYWRlcnMgbXVzdCB1c2Ugc3JjdV9yZWFkX2xvY2soKSBhbmQgc3JjdV9yZWFkX3VubG9jaygpLAorCWFuZCB3aXRoIHRoZSBzYW1lIHNyY3Vfc3RydWN0LglUaGUgcnVsZXMgZm9yIHRoZSBleHBlZGl0ZWQKKwlwcmltaXRpdmVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlaXIgbm9uLWV4cGVkaXRlZCBjb3VudGVycGFydHMuCisJTWl4aW5nIHRoaW5ncyB1cCB3aWxsIHJlc3VsdCBpbiBjb25mdXNpb24gYW5kIGJyb2tlbiBrZXJuZWxzLgogCiAJT25lIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IHJjdV9yZWFkX2xvY2soKSBhbmQgcmN1X3JlYWRfdW5sb2NrKCkKIAltYXkgYmUgc3Vic3RpdHV0ZWQgZm9yIHJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkKQEAgLTIxMiw2ICsyNDQsOCBAQAogCWUuCVBlcmlvZGljYWxseSBpbnZva2Ugc3luY2hyb25pemVfcmN1KCksIHBlcm1pdHRpbmcgYSBsaW1pdGVkCiAJCW51bWJlciBvZiB1cGRhdGVzIHBlciBncmFjZSBwZXJpb2QuCiAKKwlUaGUgc2FtZSBjYXV0aW9ucyBhcHBseSB0byBjYWxsX3JjdV9iaCgpIGFuZCBjYWxsX3JjdV9zY2hlZCgpLgorCiA5LglBbGwgUkNVIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHdoaWNoIGluY2x1ZGUKIAlyY3VfZGVyZWZlcmVuY2UoKSwgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKSwKIAlsaXN0X2Zvcl9lYWNoX2NvbnRpbnVlX3JjdSgpLCBhbmQgbGlzdF9mb3JfZWFjaF9zYWZlX3JjdSgpLApAQCAtMjE5LDcgKzI1Myw5IEBACiAJbXVzdCBiZSBwcm90ZWN0ZWQgYnkgYXBwcm9wcmlhdGUgdXBkYXRlLXNpZGUgbG9ja3MuICBSQ1UKIAlyZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgYXJlIGRlbGltaXRlZCBieSByY3VfcmVhZF9sb2NrKCkKIAlhbmQgcmN1X3JlYWRfdW5sb2NrKCksIG9yIGJ5IHNpbWlsYXIgcHJpbWl0aXZlcyBzdWNoIGFzCi0JcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKS4KKwlyY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpLCBpbiB3aGljaCBjYXNlCisJdGhlIG1hdGNoaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBtdXN0IGJlIHVzZWQgaW4gb3JkZXIKKwl0byBrZWVwIGxvY2tkZXAgaGFwcHksIGluIHRoaXMgY2FzZSwgcmN1X2RlcmVmZXJlbmNlX2JoKCkuCiAKIAlUaGUgcmVhc29uIHRoYXQgaXQgaXMgcGVybWlzc2libGUgdG8gdXNlIFJDVSBsaXN0LXRyYXZlcnNhbAogCXByaW1pdGl2ZXMgd2hlbiB0aGUgdXBkYXRlLXNpZGUgbG9jayBpcyBoZWxkIGlzIHRoYXQgZG9pbmcgc28KQEAgLTIyOSw3ICsyNjUsOCBAQAogMTAuCUNvbnZlcnNlbHksIGlmIHlvdSBhcmUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLAogCWFuZCB5b3UgZG9uJ3QgaG9sZCB0aGUgYXBwcm9wcmlhdGUgdXBkYXRlLXNpZGUgbG9jaywgeW91IC1tdXN0LQogCXVzZSB0aGUgIl9yY3UoKSIgdmFyaWFudHMgb2YgdGhlIGxpc3QgbWFjcm9zLiAgRmFpbGluZyB0byBkbyBzbwotCXdpbGwgYnJlYWsgQWxwaGEgYW5kIGNvbmZ1c2UgcGVvcGxlIHJlYWRpbmcgeW91ciBjb2RlLgorCXdpbGwgYnJlYWsgQWxwaGEsIGNhdXNlIGFnZ3Jlc3NpdmUgY29tcGlsZXJzIHRvIGdlbmVyYXRlIGJhZCBjb2RlLAorCWFuZCBjb25mdXNlIHBlb3BsZSB0cnlpbmcgdG8gcmVhZCB5b3VyIGNvZGUuCiAKIDExLglOb3RlIHRoYXQgc3luY2hyb25pemVfcmN1KCkgLW9ubHktIGd1YXJhbnRlZXMgdG8gd2FpdCB1bnRpbAogCWFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIHJjdV9yZWFkX2xvY2soKS1wcm90ZWN0ZWQgUkNVIHJlYWQtc2lkZQpAQCAtMjM5LDE1ICsyNzYsMjEgQEAKIAlyY3VfcmVhZF9sb2NrKCktcHJvdGVjdGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgZG8gLW5vdC0KIAl1c2Ugc3luY2hyb25pemVfcmN1KCkuCiAKLQlJZiB5b3Ugd2FudCB0byB3YWl0IGZvciBzb21lIG9mIHRoZXNlIG90aGVyIHRoaW5ncywgeW91IG1pZ2h0Ci0JaW5zdGVhZCBuZWVkIHRvIHVzZSBzeW5jaHJvbml6ZV9pcnEoKSBvciBzeW5jaHJvbml6ZV9zY2hlZCgpLgorCVNpbWlsYXJseSwgZGlzYWJsaW5nIHByZWVtcHRpb24gaXMgbm90IGFuIGFjY2VwdGFibGUgc3Vic3RpdHV0ZQorCWZvciByY3VfcmVhZF9sb2NrKCkuICBDb2RlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHByZWVtcHRpb24KKwlkaXNhYmxpbmcgd2hlcmUgaXQgc2hvdWxkIGJlIHVzaW5nIHJjdV9yZWFkX2xvY2soKSB3aWxsIGJyZWFrCisJaW4gcmVhbC10aW1lIGtlcm5lbCBidWlsZHMuCisKKwlJZiB5b3Ugd2FudCB0byB3YWl0IGZvciBpbnRlcnJ1cHQgaGFuZGxlcnMsIE5NSSBoYW5kbGVycywgYW5kCisJY29kZSB1bmRlciB0aGUgaW5mbHVlbmNlIG9mIHByZWVtcHRfZGlzYWJsZSgpLCB5b3UgaW5zdGVhZAorCW5lZWQgdG8gdXNlIHN5bmNocm9uaXplX2lycSgpIG9yIHN5bmNocm9uaXplX3NjaGVkKCkuCiAKIDEyLglBbnkgbG9jayBhY3F1aXJlZCBieSBhbiBSQ1UgY2FsbGJhY2sgbXVzdCBiZSBhY3F1aXJlZCBlbHNld2hlcmUKIAl3aXRoIHNvZnRpcnEgZGlzYWJsZWQsIGUuZy4sIHZpYSBzcGluX2xvY2tfaXJxc2F2ZSgpLAogCXNwaW5fbG9ja19iaCgpLCBldGMuICBGYWlsaW5nIHRvIGRpc2FibGUgaXJxIG9uIGEgZ2l2ZW4KLQlhY3F1aXNpdGlvbiBvZiB0aGF0IGxvY2sgd2lsbCByZXN1bHQgaW4gZGVhZGxvY2sgYXMgc29vbiBhcyB0aGUKLQlSQ1UgY2FsbGJhY2sgaGFwcGVucyB0byBpbnRlcnJ1cHQgdGhhdCBhY3F1aXNpdGlvbidzIGNyaXRpY2FsCi0Jc2VjdGlvbi4KKwlhY3F1aXNpdGlvbiBvZiB0aGF0IGxvY2sgd2lsbCByZXN1bHQgaW4gZGVhZGxvY2sgYXMgc29vbiBhcworCXRoZSBSQ1Ugc29mdGlycSBoYW5kbGVyIGhhcHBlbnMgdG8gcnVuIHlvdXIgUkNVIGNhbGxiYWNrIHdoaWxlCisJaW50ZXJydXB0aW5nIHRoYXQgYWNxdWlzaXRpb24ncyBjcml0aWNhbCBzZWN0aW9uLgogCiAxMy4JUkNVIGNhbGxiYWNrcyBjYW4gYmUgYW5kIGFyZSBleGVjdXRlZCBpbiBwYXJhbGxlbC4gIEluIG1hbnkgY2FzZXMsCiAJdGhlIGNhbGxiYWNrIGNvZGUgc2ltcGx5IHdyYXBwZXJzIGFyb3VuZCBrZnJlZSgpLCBzbyB0aGF0IHRoaXMKQEAgLTI2NSwyOSArMzA4LDMwIEBACiAJbm90IHRoZSBjYXNlLCBhIHNlbGYtc3Bhd25pbmcgUkNVIGNhbGxiYWNrIHdvdWxkIHByZXZlbnQgdGhlCiAJdmljdGltIENQVSBmcm9tIGV2ZXIgZ29pbmcgb2ZmbGluZS4pCiAKLTE0LglTUkNVIChzcmN1X3JlYWRfbG9jaygpLCBzcmN1X3JlYWRfdW5sb2NrKCksIGFuZCBzeW5jaHJvbml6ZV9zcmN1KCkpCi0JbWF5IG9ubHkgYmUgaW52b2tlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4gIFVubGlrZSBvdGhlciBmb3JtcyBvZgotCVJDVSwgaXQgLWlzLSBwZXJtaXNzaWJsZSB0byBibG9jayBpbiBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbAotCXNlY3Rpb24gKGRlbWFya2VkIGJ5IHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF91bmxvY2soKSksCi0JaGVuY2UgdGhlICJTUkNVIjogInNsZWVwYWJsZSBSQ1UiLiAgUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UKLQlkb24ndCBuZWVkIHRvIHNsZWVwIGluIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgeW91IHNob3VsZAotCWJlIHVzaW5nIFJDVSByYXRoZXIgdGhhbiBTUkNVLCBiZWNhdXNlIFJDVSBpcyBhbG1vc3QgYWx3YXlzCi0JZmFzdGVyIGFuZCBlYXNpZXIgdG8gdXNlIHRoYW4gaXMgU1JDVS4KKzE0LglTUkNVIChzcmN1X3JlYWRfbG9jaygpLCBzcmN1X3JlYWRfdW5sb2NrKCksIHNyY3VfZGVyZWZlcmVuY2UoKSwKKwlzeW5jaHJvbml6ZV9zcmN1KCksIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpKSBtYXkgb25seQorCWJlIGludm9rZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuICBVbmxpa2Ugb3RoZXIgZm9ybXMgb2YgUkNVLCBpdAorCS1pcy0gcGVybWlzc2libGUgdG8gYmxvY2sgaW4gYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgorCShkZW1hcmtlZCBieSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkpLCBoZW5jZSB0aGUKKwkiU1JDVSI6ICJzbGVlcGFibGUgUkNVIi4gIFBsZWFzZSBub3RlIHRoYXQgaWYgeW91IGRvbid0IG5lZWQKKwl0byBzbGVlcCBpbiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIHlvdSBzaG91bGQgYmUgdXNpbmcKKwlSQ1UgcmF0aGVyIHRoYW4gU1JDVSwgYmVjYXVzZSBSQ1UgaXMgYWxtb3N0IGFsd2F5cyBmYXN0ZXIgYW5kCisJZWFzaWVyIHRvIHVzZSB0aGFuIGlzIFNSQ1UuCiAKIAlBbHNvIHVubGlrZSBvdGhlciBmb3JtcyBvZiBSQ1UsIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uCiAJYW5kIGNsZWFudXAgaXMgcmVxdWlyZWQgdmlhIGluaXRfc3JjdV9zdHJ1Y3QoKSBhbmQKIAljbGVhbnVwX3NyY3Vfc3RydWN0KCkuCVRoZXNlIGFyZSBwYXNzZWQgYSAic3RydWN0IHNyY3Vfc3RydWN0IgogCXRoYXQgZGVmaW5lcyB0aGUgc2NvcGUgb2YgYSBnaXZlbiBTUkNVIGRvbWFpbi4JT25jZSBpbml0aWFsaXplZCwKIAl0aGUgc3JjdV9zdHJ1Y3QgaXMgcGFzc2VkIHRvIHNyY3VfcmVhZF9sb2NrKCksIHNyY3VfcmVhZF91bmxvY2soKQotCWFuZCBzeW5jaHJvbml6ZV9zcmN1KCkuICBBIGdpdmVuIHN5bmNocm9uaXplX3NyY3UoKSB3YWl0cyBvbmx5Ci0JZm9yIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGdvdmVybmVkIGJ5IHNyY3VfcmVhZF9sb2NrKCkKLQlhbmQgc3JjdV9yZWFkX3VubG9jaygpIGNhbGxzIHRoYXQgaGF2ZSBiZWVuIHBhc3NkIHRoZSBzYW1lCi0Jc3JjdV9zdHJ1Y3QuICBUaGlzIHByb3BlcnR5IGlzIHdoYXQgbWFrZXMgc2xlZXBpbmcgcmVhZC1zaWRlCi0JY3JpdGljYWwgc2VjdGlvbnMgdG9sZXJhYmxlIC0tIGEgZ2l2ZW4gc3Vic3lzdGVtIGRlbGF5cyBvbmx5Ci0JaXRzIG93biB1cGRhdGVzLCBub3QgdGhvc2Ugb2Ygb3RoZXIgc3Vic3lzdGVtcyB1c2luZyBTUkNVLgotCVRoZXJlZm9yZSwgU1JDVSBpcyBsZXNzIHByb25lIHRvIE9PTSB0aGUgc3lzdGVtIHRoYW4gUkNVIHdvdWxkCi0JYmUgaWYgUkNVJ3MgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdlcmUgcGVybWl0dGVkIHRvCi0Jc2xlZXAuCisJc3luY2hyb25pemVfc3JjdSgpLCBhbmQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKS4gIEEgZ2l2ZW4KKwlzeW5jaHJvbml6ZV9zcmN1KCkgd2FpdHMgb25seSBmb3IgU1JDVSByZWFkLXNpZGUgY3JpdGljYWwKKwlzZWN0aW9ucyBnb3Zlcm5lZCBieSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkKKwljYWxscyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgdGhlIHNhbWUgc3JjdV9zdHJ1Y3QuICBUaGlzIHByb3BlcnR5CisJaXMgd2hhdCBtYWtlcyBzbGVlcGluZyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgdG9sZXJhYmxlIC0tCisJYSBnaXZlbiBzdWJzeXN0ZW0gZGVsYXlzIG9ubHkgaXRzIG93biB1cGRhdGVzLCBub3QgdGhvc2Ugb2Ygb3RoZXIKKwlzdWJzeXN0ZW1zIHVzaW5nIFNSQ1UuCVRoZXJlZm9yZSwgU1JDVSBpcyBsZXNzIHByb25lIHRvIE9PTSB0aGUKKwlzeXN0ZW0gdGhhbiBSQ1Ugd291bGQgYmUgaWYgUkNVJ3MgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zCisJd2VyZSBwZXJtaXR0ZWQgdG8gc2xlZXAuCiAKIAlUaGUgYWJpbGl0eSB0byBzbGVlcCBpbiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgZG9lcyBub3QKIAljb21lIGZvciBmcmVlLglGaXJzdCwgY29ycmVzcG9uZGluZyBzcmN1X3JlYWRfbG9jaygpIGFuZApAQCAtMzExLDEyICszNTUsMTIgQEAKIAlkZXN0cnVjdGl2ZSBvcGVyYXRpb24sIGFuZCAtb25seS0gLXRoZW4tIGludm9rZSBjYWxsX3JjdSgpLAogCXN5bmNocm9uaXplX3JjdSgpLCBvciBmcmllbmRzLgogCi0JQmVjYXVzZSB0aGVzZSBwcmltaXRpdmVzIG9ubHkgd2FpdCBmb3IgcHJlLWV4aXN0aW5nIHJlYWRlcnMsCi0JaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSBzYWZldHkgdG8KLQlhbnkgc3Vic2VxdWVudCByZWFkZXJzLgorCUJlY2F1c2UgdGhlc2UgcHJpbWl0aXZlcyBvbmx5IHdhaXQgZm9yIHByZS1leGlzdGluZyByZWFkZXJzLCBpdAorCWlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBhbnkgc3Vic2VxdWVudAorCXJlYWRlcnMgd2lsbCBleGVjdXRlIHNhZmVseS4KIAotMTYuCVRoZSB2YXJpb3VzIFJDVSByZWFkLXNpZGUgcHJpbWl0aXZlcyBkbyAtbm90LSBjb250YWluIG1lbW9yeQotCWJhcnJpZXJzLiAgVGhlIENQVSAoYW5kIGluIHNvbWUgY2FzZXMsIHRoZSBjb21waWxlcikgaXMgZnJlZQotCXRvIHJlb3JkZXIgY29kZSBpbnRvIGFuZCBvdXQgb2YgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KLQlJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIFJDVSB1cGRhdGUtc2lkZSBwcmltaXRpdmVzIHRvCi0JZGVhbCB3aXRoIHRoaXMuCisxNi4JVGhlIHZhcmlvdXMgUkNVIHJlYWQtc2lkZSBwcmltaXRpdmVzIGRvIC1ub3QtIG5lY2Vzc2FyaWx5IGNvbnRhaW4KKwltZW1vcnkgYmFycmllcnMuICBZb3Ugc2hvdWxkIHRoZXJlZm9yZSBwbGFuIGZvciB0aGUgQ1BVCisJYW5kIHRoZSBjb21waWxlciB0byBmcmVlbHkgcmVvcmRlciBjb2RlIGludG8gYW5kIG91dCBvZiBSQ1UKKwlyZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlCisJUkNVIHVwZGF0ZS1zaWRlIHByaW1pdGl2ZXMgdG8gZGVhbCB3aXRoIHRoaXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjRiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLnR4dApAQCAtMCwwICsxLDY3IEBACitSQ1UgYW5kIGxvY2tkZXAgY2hlY2tpbmcKKworQWxsIGZsYXZvcnMgb2YgUkNVIGhhdmUgbG9ja2RlcCBjaGVja2luZyBhdmFpbGFibGUsIHNvIHRoYXQgbG9ja2RlcCBpcworYXdhcmUgb2Ygd2hlbiBlYWNoIHRhc2sgZW50ZXJzIGFuZCBsZWF2ZXMgYW55IGZsYXZvciBvZiBSQ1UgcmVhZC1zaWRlCitjcml0aWNhbCBzZWN0aW9uLiAgRWFjaCBmbGF2b3Igb2YgUkNVIGlzIHRyYWNrZWQgc2VwYXJhdGVseSAoYnV0IG5vdGUKK3RoYXQgdGhpcyBpcyBub3QgdGhlIGNhc2UgaW4gMi42LjMyIGFuZCBlYXJsaWVyKS4gIFRoaXMgYWxsb3dzIGxvY2tkZXAncwordHJhY2tpbmcgdG8gaW5jbHVkZSBSQ1Ugc3RhdGUsIHdoaWNoIGNhbiBzb21ldGltZXMgaGVscCB3aGVuIGRlYnVnZ2luZworZGVhZGxvY2tzIGFuZCB0aGUgbGlrZS4KKworSW4gYWRkaXRpb24sIFJDVSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIHByaW1pdGl2ZXMgdGhhdCBjaGVjayBsb2NrZGVwJ3MKK3N0YXRlOgorCisJcmN1X3JlYWRfbG9ja19oZWxkKCkgZm9yIG5vcm1hbCBSQ1UuCisJcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkgZm9yIFJDVS1iaC4KKwlyY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSBmb3IgUkNVLXNjaGVkLgorCXNyY3VfcmVhZF9sb2NrX2hlbGQoKSBmb3IgU1JDVS4KKworVGhlc2UgZnVuY3Rpb25zIGFyZSBjb25zZXJ2YXRpdmUsIGFuZCB3aWxsIHRoZXJlZm9yZSByZXR1cm4gMSBpZiB0aGV5CithcmVuJ3QgY2VydGFpbiAoZm9yIGV4YW1wbGUsIGlmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQpLgorVGhpcyBwcmV2ZW50cyB0aGluZ3MgbGlrZSBXQVJOX09OKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSkgZnJvbSBnaXZpbmcgZmFsc2UKK3Bvc2l0aXZlcyB3aGVuIGxvY2tkZXAgaXMgZGlzYWJsZWQuCisKK0luIGFkZGl0aW9uLCBhIHNlcGFyYXRlIGtlcm5lbCBjb25maWcgcGFyYW1ldGVyIENPTkZJR19QUk9WRV9SQ1UgZW5hYmxlcworY2hlY2tpbmcgb2YgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlczoKKworCXJjdV9kZXJlZmVyZW5jZShwKToKKwkJQ2hlY2sgZm9yIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwlyY3VfZGVyZWZlcmVuY2VfYmgocCk6CisJCUNoZWNrIGZvciBSQ1UtYmggcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisJcmN1X2RlcmVmZXJlbmNlX3NjaGVkKHApOgorCQlDaGVjayBmb3IgUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCXNyY3VfZGVyZWZlcmVuY2UocCwgc3ApOgorCQlDaGVjayBmb3IgU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgYyk6CisJCVVzZSBleHBsaWNpdCBjaGVjayBleHByZXNzaW9uICJjIi4KKwlyY3VfZGVyZWZlcmVuY2VfcmF3KHApCisJCURvbid0IGNoZWNrLiAgKFVzZSBzcGFyaW5nbHksIGlmIGF0IGFsbC4pCisKK1RoZSByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBjaGVjayBleHByZXNzaW9uIGNhbiBiZSBhbnkgYm9vbGVhbgorZXhwcmVzc2lvbiwgYnV0IHdvdWxkIG5vcm1hbGx5IGluY2x1ZGUgb25lIG9mIHRoZSByY3VfcmVhZF9sb2NrX2hlbGQoKQorZmFtaWx5IG9mIGZ1bmN0aW9ucyBhbmQgYSBsb2NrZGVwIGV4cHJlc3Npb24uICBIb3dldmVyLCBhbnkgYm9vbGVhbgorZXhwcmVzc2lvbiBjYW4gYmUgdXNlZC4gIEZvciBhIG1vZGVyYXRlbHkgb3JuYXRlIGV4YW1wbGUsIGNvbnNpZGVyCit0aGUgZm9sbG93aW5nOgorCisJZmlsZSA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhmZHQtPmZkW2ZkXSwKKwkJCQkgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJICAgICBsb2NrZGVwX2lzX2hlbGQoJmZpbGVzLT5maWxlX2xvY2spIHx8CisJCQkJICAgICBhdG9taWNfcmVhZCgmZmlsZXMtPmNvdW50KSA9PSAxKTsKKworVGhpcyBleHByZXNzaW9uIHBpY2tzIHVwIHRoZSBwb2ludGVyICJmZHQtPmZkW2ZkXSIgaW4gYW4gUkNVLXNhZmUgbWFubmVyLAorYW5kLCBpZiBDT05GSUdfUFJPVkVfUkNVIGlzIGNvbmZpZ3VyZWQsIHZlcmlmaWVzIHRoYXQgdGhpcyBleHByZXNzaW9uCitpcyB1c2VkIGluOgorCisxLglBbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIG9yCisyLgl3aXRoIGZpbGVzLT5maWxlX2xvY2sgaGVsZCwgb3IKKzMuCW9uIGFuIHVuc2hhcmVkIGZpbGVzX3N0cnVjdC4KKworSW4gY2FzZSAoMSksIHRoZSBwb2ludGVyIGlzIHBpY2tlZCB1cCBpbiBhbiBSQ1Utc2FmZSBtYW5uZXIgZm9yIHZhbmlsbGEKK1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGluIGNhc2UgKDIpIHRoZSAtPmZpbGVfbG9jayBwcmV2ZW50cworYW55IGNoYW5nZSBmcm9tIHRha2luZyBwbGFjZSwgYW5kIGZpbmFsbHksIGluIGNhc2UgKDMpIHRoZSBjdXJyZW50IHRhc2sKK2lzIHRoZSBvbmx5IHRhc2sgYWNjZXNzaW5nIHRoZSBmaWxlX3N0cnVjdCwgYWdhaW4gcHJldmVudGluZyBhbnkgY2hhbmdlCitmcm9tIHRha2luZyBwbGFjZS4KKworVGhlcmUgYXJlIGN1cnJlbnRseSBvbmx5ICJ1bml2ZXJzYWwiIHZlcnNpb25zIG9mIHRoZSByY3VfYXNzaWduX3BvaW50ZXIoKQorYW5kIFJDVSBsaXN0LS90cmVlLXRyYXZlcnNhbCBwcmltaXRpdmVzLCB3aGljaCBkbyBub3QgKHlldCkgY2hlY2sgZm9yCitiZWluZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiB0aGUgZnV0dXJlLCBzZXBhcmF0ZQordmVyc2lvbnMgb2YgdGhlc2UgcHJpbWl0aXZlcyBtaWdodCBiZSBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKaW5kZXggMmEyMzUyMy4uMzE4NTI3MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CkBAIC03NSw2ICs3NSw4IEBACiAJc2VhcmNoIGZvciB0aGUgc3RyaW5nICJQYXRlbnQiIGluIFJURlAudHh0IHRvIGZpbmQgdGhlbS4KIAlPZiB0aGVzZSwgb25lIHdhcyBhbGxvd2VkIHRvIGxhcHNlIGJ5IHRoZSBhc3NpZ25lZSwgYW5kIHRoZQogCW90aGVycyBoYXZlIGJlZW4gY29udHJpYnV0ZWQgdG8gdGhlIExpbnV4IGtlcm5lbCB1bmRlciBHUEwuCisJVGhlcmUgYXJlIG5vdyBhbHNvIExHUEwgaW1wbGVtZW50YXRpb25zIG9mIHVzZXItbGV2ZWwgUkNVCisJYXZhaWxhYmxlIChodHRwOi8vbHR0bmcub3JnLz9xPW5vZGUvMTgpLgogCiBvCUkgaGVhciB0aGF0IFJDVSBuZWVkcyB3b3JrIGluIG9yZGVyIHRvIHN1cHBvcnQgcmVhbHRpbWUga2VybmVscz8KIApAQCAtOTEsNDggKzkzLDQgQEAKIAogbwlXaGF0IGFyZSBhbGwgdGhlc2UgZmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnk/CiAKLQotCU5NSS1SQ1UudHh0Ci0KLQkJRGVzY3JpYmVzIGhvdyB0byB1c2UgUkNVIHRvIGltcGxlbWVudCBkeW5hbWljCi0JCU5NSSBoYW5kbGVycywgd2hpY2ggY2FuIGJlIHJldmVjdG9yZWQgb24gdGhlIGZseSwKLQkJd2l0aG91dCByZWJvb3RpbmcuCi0KLQlSVEZQLnR4dAotCi0JCUxpc3Qgb2YgUkNVLXJlbGF0ZWQgcHVibGljYXRpb25zIGFuZCB3ZWIgc2l0ZXMuCi0KLQlVUC50eHQKLQotCQlEaXNjdXNzaW9uIG9mIFJDVSB1c2FnZSBpbiBVUCBrZXJuZWxzLgotCi0JYXJyYXlSQ1UudHh0Ci0KLQkJRGVzY3JpYmVzIGhvdyB0byB1c2UgUkNVIHRvIHByb3RlY3QgYXJyYXlzLCB3aXRoCi0JCXJlc2l6ZWFibGUgYXJyYXlzIHdob3NlIGVsZW1lbnRzIHJlZmVyZW5jZSBvdGhlcgotCQlkYXRhIHN0cnVjdHVyZXMgYmVpbmcgb2YgdGhlIG1vc3QgaW50ZXJlc3QuCi0KLQljaGVja2xpc3QudHh0Ci0KLQkJTGlzdHMgdGhpbmdzIHRvIGNoZWNrIGZvciB3aGVuIGluc3BlY3RpbmcgY29kZSB0aGF0Ci0JCXVzZXMgUkNVLgotCi0JbGlzdFJDVS50eHQKLQotCQlEZXNjcmliZXMgaG93IHRvIHVzZSBSQ1UgdG8gcHJvdGVjdCBsaW5rZWQgbGlzdHMuCi0JCVRoaXMgaXMgdGhlIHNpbXBsZXN0IGFuZCBtb3N0IGNvbW1vbiB1c2Ugb2YgUkNVCi0JCWluIHRoZSBMaW51eCBrZXJuZWwuCi0KLQlyY3UudHh0Ci0KLQkJWW91IGFyZSByZWFkaW5nIGl0IQotCi0JcmN1cmVmLnR4dAotCi0JCURlc2NyaWJlcyBob3cgdG8gY29tYmluZSB1c2Ugb2YgcmVmZXJlbmNlIGNvdW50cwotCQl3aXRoIFJDVS4KLQotCXdoYXRpc1JDVS50eHQKLQotCQlPdmVydmlldyBvZiBob3cgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiB3b3Jrcy4gIEFsb25nCi0JCXRoZSB3YXksIHByZXNlbnRzIGEgY29uY2VwdHVhbCB2aWV3IG9mIFJDVS4KKwlTZWUgMDAtSU5ERVggZm9yIHRoZSBsaXN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyM2QyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKQEAgLTAsMCArMSw1OCBAQAorVXNpbmcgUkNVJ3MgQ1BVIFN0YWxsIERldGVjdG9yCisKK1RoZSBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBrZXJuZWwgY29uZmlnIHBhcmFtZXRlciBlbmFibGVzCitSQ1UncyBDUFUgc3RhbGwgZGV0ZWN0b3IsIHdoaWNoIGRldGVjdHMgY29uZGl0aW9ucyB0aGF0IHVuZHVseSBkZWxheQorUkNVIGdyYWNlIHBlcmlvZHMuICBUaGUgc3RhbGwgZGV0ZWN0b3IncyBpZGVhIG9mIHdoYXQgY29uc3RpdHV0ZXMKKyJ1bmR1bHkgZGVsYXllZCIgaXMgY29udHJvbGxlZCBieSBhIHBhaXIgb2YgQyBwcmVwcm9jZXNzb3IgbWFjcm9zOgorCitSQ1VfU0VDT05EU19USUxMX1NUQUxMX0NIRUNLCisKKwlUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBlcmlvZCBvZiB0aW1lIHRoYXQgUkNVIHdpbGwgd2FpdCBmcm9tCisJdGhlIGJlZ2lubmluZyBvZiBhIGdyYWNlIHBlcmlvZCB1bnRpbCBpdCBpc3N1ZXMgYW4gUkNVIENQVQorCXN0YWxsIHdhcm5pbmcuCUl0IGlzIG5vcm1hbGx5IHRlbiBzZWNvbmRzLgorCitSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0sKKworCVRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhhdCBSQ1Ugd2lsbCB3YWl0IGFmdGVyCisJaXNzdWluZyBhIHN0YWxsIHdhcm5pbmcgdW50aWwgaXQgaXNzdWVzIGFub3RoZXIgc3RhbGwgd2FybmluZy4KKwlJdCBpcyBub3JtYWxseSBzZXQgdG8gdGhpcnR5IHNlY29uZHMuCisKK1JDVV9TVEFMTF9SQVRfREVMQVkKKworCVRoZSBDUFUgc3RhbGwgZGV0ZWN0b3IgdHJpZXMgdG8gbWFrZSB0aGUgb2ZmZW5kaW5nIENQVSByYXQgb24gaXRzZWxmLAorCWFzIHRoaXMgb2Z0ZW4gZ2l2ZXMgYmV0dGVyLXF1YWxpdHkgc3RhY2sgdHJhY2VzLiAgSG93ZXZlciwgaWYKKwl0aGUgb2ZmZW5kaW5nIENQVSBkb2VzIG5vdCBkZXRlY3QgaXRzIG93biBzdGFsbCBpbiB0aGUgbnVtYmVyCisJb2YgamlmZmllcyBzcGVjaWZpZWQgYnkgUkNVX1NUQUxMX1JBVF9ERUxBWSwgdGhlbiBvdGhlciBDUFVzIHdpbGwKKwljb21wbGFpbi4gIFRoaXMgaXMgbm9ybWFsbHkgc2V0IHRvIHR3byBqaWZmaWVzLgorCitUaGUgZm9sbG93aW5nIHByb2JsZW1zIGNhbiByZXN1bHQgaW4gYW4gUkNVIENQVSBzdGFsbCB3YXJuaW5nOgorCitvCUEgQ1BVIGxvb3BpbmcgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCQorbwlBIENQVSBsb29waW5nIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKworbwlBIENQVSBsb29waW5nIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KKworbwlGb3IgIUNPTkZJR19QUkVFTVBUIGtlcm5lbHMsIGEgQ1BVIGxvb3BpbmcgYW55d2hlcmUgaW4gdGhlIGtlcm5lbAorCXdpdGhvdXQgaW52b2tpbmcgc2NoZWR1bGUoKS4KKworbwlBIGJ1ZyBpbiB0aGUgUkNVIGltcGxlbWVudGF0aW9uLgorCitvCUEgaGFyZHdhcmUgZmFpbHVyZS4gIFRoaXMgaXMgcXVpdGUgdW5saWtlbHksIGJ1dCBoYXMgb2NjdXJyZWQKKwlhdCBsZWFzdCBvbmNlIGluIGEgZm9ybWVyIGxpZmUuICBBIENQVSBmYWlsZWQgaW4gYSBydW5uaW5nIHN5c3RlbSwKKwliZWNvbWluZyB1bnJlc3BvbnNpdmUsIGJ1dCBub3QgY2F1c2luZyBhbiBpbW1lZGlhdGUgY3Jhc2guCisJVGhpcyByZXN1bHRlZCBpbiBhIHNlcmllcyBvZiBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmdzLCBldmVudHVhbGx5CisJbGVhZGluZyB0aGUgcmVhbGl6YXRpb24gdGhhdCB0aGUgQ1BVIGhhZCBmYWlsZWQuCisKK1RoZSBSQ1UsIFJDVS1zY2hlZCwgYW5kIFJDVS1iaCBpbXBsZW1lbnRhdGlvbnMgaGF2ZSBDUFUgc3RhbGwgd2FybmluZy4KK1NSQ1UgZG9lcyBub3QgZG8gc28gZGlyZWN0bHksIGJ1dCBpdHMgY2FsbHMgdG8gc3luY2hyb25pemVfc2NoZWQoKSB3aWxsCityZXN1bHQgaW4gUkNVLXNjaGVkIGRldGVjdGluZyBhbnkgQ1BVIHN0YWxscyB0aGF0IG1pZ2h0IGJlIG9jY3VycmluZy4KKworVG8gZGlhZ25vc2UgdGhlIGNhdXNlIG9mIHRoZSBzdGFsbCwgaW5zcGVjdCB0aGUgc3RhY2sgdHJhY2VzLiAgVGhlIG9mZmVuZGluZworZnVuY3Rpb24gd2lsbCB1c3VhbGx5IGJlIG5lYXIgdGhlIHRvcCBvZiB0aGUgc3RhY2suICBJZiB5b3UgaGF2ZSBhIHNlcmllcworb2Ygc3RhbGwgd2FybmluZ3MgZnJvbSBhIHNpbmdsZSBleHRlbmRlZCBzdGFsbCwgY29tcGFyaW5nIHRoZSBzdGFjayB0cmFjZXMKK2NhbiBvZnRlbiBoZWxwIGRldGVybWluZSB3aGVyZSB0aGUgc3RhbGwgaXMgb2NjdXJyaW5nLCB3aGljaCB3aWxsIHVzdWFsbHkKK2JlIGluIHRoZSBmdW5jdGlvbiBuZWFyZXN0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIHRoYXQgc3RheXMgdGhlIHNhbWUgZnJvbQordHJhY2UgdG8gdHJhY2UuCisKK1JDVSBidWdzIGNhbiBvZnRlbiBiZSBkZWJ1Z2dlZCB3aXRoIHRoZSBoZWxwIG9mIENPTkZJR19SQ1VfVFJBQ0UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0CmluZGV4IDlkYmEzYmIuLjBlNTBiYzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0CkBAIC0zMCw2ICszMCwxOCBAQAogCiBUaGlzIG1vZHVsZSBoYXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogCitmcXNfZHVyYXRpb24JRHVyYXRpb24gKGluIG1pY3Jvc2Vjb25kcykgb2YgYXJ0aWZpY2lhbGx5IGluZHVjZWQgYnVyc3RzCisJCW9mIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIGludm9jYXRpb25zLiAgSW4gUkNVCisJCWltcGxlbWVudGF0aW9ucyBoYXZpbmcgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCksIHRoZXNlCisJCWJ1cnN0cyBoZWxwIGZvcmNlIHJhY2VzIGJldHdlZW4gZm9yY2luZyBhIGdpdmVuIGdyYWNlCisJCXBlcmlvZCBhbmQgdGhhdCBncmFjZSBwZXJpb2QgZW5kaW5nIG9uIGl0cyBvd24uCisKK2Zxc19ob2xkb2ZmCUhvbGRvZmYgdGltZSAoaW4gbWljcm9zZWNvbmRzKSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGNhbGxzCisJCXRvIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIHdpdGhpbiBhIGJ1cnN0LgorCitmcXNfc3R1dHRlcglXYWl0IHRpbWUgKGluIHNlY29uZHMpIGJldHdlZW4gY29uc2VjdXRpdmUgYnVyc3RzCisJCW9mIGNhbGxzIHRvIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpLgorCiBpcnFyZWFkZXJzCVNheXMgdG8gaW52b2tlIFJDVSByZWFkZXJzIGZyb20gaXJxIGxldmVsLiAgVGhpcyBpcyBjdXJyZW50bHkKIAkJZG9uZSB2aWEgdGltZXJzLiAgRGVmYXVsdHMgdG8gIjEiIGZvciB2YXJpYW50cyBvZiBSQ1UgdGhhdAogCQlwZXJtaXQgdGhpcy4gIChPciwgbW9yZSBhY2N1cmF0ZWx5LCB2YXJpYW50cyBvZiBSQ1UgdGhhdCBkbwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKaW5kZXggZDU0MmNhMi4uMWRjMDBlZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CkBAIC0zMjMsMTQgKzMyMywxNyBAQAogCURlZmVyCQkJUHJvdGVjdAogCiBhLglzeW5jaHJvbml6ZV9yY3UoKQlyY3VfcmVhZF9sb2NrKCkgLyByY3VfcmVhZF91bmxvY2soKQotCWNhbGxfcmN1KCkKKwljYWxsX3JjdSgpCQlyY3VfZGVyZWZlcmVuY2UoKQogCiBiLgljYWxsX3JjdV9iaCgpCQlyY3VfcmVhZF9sb2NrX2JoKCkgLyByY3VfcmVhZF91bmxvY2tfYmgoKQorCQkJCXJjdV9kZXJlZmVyZW5jZV9iaCgpCiAKLWMuCXN5bmNocm9uaXplX3NjaGVkKCkJcHJlZW1wdF9kaXNhYmxlKCkgLyBwcmVlbXB0X2VuYWJsZSgpCitjLglzeW5jaHJvbml6ZV9zY2hlZCgpCXJjdV9yZWFkX2xvY2tfc2NoZWQoKSAvIHJjdV9yZWFkX3VubG9ja19zY2hlZCgpCisJCQkJcHJlZW1wdF9kaXNhYmxlKCkgLyBwcmVlbXB0X2VuYWJsZSgpCiAJCQkJbG9jYWxfaXJxX3NhdmUoKSAvIGxvY2FsX2lycV9yZXN0b3JlKCkKIAkJCQloYXJkaXJxIGVudGVyIC8gaGFyZGlycSBleGl0CiAJCQkJTk1JIGVudGVyIC8gTk1JIGV4aXQKKwkJCQlyY3VfZGVyZWZlcmVuY2Vfc2NoZWQoKQogCiBUaGVzZSB0aHJlZSBtZWNoYW5pc21zIGFyZSB1c2VkIGFzIGZvbGxvd3M6CiAKQEAgLTc4MCw5ICs3ODMsOCBAQAogQVBJcywgc2luY2UgdGhlcmUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIGNhdGVnb3JpemUgdGhlbQogaW4gZG9jYm9vay4gIEhlcmUgaXMgdGhlIGxpc3QsIGJ5IGNhdGVnb3J5LgogCi1SQ1UgcG9pbnRlci9saXN0IHRyYXZlcnNhbDoKK1JDVSBsaXN0IHRyYXZlcnNhbDoKIAotCXJjdV9kZXJlZmVyZW5jZQogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CiAJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1CkBAIC04MDgsNyArODEwLDcgQEAKIAogCXJjdV9yZWFkX2xvY2sJCXN5bmNocm9uaXplX25ldAkJcmN1X2JhcnJpZXIKIAlyY3VfcmVhZF91bmxvY2sJCXN5bmNocm9uaXplX3JjdQotCQkJCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQKKwlyY3VfZGVyZWZlcmVuY2UJCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQKIAkJCQljYWxsX3JjdQogCiAKQEAgLTgxNiw3ICs4MTgsNyBAQAogCiAJcmN1X3JlYWRfbG9ja19iaAljYWxsX3JjdV9iaAkJcmN1X2JhcnJpZXJfYmgKIAlyY3VfcmVhZF91bmxvY2tfYmgJc3luY2hyb25pemVfcmN1X2JoCi0JCQkJc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZAorCXJjdV9kZXJlZmVyZW5jZV9iaAlzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkCiAKIAogc2NoZWQ6CUNyaXRpY2FsIHNlY3Rpb25zCUdyYWNlIHBlcmlvZAkJQmFycmllcgpAQCAtODI1LDEyICs4MjcsMTQgQEAKIAlyY3VfcmVhZF91bmxvY2tfc2NoZWQJY2FsbF9yY3Vfc2NoZWQKIAlbcHJlZW1wdF9kaXNhYmxlXQlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQKIAlbYW5kIGZyaWVuZHNdCisJcmN1X2RlcmVmZXJlbmNlX3NjaGVkCiAKIAogU1JDVToJQ3JpdGljYWwgc2VjdGlvbnMJR3JhY2UgcGVyaW9kCQlCYXJyaWVyCiAKIAlzcmN1X3JlYWRfbG9jawkJc3luY2hyb25pemVfc3JjdQlOL0EKIAlzcmN1X3JlYWRfdW5sb2NrCXN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkCisJc3JjdV9kZXJlZmVyZW5jZQogCiBTUkNVOglJbml0aWFsaXphdGlvbi9jbGVhbnVwCiAJaW5pdF9zcmN1X3N0cnVjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAppbmRleCBkYTQyYWI0Li5iMjMxNDE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dApAQCAtMzc3LDMgKzM3NywyNyBAQAogCUFsbCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBmbHVzaF9pY2FjaGVfcGFnZSBjYW4gYmUgaW1wbGVtZW50ZWQgaW4KIAlmbHVzaF9kY2FjaGVfcGFnZSBhbmQgdXBkYXRlX21tdV9jYWNoZS4gSW4gMi43IHRoZSBob3BlIGlzIHRvCiAJcmVtb3ZlIHRoaXMgaW50ZXJmYWNlIGNvbXBsZXRlbHkuCisKK1RoZSBmaW5hbCBjYXRlZ29yeSBvZiBBUElzIGlzIGZvciBJL08gdG8gZGVsaWJlcmF0ZWx5IGFsaWFzZWQgYWRkcmVzcworcmFuZ2VzIGluc2lkZSB0aGUga2VybmVsLiAgU3VjaCBhbGlhc2VzIGFyZSBzZXQgdXAgYnkgdXNlIG9mIHRoZQordm1hcC92bWFsbG9jIEFQSS4gIFNpbmNlIGtlcm5lbCBJL08gZ29lcyB2aWEgcGh5c2ljYWwgcGFnZXMsIHRoZSBJL08KK3N1YnN5c3RlbSBhc3N1bWVzIHRoYXQgdGhlIHVzZXIgbWFwcGluZyBhbmQga2VybmVsIG9mZnNldCBtYXBwaW5nIGFyZQordGhlIG9ubHkgYWxpYXNlcy4gIFRoaXMgaXNuJ3QgdHJ1ZSBmb3Igdm1hcCBhbGlhc2VzLCBzbyBhbnl0aGluZyBpbgordGhlIGtlcm5lbCB0cnlpbmcgdG8gZG8gSS9PIHRvIHZtYXAgYXJlYXMgbXVzdCBtYW51YWxseSBtYW5hZ2UKK2NvaGVyZW5jeS4gIEl0IG11c3QgZG8gdGhpcyBieSBmbHVzaGluZyB0aGUgdm1hcCByYW5nZSBiZWZvcmUgZG9pbmcKK0kvTyBhbmQgaW52YWxpZGF0aW5nIGl0IGFmdGVyIHRoZSBJL08gcmV0dXJucy4KKworICB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKKyAgICAgICBmbHVzaGVzIHRoZSBrZXJuZWwgY2FjaGUgZm9yIGEgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIHJhbmdlIGluCisgICAgICAgdGhlIHZtYXAgYXJlYS4gIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGRhdGEgdGhlIGtlcm5lbAorICAgICAgIG1vZGlmaWVkIGluIHRoZSB2bWFwIHJhbmdlIGlzIG1hZGUgdmlzaWJsZSB0byB0aGUgcGh5c2ljYWwKKyAgICAgICBwYWdlLiAgVGhlIGRlc2lnbiBpcyB0byBtYWtlIHRoaXMgYXJlYSBzYWZlIHRvIHBlcmZvcm0gSS9PIG9uLgorICAgICAgIE5vdGUgdGhhdCB0aGlzIEFQSSBkb2VzICpub3QqIGFsc28gZmx1c2ggdGhlIG9mZnNldCBtYXAgYWxpYXMKKyAgICAgICBvZiB0aGUgYXJlYS4KKworICB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKSBpbnZhbGlkYXRlcworICAgICAgIHRoZSBjYWNoZSBmb3IgYSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgaW4gdGhlIHZtYXAgYXJlYQorICAgICAgIHdoaWNoIHByZXZlbnRzIHRoZSBwcm9jZXNzb3IgZnJvbSBtYWtpbmcgdGhlIGNhY2hlIHN0YWxlIGJ5CisgICAgICAgc3BlY3VsYXRpdmVseSByZWFkaW5nIGRhdGEgd2hpbGUgdGhlIEkvTyB3YXMgb2NjdXJyaW5nIHRvIHRoZQorICAgICAgIHBoeXNpY2FsIHBhZ2VzLiAgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZGF0YSByZWFkcyBpbnRvIHRoZQorICAgICAgIHZtYXAgYXJlYS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dAppbmRleCBhZWQwODJmLi43Mzc5ODhmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CkBAIC0xNDUsOCArMTQ1LDggQEAKIHVwX3RocmVzaG9sZDogZGVmaW5lcyB3aGF0IHRoZSBhdmVyYWdlIENQVSB1c2FnZSBiZXR3ZWVuIHRoZSBzYW1wbGluZ3MKIG9mICdzYW1wbGluZ19yYXRlJyBuZWVkcyB0byBiZSBmb3IgdGhlIGtlcm5lbCB0byBtYWtlIGEgZGVjaXNpb24gb24KIHdoZXRoZXIgaXQgc2hvdWxkIGluY3JlYXNlIHRoZSBmcmVxdWVuY3kuICBGb3IgZXhhbXBsZSB3aGVuIGl0IGlzIHNldAotdG8gaXRzIGRlZmF1bHQgdmFsdWUgb2YgJzgwJyBpdCBtZWFucyB0aGF0IGJldHdlZW4gdGhlIGNoZWNraW5nCi1pbnRlcnZhbHMgdGhlIENQVSBuZWVkcyB0byBiZSBvbiBhdmVyYWdlIG1vcmUgdGhhbiA4MCUgaW4gdXNlIHRvIHRoZW4KK3RvIGl0cyBkZWZhdWx0IHZhbHVlIG9mICc5NScgaXQgbWVhbnMgdGhhdCBiZXR3ZWVuIHRoZSBjaGVja2luZworaW50ZXJ2YWxzIHRoZSBDUFUgbmVlZHMgdG8gYmUgb24gYXZlcmFnZSBtb3JlIHRoYW4gOTUlIGluIHVzZSB0byB0aGVuCiBkZWNpZGUgdGhhdCB0aGUgQ1BVIGZyZXF1ZW5jeSBuZWVkcyB0byBiZSBpbmNyZWFzZWQuICAKIAogaWdub3JlX25pY2VfbG9hZDogdGhpcyBwYXJhbWV0ZXIgdGFrZXMgYSB2YWx1ZSBvZiAnMCcgb3IgJzEnLiBXaGVuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgppbmRleCAzYWQ2YWNlLi5kOWJjZmZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCisrKyBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKQEAgLTY5LDcgKzY5LDYgQEAKIGJib290c2VjdAogYmluMmMKIGJpbmtlcm5lbC5zcGVjCi1iaW5vZmZzZXQKIGJvb3RzZWN0CiBib3VuZHMuaAogYnNldHVwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQppbmRleCAxNGI3YjVhLi4yMzljYmRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKQEAgLTI2LDcgKzI2LDcgQEAKIAkJImRlYzMwMDBzIiwgInZwNzA0MSIsICJkaWJ1c2IiLCAibnh0MjAwMiIsICJueHQyMDA0IiwKIAkJIm9yNTEyMTEiLCAib3I1MTEzMl9xYW0iLCAib3I1MTEzMl92c2IiLCAiYmx1ZWJpcmQiLAogCQkib3BlcmExIiwgImN4MjMxeHgiLCAiY3gxOCIsICJjeDIzODg1IiwgInB2cnVzYjIiLCAibXBjNzE4IiwKLQkJImFmOTAxNSIpOworCQkiYWY5MDE1IiwgIm5nZW5lIik7CiAKICMgQ2hlY2sgYXJncwogc3ludGF4KCkgaWYgKHNjYWxhcihAQVJHVikgIT0gMSk7CkBAIC0zOSw3ICszOSw3IEBACiAJZGllICRAIGlmICRAOwogCXByaW50IFNUREVSUiA8PEVPRjsKIEZpcm13YXJlKHMpICRvdXRmaWxlIGV4dHJhY3RlZCBzdWNjZXNzZnVsbHkuCi1Ob3cgY29weSBpdCh0aGV5KSB0byBlaXRoZXIgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZSBvciAvbGliL2Zpcm13YXJlCitOb3cgY29weSBpdCh0aGVtKSB0byBlaXRoZXIgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZSBvciAvbGliL2Zpcm13YXJlCiAoZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb2YgZmlybXdhcmUgaG90cGx1ZykuCiBFT0YKIAlleGl0KDApOwpAQCAtNTQ5LDYgKzU0OSwyNCBAQAogCWNsb3NlIElORklMRTsKIH0KIAorc3ViIG5nZW5lIHsKKyAgICBteSAkdXJsID0gImh0dHA6Ly93d3cuZGlnaXRhbGRldmljZXMuZGUvZG93bmxvYWQvIjsKKyAgICBteSAkZmlsZTEgPSAibmdlbmVfMTUuZnciOworICAgIG15ICRoYXNoMSA9ICJkNzk4ZDVhNzU3MTIxMTc0ZjBkYmM1ZjI4MzNjMGM4NSI7CisgICAgbXkgJGZpbGUyID0gIm5nZW5lXzE3LmZ3IjsKKyAgICBteSAkaGFzaDIgPSAiMjZiNjg3MTM2ZTEyN2I4YWMyNGI4MWUwZWVhZmMyMGIiOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJGZpbGUxLCAkdXJsIC4gJGZpbGUxKTsKKyAgICB2ZXJpZnkoJGZpbGUxLCAkaGFzaDEpOworCisgICAgd2dldGZpbGUoJGZpbGUyLCAkdXJsIC4gJGZpbGUyKTsKKyAgICB2ZXJpZnkoJGZpbGUyLCAkaGFzaDIpOworCisgICAgIiRmaWxlMSwgJGZpbGUyIjsKK30KKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVXRpbGl0aWVzCiAKQEAgLTY2Nyw2ICs2ODUsNyBAQAogc3ViIHN5bnRheCgpIHsKICAgICBwcmludCBTVERFUlIgInN5bnRheDogZ2V0X2R2Yl9maXJtd2FyZSA8Y29tcG9uZW50PlxuIjsKICAgICBwcmludCBTVERFUlIgIlN1cHBvcnRlZCBjb21wb25lbnRzOlxuIjsKKyAgICBAY29tcG9uZW50cyA9IHNvcnQgQGNvbXBvbmVudHM7CiAgICAgZm9yKCRpPTA7ICRpIDwgc2NhbGFyKEBjb21wb25lbnRzKTsgJGkrKykgewogCXByaW50IFNUREVSUiAiXHQiIC4gJGNvbXBvbmVudHNbJGldIC4gIlxuIjsKICAgICB9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYXVsdC1pbmplY3Rpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vZmF1bHQtaW5qZWN0aW9uLnR4dAppbmRleCAwNzkzMDU2Li43YmUxNWU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYXVsdC1pbmplY3Rpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi50eHQKQEAgLTE0Myw4ICsxNDMsOCBAQAogICBmYWlsc2xhYiwgZmFpbF9wYWdlX2FsbG9jLCBhbmQgZmFpbF9tYWtlX3JlcXVlc3QgdXNlIHRoaXMgd2F5LgogICBIZWxwZXIgZnVuY3Rpb25zOgogCi0JaW5pdF9mYXVsdF9hdHRyX2VudHJpZXMoZW50cmllcywgYXR0ciwgbmFtZSk7Ci0Jdm9pZCBjbGVhbnVwX2ZhdWx0X2F0dHJfZW50cmllcyhlbnRyaWVzKTsKKwlpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoZW50cmllcywgYXR0ciwgbmFtZSk7CisJdm9pZCBjbGVhbnVwX2ZhdWx0X2F0dHJfZGVudHJpZXMoZW50cmllcyk7CiAKIC0gbW9kdWxlIHBhcmFtZXRlcnMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDBhNDY4MzMuLmVhNDAxNDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTYsMjEgKzYsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJVVNFUl9TQ0hFRAotV2hlbjoJMi42LjM0Ci0KLVdoeToJVVNFUl9TQ0hFRCB3YXMgaW1wbGVtZW50ZWQgYXMgYSBwcm9vZiBvZiBjb25jZXB0IGZvciBncm91cCBzY2hlZHVsaW5nLgotCVRoZSBlZmZlY3Qgb2YgVVNFUl9TQ0hFRCBjYW4gYWxyZWFkeSBiZSBhY2hpZXZlZCBmcm9tIHVzZXJzcGFjZSB3aXRoCi0JdGhlIGhlbHAgb2YgbGliY2dyb3VwLiBUaGUgcmVtb3ZhbCBvZiBVU0VSX1NDSEVEIHdpbGwgYWxzbyBzaW1wbGlmeQotCXRoZSBzY2hlZHVsZXIgY29kZSB3aXRoIHRoZSByZW1vdmFsIG9mIG9uZSBtYWpvciBpZmRlZi4gVGhlcmUgYXJlIGFsc28KLQlpc3N1ZXMgVVNFUl9TQ0hFRCBoYXMgd2l0aCBVU0VSX05TLiBBIGRlY2lzaW9uIHdhcyB0YWtlbiBub3QgdG8gZml4Ci0JdGhvc2UgYW5kIGluc3RlYWQgcmVtb3ZlIFVTRVJfU0NIRUQuIEFsc28gbmV3IGdyb3VwIHNjaGVkdWxpbmcKLQlmZWF0dXJlcyB3aWxsIG5vdCBiZSBpbXBsZW1lbnRlZCBmb3IgVVNFUl9TQ0hFRC4KLQotV2hvOglEaGF2YWwgR2lhbmkgPGRoYXZhbEBsaW51eC52bmV0LmlibS5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglQUklTTTU0CiBXaGVuOgkyLjYuMzQKIApAQCAtNjQsNiArNDksMTcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CURlcHJlY2F0ZWQgc25hcHNob3QgaW9jdGxzCitXaGVuOgkyLjYuMzYKKworV2h5OglUaGUgaW9jdGxzIGluIGtlcm5lbC9wb3dlci91c2VyLmMgd2VyZSBtYXJrZWQgYXMgZGVwcmVjYXRlZCBsb25nIHRpbWUKKwlhZ28uIE5vdyB0aGV5IG5vdGlmeSB1c2VycyBhYm91dCB0aGF0IHNvIHRoYXQgdGhleSBuZWVkIHRvIHJlcGxhY2UKKwl0aGVpciB1c2Vyc3BhY2UuIEFmdGVyIHNvbWUgbW9yZSB0aW1lLCByZW1vdmUgdGhlbSBjb21wbGV0ZWx5LgorCitXaG86CUppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OglUaGUgaWVlZTgwMjExX3JlZ2RvbSBtb2R1bGUgcGFyYW1ldGVyCiBXaGVuOglNYXJjaCAyMDEwIC8gZGVza3RvcCBjYXRjaHVwCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVudHJ5LWxvY2tpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKaW5kZXggNGMwYzU3NS4uNzkzMzRlZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKQEAgLTYyLDcgKzYyLDggQEAKIDIuIEluc2VydGlvbiBvZiBhIGRlbnRyeSBpbnRvIHRoZSBoYXNoIHRhYmxlIGlzIGRvbmUgdXNpbmcKICAgIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHdoaWNoIHRha2UgY2FyZSBvZiBvcmRlcmluZyB0aGUgd3JpdGVzIC0gdGhlCiAgICB3cml0ZXMgdG8gdGhlIGRlbnRyeSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBkZW50cnkgaXMKLSAgIGluc2VydGVkLiBUaGlzIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggaGxpc3RfZm9yX2VhY2hfcmN1KCkgd2hpbGUKKyAgIGluc2VydGVkLiBUaGlzIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggaGxpc3RfZm9yX2VhY2hfcmN1KCksCisgICB3aGljaCBoYXMgc2luY2UgYmVlbiByZXBsYWNlZCBieSBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKSwgd2hpbGUKICAgIHdhbGtpbmcgdGhlIGhhc2ggY2hhaW4uIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgYWxsCiAgICBpbml0aWFsaXphdGlvbiB0byB0aGUgZGVudHJ5IG11c3QgYmUgZG9uZSBiZWZvcmUKICAgIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHNpbmNlIHdlIGRvbid0IGhhdmUgZGNhY2hlX2xvY2sgcHJvdGVjdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA3MzZkNDU2Li44YzY2NmQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTk5LDYgKzE5OSwxMCBAQAogCQkJYWNwaV9kaXNwbGF5X291dHB1dD12aWRlbwogCQkJU2VlIGFib3ZlLgogCisJYWNwaV9lYXJseV9wZGNfZXZhbAlbSFcsQUNQSV0gRXZhbHVhdGUgcHJvY2Vzc29yIF9QREMgbWV0aG9kcworCQkJCWVhcmx5LiBOZWVkZWQgb24gc29tZSBwbGF0Zm9ybXMgdG8gcHJvcGVybHkKKwkJCQlpbml0aWFsaXplIHRoZSBFQy4KKwogCWFjcGlfaXJxX2JhbGFuY2UgW0hXLEFDUEldCiAJCQlBQ1BJIHdpbGwgYmFsYW5jZSBhY3RpdmUgSVJRcwogCQkJZGVmYXVsdCBpbiBBUElDIG1vZGUKQEAgLTMxMSw2ICszMTUsMTEgQEAKIAlhaWM3OXh4PQlbSFcsU0NTSV0KIAkJCVNlZSBEb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQuCiAKKwlhbGlnbm1lbnQ9CVtLTkwsQVJNXQorCQkJQWxsb3cgdGhlIGRlZmF1bHQgdXNlcnNwYWNlIGFsaWdubWVudCBmYXVsdCBoYW5kbGVyCisJCQliZWhhdmlvdXIgdG8gYmUgc3BlY2lmaWVkLiAgQml0IDAgZW5hYmxlcyB3YXJuaW5ncywKKwkJCWJpdCAxIGVuYWJsZXMgZml4dXBzLCBhbmQgYml0IDIgc2VuZHMgYSBzZWdmYXVsdC4KKwogCWFtZF9pb21tdT0JW0hXLFg4Ni04NF0KIAkJCVBhc3MgcGFyYW1ldGVycyB0byB0aGUgQU1EIElPTU1VIGRyaXZlciBpbiB0aGUgc3lzdGVtLgogCQkJUG9zc2libGUgdmFsdWVzIGFyZToKQEAgLTE3MjksNiArMTczOCw5IEBACiAJbm9tZmdwdAkJW1g4Ni0zMl0gRGlzYWJsZSBNdWx0aS1GdW5jdGlvbiBHZW5lcmFsIFB1cnBvc2UKIAkJCVRpbWVyIHVzYWdlIChmb3IgQU1EIEdlb2RlIG1hY2hpbmVzKS4KIAorCW5vcGF0CQlbWDg2XSBEaXNhYmxlIFBBVCAocGFnZSBhdHRyaWJ1dGUgdGFibGUgZXh0ZW5zaW9uIG9mCisJCQlwYWdldGFibGVzKSBzdXBwb3J0LgorCiAJbm9yYW5kbWFwcwlEb24ndCB1c2UgYWRkcmVzcyBzcGFjZSByYW5kb21pemF0aW9uLiAgRXF1aXZhbGVudCB0bwogCQkJZWNobyAwID4gL3Byb2Mvc3lzL2tlcm5lbC9yYW5kb21pemVfdmFfc3BhY2UKIApAQCAtMTkzOSw4ICsxOTUxLDEyIEBACiAJCQkJSVJRIHJvdXRpbmcgaXMgZW5hYmxlZC4KIAkJbm9hY3BpCQlbWDg2XSBEbyBub3QgdXNlIEFDUEkgZm9yIElSUSByb3V0aW5nCiAJCQkJb3IgZm9yIFBDSSBzY2FubmluZy4KLQkJdXNlX2NycwkJW1g4Nl0gVXNlIF9DUlMgZm9yIFBDSSByZXNvdXJjZQotCQkJCWFsbG9jYXRpb24uCisJCXVzZV9jcnMJCVtYODZdIFVzZSBQQ0kgaG9zdCBicmlkZ2Ugd2luZG93IGluZm9ybWF0aW9uCisJCQkJZnJvbSBBQ1BJLiAgT24gQklPU2VzIGZyb20gMjAwOCBvciBsYXRlciwgdGhpcworCQkJCWlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIElmIHlvdSBuZWVkIHRvIHVzZSB0aGlzLAorCQkJCXBsZWFzZSByZXBvcnQgYSBidWcuCisJCW5vY3JzCQlbWDg2XSBJZ25vcmUgUENJIGhvc3QgYnJpZGdlIHdpbmRvd3MgZnJvbSBBQ1BJLgorCQkJICAgICAgICBJZiB5b3UgbmVlZCB0byB1c2UgdGhpcywgcGxlYXNlIHJlcG9ydCBhIGJ1Zy4KIAkJcm91dGVpcnEJRG8gSVJRIHJvdXRpbmcgZm9yIGFsbCBQQ0kgZGV2aWNlcy4KIAkJCQlUaGlzIGlzIG5vcm1hbGx5IGRvbmUgaW4gcGNpX2VuYWJsZV9kZXZpY2UoKSwKIAkJCQlzbyB0aGlzIG9wdGlvbiBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kCkBAIC0xOTg5LDYgKzIwMDUsMTQgQEAKIAkJZm9yY2UJRW5hYmxlIEFTUE0gZXZlbiBvbiBkZXZpY2VzIHRoYXQgY2xhaW0gbm90IHRvIHN1cHBvcnQgaXQuCiAJCQlXQVJOSU5HOiBGb3JjaW5nIEFTUE0gb24gbWF5IGNhdXNlIHN5c3RlbSBsb2NrdXBzLgogCisJcGNpZV9wbWU9CVtQQ0lFLFBNXSBOYXRpdmUgUENJZSBQTUUgc2lnbmFsaW5nIG9wdGlvbnM6CisJCW9mZglEbyBub3QgdXNlIG5hdGl2ZSBQQ0llIFBNRSBzaWduYWxpbmcuCisJCWZvcmNlCVVzZSBuYXRpdmUgUENJZSBQTUUgc2lnbmFsaW5nIGV2ZW4gaWYgdGhlIEJJT1MgcmVmdXNlcworCQkJdG8gYWxsb3cgdGhlIGtlcm5lbCB0byBjb250cm9sIHRoZSByZWxldmFudCBQQ0llIGNvbmZpZworCQkJcmVnaXN0ZXJzLgorCQlub21zaQlEbyBub3QgdXNlIE1TSSBmb3IgbmF0aXZlIFBDSWUgUE1FIHNpZ25hbGluZyAodGhpcyBtYWtlcworCQkJYWxsIFBDSWUgcm9vdCBwb3J0cyB1c2UgSU5UeCBmb3IgZXZlcnl0aGluZykuCisKIAlwY212PQkJW0hXLFBDTUNJQV0gQmFkZ2VQQUQgNAogCiAJcGQuCQlbUEFSSURFXQpAQCAtMjY5NCw2ICsyNzE4LDEzIEBACiAJCQkJCW1lZGl1bSBpcyB3cml0ZS1wcm90ZWN0ZWQpLgogCQkJRXhhbXBsZTogcXVpcmtzPTA0MTk6YWFmNTpybCwwNDIxOjA0MzM6cmMKIAorCXVzZXJwdGU9CisJCQlbWDg2XSBGbGFncyBjb250cm9sbGluZyB1c2VyIFBURSBhbGxvY2F0aW9ucy4KKworCQkJCW5vaGlnaCA9IGRvIG5vdCBhbGxvY2F0ZSBQVEUgcGFnZXMgaW4KKwkJCQkJSElHSE1FTSByZWdhcmRsZXNzIG9mIHNldHRpbmcKKwkJCQkJb2YgQ09ORklHX0hJR0hQVEUuCisKIAl2ZHNvPQkJW1g4NixTSF0KIAkJCXZkc289MjogZW5hYmxlIGNvbXBhdCBWRFNPIChkZWZhdWx0IHdpdGggQ09NUEFUX1ZEU08pCiAJCQl2ZHNvPTE6IGVuYWJsZSBWRFNPIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwppbmRleCA0MjIwODUxLi4zMTE5ZjVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8emxpYi5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IDAwNmIzOWQuLmU4N2YzY2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0xMDc0LDEwICsxMDc0LDEwIEBACiAJRGVmYXVsdDogNQogCiBtYXhfYWRkcmVzc2VzIC0gSU5URUdFUgotCU51bWJlciBvZiBtYXhpbXVtIGFkZHJlc3NlcyBwZXIgaW50ZXJmYWNlLiAgMCBkaXNhYmxlcyBsaW1pdGF0aW9uLgotCUl0IGlzIHJlY29tbWVuZGVkIG5vdCBzZXQgdG9vIGxhcmdlIHZhbHVlIChvciAwKSBiZWNhdXNlIGl0IHdvdWxkCi0JYmUgdG9vIGVhc3kgd2F5IHRvIGNyYXNoIGtlcm5lbCB0byBhbGxvdyB0byBjcmVhdGUgdG9vIG11Y2ggb2YKLQlhdXRvY29uZmlndXJlZCBhZGRyZXNzZXMuCisJTWF4aW11bSBudW1iZXIgb2YgYXV0b2NvbmZpZ3VyZWQgYWRkcmVzc2VzIHBlciBpbnRlcmZhY2UuICBTZXR0aW5nCisJdG8gemVybyBkaXNhYmxlcyB0aGUgbGltaXRhdGlvbi4gIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBzZXQgdGhpcworCXZhbHVlIHRvbyBsYXJnZSAob3IgdG8gemVybykgYmVjYXVzZSBpdCB3b3VsZCBiZSBhbiBlYXN5IHdheSB0bworCWNyYXNoIHRoZSBrZXJuZWwgYnkgYWxsb3dpbmcgdG9vIG1hbnkgYWRkcmVzc2VzIHRvIGJlIGNyZWF0ZWQuCiAJRGVmYXVsdDogMTYKIAogZGlzYWJsZV9pcHY2IC0gQk9PTEVBTgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvbG9ja2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9sb2NraW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGY2MjJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvbG9ja2luZy50eHQKQEAgLTAsMCArMSwxMTggQEAKK1RoaXMgZmlsZSBleHBsYWlucyB0aGUgbG9ja2luZyBhbmQgZXhjbHVzaW9uIHNjaGVtZSB1c2VkIGluIHRoZSBQQ0NBUkQKK2FuZCBQQ01DSUEgc3Vic3lzdGVtcy4KKworCitBKSBPdmVydmlldywgTG9ja2luZyBIaWVyYXJjaHk6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbQktIHByb3RlY3RzIG9ubHkgdGhlIGxpc3Qgb2Ygc29ja2V0cworLSBza3RfbXV0ZXgJCQktIHNlcmlhbGl6ZXMgY2FyZCBpbnNlcnQgLyBlamVjdGlvbgorICAtIG9wc19tdXRleAkJCS0gc2VyaWFsaXplcyBzb2NrZXQgb3BlcmF0aW9uCisKKworQikgRXhjbHVzaW9uCis9PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNhbGxiYWNrcyB0byBzdHJ1Y3QgcGNtY2lhX3NvY2tldCBtdXN0CitiZSBjYWxsZWQgd2l0aCAic2t0X211dGV4IiBoZWxkOgorCisJc29ja2V0X2RldGVjdF9jaGFuZ2UoKQorCXNlbmRfZXZlbnQoKQorCXNvY2tldF9yZXNldCgpCisJc29ja2V0X3NodXRkb3duKCkKKwlzb2NrZXRfc2V0dXAoKQorCXNvY2tldF9yZW1vdmUoKQorCXNvY2tldF9pbnNlcnQoKQorCXNvY2tldF9lYXJseV9yZXN1bWUoKQorCXNvY2tldF9sYXRlX3Jlc3VtZSgpCisJc29ja2V0X3Jlc3VtZSgpCisJc29ja2V0X3N1c3BlbmQoKQorCisJc3RydWN0IHBjbWNpYV9jYWxsYmFjawkqY2FsbGJhY2sKKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNhbGxiYWNrcyB0byBzdHJ1Y3QgcGNtY2lhX3NvY2tldCBtdXN0CitiZSBjYWxsZWQgd2l0aCAib3BzX211dGV4IiBoZWxkOgorCisJc29ja2V0X3Jlc2V0KCkKKwlzb2NrZXRfc2V0dXAoKQorCisJc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zCSpvcHMKKwlzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcwkqcmVzb3VyY2Vfb3BzOworCitOb3RlIHRoYXQgc2VuZF9ldmVudCgpIGFuZCBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrICpjYWxsYmFjayBtdXN0IG5vdCBiZQorY2FsbGVkIHdpdGggIm9wc19tdXRleCIgaGVsZC4KKworCitDKSBQcm90ZWN0aW9uCis9PT09PT09PT09PT09CisKKzEuIEdsb2JhbCBEYXRhOgorLS0tLS0tLS0tLS0tLS0tCitzdHJ1Y3QgbGlzdF9oZWFkCXBjbWNpYV9zb2NrZXRfbGlzdDsKKworcHJvdGVjdGVkIGJ5IHBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbTsKKworCisyLiBQZXItU29ja2V0IERhdGE6CistLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcmVzb3VyY2Vfb3BzIGFuZCB0aGVpciBkYXRhIGFyZSBwcm90ZWN0ZWQgYnkgb3BzX211dGV4LgorCitUaGUgIm1haW4iIHN0cnVjdCBwY21jaWFfc29ja2V0IGlzIHByb3RlY3RlZCBhcyBmb2xsb3dzIChyZWFkLW9ubHkgZmllbGRzCitvciBzaW5nbGUtdXNlIGZpZWxkcyBub3QgbWVudGlvbmVkKToKKworLSBieSBwY21jaWFfc29ja2V0X2xpc3RfcndzZW06CisJc3RydWN0IGxpc3RfaGVhZAlzb2NrZXRfbGlzdDsKKworLSBieSB0aHJlYWRfbG9jazoKKwl1bnNpZ25lZCBpbnQJCXRocmVhZF9ldmVudHM7CisKKy0gYnkgc2t0X211dGV4OgorCXVfaW50CQkJc3VzcGVuZGVkX3N0YXRlOworCXZvaWQJCQkoKnR1bmVfYnJpZGdlKTsKKwlzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrCSpjYWxsYmFjazsKKwlpbnQJCQlyZXN1bWVfc3RhdHVzOworCistIGJ5IG9wc19tdXRleDoKKwlzb2NrZXRfc3RhdGVfdAkJc29ja2V0OworCXVfaW50CQkJc3RhdGU7CisJdV9zaG9ydAkJCWxvY2tfY291bnQ7CisJcGNjYXJkX21lbV9tYXAJCWNpc19tZW07CisJdm9pZCBfX2lvbWVtIAkJKmNpc192aXJ0OworCXN0cnVjdCB7IH0JCWlycTsKKwlpb193aW5kb3dfdAkJaW9bXTsKKwlwY2NhcmRfbWVtX21hcAkJd2luW107CisJc3RydWN0IGxpc3RfaGVhZAljaXNfY2FjaGU7CisJc2l6ZV90CQkJZmFrZV9jaXNfbGVuOworCXU4CQkJKmZha2VfY2lzOworCXVfaW50CQkJaXJxX21hc2s7CisJdm9pZCAJCQkoKnpvb21fdmlkZW8pOworCWludCAJCQkoKnBvd2VyX2hvb2spOworCXU4CQkJcmVzb3VyY2UuLi47CisJc3RydWN0IGxpc3RfaGVhZAlkZXZpY2VzX2xpc3Q7CisJdTgJCQlkZXZpY2VfY291bnQ7CisJc3RydWN0IAkJCXBjbWNpYV9zdGF0ZTsKKworCiszLiBQZXIgUENNQ0lBLWRldmljZSBEYXRhOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJtYWluIiBzdHJ1Y3QgcGNtY2lhX2RldmllIGlzIHByb3RlY3RlZCBhcyBmb2xsb3dzIChyZWFkLW9ubHkgZmllbGRzCitvciBzaW5nbGUtdXNlIGZpZWxkcyBub3QgbWVudGlvbmVkKToKKworCistIGJ5IHBjbWNpYV9zb2NrZXQtPm9wc19tdXRleDoKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNvY2tldF9kZXZpY2VfbGlzdDsKKwlzdHJ1Y3QgY29uZmlnX3QJCSpmdW5jdGlvbl9jb25maWc7CisJdTE2CQkJX2lycToxOworCXUxNgkJCV9pbzoxOworCXUxNgkJCV93aW46NDsKKwl1MTYJCQlfbG9ja2VkOjE7CisJdTE2CQkJYWxsb3dfZnVuY19pZF9tYXRjaDoxOworCXUxNgkJCXN1c3BlbmRlZDoxOworCXUxNgkJCV9yZW1vdmVkOjE7CisKKy0gYnkgdGhlIFBDTUNJQSBkcml2ZXI6CisJaW9fcmVxX3QJCWlvOworCWlycV9yZXFfdAkJaXJxOworCWNvbmZpZ19yZXFfdAkJY29uZjsKKwl3aW5kb3dfaGFuZGxlX3QJCXdpbjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUxMjEtcHNjLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUxMjEtcHNjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODMyZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0CkBAIC0wLDAgKzEsNzAgQEAKK01QQzUxMjEgUFNDIERldmljZSBUcmVlIEJpbmRpbmdzCisKK1BTQyBpbiBVQVJUIG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0KKworRm9yIFBTQyBpbiBVQVJUIG1vZGUgdGhlIG5lZWRlZCBQU0Mgc2VyaWFsIGRldmljZXMKK2FyZSBzcGVjaWZpZWQgYnkgZnNsLG1wYzUxMjEtcHNjLXVhcnQgbm9kZXMgaW4gdGhlCitmc2wsbXBjNTEyMS1pbW1yIFNvQyBub2RlLiBBZGRpdGlvbmFsbHkgdGhlIFBTQyBGSUZPCitDb250cm9sbGVyIG5vZGUgZnNsLG1wYzUxMjEtcHNjLWZpZm8gaXMgcmVxdWVyZWQgdGhlcmU6CisKK2ZzbCxtcGM1MTIxLXBzYy11YXJ0IG5vZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzIDoKKyAtIGNvbXBhdGlibGUgOiBTaG91bGQgY29udGFpbiAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiIGFuZCAiZnNsLG1wYzUxMjEtcHNjIgorIC0gY2VsbC1pbmRleCA6IEluZGV4IG9mIHRoZSBQU0MgaW4gaGFyZHdhcmUKKyAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBQU0MgZGV2aWNlCisgLSBpbnRlcnJ1cHRzIDogPGEgYj4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBvZiB0aGUKKyAgIFBTQyBGSUZPIENvbnRyb2xsZXIgYW5kIGIgaXMgYSBmaWVsZCB0aGF0IHJlcHJlc2VudHMgYW4KKyAgIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQgbGV2ZWwgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnRlcnJ1cHQuCisgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KKworUmVjb21tZW5kZWQgcHJvcGVydGllcyA6CisgLSBmc2wscngtZmlmby1zaXplIDogdGhlIHNpemUgb2YgdGhlIFJYIGZpZm8gc2xpY2UgKGEgbXVsdGlwbGUgb2YgNCkKKyAtIGZzbCx0eC1maWZvLXNpemUgOiB0aGUgc2l6ZSBvZiB0aGUgVFggZmlmbyBzbGljZSAoYSBtdWx0aXBsZSBvZiA0KQorCisKK2ZzbCxtcGM1MTIxLXBzYy1maWZvIG5vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVxdWlyZWQgcHJvcGVydGllcyA6CisgLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlICJmc2wsbXBjNTEyMS1wc2MtZmlmbyIKKyAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBQU0MKKyAgICAgICAgIEZJRk8gQ29udHJvbGxlcgorIC0gaW50ZXJydXB0cyA6IDxhIGI+IHdoZXJlIGEgaXMgdGhlIGludGVycnVwdCBudW1iZXIgb2YgdGhlCisgICBQU0MgRklGTyBDb250cm9sbGVyIGFuZCBiIGlzIGEgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuCisgICBlbmNvZGluZyBvZiB0aGUgc2Vuc2UgYW5kIGxldmVsIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZXJydXB0LgorIC0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAorICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisKKworRXhhbXBsZSBmb3IgYSBib2FyZCB1c2luZyBQU0MwIGFuZCBQU0MxIGRldmljZXMgaW4gc2VyaWFsIG1vZGU6CisKK3NlcmlhbEAxMTAwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1wc2MtdWFydCIsICJmc2wsbXBjNTEyMS1wc2MiOworCWNlbGwtaW5kZXggPSA8MD47CisJcmVnID0gPDB4MTEwMDAgMHgxMDA+OworCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCWZzbCxyeC1maWZvLXNpemUgPSA8MTY+OworCWZzbCx0eC1maWZvLXNpemUgPSA8MTY+OworfTsKKworc2VyaWFsQDExMTAwIHsKKwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBzYy11YXJ0IiwgImZzbCxtcGM1MTIxLXBzYyI7CisJY2VsbC1pbmRleCA9IDwxPjsKKwlyZWcgPSA8MHgxMTEwMCAweDEwMD47CisJaW50ZXJydXB0cyA9IDw0MCAweDg+OworCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJZnNsLHJ4LWZpZm8tc2l6ZSA9IDwxNj47CisJZnNsLHR4LWZpZm8tc2l6ZSA9IDwxNj47Cit9OworCitwc2NmaWZvQDExZjAwIHsKKwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBzYy1maWZvIjsKKwlyZWcgPSA8MHgxMWYwMCAweDEwMD47CisJaW50ZXJydXB0cyA9IDw0MCAweDg+OworCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQKaW5kZXggZTdkOWEzNC4uODA1MTBjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0CkBAIC0xMyw2ICsxMywxMSBAQAogLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CiAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgogCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBncGlvcyA6IHNwZWNpZmllcyB0aGUgZ3BpbyBwaW5zIHRvIGJlIHVzZWQgZm9yIGNoaXBzZWxlY3RzLgorICBUaGUgZ3Bpb3Mgd2lsbCBiZSByZWZlcnJlZCB0byBhcyByZWcgPSA8aW5kZXg+IGluIHRoZSBTUEkgY2hpbGQgbm9kZXMuCisgIElmIHVuc3BlY2lmaWVkLCBhIHNpbmdsZSBTUEkgZGV2aWNlIHdpdGhvdXQgYSBjaGlwIHNlbGVjdCBjYW4gYmUgdXNlZC4KKwogRXhhbXBsZToKIAlzcGlANGMwIHsKIAkJY2VsbC1pbmRleCA9IDwwPjsKQEAgLTIxLDQgKzI2LDYgQEAKIAkJaW50ZXJydXB0cyA9IDw4MiAwPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwogCQltb2RlID0gImNwdSI7CisJCWdwaW9zID0gPCZncGlvIDE4IDEJLy8gZGV2aWNlIHJlZz08MD4KKwkJCSAmZ3BpbyAxOSAxPjsJLy8gZGV2aWNlIHJlZz08MT4KIAl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3B0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHRyYWNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGE1NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3B0cmFjZS50eHQKQEAgLTAsMCArMSwxMzQgQEAKK0dEQiBpbnRlbmRzIHRvIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBoYXJkd2FyZSBkZWJ1ZyBmZWF0dXJlcyBvZiBCb29rRQorcHJvY2Vzc29yczoKKworNCBoYXJkd2FyZSBicmVha3BvaW50cyAoSUFDKQorMiBoYXJkd2FyZSB3YXRjaHBvaW50cyAocmVhZCwgd3JpdGUgYW5kIHJlYWQtd3JpdGUpIChEQUMpCisyIHZhbHVlIGNvbmRpdGlvbnMgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaHBvaW50cyAoRFZDKQorCitGb3IgdGhhdCwgd2UgbmVlZCB0byBleHRlbmQgcHRyYWNlIHNvIHRoYXQgR0RCIGNhbiBxdWVyeSBhbmQgc2V0IHRoZXNlCityZXNvdXJjZXMuIFNpbmNlIHdlJ3JlIGV4dGVuZGluZywgd2UncmUgdHJ5aW5nIHRvIGNyZWF0ZSBhbiBpbnRlcmZhY2UKK3RoYXQncyBleHRlbmRhYmxlIGFuZCB0aGF0IGNvdmVycyBib3RoIEJvb2tFIGFuZCBzZXJ2ZXIgcHJvY2Vzc29ycywgc28KK3RoYXQgR0RCIGRvZXNuJ3QgbmVlZCB0byBzcGVjaWFsLWNhc2UgZWFjaCBvZiB0aGVtLiBXZSBhZGRlZCB0aGUKK2ZvbGxvd2luZyAzIG5ldyBwdHJhY2UgcmVxdWVzdHMuCisKKzEuIFBUUkFDRV9QUENfR0VUSFdERUJVR0lORk8KKworUXVlcnkgZm9yIEdEQiB0byBkaXNjb3ZlciB0aGUgaGFyZHdhcmUgZGVidWcgZmVhdHVyZXMuIFRoZSBtYWluIGluZm8gdG8KK2JlIHJldHVybmVkIGhlcmUgaXMgdGhlIG1pbmltdW0gYWxpZ25tZW50IGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hwb2ludHMuCitCb29rRSBwcm9jZXNzb3JzIGRvbid0IGhhdmUgcmVzdHJpY3Rpb25zIGhlcmUsIGJ1dCBzZXJ2ZXIgcHJvY2Vzc29ycyBoYXZlCithbiA4LWJ5dGUgYWxpZ25tZW50IHJlc3RyaWN0aW9uIGZvciBoYXJkd2FyZSB3YXRjaHBvaW50cy4gV2UnZCBsaWtlIHRvIGF2b2lkCithZGRpbmcgc3BlY2lhbCBjYXNlcyB0byBHREIgYmFzZWQgb24gd2hhdCBpdCBzZWVzIGluIEFVWFYuCisKK1NpbmNlIHdlJ3JlIGF0IGl0LCB3ZSBhZGRlZCBvdGhlciB1c2VmdWwgaW5mbyB0aGF0IHRoZSBrZXJuZWwgY2FuIHJldHVybiB0bworR0RCOiB0aGlzIHF1ZXJ5IHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgaGFyZHdhcmUgYnJlYWtwb2ludHMsIGhhcmR3YXJlCit3YXRjaHBvaW50cyBhbmQgd2hldGhlciBpdCBzdXBwb3J0cyBhIHJhbmdlIG9mIGFkZHJlc3NlcyBhbmQgYSBjb25kaXRpb24uCitUaGUgcXVlcnkgd2lsbCBmaWxsIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHByb3ZpZGVkIGJ5IHRoZSByZXF1ZXN0aW5nIHByb2Nlc3M6CisKK3N0cnVjdCBwcGNfZGVidWdfaW5mbyB7CisgICAgICAgdW5pdDMyX3QgdmVyc2lvbjsKKyAgICAgICB1bml0MzJfdCBudW1faW5zdHJ1Y3Rpb25fYnBzOworICAgICAgIHVuaXQzMl90IG51bV9kYXRhX2JwczsKKyAgICAgICB1bml0MzJfdCBudW1fY29uZGl0aW9uX3JlZ3M7CisgICAgICAgdW5pdDMyX3QgZGF0YV9icF9hbGlnbm1lbnQ7CisgICAgICAgdW5pdDMyX3Qgc2l6ZW9mX2NvbmRpdGlvbjsgLyogc2l6ZSBvZiB0aGUgRFZDIHJlZ2lzdGVyICovCisgICAgICAgdWludDY0X3QgZmVhdHVyZXM7IC8qIGJpdG1hc2sgb2YgdGhlIGluZGl2aWR1YWwgZmxhZ3MgKi8KK307CisKK2ZlYXR1cmVzIHdpbGwgaGF2ZSBiaXRzIGluZGljYXRpbmcgd2hldGhlciB0aGVyZSBpcyBzdXBwb3J0IGZvcjoKKworI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9JTlNOX0JQX1JBTkdFCQkweDEKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9NQVNLCQkweDIKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfREFUQV9CUF9SQU5HRQkJMHg0CisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfTUFTSwkJMHg4CisKKzIuIFBUUkFDRV9TRVRIV0RFQlVHCisKK1NldHMgYSBoYXJkd2FyZSBicmVha3BvaW50IG9yIHdhdGNocG9pbnQsIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgc3RydWN0dXJlOgorCitzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgeworICAgICAgICB1aW50MzJfdCB2ZXJzaW9uOworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEUgIDB4MQorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQgICAgIDB4MgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFICAgIDB4NAorICAgICAgICB1aW50MzJfdCB0cmlnZ2VyX3R5cGU7ICAgICAgIC8qIG9ubHkgc29tZSBjb21iaW5hdGlvbnMgYWxsb3dlZCAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfSU5DTFVTSVZFICAgICAweDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9FWENMVVNJVkUgICAgIDB4MgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX01BU0sgICAgICAgICAgICAgICAgMHgzCisgICAgICAgIHVpbnQzMl90IGFkZHJfbW9kZTsgICAgICAgICAgLyogYWRkcmVzcyBtYXRjaCBtb2RlICovCisKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX01PREUgICAweDMKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUgICAweDAKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0FORCAgICAweDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0VYQUNUICAweDEJLyogZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBzYW1lIHRoaW5nIGFzIGFib3ZlICovCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9PUiAgICAgMHgyCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkRfT1IgMHgzCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9BTEwgMHgwMGZmMDAwMAkvKiBieXRlIGVuYWJsZSBiaXRzICovCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRShuKSAgKDE8PCgobikrMTYpKQorICAgICAgICB1aW50MzJfdCBjb25kaXRpb25fbW9kZTsgICAgIC8qIGJyZWFrL3dhdGNocG9pbnQgY29uZGl0aW9uIGZsYWdzICovCisKKyAgICAgICAgdWludDY0X3QgYWRkcjsKKyAgICAgICAgdWludDY0X3QgYWRkcjI7CisgICAgICAgIHVpbnQ2NF90IGNvbmRpdGlvbl92YWx1ZTsKK307CisKK0EgcmVxdWVzdCBzcGVjaWZpZXMgb25lIGV2ZW50LCBub3QgbmVjZXNzYXJpbHkganVzdCBvbmUgcmVnaXN0ZXIgdG8gYmUgc2V0LgorRm9yIGluc3RhbmNlLCBpZiB0aGUgcmVxdWVzdCBpcyBmb3IgYSB3YXRjaHBvaW50IHdpdGggYSBjb25kaXRpb24sIGJvdGggdGhlCitEQUMgYW5kIERWQyByZWdpc3RlcnMgd2lsbCBiZSBzZXQgaW4gdGhlIHNhbWUgcmVxdWVzdC4KKworV2l0aCB0aGlzIEdEQiBjYW4gYXNrIGZvciBhbGwga2luZHMgb2YgaGFyZHdhcmUgYnJlYWtwb2ludHMgYW5kIHdhdGNocG9pbnRzCit0aGF0IHRoZSBCb29rRSBzdXBwb3J0cy4gQ09NRUZST00gYnJlYWtwb2ludHMgYXZhaWxhYmxlIGluIHNlcnZlciBwcm9jZXNzb3JzCithcmUgbm90IGNvbnRlbXBsYXRlZCwgYnV0IHRoYXQgaXMgb3V0IG9mIHRoZSBzY29wZSBvZiB0aGlzIHdvcmsuCisKK3B0cmFjZSB3aWxsIHJldHVybiBhbiBpbnRlZ2VyIChoYW5kbGUpIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIHRoZSBicmVha3BvaW50IG9yCit3YXRjaHBvaW50IGp1c3QgY3JlYXRlZC4gVGhpcyBpbnRlZ2VyIHdpbGwgYmUgdXNlZCBpbiB0aGUgUFRSQUNFX0RFTEhXREVCVUcKK3JlcXVlc3QgdG8gYXNrIGZvciBpdHMgcmVtb3ZhbC4gUmV0dXJuIC1FTk9TUEMgaWYgdGhlIHJlcXVlc3RlZCBicmVha3BvaW50CitjYW4ndCBiZSBhbGxvY2F0ZWQgb24gdGhlIHJlZ2lzdGVycy4KKworU29tZSBleGFtcGxlcyBvZiB1c2luZyB0aGUgc3RydWN0dXJlIHRvOgorCistIHNldCBhIGJyZWFrcG9pbnQgaW4gdGhlIGZpcnN0IGJyZWFrcG9pbnQgcmVnaXN0ZXIKKworICBwLnZlcnNpb24gICAgICAgICA9IFBQQ19ERUJVR19DVVJSRU5UX1ZFUlNJT047CisgIHAudHJpZ2dlcl90eXBlICAgID0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFOworICBwLmFkZHJfbW9kZSAgICAgICA9IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1Q7CisgIHAuY29uZGl0aW9uX21vZGUgID0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkU7CisgIHAuYWRkciAgICAgICAgICAgID0gKHVpbnQ2NF90KSBhZGRyZXNzOworICBwLmFkZHIyICAgICAgICAgICA9IDA7CisgIHAuY29uZGl0aW9uX3ZhbHVlID0gMDsKKworLSBzZXQgYSB3YXRjaHBvaW50IHdoaWNoIHRyaWdnZXJzIG9uIHJlYWRzIGluIHRoZSBzZWNvbmQgd2F0Y2hwb2ludCByZWdpc3RlcgorCisgIHAudmVyc2lvbiAgICAgICAgID0gUFBDX0RFQlVHX0NVUlJFTlRfVkVSU0lPTjsKKyAgcC50cmlnZ2VyX3R5cGUgICAgPSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQ7CisgIHAuYWRkcl9tb2RlICAgICAgID0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVDsKKyAgcC5jb25kaXRpb25fbW9kZSAgPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORTsKKyAgcC5hZGRyICAgICAgICAgICAgPSAodWludDY0X3QpIGFkZHJlc3M7CisgIHAuYWRkcjIgICAgICAgICAgID0gMDsKKyAgcC5jb25kaXRpb25fdmFsdWUgPSAwOworCistIHNldCBhIHdhdGNocG9pbnQgd2hpY2ggdHJpZ2dlcnMgb25seSB3aXRoIGEgc3BlY2lmaWMgdmFsdWUKKworICBwLnZlcnNpb24gICAgICAgICA9IFBQQ19ERUJVR19DVVJSRU5UX1ZFUlNJT047CisgIHAudHJpZ2dlcl90eXBlICAgID0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEOworICBwLmFkZHJfbW9kZSAgICAgICA9IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1Q7CisgIHAuY29uZGl0aW9uX21vZGUgID0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0FORCB8IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9BTEw7CisgIHAuYWRkciAgICAgICAgICAgID0gKHVpbnQ2NF90KSBhZGRyZXNzOworICBwLmFkZHIyICAgICAgICAgICA9IDA7CisgIHAuY29uZGl0aW9uX3ZhbHVlID0gKHVpbnQ2NF90KSBjb25kaXRpb247CisKKy0gc2V0IGEgcmFuZ2VkIGhhcmR3YXJlIGJyZWFrcG9pbnQKKworICBwLnZlcnNpb24gICAgICAgICA9IFBQQ19ERUJVR19DVVJSRU5UX1ZFUlNJT047CisgIHAudHJpZ2dlcl90eXBlICAgID0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFOworICBwLmFkZHJfbW9kZSAgICAgICA9IFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfSU5DTFVTSVZFOworICBwLmNvbmRpdGlvbl9tb2RlICA9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FOworICBwLmFkZHIgICAgICAgICAgICA9ICh1aW50NjRfdCkgYmVnaW5fcmFuZ2U7CisgIHAuYWRkcjIgICAgICAgICAgID0gKHVpbnQ2NF90KSBlbmRfcmFuZ2U7CisgIHAuY29uZGl0aW9uX3ZhbHVlID0gMDsKKworMy4gUFRSQUNFX0RFTEhXREVCVUcKKworVGFrZXMgYW4gaW50ZWdlciB3aGljaCBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGJyZWFrcG9pbnQgb3Igd2F0Y2hwb2ludAorKGkuZS4sIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIFBUUkFDRV9TRVRIV0RFQlVHKSwgYW5kIGRlbGV0ZXMgdGhlCitjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgb3Igd2F0Y2hwb2ludC4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8gYi9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KaW5kZXggMzM5MjA3ZC4uZDM3OGNiYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTwpAQCAtODcsNiArODcsMTIgQEAKICAgY29tcGF0aWJpbGl0eSwgYnkgdGhlIGRldmljZSBudW1iZXIgaW4gaGV4YWRlY2ltYWwgKDB4YWJjZCBvciBhYmNkKS4gRGV2aWNlCiAgIG51bWJlcnMgZ2l2ZW4gYXMgMHhhYmNkIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgMC4wLmFiY2QuCiAKKyogL3Byb2MvY2lvX3NldHRsZQorCisgIEEgd3JpdGUgcmVxdWVzdCB0byB0aGlzIGZpbGUgaXMgYmxvY2tlZCB1bnRpbCBhbGwgcXVldWVkIGNpbyBhY3Rpb25zIGFyZQorICBoYW5kbGVkLiBUaGlzIHdpbGwgYWxsb3cgdXNlcnNwYWNlIHRvIHdhaXQgZm9yIHBlbmRpbmcgd29yayBhZmZlY3RpbmcKKyAgZGV2aWNlIGF2YWlsYWJpbGl0eSBhZnRlciBjaGFuZ2luZyBjaW9faWdub3JlIG9yIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLgorCiAqIEZvciBzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBwcmVzZW50IGluIHRoZSAvcHJvYyBmaWxlc3lzdGVtIGluIDIuNCAobmFtZWx5LAogICAvcHJvYy9zdWJjaGFubmVscyBhbmQgL3Byb2MvY2hwaWRzKSwgc2VlIGRyaXZlci1tb2RlbC50eHQuCiAgIEluZm9ybWF0aW9uIGZvcm1lcmx5IGluIC9wcm9jL2lycV9jb3VudCBpcyBub3cgaW4gL3Byb2MvaW50ZXJydXB0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL2RyaXZlci1tb2RlbC50eHQKaW5kZXggYmRlNDczZC4uZWQyNjVjZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zMzkwL2RyaXZlci1tb2RlbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL2RyaXZlci1tb2RlbC50eHQKQEAgLTIyMyw4ICsyMjMsOCBAQAogcHJpdmF0ZSBkYXRhLgogCiBUbyBpbXBsZW1lbnQgYSBjY3dncm91cCBkcml2ZXIsIHBsZWFzZSByZWZlciB0byBpbmNsdWRlL2FzbS9jY3dncm91cC5oLiBLZWVwIGluCi1taW5kIHRoYXQgbW9zdCBkcml2ZXJzIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgYm90aCBhIGNjd2dyb3VwIGFuZCBhIGNjdyBkcml2ZXIKLSh1bmxlc3MgeW91IGhhdmUgYSBtZXRhIGNjdyBkcml2ZXIsIGxpa2UgY3UzMDg4IGZvciBsY3MgYW5kIGN0YykuCittaW5kIHRoYXQgbW9zdCBkcml2ZXJzIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgYm90aCBhIGNjd2dyb3VwIGFuZCBhIGNjdworZHJpdmVyLgogCiAKIDIuIENoYW5uZWwgcGF0aHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMKaW5kZXggMTdmZmEwNi4uMzAwMjM1NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMKQEAgLTEsMyArMSwxOSBAQAorMSBSZWxlYXNlIERhdGUgICAgOiBUaHVyLiAgT2N0IDI5LCAyMDA5IDA5OjEyOjQ1IFBTVCAyMDA5IC0KKwkJCShlbWFpbGQtaWQ6bWVnYXJhaWRsaW51eEBsc2kuY29tKQorCQkJQm8gWWFuZworCisyIEN1cnJlbnQgVmVyc2lvbiA6IDAwLjAwLjA0LjE3LjEtcmMxCiszIE9sZGVyIFZlcnNpb24gICA6IDAwLjAwLjA0LjEyCisKKzEuCUFkZCB0aGUgcGFkXzAgaW4gbWZpIGZyYW1lIHN0cnVjdHVyZSB0byAwIHRvIGZpeCB0aGUKKwljb250ZXh0IHZhbHVlIGxhcmdlciB0aGFuIDMyYml0IHZhbHVlIGlzc3VlLgorCisyLglBZGQgdGhlIGxvZ2ljIGRyaXZlIGxpc3QgdG8gdGhlIGRyaXZlci4gIERyaXZlciB3aWxsCisJa2VlcCB0aGUgbG9naWMgZHJpdmUgbGlzdCBpbnRlcm5hbCBhZnRlciBkcml2ZXIgbG9hZC4KKworMy4JZHJpdmVyIGZpeGVkIHRoZSBkZXZpY2UgdXBkYXRlIGlzc3VlIGFmdGVyIGdldCB0aGUgQUVOCisJUEQgZGVsZXRlL0FERCwgTEQgYWRkL2RlbGV0ZSBmcm9tIEZXLgorCiAxIFJlbGVhc2UgRGF0ZSAgICA6IFR1ZXMuICBKdWx5IDI4LCAyMDA5IDEwOjEyOjQ1IFBTVCAyMDA5IC0KIAkJCShlbWFpbGQtaWQ6bWVnYXJhaWRsaW51eEBsc2kuY29tKQogCQkJQm8gWWFuZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKaW5kZXggMjM5ZjE0Yi4uZjFmODFhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CkBAIC0xLDUgKzEsNiBAQAogCQlmdW5jdGlvbiB0cmFjZXIgZ3V0cwogCQk9PT09PT09PT09PT09PT09PT09PQorCQlCeSBNaWtlIEZyeXNpbmdlcgogCiBJbnRyb2R1Y3Rpb24KIC0tLS0tLS0tLS0tLQpAQCAtMTczLDE0ICsxNzQsMTYgQEAKIAogCXVuc2lnbmVkIGxvbmcgKmZyb21wYyA9ICYuLi47CiAJdW5zaWduZWQgbG9uZyBzZWxmcGMgPSA8cmV0dXJuIGFkZHJlc3M+IC0gTUNPVU5UX0lOU05fU0laRTsKLQlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4oZnJvbXBjLCBzZWxmcGMpOworCS8qIHBhc3NpbmcgZnJhbWUgcG9pbnRlciB1cCBpcyBvcHRpb25hbCAtLSBzZWUgYmVsb3cgKi8KKwlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4oZnJvbXBjLCBzZWxmcGMsIGZyYW1lX3BvaW50ZXIpOwogCiAJLyogcmVzdG9yZSBhbGwgc3RhdGUgbmVlZGVkIGJ5IHRoZSBBQkkgKi8KIH0KICNlbmRpZgogCi1Gb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGltcGxlbWVudCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4oKSwgc2ltcGx5IGxvb2sgYXQKLXRoZSB4ODYgdmVyc2lvbi4gIFRoZSBvbmx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwaWVjZSBpbiBpdCBpcyB0aGUgc2V0dXAgb2YKK0ZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW1wbGVtZW50IHByZXBhcmVfZnRyYWNlX3JldHVybigpLCBzaW1wbHkgbG9vayBhdCB0aGUKK3g4NiB2ZXJzaW9uICh0aGUgZnJhbWUgcG9pbnRlciBwYXNzaW5nIGlzIG9wdGlvbmFsOyBzZWUgdGhlIG5leHQgc2VjdGlvbiBmb3IKK21vcmUgaW5mb3JtYXRpb24pLiAgVGhlIG9ubHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBpZWNlIGluIGl0IGlzIHRoZSBzZXR1cCBvZgogdGhlIGZhdWx0IHJlY292ZXJ5IHRhYmxlICh0aGUgYXNtKC4uLikgY29kZSkuICBUaGUgcmVzdCBzaG91bGQgYmUgdGhlIHNhbWUKIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgogCkBAIC0yMDUsNiArMjA4LDIzIEBACiAjZW5kaWYKIAogCitIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZQX1RFU1QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBhcmNoIG1heSBwYXNzIGluIGEgdW5pcXVlIHZhbHVlIChmcmFtZSBwb2ludGVyKSB0byBib3RoIHRoZSBlbnRlcmluZyBhbmQKK2V4aXRpbmcgb2YgYSBmdW5jdGlvbi4gIE9uIGV4aXQsIHRoZSB2YWx1ZSBpcyBjb21wYXJlZCBhbmQgaWYgaXQgZG9lcyBub3QKK21hdGNoLCB0aGVuIGl0IHdpbGwgcGFuaWMgdGhlIGtlcm5lbC4gIFRoaXMgaXMgbGFyZ2VseSBhIHNhbml0eSBjaGVjayBmb3IgYmFkCitjb2RlIGdlbmVyYXRpb24gd2l0aCBnY2MuICBJZiBnY2MgZm9yIHlvdXIgcG9ydCBzYW5lbHkgdXBkYXRlcyB0aGUgZnJhbWUKK3BvaW50ZXIgdW5kZXIgZGlmZmVyZW50IG9waXRtaXphdGlvbiBsZXZlbHMsIHRoZW4gaWdub3JlIHRoaXMgb3B0aW9uLgorCitIb3dldmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgaXQgaXNuJ3QgdGVycmlibHkgZGlmZmljdWx0LiAgSW4geW91ciBhc3NlbWJseSBjb2RlCit0aGF0IGNhbGxzIHByZXBhcmVfZnRyYWNlX3JldHVybigpLCBwYXNzIHRoZSBmcmFtZSBwb2ludGVyIGFzIHRoZSAzcmQgYXJndW1lbnQuCitUaGVuIGluIHRoZSBDIHZlcnNpb24gb2YgdGhhdCBmdW5jdGlvbiwgZG8gd2hhdCB0aGUgeDg2IHBvcnQgZG9lcyBhbmQgcGFzcyBpdAorYWxvbmcgdG8gZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKCkgaW5zdGVhZCBvZiBhIHN0dWIgdmFsdWUgb2YgMC4KKworU2ltaWxhcmx5LCB3aGVuIHlvdSBjYWxsIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcigpLCBwYXNzIGl0IHRoZSBmcmFtZSBwb2ludGVyLgorCisKIEhBVkVfRlRSQUNFX05NSV9FTlRFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIxOCwxMSArMjM4LDEwIEBACiAKIFlvdSBuZWVkIHZlcnkgZmV3IHRoaW5ncyB0byBnZXQgdGhlIHN5c2NhbGxzIHRyYWNpbmcgaW4gYW4gYXJjaC4KIAorLSBTdXBwb3J0IEhBVkVfQVJDSF9UUkFDRUhPT0sgKHNlZSBhcmNoL0tjb25maWcpLgogLSBIYXZlIGEgTlJfc3lzY2FsbHMgdmFyaWFibGUgaW4gPGFzbS91bmlzdGQuaD4gdGhhdCBwcm92aWRlcyB0aGUgbnVtYmVyCiAgIG9mIHN5c2NhbGxzIHN1cHBvcnRlZCBieSB0aGUgYXJjaC4KLS0gSW1wbGVtZW50IGFyY2hfc3lzY2FsbF9hZGRyKCkgdGhhdCByZXNvbHZlcyBhIHN5c2NhbGwgYWRkcmVzcyBmcm9tIGEKLSAgc3lzY2FsbCBudW1iZXIuCi0tIFN1cHBvcnQgdGhlIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgdGhyZWFkIGZsYWdzCistIFN1cHBvcnQgdGhlIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgdGhyZWFkIGZsYWdzLgogLSBQdXQgdGhlIHRyYWNlX3N5c19lbnRlcigpIGFuZCB0cmFjZV9zeXNfZXhpdCgpIHRyYWNlcG9pbnRzIGNhbGxzIGZyb20gcHRyYWNlCiAgIGluIHRoZSBwdHJhY2Ugc3lzY2FsbHMgdHJhY2luZyBwYXRoLgogLSBUYWcgdGhpcyBhcmNoIGFzIEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAppbmRleCA4MTc5NjkyLi5iYWIzMDQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CkBAIC0xNjI1LDcgKzE2MjUsNyBAQAogCiAgIyBlY2hvIHN5c19uYW5vc2xlZXAgaHJ0aW1lcl9pbnRlcnJ1cHQgXAogCQk+IHNldF9mdHJhY2VfZmlsdGVyCi0gIyBlY2hvIGZ0cmFjZSA+IGN1cnJlbnRfdHJhY2VyCisgIyBlY2hvIGZ1bmN0aW9uID4gY3VycmVudF90cmFjZXIKICAjIGVjaG8gMSA+IHRyYWNpbmdfZW5hYmxlZAogICMgdXNsZWVwIDEKICAjIGVjaG8gMCA+IHRyYWNpbmdfZW5hYmxlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dAppbmRleCA0N2FhYmVlLi5hOTEwMGIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dApAQCAtMjQsNiArMjQsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBwWzpbR1JQL11FVkVOVF0gU1lNQk9MWytvZmZzXXxNRU1BRERSIFtGRVRDSEFSR1NdCTogU2V0IGEgcHJvYmUKICAgcls6W0dSUC9dRVZFTlRdIFNZTUJPTFsrMF0gW0ZFVENIQVJHU10JCTogU2V0IGEgcmV0dXJuIHByb2JlCisgIC06W0dSUC9dRVZFTlQJCQkJCQk6IENsZWFyIGEgcHJvYmUKIAogIEdSUAkJOiBHcm91cCBuYW1lLiBJZiBvbWl0dGVkLCB1c2UgImtwcm9iZXMiIGZvciBpdC4KICBFVkVOVAkJOiBFdmVudCBuYW1lLiBJZiBvbWl0dGVkLCB0aGUgZXZlbnQgbmFtZSBpcyBnZW5lcmF0ZWQKQEAgLTM3LDE1ICszOCwxMiBAQAogICBAU1lNWyt8LW9mZnNdCTogRmV0Y2ggbWVtb3J5IGF0IFNZTSArfC0gb2ZmcyAoU1lNIHNob3VsZCBiZSBhIGRhdGEgc3ltYm9sKQogICAkc3RhY2tOCTogRmV0Y2ggTnRoIGVudHJ5IG9mIHN0YWNrIChOID49IDApCiAgICRzdGFjawk6IEZldGNoIHN0YWNrIGFkZHJlc3MuCi0gICRhcmdOCQk6IEZldGNoIGZ1bmN0aW9uIGFyZ3VtZW50LiAoTiA+PSAwKSgqKQotICAkcmV0dmFsCTogRmV0Y2ggcmV0dXJuIHZhbHVlLigqKikKLSAgK3wtb2ZmcyhGRVRDSEFSRykgOiBGZXRjaCBtZW1vcnkgYXQgRkVUQ0hBUkcgK3wtIG9mZnMgYWRkcmVzcy4oKioqKQorICAkcmV0dmFsCTogRmV0Y2ggcmV0dXJuIHZhbHVlLigqKQorICArfC1vZmZzKEZFVENIQVJHKSA6IEZldGNoIG1lbW9yeSBhdCBGRVRDSEFSRyArfC0gb2ZmcyBhZGRyZXNzLigqKikKICAgTkFNRT1GRVRDSEFSRzogU2V0IE5BTUUgYXMgdGhlIGFyZ3VtZW50IG5hbWUgb2YgRkVUQ0hBUkcuCiAKLSAgKCopIGFOIG1heSBub3QgY29ycmVjdCBvbiBhc21saW5rYWdlZCBmdW5jdGlvbnMgYW5kIGF0IHRoZSBtaWRkbGUgb2YKLSAgICAgIGZ1bmN0aW9uIGJvZHkuCi0gICgqKikgb25seSBmb3IgcmV0dXJuIHByb2JlLgotICAoKioqKSB0aGlzIGlzIHVzZWZ1bCBmb3IgZmV0Y2hpbmcgYSBmaWVsZCBvZiBkYXRhIHN0cnVjdHVyZXMuCisgICgqKSBvbmx5IGZvciByZXR1cm4gcHJvYmUuCisgICgqKikgdGhpcyBpcyB1c2VmdWwgZm9yIGZldGNoaW5nIGEgZmllbGQgb2YgZGF0YSBzdHJ1Y3R1cmVzLgogCiAKIFBlci1Qcm9iZSBFdmVudCBGaWx0ZXJpbmcKQEAgLTgyLDEzICs4MCwxNiBAQAogVG8gYWRkIGEgcHJvYmUgYXMgYSBuZXcgZXZlbnQsIHdyaXRlIGEgbmV3IGRlZmluaXRpb24gdG8ga3Byb2JlX2V2ZW50cwogYXMgYmVsb3cuCiAKLSAgZWNobyBwOm15cHJvYmUgZG9fc3lzX29wZW4gZGZkPSRhcmcwIGZpbGVuYW1lPSRhcmcxIGZsYWdzPSRhcmcyIG1vZGU9JGFyZzMgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKKyAgZWNobyAncDpteXByb2JlIGRvX3N5c19vcGVuIGRmZD0lYXggZmlsZW5hbWU9JWR4IGZsYWdzPSVjeCBtb2RlPSs0KCRzdGFjayknID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzCiAKICBUaGlzIHNldHMgYSBrcHJvYmUgb24gdGhlIHRvcCBvZiBkb19zeXNfb3BlbigpIGZ1bmN0aW9uIHdpdGggcmVjb3JkaW5nCi0xc3QgdG8gNHRoIGFyZ3VtZW50cyBhcyAibXlwcm9iZSIgZXZlbnQuIEFzIHRoaXMgZXhhbXBsZSBzaG93cywgdXNlcnMgY2FuCi1jaG9vc2UgbW9yZSBmYW1pbGlhciBuYW1lcyBmb3IgZWFjaCBhcmd1bWVudHMuCisxc3QgdG8gNHRoIGFyZ3VtZW50cyBhcyAibXlwcm9iZSIgZXZlbnQuIE5vdGUsIHdoaWNoIHJlZ2lzdGVyL3N0YWNrIGVudHJ5IGlzCithc3NpZ25lZCB0byBlYWNoIGZ1bmN0aW9uIGFyZ3VtZW50IGRlcGVuZHMgb24gYXJjaC1zcGVjaWZpYyBBQkkuIElmIHlvdSB1bnN1cmUKK3RoZSBBQkksIHBsZWFzZSB0cnkgdG8gdXNlIHByb2JlIHN1YmNvbW1hbmQgb2YgcGVyZi10b29scyAoeW91IGNhbiBmaW5kIGl0Cit1bmRlciB0b29scy9wZXJmLykuCitBcyB0aGlzIGV4YW1wbGUgc2hvd3MsIHVzZXJzIGNhbiBjaG9vc2UgbW9yZSBmYW1pbGlhciBuYW1lcyBmb3IgZWFjaCBhcmd1bWVudHMuCiAKLSAgZWNobyByOm15cmV0cHJvYmUgZG9fc3lzX29wZW4gJHJldHZhbCA+PiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKKyAgZWNobyAncjpteXJldHByb2JlIGRvX3N5c19vcGVuICRyZXR2YWwnID4+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cwogCiAgVGhpcyBzZXRzIGEga3JldHByb2JlIG9uIHRoZSByZXR1cm4gcG9pbnQgb2YgZG9fc3lzX29wZW4oKSBmdW5jdGlvbiB3aXRoCiByZWNvcmRpbmcgcmV0dXJuIHZhbHVlIGFzICJteXJldHByb2JlIiBldmVudC4KQEAgLTk3LDIzICs5OCwyNCBAQAogCiAgIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9rcHJvYmVzL215cHJvYmUvZm9ybWF0CiBuYW1lOiBteXByb2JlCi1JRDogNzUKK0lEOiA3ODAKIGZvcm1hdDoKLQlmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsJb2Zmc2V0OjA7CXNpemU6MjsKLQlmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsJb2Zmc2V0OjI7CXNpemU6MTsKLQlmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwlvZmZzZXQ6MzsJc2l6ZToxOwotCWZpZWxkOmludCBjb21tb25fcGlkOwlvZmZzZXQ6NDsJc2l6ZTo0OwotCWZpZWxkOmludCBjb21tb25fdGdpZDsJb2Zmc2V0Ojg7CXNpemU6NDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7ICAgICAgIG9mZnNldDowOyAgICAgICBzaXplOjI7IHNpZ25lZDowOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsgICAgICAgb2Zmc2V0OjI7ICAgICAgIHNpemU6MTsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7ICAgICAgIG9mZnNldDozOyBzaXplOjE7c2lnbmVkOjA7CisgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOyAgIG9mZnNldDo0OyAgICAgICBzaXplOjQ7IHNpZ25lZDoxOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7ICAgIG9mZnNldDo4OyAgICAgICBzaXplOjQ7IHNpZ25lZDoxOwogCi0JZmllbGQ6IHVuc2lnbmVkIGxvbmcgaXA7CW9mZnNldDoxNjt0c2l6ZTo4OwotCWZpZWxkOiBpbnQgbmFyZ3M7CW9mZnNldDoyNDt0c2l6ZTo0OwotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGRmZDsJb2Zmc2V0OjMyO3RzaXplOjg7Ci0JZmllbGQ6IHVuc2lnbmVkIGxvbmcgZmlsZW5hbWU7CW9mZnNldDo0MDt0c2l6ZTo4OwotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGZsYWdzOwlvZmZzZXQ6NDg7dHNpemU6ODsKLQlmaWVsZDogdW5zaWduZWQgbG9uZyBtb2RlOwlvZmZzZXQ6NTY7dHNpemU6ODsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBfX3Byb2JlX2lwOyBvZmZzZXQ6MTI7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6aW50IF9fcHJvYmVfbmFyZ3M7ICAgICAgICBvZmZzZXQ6MTY7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBkZmQ7ICAgICAgICBvZmZzZXQ6MjA7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBmaWxlbmFtZTsgICBvZmZzZXQ6MjQ7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBmbGFnczsgICAgICBvZmZzZXQ6Mjg7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBtb2RlOyAgICAgICBvZmZzZXQ6MzI7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKIAotcHJpbnQgZm10OiAiKCVseCkgZGZkPSVseCBmaWxlbmFtZT0lbHggZmxhZ3M9JWx4IG1vZGU9JWx4IiwgUkVDLT5pcCwgUkVDLT5kZmQsIFJFQy0+ZmlsZW5hbWUsIFJFQy0+ZmxhZ3MsIFJFQy0+bW9kZQogCitwcmludCBmbXQ6ICIoJWx4KSBkZmQ9JWx4IGZpbGVuYW1lPSVseCBmbGFncz0lbHggbW9kZT0lbHgiLCBSRUMtPl9fcHJvYmVfaXAsCitSRUMtPmRmZCwgUkVDLT5maWxlbmFtZSwgUkVDLT5mbGFncywgUkVDLT5tb2RlCiAKICBZb3UgY2FuIHNlZSB0aGF0IHRoZSBldmVudCBoYXMgNCBhcmd1bWVudHMgYXMgaW4gdGhlIGV4cHJlc3Npb25zIHlvdSBzcGVjaWZpZWQuCiAKQEAgLTEyMSw2ICsxMjMsMTIgQEAKIAogIFRoaXMgY2xlYXJzIGFsbCBwcm9iZSBwb2ludHMuCiAKKyBPciwKKworICBlY2hvIC06bXlwcm9iZSA+PiBrcHJvYmVfZXZlbnRzCisKKyBUaGlzIGNsZWFycyBwcm9iZSBwb2ludHMgc2VsZWN0aXZlbHkuCisKICBSaWdodCBhZnRlciBkZWZpbml0aW9uLCBlYWNoIGV2ZW50IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEZvciB0cmFjaW5nIHRoZXNlCiBldmVudHMsIHlvdSBuZWVkIHRvIGVuYWJsZSBpdC4KIApAQCAtMTQ2LDQgKzE1NCwzIEBACiByZXR1cm5zIGZyb20gU1lNQk9MKGUuZy4gInN5c19vcGVuKzB4MWIvMHgxZCA8LSBkb19zeXNfb3BlbiIgbWVhbnMga2VybmVsCiByZXR1cm5zIGZyb20gZG9fc3lzX29wZW4gdG8gc3lzX29wZW4rMHgxYikuCiAKLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CmluZGV4IDc1MzllOGYuLjE2Y2EwMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKQEAgLTI2LDMgKzI2LDQgQEAKICAyNSAtPiBDb21wcm8gVmlkZW9NYXRlIEU4MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4NTg6ZTgwMF0KICAyNiAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTI5MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODU1MV0KICAyNyAtPiBNeWdpY2EgWDg1NTggUFJPIERNQi1USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0ZjE6ODU3OF0KKyAyOCAtPiBMRUFEVEVLIFdpbkZhc3QgUHhUVjEyMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NmYyMl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCBmY2UxZTdlLi5iNGE3NjcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC0xNzQsMyArMTc0LDQgQEAKIDE3MyAtPiBab2xpZCBIeWJyaWQgVFYgVHVuZXIgUENJICAgICAgICAgICAgICAgIFsxMTMxOjIwMDRdCiAxNzQgLT4gQXN1cyBFdXJvcGEgSHlicmlkIE9FTSAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODQ3XQogMTc1IC0+IExlYWR0ZWsgV2luZmFzdCBEVFYxMDAwUyAgICAgICAgICAgICAgICAgWzEwN2Q6NjY1NV0KKzE3NiAtPiBCZWhvbGRlciBCZWhvbGRUViA1MDUgUkRTICAgICAgICAgICAgICAgIFswMDAwOjUwNTFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCBlMGQyOThmLi45YjJlMGRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTgxLDMgKzgxLDQgQEAKIHR1bmVyPTgxIC0gUGFydHNuaWMgKERhZXdvbykgUFRJLTVORjA1CiB0dW5lcj04MiAtIFBoaWxpcHMgQ1UxMjE2TAogdHVuZXI9ODMgLSBOWFAgVERBMTgyNzEKK3R1bmVyPTg0IC0gU29ueSBCVEYtUHhuMDFaCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS50bGcyMzAwIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUudGxnMjMwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTZjY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUudGxnMjMwMApAQCAtMCwwICsxLDQ3IEBACit0bGcyMzAwIHJlbGVhc2Ugbm90ZXMKKz09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSB2NGwyL2R2YiBkZXZpY2UgZHJpdmVyIGZvciB0aGUgdGxnMjMwMCBjaGlwLgorCisKK2N1cnJlbnQgc3RhdHVzCis9PT09PT09PT09PT09PQorCit2aWRlbworCS0gc3VwcG9ydCBtbWFwIGFuZCByZWFkKCkuKG5vIG92ZXJsYXkpCisKK2F1ZGlvCisJLSBUaGUgZHJpdmVyIHdpbGwgcmVnaXN0ZXIgYSBBTFNBIGNhcmQgZm9yIHRoZSBhdWRpbyBpbnB1dC4KKwordmJpCisJLSBXb3JrcyBmb3IgYWxtb3N0IFRWIG5vcm1zLgorCitkdmItdAorCS0gd29ya3MgZm9yIERWQi1UCisKK0ZNCisJLSBXb3JrcyBmb3IgcmFkaW8uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVEVTVEVEIEFQUExJQ0FUSU9OUzoKKworLVZMQzEuMC40IHRlc3QgdGhlIHZpZGVvIGFuZCBkdmIuIFRoZSBHVUkgaXMgZnJpZW5kbHkgdG8gdXNlLgorCistTXBsYXllciB0ZXN0IHRoZSB2aWRlby4KKworLU1wbGF5ZXIgdGVzdCB0aGUgRk0uIFRoZSBtcGxheWVyIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIC0tZW5hYmxlLXJhZGlvIGFuZAorCSAtLWVuYWJsZS1yYWRpby1jYXB0dXJlLgorCVRoZSBjb21tYW5kIHJ1bnMgYXMgdGhpcyhUaGUgYWxzYSBhdWRpbyByZWdpc3RlcnMgdG8gY2FyZCAxKToKKwkjbXBsYXllciByYWRpbzovLzEwMy43L2NhcHR1cmUvIC1yYWRpbyBhZGV2aWNlPWh3PTEsMDphcmF0ZT00ODAwMCBcCisJCS1yYXdhdWRpbyByYXRlPTQ4MDAwOmNoYW5uZWxzPTIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitLTk9XTiBQUk9CTEVNUzoKK2Fib3V0IHByZWVtcGhhc2lzOgorCVlvdSBjYW4gc2V0IHRoZSBwcmVlbXBoYXNpcyBmb3IgcmFkaW8gYnkgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCSN2NGwyLWN0bCAtZCAvZGV2L3JhZGlvMCAtLXNldC1jdHJsPXByZV9lbXBoYXNpc19zZXR0aW5ncz0xCisKKwkicHJlX2VtcGhhc2lzX3NldHRpbmdzPTEiIG1lYW5zIHRoYXQgeW91IHNlbGVjdCB0aGUgNTB1cy4gSWYgeW91IHdhbnQKKwl0byBzZWxlY3QgdGhlIDc1dXMsIHBsZWFzZSB1c2UgInByZV9lbXBoYXNpc19zZXR0aW5ncz0yIgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKaW5kZXggMTgwMGE2Mi4uMTgxYjllNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKQEAgLTQyLDYgKzQyLDcgQEAKIG92NTE5CQkwNDFlOjQwNjcJQ3JlYXRpdmUgTGl2ZSEgQ2FtIFZpZGVvIElNIChWRjAzNTApCiBvdjUxOQkJMDQxZTo0MDY4CUNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDQ3MAogc3BjYTU2MQkJMDQ1ODo3MDA0CUdlbml1cyBWaWRlb0NBTSBFeHByZXNzIFYyCitzbjljMjAyOAkwNDU4OjcwMDUJR2VuaXVzIFNtYXJ0IDMwMCwgdmVyc2lvbiAyCiBzdW5wbHVzCQkwNDU4OjcwMDYJR2VuaXVzIERzYyAxLjMgU21hcnQKIHpjM3h4CQkwNDU4OjcwMDcJR2VuaXVzIFZpZGVvQ2FtIFYyCiB6YzN4eAkJMDQ1ODo3MDBjCUdlbml1cyBWaWRlb0NhbSBWMwpAQCAtMTA5LDYgKzExMCw3IEBACiBzdW5wbHVzCQkwNGE1OjMwMDgJQmVucSBEQyAxNTAwCiBzdW5wbHVzCQkwNGE1OjMwMGEJQmVucSBEQyAzNDEwCiBzcGNhNTAwCQkwNGE1OjMwMGMJQmVucSBEQyAxMDE2CitiZW5xCQkwNGE1OjMwMzUJQmVucSBEQyBFMzAwCiBmaW5lcGl4CQkwNGNiOjAxMDQJRnVqaWZpbG0gRmluZVBpeCA0ODAwCiBmaW5lcGl4CQkwNGNiOjAxMDkJRnVqaWZpbG0gRmluZVBpeCBBMjAyCiBmaW5lcGl4CQkwNGNiOjAxMGIJRnVqaWZpbG0gRmluZVBpeCBBMjAzCkBAIC0xNDIsNiArMTQ0LDcgQEAKIHNwY2E1MDAJCTA0ZmM6NzMzMwlQYWxtUGl4REM4NQogc3VucGx1cwkJMDRmYzpmZmZmCVB1cmUgRGlnaXRhbERha290YQogc3BjYTUwMQkJMDUwNjowMGRmCTNDb20gSG9tZUNvbm5lY3QgTGl0ZQorc3VucGx1cwkJMDUyYjoxNTA3CU1lZ2FwaXhlbCA1IFByZXRlYyBEQy0xMDA3CiBzdW5wbHVzCQkwNTJiOjE1MTMJTWVnYXBpeCBWNAogc3VucGx1cwkJMDUyYjoxODAzCU1lZ2FJbWFnZSBWSQogdHY4NTMyCQkwNTQ1OjgwOGIJVmVvIFN0aW5ncmF5CkBAIC0xNTEsNiArMTU0LDcgQEAKIHN1bnBsdXMJCTA1NDY6MzI3MwlQb2xhcm9pZCBQREMyMDMwCiBvdjUxOQkJMDU0YzowMTU0CVNvbm55IHRveTQKIG92NTE5CQkwNTRjOjAxNTUJU29ubnkgdG95NQorY3BpYTEJCTA1NTM6MDAwMglDUElBIENQaUEgKHZlcnNpb24xKSBiYXNlZCBjYW1lcmFzCiB6YzN4eAkJMDU1ZjpjMDA1CU11c3RlayBXY2FtMzAwQQogc3BjYTUwMAkJMDU1ZjpjMjAwCU11c3RlayBHc21hcnQgMzAwCiBzdW5wbHVzCQkwNTVmOmMyMTEJS293YSBCczg4OGUgTWljcm9jYW1lcmEKQEAgLTE4OCw4ICsxOTIsNyBAQAogc3BjYTUwMAkJMDZiZTowODAwCU9wdGltZWRpYQogc3VucGx1cwkJMDZkNjowMDMxCVRydXN0IDYxMCBMQ0QgUG93ZXJDQG0gWm9vbQogc3BjYTUwNgkJMDZlMTphMTkwCUFEUyBJbnN0YW50IFZDRAotb3Y1MzQJCTA2Zjg6MzAwMglIZXJjdWxlcyBCbG9nIFdlYmNhbQotb3Y1MzQJCTA2Zjg6MzAwMwlIZXJjdWxlcyBEdWFscGl4IEhEIFdlYmxvZworb3Y1MzRfOQkJMDZmODozMDAzCUhlcmN1bGVzIER1YWxwaXggSEQgV2VibG9nCiBzb25peGoJCTA2Zjg6MzAwNAlIZXJjdWxlcyBDbGFzc2ljIFNpbHZlcgogc29uaXhqCQkwNmY4OjMwMDgJSGVyY3VsZXMgRGVsdXhlIE9wdGljYWwgR2xhc3MKIHBhYzczMDIJCTA2Zjg6MzAwOQlIZXJjdWxlcyBDbGFzc2ljIExpbmsKQEAgLTIwNCw2ICsyMDcsNyBAQAogc3VucGx1cwkJMDczMzozMjYxCUNvbmNvcmQgMzA0NSBzcGNhNTM2YQogc3VucGx1cwkJMDczMzozMjgxCUN5YmVycGl4IFM1NTBWCiBzcGNhNTA2CQkwNzM0OjA0M2IJM0RlTW9uIFVTQiBDYXB0dXJlIGFrYQorY3BpYTEJCTA4MTM6MDAwMQlRWDMgY2FtZXJhCiBvdjUxOQkJMDgxMzowMDAyCUR1YWwgTW9kZSBVU0IgQ2FtZXJhIFBsdXMKIHNwY2E1MDAJCTA4NGQ6MDAwMwlELUxpbmsgRFNDLTM1MAogc3BjYTUwMAkJMDhjYTowMTAzCUFpcHRlayBQb2NrZXREVgpAQCAtMjI1LDcgKzIyOSw4IEBACiBzdW5wbHVzCQkwOGNhOjIwNjAJQWlwdGVrIFBvY2tldERWNTMwMAogdHY4NTMyCQkwOTIzOjAxMGYJSUNNNTMyIGNhbXMKIG1hcnMJCTA5M2E6MDUwZglNYXJzLVNlbWkgUGMtQ2FtZXJhCi1tcjk3MzEwYQkwOTNhOjAxMGYJU2FrYXIgRGlnaXRhbCBuby4gNzczNzkKK21yOTczMTBhCTA5M2E6MDEwZQlBbGwga25vd24gQ0lGIGNhbXMgd2l0aCB0aGlzIElECittcjk3MzEwYQkwOTNhOjAxMGYJQWxsIGtub3duIFZHQSBjYW1zIHdpdGggdGhpcyBJRAogcGFjMjA3CQkwOTNhOjI0NjAJUXRlYyBXZWJjYW0gMTAwCiBwYWMyMDcJCTA5M2E6MjQ2MQlIUCBXZWJjYW0KIHBhYzIwNwkJMDkzYToyNDYzCVBoaWxpcHMgU1BDIDIyMCBOQwpAQCAtMzAyLDYgKzMwNyw3IEBACiBzb25peGoJCTBjNDU6NjEzYwlTb25peCBQY2NhbTE2OAogc29uaXhqCQkwYzQ1OjYxNDMJU29uaXggUGNjYW0xNjgKIHNvbml4agkJMGM0NTo2MTQ4CURpZ2l0dXMgREEtNzA4MTEvWlNNQyBVU0IgUEMgQ2FtZXJhIFpTMjExL01pY3JvZGlhCitzb25peGoJCTBjNDU6NjE0YQlGcm9udGVjaCBFLUNjYW0gKEpJTC0yMjI1KQogc245YzIweAkJMGM0NTo2MjQwCVBDIENhbWVyYSAoU045QzIwMSArIE1UOU0wMDEpCiBzbjljMjB4CQkwYzQ1OjYyNDIJUEMgQ2FtZXJhIChTTjlDMjAxICsgTVQ5TTExMSkKIHNuOWMyMHgJCTBjNDU6NjI0OAlQQyBDYW1lcmEgKFNOOUMyMDEgKyBPVjk2NTUpCkBAIC0zMjQsNiArMzMwLDEwIEBACiBzbjljMjB4CQkwYzQ1OjYyYjMJUEMgQ2FtZXJhIChTTjlDMjAyICsgT1Y5NjU1KQogc245YzIweAkJMGM0NTo2MmJiCVBDIENhbWVyYSAoU045QzIwMiArIE9WNzY2MCkKIHNuOWMyMHgJCTBjNDU6NjJiYwlQQyBDYW1lcmEgKFNOOUMyMDIgKyBIVjcxMzFSKQorc245YzIwMjgJMGM0NTo4MDAxCVdpbGQgUGxhbmV0IERpZ2l0YWwgU3B5IENhbWVyYQorc245YzIwMjgJMGM0NTo4MDAzCVNha2FyICMxMTE5OSwgIzY2Mzd4LCAjNjc0ODAga2V5Y2hhaW4gY2Ftcworc245YzIwMjgJMGM0NTo4MDA4CU1pbmktU2hvdHogbXMtMzUwCitzbjljMjAyOAkwYzQ1OjgwMGEJVml2aXRhciBWaXZpY2FtIDMzNTBCCiBzdW5wbHVzCQkwZDY0OjAzMDMJU3VucGx1cyBGYXNoaW9uQ2FtIERYRwogb3Y1MTkJCTBlOTY6YzAwMQlUUlVTVCAzODAgVVNCMiBTUEFDRUNATQogZXRvbXMJCTEwMmM6NjE1MQlRY2FtIFNhbmdoYSBDSUYKQEAgLTM0MSwxMCArMzUxLDExIEBACiB0NjEzCQkxN2ExOjAxMjgJVEFTQ09SUCBKUEVHIFdlYmNhbSwgTkdTIEN5Y2xvcHMKIHZjMDMyeAkJMTdlZjo0ODAyCUxlbm92byBWYzAzMjMrTUkxMzEwX1NPQwogcGFjMjA3CQkyMDAxOmYxMTUJRC1MaW5rIERTQi1DMTIwCi1zcTkwNWMJCTI3NzA6OTA1MAlzcTkwNWMKLXNxOTA1YwkJMjc3MDo5MDVjCUR1YWxDYW1lcmEKLXNxOTA1CQkyNzcwOjkxMjAJQXJndXMgRGlnaXRhbCBDYW1lcmEgREMxNTEyCi1zcTkwNWMJCTI3NzA6OTEzZAlzcTkwNWMKK3NxOTA1YwkJMjc3MDo5MDUwCURpc25leSBwaXggbWljcm8gKENJRikKK3NxOTA1YwkJMjc3MDo5MDUyCURpc25leSBwaXggbWljcm8gMiAoVkdBKQorc3E5MDVjCQkyNzcwOjkwNWMJQWxsIDExIGtub3duIGNhbWVyYXMgd2l0aCB0aGlzIElECitzcTkwNQkJMjc3MDo5MTIwCUFsbCAyNCBrbm93biBjYW1lcmFzIHdpdGggdGhpcyBJRAorc3E5MDVjCQkyNzcwOjkxM2QJQWxsIDQga25vd24gY2FtZXJhcyB3aXRoIHRoaXMgSUQKIHNwY2E1MDAJCTI4OTk6MDEyYwlUb3B0cm8gSW5kdXN0cmlhbAogb3Y1MTkJCTgwMjA6ZWYwNAlvdjUxOQogc3BjYTUwOAkJODA4NjowMTEwCUludGVsIEVhc3kgUEMgQ2FtZXJhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CmluZGV4IDc0ZDY3N2MuLjUxNTU3MDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CkBAIC01OTksOTkgKzU5OSwxMyBAQAogdmlkZW8gYnVmZmVyIGhlbHBlciBmdW5jdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSB2NGwyIGNvcmUgQVBJIHByb3ZpZGVzIGEgc3RhbmRhcmQgbWV0aG9kIGZvciBkZWFsaW5nIHdpdGggdmlkZW8KLWJ1ZmZlcnMuIFRob3NlIG1ldGhvZHMgYWxsb3cgYSBkcml2ZXIgdG8gaW1wbGVtZW50IHJlYWQoKSwgbW1hcCgpIGFuZAotb3ZlcmxheSgpIG9uIGEgY29uc2lzdGVudCB3YXkuCitUaGUgdjRsMiBjb3JlIEFQSSBwcm92aWRlcyBhIHNldCBvZiBzdGFuZGFyZCBtZXRob2RzIChjYWxsZWQgInZpZGVvYnVmIikKK2ZvciBkZWFsaW5nIHdpdGggdmlkZW8gYnVmZmVycy4gVGhvc2UgbWV0aG9kcyBhbGxvdyBhIGRyaXZlciB0byBpbXBsZW1lbnQKK3JlYWQoKSwgbW1hcCgpIGFuZCBvdmVybGF5KCkgaW4gYSBjb25zaXN0ZW50IHdheS4gIFRoZXJlIGFyZSBjdXJyZW50bHkKK21ldGhvZHMgZm9yIHVzaW5nIHZpZGVvIGJ1ZmZlcnMgb24gZGV2aWNlcyB0aGF0IHN1cHBvcnRzIERNQSB3aXRoCitzY2F0dGVyL2dhdGhlciBtZXRob2QgKHZpZGVvYnVmLWRtYS1zZyksIERNQSB3aXRoIGxpbmVhciBhY2Nlc3MKKyh2aWRlb2J1Zi1kbWEtY29udGlnKSwgYW5kIHZtYWxsb2NlZCBidWZmZXJzLCBtb3N0bHkgdXNlZCBvbiBVU0IgZHJpdmVycworKHZpZGVvYnVmLXZtYWxsb2MpLgogCi1UaGVyZSBhcmUgY3VycmVudGx5IG1ldGhvZHMgZm9yIHVzaW5nIHZpZGVvIGJ1ZmZlcnMgb24gZGV2aWNlcyB0aGF0Ci1zdXBwb3J0cyBETUEgd2l0aCBzY2F0dGVyL2dhdGhlciBtZXRob2QgKHZpZGVvYnVmLWRtYS1zZyksIERNQSB3aXRoCi1saW5lYXIgYWNjZXNzICh2aWRlb2J1Zi1kbWEtY29udGlnKSwgYW5kIHZtYWxsb2NlZCBidWZmZXJzLCBtb3N0bHkKLXVzZWQgb24gVVNCIGRyaXZlcnMgKHZpZGVvYnVmLXZtYWxsb2MpLgotCi1BbnkgZHJpdmVyIHVzaW5nIHZpZGVvYnVmIHNob3VsZCBwcm92aWRlIG9wZXJhdGlvbnMgKGNhbGxiYWNrcykgZm9yCi1mb3VyIGhhbmRsZXJzOgotCi1vcHMtPmJ1Zl9zZXR1cCAgIC0gY2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gYnVmZmVycyBhbmQgYXZvaWQgdGhleQotCQkgICB0byB3YXN0ZSBtb3JlIHRoYW4gc29tZSBtYXhpbXVtIGxpbWl0IG9mIFJBTTsKLW9wcy0+YnVmX3ByZXBhcmUgLSBmaWxscyB0aGUgdmlkZW8gYnVmZmVyIHN0cnVjdHMgYW5kIGNhbGxzCi0JCSAgIHZpZGVvYnVmX2lvbG9jaygpIHRvIGFsbG9jIGFuZCBwcmVwYXJlIG1tYXBlZCBtZW1vcnk7Ci1vcHMtPmJ1Zl9xdWV1ZSAgIC0gYWR2aWNlcyB0aGUgZHJpdmVyIHRoYXQgYW5vdGhlciBidWZmZXIgd2VyZQotCQkgICByZXF1ZXN0ZWQgKGJ5IHJlYWQoKSBvciBieSBRQlVGKTsKLW9wcy0+YnVmX3JlbGVhc2UgLSBmcmVlcyBhbnkgYnVmZmVyIHRoYXQgd2VyZSBhbGxvY2F0ZWQuCi0KLUluIG9yZGVyIHRvIHVzZSBpdCwgdGhlIGRyaXZlciBuZWVkIHRvIGhhdmUgYSBjb2RlIChnZW5lcmFsbHkgY2FsbGVkIGF0Ci1pbnRlcnJ1cHQgY29udGV4dCkgdGhhdCB3aWxsIHByb3Blcmx5IGhhbmRsZSB0aGUgYnVmZmVyIHJlcXVlc3QgbGlzdHMsCi1hbm5vdW5jaW5nIHRoYXQgYSBuZXcgYnVmZmVyIHdlcmUgZmlsbGVkLgotCi1UaGUgaXJxIGhhbmRsaW5nIGNvZGUgc2hvdWxkIGhhbmRsZSB0aGUgdmlkZW9idWYgdGFzayBsaXN0cywgaW4gb3JkZXIKLXRvIGFkdmljZSB2aWRlb2J1ZiB0aGF0IGEgbmV3IGZyYW1lIHdlcmUgZmlsbGVkLCBpbiBvcmRlciB0byBob25vciB0byBhCi1yZXF1ZXN0LiBUaGUgY29kZSBpcyBnZW5lcmFsbHkgbGlrZSB0aGlzIG9uZToKLQlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpCi0JCXJldHVybjsKLQotCWJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgdmJ1ZmZlciwgdmIucXVldWUpOwotCi0JaWYgKCF3YWl0cXVldWVfYWN0aXZlKCZidWYtPnZiLmRvbmUpKQotCQlyZXR1cm47Ci0KLQkvKiBTb21lIGxvZ2ljIHRvIGhhbmRsZSB0aGUgYnVmIG1heSBiZSBuZWVkZWQgaGVyZSAqLwotCi0JbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwotCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7Ci0Jd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKLQotVGhvc2UgYXJlIHRoZSB2aWRlb2J1ZmZlciBmdW5jdGlvbnMgdXNlZCBvbiBkcml2ZXJzLCBpbXBsZW1lbnRlZCBvbgotdmlkZW9idWYtY29yZToKLQotLSBWaWRlb2J1ZiBpbml0IGZ1bmN0aW9ucwotICB2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCkKLSAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKLSAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIGRyaXZlcnMgdGhhdCB1c2VzIERNQQotICAgICAgU2NhdHRlci9HYXRoZXIgYnVmZmVycy4KLQotICB2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQKLSAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKLSAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIGRyaXZlcnMgdGhhdCBuZWVkIERNQQotICAgICAgY29udGlndW91cyBidWZmZXJzLgotCi0gIHZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgpCi0gICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBVU0IgKGFuZCBvdGhlciBkcml2ZXJzKQotICAgICAgdGhhdCBuZWVkIGEgdm1hbGxvY2VkIHR5cGUgb2YgdmlkZW9idWYuCi0KLS0gdmlkZW9idWZfaW9sb2NrKCkKLSAgUHJlcGFyZXMgdGhlIHZpZGVvYnVmIG1lbW9yeSBmb3IgdGhlIHByb3BlciBtZXRob2QgKHJlYWQsIG1tYXAsIG92ZXJsYXkpLgotCi0tIHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koKQotICBDaGVja3MgaWYgYSB2aWRlb2J1ZiBpcyBzdHJlYW1pbmcuCi0KLS0gdmlkZW9idWZfcXVldWVfY2FuY2VsKCkKLSAgU3RvcHMgdmlkZW8gaGFuZGxpbmcuCi0KLS0gdmlkZW9idWZfbW1hcF9mcmVlKCkKLSAgZnJlZXMgbW1hcCBidWZmZXJzLgotCi0tIHZpZGVvYnVmX3N0b3AoKQotICBTdG9wcyB2aWRlbyBoYW5kbGluZywgZW5kcyBtbWFwIGFuZCBmcmVlcyBtbWFwIGFuZCBvdGhlciBidWZmZXJzLgotCi0tIFY0TDIgYXBpIGZ1bmN0aW9ucy4gVGhvc2UgZnVuY3Rpb25zIGNvcnJlc3BvbmQgdG8gVklESU9DX2ZvbyBpb2N0bHM6Ci0gICB2aWRlb2J1Zl9yZXFidWZzKCksIHZpZGVvYnVmX3F1ZXJ5YnVmKCksIHZpZGVvYnVmX3FidWYoKSwKLSAgIHZpZGVvYnVmX2RxYnVmKCksIHZpZGVvYnVmX3N0cmVhbW9uKCksIHZpZGVvYnVmX3N0cmVhbW9mZigpLgotCi0tIFY0TDEgYXBpIGZ1bmN0aW9uIChjb3JyZXNwb25kcyB0byBWSURJT0NNQlVGIGlvY3RsKToKLSAgIHZpZGVvYnVmX2NnbWJ1ZigpCi0gICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggVjRMMQotICAgICAgQVBJLgotCi0tIFNvbWUgaGVscCBmdW5jdGlvbnMgZm9yIHJlYWQoKS9wb2xsKCkgb3BlcmF0aW9uczoKLSAgIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCkKLSAgICAgIEZvciBjb250aW51b3VzIHN0cmVhbSByZWFkKCkKLSAgIHZpZGVvYnVmX3JlYWRfb25lKCkKLSAgICAgIEZvciBzbmFwc2hvdCByZWFkKCkKLSAgIHZpZGVvYnVmX3BvbGxfc3RyZWFtKCkKLSAgICAgIHBvbGxpbmcgaGVscCBmdW5jdGlvbgotCi1UaGUgYmV0dGVyIHdheSB0byB1bmRlcnN0YW5kIGl0IGlzIHRvIHRha2UgYSBsb29rIGF0IHZpdmkgZHJpdmVyLiBPbmUKLW9mIHRoZSBtYWluIHJlYXNvbnMgZm9yIHZpdmkgaXMgdG8gYmUgYSB2aWRlb2J1ZiB1c2FnZSBleGFtcGxlLiB0aGUKLXZpdmlfdGhyZWFkX3RpY2soKSBkb2VzIHRoZSB0YXNrIHRoYXQgdGhlIElSUSBjYWxsYmFjayB3b3VsZCBkbyBvbiBQQ0kKLWRyaXZlcnMgKG9yIHRoZSBpcnEgY2FsbGJhY2sgb24gVVNCKS4KK1BsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cKK3RvIHVzZSB0aGUgdmlkZW9idWYgbGF5ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3ZpZGVvYnVmIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ExZjlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZgpAQCAtMCwwICsxLDM2MCBAQAorQW4gaW50cm9kdWN0aW9uIHRvIHRoZSB2aWRlb2J1ZiBsYXllcgorSm9uYXRoYW4gQ29yYmV0IDxjb3JiZXRAbHduLm5ldD4KK0N1cnJlbnQgYXMgb2YgMi42LjMzCisKK1RoZSB2aWRlb2J1ZiBsYXllciBmdW5jdGlvbnMgYXMgYSBzb3J0IG9mIGdsdWUgbGF5ZXIgYmV0d2VlbiBhIFY0TDIgZHJpdmVyCithbmQgdXNlciBzcGFjZS4gIEl0IGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgYnVmZmVycyBmb3IKK3RoZSBzdG9yYWdlIG9mIHZpZGVvIGZyYW1lcy4gIFRoZXJlIGlzIGEgc2V0IG9mIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZAordG8gaW1wbGVtZW50IG1hbnkgb2YgdGhlIHN0YW5kYXJkIFBPU0lYIEkvTyBzeXN0ZW0gY2FsbHMsIGluY2x1ZGluZyByZWFkKCksCitwb2xsKCksIGFuZCwgaGFwcGlseSwgbW1hcCgpLiAgQW5vdGhlciBzZXQgb2YgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvCitpbXBsZW1lbnQgdGhlIGJ1bGsgb2YgdGhlIFY0TDIgaW9jdGwoKSBjYWxscyByZWxhdGVkIHRvIHN0cmVhbWluZyBJL08sCitpbmNsdWRpbmcgYnVmZmVyIGFsbG9jYXRpb24sIHF1ZXVlaW5nIGFuZCBkZXF1ZXVlaW5nLCBhbmQgc3RyZWFtaW5nCitjb250cm9sLiAgVXNpbmcgdmlkZW9idWYgaW1wb3NlcyBhIGZldyBkZXNpZ24gZGVjaXNpb25zIG9uIHRoZSBkcml2ZXIKK2F1dGhvciwgYnV0IHRoZSBwYXliYWNrIGNvbWVzIGluIHRoZSBmb3JtIG9mIHJlZHVjZWQgY29kZSBpbiB0aGUgZHJpdmVyIGFuZAorYSBjb25zaXN0ZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBWNEwyIHVzZXItc3BhY2UgQVBJLgorCitCdWZmZXIgdHlwZXMKKworTm90IGFsbCB2aWRlbyBkZXZpY2VzIHVzZSB0aGUgc2FtZSBraW5kIG9mIGJ1ZmZlcnMuICBJbiBmYWN0LCB0aGVyZSBhcmUgKGF0CitsZWFzdCkgdGhyZWUgY29tbW9uIHZhcmlhdGlvbnM6CisKKyAtIEJ1ZmZlcnMgd2hpY2ggYXJlIHNjYXR0ZXJlZCBpbiBib3RoIHRoZSBwaHlzaWNhbCBhbmQgKGtlcm5lbCkgdmlydHVhbAorICAgYWRkcmVzcyBzcGFjZXMuICAoQWxtb3N0KSBhbGwgdXNlci1zcGFjZSBidWZmZXJzIGFyZSBsaWtlIHRoaXMsIGJ1dCBpdAorICAgbWFrZXMgZ3JlYXQgc2Vuc2UgdG8gYWxsb2NhdGUga2VybmVsLXNwYWNlIGJ1ZmZlcnMgdGhpcyB3YXkgYXMgd2VsbCB3aGVuCisgICBpdCBpcyBwb3NzaWJsZS4gIFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGU7IHdvcmtpbmcgd2l0aAorICAgdGhpcyBraW5kIG9mIGJ1ZmZlciBub3JtYWxseSByZXF1aXJlcyBoYXJkd2FyZSB3aGljaCBjYW4gZG8KKyAgIHNjYXR0ZXIvZ2F0aGVyIERNQSBvcGVyYXRpb25zLgorCisgLSBCdWZmZXJzIHdoaWNoIGFyZSBwaHlzaWNhbGx5IHNjYXR0ZXJlZCwgYnV0IHdoaWNoIGFyZSB2aXJ0dWFsbHkKKyAgIGNvbnRpZ3VvdXM7IGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggdm1hbGxvYygpLCBpbiBvdGhlciB3b3Jkcy4gIFRoZXNlCisgICBidWZmZXJzIGFyZSBqdXN0IGFzIGhhcmQgdG8gdXNlIGZvciBETUEgb3BlcmF0aW9ucywgYnV0IHRoZXkgY2FuIGJlCisgICB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSBETUEgaXMgbm90IGF2YWlsYWJsZSBidXQgdmlydHVhbGx5LWNvbnRpZ3VvdXMKKyAgIGJ1ZmZlcnMgYXJlIGNvbnZlbmllbnQuCisKKyAtIEJ1ZmZlcnMgd2hpY2ggYXJlIHBoeXNpY2FsbHkgY29udGlndW91cy4gIEFsbG9jYXRpb24gb2YgdGhpcyBraW5kIG9mCisgICBidWZmZXIgY2FuIGJlIHVucmVsaWFibGUgb24gZnJhZ21lbnRlZCBzeXN0ZW1zLCBidXQgc2ltcGxlciBETUEKKyAgIGNvbnRyb2xsZXJzIGNhbm5vdCBkZWFsIHdpdGggYW55dGhpbmcgZWxzZS4KKworVmlkZW9idWYgY2FuIHdvcmsgd2l0aCBhbGwgdGhyZWUgdHlwZXMgb2YgYnVmZmVycywgYnV0IHRoZSBkcml2ZXIgYXV0aG9yCittdXN0IHBpY2sgb25lIGF0IHRoZSBvdXRzZXQgYW5kIGRlc2lnbiB0aGUgZHJpdmVyIGFyb3VuZCB0aGF0IGRlY2lzaW9uLgorCitbSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGVyZSdzIGEgZm91cnRoIGtpbmQgb2YgYnVmZmVyOiAib3ZlcmxheSIgYnVmZmVycword2hpY2ggYXJlIGxvY2F0ZWQgd2l0aGluIHRoZSBzeXN0ZW0ncyB2aWRlbyBtZW1vcnkuICBUaGUgb3ZlcmxheQorZnVuY3Rpb25hbGl0eSBpcyBjb25zaWRlcmVkIHRvIGJlIGRlcHJlY2F0ZWQgZm9yIG1vc3QgdXNlLCBidXQgaXQgc3RpbGwKK3Nob3dzIHVwIG9jY2FzaW9uYWxseSBpbiBzeXN0ZW0tb24tY2hpcCBkcml2ZXJzIHdoZXJlIHRoZSBwZXJmb3JtYW5jZQorYmVuZWZpdHMgbWVyaXQgdGhlIHVzZSBvZiB0aGlzIHRlY2huaXF1ZS4gIE92ZXJsYXkgYnVmZmVycyBjYW4gYmUgaGFuZGxlZAorYXMgYSBmb3JtIG9mIHNjYXR0ZXJlZCBidWZmZXIsIGJ1dCB0aGVyZSBhcmUgdmVyeSBmZXcgaW1wbGVtZW50YXRpb25zIGluCit0aGUga2VybmVsIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoaXMgdGVjaG5pcXVlIGlzIGN1cnJlbnRseSBiZXlvbmQgdGhlCitzY29wZSBvZiB0aGlzIGRvY3VtZW50Ll0KKworRGF0YSBzdHJ1Y3R1cmVzLCBjYWxsYmFja3MsIGFuZCBpbml0aWFsaXphdGlvbgorCitEZXBlbmRpbmcgb24gd2hpY2ggdHlwZSBvZiBidWZmZXJzIGFyZSBiZWluZyB1c2VkLCB0aGUgZHJpdmVyIHNob3VsZAoraW5jbHVkZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWxlczoKKworICAgIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4JCS8qIFBoeXNpY2FsbHkgc2NhdHRlcmVkICovCisgICAgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4JCS8qIHZtYWxsb2MoKSBidWZmZXJzCSovCisgICAgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4JLyogUGh5c2ljYWxseSBjb250aWd1b3VzICovCisKK1RoZSBkcml2ZXIncyBkYXRhIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgVjRMMiBkZXZpY2Ugc2hvdWxkIGluY2x1ZGUgYQorc3RydWN0IHZpZGVvYnVmX3F1ZXVlIGluc3RhbmNlIGZvciB0aGUgbWFuYWdlbWVudCBvZiB0aGUgYnVmZmVyIHF1ZXVlLAorYWxvbmcgd2l0aCBhIGxpc3RfaGVhZCBmb3IgdGhlIHF1ZXVlIG9mIGF2YWlsYWJsZSBidWZmZXJzLiAgVGhlcmUgd2lsbCBhbHNvCituZWVkIHRvIGJlIGFuIGludGVycnVwdC1zYWZlIHNwaW5sb2NrIHdoaWNoIGlzIHVzZWQgdG8gcHJvdGVjdCAoYXQgbGVhc3QpCit0aGUgcXVldWUuCisKK1RoZSBuZXh0IHN0ZXAgaXMgdG8gd3JpdGUgZm91ciBzaW1wbGUgY2FsbGJhY2tzIHRvIGhlbHAgdmlkZW9idWYgZGVhbCB3aXRoCit0aGUgbWFuYWdlbWVudCBvZiBidWZmZXJzOgorCisgICAgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB7CisJaW50ICgqYnVmX3NldHVwKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgdW5zaWduZWQgaW50ICpjb3VudCwgdW5zaWduZWQgaW50ICpzaXplKTsKKwlpbnQgKCpidWZfcHJlcGFyZSkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpOworCXZvaWQgKCpidWZfcXVldWUpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpOworCXZvaWQgKCpidWZfcmVsZWFzZSkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKTsKKyAgICB9OworCitidWZfc2V0dXAoKSBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIEkvTyBwcm9jZXNzLCB3aGVuIHN0cmVhbWluZyBpcyBiZWluZworaW5pdGlhdGVkOyBpdHMgcHVycG9zZSBpcyB0byB0ZWxsIHZpZGVvYnVmIGFib3V0IHRoZSBJL08gc3RyZWFtLiAgVGhlIGNvdW50CitwYXJhbWV0ZXIgd2lsbCBiZSBhIHN1Z2dlc3RlZCBudW1iZXIgb2YgYnVmZmVycyB0byB1c2U7IHRoZSBkcml2ZXIgc2hvdWxkCitjaGVjayBpdCBmb3IgcmF0aW9uYWxpdHkgYW5kIGFkanVzdCBpdCBpZiBuZWVkIGJlLiAgQXMgYSBwcmFjdGljYWwgcnVsZSwgYQorbWluaW11bSBvZiB0d28gYnVmZmVycyBhcmUgbmVlZGVkIGZvciBwcm9wZXIgc3RyZWFtaW5nLCBhbmQgdGhlcmUgaXMKK3VzdWFsbHkgYSBtYXhpbXVtICh3aGljaCBjYW5ub3QgZXhjZWVkIDMyKSB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZWFjaAorZGV2aWNlLiAgVGhlIHNpemUgcGFyYW1ldGVyIHNob3VsZCBiZSBzZXQgdG8gdGhlIGV4cGVjdGVkIChtYXhpbXVtKSBzaXplCitmb3IgZWFjaCBmcmFtZSBvZiBkYXRhLgorCitFYWNoIGJ1ZmZlciAoaW4gdGhlIGZvcm0gb2YgYSBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHBvaW50ZXIpIHdpbGwgYmUKK3Bhc3NlZCB0byBidWZfcHJlcGFyZSgpLCB3aGljaCBzaG91bGQgc2V0IHRoZSBidWZmZXIncyBzaXplLCB3aWR0aCwgaGVpZ2h0LAorYW5kIGZpZWxkIGZpZWxkcyBwcm9wZXJseS4gIElmIHRoZSBidWZmZXIncyBzdGF0ZSBmaWVsZCBpcworVklERU9CVUZfTkVFRFNfSU5JVCwgdGhlIGRyaXZlciBzaG91bGQgcGFzcyBpdCB0bzoKKworICAgIGludCB2aWRlb2J1Zl9pb2xvY2soc3RydWN0IHZpZGVvYnVmX3F1ZXVlKiBxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYnVmKTsKKworQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNhbGwgd2lsbCB1c3VhbGx5IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlci4KK0ZpbmFsbHksIHRoZSBidWZfcHJlcGFyZSgpIGZ1bmN0aW9uIHNob3VsZCBzZXQgdGhlIGJ1ZmZlcidzIHN0YXRlIHRvCitWSURFT0JVRl9QUkVQQVJFRC4KKworV2hlbiBhIGJ1ZmZlciBpcyBxdWV1ZWQgZm9yIEkvTywgaXQgaXMgcGFzc2VkIHRvIGJ1Zl9xdWV1ZSgpLCB3aGljaCBzaG91bGQKK3B1dCBpdCBvbnRvIHRoZSBkcml2ZXIncyBsaXN0IG9mIGF2YWlsYWJsZSBidWZmZXJzIGFuZCBzZXQgaXRzIHN0YXRlIHRvCitWSURFT0JVRl9RVUVVRUQuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcXVldWUgc3BpbmxvY2sKK2hlbGQ7IGlmIGl0IHRyaWVzIHRvIGFjcXVpcmUgaXQgYXMgd2VsbCB0aGluZ3Mgd2lsbCBjb21lIHRvIGEgc2NyZWVjaGluZworaGFsdC4gIFllcywgdGhpcyBpcyB0aGUgdm9pY2Ugb2YgZXhwZXJpZW5jZS4gIE5vdGUgYWxzbyB0aGF0IHZpZGVvYnVmIG1heQord2FpdCBvbiB0aGUgZmlyc3QgYnVmZmVyIGluIHRoZSBxdWV1ZTsgcGxhY2luZyBvdGhlciBidWZmZXJzIGluIGZyb250IG9mIGl0Citjb3VsZCBhZ2FpbiBndW0gdXAgdGhlIHdvcmtzLiAgU28gdXNlIGxpc3RfYWRkX3RhaWwoKSB0byBlbnF1ZXVlIGJ1ZmZlcnMuCisKK0ZpbmFsbHksIGJ1Zl9yZWxlYXNlKCkgaXMgY2FsbGVkIHdoZW4gYSBidWZmZXIgaXMgbm8gbG9uZ2VyIGludGVuZGVkIHRvIGJlCit1c2VkLiAgVGhlIGRyaXZlciBzaG91bGQgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gSS9PIGFjdGl2ZSBvbiB0aGUgYnVmZmVyLAordGhlbiBwYXNzIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlIHJvdXRpbmUocyk6CisKKyAgICAvKiBTY2F0dGVyL2dhdGhlciBkcml2ZXJzICovCisgICAgaW50IHZpZGVvYnVmX2RtYV91bm1hcChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworICAgIGludCB2aWRlb2J1Zl9kbWFfZnJlZShzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworCisgICAgLyogdm1hbGxvYyBkcml2ZXJzICovCisgICAgdm9pZCB2aWRlb2J1Zl92bWFsbG9jX2ZyZWUgKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKKyAgICAvKiBDb250aWd1b3VzIGRyaXZlcnMgKi8KKyAgICB2b2lkIHZpZGVvYnVmX2RtYV9jb250aWdfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCitPbmUgd2F5IHRvIGVuc3VyZSB0aGF0IGEgYnVmZmVyIGlzIG5vIGxvbmdlciB1bmRlciBJL08gaXMgdG8gcGFzcyBpdCB0bzoKKworICAgIGludCB2aWRlb2J1Zl93YWl0b24oc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGludCBub25fYmxvY2tpbmcsIGludCBpbnRyKTsKKworSGVyZSwgdmIgaXMgdGhlIGJ1ZmZlciwgbm9uX2Jsb2NraW5nIGluZGljYXRlcyB3aGV0aGVyIG5vbi1ibG9ja2luZyBJL08KK3Nob3VsZCBiZSB1c2VkIChpdCBzaG91bGQgYmUgemVybyBpbiB0aGUgYnVmX3JlbGVhc2UoKSBjYXNlKSwgYW5kIGludHIKK2NvbnRyb2xzIHdoZXRoZXIgYW4gaW50ZXJydXB0aWJsZSB3YWl0IGlzIHVzZWQuCisKK0ZpbGUgb3BlcmF0aW9ucworCitBdCB0aGlzIHBvaW50LCBtdWNoIG9mIHRoZSB3b3JrIGlzIGRvbmU7IG11Y2ggb2YgdGhlIHJlc3QgaXMgc2xpcHBpbmcKK3ZpZGVvYnVmIGNhbGxzIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvdGhlciBkcml2ZXIgY2FsbGJhY2tzLiAgVGhlCitmaXJzdCBzdGVwIGlzIGluIHRoZSBvcGVuKCkgZnVuY3Rpb24sIHdoaWNoIG11c3QgaW5pdGlhbGl6ZSB0aGUKK3ZpZGVvYnVmIHF1ZXVlLiAgVGhlIGZ1bmN0aW9uIHRvIHVzZSBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIGJ1ZmZlciB1c2VkOgorCisgICAgdm9pZCB2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzICpvcHMsCisJCQkJc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXNwaW5sb2NrX3QgKmlycWxvY2ssCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCisJCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkLAorCQkJCXVuc2lnbmVkIGludCBtc2l6ZSwKKwkJCQl2b2lkICpwcml2KTsKKworICAgIHZvaWQgdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzICpvcHMsCisJCQkJc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXNwaW5sb2NrX3QgKmlycWxvY2ssCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCisJCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkLAorCQkJCXVuc2lnbmVkIGludCBtc2l6ZSwKKwkJCQl2b2lkICpwcml2KTsKKworICAgIHZvaWQgdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHNwaW5sb2NrX3QgKmlycWxvY2ssCisJCQkJICAgICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJCSAgICAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBtc2l6ZSwKKwkJCQkgICAgICAgdm9pZCAqcHJpdik7CisKK0luIGVhY2ggY2FzZSwgdGhlIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lOiBxIGlzIHRoZSBxdWV1ZSBzdHJ1Y3R1cmUgZm9yIHRoZQorZGV2aWNlLCBvcHMgaXMgdGhlIHNldCBvZiBjYWxsYmFja3MgYXMgZGVzY3JpYmVkIGFib3ZlLCBkZXYgaXMgdGhlIGRldmljZQorc3RydWN0dXJlIGZvciB0aGlzIHZpZGVvIGRldmljZSwgaXJxbG9jayBpcyBhbiBpbnRlcnJ1cHQtc2FmZSBzcGlubG9jayB0bworcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIGRhdGEgc3RydWN0dXJlcywgdHlwZSBpcyB0aGUgYnVmZmVyIHR5cGUgdXNlZCBieSB0aGUKK2RldmljZSAoY2FtZXJhcyB3aWxsIHVzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIGZvciBleGFtcGxlKSwgZmllbGQKK2Rlc2NyaWJlcyB3aGljaCBmaWVsZCBpcyBiZWluZyBjYXB0dXJlZCAob2Z0ZW4gVjRMMl9GSUVMRF9OT05FIGZvcgorcHJvZ3Jlc3NpdmUgZGV2aWNlcyksIG1zaXplIGlzIHRoZSBzaXplIG9mIGFueSBjb250YWluaW5nIHN0cnVjdHVyZSB1c2VkCithcm91bmQgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciwgYW5kIHByaXYgaXMgYSBwcml2YXRlIGRhdGEgcG9pbnRlciB3aGljaAorc2hvd3MgdXAgaW4gdGhlIHByaXZfZGF0YSBmaWVsZCBvZiBzdHJ1Y3QgdmlkZW9idWZfcXVldWUuICBOb3RlIHRoYXQgdGhlc2UKK2FyZSB2b2lkIGZ1bmN0aW9ucyB3aGljaCwgZXZpZGVudGx5LCBhcmUgaW1tdW5lIHRvIGZhaWx1cmUuCisKK1Y0TDIgY2FwdHVyZSBkcml2ZXJzIGNhbiBiZSB3cml0dGVuIHRvIHN1cHBvcnQgZWl0aGVyIG9mIHR3byBBUElzOiB0aGUKK3JlYWQoKSBzeXN0ZW0gY2FsbCBhbmQgdGhlIHJhdGhlciBtb3JlIGNvbXBsaWNhdGVkIHN0cmVhbWluZyBtZWNoYW5pc20uICBBcworYSBnZW5lcmFsIHJ1bGUsIGl0IGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IGJvdGggdG8gZW5zdXJlIHRoYXQgYWxsCithcHBsaWNhdGlvbnMgaGF2ZSBhIGNoYW5jZSBvZiB3b3JraW5nIHdpdGggdGhlIGRldmljZS4gIFZpZGVvYnVmIG1ha2VzIGl0CitlYXN5IHRvIGRvIHRoYXQgd2l0aCB0aGUgc2FtZSBjb2RlLiAgVG8gaW1wbGVtZW50IHJlYWQoKSwgdGhlIGRyaXZlciBuZWVkCitvbmx5IG1ha2UgYSBjYWxsIHRvIG9uZSBvZjoKKworICAgIHNzaXplX3QgdmlkZW9idWZfcmVhZF9vbmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgICAgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwKKwkJCSAgICAgIGxvZmZfdCAqcHBvcywgaW50IG5vbmJsb2NraW5nKTsKKworICAgIHNzaXplX3QgdmlkZW9idWZfcmVhZF9zdHJlYW0oc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJCSBsb2ZmX3QgKnBwb3MsIGludCB2YmloYWNrLCBpbnQgbm9uYmxvY2tpbmcpOworCitFaXRoZXIgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHJlYWQgZnJhbWUgZGF0YSBpbnRvIGRhdGEsIHJldHVybmluZyB0aGUKK2Ftb3VudCBhY3R1YWxseSByZWFkOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IHZpZGVvYnVmX3JlYWRfb25lKCkgd2lsbCBvbmx5CityZWFkIGEgc2luZ2xlIGZyYW1lLCB3aGlsZSB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgpIHdpbGwgcmVhZCBtdWx0aXBsZSBmcmFtZXMKK2lmIHRoZXkgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZSBjb3VudCByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgQQordHlwaWNhbCBkcml2ZXIgcmVhZCgpIGltcGxlbWVudGF0aW9uIHdpbGwgc3RhcnQgdGhlIGNhcHR1cmUgZW5naW5lLCBjYWxsCitvbmUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucywgdGhlbiBzdG9wIHRoZSBlbmdpbmUgYmVmb3JlIHJldHVybmluZyAodGhvdWdoIGEKK3NtYXJ0ZXIgaW1wbGVtZW50YXRpb24gbWlnaHQgbGVhdmUgdGhlIGVuZ2luZSBydW5uaW5nIGZvciBhIGxpdHRsZSB3aGlsZSBpbgorYW50aWNpcGF0aW9uIG9mIGFub3RoZXIgcmVhZCgpIGNhbGwgaGFwcGVuaW5nIGluIHRoZSBuZWFyIGZ1dHVyZSkuCisKK1RoZSBwb2xsKCkgZnVuY3Rpb24gY2FuIHVzdWFsbHkgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIGRpcmVjdCBjYWxsIHRvOgorCisgICAgdW5zaWduZWQgaW50IHZpZGVvYnVmX3BvbGxfc3RyZWFtKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgICAgICBwb2xsX3RhYmxlICp3YWl0KTsKKworTm90ZSB0aGF0IHRoZSBhY3R1YWwgd2FpdCBxdWV1ZSBldmVudHVhbGx5IHVzZWQgd2lsbCBiZSB0aGUgb25lIGFzc29jaWF0ZWQKK3dpdGggdGhlIGZpcnN0IGF2YWlsYWJsZSBidWZmZXIuCisKK1doZW4gc3RyZWFtaW5nIEkvTyBpcyBkb25lIHRvIGtlcm5lbC1zcGFjZSBidWZmZXJzLCB0aGUgZHJpdmVyIG11c3Qgc3VwcG9ydAordGhlIG1tYXAoKSBzeXN0ZW0gY2FsbCB0byBlbmFibGUgdXNlciBzcGFjZSB0byBhY2Nlc3MgdGhlIGRhdGEuICBJbiBtYW55CitWNEwyIGRyaXZlcnMsIHRoZSBvZnRlbi1jb21wbGV4IG1tYXAoKSBpbXBsZW1lbnRhdGlvbiBzaW1wbGlmaWVzIHRvIGEKK3NpbmdsZSBjYWxsIHRvOgorCisgICAgaW50IHZpZGVvYnVmX21tYXBfbWFwcGVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCitFdmVyeXRoaW5nIGVsc2UgaXMgaGFuZGxlZCBieSB0aGUgdmlkZW9idWYgY29kZS4KKworVGhlIHJlbGVhc2UoKSBmdW5jdGlvbiByZXF1aXJlcyB0d28gc2VwYXJhdGUgdmlkZW9idWYgY2FsbHM6CisKKyAgICB2b2lkIHZpZGVvYnVmX3N0b3Aoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKKyAgICBpbnQgdmlkZW9idWZfbW1hcF9mcmVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisKK1RoZSBjYWxsIHRvIHZpZGVvYnVmX3N0b3AoKSB0ZXJtaW5hdGVzIGFueSBJL08gaW4gcHJvZ3Jlc3MgLSB0aG91Z2ggaXQgaXMKK3N0aWxsIHVwIHRvIHRoZSBkcml2ZXIgdG8gc3RvcCB0aGUgY2FwdHVyZSBlbmdpbmUuICBUaGUgY2FsbCB0bwordmlkZW9idWZfbW1hcF9mcmVlKCkgd2lsbCBlbnN1cmUgdGhhdCBhbGwgYnVmZmVycyBoYXZlIGJlZW4gdW5tYXBwZWQ7IGlmCitzbywgdGhleSB3aWxsIGFsbCBiZSBwYXNzZWQgdG8gdGhlIGJ1Zl9yZWxlYXNlKCkgY2FsbGJhY2suICBJZiBidWZmZXJzCityZW1haW4gbWFwcGVkLCB2aWRlb2J1Zl9tbWFwX2ZyZWUoKSByZXR1cm5zIGFuIGVycm9yIGNvZGUgaW5zdGVhZC4gIFRoZQorcHVycG9zZSBpcyBjbGVhcmx5IHRvIGNhdXNlIHRoZSBjbG9zaW5nIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gZmFpbCBpZgorYnVmZmVycyBhcmUgc3RpbGwgbWFwcGVkLCBidXQgZXZlcnkgZHJpdmVyIGluIHRoZSAyLjYuMzIga2VybmVsIGNoZWVyZnVsbHkKK2lnbm9yZXMgaXRzIHJldHVybiB2YWx1ZS4KKworaW9jdGwoKSBvcGVyYXRpb25zCisKK1RoZSBWNEwyIEFQSSBpbmNsdWRlcyBhIHZlcnkgbG9uZyBsaXN0IG9mIGRyaXZlciBjYWxsYmFja3MgdG8gcmVzcG9uZCB0bwordGhlIG1hbnkgaW9jdGwoKSBjb21tYW5kcyBtYWRlIGF2YWlsYWJsZSB0byB1c2VyIHNwYWNlLiAgQSBudW1iZXIgb2YgdGhlc2UKKy0gdGhvc2UgYXNzb2NpYXRlZCB3aXRoIHN0cmVhbWluZyBJL08gLSB0dXJuIGFsbW9zdCBkaXJlY3RseSBpbnRvIHZpZGVvYnVmCitjYWxscy4gIFRoZSByZWxldmFudCBoZWxwZXIgZnVuY3Rpb25zIGFyZToKKworICAgIGludCB2aWRlb2J1Zl9yZXFidWZzKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxKTsKKyAgICBpbnQgdmlkZW9idWZfcXVlcnlidWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpOworICAgIGludCB2aWRlb2J1Zl9xYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiKTsKKyAgICBpbnQgdmlkZW9idWZfZHFidWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIsCisJCSAgICAgICBpbnQgbm9uYmxvY2tpbmcpOworICAgIGludCB2aWRlb2J1Zl9zdHJlYW1vbihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOworICAgIGludCB2aWRlb2J1Zl9zdHJlYW1vZmYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKKyAgICBpbnQgdmlkZW9idWZfY2dtYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvX21idWYgKm1idWYsCisJCQlpbnQgY291bnQpOworCitTbywgZm9yIGV4YW1wbGUsIGEgVklESU9DX1JFUUJVRlMgY2FsbCB0dXJucyBpbnRvIGEgY2FsbCB0byB0aGUgZHJpdmVyJ3MKK3ZpZGlvY19yZXFidWZzKCkgY2FsbGJhY2sgd2hpY2gsIGluIHR1cm4sIHVzdWFsbHkgb25seSBuZWVkcyB0byBsb2NhdGUgdGhlCitwcm9wZXIgc3RydWN0IHZpZGVvYnVmX3F1ZXVlIHBvaW50ZXIgYW5kIHBhc3MgaXQgdG8gdmlkZW9idWZfcmVxYnVmcygpLgorVGhlc2Ugc3VwcG9ydCBmdW5jdGlvbnMgY2FuIHJlcGxhY2UgYSBncmVhdCBkZWFsIG9mIGJ1ZmZlciBtYW5hZ2VtZW50Citib2lsZXJwbGF0ZSBpbiBhIGxvdCBvZiBWNEwyIGRyaXZlcnMuCisKK1RoZSB2aWRpb2Nfc3RyZWFtb24oKSBhbmQgdmlkaW9jX3N0cmVhbW9mZigpIGZ1bmN0aW9ucyB3aWxsIGJlIGEgYml0IG1vcmUKK2NvbXBsZXgsIG9mIGNvdXJzZSwgc2luY2UgdGhleSB3aWxsIGFsc28gbmVlZCB0byBkZWFsIHdpdGggc3RhcnRpbmcgYW5kCitzdG9wcGluZyB0aGUgY2FwdHVyZSBlbmdpbmUuICB2aWRlb2J1Zl9jZ21idWYoKSwgY2FsbGVkIGZyb20gdGhlIGRyaXZlcidzCit2aWRpb2NnbWJ1ZigpIGZ1bmN0aW9uLCBvbmx5IGV4aXN0cyBpZiB0aGUgVjRMMSBjb21wYXRpYmlsaXR5IG1vZHVsZSBoYXMKK2JlZW4gc2VsZWN0ZWQgd2l0aCBDT05GSUdfVklERU9fVjRMMV9DT01QQVQsIHNvIGl0cyB1c2UgbXVzdCBiZSBzdXJyb3VuZGVkCit3aXRoICNpZmRlZiBkaXJlY3RpdmVzLgorCitCdWZmZXIgYWxsb2NhdGlvbgorCitUaHVzIGZhciwgd2UgaGF2ZSB0YWxrZWQgYWJvdXQgYnVmZmVycywgYnV0IGhhdmUgbm90IGxvb2tlZCBhdCBob3cgdGhleSBhcmUKK2FsbG9jYXRlZC4gIFRoZSBzY2F0dGVyL2dhdGhlciBjYXNlIGlzIHRoZSBtb3N0IGNvbXBsZXggb24gdGhpcyBmcm9udC4gIEZvcgorYWxsb2NhdGlvbiwgdGhlIGRyaXZlciBjYW4gbGVhdmUgYnVmZmVyIGFsbG9jYXRpb24gZW50aXJlbHkgdXAgdG8gdGhlCit2aWRlb2J1ZiBsYXllcjsgaW4gdGhpcyBjYXNlLCBidWZmZXJzIHdpbGwgYmUgYWxsb2NhdGVkIGFzIGFub255bW91cwordXNlci1zcGFjZSBwYWdlcyBhbmQgd2lsbCBiZSB2ZXJ5IHNjYXR0ZXJlZCBpbmRlZWQuICBJZiB0aGUgYXBwbGljYXRpb24gaXMKK3VzaW5nIHVzZXItc3BhY2UgYnVmZmVycywgbm8gYWxsb2NhdGlvbiBpcyBuZWVkZWQ7IHRoZSB2aWRlb2J1ZiBsYXllciB3aWxsCit0YWtlIGNhcmUgb2YgY2FsbGluZyBnZXRfdXNlcl9wYWdlcygpIGFuZCBmaWxsaW5nIGluIHRoZSBzY2F0dGVybGlzdCBhcnJheS4KKworSWYgdGhlIGRyaXZlciBuZWVkcyB0byBkbyBpdHMgb3duIG1lbW9yeSBhbGxvY2F0aW9uLCBpdCBzaG91bGQgYmUgZG9uZSBpbgordGhlIHZpZGlvY19yZXFidWZzKCkgZnVuY3Rpb24sICphZnRlciogY2FsbGluZyB2aWRlb2J1Zl9yZXFidWZzKCkuICBUaGUKK2ZpcnN0IHN0ZXAgaXMgYSBjYWxsIHRvOgorCisgICAgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqdmlkZW9idWZfdG9fZG1hKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKK1RoZSByZXR1cm5lZCB2aWRlb2J1Zl9kbWFidWYgc3RydWN0dXJlIChkZWZpbmVkIGluCis8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+KSBpbmNsdWRlcyBhIGNvdXBsZSBvZiByZWxldmFudCBmaWVsZHM6CisKKyAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgICpzZ2xpc3Q7CisgICAgaW50ICAgICAgICAgICAgICAgICBzZ2xlbjsKKworVGhlIGRyaXZlciBtdXN0IGFsbG9jYXRlIGFuIGFwcHJvcHJpYXRlbHktc2l6ZWQgc2NhdHRlcmxpc3QgYXJyYXkgYW5kCitwb3B1bGF0ZSBpdCB3aXRoIHBvaW50ZXJzIHRvIHRoZSBwaWVjZXMgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXI7IHNnbGVuCitzaG91bGQgYmUgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LgorCitEcml2ZXJzIHVzaW5nIHRoZSB2bWFsbG9jKCkgbWV0aG9kIG5lZWQgbm90IChhbmQgY2Fubm90KSBjb25jZXJuIHRoZW1zZWx2ZXMKK3dpdGggYnVmZmVyIGFsbG9jYXRpb24gYXQgYWxsOyB2aWRlb2J1ZiB3aWxsIGhhbmRsZSB0aG9zZSBkZXRhaWxzLiAgVGhlCitzYW1lIGlzIG5vcm1hbGx5IHRydWUgb2YgY29udGlndW91cy1ETUEgZHJpdmVycyBhcyB3ZWxsOyB2aWRlb2J1ZiB3aWxsCithbGxvY2F0ZSB0aGUgYnVmZmVycyAod2l0aCBkbWFfYWxsb2NfY29oZXJlbnQoKSkgd2hlbiBpdCBzZWVzIGZpdC4gIFRoYXQKK21lYW5zIHRoYXQgdGhlc2UgZHJpdmVycyBtYXkgYmUgdHJ5aW5nIHRvIGRvIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYXQgYW55Cit0aW1lLCBhbiBvcGVyYXRpb24gd2hpY2ggaXMgbm90IGFsd2F5cyBndWFyYW50ZWVkIHRvIHdvcmsuICBTb21lIGRyaXZlcnMKK3BsYXkgdHJpY2tzIGJ5IGFsbG9jYXRpbmcgRE1BIHNwYWNlIGF0IHN5c3RlbSBib290IHRpbWU7IHZpZGVvYnVmIGRvZXMgbm90CitjdXJyZW50bHkgcGxheSB3ZWxsIHdpdGggdGhvc2UgZHJpdmVycy4KKworQXMgb2YgMi42LjMxLCBjb250aWd1b3VzLURNQSBkcml2ZXJzIGNhbiB3b3JrIHdpdGggYSB1c2VyLXN1cHBsaWVkIGJ1ZmZlciwKK2FzIGxvbmcgYXMgdGhhdCBidWZmZXIgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzLiAgTm9ybWFsIHVzZXItc3BhY2UKK2FsbG9jYXRpb25zIHdpbGwgbm90IG1lZXQgdGhhdCBjcml0ZXJpb24sIGJ1dCBidWZmZXJzIG9idGFpbmVkIGZyb20gb3RoZXIKK2tlcm5lbCBkcml2ZXJzLCBvciB0aG9zZSBjb250YWluZWQgd2l0aGluIGh1Z2UgcGFnZXMsIHdpbGwgd29yayB3aXRoIHRoZXNlCitkcml2ZXJzLgorCitGaWxsaW5nIHRoZSBidWZmZXJzCisKK1RoZSBmaW5hbCBwYXJ0IG9mIGEgdmlkZW9idWYgaW1wbGVtZW50YXRpb24gaGFzIG5vIGRpcmVjdCBjYWxsYmFjayAtIGl0J3MKK3RoZSBwb3J0aW9uIG9mIHRoZSBjb2RlIHdoaWNoIGFjdHVhbGx5IHB1dHMgZnJhbWUgZGF0YSBpbnRvIHRoZSBidWZmZXJzLAordXN1YWxseSBpbiByZXNwb25zZSB0byBpbnRlcnJ1cHRzIGZyb20gdGhlIGRldmljZS4gIEZvciBhbGwgdHlwZXMgb2YKK2RyaXZlcnMsIHRoaXMgcHJvY2VzcyB3b3JrcyBhcHByb3hpbWF0ZWx5IGFzIGZvbGxvd3M6CisKKyAtIE9idGFpbiB0aGUgbmV4dCBhdmFpbGFibGUgYnVmZmVyIGFuZCBtYWtlIHN1cmUgdGhhdCBzb21lYm9keSBpcyBhY3R1YWxseQorICAgd2FpdGluZyBmb3IgaXQuCisKKyAtIEdldCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBhbmQgcHV0IHZpZGVvIGRhdGEgdGhlcmUuCisKKyAtIE1hcmsgdGhlIGJ1ZmZlciBhcyBkb25lIGFuZCB3YWtlIHVwIHRoZSBwcm9jZXNzIHdhaXRpbmcgZm9yIGl0LgorCitTdGVwICgxKSBhYm92ZSBpcyBkb25lIGJ5IGxvb2tpbmcgYXQgdGhlIGRyaXZlci1tYW5hZ2VkIGxpc3RfaGVhZCBzdHJ1Y3R1cmUKKy0gdGhlIG9uZSB3aGljaCBpcyBmaWxsZWQgaW4gdGhlIGJ1Zl9xdWV1ZSgpIGNhbGxiYWNrLiAgQmVjYXVzZSBzdGFydGluZwordGhlIGVuZ2luZSBhbmQgZW5xdWV1ZWluZyBidWZmZXJzIGFyZSBkb25lIGluIHNlcGFyYXRlIHN0ZXBzLCBpdCdzIHBvc3NpYmxlCitmb3IgdGhlIGVuZ2luZSB0byBiZSBydW5uaW5nIHdpdGhvdXQgYW55IGJ1ZmZlcnMgYXZhaWxhYmxlIC0gaW4gdGhlCit2bWFsbG9jKCkgY2FzZSBlc3BlY2lhbGx5LiAgU28gdGhlIGRyaXZlciBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoZSBsaXN0Cit0byBiZSBlbXB0eS4gIEl0IGlzIGVxdWFsbHkgcG9zc2libGUgdGhhdCBub2JvZHkgaXMgeWV0IGludGVyZXN0ZWQgaW4gdGhlCitidWZmZXI7IHRoZSBkcml2ZXIgc2hvdWxkIG5vdCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvciBmaWxsIGl0IHVudGlsIGEKK3Byb2Nlc3MgaXMgd2FpdGluZyBvbiBpdC4gIFRoYXQgdGVzdCBjYW4gYmUgZG9uZSBieSBleGFtaW5pbmcgdGhlIGJ1ZmZlcidzCitkb25lIGZpZWxkIChhIHdhaXRfcXVldWVfaGVhZF90IHN0cnVjdHVyZSkgd2l0aCB3YWl0cXVldWVfYWN0aXZlKCkuCisKK0EgYnVmZmVyJ3Mgc3RhdGUgc2hvdWxkIGJlIHNldCB0byBWSURFT0JVRl9BQ1RJVkUgYmVmb3JlIGJlaW5nIG1hcHBlZCBmb3IKK0RNQTsgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIHZpZGVvYnVmIGxheWVyIHdpbGwgbm90IHRyeSB0byBkbyBhbnl0aGluZyB3aXRoCitpdCB3aGlsZSB0aGUgZGV2aWNlIGlzIHRyYW5zZmVycmluZyBkYXRhLgorCitGb3Igc2NhdHRlci9nYXRoZXIgZHJpdmVycywgdGhlIG5lZWRlZCBtZW1vcnkgcG9pbnRlcnMgd2lsbCBiZSBmb3VuZCBpbiB0aGUKK3NjYXR0ZXJsaXN0IHN0cnVjdHVyZSBkZXNjcmliZWQgYWJvdmUuICBEcml2ZXJzIHVzaW5nIHRoZSB2bWFsbG9jKCkgbWV0aG9kCitjYW4gZ2V0IGEgbWVtb3J5IHBvaW50ZXIgd2l0aDoKKworICAgIHZvaWQgKnZpZGVvYnVmX3RvX3ZtYWxsb2Moc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKKworRm9yIGNvbnRpZ3VvdXMgRE1BIGRyaXZlcnMsIHRoZSBmdW5jdGlvbiB0byB1c2UgaXM6CisKKyAgICBkbWFfYWRkcl90IHZpZGVvYnVmX3RvX2RtYV9jb250aWcoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKKworVGhlIGNvbnRpZ3VvdXMgRE1BIEFQSSBnb2VzIG91dCBvZiBpdHMgd2F5IHRvIGhpZGUgdGhlIGtlcm5lbC1zcGFjZSBhZGRyZXNzCitvZiB0aGUgRE1BIGJ1ZmZlciBmcm9tIGRyaXZlcnMuCisKK1RoZSBmaW5hbCBzdGVwIGlzIHRvIHNldCB0aGUgc2l6ZSBmaWVsZCBvZiB0aGUgcmVsZXZhbnQgdmlkZW9idWZfYnVmZmVyCitzdHJ1Y3R1cmUgdG8gdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjYXB0dXJlZCBpbWFnZSwgc2V0IHN0YXRlIHRvCitWSURFT0JVRl9ET05FLCB0aGVuIGNhbGwgd2FrZV91cCgpIG9uIHRoZSBkb25lIHF1ZXVlLiAgQXQgdGhpcyBwb2ludCwgdGhlCitidWZmZXIgaXMgb3duZWQgYnkgdGhlIHZpZGVvYnVmIGxheWVyIGFuZCB0aGUgZHJpdmVyIHNob3VsZCBub3QgdG91Y2ggaXQKK2FnYWluLgorCitEZXZlbG9wZXJzIHdobyBhcmUgaW50ZXJlc3RlZCBpbiBtb3JlIGluZm9ybWF0aW9uIGNhbiBnbyBpbnRvIHRoZSByZWxldmFudAoraGVhZGVyIGZpbGVzOyB0aGVyZSBhcmUgYSBmZXcgbG93LWxldmVsIGZ1bmN0aW9ucyBkZWNsYXJlZCB0aGVyZSB3aGljaCBoYXZlCitub3QgYmVlbiB0YWxrZWQgYWJvdXQgaGVyZS4gIEFsc28gd29ydGh3aGlsZSBpcyB0aGUgdml2aSBkcml2ZXIKKyhkcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyksIHdoaWNoIGlzIG1haW50YWluZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgVjRMMgorZHJpdmVycyBzaG91bGQgYmUgd3JpdHRlbi4gIFZpdmkgb25seSB1c2VzIHRoZSB2bWFsbG9jKCkgQVBJLCBidXQgaXQncyBnb29kCitlbm91Z2ggdG8gZ2V0IHN0YXJ0ZWQgd2l0aC4gIE5vdGUgYWxzbyB0aGF0IGFsbCBvZiB0aGVzZSBjYWxscyBhcmUgZXhwb3J0ZWQKK0dQTC1vbmx5LCBzbyB0aGV5IHdpbGwgbm90IGJlIGF2YWlsYWJsZSB0byBub24tR1BMIGtlcm5lbCBtb2R1bGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAppbmRleCAyOWE2ZmY4Li43ZmJiYWY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtMTY2LDE5ICsxNjYsMTMgQEAKIAogICBudW1hPW5vYWNwaSAgIERvbid0IHBhcnNlIHRoZSBTUkFUIHRhYmxlIGZvciBOVU1BIHNldHVwCiAKLSAgbnVtYT1mYWtlPUNNRExJTkUKLQkJSWYgYSBudW1iZXIsIGZha2VzIENNRExJTkUgbm9kZXMgYW5kIGlnbm9yZXMgTlVNQSBzZXR1cCBvZiB0aGUKLQkJYWN0dWFsIG1hY2hpbmUuICBPdGhlcndpc2UsIHN5c3RlbSBtZW1vcnkgaXMgY29uZmlndXJlZAotCQlkZXBlbmRpbmcgb24gdGhlIHNpemVzIGFuZCBjb2VmZmljaWVudHMgbGlzdGVkLiAgRm9yIGV4YW1wbGU6Ci0JCQludW1hPWZha2U9Mio1MTIsMTAyNCw0KjI1NiwqMTI4Ci0JCWdpdmVzIHR3byA1MTJNIG5vZGVzLCBhIDEwMjRNIG5vZGUsIGZvdXIgMjU2TSBub2RlcywgYW5kIHRoZQotCQlyZXN0IHNwbGl0IGludG8gMTI4TSBjaHVua3MuICBJZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgQ01ETElORQotCQlpcyBhICosIHRoZSByZW1haW5pbmcgbWVtb3J5IGlzIGRpdmlkZWQgdXAgZXF1YWxseSBhbW9uZyBpdHMKLQkJY29lZmZpY2llbnQ6Ci0JCQludW1hPWZha2U9Mio1MTIsMioKLQkJZ2l2ZXMgdHdvIDUxMk0gbm9kZXMgYW5kIHRoZSByZXN0IHNwbGl0IGludG8gdHdvIG5vZGVzLgotCQlPdGhlcndpc2UsIHRoZSByZW1haW5pbmcgc3lzdGVtIFJBTSBpcyBhbGxvY2F0ZWQgdG8gYW4KLQkJYWRkaXRpb25hbCBub2RlLgorICBudW1hPWZha2U9PHNpemU+W01HXQorCQlJZiBnaXZlbiBhcyBhIG1lbW9yeSB1bml0LCBmaWxscyBhbGwgc3lzdGVtIFJBTSB3aXRoIG5vZGVzIG9mCisJCXNpemUgaW50ZXJsZWF2ZWQgb3ZlciBwaHlzaWNhbCBub2Rlcy4KKworICBudW1hPWZha2U9PE4+CisJCUlmIGdpdmVuIGFzIGFuIGludGVnZXIsIGZpbGxzIGFsbCBzeXN0ZW0gUkFNIHdpdGggTiBmYWtlIG5vZGVzCisJCWludGVybGVhdmVkIG92ZXIgcGh5c2ljYWwgbm9kZXMuCiAKIEFDUEkKIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAwM2YzOGMxLi5mNTIwZGQwIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjIxLDYgKzIyMSw3IEBACiAKIEFDRVIgQVNQSVJFIE9ORSBURU1QRVJBVFVSRSBBTkQgRkFOIERSSVZFUgogTToJUGV0ZXIgRmV1ZXJlciA8cGV0ZXJAcGlpZS5uZXQ+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3BpaWUubmV0Lz9zZWN0aW9uPWFjZXJoZGYKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwpAQCAtMjI4LDYgKzIyOSw3IEBACiBBQ0VSIFdNSSBMQVBUT1AgRVhUUkFTCiBNOglDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgogTDoJYWNlcmFjcGlAZ29vZ2xlZ3JvdXBzLmNvbSAoc3Vic2NyaWJlcnMtb25seSkKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYWNlcmFjcGkKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTI4OCw3ICsyOTAsNyBAQAogCiBBQ1BJIFdNSSBEUklWRVIKIE06CUNhcmxvcyBDb3JiYWNobyA8Y2FybG9zQHN0cmFuZ2V3b3JsZHMuY28udWs+Ci1MOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKQEAgLTYxNiwxMCArNjE4LDEwIEBACiBTOglNYWludGFpbmVkCiAKIEFSTS9DT1JUSU5BIFNZU1RFTVMgR0VNSU5JIEFSTSBBUkNISVRFQ1RVUkUKLU06CVBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorTToJUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0BnbWFpbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVDoJZ2l0IGdpdDovL2dpdG9yaW91cy5vcmcvbGludXgtZ2VtaW5pL21haW5saW5lLmdpdAotUzoJTWFpbnRhaW5lZAorUzoJT2RkIEZpeGVzCiBGOglhcmNoL2FybS9tYWNoLWdlbWluaS8KIAogQVJNL0VCU0ExMTAgTUFDSElORSBTVVBQT1JUCkBAIC02NDEsOSArNjQzLDkgQEAKIEY6CWFyY2gvYXJtL21hY2gtcHhhL2V6eC5jCiAKIEFSTS9GQVJBREFZIEZBNTI2IFBPUlQKLU06CVBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorTToJUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0BnbWFpbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJTWFpbnRhaW5lZAorUzoJT2RkIEZpeGVzCiBGOglhcmNoL2FybS9tbS8qLWZhKgogCiBBUk0vRk9PVEJSSURHRSBBUkNISVRFQ1RVUkUKQEAgLTk2OCw2ICs5NzAsNyBAQAogTToJQ29yZW50aW4gQ2hhcnkgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KIE06CUthcm9sIEtvemltb3IgPHN6aXdhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBMOglhY3BpNGFzdXMtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKQEAgLTk4MSw2ICs5ODQsNyBAQAogQVNVUyBMQVBUT1AgRVhUUkFTIERSSVZFUgogTToJQ29yZW50aW4gQ2hhcnkgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KIEw6CWFjcGk0YXN1cy11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9hY3BpNGFzdXMuc2YubmV0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC0xNDczLDYgKzE0NzcsNyBAQAogQ01QQyBBQ1BJIERSSVZFUgogTToJVGhhZGV1IExpbWEgZGUgU291emEgQ2FzY2FyZG8gPGNhc2NhcmRvQGhvbG9zY29waW8uY29tPgogTToJRGFuaWVsIE9saXZlaXJhIE5hc2NpbWVudG8gPGRvbkBzeXN0LmNvbS5icj4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwogCkBAIC0xNTE2LDYgKzE1MjEsNyBAQAogCiBDT01QQUwgTEFQVE9QIFNVUFBPUlQKIE06CUNlemFyeSBKYWNraWV3aWN6IDxjZXphcnkuamFja2lld2ljekBnbWFpbC5jb20+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCiAKQEAgLTE3MzMsMTAgKzE3MzksOSBAQAogRjoJbmV0L2RjY3AvCiAKIERFQ25ldCBORVRXT1JLIExBWUVSCi1NOglDaHJpc3RpbmUgQ2F1bGZpZWxkIDxjaHJpc3RpbmUuY2F1bGZpZWxkQGdvb2dsZW1haWwuY29tPgogVzoJaHR0cDovL2xpbnV4LWRlY25ldC5zb3VyY2Vmb3JnZS5uZXQKIEw6CWxpbnV4LWRlY25ldC11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dAogRjoJbmV0L2RlY25ldC8KIApAQCAtMTc0Nyw2ICsxNzUyLDcgQEAKIAogREVMTCBMQVBUT1AgRFJJVkVSCiBNOglNYXR0aGV3IEdhcnJldHQgPG1qZzU5QHNyY2YudWNhbS5vcmc+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwogCkBAIC0yMDI5LDYgKzIwMzUsNyBAQAogRUVFUEMgTEFQVE9QIEVYVFJBUyBEUklWRVIKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBMOglhY3BpNGFzdXMtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKQEAgLTIxNDIsNiArMjE0OSwxNyBAQAogRjoJRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vCiBGOglsaWIvZmF1bHQtaW5qZWN0LmMKIAorRkNPRSBTVUJTWVNURU0gKGxpYmZjLCBsaWJmY29lLCBmY29lKQorTToJUm9iZXJ0IExvdmUgPHJvYmVydC53LmxvdmVAaW50ZWwuY29tPgorTDoJZGV2ZWxAb3Blbi1mY29lLm9yZworVzoJd3d3Lk9wZW4tRkNvRS5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9zY3NpL2xpYmZjLworRjoJZHJpdmVycy9zY3NpL2Zjb2UvCitGOglpbmNsdWRlL3Njc2kvZmMvCitGOglpbmNsdWRlL3Njc2kvbGliZmMuaAorRjoJaW5jbHVkZS9zY3NpL2xpYmZjb2UuaAorCiBGSUxFIExPQ0tJTkcgKGZsb2NrKCkgYW5kIGZjbnRsKCkvbG9ja2YoKSkKIE06CU1hdHRoZXcgV2lsY294IDxtYXR0aGV3QHdpbC5jeD4KIEw6CWxpbnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCkBAIC0yMjk2LDcgKzIzMTQsNyBAQAogCiBGVUpJVFNVIExBUFRPUCBFWFRSQVMKIE06CUpvbmF0aGFuIFdvaXRoZSA8andvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdT4KLUw6CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwogCkBAIC0yMzk0LDYgKzI0MTIsMTggQEAKIFM6CU9kZCBGaXhlcwogRjoJZHJpdmVycy9jaGFyL2h2Y18qCiAKK1ZJUlRJTyBDT05TT0xFIERSSVZFUgorTToJQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4KK0w6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworCitpU0NTSSBCT09UIEZJUk1XQVJFIFRBQkxFIChpQkZUKSBEUklWRVIKK006CVBldGVyIEpvbmVzIDxwam9uZXNAcmVkaGF0LmNvbT4KK006CUtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkQGtlcm5lbC5vcmc+CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQqCisKIEdTUENBIEZJTkVQSVggU1VCRFJJVkVSCiBNOglGcmFuayBaYWdvIDxmcmFua0B6YWdvLm5ldD4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwpAQCAtMjU2Miw2ICsyNTkyLDcgQEAKIAogSFAgQ09NUEFRIFRDMTEwMCBUQUJMRVQgV01JIEVYVFJBUyBEUklWRVIKIE06CUNhcmxvcyBDb3JiYWNobyA8Y2FybG9zQHN0cmFuZ2V3b3JsZHMuY28udWs+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJT2RkIEZpeGVzCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKIApAQCAtMjc3Miw3ICsyODAzLDcgQEAKIAogSU5URUwgTUVOTE9XIFRIRVJNQUwgRFJJVkVSCiBNOglTdWppdGggVGhvbWFzIDxzdWppdGgudGhvbWFzQGludGVsLmNvbT4KLUw6CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5sZXNzd2F0dHMub3JnL3Byb2plY3RzL2FjcGkvCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX21lbmxvdy5jCkBAIC0zNDExLDggKzM0NDIsMTAgQEAKIEY6CWRyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi8KIAogTFRQIChMaW51eCBUZXN0IFByb2plY3QpCi1NOglTdWJyYXRhIE1vZGFrIDxzdWJyYXRhQGxpbnV4LnZuZXQuaWJtLmNvbT4KLU06CU1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK006CVJpc2hpa2VzaCBLIFJhamFrIDxyaXNyYWpha0BsaW51eC52bmV0LmlibS5jb20+CitNOglHYXJyZXR0IENvb3BlciA8eWFuZWdvbWlAZ21haWwuY29tPgorTTogICAgIE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK006ICAgICBTdWJyYXRhIE1vZGFrIDxzdWJyYXRhQGxpbnV4LnZuZXQuaWJtLmNvbT4KIEw6CWx0cC1saXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly9sdHAuc291cmNlZm9yZ2UubmV0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9nYWxhay9sdHAuZ2l0CkBAIC0zNDg4LDkgKzM1MjEsOSBAQAogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvCiAKIE1BUlZFTEwgTVY2NDNYWCBFVEhFUk5FVCBEUklWRVIKLU06CUxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQG1hcnZlbGwuY29tPgorTToJTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L212NjQzeHhfZXRoLioKIEY6CWluY2x1ZGUvbGludXgvbXY2NDN4eC5oCiAKQEAgLTM2MzYsNiArMzY2OSw3IEBACiAKIE1TSSBMQVBUT1AgU1VQUE9SVAogTToJTGVubmFydCBQb2V0dGVyaW5nIDxtenhyZWFyeUAwcG9pbnRlci5kZT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwczovL3RhbmdvLjBwb2ludGVyLmRlL21haWxtYW4vbGlzdGluZm8vczI3MC1saW51eAogVzoJaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvdGNoaWJvLmh0bWwKIFM6CU1haW50YWluZWQKQEAgLTM2NDMsNiArMzY3Nyw3IEBACiAKIE1TSSBXTUkgU1VQUE9SVAogTToJQW5pc3NlIEFzdGllciA8YW5pc3NlQGFzdGllci5ldT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwogCkBAIC0zODM2LDYgKzM4NzEsNyBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2VuL05ldAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9uZXQtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9uZXQtbmV4dC0yLjYuZ2l0CiBTOglPZGQgRml4ZXMKIEY6CWRyaXZlcnMvbmV0LwogRjoJaW5jbHVkZS9saW51eC9pZl8qCkBAIC00MDk0LDYgKzQxMzAsNyBAQAogCiBQQU5BU09OSUMgTEFQVE9QIEFDUEkgRVhUUkFTIERSSVZFUgogTToJSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMKIApAQCAtNDUwNyw3ICs0NTQ0LDcgQEAKIFJDVVRPUlRVUkUgTU9EVUxFCiBNOglKb3NoIFRyaXBsZXR0IDxqb3NoQGZyZWVkZXNrdG9wLm9yZz4KIE06CSJQYXVsIEUuIE1jS2VubmV5IiA8cGF1bG1ja0BsaW51eC52bmV0LmlibS5jb20+Ci1TOglNYWludGFpbmVkCitTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0CiBGOglrZXJuZWwvcmN1dG9ydHVyZS5jCiAKQEAgLTQ1MzIsMTEgKzQ1NjksMTIgQEAKIE06CSJQYXVsIEUuIE1jS2VubmV5IiA8cGF1bG1ja0BsaW51eC52bmV0LmlibS5jb20+CiBXOglodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL3JjbG9jay8KIFM6CVN1cHBvcnRlZAotRjoJRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAotRjoJRG9jdW1lbnRhdGlvbi9SQ1UvcmN1cmVmLnR4dAotRjoJaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCi1GOglpbmNsdWRlL2xpbnV4L3NyY3UuaAotRjoJa2VybmVsL3JjdXBkYXRlLmMKK0Y6CURvY3VtZW50YXRpb24vUkNVLworRjoJaW5jbHVkZS9saW51eC9yY3UqCitGOglpbmNsdWRlL2xpbnV4L3NyY3UqCitGOglrZXJuZWwvcmN1KgorRjoJa2VybmVsL3NyY3UqCitYOglrZXJuZWwvcmN1dG9ydHVyZS5jCiAKIFJFQUwgVElNRSBDTE9DSyBEUklWRVIKIE06CVBhdWwgR29ydG1ha2VyIDxwX2dvcnRtYWtlckB5YWhvby5jb20+CkBAIC00Njc0LDYgKzQ3MTIsMTMgQEAKIEY6CWRyaXZlcnMvbWVkaWEvdmlkZW8vKjcxNDYqCiBGOglpbmNsdWRlL21lZGlhLyo3MTQ2KgogCitUTEcyMzAwIFZJREVPNExJTlVYLTIgRFJJVkVSCitNOglIdWFuZyBTaGlqaWUgPHNoaWppZThAZ21haWwuY29tPgorTToJS2FuZyBZb25nIDxrYW5neW9uZ0B0ZWxlZ2VudC5jb20+CitNOglaaGFuZyBYaWFvYmluZyA8eGJ6aGFuZ0B0ZWxlZ2VudC5jb20+CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMAorCiBTQzEyMDAgV0RUIERSSVZFUgogTToJWndhbmUgTXdhaWthbWJvIDx6d2FuZUBhcm0ubGludXgub3JnLnVrPgogUzoJTWFpbnRhaW5lZApAQCAtNTAzMiw3ICs1MDc3LDcgQEAKIAogU09OWSBWQUlPIENPTlRST0wgREVWSUNFIERSSVZFUgogTToJTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGxpbnV4Lml0PgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4Lml0L35tYWxhdHRpYS93aWtpL2luZGV4LnBocC9Tb255X2RyaXZlcnMKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vbGFwdG9wcy9zb255LWxhcHRvcC50eHQKQEAgLTUyMzgsNiArNTI4Myw3IEBACiBUSElOS1BBRCBBQ1BJIEVYVFJBUyBEUklWRVIKIE06CUhlbnJpcXVlIGRlIE1vcmFlcyBIb2xzY2h1aCA8aWJtLWFjcGlAaG1oLmVuZy5icj4KIEw6CWlibS1hY3BpLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9pYm0tYWNwaS5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly90aGlua3dpa2kub3JnL3dpa2kvSWJtLWFjcGkKIFQ6CWdpdCBnaXQ6Ly9yZXBvLm9yLmN6L2xpbnV4LTIuNi9saW51eC1hY3BpLTIuNi9pYm0tYWNwaS0yLjYuZ2l0CkBAIC01MjkxLDEwICs1MzM3LDEyIEBACiAKIFRPUFNUQVIgTEFQVE9QIEVYVFJBUyBEUklWRVIKIE06CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9wc3Rhci1sYXB0b3AuYwogCiBUT1NISUJBIEFDUEkgRVhUUkFTIERSSVZFUgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU9ycGhhbgogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKIApAQCAtNjAyMiw2ICs2MDcwLDEyIEBACiBGOglEb2N1bWVudGF0aW9uL3g4Ni8KIEY6CWFyY2gveDg2LwogCitYODYgUExBVEZPUk0gRFJJVkVSUworTToJTWF0dGhldyBHYXJyZXR0IDxtamdAcmVkaGF0LmNvbT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL3BsYXRmb3JtL3g4NgorCiBYRU4gSFlQRVJWSVNPUiBJTlRFUkZBQ0UKIE06CUplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUB4ZW5zb3VyY2UuY29tPgogTToJQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAc291cy1zb2wub3JnPgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA2N2Q2Y2ZmLi4xYjI0ODk1IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAzMwotRVhUUkFWRVJTSU9OID0gLXJjNQorRVhUUkFWRVJTSU9OID0KIE5BTUUgPSBNYW4tRWF0aW5nIFNlYWxzIG9mIEFudGlxdWl0eQogCiAjICpET0NVTUVOVEFUSU9OKgpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IDlkMDU1YjQuLjIxNWU0NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTMsMTEgKzMsOSBAQAogIwogCiBjb25maWcgT1BST0ZJTEUKLQl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyIKIAlkZXBlbmRzIG9uIFBST0ZJTElORwogCWRlcGVuZHMgb24gSEFWRV9PUFJPRklMRQotCWRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUCi0Jc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgUklOR19CVUZGRVIKIAlzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUAogCWhlbHAKQEAgLTE3LDIwICsxNSw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBPUFJPRklMRV9JQlMKLQlib29sICJPUHJvZmlsZSBBTUQgSUJTIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBPUFJPRklMRSAmJiBTTVAgJiYgWDg2Ci0JaGVscAotICAgICAgICAgIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIGlzIGEgbmV3IHByb2ZpbGluZwotICAgICAgICAgIHRlY2huaXF1ZSB0aGF0IHByb3ZpZGVzIHJpY2gsIHByZWNpc2UgcHJvZ3JhbSBwZXJmb3JtYW5jZQotICAgICAgICAgIGluZm9ybWF0aW9uLiBJQlMgaXMgaW50cm9kdWNlZCBieSBBTUQgRmFtaWx5MTBoIHByb2Nlc3NvcnMKLSAgICAgICAgICAoQU1EIE9wdGVyb24gUXVhZC1Db3JlIHByb2Nlc3NvciAiQmFyY2Vsb25hIikgdG8gb3ZlcmNvbWUKLSAgICAgICAgICB0aGUgbGltaXRhdGlvbnMgb2YgY29udmVudGlvbmFsIHBlcmZvcm1hbmNlIGNvdW50ZXIKLSAgICAgICAgICBzYW1wbGluZy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIE9QUk9GSUxFX0VWRU5UX01VTFRJUExFWAogCWJvb2wgIk9Qcm9maWxlIG11bHRpcGxleGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlZmF1bHQgbgpAQCAtMTIxLDYgKzEwNSwxNCBAQAogY29uZmlnIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCiAJYm9vbAogCitjb25maWcgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgc3ltYm9sIHNob3VsZCBiZSBzZWxlY3RlZCBieSBhbiBhcmNoaXRlY3VyZSBpZiBpdCBzdXBwb3J0cworCSAgdGhlIEFQSSBuZWVkZWQgdG8gYWNjZXNzIHJlZ2lzdGVycyBhbmQgc3RhY2sgZW50cmllcyBmcm9tIHB0X3JlZ3MsCisJICBkZWNsYXJlZCBpbiBhc20vcHRyYWNlLmgKKwkgIEZvciBleGFtcGxlIHRoZSBrcHJvYmVzLWJhc2VkIGV2ZW50IHRyYWNlciBuZWVkcyB0aGlzIEFQSS4KKwogY29uZmlnIEhBVkVfQ0xLCiAJYm9vbAogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKaW5kZXggYTkxYmEyOC4uYzlhYjk0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKQEAgLTEyNiw4ICsxMjYsOCBAQAogI2RlZmluZSBNQgkJCSgxMDI0KktCKQogI2RlZmluZSBHQgkJCSgxMDI0Kk1CKQogCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKQEAgLTE4NCw3ICsxODQsNyBAQAogCQl9CiAJfQogCi0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KICN1bmRlZiBLQgogI3VuZGVmIE1CCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA0YzMzY2E4Li4xODRhNmJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTcwMiw2ICs3MDIsNyBAQAogCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEFSQ0hfSEFTX0hPTEVTX01FTU9SWU1PREVMCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVEkncyBPTUFQIHBsYXRmb3JtIChPTUFQMSBhbmQgT01BUDIpLgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDllNzU4MjUuLjM1NmQ3MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC05NCw3ICs5NCw3IEBACiBlbmRpZgogCiBpZmVxICgkKENPTkZJR19USFVNQjJfS0VSTkVMKSx5KQotQUZMQUdTX0FVVE9JVAk6PSQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktbWltcGxpY2l0LWl0PXRodW1iLC1XYSQoY29tbWEpLW1hdXRvLWl0KQorQUZMQUdTX0FVVE9JVAk6PSQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktbWltcGxpY2l0LWl0PWFsd2F5cywtV2EkKGNvbW1hKS1tYXV0by1pdCkKIEFGTEFHU19OT1dBUk4JOj0kKGNhbGwgYXMtb3B0aW9uLC1XYSQoY29tbWEpLW1uby13YXJuLWRlcHJlY2F0ZWQsLVdhJChjb21tYSktVykKIENGTEFHU19USFVNQjIJOj0tbXRodW1iICQoQUZMQUdTX0FVVE9JVCkgJChBRkxBR1NfTk9XQVJOKQogQUZMQUdTX1RIVU1CMgk6PSQoQ0ZMQUdTX1RIVU1CMikgLVdhJChjb21tYSktbXRodW1iCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggYzc3ZDJmYS4uNWZlNGEyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNDIsNyArNDIsOCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTIwVCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMlQpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI1VCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjApCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyNVQpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9BUk0xMDIwKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjYpCiAjIGRlZmluZSBNVUxUSV9DQUNIRSAxCiAjZW5kaWYKIApAQCAtNDQ2LDYgKzQ0NywxNiBAQAogCSAgICA6ICJyIiAoMCkpOwogI2VuZGlmCiB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJaWYgKChjYWNoZV9pc192aXZ0KCkgfHwgY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSkKKwkgIF9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYShhZGRyLCAoc2l6ZV90KXNpemUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJaWYgKChjYWNoZV9pc192aXZ0KCkgfHwgY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSkKKwkgIF9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYShhZGRyLCAoc2l6ZV90KXNpemUpOworfQogCiAjZGVmaW5lIEFSQ0hfSEFTX0ZMVVNIX0FOT05fUEFHRQogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2Fub25fcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYyBiL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYwppbmRleCA4MDk2ODE5Li5iZDM5N2UwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCkBAIC02MTYsMTUgKzYxNiwxNyBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPICYmIHN0YXJ0ICYgMHgzMDApCiAJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwogCi0JcmVzLT5zdGFydCA9IChzdGFydCArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSk7CisJc3RhcnQgPSAoc3RhcnQgKyBhbGlnbiAtIDEpICYgfihhbGlnbiAtIDEpOworCisJcmV0dXJuIHN0YXJ0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggYzZjNTdiNi4uNjIxYWNhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX09VVEVSX0NBQ0hFCiBzdHJ1Y3Qgb3V0ZXJfY2FjaGVfZm5zIG91dGVyX2NhY2hlOworRVhQT1JUX1NZTUJPTChvdXRlcl9jYWNoZSk7CiAjZW5kaWYKIAogc3RydWN0IHN0YWNrIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYwppbmRleCBiNDc2Mzk1Li4zOGU5MDMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CiAjaW5jbHVkZSA8bWFjaC9rZXlzY2FuLmg+CiAKKyNpbmNsdWRlIDxtZWRpYS90dnA1MTR4Lmg+CisKIHN0YXRpYyBpbmxpbmUgaW50IGhhdmVfaW1hZ2VyKHZvaWQpCiB7CiAJLyogUkVWSVNJVCB3aGVuIGl0J3Mgc3VwcG9ydGVkLCB0cmlnZ2VyIHZpYSBLY29uZmlnICovCkBAIC0zMDYsNiArMzA4LDczIEBACiAJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1NEMV9EQVRBMCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9wbGF0Zm9ybV9kYXRhIHR2cDUxNDZfcGRhdGEgPSB7CisJLmNsa19wb2xhcml0eSA9IDAsCisJLmhzX3BvbGFyaXR5ID0gMSwKKwkudnNfcG9sYXJpdHkgPSAxCit9OworCisjZGVmaW5lIFRWUDUxNFhfU1REX0FMTCAgICAgICAgKFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwpCisvKiBJbnB1dHMgYXZhaWxhYmxlIGF0IHRoZSBUVlA1MTQ2ICovCitzdGF0aWMgc3RydWN0IHY0bDJfaW5wdXQgdHZwNTE0Nl9pbnB1dHNbXSA9IHsKKwl7CisJCS5pbmRleCA9IDAsCisJCS5uYW1lID0gIkNvbXBvc2l0ZSIsCisJCS50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwKKwkJLnN0ZCA9IFRWUDUxNFhfU1REX0FMTCwKKwl9LAorCXsKKwkJLmluZGV4ID0gMSwKKwkJLm5hbWUgPSAiUy1WaWRlbyIsCisJCS50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwKKwkJLnN0ZCA9IFRWUDUxNFhfU1REX0FMTCwKKwl9LAorfTsKKworLyoKKyAqIHRoaXMgaXMgdGhlIHJvdXRlIGluZm8gZm9yIGNvbm5lY3RpbmcgZWFjaCBpbnB1dCB0byBkZWNvZGVyCisgKiBvdXB1dCB0aGF0IGdvZXMgdG8gdnBmZS4gVGhlcmUgaXMgYSBvbmUgdG8gb25lIGNvcnJlc3BvbmRlbmNlCisgKiB3aXRoIHR2cDUxNDZfaW5wdXRzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdnBmZV9yb3V0ZSB0dnA1MTQ2X3JvdXRlc1tdID0geworCXsKKwkJLmlucHV0ID0gSU5QVVRfQ1ZCU19WSTJCLAorCQkub3V0cHV0ID0gT1VUUFVUXzEwQklUXzQyMl9FTUJFRERFRF9TWU5DLAorCX0sCit7CisJCS5pbnB1dCA9IElOUFVUX1NWSURFT19WSTJDX1ZJMUMsCisJCS5vdXRwdXQgPSBPVVRQVVRfMTBCSVRfNDIyX0VNQkVEREVEX1NZTkMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyB2cGZlX3N1Yl9kZXZzW10gPSB7CisJeworCQkubmFtZSA9ICJ0dnA1MTQ2IiwKKwkJLmdycF9pZCA9IDAsCisJCS5udW1faW5wdXRzID0gQVJSQVlfU0laRSh0dnA1MTQ2X2lucHV0cyksCisJCS5pbnB1dHMgPSB0dnA1MTQ2X2lucHV0cywKKwkJLnJvdXRlcyA9IHR2cDUxNDZfcm91dGVzLAorCQkuY2FuX3JvdXRlID0gMSwKKwkJLmNjZGNfaWZfcGFyYW1zID0geworCQkJLmlmX3R5cGUgPSBWUEZFX0JUNjU2LAorCQkJLmhkcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCQkudmRwb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJfSwKKwkJLmJvYXJkX2luZm8gPSB7CisJCQlJMkNfQk9BUkRfSU5GTygidHZwNTE0NiIsIDB4NWQpLAorCQkJLnBsYXRmb3JtX2RhdGEgPSAmdHZwNTE0Nl9wZGF0YSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2cGZlX2NvbmZpZyB2cGZlX2NmZyA9IHsKKwkubnVtX3N1YmRldnMgPSBBUlJBWV9TSVpFKHZwZmVfc3ViX2RldnMpLAorCS5zdWJfZGV2cyA9IHZwZmVfc3ViX2RldnMsCisJLmkyY19hZGFwdGVyX2lkID0gMSwKKwkuY2FyZF9uYW1lID0gIkRNMzY1IEVWTSIsCisJLmNjZGMgPSAiSVNJRiIsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZXZtX2luaXRfaTJjKHZvaWQpCiB7CiAJZGF2aW5jaV9pbml0X2kyYygmaTJjX3BkYXRhKTsKQEAgLTQ5Nyw2ICs1NjYsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZG0zNjVfZXZtX21hcF9pbyh2b2lkKQogeworCS8qIHNldHVwIGlucHV0IGNvbmZpZ3VyYXRpb24gZm9yIFZQRkUgaW5wdXQgZGV2aWNlcyAqLworCWRtMzY1X3NldF92cGZlX2NvbmZpZygmdnBmZV9jZmcpOwogCWRtMzY1X2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYwppbmRleCBkZWRmNGQ0Li5kODRlODU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYwpAQCAtMTI1LDcgKzEyNSw2IEBACiAJLmxwc2MgPSBEQVZJTkNJX0xQU0NfVlBTU1NMViwKIH07CiAKLQogc3RhdGljIHN0cnVjdCBjbGsgY2xrb3V0MV9jbGsgPSB7CiAJLm5hbWUgPSAiY2xrb3V0MSIsCiAJLnBhcmVudCA9ICZwbGwxX2F1eF9jbGssCkBAIC02NjUsNiArNjY0LDE3IEBACiAJLnJlc291cmNlCT0gZG0zNTVfYXNwMV9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgdm9pZCBkbTM1NV9jY2RjX3NldHVwX3Bpbm11eCh2b2lkKQoreworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fUENMSyk7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fV0VOKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9WRCk7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fSEQpOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fWUlOX0VOKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NJTkxfRU4pOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0lOSF9FTik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG0zNTVfdnBzc19yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS8qIFZQU1MgQkwgQmFzZSBhZGRyZXNzICovCkBAIC03MDEsNiArNzExLDEwIEBACiAJCS5lbmQgICAgICAgICAgICA9IElSUV9WRElOVDEsCiAJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCit9OworCitzdGF0aWMgdTY0IHZwZmVfY2FwdHVyZV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtMzU1X2NjZGNfcmVzb3VyY2VbXSA9IHsKIAkvKiBDQ0RDIEJhc2UgYWRkcmVzcyAqLwogCXsKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCkBAIC03MDgsOCArNzIyLDE4IEBACiAJCS5lbmQgICAgICAgICAgICA9IDB4MDFjNzA2MDAgKyAweDFmZiwKIAl9LAogfTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtMzU1X2NjZGNfZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJkbTM1NV9jY2RjIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGRtMzU1X2NjZGNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSAgICAgICA9IGRtMzU1X2NjZGNfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgICAgICAgPSAmdnBmZV9jYXB0dXJlX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9IGRtMzU1X2NjZGNfc2V0dXBfcGlubXV4LAorCX0sCit9OwogCi1zdGF0aWMgdTY0IHZwZmVfY2FwdHVyZV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cGZlX2NhcHR1cmVfZGV2ID0gewogCS5uYW1lCQk9IENBUFRVUkVfRFJWX05BTUUsCiAJLmlkCQk9IC0xLApAQCAtODU3LDIwICs4ODEsMTMgQEAKIAlpZiAoIWNwdV9pc19kYXZpbmNpX2RtMzU1KCkpCiAJCXJldHVybiAwOwogCisJLyogQWRkIGNjZGMgY2xvY2sgYWxpYXNlcyAqLworCWNsa19hZGRfYWxpYXMoIm1hc3RlciIsIGRtMzU1X2NjZGNfZGV2Lm5hbWUsICJ2cHNzX21hc3RlciIsIE5VTEwpOworCWNsa19hZGRfYWxpYXMoInNsYXZlIiwgZG0zNTVfY2NkY19kZXYubmFtZSwgInZwc3NfbWFzdGVyIiwgTlVMTCk7CiAJZGF2aW5jaV9jZmdfcmVnKERNMzU1X0lOVF9FRE1BX0NDKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtMzU1X2VkbWFfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtMzU1X3Zwc3NfZGV2aWNlKTsKLQkvKgotCSAqIHNldHVwIE11eCBjb25maWd1cmF0aW9uIGZvciB2cGZlIGlucHV0IGFuZCByZWdpc3RlcgotCSAqIHZwZmUgY2FwdHVyZSBwbGF0Zm9ybSBkZXZpY2UKLQkgKi8KLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX1BDTEspOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX1dFTik7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fVkQpOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX0hEKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX1lJTl9FTik7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DSU5MX0VOKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NJTkhfRU4pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNTVfY2NkY19kZXYpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdnBmZV9jYXB0dXJlX2Rldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKaW5kZXggZjUzNzM1Yy4uY2U5ZGE0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKQEAgLTEwMDgsNiArMTAwOCw5NyBAQAogCWRhdmluY2lfY29tbW9uX2luaXQoJmRhdmluY2lfc29jX2luZm9fZG0zNjUpOwogfQogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtMzY1X3Zwc3NfcmVzb3VyY2VzW10gPSB7CisJeworCQkvKiBWUFNTIElTUDUgQmFzZSBhZGRyZXNzICovCisJCS5uYW1lICAgICAgICAgICA9ICJpc3A1IiwKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgwMWM3MDAwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MDAwMCArIDB4ZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBWUFNTIENMSyBCYXNlIGFkZHJlc3MgKi8KKwkJLm5hbWUgICAgICAgICAgID0gInZwc3MiLAorCQkuc3RhcnQgICAgICAgICAgPSAweDAxYzcwMjAwLAorCQkuZW5kICAgICAgICAgICAgPSAweDAxYzcwMjAwICsgMHhmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtMzY1X3Zwc3NfZGV2aWNlID0geworICAgICAgIC5uYW1lICAgICAgICAgICAgICAgICAgID0gInZwc3MiLAorICAgICAgIC5pZCAgICAgICAgICAgICAgICAgICAgID0gLTEsCisgICAgICAgLmRldi5wbGF0Zm9ybV9kYXRhICAgICAgPSAiZG0zNjVfdnBzcyIsCisgICAgICAgLm51bV9yZXNvdXJjZXMgICAgICAgICAgPSBBUlJBWV9TSVpFKGRtMzY1X3Zwc3NfcmVzb3VyY2VzKSwKKyAgICAgICAucmVzb3VyY2UgICAgICAgICAgICAgICA9IGRtMzY1X3Zwc3NfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2cGZlX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gSVJRX1ZESU5UMCwKKwkJLmVuZCAgICAgICAgICAgID0gSVJRX1ZESU5UMCwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCAgICAgICAgICA9IElSUV9WRElOVDEsCisJCS5lbmQgICAgICAgICAgICA9IElSUV9WRElOVDEsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHZwZmVfY2FwdHVyZV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cGZlX2NhcHR1cmVfZGV2ID0geworCS5uYW1lICAgICAgICAgICA9IENBUFRVUkVfRFJWX05BTUUsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRSh2cGZlX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gdnBmZV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgICAgICAgPSAmdnBmZV9jYXB0dXJlX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGRtMzY1X2lzaWZfc2V0dXBfcGlubXV4KHZvaWQpCit7CisJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1ZJTl9DQU1fV0VOKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfVklOX0NBTV9WRCk7CisJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1ZJTl9DQU1fSEQpOworCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9WSU5fWUlONF83X0VOKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfVklOX1lJTjBfM19FTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXNpZl9yZXNvdXJjZVtdID0geworCS8qIElTSUYgQmFzZSBhZGRyZXNzICovCisJeworCQkuc3RhcnQgICAgICAgICAgPSAweDAxYzcxMDAwLAorCQkuZW5kICAgICAgICAgICAgPSAweDAxYzcxMDAwICsgMHgxZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyogSVNJRiBMaW5lYXJpemF0aW9uIHRhYmxlIDAgKi8KKwl7CisJCS5zdGFydCAgICAgICAgICA9IDB4MUM3QzAwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgxQzdDMDAwICsgMHgyZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyogSVNJRiBMaW5lYXJpemF0aW9uIHRhYmxlIDEgKi8KKwl7CisJCS5zdGFydCAgICAgICAgICA9IDB4MUM3QzQwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgxQzdDNDAwICsgMHgyZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG0zNjVfaXNpZl9kZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gImlzaWYiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaXNpZl9yZXNvdXJjZSksCisJLnJlc291cmNlICAgICAgID0gaXNpZl9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgICAgICAgICAgICAgICA9ICZ2cGZlX2NhcHR1cmVfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gZG0zNjVfaXNpZl9zZXR1cF9waW5tdXgsCisJfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRtMzY1X2luaXRfZGV2aWNlcyh2b2lkKQogewogCWlmICghY3B1X2lzX2RhdmluY2lfZG0zNjUoKSkKQEAgLTEwMTYsNyArMTEwNywxNiBAQAogCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9JTlRfRURNQV9DQyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM2NV9lZG1hX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM2NV9lbWFjX2RldmljZSk7Ci0KKwkvKiBBZGQgaXNpZiBjbG9jayBhbGlhcyAqLworCWNsa19hZGRfYWxpYXMoIm1hc3RlciIsIGRtMzY1X2lzaWZfZGV2Lm5hbWUsICJ2cHNzX21hc3RlciIsIE5VTEwpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfdnBzc19kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfaXNpZl9kZXYpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdnBmZV9jYXB0dXJlX2Rldik7CiAJcmV0dXJuIDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChkbTM2NV9pbml0X2RldmljZXMpOworCit2b2lkIGRtMzY1X3NldF92cGZlX2NvbmZpZyhzdHJ1Y3QgdnBmZV9jb25maWcgKmNmZykKK3sKKyAgICAgICB2cGZlX2NhcHR1cmVfZGV2LmRldi5wbGF0Zm9ybV9kYXRhID0gY2ZnOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCmluZGV4IDJjZDAwODEuLjkyYWViNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKQEAgLTYxMiw2ICs2MTIsMTEgQEAKIAkJLmVuZCAgICAgICAgICAgID0gSVJRX1ZESU5UMSwKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKK307CisKK3N0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG02NDR4X2NjZGNfcmVzb3VyY2VbXSA9IHsKKwkvKiBDQ0RDIEJhc2UgYWRkcmVzcyAqLwogCXsKIAkJLnN0YXJ0ICAgICAgICAgID0gMHgwMWM3MDQwMCwKIAkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MDQwMCArIDB4ZmYsCkBAIC02MTksNyArNjI0LDE3IEBACiAJfSwKIH07CiAKLXN0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtNjQ0eF9jY2RjX2RldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiZG02NDR4X2NjZGMiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZG02NDR4X2NjZGNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSAgICAgICA9IGRtNjQ0eF9jY2RjX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJnZwZmVfY2FwdHVyZV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cGZlX2NhcHR1cmVfZGV2ID0gewogCS5uYW1lCQk9IENBUFRVUkVfRFJWX05BTUUsCiAJLmlkCQk9IC0xLApAQCAtNzY5LDkgKzc4NCwxMyBAQAogCWlmICghY3B1X2lzX2RhdmluY2lfZG02NDR4KCkpCiAJCXJldHVybiAwOwogCisJLyogQWRkIGNjZGMgY2xvY2sgYWxpYXNlcyAqLworCWNsa19hZGRfYWxpYXMoIm1hc3RlciIsIGRtNjQ0eF9jY2RjX2Rldi5uYW1lLCAidnBzc19tYXN0ZXIiLCBOVUxMKTsKKwljbGtfYWRkX2FsaWFzKCJzbGF2ZSIsIGRtNjQ0eF9jY2RjX2Rldi5uYW1lLCAidnBzc19zbGF2ZSIsIE5VTEwpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDR4X2VkbWFfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtNjQ0eF9lbWFjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTY0NHhfdnBzc19kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDR4X2NjZGNfZGV2KTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZwZmVfY2FwdHVyZV9kZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtMzY1LmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtMzY1LmgKaW5kZXggZjE3MTBhMy4uOWZjNWE2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTM2NS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG0zNjUuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPG1hY2gvZW1hYy5oPgogI2luY2x1ZGUgPG1hY2gvYXNwLmg+CiAjaW5jbHVkZSA8bWFjaC9rZXlzY2FuLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGZlX2NhcHR1cmUuaD4KIAogI2RlZmluZSBETTM2NV9FTUFDX0JBU0UJCQkoMHgwMUQwNzAwMCkKICNkZWZpbmUgRE0zNjVfRU1BQ19DTlRSTF9PRkZTRVQJCSgweDAwMDApCkBAIC0zNiw0ICszNyw1IEBACiB2b2lkIF9faW5pdCBkbTM2NV9pbml0X2tzKHN0cnVjdCBkYXZpbmNpX2tzX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKIHZvaWQgX19pbml0IGRtMzY1X2luaXRfcnRjKHZvaWQpOwogCit2b2lkIGRtMzY1X3NldF92cGZlX2NvbmZpZyhzdHJ1Y3QgdnBmZV9jb25maWcgKmNmZyk7CiAjZW5kaWYgLyogX19BU01fQVJDSF9ETTM2NV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ncGlvLmMKaW5kZXggZTcyNjM4NS4uZmUzYmQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2dwaW8uYwpAQCAtODYsNyArODYsNyBAQAogCXVuc2lnbmVkIGludCByZWdfYm90aCwgcmVnX2xldmVsLCByZWdfdHlwZTsKIAogCXJlZ190eXBlID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU9fSU5UX1RZUEUpOwotCXJlZ19sZXZlbCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0lOVF9CT1RIX0VER0UpOworCXJlZ19sZXZlbCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0lOVF9MRVZFTCk7CiAJcmVnX2JvdGggPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT19JTlRfQk9USF9FREdFKTsKIAogCXN3aXRjaCAodHlwZSkgewpAQCAtMTE3LDcgKzExNyw3IEBACiAJfQogCiAJX19yYXdfd3JpdGVsKHJlZ190eXBlLCBiYXNlICsgR1BJT19JTlRfVFlQRSk7Ci0JX19yYXdfd3JpdGVsKHJlZ19sZXZlbCwgYmFzZSArIEdQSU9fSU5UX0JPVEhfRURHRSk7CisJX19yYXdfd3JpdGVsKHJlZ19sZXZlbCwgYmFzZSArIEdQSU9fSU5UX0xFVkVMKTsKIAlfX3Jhd193cml0ZWwocmVnX2JvdGgsIGJhc2UgKyBHUElPX0lOVF9CT1RIX0VER0UpOwogCiAJZ3Bpb19hY2tfaXJxKGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jCmluZGV4IDZlODM4YjguLjZhY2M4OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jCkBAIC0xMTksNiArMTE5LDExIEBACiAJcmV0dXJuIGdldF9yYXRlX3Blcig4KTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfZ3B0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfcGVyKDUpOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9vdGcoc3RydWN0IGNsayAqY2xrKQogewogCXJldHVybiA0ODAwMDAwMDsgLyogRklYTUUgKi8KQEAgLTE0NCw3ICsxNDksNyBAQAogCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0NMT0NLKG5hbWUsIGksIGVyLCBlcywgZ3IsIHNyKQkJXAorI2RlZmluZSBERUZJTkVfQ0xPQ0sobmFtZSwgaSwgZXIsIGVzLCBnciwgc3IsIHMpCVwKIAlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKIAkJLmlkCQk9IGksCQkJXAogCQkuZW5hYmxlX3JlZwk9IENSTV9CQVNFICsgZXIsCVwKQEAgLTE1MywyNyArMTU4LDMwIEBACiAJCS5zZXRfcmF0ZQk9IHNyLAkJCVwKIAkJLmVuYWJsZQkJPSBjbGtfY2djcl9lbmFibGUsCVwKIAkJLmRpc2FibGUJPSBjbGtfY2djcl9kaXNhYmxlLAlcCisJCS5zZWNvbmRhcnkJPSBzLAkJCVwKIAl9CiAKLURFRklORV9DTE9DSyhncHRfY2xrLCAgICAwLCBDQ01fQ0dDUjAsICA1LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOwotREVGSU5FX0NMT0NLKGNzcGkxX2NsaywgIDAsIENDTV9DR0NSMSwgIDUsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNiwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKLURFRklORV9DTE9DSyhjc3BpM19jbGssICAwLCBDQ01fQ0dDUjEsICA3LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQxX2NsaywgIDAsIENDTV9DR0NSMiwgMTQsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgIDAsIENDTV9DR0NSMiwgMTUsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQzX2NsaywgIDAsIENDTV9DR0NSMiwgMTYsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQ0X2NsaywgIDAsIENDTV9DR0NSMiwgMTcsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgIDAsIENDTV9DR0NSMiwgMTgsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKG5mY19jbGssICAgIDAsIENDTV9DR0NSMCwgIDgsIGdldF9yYXRlX25mYywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0sodXNib3RnX2NsaywgMCwgQ0NNX0NHQ1IwLCAyOCwgZ2V0X3JhdGVfb3RnLCBOVUxMKTsKLURFRklORV9DTE9DSyhwd20xX2NsaywJIDAsIENDTV9DR0NSMSwgMzEsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0socHdtMl9jbGssCSAwLCBDQ01fQ0dDUjIsICAwLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOwotREVGSU5FX0NMT0NLKHB3bTNfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAgMSwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKLURFRklORV9DTE9DSyhwd200X2NsaywJIDAsIENDTV9DR0NSMiwgIDIsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soa3BwX2NsaywJIDAsIENDTV9DR0NSMSwgMjgsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0sodHNjX2NsaywJIDAsIENDTV9DR0NSMiwgMTMsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soaTJjX2NsaywJIDAsIENDTV9DR0NSMCwgIDYsIGdldF9yYXRlX2kyYywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soZmVjX2NsaywJIDAsIENDTV9DR0NSMCwgMjMsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZ3B0X2NsaywgICAgMCwgQ0NNX0NHQ1IwLCAgNSwgZ2V0X3JhdGVfZ3B0LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0X3Blcl9jbGssIDAsIENDTV9DR0NSMCwgMTUsIGdldF9yYXRlX3VhcnQsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGNzcGkxX2NsaywgIDAsIENDTV9DR0NSMSwgIDUsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNiwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc3BpM19jbGssICAwLCBDQ01fQ0dDUjEsICA3LCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGZlY19haGJfY2xrLCAwLCBDQ01fQ0dDUjAsIDIzLCBOVUxMLAkgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxNCwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDJfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxNSwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDNfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxNiwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxNywgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDVfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxOCwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sobmZjX2NsaywgICAgMCwgQ0NNX0NHQ1IwLCAgOCwgZ2V0X3JhdGVfbmZjLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1c2JvdGdfY2xrLCAwLCBDQ01fQ0dDUjAsIDI4LCBnZXRfcmF0ZV9vdGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bTFfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAzMSwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhwd20yX2NsaywJIDAsIENDTV9DR0NSMiwgIDAsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0socHdtM19jbGssCSAwLCBDQ01fQ0dDUjIsICAxLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bTRfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAgMiwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhrcHBfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAyOCwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyh0c2NfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAxMywgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhpMmNfY2xrLAkgMCwgQ0NNX0NHQ1IwLCAgNiwgZ2V0X3JhdGVfaTJjLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhmZWNfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAxNSwgZ2V0X3JhdGVfaXBnLCBOVUxMLCAmZmVjX2FoYl9jbGspOwogCiAjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKQlcCiAJewkJCQlcCkBAIC0yMDgsMTMgKzIxNiwyMSBAQAogCV9SRUdJU1RFUl9DTE9DSygiZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQogfTsKIAotaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKK2ludCBfX2luaXQgbXgyNV9jbG9ja3NfaW5pdCh2b2lkKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKIAkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CiAKKwkvKiBUdXJuIG9mZiBhbGwgY2xvY2tzIGV4Y2VwdCB0aGUgb25lcyB3ZSBuZWVkIHRvIHN1cnZpdmUsIG5hbWVseToKKwkgKiBFTUksIEdQSU8xLTMgKENDTV9DR0NSMVsxODoxNl0pLCBHUFQxLCBJT01VWEMgKENDTV9DR0NSMVsyN10pLCBJSU0sCisJICogU0NDCisJICovCisJX19yYXdfd3JpdGVsKCgxIDw8IDE5KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjApOworCV9fcmF3X3dyaXRlbCgoMHhmIDw8IDE2KSB8ICgzIDw8IDI2KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjEpOworCV9fcmF3X3dyaXRlbCgoMSA8PCA1KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjIpOworCiAJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YMjVfSU9fQUREUkVTUyhNWDI1X0dQVDFfQkFTRV9BRERSKSwgNTQpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYwppbmRleCA5MjFiYzk5Li42ZjA2MDg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfdGltZXJfaW5pdCh2b2lkKQogewotCW14MjVfY2xvY2tzX2luaXQoMjYwMDAwMDApOworCW14MjVfY2xvY2tzX2luaXQoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyNXBka190aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYwppbmRleCAzZTdiYWZhLi45MzhjNTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCkBAIC0xNzMsNiArMTczLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBleHBpb19pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJFWFBJTyhDUExEKSIsCiAJLmFjayA9IGV4cGlvX2Fja19pcnEsCiAJLm1hc2sgPSBleHBpb19tYXNrX2lycSwKIAkudW5tYXNrID0gZXhwaW9fdW5tYXNrX2lycSwKQEAgLTMwMiw2ICszMDMsNyBAQAogCQkubWluX3VWID0gMjgwMDAwMCwKIAkJLm1heF91ViA9IDI4MDAwMDAsCiAJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAkJLmFwcGx5X3VWID0gMSwKIAl9LAogfTsKQEAgLTMyMiw2ICszMjQsNyBAQAogCQkubWluX3VWID0gMzMwMDAwMCwKIAkJLm1heF91ViA9IDMzMDAwMDAsCiAJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAkJLmFwcGx5X3VWID0gMSwKIAl9LAogCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGxkbzJfY29uc3VtZXJzKSwKQEAgLTQ1OSw2ICs0NjIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbXgzMV93bTgzNTBfcGRhdGEgPSB7CiAJLmluaXQgPSBteDMxX3dtODM1MF9pbml0LAorCS5pcnFfYmFzZSA9IE1YQ19CT0FSRF9JUlFfU1RBUlQgKyBNWENfTUFYX0VYUF9JT19MSU5FUywKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwppbmRleCBmOTNjNTk2Li45YmYzM2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYworKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwpAQCAtODYsMTEgKzg2LDE5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgY3B1ODgxNV9hbWJhX3JuZyA9IHsKKwkuZGV2ID0geworCQkuaW5pdF9uYW1lID0gInJuZyIsCisJfSwKKwlfX01FTV80S19SRVNPVVJDRShOT01BRElLX1JOR19CQVNFKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJY3B1ODgxNV9hbWJhX2dwaW8gKyAwLAogCWNwdTg4MTVfYW1iYV9ncGlvICsgMSwKIAljcHU4ODE1X2FtYmFfZ3BpbyArIDIsCiAJY3B1ODgxNV9hbWJhX2dwaW8gKyAzLAorCSZjcHU4ODE1X2FtYmFfcm5nCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjcHU4ODE1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggM2YxMzM0Zi4uNzAyN2NkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTUwNSw3ICs1MDUsNyBAQAogdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpCiB7CiAJdTMyIGw7Ci0JY2hhciAqY2s7CisJY2hhciAqY2sgPSBOVUxMOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWNrID0gImNvcmVfbDNfY2siOwpAQCAtNTIxLDYgKzUyMSw5IEBACiAJCWwgPSBPTUFQNDRYWF9HUE1DX0JBU0U7CiAJfQogCisJaWYgKFdBUk5fT04oIWNrKSkKKwkJcmV0dXJuOworCiAJZ3BtY19sM19jbGsgPSBjbGtfZ2V0KE5VTEwsIGNrKTsKIAlpZiAoSVNfRVJSKGdwbWNfbDNfY2xrKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgR1BNQyBjbG9jayAlc1xuIiwgY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKaW5kZXggMjcwNTQwMi4uMjZhZWVmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycV9iYW5rcyk7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGJhc2U7CisJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IDA7CiAJCXN0cnVjdCBvbWFwX2lycV9iYW5rICpiYW5rID0gaXJxX2JhbmtzICsgaTsKIAogCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCkBAIC0yMDIsNiArMjAyLDggQEAKIAkJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCQliYXNlID0gT01BUDM0WFhfSUNfQkFTRTsKIAorCQlCVUdfT04oIWJhc2UpOworCiAJCS8qIFN0YXRpYyBtYXBwaW5nLCBuZXZlciByZWxlYXNlZCAqLwogCQliYW5rLT5iYXNlX3JlZyA9IGlvcmVtYXAoYmFzZSwgU1pfNEspOwogCQlpZiAoIWJhbmstPmJhc2VfcmVnKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKaW5kZXggMGMzYzcyZC4uOGFmZTlkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYwpAQCAtNDA4LDYgKzQwOCw3IEBACiB7CiAJc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyAqYzsKIAlpbnQgbnJfaHNtbWMgPSBBUlJBWV9TSVpFKGhzbW1jX2RhdGEpOworCWludCBpOwogCiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CiAJCWNvbnRyb2xfcGJpYXNfb2Zmc2V0ID0gT01BUDI0M1hfQ09OVFJPTF9QQklBU19MSVRFOwpAQCAtNDM0LDcgKzQzNSw3IEBACiAJCW1tYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbW1jKSB7CiAJCQlwcl9lcnIoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tYyBkZXZpY2UhXG4iKTsKLQkJCXJldHVybjsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCiAJCWlmIChjLT5uYW1lKQpAQCAtNTMyLDYgKzUzMywxMCBAQAogCQkJY29udGludWU7CiAJCWMtPmRldiA9IG1tYy0+ZGV2OwogCX0KKworZG9uZToKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaHNtbWM7IGkrKykKKwkJa2ZyZWUoaHNtbWNfZGF0YVtpXSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggM2Y1OWJkMS4uNWZlZjczZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC00ODYsNyArNDg2LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX211eF9kZWNvZGUoc3RydWN0IHNlcV9maWxlICpzLCB1MTYgdmFsKQogewogCWNoYXIgKmZsYWdzW09NQVBfTVVYX01BWF9OUl9GTEFHU107Ci0JY2hhciBtb2RlWzE0XTsKKwljaGFyIG1vZGVbc2l6ZW9mKCJPTUFQX01VWF9NT0RFIikgKyAxXTsKIAlpbnQgaSA9IC0xOwogCiAJc3ByaW50Zihtb2RlLCAiT01BUF9NVVhfTU9ERSVkIiwgdmFsICYgMHg3KTsKQEAgLTU1Myw2ICs1NTMsNyBAQAogCQlpZiAoIW0wX25hbWUpCiAJCQljb250aW51ZTsKIAorCQkvKiBSRVZJU0lUOiBOZWVkcyB0byBiZSB1cGRhdGVkIGlmIG1vZGUwIG5hbWVzIGdldCBsb25nZXIgKi8KIAkJZm9yIChpID0gMDsgaSA8IE9NQVBfTVVYX0RFRk5BTUVfTEVOOyBpKyspIHsKIAkJCWlmIChtMF9uYW1lW2ldID09ICdcMCcpIHsKIAkJCQltMF9kZWZbaV0gPSBtMF9uYW1lW2ldOwpAQCAtOTYwLDcgKzk2MSwxMiBAQAogCXdoaWxlIChzdXBlcnNldC0+cmVnX29mZnNldCAhPSAgT01BUF9NVVhfVEVSTUlOQVRPUikgewogCQlzdHJ1Y3Qgb21hcF9tdXggKmVudHJ5OwogCi0jaWZuZGVmIENPTkZJR19PTUFQX01VWAorI2lmZGVmIENPTkZJR19PTUFQX01VWAorCQlpZiAoIXN1cGVyc2V0LT5tdXhuYW1lcyB8fCAhc3VwZXJzZXQtPm11eG5hbWVzWzBdKSB7CisJCQlzdXBlcnNldCsrOworCQkJY29udGludWU7CisJCX0KKyNlbHNlCiAJCS8qIFNraXAgcGlucyB0aGF0IGFyZSBub3QgbXV4ZWQgYXMgR1BJTyBieSBib290bG9hZGVyICovCiAJCWlmICghT01BUF9NT0RFX0dQSU8ob21hcF9tdXhfcmVhZChzdXBlcnNldC0+cmVnX29mZnNldCkpKSB7CiAJCQlzdXBlcnNldCsrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYwppbmRleCA2OGUwYTU5Li4wN2FhN2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYwpAQCAtNjQ5LDYgKzY0OSw1MyBAQAogCV9PTUFQM19NVVhFTlRSWShVQVJUM19UWF9JUlRYLCAxNjYsCiAJCSJ1YXJ0M190eF9pcnR4IiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJImdwaW9fMTY2IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCisJLyogT25seSBvbiAzNjMwLCBzZWUgb21hcDM2eHhfY2JwX3N1YnNldCBmb3IgdGhlIHNpZ25hbHMgKi8KKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19BMTEsIDAsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9NQlVTRkxBRywgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01SRUFELCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTVdSSVRFLCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfU0JVU0ZMQUcsIDAsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9TUkVBRCwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX1NXUklURSwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfQTExLCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDI4LCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDI5LCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDMyLCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDMzLCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDM0LCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDM1LCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDM2LCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggOGM5NjRiZS4uZTEwYTAyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0zNiw3ICszNiwxMyBAQAogI2RlZmluZSBVQVJUX09NQVBfTk9fRU1QVFlfRklGT19SRUFEX0lQX1JFVgkweDUyCiAjZGVmaW5lIFVBUlRfT01BUF9XRVIJCTB4MTcJLyogV2FrZS11cCBlbmFibGUgcmVnaXN0ZXIgKi8KIAotI2RlZmluZSBERUZBVUxUX1RJTUVPVVQgKDUgKiBIWikKKy8qCisgKiBOT1RFOiBCeSBkZWZhdWx0IHRoZSBzZXJpYWwgdGltZW91dCBpcyBkaXNhYmxlZCBhcyBpdCBjYXVzZXMgbG9zdCBjaGFyYWN0ZXJzCisgKiBvdmVyIHRoZSBzZXJpYWwgcG9ydHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgVUFSVCBjbG9ja3Mgd2lsbCBzdGF5IG9uIHVudGlsCisgKiBkaXNhYmxlZCB2aWEgc3lzZnMuIFRoaXMgYWxzbyBjYXVzZXMgdGhhdCBhbnkgZGVlcGVyIG9tYXAgc2xlZXAgc3RhdGVzIGFyZQorICogYmxvY2tlZC4gCisgKi8KKyNkZWZpbmUgREVGQVVMVF9USU1FT1VUIDAKIAogc3RydWN0IG9tYXBfdWFydF9zdGF0ZSB7CiAJaW50IG51bTsKQEAgLTQyMiw3ICs0MjgsOCBAQAogCXVhcnQtPnRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7CiAJc2V0dXBfdGltZXIoJnVhcnQtPnRpbWVyLCBvbWFwX3VhcnRfaWRsZV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSB1YXJ0KTsKLQltb2RfdGltZXIoJnVhcnQtPnRpbWVyLCBqaWZmaWVzICsgdWFydC0+dGltZW91dCk7CisJaWYgKHVhcnQtPnRpbWVvdXQpCisJCW1vZF90aW1lcigmdWFydC0+dGltZXIsIGppZmZpZXMgKyB1YXJ0LT50aW1lb3V0KTsKIAlvbWFwX3VhcnRfc21hcnRfaWRsZV9lbmFibGUodWFydCwgMCk7CiAKIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaAppbmRleCAzMWFiZTZkLi42NzA5YjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NhbWVyYS5oCkBAIC0zNSw4ICszNSw2IEBACiAjZGVmaW5lIFBYQV9DQU1FUkFfVlNQCQkweDQwMAogCiBzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKik7Ci0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbWNsa18xMGtoejsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwppbmRleCBhMjFhNGIzLi5kOTQ4NTdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKQEAgLTMzNCw4ICszMzQsOCBAQAogCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQogCSAqLwogCV9fcmF3X3dyaXRlbChSRUFMVklFV19TWVNfTE9DS19WQUwsIGxvY2tfY3RybCk7Ci0JX19yYXdfd3JpdGVsKDB4MDAwMCwgcmVzZXRfY3RybCk7Ci0JX19yYXdfd3JpdGVsKDB4MDAwNCwgcmVzZXRfY3RybCk7CisJX19yYXdfd3JpdGVsKDB4MDBGMCwgcmVzZXRfY3RybCk7CisJX19yYXdfd3JpdGVsKDB4MDBGNCwgcmVzZXRfY3RybCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYnhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwppbmRleCBiMjcwZDYyLi42MjgyMGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYworKysgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwpAQCAtMTEsNiArMTEsNyBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC03Nyw2ICs3OCw4IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhaV9tdWx0aTsKIHN0YXRpYyBpbnQgYWlfdXNlcm1vZGU7CiAKK2NvcmVfcGFyYW0oYWxpZ25tZW50LCBhaV91c2VybW9kZSwgaW50LCAwNjAwKTsKKwogI2RlZmluZSBVTV9XQVJOCQkoMSA8PCAwKQogI2RlZmluZSBVTV9GSVhVUAkoMSA8PCAxKQogI2RlZmluZSBVTV9TSUdOQUwJKDEgPDwgMikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCmluZGV4IDNmOWNkM2QuLjc5NWRjNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtNDEsNyArNDEsNyBAQAogRU5UUlkoY3B1X2FybTdfZGF0YV9hYm9ydCkKIAltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAwCQlAIGdldCBGU1IKIAltcmMJcDE1LCAwLCByMCwgYzYsIGMwLCAwCQlAIGdldCBGQVIKLQlsZHIJcjgsIFtyMF0JCQlAIHJlYWQgYXJtIGluc3RydWN0aW9uCisJbGRyCXI4LCBbcjJdCQkJQCByZWFkIGFybSBpbnN0cnVjdGlvbgogCXRzdAlyOCwgIzEgPDwgMjAJCQlAIEwgPSAwIC0+IHdyaXRlPwogCW9ycmVxCXIxLCByMSwgIzEgPDwgMTEJCUAgeWVzLgogCWFuZAlyNywgcjgsICMxNSA8PCAyNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvYXVkbXV4LXYyLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjIuYwppbmRleCA2ZjIxMDk2Li5iMDY5NTRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjIuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjIuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPG1hY2gvYXVkbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC0zMiw2ICszMywxNDAgQEAKICNkZWZpbmUgTVhDX0FVRE1VWF9WMl9QVENSKHgpCQkoKHgpICogOCkKICNkZWZpbmUgTVhDX0FVRE1VWF9WMl9QRENSKHgpCQkoKHgpICogOCArIDQpCiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdWRtdXhfZGVidWdmc19yb290OworCitzdGF0aWMgaW50IGF1ZG11eF9vcGVuX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworLyogVGhlcmUgaXMgYW4gYW5ub3lpbmcgZGlzY29udGludWl0eSBpbiB0aGUgU1NJIG51bWJlcmluZyB3aXRoIHJlZ2FyZAorICogdG8gdGhlIExpbnV4IG51bWJlciBvZiB0aGUgZGV2aWNlcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmF1ZG11eF9wb3J0X3N0cmluZyhpbnQgcG9ydCkKK3sKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIE1YMzFfQVVETVVYX1BPUlQxX1NTSTA6CisJCXJldHVybiAiaW14LXNzaS4wIjsKKwljYXNlIE1YMzFfQVVETVVYX1BPUlQyX1NTSTE6CisJCXJldHVybiAiaW14LXNzaS4xIjsKKwljYXNlIE1YMzFfQVVETVVYX1BPUlQzX1NTSV9QSU5TXzM6CisJCXJldHVybiAiU1NJMyI7CisJY2FzZSBNWDMxX0FVRE1VWF9QT1JUNF9TU0lfUElOU180OgorCQlyZXR1cm4gIlNTSTQiOworCWNhc2UgTVgzMV9BVURNVVhfUE9SVDVfU1NJX1BJTlNfNToKKwkJcmV0dXJuICJTU0k1IjsKKwljYXNlIE1YMzFfQVVETVVYX1BPUlQ2X1NTSV9QSU5TXzY6CisJCXJldHVybiAiU1NJNiI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOIjsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF1ZG11eF9yZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzc2l6ZV90IHJldDsKKwljaGFyICpidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaW50IHBvcnQgPSAoaW50KWZpbGUtPnByaXZhdGVfZGF0YTsKKwl1MzIgcGRjciwgcHRjcjsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhdWRtdXhfY2xrKQorCQljbGtfZW5hYmxlKGF1ZG11eF9jbGspOworCisJcHRjciA9IHJlYWRsKGF1ZG11eF9iYXNlICsgTVhDX0FVRE1VWF9WMl9QVENSKHBvcnQpKTsKKwlwZGNyID0gcmVhZGwoYXVkbXV4X2Jhc2UgKyBNWENfQVVETVVYX1YyX1BEQ1IocG9ydCkpOworCisJaWYgKGF1ZG11eF9jbGspCisJCWNsa19kaXNhYmxlKGF1ZG11eF9jbGspOworCisJcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJQRENSOiAlMDh4XG5QVENSOiAlMDh4XG4iLAorCQkgICAgICAgcGRjciwgcHRjcik7CisKKwlpZiAocHRjciAmIE1YQ19BVURNVVhfVjJfUFRDUl9URlNESVIpCisJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKKwkJCQkiVHhGUyBvdXRwdXQgZnJvbSAlcywgIiwKKwkJCQlhdWRtdXhfcG9ydF9zdHJpbmcoKHB0Y3IgPj4gMjcpICYgMHg3KSk7CisJZWxzZQorCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkJIlR4RlMgaW5wdXQsICIpOworCisJaWYgKHB0Y3IgJiBNWENfQVVETVVYX1YyX1BUQ1JfVENMS0RJUikKKwkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJCSJUeENsayBvdXRwdXQgZnJvbSAlcyIsCisJCQkJYXVkbXV4X3BvcnRfc3RyaW5nKChwdGNyID4+IDIyKSAmIDB4NykpOworCWVsc2UKKwkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJCSJUeENsayBpbnB1dCIpOworCisJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LCAiXG4iKTsKKworCWlmIChwdGNyICYgTVhDX0FVRE1VWF9WMl9QVENSX1NZTikgeworCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkJIlBvcnQgaXMgc3ltbWV0cmljIik7CisJfSBlbHNlIHsKKwkJaWYgKHB0Y3IgJiBNWENfQVVETVVYX1YyX1BUQ1JfUkZTRElSKQorCQkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJCQkiUnhGUyBvdXRwdXQgZnJvbSAlcywgIiwKKwkJCQkJYXVkbXV4X3BvcnRfc3RyaW5nKChwdGNyID4+IDE3KSAmIDB4NykpOworCQllbHNlCisJCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkJCSJSeEZTIGlucHV0LCAiKTsKKworCQlpZiAocHRjciAmIE1YQ19BVURNVVhfVjJfUFRDUl9SQ0xLRElSKQorCQkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJCQkiUnhDbGsgb3V0cHV0IGZyb20gJXMiLAorCQkJCQlhdWRtdXhfcG9ydF9zdHJpbmcoKHB0Y3IgPj4gMTIpICYgMHg3KSk7CisJCWVsc2UKKwkJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKKwkJCQkJIlJ4Q2xrIGlucHV0Iik7CisJfQorCisJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJIlxuRGF0YSByZWNlaXZlZCBmcm9tICVzXG4iLAorCQkJYXVkbXV4X3BvcnRfc3RyaW5nKChwZGNyID4+IDEzKSAmIDB4NykpOworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXVkbXV4X2RlYnVnZnNfZm9wcyA9IHsKKwkub3BlbiA9IGF1ZG11eF9vcGVuX2ZpbGUsCisJLnJlYWQgPSBhdWRtdXhfcmVhZF9maWxlLAorfTsKKworc3RhdGljIHZvaWQgYXVkbXV4X2RlYnVnZnNfaW5pdCh2b2lkKQoreworCWludCBpOworCWNoYXIgYnVmWzIwXTsKKworCWF1ZG11eF9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImF1ZG11eCIsIE5VTEwpOworCWlmICghYXVkbXV4X2RlYnVnZnNfcm9vdCkgeworCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gY3JlYXRlIEFVRE1VWCBkZWJ1Z2ZzIHJvb3RcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgeworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAic3NpJWQiLCBpKTsKKwkJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGJ1ZiwgMDQ0NCwgYXVkbXV4X2RlYnVnZnNfcm9vdCwKKwkJCQkJICh2b2lkICopaSwgJmF1ZG11eF9kZWJ1Z2ZzX2ZvcHMpKQorCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGNyZWF0ZSBBVURNVVggcG9ydCAlZCBkZWJ1Z2ZzIGZpbGVcbiIsCisJCQkJICAgaSk7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRtdXhfZGVidWdmc19pbml0KHZvaWQpCit7Cit9CisjZW5kaWYKKwogaW50IG14Y19hdWRtdXhfdjJfY29uZmlndXJlX3BvcnQodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBwdGNyLAogCQl1bnNpZ25lZCBpbnQgcGRjcikKIHsKQEAgLTY4LDYgKzIwMyw4IEBACiAJaWYgKGNwdV9pc19teDMxKCkgfHwgY3B1X2lzX214MzUoKSkKIAkJYXVkbXV4X2Jhc2UgPSBJT19BRERSRVNTKEFVRE1VWF9CQVNFX0FERFIpOwogCisJYXVkbXV4X2RlYnVnZnNfaW5pdCgpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaXRlLmgKaW5kZXggMDE4NGI2My4uMmIyZGEwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaXRlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaXRlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotZW51bSBteDMxbGlsbHlfYm9hcmRzIHsKK2VudW0gbXgzMWxpdGVfYm9hcmRzIHsKIAlNWDMxTElURV9OT0JPQVJECT0gMCwKIAlNWDMxTElURV9EQgkJPSAxLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaAppbmRleCAyODZjYjliLi40YmYxMDY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC0zMiw3ICszMiw3IEBACiBleHRlcm4gdm9pZCBteGNfdGltZXJfaW5pdChzdHJ1Y3QgY2xrICp0aW1lcl9jbGssIHZvaWQgX19pb21lbSAqLCBpbnQpOwogZXh0ZXJuIGludCBteDFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKIGV4dGVybiBpbnQgbXgyMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGxyZWYsIHVuc2lnbmVkIGxvbmcgZnJlZik7Ci1leHRlcm4gaW50IG14MjVfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKK2V4dGVybiBpbnQgbXgyNV9jbG9ja3NfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgbXgyN19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOwogZXh0ZXJuIGludCBteDMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CiBleHRlcm4gaW50IG14MzVfY2xvY2tzX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MzUuaAppbmRleCAwMGIwYWMxLi5jODhkNDA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDM1LmgKQEAgLTY3MSw3ICs2NzEsNyBAQAogI2RlZmluZSBNWDM1X1BBRF9MRDhfX1NETUFfU0RNQV9ERUJVR19QQ184CQkJSU9NVVhfUEFEKDB4NjM0LCAweDFkMCwgNiwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMzVfUEFEX0xEOV9fSVBVX0RJU1BCX0RBVF85CQkJCUlPTVVYX1BBRCgweDYzOCwgMHgxZDQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgzNV9QQURfTEQ5X19HUElPMl85CQkJCQlJT01VWF9QQUQoMHg2MzgsIDB4MWQ0LCA1LCAweDhlNCAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMzVfUEFEX0xEOV9fR1BJTzJfOQkJCQkJSU9NVVhfUEFEKDB4NjM4LCAweDFkNCwgNSwgMHg4ZTQsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDM1X1BBRF9MRDlfX1NETUFfU0RNQV9ERUJVR19QQ185CQkJSU9NVVhfUEFEKDB4NjM4LCAweDFkNCwgNiwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMzVfUEFEX0xEMTBfX0lQVV9ESVNQQl9EQVRfMTAJCQkJSU9NVVhfUEFEKDB4NjNjLCAweDFkOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggZWFkOWQ1OS4uMGNiMzQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0zNyw3ICszNywxMiBAQAogICogd2l0aGluIHNlbnNpYmxlIGxpbWl0cy4KICAqLwogI2RlZmluZSBNWENfQk9BUkRfSVJRX1NUQVJUCShNWENfSU5URVJOQUxfSVJRUyArIE1YQ19HUElPX0lSUVMpCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKKyNkZWZpbmUgTVhDX0JPQVJEX0lSUVMgIDgwCisjZWxzZQogI2RlZmluZSBNWENfQk9BUkRfSVJRUwkxNgorI2VuZGlmCiAKICNkZWZpbmUgTVhDX0lQVV9JUlFfU1RBUlQJKE1YQ19CT0FSRF9JUlFfU1RBUlQgKyBNWENfQk9BUkRfSVJRUykKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCBkOWY4Yzg0Li40YmVjYmRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMzkxLDcgKzM5MSw3IEBACiBzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyX29uZShzdHJ1Y3QgY2xrICpjKQogewogCWludCBlcnI7Ci0Jc3RydWN0IGRlbnRyeSAqZCwgKmNoaWxkOworCXN0cnVjdCBkZW50cnkgKmQsICpjaGlsZCwgKmNoaWxkX3RtcDsKIAlzdHJ1Y3QgY2xrICpwYSA9IGMtPnBhcmVudDsKIAljaGFyIHNbMjU1XTsKIAljaGFyICpwID0gczsKQEAgLTQyMyw3ICs0MjMsNyBAQAogCiBlcnJfb3V0OgogCWQgPSBjLT5kZW50OwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZkLT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZCwgY2hpbGRfdG1wLCAmZC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkKIAkJZGVidWdmc19yZW1vdmUoY2hpbGQpOwogCWRlYnVnZnNfcmVtb3ZlKGMtPmRlbnQpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCBkMTc2MjBjLi5kMjQyMmM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTc1MCw2ICs3NTAsNyBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogLyoKICAqIFRoaXMgb25seSBhcHBsaWVzIHRvIGNoaXBzIHRoYXQgY2FuJ3QgZG8gYm90aCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZQogICogZGV0ZWN0aW9uIGF0IG9uY2UuICBGb3IgYWxsIG90aGVyIGNoaXBzLCB0aGlzIGZ1bmN0aW9uIGlzIGEgbm9vcC4KQEAgLTc2MCwxMSArNzYxLDkgQEAKIAl1MzIgbCA9IDA7CiAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAJY2FzZSBNRVRIT0RfTVBVSU86CiAJCXJlZyArPSBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0U7CiAJCWJyZWFrOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAljYXNlIE1FVEhPRF9HUElPXzE1MTA6CiAJCXJlZyArPSBPTUFQMTUxMF9HUElPX0lOVF9DT05UUk9MOwpAQCAtNzg3LDYgKzc4Niw3IEBACiAKIAlfX3Jhd193cml0ZWwobCwgcmVnKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IF9zZXRfZ3Bpb190cmlnZ2VyaW5nKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLCBpbnQgdHJpZ2dlcikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXBfZGV2aWNlLmMKaW5kZXggMWU1NjQ4ZC4uMmVkNzIwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXBfZGV2aWNlLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXBfZGV2aWNlLmMKQEAgLTg5LDE2ICs4OSw2IEBACiAjZGVmaW5lIFVTRV9XQUtFVVBfTEFUCQkJMAogI2RlZmluZSBJR05PUkVfV0FLRVVQX0xBVAkJMQogCi0vKiBYWFggdGhpcyBzaG91bGQgYmUgbW92ZWQgaW50byBhIHNlcGFyYXRlIGZpbGUgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQotIyBkZWZpbmUgT01BUF8zMktTWU5DVF9CQVNFCQkweDQ4MDA0MDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKQotIyBkZWZpbmUgT01BUF8zMktTWU5DVF9CQVNFCQkweDQ5MDIwMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQotIyBkZWZpbmUgT01BUF8zMktTWU5DVF9CQVNFCQkweDQ4MzIwMDAwCi0jZWxzZQotIyBlcnJvciBVbmtub3duIE9NQVAgZGV2aWNlCi0jZW5kaWYKIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggNWE3OWZjNi4uMzFjMmY0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogVGh1IEphbiAyOCAyMjoxNTo1NCAyMDEwCisjIExhc3QgdXBkYXRlOiBTYXQgRmViIDIwIDE0OjE2OjE1IDIwMTAKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMjI1Nyw3ICsyMjU3LDcgQEAKIG9yYXRpc21hZGkJCU1BQ0hfT1JBVElTTUFESQkJT1JBVElTTUFESQkJMjI2OQogb3JhdGlzb3QxNgkJTUFDSF9PUkFUSVNPVDE2CQlPUkFUSVNPVDE2CQkyMjcwCiBvcmF0aXNkZXNrCQlNQUNIX09SQVRJU0RFU0sJCU9SQVRJU0RFU0sJCTIyNzEKLXYyX2NhOQkJCU1BQ0hfVjJQX0NBOQkJVjJQX0NBOQkJCTIyNzIKK3ZleHByZXNzCQlNQUNIX1ZFWFBSRVNTCQlWRVhQUkVTUwkJMjI3Mgogc2ludGV4bwkJCU1BQ0hfU0lOVEVYTwkJU0lOVEVYTwkJCTIyNzMKIGNtMzM4OQkJCU1BQ0hfQ00zMzg5CQlDTTMzODkJCQkyMjc0CiBvbWFwM19jaW8JCU1BQ0hfT01BUDNfQ0lPCQlPTUFQM19DSU8JCTIyNzUKQEAgLTI2MzYsMyArMjYzNiw0NSBAQAogZG0zNjVfbGVvcGFyZAkJTUFDSF9ETTM2NV9MRU9QQVJECURNMzY1X0xFT1BBUkQJCTI2NDkKIG1pdHlvbWFwbDEzOAkJTUFDSF9NSVRZT01BUEwxMzgJTUlUWU9NQVBMMTM4CQkyNjUwCiBzY2F0MTEwCQkJTUFDSF9TQ0FUMTEwCQlTQ0FUMTEwCQkJMjY1MQorYWNlcl9hMQkJCU1BQ0hfQUNFUl9BMQkJQUNFUl9BMQkJCTI2NTIKK2NtY29udHJvbAkJTUFDSF9DTUNPTlRST0wJCUNNQ09OVFJPTAkJMjY1MworcGVsY29fbGFtYXIJCU1BQ0hfUEVMQ09fTEFNQVIJUEVMQ09fTEFNQVIJCTI2NTQKK3JmcDQzCQkJTUFDSF9SRlA0MwkJUkZQNDMJCQkyNjU1Citzazg2cjAzMDEJCU1BQ0hfU0s4NlIwMzAxCQlTSzg2UjAzMDEJCTI2NTYKK2N0cHhhCQkJTUFDSF9DVFBYQQkJQ1RQWEEJCQkyNjU3CitlcGJfYXJtOV9hCQlNQUNIX0VQQl9BUk05X0EJCUVQQl9BUk05X0EJCTI2NTgKK2d1cnVwbHVnCQlNQUNIX0dVUlVQTFVHCQlHVVJVUExVRwkJMjY1OQorc3BlYXIzMTAJCU1BQ0hfU1BFQVIzMTAJCVNQRUFSMzEwCQkyNjYwCitzcGVhcjMyMAkJTUFDSF9TUEVBUjMyMAkJU1BFQVIzMjAJCTI2NjEKK3JvYm90eAkJCU1BQ0hfUk9CT1RYCQlST0JPVFgJCQkyNjYyCitsc3hobAkJCU1BQ0hfTFNYSEwJCUxTWEhMCQkJMjY2Mworc21hcnRsaXRlCQlNQUNIX1NNQVJUTElURQkJU01BUlRMSVRFCQkyNjY0Citjd3MyCQkJTUFDSF9DV1MyCQlDV1MyCQkJMjY2NQorbTYxOQkJCU1BQ0hfTTYxOQkJTTYxOQkJCTI2NjYKK3NtYXJ0dmlldwkJTUFDSF9TTUFSVFZJRVcJCVNNQVJUVklFVwkJMjY2NworbHNhX3NhbHNhCQlNQUNIX0xTQV9TQUxTQQkJTFNBX1NBTFNBCQkyNjY4CitraXpib3gJCQlNQUNIX0tJWkJPWAkJS0laQk9YCQkJMjY2OQoraHRjY2hhcm1lcgkJTUFDSF9IVENDSEFSTUVSCQlIVENDSEFSTUVSCQkyNjcwCitndWZfbmVzb19sdAkJTUFDSF9HVUZfTkVTT19MVAlHVUZfTkVTT19MVAkJMjY3MQorcG05ZzQ1CQkJTUFDSF9QTTlHNDUJCVBNOUc0NQkJCTI2NzIKK2h0Y3BhbnRoZXIJCU1BQ0hfSFRDUEFOVEhFUgkJSFRDUEFOVEhFUgkJMjY3MworaHRjcGFudGhlcl9jZG1hCQlNQUNIX0hUQ1BBTlRIRVJfQ0RNQQlIVENQQU5USEVSX0NETUEJCTI2NzQKK3JlYjAxCQkJTUFDSF9SRUIwMQkJUkVCMDEJCQkyNjc1CithcXVpbGEJCQlNQUNIX0FRVUlMQQkJQVFVSUxBCQkJMjY3Ngorc3Bhcmtfc2xzX2h3MgkJTUFDSF9TUEFSS19TTFNfSFcyCVNQQVJLX1NMU19IVzIJCTI2NzcKK3NoZWV2YV9lc2F0YQkJTUFDSF9FU0FUQV9TSEVFVkFQTFVHCUVTQVRBX1NIRUVWQVBMVUcJMjY3OAorc3VyZjd4MzAJCU1BQ0hfU1VSRjdYMzAJCVNVUkY3WDMwCQkyNjc5CittaWNybzI0NDAJCU1BQ0hfTUlDUk8yNDQwCQlNSUNSTzI0NDAJCTI2ODAKK2FtMjQ0MAkJCU1BQ0hfQU0yNDQwCQlBTTI0NDAJCQkyNjgxCit0cTI0NDAJCQlNQUNIX1RRMjQ0MAkJVFEyNDQwCQkJMjY4MgorbHBjMjQ3OG9lbQkJTUFDSF9MUEMyNDc4T0VNCQlMUEMyNDc4T0VNCQkyNjgzCithazg4MHgJCQlNQUNIX0FLODgwWAkJQUs4ODBYCQkJMjY4NAorY29icmEzNTMwCQlNQUNIX0NPQlJBMzUzMAkJQ09CUkEzNTMwCQkyNjg1CitwbXBwYgkJCU1BQ0hfUE1QUEIJCVBNUFBCCQkJMjY4NgordTY3MTUJCQlNQUNIX1U2NzE1CQlVNjcxNQkJCTI2ODcKK2F4YXIxNTAwX3NlbmRlcgkJTUFDSF9BWEFSMTUwMF9TRU5ERVIJQVhBUjE1MDBfU0VOREVSCQkyNjg4CitnMzBfZHZiCQkJTUFDSF9HMzBfRFZCCQlHMzBfRFZCCQkJMjY4OQordmMwODh4CQkJTUFDSF9WQzA4OFgJCVZDMDg4WAkJCTI2OTAKK21pb2E3MDIJCQlNQUNIX01JT0E3MDIJCU1JT0E3MDIJCQkyNjkxCitocG1pbgkJCU1BQ0hfSFBNSU4JCUhQTUlOCQkJMjY5MgorYWs4ODB4YWsJCU1BQ0hfQUs4ODBYQUsJCUFLODgwWEFLCQkyNjkzCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggZjYwYTU0MC4uYTYzYzRiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMTk3LDEwICsxOTcsMTMgQEAKIAl9CiAKIAkvKgotCSAqIFVwZGF0ZSB0aGUgRlBTQ1Igd2l0aCB0aGUgYWRkaXRpb25hbCBleGNlcHRpb24gZmxhZ3MuCisJICogSWYgYW55IG9mIHRoZSBzdGF0dXMgZmxhZ3MgYXJlIHNldCwgdXBkYXRlIHRoZSBGUFNDUi4KIAkgKiBDb21wYXJpc29uIGluc3RydWN0aW9ucyBhbHdheXMgcmV0dXJuIGF0IGxlYXN0IG9uZSBvZgogCSAqIHRoZXNlIGZsYWdzIHNldC4KIAkgKi8KKwlpZiAoZXhjZXB0aW9ucyAmIChGUFNDUl9OfEZQU0NSX1p8RlBTQ1JfQ3xGUFNDUl9WKSkKKwkJZnBzY3IgJj0gfihGUFNDUl9OfEZQU0NSX1p8RlBTQ1JfQ3xGUFNDUl9WKTsKKwogCWZwc2NyIHw9IGV4Y2VwdGlvbnM7CiAKIAlmbXhyKEZQU0NSLCBmcHNjcik7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCmluZGV4IDFhYTFlYTUuLmIxM2QxODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCkBAIC0xMzI1LDcgKzEzMjUsNyBAQAogYXQzMl9hZGRfZGV2aWNlX21jaSh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKLQlzdHJ1Y3QgbWNpX2RtYV9zbGF2ZQkJKnNsYXZlOworCXN0cnVjdCBtY2lfZG1hX2RhdGEJICAgICAgICAqc2xhdmU7CiAJdTMyCQkJCXBpb2FfbWFzazsKIAl1MzIJCQkJcGlvYl9tYXNrOwogCkBAIC0xMzQ0LDcgKzEzNDQsOSBAQAogCQkJCUFSUkFZX1NJWkUoYXRtZWxfbWNpMF9yZXNvdXJjZSkpKQogCQlnb3RvIGZhaWw7CiAKLQlzbGF2ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtY2lfZG1hX3NsYXZlKSwgR0ZQX0tFUk5FTCk7CisJc2xhdmUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWNpX2RtYV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbGF2ZSkKKwkJZ290byBmYWlsOwogCiAJc2xhdmUtPnNkYXRhLmRtYV9kZXYgPSAmZHdfZG1hYzBfZGV2aWNlLmRldjsKIAlzbGF2ZS0+c2RhdGEucmVnX3dpZHRoID0gRFdfRE1BX1NMQVZFX1dJRFRIXzMyQklUOwpAQCAtMTM1Nyw3ICsxMzU5LDcgQEAKIAogCWlmIChwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgZGF0YSwKIAkJCQlzaXplb2Yoc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhKSkpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX2ZyZWU7CiAKIAkvKiBDTEsgbGluZSBpcyBjb21tb24gdG8gYm90aCBzbG90cyAqLwogCXBpb2FfbWFzayA9IDEgPDwgMTA7CkBAIC0xMzgxLDcgKzEzODMsNyBAQAogCQkvKiBTbG90IGlzIHVudXNlZCAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbF9mcmVlOwogCX0KIAogCXNlbGVjdF9wZXJpcGhlcmFsKFBJT0EsIHBpb2FfbWFzaywgUEVSSVBIX0EsIDApOwpAQCAtMTQwOCw3ICsxNDEwLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKCFkYXRhLT5zbG90WzBdLmJ1c193aWR0aCkKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZmFpbF9mcmVlOwogCiAJCWRhdGEtPnNsb3RbMV0uYnVzX3dpZHRoID0gMDsKIAkJYnJlYWs7CkBAIC0xNDE5LDkgKzE0MjEsMTAgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwogCXJldHVybiBwZGV2OwogCitmYWlsX2ZyZWU6CisJa2ZyZWUoc2xhdmUpOwogZmFpbDoKIAlkYXRhLT5kbWFfc2xhdmUgPSBOVUxMOwotCWtmcmVlKHNsYXZlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjaS9iaW9zLmMKaW5kZXggNzdlZTMxOS4uZDRiOWMzNiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jCkBAIC00MSwxOCArNDEsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7Ci0JaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAotCQlpZiAoc3RhcnQgJiAweDMwMCkgewotCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KLQl9CisJaWYgKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgJiYgKHN0YXJ0ICYgMHgzMDApKQorCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKKworCXJldHVybiBzdGFydAogfQogCiBpbnQgcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKaW5kZXggNTY2YmRlYi4uMWVkMTVkNyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCkBAIC0zMiwxOCArMzIsMTYgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewotCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKLQkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9Ci0JfQorCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pICYmIChzdGFydCAmIDB4MzAwKSkKKwkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7CisKKwlyZXR1cm4gc3RhcnQKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL21tL21lbW9yeS5jIGIvYXJjaC9oODMwMC9tbS9tZW1vcnkuYwppbmRleCBjY2Q2YWRlLi40MGQ4YWE4IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL21tL21lbW9yeS5jCisrKyBiL2FyY2gvaDgzMDAvbW0vbWVtb3J5LmMKQEAgLTQ0LDggKzQ0LDggQEAKIHsKIH0KIAotLyogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4gVGhlCi0gKiBjb2RlIGlzIGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIG1hcF9jaHVuaygpLgorLyoKKyAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCiAgKi8KIAogdW5zaWduZWQgbG9uZyBrZXJuZWxfbWFwKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDdhZTU4ODkuLjkzOTk3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtOTQsOSArOTQsMTEgQEAKICNkZWZpbmUgYWNwaV9ub2lycSAwCS8qIEFDUEkgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLwogI2RlZmluZSBhY3BpX3BjaV9kaXNhYmxlZCAwIC8qIEFDUEkgUENJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9zdHJpY3QgMQkvKiBubyBBQ1BJIHNwZWMgd29ya2Fyb3VuZHMgb24gSUE2NCAqLworI2RlZmluZSBhY3BpX2h0IDAJLyogbm8gSFQtb25seSBtb2RlIG9uIElBNjQgKi8KICNlbmRpZgogI2RlZmluZSBhY3BpX3Byb2Nlc3Nvcl9jc3RhdGVfY2hlY2soeCkgKHgpIC8qIG5vIGlkbGUgbGltaXRzIG9uIElBNjQgOikgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2FjcGkodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2FjcGlfY3JzX3F1aXJrcyh2b2lkKSB7IH0KIAogY29uc3QgY2hhciAqYWNwaV9nZXRfc3lzbmFtZSAodm9pZCk7CiBpbnQgYWNwaV9yZXF1ZXN0X3ZlY3RvciAodTMyIGludF90eXBlKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBlMTQxMDhiLi40YzQxNjU2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yMDEsNyArMjAxLDkgQEAKICAgIHJlbGV2YW50IHVudGlsIHdlIGhhdmUgcmVhbCBoYXJkd2FyZSB0byBwbGF5IHdpdGguLi4gKi8KICNkZWZpbmUgRUxGX1BMQVRGT1JNCU5VTEwKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkJXAorCXNldF9wZXJzb25hbGl0eSgoY3VycmVudC0+cGVyc29uYWxpdHkgJiB+UEVSX01BU0spIHwgUEVSX0xJTlVYKQorCiAjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgZXhlY3V0YWJsZV9zdGFjaykJCQkJCVwKIAkoKGV4ZWN1dGFibGVfc3RhY2shPUVYU1RBQ0tfRElTQUJMRV9YKSAmJiAoKGV4KS5lX2ZsYWdzICYgRUZfSUFfNjRfTElOVVhfRVhFQ1VUQUJMRV9TVEFDSykgIT0gMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwppbmRleCA5YWRhYzQ0Li43MDI2YjI5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwpAQCAtODcwLDcgKzg3MCw3IEBACiAJCXJldHVybiAxOwogCiBzc19wcm9iZToKLSNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgZGVmaW5lZChDT05GSUdfRlJFRVpFUikKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKIAlpZiAocC0+YWluc24uaW5zdF9mbGFnID09IElOU1RfRkxBR19CT09TVEFCTEUgJiYgIXAtPnBvc3RfaGFuZGxlcikgewogCQkvKiBCb29zdCB1cCAtLSB3ZSBjYW4gZXhlY3V0ZSBjb3BpZWQgaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5ICovCiAJCWlhNjRfcHNyKHJlZ3MpLT5yaSA9IHAtPmFpbnNuLnNsb3Q7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCBkZjYzOWRiNy4uNjRhZmY1MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC0zMjAsOSArMzIwLDkgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdAogcGNpYmlvc19zZXR1cF9yb290X3dpbmRvd3Moc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9jb250cm9sbGVyICpjdHJsKQogewotCWludCBpLCBqOworCWludCBpOwogCi0JaiA9IDA7CisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGJ1cyk7CiAJZm9yIChpID0gMDsgaSA8IGN0cmwtPndpbmRvd3M7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZjdHJsLT53aW5kb3dbaV0ucmVzb3VyY2U7CiAJCS8qIEhQJ3MgZmlybXdhcmUgaGFzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIFdpbmRvd3MgYnVnLgpAQCAtMzMwLDEzICszMzAsNyBAQAogCQlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJICAgIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQgPCAxNikpCiAJCQljb250aW51ZTsKLQkJaWYgKGogPj0gUENJX0JVU19OVU1fUkVTT1VSQ0VTKSB7Ci0JCQlkZXZfd2FybigmYnVzLT5kZXYsCi0JCQkJICJpZ25vcmluZyBob3N0IGJyaWRnZSB3aW5kb3cgJXBSIChubyBzcGFjZSlcbiIsCi0JCQkJIHJlcyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlidXMtPnJlc291cmNlW2orK10gPSByZXM7CisJCXBjaV9idXNfYWRkX3Jlc291cmNlKGJ1cywgcmVzLCAwKTsKIAl9CiB9CiAKQEAgLTQ1MiwxMyArNDQ2LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpc192YWxpZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KQogewogCXVuc2lnbmVkIGludCBpLCB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07Ci0Jc3RydWN0IHJlc291cmNlICpkZXZyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdLCAqYnVzcjsKIAogCWlmICghZGV2LT5idXMpCiAJCXJldHVybiAwOwotCWZvciAoaT0wOyBpPFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqYnVzciA9IGRldi0+YnVzLT5yZXNvdXJjZVtpXTsKIAorCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoZGV2LT5idXMsIGJ1c3IsIGkpIHsKIAkJaWYgKCFidXNyIHx8ICgoYnVzci0+ZmxhZ3MgXiBkZXZyLT5mbGFncykgJiB0eXBlX21hc2spKQogCQkJY29udGludWU7CiAJCWlmICgoZGV2ci0+c3RhcnQpICYmIChkZXZyLT5zdGFydCA+PSBidXNyLT5zdGFydCkgJiYKQEAgLTU0NywxMCArNTQwLDExIEBACiAJCWFjcGlfcGNpX2lycV9kaXNhYmxlKGRldik7CiB9CiAKLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2UgKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlICh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogeworCXJldHVybiByZXMtPnN0YXJ0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCmluZGV4IGVjZTFiZjkuLmU0NTZmMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKQEAgLTcxLDcgKzcxLDcgQEAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzbl9odWJfaW5mb19zLCBfX3NuX2h1Yl9pbmZvKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChfX3NuX2h1Yl9pbmZvKTsKIAotREVGSU5FX1BFUl9DUFUoc2hvcnQgW01BWF9DT01QQUNUX05PREVTXSwgX19zbl9jbm9kZWlkX3RvX25hc2lkKTsKK0RFRklORV9QRVJfQ1BVKHNob3J0LCBfX3NuX2Nub2RlaWRfdG9fbmFzaWRbTUFYX0NPTVBBQ1RfTk9ERVNdKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChfX3NuX2Nub2RlaWRfdG9fbmFzaWQpOwogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgbm9kZXBkYV9zICosIF9fc25fbm9kZXBkYSk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IGVjZGMxOWEuLmI1ZGEyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC01MzYsMTAgKzUzNiw2IEBACiAJICBTYXkgWSB0byBlbmFibGUgZG9pbmcgSVAgb3ZlciB0aGUgcGFyYWxsZWwgcG9ydCBvbiB5b3VyIEdWUAogCSAgSU8tRXh0ZW5kZXIgY2FyZCwgTiBvdGhlcndpc2UuCiAKLWNvbmZpZyBNQUNfU0NDCi0JdHJpc3RhdGUgIk1hY2ludG9zaCBzZXJpYWwgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1BQwotCiBjb25maWcgTUFDX0hJRAogCWJvb2wKIAlkZXBlbmRzIG9uIElOUFVUX0FEQkhJRApAQCAtNTk1LDcgKzU5MSw3IEBACiAKIGNvbmZpZyBTRVJJQUxfQ09OU09MRQogCWJvb2wgIlN1cHBvcnQgZm9yIHNlcmlhbCBwb3J0IGNvbnNvbGUiCi0JZGVwZW5kcyBvbiAoQU1JR0EgfHwgQVRBUkkgfHwgTUFDIHx8IFNVTjMgfHwgU1VOM1ggfHwgVk1FIHx8IEFQT0xMTykgJiYgKEFUQVJJX01GUFNFUj15IHx8IEFUQVJJX01JREk9eSB8fCBNQUNfU0NDPXkgfHwgQU1JR0FfQlVJTFRJTl9TRVJJQUw9eSB8fCBHVlBJT0VYVD15IHx8IE1VTFRJRkFDRV9JSUlfVFRZPXkgfHwgU0VSSUFMPXkgfHwgTVZNRTE0N19TQ0MgfHwgU0VSSUFMMTY3IHx8IE1WTUUxNjJfU0NDIHx8IEJWTUU2MDAwX1NDQyB8fCBETl9TRVJJQUwpCisJZGVwZW5kcyBvbiAoQU1JR0EgfHwgQVRBUkkgfHwgU1VOMyB8fCBTVU4zWCB8fCBWTUUgfHwgQVBPTExPKSAmJiAoQVRBUklfTUZQU0VSPXkgfHwgQVRBUklfTUlEST15IHx8IEFNSUdBX0JVSUxUSU5fU0VSSUFMPXkgfHwgR1ZQSU9FWFQ9eSB8fCBNVUxUSUZBQ0VfSUlJX1RUWT15IHx8IFNFUklBTD15IHx8IE1WTUUxNDdfU0NDIHx8IFNFUklBTDE2NyB8fCBNVk1FMTYyX1NDQyB8fCBCVk1FNjAwMF9TQ0MgfHwgRE5fU0VSSUFMKQogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBzYXkgWSBoZXJlLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHVzZSBhIHNlcmlhbCBwb3J0IGFzIHRoZQogCSAgc3lzdGVtIGNvbnNvbGUgKHRoZSBzeXN0ZW0gY29uc29sZSBpcyB0aGUgZGV2aWNlIHdoaWNoIHJlY2VpdmVzIGFsbApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IDZjNzQ3NTEuLmQyY2MzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2NoZWRfcmVzID0gewogCQkubmFtZSA9ICJ0aW1lciIsIC5zdGFydCA9IDB4MDBiZmQ0MDAsIC5lbmQgPSAweDAwYmZkNWZmLAogCX07Ci0JamlmZnlfdGlja3MgPSAoYW1pZ2FfZWNsb2NrK0haLzIpL0haOworCWppZmZ5X3RpY2tzID0gRElWX1JPVU5EX0NMT1NFU1QoYW1pZ2FfZWNsb2NrLCBIWik7CiAKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSgmbWJfcmVzb3VyY2VzLl9jaWFiLCAmc2NoZWRfcmVzKSkKIAkJcHJpbnRrKCJDYW5ub3QgYWxsb2NhdGUgY2lhYi50YXtsbyxoaX1cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKaW5kZXggOTk5MWI2NC4uYzVmMzIzMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCkBAIC03MDEsNiArNzAxLDExIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPRz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19UVFlTPXkKK0NPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTgzNCw5ICs4MzksNyBAQAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX01BQ19TQ0M9eQogQ09ORklHX01BQ19ISUQ9eQotQ09ORklHX1NFUklBTF9DT05TT0xFPXkKIAogIwogIyBGaWxlIHN5c3RlbXMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZwppbmRleCA2OWM0M2UyLi5hOGJmYTNmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnCkBAIC04MjIsNiArODIyLDExIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPRz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19UVFlTPXkKK0NPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTk4Miw3ICs5ODcsNiBAQAogQ09ORklHX0FUQVJJX0RTUDU2Sz1tCiBDT05GSUdfQU1JR0FfQlVJTFRJTl9TRVJJQUw9eQogQ09ORklHX01VTFRJRkFDRV9JSUlfVFRZPW0KLUNPTkZJR19NQUNfU0NDPXkKIENPTkZJR19NQUNfSElEPXkKIENPTkZJR19NVk1FMTQ3X1NDQz15CiBDT05GSUdfU0VSSUFMMTY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2h3LmgKaW5kZXggMmI0ZGUwYy4uYTIyMDk1MSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2h3LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2h3LmgKQEAgLTIxLDI5ICsyMSw0IEBACiAjZGVmaW5lIFZJREVPTUVNU0laRQkoNDA5NioxMDI0KQogI2RlZmluZSBWSURFT01FTU1BU0sJKC00MDk2KjEwMjQpCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaWYgMAotLyoKLSoqIFNDQyBaODUzMAotKi8KLQotI2RlZmluZSBNQUNfU0NDX0JBUyAoMHg1MEYwNDAwMCkKLXN0cnVjdCBNQUNfU0NDCi0gewotICB1X2NoYXIgY2hhX2FfY3RybDsKLSAgdV9jaGFyIGNoYXJfZHVtbXkxOwotICB1X2NoYXIgY2hhX2FfZGF0YTsKLSAgdV9jaGFyIGNoYXJfZHVtbXkyOwotICB1X2NoYXIgY2hhX2JfY3RybDsKLSAgdV9jaGFyIGNoYXJfZHVtbXkzOwotICB1X2NoYXIgY2hhX2JfZGF0YTsKLSB9OwotIyBkZWZpbmUgbWFjX3NjYyAoKCoodm9sYXRpbGUgc3RydWN0IFNDQyopTUFDX1NDQ19CQVMpKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2VuZGlmIC8qIGxpbnV4L21hY2h3LmggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRzLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oCmluZGV4IDY3OWM0OGEuLmViZTFiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRzLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludHMuaApAQCAtMzcsNyArMzcsNiBAQAogCiAjZGVmaW5lIFZJQTFfU09VUkNFX0JBU0UJOAogI2RlZmluZSBWSUEyX1NPVVJDRV9CQVNFCTE2Ci0jZGVmaW5lIE1BQ19TQ0NfU09VUkNFX0JBU0UJMjQKICNkZWZpbmUgUFNDM19TT1VSQ0VfQkFTRQkyNAogI2RlZmluZSBQU0M0X1NPVVJDRV9CQVNFCTMyCiAjZGVmaW5lIFBTQzVfU09VUkNFX0JBU0UJNDAKQEAgLTk2LDI2ICs5NSwxMiBAQAogI2RlZmluZSBJUlFfUFNDM18yCSAgKDI2KQogI2RlZmluZSBJUlFfUFNDM18zCSAgKDI3KQogCi0vKiBMZXZlbCA0IChTQ0MpIGludGVycnVwdHMgKi8KLSNkZWZpbmUgSVJRX1NDQwkJICAgICAoMzIpCi0jZGVmaW5lIElSUV9TQ0NBCSAgICAgKDMzKQotI2RlZmluZSBJUlFfU0NDQgkgICAgICgzNCkKLSNpZiAwIC8qIEZJWE1FOiBhcmUgdGhlcmUgbXVsdGlwbGUgaW50ZXJydXB0IGNvbmRpdGlvbnMgb24gdGhlIFNDQyA/PyAqLwotLyogU0NDIGludGVycnVwdHMgKi8KLSNkZWZpbmUgSVJRX1NDQ0JfVFgJICAgICAoMzIpCi0jZGVmaW5lIElSUV9TQ0NCX1NUQVQJICAgICAoMzMpCi0jZGVmaW5lIElSUV9TQ0NCX1JYCSAgICAgKDM0KQotI2RlZmluZSBJUlFfU0NDQl9TUENPTkQJICAgICAoMzUpCi0jZGVmaW5lIElSUV9TQ0NBX1RYCSAgICAgKDM2KQotI2RlZmluZSBJUlFfU0NDQV9TVEFUCSAgICAgKDM3KQotI2RlZmluZSBJUlFfU0NDQV9SWAkgICAgICgzOCkKLSNkZWZpbmUgSVJRX1NDQ0FfU1BDT05ECSAgICAgKDM5KQotI2VuZGlmCi0KIC8qIExldmVsIDQgKFBTQywgQVYgTWFjcyBvbmx5KSBpbnRlcnJ1cHRzICovCiAjZGVmaW5lIElSUV9QU0M0XzAJICAoMzIpCiAjZGVmaW5lIElSUV9QU0M0XzEJICAoMzMpCisjZGVmaW5lIElSUV9NQUNfU0NDX0EJICBJUlFfUFNDNF8xCiAjZGVmaW5lIElSUV9QU0M0XzIJICAoMzQpCisjZGVmaW5lIElSUV9NQUNfU0NDX0IJICBJUlFfUFNDNF8yCiAjZGVmaW5lIElSUV9QU0M0XzMJICAoMzUpCiAjZGVmaW5lIElSUV9NQUNfTUFDRV9ETUEgIElSUV9QU0M0XzMKIApAQCAtMTQ2LDYgKzEzMSw5IEBACiAjZGVmaW5lIElSUV9CQUJPT05fMgkgICg2NikKICNkZWZpbmUgSVJRX0JBQk9PTl8zCSAgKDY3KQogCisvKiBPbiBub24tUFNDIG1hY2hpbmVzLCB0aGUgc2VyaWFsIHBvcnRzIHNoYXJlIGFuIElSUSAqLworI2RlZmluZSBJUlFfTUFDX1NDQwkgIElSUV9BVVRPXzQKKwogI2RlZmluZSBTTE9UMklSUSh4KQkgICh4ICsgNDcpCiAjZGVmaW5lIElSUTJTTE9UKHgpCSAgKHggLSA0NykKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGVlNDAxMWMuLjIxNjA1YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTcxLDYgKzcxLDggQEAKICNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAogI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1CiAKKyNkZWZpbmUgUFRSQUNFX0dFVF9USFJFQURfQVJFQSAgICAyNQorCiAjZGVmaW5lIFBUUkFDRV9TSU5HTEVCTE9DSwkzMwkvKiByZXN1bWUgZXhlY3V0aW9uIHVudGlsIG5leHQgYnJhbmNoICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAppbmRleCA1MjNkYjJhLi4xMzIwZWFhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKQEAgLTE1LDkgKzE1LDE1IEBACiAJdW5zaWduZWQgbG9uZyAgc2NfcGM7CiAJdW5zaWduZWQgc2hvcnQgc2NfZm9ybWF0dmVjOwogI2lmbmRlZiBfX3VDbGludXhfXworIyBpZmRlZiBfX21jb2xkZmlyZV9fCisJdW5zaWduZWQgbG9uZyAgc2NfZnByZWdzWzJdWzJdOwkvKiByb29tIGZvciB0d28gZnAgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyAgc2NfZnBjbnRsWzNdOworCXVuc2lnbmVkIGNoYXIgIHNjX2Zwc3RhdGVbMTYrNio4XTsKKyMgZWxzZQogCXVuc2lnbmVkIGxvbmcgIHNjX2ZwcmVnc1syKjNdOyAgLyogcm9vbSBmb3IgdHdvIGZwIHJlZ2lzdGVycyAqLwogCXVuc2lnbmVkIGxvbmcgIHNjX2ZwY250bFszXTsKIAl1bnNpZ25lZCBjaGFyICBzY19mcHN0YXRlWzIxNl07CisjIGVuZGlmCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oCmluZGV4IGNhN2RkZTguLjg1MWQzZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaApAQCAtMSw5NyArMSw2IEBACiAjaWZuZGVmIF9NNjhLX1NJR0lORk9fSAogI2RlZmluZSBfTTY4S19TSUdJTkZPX0gKIAotI2lmbmRlZiBfX3VDbGludXhfXwotI2RlZmluZSBIQVZFX0FSQ0hfU0lHSU5GT19UCi0jZGVmaW5lIEhBVkVfQVJDSF9DT1BZX1NJR0lORk8KLSNlbmRpZgotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgogCi0jaWZuZGVmIF9fdUNsaW51eF9fCi0KLXR5cGVkZWYgc3RydWN0IHNpZ2luZm8gewotCWludCBzaV9zaWdubzsKLQlpbnQgc2lfZXJybm87Ci0JaW50IHNpX2NvZGU7Ci0KLQl1bmlvbiB7Ci0JCWludCBfcGFkW1NJX1BBRF9TSVpFXTsKLQotCQkvKiBraWxsKCkgKi8KLQkJc3RydWN0IHsKLQkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwotCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfa2lsbDsKLQotCQkvKiBQT1NJWC4xYiB0aW1lcnMgKi8KLQkJc3RydWN0IHsKLQkJCXRpbWVyX3QgX3RpZDsJCS8qIHRpbWVyIGlkICovCi0JCQlpbnQgX292ZXJydW47CQkvKiBvdmVycnVuIGNvdW50ICovCi0JCQljaGFyIF9wYWRbc2l6ZW9mKCBfX0FSQ0hfU0lfVUlEX1QpIC0gc2l6ZW9mKGludCldOwotCQkJc2lndmFsX3QgX3NpZ3ZhbDsJLyogc2FtZSBhcyBiZWxvdyAqLwotCQkJaW50IF9zeXNfcHJpdmF0ZTsgICAgICAgLyogbm90IHRvIGJlIHBhc3NlZCB0byB1c2VyICovCi0JCX0gX3RpbWVyOwotCi0JCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KLQkJc3RydWN0IHsKLQkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwotCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLQkJCXNpZ3ZhbF90IF9zaWd2YWw7Ci0JCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCi0JCX0gX3J0OwotCi0JCS8qIFNJR0NITEQgKi8KLQkJc3RydWN0IHsKLQkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHdoaWNoIGNoaWxkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNsb2NrX3QgX3V0aW1lOwotCQkJY2xvY2tfdCBfc3RpbWU7Ci0JCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCi0JCX0gX3NpZ2NobGQ7Ci0KLQkJLyogU0lHSUxMLCBTSUdGUEUsIFNJR1NFR1YsIFNJR0JVUyAqLwotCQlzdHJ1Y3QgewotCQkJdm9pZCAqX2FkZHI7IC8qIGZhdWx0aW5nIGluc24vbWVtb3J5IHJlZi4gKi8KLQkJfSBfc2lnZmF1bHQ7Ci0KLQkJLyogU0lHUE9MTCAqLwotCQlzdHJ1Y3QgewotCQkJaW50IF9iYW5kOwkvKiBQT0xMX0lOLCBQT0xMX09VVCwgUE9MTF9NU0cgKi8KLQkJCWludCBfZmQ7Ci0JCX0gX3NpZ3BvbGw7Ci0JfSBfc2lmaWVsZHM7Ci19IHNpZ2luZm9fdDsKLQotI2RlZmluZSBVSUQxNl9TSUdJTkZPX0NPTVBBVF9ORUVERUQKLQotLyoKLSAqIEhvdyB0aGVzZSBmaWVsZHMgYXJlIHRvIGJlIGFjY2Vzc2VkLgotICovCi0jdW5kZWYgc2lfdWlkCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBzaV91aWQJCV9zaWZpZWxkcy5fa2lsbC5fdWlkMzIKLSNkZWZpbmUgc2lfdWlkMTYJX3NpZmllbGRzLl9raWxsLl91aWQKLSNlbHNlCi0jZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQKLSNlbmRpZgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3NpZ2luZm8oc3RydWN0IHNpZ2luZm8gKnRvLCBzdHJ1Y3Qgc2lnaW5mbyAqZnJvbSkKLXsKLQlpZiAoZnJvbS0+c2lfY29kZSA8IDApCi0JCW1lbWNweSh0bywgZnJvbSwgc2l6ZW9mKCp0bykpOwotCWVsc2UKLQkJLyogX3NpZ2NobGQgaXMgY3VycmVudGx5IHRoZSBsYXJnZXN0IGtub3cgdW5pb24gbWVtYmVyICovCi0JCW1lbWNweSh0bywgZnJvbSwgMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKTsKLX0KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiAhX191Q2xpbnV4X18gKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA1Yjc1NGFhLi5iN2IzN2E0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTE0LDcgKzE0LDcgQEAKIH0KIAogI2RlZmluZSBfX2FyY2hfc3dhYjMyIF9fYXJjaF9zd2FiMzIKLSNlbGlmICFkZWZpbmVkKF9fdUNsaW51eF9fKQorI2VsaWYgIWRlZmluZWQoX19tY29sZGZpcmVfXykKIAogc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fYXJjaF9zd2FiMzIoX191MzIgdmFsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbW0uaAppbmRleCAxNjdlNTE4Li42NzI2NmM2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbW0uaApAQCAtMTYsNiArMTYsNyBAQAogCXN0cnVjdCBleGVjX2RvbWFpbgkqZXhlY19kb21haW47CS8qIGV4ZWN1dGlvbiBkb21haW4gKi8KIAlpbnQJCQlwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLCA8MCA9PiBCVUcgKi8KIAlfX3UzMiBjcHU7IC8qIHNob3VsZCBhbHdheXMgYmUgMCBvbiBtNjhrICovCisJdW5zaWduZWQgbG9uZwkJdHBfdmFsdWU7CS8qIHRocmVhZCBwb2ludGVyICovCiAJc3RydWN0IHJlc3RhcnRfYmxvY2sgICAgcmVzdGFydF9ibG9jazsKIH07CiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19uby5oCmluZGV4IGE2NTEyYmYuLjg4NDc3NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19uby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19uby5oCkBAIC0zNyw2ICszNyw3IEBACiAJdW5zaWduZWQgbG9uZwkgICBmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLwogCWludAkJICAgY3B1OwkJCS8qIGNwdSB3ZSdyZSBvbiAqLwogCWludAkJICAgcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCisJdW5zaWduZWQgbG9uZwkgICB0cF92YWx1ZTsJCS8qIHRocmVhZCBwb2ludGVyICovCiAJc3RydWN0IHJlc3RhcnRfYmxvY2sgcmVzdGFydF9ibG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKaW5kZXggZTRlMjI2Ni4uMDBkY2M1MSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTcsNyArNywxMSBAQAogCiB0eXBlZGVmIHN0cnVjdCBmcHJlZ3NldCB7CiAJaW50IGZfZnBjbnRsWzNdOworI2lmZGVmIF9fbWNvbGRmaXJlX18KKwlpbnQgZl9mcHJlZ3NbOF1bMl07CisjZWxzZQogCWludCBmX2ZwcmVnc1s4KjNdOworI2VuZGlmCiB9IGZwcmVnc2V0X3Q7CiAKIHN0cnVjdCBtY29udGV4dCB7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggNDhiODdmNS4uZDcyYTcxZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzM2LDEwICszMzYsMTQgQEAKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkzMzAKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzMzEKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JMzMyCisjZGVmaW5lIF9fTlJfZ2V0X3RocmVhZF9hcmVhCTMzMworI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYQkzMzQKKyNkZWZpbmUgX19OUl9hdG9taWNfY21weGNoZ18zMgkzMzUKKyNkZWZpbmUgX19OUl9hdG9taWNfYmFycmllcgkzMzYKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzMzCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzMzcKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaAppbmRleCAzZjgzNGIzLi5mMzUyMjliIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaApAQCAtMzEsMTIgKzMxLDcgQEAKICNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpIFwKIAlfX3BhKFBBR0VfT0ZGU0VUICsgKCgocGFnZSkgLSBwZ19kYXRhX21hcFswXS5ub2RlX21lbV9tYXApIDw8IFBBR0VfU0hJRlQpKQogI2Vsc2UKLSNkZWZpbmUgcGFnZV90b19waHlzKF9wYWdlKSAoewkJCQkJCVwKLQlzdHJ1Y3QgcGFnZSAqX19wYWdlID0gX3BhZ2U7CQkJCQlcCi0Jc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDsJCQkJCVwKLQlwZ2RhdCA9IHBnX2RhdGFfdGFibGVbcGFnZV90b19uaWQoX19wYWdlKV07CQkJXAotCXBhZ2VfdG9fcGZuKF9fcGFnZSkgPDwgUEFHRV9TSElGVDsJCQkJXAotfSkKKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCShwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQogI2VuZGlmCiAjZWxzZQogI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCmluZGV4IDc3ZmM3YzEuLmUxMzZiOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKQEAgLTc2MSw0ICs3NjEsOCBAQAogCS5sb25nIHN5c19wd3JpdGV2CQkvKiAzMzAgKi8KIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KIAkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCisJLmxvbmcgc3lzX2dldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19zZXRfdGhyZWFkX2FyZWEKKwkubG9uZyBzeXNfYXRvbWljX2NtcHhjaGdfMzIJLyogMzM1ICovCisJLmxvbmcgc3lzX2F0b21pY19iYXJyaWVyCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMDUyOTY1OS4uMTdjM2YzMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI1MSw2ICsyNTEsMTAgQEAKIAogCXAtPnRocmVhZC51c3AgPSB1c3A7CiAJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKWNoaWxkc3RhY2s7CisKKwlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCisJCXRhc2tfdGhyZWFkX2luZm8ocCktPnRwX3ZhbHVlID0gcmVncy0+ZDU7CisKIAkvKgogCSAqIE11c3Qgc2F2ZSB0aGUgY3VycmVudCBTRkMvREZDIHZhbHVlLCBOT1QgdGhlIHZhbHVlIHdoZW4KIAkgKiB0aGUgcGFyZW50IHdhcyBsYXN0IGRlc2NoZWR1bGVkIC0gUkdIICAxMC0wOC05NgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMWZjMjE3ZS4uNjE2ZTU5NyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCkBAIC0yNDUsNiArMjQ1LDExIEBACiAJCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAorCWNhc2UgUFRSQUNFX0dFVF9USFJFQURfQVJFQToKKwkJcmV0ID0gcHV0X3VzZXIodGFza190aHJlYWRfaW5mbyhjaGlsZCktPnRwX3ZhbHVlLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zaWduYWwuYwppbmRleCBkZTJkMDVkLi40YjM4NzUzIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMKQEAgLTg5NywxMCArODk3LDE3IEBACiAKIAkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlLiAgKi8KIAllcnIgfD0gX19wdXRfdXNlcihmcmFtZS0+cmV0Y29kZSwgJmZyYW1lLT5wcmV0Y29kZSk7CisjaWZkZWYgX19tY29sZGZpcmVfXworCS8qIG1vdmVsICNfX05SX3J0X3NpZ3JldHVybixkMDsgdHJhcCAjMCAqLworCWVyciB8PSBfX3B1dF91c2VyKDB4MjAzYzAwMDAsIChsb25nIF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSArIDApKTsKKwllcnIgfD0gX19wdXRfdXNlcigweDAwMDA0ZTQwICsgKF9fTlJfcnRfc2lncmV0dXJuIDw8IDE2KSwKKwkJCSAgKGxvbmcgX191c2VyICopKGZyYW1lLT5yZXRjb2RlICsgNCkpOworI2Vsc2UKIAkvKiBtb3ZlcSAjLGQwOyBub3RiIGQwOyB0cmFwICMwICovCiAJZXJyIHw9IF9fcHV0X3VzZXIoMHg3MDAwNDYwMCArICgoX19OUl9ydF9zaWdyZXR1cm4gXiAweGZmKSA8PCAxNiksCiAJCQkgIChsb25nIF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSArIDApKTsKIAllcnIgfD0gX19wdXRfdXNlcigweDRlNDAsIChzaG9ydCBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUgKyA0KSk7CisjZW5kaWYKIAogCWlmIChlcnIpCiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jCmluZGV4IDIxOGY0NDEuLmUzYWQyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYworKysgYi9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKQEAgLTI4LDYgKzI4LDExIEBACiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgorCithc21saW5rYWdlIGludCBkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSk7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCkBAIC01OTUsMyArNjAwLDc5IEBACiAJCQk6ICJkIiAoX19hKSwgImQiIChfX2IpLCAiZCIgKF9fYykpOwogCXJldHVybiBfX3JlczsKIH0KKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19nZXRfdGhyZWFkX2FyZWEodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50cF92YWx1ZTsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX3NldF90aHJlYWRfYXJlYSh1bnNpZ25lZCBsb25nIHRwKQoreworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dHBfdmFsdWUgPSB0cDsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBzeXNjYWxsIGdldHMgaXRzIGFyZ3VtZW50cyBpbiBBMCAobWVtKSwgRDIgKG9sZHZhbCkgYW5kCisgICBEMSAobmV3dmFsKS4gICovCithc21saW5rYWdlIGludAorc3lzX2F0b21pY19jbXB4Y2hnXzMyKHVuc2lnbmVkIGxvbmcgbmV3dmFsLCBpbnQgb2xkdmFsLCBpbnQgZDMsIGludCBkNCwgaW50IGQ1LAorCQkgICAgICB1bnNpZ25lZCBsb25nIF9fdXNlciAqIG1lbSkKK3sKKwkvKiBUaGlzIHdhcyBib3Jyb3dlZCBmcm9tIEFSTSdzIGltcGxlbWVudGF0aW9uLiAgKi8KKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJCXBnZF90ICpwZ2Q7CisJCXBtZF90ICpwbWQ7CisJCXB0ZV90ICpwdGU7CisJCXNwaW5sb2NrX3QgKnB0bDsKKwkJdW5zaWduZWQgbG9uZyBtZW1fdmFsdWU7CisKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCAodW5zaWduZWQgbG9uZyltZW0pOworCQlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKQorCQkJZ290byBiYWRfYWNjZXNzOworCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgKHVuc2lnbmVkIGxvbmcpbWVtKTsKKwkJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkKKwkJCWdvdG8gYmFkX2FjY2VzczsKKwkJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCAodW5zaWduZWQgbG9uZyltZW0sICZwdGwpOworCQlpZiAoIXB0ZV9wcmVzZW50KCpwdGUpIHx8ICFwdGVfZGlydHkoKnB0ZSkKKwkJICAgIHx8ICFwdGVfd3JpdGUoKnB0ZSkpIHsKKwkJCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCQkJZ290byBiYWRfYWNjZXNzOworCQl9CisKKwkJbWVtX3ZhbHVlID0gKm1lbTsKKwkJaWYgKG1lbV92YWx1ZSA9PSBvbGR2YWwpCisJCQkqbWVtID0gbmV3dmFsOworCisJCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlyZXR1cm4gbWVtX3ZhbHVlOworCisJICAgICAgYmFkX2FjY2VzczoKKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJLyogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYSBiYWQgYWNjZXNzLCB3ZSBjYW4gZ2V0IGhlcmUgaWYKKwkJICAgYSBtZW1vcnkgd2UncmUgdHJ5aW5nIHRvIHdyaXRlIHRvIHNob3VsZCBiZSBjb3BpZWQtb24td3JpdGUuCisJCSAgIE1ha2UgdGhlIGtlcm5lbCBkbyB0aGUgbmVjZXNzYXJ5IHBhZ2Ugc3R1ZmYsIHRoZW4gcmUtaXRlcmF0ZS4KKwkJICAgU2ltdWxhdGUgYSB3cml0ZSBhY2Nlc3MgZmF1bHQgdG8gZG8gdGhhdC4gICovCisJCXsKKwkJCS8qIFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgZnVuY3Rpb24gY29ycmVzcG9uZHMgdG8KKwkJCSAgIEQxLCB3aGljaCBpcyB0aGUgZmlyc3QgZmllbGQgb2Ygc3RydWN0IHB0X3JlZ3MuICAqLworCQkJc3RydWN0IHB0X3JlZ3MgKmZwID0gKHN0cnVjdCBwdF9yZWdzICopJm5ld3ZhbDsKKworCQkJLyogJzMnIGlzIGFuIFJNVyBmbGFnLiAgKi8KKwkJCWlmIChkb19wYWdlX2ZhdWx0KGZwLCAodW5zaWduZWQgbG9uZyltZW0sIDMpKQorCQkJCS8qIElmIHRoZSBkb19wYWdlX2ZhdWx0KCkgZmFpbGVkLCB3ZSBkb24ndAorCQkJCSAgIGhhdmUgYW55dGhpbmcgbWVhbmluZ2Z1bCB0byByZXR1cm4uCisJCQkJICAgVGhlcmUgc2hvdWxkIGJlIGEgU0lHU0VHViBwZW5kaW5nIGZvcgorCQkJCSAgIHRoZSBwcm9jZXNzLiAgKi8KKwkJCQlyZXR1cm4gMHhkZWFkYmVlZjsKKwkJfQorCX0KK30KKworYXNtbGlua2FnZSBpbnQgc3lzX2F0b21pY19iYXJyaWVyKHZvaWQpCit7CisJLyogbm8gY29kZSBuZWVkZWQgZm9yIHVuaXByb2NzICovCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL01ha2VmaWxlIGIvYXJjaC9tNjhrL21hYy9NYWtlZmlsZQppbmRleCBkYWViZDgwLi5iOGQ0YzgzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUKQEAgLTMsNCArMyw0IEBACiAjCiAKIG9iai15CQk6PSBjb25maWcubyBtYWNpbnRzLm8gaW9wLm8gdmlhLm8gb3NzLm8gcHNjLm8gXAotCQkJYmFib29uLm8gbWFjYm9pbmcubyBkZWJ1Zy5vIG1pc2MubworCQkJYmFib29uLm8gbWFjYm9pbmcubyBtaXNjLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCmluZGV4IGJlMDE3OTguLjAzNTZkYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYWRiLmg+CisjaW5jbHVkZSA8bGludXgvY3VkYS5oPgogCiAjZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTQ0LDEyICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KICNpbmNsdWRlIDxhc20vbWFjX3BzYy5oPgogCi0vKiBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqLwotCi0jZGVmaW5lIFNXSU1fSU9fU0laRSAweDIwMDAJLyogU1dJTSBJTyByZXNvdXJjZSBzaXplICovCi0KIC8qIE1hYyBib290aW5mbyBzdHJ1Y3QgKi8KLQogc3RydWN0IG1hY19ib290ZXJfZGF0YSBtYWNfYmlfZGF0YTsKIAogLyogVGhlIHBoeXMuIHZpZGVvIGFkZHIuIC0gbWlnaHQgYmUgYm9ndXMgb24gc29tZSBtYWNoaW5lcyAqLwpAQCAtNzAsOCArNjcsNiBAQAogCiBleHRlcm4gdm9pZCBtYWNfbWtzb3VuZCh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiAKLWV4dGVybiB2b2lkIG51YnVzX3N3ZWVwX3ZpZGVvKHZvaWQpOwotCiBzdGF0aWMgdm9pZCBtYWNfZ2V0X21vZGVsKGNoYXIgKnN0cik7CiBzdGF0aWMgdm9pZCBtYWNfaWRlbnRpZnkodm9pZCk7CiBzdGF0aWMgdm9pZCBtYWNfcmVwb3J0X2hhcmR3YXJlKHZvaWQpOwpAQCAtMTY4LDEyICsxNjMsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQX01PRFVMRSkKIAltYWNoX2JlZXAgPSBtYWNfbWtzb3VuZDsKICNlbmRpZgotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLSNpZiAwCi0JbWFjaF9oZWFydGJlYXQgPSBtYWNfaGVhcnRiZWF0OwotCW1hY2hfaGVhcnRiZWF0X2lycSA9IElSUV9NQUNfVElNRVI7Ci0jZW5kaWYKLSNlbmRpZgogCiAJLyoKIAkgKiBEZXRlcm1pbmUgaGFyZHdhcmUgcHJlc2VudApAQCAtMTkxLDI3ICsxODAsMTkgQEAKIAlpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJQ0kKIAkgICAgfHwgbWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJRlgpCiAJCW1hY2hfbDJfZmx1c2ggPSBtYWNfY2FjaGVfY2FyZF9mbHVzaDsKLQotCS8qCi0JICogQ2hlY2sgZm9yIG1hY2hpbmUgc3BlY2lmaWMgZml4dXBzLgotCSAqLwotCi0jaWZkZWYgT0xEX05VQlVTX0NPREUKLQludWJ1c19zd2VlcF92aWRlbygpOwotI2VuZGlmCiB9CiAKIAogLyoKLSAqCU1hY2ludG9zaCBUYWJsZTogaGFyZGNvZGVkIG1vZGVsIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAqIE1hY2ludG9zaCBUYWJsZTogaGFyZGNvZGVkIG1vZGVsIGNvbmZpZ3VyYXRpb24gZGF0YS4KICAqCi0gKglNdWNoIG9mIHRoaXMgd2FzIGRlZmluZWQgYnkgQWxhbiwgYmFzZWQgb24gd2hvIGtub3dzIHdoYXQgZG9jcy4KLSAqCUkndmUgYWRkZWQgYSBsb3QgbW9yZSwgYW5kIHNvbWUgb2YgdGhhdCB3YXMgcHVyZSBndWVzc3dvcmsgYmFzZWQKLSAqCW9uIGhhcmR3YXJlIHBhZ2VzIHByZXNlbnQgb24gdGhlIE1hYyB3ZWIgc2l0ZS4gUG9zc2libHkgd2lsZGx5Ci0gKglpbmFjY3VyYXRlLCBzbyBsb29rIGhlcmUgaWYgYSBuZXcgTWFjIG1vZGVsIHdvbid0IHJ1bi4gRXhhbXBsZTogaWYKLSAqCWEgTWFjIGNyYXNoZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFZJQTEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBkdW1wZWQKLSAqCXRvIHRoZSBzY3JlZW4sIGl0IHByb2JhYmx5IGRpZWQgYXR0ZW1wdGluZyB0byByZWFkIERpckIgb24gYSBSQlYuCi0gKglNZWFuaW5nIGl0IHNob3VsZCBoYXZlIE1BQ19WSUFfSUljaSBoZXJlIDotKQorICogTXVjaCBvZiB0aGlzIHdhcyBkZWZpbmVkIGJ5IEFsYW4sIGJhc2VkIG9uIHdobyBrbm93cyB3aGF0IGRvY3MuCisgKiBJJ3ZlIGFkZGVkIGEgbG90IG1vcmUsIGFuZCBzb21lIG9mIHRoYXQgd2FzIHB1cmUgZ3Vlc3N3b3JrIGJhc2VkCisgKiBvbiBoYXJkd2FyZSBwYWdlcyBwcmVzZW50IG9uIHRoZSBNYWMgd2ViIHNpdGUuIFBvc3NpYmx5IHdpbGRseQorICogaW5hY2N1cmF0ZSwgc28gbG9vayBoZXJlIGlmIGEgbmV3IE1hYyBtb2RlbCB3b24ndCBydW4uIEV4YW1wbGU6IGlmCisgKiBhIE1hYyBjcmFzaGVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBWSUExIHJlZ2lzdGVycyBoYXZlIGJlZW4gZHVtcGVkCisgKiB0byB0aGUgc2NyZWVuLCBpdCBwcm9iYWJseSBkaWVkIGF0dGVtcHRpbmcgdG8gcmVhZCBEaXJCIG9uIGEgUkJWLgorICogTWVhbmluZyBpdCBzaG91bGQgaGF2ZSBNQUNfVklBX0lJY2kgaGVyZSA6LSkKICAqLwogCiBzdHJ1Y3QgbWFjX21vZGVsICptYWNpbnRvc2hfY29uZmlnOwpAQCAtMjE5LDcgKzIwMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbWFjX21vZGVsIG1hY19kYXRhX3RhYmxlW10gPSB7CiAJLyoKLQkgKglXZSdsbCBwcmV0ZW5kIHRvIGJlIGEgTWFjaW50b3NoIElJLCB0aGF0J3MgcHJldHR5IHNhZmUuCisJICogV2UnbGwgcHJldGVuZCB0byBiZSBhIE1hY2ludG9zaCBJSSwgdGhhdCdzIHByZXR0eSBzYWZlLgogCSAqLwogCiAJewpAQCAtMjMwLDEyICsyMTEsMTEgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNLAogCX0sCiAKIAkvKgotCSAqCU9yaWdpbmFsIE1hY0lJIGhhcmR3YXJlCi0JICoKKwkgKiBPcmlnaW5hbCBNYWMgSUkgaGFyZHdhcmUKIAkgKi8KIAogCXsKQEAgLTI0Niw3ICsyMjYsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00sCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJWCwKIAkJLm5hbWUJCT0gIklJeCIsCkBAIC0yNTUsNyArMjM1LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJQ1gsCiAJCS5uYW1lCQk9ICJJSWN4IiwKQEAgLTI2NCw3ICsyNDQsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfU0UzMCwKIAkJLm5hbWUJCT0gIlNFLzMwIiwKQEAgLTI3MywxMyArMjUzLDEzIEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCVdlaXJkaWZpZWQgTWFjSUkgaGFyZHdhcmUgLSBhbGwgc3VidGx5IGRpZmZlcmVudC4gR2VlIHRoYW5rcwotCSAqCUFwcGxlLiBBbGwgdGhlc2UgYm94ZXMgc2VlbSB0byBoYXZlIFZJQTIgaW4gYSBkaWZmZXJlbnQgcGxhY2UgdG8KLQkgKgl0aGUgTWFjSUkgKCsxQTAwMCByYXRoZXIgdGhhbiArNDAwMCkKKwkgKiBXZWlyZGlmaWVkIE1hYyBJSSBoYXJkd2FyZSAtIGFsbCBzdWJ0bHkgZGlmZmVyZW50LiBHZWUgdGhhbmtzCisJICogQXBwbGUuIEFsbCB0aGVzZSBib3hlcyBzZWVtIHRvIGhhdmUgVklBMiBpbiBhIGRpZmZlcmVudCBwbGFjZSB0bworCSAqIHRoZSBNYWMgSUkgKCsxQTAwMCByYXRoZXIgdGhhbiArNDAwMCkKIAkgKiBDU0E6IHNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZWNobm90ZXMvaHcvaHdfMDkuaHRtbAogCSAqLwogCkBAIC0yOTEsNyArMjcxLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJRlgsCiAJCS5uYW1lCQk9ICJJSWZ4IiwKQEAgLTMwMCw3ICsyODAsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0lPUCwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlTSSwKIAkJLm5hbWUJCT0gIklJc2kiLApAQCAtMzA5LDcgKzI4OSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZJLAogCQkubmFtZQkJPSAiSUl2aSIsCkBAIC0zMTgsNyArMjk4LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJVlgsCiAJCS5uYW1lCQk9ICJJSXZ4IiwKQEAgLTMyNywxMSArMzA3LDExIEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCUNsYXNzaWMgbW9kZWxzIChndWVzc2luZzogc2ltaWxhciB0byBTRS8zMCA/PyBOb3BlLCBzaW1pbGFyIHRvIExDIC4uLikKKwkgKiBDbGFzc2ljIG1vZGVscyAoZ3Vlc3Npbmc6IHNpbWlsYXIgdG8gU0UvMzA/IE5vcGUsIHNpbWlsYXIgdG8gTEMuLi4pCiAJICovCiAKIAl7CkBAIC0zNDIsNyArMzIyLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0NDTCwKIAkJLm5hbWUJCT0gIkNvbG9yIENsYXNzaWMiLApAQCAtMzUxLDExICszMzEsMTEgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJU29tZSBNYWMgTEMgbWFjaGluZXMuIEJhc2ljYWxseSB0aGUgc2FtZSBhcyB0aGUgSUljaSwgQURCIGxpa2UgSUlzaQorCSAqIFNvbWUgTWFjIExDIG1hY2hpbmVzLiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIElJY2ksIEFEQiBsaWtlIElJc2kKIAkgKi8KIAogCXsKQEAgLTM2Niw3ICszNDYsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfTENJSSwKIAkJLm5hbWUJCT0gIkxDIElJIiwKQEAgLTM3NSw3ICszNTUsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfTENJSUksCiAJCS5uYW1lCQk9ICJMQyBJSUkiLApAQCAtMzg0LDE3ICszNjQsMTcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJUXVhZHJhLiBWaWRlbyBpcyBhdCAweEY5MDAwMDAwLCB2aWEgaXMgbGlrZSBhIE1hY0lJLiBXZSBsYWJlbCBpdCBkaWZmZXJlbnRseQotCSAqCWFzIHNvbWUgb2YgdGhlIHN0dWZmIGNvbm5lY3RlZCB0byBWSUEyIHNlZW1zIGRpZmZlcmVudC4gQmV0dGVyIFNDU0kgY2hpcCBhbmQKLQkgKglvbmJvYXJkIGV0aGVybmV0IHVzaW5nIGEgTmF0U2VtaSBTT05JQyBleGNlcHQgdGhlIDY2MEFWIGFuZCA4NDBBViB3aGljaCB1c2UgYW4KLQkgKglBTUQgNzlDOTQwIChNQUNFKS4KLQkgKglUaGUgNzAwLCA5MDAgYW5kIDk1MCBoYXZlIHNvbWUgSS9PIGNoaXBzIGluIHRoZSB3cm9uZyBwbGFjZSB0bwotCSAqCWNvbmZ1c2UgdXMuIFRoZSA4NDBBViBoYXMgYSBTQ1NJIGxvY2F0aW9uIG9mIGl0cyBvd24gKHNhbWUgYXMKLQkgKgl0aGUgNjYwQVYpLgorCSAqIFF1YWRyYS4gVmlkZW8gaXMgYXQgMHhGOTAwMDAwMCwgdmlhIGlzIGxpa2UgYSBNYWNJSS4gV2UgbGFiZWwgaXQKKwkgKiBkaWZmZXJlbnRseSBhcyBzb21lIG9mIHRoZSBzdHVmZiBjb25uZWN0ZWQgdG8gVklBMiBzZWVtcyBkaWZmZXJlbnQuCisJICogQmV0dGVyIFNDU0kgY2hpcCBhbmQgb25ib2FyZCBldGhlcm5ldCB1c2luZyBhIE5hdFNlbWkgU09OSUMgZXhjZXB0CisJICogdGhlIDY2MEFWIGFuZCA4NDBBViB3aGljaCB1c2UgYW4gQU1EIDc5Qzk0MCAoTUFDRSkuCisJICogVGhlIDcwMCwgOTAwIGFuZCA5NTAgaGF2ZSBzb21lIEkvTyBjaGlwcyBpbiB0aGUgd3JvbmcgcGxhY2UgdG8KKwkgKiBjb25mdXNlIHVzLiBUaGUgODQwQVYgaGFzIGEgU0NTSSBsb2NhdGlvbiBvZiBpdHMgb3duIChzYW1lIGFzCisJICogdGhlIDY2MEFWKS4KIAkgKi8KIAogCXsKQEAgLTQwNSw3ICszODUsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MDVfQUNDLAogCQkubmFtZQkJPSAiUXVhZHJhIDYwNSIsCkBAIC00MTQsNyArMzk0LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjEwLAogCQkubmFtZQkJPSAiUXVhZHJhIDYxMCIsCkBAIC00MjQsNyArNDA0LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYzMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MzAiLApAQCAtNDM1LDcgKzQxNSw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2NTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjUwIiwKQEAgLTQ0NSw5ICs0MjUsOSBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sCi0JLyoJVGhlIFE3MDAgZG9lcyBoYXZlIGEgTlMgU29uaWMgKi8KKwkvKiBUaGUgUTcwMCBkb2VzIGhhdmUgYSBOUyBTb25pYyAqLwogCXsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNzAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDcwMCIsCkBAIC00NTcsNyArNDM3LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTgwMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA4MDAiLApAQCAtNDY3LDcgKzQ0Nyw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4NDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgODQwQVYiLApAQCAtNDc3LDcgKzQ1Nyw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0FWLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDkwMCIsCkBAIC00ODcsNyArNDY3LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fSU9QLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTUwLAogCQkubmFtZQkJPSAiUXVhZHJhIDk1MCIsCkBAIC00OTcsNjAgKzQ3Nyw2MCBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9JT1AsCiAJfSwKIAogCS8qCi0JICoJUGVyZm9ybWEgLSBtb3JlIExDIHR5cGUgbWFjaGluZXMKKwkgKiBQZXJmb3JtYSAtIG1vcmUgTEMgdHlwZSBtYWNoaW5lcwogCSAqLwogCiAJewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NjAsCi0JCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDYwIiwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDQ2MCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ3NSwKLQkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNDc1IiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NzVGLAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA0NzUiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDUyMCwKLQkJLm5hbWUJCT0gICJQZXJmb3JtYSA1MjAiLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNTIwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTUwLAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDU1MCIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA1NTAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKLQkvKiBUaGVzZSBoYXZlIHRoZSBjb21tIHNsb3QsIGFuZCB0aGVyZWZvcmUgdGhlIHBvc3NpYmlsaXR5IG9mIFNPTklDIGV0aGVybmV0ICovCisJLyogVGhlc2UgaGF2ZSB0aGUgY29tbSBzbG90LCBhbmQgdGhlcmVmb3JlIHBvc3NpYmx5IFNPTklDIGV0aGVybmV0ICovCiAJewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1NzUsCiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA1NzUiLApAQCAtNTYwLDcgKzU0MCw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU4OCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDU4OCIsCkBAIC01NzEsNyArNTUxLDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9UViwKIAkJLm5hbWUJCT0gIlRWIiwKQEAgLTU4MCw3ICs1NjAsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDYwMCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDYwMCIsCkBAIC01ODksMTQgKzU2OSwxNCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglDZW50cmlzIC0ganVzdCBndWVzc2luZyBhZ2FpbjsgbWF5YmUgbGlrZSBRdWFkcmEKKwkgKiBDZW50cmlzIC0ganVzdCBndWVzc2luZyBhZ2FpbjsgbWF5YmUgbGlrZSBRdWFkcmEuCisJICogVGhlIEM2MTAgbWF5IG9yIG1heSBub3QgaGF2ZSBTT05JQy4gV2UgcHJvYmUgdG8gbWFrZSBzdXJlLgogCSAqLwogCi0JLyogVGhlIEM2MTAgbWF5IG9yIG1heSBub3QgaGF2ZSBTT05JQy4gIFdlIHByb2JlIHRvIG1ha2Ugc3VyZSAqLwogCXsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjEwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2MTAiLApAQCAtNjA2LDcgKzU4Niw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NTAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY1MCIsCkBAIC02MTYsNyArNTk2LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzY2MCwKIAkJLm5hbWUJCT0gIkNlbnRyaXMgNjYwQVYiLApAQCAtNjI2LDcgKzYwNiw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0FWLAogCX0sCiAKIAkvKgpAQCAtNjQzLDcgKzYyMyw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNDUsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTQ1IiwKQEAgLTY1Miw3ICs2MzIsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE1MCIsCkBAIC02NjIsNyArNjQyLDcgQEAKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9QQiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjAiLApAQCAtNjcxLDcgKzY1MSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjUsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1IiwKQEAgLTY4MCw3ICs2NjAsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTY1QywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjVjIiwKQEAgLTY4OSw3ICs2NjksNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTcwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE3MCIsCkBAIC02OTgsNyArNjc4LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODAiLApAQCAtNzA3LDcgKzY4Nyw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE4MGMiLApAQCAtNzE2LDcgKzY5Niw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxOTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTkwIiwKQEAgLTcyNiw3ICs3MDYsNyBAQAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX0JBQk9PTiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjUyMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayA1MjAiLApAQCAtNzM2LDcgKzcxNiw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCkBAIC03NTcsNyArNzM3LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjIzMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjMwIiwKQEAgLTc2Niw3ICs3NDYsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjUwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNTAiLApAQCAtNzc1LDcgKzc1NSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNzBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyNzBjIiwKQEAgLTc4NCw3ICs3NjQsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODAiLApAQCAtNzkzLDcgKzc3Myw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyODBjIiwKQEAgLTgwMiwxNyArNzgyLDQ0IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglPdGhlciBzdHVmZiA/PworCSAqIE90aGVyIHN0dWZmPwogCSAqLworCiAJewogCQkuaWRlbnQJCT0gLTEKIAl9CiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNjY19hX3JzcmNzW10gPSB7CisJeyAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB9LAorCXsgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2NjX2JfcnNyY3NbXSA9IHsKKwl7IC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIH0sCisJeyAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2NfYV9wZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJzY2MiLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzY2NfYV9yc3JjcyksCisJLnJlc291cmNlICAgICAgID0gc2NjX2FfcnNyY3MsCit9OworRVhQT1JUX1NZTUJPTChzY2NfYV9wZGV2KTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2NfYl9wZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJzY2MiLAorCS5pZCAgICAgICAgICAgICA9IDEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzY2NfYl9yc3JjcyksCisJLnJlc291cmNlICAgICAgID0gc2NjX2JfcnNyY3MsCit9OworRVhQT1JUX1NZTUJPTChzY2NfYl9wZGV2KTsKKwogc3RhdGljIHZvaWQgX19pbml0IG1hY19pZGVudGlmeSh2b2lkKQogewogCXN0cnVjdCBtYWNfbW9kZWwgKm07CkBAIC04MjMsNyArODMwLDggQEAKIAkJLyogbm8gYm9vdGluZm8gbW9kZWwgaWQgLT4gTmV0QlNEIGJvb3RlciB3YXMgdXNlZCEgKi8KIAkJLyogWFhYIEZJWE1FOiBicmVha3MgZm9yIG1vZGVsID4gMzEgKi8KIAkJbW9kZWwgPSAobWFjX2JpX2RhdGEuY3B1aWQgPj4gMikgJiA2MzsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gYm9vdGluZm8gbW9kZWwgSUQsIHVzaW5nIGNwdWlkIGluc3RlYWQgKGhleSwgdXNlIFBlbmd1aW4hKVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGJvb3RpbmZvIG1vZGVsIElELCB1c2luZyBjcHVpZCBpbnN0ZWFkICIKKwkJICAgICAgICIob2Jzb2xldGUgYm9vdGxvYWRlcj8pXG4iKTsKIAl9CiAKIAltYWNpbnRvc2hfY29uZmlnID0gbWFjX2RhdGFfdGFibGU7CkBAIC04MzQsMTAgKzg0MiwyOSBAQAogCQl9CiAJfQogCi0JLyogV2UgbmVlZCB0byBwcmUtaW5pdCB0aGUgSU9QcywgaWYgYW55LiBPdGhlcndpc2UgKi8KLQkvKiB0aGUgc2VyaWFsIGNvbnNvbGUgd29uJ3Qgd29yayBpZiB0aGUgdXNlciBoYWQgICAqLwotCS8qIHRoZSBzZXJpYWwgcG9ydHMgc2V0IHRvICJGYXN0ZXIiIG1vZGUgaW4gTWFjT1MuICovCisJLyogU2V0IHVwIHNlcmlhbCBwb3J0IHJlc291cmNlcyBmb3IgdGhlIGNvbnNvbGUgaW5pdGNhbGwuICovCiAKKwlzY2NfYV9yc3Jjc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3QpIG1hY19iaV9kYXRhLnNjY2Jhc2UgKyAyOworCXNjY19hX3JzcmNzWzBdLmVuZCAgID0gc2NjX2FfcnNyY3NbMF0uc3RhcnQ7CisJc2NjX2JfcnNyY3NbMF0uc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KSBtYWNfYmlfZGF0YS5zY2NiYXNlOworCXNjY19iX3JzcmNzWzBdLmVuZCAgID0gc2NjX2JfcnNyY3NbMF0uc3RhcnQ7CisKKwlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPnNjY190eXBlKSB7CisJY2FzZSBNQUNfU0NDX1BTQzoKKwkJc2NjX2FfcnNyY3NbMV0uc3RhcnQgPSBzY2NfYV9yc3Jjc1sxXS5lbmQgPSBJUlFfTUFDX1NDQ19BOworCQlzY2NfYl9yc3Jjc1sxXS5zdGFydCA9IHNjY19iX3JzcmNzWzFdLmVuZCA9IElSUV9NQUNfU0NDX0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNjY19hX3JzcmNzWzFdLnN0YXJ0ID0gc2NjX2FfcnNyY3NbMV0uZW5kID0gSVJRX01BQ19TQ0M7CisJCXNjY19iX3JzcmNzWzFdLnN0YXJ0ID0gc2NjX2JfcnNyY3NbMV0uZW5kID0gSVJRX01BQ19TQ0M7CisJCWJyZWFrOworCX0KKworCS8qCisJICogV2UgbmVlZCB0byBwcmUtaW5pdCB0aGUgSU9QcywgaWYgYW55LiBPdGhlcndpc2UKKwkgKiB0aGUgc2VyaWFsIGNvbnNvbGUgd29uJ3Qgd29yayBpZiB0aGUgdXNlciBoYWQKKwkgKiB0aGUgc2VyaWFsIHBvcnRzIHNldCB0byAiRmFzdGVyIiBtb2RlIGluIE1hY09TLgorCSAqLwogCWlvcF9wcmVpbml0KCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCBNYWNpbnRvc2ggbW9kZWw6ICVkIFxuIiwgbW9kZWwpOwpAQCAtODQ2LDcgKzg3Myw4IEBACiAJICogUmVwb3J0IGJvb3RlciBkYXRhOgogCSAqLwogCXByaW50ayhLRVJOX0RFQlVHICIgUGVuZ3VpbiBib290aW5mbyBkYXRhOlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiBWaWRlbzogYWRkciAweCVseCByb3cgMHglbHggZGVwdGggJWx4IGRpbWVuc2lvbnMgJWxkIHggJWxkXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICIgVmlkZW86IGFkZHIgMHglbHggIgorCQkicm93IDB4JWx4IGRlcHRoICVseCBkaW1lbnNpb25zICVsZCB4ICVsZFxuIiwKIAkJbWFjX2JpX2RhdGEudmlkZW9hZGRyLCBtYWNfYmlfZGF0YS52aWRlb3JvdywKIAkJbWFjX2JpX2RhdGEudmlkZW9kZXB0aCwgbWFjX2JpX2RhdGEuZGltZW5zaW9ucyAmIDB4RkZGRiwKIAkJbWFjX2JpX2RhdGEuZGltZW5zaW9ucyA+PiAxNik7CkBAIC04NjMsNiArODkxLDEwIEBACiAJb3NzX2luaXQoKTsKIAlwc2NfaW5pdCgpOwogCWJhYm9vbl9pbml0KCk7CisKKyNpZmRlZiBDT05GSUdfQURCX0NVREEKKwlmaW5kX3ZpYV9jdWRhKCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1hY19yZXBvcnRfaGFyZHdhcmUodm9pZCkKQEAgLTg3NiwyMyArOTA4LDUwIEBACiAJc3RyY2F0KHN0ciwgbWFjaW50b3NoX2NvbmZpZy0+bmFtZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3dpbV9yZXNvdXJjZXNbMV07CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHN3aW1fcnNyYyA9IHsgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3dpbV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzd2ltX3BkZXYgPSB7CiAJLm5hbWUJCT0gInN3aW0iLAogCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3dpbV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHN3aW1fcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmc3dpbV9yc3JjLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmc3dpbV9kZXZpY2UKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVzcF8wX3BkZXYgPSB7CisJLm5hbWUJCT0gIm1hY19lc3AiLAorCS5pZAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwXzFfcGRldiA9IHsKKwkubmFtZQkJPSAibWFjX2VzcCIsCisJLmlkCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzb25pY19wZGV2ID0geworCS5uYW1lCQk9ICJtYWNzb25pYyIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWFjZV9wZGV2ID0geworCS5uYW1lCQk9ICJtYWNtYWNlIiwKKwkuaWQJCT0gLTEsCiB9OwogCiBpbnQgX19pbml0IG1hY19wbGF0Zm9ybV9pbml0KHZvaWQpCiB7CiAJdTggKnN3aW1fYmFzZTsKIAorCS8qCisJICogU2VyaWFsIGRldmljZXMKKwkgKi8KKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2NjX2FfcGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzY2NfYl9wZGV2KTsKKworCS8qCisJICogRmxvcHB5IGRldmljZQorCSAqLworCiAJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5mbG9wcHlfdHlwZSkgewogCWNhc2UgTUFDX0ZMT1BQWV9TV0lNX0FERFIxOgogCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxRTAwMCk7CkBAIC05MDEsMTYgKzk2MCw0NyBAQAogCQlzd2ltX2Jhc2UgPSAodTggKikoVklBMV9CQVNFICsgMHgxNjAwMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAwOworCQlzd2ltX2Jhc2UgPSBOVUxMOworCQlicmVhazsKIAl9CiAKLQlzd2ltX3Jlc291cmNlc1swXS5uYW1lID0gInN3aW0tcmVncyI7Ci0Jc3dpbV9yZXNvdXJjZXNbMF0uc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KXN3aW1fYmFzZTsKLQlzd2ltX3Jlc291cmNlc1swXS5lbmQgPSAocmVzb3VyY2Vfc2l6ZV90KShzd2ltX2Jhc2UgKyBTV0lNX0lPX1NJWkUpOwotCXN3aW1fcmVzb3VyY2VzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJaWYgKHN3aW1fYmFzZSkgeworCQlzd2ltX3JzcmMuc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KSBzd2ltX2Jhc2UsCisJCXN3aW1fcnNyYy5lbmQgICA9IChyZXNvdXJjZV9zaXplX3QpIHN3aW1fYmFzZSArIDB4MjAwMCwKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzd2ltX3BkZXYpOworCX0KIAotCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtYWNfcGxhdGZvcm1fZGV2aWNlcywKLQkJCQkgICAgQVJSQVlfU0laRShtYWNfcGxhdGZvcm1fZGV2aWNlcykpOworCS8qCisJICogU0NTSSBkZXZpY2UocykKKwkgKi8KKworCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+c2NzaV90eXBlKSB7CisJY2FzZSBNQUNfU0NTSV9RVUFEUkE6CisJY2FzZSBNQUNfU0NTSV9RVUFEUkEzOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVzcF8wX3BkZXYpOworCQlicmVhazsKKwljYXNlIE1BQ19TQ1NJX1FVQURSQTI6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXNwXzBfcGRldik7CisJCWlmICgobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1E5MDApIHx8CisJCSAgICAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1E5NTApKQorCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlc3BfMV9wZGV2KTsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBFdGhlcm5ldCBkZXZpY2UKKwkgKi8KKworCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+ZXRoZXJfdHlwZSkgeworCWNhc2UgTUFDX0VUSEVSX1NPTklDOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNvbmljX3BkZXYpOworCQlicmVhazsKKwljYXNlIE1BQ19FVEhFUl9NQUNFOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1hY2VfcGRldik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG1hY19wbGF0Zm9ybV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvZGVidWcuYyBiL2FyY2gvbTY4ay9tYWMvZGVidWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlMDc0Yy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvbWFjL2RlYnVnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjUgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvbTY4ay9tYWMvZGVidWcuYwotICoKLSAqIFNoYW1lbGVzc2x5IHN0b2xlbiAoU0NDIGNvZGUgYW5kIGdlbmVyYWwgZnJhbWV3b3JrKSBmcm9tOgotICoKLSAqIGxpbnV4L2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCi0gKgotICogQXRhcmkgZGVidWdnaW5nIGFuZCBzZXJpYWwgY29uc29sZSBzdHVmZgotICoKLSAqIEFzc2VtYmxlZCBvZiBwYXJ0cyBvZiBmb3JtZXIgYXRhcmkvY29uZmlnLmMgOTctMTItMTggYnkgUm9tYW4gSG9kZWsKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNkZWZpbmUgQk9PVElORk9fQ09NUEFUXzFfMAotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIG1hY192aWRlb2Jhc2U7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtYWNfcm93Ynl0ZXM7Ci0KLWV4dGVybiB2b2lkIG1hY19zZXJpYWxfcHJpbnQoY29uc3QgY2hhciAqKTsKLQotI2RlZmluZSBERUJVR19IRUFEUwotI3VuZGVmIERFQlVHX1NDUkVFTgotI2RlZmluZSBERUJVR19TRVJJQUwKLQotLyoKLSAqIFRoZXNlIHR3byBhdXhpbGlhcnkgZGVidWcgZnVuY3Rpb25zIHNob3VsZCBnbyBhd2F5IEFTQVAuIE9ubHkgdXNhZ2U6Ci0gKiBiZWZvcmUgdGhlIGNvbnNvbGUgb3V0cHV0IGlzIHVwIChhZnRlciBoZWFkLlMgY29tZSBzb21lIG90aGVyIGNydWNpYWwKLSAqIHNldHVwIHJvdXRpbmVzIDotKSBpdCBwZXJtaXRzIHdyaXRpbmcgJ2RhdGEnIHRvIHRoZSBzY3JlZW4gYXMgYml0IHBhdHRlcm5zCi0gKiAoZ29vZCBsdWNrIHJlYWRpbmcgdGhvc2UpLiBIZWxwZWQgdG8gZmlndXJlIHRoYXQgdGhlIGJvb3RpbmZvIGNvbnRhaW5lZAotICogZ2FyYmFnZSBkYXRhIG9uIHRoZSBhbW91bnQgYW5kIHNpemUgb2YgbWVtb3J5IGNodW5rcyAuLi4KLSAqCi0gKiBUaGUgJ3BvcycgYXJndW1lbnQgbm93IHNpbXBseSBtZWFucyAnbGluZWZlZWQgYWZ0ZXIgcHJpbnQnIC4uLgotICovCi0KLSNpZmRlZiBERUJVR19TQ1JFRU4KLXN0YXRpYyBpbnQgcGVuZywgbGluZTsKLSNlbmRpZgotCi0jaWYgMAotCi12b2lkIG1hY19kZWJ1Z2dpbmdfc2hvcnQoaW50IHBvcywgc2hvcnQgbnVtKQotewotI2lmZGVmIERFQlVHX1NDUkVFTgotCXVuc2lnbmVkIGNoYXIgKnBlbmdvZmZzZXQ7Ci0JdW5zaWduZWQgY2hhciAqcHB0cjsKLQlpbnQgaTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU0VSSUFMCi0JcHJpbnRrKCJkZWJ1ZzogJWQgIVxuIiwgbnVtKTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU0NSRUVOCi0JaWYgKCFNQUNIX0lTX01BQykgewotCQkvKiBwcmludGsoImRlYnVnOiAlZCAhXG4iLCBudW0pOyAqLwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2FsY3VsYXRlIGN1cnJlbnQgb2Zmc2V0ICovCi0JcGVuZ29mZnNldCA9ICh1bnNpZ25lZCBjaGFyICopbWFjX3ZpZGVvYmFzZSArCi0JCSgxNTArbGluZSoyKSAqIG1hY19yb3dieXRlcyArIDgwICogcGVuZzsKLQotCXBwdHIgPSBwZW5nb2Zmc2V0OwotCi0JZm9yIChpID0gMDsgaSA8IDggKiBzaXplb2Yoc2hvcnQpOyBpKyspIHsgLyogIyBvZiBiaXRzICovCi0JCS8qICAgICAgICB2YWx1ZSAgICAgICAgbWFzayBmb3IgYml0IGksIHJldmVyc2Ugb3JkZXIgKi8KLQkJKnBwdHIrKyA9IChudW0gJiAoMSA8PCAoOCpzaXplb2Yoc2hvcnQpLWktMSkpID8gMHhGRiA6IDB4MDApOwotCX0KLQotCXBlbmcrKzsKLQotCWlmIChwb3MpIHsKLQkJbGluZSsrOwotCQlwZW5nID0gMDsKLQl9Ci0jZW5kaWYKLX0KLQotdm9pZCBtYWNfZGVidWdnaW5nX2xvbmcoaW50IHBvcywgbG9uZyBhZGRyKQotewotI2lmZGVmIERFQlVHX1NDUkVFTgotCXVuc2lnbmVkIGNoYXIgKnBlbmdvZmZzZXQ7Ci0JdW5zaWduZWQgY2hhciAqcHB0cjsKLQlpbnQgaTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU0VSSUFMCi0JcHJpbnRrKCJkZWJ1ZzogIyVsZCAhXG4iLCBhZGRyKTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU0NSRUVOCi0JaWYgKCFNQUNIX0lTX01BQykgewotCQkvKiBwcmludGsoImRlYnVnOiAjJWxkICFcbiIsIGFkZHIpOyAqLwotCQlyZXR1cm47Ci0JfQotCi0JcGVuZ29mZnNldD0odW5zaWduZWQgY2hhciAqKShtYWNfdmlkZW9iYXNlKygxNTArbGluZSoyKSptYWNfcm93Ynl0ZXMpCi0JCSAgICArODAqcGVuZzsKLQotCXBwdHIgPSBwZW5nb2Zmc2V0OwotCi0JZm9yIChpID0gMDsgaSA8IDggKiBzaXplb2YobG9uZyk7IGkrKykgeyAvKiAjIG9mIGJpdHMgKi8KLQkJKnBwdHIrKyA9IChhZGRyICYgKDEgPDwgKDgqc2l6ZW9mKGxvbmcpLWktMSkpID8gMHhGRiA6IDB4MDApOwotCX0KLQotCXBlbmcrKzsKLQotCWlmIChwb3MpIHsKLQkJbGluZSsrOwotCQlwZW5nID0gMDsKLQl9Ci0jZW5kaWYKLX0KLQotI2VuZGlmICAvKiAgMCAgKi8KLQotI2lmZGVmIERFQlVHX1NFUklBTAotLyoKLSAqIFRPRE86IHNlcmlhbCBkZWJ1ZyBjb2RlCi0gKi8KLQotc3RydWN0IG1hY19TQ0MgewotCXVfY2hhciBjaGFfYl9jdHJsOwotCXVfY2hhciBjaGFyX2R1bW15MTsKLQl1X2NoYXIgY2hhX2FfY3RybDsKLQl1X2NoYXIgY2hhcl9kdW1teTI7Ci0JdV9jaGFyIGNoYV9iX2RhdGE7Ci0JdV9jaGFyIGNoYXJfZHVtbXkzOwotCXVfY2hhciBjaGFfYV9kYXRhOwotfTsKLQotIyBkZWZpbmUgc2NjICgqKCh2b2xhdGlsZSBzdHJ1Y3QgbWFjX1NDQyopbWFjX2JpX2RhdGEuc2NjYmFzZSkpCi0KLXN0YXRpYyBpbnQgc2NjX3BvcnQgPSAtMTsKLQotc3RhdGljIHN0cnVjdCBjb25zb2xlIG1hY19jb25zb2xlX2RyaXZlciA9IHsKLQkubmFtZQk9ICJkZWJ1ZyIsCi0JLmZsYWdzCT0gQ09OX1BSSU5UQlVGRkVSLAotCS5pbmRleAk9IC0xLAotfTsKLQotLyoKLSAqIENydWRlIGhhY2sgdG8gZ2V0IGNvbnNvbGUgb3V0cHV0IHRvIHRoZSBzY3JlZW4gYmVmb3JlIHRoZSBmcmFtZWJ1ZmZlcgotICogaXMgaW5pdGlhbGl6ZWQgKGhhcHBlbnMgYSBsb3QgbGF0ZXIgaW4gMi4xISkuCi0gKiBXZSBqdXN0IHVzZSB0aGUgY29uc29sZSByb3V0aW5lcyBkZWNsYXJlZCBpbiBoZWFkLlMsIHRoaXMgd2lsbCBpbnRlcmZlcmUKLSAqIHdpdGggcmVndWxhciBmcmFtZWJ1ZmZlciBjb25zb2xlIG91dHB1dCBhbmQgc2hvdWxkIGJlIHVzZWQgZXhjbHVzaXZlbHkKLSAqIHRvIGRlYnVnIGtlcm5lbCBwcm9ibGVtcyBtYW5pZmVzdGluZyBiZWZvcmUgZnJhbWVidWZmZXIgaW5pdCAoYWthIFdTT0QpCi0gKgotICogVG8ga2VlcCB0aGlzIGhhY2sgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSByZWd1bGFyIGNvbnNvbGUgZHJpdmVyLCBlaXRoZXIKLSAqIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgYmVmb3JlL29uIGZyYW1lYnVmZmVyIGNvbnNvbGUgaW5pdCwgb3Igc2lsZW5jZSB0aGlzCi0gKiBmdW5jdGlvbiBhZnRlciB0aGUgZmJjb24gZHJpdmVyIGlzIHJ1bm5pbmcgKHdpbGwgbG9zZSBjb25zb2xlIG1lc3NhZ2VzIT8pLgotICogVG8gZGVidWcgcmVhbCBlYXJseSBidWdzLCBuZWVkIHRvIHdyaXRlIGEgJ21hY19yZWdpc3Rlcl9jb25zb2xlX2hhY2soKScKLSAqIHRoYXQgaXMgY2FsbGVkIGZyb20gc3RhcnRfa2VybmVsKCkgYmVmb3JlIHNldHVwX2FyY2goKSBhbmQganVzdCByZWdpc3RlcnMKLSAqIHRoaXMgZHJpdmVyIGlmIE1hYy4KLSAqLwotCi1zdGF0aWMgdm9pZCBtYWNfZGVidWdfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50KQotewotCW1hY19zZXJpYWxfcHJpbnQoc3RyKTsKLX0KLQotCi0KLS8qIE1hYzogbG9vcHNfcGVyX2ppZmZ5IG1pbi4gMTkwMDAgXj0gLjUgdXM7IE1GUERFTEFZIHdhcyAwLjYgdXMqLwotCi0jZGVmaW5lIHVTRUMgMQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFjX3NjY2Jfb3V0KGNoYXIgYykKLXsKLQlpbnQgaTsKLQotCWRvIHsKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkKLQkJCWJhcnJpZXIoKTsKLQl9IHdoaWxlICghKHNjYy5jaGFfYl9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KLQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQotCQliYXJyaWVyKCk7Ci0Jc2NjLmNoYV9iX2RhdGEgPSBjOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFjX3NjY2Ffb3V0KGNoYXIgYykKLXsKLQlpbnQgaTsKLQotCWRvIHsKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkKLQkJCWJhcnJpZXIoKTsKLQl9IHdoaWxlICghKHNjYy5jaGFfYV9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KLQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQotCQliYXJyaWVyKCk7Ci0Jc2NjLmNoYV9hX2RhdGEgPSBjOwotfQotCi1zdGF0aWMgdm9pZCBtYWNfc2NjYl9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAotCQkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQl3aGlsZSAoY291bnQtLSkgewotCQlpZiAoKnN0ciA9PSAnXG4nKQotCQkJbWFjX3NjY2Jfb3V0KCdccicpOwotCQltYWNfc2NjYl9vdXQoKnN0cisrKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG1hY19zY2NhX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCi0JCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQotewotCXdoaWxlIChjb3VudC0tKSB7Ci0JCWlmICgqc3RyID09ICdcbicpCi0JCQltYWNfc2NjYV9vdXQoJ1xyJyk7Ci0JCW1hY19zY2NhX291dCgqc3RyKyspOwotCX0KLX0KLQotCi0vKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgZG8gYSBxdWljayduJ2RpcnR5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBNRlAgb3IKLSAqIFNDQyBzZXJpYWwgcG9ydHMuIFRoZXkncmUgdXNlZCBieSB0aGUgZGVidWdnaW5nIGludGVyZmFjZSwga2dkYiwgYW5kIHRoZQotICogc2VyaWFsIGNvbnNvbGUgY29kZS4gKi8KLSNkZWZpbmUgU0NDQl9XUklURShyZWcsdmFsKQkJCQlcCi0JZG8gewkJCQkJCVwKLQkJaW50IGk7CQkJCQlcCi0JCXNjYy5jaGFfYl9jdHJsID0gKHJlZyk7CQkJXAotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQkJXAotCQkJYmFycmllcigpOwkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAodmFsKTsJCQlcCi0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCQliYXJyaWVyKCk7CQkJXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBTQ0NBX1dSSVRFKHJlZyx2YWwpCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlpbnQgaTsJCQkJCVwKLQkJc2NjLmNoYV9hX2N0cmwgPSAocmVnKTsJCQlcCi0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCQliYXJyaWVyKCk7CQkJXAotCQlzY2MuY2hhX2FfY3RybCA9ICh2YWwpOwkJCVwKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJCWJhcnJpZXIoKTsJCQlcCi0JfSB3aGlsZSgwKQotCi0vKiBsb29wc19wZXJfamlmZnkgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBzbyB3ZSBjYW4ndCB1c2UgdWRlbGF5KCkuIFRoaXMgZG9lcyBhCi0gKiBkZWxheSBvZiB+IDYwdXMuICovCi0vKiBNYWM6IGxvb3BzX3Blcl9qaWZmeSBtaW4uIDE5MDAwIF49IC41IHVzOyBNRlBERUxBWSB3YXMgMC42IHVzKi8KLSNkZWZpbmUgTE9OR19ERUxBWSgpCQkJCQlcCi0JZG8gewkJCQkJCVwKLQkJaW50IGk7CQkJCQlcCi0JCWZvciAoaSA9IDYwKnVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCSAgICBiYXJyaWVyKCk7CQkJCVwKLQl9IHdoaWxlKDApCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBtYWNfaW5pdF9zY2NfcG9ydChpbnQgY2ZsYWcsIGludCBwb3J0KQotewotCS8qCi0JICogYmF1ZCByYXRlczogMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkuMmssIDM4LjRrLCA1Ny42aywgMTE1LjJrCi0JICovCi0KLQlzdGF0aWMgaW50IGNsa3NyY190YWJsZVs5XSA9Ci0JCS8qIHJlZyAxMTogMHg1MCA9IEJSRywgMHgwMCA9IFJUeEMsIDB4MjggPSBUUnhDICovCi0JCXsgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHgwMCwgMHgwMCB9OwotCXN0YXRpYyBpbnQgY2xrbW9kZV90YWJsZVs5XSA9Ci0JCS8qIHJlZyA0OiAweDQwID0geDE2LCAweDgwID0geDMyLCAweGMwID0geDY0ICovCi0JCXsgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHhjMCwgMHg4MCB9OwotCXN0YXRpYyBpbnQgZGl2X3RhYmxlWzldID0KLQkJLyogcmVnMTIgKEJSRyBsb3cpICovCi0JCXsgOTQsIDYyLCA0NiwgMjIsIDEwLCA0LCAxLCAwLCAwIH07Ci0KLQlpbnQgYmF1ZCA9IGNmbGFnICYgQ0JBVUQ7Ci0JaW50IGNsa3NyYywgY2xrbW9kZSwgZGl2LCByZWczLCByZWc1OwotCi0JaWYgKGNmbGFnICYgQ0JBVURFWCkKLQkJYmF1ZCArPSBCMzg0MDA7Ci0JaWYgKGJhdWQgPCBCMTIwMCB8fCBiYXVkID4gQjM4NDAwKzIpCi0JCWJhdWQgPSBCOTYwMDsgLyogdXNlIGRlZmF1bHQgOTYwMGJwcyBmb3Igbm9uLWltcGxlbWVudGVkIHJhdGVzICovCi0JYmF1ZCAtPSBCMTIwMDsgLyogdGFibGVzIHN0YXJ0cyBhdCAxMjAwYnBzICovCi0KLQljbGtzcmMgID0gY2xrc3JjX3RhYmxlW2JhdWRdOwotCWNsa21vZGUgPSBjbGttb2RlX3RhYmxlW2JhdWRdOwotCWRpdiAgICAgPSBkaXZfdGFibGVbYmF1ZF07Ci0KLQlyZWczID0gKCgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4KSA/IDB4YzAgOiAweDQwKTsKLQlyZWc1ID0gKCgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4KSA/IDB4NjAgOiAweDIwKSB8IDB4ODIgLyogYXNzZXJ0IERUUi9SVFMgKi87Ci0KLQlpZiAocG9ydCA9PSAxKSB7Ci0JCSh2b2lkKXNjYy5jaGFfYl9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLwotCQlTQ0NCX1dSSVRFKDksIDB4YzApOwkvKiByZXNldCAqLwotCQlMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCi0JCVNDQ0JfV1JJVEUoNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpIDogMCB8Ci0JCQkgICAweDA0IC8qIDEgc3RvcGJpdCAqLyB8Ci0JCQkgICBjbGttb2RlKTsKLQkJU0NDQl9XUklURSgzLCByZWczKTsKLQkJU0NDQl9XUklURSg1LCByZWc1KTsKLQkJU0NDQl9XUklURSg5LCAwKTsJLyogbm8gaW50ZXJydXB0cyAqLwotCQlMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCi0JCVNDQ0JfV1JJVEUoMTAsIDApOwkvKiBOUlogbW9kZSAqLwotCQlTQ0NCX1dSSVRFKDExLCBjbGtzcmMpOwkvKiBtYWluIGNsb2NrIHNvdXJjZSAqLwotCQlTQ0NCX1dSSVRFKDEyLCBkaXYpOwkvKiBCUkcgdmFsdWUgKi8KLQkJU0NDQl9XUklURSgxMywgMCk7CS8qIEJSRyBoaWdoIGJ5dGUgKi8KLQkJU0NDQl9XUklURSgxNCwgMSk7Ci0JCVNDQ0JfV1JJVEUoMywgcmVnMyB8IDEpOwotCQlTQ0NCX1dSSVRFKDUsIHJlZzUgfCA4KTsKLQl9IGVsc2UgaWYgKHBvcnQgPT0gMCkgewotCQkodm9pZClzY2MuY2hhX2FfY3RybDsJLyogcmVzZXQgcmVnIHBvaW50ZXIgKi8KLQkJU0NDQV9XUklURSg5LCAweGMwKTsJLyogcmVzZXQgKi8KLQkJTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLwotCQlTQ0NBX1dSSVRFKDQsIChjZmxhZyAmIFBBUkVOQikgPyAoKGNmbGFnICYgUEFST0REKSA/IDB4MDEgOiAweDAzKSA6IDAgfAotCQkJICAweDA0IC8qIDEgc3RvcGJpdCAqLyB8Ci0JCQkgIGNsa21vZGUpOwotCQlTQ0NBX1dSSVRFKDMsIHJlZzMpOwotCQlTQ0NBX1dSSVRFKDUsIHJlZzUpOwotCQlTQ0NBX1dSSVRFKDksIDApOwkvKiBubyBpbnRlcnJ1cHRzICovCi0JCUxPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KLQkJU0NDQV9XUklURSgxMCwgMCk7CS8qIE5SWiBtb2RlICovCi0JCVNDQ0FfV1JJVEUoMTEsIGNsa3NyYyk7CS8qIG1haW4gY2xvY2sgc291cmNlICovCi0JCVNDQ0FfV1JJVEUoMTIsIGRpdik7CS8qIEJSRyB2YWx1ZSAqLwotCQlTQ0NBX1dSSVRFKDEzLCAwKTsJLyogQlJHIGhpZ2ggYnl0ZSAqLwotCQlTQ0NBX1dSSVRFKDE0LCAxKTsKLQkJU0NDQV9XUklURSgzLCByZWczIHwgMSk7Ci0JCVNDQ0FfV1JJVEUoNSwgcmVnNSB8IDgpOwotCX0KLX0KLSNlbmRpZiAvKiBERUJVR19TRVJJQUwgKi8KLQotc3RhdGljIGludCBfX2luaXQgbWFjX2RlYnVnX3NldHVwKGNoYXIgKmFyZykKLXsKLQlpZiAoIU1BQ0hfSVNfTUFDKQotCQlyZXR1cm4gMDsKLQotI2lmZGVmIERFQlVHX1NFUklBTAotCWlmICghc3RyY21wKGFyZywgInNlciIpIHx8ICFzdHJjbXAoYXJnLCAic2VyMSIpKSB7Ci0JCS8qIE1hYyBtb2RlbSBwb3J0ICovCi0JCW1hY19pbml0X3NjY19wb3J0KEI5NjAwfENTOCwgMCk7Ci0JCW1hY19jb25zb2xlX2RyaXZlci53cml0ZSA9IG1hY19zY2NhX2NvbnNvbGVfd3JpdGU7Ci0JCXNjY19wb3J0ID0gMDsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAic2VyMiIpKSB7Ci0JCS8qIE1hYyBwcmludGVyIHBvcnQgKi8KLQkJbWFjX2luaXRfc2NjX3BvcnQoQjk2MDB8Q1M4LCAxKTsKLQkJbWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gbWFjX3NjY2JfY29uc29sZV93cml0ZTsKLQkJc2NjX3BvcnQgPSAxOwotCX0KLSNlbmRpZgotI2lmZGVmIERFQlVHX0hFQURTCi0JaWYgKCFzdHJjbXAoYXJnLCAic2NuIikgfHwgIXN0cmNtcChhcmcsICJjb24iKSkgewotCQkvKiBkaXNwbGF5LCB1c2luZyBoZWFkLlMgY29uc29sZSByb3V0aW5lcyAqLwotCQltYWNfY29uc29sZV9kcml2ZXIud3JpdGUgPSBtYWNfZGVidWdfY29uc29sZV93cml0ZTsKLQl9Ci0jZW5kaWYKLQlpZiAobWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlKQotCQlyZWdpc3Rlcl9jb25zb2xlKCZtYWNfY29uc29sZV9kcml2ZXIpOwotCXJldHVybiAwOwotfQotCi1lYXJseV9wYXJhbSgiZGVidWciLCBtYWNfZGVidWdfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9tYWNpbnRzLmMgYi9hcmNoL202OGsvbWFjL21hY2ludHMuYwppbmRleCAyMzcxMTA3Li45MDBkODk5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL21hY2ludHMuYworKysgYi9hcmNoL202OGsvbWFjL21hY2ludHMuYwpAQCAtMzQsOSArMzQsNyBAQAogICoKICAqCTMJLSB1bnVzZWQgKD8pCiAgKgotICoJNAktIFNDQyAoc2xvdCBudW1iZXIgZGV0ZXJtaW5lZCBieSByZWFkaW5nIFJSMyBvbiB0aGUgU1NDIGl0c2VsZikKLSAqCQkgIC0gc2xvdCAxOiBTQ0MgY2hhbm5lbCBBCi0gKgkJICAtIHNsb3QgMjogU0NDIGNoYW5uZWwgQgorICoJNAktIFNDQwogICoKICAqCTUJLSB1bnVzZWQgKD8pCiAgKgkJICBbc2VyaWFsIGVycm9ycyBvciBzcGVjaWFsIGNvbmRpdGlvbnMgc2VlbSB0byByYWlzZSBsZXZlbCA2CkBAIC01NSw4ICs1Myw2IEBACiAgKgkJICAtIHNsb3QgNTogU2xvdCAkRQogICoKICAqCTQJLSBTQ0MgSU9QCi0gKgkJICAtIHNsb3QgMTogU0NDIGNoYW5uZWwgQQotICoJCSAgLSBzbG90IDI6IFNDQyBjaGFubmVsIEIKICAqCiAgKgk1CS0gSVNNIElPUCAoQURCPykKICAqCkBAIC0xMzYsMTMgKzEzMiw4IEBACiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KIAotI2RlZmluZSBERUJVR19TUFVSSU9VUwogI2RlZmluZSBTSFVUVVBfU09OSUMKIAotLyogU0NDIGludGVycnVwdCBtYXNrICovCi0KLXN0YXRpYyBpbnQgc2NjX21hc2s7Ci0KIC8qCiAgKiBWSUEvUkJWIGhvb2tzCiAgKi8KQEAgLTE5MSwxMyArMTgyLDYgQEAKIGV4dGVybiB2b2lkIGJhYm9vbl9pcnFfY2xlYXIoaW50KTsKIAogLyoKLSAqIFNDQyBpbnRlcnJ1cHQgcm91dGluZXMKLSAqLwotCi1zdGF0aWMgdm9pZCBzY2NfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQpOwotc3RhdGljIHZvaWQgc2NjX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCk7Ci0KLS8qCiAgKiBjb25zb2xlX2xvZ2xldmVsIGRldGVybWluZXMgTk1JIGhhbmRsZXIgZnVuY3Rpb24KICAqLwogCkBAIC0yMjEsOCArMjA1LDYgQEAKICNpZmRlZiBERUJVR19NQUNJTlRTCiAJcHJpbnRrKCJtYWNfaW5pdF9JUlEoKTogU2V0dGluZyB0aGluZ3MgdXAuLi5cbiIpOwogI2VuZGlmCi0Jc2NjX21hc2sgPSAwOwotCiAJbTY4a19zZXR1cF9pcnFfY29udHJvbGxlcigmbWFjX2lycV9jb250cm9sbGVyLCBJUlFfVVNFUiwKIAkJCQkgIE5VTV9NQUNfU09VUkNFUyAtIElSUV9VU0VSKTsKIAkvKiBNYWtlIHN1cmUgdGhlIFNPTklDIGludGVycnVwdCBpcyBjbGVhcmVkIG9yIHRoaW5ncyBnZXQgdWdseSAqLwpAQCAtMjgzLDE1ICsyNjUsMTYgQEAKIAkJCXZpYV9pcnFfZW5hYmxlKGlycSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQljYXNlIDQ6CiAJY2FzZSA1OgogCWNhc2UgNjoKIAkJaWYgKHBzY19wcmVzZW50KQogCQkJcHNjX2lycV9lbmFibGUoaXJxKTsKIAkJZWxzZSBpZiAob3NzX3ByZXNlbnQpCiAJCQlvc3NfaXJxX2VuYWJsZShpcnEpOwotCQllbHNlIGlmIChpcnFfc3JjID09IDQpCi0JCQlzY2NfaXJxX2VuYWJsZShpcnEpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChwc2NfcHJlc2VudCkKKwkJCXBzY19pcnFfZW5hYmxlKGlycSk7CiAJCWJyZWFrOwogCWNhc2UgODoKIAkJaWYgKGJhYm9vbl9wcmVzZW50KQpAQCAtMzE2LDE1ICsyOTksMTYgQEAKIAkJCXZpYV9pcnFfZGlzYWJsZShpcnEpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6CiAJCWlmIChwc2NfcHJlc2VudCkKIAkJCXBzY19pcnFfZGlzYWJsZShpcnEpOwogCQllbHNlIGlmIChvc3NfcHJlc2VudCkKIAkJCW9zc19pcnFfZGlzYWJsZShpcnEpOwotCQllbHNlIGlmIChpcnFfc3JjID09IDQpCi0JCQlzY2NfaXJxX2Rpc2FibGUoaXJxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAocHNjX3ByZXNlbnQpCisJCQlwc2NfaXJxX2Rpc2FibGUoaXJxKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgogCQlpZiAoYmFib29uX3ByZXNlbnQpCkBAIC0zNDcsNyArMzMxLDYgQEAKIAkJCXZpYV9pcnFfY2xlYXIoaXJxKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCWNhc2UgNDoKIAljYXNlIDU6CiAJY2FzZSA2OgogCQlpZiAocHNjX3ByZXNlbnQpCkBAIC0zNTUsNiArMzM4LDEwIEBACiAJCWVsc2UgaWYgKG9zc19wcmVzZW50KQogCQkJb3NzX2lycV9jbGVhcihpcnEpOwogCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChwc2NfcHJlc2VudCkKKwkJCXBzY19pcnFfY2xlYXIoaXJxKTsKKwkJYnJlYWs7CiAJY2FzZSA4OgogCQlpZiAoYmFib29uX3ByZXNlbnQpCiAJCQliYWJvb25faXJxX2NsZWFyKGlycSk7CkBAIC0zNzQsMTMgKzM2MSwxNyBAQAogCQllbHNlCiAJCQlyZXR1cm4gdmlhX2lycV9wZW5kaW5nKGlycSk7CiAJY2FzZSAzOgotCWNhc2UgNDoKIAljYXNlIDU6CiAJY2FzZSA2OgogCQlpZiAocHNjX3ByZXNlbnQpCiAJCQlyZXR1cm4gcHNjX2lycV9wZW5kaW5nKGlycSk7CiAJCWVsc2UgaWYgKG9zc19wcmVzZW50KQogCQkJcmV0dXJuIG9zc19pcnFfcGVuZGluZyhpcnEpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChwc2NfcHJlc2VudCkKKwkJCXBzY19pcnFfcGVuZGluZyhpcnEpOworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00NDgsNTkgKzQzOSwzIEBACiAJaW5fbm1pLS07CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQotCi0vKgotICogU2ltcGxlIHJvdXRpbmVzIGZvciBtYXNraW5nIGFuZCB1bm1hc2tpbmcKLSAqIFNDQyBpbnRlcnJ1cHRzIGluIGNhc2VzIHdoZXJlIHRoaXMgY2FuJ3QgYmUKLSAqIGRvbmUgaW4gaGFyZHdhcmUgKG9ubHkgdGhlIFBTQyBjYW4gZG8gdGhhdC4pCi0gKi8KLQotc3RhdGljIHZvaWQgc2NjX2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgaXJxX2lkeCA9IElSUV9JRFgoaXJxKTsKLQotCXNjY19tYXNrIHw9ICgxIDw8IGlycV9pZHgpOwotfQotCi1zdGF0aWMgdm9pZCBzY2NfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgaXJxX2lkeCA9IElSUV9JRFgoaXJxKTsKLQotCXNjY19tYXNrICY9IH4oMSA8PCBpcnFfaWR4KTsKLX0KLQotLyoKLSAqIFNDQyBtYXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIuIFdlIGhhdmUgdG8gZG8gYSBiaXQgb2YgbWFnaWMgaGVyZQotICogdG8gZmlndXJlIG91dCB3aGF0IGNoYW5uZWwgZ2F2ZSB1cyB0aGUgaW50ZXJydXB0OyBwdXR0aW5nIHRoaXMKLSAqIGhlcmUgaXMgY2xlYW5lciB0aGFuIGhhY2tpbmcgaXQgaW50byBkcml2ZXJzL2NoYXIvbWFjc2VyaWFsLmMuCi0gKi8KLQotdm9pZCBtYWNfc2NjX2Rpc3BhdGNoKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpzY2MgPSAodW5zaWduZWQgY2hhciAqKSBtYWNfYmlfZGF0YS5zY2NiYXNlICsgMjsKLQl1bnNpZ25lZCBjaGFyIHJlZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogUmVhZCBSUjMgZnJvbSB0aGUgY2hpcC4gQWx3YXlzIGRvIHRoaXMgb24gY2hhbm5lbCBBICovCi0JLyogVGhpcyBtdXN0IGJlIGFuIGF0b21pYyBvcGVyYXRpb24gc28gZGlzYWJsZSBpcnFzLiAgICovCi0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKnNjYyA9IDM7Ci0JcmVnID0gKnNjYzsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKiBOb3cgZGlzcGF0Y2guIEJpdHMgMC0yIGFyZSBmb3IgY2hhbm5lbCBCIGFuZCAqLwotCS8qIGJpdHMgMy01IGFyZSBmb3IgY2hhbm5lbCBBLiBXZSBjYW4gc2FmZWx5ICAgICovCi0JLyogaWdub3JlIHRoZSByZW1haW5pbmcgYml0cyBoZXJlLiAgICAgICAgICAgICAgKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCS8qIE5vdGUgdGhhdCB3ZSdyZSBpZ25vcmluZyBzY2NfbWFzayBmb3Igbm93LiAgICovCi0JLyogSWYgd2UgYWN0dWFsbHkgbWFzayB0aGUgaW50cyB0aGVuIHdlIHRlbmQgdG8gKi8KLQkvKiBnZXQgaGFtbWVyZWQgYnkgdmVyeSBwZXJzaXN0ZW50IFNDQyBpcnFzLCAgICAqLwotCS8qIGFuZCBzaW5jZSB0aGV5J3JlIGF1dG92ZWN0b3IgaW50ZXJydXB0cyB0aGV5ICovCi0JLyogcHJldHR5IG11Y2gga2lsbCB0aGUgc3lzdGVtLiAgICAgICAgICAgICAgICAgKi8KLQotCWlmIChyZWcgJiAweDM4KQotCQltNjhrX2hhbmRsZV9pbnQoSVJRX1NDQ0EpOwotCWlmIChyZWcgJiAweDA3KQotCQltNjhrX2hhbmRsZV9pbnQoSVJRX1NDQ0IpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9vc3MuYyBiL2FyY2gvbTY4ay9tYWMvb3NzLmMKaW5kZXggZjNkMjNkNi4uYTljMGY1YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9vc3MuYworKysgYi9hcmNoL202OGsvbWFjL29zcy5jCkBAIC0zMyw3ICszMyw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgb3NzX251YnVzX2lycShpbnQsIHZvaWQgKik7CiAKIGV4dGVybiBpcnFyZXR1cm5fdCB2aWExX2lycShpbnQsIHZvaWQgKik7Ci1leHRlcm4gaXJxcmV0dXJuX3QgbWFjX3NjY19kaXNwYXRjaChpbnQsIHZvaWQgKik7CiAKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBPU1MKQEAgLTY5LDkgKzY4LDYgQEAKIAlpZiAocmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9TQ1NJLCBvc3NfaXJxLCBJUlFfRkxHX0xPQ0ssCiAJCQkic2NzaSIsICh2b2lkICopIG9zcykpCiAJCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAic2NzaSIpOwotCWlmIChyZXF1ZXN0X2lycShPU1NfSVJRTEVWX0lPUFNDQywgbWFjX3NjY19kaXNwYXRjaCwgSVJRX0ZMR19MT0NLLAotCQkJInNjYyIsIG1hY19zY2NfZGlzcGF0Y2gpKQotCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgInNjYyIpOwogCWlmIChyZXF1ZXN0X2lycShPU1NfSVJRTEVWX05VQlVTLCBvc3NfbnVidXNfaXJxLCBJUlFfRkxHX0xPQ0ssCiAJCQkibnVidXMiLCAodm9pZCAqKSBvc3MpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgIm51YnVzIik7CkBAIC0xNzIsOSArMTY4LDcgQEAKIAlwcmludGsoIm9zc19pcnFfZW5hYmxlKCVkKVxuIiwgaXJxKTsKICNlbmRpZgogCXN3aXRjaChpcnEpIHsKLQkJY2FzZSBJUlFfU0NDOgotCQljYXNlIElSUV9TQ0NBOgotCQljYXNlIElSUV9TQ0NCOgorCQljYXNlIElSUV9NQUNfU0NDOgogCQkJb3NzLT5pcnFfbGV2ZWxbT1NTX0lPUFNDQ10gPSBPU1NfSVJRTEVWX0lPUFNDQzsKIAkJCWJyZWFrOwogCQljYXNlIElSUV9NQUNfQURCOgpAQCAtMjEyLDkgKzIwNiw3IEBACiAJcHJpbnRrKCJvc3NfaXJxX2Rpc2FibGUoJWQpXG4iLCBpcnEpOwogI2VuZGlmCiAJc3dpdGNoKGlycSkgewotCQljYXNlIElSUV9TQ0M6Ci0JCWNhc2UgSVJRX1NDQ0E6Ci0JCWNhc2UgSVJRX1NDQ0I6CisJCWNhc2UgSVJRX01BQ19TQ0M6CiAJCQlvc3MtPmlycV9sZXZlbFtPU1NfSU9QU0NDXSA9IE9TU19JUlFMRVZfRElTQUJMRUQ7CiAJCQlicmVhazsKIAkJY2FzZSBJUlFfTUFDX0FEQjoKQEAgLTI1MCw5ICsyNDIsNyBAQAogdm9pZCBvc3NfaXJxX2NsZWFyKGludCBpcnEpIHsKIAkvKiBGSVhNRTogaG93IHRvIGRvIHRoaXMgb24gT1NTPyAqLwogCXN3aXRjaChpcnEpIHsKLQkJY2FzZSBJUlFfU0NDOgotCQljYXNlIElSUV9TQ0NBOgotCQljYXNlIElSUV9TQ0NCOgorCQljYXNlIElSUV9NQUNfU0NDOgogCQkJb3NzLT5pcnFfcGVuZGluZyAmPSB+T1NTX0lQX0lPUFNDQzsKIAkJCWJyZWFrOwogCQljYXNlIElSUV9NQUNfQURCOgpAQCAtMjgwLDkgKzI3MCw3IEBACiBpbnQgb3NzX2lycV9wZW5kaW5nKGludCBpcnEpCiB7CiAJc3dpdGNoKGlycSkgewotCQljYXNlIElSUV9TQ0M6Ci0JCWNhc2UgSVJRX1NDQ0E6Ci0JCWNhc2UgSVJRX1NDQ0I6CisJCWNhc2UgSVJRX01BQ19TQ0M6CiAJCQlyZXR1cm4gb3NzLT5pcnFfcGVuZGluZyAmIE9TU19JUF9JT1BTQ0M7CiAJCQlicmVhazsKIAkJY2FzZSBJUlFfTUFDX0FEQjoKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvdmlhLmMgYi9hcmNoL202OGsvbWFjL3ZpYS5jCmluZGV4IDExYmNlM2MuLmU3MTE2NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvdmlhLmMKKysrIGIvYXJjaC9tNjhrL21hYy92aWEuYwpAQCAtODQsOCArODQsNiBAQAogdm9pZCB2aWFfaXJxX2Rpc2FibGUoaW50IGlycSk7CiB2b2lkIHZpYV9pcnFfY2xlYXIoaW50IGlycSk7CiAKLWV4dGVybiBpcnFyZXR1cm5fdCBtYWNfc2NjX2Rpc3BhdGNoKGludCwgdm9pZCAqKTsKLQogLyoKICAqIEluaXRpYWxpemUgdGhlIFZJQXMKICAqCkBAIC0zMTEsMTEgKzMwOSw2IEBACiAJaWYgKHJlcXVlc3RfaXJxKElSUV9BVVRPXzIsIHZpYTJfaXJxLCBJUlFfRkxHX0xPQ0t8SVJRX0ZMR19GQVNULAogCQkJInZpYTIiLCAodm9pZCAqKSB2aWEyKSkKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJ2aWEyIik7Ci0JaWYgKCFwc2NfcHJlc2VudCkgewotCQlpZiAocmVxdWVzdF9pcnEoSVJRX0FVVE9fNCwgbWFjX3NjY19kaXNwYXRjaCwgSVJRX0ZMR19MT0NLLAotCQkJCSJzY2MiLCBtYWNfc2NjX2Rpc3BhdGNoKSkKLQkJCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAic2NjIik7Ci0JfQogCWlmIChyZXF1ZXN0X2lycShJUlFfTUFDX05VQlVTLCB2aWFfbnVidXNfaXJxLAogCQkJSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwgIm51YnVzIiwgKHZvaWQgKikgdmlhMikpCiAJCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAibnVidXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9rbWFwLmMgYi9hcmNoL202OGsvbW0va21hcC5jCmluZGV4IGRmNjIwYWMuLjY5MzQ1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9rbWFwLmMKKysrIGIvYXJjaC9tNjhrL21tL2ttYXAuYwpAQCAtOTksOCArOTksNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBNYXAgc29tZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLiBUaGUKLSAqIGNvZGUgaXMgY29waWVkIGFuZCBhZGFwdGVkIGZyb20gbWFwX2NodW5rKCkuCisgKiBNYXAgc29tZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgogICovCiAvKiBSZXdyaXR0ZW4gYnkgQW5kcmVhcyBTY2h3YWIgdG8gcmVtb3ZlIGFsbCByYWNlcy4gKi8KIApAQCAtMTE2LDcgKzExNSw3IEBACiAJLyoKIAkgKiBEb24ndCBhbGxvdyBtYXBwaW5ncyB0aGF0IHdyYXAuLgogCSAqLwotCWlmICghc2l6ZSB8fCBzaXplID4gcGh5c2FkZHIgKyBzaXplKQorCWlmICghc2l6ZSB8fCBwaHlzYWRkciA+ICh1bnNpZ25lZCBsb25nKSgtc2l6ZSkpCiAJCXJldHVybiBOVUxMOwogCiAjaWZkZWYgQ09ORklHX0FNSUdBCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwppbmRleCA1YzllY2Q0Li45NTljYjI0IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIyMSw2ICsyMjEsMTAgQEAKIAogCXAtPnRocmVhZC51c3AgPSB1c3A7CiAJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKWNoaWxkc3RhY2s7CisKKwlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCisJCXRhc2tfdGhyZWFkX2luZm8ocCktPnRwX3ZhbHVlID0gcmVncy0+ZDU7CisKIAkvKgogCSAqIE11c3Qgc2F2ZSB0aGUgY3VycmVudCBTRkMvREZDIHZhbHVlLCBOT1QgdGhlIHZhbHVlIHdoZW4KIAkgKiB0aGUgcGFyZW50IHdhcyBsYXN0IGRlc2NoZWR1bGVkIC0gUkdIICAxMC0wOC05NgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCmluZGV4IDRkMzgyODkuLjg1ZWQyZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKQEAgLTMxOSw2ICszMTksMTEgQEAKIAkJfQogI2VuZGlmCiAKKwljYXNlIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUE6CisJCXJldCA9IHB1dF91c2VyKHRhc2tfdGhyZWFkX2luZm8oY2hpbGQpLT50cF92YWx1ZSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKwkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU87CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMKaW5kZXggYjY3Y2JjNy4uOTIzZGQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMKQEAgLTE5MCwzICsxOTAsMzkgQEAKIAkJCTogImQiIChfX2EpLCAiZCIgKF9fYiksICJkIiAoX19jKSk7CiAJcmV0dXJuIF9fcmVzOwogfQorCithc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX2dldF90aHJlYWRfYXJlYSh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRwX3ZhbHVlOworfQorCithc21saW5rYWdlIGludCBzeXNfc2V0X3RocmVhZF9hcmVhKHVuc2lnbmVkIGxvbmcgdHApCit7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT50cF92YWx1ZSA9IHRwOworCXJldHVybiAwOworfQorCisvKiBUaGlzIHN5c2NhbGwgZ2V0cyBpdHMgYXJndW1lbnRzIGluIEEwIChtZW0pLCBEMiAob2xkdmFsKSBhbmQKKyAgIEQxIChuZXd2YWwpLiAgKi8KK2FzbWxpbmthZ2UgaW50CitzeXNfYXRvbWljX2NtcHhjaGdfMzIodW5zaWduZWQgbG9uZyBuZXd2YWwsIGludCBvbGR2YWwsIGludCBkMywgaW50IGQ0LCBpbnQgZDUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgX191c2VyICogbWVtKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJdW5zaWduZWQgbG9uZyBtZW1fdmFsdWU7CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwltZW1fdmFsdWUgPSAqbWVtOworCWlmIChtZW1fdmFsdWUgPT0gb2xkdmFsKQorCQkqbWVtID0gbmV3dmFsOworCisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gbWVtX3ZhbHVlOworfQorCithc21saW5rYWdlIGludCBzeXNfYXRvbWljX2JhcnJpZXIodm9pZCkKK3sKKwkvKiBubyBjb2RlIG5lZWRlZCBmb3IgdW5pcHJvY3MgKi8KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUwppbmRleCA0ODY4MzdlLi41NmRkMDFkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCkBAIC0zNTEsNiArMzUxLDEwIEBACiAJLmxvbmcgc3lzX3B3cml0ZXYJCS8qIDMzMCAqLwogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwogCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KKwkubG9uZyBzeXNfZ2V0X3RocmVhZF9hcmVhCisJLmxvbmcgc3lzX3NldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19hdG9taWNfY21weGNoZ18zMgkvKiAzMzUgKi8KKwkubG9uZyBzeXNfYXRvbWljX2JhcnJpZXIKIAogCS5yZXB0IE5SX3N5c2NhbGxzLSguLXN5c19jYWxsX3RhYmxlKS80CiAJCS5sb25nIHN5c19uaV9zeXNjYWxsCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9tbS9tZW1vcnkuYyBiL2FyY2gvbTY4a25vbW11L21tL21lbW9yeS5jCmluZGV4IGY5M2I4OGIuLmQ1YjllMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L21tL21lbW9yeS5jCisrKyBiL2FyY2gvbTY4a25vbW11L21tL21lbW9yeS5jCkBAIC0yNCw3ICsyNCw2IEBACiAKIC8qCiAgKiBNYXAgc29tZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgotICogVGhlIGNvZGUgaXMgY29waWVkIGFuZCBhZGFwdGVkIGZyb20gbWFwX2NodW5rKCkuCiAgKi8KIAogdW5zaWduZWQgbG9uZyBrZXJuZWxfbWFwKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnIGIvYXJjaC9taWNyb2JsYXplL0tjb25maWcKaW5kZXggY2Q1ODM3ZS4uYjAwODE2OCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcKKysrIGIvYXJjaC9taWNyb2JsYXplL0tjb25maWcKQEAgLTEzMCw2ICsxMzAsNyBAQAogCiBjb25maWcgT0YKIAlkZWZfYm9vbCB5CisJc2VsZWN0IE9GX0ZMQVRUUkVFCiAKIGNvbmZpZyBQUk9DX0RFVklDRVRSRUUKIAlib29sICJTdXBwb3J0IGZvciBkZXZpY2UgdHJlZSBpbiAvcHJvYyIKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL21tdV9kZWZjb25maWcgYi9hcmNoL21pY3JvYmxhemUvY29uZmlncy9tbXVfZGVmY29uZmlnCmluZGV4IGJiN2MzNzQuLjZmY2VkMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL21tdV9kZWZjb25maWcKKysrIGIvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3MvbW11X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDEwOjI4OjUwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKKyMgV2VkIEZlYiAgMyAxMDowMjo1OSAyMDEwCiAjCiBDT05GSUdfTUlDUk9CTEFaRT15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKQEAgLTE5LDggKzE5LDEyIEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfQ1NVTT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfTk9fRE1BPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC00NCw2ICs0OCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtNjQsMTAgKzY5LDEyIEBACiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVA9eQogIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtOTAsMjEgKzk3LDIwIEBACiBDT05GSUdfQUlPPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfQkFTRV9TTUFMTD0xCkBAIC0xMjMsMTQgKzEyOSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzOSwxMSArMTcyLDYgQEAKIENPTkZJR19QTEFURk9STV9HRU5FUklDPXkKIENPTkZJR19PUFRfTElCX0ZVTkNUSU9OPXkKIENPTkZJR19PUFRfTElCX0FTTT15Ci1DT05GSUdfQUxMT1dfRURJVF9BVVRPPXkKLQotIwotIyBBdXRvbWF0aWMgcGxhdGZvcm0gc2V0dGluZ3MgZnJvbSBLY29uZmlnLmF1dG8KLSMKIAogIwogIyBEZWZpbml0aW9ucyBmb3IgTUlDUk9CTEFaRTAKQEAgLTIwMywxMiArMjMxLDExIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yODksNyArMzE2LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzEzLDYgKzM0NiwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtMzQ5LDcgKzM4Niw2IEBACiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiAjIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldApAQCAtMzU5LDEyICszOTUsMTIgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX1hJTElOWF9FTUFDTElURT15CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC00MDgsNiArNDQ0LDcgQEAKIENPTkZJR19TRVJJQUxfVUFSVExJVEVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNDMzLDcgKzQ3MCw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtNTI2LDggKzU2Miw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC02MzgsMTEgKzY3MiwxMyBAQAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjYyLDYgKzY5OCw5IEBACiAjIENPTkZJR19ERUJVR19TTEFCX0xFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC02ODAsMTAgKzcxOSwyOSBAQAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0hFQVJUX0JFQVQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JPT1RNRU09eQpAQCAtNjk0LDcgKzc1MiwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL25vbW11X2RlZmNvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL25vbW11X2RlZmNvbmZpZwppbmRleCBhZGI4MzliLi5jZTJkYTUzIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvY29uZmlncy9ub21tdV9kZWZjb25maWcKKysrIGIvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3Mvbm9tbXVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTA6Mjk6NDMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNgorIyBXZWQgRmViICAzIDEwOjAzOjIxIDIwMTAKICMKIENPTkZJR19NSUNST0JMQVpFPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldApAQCAtMTksOCArMTksMTIgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19DU1VNPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKIENPTkZJR19OT19ETUE9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTQ2LDYgKzUwLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC04MSwxNiArODYsMTYgQEAKIENPTkZJR19BSU89eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xMTYsMTQgKzEyMSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMiw3ICsxNjQsMTAgQEAKIENPTkZJR19QTEFURk9STV9HRU5FUklDPXkKICMgQ09ORklHX1NFTEZNT0QgaXMgbm90IHNldAogIyBDT05GSUdfT1BUX0xJQl9GVU5DVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTExPV19FRElUX0FVVE8gaXMgbm90IHNldAorCisjCisjIERlZmluaXRpb25zIGZvciBNSUNST0JMQVpFMAorIwogQ09ORklHX0tFUk5FTF9CQVNFX0FERFI9MHg5MDAwMDAwMAogQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9GQU1JTFk9InZpcnRleDUiCiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFI9MQpAQCAtMTkwLDcgKzIyNSw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0xCiAKICMKQEAgLTI3NCw5ICszMDgsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC0zMDEsOSArMzMyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTM4Nyw2ICs0MTgsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKIENPTkZJR19CTEtfREVWX05CRD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CkBAIC00MjMsNyArNDU4LDYgQEAKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CkBAIC00MzMsMTIgKzQ2NywxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNDgyLDYgKzUxNiw3IEBACiBDT05GSUdfU0VSSUFMX1VBUlRMSVRFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTUwOCw3ICs1NDMsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTYxNiw3ICs2NTAsNiBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtNjcyLDExICs3MDUsMTMgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjk1LDEyICs3MzAsMTYgQEAKIENPTkZJR19ERUJVR19PQkpFQ1RTX1NFTEZURVNUPXkKIENPTkZJR19ERUJVR19PQkpFQ1RTX0ZSRUU9eQogQ09ORklHX0RFQlVHX09CSkVDVFNfVElNRVJTPXkKKyMgQ09ORklHX0RFQlVHX09CSkVDVFNfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfT0JKRUNUU19FTkFCTEVfREVGQVVMVD0xCiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC03MjAsOCArNzU5LDI4IEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1BSSU5USz15CkBAIC03MzQsNyArNzkzLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaAppbmRleCBmYzk5OTdiLi4yNjdjN2M3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaApAQCAtMjE3LDcgKzIxNyw3IEBACiAgKiBMaXR0bGUgZW5kaWFuCiAgKi8KIAotI2RlZmluZSBvdXRfbGUzMihhLCB2KSBfX3Jhd193cml0ZWwoX19jcHVfdG9fbGUzMih2KSwgKGEpKTsKKyNkZWZpbmUgb3V0X2xlMzIoYSwgdikgX19yYXdfd3JpdGVsKF9fY3B1X3RvX2xlMzIodiksIChhKSkKICNkZWZpbmUgb3V0X2xlMTYoYSwgdikgX19yYXdfd3JpdGV3KF9fY3B1X3RvX2xlMTYodiksIChhKSkKIAogI2RlZmluZSBpbl9sZTMyKGEpIF9fbGUzMl90b19jcHUoX19yYXdfcmVhZGwoYSkpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb20uaAppbmRleCBlZjNlYzFkLi4wM2Y0NWE5IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9tLmgKQEAgLTI2LDMxICsyNiwxMSBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLSNkZWZpbmUgT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVAkxCi0jZGVmaW5lIE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQJMQotCi0jZGVmaW5lIG9mX2NvbXBhdF9jbXAoczEsIHMyLCBsKQlzdHJuY2FzZWNtcCgoczEpLCAoczIpLCAobCkpCi0jZGVmaW5lIG9mX3Byb3BfY21wKHMxLCBzMikJCXN0cmNtcCgoczEpLCAoczIpKQotI2RlZmluZSBvZl9ub2RlX2NtcChzMSwgczIpCQlzdHJjYXNlY21wKChzMSksIChzMikpCi0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQogI2RlZmluZSBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKIAotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWxsbm9kZXM7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi1leHRlcm4gcndsb2NrX3QgZGV2dHJlZV9sb2NrOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi0vKiBGb3IgdXBkYXRpbmcgdGhlIGRldmljZSB0cmVlIGF0IHJ1bnRpbWUgKi8KLWV4dGVybiB2b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKLWV4dGVybiB2b2lkIG9mX2RldGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKLQogLyogT3RoZXIgUHJvdG90eXBlcyAqLwogZXh0ZXJuIGludCBlYXJseV91YXJ0bGl0ZV9jb25zb2xlKHZvaWQpOwogCi1leHRlcm4gc3RydWN0IHJlc291cmNlICpyZXF1ZXN0X09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCQlpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWVfcG9zdGZpeCk7Ci1leHRlcm4gaW50IHJlbGVhc2VfT0ZfcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBpbnQgaW5kZXgpOwotCiAvKgogICogT0YgYWRkcmVzcyByZXRyZWl2YWwgJiB0cmFuc2xhdGlvbgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY2FjaGUuYwppbmRleCBkOWQ2MzgzLi4yYTU2YmNjIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NhY2hlLmMKQEAgLTE3MiwxNiArMTcyLDE1IEBACiAvKiBJdCBpcyB1c2VkIG9ubHkgZmlyc3QgcGFyYW1ldGVyIGZvciBPUCAtIGZvciB3aWMsIHdkYyAqLwogI2RlZmluZSBDQUNIRV9SQU5HRV9MT09QXzEoc3RhcnQsIGVuZCwgbGluZV9sZW5ndGgsIG9wKQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaW50IHN0ZXAgPSAtbGluZV9sZW5ndGg7CQkJCQlcCi0JaW50IGNvdW50ID0gZW5kIC0gc3RhcnQ7CQkJCQlcCi0JQlVHX09OKGNvdW50IDw9IDApOwkJCQkJCVwKKwlpbnQgdm9sYXRpbGUgdGVtcDsJCQkJCQlcCisJQlVHX09OKGVuZCAtIHN0YXJ0IDw9IDApOwkJCQkJXAogCQkJCQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgiIDE6CWFkZGsJJTAsICUwLCAlMTsJCVwKLQkJCQkJIiAjb3AgIiAlMCwgcjA7CQkJXAotCQkJCQliZ3RpZCAgICUxLCAxYjsJCQlcCi0JCQkJCWFkZGsgICAgJTEsICUxLCAlMjsJCVwKLQkJCQkJIiA6IDogInIiIChzdGFydCksICJyIiAoY291bnQpLAlcCi0JCQkJCSJyIiAoc3RlcCkgOiAibWVtb3J5Iik7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgMToJIiAjb3AgIiAlMSwgcjA7CQkJXAorCQkJCQljbXB1CSUwLCAlMSwgJTI7CQlcCisJCQkJCWJndGlkCSUwLCAxYjsJCQlcCisJCQkJCWFkZGsJJTEsICUxLCAlMzsJCVwKKwkJCQkiIDogOiAiciIgKHRlbXApLCAiciIgKHN0YXJ0KSwgInIiIChlbmQpLFwKKwkJCQkJInIiIChsaW5lX2xlbmd0aCkgOiAibWVtb3J5Iik7CVwKIH0gd2hpbGUgKDApOwogCiBzdGF0aWMgdm9pZCBfX2ZsdXNoX2ljYWNoZV9yYW5nZV9tc3JfaXJxKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQpAQCAtMzEzLDE2ICszMTIsNiBAQAogCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCUNBQ0hFX0FMTF9MT09QMihjcHVpbmZvLmRjYWNoZV9zaXplLCBjcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCwKIAkJCQkJd2RjLmNsZWFyKQotCi0jaWYgMAotCXVuc2lnbmVkIGludCBpOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBKdXN0IGxvb3AgdGhyb3VnaCBjYWNoZSBzaXplIGFuZCBpbnZhbGlkYXRlIGl0ICovCi0JZm9yIChpID0gMDsgaSA8IGNwdWluZm8uZGNhY2hlX3NpemU7IGkgKz0gY3B1aW5mby5kY2FjaGVfbGluZV9sZW5ndGgpCi0JCQlfX2ludmFsaWRhdGVfZGNhY2hlKDAsIGkpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2Vfd2IodW5zaWduZWQgbG9uZyBzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnktbm9tbXUuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnktbm9tbXUuUwppbmRleCA5NWIwODU1Li4zOTFkNjE5IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LW5vbW11LlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS1ub21tdS5TCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogcmV0X2Zyb21faW50cjoKIAlsd2kJcjExLCByMSwgUFRfTU9ERQotCWJuZWlkCXIxMSwgM2YKKwlibmVpZAlyMTEsIG5vX2ludHJfcmVzY2hlZAogCiAJbHdpCXI2LCByMzEsIFRTX1RIUkVBRF9JTkZPCS8qIGdldCB0aHJlYWQgaW5mbyAqLwogCWx3aQlyMTksIHI2LCBUSV9GTEFHUwkvKiBnZXQgZmxhZ3MgaW4gdGhyZWFkIGluZm8gKi8KQEAgLTEzMywxNiArMTMzLDE4IEBACiAJYnJhbGlkCXIxNSwgc2NoZWR1bGUKIAlub3AKIDE6CWFuZGkJcjExLCByMTksIF9USUZfU0lHUEVORElORwotCWJlcWlkCXIxMSwgbm9faW50cl9yZXNoZWQKKwliZXFpZAlyMTEsIG5vX2ludHJfcmVzY2hlZAogCWFkZGsJcjUsIHIxLCByMAogCWFkZGsJcjcsIHIwLCByMAogCWJyYWxpZAlyMTUsIGRvX3NpZ25hbAogCWFkZGsJcjYsIHIwLCByMAogCi1ub19pbnRyX3Jlc2hlZDoKK25vX2ludHJfcmVzY2hlZDoKKwkvKiBEaXNhYmxlIGludGVycnVwdHMsIHdlIGFyZSBub3cgY29tbWl0dGVkIHRvIHRoZSBzdGF0ZSByZXN0b3JlICovCisJZGlzYWJsZV9pcnEKKwogCS8qIHNhdmUgbW9kZSBpbmRpY2F0b3IgKi8KIAlsd2kJcjExLCByMSwgUFRfTU9ERQotMzoKIAlzd2kJcjExLCByMCwgUEVSX0NQVShLTSkKIAogCS8qIHNhdmUgcjMxICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX3BsYXRmb3JtLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX3BsYXRmb3JtLmMKaW5kZXggYWNmNDU3NC4uMWM2ZDY4NCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvb2ZfcGxhdGZvcm0uYwpAQCAtMTg1LDcgKzE4NSw3IEBACiBzdGF0aWMgaW50IG9mX2Rldl9waGFuZGxlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlwaGFuZGxlICpwaCA9IGRhdGE7Ci0JcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5ub2RlLT5saW51eF9waGFuZGxlID09ICpwaDsKKwlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldiktPm5vZGUtPnBoYW5kbGUgPT0gKnBoOwogfQogCiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9waGFuZGxlKHBoYW5kbGUgcGgpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCmluZGV4IGI4MTdkZjEuLmExNWVmNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCkBAIC00Miw2OTggKzQyLDIxIEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+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+cGRlLCBuZXdwcm9wLCBvbGRwcm9wKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCi0KLQlyZXR1cm4gMDsKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKERFQlVHKQogc3RhdGljIHN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciBmbGF0X2R0X2Jsb2I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYwppbmRleCA1MzcyYjI0Li5iYjhjNGI5IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jCkBAIC01NCw2ICs1NCw3IEBACiAKIAltaWNyb2JsYXplX2NhY2hlX2luaXQoKTsKIAorCWludmFsaWRhdGVfZGNhY2hlKCk7CiAJZW5hYmxlX2RjYWNoZSgpOwogCiAJaW52YWxpZGF0ZV9pY2FjaGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggOGI1ZDE3NC4uNTkxY2EwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTQxLDcgKzQxLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBHQ0QKIAlzZWxlY3QgVkxZTlEKIAloZWxwCkBAIC0xODAsNyArMTgwLDcgQEAKIAogY29uZmlnIE1BQ0hfTE9PTkdTT04KIAlib29sICJMb29uZ3NvbiBmYW1pbHkgb2YgbWFjaGluZXMiCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTAKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IG9mIExvb25nc29uIGZhbWlseSBvZiBtYWNoaW5lcy4KIApAQCAtMTI5NSw3ICsxMjk1LDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAogCXNlbGVjdCBOUl9DUFVTX0RFRkFVTFRfMTYKIAlzZWxlY3QgV0VBS19PUkRFUklORwotCXNlbGVjdCBXRUFLX1JFT1JERVJJTkdfQkVZT05EX0xMU0MKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hVR0VQQUdFUwogCWhlbHAKQEAgLTE3MjYsNiArMTcyNSw5IEBACiBjb25maWcgNjRCSVRfUEhZU19BRERSCiAJYm9vbAogCitjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAorICAgICAgIGRlZl9ib29sIDY0QklUX1BIWVNfQUREUgorCiBjb25maWcgQ1BVX0hBU19TTUFSVE1JUFMKIAlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19TTUFSVE1JUFMKIAlib29sICJTdXBwb3J0IGZvciB0aGUgU21hcnRNSVBTIEFTRSIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKaW5kZXggZDJiODhhMC4uNDNkYzI3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKQEAgLTEwMiw0ICsxMDIsMzAgQEAKIAkgIGFyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWJ1Zy5oIGZvciBkZWJ1Z2dpbmcgbWFjcm9zLgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIERFQlVHX1pCT09UCisJYm9vbCAiRW5hYmxlIGNvbXByZXNzZWQga2VybmVsIHN1cHBvcnQgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFNZU19TVVBQT1JUU19aQk9PVAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSB3YW50IHRvIGFkZCBjb21wcmVzc2VkIGtlcm5lbCBzdXBwb3J0IHRvIGEgbmV3IGJvYXJkLCBhbmQgdGhlCisJICBib2FyZCBzdXBwb3J0cyB1YXJ0MTY1NTAgY29tcGF0aWJsZSBzZXJpYWwgcG9ydCwgcGxlYXNlIHNlbGVjdAorCSAgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCBmb3IgeW91ciBib2FyZCBhbmQgZW5hYmxlIHRoaXMgb3B0aW9uIHRvCisJICBkZWJ1ZyBpdC4KKworCSAgSWYgeW91ciBib2FyZCBkb2Vzbid0IHN1cHBvcnQgdWFydDE2NTUwIGNvbXBhdGlibGUgc2VyaWFsIHBvcnQsIHlvdQorCSAgY2FuIHRyeSB0byBzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UIGFuZCB1c2UgdGhlIG90aGVyIG1ldGhvZHMgdG8KKwkgIGRlYnVnIGl0LiBmb3IgZXhhbXBsZSwgYWRkIGEgbmV3IHNlcmlhbCBwb3J0IHN1cHBvcnQganVzdCBhcworCSAgYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LTE2NTUwLmMgZG9lcy4KKworCSAgQWZ0ZXIgdGhlIGNvbXByZXNzZWQga2VybmVsIHN1cHBvcnQgd29ya3MsIHBsZWFzZSBkaXNhYmxlIHRoaXMgb3B0aW9uCisJICB0byByZWR1Y2UgdGhlIGtlcm5lbCBpbWFnZSBzaXplIGFuZCBzcGVlZCB1cCB0aGUgYm9vdGluZyBwcm9jZWR1cmUgYQorCSAgbGl0dGxlLgorCitjb25maWcgU1BJTkxPQ0tfVEVTVAorCWJvb2wgIkVuYWJsZSBzcGlubG9jayB0aW1pbmcgdGVzdHMgaW4gZGVidWdmcyIKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgQWRkIHNldmVyYWwgZmlsZXMgdG8gdGhlIGRlYnVnZnMgdG8gdGVzdCBzcGlubG9jayBzcGVlZC4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDE4OTNlZmQuLjJmMmVhYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTE4NSw2ICsxODUsMTUgQEAKIGxpYnMteQkJCQkrPSBhcmNoL21pcHMvZncvbGliLwogCiAjCisjIEtlcm5lbCBjb21wcmVzc2lvbgorIworaWZkZWYgU1lTX1NVUFBPUlRTX1pCT09UCitDT01QUkVTU0lPTl9GTkFNRQkJPSB2bWxpbnV6CitlbHNlCitDT01QUkVTU0lPTl9GTkFNRQkJPSB2bWxpbnV4CitlbmRpZgorCisjCiAjIEJvYXJkLWRlcGVuZGVudCBvcHRpb25zIGFuZCBleHRyYSBmaWxlcwogIwogCkBAIC0zMzIsMTEgKzM0MSwxMSBAQAogIwogIyBMb29uZ3NvbiBmYW1pbHkKICMKLWNvcmUtJChDT05GSUdfTUFDSF9MT09OR1NPTikgKz1hcmNoL21pcHMvbG9vbmdzb24vCitjb3JlLSQoQ09ORklHX01BQ0hfTE9PTkdTT04pICs9IGFyY2gvbWlwcy9sb29uZ3Nvbi8KIGNmbGFncy0kKENPTkZJR19NQUNIX0xPT05HU09OKSArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24gXAogICAgICAgICAgICAgICAgICAgICAtbW5vLWJyYW5jaC1saWtlbHkKLWxvYWQtJChDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSkgKz0weGZmZmZmZmZmODAxMDAwMDAKLWxvYWQtJChDT05GSUdfTEVNT1RFX01BQ0gyRikgKz0weGZmZmZmZmZmODAyMDAwMDAKK2xvYWQtJChDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSkgKz0gMHhmZmZmZmZmZjgwMTAwMDAwCitsb2FkLSQoQ09ORklHX0xFTU9URV9NQUNIMkYpICs9IDB4ZmZmZmZmZmY4MDIwMDAwMAogCiAjCiAjIE1JUFMgTWFsdGEgYm9hcmQKQEAgLTM0NCw3ICszNTMsNyBAQAogY29yZS0kKENPTkZJR19NSVBTX01BTFRBKQkrPSBhcmNoL21pcHMvbXRpLW1hbHRhLwogY2ZsYWdzLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1tYWx0YQogbG9hZC0kKENPTkZJR19NSVBTX01BTFRBKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLWFsbC0kKENPTkZJR19NSVBTX01BTFRBKQk6PSB2bWxpbnV6LmJpbgorYWxsLSQoQ09ORklHX01JUFNfTUFMVEEpCTo9ICQoQ09NUFJFU1NJT05fRk5BTUUpLmJpbgogCiAjCiAjIE1JUFMgU0lNCkBAIC01OTQsNyArNjAzLDcgQEAKIGVsc2UKIGxvYWQtJChDT05GSUdfU05JX1JNKQkJKz0gMHhmZmZmZmZmZjgwMDMwMDAwCiBlbmRpZgotYWxsLSQoQ09ORklHX1NOSV9STSkJCTo9IHZtbGludXouZWNvZmYKK2FsbC0kKENPTkZJR19TTklfUk0pCQk6PSAkKENPTVBSRVNTSU9OX0ZOQU1FKS5lY29mZgogCiAjCiAjIENvbW1vbiBUWHg5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnIGIvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZwppbmRleCAwMGI0OThlLi5kZjNiMWE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKQEAgLTEsNSArMSw1IEBACi0jIGF1MTAwMC1zdHlsZSBncGlvCi1jb25maWcgQUxDSEVNWV9HUElPX0FVMTAwMAorIyBhdTEwMDAtc3R5bGUgZ3BpbyBhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXJzCitjb25maWcgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCWJvb2wKIAogIyBzZWxlY3QgdGhpcyBpbiB5b3VyIGJvYXJkIGNvbmZpZyBpZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGdwaW8KQEAgLTIwLDEyICsyMCwxNCBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNPQ19BVTE1MDAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfQk9TUE9SVVMKIAlib29sICJBbGNoZW15IEJvc3BvcnVzIGJvYXJkIgogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjEwMDAKIAlib29sICJBbGNoZW15IERCMTAwMCBib2FyZCIKQEAgLTMzLDEyICszNSwxNCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjExMDAKIAlib29sICJBbGNoZW15IERCMTEwMCBib2FyZCIKIAlzZWxlY3QgU09DX0FVMTEwMAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfREIxMjAwCiAJYm9vbCAiQWxjaGVteSBEQjEyMDAgYm9hcmQiCkBAIC00Niw2ICs1MCw3IEBACiAJc2VsZWN0IERNQV9DT0hFUkVOVAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTUwMAogCWJvb2wgIkFsY2hlbXkgREIxNTAwIGJvYXJkIgpAQCAtNTUsNiArNjAsNyBAQAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTU1MAogCWJvb2wgIkFsY2hlbXkgREIxNTUwIGJvYXJkIgpAQCAtNjMsMTIgKzY5LDE0IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX01JUkFHRQogCWJvb2wgIkFsY2hlbXkgTWlyYWdlIGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU09DX0FVMTUwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjEwMDAKIAlib29sICJBbGNoZW15IFBCMTAwMCBib2FyZCIKQEAgLTc3LDYgKzg1LDcgQEAKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTEwMAogCWJvb2wgIkFsY2hlbXkgUEIxMTAwIGJvYXJkIgpAQCAtODUsNiArOTQsNyBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfUEIxMjAwCiAJYm9vbCAiQWxjaGVteSBQQjEyMDAgYm9hcmQiCkBAIC05Miw2ICsxMDIsNyBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjE1MDAKIAlib29sICJBbGNoZW15IFBCMTUwMCBib2FyZCIKQEAgLTk5LDYgKzExMCw3IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTU1MAogCWJvb2wgIkFsY2hlbXkgUEIxNTUwIGJvYXJkIgpAQCAtMTA3LDM5ICsxMTksNDEgQEAKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1hYUzE1MDAKIAlib29sICJNeUNhYmxlIFhYUzE1MDAgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGVuZGNob2ljZQogCiBjb25maWcgU09DX0FVMTAwMAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTExMDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxNTAwCiAJYm9vbAogCXNlbGVjdCBTT0NfQVUxWDAwCi0Jc2VsZWN0IEFMQ0hFTVlfR1BJT19BVTEwMDAKKwlzZWxlY3QgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCiBjb25maWcgU09DX0FVMTU1MAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTEyMDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxWDAwCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlCmluZGV4IGI2N2ZiNTEuLjA2YzBlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vTWFrZWZpbGUKQEAgLTUsMTQgKzUsMTUgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IEF1MXh4MCBDUFVzLCBnZW5lcmljIGZpbGVzLgogIwogCi1vYmoteSArPSBwcm9tLm8gaXJxLm8gcHV0cy5vIHRpbWUubyByZXNldC5vIFwKLQljbG9ja3MubyBwbGF0Zm9ybS5vIHBvd2VyLm8gc2V0dXAubyBcCitvYmoteSArPSBwcm9tLm8gdGltZS5vIGNsb2Nrcy5vIHBsYXRmb3JtLm8gcG93ZXIubyBzZXR1cC5vIFwKIAlzbGVlcGVyLm8gZG1hLm8gZGJkbWEubwogCitvYmotJChDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMCkgKz0gaXJxLm8KKwogIyBvcHRpb25hbCBncGlvbGliIHN1cHBvcnQKIGlmZXEgKCQoQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCksKQogIGlmZXEgKCQoQ09ORklHX0dQSU9MSUIpLHkpCi0gIG9iai0kKENPTkZJR19BTENIRU1ZX0dQSU9fQVUxMDAwKSArPSBncGlvbGliLWF1MTAwMC5vCisgIG9iai0kKENPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwKSArPSBncGlvbGliLWF1MTAwMC5vCiAgZW5kaWYKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYwppbmRleCBkODk5MTg1Li40NjBjNjI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jCkBAIC00MCw4ICs0MCw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGF1MXgwMF9jbG9jazsgLyogIEh6ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB1YXJ0X2JhdWRfYmFzZTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyh0aW1lX2xvY2spOwotCiAvKgogICogU2V0IHRoZSBhdTEwMDBfY2xvY2sKICAqLwpAQCAtODQsOSArODIsNiBAQAogdW5zaWduZWQgbG9uZyBhdTF4eHhfY2FsY19jbG9jayh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY3B1X3NwZWVkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZV9sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIE9uIGVhcmx5IEF1MTAwMCwgc3lzX2NwdXBsbCB3YXMgd3JpdGUtb25seS4gU2luY2UgdGhlc2UKQEAgLTEwOCw4ICsxMDMsNiBAQAogCXNldF9hdTF4MDBfdWFydF9iYXVkX2Jhc2UoY3B1X3NwZWVkIC8gKDIgKiAoKGludCkoYXVfcmVhZGwoU1lTX1BPV0VSQ1RSTCkKIAkJCQkJCQkgICYgMHgwMykgKyAyKSAqIDE2KSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lX2xvY2ssIGZsYWdzKTsKLQogCXNldF9hdTF4MDBfc3BlZWQoY3B1X3NwZWVkKTsKIAogCXJldHVybiBjcHVfc3BlZWQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCmluZGV4IDVjNjg1NjkuLjk5YWU4NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC01OCw3ICs1OSw2IEBACiAKIHN0YXRpYyBkYmRtYV9nbG9iYWxfdCAqZGJkbWFfZ3B0ciA9IChkYmRtYV9nbG9iYWxfdCAqKURETUFfR0xPQkFMX0JBU0U7CiBzdGF0aWMgaW50IGRiZG1hX2luaXRpYWxpemVkOwotc3RhdGljIHZvaWQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCk7CiAKIHN0YXRpYyBkYmRldl90YWJfdCBkYmRldl90YWJbXSA9IHsKICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MApAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQsIHZvaWQgKiksIHZvaWQgKmNhbGxwYXJhbSkKIHsKIAl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0JdTMyCQl1c2VkLCBjaGFuLCBydjsKKwl1MzIJCXVzZWQsIGNoYW47CiAJdTMyCQlkY3A7CiAJaW50CQlpOwogCWRiZGV2X3RhYl90CSpzdHAsICpkdHA7CkBAIC0yNTAsOCArMjUwLDcgQEAKIAkgKiB3aGljaCBjYW4ndCBiZSBkb25lIHN1Y2Nlc3NmdWxseSBkdXJpbmcgYm9hcmQgc2V0IHVwLgogCSAqLwogCWlmICghZGJkbWFfaW5pdGlhbGl6ZWQpCi0JCWF1MXh4eF9kYmRtYV9pbml0KCk7Ci0JZGJkbWFfaW5pdGlhbGl6ZWQgPSAxOworCQlyZXR1cm4gMDsKIAogCXN0cCA9IGZpbmRfZGJkZXZfaWQoc3JjaWQpOwogCWlmIChzdHAgPT0gTlVMTCkKQEAgLTI2MSw3ICsyNjAsNiBAQAogCQlyZXR1cm4gMDsKIAogCXVzZWQgPSAwOwotCXJ2ID0gMDsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IGJvdGggY2hhbm5lbHMuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKQEAgLTI4Miw2MyArMjgwLDY1IEBACiAJCXVzZWQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIXVzZWQpIHsKLQkJLyogTGV0J3Mgc2VlIGlmIHdlIGNhbiBhbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIGl0LiAqLwotCQljdHAgPSBOVUxMOwotCQljaGFuID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IE5VTV9EQkRNQV9DSEFOUzsgaSsrKQotCQkJaWYgKGNoYW5fdGFiX3B0cltpXSA9PSBOVUxMKSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiBrbWFsbG9jIGZhaWxzLCBpdCBpcyBjYXVnaHQgYmVsb3cgc2FtZQotCQkJCSAqIGFzIGEgY2hhbm5lbCBub3QgYXZhaWxhYmxlLgotCQkJCSAqLwotCQkJCWN0cCA9IGttYWxsb2Moc2l6ZW9mKGNoYW5fdGFiX3QpLCBHRlBfQVRPTUlDKTsKLQkJCQljaGFuX3RhYl9wdHJbaV0gPSBjdHA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlpZiAodXNlZCkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKGN0cCAhPSBOVUxMKSB7Ci0JCQltZW1zZXQoY3RwLCAwLCBzaXplb2YoY2hhbl90YWJfdCkpOwotCQkJY3RwLT5jaGFuX2luZGV4ID0gY2hhbiA9IGk7Ci0JCQlkY3AgPSBERE1BX0NIQU5ORUxfQkFTRTsKLQkJCWRjcCArPSAoMHgwMTAwICogY2hhbik7Ci0JCQljdHAtPmNoYW5fcHRyID0gKGF1MXhfZG1hX2NoYW5fdCAqKWRjcDsKLQkJCWNwID0gKGF1MXhfZG1hX2NoYW5fdCAqKWRjcDsKLQkJCWN0cC0+Y2hhbl9zcmMgPSBzdHA7Ci0JCQljdHAtPmNoYW5fZGVzdCA9IGR0cDsKLQkJCWN0cC0+Y2hhbl9jYWxsYmFjayA9IGNhbGxiYWNrOwotCQkJY3RwLT5jaGFuX2NhbGxwYXJhbSA9IGNhbGxwYXJhbTsKLQotCQkJLyogSW5pdGlhbGl6ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uICovCi0JCQlpID0gMDsKLQkJCWlmIChzdHAtPmRldl9pbnRsZXZlbCkKLQkJCQlpIHw9IERETUFfQ0ZHX1NFRDsKLQkJCWlmIChzdHAtPmRldl9pbnRwb2xhcml0eSkKLQkJCQlpIHw9IERETUFfQ0ZHX1NQOwotCQkJaWYgKGR0cC0+ZGV2X2ludGxldmVsKQotCQkJCWkgfD0gRERNQV9DRkdfREVEOwotCQkJaWYgKGR0cC0+ZGV2X2ludHBvbGFyaXR5KQotCQkJCWkgfD0gRERNQV9DRkdfRFA7Ci0JCQlpZiAoKHN0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpIHx8Ci0JCQkJKGR0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpKQotCQkJCQlpIHw9IERETUFfQ0ZHX1NZTkM7Ci0JCQljcC0+ZGRtYV9jZmcgPSBpOwotCQkJYXVfc3luYygpOwotCi0JCQkvKiBSZXR1cm4gYSBub24temVybyB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvCi0JCQkgKiBmaW5kIHRoZSBjaGFubmVsIGluZm9ybWF0aW9uIGluIHN1YnNlcXVlbnQKLQkJCSAqIG9wZXJhdGlvbnMuCisJLyogTGV0J3Mgc2VlIGlmIHdlIGNhbiBhbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIGl0LiAqLworCWN0cCA9IE5VTEw7CisJY2hhbiA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0RCRE1BX0NIQU5TOyBpKyspCisJCWlmIChjaGFuX3RhYl9wdHJbaV0gPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIElmIGttYWxsb2MgZmFpbHMsIGl0IGlzIGNhdWdodCBiZWxvdyBzYW1lCisJCQkgKiBhcyBhIGNoYW5uZWwgbm90IGF2YWlsYWJsZS4KIAkJCSAqLwotCQkJcnYgPSAodTMyKSgmY2hhbl90YWJfcHRyW2NoYW5dKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFJlbGVhc2UgZGV2aWNlcyAqLwotCQkJc3RwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKLQkJCWR0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7CisJCQljdHAgPSBrbWFsbG9jKHNpemVvZihjaGFuX3RhYl90KSwgR0ZQX0FUT01JQyk7CisJCQljaGFuX3RhYl9wdHJbaV0gPSBjdHA7CisJCQlicmVhazsKIAkJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKworCWlmIChjdHAgIT0gTlVMTCkgeworCQltZW1zZXQoY3RwLCAwLCBzaXplb2YoY2hhbl90YWJfdCkpOworCQljdHAtPmNoYW5faW5kZXggPSBjaGFuID0gaTsKKwkJZGNwID0gRERNQV9DSEFOTkVMX0JBU0U7CisJCWRjcCArPSAoMHgwMTAwICogY2hhbik7CisJCWN0cC0+Y2hhbl9wdHIgPSAoYXUxeF9kbWFfY2hhbl90ICopZGNwOworCQljcCA9IChhdTF4X2RtYV9jaGFuX3QgKilkY3A7CisJCWN0cC0+Y2hhbl9zcmMgPSBzdHA7CisJCWN0cC0+Y2hhbl9kZXN0ID0gZHRwOworCQljdHAtPmNoYW5fY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJY3RwLT5jaGFuX2NhbGxwYXJhbSA9IGNhbGxwYXJhbTsKKworCQkvKiBJbml0aWFsaXplIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gKi8KKwkJaSA9IDA7CisJCWlmIChzdHAtPmRldl9pbnRsZXZlbCkKKwkJCWkgfD0gRERNQV9DRkdfU0VEOworCQlpZiAoc3RwLT5kZXZfaW50cG9sYXJpdHkpCisJCQlpIHw9IERETUFfQ0ZHX1NQOworCQlpZiAoZHRwLT5kZXZfaW50bGV2ZWwpCisJCQlpIHw9IERETUFfQ0ZHX0RFRDsKKwkJaWYgKGR0cC0+ZGV2X2ludHBvbGFyaXR5KQorCQkJaSB8PSBERE1BX0NGR19EUDsKKwkJaWYgKChzdHAtPmRldl9mbGFncyAmIERFVl9GTEFHU19TWU5DKSB8fAorCQkJKGR0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpKQorCQkJCWkgfD0gRERNQV9DRkdfU1lOQzsKKwkJY3AtPmRkbWFfY2ZnID0gaTsKKwkJYXVfc3luYygpOworCisJCS8qCisJCSAqIFJldHVybiBhIG5vbi16ZXJvIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgY2hhbm5lbAorCQkgKiBpbmZvcm1hdGlvbiBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuCisJCSAqLworCQlyZXR1cm4gKHUzMikoJmNoYW5fdGFiX3B0cltjaGFuXSk7CiAJfQotCXJldHVybiBydjsKKworCS8qIFJlbGVhc2UgZGV2aWNlcyAqLworCXN0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7CisJZHRwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyk7CiAKQEAgLTQxMiw4ICs0MTIsMTEgQEAKIAkJaWYgKGRlc2NfYmFzZSA9PSAwKQogCQkJcmV0dXJuIDA7CiAKKwkJY3RwLT5jZGJfbWVtYmFzZSA9IGRlc2NfYmFzZTsKIAkJZGVzY19iYXNlID0gQUxJR05fQUREUihkZXNjX2Jhc2UsIHNpemVvZihhdTF4X2RkbWFfZGVzY190KSk7Ci0JfQorCX0gZWxzZQorCQljdHAtPmNkYl9tZW1iYXNlID0gZGVzY19iYXNlOworCiAJZHAgPSAoYXUxeF9kZG1hX2Rlc2NfdCAqKWRlc2NfYmFzZTsKIAogCS8qIEtlZXAgdHJhY2sgb2YgdGhlIGJhc2UgZGVzY3JpcHRvci4gKi8KQEAgLTU2OSw3ICs1NzIsNyBAQAogICogVGhpcyB1cGRhdGVzIHRoZSBzb3VyY2UgcG9pbnRlciBhbmQgYnl0ZSBjb3VudC4gIE5vcm1hbGx5IHVzZWQKICAqIGZvciBtZW1vcnkgdG8gZmlmbyB0cmFuc2ZlcnMuCiAgKi8KLXUzMiBfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCit1MzIgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgZG1hX2FkZHJfdCBidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncykKIHsKIAljaGFuX3RhYl90CQkqY3RwOwogCWF1MXhfZGRtYV9kZXNjX3QJKmRwOwpAQCAtNTk1LDcgKzU5OCw3IEBACiAJCXJldHVybiAwOwogCiAJLyogTG9hZCB1cCBidWZmZXIgYWRkcmVzcyBhbmQgYnl0ZSBjb3VudC4gKi8KLQlkcC0+ZHNjcl9zb3VyY2UwID0gdmlydF90b19waHlzKGJ1Zik7CisJZHAtPmRzY3Jfc291cmNlMCA9IGJ1ZiAmIH4wVUw7CiAJZHAtPmRzY3JfY21kMSA9IG5ieXRlczsKIAkvKiBDaGVjayBmbGFncyAqLwogCWlmIChmbGFncyAmIERETUFfRkxBR1NfSUUpCkBAIC02MjIsMTQgKzYyNSwxMyBAQAogCS8qIFJldHVybiBzb21ldGhpbmcgbm9uLXplcm8uICovCiAJcmV0dXJuIG5ieXRlczsKIH0KLUVYUE9SVF9TWU1CT0woX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKTsKK0VYUE9SVF9TWU1CT0woYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UpOwogCiAvKiBQdXQgYSBkZXN0aW5hdGlvbiBidWZmZXIgaW50byB0aGUgRE1BIHJpbmcuCiAgKiBUaGlzIHVwZGF0ZXMgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgYW5kIGJ5dGUgY291bnQuICBOb3JtYWxseSB1c2VkCiAgKiB0byBwbGFjZSBhbiBlbXB0eSBidWZmZXIgaW50byB0aGUgcmluZyBmb3IgZmlmbyB0byBtZW1vcnkgdHJhbnNmZXJzLgogICovCi11MzIKLV9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCit1MzIgYXUxeHh4X2RiZG1hX3B1dF9kZXN0KHUzMiBjaGFuaWQsIGRtYV9hZGRyX3QgYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCiB7CiAJY2hhbl90YWJfdAkJKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190CSpkcDsKQEAgLTY1OSw3ICs2NjEsNyBAQAogCWlmIChmbGFncyAmIERETUFfRkxBR1NfTk9JRSkKIAkJZHAtPmRzY3JfY21kMCAmPSB+RFNDUl9DTUQwX0lFOwogCi0JZHAtPmRzY3JfZGVzdDAgPSB2aXJ0X3RvX3BoeXMoYnVmKTsKKwlkcC0+ZHNjcl9kZXN0MCA9IGJ1ZiAmIH4wVUw7CiAJZHAtPmRzY3JfY21kMSA9IG5ieXRlczsKICNpZiAwCiAJcHJpbnRrKEtFUk5fREVCVUcgImNtZDA6JXggY21kMToleCBzb3VyY2UwOiV4IHNvdXJjZTE6JXggZGVzdDA6JXggZGVzdDE6JXhcbiIsCkBAIC02ODUsNyArNjg3LDcgQEAKIAkvKiBSZXR1cm4gc29tZXRoaW5nIG5vbi16ZXJvLiAqLwogCXJldHVybiBuYnl0ZXM7CiB9Ci1FWFBPUlRfU1lNQk9MKF9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QpOworRVhQT1JUX1NZTUJPTChhdTF4eHhfZGJkbWFfcHV0X2Rlc3QpOwogCiAvKgogICogR2V0IGEgZGVzdGluYXRpb24gYnVmZmVyIGludG8gdGhlIERNQSByaW5nLgpAQCAtODMxLDcgKzgzMyw3IEBACiAKIAlhdTF4eHhfZGJkbWFfc3RvcChjaGFuaWQpOwogCi0Ja2ZyZWUoKHZvaWQgKiljdHAtPmNoYW5fZGVzY19iYXNlKTsKKwlrZnJlZSgodm9pZCAqKWN0cC0+Y2RiX21lbWJhc2UpOwogCiAJc3RwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKIAlkdHAtPmRldl9mbGFncyAmPSB+REVWX0ZMQUdTX0lOVVNFOwpAQCAtODY4LDI4ICs4NzAsNiBAQAogCXJldHVybiBJUlFfUkVUVkFMKDEpOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfZGJkbWFfaW5pdCh2b2lkKQotewotCWludCBpcnFfbnI7Ci0KLQlkYmRtYV9ncHRyLT5kZG1hX2NvbmZpZyA9IDA7Ci0JZGJkbWFfZ3B0ci0+ZGRtYV90aHJvdHRsZSA9IDA7Ci0JZGJkbWFfZ3B0ci0+ZGRtYV9pbnRlbiA9IDB4ZmZmZjsKLQlhdV9zeW5jKCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCWlycV9uciA9IEFVMTU1MF9ERE1BX0lOVDsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JaXJxX25yID0gQVUxMjAwX0RETUFfSU5UOwotI2Vsc2UKLQkjZXJyb3IgVW5rbm93biBBdTF4MDAgU09DCi0jZW5kaWYKLQotCWlmIChyZXF1ZXN0X2lycShpcnFfbnIsIGRiZG1hX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCSJBdTF4eHggZGJkbWEiLCAodm9pZCAqKWRiZG1hX2dwdHIpKQotCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGdldCAxNTUwIGRiZG1hIGlycSIpOwotfQotCiB2b2lkIGF1MXh4eF9kYmRtYV9kdW1wKHUzMiBjaGFuaWQpCiB7CiAJY2hhbl90YWJfdAkgKmN0cDsKQEAgLTkwMyw3ICs4ODMsNyBAQAogCWR0cCA9IGN0cC0+Y2hhbl9kZXN0OwogCWNwID0gY3RwLT5jaGFuX3B0cjsKIAotCXByaW50ayhLRVJOX0RFQlVHICJDaGFuICV4LCBzdHAgJXggKGRldiAlZCkgIGR0cCAleCAoZGV2ICVkKSBcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIkNoYW4gJXgsIHN0cCAleCAoZGV2ICVkKSAgZHRwICV4IChkZXYgJWQpXG4iLAogCQkJICAodTMyKWN0cCwgKHUzMilzdHAsIHN0cCAtIGRiZGV2X3RhYiwgKHUzMilkdHAsCiAJCQkgIGR0cCAtIGRiZGV2X3RhYik7CiAJcHJpbnRrKEtFUk5fREVCVUcgImRlc2MgYmFzZSAleCwgZ2V0ICV4LCBwdXQgJXgsIGN1ciAleFxuIiwKQEAgLTEwMzgsNCArMTAxOCwzOCBAQAogCX0KIH0KICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGludCBfX2luaXQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgaXJxX25yLCByZXQ7CisKKwlkYmRtYV9ncHRyLT5kZG1hX2NvbmZpZyA9IDA7CisJZGJkbWFfZ3B0ci0+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+PiBQQUdFX1NISUZUOwotCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfT0ZGU0VULCBwYWdlcyA8PCBQQUdFX1NISUZULAotCQkJICBCT09UX01FTV9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfT0ZGU0VULCBwYWdlcyA8PCBQQUdFX1NISUZULCBCT09UX01FTV9SQU0pOwogfQogCiB2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwppbmRleCA4NTE2OWMwLi4yNDZkZjdhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCkBAIC0zNCw0NSArMzQsNTAgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvcHJvbS5oPgogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZMWU5RIEJ1cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgcGxhdF92bHlucV9kYXRhIHsKIAlzdHJ1Y3QgcGxhdF92bHlucV9vcHMgb3BzOwogCWludCBncGlvX2JpdDsKIAlpbnQgcmVzZXRfYml0OwogfTsKIAotCiBzdGF0aWMgaW50IHZseW5xX29uKHN0cnVjdCB2bHlucV9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmVzdWx0OworCWludCByZXQ7CiAJc3RydWN0IHBsYXRfdmx5bnFfZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JcmVzdWx0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2JpdCwgInZseW5xIik7Ci0JaWYgKHJlc3VsdCkKKwlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fYml0LCAidmx5bnEiKTsKKwlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCWFyN19kZXZpY2VfcmVzZXQocGRhdGEtPnJlc2V0X2JpdCk7CiAKLQlyZXN1bHQgPSBhcjdfZ3Bpb19kaXNhYmxlKHBkYXRhLT5ncGlvX2JpdCk7Ci0JaWYgKHJlc3VsdCkKKwlyZXQgPSBhcjdfZ3Bpb19kaXNhYmxlKHBkYXRhLT5ncGlvX2JpdCk7CisJaWYgKHJldCkKIAkJZ290byBvdXRfZW5hYmxlZDsKIAotCXJlc3VsdCA9IGFyN19ncGlvX2VuYWJsZShwZGF0YS0+Z3Bpb19iaXQpOwotCWlmIChyZXN1bHQpCisJcmV0ID0gYXI3X2dwaW9fZW5hYmxlKHBkYXRhLT5ncGlvX2JpdCk7CisJaWYgKHJldCkKIAkJZ290byBvdXRfZW5hYmxlZDsKIAotCXJlc3VsdCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19iaXQsIDApOwotCWlmIChyZXN1bHQpCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2JpdCwgMCk7CisJaWYgKHJldCkKIAkJZ290byBvdXRfZ3Bpb19lbmFibGVkOwogCiAJbXNsZWVwKDUwKTsKIAogCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5ncGlvX2JpdCwgMSk7CisKIAltc2xlZXAoNTApOwogCiAJcmV0dXJuIDA7CkBAIC04MywzNTIgKzg4LDIwOCBAQAogCWFyN19kZXZpY2VfZGlzYWJsZShwZGF0YS0+cmVzZXRfYml0KTsKIAlncGlvX2ZyZWUocGRhdGEtPmdwaW9fYml0KTsKIG91dDoKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHZseW5xX29mZihzdHJ1Y3Qgdmx5bnFfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRfdmx5bnFfZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCiAJYXI3X2dwaW9fZGlzYWJsZShwZGF0YS0+Z3Bpb19iaXQpOwogCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19iaXQpOwogCWFyN19kZXZpY2VfZGlzYWJsZShwZGF0YS0+cmVzZXRfYml0KTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaHlzbWFwX2ZsYXNoX3Jlc291cmNlID0gewotCS5uYW1lID0gIm1lbSIsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JLnN0YXJ0ID0gMHgxMDAwMDAwMCwKLQkuZW5kID0gMHgxMDdmZmZmZiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3BtYWNfbG93X3Jlc1tdID0gewotCXsKLQkJLm5hbWUgPSAicmVncyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSBBUjdfUkVHU19NQUMwLAotCQkuZW5kID0gQVI3X1JFR1NfTUFDMCArIDB4N2ZmLAotCX0sCi0JewotCQkubmFtZSA9ICJpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gMjcsCi0JCS5lbmQgPSAyNywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjcG1hY19oaWdoX3Jlc1tdID0gewotCXsKLQkJLm5hbWUgPSAicmVncyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSBBUjdfUkVHU19NQUMxLAotCQkuZW5kID0gQVI3X1JFR1NfTUFDMSArIDB4N2ZmLAotCX0sCi0JewotCQkubmFtZSA9ICJpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gNDEsCi0JCS5lbmQgPSA0MSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2bHlucV9sb3dfcmVzW10gPSB7CiAJewotCQkubmFtZSA9ICJyZWdzIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IEFSN19SRUdTX1ZMWU5RMCwKLQkJLmVuZCA9IEFSN19SRUdTX1ZMWU5RMCArIDB4ZmYsCisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfVkxZTlEwLAorCQkuZW5kCT0gQVI3X1JFR1NfVkxZTlEwICsgMHhmZiwKIAl9LAogCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDI5LAotCQkuZW5kID0gMjksCisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSAyOSwKKwkJLmVuZAk9IDI5LAogCX0sCiAJewotCQkubmFtZSA9ICJtZW0iLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gMHgwNDAwMDAwMCwKLQkJLmVuZCA9IDB4MDRmZmZmZmYsCisJCS5uYW1lCT0gIm1lbSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSAweDA0MDAwMDAwLAorCQkuZW5kCT0gMHgwNGZmZmZmZiwKIAl9LAogCXsKLQkJLm5hbWUgPSAiZGV2aXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDgwLAotCQkuZW5kID0gMTExLAorCQkubmFtZQk9ICJkZXZpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gODAsCisJCS5lbmQJPSAxMTEsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugdmx5bnFfaGlnaF9yZXNbXSA9IHsKIAl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfVkxZTlExLAotCQkuZW5kID0gQVI3X1JFR1NfVkxZTlExICsgMHhmZiwKKwkJLm5hbWUJPSAicmVncyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBBUjdfUkVHU19WTFlOUTEsCisJCS5lbmQJPSBBUjdfUkVHU19WTFlOUTEgKyAweGZmLAogCX0sCiAJewotCQkubmFtZSA9ICJpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gMzMsCi0JCS5lbmQgPSAzMywKKwkJLm5hbWUJPSAiaXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDMzLAorCQkuZW5kCT0gMzMsCiAJfSwKIAl7Ci0JCS5uYW1lID0gIm1lbSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSAweDBjMDAwMDAwLAotCQkuZW5kID0gMHgwY2ZmZmZmZiwKKwkJLm5hbWUJPSAibWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IDB4MGMwMDAwMDAsCisJCS5lbmQJPSAweDBjZmZmZmZmLAogCX0sCiAJewotCQkubmFtZSA9ICJkZXZpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gMTEyLAotCQkuZW5kID0gMTQzLAorCQkubmFtZQk9ICJkZXZpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMTEyLAorCQkuZW5kCT0gMTQzLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYl9yZXNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfVVNCLAotCQkuZW5kID0gQVI3X1JFR1NfVVNCICsgMHhmZiwKLQl9LAotCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDMyLAotCQkuZW5kID0gMzIsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIm1lbSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSAweDAzNDAwMDAwLAotCQkuZW5kID0gMHgwMzQwMDFmZmYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBoeXNtYXBfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGggPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZpeGVkX3BoeV9zdGF0dXMgX19pbml0ZGF0YSA9IHsKLQkubGluayA9IDEsCi0JLnNwZWVkID0gMTAwLAotCS5kdXBsZXggPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgY3BtYWNfbG93X2RhdGEgPSB7Ci0JLnJlc2V0X2JpdCA9IDE3LAotCS5wb3dlcl9iaXQgPSAyMCwKLQkucGh5X21hc2sgPSAweDgwMDAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgY3BtYWNfaGlnaF9kYXRhID0gewotCS5yZXNldF9iaXQgPSAyMSwKLQkucG93ZXJfYml0ID0gMjIsCi0JLnBoeV9tYXNrID0gMHg3ZmZmZmZmZiwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdF92bHlucV9kYXRhIHZseW5xX2xvd19kYXRhID0gewotCS5vcHMub24gPSB2bHlucV9vbiwKLQkub3BzLm9mZiA9IHZseW5xX29mZiwKLQkucmVzZXRfYml0ID0gMjAsCi0JLmdwaW9fYml0ID0gMTgsCisJLm9wcyA9IHsKKwkJLm9uCT0gdmx5bnFfb24sCisJCS5vZmYJPSB2bHlucV9vZmYsCisJfSwKKwkucmVzZXRfYml0CT0gMjAsCisJLmdwaW9fYml0CT0gMTgsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRfdmx5bnFfZGF0YSB2bHlucV9oaWdoX2RhdGEgPSB7Ci0JLm9wcy5vbiA9IHZseW5xX29uLAotCS5vcHMub2ZmID0gdmx5bnFfb2ZmLAotCS5yZXNldF9iaXQgPSAxNiwKLQkuZ3Bpb19iaXQgPSAxOSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBoeXNtYXBfZmxhc2ggPSB7Ci0JLmlkID0gMCwKLQkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcGh5c21hcF9mbGFzaF9kYXRhLAotCS5yZXNvdXJjZSA9ICZwaHlzbWFwX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgY3BtYWNfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfbG93ID0gewotCS5pZCA9IDAsCi0JLm5hbWUgPSAiY3BtYWMiLAotCS5kZXYgPSB7Ci0JCS5kbWFfbWFzayA9ICZjcG1hY19kbWFfbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmY3BtYWNfbG93X2RhdGEsCisJLm9wcyA9IHsKKwkJLm9uCT0gdmx5bnFfb24sCisJCS5vZmYJPSB2bHlucV9vZmYsCiAJfSwKLQkucmVzb3VyY2UgPSBjcG1hY19sb3dfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShjcG1hY19sb3dfcmVzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwbWFjX2hpZ2ggPSB7Ci0JLmlkID0gMSwKLQkubmFtZSA9ICJjcG1hYyIsCi0JLmRldiA9IHsKLQkJLmRtYV9tYXNrID0gJmNwbWFjX2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZjcG1hY19oaWdoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UgPSBjcG1hY19oaWdoX3JlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoY3BtYWNfaGlnaF9yZXMpLAorCS5yZXNldF9iaXQJPSAyNiwKKwkuZ3Bpb19iaXQJPSAxOSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZseW5xX2xvdyA9IHsKLQkuaWQgPSAwLAotCS5uYW1lID0gInZseW5xIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdmx5bnFfbG93X2RhdGEsCi0JLnJlc291cmNlID0gdmx5bnFfbG93X3JlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodmx5bnFfbG93X3JlcyksCisJLmlkCQk9IDAsCisJLm5hbWUJCT0gInZseW5xIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZ2bHlucV9sb3dfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHZseW5xX2xvd19yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZseW5xX2xvd19yZXMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugdmx5bnFfaGlnaCA9IHsKLQkuaWQgPSAxLAotCS5uYW1lID0gInZseW5xIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdmx5bnFfaGlnaF9kYXRhLAotCS5yZXNvdXJjZSA9IHZseW5xX2hpZ2hfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh2bHlucV9oaWdoX3JlcyksCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGVmYXVsdF9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICJzdGF0dXMiLAotCQkuZ3BpbyA9IDgsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkc2w1MDJ0X2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInN0YXR1cyIsCi0JCS5ncGlvID0gOSwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJldGhlcm5ldCIsCi0JCS5ncGlvID0gNywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJ1c2IiLAotCQkuZ3BpbyA9IDEyLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGc4MzRnX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInBwcCIsCi0JCS5ncGlvID0gNiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJzdGF0dXMiLAotCQkuZ3BpbyA9IDcsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiYWRzbCIsCi0JCS5ncGlvID0gOCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJ3aWZpIiwKLQkJLmdwaW8gPSAxMiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJwb3dlciIsCi0JCS5ncGlvID0gMTQsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkZWZhdWx0LW9uIiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBmYl9zbF9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICIxIiwKLQkJLmdwaW8gPSA3LAotCX0sCi0JewotCQkubmFtZSA9ICIyIiwKLQkJLmdwaW8gPSAxMywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICIzIiwKLQkJLmdwaW8gPSAxMCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI0IiwKLQkJLmdwaW8gPSAxMiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI1IiwKLQkJLmdwaW8gPSA5LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmJfZm9uX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIjEiLAotCQkuZ3BpbyA9IDgsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjIiLAotCQkuZ3BpbyA9IDMsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiMyIsCi0JCS5ncGlvID0gNSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiNCIsCi0JCS5ncGlvID0gNCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI1IiwKLQkJLmdwaW8gPSAxMSwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYXI3X2xlZF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfZ3Bpb19sZWRzID0gewotCS5uYW1lID0gImxlZHMtZ3BpbyIsCi0JLmlkID0gLTEsCisJLmlkCQk9IDEsCisJLm5hbWUJCT0gInZseW5xIiwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZhcjdfbGVkX2RhdGEsCi0JfQorCQkucGxhdGZvcm1fZGF0YQk9ICZ2bHlucV9oaWdoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB2bHlucV9oaWdoX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmx5bnFfaGlnaF9yZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXI3X3VkYyA9IHsKLQkuaWQgPSAtMSwKLQkubmFtZSA9ICJhcjdfdWRjIiwKLQkucmVzb3VyY2UgPSB1c2JfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1c2JfcmVzKSwKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaHlzbWFwX2ZsYXNoX3Jlc291cmNlID0geworCS5uYW1lCT0gIm1lbSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkuZW5kCT0gMHgxMDdmZmZmZiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXI3X3dkdF9yZXMgPSB7Ci0JLm5hbWUgPSAicmVncyIsCi0JLnN0YXJ0ID0gLTEsIC8qIEZpbGxlZCBhdCBydW50aW1lICovCi0JLmVuZCA9IC0xLCAvKiBGaWxsZWQgYXQgcnVudGltZSAqLwotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGh5c21hcF9mbGFzaF9kYXRhID0geworCS53aWR0aAk9IDIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfd2R0ID0gewotCS5pZCA9IC0xLAotCS5uYW1lICA9ICJhcjdfd2R0IiwKLQkucmVzb3VyY2UgPSAmYXI3X3dkdF9yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGh5c21hcF9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGh5c21hcF9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gJnBoeXNtYXBfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2xvd19yZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfTUFDMCwKKwkJLmVuZAk9IEFSN19SRUdTX01BQzAgKyAweDdmZiwKKwl9LAorCXsKKwkJLm5hbWUJPSAiaXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDI3LAorCQkuZW5kIAk9IDI3LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2hpZ2hfcmVzW10gPSB7CisJeworCQkubmFtZQk9ICJyZWdzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IEFSN19SRUdTX01BQzEsCisJCS5lbmQJPSBBUjdfUkVHU19NQUMxICsgMHg3ZmYsCisJfSwKKwl7CisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSA0MSwKKwkJLmVuZAk9IDQxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZml4ZWRfcGh5X3N0YXR1cyBfX2luaXRkYXRhID0geworCS5saW5rCQk9IDEsCisJLnNwZWVkCQk9IDEwMCwKKwkuZHVwbGV4CQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19sb3dfZGF0YSA9IHsKKwkucmVzZXRfYml0CT0gMTcsCisJLnBvd2VyX2JpdAk9IDIwLAorCS5waHlfbWFzawk9IDB4ODAwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19oaWdoX2RhdGEgPSB7CisJLnJlc2V0X2JpdAk9IDIxLAorCS5wb3dlcl9iaXQJPSAyMiwKKwkucGh5X21hc2sJPSAweDdmZmZmZmZmLAorfTsKKworc3RhdGljIHU2NCBjcG1hY19kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwbWFjX2xvdyA9IHsKKwkuaWQJCT0gMCwKKwkubmFtZQkJPSAiY3BtYWMiLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmY3BtYWNfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjcG1hY19sb3dfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNwbWFjX2xvd19yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNwbWFjX2xvd19yZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfaGlnaCA9IHsKKwkuaWQJCT0gMSwKKwkubmFtZQkJPSAiY3BtYWMiLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmY3BtYWNfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjcG1hY19oaWdoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjcG1hY19oaWdoX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3BtYWNfaGlnaF9yZXMpLAogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGNoYXIyaGV4KGNoYXIgaCkKQEAgLTQ2Nyw2ICszMjgsMTU2IEBACiAJCQljaGFyMmhleChtYWNbaSAqIDMgKyAxXSk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNCCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX3Jlc1tdID0geworCXsKKwkJLm5hbWUJPSAicmVncyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBBUjdfUkVHU19VU0IsCisJCS5lbmQJPSBBUjdfUkVHU19VU0IgKyAweGZmLAorCX0sCisJeworCQkubmFtZQk9ICJpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMzIsCisJCS5lbmQJPSAzMiwKKwl9LAorCXsKKwkJLm5hbWUJPSAibWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IDB4MDM0MDAwMDAsCisJCS5lbmQJPSAweDAzNDAxZmZmLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfdWRjID0geworCS5uYW1lCQk9ICJhcjdfdWRjIiwKKwkucmVzb3VyY2UJPSB1c2JfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JfcmVzKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTEVEcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRlZmF1bHRfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJzdGF0dXMiLAorCQkuZ3BpbwkJCT0gOCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkc2w1MDJ0X2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAic3RhdHVzIiwKKwkJLmdwaW8JCQk9IDksCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiZXRoZXJuZXQiLAorCQkuZ3BpbwkJCT0gNywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJ1c2IiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGc4MzRnX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAicHBwIiwKKwkJLmdwaW8JCQk9IDYsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAic3RhdHVzIiwKKwkJLmdwaW8JCQk9IDcsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiYWRzbCIsCisJCS5ncGlvCQkJPSA4LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIndpZmkiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAicG93ZXIiLAorCQkuZ3BpbwkJCT0gMTQsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmJfc2xfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICIxIiwKKwkJLmdwaW8JCQk9IDcsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiMiIsCisJCS5ncGlvCQkJPSAxMywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIzIiwKKwkJLmdwaW8JCQk9IDEwLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIjQiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiNSIsCisJCS5ncGlvCQkJPSA5LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGZiX2Zvbl9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gIjEiLAorCQkuZ3BpbwkJCT0gOCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIyIiwKKwkJLmdwaW8JCQk9IDMsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiMyIsCisJCS5ncGlvCQkJPSA1LAorCX0sCisJeworCQkubmFtZQkJCT0gIjQiLAorCQkuZ3BpbwkJCT0gNCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICI1IiwKKwkJLmdwaW8JCQk9IDExLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYXI3X2xlZF9kYXRhOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfZ3Bpb19sZWRzID0geworCS5uYW1lID0gImxlZHMtZ3BpbyIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXI3X2xlZF9kYXRhLAorCX0KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfbGVkcyh2b2lkKQogewogCWNoYXIgKnByaWQsICp1c2JfcHJvZDsKQEAgLTQ5OSwxMTEgKzUxMCwxNDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGFyN19yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdhdGNoZG9nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXI3X3dkdF9yZXMgPSB7CisJLm5hbWUJCT0gInJlZ3MiLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCT0gLTEsCS8qIEZpbGxlZCBhdCBydW50aW1lICovCisJLmVuZAkJPSAtMSwJLyogRmlsbGVkIGF0IHJ1bnRpbWUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN193ZHQgPSB7CisJLm5hbWUJCT0gImFyN193ZHQiLAorCS5yZXNvdXJjZQk9ICZhcjdfd2R0X3JlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgYXI3X3JlZ2lzdGVyX3VhcnRzKHZvaWQpCiB7Ci0JdTE2IGNoaXBfaWQ7Ci0JaW50IHJlczsKLQl1MzIgKmJvb3RjciwgdmFsOwogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAotCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHVhcnRfcG9ydFsyXSBfX2luaXRkYXRhOworCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHVhcnRfcG9ydCBfX2luaXRkYXRhOworCXN0cnVjdCBjbGsgKmJ1c19jbGs7CisJaW50IHJlczsKIAotCW1lbXNldCh1YXJ0X3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSAqIDIpOworCW1lbXNldCgmdWFydF9wb3J0LCAwLCBzaXplb2Yoc3RydWN0IHVhcnRfcG9ydCkpOwogCi0JdWFydF9wb3J0WzBdLnR5cGUgPSBQT1JUXzE2NTUwQTsKLQl1YXJ0X3BvcnRbMF0ubGluZSA9IDA7Ci0JdWFydF9wb3J0WzBdLmlycSA9IEFSN19JUlFfVUFSVDA7Ci0JdWFydF9wb3J0WzBdLnVhcnRjbGsgPSBhcjdfYnVzX2ZyZXEoKSAvIDI7Ci0JdWFydF9wb3J0WzBdLmlvdHlwZSA9IFVQSU9fTUVNMzI7Ci0JdWFydF9wb3J0WzBdLm1hcGJhc2UgPSBBUjdfUkVHU19VQVJUMDsKLQl1YXJ0X3BvcnRbMF0ubWVtYmFzZSA9IGlvcmVtYXAodWFydF9wb3J0WzBdLm1hcGJhc2UsIDI1Nik7Ci0JdWFydF9wb3J0WzBdLnJlZ3NoaWZ0ID0gMjsKLQlyZXMgPSBlYXJseV9zZXJpYWxfc2V0dXAoJnVhcnRfcG9ydFswXSk7CisJYnVzX2NsayA9IGNsa19nZXQoTlVMTCwgImJ1cyIpOworCWlmIChJU19FUlIoYnVzX2NsaykpCisJCXBhbmljKCJ1bmFibGUgdG8gZ2V0IGJ1cyBjbGtcbiIpOworCisJdWFydF9wb3J0LnR5cGUJCT0gUE9SVF8xNjU1MEE7CisJdWFydF9wb3J0LnVhcnRjbGsJPSBjbGtfZ2V0X3JhdGUoYnVzX2NsaykgLyAyOworCXVhcnRfcG9ydC5pb3R5cGUJPSBVUElPX01FTTMyOworCXVhcnRfcG9ydC5yZWdzaGlmdAk9IDI7CisKKwl1YXJ0X3BvcnQubGluZQkJPSAwOworCXVhcnRfcG9ydC5pcnEJCT0gQVI3X0lSUV9VQVJUMDsKKwl1YXJ0X3BvcnQubWFwYmFzZQk9IEFSN19SRUdTX1VBUlQwOworCXVhcnRfcG9ydC5tZW1iYXNlCT0gaW9yZW1hcCh1YXJ0X3BvcnQubWFwYmFzZSwgMjU2KTsKKworCXJlcyA9IGVhcmx5X3NlcmlhbF9zZXR1cCgmdWFydF9wb3J0KTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCi0KIAkvKiBPbmx5IFRORVRENzN4eCBoYXZlIGEgc2Vjb25kIHNlcmlhbCBwb3J0ICovCiAJaWYgKGFyN19oYXNfc2Vjb25kX3VhcnQoKSkgewotCQl1YXJ0X3BvcnRbMV0udHlwZSA9IFBPUlRfMTY1NTBBOwotCQl1YXJ0X3BvcnRbMV0ubGluZSA9IDE7Ci0JCXVhcnRfcG9ydFsxXS5pcnEgPSBBUjdfSVJRX1VBUlQxOwotCQl1YXJ0X3BvcnRbMV0udWFydGNsayA9IGFyN19idXNfZnJlcSgpIC8gMjsKLQkJdWFydF9wb3J0WzFdLmlvdHlwZSA9IFVQSU9fTUVNMzI7Ci0JCXVhcnRfcG9ydFsxXS5tYXBiYXNlID0gVVI4X1JFR1NfVUFSVDE7Ci0JCXVhcnRfcG9ydFsxXS5tZW1iYXNlID0gaW9yZW1hcCh1YXJ0X3BvcnRbMV0ubWFwYmFzZSwgMjU2KTsKLQkJdWFydF9wb3J0WzFdLnJlZ3NoaWZ0ID0gMjsKLQkJcmVzID0gZWFybHlfc2VyaWFsX3NldHVwKCZ1YXJ0X3BvcnRbMV0pOworCQl1YXJ0X3BvcnQubGluZQkJPSAxOworCQl1YXJ0X3BvcnQuaXJxCQk9IEFSN19JUlFfVUFSVDE7CisJCXVhcnRfcG9ydC5tYXBiYXNlCT0gVVI4X1JFR1NfVUFSVDE7CisJCXVhcnRfcG9ydC5tZW1iYXNlCT0gaW9yZW1hcCh1YXJ0X3BvcnQubWFwYmFzZSwgMjU2KTsKKworCQlyZXMgPSBlYXJseV9zZXJpYWxfc2V0dXAoJnVhcnRfcG9ydCk7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwogCX0KLSNlbmRpZiAvKiBDT05GSUdfU0VSSUFMXzgyNTAgKi8KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFyN19yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpib290Y3I7CisJdTMyIHZhbDsKKwl1MTYgY2hpcF9pZDsKKwlpbnQgcmVzOworCisJcmVzID0gYXI3X3JlZ2lzdGVyX3VhcnRzKCk7CisJaWYgKHJlcykKKwkJcHJfZXJyKCJ1bmFibGUgdG8gc2V0dXAgdWFydChzKTogJWRcbiIsIHJlcyk7CisKIAlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBoeXNtYXBfZmxhc2gpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciBwaHlzbWFwLWZsYXNoOiAlZFxuIiwgcmVzKTsKIAogCWFyN19kZXZpY2VfZGlzYWJsZSh2bHlucV9sb3dfZGF0YS5yZXNldF9iaXQpOwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmdmx5bnFfbG93KTsKIAlpZiAocmVzKQotCQlyZXR1cm4gcmVzOworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdmx5bnEtbG93OiAlZFxuIiwgcmVzKTsKIAogCWlmIChhcjdfaGFzX2hpZ2hfdmx5bnEoKSkgewogCQlhcjdfZGV2aWNlX2Rpc2FibGUodmx5bnFfaGlnaF9kYXRhLnJlc2V0X2JpdCk7CiAJCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmdmx5bnFfaGlnaCk7CiAJCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOworCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHZseW5xLWhpZ2g6ICVkXG4iLCByZXMpOwogCX0KIAogCWlmIChhcjdfaGFzX2hpZ2hfY3BtYWMoKSkgewotCQlyZXMgPSBmaXhlZF9waHlfYWRkKFBIWV9QT0xMLCBjcG1hY19oaWdoLmlkLCAmZml4ZWRfcGh5X3N0YXR1cyk7Ci0JCWlmIChyZXMgJiYgcmVzICE9IC1FTk9ERVYpCi0JCQlyZXR1cm4gcmVzOwotCQljcG1hY19nZXRfbWFjKDEsIGNwbWFjX2hpZ2hfZGF0YS5kZXZfYWRkcik7Ci0JCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfaGlnaCk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0gZWxzZSB7CisJCWlmICghcmVzKSB7CisJCQljcG1hY19nZXRfbWFjKDEsIGNwbWFjX2hpZ2hfZGF0YS5kZXZfYWRkcik7CisKKwkJCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfaGlnaCk7CisJCQlpZiAocmVzKQorCQkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciBjcG1hYy1oaWdoOiAlZFxuIiwgcmVzKTsKKwkJfSBlbHNlCisJCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gYWRkIGNwbWFjLWhpZ2ggcGh5OiAlZFxuIiwgcmVzKTsKKwl9IGVsc2UKIAkJY3BtYWNfbG93X2RhdGEucGh5X21hc2sgPSAweGZmZmZmZmZmOwotCX0KIAogCXJlcyA9IGZpeGVkX3BoeV9hZGQoUEhZX1BPTEwsIGNwbWFjX2xvdy5pZCwgJmZpeGVkX3BoeV9zdGF0dXMpOwotCWlmIChyZXMgJiYgcmVzICE9IC1FTk9ERVYpCi0JCXJldHVybiByZXM7Ci0KLQljcG1hY19nZXRfbWFjKDAsIGNwbWFjX2xvd19kYXRhLmRldl9hZGRyKTsKLQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwbWFjX2xvdyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwlpZiAoIXJlcykgeworCQljcG1hY19nZXRfbWFjKDAsIGNwbWFjX2xvd19kYXRhLmRldl9hZGRyKTsKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcG1hY19sb3cpOworCQlpZiAocmVzKQorCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIGNwbWFjLWxvdzogJWRcbiIsIHJlcyk7CisJfSBlbHNlCisJCXByX3dhcm5pbmcoInVuYWJsZSB0byBhZGQgY3BtYWMtbG93IHBoeTogJWRcbiIsIHJlcyk7CiAKIAlkZXRlY3RfbGVkcygpOwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X2dwaW9fbGVkcyk7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIGxlZHM6ICVkXG4iLCByZXMpOwogCiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfdWRjKTsKLQotCWNoaXBfaWQgPSBhcjdfY2hpcF9pZCgpOwotCXN3aXRjaCAoY2hpcF9pZCkgewotCWNhc2UgQVI3X0NISVBfNzEwMDoKLQljYXNlIEFSN19DSElQXzcyMDA6Ci0JCWFyN193ZHRfcmVzLnN0YXJ0ID0gQVI3X1JFR1NfV0RUOwotCQlicmVhazsKLQljYXNlIEFSN19DSElQXzczMDA6Ci0JCWFyN193ZHRfcmVzLnN0YXJ0ID0gVVI4X1JFR1NfV0RUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlhcjdfd2R0X3Jlcy5lbmQgPSBhcjdfd2R0X3Jlcy5zdGFydCArIDB4MjA7Ci0KLQlib290Y3IgPSAodTMyICopaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0RDTCwgNCk7Ci0JdmFsID0gKmJvb3RjcjsKLQlpb3VubWFwKGJvb3Rjcik7CisJaWYgKHJlcykKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHVzYiBzbGF2ZTogJWRcbiIsIHJlcyk7CiAKIAkvKiBSZWdpc3RlciB3YXRjaGRvZyBvbmx5IGlmIGVuYWJsZWQgaW4gaGFyZHdhcmUgKi8KLQlpZiAodmFsICYgQVI3X1dEVF9IV19FTkEpCi0JCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X3dkdCk7CisJYm9vdGNyID0gaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0RDTCwgNCk7CisJdmFsID0gcmVhZGwoYm9vdGNyKTsKKwlpb3VubWFwKGJvb3Rjcik7CisJaWYgKHZhbCAmIEFSN19XRFRfSFdfRU5BKSB7CisJCWNoaXBfaWQgPSBhcjdfY2hpcF9pZCgpOworCQlzd2l0Y2ggKGNoaXBfaWQpIHsKKwkJY2FzZSBBUjdfQ0hJUF83MTAwOgorCQljYXNlIEFSN19DSElQXzcyMDA6CisJCQlhcjdfd2R0X3Jlcy5zdGFydCA9IEFSN19SRUdTX1dEVDsKKwkJCWJyZWFrOworCQljYXNlIEFSN19DSElQXzczMDA6CisJCQlhcjdfd2R0X3Jlcy5zdGFydCA9IFVSOF9SRUdTX1dEVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KIAotCXJldHVybiByZXM7CisJCWFyN193ZHRfcmVzLmVuZCA9IGFyN193ZHRfcmVzLnN0YXJ0ICsgMHgyMDsKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfd2R0KTsKKwkJaWYgKHJlcykKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciB3YXRjaGRvZzogJWRcbiIsIHJlcyk7CisJfQorCisJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKGFyN19yZWdpc3Rlcl9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvcHJvbS5jIGIvYXJjaC9taXBzL2FyNy9wcm9tLmMKaW5kZXggYzFmZGQzNi4uNTIzODU3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2FyNy9wcm9tLmMKQEAgLTMyLDggKzMyLDggQEAKICNkZWZpbmUgTUFYX0VOVFJZIDgwCiAKIHN0cnVjdCBlbnZfdmFyIHsKLQljaGFyICpuYW1lOwotCWNoYXIgKnZhbHVlOworCWNoYXIJKm5hbWU7CisJY2hhcgkqdmFsdWU7CiB9OwogCiBzdGF0aWMgc3RydWN0IGVudl92YXIgYWRhbTJfZW52W01BWF9FTlRSWV07CkBAIC00MSw2ICs0MSw3IEBACiBjaGFyICpwcm9tX2dldGVudihjb25zdCBjaGFyICpuYW1lKQogewogCWludCBpOworCiAJZm9yIChpID0gMDsgKGkgPCBNQVhfRU5UUlkpICYmIGFkYW0yX2VudltpXS5uYW1lOyBpKyspCiAJCWlmICghc3RyY21wKG5hbWUsIGFkYW0yX2VudltpXS5uYW1lKSkKIAkJCXJldHVybiBhZGFtMl9lbnZbaV0udmFsdWU7CkBAIC00OSw2NSArNTAsNTAgQEAKIH0KIEVYUE9SVF9TWU1CT0wocHJvbV9nZXRlbnYpOwogCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KIHN0YXRpYyB2b2lkICBfX2luaXQgYXI3X2luaXRfY21kbGluZShpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWNoYXIgKmNwOwotCWludCBhY3RyOworCWludCBpOwogCi0JYWN0ciA9IDE7IC8qIEFsd2F5cyBpZ25vcmUgYXJndlswXSAqLwotCi0JY3AgPSAmKGFyY3NfY21kbGluZVswXSk7Ci0Jd2hpbGUgKGFjdHIgPCBhcmdjKSB7Ci0JCXN0cmNweShjcCwgYXJndlthY3RyXSk7Ci0JCWNwICs9IHN0cmxlbihhcmd2W2FjdHJdKTsKLQkJKmNwKysgPSAnICc7Ci0JCWFjdHIrKzsKLQl9Ci0JaWYgKGNwICE9ICYoYXJjc19jbWRsaW5lWzBdKSkgewotCQkvKiBnZXQgcmlkIG9mIHRyYWlsaW5nIHNwYWNlICovCi0JCS0tY3A7Ci0JCSpjcCA9ICdcMCc7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgYXJndltpXSwgQ09NTUFORF9MSU5FX1NJWkUpOworCQlpZiAoaSA8IChhcmdjIC0gMSkpCisJCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgIiAiLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJfQogfQogCiBzdHJ1Y3QgcHNibF9yZWMgewotCXUzMiBwc2JsX3NpemU7Ci0JdTMyIGVudl9iYXNlOwotCXUzMiBlbnZfc2l6ZTsKLQl1MzIgZmZzX2Jhc2U7Ci0JdTMyIGZmc19zaXplOworCXUzMglwc2JsX3NpemU7CisJdTMyCWVudl9iYXNlOworCXUzMgllbnZfc2l6ZTsKKwl1MzIJZmZzX2Jhc2U7CisJdTMyCWZmc19zaXplOwogfTsKIAogc3RhdGljIF9faW5pdGRhdGEgY2hhciBwc3BfZW52X3ZlcnNpb25bXSA9ICJUSUVOVjAuOCI7CiAKIHN0cnVjdCBwc3BfZW52X2NodW5rIHsKLQl1OCBudW07Ci0JdTggY3RybDsKLQl1MTYgY3N1bTsKLQl1OCBsZW47Ci0JY2hhciBkYXRhWzExXTsKKwl1OAludW07CisJdTgJY3RybDsKKwl1MTYJY3N1bTsKKwl1OAlsZW47CisJY2hhcglkYXRhWzExXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcHNwX3Zhcl9tYXBfZW50cnkgewotCXU4IG51bTsKLQljaGFyICp2YWx1ZTsKKwl1OAludW07CisJY2hhcgkqdmFsdWU7CiB9OwogCiBzdGF0aWMgc3RydWN0IHBzcF92YXJfbWFwX2VudHJ5IHBzcF92YXJfbWFwW10gPSB7Ci0JeyAxLCAiY3B1ZnJlcXVlbmN5IiB9LAotCXsgMiwgIm1lbXNpemUiIH0sCi0JeyAzLCAiZmxhc2hzaXplIiB9LAotCXsgNCwgIm1vZGV0dHkwIiB9LAotCXsgNSwgIm1vZGV0dHkxIiB9LAotCXsgOCwgIm1hY2EiIH0sCi0JeyA5LCAibWFjYiIgfSwKLQl7IDI4LCAic3lzZnJlcXVlbmN5IiB9LAotCXsgMzgsICJtaXBzZnJlcXVlbmN5IiB9LAorCXsgIDEsCSJjcHVmcmVxdWVuY3kiIH0sCisJeyAgMiwJIm1lbXNpemUiIH0sCisJeyAgMywJImZsYXNoc2l6ZSIgfSwKKwl7ICA0LAkibW9kZXR0eTAiIH0sCisJeyAgNSwJIm1vZGV0dHkxIiB9LAorCXsgIDgsCSJtYWNhIiB9LAorCXsgIDksCSJtYWNiIiB9LAorCXsgMjgsCSJzeXNmcmVxdWVuY3kiIH0sCisJeyAzOCwJIm1pcHNmcmVxdWVuY3kiIH0sCiB9OwogCiAvKgpAQCAtMTU0LDYgKzE0MCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgYWRkX2FkYW0yX3ZhcihjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfRU5UUlk7IGkrKykgewogCQlpZiAoIWFkYW0yX2VudltpXS5uYW1lKSB7CiAJCQlhZGFtMl9lbnZbaV0ubmFtZSA9IG5hbWU7CkBAIC0yMTYsNyArMjAzLDcgQEAKIAljaGFyIHBhcml0eSA9ICdcMCcsIGJpdHMgPSAnXDAnLCBmbG93ID0gJ1wwJzsKIAljaGFyICpzLCAqcDsKIAotCWlmIChzdHJzdHIocHJvbV9nZXRjbWRsaW5lKCksICJjb25zb2xlPSIpKQorCWlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiY29uc29sZT0iKSkKIAkJcmV0dXJuOwogCiAJcyA9IHByb21fZ2V0ZW52KCJtb2RldHR5MCIpOwpAQCAtMjUwLDcgKzIzNyw3IEBACiAJZWxzZQogCQlzcHJpbnRmKGNvbnNvbGVfc3RyaW5nLCAiIGNvbnNvbGU9dHR5UzAsJWQlYyVjIiwgYmF1ZCwgcGFyaXR5LAogCQkJYml0cyk7Ci0Jc3RyY2F0KHByb21fZ2V0Y21kbGluZSgpLCBjb25zb2xlX3N0cmluZyk7CisJc3RybGNhdChhcmNzX2NtZGxpbmUsIGNvbnNvbGVfc3RyaW5nLCBDT01NQU5EX0xJTkVfU0laRSk7CiAjZW5kaWYKIH0KIApAQCAtMjc5LDQgKzI2NiwzIEBACiAJc2VyaWFsX291dChVQVJUX1RYLCBjKTsKIAlyZXR1cm4gMTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9zZXR1cC5jIGIvYXJjaC9taXBzL2FyNy9zZXR1cC5jCmluZGV4IDM5ZjZiNWIuLjNhODAxZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXI3L3NldHVwLmMKQEAgLTI2LDggKzI2LDggQEAKIAogc3RhdGljIHZvaWQgYXI3X21hY2hpbmVfcmVzdGFydChjaGFyICpjb21tYW5kKQogewotCXUzMiAqc29mdHJlc19yZWcgPSBpb3JlbWFwKEFSN19SRUdTX1JFU0VUICsKLQkJCQkJICBBUjdfUkVTRVRfU09GVFdBUkUsIDEpOworCXUzMiAqc29mdHJlc19yZWcgPSBpb3JlbWFwKEFSN19SRUdTX1JFU0VUICsgQVI3X1JFU0VUX1NPRlRXQVJFLCAxKTsKKwogCXdyaXRlbCgxLCBzb2Z0cmVzX3JlZyk7CiB9CiAKQEAgLTQxLDYgKzQxLDcgQEAKIHsKIAl1MzIgKnBvd2VyX3JlZyA9ICh1MzIgKilpb3JlbWFwKEFSN19SRUdTX1BPV0VSLCAxKTsKIAl1MzIgcG93ZXJfc3RhdGUgPSByZWFkbChwb3dlcl9yZWcpIHwgKDMgPDwgMzApOworCiAJd3JpdGVsKHBvd2VyX3N0YXRlLCBwb3dlcl9yZWcpOwogCWFyN19tYWNoaW5lX2hhbHQoKTsKIH0KQEAgLTQ5LDE0ICs1MCwxNCBAQAogewogCXUxNiBjaGlwX2lkID0gYXI3X2NoaXBfaWQoKTsKIAlzd2l0Y2ggKGNoaXBfaWQpIHsKLQljYXNlIEFSN19DSElQXzczMDA6Ci0JCXJldHVybiAiVEkgQVI3IChUTkVURDczMDApIjsKIAljYXNlIEFSN19DSElQXzcxMDA6CiAJCXJldHVybiAiVEkgQVI3IChUTkVURDcxMDApIjsKIAljYXNlIEFSN19DSElQXzcyMDA6CiAJCXJldHVybiAiVEkgQVI3IChUTkVURDcyMDApIjsKKwljYXNlIEFSN19DSElQXzczMDA6CisJCXJldHVybiAiVEkgQVI3IChUTkVURDczMDApIjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gIlRJIEFSNyAoVW5rbm93bikiOworCQlyZXR1cm4gIlRJIEFSNyAodW5rbm93bikiOwogCX0KIH0KIApAQCAtNzAsNyArNzEsNiBAQAogICogSW5pdGlhbGl6ZXMgYmFzaWMgcm91dGluZXMgYW5kIHN0cnVjdHVyZXMgcG9pbnRlcnMsIG1lbW9yeSBzaXplIChhcwogICogZ2l2ZW4gYnkgdGhlIGJpb3MgYW5kIHNhdmVzIHRoZSBjb21tYW5kIGxpbmUuCiAgKi8KLQogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2U7CkBAIC04OCw2ICs4OCw1IEBACiAJcHJvbV9tZW1pbml0KCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlcywgSUQ6IDB4JTA0eCwgUmV2aXNpb246IDB4JTAyeFxuIiwKLQkJCQkJZ2V0X3N5c3RlbV90eXBlKCksCi0JCWFyN19jaGlwX2lkKCksIGFyN19jaGlwX3JldigpKTsKKwkJCWdldF9zeXN0ZW1fdHlwZSgpLCBhcjdfY2hpcF9pZCgpLCBhcjdfY2hpcF9yZXYoKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3RpbWUuYyBiL2FyY2gvbWlwcy9hcjcvdGltZS5jCmluZGV4IGExZmJhODkuLjVmYjhhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvdGltZS5jCkBAIC0yMCwxMSArMjAsMjEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9hcjcuaD4KIAogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKIHsKLQltaXBzX2hwdF9mcmVxdWVuY3kgPSBhcjdfY3B1X2ZyZXEoKSAvIDI7CisJc3RydWN0IGNsayAqY3B1X2NsazsKKworCWNwdV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJjcHUiKTsKKwlpZiAoSVNfRVJSKGNwdV9jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdldCBjcHUgY2xvY2tcbiIpOworCQlyZXR1cm47CisJfQorCisJbWlwc19ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKGNwdV9jbGspIC8gMjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYyBiL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYwppbmRleCA5Yjc5ODgwLi5lNGE1ZWU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jCkBAIC01OSw0ICs1OSwzIEBACiAJCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb190b19pcnEpOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKaW5kZXggYzUxNDA1ZS4uMGZhNjQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwpAQCAtMTQxLDYgKzE0MSwxNCBAQAogCQkJYnJlYWs7CiAJfQogCisJLyogSWdub3JpbmcgdGhlIGxhc3QgcGFnZSB3aGVuIGRkciBzaXplIGlzIDEyOE0uIENhY2hlZAorCSAqIGFjY2Vzc2VzIHRvIGxhc3QgcGFnZSBpcyBjYXVzaW5nIHRoZSBwcm9jZXNzb3IgdG8gcHJlZmV0Y2gKKwkgKiB1c2luZyBhZGRyZXNzIGFib3ZlIDEyOE0gc3RlcHBpbmcgb3V0IG9mIHRoZSBkZHIgYWRkcmVzcworCSAqIHNwYWNlLgorCSAqLworCWlmIChtZW0gPT0gMHg4MDAwMDAwKQorCQltZW0gLT0gMHgxMDAwOworCiAJYWRkX21lbW9yeV9yZWdpb24oMCwgbWVtLCBCT09UX01FTV9SQU0pOwogfQogCkBAIC0xNTUsNCArMTYzLDMgQEAKIHZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQogewogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwppbmRleCAyZjU4MGZhLi5kNDQyZTExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKQEAgLTEyMSw0ICsxMjEsMyBAQAogCV9tYWNoaW5lX2hhbHQgPSBiY200N3h4X21hY2hpbmVfaGFsdDsKIAlwbV9wb3dlcl9vZmYgPSBiY200N3h4X21hY2hpbmVfaGFsdDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCmluZGV4IGVmMDBlN2YuLjc0ZDA2OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMKQEAgLTE2NCw0ICsxNjQsMyBAQAogfQogCiBtb2R1bGVfaW5pdCh3Z3Q2MzR1X2luaXQpOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCmluZGV4IDFmZTQxMmMuLmVhMTc5NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCkBAIC04MzYsNCArODM2LDMgQEAKIAogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC90aW1lci5jIGIvYXJjaC9taXBzL2JjbTYzeHgvdGltZXIuYwppbmRleCBiYTUyMmJkLi41ZjExMzU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC90aW1lci5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L3RpbWVyLmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNsdWRlIDxiY202M3h4X3RpbWVyLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGltZXJfcmVnX2xvY2spOwotc3RhdGljIERFRklORV9TUElOTE9DSyh0aW1lcl9kYXRhX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sodGltZXJfcmVnX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sodGltZXJfZGF0YV9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xrOwogCiBzdGF0aWMgc3RydWN0IHRpbWVyX2RhdGEgewpAQCAtMzEsMjMgKzMxLDIzIEBACiAJdTMyIHN0YXQ7CiAJaW50IGk7CiAKLQlzcGluX2xvY2soJnRpbWVyX3JlZ19sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZ0aW1lcl9yZWdfbG9jayk7CiAJc3RhdCA9IGJjbV90aW1lcl9yZWFkbChUSU1FUl9JUlFTVEFUX1JFRyk7CiAJYmNtX3RpbWVyX3dyaXRlbChzdGF0LCBUSU1FUl9JUlFTVEFUX1JFRyk7Ci0Jc3Bpbl91bmxvY2soJnRpbWVyX3JlZ19sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnRpbWVyX3JlZ19sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBCQ002M1hYX1RJTUVSX0NPVU5UOyBpKyspIHsKIAkJaWYgKCEoc3RhdCAmIFRJTUVSX0lSUVNUQVRfVElNRVJfQ0FVU0UoaSkpKQogCQkJY29udGludWU7CiAKLQkJc3Bpbl9sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOwogCQlpZiAoIXRpbWVyX2RhdGFbaV0uY2IpIHsKLQkJCXNwaW5fdW5sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOwogCQkJY29udGludWU7CiAJCX0KIAogCQl0aW1lcl9kYXRhW2ldLmNiKHRpbWVyX2RhdGFbaV0uZGF0YSk7Ci0JCXNwaW5fdW5sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnRpbWVyX2RhdGFfbG9jayk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNjEsNyArNjEsNyBAQAogCWlmIChpZCA+PSBCQ002M1hYX1RJTUVSX0NPVU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAogCXJlZyA9IGJjbV90aW1lcl9yZWFkbChUSU1FUl9DVEx4X1JFRyhpZCkpOwogCXJlZyB8PSBUSU1FUl9DVExfRU5BQkxFX01BU0s7CkBAIC03MSw3ICs3MSw3IEBACiAJcmVnIHw9IFRJTUVSX0lSUVNUQVRfVElNRVJfSVJfRU4oaWQpOwogCWJjbV90aW1lcl93cml0ZWwocmVnLCBUSU1FUl9JUlFTVEFUX1JFRyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC04NSw3ICs4NSw3IEBACiAJaWYgKGlkID49IEJDTTYzWFhfVElNRVJfQ09VTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCiAJcmVnID0gYmNtX3RpbWVyX3JlYWRsKFRJTUVSX0NUTHhfUkVHKGlkKSk7CiAJcmVnICY9IH5USU1FUl9DVExfRU5BQkxFX01BU0s7CkBAIC05NSw3ICs5NSw3IEBACiAJcmVnICY9IH5USU1FUl9JUlFTVEFUX1RJTUVSX0lSX0VOKGlkKTsKIAliY21fdGltZXJfd3JpdGVsKHJlZywgVElNRVJfSVJRU1RBVF9SRUcpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEwLDcgKzExMCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gMDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKIAlpZiAodGltZXJfZGF0YVtpZF0uY2IpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXRpbWVyX2RhdGFbaWRdLmRhdGEgPSBkYXRhOwogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzMyw5ICsxMzMsOSBAQAogCWlmIChpZCA+PSBCQ002M1hYX1RJTUVSX0NPVU5UKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKIAl0aW1lcl9kYXRhW2lkXS5jYiA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOwogfQogCiBFWFBPUlRfU1lNQk9MKGJjbTYzeHhfdGltZXJfdW5yZWdpc3Rlcik7CkBAIC0xNTksNyArMTU5LDcgQEAKIAlpZiAoY291bnRkb3duICYgflRJTUVSX0NUTF9DT1VOVERPV05fTUFTSykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAJcmVnID0gYmNtX3RpbWVyX3JlYWRsKFRJTUVSX0NUTHhfUkVHKGlkKSk7CiAKIAlpZiAobW9ub3RvbmljKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAJcmVnIHw9IGNvdW50ZG93bjsKIAliY21fdGltZXJfd3JpdGVsKHJlZywgVElNRVJfQ1RMeF9SRUcoaWQpKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDlkZjkwM2QuLjc5MGRkZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtOSw3ICs5LDcgQEAKICMgbW9kaWZpZWQgYnkgQ29ydCAoY29ydEBjcy5ubXQuZWR1KQogIwogIyBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5Ci0jIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyMgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAjCiAKICMgY29tcHJlc3NlZCBrZXJuZWwgbG9hZCBhZGRyOiBWTUxJTlVaX0xPQURfQUREUkVTUyA+IFZNTElOVVhfTE9BRF9BRERSRVNTICsgVk1MSU5VWF9TSVpFCkBAIC0yNywxNSArMjcsMTggQEAKIEtCVUlMRF9DRkxBR1MgOj0gJChzaGVsbCBlY2hvICQoS0JVSUxEX0NGTEFHUykgfCBzZWQgLWUgInMvLXBnLy8iKQogCiBLQlVJTERfQ0ZMQUdTIDo9ICQoTElOVVhJTkNMVURFKSAkKEtCVUlMRF9DRkxBR1MpIC1EX19LRVJORUxfXyBcCi0JLURCT09UX0hFQVBfU0laRT0kKEJPT1RfSEVBUF9TSVpFKSAtRCJWTUxJTlVYX0xPQURfQUREUkVTU19VTEw9JChWTUxJTlVYX0xPQURfQUREUkVTUyl1bGwiIFwKKwktREJPT1RfSEVBUF9TSVpFPSQoQk9PVF9IRUFQX1NJWkUpIC1EIlZNTElOVVhfTE9BRF9BRERSRVNTX1VMTD0kKFZNTElOVVhfTE9BRF9BRERSRVNTKXVsbCIKIAogS0JVSUxEX0FGTEFHUyA6PSAkKExJTlVYSU5DTFVERSkgJChLQlVJTERfQUZMQUdTKSAtRF9fQVNTRU1CTFlfXyBcCi0JLURLRVJORUxfRU5UUlk9MHgkKHNoZWxsICQoTk0pICQob2JqdHJlZSkvJChLQlVJTERfSU1BR0UpIDI+L2Rldi9udWxsIHwgZ3JlcCAiIGtlcm5lbF9lbnRyeSIgfCBjdXQgLWYxIC1kIFwgKSBcCi0JLURCT09UX0hFQVBfU0laRT0kKEJPT1RfSEVBUF9TSVpFKQorCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkgXAorCS1ES0VSTkVMX0VOVFJZPTB4JChzaGVsbCAkKE5NKSAkKG9ianRyZWUpLyQoS0JVSUxEX0lNQUdFKSAyPi9kZXYvbnVsbCB8IGdyZXAgIiBrZXJuZWxfZW50cnkiIHwgY3V0IC1mMSAtZCBcICkKIAogb2JqLXkgOj0gJChvYmopL2hlYWQubyAkKG9iaikvZGVjb21wcmVzcy5vICQob2JqKS9kYmcubwogCitpZmRlZiBDT05GSUdfREVCVUdfWkJPT1QKIG9iai0kKENPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwKSArPSAkKG9iaikvdWFydC0xNjU1MC5vCitvYmotJChDT05GSUdfTUFDSF9BTENIRU1ZKQkJICAgKz0gJChvYmopL3VhcnQtYWxjaGVteS5vCitlbmRpZgogCiBPQkpDT1BZRkxBR1Nfdm1saW51eC5iaW4gOj0gJChPQkpDT1BZRkxBR1MpIC1PIGJpbmFyeSAtUiAuY29tbWVudCAtUwogJChvYmopL3ZtbGludXguYmluOiAkKEtCVUlMRF9JTUFHRSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RiZy5jCmluZGV4IGZmNGRjN2EuLjEzNGE2MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYwpAQCAtNSwxMSArNSwxMSBAQAogICogcGxlYXNlIHNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwIGZvciB5b3VyIG1hY2hpbmUuIG90aGV3aXNlLCB5b3UKICAqIG5lZWQgdG8gaW1wbGVtZW50IHlvdXIgb3duIHB1dGMoKS4KICAqLwotCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIHB1dGMoY2hhciBjKQordm9pZCBfX3dlYWsgcHV0YyhjaGFyIGMpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKaW5kZXggNTVkMDJiMy4uNWRiNDNjNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKQEAgLTUsOCArNSw4IEBACiAgKiBBdXRob3I6IE1hdHQgUG9ydGVyIDxtcG9ydGVyQG12aXN0YS5jb20+IERlcml2ZWQgZnJvbQogICogYXJjaC9wcGMvYm9vdC9wcmVwL21pc2MuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtYWxjaGVteS5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmZmMjJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKK3ZvaWQgcHV0YyhjaGFyIGMpCit7CisJLyogYWxsIGN1cnJlbnQgKEphbi4gMjAxMCkgaW4ta2VybmVsIGJvYXJkcyAqLworCWFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMKaW5kZXggNGI5MmJmYy4uYmU1MzFlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZG1hLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2RtYS1vY3Rlb24uYwpAQCAtNDEsNyArNDEsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFyMV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGJhcjFfbG9jayk7CiBzdGF0aWMgc3RydWN0IGJhcjFfaW5kZXhfc3RhdGUgYmFyMV9zdGF0ZVszMl07CiAjZW5kaWYKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAJCXN0YXJ0X2luZGV4ID0gMzE7CiAKIAkvKiBPbmx5IG9uZSBwcm9jZXNzb3IgY2FuIGFjY2VzcyB0aGUgQmFyIHJlZ2lzdGVyIGF0IG9uY2UgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFyMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiYXIxX2xvY2ssIGZsYWdzKTsKIAogCS8qIExvb2sgdGhyb3VnaCBCYXIxIGZvciBleGlzdGluZyBtYXBwaW5nIHRoYXQgd2lsbCB3b3JrICovCiAJZm9yIChpbmRleCA9IHN0YXJ0X2luZGV4OyBpbmRleCA+PSAwOyBpbmRleC0tKSB7CkBAIC0yNTAsNyArMjUwLDcgQEAKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGh5c2ljYWwpOwogCiBkb25lX3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXIxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFyMV9sb2NrLCBmbGFncyk7CiBkb25lOgogCXByX2RlYnVnKCJkbWFfbWFwX3NpbmdsZSAweCVsbHgtPjB4JWxseFxuIiwgcGh5c2ljYWwsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTMyNCwxNCArMzI0LDE0IEBACiAJCSAgICAgICJBdHRlbXB0IHRvIHVubWFwIGFuIGludmFsaWQgYWRkcmVzcyAoMHglbGx4KVxuIiwKIAkJICAgICAgZG1hX2FkZHIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJhcjFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmFyMV9sb2NrLCBmbGFncyk7CiAJYmFyMV9zdGF0ZVtpbmRleF0ucmVmX2NvdW50LS07CiAJaWYgKGJhcjFfc3RhdGVbaW5kZXhdLnJlZl9jb3VudCA9PSAwKQogCQlvY3Rlb25fbnBpX3dyaXRlMzIoQ1ZNWF9OUElfUENJX0JBUjFfSU5ERVhYKGluZGV4KSwgMCk7CiAJZWxzZSBpZiAodW5saWtlbHkoYmFyMV9zdGF0ZVtpbmRleF0ucmVmX2NvdW50IDwgMCkpCiAJCXBhbmljKCJkbWFfdW5tYXBfc2luZ2xlOiBCYXIxWyV1XSByZWZlcmVuY2UgY291bnQgPCAwXG4iLAogCQkgICAgICAoaW50KSBpbmRleCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFyMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhcjFfbG9jaywgZmxhZ3MpOwogZG9uZToKIAlwcl9kZWJ1ZygiZG1hX3VubWFwX3NpbmdsZSAweCVsbHhcbiIsIGRtYV9hZGRyKTsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1ib290bWVtLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1ib290bWVtLmMKaW5kZXggMjU2NjZkYS4uZmRmNWYxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtYm9vdG1lbS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LWJvb3RtZW0uYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJICogaW1wb3NzaWJsZSByZXF1ZXN0cyB1cCBmcm9udC4gKE5PUCBmb3IgYWRkcmVzc19taW4gPT0gMCkKIAkgKi8KIAlpZiAoYWxpZ25tZW50KQotCQlhZGRyZXNzX21pbiA9IF9fQUxJR05fTUFTSyhhZGRyZXNzX21pbiwgKGFsaWdubWVudCAtIDEpKTsKKwkJYWRkcmVzc19taW4gPSBBTElHTihhZGRyZXNzX21pbiwgYWxpZ25tZW50KTsKIAogCS8qCiAJICogUmVqZWN0IGluY29uc2lzdGVudCBhcmdzLiAgV2UgaGF2ZSBhZGp1c3RlZCB0aGVzZSwgc28gdGhpcwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCSAqIHNhdGlzZnkgcmVxdWVzdC4KIAkJICovCiAJCXVzYWJsZV9iYXNlID0KLQkJICAgIF9fQUxJR05fTUFTSyhtYXgoYWRkcmVzc19taW4sIGVudF9hZGRyKSwgYWxpZ25tZW50IC0gMSk7CisJCSAgICBBTElHTihtYXgoYWRkcmVzc19taW4sIGVudF9hZGRyKSwgYWxpZ25tZW50KTsKIAkJdXNhYmxlX21heCA9IG1pbihhZGRyZXNzX21heCwgZW50X2FkZHIgKyBlbnRfc2l6ZSk7CiAJCS8qCiAJCSAqIFdlIHNob3VsZCBiZSBhYmxlIHRvIGFsbG9jYXRlIGJsb2NrIGF0IGFkZHJlc3MKQEAgLTY3MSw3ICs2NzEsNyBAQAogCSAqIGNvYWxsZXNjZWQgd2hlbiB0aGV5IGFyZSBmcmVlZC4gIFRoZSBhbGxvYyByb3V0aW5lIGRvZXMgdGhlCiAJICogc2FtZSByb3VuZGluZyB1cCBvbiBhbGwgYWxsb2NhdGlvbnMuCiAJICovCi0Jc2l6ZSA9IF9fQUxJR05fTUFTSyhzaXplLCAoQ1ZNWF9CT09UTUVNX0FMSUdOTUVOVF9TSVpFIC0gMSkpOworCXNpemUgPSBBTElHTihzaXplLCBDVk1YX0JPT1RNRU1fQUxJR05NRU5UX1NJWkUpOwogCiAJYWRkcl9hbGxvY2F0ZWQgPSBjdm14X2Jvb3RtZW1fcGh5X2FsbG9jKHNpemUsIG1pbl9hZGRyLCBtYXhfYWRkciwKIAkJCQkJCWFsaWdubWVudCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LXN5c2luZm8uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LXN5c2luZm8uYwppbmRleCBlNTgzODg5Li44YjE4YTIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1zeXNpbmZvLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtc3lzaW5mby5jCkBAIC0xMTUsNCArMTE1LDMgQEAKIAogCXJldHVybiAxOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKaW5kZXggNmYyYWNmMC4uYzQyNGNkMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwpAQCAtMTMsOSArMTMsOCBAQAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC1wZXhwLWRlZnMuaD4KICNpbmNsdWRlIDxhc20vb2N0ZW9uL2N2bXgtbnBpLWRlZnMuaD4KIAotREVGSU5FX1JXTE9DSyhvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKLURFRklORV9SV0xPQ0sob2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7Ci1ERUZJTkVfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhvY3Rlb25faXJxX2NpdTBfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhvY3Rlb25faXJxX2NpdTFfbG9jayk7CiAKIHN0YXRpYyBpbnQgb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGludCBjcHUpCiB7CkBAIC01MSw5ICs1MCw2IEBACiAJICovCiAJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkKIAkJcmV0dXJuOwotCi0JLyogVGhlcmUgaXMgYSByYWNlIGhlcmUuICBXZSBzaG91bGQgZml4IGl0LiAgKi8KLQogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIElSUXMgdG8gbWFrZSB0aGVzZSBhdG9taWMgc2luY2UKIAkgKiB0aGV5IGFyZSBhbHJlYWR5IGRpc2FibGVkIGVhcmxpZXIgaW4gdGhlIGxvdyBsZXZlbApAQCAtMTQxLDE5ICsxMzcsMTIgQEAKIAl1aW50NjRfdCBlbjA7CiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV09SS1EwOwkvKiBCaXQgMC02MyBvZiBFTjAgKi8KIAotCS8qCi0JICogQSByZWFkIGxvY2sgaXMgdXNlZCBoZXJlIHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSBjb3JlIGlzIGV2ZXIKLQkgKiB1cGRhdGluZyB0aGUgQ0lVIGVuYWJsZSBiaXRzIGF0IGEgdGltZS4gRHVyaW5nIGFuIGVuYWJsZQotCSAqIHRoZSBjb3JlcyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLiBEdXJpbmcgYSBkaXNhYmxlCi0JICogdGhlIHdyaXRlIGxvY2sgc3RvcHMgYW55IGVuYWJsZXMgdGhhdCBtaWdodCBjYXVzZSBhCi0JICogcHJvYmxlbS4KLQkgKi8KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAllbjAgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKIAllbjAgfD0gMXVsbCA8PCBiaXQ7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMiksIGVuMCk7CiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTYyLDcgKzE1MSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjA7CiAJaW50IGNwdTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQllbjAgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKQEAgLTE3NCw3ICsxNjMsNyBAQAogCSAqIG9mIHRoZW0gYXJlIGRvbmUuCiAJICovCiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjdm14X2dldF9jb3JlX251bSgpICogMikpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0xOTMsNyArMTgyLDcgQEAKICAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CiAgKiByZWdpc3RlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfYWNrX3YyKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CiAJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CkBAIC0yMDIsNiArMTkxLDQzIEBACiB9CiAKIC8qCisgKiBDSVUgdGltZXIgdHlwZSBpbnRlcnJ1cHRzIG11c3QgYmUgYWNrbm9sZWdlZCBieSB3cml0aW5nIGEgJzEnIGJpdAorICogdG8gdGhlaXIgc3VtMCBiaXQuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMjsKKwl1aW50NjRfdCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfU1VNMChpbmRleCksIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrX3YxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2FjayhpcnEpOworCW9jdGVvbl9pcnFfY2l1MF9hY2soaXJxKTsKK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCW9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2soaXJxKTsKKwlvY3Rlb25faXJxX2NpdTBfYWNrX3YyKGlycSk7Cit9CisKKy8qCisgKiBFbmFibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMjsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKworCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSA9PSAwKQorCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMVMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKICAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgYWxsIGNvcmVzIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CiAgKiByZWdpc3RlcnMuCiAgKi8KQEAgLTIyMyw3ICsyNDksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV09SS1EwOwkvKiBCaXQgMC02MyBvZiBFTjAgKi8KIAotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMCA9CkBAIC0yMzksNyArMjY1LDcgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIpKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzIsOCArMjk4LDggQEAKIAkubmFtZSA9ICJDSVUwIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKIAkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKLQkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfdjIsCi0JLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MF9hY2tfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAogI2VuZGlmCkBAIC0yOTAsNiArMzE2LDI4IEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXJfdjIgPSB7CisJLm5hbWUgPSAiQ0lVMC1UIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VvaV92MiwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHlfdjIsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXIgPSB7CisJLm5hbWUgPSAiQ0lVMC1UIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlLAorCS5hY2sgPSBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrX3YxLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTBfZW9pLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUwX3NldF9hZmZpbml0eSwKKyNlbmRpZgorfTsKKwogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC0zMjIsMTkgKzM3MCwxMiBAQAogCXVpbnQ2NF90IGVuMTsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQkvKgotCSAqIEEgcmVhZCBsb2NrIGlzIHVzZWQgaGVyZSB0byBtYWtlIHN1cmUgb25seSBvbmUgY29yZSBpcyBldmVyCi0JICogdXBkYXRpbmcgdGhlIENJVSBlbmFibGUgYml0cyBhdCBhIHRpbWUuICBEdXJpbmcgYW4gZW5hYmxlCi0JICogdGhlIGNvcmVzIGRvbid0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuICBEdXJpbmcgYSBkaXNhYmxlCi0JICogdGhlIHdyaXRlIGxvY2sgc3RvcHMgYW55IGVuYWJsZXMgdGhhdCBtaWdodCBjYXVzZSBhCi0JICogcHJvYmxlbS4KLQkgKi8KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIAllbjEgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7CiAJZW4xIHw9IDF1bGwgPDwgYml0OwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSwgZW4xKTsKIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMzQzLDcgKzM4NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjE7CiAJaW50IGNwdTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQllbjEgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7CkBAIC0zNTUsNyArMzk2LDcgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTM3NCw3ICs0MTUsNyBAQAogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwotc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfdjIodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9hY2tfdjIodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMiArIDE7CiAJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dET0cwKTsKQEAgLTM4Myw2ICs0MjQsMjAgQEAKIH0KIAogLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2VvaV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpID09IDApCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworfQorCisvKgogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBhbGwgY29yZXMgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwpAQCAtNDA1LDcgKzQ2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQl1aW50NjRfdCBlbjEgPQpAQCAtNDIyLDcgKzQ3Nyw3IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMSkpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1NSw4ICs1MTAsOCBAQAogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyLAogCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfYWxsX3YyLAotCS5hY2sgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV92MiwKLQkuZW9pID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUxX2Fja192MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUxX2VvaV92MiwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MV9zZXRfYWZmaW5pdHlfdjIsCiAjZW5kaWYKQEAgLTQ3NSw2ICs1MzAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAorc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7CisKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfbXNpX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCWlmICghb2N0ZW9uX2hhc19mZWF0dXJlKE9DVEVPTl9GRUFUVVJFX1BDSUUpKSB7CkBAIC01MTUsMTIgKzU3MiwxMiBAQAogCQkgKi8KIAkJdWludDY0X3QgZW47CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwogCQllbiA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjApOwogCQllbiB8PSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX01TSV9CSVQwKTsKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjAsIGVuKTsKIAkJY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTUzNywxMiArNTk0LDEyIEBACiAJCSAqLwogCQl1aW50NjRfdCBlbjsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CiAJCWVuID0gY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7CiAJCWVuICY9IH4oMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9NU0lfQklUMCkpOwogCQljdm14X3dyaXRlX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCwgZW4pOwogCQljdm14X3JlYWRfY3NyKENWTVhfUEVYUF9OUEVJX01TSV9FTkIwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNTU5LDYgKzYxNiw3IEBACiB7CiAJaW50IGlycTsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAwOworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDBfdGltZXI7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwMTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTU3NCw5ICs2MzIsMTEgQEAKIAkgICAgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFhfUEFTUzJfWCkgfHwKIAkgICAgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFhfUEFTUzJfWCkpIHsKIAkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdjI7CisJCWNoaXAwX3RpbWVyID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyX3YyOwogCQljaGlwMSA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MV92MjsKIAl9IGVsc2UgewogCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MDsKKwkJY2hpcDBfdGltZXIgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXI7CiAJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxOwogCX0KIApAQCAtNTkwLDcgKzY1MCwyMSBAQAogCiAJLyogMjQgLSA4NyBDSVVfSU5UX1NVTTAgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV09SS1EwOyBpcnEgPD0gT0NURU9OX0lSUV9CT09URE1BOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMCwgaGFuZGxlX3BlcmNwdV9pcnEpOworCQlzd2l0Y2ggKGlycSkgeworCQljYXNlIE9DVEVPTl9JUlFfR01YX0RSUDA6CisJCWNhc2UgT0NURU9OX0lSUV9HTVhfRFJQMToKKwkJY2FzZSBPQ1RFT05fSVJRX0lQRF9EUlA6CisJCWNhc2UgT0NURU9OX0lSUV9LRVlfWkVSTzoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMDoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMToKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMjoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMzoKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwX3RpbWVyLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlicmVhazsKKwkJfQogCX0KIAogCS8qIDg4IC0gMTUxIENJVV9JTlRfU1VNMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYwppbmRleCBjZmRiNGMyLi42MmFjMzBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIApAQCAtMTU5LDYgKzE2MCw5MCBAQAogfQogZGV2aWNlX2luaXRjYWxsKG9jdGVvbl9ybmdfZGV2aWNlX2luaXQpOwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgb2N0ZW9uX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiZHMxMzM3IiwgMHg2OCksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfZGV2aWNlc19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG9jdGVvbl9pMmNfZGV2aWNlcywKKwkJCQkgICAgICAgQVJSQVlfU0laRShvY3Rlb25faTJjX2RldmljZXMpKTsKK30KK2FyY2hfaW5pdGNhbGwob2N0ZW9uX2kyY19kZXZpY2VzX2luaXQpOworCisjZGVmaW5lIE9DVEVPTl9JMkNfSU9fQkFTRSAweDExODAwMDAwMDEwMDB1bGwKKyNkZWZpbmUgT0NURU9OX0kyQ19JT19VTklUX09GRlNFVCAweDIwMAorCitzdGF0aWMgc3RydWN0IG9jdGVvbl9pMmNfZGF0YSBvY3Rlb25faTJjX2RhdGFbMl07CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcG9ydCwgbnVtX3BvcnRzOworCisJc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXNbXSA9IHsKKwkJeworCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQl9CisJfTsKKworCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkgfHwgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFgpKQorCQludW1fcG9ydHMgPSAyOworCWVsc2UKKwkJbnVtX3BvcnRzID0gMTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBudW1fcG9ydHM7IHBvcnQrKykgeworCQlvY3Rlb25faTJjX2RhdGFbcG9ydF0uc3lzX2ZyZXEgPSBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKTsKKwkJLypGSVhNRTogc2hvdWxkIGJlIGV4YW1pbmVkLiBBdCB0aGUgbW9tZW50IGlzIHNldCBmb3IgMTAwS2h6ICovCisJCW9jdGVvbl9pMmNfZGF0YVtwb3J0XS5pMmNfZnJlcSA9IDEwMDAwMDsKKworCQlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiaTJjLW9jdGVvbiIsIHBvcnQpOworCQlpZiAoIXBkKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlwZC0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBvY3Rlb25faTJjX2RhdGEgKyBwb3J0OworCisJCWkyY19yZXNvdXJjZXNbMF0uc3RhcnQgPQorCQkJT0NURU9OX0kyQ19JT19CQVNFICsgKHBvcnQgKiBPQ1RFT05fSTJDX0lPX1VOSVRfT0ZGU0VUKTsKKwkJaTJjX3Jlc291cmNlc1swXS5lbmQgPSBpMmNfcmVzb3VyY2VzWzBdLnN0YXJ0ICsgMHgxZjsKKwkJc3dpdGNoIChwb3J0KSB7CisJCWNhc2UgMDoKKwkJCWkyY19yZXNvdXJjZXNbMV0uc3RhcnQgPSBPQ1RFT05fSVJRX1RXU0k7CisJCQlpMmNfcmVzb3VyY2VzWzFdLmVuZCA9IE9DVEVPTl9JUlFfVFdTSTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpMmNfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gT0NURU9OX0lSUV9UV1NJMjsKKwkJCWkyY19yZXNvdXJjZXNbMV0uZW5kID0gT0NURU9OX0lSUV9UV1NJMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZCwKKwkJCQkJCSAgICBpMmNfcmVzb3VyY2VzLAorCQkJCQkJICAgIEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlcykpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCX0KKwlyZXR1cm4gcmV0OworZmFpbDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorZGV2aWNlX2luaXRjYWxsKG9jdGVvbl9pMmNfZGV2aWNlX2luaXQpOworCiAvKiBPY3Rlb24gU01JL01ESU8gaW50ZXJmYWNlLiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9tZGlvYnVzX2RldmljZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCmluZGV4IGMxOThlZmQuLjUxZTk4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAkJCQkgICBhdmFpbF9jb3JlbWFzayk7CiAJfQogCi0JcHJfaW5mbygiUmVzZXQgY29yZSAlZC4gQXZhaWxhYmxlIENvcmVtYXNrID0gJXggXG4iLCBjb3JlaWQsCisJcHJfaW5mbygiUmVzZXQgY29yZSAlZC4gQXZhaWxhYmxlIENvcmVtYXNrID0gJXhcbiIsIGNvcmVpZCwKIAkJYXZhaWxfY29yZW1hc2spOwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1BQX1JTVCwgMSA8PCBjb3JlaWQpOwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1BQX1JTVCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L3BjaS5jIGIvYXJjaC9taXBzL2NvYmFsdC9wY2kuYwppbmRleCBjZmNlN2FmLi44NWVjOWNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29iYWx0L3BjaS5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvcGNpLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2JhbHRfaW9fcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CT0gMHgxMDAwLAotCS5lbmQJPSBHVF9ERUZfUENJMF9JT19TSVpFIC0gMSwKKwkuZW5kCT0gMHhmZmZmZmZVTCwKIAkubmFtZQk9ICJQQ0kgSS9PIiwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCmluZGV4IDY4ZTkwY2QuLmY2NmQ0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwpAQCAtMSw3OCArMSwxMDIgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjI0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA4OjQ2OjE0IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfREIxMDAwPXkKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0RCMTAwMD15CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTEwMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxMDAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODUsNiArMTA5LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkyLDExICsxMTcsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDYsMTg0ICsxMzQsMjQ0IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTAwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI5NCwxMTAgKzM4MiwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDA3LDI3ICs0MTAsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDM2LDI1ICs0MzYsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5MiwxNCArNDkzLDEzIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTE2LDE3NCArNTE2LDExNSBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfM0M1ODk9bQotQ09ORklHX1BDTUNJQV8zQzU3ND1tCi1DT05GSUdfUENNQ0lBX0ZNVkoxOFg9bQotQ09ORklHX1BDTUNJQV9QQ05FVD1tCi1DT05GSUdfUENNQ0lBX05NQ0xBTj1tCi1DT05GSUdfUENNQ0lBX1NNQzkxQzkyPW0KLUNPTkZJR19QQ01DSUFfWElSQzJQUz1tCi1DT05GSUdfUENNQ0lBX0FYTkVUPW0KLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02OTEsMTYgKzYzMiwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNzEwLDM1ICs2NDksMzMgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQotQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DUz1tCisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzUwLDE5OCArNjg3LDI5MSBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgU3BlY2lhbCBISUQgZHJpdmVycwogIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRyaXZlcnMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIExFRCBUcmlnZ2VycworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgVEkgVkxZTlEKICMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC05NjAsNzQgKzk5MCw2NSBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldApAQCAtMTA0NSwxMCArMTA2NiwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKICMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKQEAgLTEwNTgsMzggKzEwNzksNzUgQEAKICMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTA5Nyw2NyArMTE1NSwyOSBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwppbmRleCA5MDgxMjgzLi5hYmI5YTU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwODo1MDoxNSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTEwMD15Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjExMDA9eQorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTEwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE3MyArMTM0LDI0MiBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1kYjExMDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CiAKICMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIyBQQy1jYXJkIGJyaWRnZXMKICMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI4MywxMTAgKzM4MCwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzk2LDI3ICs0MDgsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDI1LDI1ICs0MzQsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NTYsNiArNDY1LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00ODEsMTQgKzQ5MSwxMyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUwNSwxNjEgKzUxNCwxMjMgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQogCiAjCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwotIyBCbG9jayBkZXZpY2VzCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02NjcsMTYgKzYzOCwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNjg2LDM0ICs2NTUsMzMgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPW0KLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC03MjUsNzggKzY5Myw5MSBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQUFMgc3VwcG9ydAogIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVUxMTAwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC04MDQsOSArNzg1LDEwIEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKLUNPTkZJR19GT05UXzh4OD15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDE2PXkKICMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldApAQCAtODE2LDEzMiArNzk4LDE4NiBAQAogIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRyaXZlcnMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIExFRCBUcmlnZ2VycworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgVEkgVkxZTlEKICMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTYwLDY5ICs5OTYsNzYgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRkZTMl9GU19TRUNVUklUWT15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKQEAgLTEwNjIsMzQgKzExMDUsNzEgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTA5Nyw2NyArMTE3NywzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwppbmRleCBkYWJmMDMwLi45OTFjMjBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDoxODowOSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTIwMD15Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjEyMDA9eQorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMjAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTIwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE4MCArMTM0LDIzNSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19LU009eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItZGIxMjAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwotQ09ORklHX1BDTUNJQV9BVTFYMDA9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0yOTAsMTA3ICszNzMsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDAwLDIxICs0MDEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDIzLDI1ICs0MjcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDU0LDYgKzQ1OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDc5LDE5ICs0ODQsMjEgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTUwMywyMjQgKzUxMCwxMzQgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogQ09ORklHX01URF9OQU5EPXkKICMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CiAjIENPTkZJR19NVERfTkFORF9BVTE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15Ci1DT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKKyMgQ09ORklHX0lERV9QUk9DX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYPXkKIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BPXkKICMgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX1NFUVRTX1BFUl9SUT0xMjgKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIFNDU0kgYWRhcHRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ01DSUFfQUhBMTUyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTklOSkFfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfUUxPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TWU01M0M1MDAgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTcyOCwxNiArNjQ1LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03NDcsMjggKzY2MiwyNiBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPXkKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTc3NiwzMyArNjg5LDIyIEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwpAQCAtODExLDIyMyArNzEzLDYyNCBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQKIAogIwotIyBJMkMgc3VwcG9ydAorIyBJMkMgQWxnb3JpdGhtcwogIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKIAogIwotIyBTUEkgc3VwcG9ydAorIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FVMTU1MD15CitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CitDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIyBOYXRpdmUgZHJpdmVycwogIwotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0FETTEwMjU9eQorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTcwPXkKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVUxMjAwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVFM9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPXkKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0M9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQ19JMlM9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQ19BQzk3PXkKK0NPTkZJR19TTkRfU09DX0RCMTIwMD15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15CisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQz15CitDT05GSUdfU05EX1NPQ19XTTg3MzE9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPXkKK0NPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBVU0IgSW5wdXQgRGV2aWNlcwogIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCi1DT05GSUdfVVNCX0dBREdFVD1tCi0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19BVTFYPXkKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZGV2aWNlcworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKICMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQkxPQ0s9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVTFYPXkKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CiAKICMKICMgTEVEIGRyaXZlcnMKICMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCiAjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKICMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCiAjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgSTJDIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIERldmljZXMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIyBUSSBWTFlOUQogIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRlNfRlM9eQotIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCi1DT05GSUdfSVNPOTY2MF9GUz1tCitDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX0ZTPXkKIENPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCi1DT05GSUdfRkFUX0ZTPW0KLUNPTkZJR19NU0RPU19GUz1tCi1DT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldApAQCAtMTAzNiwyMSArMTMzOSwxNyBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDU5LDI3ICsxMzU4LDM2IEBACiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKICMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQogQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQpAQCAtMTA4Nyw5MyArMTM5NSwxNDAgQEAKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz15Ci0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIworIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRUZJX1BBUlRJVElPTj15CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfOD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KLUNPTkZJR19OTFNfQVNDSUk9bQotQ09ORklHX05MU19JU084ODU5XzE9bQotQ09ORklHX05MU19JU084ODU5XzI9bQotQ09ORklHX05MU19JU084ODU5XzM9bQotQ09ORklHX05MU19JU084ODU5XzQ9bQotQ09ORklHX05MU19JU084ODU5XzU9bQotQ09ORklHX05MU19JU084ODU5XzY9bQotQ09ORklHX05MU19JU084ODU5Xzc9bQotQ09ORklHX05MU19JU084ODU5Xzk9bQotQ09ORklHX05MU19JU084ODU5XzEzPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotQ09ORklHX05MU19LT0k4X1I9bQotQ09ORklHX05MU19LT0k4X1U9bQotQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0ibWVtPTQ4TSIKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCIKICMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExODEsNjcgKzE1MzYsMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19ITUFDPW0KLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwppbmRleCBhMTUxMzEzLi41NDI0YzkxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTEsODAgKzEsMTA0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNiAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwODo0NjozMyAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTUwMD15Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjE1MDA9eQorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1MDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Nyw2ICsxMTEsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTQsMTEgKzExOSwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwOCwxMzcgKzEzNiwyMDcgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTUwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKQEAgLTI0Niw1MSArMzQ0LDQ5IEBACiAjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAogIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUFfQVUxWDAwPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCisjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMzAxLDExMCArMzk3LDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MTQsMjcgKzQyNSwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00NDMsMjUgKzQ1MSwyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDc0LDYgKzQ4Miw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk5LDE0ICs1MDgsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyNCwxNTIgKzUzMywxNTIgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLUNPTkZJR19TR0lfSU9DND1tCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQogIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiAjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKK0NPTkZJR19CTEtfREVWX0lERVBDST15CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTY3Nyw4OCArNjg2LDUxIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTc2NiwxNiArNzM4LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03ODUsMzMgKzc1NSwzNCBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKQEAgLTgyNSwzMDEgKzc5NiwxNDMgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIworQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19TT1VORD15CisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKLUNPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX1JBV01JREk9bQotQ09ORklHX1NORF9TRVFVRU5DRVI9bQotQ09ORklHX1NORF9TRVFfRFVNTVk9bQotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPW0KLUNPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci1DT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVklSTUlEST1tCi1DT05GSUdfU05EX01UUEFWPW0KLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIFBDSSBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBNSVBTIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQVUxWDAwPW0KLQotIwotIyBVU0IgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgYXVkaW8gc3VwcG9ydAotIwotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLUNPTkZJR19TT1VORF9QUklNRT15Ci0jIENPTkZJR19PQlNPTEVURV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLQotIwotIyBISUQgRGV2aWNlcwotIwotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1lFQUxJTks9bQotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMTI4LDcgKzk0MSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTExMzYsMTEyICs5NDksMTA3IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotQ09ORklHX1VTQl9MRD1tCisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgVEkgVkxZTlEKICMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKLSMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTEyNjAsNzQgKzEwNjgsODEgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRkZTMl9GU19TRUNVUklUWT15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CkBAIC0xMzQ1LDEwICsxMTYwLDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMzU4LDM4ICsxMTczLDc2IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEzOTcsNjcgKzEyNTAsMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKaW5kZXggNmI2NDMzOS4uOTQ5YjZkYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCkBAIC0xLDc5ICsxLDEwMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MjcgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMDg6NTg6MjIgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19EQjE1NTA9eQotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfREIxNTUwPXkKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTU1MD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1NTA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Niw2ICsxMTAsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTMsMTEgKzExOCwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNywxMzcgKzEzNSwyMDUgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTU1MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotQ09ORklHX0NBUkRCVVM9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRCVVMgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwpAQCAtMjQ1LDUxICszNDEsNDkgQEAKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9BVTFYMDA9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0zMDAsMTEwICszOTQsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQxMywyNyArNDIyLDI0IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0MiwyNSArNDQ4LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ3Myw2ICs0NzksNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5OCwyMCArNTA1LDIzIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIwogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTIzLDEwNSArNTMzLDk2IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19NVERfTkFORD1tCitDT05GSUdfTVREX05BTkQ9eQogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz1tCi1DT05GSUdfTVREX05BTkRfQVUxNTUwPW0KKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfQVUxNTUwPXkKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CisjIENPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNjMxLDgyICs2MzIsNjUgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldApAQCAtNzE0LDk2ICs2OTgsNTMgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX1FMQTNYWFg9bQotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzPW0KLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUWEVOX05JQz1tCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBXzNDNTg5PW0KLUNPTkZJR19QQ01DSUFfM0M1NzQ9bQotQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KLUNPTkZJR19QQ01DSUFfUENORVQ9bQotQ09ORklHX1BDTUNJQV9OTUNMQU49bQotQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCi1DT05GSUdfUENNQ0lBX1hJUkMyUFM9bQotQ09ORklHX1BDTUNJQV9BWE5FVD1tCi0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTgxMSwxNiArNzUyLDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC04MzAsMjYgKzc2OSwyNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC04NjYsMTk5ICs4MDYsNDIwIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIHN1cHBvcnQKKyMgSTJDIEFsZ29yaXRobXMKICMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwogIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0FVMTU1MD15CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVUxNTUwPXkKK0NPTkZJR19TUElfQklUQkFORz15CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgSElEIERldmljZXMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorQ09ORklHX1NORF9IUlRJTUVSPXkKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDPXkKKyMgQ09ORklHX1NORF9TT0NfREIxMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcwogIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIEkyQyBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFNQSSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBEZXZpY2VzCisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMgVEkgVkxZTlEKICMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMDc3LDc1ICsxMjM4LDgyIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX0NPTkZJR0ZTX0ZTPXkKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKQEAgLTExNjIsMTAgKzEzMzAsMTAgQEAKICMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKICMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKQEAgLTExNzUsMzggKzEzNDMsNzUgQEAKICMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIxNCw2NyArMTQxOSwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCmluZGV4IGVkODRiNGMuLjg0YjY1MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzLXJjMgotIyBUdWUgQXVnICA3IDEzOjA0OjI0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKKyMgV2VkIEZlYiAgMyAxODoxMjozMSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTksMjAgKzksMjggQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAotIyBDT05GSUdfTEVNT1RFX0ZVTE9ORyBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKIENPTkZJR19TR0lfSVAyNz15CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldApAQCAtMzMsMzIgKzQxLDM5IEBACiAjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKIENPTkZJR19TR0lfU05fTV9NT0RFPXkKICMgQ09ORklHX1NHSV9TTl9OX01PREUgaXMgbm90IHNldAogIyBDT05GSUdfTUFQUEVEX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRVBMSUNBVEVfS1RFWFQgaXMgbm90IHNldAogIyBDT05GSUdfUkVQTElDQVRFX0VYSEFORExFUlMgaXMgbm90IHNldAorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfQVJDPXkKIENPTkZJR19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfQklHX0VORElBTj15CiAjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQorQ09ORklHX0RFRkFVTFRfU0dJX1BBUlRJVElPTj15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD03CiBDT05GSUdfQVJDNjQ9eQogQ09ORklHX0JPT1RfRUxGNjQ9eQpAQCAtNjYsNyArODEsOCBAQAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCi0jIENPTkZJR19DUFVfTE9PTkdTT04yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTc5LDYgKzk1LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTg2LDYgKzEwMyw3IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX0hBU19DUFVfUjEwMDAwPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKQEAgLTk5LDYgKzExNyw3IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKQEAgLTExMCw2ICsxMjksNyBAQAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX05PREVTX1NISUZUPTYKQEAgLTEyMCwxNiArMTQwLDIyIEBACiBDT05GSUdfRElTQ09OVElHTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTY1NTM2CiBDT05GSUdfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19OUl9DUFVTX0RFRkFVTFRfNjQ9eQogQ09ORklHX05SX0NQVVM9NjQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDIsMTMgKzE2OCwxMyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX0JLTD15CiAjIENPTkZJR19NSVBTX0lOU0FORV9MQVJHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTE2MiwyMCArMTg4LDQxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX0NQVVNFVFM9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1BST0NfUElEX0NQVVNFVD15CisjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKIENPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTE4NCw0NCArMjMxLDkyIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKK0NPTkZJR19TTE9XX1dPUks9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CitDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCkBAIC0yMzAsMTEgKzMyNSwxMCBAQAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKQEAgLTI0Miw4ICszMzYsOSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CkBAIC0yNTUsMTMgKzM1MCwxMCBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX05FVD15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwpAQCAtMjczLDYgKzM2NSw4IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiBDT05GSUdfWEZSTV9NSUdSQVRFPXkKK0NPTkZJR19YRlJNX1NUQVRJU1RJQ1M9eQorQ09ORklHX1hGUk1fSVBDT01QPW0KIENPTkZJR19ORVRfS0VZPXkKIENPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQpAQCAtMjkyLDE5ICszODYsNDAgQEAKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVF9MUk89eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogQ09ORklHX1RDUF9NRDVTSUc9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKK0NPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lQVjZfTUlQNj1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfU0lUXzZSRD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKK0NPTkZJR19JUFY2X01ST1VURT15CitDT05GSUdfSVBWNl9QSU1TTV9WMj15CiBDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTMxNCw5ICs0MjksMTEgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTMyNiwxMiArNDQzLDkgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15Ci1DT05GSUdfTkVUX1NDSF9GSUZPPXkKIAogIwogIyBRdWV1ZWluZy9TY2hlZHVsaW5nCkBAIC0zNDAsNyArNDU0LDcgQEAKIENPTkZJR19ORVRfU0NIX0hUQj1tCiBDT05GSUdfTkVUX1NDSF9IRlNDPW0KIENPTkZJR19ORVRfU0NIX1BSSU89bQotQ09ORklHX05FVF9TQ0hfUlI9bQorQ09ORklHX05FVF9TQ0hfTVVMVElRPXkKIENPTkZJR19ORVRfU0NIX1JFRD1tCiBDT05GSUdfTkVUX1NDSF9TRlE9bQogQ09ORklHX05FVF9TQ0hfVEVRTD1tCkBAIC0zNDgsNiArNDYyLDcgQEAKIENPTkZJR19ORVRfU0NIX0dSRUQ9bQogQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KIENPTkZJR19ORVRfU0NIX05FVEVNPW0KKyMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQogCiAjCkBAIC0zNjQsNDEgKzQ3OSw2MyBAQAogQ09ORklHX0NMU19VMzJfTUFSSz15CiBDT05GSUdfTkVUX0NMU19SU1ZQPW0KIENPTkZJR19ORVRfQ0xTX1JTVlA2PW0KK0NPTkZJR19ORVRfQ0xTX0ZMT1c9bQorQ09ORklHX05FVF9DTFNfQ0dST1VQPXkKICMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfQUNUPXkKIENPTkZJR19ORVRfQUNUX1BPTElDRT15CiBDT05GSUdfTkVUX0FDVF9HQUNUPW0KIENPTkZJR19HQUNUX1BST0I9eQogQ09ORklHX05FVF9BQ1RfTUlSUkVEPW0KK0NPTkZJR19ORVRfQUNUX05BVD1tCiBDT05GSUdfTkVUX0FDVF9QRURJVD1tCiAjIENPTkZJR19ORVRfQUNUX1NJTVAgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUE9MSUNFPXkKK0NPTkZJR19ORVRfQUNUX1NLQkVESVQ9bQogIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLUNPTkZJR19DRkc4MDIxMT1tCitDT05GSUdfRklCX1JVTEVTPXkKK0NPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XRVhUX0NPUkU9eQorQ09ORklHX1dFWFRfUFJPQz15CitDT05GSUdfV0VYVF9TUFk9eQorQ09ORklHX1dFWFRfUFJJVj15CitDT05GSUdfQ0ZHODAyMTE9bQorIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9XRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX0xJQjgwMjExPW0KK0NPTkZJR19MSUI4MDIxMV9DUllQVF9XRVA9bQorQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVA9bQorIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPW0KLSMgQ09ORklHX01BQzgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQorQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0xFRFM9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiBDT05GSUdfUkZLSUxMPW0KK0NPTkZJR19SRktJTExfTEVEUz15CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCkBAIC00MDgsOSArNTQ1LDEzIEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPW0KICMgQ09ORklHX01URCBpcyBub3Qgc2V0CkBAIC00MjMsMTQgKzU2NCwxOSBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfT1NEPW0KICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NXzkzQ1g2PW0KK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00NTMsMTAgKzU5OSw2IEBACiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9bQogQ09ORklHX0NIUl9ERVZfU0NIPW0KLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKQEAgLTQ3MSwxMSArNjEzLDE4IEBACiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiBDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQogQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DWEdCM19JU0NTST1tCitDT05GSUdfU0NTSV9CTlgyX0lTQ1NJPW0KK0NPTkZJR19CRTJJU0NTST1tCiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9IUFNBPW0KICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV8zV19TQVM9bQogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTQ4MywxMSArNjMyLDIxIEBACiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogQ09ORklHX1NDU0lfQUlDOTRYWD1tCiAjIENPTkZJR19BSUM5NFhYX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01WU0FTPW0KKyMgQ09ORklHX1NDU0lfTVZTQVNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfRFBUX0kyTz1tCisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01QVDJTQVM9bQorQ09ORklHX1NDU0lfTVBUMlNBU19NQVhfU0dFPTEyOAorIyBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorQ09ORklHX0xJQkZDPW0KKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC01MDIsMTYgKzY2MSwzMSBAQAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QTUNSQUlEPW0KKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0JGQV9GQz1tCitDT05GSUdfU0NTSV9ESD1tCitDT05GSUdfU0NTSV9ESF9SREFDPW0KK0NPTkZJR19TQ1NJX0RIX0hQX1NXPW0KK0NPTkZJR19TQ1NJX0RIX0VNQz1tCitDT05GSUdfU0NTSV9ESF9BTFVBPW0KK0NPTkZJR19TQ1NJX09TRF9JTklUSUFUT1I9bQorQ09ORklHX1NDU0lfT1NEX1VMRD1tCitDT05GSUdfU0NTSV9PU0RfRFBSSU5UX1NFTlNFPTEKKyMgQ09ORklHX1NDU0lfT1NEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj1tCiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ0NTY9eQotQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorIyBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPW0KQEAgLTUxOSwzNiArNjkzLDM5IEBACiBDT05GSUdfRE1fQ1JZUFQ9bQogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX0xPR19VU0VSU1BBQ0U9bQogQ09ORklHX0RNX1pFUk89bQogQ09ORklHX0RNX01VTFRJUEFUSD1tCi1DT05GSUdfRE1fTVVMVElQQVRIX0VNQz1tCi1DT05GSUdfRE1fTVVMVElQQVRIX1JEQUM9bQorQ09ORklHX0RNX01VTFRJUEFUSF9RTD1tCitDT05GSUdfRE1fTVVMVElQQVRIX1NUPW0KICMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCitDT05GSUdfRE1fVUVWRU5UPXkKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRT15CiBDT05GSUdfSUZCPW0KICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogQ09ORklHX01BQ1ZMQU49bQogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CitDT05GSUdfVkVUSD1tCiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj1tCitDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCkBAIC01NjIsMjMgKzczOSw1MSBAQAogQ09ORklHX1NNU0NfUEhZPW0KICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfSUNQTFVTX1BIWT1tCitDT05GSUdfUkVBTFRFS19QSFk9bQorQ09ORklHX05BVElPTkFMX1BIWT1tCitDT05GSUdfU1RFMTBYUD1tCitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPW0KICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTURJT19CSVRCQU5HPW0KIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiBDT05GSUdfQVg4ODc5Nj1tCitDT05GSUdfQVg4ODc5Nl85M0NYNj15CiBDT05GSUdfU0dJX0lPQzNfRVRIPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD1tCiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorQ09ORklHX0VUSE9DPW0KK0NPTkZJR19TTVNDOTExWD1tCitDT05GSUdfRE5FVD1tCiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19CNDQ9bQorQ09ORklHX0I0NF9QQ0lfQVVUT1NFTEVDVD15CitDT05GSUdfQjQ0X1BDSUNPUkVfQVVUT1NFTEVDVD15CitDT05GSUdfQjQ0X1BDST15CitDT05GSUdfS1M4ODQyPW0KK0NPTkZJR19LUzg4NTFfTUxMPW0KK0NPTkZJR19BVEwyPW0KIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDBFPW0KK0NPTkZJR19JUDEwMDA9bQorQ09ORklHX0lHQj1tCitDT05GSUdfSUdCVkY9bQogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01ODgsMjQgKzc5Myw3NSBAQAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiBDT05GSUdfVklBX1ZFTE9DSVRZPW0KICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19CTlgyPW0KK0NPTkZJR19DTklDPW0KIENPTkZJR19RTEEzWFhYPW0KICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX0FUTDFFPW0KK0NPTkZJR19BVEwxQz1tCitDT05GSUdfSk1FPW0KIENPTkZJR19ORVRERVZfMTAwMDA9eQorQ09ORklHX01ESU89bQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKIENPTkZJR19DSEVMU0lPX1QzPW0KK0NPTkZJR19FTklDPW0KK0NPTkZJR19JWEdCRT1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorQ09ORklHX1ZYR0U9bQorIyBDT05GSUdfVlhHRV9ERUJVR19UUkFDRV9BTEwgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogQ09ORklHX05FVFhFTl9OSUM9bQotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19OSVU9bQorQ09ORklHX01MWDRfRU49bQorQ09ORklHX01MWDRfQ09SRT1tCisjIENPTkZJR19NTFg0X0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19URUhVVEk9bQorQ09ORklHX0JOWDJYPW0KK0NPTkZJR19RTEdFPW0KK0NPTkZJR19TRkM9bQorQ09ORklHX0JFMk5FVD1tCiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKK0NPTkZJR19XTEFOPXkKK0NPTkZJR19MSUJFUlRBU19USElORklSTT1tCitDT05GSUdfQVRNRUw9bQorQ09ORklHX1BDSV9BVE1FTD1tCitDT05GSUdfUFJJU001ND1tCitDT05GSUdfUlRMODE4MD1tCitDT05GSUdfQURNODIxMT1tCisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CitDT05GSUdfTVdMOEs9bQorQ09ORklHX0FUSF9DT01NT049bQorIyBDT05GSUdfQVRIX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVEg1Sz1tCisjIENPTkZJR19BVEg1S19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRIOUtfSFc9bQorQ09ORklHX0FUSDlLX0NPTU1PTj1tCitDT05GSUdfQVRIOUs9bQorQ09ORklHX0I0Mz1tCitDT05GSUdfQjQzX1BDSV9BVVRPU0VMRUNUPXkKK0NPTkZJR19CNDNfUENJQ09SRV9BVVRPU0VMRUNUPXkKK0NPTkZJR19CNDNfUEhZX0xQPXkKK0NPTkZJR19CNDNfTEVEUz15CitDT05GSUdfQjQzX0hXUk5HPXkKKyMgQ09ORklHX0I0M19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQjQzTEVHQUNZPW0KK0NPTkZJR19CNDNMRUdBQ1lfUENJX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0M0xFR0FDWV9QQ0lDT1JFX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0M0xFR0FDWV9MRURTPXkKK0NPTkZJR19CNDNMRUdBQ1lfSFdSTkc9eQorIyBDT05GSUdfQjQzTEVHQUNZX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CNDNMRUdBQ1lfRE1BPXkKK0NPTkZJR19CNDNMRUdBQ1lfUElPPXkKK0NPTkZJR19CNDNMRUdBQ1lfRE1BX0FORF9QSU9fTU9ERT15CisjIENPTkZJR19CNDNMRUdBQ1lfRE1BX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQjQzTEVHQUNZX1BJT19NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUQVA9bQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKK0NPTkZJR19IT1NUQVBfUExYPW0KK0NPTkZJR19IT1NUQVBfUENJPW0KIENPTkZJR19JUFcyMTAwPW0KIENPTkZJR19JUFcyMTAwX01PTklUT1I9eQogQ09ORklHX0lQVzIxMDBfREVCVUc9eQpAQCAtNjE1LDM4ICs4NzEsNTcgQEAKIENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTPXkKIENPTkZJR19JUFcyMjAwX1FPUz15CiBDT05GSUdfSVBXMjIwMF9ERUJVRz15CitDT05GSUdfTElCSVBXPW0KKyMgQ09ORklHX0xJQklQV19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVdMV0lGST1tCitDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVD15CisjIENPTkZJR19JV0xXSUZJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JV0xBR049bQorQ09ORklHX0lXTDQ5NjU9eQorQ09ORklHX0lXTDUwMDA9eQorQ09ORklHX0lXTDM5NDU9bQorQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQ9eQogQ09ORklHX0xJQkVSVEFTPW0KICMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19IRVJNRVM9bQorIyBDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQgaXMgbm90IHNldAogQ09ORklHX1BMWF9IRVJNRVM9bQogQ09ORklHX1RNRF9IRVJNRVM9bQogQ09ORklHX05PUlRFTF9IRVJNRVM9bQogQ09ORklHX1BDSV9IRVJNRVM9bQotQ09ORklHX0FUTUVMPW0KLUNPTkZJR19QQ0lfQVRNRUw9bQotQ09ORklHX1BSSVNNNTQ9bQotQ09ORklHX0hPU1RBUD1tCi1DT05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKLUNPTkZJR19IT1NUQVBfRklSTVdBUkVfTlZSQU09eQotQ09ORklHX0hPU1RBUF9QTFg9bQotQ09ORklHX0hPU1RBUF9QQ0k9bQotQ09ORklHX0JDTTQzWFg9bQotQ09ORklHX0JDTTQzWFhfREVCVUc9eQotQ09ORklHX0JDTTQzWFhfRE1BPXkKLUNPTkZJR19CQ000M1hYX1BJTz15Ci1DT05GSUdfQkNNNDNYWF9ETUFfQU5EX1BJT19NT0RFPXkKLSMgQ09ORklHX0JDTTQzWFhfRE1BX01PREUgaXMgbm90IHNldAotIyBDT05GSUdfQkNNNDNYWF9QSU9fTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfUDU0X0NPTU1PTj1tCitDT05GSUdfUDU0X1BDST1tCitDT05GSUdfUDU0X0xFRFM9eQorQ09ORklHX1JUMlgwMD1tCitDT05GSUdfUlQyNDAwUENJPW0KK0NPTkZJR19SVDI1MDBQQ0k9bQorQ09ORklHX1JUNjFQQ0k9bQorQ09ORklHX1JUMjgwMFBDSV9QQ0k9bQorQ09ORklHX1JUMjgwMFBDST1tCitDT05GSUdfUlQyODAwX0xJQj1tCitDT05GSUdfUlQyWDAwX0xJQl9QQ0k9bQorQ09ORklHX1JUMlgwMF9MSUI9bQorQ09ORklHX1JUMlgwMF9MSUJfSFQ9eQorQ09ORklHX1JUMlgwMF9MSUJfRklSTVdBUkU9eQorQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPPXkKK0NPTkZJR19SVDJYMDBfTElCX0xFRFM9eQorIyBDT05GSUdfUlQyWDAwX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XTDEyWFg9bQorQ09ORklHX1dMMTI1MT1tCisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NjQsMTMgKzkzOSwxNiBAQAogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9bQogQ09ORklHX1NFUklPX1JBVz1tCitDT05GSUdfU0VSSU9fQUxURVJBX1BTMj1tCiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfTk9aT01JPW0KIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNjkzLDk1ICs5NzEsMjU4IEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19SVEMgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNPW0KICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPW0KK0NPTkZJR19JMkNfQUxHT1BDQT1tCiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKK0NPTkZJR19JMkNfQUxJMTUzNT1tCitDT05GSUdfSTJDX0FMSTE1NjM9bQorQ09ORklHX0kyQ19BTEkxNVgzPW0KK0NPTkZJR19JMkNfQU1ENzU2PW0KK0NPTkZJR19JMkNfQU1EODExMT1tCitDT05GSUdfSTJDX0k4MDE9bQorQ09ORklHX0kyQ19JU0NIPW0KK0NPTkZJR19JMkNfUElJWDQ9bQorQ09ORklHX0kyQ19ORk9SQ0UyPW0KK0NPTkZJR19JMkNfU0lTNTU5NT1tCitDT05GSUdfSTJDX1NJUzYzMD1tCitDT05GSUdfSTJDX1NJUzk2WD1tCitDT05GSUdfSTJDX1ZJQT1tCitDT05GSUdfSTJDX1ZJQVBSTz1tCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX09DT1JFUz1tCitDT05GSUdfSTJDX1NJTVRFQz1tCisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUPW0KK0NPTkZJR19JMkNfVEFPU19FVk09bQorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09bQorQ09ORklHX0kyQ19TVFVCPW0KKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19TRU5TT1JTX1RTTDI1NTA9bQorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKK0NPTkZJR19QUFM9bQorIyBDT05GSUdfUFBTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD1tCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0I9bQorQ09ORklHX1NTQl9TUFJPTT15CitDT05GSUdfU1NCX1BDSUhPU1RfUE9TU0lCTEU9eQorQ09ORklHX1NTQl9QQ0lIT1NUPXkKK0NPTkZJR19TU0JfQjQzX1BDSV9CUklER0U9eQorIyBDT05GSUdfU1NCX1NJTEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRV9QT1NTSUJMRT15CitDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFPXkKKyMgQ09ORklHX1NTQl9EUklWRVJfTUlQUyBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfV004MzUwPW0KK0NPTkZJR19NRkRfV004MzUwX0kyQz1tCitDT05GSUdfTUZEX1BDRjUwNjMzPW0KK0NPTkZJR19QQ0Y1MDYzM19BREM9bQorQ09ORklHX1BDRjUwNjMzX0dQSU89bQorQ09ORklHX0FCMzEwMF9DT1JFPW0KK0NPTkZJR19BQjMxMDBfT1RQPW0KKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz1tCisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0xQMzk0ND1tCitDT05GSUdfTEVEU19QQ0E5NTVYPW0KK0NPTkZJR19MRURTX1dNODM1MD1tCitDT05GSUdfTEVEU19CRDI4MDI9bQorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCitDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD1tCitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049bQorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFJUQyBpbnRlcmZhY2VzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBETUEgRGV2aWNlcworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQ4VDM1PXkKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfV004MzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGNTA2MzMgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQUIzMTAwPW0KIAogIwotIyBVc2Vyc3BhY2UgSS9PCisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKIENPTkZJR19VSU89eQogIyBDT05GSUdfVUlPX0NJRiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldAorQ09ORklHX1VJT19TTVg9bQorQ09ORklHX1VJT19BRUM9bQorQ09ORklHX1VJT19TRVJDT1MzPW0KK0NPTkZJR19VSU9fUENJX0dFTkVSSUM9bQorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTc5MiwzNiArMTIzMyw1OCBAQAogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUNF9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotQ09ORklHX0pCRF9ERUJVRz15CitDT05GSUdfSkJEMj15CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfWEZTX0ZTPW0KIENPTkZJR19YRlNfUVVPVEE9eQotQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKIENPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0NVU0U9bQogQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIworIyBDYWNoZXMKKyMKK0NPTkZJR19GU0NBQ0hFPW0KK0NPTkZJR19GU0NBQ0hFX1NUQVRTPXkKKyMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTQ0FDSEVfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9PQkpFQ1RfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVGSUxFUz1tCisjIENPTkZJR19DQUNIRUZJTEVTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTg0MCwxNiArMTMwMywxMyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiBDT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldApAQCAtODU5LDI4ICsxMzE5LDMyIEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9bQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfT01GU19GUz1tCiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19FWE9GU19GUz1tCisjIENPTkZJR19FWE9GU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogIyBDT05GSUdfUk9PVF9ORlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC05MTAsMzUgKzEzNzQsMzcgQEAKICMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiAjIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwogQ09ORklHX0RMTT1tCiAjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0NST1NTQ09NUElMRT15CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCkBAIC05NDcsNjUgKzE0MTMsMTQwIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX1hPUl9CTE9DS1M9bQotQ09ORklHX0FTWU5DX0NPUkU9bQotQ09ORklHX0FTWU5DX01FTUNQWT1tCi1DT05GSUdfQVNZTkNfWE9SPW0KK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX1hPUl9CTE9DS1M9eQorQ09ORklHX0FTWU5DX0NPUkU9eQorQ09ORklHX0FTWU5DX01FTUNQWT15CitDT05GSUdfQVNZTkNfWE9SPXkKK0NPTkZJR19BU1lOQ19QUT15CitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQogQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0ZJUFM9eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9bQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorQ09ORklHX0NSWVBUT19DUllQVEQ9bQorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fU0VRSVY9bQorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0NUUz1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQorCisjCisjIEhhc2ggbW9kZXMKKyMKIENPTkZJR19DUllQVE9fSE1BQz15CiBDT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fVk1BQz1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19STUQxMjg9bQorQ09ORklHX0NSWVBUT19STUQxNjA9bQorQ09ORklHX0NSWVBUT19STUQyNTY9bQorQ09ORklHX0NSWVBUT19STUQzMjA9bQogQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19DUllQVEQ9bQotQ09ORklHX0NSWVBUT19ERVM9eQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIwogQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1pMSUI9bQorQ09ORklHX0NSWVBUT19MWk89bQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPW0KIENPTkZJR19DUllQVE9fSFc9eQorQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYPW0KKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYX1JORyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj15CitDT05GSUdfQ1JDX1QxMERJRj1tCitDT05GSUdfQ1JDX0lUVV9UPW0KIENPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19DUkM3PW0KIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT1tCiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19QTElTVD15CitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCmluZGV4IGI3MWEwYTQuLjRjYWEwZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2Ci0jIE1vbiBOb3YgIDkgMjM6NDI6NDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjQxOjA5IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMjcsNiArMjcsNyBAQAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CkBAIC01MSw2ICs1Miw5IEBACiAjIENPTkZJR19MRU1PVEVfRlVMT09ORzJFIGlzIG5vdCBzZXQKIENPTkZJR19MRU1PVEVfTUFDSDJGPXkKIENPTkZJR19DUzU1MzY9eQorQ09ORklHX0NTNTUzNl9NRkdQVD15CitDT05GSUdfTE9PTkdTT05fU1VTUEVORD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldApAQCAtNjMsMTMgKzY3LDggQEAKIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKIENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfQ0VWVF9SNEtfTElCPXkKLUNPTkZJR19DRVZUX1I0Sz15Ci1DT05GSUdfQ1NSQ19SNEtfTElCPXkKLUNPTkZJR19DU1JDX1I0Sz15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19JODI1OT15CiAjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldApAQCAtMTA5LDEzICsxMDgsMTUgQEAKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MD15CiBDT05GSUdfQ1BVX0xPT05HU09OMj15CiBDT05GSUdfU1lTX0hBU19DUFVfTE9PTkdTT04yRj15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0NQVUZSRVE9eQorQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfVU5DQUNIRURfQUNDRUxFUkFURUQ9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMzcsNyArMTM4LDYgQEAKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX1NZU19TVVBQT1JUU19ISUdITUVNPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0xNDYsMTcgKzE0NiwxMSBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0KLSMKLSMgTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQKLSMKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfVElDS19PTkVTSE9UPXkKQEAgLTE3NSw3ICsxNjksNyBAQAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0xOTQsOSArMTg4LDkgQEAKIENPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKIENPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CiBDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15Ci0jIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0daSVA9eQogIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLUNPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtMjExLDYgKzIwNSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9NjQKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMjI0LDcgKzIxOSwxMSBAQAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0yNTYsMTQgKzI1NSwxOCBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19TTE9XX1dPUktfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI4MywxNCArMjg2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9bQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTMxNCw3ICszNDQsNyBAQAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CkBAIC0zMzUsOSArMzY1LDM0IEBACiBDT05GSUdfSElCRVJOQVRJT05fTlZTPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iL2Rldi9oZGEzIgotIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CitDT05GSUdfTUlQU19FWFRFUk5BTF9USU1FUj15CitDT05GSUdfTUlQU19DUFVGUkVRPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorQ09ORklHX0NQVV9GUkVRX0RFQlVHPXkKK0NPTkZJR19DUFVfRlJFUV9TVEFUPW0KK0NPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCisKKyMKKyMgQ1BVRnJlcSBwcm9jZXNzb3IgZHJpdmVycworIworQ09ORklHX0xPT05HU09OMl9DUFVGUkVRPW0KIENPTkZJR19ORVQ9eQotQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKQEAgLTM0NiwxMSArNDAxLDEyIEBACiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKQEAgLTM2MSwxMiArNDE3LDEzIEBACiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKICMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfQVJQRD15CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CkBAIC0zOTksMzAgKzQ1NiwzNCBAQAogIyBDT05GSUdfREVGQVVMVF9XRVNUV09PRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX1RDUF9NRDVTSUc9eQogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKKyMgQ09ORklHX0lQVjZfUk9VVEVfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPW0KKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKICMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX1NFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtNDQ2LDE3ICs1MDcsMjIgQEAKICMKICMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0JSSURHRT1tCiAjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CkBAIC01MTgsMjYgKzU4NCw2MSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCitDT05GSUdfQlRfUkZDT01NX1RUWT15CitDT05GSUdfQlRfQk5FUD1tCitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lCVFVTQj1tCisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJQkZVU0I9bQorQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCitDT05GSUdfV0VYVF9DT1JFPXkKK0NPTkZJR19XRVhUX1BST0M9eQorQ09ORklHX0NGRzgwMjExPW0KKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CisjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0NGRzgwMjExX1dFWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKK0NPTkZJR19MSUI4MDIxMT1tCitDT05GSUdfTElCODAyMTFfREVCVUc9eQorQ09ORklHX01BQzgwMjExPW0KKyMgQ09ORklHX01BQzgwMjExX1JDX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUw9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsIgorIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfTEVEUz15CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogQ09ORklHX1JGS0lMTD1tCi0jIENPTkZJR19SRktJTExfSU5QVVQgaXMgbm90IHNldAorQ09ORklHX1JGS0lMTF9MRURTPXkKK0NPTkZJR19SRktJTExfSU5QVVQ9eQogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU1LDcgKzY1Niw3IEBACiBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKIENPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9bQogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKQEAgLTU2Niw3ICs2NjcsMTIgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTU3NywxOSArNjgzLDcgQEAKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiAKQEAgLTYxOSw4ICs3MTMsNyBAQAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldApAQCAtNzAwLDcgKzc5MywyOSBAQAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorQ09ORklHX01EX1JBSUQxMD1tCitDT05GSUdfTURfUkFJRDQ1Nj1tCitDT05GSUdfTURfUkFJRDZfUFE9bQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9GQVVMVFk9bQorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0RFQlVHPXkKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fTE9HX1VTRVJTUEFDRT1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfUUw9bQorQ09ORklHX0RNX01VTFRJUEFUSF9TVD1tCitDT05GSUdfRE1fREVMQVk9bQorQ09ORklHX0RNX1VFVkVOVD15CiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCkBAIC03MTIsMTkgKzgyNywxOSBAQAogIwogCiAjCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0lGQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVk9bQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KK0NPTkZJR19WRVRIPW0KICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC03MzgsNiArODUzLDcgQEAKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CkBAIC03NjksNyArODg1LDcgQEAKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CiBDT05GSUdfODEzOVRPTz15CiAjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9eQorIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKQEAgLTc5NSw2ICs5MTEsNyBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogQ09ORklHX1I4MTY5PXkKK0NPTkZJR19SODE2OV9WTEFOPXkKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLWTIgaXMgbm90IHNldApAQCAtODEwLDE1ICs5MjcsMzEgQEAKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci1DT05GSUdfV0xBTl9QUkU4MDIxMT15Ci0jIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVZFTEFOIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKLSMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19BRE04MjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01XTDhLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTgzMSwxNyArOTY0LDM5IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCitDT05GSUdfVVNCX05FVF9DRENfRUVNPW0KKyMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCisjIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD1tCisjIENPTkZJR19VU0JfQUxJX001NjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTjI3MjAgaXMgbm90IHNldAorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CisjIENPTkZJR19VU0JfRVBTT04yODg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQzIxOTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KICMgQ09ORklHX1VTQl9IU08gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9JTlQ1MVgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT1tCitDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC04NDksOCArMTAwNCw5IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KK0NPTkZJR19JTlBVVF9QT0xMREVWPW0KKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg4NCw3ICsxMDQwLDcgQEAKICMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9bQogIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKQEAgLTkwNCw2ICsxMDYwLDcgQEAKICMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM0LDggKzEwOTEsNyBAQAogIwogIyBTZXJpYWwgZHJpdmVycwogIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MD1tCiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTE2CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC05NTMsOCArMTEwOSw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9bQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CkBAIC0xMDMzLDE0ICsxMTg4LDE4IEBACiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIworQ09ORklHX0lSX0NPUkU9bQorQ09ORklHX1ZJREVPX0lSPW0KICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fVjRMMj1tCiBDT05GSUdfVklERU9fVjRMMT1tCitDT05GSUdfVklERU9CVUZfR0VOPW0KK0NPTkZJR19WSURFT0JVRl9WTUFMTE9DPW0KIENPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQogIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVklWST1tCiAjIENPTkZJR19WSURFT19QTVMgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0CkBAIC0xMDQ5LDUyICsxMjA4LDU1IEBACiBDT05GSUdfVVNCX1ZJREVPX0NMQVNTPW0KIENPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQogQ09ORklHX1VTQl9HU1BDQT1tCi0jIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAorQ09ORklHX1VTQl9NNTYwMj1tCitDT05GSUdfVVNCX1NUVjA2WFg9bQogIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9DT05FWD1tCitDT05GSUdfVVNCX0dTUENBX0VUT01TPW0KK0NPTkZJR19VU0JfR1NQQ0FfRklORVBJWD1tCiAjIENPTkZJR19VU0JfR1NQQ0FfSkVJTElOSiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfTUFSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX09WNTE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9PVjUzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NPTklYSiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1E5MDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NROTA1QyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfWkMzWFggaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9NQVJTPW0KK0NPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEE9bQorQ09ORklHX1VTQl9HU1BDQV9PVjUxOT1tCitDT05GSUdfVVNCX0dTUENBX09WNTM0PW0KK0NPTkZJR19VU0JfR1NQQ0FfUEFDMjA3PW0KKyMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzAyIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMT1tCitDT05GSUdfVVNCX0dTUENBX1NOOUMyMFg9bQorQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYX0VWREVWPXkKK0NPTkZJR19VU0JfR1NQQ0FfU09OSVhCPW0KK0NPTkZJR19VU0JfR1NQQ0FfU09OSVhKPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMD1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1PW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNj1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDg9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1E5MDU9bQorQ09ORklHX1VTQl9HU1BDQV9TUTkwNUM9bQorQ09ORklHX1VTQl9HU1BDQV9TVEswMTQ9bQorIyBDT05GSUdfVVNCX0dTUENBX1NUVjA2ODAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTPW0KK0NPTkZJR19VU0JfR1NQQ0FfVDYxMz1tCitDT05GSUdfVVNCX0dTUENBX1RWODUzMj1tCitDT05GSUdfVVNCX0dTUENBX1ZDMDMyWD1tCitDT05GSUdfVVNCX0dTUENBX1pDM1hYPW0KICMgQ09ORklHX1ZJREVPX0hEUFZSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUNjFYMjUxPW0KICMgQ09ORklHX1VTQl9PVjUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0U0MDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NOOUMxMDIgaXMgbm90IHNldAorQ09ORklHX1VTQl9TTjlDMTAyPW0KICMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1pDMDMwMT1tCiAjIENPTkZJR19VU0JfUFdDIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWlIzNjRYWD1tCitDT05GSUdfVVNCX1NUS1dFQkNBTT1tCitDT05GSUdfVVNCX1MyMjU1PW0KICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKQEAgLTExMzIsNiArMTI5NCw3IEBACiAjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldApAQCAtMTE2MSw3ICsxMzI0LDcgQEAKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPW0KIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CkBAIC0xMTkzLDI4ICsxMzU2LDQ0IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KLSMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0hXREVQPW0KK0NPTkZJR19TTkRfUkFXTUlEST1tCitDT05GSUdfU05EX1NFUVVFTkNFUj1tCitDT05GSUdfU05EX1NFUV9EVU1NWT1tCitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9bQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKICMgQ09ORklHX1NORF9SVENUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfVk1BU1RFUj15Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9SQVdNSURJX1NFUT1tCiAjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCiBDT05GSUdfU05EX0FDOTdfQ09ERUM9bQotIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKK0NPTkZJR19TTkRfRFVNTVk9bQorQ09ORklHX1NORF9WSVJNSURJPW0KKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQorQ09ORklHX1NORF9NUFU0MDE9bQorQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkU9eQorQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVfREVGQVVMVD0xMAogQ09ORklHX1NORF9QQ0k9eQogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKQEAgLTEyODEsNyArMTQ2MCwxMCBAQAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CitDT05GSUdfU05EX1VTQl9BVURJTz1tCitDT05GSUdfU05EX1VTQl9DQUlBUT1tCitDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVD15CiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19BQzk3X0JVUz1tCkBAIC0xMjk5LDMyICsxNDgxLDQxIEBACiAjCiAjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfSElEX0E0VEVDSD1tCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfQkVMS0lOPW0KK0NPTkZJR19ISURfQ0hFUlJZPW0KK0NPTkZJR19ISURfQ0hJQ09OWT1tCitDT05GSUdfSElEX0NZUFJFU1M9bQorQ09ORklHX0hJRF9EUkFHT05SSVNFPW0KK0NPTkZJR19EUkFHT05SSVNFX0ZGPXkKK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9LWUU9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX1RXSU5IQU49bQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPW0KK0NPTkZJR19ISURfTE9HSVRFQ0g9bQorQ09ORklHX0xPR0lURUNIX0ZGPXkKK0NPTkZJR19MT0dJUlVNQkxFUEFEMl9GRj15CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KK0NPTkZJR19ISURfTlRSSUc9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCitDT05GSUdfUEFOVEhFUkxPUkRfRkY9eQorQ09ORklHX0hJRF9QRVRBTFlOWD1tCitDT05GSUdfSElEX1NBTVNVTkc9bQorQ09ORklHX0hJRF9TT05ZPW0KK0NPTkZJR19ISURfU1VOUExVUz1tCitDT05GSUdfSElEX0dSRUVOQVNJQT1tCitDT05GSUdfR1JFRU5BU0lBX0ZGPXkKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KK0NPTkZJR19TTUFSVEpPWVBMVVNfRkY9eQorQ09ORklHX0hJRF9UT1BTRUVEPW0KK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPW0KK0NPTkZJR19USFJVU1RNQVNURVJfRkY9eQorQ09ORklHX0hJRF9XQUNPTT1tCitDT05GSUdfSElEX1pFUk9QTFVTPW0KK0NPTkZJR19aRVJPUExVU19GRj15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEzNDQsNyArMTUzNSw3IEBACiBDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfV1VTQj1tCiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM2NiwxNCArMTU1NywxNSBAQAogQ09ORklHX1VTQl9VSENJX0hDRD1tCiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfV0hDSV9IQ0Q9bQorQ09ORklHX1VTQl9IV0FfSENEPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKIENPTkZJR19VU0JfQUNNPW0KLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFJJTlRFUj1tCiBDT05GSUdfVVNCX1dETT1tCiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIApAQCAtMTM5Nyw3ICsxNTg5LDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTE0NjcsNyArMTY1OSw3IEBACiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTEVEPW0KICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CkBAIC0xNDgwLDE2ICsxNjcyLDk1IEBACiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKK0NPTkZJR19VU0JfTTY2NTkyPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CiAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX1VXQj1tCitDT05GSUdfVVdCX0hXQT1tCitDT05GSUdfVVdCX1dIQ0k9bQorIyBDT05GSUdfVVdCX1dMUCBpcyBub3Qgc2V0CisjIENPTkZJR19VV0JfSTE0ODBVIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9bQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9bQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQ0I3MTAgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1ZJQV9TRE1NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIwogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CkBAIC0xNTA0LDIyICsxNzc1LDE4IEBACiAjIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRVQxMzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JUF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfUFJJU00yX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMzVVTkQgaXMgbm90IHNldAogIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19PVFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTUVESSBpcyBub3Qgc2V0CiAjIENPTkZJR19BU1VTX09MRUQgaXMgbm90IHNldAogIyBDT05GSUdfQUxURVJBX1BDSUVfQ0hETUEgaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE4N1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxOTJTVSBpcyBub3Qgc2V0CisjIENPTkZJR19SODE4N1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUTDgxOTJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSQU5aUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgQW5kcm9pZAotIwotCi0jCiAjIFF1YWxjb21tIE1TTSBDYW1lcmEgQW5kIFZpZGVvCiAjCiAKQEAgLTE1MjcsNyArMTc5NCw2IEBACiAjIENhbWVyYSBTZW5zb3IgU2VsZWN0aW9uCiAjCiAjIENPTkZJR19JTlBVVF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QT0hNRUxGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CM0RGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFOOUFVVEggaXMgbm90IHNldApAQCAtMTU0NCwyOCArMTgxMCw1NSBAQAogIwogIyBDT05GSUdfUkFSX1JFR0lTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SQU1aU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRNQU5fQURWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVkVMQU4gaXMgbm90IHNldAogQ09ORklHX0ZCX1NNN1hYPXkKLUNPTkZJR19GQl9TTTdYWF9BQ0NFTD15CisjIENPTkZJR19GQl9TTTdYWF9BQ0NFTCBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTPW0KKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorIyBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorQ09ORklHX0pGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSkZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfWEZTX0ZTPW0KK0NPTkZJR19YRlNfUVVPVEE9eQorQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19CVFJGU19GUz1tCisjIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKQEAgLTE1NzUsMTcgKzE4NjgsMjUgQEAKIENPTkZJR19RVU9UQT15CiAjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT1tCiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9bQogQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ2FjaGVzCiAjCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19GU0NBQ0hFPW0KKyMgQ09ORklHX0ZTQ0FDSEVfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GU0NBQ0hFX09CSkVDVF9MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRUZJTEVTPW0KKyMgQ09ORklHX0NBQ0hFRklMRVNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVGSUxFU19ISVNUT0dSQU0gaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTE1OTksMTEgKzE5MDAsMTMgQEAKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0ZBVF9GUz1tCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKIAogIwogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKQEAgLTE2MTYsMjMgKzE5MTksNjAgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19FTUJFRERFRD15CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPW0KK0NPTkZJR19ST01GU19CQUNLRURfQllfQkxPQ0s9eQorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19GU0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKIENPTkZJR19MT0NLRD1tCiBDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorQ09ORklHX1NVTlJQQ19HU1M9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19VUENBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RGU19VUENBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE2NDMsNDUgKzE5ODMsNDUgQEAKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJ1dGYtOCIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9eQogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY5NSwxMjUgKzIwMzUsMTU1IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiBDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQorQ09ORklHX0FTWU5DX1BRPW0KK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj1tCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKK0NPTkZJR19DUllQVE9fRklQUz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KIENPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KIENPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KIAogIwogIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKICMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19TRVFJVj1tCiAKICMKICMgQmxvY2sgbW9kZXMKICMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19DVFI9bQogIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQogCiAjCiAjIEhhc2ggbW9kZXMKICMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQogIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19STUQxMjg9bQorQ09ORklHX0NSWVBUT19STUQxNjA9bQorQ09ORklHX0NSWVBUT19STUQyNTY9bQorQ09ORklHX0NSWVBUT19STUQzMjA9bQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiAKICMKICMgQ29tcHJlc3Npb24KICMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fWkxJQj1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCiAKICMKICMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCiAjCi0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xODIxLDE0ICsyMTkxLDIwIEBACiBDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQ19UMTBESUY9eQogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19BVURJVF9HRU5FUklDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCmluZGV4IGRkZjY3ZjYuLjk3MzgyYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwpAQCAtMSw3OSArMSwxMDMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjM3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA5OjUzOjI5IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfUEIxMTAwPXkKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX1BCMTEwMD15CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTExMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxMTAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19TV0FQX0lPX1NQQUNFPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODYsNiArMTEwLDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkzLDExICsxMTgsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDcsMTg0ICsxMzUsMjQ0IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXBiMTEwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwogIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI5NSwxMTAgKzM4MywyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDA4LDI3ICs0MTEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDM3LDI1ICs0MzcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDY4LDYgKzQ2OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDkzLDE0ICs0OTQsMTMgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MTcsMTY2ICs1MTcsMTM2IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKIAogIwotIyBNaXNjIGRldmljZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorIyBDT05GSUdfSURFX1BST0NfRlMgaXMgbm90IHNldAogCiAjCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19QSFlMSUI9bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCiAKICMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNjg0LDE2ICs2NTQsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTcwMywyOCArNjcxLDI2IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzQzLDE5OCArNzA5LDI4OCBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CiAKICMKLSMgSElEIERldmljZXMKKyMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZHJpdmVycworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgTEVEIFRyaWdnZXJzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBUSSBWTFlOUQogIwotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTUzLDY5ICsxMDA5LDc2IEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorIyBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldApAQCAtMTA1NSwzNCArMTExOCw3MSBAQAogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMDkwLDY3ICsxMTkwLDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YWQ3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTU2OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMTA6MjM6MzQgMjAxMAorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCitDT05GSUdfTUFDSF9BTENIRU1ZPXkKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjEyMDA9eQorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMjAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CitDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAorQ09ORklHX0NQVV9NSVBTMzJfUjE9eQorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CitDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKK0NPTkZJR19DUFVfTUlQUzMyPXkKK0NPTkZJR19DUFVfTUlQU1IxPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKK0NPTkZJR18zMkJJVD15CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKK0NPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKKyMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CitDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfS1NNPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxMjAwIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0FVMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfQVRBUEk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKKyMgQ09ORklHX0lERV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERV9BVTFYWFg9eQorQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUE9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FVMTU1MD15CitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CitDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BRE0xMDI1PXkKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03MD15CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVUxMjAwPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0NfSTJTPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0NfQUM5Nz15CitDT05GSUdfU05EX1NPQ19EQjEyMDA9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9TT0NfV004NzMxPXkKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz15CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEUkFXPXkKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CisjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FVMVg9eQorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwppbmRleCA1ZWM2MDgzLi43NDk3ZDMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDowNToyNyAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX1BCMTUwMD15Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjE1MDA9eQorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTUwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE5MCArMTM0LDI1NSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxNTAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQogQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKICMKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKLUNPTkZJR19QRDY3Mjk9bQorIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKICMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTMwMCwxMTAgKzM5MywyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDEzLDI3ICs0MjEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDQyLDI1ICs0NDcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDczLDYgKzQ3OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk4LDE0ICs1MDQsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyMywzMCArNTI5LDIwIEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKQEAgLTU1NCw2NyArNTUwLDY2IEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9QQ0lfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JVDgyMTM9bQorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTYyNCw4MiArNjE5LDY1IEBACiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1RDODZDMDAxPW0KLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQotIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTcwNyw5NiArNjg1LDUxIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBXzNDNTg5PW0KLUNPTkZJR19QQ01DSUFfM0M1NzQ9bQotQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KLUNPTkZJR19QQ01DSUFfUENORVQ9bQotQ09ORklHX1BDTUNJQV9OTUNMQU49bQotQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCi1DT05GSUdfUENNQ0lBX1hJUkMyUFM9bQotQ09ORklHX1BDTUNJQV9BWE5FVD1tCi0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTgwNCwxNiArNzM3LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC04MjMsMzMgKzc1NCwzNCBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC04NjMsMjgyICs3OTUsNDUwIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CitDT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TMUQxM1hYWD15CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBUSSBWTFlOUQogIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldApAQCAtMTE1NSwxMCArMTI1NSwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTE2OCwzOCArMTI2OCw3NSBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIwNyw2NyArMTM0NCwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKaW5kZXggNjY0NzY0Mi4uYWE1MjZmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCkBAIC0xLDc5ICsxLDEwMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MzcgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMTA6MDY6MDcgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19QQjE1NTA9eQotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfUEIxNTUwPXkKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTU1MD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1NTA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Niw2ICsxMTAsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTMsMTEgKzExOCwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNywxOTAgKzEzNSwyNTUgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXBiMTU1MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKIENPTkZJR19QQ01DSUFfSU9DVEw9eQotQ09ORklHX0NBUkRCVVM9eQorIyBDT05GSUdfQ0FSREJVUyBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCiAjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0Ci1DT05GSUdfUEQ2NzI5PW0KKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUENDQVJEX05PTlNUQVRJQz1tCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0zMDEsMTEwICszOTQsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQxNCwyNyArNDIyLDMwIEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0MywyNSArNDU0LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ3NCw2ICs0ODUsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5OSwxNCArNTExLDE0IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MjQsMzAgKzUzNiwzMCBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIworQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfQVUxNTUwPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CkBAIC01NTUsNjcgKzU2Nyw2NiBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotQ09ORklHX1NHSV9JT0M0PW0KLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUNTPW0KLSMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorIyBDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNjI1LDgyICs2MzYsNjUgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CkBAIC03MDgsODggKzcwMiw1MSBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfUUxBM1hYWD1tCi0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDM9bQotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRYRU5fTklDPW0KLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKIAogIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC03OTcsMTYgKzc1NCwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtODE2LDMzICs3NzEsMzQgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApAQCAtODU2LDI4MiArODEyLDQ5MiBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAogCiAjCi0jIEkyQyBzdXBwb3J0CisjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfQVUxNTUwPXkKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBTb3VuZAorIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CiAKICMKLSMgSElEIERldmljZXMKKyMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBUSSBWTFlOUQogIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldApAQCAtMTE0OCwxMCArMTMxNCwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTE2MSwzOCArMTMyNyw3NSBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIwMCw2NyArMTQwMywzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9rbjAxLWJlcnIuYyBiL2FyY2gvbWlwcy9kZWMva24wMS1iZXJyLmMKaW5kZXggYjBkYzZkNS4uOTRkMjNiNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9rbjAxLWJlcnIuYworKysgYi9hcmNoL21pcHMvZGVjL2tuMDEtYmVyci5jCkBAIC00Niw3ICs0Niw3IEBACiAgKiBUaGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlIC0tIGl0IGhhcyB0byBiZSBpbml0aWFsaXplZC4KICAqLwogdTE2IGNhY2hlZF9rbjAxX2NzcjsKLURFRklORV9TUElOTE9DSyhrbjAxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soa24wMV9sb2NrKTsKIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVjX2tuMDFfYmVfYWNrKHZvaWQpCkBAIC01NCwxMiArNTQsMTIgQEAKIAl2b2xhdGlsZSB1MTYgKmNzciA9ICh2b2lkICopQ0tTRUcxQUREUihLTjAxX1NMT1RfQkFTRSArIEtOMDFfQ1NSKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmtuMDFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CiAKIAkqY3NyID0gY2FjaGVkX2tuMDFfY3NyIHwgS04wMV9DU1JfTUVNRVJSOwkvKiBDbGVhciBidXMgSVJRLiAqLwogCWlvYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtuMDFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGRlY19rbjAxX2JlX2JhY2tlbmQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpc19maXh1cCwgaW50IGludm9rZXIpCkBAIC0xODIsNyArMTgyLDcgQEAKIAl2b2xhdGlsZSB1MTYgKmNzciA9ICh2b2lkICopQ0tTRUcxQUREUihLTjAxX1NMT1RfQkFTRSArIEtOMDFfQ1NSKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmtuMDFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CiAKIAkvKiBQcmVzZXQgd3JpdGUtb25seSBiaXRzIG9mIHRoZSBDb250cm9sIFJlZ2lzdGVyIGNhY2hlLiAqLwogCWNhY2hlZF9rbjAxX2NzciA9ICpjc3I7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAkqY3NyID0gY2FjaGVkX2tuMDFfY3NyOwogCWlvYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtuMDFfbG9jaywgZmxhZ3MpOwogCiAJLyogQ2xlYXIgYW55IGxlZnRvdmVyIGVycm9ycyBmcm9tIHRoZSBmaXJtd2FyZS4gKi8KIAlkZWNfa24wMV9iZV9hY2soKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvcHJvbS9sb2NvcmUuUyBiL2FyY2gvbWlwcy9kZWMvcHJvbS9sb2NvcmUuUwppbmRleCBkOWFjZGNlLi5mNzJiNTc0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL3Byb20vbG9jb3JlLlMKKysrIGIvYXJjaC9taXBzL2RlYy9wcm9tL2xvY29yZS5TCkBAIC0yNyw0ICsyNywzIEBACiAJanIJazAKIAkgcmZlCiBFTkQoZ2VuZXhjZXB0X2Vhcmx5KQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggZGQ3NWQ2Ny4uNTE5MTk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTM3LDcgKzEzNyw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtMTg5LDcgKzE4OSw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtNTE2LDcgKzUxNiw3IEBACiB7CiAJbG9uZyByZXN1bHQ7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQlsb25nIHRlbXA7CkBAIC01NjgsNyArNTY4LDcgQEAKIHsKIAlsb25nIHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWxvbmcgdGVtcDsKQEAgLTYyOCw3ICs2MjgsNyBAQAogewogCWxvbmcgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJbG9uZyB0ZW1wOwpAQCAtNzg4LDkgKzc4OCw5IEBACiAgKiBhdG9taWMqX3JldHVybiBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemluZyBidXQgbm90IHRoZSBub24tKl9yZXR1cm4KICAqIHZlcnNpb25zLgogICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWJfX2JlZm9yZV9sbHNjKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJc21wX2xsc2NfbWIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX2xsc2NfbWIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iX19iZWZvcmVfbGxzYygpCiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCXNtcF9sbHNjX21iKCkKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAppbmRleCA4ZTlhYzMxLi5jMDg4NGYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTg4LDEyICs4OCwyMCBAQAogCQk6IC8qIG5vIG91dHB1dCAqLwkJXAogCQk6ICJtIiAoKihpbnQgKilDS1NFRzEpCQlcCiAJCTogIm1lbW9yeSIpCisjaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCisjIGRlZmluZSBPQ1RFT05fU1lOQ1dfU1RSCSIuc2V0IHB1c2hcbi5zZXQgYXJjaD1vY3Rlb25cbnN5bmN3XG5zeW5jd1xuLnNldCBwb3BcbiIKKyMgZGVmaW5lIF9fc3luY3coKSAJX19hc21fXyBfX3ZvbGF0aWxlX18oT0NURU9OX1NZTkNXX1NUUiA6IDogOiAibWVtb3J5IikKIAotI2RlZmluZSBmYXN0X3dtYigpCV9fc3luYygpCi0jZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKLSNkZWZpbmUgZmFzdF9tYigpCV9fc3luYygpCi0jaWZkZWYgQ09ORklHX1NHSV9JUDI4Ci0jZGVmaW5lIGZhc3RfaW9iKCkJCQkJXAorIyBkZWZpbmUgZmFzdF93bWIoKQlfX3N5bmN3KCkKKyMgZGVmaW5lIGZhc3Rfcm1iKCkJYmFycmllcigpCisjIGRlZmluZSBmYXN0X21iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3RfaW9iKCkJZG8geyB9IHdoaWxlICgwKQorI2Vsc2UgLyogISBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gKi8KKyMgZGVmaW5lIGZhc3Rfd21iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3RfbWIoKQlfX3N5bmMoKQorIyBpZmRlZiBDT05GSUdfU0dJX0lQMjgKKyMgIGRlZmluZSBmYXN0X2lvYigpCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCiAJCSIuc2V0CXB1c2hcblx0IgkJXAogCQkiLnNldAlub3Jlb3JkZXJcblx0IgkJXApAQCAtMTA0LDEzICsxMTIsMTQgQEAKIAkJOiAvKiBubyBvdXRwdXQgKi8JCVwKIAkJOiAibSIgKCooaW50ICopQ0tTRUcxQUREUigweDFmYTAwMDA0KSkgXAogCQk6ICJtZW1vcnkiKQotI2Vsc2UKLSNkZWZpbmUgZmFzdF9pb2IoKQkJCQlcCisjIGVsc2UKKyMgIGRlZmluZSBmYXN0X2lvYigpCQkJCVwKIAlkbyB7CQkJCQlcCiAJCV9fc3luYygpOwkJCVwKIAkJX19mYXN0X2lvYigpOwkJCVwKIAl9IHdoaWxlICgwKQotI2VuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OICovCiAKICNpZmRlZiBDT05GSUdfQ1BVX0hBU19XQgogCkBAIC0xMzEsMjUgKzE0MCw0MiBAQAogI2VuZGlmIC8qICFDT05GSUdfQ1BVX0hBU19XQiAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfV0VBS19PUkRFUklORykgJiYgZGVmaW5lZChDT05GSUdfU01QKQotI2RlZmluZSBfX1dFQUtfT1JERVJJTkdfTUIJIiAgICAgICBzeW5jCVxuIgorIyBpZmRlZiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KKyMgIGRlZmluZSBzbXBfbWIoKQlfX3N5bmMoKQorIyAgZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyMgIGRlZmluZSBzbXBfd21iKCkJX19zeW5jdygpCisjIGVsc2UKKyMgIGRlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIgOiA6IDoibWVtb3J5IikKKyMgIGRlZmluZSBzbXBfcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiIDogOiA6Im1lbW9yeSIpCisjICBkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIiA6IDogOiJtZW1vcnkiKQorIyBlbmRpZgogI2Vsc2UKLSNkZWZpbmUgX19XRUFLX09SREVSSU5HX01CCSIJCVxuIgorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCiAjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1dFQUtfUkVPUkRFUklOR19CRVlPTkRfTExTQykgJiYgZGVmaW5lZChDT05GSUdfU01QKQogI2RlZmluZSBfX1dFQUtfTExTQ19NQgkJIiAgICAgICBzeW5jCVxuIgogI2Vsc2UKICNkZWZpbmUgX19XRUFLX0xMU0NfTUIJCSIJCVxuIgogI2VuZGlmCiAKLSNkZWZpbmUgc21wX21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oX19XRUFLX09SREVSSU5HX01CIDogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF9ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfT1JERVJJTkdfTUIgOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKF9fV0VBS19PUkRFUklOR19NQiA6IDogOiJtZW1vcnkiKQotCiAjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBcCiAJZG8geyB2YXIgPSB2YWx1ZTsgc21wX21iKCk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgc21wX2xsc2NfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfbGxzY19ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfbGxzY193bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQorCisjaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2xsc2MoKSBzbXBfd21iKCkKKy8qIENhdXNlIHByZXZpb3VzIHdyaXRlcyB0byBiZWNvbWUgdmlzaWJsZSBvbiBhbGwgQ1BVcyBhcyBzb29uIGFzIHBvc3NpYmxlICovCisjZGVmaW5lIG51ZGdlX3dyaXRlcygpIF9fYXNtX18gX192b2xhdGlsZV9fKCIuc2V0IHB1c2hcblx0IgkJXAorCQkJCQkgICAgIi5zZXQgYXJjaD1vY3Rlb25cblx0IglcCisJCQkJCSAgICAic3luY3dcblx0IgkJCVwKKwkJCQkJICAgICIuc2V0IHBvcCIgOiA6IDogIm1lbW9yeSIpCisjZWxzZQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9sbHNjKCkgc21wX2xsc2NfbWIoKQorI2RlZmluZSBudWRnZV93cml0ZXMoKSBtYigpCisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0JBUlJJRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDg0YTM4MzguLjkyNTVjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTQyLDcgKzQyLDcgQEAKIC8qCiAgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KICAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYl9fYmVmb3JlX2xsc2MoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9sbHNjX21iKCkKIAogLyoKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXVuc2lnbmVkIHNob3J0IGJpdCA9IG5yICYgU1pMT05HX01BU0s7CiAJdW5zaWduZWQgbG9uZyByZXM7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJdW5zaWduZWQgc2hvcnQgYml0ID0gbnIgJiBTWkxPTkdfTUFTSzsKIAl1bnNpZ25lZCBsb25nIHJlczsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CkBAIC00ODUsNyArNDg1LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBiaXQgPSBuciAmIFNaTE9OR19NQVNLOwogCXVuc2lnbmVkIGxvbmcgcmVzOwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY21weGNoZy5oCmluZGV4IDgxNWE0MzguLmVkOWFhYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NtcHhjaGcuaApAQCAtNzIsMTQgKzcyLDE0IEBACiAgKi8KIGV4dGVybiB2b2lkIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKIAotI2RlZmluZSBfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgYmFycmllcikJCQkJXAorI2RlZmluZSBfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgcHJlX2JhcnJpZXIsIHBvc3RfYmFycmllcikJCVwKICh7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18ocHRyKSBfX3B0ciA9IChwdHIpOwkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX29sZCA9IChvbGQpOwkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fbmV3ID0gKG5ldyk7CQkJCVwKIAlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXMgPSAwOwkJCQkJXAogCQkJCQkJCQkJXAotCWJhcnJpZXI7CQkJCQkJCVwKKwlwcmVfYmFycmllcjsJCQkJCQkJXAogCQkJCQkJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKCooX19wdHIpKSkgewkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKQEAgLTk2LDEzICs5NiwxMyBAQAogCQlicmVhazsJCQkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQliYXJyaWVyOwkJCQkJCQlcCisJcG9zdF9iYXJyaWVyOwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJX19yZXM7CQkJCQkJCQlcCiB9KQogCi0jZGVmaW5lIGNtcHhjaGcocHRyLCBvbGQsIG5ldykJCV9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzbXBfbGxzY19tYigpKQotI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgb2xkLCBuZXcpCV9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCApCisjZGVmaW5lIGNtcHhjaGcocHRyLCBvbGQsIG5ldykJCV9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzbXBfbWJfX2JlZm9yZV9sbHNjKCksIHNtcF9sbHNjX21iKCkpCisjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvbGQsIG5ldykJX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsICwgKQogCiAjZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJXAogICAoewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaAppbmRleCAxZjRkZjY0Li5hYzczY2VkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCkBAIC05NSw2ICs5NSw5IEBACiAjaWZuZGVmIGNwdV9oYXNfc21hcnRtaXBzCiAjZGVmaW5lIGNwdV9oYXNfc21hcnRtaXBzICAgICAgKGNwdV9kYXRhWzBdLmFzZXMgJiBNSVBTX0FTRV9TTUFSVE1JUFMpCiAjZW5kaWYKKyNpZm5kZWYga2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkKKyNkZWZpbmUga2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgMAorI2VuZGlmCiAjaWZuZGVmIGNwdV9oYXNfdnRhZ19pY2FjaGUKICNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkoY3B1X2RhdGFbMF0uaWNhY2hlLmZsYWdzICYgTUlQU19DQUNIRV9WVEFHKQogI2VuZGlmCkBAIC0xOTEsNiArMTk0LDkgQEAKICMgaWZuZGVmIGNwdV9oYXNfNjRiaXRfYWRkcmVzc2VzCiAjIGRlZmluZSBjcHVfaGFzXzY0Yml0X2FkZHJlc3NlcwkwCiAjIGVuZGlmCisjIGlmbmRlZiBjcHVfdm1iaXRzCisjIGRlZmluZSBjcHVfdm1iaXRzIDMxCisjIGVuZGlmCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR182NEJJVApAQCAtMjA5LDYgKzIxNSwxMCBAQAogIyBpZm5kZWYgY3B1X2hhc182NGJpdF9hZGRyZXNzZXMKICMgZGVmaW5lIGNwdV9oYXNfNjRiaXRfYWRkcmVzc2VzCTEKICMgZW5kaWYKKyMgaWZuZGVmIGNwdV92bWJpdHMKKyMgZGVmaW5lIGNwdV92bWJpdHMgY3B1X2RhdGFbMF0udm1iaXRzCisjIGRlZmluZSBfX05FRURfVk1CSVRTX1BST0JFCisjIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjJfSVJRX1ZJKSAmJiAhZGVmaW5lZChjcHVfaGFzX3ZpbnQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWluZm8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtaW5mby5oCmluZGV4IDEyNjA0NDMuLmIzOWRlZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtaW5mby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtaW5mby5oCkBAIC01OCw2ICs1OCw5IEBACiAJc3RydWN0IGNhY2hlX2Rlc2MJdGNhY2hlOwkvKiBUZXJ0aWFyeS9zcGxpdCBzZWNvbmRhcnkgY2FjaGUgKi8KIAlpbnQJCQlzcnNldHM7CS8qIFNoYWRvdyByZWdpc3RlciBzZXRzICovCiAJaW50CQkJY29yZTsJLyogcGh5c2ljYWwgY29yZSBudW1iZXIgKi8KKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlpbnQJCQl2bWJpdHM7CS8qIFZpcnR1YWwgbWVtb3J5IHNpemUgaW4gYml0cyAqLworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01UQykKIAkvKgogCSAqIEluIHRoZSBNSVBTIE1UICJTTVRDIiBtb2RlbCwgZWFjaCBUQyBpcyBjb25zaWRlcmVkCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggY2YzNzNhOS4uYTVhY2RhNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMjI0LDcgKzIyNCw3IEBACiAJICogTUlQUzY0IGNsYXNzIHByb2Nlc3NvcnMKIAkgKi8KIAlDUFVfNUtDLCBDUFVfMjBLQywgQ1BVXzI1S0YsIENQVV9TQjEsIENQVV9TQjFBLCBDUFVfTE9PTkdTT04yLAotCUNQVV9DQVZJVU1fT0NURU9OLAorCUNQVV9DQVZJVU1fT0NURU9OLCBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTLAogCiAJQ1BVX0xBU1QKIH07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3VycmVudC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2N1cnJlbnQuaAppbmRleCA1NTlkYjY2Li40YzUxNDAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3VycmVudC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jdXJyZW50LmgKQEAgLTEsMjMgKzEgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDIgUmFsZiBCYWVjaGxlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICovCi0jaWZuZGVmIF9BU01fQ1VSUkVOVF9ICi0jZGVmaW5lIF9BU01fQ1VSUkVOVF9ICi0KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICogZ2V0X2N1cnJlbnQodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50YXNrOwotfQotCi0jZGVmaW5lIGN1cnJlbnQJCWdldF9jdXJyZW50KCkKLQotI2VuZGlmIC8qIF9BU01fQ1VSUkVOVF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3VycmVudC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9rbjAxLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGVjL2tuMDEuaAppbmRleCAyOGZhNzE3Li44OGQ5ZmZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGVjL2tuMDEuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGVjL2tuMDEuaApAQCAtODAsNyArODAsNiBAQAogc3RydWN0IHB0X3JlZ3M7CiAKIGV4dGVybiB1MTYgY2FjaGVkX2tuMDFfY3NyOwotZXh0ZXJuIHNwaW5sb2NrX3Qga24wMV9sb2NrOwogCiBleHRlcm4gdm9pZCBkZWNfa24wMV9iZV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBkZWNfa24wMV9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXNfZml4dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IGQ4Zjk4NzIuLjA2NzQ2YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTQsNCArNCwzIEBACiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyCiAgKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kZXZpY2UuaD4KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDdhNmEzNWQuLmU1M2Q3YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTMzNCwxNCArMzM0LDE0IEBACiAKICNkZWZpbmUgRUxGX0hXQ0FQICAgICAgICgwKQogCi0vKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KLSAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCi0gICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4KKy8qCisgKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAqIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgKiBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4KKyAqLwogCi0gICBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmx5IG9wdGltaXphdGlvbnMgZm9yIHRoZSBJbnRlbCBnZW5lcmF0aW9ucywKLSAgIGJ1dCB0aGF0IGNvdWxkIGNoYW5nZS4uLiAqLwotCi0jZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCisjZGVmaW5lIEVMRl9QTEFURk9STSAgX19lbGZfcGxhdGZvcm0KK2V4dGVybiBjb25zdCBjaGFyICpfX2VsZl9wbGF0Zm9ybTsKIAogLyoKICAqIFNlZSBjb21tZW50cyBpbiBhc20tYWxwaGEvZWxmLmgsIHRoaXMgaXMgdGhlIHNhbWUgdGhpbmcKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCAzOTg2Y2Q4Li5jZTM1YzlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC00LDcgKzQsNyBAQAogICogbW9yZSBkZXRhaWxzLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5LCBDaGluYQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKi8KIAogI2lmbmRlZiBfQVNNX01JUFNfRlRSQUNFX0gKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1OS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2k4MjU5LmgKaW5kZXggODU3MmEyZC4uYzdlMjc4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2k4MjU5LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2k4MjU5LmgKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgU0xBVkVfSUNXNF9ERUZBVUxUCTB4MDEKICNkZWZpbmUgUElDX0lDVzRfQUVPSQkJMgogCi1leHRlcm4gc3BpbmxvY2tfdCBpODI1OUFfbG9jazsKK2V4dGVybiByYXdfc3BpbmxvY2tfdCBpODI1OUFfbG9jazsKIAogZXh0ZXJuIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdm9pZCBtYWtlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKQEAgLTUxLDcgKzUxLDcgQEAKIHsKIAlpbnQgaXJxOwogCi0Jc3Bpbl9sb2NrKCZpODI1OUFfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmaTgyNTlBX2xvY2spOwogCiAJLyogUGVyZm9ybSBhbiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgY3ljbGUgb24gY29udHJvbGxlciAxLiAqLwogCW91dGIoMHgwQywgUElDX01BU1RFUl9DTUQpOwkJLyogcHJlcGFyZSBmb3IgcG9sbCAqLwpAQCAtNzgsNyArNzgsNyBAQAogCQkJaXJxID0gLTE7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKIAogCXJldHVybiBsaWtlbHkoaXJxID49IDApID8gaXJxICsgSTgyNTlBX0lSUV9CQVNFIDogaXJxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaAppbmRleCA0MzY4NzhlLi5jOThiZjUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaApAQCAtNDQ3LDYgKzQ0NywyNCBAQAogI2RlZmluZSByZWFkbF9yZWxheGVkCQkJcmVhZGwKICNkZWZpbmUgcmVhZHFfcmVsYXhlZAkJCXJlYWRxCiAKKyNkZWZpbmUgcmVhZGJfYmUoYWRkcikJCQkJCQkJXAorCV9fcmF3X3JlYWRiKChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorI2RlZmluZSByZWFkd19iZShhZGRyKQkJCQkJCQlcCisJYmUxNl90b19jcHUoX19yYXdfcmVhZHcoKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpKQorI2RlZmluZSByZWFkbF9iZShhZGRyKQkJCQkJCQlcCisJYmUzMl90b19jcHUoX19yYXdfcmVhZGwoKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpKQorI2RlZmluZSByZWFkcV9iZShhZGRyKQkJCQkJCQlcCisJYmU2NF90b19jcHUoX19yYXdfcmVhZHEoKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpKQorCisjZGVmaW5lIHdyaXRlYl9iZSh2YWwsIGFkZHIpCQkJCQkJXAorCV9fcmF3X3dyaXRlYigodmFsKSwgKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpCisjZGVmaW5lIHdyaXRld19iZSh2YWwsIGFkZHIpCQkJCQkJXAorCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNigodmFsKSksIChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorI2RlZmluZSB3cml0ZWxfYmUodmFsLCBhZGRyKQkJCQkJCVwKKwlfX3Jhd193cml0ZWwoY3B1X3RvX2JlMzIoKHZhbCkpLCAoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkKKyNkZWZpbmUgd3JpdGVxX2JlKHZhbCwgYWRkcikJCQkJCQlcCisJX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KCh2YWwpKSwgKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpCisKIC8qCiAgKiBTb21lIGNvZGUgdGVzdHMgZm9yIHRoZXNlIHN5bWJvbHMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCmluZGV4IDIxY2JiYzcuLmYxY2YzODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKQEAgLTEwNSwyNiArMTA1LDkgQEAKIAlyZXR1cm4gKHJlYWRsKCh2b2lkICopS1NFRzFBRERSKEFSN19SRUdTX0dQSU8gKyAweDE0KSkgPj4gMTYpICYgMHhmZjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXI3X2NwdV9mcmVxKHZvaWQpCi17Ci0JcmV0dXJuIGFyN19jcHVfY2xvY2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFyN19idXNfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfYnVzX2Nsb2NrOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfdmJ1c19mcmVxKHZvaWQpCi17Ci0JcmV0dXJuIGFyN19idXNfY2xvY2sgLyAyOwotfQotI2RlZmluZSBhcjdfY3BtYWNfZnJlcSBhcjdfdmJ1c19mcmVxCi0KLXN0YXRpYyBpbmxpbmUgaW50IGFyN19kc3BfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfZHNwX2Nsb2NrOwotfQorc3RydWN0IGNsayB7CisJdW5zaWduZWQgaW50CXJhdGU7Cit9OwogCiBzdGF0aWMgaW5saW5lIGludCBhcjdfaGFzX2hpZ2hfY3BtYWModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvZ3Bpby5oCmluZGV4IGNiZTljNGYuLjczZjliMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2dwaW8uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiw4OCArMjIsMTggQEAKICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CiAKICNkZWZpbmUgQVI3X0dQSU9fTUFYIDMyCisjZGVmaW5lIE5SX0JVSUxUSU5fR1BJTyBBUjdfR1BJT19NQVgKIAotZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwotZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlOVUxMCiAKLS8qIENvbW1vbiBHUElPIGxheWVyICovCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19pbiA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0lOUFVUKTsKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUgX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZSBfX2dwaW9fc2V0X3ZhbHVlCiAKLQlyZXR1cm4gcmVhZGwoZ3Bpb19pbikgJiAoMSA8PCBncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9fb3V0ID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fT1VUUFVUKTsKLQl1bnNpZ25lZCB0bXA7Ci0KLQl0bXAgPSByZWFkbChncGlvX291dCkgJiB+KDEgPDwgZ3Bpbyk7Ci0JaWYgKHZhbHVlKQotCQl0bXAgfD0gMSA8PCBncGlvOwotCXdyaXRlbCh0bXAsIGdwaW9fb3V0KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9fZGlyID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRElSKTsKLQotCWlmIChncGlvID49IEFSN19HUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpIHwgKDEgPDwgZ3BpbyksIGdwaW9fZGlyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19kaXIgPQotCQkodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFSN19SRUdTX0dQSU8gKyBBUjdfR1BJT19ESVIpOwotCi0JaWYgKGdwaW8gPj0gQVI3X0dQSU9fTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLQl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpICYgfigxIDw8IGdwaW8pLCBncGlvX2Rpcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQotewotCXJldHVybiAtRUlOVkFMOwotfQorI2RlZmluZSBncGlvX2NhbnNsZWVwIF9fZ3Bpb19jYW5zbGVlcAogCiAvKiBCb2FyZCBzcGVjaWZpYyBHUElPIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSBpbnQgYXI3X2dwaW9fZW5hYmxlKHVuc2lnbmVkIGdwaW8pCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX2VuID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRU5BQkxFKTsKLQotCXdyaXRlbChyZWFkbChncGlvX2VuKSB8ICgxIDw8IGdwaW8pLCBncGlvX2VuKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfZ3Bpb19kaXNhYmxlKHVuc2lnbmVkIGdwaW8pCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX2VuID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRU5BQkxFKTsKLQotCXdyaXRlbChyZWFkbChncGlvX2VuKSAmIH4oMSA8PCBncGlvKSwgZ3Bpb19lbik7Ci0KLQlyZXR1cm4gMDsKLX0KK2ludCBhcjdfZ3Bpb19lbmFibGUodW5zaWduZWQgZ3Bpbyk7CitpbnQgYXI3X2dwaW9fZGlzYWJsZSh1bnNpZ25lZCBncGlvKTsKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oCmluZGV4IDg1NGU5NWYuLmFlMDc0MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwLmgKQEAgLTEzMCw2ICsxMzAsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBBTENIRU1ZX0NQVV9VTktOT1dOCS0xCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTAwMAkwCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTUwMAkxCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTEwMAkyCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTU1MAkzCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTIwMAk0CisKK3N0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ2V0X2NwdXR5cGUodm9pZCkKK3sKKwlzd2l0Y2ggKHJlYWRfYzBfcHJpZCgpICYgMHhmZmZmMDAwMCkgeworCWNhc2UgMHgwMDAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAxMDMwMDAwOgorCQlyZXR1cm4gQUxDSEVNWV9DUFVfQVUxNTAwOworCQlicmVhazsKKwljYXNlIDB4MDIwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTExMDA7CisJCWJyZWFrOworCWNhc2UgMHgwMzAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTU1MDsKKwkJYnJlYWs7CisJY2FzZSAweDA0MDMwMDAwOgorCWNhc2UgMHgwNTAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTIwMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIEFMQ0hFTVlfQ1BVX1VOS05PV047Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGNoZW15X3VhcnRfcHV0Y2hhcih1MzIgdWFydF9waHlzLCB1OCBjKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIodWFydF9waHlzKTsKKwlpbnQgdGltZW91dCwgaTsKKworCS8qIGNoZWNrIExTUiBUWF9FTVBUWSBiaXQgKi8KKwl0aW1lb3V0ID0gMHhmZmZmZmY7CisJZG8geworCQlpZiAoX19yYXdfcmVhZGwoYmFzZSArIDB4MWMpICYgMHgyMCkKKwkJCWJyZWFrOworCQkvKiBzbG93IGRvd24gKi8KKwkJZm9yIChpID0gMTAwMDA7IGk7IGktLSkKKwkJCWFzbSB2b2xhdGlsZSAoIm5vcCIpOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlfX3Jhd193cml0ZWwoYywgYmFzZSArIDB4MDQpOwkvKiB0eCAqLworCXdtYigpOworfQorCiAvKiBhcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jbG9ja3MuYyAqLwogZXh0ZXJuIHZvaWQgc2V0X2F1MXgwMF9zcGVlZCh1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfYXUxeDAwX3NwZWVkKHZvaWQpOwpAQCAtMTQzLDIwICsxOTMsMzMyIEBACiB2b2lkIHNhdmVfYXUxeHh4X2ludGN0bCh2b2lkKTsKIHZvaWQgcmVzdG9yZV9hdTF4eHhfaW50Y3RsKHZvaWQpOwogCi0vKgotICogRXZlcnkgYm9hcmQgZGVzY3JpYmVzIGl0cyBJUlEgbWFwcGluZyB3aXRoIHRoaXMgdGFibGUuCi0gKi8KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIHsKLQlpbnQJaW1faXJxOwotCWludAlpbV90eXBlOwotCWludAlpbV9yZXF1ZXN0OworCisvKiBTT0MgSW50ZXJydXB0IG51bWJlcnMgKi8KKworI2RlZmluZSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UJKE1JUFNfQ1BVX0lSUV9CQVNFICsgOCkKKyNkZWZpbmUgQVUxMDAwX0lOVEMwX0lOVF9MQVNUCShBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMSkKKyNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9CQVNFCShBVTEwMDBfSU5UQzBfSU5UX0xBU1QgKyAxKQorI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMV9JTlRfQkFTRSArIDMxKQorI2RlZmluZSBBVTEwMDBfTUFYX0lOVFIgCUFVMTAwMF9JTlRDMV9JTlRfTEFTVAorCitlbnVtIHNvY19hdTEwMDBfaW50cyB7CisJQVUxMDAwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTEwMDBfVUFSVDBfSU5UCT0gQVUxMDAwX0ZJUlNUX0lOVCwKKwlBVTEwMDBfVUFSVDFfSU5ULAorCUFVMTAwMF9VQVJUMl9JTlQsCisJQVUxMDAwX1VBUlQzX0lOVCwKKwlBVTEwMDBfU1NJMF9JTlQsCisJQVUxMDAwX1NTSTFfSU5ULAorCUFVMTAwMF9ETUFfSU5UX0JBU0UsCisKKwlBVTEwMDBfVE9ZX0lOVAkJPSBBVTEwMDBfRklSU1RfSU5UICsgMTQsCisJQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMDAwX1JUQ19JTlQsCisJQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTEwMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMDAwX0lSREFfVFhfSU5ULAorCUFVMTAwMF9JUkRBX1JYX0lOVCwKKwlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxMDAwX1VTQl9IT1NUX0lOVCwKKwlBVTEwMDBfQUNTWU5DX0lOVCwKKwlBVTEwMDBfTUFDMF9ETUFfSU5ULAorCUFVMTAwMF9NQUMxX0RNQV9JTlQsCisJQVUxMDAwX0kyU19VT19JTlQsCisJQVUxMDAwX0FDOTdDX0lOVCwKKwlBVTEwMDBfR1BJTzBfSU5ULAorCUFVMTAwMF9HUElPMV9JTlQsCisJQVUxMDAwX0dQSU8yX0lOVCwKKwlBVTEwMDBfR1BJTzNfSU5ULAorCUFVMTAwMF9HUElPNF9JTlQsCisJQVUxMDAwX0dQSU81X0lOVCwKKwlBVTEwMDBfR1BJTzZfSU5ULAorCUFVMTAwMF9HUElPN19JTlQsCisJQVUxMDAwX0dQSU84X0lOVCwKKwlBVTEwMDBfR1BJTzlfSU5ULAorCUFVMTAwMF9HUElPMTBfSU5ULAorCUFVMTAwMF9HUElPMTFfSU5ULAorCUFVMTAwMF9HUElPMTJfSU5ULAorCUFVMTAwMF9HUElPMTNfSU5ULAorCUFVMTAwMF9HUElPMTRfSU5ULAorCUFVMTAwMF9HUElPMTVfSU5ULAorCUFVMTAwMF9HUElPMTZfSU5ULAorCUFVMTAwMF9HUElPMTdfSU5ULAorCUFVMTAwMF9HUElPMThfSU5ULAorCUFVMTAwMF9HUElPMTlfSU5ULAorCUFVMTAwMF9HUElPMjBfSU5ULAorCUFVMTAwMF9HUElPMjFfSU5ULAorCUFVMTAwMF9HUElPMjJfSU5ULAorCUFVMTAwMF9HUElPMjNfSU5ULAorCUFVMTAwMF9HUElPMjRfSU5ULAorCUFVMTAwMF9HUElPMjVfSU5ULAorCUFVMTAwMF9HUElPMjZfSU5ULAorCUFVMTAwMF9HUElPMjdfSU5ULAorCUFVMTAwMF9HUElPMjhfSU5ULAorCUFVMTAwMF9HUElPMjlfSU5ULAorCUFVMTAwMF9HUElPMzBfSU5ULAorCUFVMTAwMF9HUElPMzFfSU5ULAogfTsKIAotLyogY29yZSBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGxldCBib2FyZHMgaW5pdGlhbGl6ZSBvdGhlciBJUlEgc291cmNlcyAqLwotdm9pZCBib2FyZF9pbml0X2lycSh2b2lkKTsKK2VudW0gc29jX2F1MTEwMF9pbnRzIHsKKwlBVTExMDBfRklSU1RfSU5UCT0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFLAorCUFVMTEwMF9VQVJUMF9JTlQJPSBBVTExMDBfRklSU1RfSU5ULAorCUFVMTEwMF9VQVJUMV9JTlQsCisJQVUxMTAwX1NEX0lOVCwKKwlBVTExMDBfVUFSVDNfSU5ULAorCUFVMTEwMF9TU0kwX0lOVCwKKwlBVTExMDBfU1NJMV9JTlQsCisJQVUxMTAwX0RNQV9JTlRfQkFTRSwKIAotLyogYm9hcmRzIGNhbGwgdGhpcyB0byByZWdpc3RlciBhZGRpdGlvbmFsIChHUElPKSBpbnRlcnJ1cHRzICovCi12b2lkIGF1MXh4eF9zZXR1cF9pcnFtYXAoc3RydWN0IGF1MXh4eF9pcnFtYXAgKm1hcCwgaW50IGNvdW50KTsKKwlBVTExMDBfVE9ZX0lOVAkJPSBBVTExMDBfRklSU1RfSU5UICsgMTQsCisJQVUxMTAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTEwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTExMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMTAwX1JUQ19JTlQsCisJQVUxMTAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTEwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTExMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMTAwX0lSREFfVFhfSU5ULAorCUFVMTEwMF9JUkRBX1JYX0lOVCwKKwlBVTExMDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTEwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxMTAwX1VTQl9IT1NUX0lOVCwKKwlBVTExMDBfQUNTWU5DX0lOVCwKKwlBVTExMDBfTUFDMF9ETUFfSU5ULAorCUFVMTEwMF9HUElPMjA4XzIxNV9JTlQsCisJQVUxMTAwX0xDRF9JTlQsCisJQVUxMTAwX0FDOTdDX0lOVCwKKwlBVTExMDBfR1BJTzBfSU5ULAorCUFVMTEwMF9HUElPMV9JTlQsCisJQVUxMTAwX0dQSU8yX0lOVCwKKwlBVTExMDBfR1BJTzNfSU5ULAorCUFVMTEwMF9HUElPNF9JTlQsCisJQVUxMTAwX0dQSU81X0lOVCwKKwlBVTExMDBfR1BJTzZfSU5ULAorCUFVMTEwMF9HUElPN19JTlQsCisJQVUxMTAwX0dQSU84X0lOVCwKKwlBVTExMDBfR1BJTzlfSU5ULAorCUFVMTEwMF9HUElPMTBfSU5ULAorCUFVMTEwMF9HUElPMTFfSU5ULAorCUFVMTEwMF9HUElPMTJfSU5ULAorCUFVMTEwMF9HUElPMTNfSU5ULAorCUFVMTEwMF9HUElPMTRfSU5ULAorCUFVMTEwMF9HUElPMTVfSU5ULAorCUFVMTEwMF9HUElPMTZfSU5ULAorCUFVMTEwMF9HUElPMTdfSU5ULAorCUFVMTEwMF9HUElPMThfSU5ULAorCUFVMTEwMF9HUElPMTlfSU5ULAorCUFVMTEwMF9HUElPMjBfSU5ULAorCUFVMTEwMF9HUElPMjFfSU5ULAorCUFVMTEwMF9HUElPMjJfSU5ULAorCUFVMTEwMF9HUElPMjNfSU5ULAorCUFVMTEwMF9HUElPMjRfSU5ULAorCUFVMTEwMF9HUElPMjVfSU5ULAorCUFVMTEwMF9HUElPMjZfSU5ULAorCUFVMTEwMF9HUElPMjdfSU5ULAorCUFVMTEwMF9HUElPMjhfSU5ULAorCUFVMTEwMF9HUElPMjlfSU5ULAorCUFVMTEwMF9HUElPMzBfSU5ULAorCUFVMTEwMF9HUElPMzFfSU5ULAorfTsKKworZW51bSBzb2NfYXUxNTAwX2ludHMgeworCUFVMTUwMF9GSVJTVF9JTlQJPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UsCisJQVUxNTAwX1VBUlQwX0lOVAk9IEFVMTUwMF9GSVJTVF9JTlQsCisJQVUxNTAwX1BDSV9JTlRBLAorCUFVMTUwMF9QQ0lfSU5UQiwKKwlBVTE1MDBfVUFSVDNfSU5ULAorCUFVMTUwMF9QQ0lfSU5UQywKKwlBVTE1MDBfUENJX0lOVEQsCisJQVUxNTAwX0RNQV9JTlRfQkFTRSwKKworCUFVMTUwMF9UT1lfSU5UCQk9IEFVMTUwMF9GSVJTVF9JTlQgKyAxNCwKKwlBVTE1MDBfVE9ZX01BVENIMF9JTlQsCisJQVUxNTAwX1RPWV9NQVRDSDFfSU5ULAorCUFVMTUwMF9UT1lfTUFUQ0gyX0lOVCwKKwlBVTE1MDBfUlRDX0lOVCwKKwlBVTE1MDBfUlRDX01BVENIMF9JTlQsCisJQVUxNTAwX1JUQ19NQVRDSDFfSU5ULAorCUFVMTUwMF9SVENfTUFUQ0gyX0lOVCwKKwlBVTE1MDBfUENJX0VSUl9JTlQsCisJQVUxNTAwX1JFU0VSVkVEX0lOVCwKKwlBVTE1MDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTUwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxNTAwX1VTQl9IT1NUX0lOVCwKKwlBVTE1MDBfQUNTWU5DX0lOVCwKKwlBVTE1MDBfTUFDMF9ETUFfSU5ULAorCUFVMTUwMF9NQUMxX0RNQV9JTlQsCisJQVUxNTAwX0FDOTdDX0lOVAk9IEFVMTUwMF9GSVJTVF9JTlQgKyAzMSwKKwlBVTE1MDBfR1BJTzBfSU5ULAorCUFVMTUwMF9HUElPMV9JTlQsCisJQVUxNTAwX0dQSU8yX0lOVCwKKwlBVTE1MDBfR1BJTzNfSU5ULAorCUFVMTUwMF9HUElPNF9JTlQsCisJQVUxNTAwX0dQSU81X0lOVCwKKwlBVTE1MDBfR1BJTzZfSU5ULAorCUFVMTUwMF9HUElPN19JTlQsCisJQVUxNTAwX0dQSU84X0lOVCwKKwlBVTE1MDBfR1BJTzlfSU5ULAorCUFVMTUwMF9HUElPMTBfSU5ULAorCUFVMTUwMF9HUElPMTFfSU5ULAorCUFVMTUwMF9HUElPMTJfSU5ULAorCUFVMTUwMF9HUElPMTNfSU5ULAorCUFVMTUwMF9HUElPMTRfSU5ULAorCUFVMTUwMF9HUElPMTVfSU5ULAorCUFVMTUwMF9HUElPMjAwX0lOVCwKKwlBVTE1MDBfR1BJTzIwMV9JTlQsCisJQVUxNTAwX0dQSU8yMDJfSU5ULAorCUFVMTUwMF9HUElPMjAzX0lOVCwKKwlBVTE1MDBfR1BJTzIwX0lOVCwKKwlBVTE1MDBfR1BJTzIwNF9JTlQsCisJQVUxNTAwX0dQSU8yMDVfSU5ULAorCUFVMTUwMF9HUElPMjNfSU5ULAorCUFVMTUwMF9HUElPMjRfSU5ULAorCUFVMTUwMF9HUElPMjVfSU5ULAorCUFVMTUwMF9HUElPMjZfSU5ULAorCUFVMTUwMF9HUElPMjdfSU5ULAorCUFVMTUwMF9HUElPMjhfSU5ULAorCUFVMTUwMF9HUElPMjA2X0lOVCwKKwlBVTE1MDBfR1BJTzIwN19JTlQsCisJQVUxNTAwX0dQSU8yMDhfMjE1X0lOVCwKK307CisKK2VudW0gc29jX2F1MTU1MF9pbnRzIHsKKwlBVTE1NTBfRklSU1RfSU5UCT0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFLAorCUFVMTU1MF9VQVJUMF9JTlQJPSBBVTE1NTBfRklSU1RfSU5ULAorCUFVMTU1MF9QQ0lfSU5UQSwKKwlBVTE1NTBfUENJX0lOVEIsCisJQVUxNTUwX0RETUFfSU5ULAorCUFVMTU1MF9DUllQVE9fSU5ULAorCUFVMTU1MF9QQ0lfSU5UQywKKwlBVTE1NTBfUENJX0lOVEQsCisJQVUxNTUwX1BDSV9SU1RfSU5ULAorCUFVMTU1MF9VQVJUMV9JTlQsCisJQVUxNTUwX1VBUlQzX0lOVCwKKwlBVTE1NTBfUFNDMF9JTlQsCisJQVUxNTUwX1BTQzFfSU5ULAorCUFVMTU1MF9QU0MyX0lOVCwKKwlBVTE1NTBfUFNDM19JTlQsCisJQVUxNTUwX1RPWV9JTlQsCisJQVUxNTUwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTU1MF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTE1NTBfVE9ZX01BVENIMl9JTlQsCisJQVUxNTUwX1JUQ19JTlQsCisJQVUxNTUwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTU1MF9SVENfTUFUQ0gxX0lOVCwKKwlBVTE1NTBfUlRDX01BVENIMl9JTlQsCisKKwlBVTE1NTBfTkFORF9JTlQJCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDIzLAorCUFVMTU1MF9VU0JfREVWX1JFUV9JTlQsCisJQVUxNTUwX1VTQl9ERVZfU1VTX0lOVCwKKwlBVTE1NTBfVVNCX0hPU1RfSU5ULAorCUFVMTU1MF9NQUMwX0RNQV9JTlQsCisJQVUxNTUwX01BQzFfRE1BX0lOVCwKKwlBVTE1NTBfR1BJTzBfSU5UCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDMyLAorCUFVMTU1MF9HUElPMV9JTlQsCisJQVUxNTUwX0dQSU8yX0lOVCwKKwlBVTE1NTBfR1BJTzNfSU5ULAorCUFVMTU1MF9HUElPNF9JTlQsCisJQVUxNTUwX0dQSU81X0lOVCwKKwlBVTE1NTBfR1BJTzZfSU5ULAorCUFVMTU1MF9HUElPN19JTlQsCisJQVUxNTUwX0dQSU84X0lOVCwKKwlBVTE1NTBfR1BJTzlfSU5ULAorCUFVMTU1MF9HUElPMTBfSU5ULAorCUFVMTU1MF9HUElPMTFfSU5ULAorCUFVMTU1MF9HUElPMTJfSU5ULAorCUFVMTU1MF9HUElPMTNfSU5ULAorCUFVMTU1MF9HUElPMTRfSU5ULAorCUFVMTU1MF9HUElPMTVfSU5ULAorCUFVMTU1MF9HUElPMjAwX0lOVCwKKwlBVTE1NTBfR1BJTzIwMV8yMDVfSU5ULAkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDE6MjA1ICovCisJQVUxNTUwX0dQSU8xNl9JTlQsCisJQVUxNTUwX0dQSU8xN19JTlQsCisJQVUxNTUwX0dQSU8yMF9JTlQsCisJQVUxNTUwX0dQSU8yMV9JTlQsCisJQVUxNTUwX0dQSU8yMl9JTlQsCisJQVUxNTUwX0dQSU8yM19JTlQsCisJQVUxNTUwX0dQSU8yNF9JTlQsCisJQVUxNTUwX0dQSU8yNV9JTlQsCisJQVUxNTUwX0dQSU8yNl9JTlQsCisJQVUxNTUwX0dQSU8yN19JTlQsCisJQVUxNTUwX0dQSU8yOF9JTlQsCisJQVUxNTUwX0dQSU8yMDZfSU5ULAorCUFVMTU1MF9HUElPMjA3X0lOVCwKKwlBVTE1NTBfR1BJTzIwOF8yMTVfSU5ULAkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDg6MjE1ICovCit9OworCitlbnVtIHNvY19hdTEyMDBfaW50cyB7CisJQVUxMjAwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTEyMDBfVUFSVDBfSU5UCT0gQVUxMjAwX0ZJUlNUX0lOVCwKKwlBVTEyMDBfU1dUX0lOVCwKKwlBVTEyMDBfU0RfSU5ULAorCUFVMTIwMF9ERE1BX0lOVCwKKwlBVTEyMDBfTUFFX0JFX0lOVCwKKwlBVTEyMDBfR1BJTzIwMF9JTlQsCisJQVUxMjAwX0dQSU8yMDFfSU5ULAorCUFVMTIwMF9HUElPMjAyX0lOVCwKKwlBVTEyMDBfVUFSVDFfSU5ULAorCUFVMTIwMF9NQUVfRkVfSU5ULAorCUFVMTIwMF9QU0MwX0lOVCwKKwlBVTEyMDBfUFNDMV9JTlQsCisJQVUxMjAwX0FFU19JTlQsCisJQVUxMjAwX0NBTUVSQV9JTlQsCisJQVUxMjAwX1RPWV9JTlQsCisJQVUxMjAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTIwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTEyMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMjAwX1JUQ19JTlQsCisJQVUxMjAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTIwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTEyMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMjAwX0dQSU8yMDNfSU5ULAorCUFVMTIwMF9OQU5EX0lOVCwKKwlBVTEyMDBfR1BJTzIwNF9JTlQsCisJQVUxMjAwX0dQSU8yMDVfSU5ULAorCUFVMTIwMF9HUElPMjA2X0lOVCwKKwlBVTEyMDBfR1BJTzIwN19JTlQsCisJQVUxMjAwX0dQSU8yMDhfMjE1X0lOVCwJLyogTG9naWNhbCBPUiBvZiAyMDg6MjE1ICovCisJQVUxMjAwX1VTQl9JTlQsCisJQVUxMjAwX0xDRF9JTlQsCisJQVUxMjAwX01BRV9CT1RIX0lOVCwKKwlBVTEyMDBfR1BJTzBfSU5ULAorCUFVMTIwMF9HUElPMV9JTlQsCisJQVUxMjAwX0dQSU8yX0lOVCwKKwlBVTEyMDBfR1BJTzNfSU5ULAorCUFVMTIwMF9HUElPNF9JTlQsCisJQVUxMjAwX0dQSU81X0lOVCwKKwlBVTEyMDBfR1BJTzZfSU5ULAorCUFVMTIwMF9HUElPN19JTlQsCisJQVUxMjAwX0dQSU84X0lOVCwKKwlBVTEyMDBfR1BJTzlfSU5ULAorCUFVMTIwMF9HUElPMTBfSU5ULAorCUFVMTIwMF9HUElPMTFfSU5ULAorCUFVMTIwMF9HUElPMTJfSU5ULAorCUFVMTIwMF9HUElPMTNfSU5ULAorCUFVMTIwMF9HUElPMTRfSU5ULAorCUFVMTIwMF9HUElPMTVfSU5ULAorCUFVMTIwMF9HUElPMTZfSU5ULAorCUFVMTIwMF9HUElPMTdfSU5ULAorCUFVMTIwMF9HUElPMThfSU5ULAorCUFVMTIwMF9HUElPMTlfSU5ULAorCUFVMTIwMF9HUElPMjBfSU5ULAorCUFVMTIwMF9HUElPMjFfSU5ULAorCUFVMTIwMF9HUElPMjJfSU5ULAorCUFVMTIwMF9HUElPMjNfSU5ULAorCUFVMTIwMF9HUElPMjRfSU5ULAorCUFVMTIwMF9HUElPMjVfSU5ULAorCUFVMTIwMF9HUElPMjZfSU5ULAorCUFVMTIwMF9HUElPMjdfSU5ULAorCUFVMTIwMF9HUElPMjhfSU5ULAorCUFVMTIwMF9HUElPMjlfSU5ULAorCUFVMTIwMF9HUElPMzBfSU5ULAorCUFVMTIwMF9HUElPMzFfSU5ULAorfTsKIAogI2VuZGlmIC8qICFkZWZpbmVkIChfTEFOR1VBR0VfQVNTRU1CTFkpICovCiAKQEAgLTU0OSw3OCArOTExLDE2IEBACiAKICNkZWZpbmUgSUMxX1RFU1RCSVQJCTB4QjE4MDAwODAKIAotLyogSW50ZXJydXB0IE51bWJlcnMgKi8KKwogLyogQXUxMDAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKLWVudW0gc29jX2F1MTAwMF9pbnRzIHsKLQlBVTEwMDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTAwMF9VQVJUMF9JTlQJPSBBVTEwMDBfRklSU1RfSU5ULAotCUFVMTAwMF9VQVJUMV9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VQVJUMl9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VQVJUM19JTlQsCi0JQVUxMDAwX1NTSTBfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfU1NJMV9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9ETUFfSU5UX0JBU0UsCi0KLQlBVTEwMDBfVE9ZX0lOVAkJPSBBVTEwMDBfRklSU1RfSU5UICsgMTQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0JQVUxMDAwX0lSREFfVFhfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfSVJEQV9SWF9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTAwMF9NQUMwX0RNQV9JTlQsCi0JQVUxMDAwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfSTJTX1VPX0lOVCwJCQkJLyogYXUxMDAwICovCi0JQVUxMDAwX0FDOTdDX0lOVCwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTAwMF9HUElPXzE2LAotCUFVMTAwMF9HUElPXzE3LAotCUFVMTAwMF9HUElPXzE4LAotCUFVMTAwMF9HUElPXzE5LAotCUFVMTAwMF9HUElPXzIwLAotCUFVMTAwMF9HUElPXzIxLAotCUFVMTAwMF9HUElPXzIyLAotCUFVMTAwMF9HUElPXzIzLAotCUFVMTAwMF9HUElPXzI0LAotCUFVMTAwMF9HUElPXzI1LAotCUFVMTAwMF9HUElPXzI2LAotCUFVMTAwMF9HUElPXzI3LAotCUFVMTAwMF9HUElPXzI4LAotCUFVMTAwMF9HUElPXzI5LAotCUFVMTAwMF9HUElPXzMwLAotCUFVMTAwMF9HUElPXzMxLAotfTsKIAogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKLSNkZWZpbmUgVUFSVDJfQUREUgkJMHhCMTMwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdGRkZDCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTEwMDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxMDAwX0VUSDBfQkFTRQkweEIwNTAwMDAwCiAjZGVmaW5lIEFVMTAwMF9FVEgxX0JBU0UJMHhCMDUxMDAwMApAQCAtNjMxLDc4ICs5MzEsMTMgQEAKIAogLyogQXUxNTAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTE1MDAKLWVudW0gc29jX2F1MTUwMF9pbnRzIHsKLQlBVTE1MDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTUwMF9VQVJUMF9JTlQJPSBBVTE1MDBfRklSU1RfSU5ULAotCUFVMTAwMF9QQ0lfSU5UQSwJCQkJLyogYXUxNTAwICovCi0JQVUxMDAwX1BDSV9JTlRCLAkJCQkvKiBhdTE1MDAgKi8KLQlBVTE1MDBfVUFSVDNfSU5ULAotCUFVMTAwMF9QQ0lfSU5UQywJCQkJLyogYXUxNTAwICovCi0JQVUxMDAwX1BDSV9JTlRELAkJCQkvKiBhdTE1MDAgKi8KLQlBVTEwMDBfRE1BX0lOVF9CQVNFLAotCi0JQVUxMDAwX1RPWV9JTlQJCT0gQVUxNTAwX0ZJUlNUX0lOVCArIDE0LAotCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAotCUFVMTAwMF9SVENfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMV9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAotCUFVMTUwMF9QQ0lfRVJSX0lOVCwKLQlBVTE1MDBfUkVTRVJWRURfSU5ULAotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTUwMF9NQUMwX0RNQV9JTlQsCi0JQVUxNTAwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfQUM5N0NfSU5UCT0gQVUxNTAwX0ZJUlNUX0lOVCArIDMxLAotCUFVMTAwMF9HUElPXzAsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxNTAwX0dQSU9fMjAwLAotCUFVMTUwMF9HUElPXzIwMSwKLQlBVTE1MDBfR1BJT18yMDIsCi0JQVUxNTAwX0dQSU9fMjAzLAotCUFVMTUwMF9HUElPXzIwLAotCUFVMTUwMF9HUElPXzIwNCwKLQlBVTE1MDBfR1BJT18yMDUsCi0JQVUxNTAwX0dQSU9fMjMsCi0JQVUxNTAwX0dQSU9fMjQsCi0JQVUxNTAwX0dQSU9fMjUsCi0JQVUxNTAwX0dQSU9fMjYsCi0JQVUxNTAwX0dQSU9fMjcsCi0JQVUxNTAwX0dQSU9fMjgsCi0JQVUxNTAwX0dQSU9fMjA2LAotCUFVMTUwMF9HUElPXzIwNywKLQlBVTE1MDBfR1BJT18yMDhfMjE1LAotfTsKLQotLyogc2hvcnRjdXRzICovCi0jZGVmaW5lIElOVEEgQVUxMDAwX1BDSV9JTlRBCi0jZGVmaW5lIElOVEIgQVUxMDAwX1BDSV9JTlRCCi0jZGVmaW5lIElOVEMgQVUxMDAwX1BDSV9JTlRDCi0jZGVmaW5lIElOVEQgQVUxMDAwX1BDSV9JTlRECiAKICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdmZmZjCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTE1MDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxNTAwX0VUSDBfQkFTRQkweEIxNTAwMDAwCiAjZGVmaW5lIEFVMTUwMF9FVEgxX0JBU0UJMHhCMTUxMDAwMApAQCAtNzEzLDc0ICs5NDgsMTMgQEAKIAogLyogQXUxMTAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKLWVudW0gc29jX2F1MTEwMF9pbnRzIHsKLQlBVTExMDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTEwMF9VQVJUMF9JTlQJPSBBVTExMDBfRklSU1RfSU5ULAotCUFVMTEwMF9VQVJUMV9JTlQsCi0JQVUxMTAwX1NEX0lOVCwKLQlBVTExMDBfVUFSVDNfSU5ULAotCUFVMTAwMF9TU0kwX0lOVCwKLQlBVTEwMDBfU1NJMV9JTlQsCi0JQVUxMDAwX0RNQV9JTlRfQkFTRSwKLQotCUFVMTAwMF9UT1lfSU5UCQk9IEFVMTEwMF9GSVJTVF9JTlQgKyAxNCwKLQlBVTEwMDBfVE9ZX01BVENIMF9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDFfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfUlRDX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMF9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDFfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfSVJEQV9UWF9JTlQsCi0JQVUxMDAwX0lSREFfUlhfSU5ULAotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTEwMF9NQUMwX0RNQV9JTlQsCi0JQVUxMTAwX0dQSU9fMjA4XzIxNSwKLQlBVTExMDBfTENEX0lOVCwKLQlBVTEwMDBfQUM5N0NfSU5ULAotCUFVMTAwMF9HUElPXzAsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxMDAwX0dQSU9fMTYsCi0JQVUxMDAwX0dQSU9fMTcsCi0JQVUxMDAwX0dQSU9fMTgsCi0JQVUxMDAwX0dQSU9fMTksCi0JQVUxMDAwX0dQSU9fMjAsCi0JQVUxMDAwX0dQSU9fMjEsCi0JQVUxMDAwX0dQSU9fMjIsCi0JQVUxMDAwX0dQSU9fMjMsCi0JQVUxMDAwX0dQSU9fMjQsCi0JQVUxMDAwX0dQSU9fMjUsCi0JQVUxMDAwX0dQSU9fMjYsCi0JQVUxMDAwX0dQSU9fMjcsCi0JQVUxMDAwX0dQSU9fMjgsCi0JQVUxMDAwX0dQSU9fMjksCi0JQVUxMDAwX0dQSU9fMzAsCi0JQVUxMDAwX0dQSU9fMzEsCi19OwogCiAjZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKLSNkZWZpbmUgVUFSVDFfQUREUgkJMHhCMTIwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdGRkZDCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTExMDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxMTAwX0VUSDBfQkFTRQkweEIwNTAwMDAwCiAjZGVmaW5lIEFVMTEwMF9NQUMwX0VOQUJMRQkweEIwNTIwMDAwCkBAIC03ODgsODcgKzk2MiwxMiBAQAogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxMTAwICovCiAKICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MAotZW51bSBzb2NfYXUxNTUwX2ludHMgewotCUFVMTU1MF9GSVJTVF9JTlQJPSBNSVBTX0NQVV9JUlFfQkFTRSArIDgsCi0JQVUxNTUwX1VBUlQwX0lOVAk9IEFVMTU1MF9GSVJTVF9JTlQsCi0JQVUxNTUwX1BDSV9JTlRBLAotCUFVMTU1MF9QQ0lfSU5UQiwKLQlBVTE1NTBfRERNQV9JTlQsCi0JQVUxNTUwX0NSWVBUT19JTlQsCi0JQVUxNTUwX1BDSV9JTlRDLAotCUFVMTU1MF9QQ0lfSU5URCwKLQlBVTE1NTBfUENJX1JTVF9JTlQsCi0JQVUxNTUwX1VBUlQxX0lOVCwKLQlBVTE1NTBfVUFSVDNfSU5ULAotCUFVMTU1MF9QU0MwX0lOVCwKLQlBVTE1NTBfUFNDMV9JTlQsCi0JQVUxNTUwX1BTQzJfSU5ULAotCUFVMTU1MF9QU0MzX0lOVCwKLQlBVTEwMDBfVE9ZX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMF9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDFfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfUlRDX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMF9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDFfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKLQotCUFVMTU1MF9OQU5EX0lOVAkJCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDIzLAotCUFVMTU1MF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfUkVRX0lOVAkJPSBBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTU1MF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVAkJPSBBVTE1NTBfVVNCX0RFVl9TVVNfSU5ULAotCUFVMTU1MF9VU0JfSE9TVF9JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVAkJPSBBVTE1NTBfVVNCX0hPU1RfSU5ULAotCUFVMTU1MF9NQUMwX0RNQV9JTlQsCi0JQVUxNTUwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfR1BJT18wCQkJPSBBVTE1NTBfRklSU1RfSU5UICsgMzIsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxNTUwX0dQSU9fMjAwLAotCUFVMTUwMF9HUElPXzIwMV8yMDUsCQkJLyogTG9naWNhbCBvciBvZiBHUElPMjAxOjIwNSAqLwotCUFVMTUwMF9HUElPXzE2LAotCUFVMTUwMF9HUElPXzE3LAotCUFVMTUwMF9HUElPXzIwLAotCUFVMTUwMF9HUElPXzIxLAotCUFVMTUwMF9HUElPXzIyLAotCUFVMTUwMF9HUElPXzIzLAotCUFVMTUwMF9HUElPXzI0LAotCUFVMTUwMF9HUElPXzI1LAotCUFVMTUwMF9HUElPXzI2LAotCUFVMTUwMF9HUElPXzI3LAotCUFVMTUwMF9HUElPXzI4LAotCUFVMTUwMF9HUElPXzIwNiwKLQlBVTE1MDBfR1BJT18yMDcsCi0JQVUxNTAwX0dQSU9fMjA4XzIxOCwJCQkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDg6MjE4ICovCi19OwotCi0vKiBzaG9ydGN1dHMgKi8KLSNkZWZpbmUgSU5UQSBBVTE1NTBfUENJX0lOVEEKLSNkZWZpbmUgSU5UQiBBVTE1NTBfUENJX0lOVEIKLSNkZWZpbmUgSU5UQyBBVTE1NTBfUENJX0lOVEMKLSNkZWZpbmUgSU5URCBBVTE1NTBfUENJX0lOVEQKLQogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKLSNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTQwMjAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9PSENJX0xFTgkJMHgwMDA2MDAwMAogI2RlZmluZSBVU0JfSE9TVF9DT05GSUcgCTB4QjQwMjdmZmMKKyNkZWZpbmUgRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5UIEFVMTU1MF9VU0JfSE9TVF9JTlQKIAogI2RlZmluZSBBVTE1NTBfRVRIMF9CQVNFCTB4QjA1MDAwMDAKICNkZWZpbmUgQVUxNTUwX0VUSDFfQkFTRQkweEIwNTEwMDAwCkBAIC04NzcsNzggKzk3NiwxMCBAQAogI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxNTUwICovCiAKKwogI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCi1lbnVtIHNvY19hdTEyMDBfaW50cyB7Ci0JQVUxMjAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTEyMDBfVUFSVDBfSU5UCT0gQVUxMjAwX0ZJUlNUX0lOVCwKLQlBVTEyMDBfU1dUX0lOVCwKLQlBVTEyMDBfU0RfSU5ULAotCUFVMTIwMF9ERE1BX0lOVCwKLQlBVTEyMDBfTUFFX0JFX0lOVCwKLQlBVTEyMDBfR1BJT18yMDAsCi0JQVUxMjAwX0dQSU9fMjAxLAotCUFVMTIwMF9HUElPXzIwMiwKLQlBVTEyMDBfVUFSVDFfSU5ULAotCUFVMTIwMF9NQUVfRkVfSU5ULAotCUFVMTIwMF9QU0MwX0lOVCwKLQlBVTEyMDBfUFNDMV9JTlQsCi0JQVUxMjAwX0FFU19JTlQsCi0JQVUxMjAwX0NBTUVSQV9JTlQsCi0JQVUxMDAwX1RPWV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0JQVUxMjAwX0dQSU9fMjAzLAotCUFVMTIwMF9OQU5EX0lOVCwKLQlBVTEyMDBfR1BJT18yMDQsCi0JQVUxMjAwX0dQSU9fMjA1LAotCUFVMTIwMF9HUElPXzIwNiwKLQlBVTEyMDBfR1BJT18yMDcsCi0JQVUxMjAwX0dQSU9fMjA4XzIxNSwJCQkvKiBMb2dpY2FsIE9SIG9mIDIwODoyMTUgKi8KLQlBVTEyMDBfVVNCX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5UCT0gQVUxMjAwX1VTQl9JTlQsCi0JQVUxMjAwX0xDRF9JTlQsCi0JQVUxMjAwX01BRV9CT1RIX0lOVCwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTAwMF9HUElPXzE2LAotCUFVMTAwMF9HUElPXzE3LAotCUFVMTAwMF9HUElPXzE4LAotCUFVMTAwMF9HUElPXzE5LAotCUFVMTAwMF9HUElPXzIwLAotCUFVMTAwMF9HUElPXzIxLAotCUFVMTAwMF9HUElPXzIyLAotCUFVMTAwMF9HUElPXzIzLAotCUFVMTAwMF9HUElPXzI0LAotCUFVMTAwMF9HUElPXzI1LAotCUFVMTAwMF9HUElPXzI2LAotCUFVMTAwMF9HUElPXzI3LAotCUFVMTAwMF9HUElPXzI4LAotCUFVMTAwMF9HUElPXzI5LAotCUFVMTAwMF9HUElPXzMwLAotCUFVMTAwMF9HUElPXzMxLAotfTsKIAogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKIAogI2RlZmluZSBVU0JfVU9DX0JBU0UJCTB4MTQwMjAwMjAKICNkZWZpbmUgVVNCX1VPQ19MRU4JCTB4MjAKQEAgLTk3NCwxNiArMTAwNSwxMCBAQAogI2RlZmluZSBVU0JNU1JNQ0ZHX1JEQ09NQgkzMAogI2RlZmluZSBVU0JNU1JNQ0ZHX1BGRU4gCTMxCiAKKyNkZWZpbmUgRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5UIEFVMTIwMF9VU0JfSU5UCisKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTIwMCAqLwogCi0jZGVmaW5lIEFVMTAwMF9JTlRDMF9JTlRfQkFTRQkoTUlQU19DUFVfSVJRX0JBU0UgKyA4KQotI2RlZmluZSBBVTEwMDBfSU5UQzBfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMF9JTlRfQkFTRSArIDMxKQotI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0JBU0UJKEFVMTAwMF9JTlRDMF9JTlRfQkFTRSArIDMyKQotI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMV9JTlRfQkFTRSArIDMxKQotCi0jZGVmaW5lIEFVMTAwMF9NQVhfSU5UUiAJQVUxMDAwX0lOVEMxX0lOVF9MQVNUCi0jZGVmaW5lIElOVFgJCQkweEZGCQkJLyogbm90IHZhbGlkICovCi0KIC8qIFByb2dyYW1tYWJsZSBDb3VudGVycyAwIGFuZCAxICovCiAjZGVmaW5lIFNZU19CQVNFCQkweEIxOTAwMDAwCiAjZGVmaW5lIFNZU19DT1VOVEVSX0NOVFJMCShTWVNfQkFTRSArIDB4MTQpCkBAIC0xMjMxLDE0ICsxMjU2LDYgQEAKICNkZWZpbmUgTUFDX1JYX0JVRkYzX1NUQVRVUwkweDMwCiAjZGVmaW5lIE1BQ19SWF9CVUZGM19BRERSCTB4MzQKIAotLyogVUFSVFMgMC0zICovCi0jZGVmaW5lIFVBUlRfQkFTRQkJVUFSVDBfQUREUgotI2lmZGVmCUNPTkZJR19TT0NfQVUxMjAwCi0jZGVmaW5lIFVBUlRfREVCVUdfQkFTRSAJVUFSVDFfQUREUgotI2Vsc2UKLSNkZWZpbmUgVUFSVF9ERUJVR19CQVNFIAlVQVJUM19BRERSCi0jZW5kaWYKLQogI2RlZmluZSBVQVJUX1JYCQkwCS8qIFJlY2VpdmUgYnVmZmVyICovCiAjZGVmaW5lIFVBUlRfVFgJCTQJLyogVHJhbnNtaXQgYnVmZmVyICovCiAjZGVmaW5lIFVBUlRfSUVSCTgJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwpAQCAtMTI1MSw4NCArMTI2OCw2IEBACiAjZGVmaW5lIFVBUlRfQ0xLCTB4MjgJLyogQmF1ZCBSYXRlIENsb2NrIERpdmlkZXIgKi8KICNkZWZpbmUgVUFSVF9NT0RfQ05UUkwJMHgxMDAJLyogTW9kdWxlIENvbnRyb2wgKi8KIAotI2RlZmluZSBVQVJUX0ZDUl9FTkFCTEVfRklGTwkweDAxIC8qIEVuYWJsZSB0aGUgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9SQ1ZSCTB4MDIgLyogQ2xlYXIgdGhlIFJDVlIgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9YTUlUCTB4MDQgLyogQ2xlYXIgdGhlIFhNSVQgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9ETUFfU0VMRUNUCTB4MDggLyogRm9yIERNQSBhcHBsaWNhdGlvbnMgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl9NQVNLCTB4RjAgLyogTWFzayBmb3IgdGhlIEZJRk8gdHJpZ2dlciByYW5nZSAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfMQkweDAwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgMSAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfNAkweDQwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgNCAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfOAkweDgwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgOCAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfMTQgICAweEEwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgMTQgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzAJMHgwMCAvKiBNYXNrIGZvciB0cmFuc21pdCB0cmlnZ2VyIHNldCBhdCAwICovCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl80CTB4MTAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgNCAqLwotI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdHRVJfOCAgICAweDIwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDggKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzEyCTB4MzAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgMTIgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMaW5lIENvbnRyb2wgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX0xDUl9TQkMJMHg0MAkvKiBTZXQgYnJlYWsgY29udHJvbCAqLwotI2RlZmluZSBVQVJUX0xDUl9TUEFSCTB4MjAJLyogU3RpY2sgcGFyaXR5ICg/KSAqLwotI2RlZmluZSBVQVJUX0xDUl9FUEFSCTB4MTAJLyogRXZlbiBwYXJpdHkgc2VsZWN0ICovCi0jZGVmaW5lIFVBUlRfTENSX1BBUklUWQkweDA4CS8qIFBhcml0eSBFbmFibGUgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfU1RPUAkweDA0CS8qIFN0b3AgYml0czogMD0xIHN0b3AgYml0LCAxPSAyIHN0b3AgYml0cyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVONSAgMHgwMAkvKiBXb3JkbGVuZ3RoOiA1IGJpdHMgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjYgIDB4MDEJLyogV29yZGxlbmd0aDogNiBiaXRzICovCi0jZGVmaW5lIFVBUlRfTENSX1dMRU43ICAweDAyCS8qIFdvcmRsZW5ndGg6IDcgYml0cyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVOOCAgMHgwMwkvKiBXb3JkbGVuZ3RoOiA4IGJpdHMgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMaW5lIFN0YXR1cyBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTFNSX1RFTVQJMHg0MAkvKiBUcmFuc21pdHRlciBlbXB0eSAqLwotI2RlZmluZSBVQVJUX0xTUl9USFJFCTB4MjAJLyogVHJhbnNtaXQtaG9sZC1yZWdpc3RlciBlbXB0eSAqLwotI2RlZmluZSBVQVJUX0xTUl9CSQkweDEwCS8qIEJyZWFrIGludGVycnVwdCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfRkUJMHgwOAkvKiBGcmFtZSBlcnJvciBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfUEUJMHgwNAkvKiBQYXJpdHkgZXJyb3IgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX09FCTB4MDIJLyogT3ZlcnJ1biBlcnJvciBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfRFIJMHgwMQkvKiBSZWNlaXZlciBkYXRhIHJlYWR5ICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgVUFSVF9JSVJfTk9fSU5UCTB4MDEJLyogTm8gaW50ZXJydXB0cyBwZW5kaW5nICovCi0jZGVmaW5lIFVBUlRfSUlSX0lECTB4MDYJLyogTWFzayBmb3IgdGhlIGludGVycnVwdCBJRCAqLwotI2RlZmluZSBVQVJUX0lJUl9NU0kJMHgwMAkvKiBNb2RlbSBzdGF0dXMgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUlSX1RIUkkJMHgwMgkvKiBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCi0jZGVmaW5lIFVBUlRfSUlSX1JESQkweDA0CS8qIFJlY2VpdmVyIGRhdGEgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUlSX1JMU0kJMHgwNgkvKiBSZWNlaXZlciBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgVUFSVF9JRVJfTVNJCTB4MDgJLyogRW5hYmxlIE1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVUFSVF9JRVJfUkxTSQkweDA0CS8qIEVuYWJsZSByZWNlaXZlciBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVUFSVF9JRVJfVEhSSQkweDAyCS8qIEVuYWJsZSBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGludC4gKi8KLSNkZWZpbmUgVUFSVF9JRVJfUkRJCTB4MDEJLyogRW5hYmxlIHJlY2VpdmVyIGRhdGEgaW50ZXJydXB0ICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTW9kZW0gQ29udHJvbCBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTUNSX0xPT1AJMHgxMAkvKiBFbmFibGUgbG9vcGJhY2sgdGVzdCBtb2RlICovCi0jZGVmaW5lIFVBUlRfTUNSX09VVDIJMHgwOAkvKiBPdXQyIGNvbXBsZW1lbnQgKi8KLSNkZWZpbmUgVUFSVF9NQ1JfT1VUMQkweDA0CS8qIE91dDEgY29tcGxlbWVudCAqLwotI2RlZmluZSBVQVJUX01DUl9SVFMJMHgwMgkvKiBSVFMgY29tcGxlbWVudCAqLwotI2RlZmluZSBVQVJUX01DUl9EVFIJMHgwMQkvKiBEVFIgY29tcGxlbWVudCAqLwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTVNSX0RDRAkweDgwCS8qIERhdGEgQ2FycmllciBEZXRlY3QgKi8KLSNkZWZpbmUgVUFSVF9NU1JfUkkJMHg0MAkvKiBSaW5nIEluZGljYXRvciAqLwotI2RlZmluZSBVQVJUX01TUl9EU1IJMHgyMAkvKiBEYXRhIFNldCBSZWFkeSAqLwotI2RlZmluZSBVQVJUX01TUl9DVFMJMHgxMAkvKiBDbGVhciB0byBTZW5kICovCi0jZGVmaW5lIFVBUlRfTVNSX0REQ0QJMHgwOAkvKiBEZWx0YSBEQ0QgKi8KLSNkZWZpbmUgVUFSVF9NU1JfVEVSSQkweDA0CS8qIFRyYWlsaW5nIGVkZ2UgcmluZyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9NU1JfRERTUgkweDAyCS8qIERlbHRhIERTUiAqLwotI2RlZmluZSBVQVJUX01TUl9EQ1RTCTB4MDEJLyogRGVsdGEgQ1RTICovCi0jZGVmaW5lIFVBUlRfTVNSX0FOWV9ERUxUQSAweDBGCS8qIEFueSBvZiB0aGUgZGVsdGEgYml0cyEgKi8KLQogLyogU1NJTyAqLwogI2RlZmluZSBTU0kwX1NUQVRVUwkJMHhCMTYwMDAwMAogIyAgZGVmaW5lIFNTSV9TVEFUVVNfQkYgCSgxIDw8IDQpCkBAIC0xNzIwLDcgKzE2NTksNyBAQAogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfU1RBUlQJMHgwMDAwMTAwMAkvKiBza2lwIGxlZ2FjeSBwcm9iaW5nICovCiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgogI2RlZmluZSBJT01FTV9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmZlVMTAogCiAjZWxzZSAvKiBBdTEwMDAgYW5kIEF1MTEwMCBhbmQgQXUxMjAwICovCiAKQEAgLTE3MjgsNyArMTY2Nyw3IEBACiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgogI2RlZmluZSBJT01FTV9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmZlVMTAogCiAjZGVmaW5lIFBDSV9JT19TVEFSVAkwCiAjZGVmaW5lIFBDSV9JT19FTkQJMApAQCAtMTczOSw1MyArMTY3OCw0IEBACiAKICNlbmRpZgogCi0jaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgewotCS8qIDB4MDAwMCAqLyB1MzIgdG95dHJpbTsKLQkvKiAweDAwMDQgKi8gdTMyIHRveXdyaXRlOwotCS8qIDB4MDAwOCAqLyB1MzIgdG95bWF0Y2gwOwotCS8qIDB4MDAwQyAqLyB1MzIgdG95bWF0Y2gxOwotCS8qIDB4MDAxMCAqLyB1MzIgdG95bWF0Y2gyOwotCS8qIDB4MDAxNCAqLyB1MzIgY250cmN0cmw7Ci0JLyogMHgwMDE4ICovIHUzMiBzY3JhdGNoMDsKLQkvKiAweDAwMUMgKi8gdTMyIHNjcmF0Y2gxOwotCS8qIDB4MDAyMCAqLyB1MzIgZnJlcWN0cmwwOwotCS8qIDB4MDAyNCAqLyB1MzIgZnJlcWN0cmwxOwotCS8qIDB4MDAyOCAqLyB1MzIgY2xrc3JjOwotCS8qIDB4MDAyQyAqLyB1MzIgcGluZnVuYzsKLQkvKiAweDAwMzAgKi8gdTMyIHJlc2VydmVkMDsKLQkvKiAweDAwMzQgKi8gdTMyIHdha2Vtc2s7Ci0JLyogMHgwMDM4ICovIHUzMiBlbmRpYW47Ci0JLyogMHgwMDNDICovIHUzMiBwb3dlcmN0cmw7Ci0JLyogMHgwMDQwICovIHUzMiB0b3lyZWFkOwotCS8qIDB4MDA0NCAqLyB1MzIgcnRjdHJpbTsKLQkvKiAweDAwNDggKi8gdTMyIHJ0Y3dyaXRlOwotCS8qIDB4MDA0QyAqLyB1MzIgcnRjbWF0Y2gwOwotCS8qIDB4MDA1MCAqLyB1MzIgcnRjbWF0Y2gxOwotCS8qIDB4MDA1NCAqLyB1MzIgcnRjbWF0Y2gyOwotCS8qIDB4MDA1OCAqLyB1MzIgcnRjcmVhZDsKLQkvKiAweDAwNUMgKi8gdTMyIHdha2VzcmM7Ci0JLyogMHgwMDYwICovIHUzMiBjcHVwbGw7Ci0JLyogMHgwMDY0ICovIHUzMiBhdXhwbGw7Ci0JLyogMHgwMDY4ICovIHUzMiByZXNlcnZlZDE7Ci0JLyogMHgwMDZDICovIHUzMiByZXNlcnZlZDI7Ci0JLyogMHgwMDcwICovIHUzMiByZXNlcnZlZDM7Ci0JLyogMHgwMDc0ICovIHUzMiByZXNlcnZlZDQ7Ci0JLyogMHgwMDc4ICovIHUzMiBzbHBwd3I7Ci0JLyogMHgwMDdDICovIHUzMiBzbGVlcDsKLQkvKiAweDAwODAgKi8gdTMyIHJlc2VydmVkNVszMl07Ci0JLyogMHgwMTAwICovIHUzMiB0cmlvdXRyZDsKLSNkZWZpbmUgdHJpb3V0Y2xyIHRyaW91dHJkCi0JLyogMHgwMTA0ICovIHUzMiByZXNlcnZlZDY7Ci0JLyogMHgwMTA4ICovIHUzMiBvdXRwdXRyZDsKLSNkZWZpbmUgb3V0cHV0c2V0IG91dHB1dHJkCi0JLyogMHgwMTBDICovIHUzMiBvdXRwdXRjbHI7Ci0JLyogMHgwMTEwICovIHUzMiBwaW5zdGF0ZXJkOwotI2RlZmluZSBwaW5pbnB1dGVuIHBpbnN0YXRlcmQKLX0gQVUxWDAwX1NZUzsKLQotc3RhdGljIEFVMVgwMF9TWVMgKiBjb25zdCBzeXMgPSAoQVUxWDAwX1NZUyAqKVNZU19CQVNFOwotCi0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaAppbmRleCBjMzVlMjA5Li45NDAwMGEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIAlpbnQoKmNhcmRfcmVhZG9ubHkpKHZvaWQgKm1tY19ob3N0KTsKIAl2b2lkKCpzZXRfcG93ZXIpKHZvaWQgKm1tY19ob3N0LCBpbnQgc3RhdGUpOwogCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZDsKKwl1bnNpZ25lZCBsb25nIG1hc2tfaG9zdF9jYXBzOwogfTsKIAogI2RlZmluZSBTRDBfQkFTRQkweEIwNjAwMDAwCkBAIC0yMDUsNCArMjA2LDMgQEAKIAogCiAjZW5kaWYgLyogX19BU01fQVUxMTAwX01NQ19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaAppbmRleCAwNmY2OGY0Li44YzZiMTEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCkBAIC0zMDUsNiArMzA1LDcgQEAKIAlkYmRldl90YWJfdAkJKmNoYW5fZGVzdDsKIAlhdTF4X2RtYV9jaGFuX3QJCSpjaGFuX3B0cjsKIAlhdTF4X2RkbWFfZGVzY190CSpjaGFuX2Rlc2NfYmFzZTsKKwl1MzIJCQljZGJfbWVtYmFzZTsgLyoga21hbGxvYyBiYXNlIG9mIGFib3ZlICovCiAJYXUxeF9kZG1hX2Rlc2NfdAkqZ2V0X3B0ciwgKnB1dF9wdHIsICpjdXJfcHRyOwogCXZvaWQJCQkqY2hhbl9jYWxscGFyYW07CiAJdm9pZAkJCSgqY2hhbl9jYWxsYmFjaykoaW50LCB2b2lkICopOwpAQCAtMzM4LDggKzMzOSw4IEBACiB1MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpOwogCiAvKiBQdXQgYnVmZmVycyBvbiBzb3VyY2UvZGVzdGluYXRpb24gZGVzY3JpcHRvcnMuICovCi11MzIgX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKHUzMiBjaGFuaWQsIHZvaWQgKmJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKTsKLXUzMiBfYXUxeHh4X2RiZG1hX3B1dF9kZXN0KHUzMiBjaGFuaWQsIHZvaWQgKmJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKTsKK3UzMiBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZSh1MzIgY2hhbmlkLCBkbWFfYWRkcl90IGJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKTsKK3UzMiBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgZG1hX2FkZHJfdCBidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncyk7CiAKIC8qIEdldCBhIGJ1ZmZlciBmcm9tIHRoZSBkZXN0aW5hdGlvbiBkZXNjcmlwdG9yLiAqLwogdTMyIGF1MXh4eF9kYmRtYV9nZXRfZGVzdCh1MzIgY2hhbmlkLCB2b2lkICoqYnVmLCBpbnQgKm5ieXRlcyk7CkBAIC0zNjIsMjUgKzM2Myw2IEBACiB2b2lkIGF1MXh4eF9kYmRtYV9yZXN1bWUodm9pZCk7CiAjZW5kaWYKIAotCi0vKgotICogU29tZSBjb21wYXRpYmlsdHkgbWFjcm9zIC0tIG5lZWRlZCB0byBtYWtlIGNoYW5nZXMgdG8gQVBJCi0gKiB3aXRob3V0IGJyZWFraW5nIGV4aXN0aW5nIGRyaXZlcnMuCi0gKi8KLSNkZWZpbmUgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2hhbmlkLCBidWYsIG5ieXRlcykJCQlcCi0JX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIERETUFfRkxBR1NfSUUpCi0jZGVmaW5lIGF1MXh4eF9kYmRtYV9wdXRfc291cmNlX2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQlcCi0JX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQotI2RlZmluZSBwdXRfc291cmNlX2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQkJCVwKLQlhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZV9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykKLQotI2RlZmluZSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoY2hhbmlkLCBidWYsIG5ieXRlcykJCQlcCi0JX2F1MXh4eF9kYmRtYV9wdXRfZGVzdChjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBERE1BX0ZMQUdTX0lFKQotI2RlZmluZSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3RfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpIAlcCi0JX2F1MXh4eF9kYmRtYV9wdXRfZGVzdChjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykKLSNkZWZpbmUgcHV0X2Rlc3RfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCQkJXAotCWF1MXh4eF9kYmRtYV9wdXRfZGVzdF9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykKLQogLyoKICAqCUZsYWdzIGZvciB0aGUgcHV0X3NvdXJjZS9wdXRfZGVzdCBmdW5jdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTliNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19BVTFYMDBfRVRIX0RBVEFfSAorI2RlZmluZSBfX0FVMVgwMF9FVEhfREFUQV9ICisKKy8qIFBsYXRmb3JtIHNwZWNpZmljIFBIWSBjb25maWd1cmF0aW9uIHBhc3NlZCB0byB0aGUgTUFDIGRyaXZlciAqLworc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSB7CisJaW50IHBoeV9zdGF0aWNfY29uZmlnOworCWludCBwaHlfc2VhcmNoX2hpZ2hlc3RfYWRkcjsKKwlpbnQgcGh5MV9zZWFyY2hfbWFjMDsKKwlpbnQgcGh5X2FkZHI7CisJaW50IHBoeV9idXNpZDsKKwlpbnQgcGh5X2lycTsKK307CisKK3ZvaWQgX19pbml0IGF1MXh4eF9vdmVycmlkZV9ldGhfY2ZnKHVuc2lnbmVkIHBvcnQsCisJCQlzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSk7CisKKyNlbmRpZiAvKiBfX0FVMVgwMF9FVEhfREFUQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCmluZGV4IDkxNTk1ZmEuLjYyZDJmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCkBAIC0zNSwxNSArMzUsMTMgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTAwMF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewotCWlmICgoaXJxID49IEFVMTAwMF9HUElPXzApICYmIChpcnEgPD0gQVUxMDAwX0dQSU9fMzEpKQotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPXzApICsgMDsKKwlpZiAoKGlycSA+PSBBVTEwMDBfR1BJTzBfSU5UKSAmJiAoaXJxIDw9IEFVMTAwMF9HUElPMzFfSU5UKSkKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJTzBfSU5UKSArIDA7CiAKIAlyZXR1cm4gLUVOWElPOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTUwMF9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7CkBAIC03MSwyNyArNjksMjUgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTE1MDAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTUwMF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewogCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBBVTEwMDBfR1BJT18wIC4uLiBBVTEwMDBfR1BJT18xNToKLQljYXNlIEFVMTUwMF9HUElPXzIwOgotCWNhc2UgQVUxNTAwX0dQSU9fMjMgLi4uIEFVMTUwMF9HUElPXzI4OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPXzApICsgMDsKLQljYXNlIEFVMTUwMF9HUElPXzIwMCAuLi4gQVUxNTAwX0dQSU9fMjAzOgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzIwMCkgKyAwOwotCWNhc2UgQVUxNTAwX0dQSU9fMjA0IC4uLiBBVTE1MDBfR1BJT18yMDU6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU9fMjA0KSArIDQ7Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDYgLi4uIEFVMTUwMF9HUElPXzIwNzoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18yMDYpICsgNjsKLQljYXNlIEFVMTUwMF9HUElPXzIwOF8yMTU6CisJY2FzZSBBVTE1MDBfR1BJTzBfSU5UIC4uLiBBVTE1MDBfR1BJTzE1X0lOVDoKKwljYXNlIEFVMTUwMF9HUElPMjBfSU5UOgorCWNhc2UgQVUxNTAwX0dQSU8yM19JTlQgLi4uIEFVMTUwMF9HUElPMjhfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPMF9JTlQpICsgMDsKKwljYXNlIEFVMTUwMF9HUElPMjAwX0lOVCAuLi4gQVUxNTAwX0dQSU8yMDNfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPMjAwX0lOVCkgKyAwOworCWNhc2UgQVUxNTAwX0dQSU8yMDRfSU5UIC4uLiBBVTE1MDBfR1BJTzIwNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU8yMDRfSU5UKSArIDQ7CisJY2FzZSBBVTE1MDBfR1BJTzIwNl9JTlQgLi4uIEFVMTUwMF9HUElPMjA3X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJTzIwNl9JTlQpICsgNjsKKwljYXNlIEFVMTUwMF9HUElPMjA4XzIxNV9JTlQ6CiAJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyA4OwogCX0KIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgYXUxMTAwX2dwaW8xX3RvX2lycShpbnQgZ3BpbykKIHsKQEAgLTEwOCwxOSArMTA0LDE3IEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCiBzdGF0aWMgaW5saW5lIGludCBhdTExMDBfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKIAlzd2l0Y2ggKGlycSkgewotCWNhc2UgQVUxMDAwX0dQSU9fMCAuLi4gQVUxMDAwX0dQSU9fMzE6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOwotCWNhc2UgQVUxMTAwX0dQSU9fMjA4XzIxNToKKwljYXNlIEFVMTEwMF9HUElPMF9JTlQgLi4uIEFVMTEwMF9HUElPMzFfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTEwMF9HUElPMF9JTlQpICsgMDsKKwljYXNlIEFVMTEwMF9HUElPMjA4XzIxNV9JTlQ6CiAJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyA4OwogCX0KIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgYXUxNTUwX2dwaW8xX3RvX2lycShpbnQgZ3BpbykKIHsKQEAgLTE0OSwyNCArMTQzLDIyIEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCiBzdGF0aWMgaW5saW5lIGludCBhdTE1NTBfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKIAlzd2l0Y2ggKGlycSkgewotCWNhc2UgQVUxMDAwX0dQSU9fMCAuLi4gQVUxMDAwX0dQSU9fMTU6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOwotCWNhc2UgQVUxNTUwX0dQSU9fMjAwOgotCWNhc2UgQVUxNTAwX0dQSU9fMjAxXzIwNToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJT18yMDApICsgMDsKLQljYXNlIEFVMTUwMF9HUElPXzE2IC4uLiBBVTE1MDBfR1BJT18yODoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18xNikgKyAxNjsKLQljYXNlIEFVMTUwMF9HUElPXzIwNiAuLi4gQVUxNTAwX0dQSU9fMjA4XzIxODoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18yMDYpICsgNjsKKwljYXNlIEFVMTU1MF9HUElPMF9JTlQgLi4uIEFVMTU1MF9HUElPMTVfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTU1MF9HUElPMF9JTlQpICsgMDsKKwljYXNlIEFVMTU1MF9HUElPMjAwX0lOVDoKKwljYXNlIEFVMTU1MF9HUElPMjAxXzIwNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU8yMDBfSU5UKSArIDA7CisJY2FzZSBBVTE1NTBfR1BJTzE2X0lOVCAuLi4gQVUxNTUwX0dQSU8yOF9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU8xNl9JTlQpICsgMTY7CisJY2FzZSBBVTE1NTBfR1BJTzIwNl9JTlQgLi4uIEFVMTU1MF9HUElPMjA4XzIxNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU8yMDZfSU5UKSArIDY7CiAJfQogCiAJcmV0dXJuIC1FTlhJTzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBhdTEyMDBfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewpAQCAtMTg3LDIzICsxNzksMjEgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTIwMF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewogCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBBVTEwMDBfR1BJT18wIC4uLiBBVTEwMDBfR1BJT18zMToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJT18wKSArIDA7Ci0JY2FzZSBBVTEyMDBfR1BJT18yMDAgLi4uIEFVMTIwMF9HUElPXzIwMjoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTEyMDBfR1BJT18yMDApICsgMDsKLQljYXNlIEFVMTIwMF9HUElPXzIwMzoKKwljYXNlIEFVMTIwMF9HUElPMF9JTlQgLi4uIEFVMTIwMF9HUElPMzFfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPMF9JTlQpICsgMDsKKwljYXNlIEFVMTIwMF9HUElPMjAwX0lOVCAuLi4gQVUxMjAwX0dQSU8yMDJfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPMjAwX0lOVCkgKyAwOworCWNhc2UgQVUxMjAwX0dQSU8yMDNfSU5UOgogCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgMzsKLQljYXNlIEFVMTIwMF9HUElPXzIwNCAuLi4gQVUxMjAwX0dQSU9fMjA4XzIxNToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTEyMDBfR1BJT18yMDQpICsgNDsKKwljYXNlIEFVMTIwMF9HUElPMjA0X0lOVCAuLi4gQVUxMjAwX0dQSU8yMDhfMjE1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTEyMDBfR1BJTzIwNF9JTlQpICsgNDsKIAl9CiAKIAlyZXR1cm4gLUVOWElPOwogfQotI2VuZGlmCiAKIC8qCiAgKiBHUElPMSBibG9jayBtYWNyb3MgZm9yIGNvbW1vbiBsaW51eCBncGlvIGZ1bmN0aW9ucy4KQEAgLTI0NiwxOSArMjM2LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JcmV0dXJuIGF1MTAwMF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCXJldHVybiBhdTExMDBfZ3BpbzFfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKLQlyZXR1cm4gYXUxNTAwX2dwaW8xX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JcmV0dXJuIGF1MTU1MF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKQotCXJldHVybiBhdTEyMDBfZ3BpbzFfdG9faXJxKGdwaW8pOwotI2Vsc2UKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlyZXR1cm4gYXUxMDAwX2dwaW8xX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwkJcmV0dXJuIGF1MTEwMF9ncGlvMV90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCXJldHVybiBhdTE1MDBfZ3BpbzFfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlyZXR1cm4gYXUxNTUwX2dwaW8xX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJcmV0dXJuIGF1MTIwMF9ncGlvMV90b19pcnEoZ3Bpbyk7CisJfQogCXJldHVybiAtRU5YSU87Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTMxNiwxOSArMzA2LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ3BpbzJfdG9faXJxKGludCBncGlvKQogewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JcmV0dXJuIGF1MTAwMF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCXJldHVybiBhdTExMDBfZ3BpbzJfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKLQlyZXR1cm4gYXUxNTAwX2dwaW8yX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JcmV0dXJuIGF1MTU1MF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKQotCXJldHVybiBhdTEyMDBfZ3BpbzJfdG9faXJxKGdwaW8pOwotI2Vsc2UKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlyZXR1cm4gYXUxMDAwX2dwaW8yX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwkJcmV0dXJuIGF1MTEwMF9ncGlvMl90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCXJldHVybiBhdTE1MDBfZ3BpbzJfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlyZXR1cm4gYXUxNTUwX2dwaW8yX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJcmV0dXJuIGF1MTIwMF9ncGlvMl90b19pcnEoZ3Bpbyk7CisJfQogCXJldHVybiAtRU5YSU87Ci0jZW5kaWYKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zODQsMTAgKzM3NCwxMyBAQAogCiAJZ3BpbzIgLT0gQUxDSEVNWV9HUElPMl9CQVNFOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKIAkvKiBBdTExMDAvQXUxNTAwIGhhdmUgR1BJTzIwOC0yMTUgZW5hYmxlIGJpdHMgYXQgMC4uNyAqLwotCWdwaW8yIC09IDg7Ci0jZW5kaWYKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlncGlvMiAtPSA4OworCX0KKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlfX2FsY2hlbXlfZ3BpbzJfbW9kX2ludChncGlvMiwgMSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtNDA1LDEwICszOTgsMTMgQEAKIAogCWdwaW8yIC09IEFMQ0hFTVlfR1BJTzJfQkFTRTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCiAJLyogQXUxMTAwL0F1MTUwMCBoYXZlIEdQSU8yMDgtMjE1IGVuYWJsZSBiaXRzIGF0IDAuLjcgKi8KLQlncGlvMiAtPSA4OwotI2VuZGlmCisJc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJZ3BpbzIgLT0gODsKKwl9CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJX19hbGNoZW15X2dwaW8yX21vZF9pbnQoZ3BpbzIsIDApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTQ5NCwxOSArNDkwLDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCXJldHVybiBhdTEwMDBfaXJxX3RvX2dwaW8oaXJxKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JcmV0dXJuIGF1MTEwMF9pcnFfdG9fZ3BpbyhpcnEpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKLQlyZXR1cm4gYXUxNTAwX2lycV90b19ncGlvKGlycSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCXJldHVybiBhdTE1NTBfaXJxX3RvX2dwaW8oaXJxKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JcmV0dXJuIGF1MTIwMF9pcnFfdG9fZ3BpbyhpcnEpOwotI2Vsc2UKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlyZXR1cm4gYXUxMDAwX2lycV90b19ncGlvKGlycSk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJCXJldHVybiBhdTExMDBfaXJxX3RvX2dwaW8oaXJxKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJcmV0dXJuIGF1MTUwMF9pcnFfdG9fZ3BpbyhpcnEpOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlyZXR1cm4gYXUxNTUwX2lycV90b19ncGlvKGlycSk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEyMDA6CisJCXJldHVybiBhdTEyMDBfaXJxX3RvX2dwaW8oaXJxKTsKKwl9CiAJcmV0dXJuIC1FTlhJTzsKLSNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCmluZGV4IGY5YjdkNDEuLmMzZjYwY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FMQ0hFTVlfR1BJT19IXwogI2RlZmluZSBfQUxDSEVNWV9HUElPX0hfCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BTENIRU1ZX0dQSU9fQVUxMDAwKQorI2lmIGRlZmluZWQoQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDApCiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2lvcmVtYXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9pb3JlbWFwLmgKaW5kZXggMzY0Y2VhMi4uNzVhOTRhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2lvcmVtYXAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvaW9yZW1hcC5oCkBAIC0xMSw3ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaWZkZWYgQ09ORklHXzY0QklUX1BIWVNfQUREUgorI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfUENJKQogZXh0ZXJuIHBoeXNfdCBfX2ZpeHVwX2JpZ3BoeXNfYWRkcihwaHlzX3QsIHBoeXNfdCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBwaHlzX3QgX19maXh1cF9iaWdwaHlzX2FkZHIocGh5c190IHBoeXNfYWRkciwgcGh5c190IHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvcHJvbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL3Byb20uaAppbmRleCBlMzg3MTU1Li40YzBlMDljIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvcHJvbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9wcm9tLmgKQEAgLTYsNyArNiw2IEBACiBleHRlcm4gY2hhciAqKnByb21fZW52cDsKIAogZXh0ZXJuIHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7Ci1leHRlcm4gY2hhciAqcHJvbV9nZXRjbWRsaW5lKHZvaWQpOwogZXh0ZXJuIGNoYXIgKnByb21fZ2V0ZW52KGNoYXIgKmVudm5hbWUpOwogZXh0ZXJuIGludCBwcm9tX2dldF9ldGhlcm5ldF9hZGRyKGNoYXIgKmV0aGVybmV0X2FkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X3JlZ3MuaAppbmRleCBlZDRjY2VjLi44NWZkMjc1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9yZWdzLmgKQEAgLTc3MCw0ICs3NzAsMyBAQAogI2RlZmluZSBETUlQU1BMTENGR19OMl9NQVNLCQkoMHg3IDw8IERNSVBTUExMQ0ZHX04yX1NISUZUKQogCiAjZW5kaWYgLyogQkNNNjNYWF9SRUdTX0hfICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IDQyNWU3MDguLmJiZjA1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtNTgsNiArNTgsOSBAQAogI2RlZmluZSBjcHVfaGFzX3ZpbnQJCTAKICNkZWZpbmUgY3B1X2hhc192ZWljCQkwCiAjZGVmaW5lIGNwdV9od3JlbmFfaW1wbF9iaXRzCTB4YzAwMDAwMDAKKworI2RlZmluZSBrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSAoY3B1X2RhdGFbMF0uY3B1dHlwZSA9PSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTKQorCiAjZGVmaW5lIEFSQ0hfSEFTX1JFQURfQ1VSUkVOVF9USU1FUiAxCiAjZGVmaW5lIEFSQ0hfSEFTX0lSUV9QRVJfQ1BVCTEKICNkZWZpbmUgQVJDSF9IQVNfU1BJTkxPQ0tfUFJFRkVUQ0ggMQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2Jjc3IuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9iY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4ZDJkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9iY3NyLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBiY3NyLmggLS0gRGIxeHh4L1BiMXh4eCBEZXZib2FyZCBDUExEIHJlZ2lzdGVycyAoIkJDU1IiKSBhYnN0cmFjdGlvbi4KKyAqCisgKiBBbGwgQWxjaGVteSBkZXZlbG9wbWVudCBib2FyZHMgKGV4Y2VwdCwgb2YgY291cnNlLCB0aGUgd2VpcmQgUEIxMDAwKQorICogaGF2ZSBhIGZldyByZWdpc3RlcnMgaW4gYSBDUExEIHdpdGggc3RhbmRhcmRpc2VkIGxheW91dDsgdGhleSBtb3N0bHkKKyAqIG9ubHkgZGlmZmVyIGluIGJhc2UgYWRkcmVzcyBhbmQgYml0IG1lYW5pbmdzIGluIHRoZSBSRVNFVFMgYW5kIEJPQVJECisgKiByZWdpc3RlcnMuCisgKgorICogQWxsIGRhdGEgdGFrZW4gZnJvbSB0aGUgb2ZmaWNpYWwgQU1EIGJvYXJkIGRvY3VtZW50YXRpb24gc2hlZXRzLgorICovCisKKyNpZm5kZWYgX0RCMVhYWF9CQ1NSX0hfCisjZGVmaW5lIF9EQjFYWFhfQkNTUl9IXworCisKKy8qIEJDU1IgYmFzZSBhZGRyZXNzZXMgb24gdmFyaW91cyBib2FyZHMuIEJDU1IgYmFzZSAyIHJlZmVycyB0byB0aGUKKyAqIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IEhFWExFRFMgcmVnaXN0ZXIsIHdoaWNoIGlzIHVzdWFsbHkKKyAqIGEgdmFyaWFibGUgb2Zmc2V0IGZyb20gdGhlIFdIT0FNSSByZWdpc3Rlci4KKyAqLworCisvKiBEQjEwMDAsIERCMTEwMCwgREIxNTAwLCBQQjExMDAsIFBCMTUwMCAqLworI2RlZmluZSBEQjEwMDBfQkNTUl9QSFlTX0FERFIJMHgwRTAwMDAwMAorI2RlZmluZSBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTCTB4MDEwMDAwMDAKKworI2RlZmluZSBEQjE1NTBfQkNTUl9QSFlTX0FERFIJMHgwRjAwMDAwMAorI2RlZmluZSBEQjE1NTBfQkNTUl9IRVhMRURfT0ZTCTB4MDA0MDAwMDAKKworI2RlZmluZSBQQjE1NTBfQkNTUl9QSFlTX0FERFIJMHgwRjAwMDAwMAorI2RlZmluZSBQQjE1NTBfQkNTUl9IRVhMRURfT0ZTCTB4MDA4MDAwMDAKKworI2RlZmluZSBEQjEyMDBfQkNTUl9QSFlTX0FERFIJMHgxOTgwMDAwMAorI2RlZmluZSBEQjEyMDBfQkNTUl9IRVhMRURfT0ZTCTB4MDA0MDAwMDAKKworI2RlZmluZSBQQjEyMDBfQkNTUl9QSFlTX0FERFIJMHgwRDgwMDAwMAorI2RlZmluZSBQQjEyMDBfQkNTUl9IRVhMRURfT0ZTCTB4MDA0MDAwMDAKKworCitlbnVtIGJjc3JfaWQgeworCS8qIEJDU1IgYmFzZSAxICovCisJQkNTUl9XSE9BTUkJPSAwLAorCUJDU1JfU1RBVFVTLAorCUJDU1JfU1dJVENIRVMsCisJQkNTUl9SRVNFVFMsCisJQkNTUl9QQ01DSUEsCisJQkNTUl9CT0FSRCwKKwlCQ1NSX0xFRFMsCisJQkNTUl9TWVNURU0sCisJLyogQXUxMjAwLzEzMDAgYmFzZWQgYm9hcmRzICovCisJQkNTUl9JTlRDTFIsCisJQkNTUl9JTlRTRVQsCisJQkNTUl9NQVNLQ0xSLAorCUJDU1JfTUFTS1NFVCwKKwlCQ1NSX1NJR1NUQVQsCisJQkNTUl9JTlRTVEFULAorCisJLyogQkNTUiBiYXNlIDIgKi8KKwlCQ1NSX0hFWExFRFMsCisJQkNTUl9SU1ZEMSwKKwlCQ1NSX0hFWENMRUFSLAorCisJQkNTUl9DTlQsCit9OworCisvKiByZWdpc3RlciBvZmZzZXRzLCB2YWxpZCBmb3IgYWxsIERiMXh4eC9QYjF4eHggYm9hcmRzICovCisjZGVmaW5lIEJDU1JfUkVHX1dIT0FNSQkJMHgwMAorI2RlZmluZSBCQ1NSX1JFR19TVEFUVVMJCTB4MDQKKyNkZWZpbmUgQkNTUl9SRUdfU1dJVENIRVMJMHgwOAorI2RlZmluZSBCQ1NSX1JFR19SRVNFVFMJCTB4MGMKKyNkZWZpbmUgQkNTUl9SRUdfUENNQ0lBCQkweDEwCisjZGVmaW5lIEJDU1JfUkVHX0JPQVJECQkweDE0CisjZGVmaW5lIEJDU1JfUkVHX0xFRFMJCTB4MTgKKyNkZWZpbmUgQkNTUl9SRUdfU1lTVEVNCQkweDFjCisvKiBBdTEyMDAvQXUxMzAwIGJhc2VkIGJvYXJkczogQ1BMRCBJUlEgbXV4ZXIgKi8KKyNkZWZpbmUgQkNTUl9SRUdfSU5UQ0xSCQkweDIwCisjZGVmaW5lIEJDU1JfUkVHX0lOVFNFVAkJMHgyNAorI2RlZmluZSBCQ1NSX1JFR19NQVNLQ0xSCTB4MjgKKyNkZWZpbmUgQkNTUl9SRUdfTUFTS1NFVAkweDJjCisjZGVmaW5lIEJDU1JfUkVHX1NJR1NUQVQJMHgzMAorI2RlZmluZSBCQ1NSX1JFR19JTlRTVEFUCTB4MzQKKworLyogaGV4bGVkIGNvbnRyb2wsIG9mZnNldCBmcm9tIEJDU1IgYmFzZSAyICovCisjZGVmaW5lIEJDU1JfUkVHX0hFWExFRFMJMHgwMAorI2RlZmluZSBCQ1NSX1JFR19IRVhDTEVBUgkweDA4CisKKy8qCisgKiBSZWdpc3RlciBCaXRzIGFuZCBQaWVjZXMuCisgKi8KKyNkZWZpbmUgQkNTUl9XSE9BTUlfRENJRCh4KQkJKCh4KSAmIDB4ZikKKyNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRCh4KQkJKCgoeCkgPj4gNCkgJiAweGYpCisjZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJEKHgpCQkoKCh4KSA+PiA4KSAmIDB4ZikKKworLyogcmVnaXN0ZXIgIldIT0FNSSIgYml0cyAxMTo4IGlkZW50aWZ5IHRoZSBib2FyZCAqLworZW51bSBiY3NyX3dob2FtaV9ib2FyZHMgeworCUJDU1JfV0hPQU1JX1BCMTUwMCA9IDEsCisJQkNTUl9XSE9BTUlfUEIxNTAwUjIsCisJQkNTUl9XSE9BTUlfUEIxMTAwLAorCUJDU1JfV0hPQU1JX0RCMTAwMCwKKwlCQ1NSX1dIT0FNSV9EQjExMDAsCisJQkNTUl9XSE9BTUlfREIxNTAwLAorCUJDU1JfV0hPQU1JX0RCMTU1MCwKKwlCQ1NSX1dIT0FNSV9QQjE1NTBfRERSLAorCUJDU1JfV0hPQU1JX1BCMTU1MCA9IEJDU1JfV0hPQU1JX1BCMTU1MF9ERFIsCisJQkNTUl9XSE9BTUlfUEIxNTUwX1NEUiwKKwlCQ1NSX1dIT0FNSV9QQjEyMDBfRERSMSwKKwlCQ1NSX1dIT0FNSV9QQjEyMDAgPSBCQ1NSX1dIT0FNSV9QQjEyMDBfRERSMSwKKwlCQ1NSX1dIT0FNSV9QQjEyMDBfRERSMiwKKwlCQ1NSX1dIT0FNSV9EQjEyMDAsCit9OworCisvKiBTVEFUVVMgcmVnLiAgVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgdGhleSdyZSB2YWxpZCBvbiBhbGwgYm9hcmRzLgorICogUEIxMjAwID0gREIxMjAwLgorICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMFZTCQkweDAwMDMKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEMxVlMJCTB4MDAwQworI2RlZmluZSBCQ1NSX1NUQVRVU19QQzBGSQkJMHgwMDEwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMUZJCQkweDAwMjAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEIxNTUwX1NXQVBCT09UCTB4MDA0MAorI2RlZmluZSBCQ1NSX1NUQVRVU19TUkFNV0lEVEgJCTB4MDA4MAorI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSEJVU1kJCTB4MDEwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19ST01CVVNZCQkweDA0MDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfU0QwV1AJCTB4MDQwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfU0QxV1AJCTB4MDgwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19VU0JPVEdJRAkJMHgwODAwCS8qIFBCL0RCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19EQjEwMDBfU1dBUEJPT1QJMHgyMDAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTIwMF9TV0FQQk9PVAkweDAwNDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0lERUNCTElECQkweDAyMDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTIwMF9VMFJYRAkweDEwMDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTIwMF9VMVJYRAkweDIwMDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIREVOCQkweEMwMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxNTUwX1UwUlhECTB4MTAwMAkvKiBEQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxNTUwX1UzUlhECTB4MjAwMAkvKiBEQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEIxNTUwX1UwUlhECTB4MTAwMAkvKiBQQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEIxNTUwX1UxUlhECTB4MjAwMAkvKiBQQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEIxNTUwX1UzUlhECTB4ODAwMAkvKiBQQjE1NTAgKi8KKworCisvKiBEQi9QQjEwMDAsMTEwMCwxNTAwLDE1NTAgKi8KKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMAkJMHgwMDAxCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTEJCTB4MDAwMgorI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJCTB4MDAwNAorI2RlZmluZSBCQ1NSX1JFU0VUU19GSVJfU0VMCQkweDIwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0sJMHhDMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9GVUxMCTB4MDAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19QQjE1NTBfV1NDRlNNCTB4MjAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGCTB4NDAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMl8zCTB4ODAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMV8zCTB4QzAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19ETUFSRVEJCTB4ODAwMAkvKiBQQjE1NTAgKi8KKworI2RlZmluZSBCQ1NSX0JPQVJEX1BDSU02NkVOCQkweDAwMDEKKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDBQV1IJCTB4MDA0MAorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMVBXUgkJMHgwMDgwCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJTTMzCQkweDAxMDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lFWFRBUkIJCTB4MDIwMAorI2RlZmluZSBCQ1NSX0JPQVJEX0dQSU8yMDBSU1QJCTB4MDQwMAorI2RlZmluZSBCQ1NSX0JPQVJEX1BDSUNMS09VVAkJMHgwODAwCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJQ0ZHCQkweDEwMDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9TUElTRUwJCTB4NDAwMAkvKiBQQi9EQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDBXUAkJMHg0MDAwCS8qIERCMTEwMCAqLworI2RlZmluZSBCQ1NSX0JPQVJEX1NEMVdQCQkweDgwMDAJLyogREIxMTAwICovCisKKworLyogREIvUEIxMjAwICovCisjZGVmaW5lIEJDU1JfUkVTRVRTX0VUSAkJCTB4MDAwMQorI2RlZmluZSBCQ1NSX1JFU0VUU19DQU1FUkEJCTB4MDAwMgorI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJCTB4MDAwNAorI2RlZmluZSBCQ1NSX1JFU0VUU19JREUJCQkweDAwMDgKKyNkZWZpbmUgQkNTUl9SRVNFVFNfVFYJCQkweDAwMTAJLyogREIxMjAwICovCisvKiBOb3QgcmVzZXRzIGJ1dCBpbiB0aGUgc2FtZSByZWdpc3RlciAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19QV01SMU1VWAkJMHgwODAwCS8qIERCMTIwMCAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19QQjEyMDBfV1NDRlNNCTB4MDgwMAkvKiBQQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9SRVNFVFNfUFNDME1VWAkJMHgxMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BTQzFNVVgJCTB4MjAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19TUElTRUwJCTB4NDAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19TRDFNVVgJCTB4ODAwMAkvKiBQQjEyMDAgKi8KKworI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZFRQkJMHgwMDAxCisjZGVmaW5lIEJDU1JfQk9BUkRfTENEVkRECQkweDAwMDIKKyNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RCTAkJMHgwMDA0CisjZGVmaW5lIEJDU1JfQk9BUkRfQ0FNU05BUAkJMHgwMDEwCisjZGVmaW5lIEJDU1JfQk9BUkRfQ0FNUFdSCQkweDAwMjAKKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDBQV1IJCTB4MDA0MAorCisKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVAJCTB4MDBGRgorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8xCQkweDAwODAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkJMHgwMDQwCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJCTB4MDAyMAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF80CQkweDAwMTAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkJMHgwMDA4CisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJCTB4MDAwNAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF83CQkweDAwMDIKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkJMHgwMDAxCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZCQkweDBGMDAKKworCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkJMHgwMDAzCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkJMHgwMDBDCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCQkweDAwMTAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCQkweDAwODAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCQkweDAzMDAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCQkweDBDMDAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JCTB4MTAwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJCTB4ODAwMAorCisKKyNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCQkweDAwMDMKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCQkweDAxMDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCQkweDAyMDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCQkweDA0MDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCQkweDA4MDAKKworCisjZGVmaW5lIEJDU1JfU1lTVEVNX1JFU0VUCQkweDgwMDAJLyogY2xlYXIgdG8gcmVzZXQgKi8KKyNkZWZpbmUgQkNTUl9TWVNURU1fUFdST0ZGCQkweDQwMDAJLyogc2V0IHRvIHBvd2VyIG9mZiAqLworI2RlZmluZSBCQ1NSX1NZU1RFTV9WRERJCQkweDAwMUYJLyogUEIxeHh4IGJvYXJkcyAqLworCisKKworCisvKiBpbml0aWFsaXplIEJDU1IgZm9yIGEgYm9hcmQuIFByb3ZpZGUgdGhlIFBIWVNJQ0FMIGFkZHJlc3NlcyBvZiBib3RoCisgKiBCQ1NSIHNwYWNlcy4KKyAqLwordm9pZCBfX2luaXQgYmNzcl9pbml0KHVuc2lnbmVkIGxvbmcgYmNzcjFfcGh5cywgdW5zaWduZWQgbG9uZyBiY3NyMl9waHlzKTsKKworLyogcmVhZCBhIGJvYXJkIHJlZ2lzdGVyICovCit1bnNpZ25lZCBzaG9ydCBiY3NyX3JlYWQoZW51bSBiY3NyX2lkIHJlZyk7CisKKy8qIHdyaXRlIHRvIGEgYm9hcmQgcmVnaXN0ZXIgKi8KK3ZvaWQgYmNzcl93cml0ZShlbnVtIGJjc3JfaWQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpOworCisvKiBtb2RpZnkgYSByZWdpc3Rlci4gY2xlYXIgYml0cyBzZXQgaW4gJ2NscicsIHNldCBiaXRzIHNldCBpbiAnc2V0JyAqLwordm9pZCBiY3NyX21vZChlbnVtIGJjc3JfaWQgcmVnLCB1bnNpZ25lZCBzaG9ydCBjbHIsIHVuc2lnbmVkIHNob3J0IHNldCk7CisKKy8qIGluc3RhbGwgQ1BMRCBJUlEgZGVtdXhlciAoREIxMjAwL1BCMTIwMCkgKi8KK3ZvaWQgX19pbml0IGJjc3JfaW5pdF9pcnEoaW50IGNzY19zdGFydCwgaW50IGNzY19lbmQsIGludCBob29rX2lycSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oCmluZGV4IDI3ZjI2MTAuLjM0MDQyNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxMjAwLmgKQEAgLTI1LDEzMyArMjUsOSBAQAogI2RlZmluZSBfX0FTTV9EQjEyMDBfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KIAotI2RlZmluZSBEQkRNQV9BQzk3X1RYX0NIQU4JRFNDUl9DTUQwX1BTQzFfVFgKLSNkZWZpbmUgREJETUFfQUM5N19SWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1JYCi0jZGVmaW5lIERCRE1BX0kyU19UWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1RYCi0jZGVmaW5lIERCRE1BX0kyU19SWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1JYCi0KLS8qCi0gKiBTUEkgYW5kIFNNQiBhcmUgbXV4ZWQgb24gdGhlIERCQXUxMjAwIGJvYXJkLgotICogUmVmZXIgdG8gYm9hcmQgZG9jdW1lbnRhdGlvbi4KLSAqLwotI2RlZmluZSBTUElfUFNDX0JBU0UJCVBTQzBfQkFTRV9BRERSCi0jZGVmaW5lIFNNQlVTX1BTQ19CQVNFCQlQU0MwX0JBU0VfQUREUgotLyoKLSAqIEFDJzk3IGFuZCBJMlMgYXJlIG11eGVkIG9uIHRoZSBEQkF1MTIwMCBib2FyZC4KLSAqIFJlZmVyIHRvIGJvYXJkIGRvY3VtZW50YXRpb24uCi0gKi8KLSNkZWZpbmUgQUM5N19QU0NfQkFTRQkJUFNDMV9CQVNFX0FERFIKLSNkZWZpbmUgSTJTX1BTQ19CQVNFCQlQU0MxX0JBU0VfQUREUgotCi0jZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAJMHhCOTgwMDAwMAotCi10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdAotewotCS8qMDAqLwl1MTYgd2hvYW1pOwotCQl1MTYgcmVzZXJ2ZWQwOwotCS8qMDQqLwl1MTYgc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxOwotCS8qMDgqLwl1MTYgc3dpdGNoZXM7Ci0JCXUxNiByZXNlcnZlZDI7Ci0JLyowQyovCXUxNiByZXNldHM7Ci0JCXUxNiByZXNlcnZlZDM7Ci0KLQkvKjEwKi8JdTE2IHBjbWNpYTsKLQkJdTE2IHJlc2VydmVkNDsKLQkvKjE0Ki8JdTE2IGJvYXJkOwotCQl1MTYgcmVzZXJ2ZWQ1OwotCS8qMTgqLwl1MTYgZGlza19sZWRzOwotCQl1MTYgcmVzZXJ2ZWQ2OwotCS8qMUMqLwl1MTYgc3lzdGVtOwotCQl1MTYgcmVzZXJ2ZWQ3OwotCi0JLyoyMCovCXUxNiBpbnRjbHI7Ci0JCXUxNiByZXNlcnZlZDg7Ci0JLyoyNCovCXUxNiBpbnRzZXQ7Ci0JCXUxNiByZXNlcnZlZDk7Ci0JLyoyOCovCXUxNiBpbnRjbHJfbWFzazsKLQkJdTE2IHJlc2VydmVkMTA7Ci0JLyoyQyovCXUxNiBpbnRzZXRfbWFzazsKLQkJdTE2IHJlc2VydmVkMTE7Ci0KLQkvKjMwKi8JdTE2IHNpZ19zdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDEyOwotCS8qMzQqLwl1MTYgaW50X3N0YXR1czsKLQkJdTE2IHJlc2VydmVkMTM7Ci0JLyozOCovCXUxNiByZXNlcnZlZDE0OwotCQl1MTYgcmVzZXJ2ZWQxNTsKLQkvKjNDKi8JdTE2IHJlc2VydmVkMTY7Ci0JCXUxNiByZXNlcnZlZDE3OwotCi19IEJDU1I7Ci0KLXN0YXRpYyBCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOwotCi0vKgotICogUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zIGZvciB0aGUgQkNTUnMKLSAqLwotI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lECTB4MDAwRgotI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExECTB4MDBGMAotI2RlZmluZSBCQ1NSX1dIT0FNSV9CT0FSRAkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUEwVlMJMHgwMDAzCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTFWUwkweDAwMEMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU1dBUEJPT1QJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkweDAxMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfSURFQ0JMSUQJMHgwMjAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NEMFdQCTB4MDQwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMFJYRAkweDEwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTFSWEQJMHgyMDAwCi0KLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19PQ1RBTAkweDAwRkYKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkweDAwODAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkweDAwNDAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkweDAwMjAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkweDAwMTAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkweDAwMDgKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkweDAwMDQKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkweDAwMDIKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkweDAwMDEKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9SRVNFVFNfRVRICQkweDAwMDEKLSNkZWZpbmUgQkNTUl9SRVNFVFNfQ0FNRVJBCTB4MDAwMgotI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX0lERQkJMHgwMDA4Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX1RWCQkweDAwMTAKLS8qIE5vdCByZXNldHMgYnV0IGluIHRoZSBzYW1lIHJlZ2lzdGVyICovCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BXTVIxTVVYCTB4MDgwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19QQ1MwTVVYCTB4MTAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19QQ1MxTVVYCTB4MjAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19TUElTRUwJMHg0MDAwCi0KLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCTB4MDAwMwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJMHgwMDBDCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCTB4MDAxMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJMHgwMDgwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkweDAzMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCTB4MEMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkweDEwMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEVkVFCTB4MDAwMQotI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZERAkweDAwMDIKLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RCTAkweDAwMDQKLSNkZWZpbmUgQkNTUl9CT0FSRF9DQU1TTkFQCTB4MDAxMAotI2RlZmluZSBCQ1NSX0JPQVJEX0NBTVBXUgkweDAwMjAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDBQV1IJMHgwMDQwCi0KLSNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCTB4MDAwMwotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMAkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQxCQkweDAyMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCTB4MDQwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMwkJMHgwODAwCi0KLSNkZWZpbmUgQkNTUl9TWVNURU1fUE9XRVJPRkYJMHg0MDAwCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1JFU0VUCTB4ODAwMAotCiAvKiBCaXQgcG9zaXRpb25zIGZvciB0aGUgZGlmZmVyZW50IGludGVycnVwdCBzb3VyY2VzICovCiAjZGVmaW5lIEJDU1JfSU5UX0lERQkJMHgwMDAxCiAjZGVmaW5lIEJDU1JfSU5UX0VUSAkJMHgwMDAyCkBAIC0xNjgsMTcgKzQ0LDE1IEBACiAjZGVmaW5lIEJDU1JfSU5UX1NEMElOU0VSVAkweDEwMDAKICNkZWZpbmUgQkNTUl9JTlRfU0QwRUpFQ1QJMHgyMDAwCiAKLSNkZWZpbmUgU01DOTFDMTExX1BIWVNfQUREUgkweDE5MDAwMzAwCi0jZGVmaW5lIFNNQzkxQzExMV9JTlQJCURCMTIwMF9FVEhfSU5UCi0KICNkZWZpbmUgSURFX1BIWVNfQUREUgkJMHgxODgwMDAwMAogI2RlZmluZSBJREVfUkVHX1NISUZUCQk1Ci0jZGVmaW5lIElERV9QSFlTX0xFTgkJKDE2IDw8IElERV9SRUdfU0hJRlQpCi0jZGVmaW5lIElERV9JTlQgCQlEQjEyMDBfSURFX0lOVAogI2RlZmluZSBJREVfRERNQV9SRVEJCURTQ1JfQ01EMF9ETUFfUkVRMQogI2RlZmluZSBJREVfUlFTSVpFCQkxMjgKIAotI2RlZmluZSBOQU5EX1BIWVNfQUREUgkJMHgyMDAwMDAwMAorI2RlZmluZSBEQjEyMDBfSURFX1BIWVNfQUREUglJREVfUEhZU19BRERSCisjZGVmaW5lIERCMTIwMF9JREVfUEhZU19MRU4JKDE2IDw8IElERV9SRUdfU0hJRlQpCisjZGVmaW5lIERCMTIwMF9FVEhfUEhZU19BRERSCTB4MTkwMDAzMDAKKyNkZWZpbmUgREIxMjAwX05BTkRfUEhZU19BRERSCTB4MjAwMDAwMDAKIAogLyoKICAqIEV4dGVybmFsIEludGVycnVwdHMgZm9yIERCQXUxMjAwIGFzIG9mIDgvNi8yMDA0LgpAQCAtMTg4LDcgKzYyLDcgQEAKICAqICAgRXhhbXBsZTogSURFIGJpcyBwb3MgaXMgID0gNjQgLSA2NAogICogICAgICAgICAgICBFVEggYml0IHBvcyBpcyAgPSA2NSAtIDY0CiAgKi8KLWVudW0gZXh0ZXJuYWxfcGIxMjAwX2ludHMgeworZW51bSBleHRlcm5hbF9kYjEyMDBfaW50cyB7CiAJREIxMjAwX0lOVF9CRUdJTgk9IEFVMTAwMF9NQVhfSU5UUiArIDEsCiAKIAlEQjEyMDBfSURFX0lOVAkJPSBEQjEyMDBfSU5UX0JFR0lOLApAQCAtMjA5LDIyICs4Myw0IEBACiAJREIxMjAwX0lOVF9FTkQJCT0gREIxMjAwX0lOVF9CRUdJTiArIDE1LAogfTsKIAotCi0vKgotICogREJBdTEyMDAgc3BlY2lmaWMgUENNQ0lBIGRlZmluZXMgZm9yIGRyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwotICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMQotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQLCBTTE9UKSBcCi0JKCgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpIDw8ICgoU0xPVCkgKiA4KSkKLQotI2RlZmluZSBCT0FSRF9QQzBfSU5UCURCMTIwMF9QQzBfSU5UCi0jZGVmaW5lIEJPQVJEX1BDMV9JTlQJREIxMjAwX1BDMV9JTlQKLSNkZWZpbmUgQk9BUkRfQ0FSRF9JTlNFUlRFRChTT0NLRVQpIGJjc3ItPnNpZ19zdGF0dXMgJiAoMSA8PCAoOCArICgyICogU09DS0VUKSkpCi0KLS8qIE5BTkQgY2hpcCBzZWxlY3QgKi8KLSNkZWZpbmUgTkFORF9DUyAxCi0KICNlbmRpZiAvKiBfX0FTTV9EQjEyMDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMXgwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMXgwMC5oCmluZGV4IDFhNTE1YjguLmE5MTlkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjF4MDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxeDAwLmgKQEAgLTQxLDExMSArNDEsMTEgQEAKICNkZWZpbmUgU01CVVNfUFNDX0JBU0UJCVBTQzJfQkFTRV9BRERSCiAjZGVmaW5lIEkyU19QU0NfQkFTRQkJUFNDM19CQVNFX0FERFIKIAotI2RlZmluZSBCQ1NSX0tTRUcxX0FERFIgCTB4QUYwMDAwMDAKICNkZWZpbmUgTkFORF9QSFlTX0FERFIJCTB4MjAwMDAwMDAKIAotI2Vsc2UKLSNkZWZpbmUgQkNTUl9LU0VHMV9BRERSIDB4QUUwMDAwMDAKICNlbmRpZgogCiAvKgotICogT3ZlcmxheSBkYXRhIHN0cnVjdHVyZSBvZiB0aGUgREJBdTF4MDAgYm9hcmQgcmVnaXN0ZXJzLgotICogUmVnaXN0ZXJzIGFyZSBsb2NhdGVkIGF0IHBoeXNpY2FsIDBFMDAwMHh4LCBLU0VHMSAweEFFMDAwMHh4LgotICovCi10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdAotewotCS8qMDAqLwl1bnNpZ25lZCBzaG9ydCB3aG9hbWk7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQwOwotCS8qMDQqLwl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQxOwotCS8qMDgqLwl1bnNpZ25lZCBzaG9ydCBzd2l0Y2hlczsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDI7Ci0JLyowQyovCXVuc2lnbmVkIHNob3J0IHJlc2V0czsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDM7Ci0JLyoxMCovCXVuc2lnbmVkIHNob3J0IHBjbWNpYTsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDQ7Ci0JLyoxNCovCXVuc2lnbmVkIHNob3J0IHNwZWNpZmljOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNTsKLQkvKjE4Ki8JdW5zaWduZWQgc2hvcnQgbGVkczsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDY7Ci0JLyoxQyovCXVuc2lnbmVkIHNob3J0IHN3cmVzZXQ7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ3OwotCi19IEJDU1I7Ci0KLQotLyoKLSAqIFJlZ2lzdGVyL21hc2sgYml0IGRlZmluaXRpb25zIGZvciB0aGUgQkNTUnMKLSAqLwotI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lECQkweDAwMEYKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRAkJMHgwMEYwCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJECQkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1NUQVRVU19QQzBWUwkJMHgwMDAzCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDMVZTCQkweDAwMEMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUEMwRkkJCTB4MDAxMAotI2RlZmluZSBCQ1NSX1NUQVRVU19QQzFGSQkJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1JPTUJVU1kJCTB4MDQwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkJMHgyMDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIREVOCQkweEMwMDAKLQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUAkJMHgwMEZGCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJCTB4MDA4MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8yCQkweDAwNDAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJCTB4MDAxMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF81CQkweDAwMDgKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJCTB4MDAwMgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF84CQkweDAwMDEKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTAJCTB4MDAwMQotI2RlZmluZSBCQ1NSX1JFU0VUU19QSFkxCQkweDAwMDIKLSNkZWZpbmUgQkNTUl9SRVNFVFNfREMJCQkweDAwMDQKLSNkZWZpbmUgQkNTUl9SRVNFVFNfRklSX1NFTAkJMHgyMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLCTB4QzAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfRlVMTAkweDAwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX09GRgkweDQwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFXzJfMwkweDgwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFXzFfMwkweEMwMDAKLQotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWUFAJCTB4MDAwMwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJCTB4MDAwQwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBEUlZFTgkJMHgwMDEwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFJTVAkJMHgwMDgwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkJMHgwMzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZDQwkJMHgwQzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMURSVkVOCQkweDEwMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCQkweDgwMDAKLQotI2RlZmluZSBCQ1NSX0JPQVJEX1BDSU02NkVOCQkweDAwMDEKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDBfUFdSCQkweDAwNDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDFfUFdSCQkweDAwODAKLSNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lNMzMJCTB4MDEwMAotI2RlZmluZSBCQ1NSX0JPQVJEX0dQSU8yMDBSU1QJCTB4MDQwMAotI2RlZmluZSBCQ1NSX0JPQVJEX1BDSUNGRwkJMHgxMDAwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QwX1dQCQkweDQwMDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDFfV1AJCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfTEVEU19ERUNJTUFMUwkJMHgwMDAzCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQxCQkJMHgwMjAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQyCQkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkJMHgwODAwCi0KLSNkZWZpbmUgQkNTUl9TV1JFU0VUX1JFU0VUCQkweDAwODAKLQotLyogUENNQ0lBIERCQXUxeDAwIHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAxCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFAsIFNMT1QpXAotCSgoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKSA8PCAoKFNMT1QpICogOCkpCi0KLS8qCiAgKiBOQU5EIGRlZmluZXMKICAqCiAgKiBUaW1pbmcgdmFsdWVzIGFzIGRlc2NyaWJlZCBpbiBkYXRhYm9vaywgKiBucyB2YWx1ZSBzdHJpcHBlZCBvZiB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggOTk0N2U1Ny4uMTYyMTBjZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBaaGFuZyBMZSA8cjBiZXJ0ekBnZW50b28ub3JnPgogICoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3ZzbS5oCmluZGV4IDYzMDViZWEuLjIxYzRlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl92c20uaApAQCAtMiw3ICsyLDcgQEAKICAqIHRoZSByZWFkL3dyaXRlIGludGVyZmFjZXMgZm9yIFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUoVlNNKQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICovCiAKICNpZm5kZWYJX0NTNTUzNl9WU01fSApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmgKaW5kZXggZWU4YmM4My4uMWNmN2IxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oCkBAIC0xLDEyICsxLDExIEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9NQUNIX0xPT05HU09OX0xPT05HU09OX0gKQEAgLTIzLDcgKzIyLDcgQEAKIGV4dGVybiB2b2lkIG1hY2hfcHJlcGFyZV9zaHV0ZG93bih2b2lkKTsKIAogLyogZW52aXJvbm1lbnQgYXJndW1lbnRzIGZyb20gYm9vdGxvYWRlciAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrLCBjcHVfY2xvY2tfZnJlcTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdV9jbG9ja19mcmVxOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtc2l6ZSwgaGlnaG1lbXNpemU7CiAKIC8qIGxvb25nc29uLXNwZWNpZmljIGNvbW1hbmQgbGluZSwgZW52IGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaAppbmRleCBhY2Y4MzU5Li40MzIxMzM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tYWNoaW5lLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCmluZGV4IGU5OTYwZjMuLjNiMjNlZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCmluZGV4IGExOTlhNGYuLmJjOTlkYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCkBAIC0xLDIzICsxLDEyIEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4IFpoYW5nIExlIDxyMGJlcnR6QGdlbnRvby5vcmc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CiAgKiBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICogdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEKLSAqIDAyMTM5LCBVU0EuCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9NQUNIX0xPT05HU09OX1BDSV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWE2MGYxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjExMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBBbGNoZW15IFNlbWkgUGIxMTAwIFJlZmVycmVuY2UgQm9hcmQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Ci0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICoKLSAqLwotI2lmbmRlZiBfX0FTTV9QQjExMDBfSAotI2RlZmluZSBfX0FTTV9QQjExMDBfSAotCi0jZGVmaW5lIFBCMTEwMF9JREVOVAkJMHhBRTAwMDAwMAotI2RlZmluZSBCT0FSRF9TVEFUVVNfUkVHCTB4QUUwMDAwMDQKLSMgIGRlZmluZSBQQjExMDBfUk9NX1NFTAkoMSA8PCAxNSkKLSMgIGRlZmluZSBQQjExMDBfUk9NX1NJWgkoMSA8PCAxNCkKLSMgIGRlZmluZSBQQjExMDBfU1dBUF9CT09UCSgxIDw8IDEzKQotIyAgZGVmaW5lIFBCMTEwMF9GTEFTSF9XUAkoMSA8PCAxMikKLSMgIGRlZmluZSBQQjExMDBfUk9NX0hfU1RTCSgxIDw8IDExKQotIyAgZGVmaW5lIFBCMTEwMF9ST01fTF9TVFMJKDEgPDwgMTApCi0jICBkZWZpbmUgUEIxMTAwX0ZMQVNIX0hfU1RTCSgxIDw8IDkpCi0jICBkZWZpbmUgUEIxMTAwX0ZMQVNIX0xfU1RTCSgxIDw8IDgpCi0jICBkZWZpbmUgUEIxMTAwX1NSQU1fU0laCSgxIDw8IDcpCi0jICBkZWZpbmUgUEIxMTAwX1RTQ19CVVNZCSgxIDw8IDYpCi0jICBkZWZpbmUgUEIxMTAwX1BDTUNJQV9WU19NQVNLICgzIDw8IDQpCi0jICBkZWZpbmUgUEIxMTAwX1JTMjMyX0NECSgxIDw8IDMpCi0jICBkZWZpbmUgUEIxMTAwX1JTMjMyX0NUUwkoMSA8PCAyKQotIyAgZGVmaW5lIFBCMTEwMF9SUzIzMl9EU1IJKDEgPDwgMSkKLSMgIGRlZmluZSBQQjExMDBfUlMyMzJfUkkJKDEgPDwgMCkKLQotI2RlZmluZSBQQjExMDBfSVJEQV9SUzIzMgkweEFFMDAwMDBDCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfRlVMTAkoMCA8PCAxNCkJLyogZnVsbCBwb3dlcgkJKi8KLSMgIGRlZmluZSBQQjExMDBfSVJEQV9TSFVURE9XTgkoMSA8PCAxNCkKLSMgIGRlZmluZSBQQjExMDBfSVJEQV9UVAkoMiA8PCAxNCkJLyogMi8zIHBvd2VyCQkqLwotIyAgZGVmaW5lIFBCMTEwMF9JUkRBX09UCSgzIDw8IDE0KQkvKiAxLzMgcG93ZXIJCSovCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfRklSCSgxIDw8IDEzKQotCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9SRUcJMHhBRTAwMDAxMAotIyAgZGVmaW5lIFBCMTEwMF9TRF9XUDFfUk8JKDEgPDwgMTUpCS8qIHJlYWQgb25seQkJKi8KLSMgIGRlZmluZSBQQjExMDBfU0RfV1AwX1JPCSgxIDw8IDE0KQkvKiByZWFkIG9ubHkJCSovCi0jICBkZWZpbmUgUEIxMTAwX1NEX1BXUjEJKDEgPDwgMTEpCS8qIGFwcGxpZXMgcG93ZXIgdG8gU0QxICovCi0jICBkZWZpbmUgUEIxMTAwX1NEX1BXUjAJKDEgPDwgMTApCS8qIGFwcGxpZXMgcG93ZXIgdG8gU0QwICovCi0jICBkZWZpbmUgUEIxMTAwX1NFTF9TRF9DT05OMQkoMSA8PCA5KQotIyAgZGVmaW5lIFBCMTEwMF9TRUxfU0RfQ09OTjAJKDEgPDwgOCkKLSMgIGRlZmluZSBQQ19ERUFTU0VSVF9SU1QJKDEgPDwgNykKLSMgIGRlZmluZSBQQ19EUlZfRU4JCSgxIDw8IDQpCi0KLSNkZWZpbmUgUEIxMTAwX0dfQ09OVFJPTAkweEFFMDAwMDE0CS8qIGdyYXBoaWNzIGNvbnRyb2wJKi8KLQotI2RlZmluZSBQQjExMDBfUlNUX1ZEREkgCTB4QUUwMDAwMUMKLSMgIGRlZmluZSBQQjExMDBfU09GVF9SRVNFVAkoMSA8PCAxNSkJLyogY2xlYXIgdG8gcmVzZXQgdGhlIGJvYXJkICovCi0jICBkZWZpbmUgUEIxMTAwX1ZERElfTUFTSwkweDFGCi0KLSNkZWZpbmUgUEIxMTAwX0xFRFMJCTB4QUUwMDAwMTgKLQotLyoKLSAqIDExOjggaXMgNCBkaXNjcmVldCBMRURzLiBDbGVhcmluZyBhIGJpdCBpbGx1bWluYXRlcyB0aGUgTEVELgotICogNzowICBpcyB0aGUgTEVEIERpc3BsYXkncyBkZWNpbWFsIHBvaW50cy4KLSAqLwotI2RlZmluZSBQQjExMDBfSEVYX0xFRAkJMHhBRTAwMDAxOAotCi0vKiBQQ01DSUEgUGIxMTAwIHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAwCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFApICgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpCi0KLSNlbmRpZiAvKiBfX0FTTV9QQjExMDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oCmluZGV4IGM4NjE4ZGYuLjk2MmViNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgX19BU01fUEIxMjAwX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmg+CiAKICNkZWZpbmUgREJETUFfQUM5N19UWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1RYCkBAIC00MywxMTMgKzQ0LDggQEAKICAqIFJlZmVyIHRvIGJvYXJkIGRvY3VtZW50YXRpb24uCiAgKi8KICNkZWZpbmUgQUM5N19QU0NfQkFTRSAgICAgICBQU0MxX0JBU0VfQUREUgotI2RlZmluZSBJMlNfUFNDX0JBU0UJCVBTQzFfQkFTRV9BRERSCisjZGVmaW5lIEkyU19QU0NfQkFTRQlQU0MxX0JBU0VfQUREUgogCi0jZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAweEFEODAwMDAwCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXUxNiB3aG9hbWk7Ci0JCXUxNiByZXNlcnZlZDA7Ci0JLyowNCovCXUxNiBzdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDE7Ci0JLyowOCovCXUxNiBzd2l0Y2hlczsKLQkJdTE2IHJlc2VydmVkMjsKLQkvKjBDKi8JdTE2IHJlc2V0czsKLQkJdTE2IHJlc2VydmVkMzsKLQotCS8qMTAqLwl1MTYgcGNtY2lhOwotCQl1MTYgcmVzZXJ2ZWQ0OwotCS8qMTQqLwl1MTYgYm9hcmQ7Ci0JCXUxNiByZXNlcnZlZDU7Ci0JLyoxOCovCXUxNiBkaXNrX2xlZHM7Ci0JCXUxNiByZXNlcnZlZDY7Ci0JLyoxQyovCXUxNiBzeXN0ZW07Ci0JCXUxNiByZXNlcnZlZDc7Ci0KLQkvKjIwKi8JdTE2IGludGNscjsKLQkJdTE2IHJlc2VydmVkODsKLQkvKjI0Ki8JdTE2IGludHNldDsKLQkJdTE2IHJlc2VydmVkOTsKLQkvKjI4Ki8JdTE2IGludGNscl9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMDsKLQkvKjJDKi8JdTE2IGludHNldF9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMTsKLQotCS8qMzAqLwl1MTYgc2lnX3N0YXR1czsKLQkJdTE2IHJlc2VydmVkMTI7Ci0JLyozNCovCXUxNiBpbnRfc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxMzsKLQkvKjM4Ki8JdTE2IHJlc2VydmVkMTQ7Ci0JCXUxNiByZXNlcnZlZDE1OwotCS8qM0MqLwl1MTYgcmVzZXJ2ZWQxNjsKLQkJdTE2IHJlc2VydmVkMTc7Ci0KLX0gQkNTUjsKLQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0KLS8qCi0gKiBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScwotICovCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJMHgwMDBGCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0NQTEQJMHgwMEYwCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJECTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBWUwkweDAwMDMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMVZTCTB4MDAwQwotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkweDAwNDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCTB4MDEwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19JREVDQkxJRAkweDAyMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU0QwV1AJMHgwNDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NEMVdQCTB4MDgwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMFJYRAkweDEwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTFSWEQJMHgyMDAwCi0KLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19PQ1RBTAkweDAwRkYKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkweDAwODAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkweDAwNDAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkweDAwMjAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkweDAwMTAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkweDAwMDgKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkweDAwMDQKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkweDAwMDIKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkweDAwMDEKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9SRVNFVFNfRVRICQkweDAwMDEKLSNkZWZpbmUgQkNTUl9SRVNFVFNfQ0FNRVJBCTB4MDAwMgotI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX0lERQkJMHgwMDA4Ci0vKiBub3QgcmVzZXRzIGJ1dCBpbiB0aGUgc2FtZSByZWdpc3RlciAqLwotI2RlZmluZSBCQ1NSX1JFU0VUU19XU0NGU00JMHgwODAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzBNVVgJMHgxMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzFNVVgJMHgyMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1NQSVNFTAkweDQwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfU0QxTVVYCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkweDAwMDMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVkNDCTB4MDAwQwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBEUlZFTgkweDAwMTAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCTB4MDA4MAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWUFAJMHgwMzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZDQwkweDBDMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JMHgxMDAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVJTVAkweDgwMDAKLQotI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZFRQkweDAwMDEKLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWREQJMHgwMDAyCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEQkwJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfQk9BUkRfQ0FNU05BUAkweDAwMTAKLSNkZWZpbmUgQkNTUl9CT0FSRF9DQU1QV1IJMHgwMDIwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QwUFdSCTB4MDA0MAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMVBXUgkweDAwODAKLQotI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJMHgwMEZGCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCTB4MDIwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkweDA4MDAKIAogI2RlZmluZSBCQ1NSX1NZU1RFTV9WRERJCTB4MDAxRgogI2RlZmluZSBCQ1NSX1NZU1RFTV9QT1dFUk9GRgkweDQwMDAKQEAgLTIzOSwyMCArMTM1LDYgQEAKIAlQQjEyMDBfSU5UX0VORAkJPSBQQjEyMDBfSU5UX0JFR0lOICsgMTUKIH07CiAKLS8qCi0gKiBQYjEyMDAgc3BlY2lmaWMgUENNQ0lBIGRlZmluZXMgZm9yIGRyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwotICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMQotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQLCBTTE9UKSBcCi0JKCgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpIDw8ICgoU0xPVCkgKiA4KSkKLQotI2RlZmluZSBCT0FSRF9QQzBfSU5UCVBCMTIwMF9QQzBfSU5UCi0jZGVmaW5lIEJPQVJEX1BDMV9JTlQJUEIxMjAwX1BDMV9JTlQKLSNkZWZpbmUgQk9BUkRfQ0FSRF9JTlNFUlRFRChTT0NLRVQpIGJjc3ItPnNpZ19zdGF0dXMgJiAoMSA8PCAoOCArICgyICogU09DS0VUKSkpCi0KIC8qIE5BTkQgY2hpcCBzZWxlY3QgKi8KICNkZWZpbmUgTkFORF9DUyAxCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1MDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1MDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1MWEyZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQWxjaGVteSBTZW1pIFBiMTUwMCBSZWZlcnJlbmNlIEJvYXJkCi0gKgotICogQ29weXJpZ2h0IDIwMDEsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqCi0gKi8KLSNpZm5kZWYgX19BU01fUEIxNTAwX0gKLSNkZWZpbmUgX19BU01fUEIxNTAwX0gKLQotI2RlZmluZSBJREVOVF9CT0FSRF9SRUcgCTB4QUUwMDAwMDAKLSNkZWZpbmUgQk9BUkRfU1RBVFVTX1JFRwkweEFFMDAwMDA0Ci0jZGVmaW5lIFBDSV9CT0FSRF9SRUcJCTB4QUUwMDAwMTAKLSNkZWZpbmUgUENNQ0lBX0JPQVJEX1JFRwkweEFFMDAwMDEwCi0jICBkZWZpbmUgUENfREVBU1NFUlRfUlNUCSAgICAgIDB4ODAKLSMgIGRlZmluZSBQQ19EUlZfRU4JCSAgICAgIDB4MTAKLSNkZWZpbmUgUEIxNTAwX0dfQ09OVFJPTAkweEFFMDAwMDE0Ci0jZGVmaW5lIFBCMTUwMF9SU1RfVkRESSAJMHhBRTAwMDAxQwotI2RlZmluZSBQQjE1MDBfTEVEUwkJMHhBRTAwMDAxOAotCi0jZGVmaW5lIFBCMTUwMF9IRVhfTEVECQkweEFGMDAwMDA0Ci0jZGVmaW5lIFBCMTUwMF9IRVhfTEVEX0JMQU5LCTB4QUYwMDAwMDgKLQotLyogUENNQ0lBIFBiMTUwMCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMAotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQKSAoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKQotCi0jZW5kaWYgLyogX19BU01fUEIxNTAwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaAppbmRleCA2NzA0YTExLi41ODc5NjQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oCkBAIC00MCwxMDIgKzQwLDYgQEAKICNkZWZpbmUgU01CVVNfUFNDX0JBU0UJCVBTQzJfQkFTRV9BRERSCiAjZGVmaW5lIEkyU19QU0NfQkFTRQkJUFNDM19CQVNFX0FERFIKIAotI2RlZmluZSBCQ1NSX1BIWVNfQUREUiAweEFGMDAwMDAwCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXUxNiB3aG9hbWk7Ci0JCXUxNiByZXNlcnZlZDA7Ci0JLyowNCovCXUxNiBzdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDE7Ci0JLyowOCovCXUxNiBzd2l0Y2hlczsKLQkJdTE2IHJlc2VydmVkMjsKLQkvKjBDKi8JdTE2IHJlc2V0czsKLQkJdTE2IHJlc2VydmVkMzsKLQkvKjEwKi8JdTE2IHBjbWNpYTsKLQkJdTE2IHJlc2VydmVkNDsKLQkvKjE0Ki8JdTE2IHBjaTsKLQkJdTE2IHJlc2VydmVkNTsKLQkvKjE4Ki8JdTE2IGxlZHM7Ci0JCXUxNiByZXNlcnZlZDY7Ci0JLyoxQyovCXUxNiBzeXN0ZW07Ci0JCXUxNiByZXNlcnZlZDc7Ci0KLX0gQkNTUjsKLQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX1BIWVNfQUREUjsKLQotLyoKLSAqIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIEJDU1JzCi0gKi8KLSNkZWZpbmUgQkNTUl9XSE9BTUlfRENJRAkweDAwMEYKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRAkweDAwRjAKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMFZTCTB4MDAwMwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUExVlMJMHgwMDBDCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBGSQkweDAwMTAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMUZJCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkweDAwNDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU1JBTVdJRFRICTB4MDA4MAotI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSEJVU1kJMHgwMTAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1JPTUJVU1kJMHgwMjAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1VTQk9UR0lECTB4MDgwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMFJYRAkweDEwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTFSWEQJMHgyMDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UzUlhECTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfT0NUQUwJMHgwMEZGCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJMHgwMDgwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJMHgwMDA4Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJMHgwMDAyCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJMHgwMDAxCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTAJMHgwMDAxCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTEJMHgwMDAyCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkweDAwMDQKLSNkZWZpbmUgQkNTUl9SRVNFVFNfV1NDCQkweDIwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfU1BJU0VMCTB4NDAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19ETUFSRVEJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCTB4MDAwMwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJMHgwMDBDCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCTB4MDAxMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJMHgwMDgwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkweDAzMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCTB4MEMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkweDEwMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfUENJX002NkVOCQkweDAwMDEKLSNkZWZpbmUgQkNTUl9QQ0lfTTMzCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9QQ0lfRVhURVJOQVJCCTB4MDIwMAotI2RlZmluZSBCQ1NSX1BDSV9HUElPMjAwUlNUCTB4MDQwMAotI2RlZmluZSBCQ1NSX1BDSV9DTEtPVVQJCTB4MDgwMAotI2RlZmluZSBCQ1NSX1BDSV9DRkdIT1NUCTB4MTAwMAotCi0jZGVmaW5lIEJDU1JfTEVEU19ERUNJTUFMUwkweDAwRkYKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCTB4MDEwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMQkJMHgwMjAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQyCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCTB4MDgwMAotCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1ZEREkJMHgwMDFGCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1BPV0VST0ZGCTB4NDAwMAotI2RlZmluZSBCQ1NSX1NZU1RFTV9SRVNFVAkweDgwMDAKLQotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDEKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCwgU0xPVCkgXAotCSgoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKSA8PCAoKFNMT1QpICogOCkpCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX0JPT1QpICYmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfVVNFUikKICNkZWZpbmUgUEIxNTUwX0JPVEhfQkFOS1MKICNlbGlmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfQk9PVCkgJiYgIWRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfVVNFUikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gvaXJxLW1hcHBpbmcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gvaXJxLW1hcHBpbmcuaAppbmRleCA2NTdmMDg5Li42ZDcwMjY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wbng4MzN4L2lycS1tYXBwaW5nLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG54ODMzeC9pcnEtbWFwcGluZy5oCkBAIC0xMjMsNCArMTIzLDMgQEAKICNkZWZpbmUgUE5YODMzWF9HUElPXzE1X0lOVAkJCShQTlg4MzNYX0dQSU9fSVJRX0JBU0UgKyAxNSkKIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKaW5kZXggNjI5YTU3NC4uNGZkNjUyYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKQEAgLTI1MSw0ICsyNTEsMyBAQAogCQkJCQkJICogY2hhbm5lbCAzLiAqLwogI2RlZmluZSBpcnFfbXBlZ19kCQkoaWJhc2UrMCkgCS8qIE1QRUcgRGVjb2RlciBJbnRlcnJ1cHQgKi8KICNlbmRpZgkvKiBfQVNNX01BQ0hfUE9XRVJUVl9JTlRFUlJVUFRTX0hfICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKaW5kZXggZjRhYjMxMy4uNDkzODJkNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKQEAgLTI1MSw2ICsyNTEsMTQgQEAKICNkZWZpbmUgUExfMjU2TQkJMjgKIAogLyoKKyAqIFBhZ2VHcmFpbiBiaXRzCisgKi8KKyNkZWZpbmUgUEdfUklFCQkoX1VMQ0FTVF8oMSkgPDwgIDMxKQorI2RlZmluZSBQR19YSUUJCShfVUxDQVNUXygxKSA8PCAgMzApCisjZGVmaW5lIFBHX0VMUEEJCShfVUxDQVNUXygxKSA8PCAgMjkpCisjZGVmaW5lIFBHX0VTUAkJKF9VTENBU1RfKDEpIDw8ICAyOCkKKworLyoKICAqIFI0eDAwIGludGVycnVwdCBlbmFibGUgLyBjYXVzZSBiaXRzCiAgKi8KICNkZWZpbmUgSUVfU1cwICAgICAgICAgIChfVUxDQVNUXygxKSA8PCAgOCkKQEAgLTU3Niw2ICs1ODQsMTAgQEAKICNkZWZpbmUgTUlQU19DT05GM19EU1AJCShfVUxDQVNUXygxKSA8PCAxMCkKICNkZWZpbmUgTUlQU19DT05GM19VTFJJCQkoX1VMQ0FTVF8oMSkgPDwgMTMpCiAKKyNkZWZpbmUgTUlQU19DT05GNF9NTVVTSVpFRVhUCShfVUxDQVNUXygyNTUpIDw8IDApCisjZGVmaW5lIE1JUFNfQ09ORjRfTU1VRVhUREVGCShfVUxDQVNUXygzKSA8PCAxNCkKKyNkZWZpbmUgTUlQU19DT05GNF9NTVVFWFRERUZfTU1VU0laRUVYVCAoX1VMQ0FTVF8oMSkgPDwgMTQpCisKICNkZWZpbmUgTUlQU19DT05GN19XSUkJCShfVUxDQVNUXygxKSA8PCAzMSkKIAogI2RlZmluZSBNSVBTX0NPTkY3X1JQUwkJKF9VTENBU1RfKDEpIDw8IDIpCkBAIC04MjYsNiArODM4LDkgQEAKICNkZWZpbmUgcmVhZF9jMF9wYWdlbWFzaygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNSwgMCkKICNkZWZpbmUgd3JpdGVfYzBfcGFnZW1hc2sodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ1LCAwLCB2YWwpCiAKKyNkZWZpbmUgcmVhZF9jMF9wYWdlZ3JhaW4oKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDEpCisjZGVmaW5lIHdyaXRlX2MwX3BhZ2VncmFpbih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDEsIHZhbCkKKwogI2RlZmluZSByZWFkX2MwX3dpcmVkKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNiwgMCkKICNkZWZpbmUgd3JpdGVfYzBfd2lyZWQodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ2LCAwLCB2YWwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tc2MwMV9pYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKaW5kZXggNzk4OWI5Zi4uZDkyNDA2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKQEAgLTE0NSw0ICsxNDUsMyBAQAogZXh0ZXJuIHZvaWQgbGxfbXNjX2lycSh2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVNNX01JUFNfQk9BUkRTX01TQzAxX0lDX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25pbGU0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaAppbmRleCBjM2NhOTU5Li5hZjBlNTFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaApAQCAtMzA3LDQgKzMwNywzIEBACiBleHRlcm4gdm9pZCBuaWxlNF9kdW1wX2lycV9zdGF0dXModm9pZCk7CS8qIERlYnVnICovCiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi1mZWF0dXJlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi1mZWF0dXJlLmgKaW5kZXggZWYyNGE3Yi4uY2JhNmZiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24tZmVhdHVyZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLWZlYXR1cmUuaApAQCAtOTksNiArOTksOCBAQAogCQlyZXR1cm4gIWN2bXhfZnVzZV9yZWFkKDkwKTsKIAogCWNhc2UgT0NURU9OX0ZFQVRVUkVfUENJRToKKwljYXNlIE9DVEVPTl9GRUFUVVJFX01HTVRfUE9SVDoKKwljYXNlIE9DVEVPTl9GRUFUVVJFX1JBSUQ6CiAJCXJldHVybiBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkKIAkJCXx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYKTsKIApAQCAtMTEwLDEyICsxMTIsNiBAQAogCWNhc2UgT0NURU9OX0ZFQVRVUkVfVFJBOgogCQlyZXR1cm4gIShPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NOMzBYWCkKIAkJCSB8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTBYWCkpOwotCWNhc2UgT0NURU9OX0ZFQVRVUkVfTUdNVF9QT1JUOgotCQlyZXR1cm4gT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpCi0JCQl8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCk7Ci0JY2FzZSBPQ1RFT05fRkVBVFVSRV9SQUlEOgotCQlyZXR1cm4gT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpCi0JCQl8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCk7CiAJY2FzZSBPQ1RFT05fRkVBVFVSRV9VU0I6CiAJCXJldHVybiAhKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ04zOFhYKQogCQkJIHx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041OFhYKSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaAppbmRleCA0ZDBhOGM2Li5jYTYyMTRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmgKQEAgLTIxMyw2ICsyMTMsMTEgQEAKIAlpbnQJCWRtYV9lbmdpbmU7CS8qIC0xIGZvciBubyBETUEgKi8KIH07CiAKK3N0cnVjdCBvY3Rlb25faTJjX2RhdGEgeworCXVuc2lnbmVkIGludAlzeXNfZnJlcTsKKwl1bnNpZ25lZCBpbnQJaTJjX2ZyZXE7Cit9OworCiBleHRlcm4gdm9pZCBvY3Rlb25fd3JpdGVfbGNkKGNvbnN0IGNoYXIgKnMpOwogZXh0ZXJuIHZvaWQgb2N0ZW9uX2NoZWNrX2NwdV9iaXN0KHZvaWQpOwogZXh0ZXJuIGludCBvY3Rlb25fZ2V0X2Jvb3RfZGVidWdfZmxhZyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGYyNjYyOTUuLmFjMzI1NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTA3LDE4ICsxMDcsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCiAvKgotICogRm9yIDMtbGV2ZWwgcGFnZXRhYmxlcyB3ZSBkZWZpbmVzIHRoZXNlIG91cnNlbHZlcywgZm9yIDItbGV2ZWwgdGhlCi0gKiBkZWZpbml0aW9ucyBhcmUgc3VwcGxpZWQgYnkgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4uCi0gKi8KLSNpZmRlZiBDT05GSUdfNjRCSVQKLQotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKLSNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKLSNkZWZpbmUgX19wbWQoeCkJKChwbWRfdCkgeyAoeCkgfSApCi0KLSNlbmRpZgotCi0vKgogICogUmlnaHQgbm93IHdlIGRvbid0IHN1cHBvcnQgNC1sZXZlbCBwYWdldGFibGVzLCBzbyBhbGwgcHVkLXJlbGF0ZWQKICAqIGRlZmluaXRpb25zIGNvbWUgZnJvbSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaAppbmRleCAxZDliYjhjLi5kYTM5MjBmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaApAQCAtOSwyMyArOSw4IEBACiAjaWZuZGVmIF9BU01fUEFSQU1fSAogI2RlZmluZSBfQVNNX1BBUkFNX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KLSMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KICNkZWZpbmUgRVhFQ19QQUdFU0laRQk2NTUzNgogCi0jaWZuZGVmIE5PR1JPVVAKLSNkZWZpbmUgTk9HUk9VUAkJKC0xKQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhcmFtLmg+CiAKICNlbmRpZiAvKiBfQVNNX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJwb3J0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFycG9ydC5oCmluZGV4IGY1MjY1NjguLmNmMjUyYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcnBvcnQuaApAQCAtMSwxNSArMSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgVGltIFdhdWdoIDx0aW1AY3liZXJlbGsuZGVtb24uY28udWs+Ci0gKgotICogVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGJ5IGRyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMuCi0gKi8KLSNpZm5kZWYgX0FTTV9QQVJQT1JUX0gKLSNkZWZpbmUgX0FTTV9QQVJQT1JUX0gKLQotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyhpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpOwotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX25vbnBjaV9wb3J0cyhpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCi17Ci0JcmV0dXJuIHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMoYXV0b2lycSwgYXV0b2RtYSk7Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX1BBUlBPUlRfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhcnBvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDM3MzhmNGIuLjg4MWQxOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMzEsNyArMzEsNyBAQAogICovCiBleHRlcm4gdm9pZCBwbWRfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxvbmcgcGFnZXRhYmxlKTsKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCiB7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAl0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksIHB0ZSk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS0zMi5oCmluZGV4IDU1ODEzZDYuLmFlOTA0MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtMzIuaApAQCAtMTI3LDggKzEyNyw4IEBACiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiAoUEFHRV9TSElGVCArIDIpKSkKICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCAoUEFHRV9TSElGVCArIDIpKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZWxzZQotI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gUEFHRV9TSElGVCkpCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHVuc2lnbmVkIGxvbmcgbG9uZykocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiBfUEZOX1NISUZUKSkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgodW5zaWduZWQgbG9uZyBsb25nKShwZm4pIDw8IF9QRk5fU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKICNlbmRpZgogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmgKaW5kZXggOWNkNTA4OS4uMjZkYzY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS02NC5oCkBAIC0xNiw3ICsxNiwxMSBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KIAorI2lmZGVmIENPTkZJR19QQUdFX1NJWkVfNjRLQgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKyNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorI2VuZGlmCiAKIC8qCiAgKiBFYWNoIGFkZHJlc3Mgc3BhY2UgaGFzIDIgNEsgcGFnZXMgYXMgaXRzIHBhZ2UgZGlyZWN0b3J5LCBnaXZpbmcgMTAyNApAQCAtMzcsMTMgKzQxLDIwIEBACiAgKiBmYXVsdCBhZGRyZXNzIC0gVk1BTExPQ19TVEFSVC4KICAqLwogCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2lmZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBBR0VfU0hJRlQgKyBQQUdFX1NISUZUICsgUFRFX09SREVSIC0gMykKKyNlbHNlCisKIC8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcCAqLwogI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVCArIFBURV9PUkRFUiAtIDMpKQogI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKICNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCiAKLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworCiAjZGVmaW5lIFBHRElSX1NISUZUCShQTURfU0hJRlQgKyAoUEFHRV9TSElGVCArIFBNRF9PUkRFUiAtIDMpKQorI2VuZGlmCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogCkBAIC05MiwxMiArMTAzLDE0IEBACiAjaWZkZWYgQ09ORklHX1BBR0VfU0laRV82NEtCCiAjZGVmaW5lIFBHRF9PUkRFUgkJMAogI2RlZmluZSBQVURfT1JERVIJCWFpZWVlZV9hdHRlbXB0X3RvX2FsbG9jYXRlX3B1ZAotI2RlZmluZSBQTURfT1JERVIJCTAKKyNkZWZpbmUgUE1EX09SREVSCQlhaWVlZWVfYXR0ZW1wdF90b19hbGxvY2F0ZV9wbWQKICNkZWZpbmUgUFRFX09SREVSCQkwCiAjZW5kaWYKIAogI2RlZmluZSBQVFJTX1BFUl9QR0QJKChQQUdFX1NJWkUgPDwgUEdEX09SREVSKSAvIHNpemVvZihwZ2RfdCkpCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKICNkZWZpbmUgUFRSU19QRVJfUE1ECSgoUEFHRV9TSVpFIDw8IFBNRF9PUkRFUikgLyBzaXplb2YocG1kX3QpKQorI2VuZGlmCiAjZGVmaW5lIFBUUlNfUEVSX1BURQkoKFBBR0VfU0laRSA8PCBQVEVfT1JERVIpIC8gc2l6ZW9mKHB0ZV90KSkKIAogI2lmIFBHRElSX1NJWkUgPj0gVEFTS19TSVpFCkBAIC0xMTAsNyArMTIzLDkgQEAKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJTUFQX0JBU0UKICNkZWZpbmUgVk1BTExPQ19FTkQJXAogCShWTUFMTE9DX1NUQVJUICsgXAotCSBQVFJTX1BFUl9QR0QgKiBQVFJTX1BFUl9QTUQgKiBQVFJTX1BFUl9QVEUgKiBQQUdFX1NJWkUgLSAoMVVMIDw8IDMyKSkKKwkgbWluKFBUUlNfUEVSX1BHRCAqIFBUUlNfUEVSX1BNRCAqIFBUUlNfUEVSX1BURSAqIFBBR0VfU0laRSwgXAorCSAgICAgKDFVTCA8PCBjcHVfdm1iaXRzKSkgLSAoMVVMIDw8IDMyKSkKKwogI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoS0JVSUxEXzY0QklUX1NZTTMyKSAmJiBcCiAJVk1BTExPQ19TVEFSVCAhPSBDS1NTRUcKIC8qIExvYWQgbW9kdWxlcyBpbnRvIDMyYml0LWNvbXBhdGlibGUgc2VnbWVudC4gKi8KQEAgLTEyMCwxNSArMTM1LDMwIEBACiAKICNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKIAlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChlKSkKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogI2RlZmluZSBwbWRfRVJST1IoZSkgXAogCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJTAxNmx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorI2VuZGlmCiAjZGVmaW5lIHBnZF9FUlJPUihlKSBcCiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCiAKIGV4dGVybiBwdGVfdCBpbnZhbGlkX3B0ZV90YWJsZVtQVFJTX1BFUl9QVEVdOwogZXh0ZXJuIHB0ZV90IGVtcHR5X2JhZF9wYWdlX3RhYmxlW1BUUlNfUEVSX1BURV07CisKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisvKgorICogRm9yIDMtbGV2ZWwgcGFnZXRhYmxlcyB3ZSBkZWZpbmVzIHRoZXNlIG91cnNlbHZlcywgZm9yIDItbGV2ZWwgdGhlCisgKiBkZWZpbml0aW9ucyBhcmUgc3VwcGxpZWQgYnkgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7CisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorCisKIGV4dGVybiBwbWRfdCBpbnZhbGlkX3BtZF90YWJsZVtQVFJTX1BFUl9QTURdOwogZXh0ZXJuIHBtZF90IGVtcHR5X2JhZF9wbWRfdGFibGVbUFRSU19QRVJfUE1EXTsKKyNlbmRpZgogCiAvKgogICogRW1wdHkgcGdkL3BtZCBlbnRyaWVzIHBvaW50IHRvIHRoZSBpbnZhbGlkX3B0ZV90YWJsZS4KQEAgLTE0OSw2ICsxNzksNyBAQAogewogCXBtZF92YWwoKnBtZHApID0gKCh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZSk7CiB9CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAogLyoKICAqIEVtcHR5IHB1ZCBlbnRyaWVzIHBvaW50IHRvIHRoZSBpbnZhbGlkX3BtZF90YWJsZS4KQEAgLTE3Miw2ICsyMDMsNyBAQAogewogCXB1ZF92YWwoKnB1ZHApID0gKCh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZSk7CiB9CisjZW5kaWYKIAogI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKIApAQCAtMTc5LDggKzIxMSw4IEBACiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiAoUEFHRV9TSElGVCArIDIpKSkKICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCAoUEFHRV9TSElGVCArIDIpKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZWxzZQotI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gUEFHRV9TSElGVCkpCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gX1BGTl9TSElGVCkpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgX1BGTl9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQogI2VuZGlmCiAKICNkZWZpbmUgX19wZ2Rfb2Zmc2V0KGFkZHJlc3MpCXBnZF9pbmRleChhZGRyZXNzKQpAQCAtMTk2LDYgKzIyOCw3IEBACiAvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KICNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcikJKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyKSkKIAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHVkX3BhZ2VfdmFkZHIocHVkX3QgcHVkKQogewogCXJldHVybiBwdWRfdmFsKHB1ZCk7CkBAIC0yMDgsNiArMjQxLDcgQEAKIHsKIAlyZXR1cm4gKHBtZF90ICopIHB1ZF9wYWdlX3ZhZGRyKCpwdWQpICsgcG1kX2luZGV4KGFkZHJlc3MpOwogfQorI2VuZGlmCiAKIC8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUuLiAqLwogI2RlZmluZSBfX3B0ZV9vZmZzZXQoYWRkcmVzcykJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKaW5kZXggMTA3M2U2ZC4uZTlmZTdlOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaApAQCAtNTAsNyArNTAsNyBAQAogI2RlZmluZSBfQ0FDSEVfU0hJRlQgICAgICAgICAgICAgICAgMwogI2RlZmluZSBfQ0FDSEVfTUFTSyAgICAgICAgICAgICAgICAgKDc8PDMpCiAKLSNlbHNlCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpCiAKICNkZWZpbmUgX1BBR0VfUFJFU0VOVCAgICAgICAgICAgICAgICgxPDwwKSAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KICNkZWZpbmUgX1BBR0VfUkVBRCAgICAgICAgICAgICAgICAgICgxPDwxKSAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KQEAgLTU5LDggKzU5LDYgQEAKICNkZWZpbmUgX1BBR0VfTU9ESUZJRUQgICAgICAgICAgICAgICgxPDw0KSAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KICNkZWZpbmUgX1BBR0VfRklMRSAgICAgICAgICAgICAgICAgICgxPDw0KSAgLyogc2V0OnBhZ2VjYWNoZSB1bnNldDpzd2FwICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpCi0KICNkZWZpbmUgX1BBR0VfR0xPQkFMICAgICAgICAgICAgICAgICgxPDw4KQogI2RlZmluZSBfUEFHRV9WQUxJRCAgICAgICAgICAgICAgICAgKDE8PDkpCiAjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFEICAgICAgICAgICAoMTw8OSkgIC8qIHN5bm9ueW0gICAgICAgICAgICAgICAgICovCkBAIC02OSwyMSArNjcsMTEzIEBACiAjZGVmaW5lIF9DQUNIRV9VTkNBQ0hFRCAgICAgICAgICAgICAoMTw8MTEpCiAjZGVmaW5lIF9DQUNIRV9NQVNLICAgICAgICAgICAgICAgICAoMTw8MTEpCiAKKyNlbHNlIC8qICdOb3JtYWwnIHI0SyBjYXNlICovCisvKgorICogV2hlbiB1c2luZyB0aGUgUkkvWEkgYml0IHN1cHBvcnQsIHdlIGhhdmUgMTMgYml0cyBvZiBmbGFncyBiZWxvdworICogdGhlIHBoeXNpY2FsIGFkZHJlc3MuIFRoZSBSSS9YSSBiaXRzIGFyZSBwbGFjZWQgc3VjaCB0aGF0IGEgU1JMIDUKKyAqIGNhbiBzdHJpcCBvZmYgdGhlIHNvZnR3YXJlIGJpdHMsIHRoZW4gYSBST1RSIDIgY2FuIG1vdmUgdGhlIFJJL1hJCisgKiBpbnRvIGJpdHMgWzYzOjYyXS4gVGhpcyBhbHNvIGxpbWl0cyBwaHlzaWNhbCBhZGRyZXNzIHRvIDU2IGJpdHMsCisgKiB3aGljaCBpcyBtb3JlIHRoYW4gd2UgbmVlZCByaWdodCBub3cuCisgKi8KKworLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVF9TSElGVAkoMCkKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkJKDEgPDwgX1BBR0VfUFJFU0VOVF9TSElGVCkKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlLCBzaG91bGQgYmUgdW51c2VkIGlmIGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpLiAqLworI2RlZmluZSBfUEFHRV9SRUFEX1NISUZUCShrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IF9QQUdFX1BSRVNFTlRfU0hJRlQgOiBfUEFHRV9QUkVTRU5UX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfUkVBRCAoe2lmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgQlVHKCk7IDEgPDwgX1BBR0VfUkVBRF9TSElGVDsgfSkKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1dSSVRFX1NISUZUCShfUEFHRV9SRUFEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfV1JJVEUJCSgxIDw8IF9QQUdFX1dSSVRFX1NISUZUKQorLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRURfU0hJRlQJKF9QQUdFX1dSSVRFX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJCSgxIDw8IF9QQUdFX0FDQ0VTU0VEX1NISUZUKQorLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1BBR0VfTU9ESUZJRURfU0hJRlQJKF9QQUdFX0FDQ0VTU0VEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfTU9ESUZJRUQJCSgxIDw8IF9QQUdFX01PRElGSUVEX1NISUZUKQorLyogc2V0OnBhZ2VjYWNoZSB1bnNldDpzd2FwICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJCShfUEFHRV9NT0RJRklFRCkKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKy8qIGh1Z2UgdGxiIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfSFVHRV9TSElGVAkoX1BBR0VfTU9ESUZJRURfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9IVUdFCQkoMSA8PCBfUEFHRV9IVUdFX1NISUZUKQogI2Vsc2UKLQotI2RlZmluZSBfUEFHRV9SNEtCVUcgICAgICAgICAgICAgICAgKDE8PDUpICAvKiB3b3JrYXJvdW5kIGZvciByNGsgYnVnICAqLwotI2RlZmluZSBfUEFHRV9IVUdFICAgICAgICAgICAgICAgICAgKDE8PDUpICAvKiBodWdlIHRsYiBwYWdlICovCi0jZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAgICAgICAgICAoMTw8NikKLSNkZWZpbmUgX1BBR0VfVkFMSUQgICAgICAgICAgICAgICAgICgxPDw3KQotI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRCAgICAgICAgICAgKDE8PDcpICAvKiBzeW5vbnltICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9ESVJUWSAgICAgICAgICAgICAgICAgKDE8PDgpICAvKiBUaGUgTUlQUyBkaXJ0eSBiaXQgICAgICAqLwotI2RlZmluZSBfUEFHRV9TSUxFTlRfV1JJVEUgICAgICAgICAgKDE8PDgpCi0jZGVmaW5lIF9DQUNIRV9TSElGVAkJICAgIDkKLSNkZWZpbmUgX0NBQ0hFX01BU0sgICAgICAgICAgICAgICAgICg3PDw5KQotCisjZGVmaW5lIF9QQUdFX0hVR0VfU0hJRlQJKF9QQUdFX01PRElGSUVEX1NISUZUKQorI2RlZmluZSBfUEFHRV9IVUdFCQkoe0JVRygpOyAxOyB9KSAgLyogRHVtbXkgdmFsdWUgKi8KICNlbmRpZgorCisvKiBQYWdlIGNhbm5vdCBiZSBleGVjdXRlZCAqLworI2RlZmluZSBfUEFHRV9OT19FWEVDX1NISUZUCShrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IF9QQUdFX0hVR0VfU0hJRlQgKyAxIDogX1BBR0VfSFVHRV9TSElGVCkKKyNkZWZpbmUgX1BBR0VfTk9fRVhFQwkJKHtpZiAoIWtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSBCVUcoKTsgMSA8PCBfUEFHRV9OT19FWEVDX1NISUZUOyB9KQorCisvKiBQYWdlIGNhbm5vdCBiZSByZWFkICovCisjZGVmaW5lIF9QQUdFX05PX1JFQURfU0hJRlQJKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gX1BBR0VfTk9fRVhFQ19TSElGVCArIDEgOiBfUEFHRV9OT19FWEVDX1NISUZUKQorI2RlZmluZSBfUEFHRV9OT19SRUFECQkoe2lmICgha2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIEJVRygpOyAxIDw8IF9QQUdFX05PX1JFQURfU0hJRlQ7IH0pCisKKyNkZWZpbmUgX1BBR0VfR0xPQkFMX1NISUZUCShfUEFHRV9OT19SRUFEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfR0xPQkFMCQkoMSA8PCBfUEFHRV9HTE9CQUxfU0hJRlQpCisKKyNkZWZpbmUgX1BBR0VfVkFMSURfU0hJRlQJKF9QQUdFX0dMT0JBTF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX1ZBTElECQkoMSA8PCBfUEFHRV9WQUxJRF9TSElGVCkKKy8qIHN5bm9ueW0gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFECShfUEFHRV9WQUxJRCkKKworLyogVGhlIE1JUFMgZGlydHkgYml0ICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFlfU0hJRlQJKF9QQUdFX1ZBTElEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfRElSVFkJCSgxIDw8IF9QQUdFX0RJUlRZX1NISUZUKQorI2RlZmluZSBfUEFHRV9TSUxFTlRfV1JJVEUJKF9QQUdFX0RJUlRZKQorCisjZGVmaW5lIF9DQUNIRV9TSElGVAkJKF9QQUdFX0RJUlRZX1NISUZUICsgMSkKKyNkZWZpbmUgX0NBQ0hFX01BU0sJCSg3IDw8IF9DQUNIRV9TSElGVCkKKworI2RlZmluZSBfUEZOX1NISUZUCQkoUEFHRV9TSElGVCAtIDEyICsgX0NBQ0hFX1NISUZUICsgMykKKwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUiAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSAqLwogCisjaWZuZGVmIF9QRk5fU0hJRlQKKyNkZWZpbmUgX1BGTl9TSElGVCAgICAgICAgICAgICAgICAgIFBBR0VfU0hJRlQKKyNlbmRpZgorI2RlZmluZSBfUEZOX01BU0sJCSh+KCgxIDw8IChfUEZOX1NISUZUKSkgLSAxKSkKKworI2lmbmRlZiBfUEFHRV9OT19SRUFECisjZGVmaW5lIF9QQUdFX05PX1JFQUQgKHtCVUcoKTsgMDsgfSkKKyNkZWZpbmUgX1BBR0VfTk9fUkVBRF9TSElGVCAoe0JVRygpOyAwOyB9KQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX05PX0VYRUMKKyNkZWZpbmUgX1BBR0VfTk9fRVhFQyAoe0JVRygpOyAwOyB9KQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0dMT0JBTF9TSElGVAorI2RlZmluZSBfUEFHRV9HTE9CQUxfU0hJRlQgaWxvZzIoX1BBR0VfR0xPQkFMKQorI2VuZGlmCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBwdGVfdG9fZW50cnlsbyBjb252ZXJ0cyBhIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgaW50byBhIE1pcHMKKyAqIGVudHJ5bG8wLzEgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgcHRlX3RvX2VudHJ5bG8odW5zaWduZWQgbG9uZyBwdGVfdmFsKQoreworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQlpbnQgc2E7CisjaWZkZWYgQ09ORklHXzMyQklUCisJCXNhID0gMzEgLSBfUEFHRV9OT19SRUFEX1NISUZUOworI2Vsc2UKKwkJc2EgPSA2MyAtIF9QQUdFX05PX1JFQURfU0hJRlQ7CisjZW5kaWYKKwkJLyoKKwkJICogQyBoYXMgbm8gd2F5IHRvIGV4cHJlc3MgdGhhdCB0aGlzIGlzIGEgRFNSTAorCQkgKiBfUEFHRV9OT19FWEVDX1NISUZUIGZvbGxvd2VkIGJ5IGEgUk9UUiAyLiAgTHVja2lseQorCQkgKiBpbiB0aGUgZmFzdCBwYXRoIHRoaXMgaXMgZG9uZSBpbiBhc3NlbWJseQorCQkgKi8KKwkJcmV0dXJuIChwdGVfdmFsID4+IF9QQUdFX0dMT0JBTF9TSElGVCkgfAorCQkJKChwdGVfdmFsICYgKF9QQUdFX05PX0VYRUMgfCBfUEFHRV9OT19SRUFEKSkgPDwgc2EpOworCX0KKworCXJldHVybiBwdGVfdmFsID4+IF9QQUdFX0dMT0JBTF9TSElGVDsKK30KKyNlbmRpZgogCiAvKgogICogQ2FjaGUgYXR0cmlidXRlcwpAQCAtMTMwLDkgKzIyMCw5IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIF9fUkVBREFCTEUJKF9QQUdFX1JFQUQgfCBfUEFHRV9TSUxFTlRfUkVBRCB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBfX1JFQURBQkxFCShfUEFHRV9TSUxFTlRfUkVBRCB8IF9QQUdFX0FDQ0VTU0VEIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpKQogI2RlZmluZSBfX1dSSVRFQUJMRQkoX1BBR0VfV1JJVEUgfCBfUEFHRV9TSUxFTlRfV1JJVEUgfCBfUEFHRV9NT0RJRklFRCkKIAotI2RlZmluZSBfUEFHRV9DSEdfTUFTSyAgKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTU9ESUZJRUQgfCBfQ0FDSEVfTUFTSykKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sgIChfUEZOX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX01PRElGSUVEIHwgX0NBQ0hFX01BU0spCiAKICNlbmRpZiAvKiBfQVNNX1BHVEFCTEVfQklUU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAxODU0MzM2Li45MzU5OGJhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTIyLDIzICsyMiwyNCBAQAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCiAjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX0NBQ0hFX0NBQ0hBQkxFX05PTkNPSEVSRU5UKQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgXAorI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfV1JJVEUgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkgfCBcCiAJCQkJIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCi0jZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IFwKLQkJCQkgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKLSNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IFwKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkgfCBcCisJCQkJIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/ICBfUEFHRV9OT19FWEVDIDogMCkgfCBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQorI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkgfCBcCiAJCQkJIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCiAjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfX1JFQURBQkxFIHwgX19XUklURUFCTEUgfCBcCiAJCQkJIF9QQUdFX0dMT0JBTCB8IF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCi0jZGVmaW5lIFBBR0VfVVNFUklPCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBcCisjZGVmaW5lIFBBR0VfVVNFUklPCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkgfCBfUEFHRV9XUklURSB8IFwKIAkJCQkgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKICNkZWZpbmUgUEFHRV9LRVJORUxfVU5DQUNIRUQgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9fUkVBREFCTEUgfCBcCiAJCQlfX1dSSVRFQUJMRSB8IF9QQUdFX0dMT0JBTCB8IF9DQUNIRV9VTkNBQ0hFRCkKIAogLyoKLSAqIE1JUFMgY2FuJ3QgZG8gcGFnZSBwcm90ZWN0aW9uIGZvciBleGVjdXRlLCBhbmQgY29uc2lkZXJzIHRoYXQgdGhlIHNhbWUgbGlrZQotICogcmVhZC4gQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4gVGhpcyBpcyB0aGUgY2xvc2VzdAotICogd2UgY2FuIGdldCBieSByZWFzb25hYmxlIG1lYW5zLi4KKyAqIElmIF9QQUdFX05PX0VYRUMgaXMgbm90IGRlZmluZWQsIHdlIGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IKKyAqIGV4ZWN1dGUsIGFuZCBjb25zaWRlciBpdCB0byBiZSB0aGUgc2FtZSBhcyByZWFkLiBBbHNvLCB3cml0ZQorICogcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4gVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0CisgKiBieSByZWFzb25hYmxlIG1lYW5zLi4KICAqLwogCiAvKgpAQCAtMTc3LDcgKzE3OCw3IEBACiAgKi8KICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgZG8geyAqKHBtZHB0cikgPSAocG1kdmFsKTsgfSB3aGlsZSgwKQogCi0jaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIC8qCiAgKiAocHVkcyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKICAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCkBAIC0yOTgsOCArMjk5LDEzIEBACiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKIHsKIAlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7Ci0JaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQUQpCi0JCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJaWYgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfTk9fUkVBRCkpCisJCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJfSBlbHNlIHsKKwkJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQUQpCisJCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJfQogCXJldHVybiBwdGU7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uaAppbmRleCAxNGNhN2RjLi41NGVmMWE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oCkBAIC0xMTgsNyArMTE4LDYgQEAKICNkZWZpbmUgWlNQX0RVRVQJCSdEJwkvKiBvbmUgRFVFVCB6c3AgZW5naW5lICovCiAjZGVmaW5lIFpTUF9UUklBRAkJJ1QnCS8qIHR3byBUUklBRCB6c3AgZW5naW5lcyAqLwogCi1leHRlcm4gY2hhciAqcHJvbV9nZXRjbWRsaW5lKHZvaWQpOwogZXh0ZXJuIGNoYXIgKnByb21fZ2V0ZW52KGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7CiBleHRlcm4gdm9pZCBwcm9tX21lbWluaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2VyaWFsLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2VyaWFsLmgKaW5kZXggYzA3ZWJkOC4uYTBjYjBjYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlcmlhbC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaApAQCAtMSwyMiArMSBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBieSBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKi8KLSNpZm5kZWYgX0FTTV9TRVJJQUxfSAotI2RlZmluZSBfQVNNX1NFUklBTF9ICi0KLQotLyoKLSAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KLSAqCi0gKiBJdCdkIGJlIG5pY2UgaWYgc29tZW9uZSBidWlsdCBhIHNlcmlhbCBjYXJkIHdpdGggYSAyNC41NzYgTUh6Ci0gKiBjbG9jaywgc2luY2UgdGhlIDE2NTUwQSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGEgdG9wIHNwZWVkIG9mIDEuNQotICogbWVnYWJpdHMvc2Vjb25kOyBidXQgdGhpcyByZXF1aXJlcyB0aGUgZmFzdGVyIGNsb2NrLgotICovCi0jZGVmaW5lIEJBU0VfQkFVRCAoMTg0MzIwMCAvIDE2KQotCi0jZW5kaWYgLyogX0FTTV9TRVJJQUxfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmgKaW5kZXggNjM3NDFjYS4uMmEyZjFiZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oCkBAIC0zMywxNCArMzMsNiBAQAogZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgYyk7CiBleHRlcm4gY2hhciBwcm9tX2dldGNoYXIodm9pZCk7CiAKLS8qIE1lbW9yeSBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuICovCi0jZGVmaW5lIFBST01fTUFYX1BNRU1CTE9DS1MgICAgMzIKLXN0cnVjdCBwcm9tX3BtZW1ibG9jayB7Ci0JTE9ORwliYXNlOwkJLyogV2l0aGluIEtTRUcwIG9yIFhLUEhZUy4gKi8KLQlVTE9ORwlzaXplOwkJLyogSW4gYnl0ZXMuICovCi0JVUxPTkcJdHlwZTsJCS8qIGZyZWUgb3IgcHJvbSBtZW1vcnkgKi8KLX07Ci0KIC8qIEdldCBuZXh0IG1lbW9yeSBkZXNjcmlwdG9yIGFmdGVyIENVUlIsIHJldHVybnMgZmlyc3QgZGVzY3JpcHRvcgogICogaW4gY2hhaW4gaXMgQ1VSUiBpcyBOVUxMLgogICovCkBAIC01MSw3ICs0Myw2IEBACiAgKiBhcnJheS4KICAqLwogZXh0ZXJuIHZvaWQgcHJvbV9tZW1pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJvbV9maXh1cF9tZW1fbWFwKHVuc2lnbmVkIGxvbmcgc3RhcnRfbWVtLCB1bnNpZ25lZCBsb25nIGVuZF9tZW0pOwogCiAvKiBQUk9NIGRldmljZSB0cmVlIGxpYnJhcnkgcm91dGluZXMuICovCiAjZGVmaW5lIFBST01fTlVMTF9DT01QT05FTlQgKChwY29tcG9uZW50ICopIDApCkBAIC02MiwyMCArNTMsNiBAQAogLyogR2V0IGNoaWxkIGNvbXBvbmVudCBvZiBUSElTLiAqLwogZXh0ZXJuIHBjb21wb25lbnQgKkFyY0dldENoaWxkKHBjb21wb25lbnQgKnRoaXMpOwogCi0vKiBHZXQgcGFyZW50IGNvbXBvbmVudCBvZiBDSElMRC4gKi8KLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2dldHBhcmVudChwY29tcG9uZW50ICpjaGlsZCk7Ci0KLS8qIENvcHkgY29tcG9uZW50IG9wYXF1ZSBkYXRhIG9mIGNvbXBvbmVudCBUSElTIGludG8gQlVGRkVSCi0gKiBpZiBjb21wb25lbnQgVEhJUyBoYXMgb3BhcXVlIGRhdGEuICBSZXR1cm5zIHN1Y2Nlc3Mgb3IKLSAqIGZhaWx1cmUgc3RhdHVzLgotICovCi1leHRlcm4gbG9uZyBwcm9tX2dldGNkYXRhKHZvaWQgKmJ1ZmZlciwgcGNvbXBvbmVudCAqdGhpcyk7Ci0KLS8qIE90aGVyIG1pc2MuIGNvbXBvbmVudCByb3V0aW5lcy4gKi8KLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2NoaWxkYWRkKHBjb21wb25lbnQgKnRoaXMsIHBjb21wb25lbnQgKnRtcCwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gbG9uZyBwcm9tX2RlbGNvbXBvbmVudChwY29tcG9uZW50ICp0aGlzKTsKLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2NvbXBvbmVudGJ5cGF0aChjaGFyICpwYXRoKTsKLQogLyogVGhpcyBpcyBjYWxsZWQgYXQgcHJvbV9pbml0IHRpbWUgdG8gaWRlbnRpZnkgdGhlCiAgKiBBUkMgYXJjaGl0ZWN0dXJlIHdlIGFyZSBydW5uaW5nIG9uCiAgKi8KQEAgLTg4LDM1ICs2NSwxMyBAQAogLyogQVJDUyBjb21tYW5kIGxpbmUgcGFyc2luZy4gKi8KIGV4dGVybiB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpOwogCi0vKiBBY3F1aXJpbmcgaW5mbyBhYm91dCB0aGUgY3VycmVudCB0aW1lLCBldGMuICovCi1leHRlcm4gc3RydWN0IGxpbnV4X3RpbmZvICpwcm9tX2dldHRpbmZvKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9nZXRydGltZSh2b2lkKTsKLQogLyogRmlsZSBvcGVyYXRpb25zLiAqLwotZXh0ZXJuIGxvbmcgcHJvbV9nZXR2ZGlyZW50KHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF92ZGlyZW50ICplbnQsIHVuc2lnbmVkIGxvbmcgbnVtLCB1bnNpZ25lZCBsb25nICpjbnQpOwotZXh0ZXJuIGxvbmcgcHJvbV9vcGVuKGNoYXIgKm5hbWUsIGVudW0gbGludXhfb21vZGUgbWQsIHVuc2lnbmVkIGxvbmcgKmZkKTsKLWV4dGVybiBsb25nIHByb21fY2xvc2UodW5zaWduZWQgbG9uZyBmZCk7CiBleHRlcm4gTE9ORyBBcmNSZWFkKFVMT05HIGZkLCBQVk9JRCBidWYsIFVMT05HIG51bSwgUFVMT05HIGNudCk7Ci1leHRlcm4gbG9uZyBwcm9tX2dldHJzdGF0dXModW5zaWduZWQgbG9uZyBmZCk7CiBleHRlcm4gTE9ORyBBcmNXcml0ZShVTE9ORyBmZCwgUFZPSUQgYnVmLCBVTE9ORyBudW0sIFBVTE9ORyBjbnQpOwotZXh0ZXJuIGxvbmcgcHJvbV9zZWVrKHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF9iaWdpbnQgKm9mZiwgZW51bSBsaW51eF9zZWVrbW9kZSBzbSk7Ci1leHRlcm4gbG9uZyBwcm9tX21vdW50KGNoYXIgKm5hbWUsIGVudW0gbGludXhfbW91bnRvcHMgb3ApOwotZXh0ZXJuIGxvbmcgcHJvbV9nZXRmaW5mbyh1bnNpZ25lZCBsb25nIGZkLCBzdHJ1Y3QgbGludXhfZmluZm8gKmJ1Zik7Ci1leHRlcm4gbG9uZyBwcm9tX3NldGZpbmZvKHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbXNrKTsKLQotLyogUnVubmluZyBzdGFuZC1hbG9uZyBwcm9ncmFtcy4gKi8KLWV4dGVybiBsb25nIHByb21fbG9hZChjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqcGMsIHVuc2lnbmVkIGxvbmcgKmVhZGRyKTsKLWV4dGVybiBsb25nIHByb21faW52b2tlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgc3AsIGxvbmcgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKTsKLWV4dGVybiBsb25nIHByb21fZXhlYyhjaGFyICpuYW1lLCBsb25nIGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCk7CiAKIC8qIE1pc2MuIHJvdXRpbmVzLiAqLwotZXh0ZXJuIFZPSUQgcHJvbV9oYWx0KFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1leHRlcm4gVk9JRCBwcm9tX3Bvd2VyZG93bihWT0lEKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwotZXh0ZXJuIFZPSUQgcHJvbV9yZXN0YXJ0KFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiBleHRlcm4gVk9JRCBBcmNSZWJvb3QoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKIGV4dGVybiBWT0lEIEFyY0VudGVySW50ZXJhY3RpdmVNb2RlKFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1leHRlcm4gbG9uZyBwcm9tX2NmZ3NhdmUoVk9JRCk7Ci1leHRlcm4gc3RydWN0IGxpbnV4X3N5c2lkICpwcm9tX2dldHN5c2lkKFZPSUQpOwogZXh0ZXJuIFZPSUQgQXJjRmx1c2hBbGxDYWNoZXMoVk9JRCk7CiBleHRlcm4gRElTUExBWV9TVEFUVVMgKkFyY0dldERpc3BsYXlTdGF0dXMoVUxPTkcgRmlsZUlEKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9iaWdzdXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvYmlnc3VyLmgKaW5kZXggZWJlZmU3OS4uMmQxYTI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9iaWdzdXIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL2JpZ3N1ci5oCkBAIC00Niw0ICs0NiwzIEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX1NJQllURV9CSUdTVVJfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL3NiMTI1MF9sZHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCmluZGV4IDA4MWU4YjEuLjFlNzZjZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCkBAIC00MjAsNCArNDIwLDMgQEAKICNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGtlcm52YXJzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xrZXJudmFycy5oCmluZGV4IDVkZTRjNWUuLjZhZjI1YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGtlcm52YXJzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL2tsa2VybnZhcnMuaApAQCAtMjYsNCArMjYsMyBAQAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NOX0tMS0VSTlZBUlNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmgKaW5kZXggNzk1YWM2Yy4uNzE2NTMzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwYXJzZW1lbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGFyc2VtZW0uaApAQCAtMTEsNCArMTEsMyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqLwogI2VuZGlmIC8qIF9NSVBTX1NQQVJTRU1FTV9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMjFlZjllZi4uMzk2ZTQwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTM2LDkgKzM2LDkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX2lzX2xvY2tlZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JdW5zaWduZWQgaW50IGNvdW50ZXJzID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CisJdTMyIGNvdW50ZXJzID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CiAKLQlyZXR1cm4gKChjb3VudGVycyA+PiAxNCkgXiBjb3VudGVycykgJiAweDFmZmY7CisJcmV0dXJuICgoY291bnRlcnMgPj4gMTYpIF4gY291bnRlcnMpICYgMHhmZmZmOwogfQogCiAjZGVmaW5lIGFyY2hfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3NwaW5fbG9jayhsb2NrKQpAQCAtNDcsOSArNDcsOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5faXNfY29udGVuZGVkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKKwl1MzIgY291bnRlcnMgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotCXJldHVybiAoKChjb3VudGVycyA+PiAxNCkgLSBjb3VudGVycykgJiAweDFmZmYpID4gMTsKKwlyZXR1cm4gKCgoY291bnRlcnMgPj4gMTYpIC0gY291bnRlcnMpICYgMHhmZmZmKSA+IDE7CiB9CiAjZGVmaW5lIGFyY2hfc3Bpbl9pc19jb250ZW5kZWQJYXJjaF9zcGluX2lzX2NvbnRlbmRlZAogCkBAIC01Nyw2ICs1Nyw3IEBACiB7CiAJaW50IG15X3RpY2tldDsKIAlpbnQgdG1wOworCWludCBpbmMgPSAweDEwMDAwOwogCiAJaWYgKFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCkBAIC02NCwyNSArNjUsMjQgQEAKIAkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWFkZGl1CSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAweDQwMDAJCVxuIgorCQkiCWFkZHUJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sICVbaW5jXQkJXG4iCiAJCSIJc2MJJVtteV90aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKIAkJIgliZXF6bAklW215X3RpY2tldF0sIDFiCQkJXG4iCiAJCSIJIG5vcAkJCQkJCVxuIgotCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTQJCVxuIgotCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4MWZmZglcbiIKLQkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgorCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTYJCVxuIgorCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4ZmZmZgkJXG4iCisJCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHhmZmZmCVxuIgogCQkiCWJuZQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgNGYJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCiAJCSIyOgkJCQkJCQlcbiIKIAkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKLQkJIjQ6CWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSI0OglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweGZmZmYJCVxuIgogCQkiCXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSI2OglibmV6CSVbdGlja2V0XSwgNmIJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAxCQkJCVxuIgogCQkiCQkJCQkJCVxuIgotCQkiCWx3CSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIglsaHUJJVt0aWNrZXRdLCAlW3NlcnZpbmdfbm93X3B0cl0JCVxuIgogCQkiCWJlcQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgMmIJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCiAJCSIJYgk0YgkJCQkJXG4iCkBAIC05MCwzNiArOTAsMzMgQEAKIAkJIgkucHJldmlvdXMJCQkJCVxuIgogCQkiCS5zZXQgcG9wCQkJCQlcbiIKIAkJOiBbdGlja2V0X3B0cl0gIittIiAobG9jay0+bG9jayksCisJCSAgW3NlcnZpbmdfbm93X3B0cl0gIittIiAobG9jay0+aC5zZXJ2aW5nX25vdyksCiAJCSAgW3RpY2tldF0gIj0mciIgKHRtcCksCi0JCSAgW215X3RpY2tldF0gIj0mciIgKG15X3RpY2tldCkpOworCQkgIFtteV90aWNrZXRdICI9JnIiIChteV90aWNrZXQpCisJCTogW2luY10gInIiIChpbmMpKTsKIAl9IGVsc2UgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIJLnNldCBwdXNoCQkjIGFyY2hfc3Bpbl9sb2NrCVxuIgogCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKLQkJIglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiMToJYWRkaXUJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDB4NDAwMAkJXG4iCisJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgorCQkiCWFkZHUJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sICVbaW5jXQkJXG4iCiAJCSIJc2MJJVtteV90aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgliZXF6CSVbbXlfdGlja2V0XSwgM2YJCQlcbiIKLQkJIgkgbm9wCQkJCQkJXG4iCi0JCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNAkJXG4iCi0JCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHgxZmZmCVxuIgotCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSIJYmVxegklW215X3RpY2tldF0sIDFiCQkJXG4iCisJCSIJIHNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTYJCVxuIgorCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4ZmZmZgkJXG4iCisJCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHhmZmZmCVxuIgogCQkiCWJuZQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgNGYJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCiAJCSIyOgkJCQkJCQlcbiIKIAkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKLQkJIjM6CWIJMWIJCQkJCVxuIgotCQkiCSBsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCQkJCQkJCVxuIgogCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKIAkJIglzbGwJJVt0aWNrZXRdLCA1CQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiNjoJYm5legklW3RpY2tldF0sIDZiCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgMQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKLQkJIglsdwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSIJbGh1CSVbdGlja2V0XSwgJVtzZXJ2aW5nX25vd19wdHJdCQlcbiIKIAkJIgliZXEJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDJiCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgogCQkiCWIJNGIJCQkJCVxuIgpAQCAtMTI3LDggKzEyNCwxMCBAQAogCQkiCS5wcmV2aW91cwkJCQkJXG4iCiAJCSIJLnNldCBwb3AJCQkJCVxuIgogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKKwkJICBbc2VydmluZ19ub3dfcHRyXSAiK20iIChsb2NrLT5oLnNlcnZpbmdfbm93KSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSwKLQkJICBbbXlfdGlja2V0XSAiPSZyIiAobXlfdGlja2V0KSk7CisJCSAgW215X3RpY2tldF0gIj0mciIgKG15X3RpY2tldCkKKwkJOiBbaW5jXSAiciIgKGluYykpOwogCX0KIAogCXNtcF9sbHNjX21iKCk7CkBAIC0xMzYsNDcgKzEzNSwxNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JaW50IHRtcDsKLQotCXNtcF9sbHNjX21iKCk7Ci0KLQlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIgkJCQkjIGFyY2hfc3Bpbl91bmxvY2sJXG4iCi0JCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWFkZGl1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAxCQkJXG4iCi0JCSIJb3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgotCQkiCXhvcmkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MjAwMAkJXG4iCi0JCSIJc2MJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgliZXF6bAklW3RpY2tldF0sIDFiCQkJCVxuIgotCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKLQkJICBbdGlja2V0XSAiPSZyIiAodG1wKSk7Ci0JfSBlbHNlIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiCS5zZXQgcHVzaAkJIyBhcmNoX3NwaW5fdW5sb2NrCVxuIgotCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKLQkJIgkJCQkJCQlcbiIKLQkJIglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiMToJYWRkaXUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDEJCQlcbiIKLQkJIglvcmkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MjAwMAkJXG4iCi0JCSIJeG9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKLQkJIglzYwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWJlcXoJJVt0aWNrZXRdLCAyZgkJCQlcbiIKLQkJIgkgbm9wCQkJCQkJXG4iCi0JCSIJCQkJCQkJXG4iCi0JCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCi0JCSIyOgliCTFiCQkJCQlcbiIKLQkJIgkgbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgkucHJldmlvdXMJCQkJCVxuIgotCQkiCS5zZXQgcG9wCQkJCQlcbiIKLQkJOiBbdGlja2V0X3B0cl0gIittIiAobG9jay0+bG9jayksCi0JCSAgW3RpY2tldF0gIj0mciIgKHRtcCkpOwotCX0KKwl1bnNpZ25lZCBpbnQgc2VydmluZ19ub3cgPSBsb2NrLT5oLnNlcnZpbmdfbm93ICsgMTsKKwl3bWIoKTsKKwlsb2NrLT5oLnNlcnZpbmdfbm93ID0gKHUxNilzZXJ2aW5nX25vdzsKKwludWRnZV93cml0ZXMoKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXJjaF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWludCB0bXAsIHRtcDIsIHRtcDM7CisJaW50IGluYyA9IDB4MTAwMDA7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKQEAgLTE4NCwxMSArMTUyLDExIEBACiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiMToJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE0CQlcbiIKLQkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweDFmZmYJXG4iCi0JCSIJYW5kaQklW25vd19zZXJ2aW5nXSwgJVt0aWNrZXRdLCAweDFmZmYJXG4iCisJCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNgkJXG4iCisJCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHhmZmZmCVxuIgorCQkiCWFuZGkJJVtub3dfc2VydmluZ10sICVbdGlja2V0XSwgMHhmZmZmCVxuIgogCQkiCWJuZQklW215X3RpY2tldF0sICVbbm93X3NlcnZpbmddLCAzZglcbiIKLQkJIgkgYWRkaXUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4NDAwMAkJXG4iCisJCSIJIGFkZHUJJVt0aWNrZXRdLCAlW3RpY2tldF0sICVbaW5jXQkJXG4iCiAJCSIJc2MJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKIAkJIgliZXF6bAklW3RpY2tldF0sIDFiCQkJCVxuIgogCQkiCSBsaQklW3RpY2tldF0sIDEJCQkJXG4iCkBAIC0yMDEsMzMgKzE2OSwzMyBAQAogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSwKIAkJICBbbXlfdGlja2V0XSAiPSZyIiAodG1wMiksCi0JCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykpOworCQkgIFtub3dfc2VydmluZ10gIj0mciIgKHRtcDMpCisJCTogW2luY10gInIiIChpbmMpKTsKIAl9IGVsc2UgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIJLnNldCBwdXNoCQkjIGFyY2hfc3Bpbl90cnlsb2NrCVxuIgogCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKLQkJIglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiMToJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNAkJXG4iCi0JCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHgxZmZmCVxuIgotCQkiCWFuZGkJJVtub3dfc2VydmluZ10sICVbdGlja2V0XSwgMHgxZmZmCVxuIgorCQkiMToJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKKwkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE2CQlcbiIKKwkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweGZmZmYJXG4iCisJCSIJYW5kaQklW25vd19zZXJ2aW5nXSwgJVt0aWNrZXRdLCAweGZmZmYJXG4iCiAJCSIJYm5lCSVbbXlfdGlja2V0XSwgJVtub3dfc2VydmluZ10sIDNmCVxuIgotCQkiCSBhZGRpdQklW3RpY2tldF0sICVbdGlja2V0XSwgMHg0MDAwCQlcbiIKKwkJIgkgYWRkdQklW3RpY2tldF0sICVbdGlja2V0XSwgJVtpbmNdCQlcbiIKIAkJIglzYwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWJlcXoJJVt0aWNrZXRdLCA0ZgkJCQlcbiIKKwkJIgliZXF6CSVbdGlja2V0XSwgMWIJCQkJXG4iCiAJCSIJIGxpCSVbdGlja2V0XSwgMQkJCQlcbiIKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgogCQkiMzoJYgkyYgkJCQkJXG4iCiAJCSIJIGxpCSVbdGlja2V0XSwgMAkJCQlcbiIKLQkJIjQ6CWIJMWIJCQkJCVxuIgotCQkiCSBsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCS5wcmV2aW91cwkJCQkJXG4iCiAJCSIJLnNldCBwb3AJCQkJCVxuIgogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSwKIAkJICBbbXlfdGlja2V0XSAiPSZyIiAodG1wMiksCi0JCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykpOworCQkgIFtub3dfc2VydmluZ10gIj0mciIgKHRtcDMpCisJCTogW2luY10gInIiIChpbmMpKTsKIAl9CiAKIAlzbXBfbGxzY19tYigpOwpAQCAtMzA1LDcgKzI3Myw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRtcDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggZWUxOTdjMi4uYzUyZjM2MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTUsMTYgKzUsMjggQEAKICMgZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKICNlbmRpZgogCi10eXBlZGVmIHN0cnVjdCB7CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKwordHlwZWRlZiB1bmlvbiB7CiAJLyoKLQkgKiBiaXRzICAwLi4xMzogc2VydmluZ19ub3cKLQkgKiBiaXRzIDE0ICAgIDoganVuayBkYXRhCi0JICogYml0cyAxNS4uMjg6IHRpY2tldAorCSAqIGJpdHMgIDAuLjE1IDogc2VydmluZ19ub3cKKwkgKiBiaXRzIDE2Li4zMSA6IHRpY2tldAogCSAqLwotCXVuc2lnbmVkIGludCBsb2NrOworCXUzMiBsb2NrOworCXN0cnVjdCB7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCXUxNiB0aWNrZXQ7CisJCXUxNiBzZXJ2aW5nX25vdzsKKyNlbHNlCisJCXUxNiBzZXJ2aW5nX25vdzsKKwkJdTE2IHRpY2tldDsKKyNlbmRpZgorCX0gaDsKIH0gYXJjaF9zcGlubG9ja190OwogCi0jZGVmaW5lIF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KKyNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IC5sb2NrID0gMCB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA4M2I1NTA5Li5iYjkzN2NjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC05NSw2ICs5NSw4IEBACiB7CiAJX191MzIgcmV0dmFsOwogCisJc21wX21iX19iZWZvcmVfbGxzYygpOworCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKQEAgLTE0Nyw2ICsxNDksOCBAQAogewogCV9fdTY0IHJldHZhbDsKIAorCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKKwogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nIGR1bW15OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS9nZW5lcmljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS9nZW5lcmljLmgKaW5kZXggODI3ZGMyMi4uNjQ4ODdkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R4eDkvZ2VuZXJpYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eHg5L2dlbmVyaWMuaApAQCAtNDIsNyArNDIsNiBAQAogfTsKIGV4dGVybiBzdHJ1Y3QgdHh4OV9ib2FyZF92ZWMgKnR4eDlfYm9hcmRfdmVjOwogZXh0ZXJuIGludCAoKnR4eDlfaXJxX2Rpc3BhdGNoKShpbnQgcGVuZGluZyk7Ci1jaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CiBjb25zdCBjaGFyICpwcm9tX2dldGVudihjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgdHh4OV93ZHRfaW5pdCh1bnNpZ25lZCBsb25nIGJhc2UpOwogdm9pZCB0eHg5X3dkdF9ub3codW5zaWduZWQgbG9uZyBiYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS91YXNtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFzbS5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9tbS91YXNtLmgKcmVuYW1lIHRvIGFyY2gvbWlwcy9pbmNsdWRlL2FzbS91YXNtLmgKaW5kZXggM2QxNTNlZC4uYjk5YmQwNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3Vhc20uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFzbS5oCkBAIC05Miw5ICs5MiwxMSBAQAogSXBfdTJ1MXUzKF9zbGwpOwogSXBfdTJ1MXUzKF9zcmEpOwogSXBfdTJ1MXUzKF9zcmwpOworSXBfdTJ1MXUzKF9yb3RyKTsKIElwX3UzdTF1Mihfc3VidSk7CiBJcF91MnMzdTEoX3N3KTsKIElwXzAoX3RsYnApOworSXBfMChfdGxicik7CiBJcF8wKF90bGJ3aSk7CiBJcF8wKF90bGJ3cik7CiBJcF91M3UxdTIoX3hvcik7CkBAIC0xMjksNiArMTMxLDcgQEAKICMgZGVmaW5lIFVBU01faV9TTEwoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHNsbChidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfU1JBKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX2RzcmEoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgVUFTTV9pX1NSTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9kc3JsKGJ1ZiwgcnMsIHJ0LCBzaCkKKyMgZGVmaW5lIFVBU01faV9ST1RSKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX2Ryb3RyKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIFVBU01faV9NRkMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfZG1mYzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBVQVNNX2lfTVRDMChidWYsIHJ0LCByZC4uLikgdWFzbV9pX2RtdGMwKGJ1ZiwgcnQsIHJkKQogIyBkZWZpbmUgVUFTTV9pX0FERElVKGJ1ZiwgcnMsIHJ0LCB2YWwpIHVhc21faV9kYWRkaXUoYnVmLCBycywgcnQsIHZhbCkKQEAgLTE0Miw2ICsxNDUsNyBAQAogIyBkZWZpbmUgVUFTTV9pX1NMTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9zbGwoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgVUFTTV9pX1NSQShidWYsIHJzLCBydCwgc2gpIHVhc21faV9zcmEoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgVUFTTV9pX1NSTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9zcmwoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX1JPVFIoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfcm90cihidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfTUZDMChidWYsIHJ0LCByZC4uLikgdWFzbV9pX21mYzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBVQVNNX2lfTVRDMChidWYsIHJ0LCByZC4uLikgdWFzbV9pX210YzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBVQVNNX2lfQURESVUoYnVmLCBycywgcnQsIHZhbCkgdWFzbV9pX2FkZGl1KGJ1ZiwgcnMsIHJ0LCB2YWwpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91Y29udGV4dC5oCmluZGV4IDhhNGIyMGUuLjliYzA3YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91Y29udGV4dC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91Y29udGV4dC5oCkBAIC0xLDIxICsxIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogTG93IGxldmVsIGV4Y2VwdGlvbiBoYW5kbGluZwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBieSBSYWxmIEJhZWNobGUKLSAqLwotI2lmbmRlZiBfQVNNX1VDT05URVhUX0gKLSNkZWZpbmUgX0FTTV9VQ09OVEVYVF9ICi0KLXN0cnVjdCB1Y29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOwotCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7Ci0Jc3RhY2tfdAkJICB1Y19zdGFjazsKLQlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKLQlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKLQotI2VuZGlmIC8qIF9BU01fVUNPTlRFWFRfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Vjb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9pcnEuYyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCmluZGV4IDdiZDMyZDAuLmVlMTgwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2lycS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCkBAIC0yMCwxNyArMjAsMTcgQEAKICNpbmNsdWRlIDxhc20vamF6ei5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socjQwMzBfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhyNDAzMF9sb2NrKTsKIAogc3RhdGljIHZvaWQgZW5hYmxlX3I0MDMwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoaXJxIC0gSkFaWl9JUlFfU1RBUlQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcjQwMzBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcjQwMzBfbG9jaywgZmxhZ3MpOwogCW1hc2sgfD0gcjQwMzBfcmVhZF9yZWcxNihKQVpaX0lPX0lSUV9FTkFCTEUpOwogCXI0MDMwX3dyaXRlX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcjQwMzBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyNDAzMF9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgZGlzYWJsZV9yNDAzMF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTM4LDEwICszOCwxMCBAQAogCXVuc2lnbmVkIGludCBtYXNrID0gfigxIDw8IChpcnEgLSBKQVpaX0lSUV9TVEFSVCkpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcjQwMzBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcjQwMzBfbG9jaywgZmxhZ3MpOwogCW1hc2sgJj0gcjQwMzBfcmVhZF9yZWcxNihKQVpaX0lPX0lSUV9FTkFCTEUpOwogCXI0MDMwX3dyaXRlX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcjQwMzBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyNDAzMF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcjQwMzBfaXJxX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQppbmRleCA5MzI2YWY1Li5lZjIwOTU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKQEAgLTkzLDYgKzkzLDcgQEAKIAogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vIHJlbG9jYXRlX2tlcm5lbC5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBlYXJseV9wcmludGsubworb2JqLSQoQ09ORklHX1NQSU5MT0NLX1RFU1QpCSs9IHNwaW5sb2NrX3Rlc3QubwogCiBDRkxBR1NfY3B1LWJ1Z3M2NC5vCT0gJChzaGVsbCBpZiAkKENDKSAkKEtCVUlMRF9DRkxBR1MpIC1XYSwtbWRhZGRpIC1jIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbiBlY2hvICItREhBVkVfQVNfU0VUX0RBRERJIjsgZmkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAyYzFlMWQwLi5jYTZjODMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xODgsMTEgKzE4OCwxNSBAQAogCURFRklORShfUFRFX1RfU0laRSwgc2l6ZW9mKHB0ZV90KSk7CiAJQkxBTksoKTsKIAlERUZJTkUoX1BHRF9UX0xPRzIsIFBHRF9UX0xPRzIpOworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJREVGSU5FKF9QTURfVF9MT0cyLCBQTURfVF9MT0cyKTsKKyNlbmRpZgogCURFRklORShfUFRFX1RfTE9HMiwgUFRFX1RfTE9HMik7CiAJQkxBTksoKTsKIAlERUZJTkUoX1BHRF9PUkRFUiwgUEdEX09SREVSKTsKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCURFRklORShfUE1EX09SREVSLCBQTURfT1JERVIpOworI2VuZGlmCiAJREVGSU5FKF9QVEVfT1JERVIsIFBURV9PUkRFUik7CiAJQkxBTksoKTsKIAlERUZJTkUoX1BNRF9TSElGVCwgUE1EX1NISUZUKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCmluZGV4IGY1ZDI2NWUuLjM5MmVmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhndDY0MXh4X3RpbWVyX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soZ3Q2NDF4eF90aW1lcl9sb2NrKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3Q2NDF4eF9iYXNlX2Nsb2NrOwogCiB2b2lkIGd0NjQxeHhfc2V0X2Jhc2VfY2xvY2sodW5zaWduZWQgaW50IGNsb2NrKQpAQCAtNDksNyArNDksNyBAQAogewogCXUzMiBjdHJsOwogCi0Jc3Bpbl9sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOworCXJhd19zcGluX2xvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CiAKIAljdHJsID0gR1RfUkVBRChHVF9UQ19DT05UUk9MX09GUyk7CiAJY3RybCAmPSB+KEdUX1RDX0NPTlRST0xfRU5UQzBfTVNLIHwgR1RfVENfQ09OVFJPTF9TRUxUQzBfTVNLKTsKQEAgLTU4LDcgKzU4LDcgQEAKIAlHVF9XUklURShHVF9UQzBfT0ZTLCBkZWx0YSk7CiAJR1RfV1JJVEUoR1RfVENfQ09OVFJPTF9PRlMsIGN0cmwpOwogCi0Jc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02OCw3ICs2OCw3IEBACiB7CiAJdTMyIGN0cmw7CiAKLQlzcGluX2xvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKIAogCWN0cmwgPSBHVF9SRUFEKEdUX1RDX0NPTlRST0xfT0ZTKTsKIAljdHJsICY9IH4oR1RfVENfQ09OVFJPTF9FTlRDMF9NU0sgfCBHVF9UQ19DT05UUk9MX1NFTFRDMF9NU0spOwpAQCAtODYsNyArODYsNyBAQAogCiAJR1RfV1JJVEUoR1RfVENfQ09OVFJPTF9PRlMsIGN0cmwpOwogCi0Jc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBndDY0MXh4X3RpbWVyMF9ldmVudF9oYW5kbGVyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IDgwZTIwMmUuLmJlNWJiMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJY2FzZSBDUFVfQkNNNjM0ODoKIAljYXNlIENQVV9CQ002MzU4OgogCWNhc2UgQ1BVX0NBVklVTV9PQ1RFT046CisJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTOgogCQljcHVfd2FpdCA9IHI0a193YWl0OwogCQlicmVhazsKIApAQCAtMjg0LDYgKzI4NSwxNSBAQAogCXJldHVybiAoKGNwdV9nZXRfZnB1X2lkKCkgJiAweGZmMDApICE9IEZQSVJfSU1QX05PTkUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3Byb2JlX3ZtYml0cyhzdHJ1Y3QgY3B1aW5mb19taXBzICpjKQoreworI2lmZGVmIF9fTkVFRF9WTUJJVFNfUFJPQkUKKwl3cml0ZV9jMF9lbnRyeWhpKDB4M2ZmZmZmZmZmZmZmZTAwMFVMTCk7CisJYmFja190b19iYWNrX2MwX2hhemFyZCgpOworCWMtPnZtYml0cyA9IGZsczY0KHJlYWRfYzBfZW50cnloaSgpICYgMHgzZmZmZmZmZmZmZmZlMDAwVUxMKTsKKyNlbmRpZgorfQorCiAjZGVmaW5lIFI0S19PUFRTIChNSVBTX0NQVV9UTEIgfCBNSVBTX0NQVV80S0VYIHwgTUlQU19DUFVfNEtfQ0FDSEUgXAogCQl8IE1JUFNfQ1BVX0NPVU5URVIpCiAKQEAgLTY5MSw2ICs3MDEsMTkgQEAKIAlyZXR1cm4gY29uZmlnMyAmIE1JUFNfQ09ORl9NOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkZWNvZGVfY29uZmlnNChzdHJ1Y3QgY3B1aW5mb19taXBzICpjKQoreworCXVuc2lnbmVkIGludCBjb25maWc0OworCisJY29uZmlnNCA9IHJlYWRfYzBfY29uZmlnNCgpOworCisJaWYgKChjb25maWc0ICYgTUlQU19DT05GNF9NTVVFWFRERUYpID09IE1JUFNfQ09ORjRfTU1VRVhUREVGX01NVVNJWkVFWFQKKwkgICAgJiYgY3B1X2hhc190bGIpCisJCWMtPnRsYnNpemUgKz0gKGNvbmZpZzQgJiBNSVBTX0NPTkY0X01NVVNJWkVFWFQpICogMHg0MDsKKworCXJldHVybiBjb25maWc0ICYgTUlQU19DT05GX007Cit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBkZWNvZGVfY29uZmlncyhzdHJ1Y3QgY3B1aW5mb19taXBzICpjKQogewogCWludCBvazsKQEAgLTcwOSw2ICs3MzIsOCBAQAogCQlvayA9IGRlY29kZV9jb25maWcyKGMpOwogCWlmIChvaykKIAkJb2sgPSBkZWNvZGVfY29uZmlnMyhjKTsKKwlpZiAob2spCisJCW9rID0gZGVjb2RlX2NvbmZpZzQoYyk7CiAKIAltaXBzX3Byb2JlX3dhdGNoX3JlZ2lzdGVycyhjKTsKIH0KQEAgLTcyMiw5ICs3NDcsNiBAQAogCQlfX2NwdV9uYW1lW2NwdV0gPSAiTUlQUyA0S2MiOwogCQlicmVhazsKIAljYXNlIFBSSURfSU1QXzRLRUM6Ci0JCWMtPmNwdXR5cGUgPSBDUFVfNEtFQzsKLQkJX19jcHVfbmFtZVtjcHVdID0gIk1JUFMgNEtFYyI7Ci0JCWJyZWFrOwogCWNhc2UgUFJJRF9JTVBfNEtFQ1IyOgogCQljLT5jcHV0eXBlID0gQ1BVXzRLRUM7CiAJCV9fY3B1X25hbWVbY3B1XSA9ICJNSVBTIDRLRWMiOwpAQCAtODkwLDEyICs5MTIsMTggQEAKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjM4WFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ04zMVhYOgogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NOMzBYWDoKKwkJYy0+Y3B1dHlwZSA9IENQVV9DQVZJVU1fT0NURU9OOworCQlfX2NwdV9uYW1lW2NwdV0gPSAiQ2F2aXVtIE9jdGVvbiI7CisJCWdvdG8gcGxhdGZvcm07CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ041OFhYOgogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NONTZYWDoKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjUwWFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ041MlhYOgotCQljLT5jcHV0eXBlID0gQ1BVX0NBVklVTV9PQ1RFT047Ci0JCV9fY3B1X25hbWVbY3B1XSA9ICJDYXZpdW0gT2N0ZW9uIjsKKwkJYy0+Y3B1dHlwZSA9IENQVV9DQVZJVU1fT0NURU9OX1BMVVM7CisJCV9fY3B1X25hbWVbY3B1XSA9ICJDYXZpdW0gT2N0ZW9uKyI7CitwbGF0Zm9ybToKKwkJaWYgKGNwdSA9PSAwKQorCQkJX19lbGZfcGxhdGZvcm0gPSAib2N0ZW9uIjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5rbm93biBPY3Rlb24gY2hpcCFcbiIpOwpAQCAtOTA1LDYgKzkzMyw3IEBACiB9CiAKIGNvbnN0IGNoYXIgKl9fY3B1X25hbWVbTlJfQ1BVU107Citjb25zdCBjaGFyICpfX2VsZl9wbGF0Zm9ybTsKIAogX19jcHVpbml0IHZvaWQgY3B1X3Byb2JlKHZvaWQpCiB7CkBAIC05NjksNiArOTk4LDggQEAKIAkJYy0+c3JzZXRzID0gKChyZWFkX2MwX3Nyc2N0bCgpID4+IDI2KSAmIDB4MGYpICsgMTsKIAllbHNlCiAJCWMtPnNyc2V0cyA9IDE7CisKKwljcHVfcHJvYmVfdm1iaXRzKGMpOwogfQogCiBfX2NwdWluaXQgdm9pZCBjcHVfcmVwb3J0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYwppbmRleCA2OGIwNjcwLi5lOWU2NGUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoYW5rcyBnb2VzIHRvIFN0ZXZlbiBSb3N0ZWR0IGZvciB3cml0aW5nIHRoZSBvcmlnaW5hbCB4ODYgdmVyc2lvbi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCmluZGV4IDAxYzA4ODUuLjI3Nzk5MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKQEAgLTI5LDcgKzI5LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IGk4MjU5QV9hdXRvX2VvaSA9IC0xOwotREVGSU5FX1NQSU5MT0NLKGk4MjU5QV9sb2NrKTsKK0RFRklORV9SQVdfU1BJTkxPQ0soaTgyNTlBX2xvY2spOwogc3RhdGljIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBzdGF0aWMgdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogc3RhdGljIHZvaWQgbWFza19hbmRfYWNrXzgyNTlBKHVuc2lnbmVkIGludCBpcnEpOwpAQCAtNjUsMTMgKzY1LDEzIEBACiAKIAlpcnEgLT0gSTgyNTlBX0lSUV9CQVNFOwogCW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJY2FjaGVkX2lycV9tYXNrIHw9IG1hc2s7CiAJaWYgKGlycSAmIDgpCiAJCW91dGIoY2FjaGVkX3NsYXZlX21hc2ssIFBJQ19TTEFWRV9JTVIpOwogCWVsc2UKIAkJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC04MSwxMyArODEsMTMgQEAKIAogCWlycSAtPSBJODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IH4oMSA8PCBpcnEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAljYWNoZWRfaXJxX21hc2sgJj0gbWFzazsKIAlpZiAoaXJxICYgOCkKIAkJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CiAJZWxzZQogCQlvdXRiKGNhY2hlZF9tYXN0ZXJfbWFzaywgUElDX01BU1RFUl9JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSkKQEAgLTk4LDEyICs5OCwxMiBAQAogCiAJaXJxIC09IEk4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWlmIChpcnEgPCA4KQogCQlyZXQgPSBpbmIoUElDX01BU1RFUl9DTUQpICYgbWFzazsKIAllbHNlCiAJCXJldCA9IGluYihQSUNfU0xBVkVfQ01EKSAmIChtYXNrID4+IDgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAlpcnEgLT0gSTgyNTlBX0lSUV9CQVNFOwogCWlycW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBMaWdodHdlaWdodCBzcHVyaW91cyBJUlEgZGV0ZWN0aW9uLiBXZSBkbyBub3Qgd2FudAogCSAqIHRvIG92ZXJkbyBzcHVyaW91cyBJUlEgaGFuZGxpbmcgLSBpdCdzIHVzdWFsbHkgYSBzaWduCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJb3V0YigweDYwK2lycSwgUElDX01BU1RFUl9DTUQpOwkvKiAnU3BlY2lmaWMgRU9JIHRvIG1hc3RlciAqLwogCX0KIAlzbXRjX2ltX2Fja19pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCXJldHVybjsKIAogc3B1cmlvdXNfODI1OUFfaXJxOgpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIAlpODI1OUFfYXV0b19lb2kgPSBhdXRvX2VvaTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCW91dGIoMHhmZiwgUElDX01BU1RFUl9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0xICovCiAJb3V0YigweGZmLCBQSUNfU0xBVkVfSU1SKTsJLyogbWFzayBhbGwgb2YgODI1OUEtMiAqLwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsgLyogcmVzdG9yZSBtYXN0ZXIgSVJRIG1hc2sgKi8KIAlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsJICAvKiByZXN0b3JlIHNsYXZlIElSUSBtYXNrICovCiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ3Q2NDF4eC5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ3Q2NDF4eC5jCmluZGV4IGViY2M1ZjcuLjQyZWY4MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWd0NjQxeHguYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1ndDY0MXh4LmMKQEAgLTI3LDE4ICsyNywxOCBAQAogCiAjZGVmaW5lIEdUNjQxWFhfSVJRX1RPX0JJVChpcnEpCSgxVSA8PCAoaXJxIC0gR1Q2NDFYWF9JUlFfQkFTRSkpCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Q2NDF4eF9pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhndDY0MXh4X2lycV9sb2NrKTsKIAogc3RhdGljIHZvaWQgYWNrX2d0NjQxeHhfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgY2F1c2U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogCWNhdXNlID0gR1RfUkVBRChHVF9JTlRSQ0FVU0VfT0ZTKTsKIAljYXVzZSAmPSB+R1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUkNBVVNFX09GUywgY2F1c2UpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX2d0NjQxeHhfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC00NiwxMSArNDYsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBtYXNrOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gR1RfUkVBRChHVF9JTlRSTUFTS19PRlMpOwogCW1hc2sgJj0gfkdUNjQxWFhfSVJRX1RPX0JJVChpcnEpOwogCUdUX1dSSVRFKEdUX0lOVFJNQVNLX09GUywgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hc2tfYWNrX2d0NjQxeHhfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC01OCw3ICs1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgY2F1c2UsIG1hc2s7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBHVF9SRUFEKEdUX0lOVFJNQVNLX09GUyk7CiAJbWFzayAmPSB+R1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUk1BU0tfT0ZTLCBtYXNrKTsKQEAgLTY2LDcgKzY2LDcgQEAKIAljYXVzZSA9IEdUX1JFQUQoR1RfSU5UUkNBVVNFX09GUyk7CiAJY2F1c2UgJj0gfkdUNjQxWFhfSVJRX1RPX0JJVChpcnEpOwogCUdUX1dSSVRFKEdUX0lOVFJDQVVTRV9PRlMsIGNhdXNlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgdW5tYXNrX2d0NjQxeHhfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC03NCwxMSArNzQsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBtYXNrOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gR1RfUkVBRChHVF9JTlRSTUFTS19PRlMpOwogCW1hc2sgfD0gR1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUk1BU0tfT0ZTLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBndDY0MXh4X2lycV9jaGlwID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwppbmRleCBmMDQyNTYzLi5iZGU3OWVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMKaW5kZXggMGE5Y2ZkYi4uNjg1MWZjOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUworKysgYi9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCkBAIC02LDcgKzYsNyBAQAogICogbW9yZSBkZXRhaWxzLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIERTTGFiLCBMYW56aG91IFVuaXZlcnNpdHksIENoaW5hCi0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9vY3Rlb25fc3dpdGNoLlMgYi9hcmNoL21pcHMva2VybmVsL29jdGVvbl9zd2l0Y2guUwppbmRleCAzOTUyYjgzLi5kZDE4YjI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL29jdGVvbl9zd2l0Y2guUworKysgYi9hcmNoL21pcHMva2VybmVsL29jdGVvbl9zd2l0Y2guUwpAQCAtNTAwLDQgKzUwMCwzIEBACiAJIG5vcAogCUVORChvY3Rlb25fbXVsdF9yZXN0b3JlKQogCS5zZXQgcG9wCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKaW5kZXggMzY0ZjA2Ni4uZGNhZWQxYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NwaW5sb2NrX3Rlc3QuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3BpbmxvY2tfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjExMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL3NwaW5sb2NrX3Rlc3QuYwpAQCAtMCwwICsxLDE0MSBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKworc3RhdGljIGludCBzc19nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJa3RpbWVfdCBzdGFydCwgZmluaXNoOworCWludCBsb29wczsKKwlpbnQgY29udDsKKwlERUZJTkVfUkFXX1NQSU5MT0NLKHNzX3NwaW4pOworCisJbG9vcHMgPSAxMDAwMDAwOworCWNvbnQgPSAxOworCisJc3RhcnQgPSBrdGltZV9nZXQoKTsKKworCXdoaWxlIChjb250KSB7CisJCXJhd19zcGluX2xvY2soJnNzX3NwaW4pOworCQlsb29wcy0tOworCQlpZiAobG9vcHMgPT0gMCkKKwkJCWNvbnQgPSAwOworCQlyYXdfc3Bpbl91bmxvY2soJnNzX3NwaW4pOworCX0KKworCWZpbmlzaCA9IGt0aW1lX2dldCgpOworCisJKnZhbCA9IGt0aW1lX3VzX2RlbHRhKGZpbmlzaCwgc3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGZvcHNfc3MsIHNzX2dldCwgTlVMTCwgIiVsbHVcbiIpOworCisKKworc3RydWN0IHNwaW5fbXVsdGlfc3RhdGUgeworCXJhd19zcGlubG9ja190IGxvY2s7CisJYXRvbWljX3Qgc3RhcnRfd2FpdDsKKwlhdG9taWNfdCBlbnRlcl93YWl0OworCWF0b21pY190IGV4aXRfd2FpdDsKKwlpbnQgbG9vcHM7Cit9OworCitzdHJ1Y3Qgc3Bpbl9tdWx0aV9wZXJfdGhyZWFkIHsKKwlzdHJ1Y3Qgc3Bpbl9tdWx0aV9zdGF0ZSAqc3RhdGU7CisJa3RpbWVfdCBzdGFydDsKK307CisKK3N0YXRpYyBpbnQgbXVsdGlfb3RoZXIodm9pZCAqZGF0YSkKK3sKKwlpbnQgbG9vcHM7CisJaW50IGNvbnQ7CisJc3RydWN0IHNwaW5fbXVsdGlfcGVyX3RocmVhZCAqcHQgPSBkYXRhOworCXN0cnVjdCBzcGluX211bHRpX3N0YXRlICpzID0gcHQtPnN0YXRlOworCisJbG9vcHMgPSBzLT5sb29wczsKKwljb250ID0gMTsKKworCWF0b21pY19kZWMoJnMtPmVudGVyX3dhaXQpOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZzLT5lbnRlcl93YWl0KSkKKwkJOyAvKiBzcGluICovCisKKwlwdC0+c3RhcnQgPSBrdGltZV9nZXQoKTsKKworCWF0b21pY19kZWMoJnMtPnN0YXJ0X3dhaXQpOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZzLT5zdGFydF93YWl0KSkKKwkJOyAvKiBzcGluICovCisKKwl3aGlsZSAoY29udCkgeworCQlyYXdfc3Bpbl9sb2NrKCZzLT5sb2NrKTsKKwkJbG9vcHMtLTsKKwkJaWYgKGxvb3BzID09IDApCisJCQljb250ID0gMDsKKwkJcmF3X3NwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKwl9CisKKwlhdG9taWNfZGVjKCZzLT5leGl0X3dhaXQpOworCXdoaWxlIChhdG9taWNfcmVhZCgmcy0+ZXhpdF93YWl0KSkKKwkJOyAvKiBzcGluICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCWt0aW1lX3QgZmluaXNoOworCXN0cnVjdCBzcGluX211bHRpX3N0YXRlIG1zOworCXN0cnVjdCBzcGluX211bHRpX3Blcl90aHJlYWQgdDEsIHQyOworCisJbXMubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCgibXVsdGlfZ2V0Iik7CisJbXMubG9vcHMgPSAxMDAwMDAwOworCisJYXRvbWljX3NldCgmbXMuc3RhcnRfd2FpdCwgMik7CisJYXRvbWljX3NldCgmbXMuZW50ZXJfd2FpdCwgMik7CisJYXRvbWljX3NldCgmbXMuZXhpdF93YWl0LCAyKTsKKwl0MS5zdGF0ZSA9ICZtczsKKwl0Mi5zdGF0ZSA9ICZtczsKKworCWt0aHJlYWRfcnVuKG11bHRpX290aGVyLCAmdDIsICJtdWx0aV9nZXQiKTsKKworCW11bHRpX290aGVyKCZ0MSk7CisKKwlmaW5pc2ggPSBrdGltZV9nZXQoKTsKKworCSp2YWwgPSBrdGltZV91c19kZWx0YShmaW5pc2gsIHQxLnN0YXJ0KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShmb3BzX211bHRpLCBtdWx0aV9nZXQsIE5VTEwsICIlbGx1XG4iKTsKKworCitleHRlcm4gc3RydWN0IGRlbnRyeSAqbWlwc19kZWJ1Z2ZzX2RpcjsKK3N0YXRpYyBpbnQgX19pbml0IHNwaW5sb2NrX3Rlc3Qodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCisJaWYgKCFtaXBzX2RlYnVnZnNfZGlyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzcGluX3NpbmdsZSIsIFNfSVJVR08sCisJCQkJbWlwc19kZWJ1Z2ZzX2RpciwgTlVMTCwKKwkJCQkmZm9wc19zcyk7CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzcGluX211bHRpIiwgU19JUlVHTywKKwkJCQltaXBzX2RlYnVnZnNfZGlyLCBOVUxMLAorCQkJCSZmb3BzX211bHRpKTsKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoc3BpbmxvY2tfdGVzdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggMzM4ZGZlOC4uNGUwMGY5YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS91YXNtLmg+CiAKIGV4dGVybiB2b2lkIGNoZWNrX3dhaXQodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIHI0a193YWl0KHZvaWQpOwpAQCAtMTI3MSwyMSArMTI3MiwyNSBAQAogdW5zaWduZWQgbG9uZyBleGNlcHRpb25faGFuZGxlcnNbMzJdOwogdW5zaWduZWQgbG9uZyB2aV9oYW5kbGVyc1s2NF07CiAKLS8qCi0gKiBBcyBhIHNpZGUgZWZmZWN0IG9mIHRoZSB3YXkgdGhpcyBpcyBpbXBsZW1lbnRlZCB3ZSdyZSBsaW1pdGVkCi0gKiB0byBpbnRlcnJ1cHQgaGFuZGxlcnMgaW4gdGhlIGFkZHJlc3MgcmFuZ2UgZnJvbQotICogS1NFRzAgPD0geCA8IEtTRUcwICsgMjU2bWIgb24gdGhlIE5ldmFkYS4gIE9oIHdlbGwgLi4uCi0gKi8KLXZvaWQgKnNldF9leGNlcHRfdmVjdG9yKGludCBuLCB2b2lkICphZGRyKQordm9pZCBfX2luaXQgKnNldF9leGNlcHRfdmVjdG9yKGludCBuLCB2b2lkICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgaGFuZGxlciA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOwogCXVuc2lnbmVkIGxvbmcgb2xkX2hhbmRsZXIgPSBleGNlcHRpb25faGFuZGxlcnNbbl07CiAKIAlleGNlcHRpb25faGFuZGxlcnNbbl0gPSBoYW5kbGVyOwogCWlmIChuID09IDAgJiYgY3B1X2hhc19kaXZlYykgewotCQkqKHUzMiAqKShlYmFzZSArIDB4MjAwKSA9IDB4MDgwMDAwMDAgfAotCQkJCQkgICgweDAzZmZmZmZmICYgKGhhbmRsZXIgPj4gMikpOwotCQlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UoZWJhc2UgKyAweDIwMCwgZWJhc2UgKyAweDIwNCk7CisJCXVuc2lnbmVkIGxvbmcganVtcF9tYXNrID0gfigoMSA8PCAyOCkgLSAxKTsKKwkJdTMyICpidWYgPSAodTMyICopKGViYXNlICsgMHgyMDApOworCQl1bnNpZ25lZCBpbnQgazAgPSAyNjsKKwkJaWYgKChoYW5kbGVyICYganVtcF9tYXNrKSA9PSAoKGViYXNlICsgMHgyMDApICYganVtcF9tYXNrKSkgeworCQkJdWFzbV9pX2ooJmJ1ZiwgaGFuZGxlciAmIH5qdW1wX21hc2spOworCQkJdWFzbV9pX25vcCgmYnVmKTsKKwkJfSBlbHNlIHsKKwkJCVVBU01faV9MQSgmYnVmLCBrMCwgaGFuZGxlcik7CisJCQl1YXNtX2lfanIoJmJ1ZiwgazApOworCQkJdWFzbV9pX25vcCgmYnVmKTsKKwkJfQorCQlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UoZWJhc2UgKyAweDIwMCwgKHVuc2lnbmVkIGxvbmcpYnVmKTsKIAl9CiAJcmV0dXJuICh2b2lkICopb2xkX2hhbmRsZXI7CiB9CkBAIC0xNTAxLDYgKzE1MDYsNyBAQAogCQkJY3AwX3BlcmZjb3VudF9pcnEgPSAtMTsKIAl9IGVsc2UgewogCQljcDBfY29tcGFyZV9pcnEgPSBDUDBfTEVHQUNZX0NPTVBBUkVfSVJROworCQljcDBfY29tcGFyZV9pcnFfc2hpZnQgPSBjcDBfY29tcGFyZV9pcnE7CiAJCWNwMF9wZXJmY291bnRfaXJxID0gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCA2MDQ3NzUyLi4yYmQyMTUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFzYXQvcGljdnVlLmggYi9hcmNoL21pcHMvbGFzYXQvcGljdnVlLmgKaW5kZXggOTFkZjU1My4uMmYwNzU3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZS5oCisrKyBiL2FyY2gvbWlwcy9sYXNhdC9waWN2dWUuaApAQCAtNDIsNCArNDIsMyBAQAogCiB2b2lkIHB2Y19jbGVhcih2b2lkKTsKIHZvaWQgcHZjX2hvbWUodm9pZCk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY21kbGluZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKaW5kZXggN2FkNDdmMi4uMWEwNmRlZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIEF1dGhvcjogRnV4aW4gWmhhbmcsIHpoYW5nZnhAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0yMSwxMiArMjEsMTEgQEAKIAogI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKLWludCBwcm9tX2FyZ2M7Ci0vKiBwbW9uIHBhc3NlcyBhcmd1bWVudHMgaW4gMzJiaXQgcG9pbnRlcnMgKi8KLWludCAqX3Byb21fYXJndjsKLQogdm9pZCBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKKwlpbnQgcHJvbV9hcmdjOworCS8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLworCWludCAqX3Byb21fYXJndjsKIAlpbnQgaTsKIAlsb25nIGw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYwppbmRleCBiNDk0ODVmLi5iM2ZkNWVhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2FjYy5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCmluZGV4IDc0ZjljNTkuLmVhZjhiODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2VoY2kuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaWRlLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaWRlLmMKaW5kZXggM2Y2MTU5NC4uOWE5NmI1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lkZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMKaW5kZXggYjZmMTdmNS4uZjVjMDgxOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lzYS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfbWZncHQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCmluZGV4IDZjYjQ0ZGIuLjhjODA3YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yOiBZYW5odWEsIHlhbmhAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSB6aGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IHpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFJlZmVyZW5jZTogQU1EIEdlb2RlKFRNKSBDUzU1MzYgQ29tcGFuaW9uIERldmljZSBEYXRhIEJvb2sKICAqCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYwppbmRleCA4ZmRiMDJiLi5kYjU5MDBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9vaGNpLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X3BjaS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X3BjaS5jCmluZGV4IGUyM2YzZDcuLjZkZmVhYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfcGNpLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMKaW5kZXggMjNlN2E4Zi4uYTcxNzM2ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDkgUGhpbGlwcGUgVmFjaG9uIDxwaGlsaXBwZUBjb3dwaWcuY2E+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA5IExlbW90ZSBJbmMuCi0gKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYwppbmRleCAxOTZkOTQ3Li5hZTRjZmY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKQEAgLTksOCArOSw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CiAgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjMsMTMgKzIzLDEwIEBACiAKICNpbmNsdWRlIDxsb29uZ3Nvbi5oPgogCi11bnNpZ25lZCBsb25nIGJ1c19jbG9jaywgY3B1X2Nsb2NrX2ZyZXE7Cit1bnNpZ25lZCBsb25nIGNwdV9jbG9ja19mcmVxOwogRVhQT1JUX1NZTUJPTChjcHVfY2xvY2tfZnJlcSk7CiB1bnNpZ25lZCBsb25nIG1lbXNpemUsIGhpZ2htZW1zaXplOwogCi0vKiBwbW9uIHBhc3NlcyBhcmd1bWVudHMgaW4gMzJiaXQgcG9pbnRlcnMgKi8KLWludCAqX3Byb21fZW52cDsKLQogI2RlZmluZSBwYXJzZV9ldmVuX2VhcmxpZXIocmVzLCBvcHRpb24sIHApCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaWYgKHN0cm5jbXAob3B0aW9uLCAoY2hhciAqKXAsIHN0cmxlbihvcHRpb24pKSA9PSAwKQkJXApAQCAtMzksNiArMzYsMTAgQEAKIAogdm9pZCBfX2luaXQgcHJvbV9pbml0X2Vudih2b2lkKQogeworCS8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLworCWludCAqX3Byb21fZW52cDsKKwl1bnNpZ25lZCBsb25nIGJ1c19jbG9jazsKKwl1bnNpZ25lZCBpbnQgcHJvY2Vzc29yX2lkOwogCWxvbmcgbDsKIAogCS8qIGZpcm13YXJlIGFyZ3VtZW50cyBhcmUgaW5pdGlhbGl6ZWQgaW4gaGVhZC5TICovCkBAIC01NSw2ICs1NiwyMiBAQAogCX0KIAlpZiAobWVtc2l6ZSA9PSAwKQogCQltZW1zaXplID0gMjU2OworCWlmIChidXNfY2xvY2sgPT0gMCkKKwkJYnVzX2Nsb2NrID0gNjYwMDAwMDA7CisJaWYgKGNwdV9jbG9ja19mcmVxID09IDApIHsKKwkJcHJvY2Vzc29yX2lkID0gKCZjdXJyZW50X2NwdV9kYXRhKS0+cHJvY2Vzc29yX2lkOworCQlzd2l0Y2ggKHByb2Nlc3Nvcl9pZCAmIFBSSURfUkVWX01BU0spIHsKKwkJY2FzZSBQUklEX1JFVl9MT09OR1NPTjJFOgorCQkJY3B1X2Nsb2NrX2ZyZXEgPSA1MzMwODAwMDA7CisJCQlicmVhazsKKwkJY2FzZSBQUklEX1JFVl9MT09OR1NPTjJGOgorCQkJY3B1X2Nsb2NrX2ZyZXEgPSA3OTcwMDAwMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNwdV9jbG9ja19mcmVxID0gMTAwMDAwMDAwOworCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlwcl9pbmZvKCJidXNjbG9jaz0lbGQsIGNwdWNsb2NrPSVsZCwgbWVtc2l6ZT0lbGQsIGhpZ2htZW1zaXplPSVsZFxuIiwKIAkJYnVzX2Nsb2NrLCBjcHVfY2xvY2tfZnJlcSwgbWVtc2l6ZSwgaGlnaG1lbXNpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYwppbmRleCBhMmFiZDkzLi4xOWQzNDE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jCmluZGV4IDBlZDUyYjMuLjg1M2YxODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA5IFpoYW5nIExlIDxyMGJlcnR6QGdlbnRvby5vcmc+CiAgKgpAQCAtMzUsNiArMzUsMTAgQEAKIAlyZXR1cm4gc3lzdGVtX3R5cGVzW21pcHNfbWFjaHR5cGVdOwogfQogCit2b2lkIF9fd2VhayBfX2luaXQgbWFjaF9wcm9tX2luaXRfbWFjaHR5cGUodm9pZCkKK3sKK30KKwogdm9pZCBfX2luaXQgcHJvbV9pbml0X21hY2h0eXBlKHZvaWQpCiB7CiAJY2hhciAqcCwgc3RyW01BQ0hUWVBFX0xFTl07CkBAIC00Myw4ICs0NywxMCBAQAogCW1pcHNfbWFjaHR5cGUgPSBMT09OR1NPTl9NQUNIVFlQRTsKIAogCXAgPSBzdHJzdHIoYXJjc19jbWRsaW5lLCAibWFjaHR5cGU9Iik7Ci0JaWYgKCFwKQorCWlmICghcCkgeworCQltYWNoX3Byb21faW5pdF9tYWNodHlwZSgpOwogCQlyZXR1cm47CisJfQogCXAgKz0gc3RybGVuKCJtYWNodHlwZT0iKTsKIAlzdHJuY3B5KHN0ciwgcCwgTUFDSFRZUEVfTEVOKTsKIAlwID0gc3Ryc3RyKHN0ciwgIiAiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWVtLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jCmluZGV4IGNlYWNkMDkuLmVjMmY3OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWVtLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYwpAQCAtMTYsMTAgKzE2LDExIEBACiAKIHZvaWQgX19pbml0IHByb21faW5pdF9tZW1vcnkodm9pZCkKIHsKLSAgICBhZGRfbWVtb3J5X3JlZ2lvbigweDAsIChtZW1zaXplIDw8IDIwKSwgQk9PVF9NRU1fUkFNKTsKKwlhZGRfbWVtb3J5X3JlZ2lvbigweDAsIChtZW1zaXplIDw8IDIwKSwgQk9PVF9NRU1fUkFNKTsKIAotICAgIGFkZF9tZW1vcnlfcmVnaW9uKG1lbXNpemUgPDwgMjAsIExPT05HU09OX1BDSV9NRU1fU1RBUlQgLSAobWVtc2l6ZSA8PAotCQkJICAgIDIwKSwgQk9PVF9NRU1fUkVTRVJWRUQpOworCWFkZF9tZW1vcnlfcmVnaW9uKG1lbXNpemUgPDwgMjAsIExPT05HU09OX1BDSV9NRU1fU1RBUlQgLSAobWVtc2l6ZSA8PAorCQkJCTIwKSwgQk9PVF9NRU1fUkVTRVJWRUQpOworCiAjaWZkZWYgQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHCiAJewogCQlpbnQgYml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbGF0Zm9ybS5jCmluZGV4IGJlODE3NzcuLmVkMDA3YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BsYXRmb3JtLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYwppbmRleCBiNjI1ZmVjLi42YzFmZDkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BtLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jCkBAIC0yLDcgKzIsNyBAQAogICogbG9vbmdzb24tc3BlY2lmaWMgc3VzcGVuZCBzdXBwb3J0CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqICBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcmVzZXQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcmVzZXQuYwppbmRleCBkNTdmMTcxLi40YmQ5YzE4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jCkBAIC02LDggKzYsOCBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKICAqIEF1dGhvcjogRnV4aW4gWmhhbmcsIHpoYW5nZnhAbGVtb3RlLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLiAmIEluc3RpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQotICogQXV0aG9yOiBaaGFuZ2ppbiBXdSwgd3V6akBsZW1vdGUuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFpoYW5namluIFd1LCB3dXpoYW5namluQGdtYWlsLmNvbQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CkBAIC0yNSwxOCArMjUsMjYgQEAKIAkoKHZvaWQgKCopKHZvaWQpKWlvcmVtYXBfbm9jYWNoZShMT09OR1NPTl9CT09UX0JBU0UsIDQpKSAoKTsKIH0KIAotc3RhdGljIHZvaWQgbG9vbmdzb25faGFsdCh2b2lkKQorc3RhdGljIHZvaWQgbG9vbmdzb25fcG93ZXJvZmYodm9pZCkKIHsKIAltYWNoX3ByZXBhcmVfc2h1dGRvd24oKTsKLQl3aGlsZSAoMSkKLQkJOworCXVucmVhY2hhYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvb25nc29uX2hhbHQodm9pZCkKK3sKKwlwcl9ub3RpY2UoIlxuXG4qKiBZb3UgY2FuIHNhZmVseSB0dXJuIG9mZiB0aGUgcG93ZXIgbm93ICoqXG5cbiIpOworCXdoaWxlICgxKSB7CisJCWlmIChjcHVfd2FpdCkKKwkJCWNwdV93YWl0KCk7CisJfQogfQogCiBzdGF0aWMgaW50IF9faW5pdCBtaXBzX3JlYm9vdF9zZXR1cCh2b2lkKQogewogCV9tYWNoaW5lX3Jlc3RhcnQgPSBsb29uZ3Nvbl9yZXN0YXJ0OwogCV9tYWNoaW5lX2hhbHQgPSBsb29uZ3Nvbl9oYWx0OwotCXBtX3Bvd2VyX29mZiA9IGxvb25nc29uX2hhbHQ7CisJcG1fcG93ZXJfb2ZmID0gbG9vbmdzb25fcG93ZXJvZmY7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3NlcmlhbC5jCmluZGV4IDIzYjY2YTUuLjc1ODA4NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCiAgKiBBdXRob3I6IFlhbiBodWEgKHlhbmh1YUBsZW1vdGUuY29tKQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiAod3V6akBsZW1vdGUuY29tKQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiAod3V6aGFuZ2ppbkBnbWFpbC5jb20pCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jCmluZGV4IDM1ZjBiNjYuLjlmZGQwMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jCkBAIC0yLDggKzIsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLiAmIEluc3RpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQogICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi91YXJ0X2Jhc2UuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKaW5kZXggNzhmZjY2YS4uZDY5ZWE1NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi91YXJ0X2Jhc2UuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3VhcnRfYmFzZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9yZXNldC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYwppbmRleCBmYzE2YzY3Li5iYzM5ZWM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMKQEAgLTEsOCArMSw4IEBACiAvKiBCb2FyZC1zcGVjaWZpYyByZWJvb3Qvc2h1dGRvd24gcm91dGluZXMKICAqIENvcHlyaWdodCAoYykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKaW5kZXggNGQ4NGIyNy4uODY5OWE1MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgbGVtb3RlIGxvb25nc29uMmYgZmFtaWx5IG1hY2hpbmVzCiAjCiAKLW9iai15ICs9IGlycS5vIHJlc2V0Lm8gZWNfa2IzMzEwYi5vCitvYmoteSArPSBtYWNodHlwZS5vIGlycS5vIHJlc2V0Lm8gZWNfa2IzMzEwYi5vCiAKICMKICMgU3VzcGVuZCBTdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5jCmluZGV4IDRkODQxMTEuLjY0MDU3MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5jCkBAIC03NSw2ICs3NSw4IEBACiAJCXVkZWxheShFQ19SRUdfREVMQVkpOwogCX0KIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRfYWNjZXNzX2xvY2ssIGZsYWdzKTsKKwogCWlmICh0aW1lb3V0IDw9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZGVhZGFibGUgZXJyb3IgOiB0aW1lb3V0Li4uXG4iLCBfX2Z1bmNfXyk7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC04Myw4ICs4NSw2IEBACiAJCQkgICAiKCV4LyVkKWVjIGlzc3VlZCBjb21tYW5kICVkIHN0YXR1cyA6IDB4JXhcbiIsCiAJCQkgICB0aW1lb3V0LCBFQ19DTURfVElNRU9VVCAtIHRpbWVvdXQsIGNtZCwgc3RhdHVzKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRfYWNjZXNzX2xvY2ssIGZsYWdzKTsKLQogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlY19xdWVyeV9zZXEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvaXJxLmMKaW5kZXggNzdkMzJmOS4uODgyZGZjZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvaXJxLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYwpAQCAtMzgsNyArMzgsNyBAQAogCWlycSA9IC0xOwogCiAJaWYgKChMT09OR1NPTl9JTlRJU1IgJiBMT09OR1NPTl9JTlRFTikgJiBMT09OR1NPTl9JTlRfQklUX0lOVDApIHsKLQkJc3Bpbl9sb2NrKCZpODI1OUFfbG9jayk7CisJCXJhd19zcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKIAkJaXNyID0gaW5iKFBJQ19NQVNURVJfQ01EKSAmCiAJCQl+aW5iKFBJQ19NQVNURVJfSU1SKSAmIH4oMSA8PCBQSUNfQ0FTQ0FERV9JUik7CiAJCWlmICghaXNyKQpAQCAtNTYsNyArNTYsNyBAQAogCQkJaWYgKH5pbmIoUElDX01BU1RFUl9JU1IpICYgMHg4MCkKIAkJCQlpcnEgPSAtMTsKIAkJfQotCQlzcGluX3VubG9jaygmaTgyNTlBX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKIAl9CiAKIAlyZXR1cm4gaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9tYWNodHlwZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9tYWNodHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NjBhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL21hY2h0eXBlLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorCit2b2lkIF9faW5pdCBtYWNoX3Byb21faW5pdF9tYWNodHlwZSh2b2lkKQoreworCS8qIFdlIHNoYXJlIHRoZSBzYW1lIGtlcm5lbCBpbWFnZSBmaWxlIGFtb25nIExlbW90ZSAyRiBmYW1pbHkKKwkgKiBvZiBtYWNoaW5lcywgYW5kIHByb3ZpZGUgdGhlIG1hY2h0eXBlPSBrZXJuZWwgY29tbWFuZCBsaW5lCisJICogdG8gdXNlcnMgdG8gaW5kaWNhdGUgdGhlaXIgbWFjaGluZSwgdGhpcyBjb21tYW5kIGxpbmUgd2lsbAorCSAqIGJlIHBhc3NlZCBieSB0aGUgbGF0ZXN0IFBNT04gYXV0b21hdGljYWxseS4gYW5kIGZvcnR1bmF0ZWx5LAorCSAqIHVwIHRvIG5vdywgd2UgY2FuIGdldCB0aGUgbWFjaGluZSB0eXBlIGZyb20gdGhlIFBNT05fVkVSPQorCSAqIGNvbW1hbmRsaW5lIGRpcmVjdGx5IGV4Y2VwdCB0aGUgTkFTIG1hY2hpbmUsIEluIHRoZSBvbGQKKwkgKiBtYWNoaW5lcywgdGhpcyB3aWxsIGhlbHAgdGhlIHVzZXJzIGEgbG90LgorCSAqCisJICogSWYgbm8gIm1hY2h0eXBlPSIgcGFzc2VkLCBnZXQgbWFjaGluZSB0eXBlIGZyb20gIlBNT05fVkVSPSIuCisJICogCVBNT05fVkVSPUxNODA4OQkJTGVtb3RlIDguOScnIG5ldGJvb2sKKwkgKiAJICAgICAgICAgTE04MTAxCQlMZW1vdGUgMTAuMScnIG5ldGJvb2sKKwkgKiAJKFRoZSBhYm92ZSB0d28gbmV0Ym9va3MgaGF2ZSB0aGUgc2FtZSBrZXJuZWwgc3VwcG9ydCkKKwkgKgkgICAgICAgICBMTTZYWFgJCUxlbW90ZSBGdUxvb25nKDJGKSBib3ggc2VyaWVzCisJICoJICAgICAgICAgTE05WFhYCQlMZW1vdGUgTHluTG9vbmcgUEMgc2VyaWVzCisJICovCisJaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJQTU9OX1ZFUj1MTSIpKSB7CisJCWlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiUE1PTl9WRVI9TE04IikpCisJCQltaXBzX21hY2h0eXBlID0gTUFDSF9MRU1PVEVfWUwyRjg5OworCQllbHNlIGlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiUE1PTl9WRVI9TE02IikpCisJCQltaXBzX21hY2h0eXBlID0gTUFDSF9MRU1PVEVfRkwyRjsKKwkJZWxzZSBpZiAoc3Ryc3RyKGFyY3NfY21kbGluZSwgIlBNT05fVkVSPUxNOSIpKQorCQkJbWlwc19tYWNodHlwZSA9IE1BQ0hfTEVNT1RFX0xMMkY7CisJCWVsc2UKKwkJCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0xFTU9URV9OQVM7CisKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgIiBtYWNodHlwZT0iKTsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgZ2V0X3N5c3RlbV90eXBlKCkpOworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiICIpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYwppbmRleCBkN2FmMmU2Li5jYWM0ZDM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3BtLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jCkBAIC0yLDcgKzIsNyBAQAogICogIExlbW90ZSBsb29uZ3NvbjJmIGZhbWlseSBtYWNoaW5lcycgc3BlY2lmaWMgc3VzcGVuZCBzdXBwb3J0CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqICBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcmVzZXQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcmVzZXQuYwppbmRleCA1MWQxYTYwLi4zNjAyMGEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9yZXNldC5jCkBAIC0zLDcgKzMsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA5IFBoaWxpcHBlIFZhY2hvbiA8cGhpbGlwcGVAY293cGlnLmNhPgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGQuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZC5jCmluZGV4IDdlOTAwZjMuLmEwMzI1MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZC5jCkBAIC0xMzUsNCArMTM1LDMgQEAKIAlwcmludGsoIlxuIik7CiAJcmV0dXJuIHg7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZHAuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZHAuYwppbmRleCA2ZDJkODlmLi4yZjIyZmQ3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGRwLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkcC5jCkBAIC0xNDgsNyArMTQ4LDYgQEAKIAogCQkJc3dpdGNoKGllZWU3NTRfY3NyLnJtKSB7CiAJCQljYXNlIElFRUU3NTRfUk46Ci0JCQkJcmV0dXJuIGllZWU3NTRkcF96ZXJvKHNuKTsKIAkJCWNhc2UgSUVFRTc1NF9SWjoKIAkJCQlyZXR1cm4gaWVlZTc1NGRwX3plcm8oc24pOwogCQkJY2FzZSBJRUVFNzU0X1JVOiAgICAvKiB0b3dhcmQgK0luZmluaXR5ICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHNwLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHNwLmMKaW5kZXggNDYzNTM0MC4uYTE5YjcyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRzcC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0c3AuYwpAQCAtMTQ5LDcgKzE0OSw2IEBACiAKIAkJCXN3aXRjaChpZWVlNzU0X2Nzci5ybSkgewogCQkJY2FzZSBJRUVFNzU0X1JOOgotCQkJCXJldHVybiBpZWVlNzU0c3BfemVybyhzbik7CiAJCQljYXNlIElFRUU3NTRfUlo6CiAJCQkJcmV0dXJuIGllZWU3NTRzcF96ZXJvKHNuKTsKIAkJCWNhc2UgSUVFRTc1NF9SVTogICAgICAvKiB0b3dhcmQgK0luZmluaXR5ICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHhjcHQuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0eGNwdC5jCmluZGV4IDdkOGVmODkuLmUwMjQyM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0eGNwdC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0eGNwdC5jCkBAIC00Niw0ICs0NiwzIEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiBpbiBcIiVzXCIsIHR5cGU9JXNcbiIsCiAJCXhjcC0+b3AsIHJ0bmFtZXNbeGNwLT5ydF0pOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1vY3Rlb24uYyBiL2FyY2gvbWlwcy9tbS9jLW9jdGVvbi5jCmluZGV4IDk0ZTA1ZTUuLjBmOWM0ODggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLW9jdGVvbi5jCkBAIC0xNzQsNyArMTc0LDcgQEAKICAqIFByb2JlIE9jdGVvbidzIGNhY2hlcwogICoKICAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHByb2JlX29jdGVvbih2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHByb2JlX29jdGVvbih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaWNhY2hlX3NpemU7CiAJdW5zaWduZWQgbG9uZyBkY2FjaGVfc2l6ZTsKQEAgLTE4Myw2ICsxODMsNyBAQAogCiAJc3dpdGNoIChjLT5jcHV0eXBlKSB7CiAJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTjoKKwljYXNlIENQVV9DQVZJVU1fT0NURU9OX1BMVVM6CiAJCWNvbmZpZzEgPSByZWFkX2MwX2NvbmZpZzEoKTsKIAkJYy0+aWNhY2hlLmxpbmVzeiA9IDIgPDwgKChjb25maWcxID4+IDE5KSAmIDcpOwogCQljLT5pY2FjaGUuc2V0cyA9IDY0IDw8ICgoY29uZmlnMSA+PiAyMikgJiA3KTsKQEAgLTE5MiwxMCArMTkzLDEwIEBACiAJCQljLT5pY2FjaGUuc2V0cyAqIGMtPmljYWNoZS53YXlzICogYy0+aWNhY2hlLmxpbmVzejsKIAkJYy0+aWNhY2hlLndheWJpdCA9IGZmcyhpY2FjaGVfc2l6ZSAvIGMtPmljYWNoZS53YXlzKSAtIDE7CiAJCWMtPmRjYWNoZS5saW5lc3ogPSAxMjg7Ci0JCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NOM1hYWCkpCi0JCQljLT5kY2FjaGUuc2V0cyA9IDE7IC8qIENOM1hYWCBoYXMgb25lIERjYWNoZSBzZXQgKi8KLQkJZWxzZQorCQlpZiAoYy0+Y3B1dHlwZSA9PSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTKQogCQkJYy0+ZGNhY2hlLnNldHMgPSAyOyAvKiBDTjVYWFggaGFzIHR3byBEY2FjaGUgc2V0cyAqLworCQllbHNlCisJCQljLT5kY2FjaGUuc2V0cyA9IDE7IC8qIENOM1hYWCBoYXMgb25lIERjYWNoZSBzZXQgKi8KIAkJYy0+ZGNhY2hlLndheXMgPSA2NDsKIAkJZGNhY2hlX3NpemUgPQogCQkJYy0+ZGNhY2hlLnNldHMgKiBjLT5kY2FjaGUud2F5cyAqIGMtPmRjYWNoZS5saW5lc3o7CkBAIC0yMzUsNyArMjM2LDcgQEAKICAqIFNldHVwIHRoZSBPY3Rlb24gY2FjaGUgZmx1c2ggcm91dGluZXMKICAqCiAgKi8KLXZvaWQgX19kZXZpbml0IG9jdGVvbl9jYWNoZV9pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCBvY3Rlb25fY2FjaGVfaW5pdCh2b2lkKQogewogCWV4dGVybiB1bnNpZ25lZCBsb25nIGViYXNlOwogCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWMyX29jdGVvbjsKQEAgLTMwNSw0ICszMDYsMyBAQAogewogCWNhY2hlX3Bhcml0eV9lcnJvcl9vY3Rlb24oMSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKaW5kZXggMTAyYjJkZi4uYmU4NjI3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2NhY2hlLmMKKysrIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKQEAgLTEzNywyNSArMTM3LDQ2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wcm90ZWN0aW9uX21hcCh2b2lkKQogewotCXByb3RlY3Rpb25fbWFwWzBdID0gUEFHRV9OT05FOwotCXByb3RlY3Rpb25fbWFwWzFdID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFsyXSA9IFBBR0VfQ09QWTsKLQlwcm90ZWN0aW9uX21hcFszXSA9IFBBR0VfQ09QWTsKLQlwcm90ZWN0aW9uX21hcFs0XSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbNV0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzZdID0gUEFHRV9DT1BZOwotCXByb3RlY3Rpb25fbWFwWzddID0gUEFHRV9DT1BZOwotCXByb3RlY3Rpb25fbWFwWzhdID0gUEFHRV9OT05FOwotCXByb3RlY3Rpb25fbWFwWzldID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFsxMF0gPSBQQUdFX1NIQVJFRDsKLQlwcm90ZWN0aW9uX21hcFsxMV0gPSBQQUdFX1NIQVJFRDsKLQlwcm90ZWN0aW9uX21hcFsxMl0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzEzXSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbMTRdID0gUEFHRV9TSEFSRUQ7Ci0JcHJvdGVjdGlvbl9tYXBbMTVdID0gUEFHRV9TSEFSRUQ7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCXByb3RlY3Rpb25fbWFwWzBdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFsxXSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMpOworCQlwcm90ZWN0aW9uX21hcFsyXSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbM10gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDKTsKKwkJcHJvdGVjdGlvbl9tYXBbNF0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbNV0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQpOworCQlwcm90ZWN0aW9uX21hcFs2XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFs3XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCk7CisKKwkJcHJvdGVjdGlvbl9tYXBbOF0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzldICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyk7CisJCXByb3RlY3Rpb25fbWFwWzEwXSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX1dSSVRFIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzExXSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX1dSSVRFKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTJdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTNdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQpOworCQlwcm90ZWN0aW9uX21hcFsxNF0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1dSSVRFICB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFsxNV0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1dSSVRFKTsKKworCX0gZWxzZSB7CisJCXByb3RlY3Rpb25fbWFwWzBdID0gUEFHRV9OT05FOworCQlwcm90ZWN0aW9uX21hcFsxXSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzJdID0gUEFHRV9DT1BZOworCQlwcm90ZWN0aW9uX21hcFszXSA9IFBBR0VfQ09QWTsKKwkJcHJvdGVjdGlvbl9tYXBbNF0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFs1XSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzZdID0gUEFHRV9DT1BZOworCQlwcm90ZWN0aW9uX21hcFs3XSA9IFBBR0VfQ09QWTsKKwkJcHJvdGVjdGlvbl9tYXBbOF0gPSBQQUdFX05PTkU7CisJCXByb3RlY3Rpb25fbWFwWzldID0gUEFHRV9SRUFET05MWTsKKwkJcHJvdGVjdGlvbl9tYXBbMTBdID0gUEFHRV9TSEFSRUQ7CisJCXByb3RlY3Rpb25fbWFwWzExXSA9IFBBR0VfU0hBUkVEOworCQlwcm90ZWN0aW9uX21hcFsxMl0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFsxM10gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFsxNF0gPSBQQUdFX1NIQVJFRDsKKwkJcHJvdGVjdGlvbl9tYXBbMTVdID0gUEFHRV9TSEFSRUQ7CisJfQogfQogCi12b2lkIF9fZGV2aW5pdCBjcHVfY2FjaGVfaW5pdCh2b2lkKQordm9pZCBfX2NwdWluaXQgY3B1X2NhY2hlX2luaXQodm9pZCkKIHsKIAlpZiAoY3B1X2hhc18za19jYWNoZSkgewogCQlleHRlcm4gdm9pZCBfX3dlYWsgcjNrX2NhY2hlX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9mYXVsdC5jCmluZGV4IGU5N2E3YTIuLmI3OGY3ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9mYXVsdC5jCkBAIC05OSw4ICs5OSwzMSBAQAogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQogCQkJZ290byBiYWRfYXJlYTsKIAl9IGVsc2UgewotCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKSkKLQkJCWdvdG8gYmFkX2FyZWE7CisJCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkJaWYgKGFkZHJlc3MgPT0gcmVncy0+Y3AwX2VwYyAmJiAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSkgeworI2lmIDAKKwkJCQlwcl9ub3RpY2UoIkNwdSVkWyVzOiVkOiUwKmx4OiVsZDolMCpseF0gWEkgdmlvbGF0aW9uXG4iLAorCQkJCQkgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCSAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJCQkgIGZpZWxkLCBhZGRyZXNzLCB3cml0ZSwKKwkJCQkJICBmaWVsZCwgcmVncy0+Y3AwX2VwYyk7CisjZW5kaWYKKwkJCQlnb3RvIGJhZF9hcmVhOworCQkJfQorCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1JFQUQpKSB7CisjaWYgMAorCQkJCXByX25vdGljZSgiQ3B1JWRbJXM6JWQ6JTAqbHg6JWxkOiUwKmx4XSBSSSB2aW9sYXRpb25cbiIsCisJCQkJCSAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwKKwkJCQkJICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCQkJCSAgZmllbGQsIGFkZHJlc3MsIHdyaXRlLAorCQkJCQkgIGZpZWxkLCByZWdzLT5jcDBfZXBjKTsKKyNlbmRpZgorCQkJCWdvdG8gYmFkX2FyZWE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKSkKKwkJCQlnb3RvIGJhZF9hcmVhOworCQl9CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCmluZGV4IGUyNzRmZGEuLjEyN2Q3MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9taXBzL21tL2hpZ2htZW0uYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCmluZGV4IDhjMjgzNGYuLmNkMDY2MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCkBAIC05Nyw0ICs5NywzIEBACiAJCXBhZ2UgKz0gKChhZGRyZXNzICYgfkhQQUdFX01BU0spID4+IFBBR0VfU0hJRlQpOwogCXJldHVybiBwYWdlOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCAxNjUxOTQyLi4xMjUzOWFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikKIAllbnRyeWxvID0gcHRlLnB0ZV9oaWdoOwogI2Vsc2UKLQllbnRyeWxvID0gcHRlX3ZhbChwdGUpID4+IDY7CisJZW50cnlsbyA9IHB0ZV90b19lbnRyeWxvKHB0ZV92YWwocHRlKSk7CiAjZW5kaWYKIAogCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKQEAgLTI5OCw3ICsyOTgsNyBAQAogfQogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCi1zdGF0aWMgaW50IF9faW5pdCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKK2ludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKIHsKIAlpbnQgaTsKIApAQCAtNDc3LDcgKzQ3Nyw3IEBACiAgKiB3aWxsIG9mZmljaWFsbHkgYmUgcmV0aXJlZC4KICAqLwogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbX1BUUlNfUEVSX1BHRF0gX19wYWdlX2FsaWduZWQoX1BHRF9PUkRFUik7Ci0jaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIHBtZF90IGludmFsaWRfcG1kX3RhYmxlW1BUUlNfUEVSX1BNRF0gX19wYWdlX2FsaWduZWQoUE1EX09SREVSKTsKICNlbmRpZgogcHRlX3QgaW52YWxpZF9wdGVfdGFibGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZChQVEVfT1JERVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3BhZ2UuYyBiL2FyY2gvbWlwcy9tbS9wYWdlLmMKaW5kZXggZjVjNzM3NS4uMzYyNzJmNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3BhZ2UuYworKysgYi9hcmNoL21pcHMvbW0vcGFnZS5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfZG1hLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgInVhc20uaCIKKyNpbmNsdWRlIDxhc20vdWFzbS5oPgogCiAvKiBSZWdpc3RlcnMgdXNlZCBpbiB0aGUgYXNzZW1ibGVkIHJvdXRpbmVzLiAqLwogI2RlZmluZSBaRVJPIDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS02NC5jCmluZGV4IDExMjEwMTkuLjc4ZWFhNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYwpAQCAtMTUsMjMgKzE1LDMxIEBACiB2b2lkIHBnZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nICpwLCAqZW5kOworCXVuc2lnbmVkIGxvbmcgZW50cnk7CisKKyNpZmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisJZW50cnkgPSAodW5zaWduZWQgbG9uZylpbnZhbGlkX3B0ZV90YWJsZTsKKyNlbHNlCisJZW50cnkgPSAodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZTsKKyNlbmRpZgogCiAgCXAgPSAodW5zaWduZWQgbG9uZyAqKSBwYWdlOwogCWVuZCA9IHAgKyBQVFJTX1BFUl9QR0Q7CiAKIAl3aGlsZSAocCA8IGVuZCkgewotCQlwWzBdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzFdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzJdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzNdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzRdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzVdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzZdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzddID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOworCQlwWzBdID0gZW50cnk7CisJCXBbMV0gPSBlbnRyeTsKKwkJcFsyXSA9IGVudHJ5OworCQlwWzNdID0gZW50cnk7CisJCXBbNF0gPSBlbnRyeTsKKwkJcFs1XSA9IGVudHJ5OworCQlwWzZdID0gZW50cnk7CisJCXBbN10gPSBlbnRyeTsKIAkJcCArPSA4OwogCX0KIH0KIAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiB2b2lkIHBtZF9pbml0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwYWdldGFibGUpCiB7CiAJdW5zaWduZWQgbG9uZyAqcCwgKmVuZDsKQEAgLTQwLDE3ICs0OCwxOCBAQAogCWVuZCA9IHAgKyBQVFJTX1BFUl9QTUQ7CiAKIAl3aGlsZSAocCA8IGVuZCkgewotCQlwWzBdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzFdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzJdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzNdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzRdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzVdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzZdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzddID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOworCQlwWzBdID0gcGFnZXRhYmxlOworCQlwWzFdID0gcGFnZXRhYmxlOworCQlwWzJdID0gcGFnZXRhYmxlOworCQlwWzNdID0gcGFnZXRhYmxlOworCQlwWzRdID0gcGFnZXRhYmxlOworCQlwWzVdID0gcGFnZXRhYmxlOworCQlwWzZdID0gcGFnZXRhYmxlOworCQlwWzddID0gcGFnZXRhYmxlOwogCQlwICs9IDg7CiAJfQogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IHBhZ2V0YWJsZV9pbml0KHZvaWQpCiB7CkBAIC01OSw4ICs2OCw5IEBACiAKIAkvKiBJbml0aWFsaXplIHRoZSBlbnRpcmUgcGdkLiAgKi8KIAlwZ2RfaW5pdCgodW5zaWduZWQgbG9uZylzd2FwcGVyX3BnX2Rpcik7CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAlwbWRfaW5pdCgodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZSwgKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wdGVfdGFibGUpOwotCisjZW5kaWYKIAlwZ2RfYmFzZSA9IHN3YXBwZXJfcGdfZGlyOwogCS8qCiAJICogRml4ZWQgbWFwcGluZ3M6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jIGIvYXJjaC9taXBzL21tL3RsYi1yNGsuYwppbmRleCBkNzM0MjhiLi5jNjE4ZWVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvOwogCQl3cml0ZV9jMF9wYWdlbWFzayhQTV9IVUdFX01BU0spOwogCQlwdGVwID0gKHB0ZV90ICopcG1kcDsKLQkJbG8gPSBwdGVfdmFsKCpwdGVwKSA+PiA2OworCQlsbyA9IHB0ZV90b19lbnRyeWxvKHB0ZV92YWwoKnB0ZXApKTsKIAkJd3JpdGVfYzBfZW50cnlsbzAobG8pOwogCQl3cml0ZV9jMF9lbnRyeWxvMShsbyArIChIUEFHRV9TSVpFID4+IDcpKTsKIApAQCAtMzIzLDggKzMyMyw4IEBACiAJCXB0ZXArKzsKIAkJd3JpdGVfYzBfZW50cnlsbzEocHRlcC0+cHRlX2hpZ2gpOwogI2Vsc2UKLQkJd3JpdGVfYzBfZW50cnlsbzAocHRlX3ZhbCgqcHRlcCsrKSA+PiA2KTsKLQkJd3JpdGVfYzBfZW50cnlsbzEocHRlX3ZhbCgqcHRlcCkgPj4gNik7CisJCXdyaXRlX2MwX2VudHJ5bG8wKHB0ZV90b19lbnRyeWxvKHB0ZV92YWwoKnB0ZXArKykpKTsKKwkJd3JpdGVfYzBfZW50cnlsbzEocHRlX3RvX2VudHJ5bG8ocHRlX3ZhbCgqcHRlcCkpKTsKICNlbmRpZgogCQltdGMwX3RsYndfaGF6YXJkKCk7CiAJCWlmIChpZHggPCAwKQpAQCAtMzM3LDQwICszMzcsNiBAQAogCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCi0jaWYgMAotc3RhdGljIHZvaWQgcjRrX3VwZGF0ZV9tbXVfY2FjaGVfaHdidWcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBhc2lkOwotCXBnZF90ICpwZ2RwOwotCXBtZF90ICpwbWRwOwotCXB0ZV90ICpwdGVwOwotCWludCBpZHg7Ci0KLQlFTlRFUl9DUklUSUNBTChmbGFncyk7Ci0JYWRkcmVzcyAmPSAoUEFHRV9NQVNLIDw8IDEpOwotCWFzaWQgPSByZWFkX2MwX2VudHJ5aGkoKSAmIEFTSURfTUFTSzsKLQl3cml0ZV9jMF9lbnRyeWhpKGFkZHJlc3MgfCBhc2lkKTsKLQlwZ2RwID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyZXNzKTsKLQltdGMwX3RsYndfaGF6YXJkKCk7Ci0JdGxiX3Byb2JlKCk7Ci0JdGxiX3Byb2JlX2hhemFyZCgpOwotCXBtZHAgPSBwbWRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpOwotCWlkeCA9IHJlYWRfYzBfaW5kZXgoKTsKLQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kcCwgYWRkcmVzcyk7Ci0Jd3JpdGVfYzBfZW50cnlsbzAocHRlX3ZhbCgqcHRlcCsrKSA+PiA2KTsKLQl3cml0ZV9jMF9lbnRyeWxvMShwdGVfdmFsKCpwdGVwKSA+PiA2KTsKLQltdGMwX3RsYndfaGF6YXJkKCk7Ci0JaWYgKGlkeCA8IDApCi0JCXRsYl93cml0ZV9yYW5kb20oKTsKLQllbHNlCi0JCXRsYl93cml0ZV9pbmRleGVkKCk7Ci0JdGxid191c2VfaGF6YXJkKCk7Ci0JRVhJVF9DUklUSUNBTChmbGFncyk7Ci19Ci0jZW5kaWYKLQogdm9pZCBfX2luaXQgYWRkX3dpcmVkX2VudHJ5KHVuc2lnbmVkIGxvbmcgZW50cnlsbzAsIHVuc2lnbmVkIGxvbmcgZW50cnlsbzEsCiAJdW5zaWduZWQgbG9uZyBlbnRyeWhpLCB1bnNpZ25lZCBsb25nIHBhZ2VtYXNrKQogewpAQCAtNDQ3LDM0ICs0MTMsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBwcm9iZV90bGIodW5zaWduZWQgbG9uZyBjb25maWcpCi17Ci0Jc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwotCXVuc2lnbmVkIGludCByZWc7Ci0KLQkvKgotCSAqIElmIHRoaXMgaXNuJ3QgYSBNSVBTMzIgLyBNSVBTNjQgY29tcGxpYW50IENQVS4gIENvbmZpZyAxIHJlZ2lzdGVyCi0JICogaXMgbm90IHN1cHBvcnRlZCwgd2UgYXNzdW1lIFI0ayBzdHlsZS4gIENwdSBwcm9iaW5nIGFscmVhZHkgZmlndXJlZAotCSAqIG91dCB0aGUgbnVtYmVyIG9mIHRsYiBlbnRyaWVzLgotCSAqLwotCWlmICgoYy0+cHJvY2Vzc29yX2lkICYgMHhmZjAwMDApID09IFBSSURfQ09NUF9MRUdBQ1kpCi0JCXJldHVybjsKLSNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JLyoKLQkgKiBJZiBUTEIgaXMgc2hhcmVkIGluIFNNVEMgc3lzdGVtLCB0b3RhbCBzaXplIGFscmVhZHkKLQkgKiBoYXMgYmVlbiBjYWxjdWxhdGVkIGFuZCB3cml0dGVuIGludG8gY3B1X2RhdGEgdGxic2l6ZQotCSAqLwotCWlmKChzbXRjX3N0YXR1cyAmIFNNVENfVExCX1NIQVJFRCkgPT0gU01UQ19UTEJfU0hBUkVEKQotCQlyZXR1cm47Ci0jZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwotCi0JcmVnID0gcmVhZF9jMF9jb25maWcxKCk7Ci0JaWYgKCEoKGNvbmZpZyA+PiA3KSAmIDMpKQotCQlwYW5pYygiTm8gVExCIHByZXNlbnQiKTsKLQotCWMtPnRsYnNpemUgPSAoKHJlZyA+PiAyNSkgJiAweDNmKSArIDE7Ci19Ci0KIHN0YXRpYyBpbnQgX19jcHVpbml0ZGF0YSBudGxiOwogc3RhdGljIGludCBfX2luaXQgc2V0X250bGIoY2hhciAqc3RyKQogewpAQCAtNDg2LDggKzQyNCw2IEBACiAKIHZvaWQgX19jcHVpbml0IHRsYl9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNvbmZpZyA9IHJlYWRfYzBfY29uZmlnKCk7Ci0KIAkvKgogCSAqIFlvdSBzaG91bGQgbmV2ZXIgY2hhbmdlIHRoaXMgcmVnaXN0ZXI6CiAJICogICAtIE9uIFI0NjAwIDEuNyB0aGUgdGxicCBuZXZlciBoaXRzIGZvciBwYWdlcyBzbWFsbGVyIHRoYW4KQEAgLTQ5NSwxMyArNDMxLDI1IEBACiAJICogICAtIFRoZSBlbnRpcmUgbW0gaGFuZGxpbmcgYXNzdW1lcyB0aGUgYzBfcGFnZW1hc2sgcmVnaXN0ZXIgdG8KIAkgKiAgICAgYmUgc2V0IHRvIGZpeGVkLXNpemUgcGFnZXMuCiAJICovCi0JcHJvYmVfdGxiKGNvbmZpZyk7CiAJd3JpdGVfYzBfcGFnZW1hc2soUE1fREVGQVVMVF9NQVNLKTsKIAl3cml0ZV9jMF93aXJlZCgwKTsKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTAwMDAgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTIwMDAgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTQwMDApCiAJCXdyaXRlX2MwX2ZyYW1lbWFzaygwKTsKKworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkvKgorCQkgKiBFbmFibGUgdGhlIG5vIHJlYWQsIG5vIGV4ZWMgYml0cywgYW5kIGVuYWJsZSBsYXJnZSB2aXJ0dWFsCisJCSAqIGFkZHJlc3MuCisJCSAqLworCQl1MzIgcGcgPSBQR19SSUUgfCBQR19YSUU7CisjaWZkZWYgQ09ORklHXzY0QklUCisJCXBnIHw9IFBHX0VMUEE7CisjZW5kaWYKKwkJd3JpdGVfYzBfcGFnZWdyYWluKHBnKTsKKwl9CisKIAl0ZW1wX3RsYl9lbnRyeSA9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZSAtIDE7CiAKICAgICAgICAgLyogRnJvbSB0aGlzIHBvaW50IG9uIHRoZSBBUkMgZmlybXdhcmUgaXMgZGVhZC4gICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IGJhZGNmNWUuLjBkZTBlNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC0yOSw4ICsyOSw3IEBACiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vd2FyLmg+Ci0KLSNpbmNsdWRlICJ1YXNtLmgiCisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogc3RhdGljIGlubGluZSBpbnQgcjQ1a19idmFod2J1Zyh2b2lkKQogewpAQCAtNzcsNiArNzYsOCBAQAogCWxhYmVsX3ZtYWxsb2NfZG9uZSwKIAlsYWJlbF90bGJ3X2hhemFyZCwKIAlsYWJlbF9zcGxpdCwKKwlsYWJlbF90bGJsX2dvYXJvdW5kMSwKKwlsYWJlbF90bGJsX2dvYXJvdW5kMiwKIAlsYWJlbF9ub3BhZ2VfdGxibCwKIAlsYWJlbF9ub3BhZ2VfdGxicywKIAlsYWJlbF9ub3BhZ2VfdGxibSwKQEAgLTkzLDYgKzk0LDggQEAKIFVBU01fTF9MQShfdm1hbGxvY19kb25lKQogVUFTTV9MX0xBKF90bGJ3X2hhemFyZCkKIFVBU01fTF9MQShfc3BsaXQpCitVQVNNX0xfTEEoX3RsYmxfZ29hcm91bmQxKQorVUFTTV9MX0xBKF90bGJsX2dvYXJvdW5kMikKIFVBU01fTF9MQShfbm9wYWdlX3RsYmwpCiBVQVNNX0xfTEEoX25vcGFnZV90bGJzKQogVUFTTV9MX0xBKF9ub3BhZ2VfdGxibSkKQEAgLTM5Nyw3ICs0MDAsNDQgQEAKIAl9CiB9CiAKK3N0YXRpYyBfX2NwdWluaXQgX19tYXliZV91bnVzZWQgdm9pZCBidWlsZF9jb252ZXJ0X3B0ZV90b19lbnRyeWxvKHUzMiAqKnAsCisJCQkJCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJVUFTTV9pX1NSTChwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQlVQVNNX2lfUk9UUihwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR182NEJJVF9QSFlTX0FERFIKKwkJdWFzbV9pX2RzcmwocCwgcmVnLCByZWcsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOworI2Vsc2UKKwkJVUFTTV9pX1NSTChwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfR0xPQkFMKSk7CisjZW5kaWYKKwl9Cit9CisKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisKK3N0YXRpYyBfX2NwdWluaXQgdm9pZCBidWlsZF9yZXN0b3JlX3BhZ2VtYXNrKHUzMiAqKnAsCisJCQkJCSAgICAgc3RydWN0IHVhc21fcmVsb2MgKipyLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCB0bXAsCisJCQkJCSAgICAgZW51bSBsYWJlbF9pZCBsaWQpCit7CisJLyogUmVzZXQgZGVmYXVsdCBwYWdlIHNpemUgKi8KKwlpZiAoUE1fREVGQVVMVF9NQVNLID4+IDE2KSB7CisJCXVhc21faV9sdWkocCwgdG1wLCBQTV9ERUZBVUxUX01BU0sgPj4gMTYpOworCQl1YXNtX2lfb3JpKHAsIHRtcCwgdG1wLCBQTV9ERUZBVUxUX01BU0sgJiAweGZmZmYpOworCQl1YXNtX2lsX2IocCwgciwgbGlkKTsKKwkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9QQUdFTUFTSyk7CisJfSBlbHNlIGlmIChQTV9ERUZBVUxUX01BU0spIHsKKwkJdWFzbV9pX29yaShwLCB0bXAsIDAsIFBNX0RFRkFVTFRfTUFTSyk7CisJCXVhc21faWxfYihwLCByLCBsaWQpOworCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX1BBR0VNQVNLKTsKKwl9IGVsc2UgeworCQl1YXNtX2lsX2IocCwgciwgbGlkKTsKKwkJdWFzbV9pX210YzAocCwgMCwgQzBfUEFHRU1BU0spOworCX0KK30KKwogc3RhdGljIF9fY3B1aW5pdCB2b2lkIGJ1aWxkX2h1Z2VfdGxiX3dyaXRlX2VudHJ5KHUzMiAqKnAsCiAJCQkJCQkgc3RydWN0IHVhc21fbGFiZWwgKipsLAogCQkJCQkJIHN0cnVjdCB1YXNtX3JlbG9jICoqciwKQEAgLTQxMSwyMCArNDUxLDcgQEAKIAogCWJ1aWxkX3RsYl93cml0ZV9lbnRyeShwLCBsLCByLCB3bW9kZSk7CiAKLQkvKiBSZXNldCBkZWZhdWx0IHBhZ2Ugc2l6ZSAqLwotCWlmIChQTV9ERUZBVUxUX01BU0sgPj4gMTYpIHsKLQkJdWFzbV9pX2x1aShwLCB0bXAsIFBNX0RFRkFVTFRfTUFTSyA+PiAxNik7Ci0JCXVhc21faV9vcmkocCwgdG1wLCB0bXAsIFBNX0RFRkFVTFRfTUFTSyAmIDB4ZmZmZik7Ci0JCXVhc21faWxfYihwLCByLCBsYWJlbF9sZWF2ZSk7Ci0JCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfUEFHRU1BU0spOwotCX0gZWxzZSBpZiAoUE1fREVGQVVMVF9NQVNLKSB7Ci0JCXVhc21faV9vcmkocCwgdG1wLCAwLCBQTV9ERUZBVUxUX01BU0spOwotCQl1YXNtX2lsX2IocCwgciwgbGFiZWxfbGVhdmUpOwotCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX1BBR0VNQVNLKTsKLQl9IGVsc2UgewotCQl1YXNtX2lsX2IocCwgciwgbGFiZWxfbGVhdmUpOwotCQl1YXNtX2lfbXRjMChwLCAwLCBDMF9QQUdFTUFTSyk7Ci0JfQorCWJ1aWxkX3Jlc3RvcmVfcGFnZW1hc2socCwgciwgdG1wLCBsYWJlbF9sZWF2ZSk7CiB9CiAKIC8qCkBAIC00NjAsMTUgKzQ4NywxNSBAQAogCWlmICghc21hbGxfc2VxdWVuY2UpCiAJCXVhc21faV9sdWkocCwgdG1wLCBIUEFHRV9TSVpFID4+ICg3ICsgMTYpKTsKIAotCVVBU01faV9TUkwocCwgcHRlLCBwdGUsIDYpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8gKi8KLQl1YXNtX2lfbXRjMChwLCBwdGUsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCWJ1aWxkX2NvbnZlcnRfcHRlX3RvX2VudHJ5bG8ocCwgcHRlKTsKKwlVQVNNX2lfTVRDMChwLCBwdGUsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLwogCS8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KIAlpZiAoc21hbGxfc2VxdWVuY2UpCiAJCVVBU01faV9BRERJVShwLCBwdGUsIHB0ZSwgSFBBR0VfU0laRSA+PiA3KTsKIAllbHNlCiAJCVVBU01faV9BRERVKHAsIHB0ZSwgcHRlLCB0bXApOwogCi0JdWFzbV9pX210YzAocCwgcHRlLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KKwlVQVNNX2lfTVRDMChwLCBwdGUsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogfQogCiBzdGF0aWMgX19jcHVpbml0IHZvaWQgYnVpbGRfaHVnZV9oYW5kbGVyX3RhaWwodTMyICoqcCwKQEAgLTU0OSwxMSArNTc2LDEzIEBACiAKIAl1YXNtX2lfYW5kaShwLCB0bXAsIHRtcCwgKFBUUlNfUEVSX1BHRCAtIDEpPDwzKTsKIAl1YXNtX2lfZGFkZHUocCwgcHRyLCBwdHIsIHRtcCk7IC8qIGFkZCBpbiBwZ2Qgb2Zmc2V0ICovCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAl1YXNtX2lfZG1mYzAocCwgdG1wLCBDMF9CQURWQUREUik7IC8qIGdldCBmYXVsdGluZyBhZGRyZXNzICovCiAJdWFzbV9pX2xkKHAsIHB0ciwgMCwgcHRyKTsgLyogZ2V0IHBtZCBwb2ludGVyICovCiAJdWFzbV9pX2RzcmwocCwgdG1wLCB0bXAsIFBNRF9TSElGVC0zKTsgLyogZ2V0IHBtZCBvZmZzZXQgaW4gYnl0ZXMgKi8KIAl1YXNtX2lfYW5kaShwLCB0bXAsIHRtcCwgKFBUUlNfUEVSX1BNRCAtIDEpPDwzKTsKIAl1YXNtX2lfZGFkZHUocCwgcHRyLCBwdHIsIHRtcCk7IC8qIGFkZCBpbiBwbWQgb2Zmc2V0ICovCisjZW5kaWYKIH0KIAogLyoKQEAgLTY4NCwzNSArNzEzLDUzIEBACiAJaWYgKGNwdV9oYXNfNjRiaXRzKSB7CiAJCXVhc21faV9sZChwLCB0bXAsIDAsIHB0ZXApOyAvKiBnZXQgZXZlbiBwdGUgKi8KIAkJdWFzbV9pX2xkKHAsIHB0ZXAsIHNpemVvZihwdGVfdCksIHB0ZXApOyAvKiBnZXQgb2RkIHB0ZSAqLwotCQl1YXNtX2lfZHNybChwLCB0bXAsIHRtcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzAgKi8KLQkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KLQkJdWFzbV9pX2RzcmwocCwgcHRlcCwgcHRlcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KLQkJdWFzbV9pX210YzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCisJCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkJVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQkJVUFTTV9pX1NSTChwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCQlVQVNNX2lfUk9UUihwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCQlVQVNNX2lfUk9UUihwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9HTE9CQUwpIC0gaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQl9IGVsc2UgeworCQkJdWFzbV9pX2RzcmwocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8wICovCisJCQlVQVNNX2lfTVRDMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCQkJdWFzbV9pX2RzcmwocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSk7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KKwkJfQorCQlVQVNNX2lfTVRDMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KIAl9IGVsc2UgewogCQlpbnQgcHRlX29mZl9ldmVuID0gc2l6ZW9mKHB0ZV90KSAvIDI7CiAJCWludCBwdGVfb2ZmX29kZCA9IHB0ZV9vZmZfZXZlbiArIHNpemVvZihwdGVfdCk7CiAKIAkJLyogVGhlIHB0ZSBlbnRyaWVzIGFyZSBwcmUtc2hpZnRlZCAqLwogCQl1YXNtX2lfbHcocCwgdG1wLCBwdGVfb2ZmX2V2ZW4sIHB0ZXApOyAvKiBnZXQgZXZlbiBwdGUgKi8KLQkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KIAkJdWFzbV9pX2x3KHAsIHB0ZXAsIHB0ZV9vZmZfb2RkLCBwdGVwKTsgLyogZ2V0IG9kZCBwdGUgKi8KLQkJdWFzbV9pX210YzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9NVEMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogCX0KICNlbHNlCiAJVUFTTV9pX0xXKHAsIHRtcCwgMCwgcHRlcCk7IC8qIGdldCBldmVuIHB0ZSAqLwogCVVBU01faV9MVyhwLCBwdGVwLCBzaXplb2YocHRlX3QpLCBwdGVwKTsgLyogZ2V0IG9kZCBwdGUgKi8KIAlpZiAocjQ1a19idmFod2J1ZygpKQogCQlidWlsZF90bGJfcHJvYmVfZW50cnkocCk7Ci0JVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzAgKi8KKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQlVQVNNX2lfU1JMKHAsIHB0ZXAsIHB0ZXAsIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJVUFTTV9pX1JPVFIocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkgLSBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCWlmIChyNGtfMjUwTUhaaHdidWcoKSkKKwkJCVVBU01faV9NVEMwKHAsIDAsIEMwX0VOVFJZTE8wKTsKKwkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX1JPVFIocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwl9IGVsc2UgeworCQlVQVNNX2lfU1JMKHAsIHRtcCwgdG1wLCBpbG9nMihfUEFHRV9HTE9CQUwpKTsgLyogY29udmVydCB0byBlbnRyeWxvMCAqLworCQlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCisJCQlVQVNNX2lfTVRDMChwLCAwLCBDMF9FTlRSWUxPMCk7CisJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9TUkwocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSk7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KKwkJaWYgKHI0NWtfYnZhaHdidWcoKSkKKwkJCXVhc21faV9tZmMwKHAsIHRtcCwgQzBfSU5ERVgpOworCX0KIAlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCi0JCXVhc21faV9tdGMwKHAsIDAsIEMwX0VOVFJZTE8wKTsKLQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLwotCVVBU01faV9TUkwocCwgcHRlcCwgcHRlcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KLQlpZiAocjQ1a19idmFod2J1ZygpKQotCQl1YXNtX2lfbWZjMChwLCB0bXAsIEMwX0lOREVYKTsKLQlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCi0JCXVhc21faV9tdGMwKHAsIDAsIEMwX0VOVFJZTE8xKTsKLQl1YXNtX2lfbXRjMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX01UQzAocCwgMCwgQzBfRU5UUllMTzEpOworCVVBU01faV9NVEMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogI2VuZGlmCiB9CiAKQEAgLTk4NSw5ICsxMDMyLDE0IEBACiBidWlsZF9wdGVfcHJlc2VudCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsCiAJCSAgdW5zaWduZWQgaW50IHB0ZSwgdW5zaWduZWQgaW50IHB0ciwgZW51bSBsYWJlbF9pZCBsaWQpCiB7Ci0JdWFzbV9pX2FuZGkocCwgcHRlLCBwdGUsIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEKTsKLQl1YXNtX2lfeG9yaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOwotCXVhc21faWxfYm5leihwLCByLCBwdGUsIGxpZCk7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCXVhc21faV9hbmRpKHAsIHB0ZSwgcHRlLCBfUEFHRV9QUkVTRU5UKTsKKwkJdWFzbV9pbF9iZXF6KHAsIHIsIHB0ZSwgbGlkKTsKKwl9IGVsc2UgeworCQl1YXNtX2lfYW5kaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOworCQl1YXNtX2lfeG9yaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOworCQl1YXNtX2lsX2JuZXoocCwgciwgcHRlLCBsaWQpOworCX0KIAlpUFRFX0xXKHAsIHB0ZSwgcHRyKTsKIH0KIApAQCAtMTI3Miw2ICsxMzI0LDM0IEBACiAJYnVpbGRfcHRlX3ByZXNlbnQoJnAsICZyLCBLMCwgSzEsIGxhYmVsX25vcGFnZV90bGJsKTsKIAlpZiAobTRrY190bGJwX3dhcigpKQogCQlidWlsZF90bGJfcHJvYmVfZW50cnkoJnApOworCisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCS8qCisJCSAqIElmIHRoZSBwYWdlIGlzIG5vdCBfUEFHRV9WQUxJRCwgUkkgb3IgWEkgY291bGQgbm90CisJCSAqIGhhdmUgdHJpZ2dlcmVkIGl0LiAgU2tpcCB0aGUgZXhwZW5zaXZlIHRlc3QuLgorCQkgKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMCwgX1BBR0VfVkFMSUQpOworCQl1YXNtX2lsX2JlcXooJnAsICZyLCBLMCwgbGFiZWxfdGxibF9nb2Fyb3VuZDEpOworCQl1YXNtX2lfbm9wKCZwKTsKKworCQl1YXNtX2lfdGxicigmcCk7CisJCS8qIEV4YW1pbmUgIGVudHJ5bG8gMCBvciAxIGJhc2VkIG9uIHB0ci4gKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMSwgc2l6ZW9mKHB0ZV90KSk7CisJCXVhc21faV9iZXF6KCZwLCBLMCwgOCk7CisKKwkJVUFTTV9pX01GQzAoJnAsIEswLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgaW4gdGhlIGRlbGF5IHNsb3QqLworCQlVQVNNX2lfTUZDMCgmcCwgSzAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCBpZiBwdHIgaXMgb2RkICovCisJCS8qCisJCSAqIElmIHRoZSBlbnRyeUxvIChub3cgaW4gSzApIGlzIHZhbGlkIChiaXQgMSksIFJJIG9yCisJCSAqIFhJIG11c3QgaGF2ZSB0cmlnZ2VyZWQgaXQuCisJCSAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCAyKTsKKwkJdWFzbV9pbF9ibmV6KCZwLCAmciwgSzAsIGxhYmVsX25vcGFnZV90bGJsKTsKKworCQl1YXNtX2xfdGxibF9nb2Fyb3VuZDEoJmwsIHApOworCQkvKiBSZWxvYWQgdGhlIFBURSB2YWx1ZSAqLworCQlpUFRFX0xXKCZwLCBLMCwgSzEpOworCX0KIAlidWlsZF9tYWtlX3ZhbGlkKCZwLCAmciwgSzAsIEsxKTsKIAlidWlsZF9yNDAwMF90bGJjaGFuZ2VfaGFuZGxlcl90YWlsKCZwLCAmbCwgJnIsIEswLCBLMSk7CiAKQEAgLTEyODQsNiArMTM2NCw0MCBAQAogCWlQVEVfTFcoJnAsIEswLCBLMSk7CiAJYnVpbGRfcHRlX3ByZXNlbnQoJnAsICZyLCBLMCwgSzEsIGxhYmVsX25vcGFnZV90bGJsKTsKIAlidWlsZF90bGJfcHJvYmVfZW50cnkoJnApOworCisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCS8qCisJCSAqIElmIHRoZSBwYWdlIGlzIG5vdCBfUEFHRV9WQUxJRCwgUkkgb3IgWEkgY291bGQgbm90CisJCSAqIGhhdmUgdHJpZ2dlcmVkIGl0LiAgU2tpcCB0aGUgZXhwZW5zaXZlIHRlc3QuLgorCQkgKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMCwgX1BBR0VfVkFMSUQpOworCQl1YXNtX2lsX2JlcXooJnAsICZyLCBLMCwgbGFiZWxfdGxibF9nb2Fyb3VuZDIpOworCQl1YXNtX2lfbm9wKCZwKTsKKworCQl1YXNtX2lfdGxicigmcCk7CisJCS8qIEV4YW1pbmUgIGVudHJ5bG8gMCBvciAxIGJhc2VkIG9uIHB0ci4gKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMSwgc2l6ZW9mKHB0ZV90KSk7CisJCXVhc21faV9iZXF6KCZwLCBLMCwgOCk7CisKKwkJVUFTTV9pX01GQzAoJnAsIEswLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgaW4gdGhlIGRlbGF5IHNsb3QqLworCQlVQVNNX2lfTUZDMCgmcCwgSzAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCBpZiBwdHIgaXMgb2RkICovCisJCS8qCisJCSAqIElmIHRoZSBlbnRyeUxvIChub3cgaW4gSzApIGlzIHZhbGlkIChiaXQgMSksIFJJIG9yCisJCSAqIFhJIG11c3QgaGF2ZSB0cmlnZ2VyZWQgaXQuCisJCSAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCAyKTsKKwkJdWFzbV9pbF9iZXF6KCZwLCAmciwgSzAsIGxhYmVsX3RsYmxfZ29hcm91bmQyKTsKKwkJLyogUmVsb2FkIHRoZSBQVEUgdmFsdWUgKi8KKwkJaVBURV9MVygmcCwgSzAsIEsxKTsKKworCQkvKgorCQkgKiBXZSBjbG9iYmVyZWQgQzBfUEFHRU1BU0ssIHJlc3RvcmUgaXQuICBPbiB0aGUgb3RoZXIgYnJhbmNoCisJCSAqIGl0IGlzIHJlc3RvcmVkIGluIGJ1aWxkX2h1Z2VfdGxiX3dyaXRlX2VudHJ5LgorCQkgKi8KKwkJYnVpbGRfcmVzdG9yZV9wYWdlbWFzaygmcCwgJnIsIEswLCBsYWJlbF9ub3BhZ2VfdGxibCk7CisKKwkJdWFzbV9sX3RsYmxfZ29hcm91bmQyKCZsLCBwKTsKKwl9CiAJdWFzbV9pX29yaSgmcCwgSzAsIEswLCAoX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9WQUxJRCkpOwogCWJ1aWxkX2h1Z2VfaGFuZGxlcl90YWlsKCZwLCAmciwgJmwsIEswLCBLMSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS91YXNtLmMgYi9hcmNoL21pcHMvbW0vdWFzbS5jCmluZGV4IDBhMTY1YzUuLjE1ODFlOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS91YXNtLmMKKysrIGIvYXJjaC9taXBzL21tL3Vhc20uYwpAQCAtMTksOCArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9pbnN0Lmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+Ci0KLSNpbmNsdWRlICJ1YXNtLmgiCisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogZW51bSBmaWVsZHMgewogCVJTID0gMHgwMDEsCkBAIC02Myw4ICs2Miw5IEBACiAJaW5zbl9kc3JsMzIsIGluc25fZHJvdHIsIGluc25fZHN1YnUsIGluc25fZXJldCwgaW5zbl9qLCBpbnNuX2phbCwKIAlpbnNuX2pyLCBpbnNuX2xkLCBpbnNuX2xsLCBpbnNuX2xsZCwgaW5zbl9sdWksIGluc25fbHcsIGluc25fbWZjMCwKIAlpbnNuX210YzAsIGluc25fb3JpLCBpbnNuX3ByZWYsIGluc25fcmZlLCBpbnNuX3NjLCBpbnNuX3NjZCwKLQlpbnNuX3NkLCBpbnNuX3NsbCwgaW5zbl9zcmEsIGluc25fc3JsLCBpbnNuX3N1YnUsIGluc25fc3csCi0JaW5zbl90bGJwLCBpbnNuX3RsYndpLCBpbnNuX3RsYndyLCBpbnNuX3hvciwgaW5zbl94b3JpLCBpbnNuX2RpbnMKKwlpbnNuX3NkLCBpbnNuX3NsbCwgaW5zbl9zcmEsIGluc25fc3JsLCBpbnNuX3JvdHIsIGluc25fc3VidSwgaW5zbl9zdywKKwlpbnNuX3RsYnAsIGluc25fdGxiciwgaW5zbl90bGJ3aSwgaW5zbl90bGJ3ciwgaW5zbl94b3IsIGluc25feG9yaSwKKwlpbnNuX2RpbnMKIH07CiAKIHN0cnVjdCBpbnNuIHsKQEAgLTEyNiw5ICsxMjYsMTEgQEAKIAl7IGluc25fc2xsLCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzbGxfb3ApLCAgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX3NyYSwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3JhX29wKSwgIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9zcmwsICBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHNybF9vcCksICBSVCB8IFJEIHwgUkUgfSwKKwl7IGluc25fcm90ciwgIE0oc3BlY19vcCwgMSwgMCwgMCwgMCwgc3JsX29wKSwgIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9zdWJ1LCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzdWJ1X29wKSwgIFJTIHwgUlQgfCBSRCB9LAogCXsgaW5zbl9zdywgIE0oc3dfb3AsIDAsIDAsIDAsIDAsIDApLCAgUlMgfCBSVCB8IFNJTU0gfSwKIAl7IGluc25fdGxicCwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJwX29wKSwgIDAgfSwKKwl7IGluc25fdGxiciwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJyX29wKSwgIDAgfSwKIAl7IGluc25fdGxid2ksICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxid2lfb3ApLCAgMCB9LAogCXsgaW5zbl90bGJ3ciwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJ3cl9vcCksICAwIH0sCiAJeyBpbnNuX3hvciwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgeG9yX29wKSwgIFJTIHwgUlQgfCBSRCB9LApAQCAtMzc5LDkgKzM4MSwxMSBAQAogSV91MnUxdTMoX3NsbCkKIElfdTJ1MXUzKF9zcmEpCiBJX3UydTF1Myhfc3JsKQorSV91MnUxdTMoX3JvdHIpCiBJX3UzdTF1Mihfc3VidSkKIElfdTJzM3UxKF9zdykKIElfMChfdGxicCkKK0lfMChfdGxicikKIElfMChfdGxid2kpCiBJXzAoX3RsYndyKQogSV91M3UxdTIoX3hvcikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCmluZGV4IDRjM2ZjYTEuLjJjYjVhZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX2djbXBfYmFzZTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXBpX21hcFtOUl9DUFVTXTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhtaXBzX2lycV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG1pcHNfaXJxX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIGludCBtaXBzX3BjaWJpb3NfaWFjayh2b2lkKQogewpAQCAtMTAzLDcgKzEwMyw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtaXBzX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtaXBzX2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnEgPSBtaXBzX3BjaWJpb3NfaWFjaygpOwogCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkgKiBvbiBhbiBTTVAgc3lzdGVtLCAgc28gbGVhdmUgaXQgdXAgdG8gdGhlIGdlbmVyaWMgY29kZS4uLgogCSAqLwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWlwc19pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaXBzX2lycV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gaXJxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYwppbmRleCAzYTQ2N2MwLi45NDE5MTZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYworKysgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYwpAQCAtMTU2LDE5ICsxNTYsMTkgQEAKICNkZWZpbmUgSVJRRkxBR19TVEFSVEVECQkxCiAjZGVmaW5lIElSUUZMQUdfRElTQUJMRUQJMgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBueDgzM3hfaXJxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG54ODMzeF9pcnFfbG9jayk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG54ODMzeF9zdGFydHVwX3BpY19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBwaWNfaXJxID0gaXJxIC0gUE5YODMzWF9QSUNfSVJRX0JBU0U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxZmxhZ3NbcGljX2lycV0gPSBJUlFGTEFHX1NUQVJURUQ7CS8qIHN0YXJ0ZWQsIG5vdCBkaXNhYmxlZCAqLwogCXBueDgzM3hfaGFyZF9lbmFibGVfcGljX2lycShwaWNfaXJxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzcsMTIgKzE3NywxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHBpY19pcnEgPSBpcnEgLSBQTlg4MzNYX1BJQ19JUlFfQkFTRTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnFmbGFnc1twaWNfaXJxXSA9IDA7CQkJLyogbm90IHN0YXJ0ZWQgKi8KIAlwbng4MzN4X2hhcmRfZGlzYWJsZV9waWNfaXJxKHBpY19pcnEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBueDgzM3hfZW5hYmxlX3BpY19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTE5MCwxMyArMTkwLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcGljX2lycSA9IGlycSAtIFBOWDgzM1hfUElDX0lSUV9CQVNFOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAogCWlycWZsYWdzW3BpY19pcnFdICY9IH5JUlFGTEFHX0RJU0FCTEVEOwogCWlmIChpcnFmbGFnc1twaWNfaXJxXSA9PSBJUlFGTEFHX1NUQVJURUQpCiAJCXBueDgzM3hfaGFyZF9lbmFibGVfcGljX2lycShwaWNfaXJxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2Rpc2FibGVfcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjA0LDEyICsyMDQsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBwaWNfaXJxID0gaXJxIC0gUE5YODMzWF9QSUNfSVJRX0JBU0U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxZmxhZ3NbcGljX2lycV0gfD0gSVJRRkxBR19ESVNBQkxFRDsKIAlwbng4MzN4X2hhcmRfZGlzYWJsZV9waWNfaXJxKHBpY19pcnEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBueDgzM3hfYWNrX3BpY19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTIyMCwxNSArMjIwLDE1IEBACiB7CiB9CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2spOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBueDgzM3hfc3RhcnR1cF9ncGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBwaW4gPSBpcnEgLSBQTlg4MzNYX0dQSU9fSVJRX0JBU0U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAJcG54ODMzeF9ncGlvX2VuYWJsZV9pcnEocGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzYsMTggKzIzNiwxOCBAQAogewogCWludCBwaW4gPSBpcnEgLSBQTlg4MzNYX0dQSU9fSVJRX0JBU0U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAJcG54ODMzeF9ncGlvX2VuYWJsZV9pcnEocGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2Rpc2FibGVfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgcGluID0gaXJxIC0gUE5YODMzWF9HUElPX0lSUV9CQVNFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXBueDgzM3hfZ3Bpb19kaXNhYmxlX2lycShwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBueDgzM3hfYWNrX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yNTgsOSArMjU4LDkgQEAKIHsKIAlpbnQgcGluID0gaXJxIC0gUE5YODMzWF9HUElPX0lSUV9CQVNFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXBueDgzM3hfZ3Bpb19jbGVhcl9pcnEocGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHBueDgzM3hfc2V0X3R5cGVfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKQEAgLTM3Nyw0ICszNzcsMyBAQAogCiAJbWlwc19ocHRfZnJlcXVlbmN5ICo9IDUwMDAwMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Byb20uYwppbmRleCAyYTQxZThmLi4yOTk2OWY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Byb20uYworKysgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Byb20uYwpAQCAtNjIsOSArNjIsMyBAQAogdm9pZCBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCiB7CiB9Ci0KLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuIGFyY3NfY21kbGluZTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3Byb20uYwppbmRleCAyZjU2NzQ1Li4zMmY3MDA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3Byb20uYworKysgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3Byb20uYwpAQCAtMTI0LDYgKzEyNCw1IEBACiAJfQogfQogCi1FWFBPUlRfU1lNQk9MKHByb21fZ2V0Y21kbGluZSk7CiBFWFBPUlRfU1lNQk9MKGdldF9ldGhlcm5ldF9hZGRyKTsKIEVYUE9SVF9TWU1CT0woc3RyMmVhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYwppbmRleCA3ODMyYWQyLi5mOWViMWFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJhbGYgQmFlY2hsZQogICogQ29weXJpZ2h0IChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CkBAIC0xNCw5ICsxNSw5IEBACiAKICNpbmNsdWRlICJvcF9pbXBsLmgiCiAKLWV4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHhfb3BzIF9fYXR0cmlidXRlX18oKHdlYWspKTsKLWV4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9ybTkwMDBfb3BzIF9fYXR0cmlidXRlX18oKHdlYWspKTsKLWV4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9sb29uZ3NvbjJfb3BzIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHhfb3BzIF9fd2VhazsKK2V4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9ybTkwMDBfb3BzIF9fd2VhazsKK2V4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9sb29uZ3NvbjJfb3BzIF9fd2VhazsKIAogc3RhdGljIHN0cnVjdCBvcF9taXBzX21vZGVsICptb2RlbDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCmluZGV4IDQ3NWZmNDYuLjI5ZTIzMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYworKysgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IFlhbmh1YSA8eWFuaEBsZW1vdGUuY29tPgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTQ3LDggKzQ3LDYgQEAKIAlpbnQgY250MV9lbmFibGVkLCBjbnQyX2VuYWJsZWQ7CiB9IHJlZzsKIAotREVGSU5FX1NQSU5MT0NLKHNhbXBsZV9sb2NrKTsKLQogc3RhdGljIGNoYXIgKm9wcm9maWQgPSAiTG9vbmdzb25QZXJmIjsKIHN0YXRpYyBpcnFyZXR1cm5fdCBsb29uZ3NvbjJfcGVyZmNvdW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIC8qIENvbXB1dGUgYWxsIG9mIHRoZSByZWdpc3RlcnMgaW4gcHJlcGFyYXRpb24gZm9yIGVuYWJsaW5nIHByb2ZpbGluZy4gICovCkBAIC0xMTUsNyArMTEzLDYgQEAKIAl1aW50NjRfdCBjb3VudGVyLCBjb3VudGVyMSwgY291bnRlcjI7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAlpbnQgZW5hYmxlZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKIAkgKiBMT09OR1NPTjIgZGVmaW5lcyB0d28gMzItYml0IHBlcmZvcm1hbmNlIGNvdW50ZXJzLgpAQCAtMTM2LDggKzEzMyw2IEBACiAJY291bnRlcjEgPSBjb3VudGVyICYgMHhmZmZmZmZmZjsKIAljb3VudGVyMiA9IGNvdW50ZXIgPj4gMzI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2FtcGxlX2xvY2ssIGZsYWdzKTsKLQogCWlmIChjb3VudGVyMSAmIExPT05HU09OMl9QRVJGQ05UX09WRVJGTE9XKSB7CiAJCWlmIChyZWcuY250MV9lbmFibGVkKQogCQkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCAwKTsKQEAgLTE0OSw4ICsxNDQsNiBAQAogCQljb3VudGVyMiA9IHJlZy5yZXNldF9jb3VudGVyMjsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYW1wbGVfbG9jaywgZmxhZ3MpOwotCiAJd3JpdGVfYzBfcGVyZmNudCgoY291bnRlcjIgPDwgMzIpIHwgY291bnRlcjEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1jb2JhbHQuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMKaW5kZXggOTU1M2IxNC4uYWNhY2QxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1jb2JhbHQuYworKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWNvYmFsdC5jCkBAIC01MSw2ICs1MSw2NyBAQAogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q2NDExMSwKIAkgcXViZV9yYXFfZ2FsaWxlb19lYXJseV9maXh1cCk7CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBjb2JhbHRfbGVnYWN5X2lkZV9yZXNvdXJjZV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKilkZXYtPnN5c2RhdGE7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBob3NlLT5pb19vZmZzZXQ7CisJc3RydWN0IHJlc291cmNlIG9yaWcgPSAqcmVzOworCisJaWYgKCEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHx8CisJICAgICEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUENJX0ZJWEVEKSkKKwkJcmV0dXJuOworCisJcmVzLT5zdGFydCAtPSBvZmZzZXQ7CisJcmVzLT5lbmQgLT0gb2Zmc2V0OworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiY29udmVydGVkIGxlZ2FjeSAlcFIgdG8gYnVzICVwUlxuIiwKKwkJICAgJm9yaWcsIHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBjb2JhbHRfbGVnYWN5X2lkZV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXUzMiBjbGFzczsKKwl1OCBwcm9naWY7CisKKwkvKgorCSAqIElmIHRoZSBJREUgY29udHJvbGxlciBpcyBpbiBsZWdhY3kgbW9kZSwgcGNpX3NldHVwX2RldmljZSgpIGZpbGxzIGluCisJICogdGhlIHJlc291cmNlcyB3aXRoIHRoZSBsZWdhY3kgYWRkcmVzc2VzIHRoYXQgbm9ybWFsbHkgYXBwZWFyIG9uIHRoZQorCSAqIFBDSSBidXMsIGp1c3QgYXMgaWYgd2UgaGFkIHJlYWQgdGhlbSBmcm9tIGEgQkFSLgorCSAqCisJICogSG93ZXZlciwgd2l0aCB0aGUgR1QtNjQxMTEsIHRob3NlIGxlZ2FjeSBhZGRyZXNzZXMsIGUuZy4sIDB4MWYwLAorCSAqIHdpbGwgbmV2ZXIgYXBwZWFyIG9uIHRoZSBQQ0kgYnVzIGJlY2F1c2UgaXQgY29udmVydHMgbWVtb3J5IGFjY2Vzc2VzCisJICogaW4gdGhlIFBDSSBJL08gcmVnaW9uICh3aGljaCBpcyBuZXZlciBhdCBhZGRyZXNzIHplcm8pIGludG8gSS9PIHBvcnQKKwkgKiBhY2Nlc3NlcyB3aXRoIG5vIGFkZHJlc3MgdHJhbnNsYXRpb24uCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgR1RfREVGX1BDSTBfSU9fQkFTRSBpcyAweDEwMDAwMDAwLCBhIGxvYWQgb3Igc3RvcmUKKwkgKiB0byBwaHlzaWNhbCBhZGRyZXNzIDB4MTAwMDAxZjAgd2lsbCBiZWNvbWUgYSBQQ0kgYWNjZXNzIHRvIEkvTyBwb3J0CisJICogMHgxMDAwMDFmMC4gIFRoZXJlJ3Mgbm8gd2F5IHRvIGdlbmVyYXRlIGFuIGFjY2VzcyB0byBJL08gcG9ydCAweDFmMCwKKwkgKiBidXQgdGhlIFZUODJDNTg2IElERSBjb250cm9sbGVyIGRvZXMgcmVzcG9uZCBhdCAweDEwMDAwMWYwIGJlY2F1c2UKKwkgKiBpdCBvbmx5IGRlY29kZXMgdGhlIGxvdyAyNCBiaXRzIG9mIHRoZSBhZGRyZXNzLgorCSAqCisJICogV2hlbiB0aGlzIHF1aXJrIHJ1bnMsIHRoZSBwY2lfZGV2IHJlc291cmNlcyBzaG91bGQgY29udGFpbiBidXMKKwkgKiBhZGRyZXNzZXMsIG5vdCBMaW51eCBJL08gcG9ydCBudW1iZXJzLCBzbyBjb252ZXJ0IGxlZ2FjeSBhZGRyZXNzZXMKKwkgKiBsaWtlIDB4MWYwIHRvIGJ1cyBhZGRyZXNzZXMgbGlrZSAweDEwMDAwMWYwLiAgTGF0ZXIsIHdlJ2xsIGNvbnZlcnQKKwkgKiB0aGVtIGJhY2sgd2l0aCBwY2liaW9zX2ZpeHVwX2J1cygpIG9yIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKCkuCisJICovCisJY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CisJaWYgKGNsYXNzICE9IFBDSV9DTEFTU19TVE9SQUdFX0lERSkKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUFJPRywgJnByb2dpZik7CisJaWYgKChwcm9naWYgJiAxKSA9PSAwKSB7CisJCWNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKGRldiwgJmRldi0+cmVzb3VyY2VbMF0pOworCQljb2JhbHRfbGVnYWN5X2lkZV9yZXNvdXJjZV9maXh1cChkZXYsICZkZXYtPnJlc291cmNlWzFdKTsKKwl9CisJaWYgKChwcm9naWYgJiA0KSA9PSAwKSB7CisJCWNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKGRldiwgJmRldi0+cmVzb3VyY2VbMl0pOworCQljb2JhbHRfbGVnYWN5X2lkZV9yZXNvdXJjZV9maXh1cChkZXYsICZkZXYtPnJlc291cmNlWzNdKTsKKwl9Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzEsCisJICBjb2JhbHRfbGVnYWN5X2lkZV9maXh1cCk7CisKIHN0YXRpYyB2b2lkIHF1YmVfcmFxX3ZpYV9ibUlERV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIHNob3J0IGNmZ3dvcmQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMKaW5kZXggY2FmMmVkZS4uNGI5NzY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1sZW1vdGUyZi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtbGVtb3RlMmYuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAKIAkvKiBTZXJpYWwgc2hvcnQgZGV0ZWN0IGVuYWJsZSAqLwogCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfQ09ORklHKSwgJmhpLCAmbG8pOwotCV93cm1zcihVU0JfTVNSX1JFRyhVU0JfQ09ORklHKSwgKDEgPDwgMSkgfCAoMSA8PCAyKSB8ICgxIDw8IDMpLCBsbyk7CisJX3dybXNyKFVTQl9NU1JfUkVHKFVTQl9DT05GSUcpLCAoMSA8PCAxKSB8ICgxIDw8IDMpLCBsbyk7CiAKIAkvKiBzZXR0aW5nIHRoZSBVU0IyLjAgbWljcm8gZnJhbWUgbGVuZ3RoICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfRUhDSV9GTEFESl9SRUcsIDB4MjAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1sb29uZ3NvbjIuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jCmluZGV4IGFhNWQzZGEuLjJiYjQwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jCkBAIC0xLDEzICsxLDExIEBACiAvKgotICogZnVsb29uZzJlIHNwZWNpZmljIFBDSSBzdXBwb3J0LgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwNCAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqCUFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKglBdXRob3JzOiBDYXJzdGVuIExhbmdnYWFyZCA8Y2Fyc3RlbmxAbWlwcy5jb20+CiAgKgkJIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCmluZGV4IDMyNTQ4YjUuLjA0YjMxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAmJiBQQ0lfQ09VTlRFUlMgKi8KIAotREVGSU5FX1NQSU5MT0NLKGJwY2lfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJwY2lfbG9jayk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTQ3eHguYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTQ3eHguYwppbmRleCBiZWE5YjZjLi40NTVmOGU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1iY200N3h4LmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktYmNtNDd4eC5jCkBAIC01Nyw0ICs1NywzIEBACiAJZGV2LT5pcnEgPSByZXM7CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jIGIvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKaW5kZXggOWNiMGM4MC4uZDI0OGI3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKQEAgLTIwOSwxNiArMjA5LDE0IEBACiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfTkFPMzg6CiAJCS8qIFRoaXMgaXMgcmVhbGx5IHRoZSBOQUMzOCAqLwogCQlyZXR1cm4gIkFBQUFBREFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIjsKLQljYXNlIENWTVhfQk9BUkRfVFlQRV9USFVOREVSOgotCQlyZXR1cm4gIiI7Ci0JY2FzZSBDVk1YX0JPQVJEX1RZUEVfRUJIMzAwMDoKLQkJcmV0dXJuICIiOwogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0VCSDMxMDA6CiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfQ04zMDEwX0VWQl9IUzU6CiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfQ04zMDA1X0VWQl9IUzU6CiAJCXJldHVybiAiQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiOwogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0JCR1dfUkVGOgogCQlyZXR1cm4gIkFBQkNEIjsKKwljYXNlIENWTVhfQk9BUkRfVFlQRV9USFVOREVSOgorCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0VCSDMwMDA6CiAJZGVmYXVsdDoKIAkJcmV0dXJuICIiOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLmMgYi9hcmNoL21pcHMvcGNpL3BjaS5jCmluZGV4IDlhMTFjMjIuLjM4YmMyODAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2kuYwpAQCAtNDksOCArNDksOCBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CkBAIC03Myw3ICs3Myw3IEBACiAJCQlzdGFydCA9IFBDSUJJT1NfTUlOX01FTSArIGhvc2UtPm1lbV9yZXNvdXJjZS0+c3RhcnQ7CiAJfQogCi0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2NhbmJ1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCkBAIC0yNTEsOCArMjUxLDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgewogCQlpZiAoIWRldi0+cmVzb3VyY2VbaV0uc3RhcnQpCiAJCQljb250aW51ZTsKLQkJaWYgKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX1BDSV9GSVhFRCkKLQkJCWNvbnRpbnVlOwogCQlpZiAoZGV2LT5yZXNvdXJjZVtpXS5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCQlvZmZzZXQgPSBob3NlLT5pb19vZmZzZXQ7CiAJCWVsc2UgaWYgKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9jaWMuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9jaWMuYwppbmRleCA1MTc1MzU3Li45NGM5YzJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfY2ljLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX2NpYy5jCkBAIC0xMzEsNCArMTMxLDMgQEAKIAllbHNlCiAJCWRvX0lSUShmZnMocGVuZGluZykgKyBpbnRiYXNlIC0gMSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uYwppbmRleCBjMzE3YTM2Li5kYjk4ZDg3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5jCkBAIC0zMDMsMTIgKzMwMyw2IEBACiB9CiAKIC8qIFBST00gY29tbWFuZGxpbmUgZnVuY3Rpb25zICovCi1jaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCkKLXsKLQlyZXR1cm4gJihhcmNzX2NtZGxpbmVbMF0pOwotfQotRVhQT1JUX1NZTUJPTChwcm9tX2dldGNtZGxpbmUpOwotCiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKIAljaGFyICpjcDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5jCmluZGV4IGZjOTkwY2IuLmQ2ZjhiZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIAlpZiAoYWNrKSB7CiAJCWRvX2lkbGUoKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIHRoZSBBdG1lbCAyNEMzMi8yNEM2NCBFRVBST00gXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIHRoZSBBdG1lbCAyNEMzMi8yNEM2NCBFRVBST01cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5oIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uaAppbmRleCBhMzEyODgzLi5kNmM3ZWM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5oCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmgKQEAgLTY1LDQgKzY1LDMgQEAKIGNvbnN0IGNoYXIgcnRzID0gVElPQ01fUlRTOwogY29uc3QgY2hhciBkdHIgPSBUSU9DTV9EVFI7CiBpbnQgZmQ7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jCmluZGV4IDY3ODM4OGYuLmZkMjI1OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaHQuYwpAQCAtMzQ1LDE0ICszNDUsMTMgQEAKICAgICAgICAgcmV0dXJuIHBjaWJpb3NfZW5hYmxlX3Jlc291cmNlcyhkZXYpOwogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKICAgICAgICAgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogICAgICAgICAgICAgICAgIC8qIFdlIG5lZWQgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIGBtaXJyb3JlZCcgVkdBIHBvcnRzCiAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHN0cmFuZ2UgSVNBIGhhcmR3YXJlLCBzbyB3ZSBhbHdheXMgd2FudCB0aGUKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXMga2lsb2J5dGUgYWxpZ25lZC4gICovCkBAIC0zNjMsOCArMzYyLDkgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBzdGFydCA9IChzdGFydCArIDEwMjQgLSAxKSAmIH4oMTAyNCAtIDEpOwotICAgICAgICAgICAgICAgIHJlcy0+c3RhcnQgPSBzdGFydDsKICAgICAgICAgfQorCisJcmV0dXJuIHN0YXJ0OwogfQogCiBzdHJ1Y3QgcGNpX29wcyB0aXRhbl9wY2lfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYwppbmRleCAzMjZmZTdhLi5lZmM5ZTg4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYwpAQCAtOCw3ICs4LDcgQEAKIAogI2RlZmluZSBMQVVOQ0hTVEFDS19TSVpFIDI1NgogCi1zdGF0aWMgX19jcHVpbml0ZGF0YSBERUZJTkVfU1BJTkxPQ0sobGF1bmNoX2xvY2spOworc3RhdGljIF9fY3B1aW5pdGRhdGEgYXJjaF9zcGlubG9ja190IGxhdW5jaF9sb2NrID0gX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X3NwIF9fY3B1aW5pdGRhdGE7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzZWNvbmRhcnlfZ3AgX19jcHVpbml0ZGF0YTsKQEAgLTIwLDcgKzIwLDcgQEAKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0Jd2hpbGUgKHNwaW5faXNfbG9ja2VkKCZsYXVuY2hfbG9jaykpOworCXdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKCZsYXVuY2hfbG9jaykpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIgltb3ZlCSRzcCwgJTAJCVxuIgpAQCAtMzcsNyArMzcsNyBAQAogICovCiB2b2lkIF9faW5pdCBwcm9tX2dyYWJfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrKCZsYXVuY2hfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJmxhdW5jaF9sb2NrKTsKIAogCXBtb25fY3B1c3RhcnQoMSwgJnByb21fc21wX2Jvb3RzdHJhcCwKIAkgICAgICAgICAgICAgIGxhdW5jaHN0YWNrICsgTEFVTkNIU1RBQ0tfU0laRSwgMCk7CkBAIC0xMzgsNyArMTM4LDcgQEAKIAlzZWNvbmRhcnlfc3AgPSBzcDsKIAlzZWNvbmRhcnlfZ3AgPSBncDsKIAotCXNwaW5fdW5sb2NrKCZsYXVuY2hfbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmbGF1bmNoX2xvY2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VyL2NwdS5jIGIvYXJjaC9taXBzL3Bvd2VyL2NwdS5jCmluZGV4IDc5OTVkZjQuLjI2YTZlZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlci9jcHUuYworKysgYi9hcmNoL21pcHMvcG93ZXIvY3B1LmMKQEAgLTMsOSArMyw5IEBACiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IEh1IEhvbmdiaW5nIDxodWhiQGxlbW90ZS5jb20+Ci0gKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TIGIvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCmluZGV4IDBjZjg2ZmIuLmRiYjVjN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUworKysgYi9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKQEAgLTMsOSArMyw5IEBACiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IEh1IEhvbmdiaW5nIDxodWhiQGxlbW90ZS5jb20+Ci0gKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYwppbmRleCA2YTg4MjE5Li4yMTc0MjQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKQEAgLTM0MCwxMCArMzQwLDYgQEAKIAogCXN3aXRjaCAoYXNpYykgewogCWNhc2UgQVNJQ19aRVVTOgotCQlmc191cGRhdGUoMHgwMDAwLCAweDExLCAweDAyLCAwKTsKLQkJYmNtMV91c2IyX2N0bCA9IDB4ODAzOwotCQlicmVhazsKLQogCWNhc2UgQVNJQ19DUk9OVVM6CiAJY2FzZSBBU0lDX0NST05VU0xJVEU6CiAJCWZzX3VwZGF0ZSgweDAwMDAsIDB4MTEsIDB4MDIsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCmluZGV4IDgwYjJlZWQuLjMyNWZhYjk2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfaW50LmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCkBAIC0zOSwyMSArMzksMjEgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXNpY19pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhhc2ljX2lycV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2ludCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlycTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnEgPSAoYXNpY19yZWFkKGludF9pbnRfc2NhbikgPj4gNCkgLSAxOwogCiAJaWYgKGlycSA9PSAwIHx8IGlycSA+PSBOUl9JUlFTKQogCQlpcnEgPSAtMTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWNfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGlycTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYwppbmRleCA2OThiMWVhLi5hZjJjYWUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0dl9zZXR1cC5jCkBAIC0yNSwxNCArMjUsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLQogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKwogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSAicmVzZXQuaCIKQEAgLTQxLDI2ICs0MiwyMSBAQAogCiAvKgogICogTWFjcm9zIGZvciBsb2FkaW5nIGFkZHJlc3NlcyBhbmQgc3RvcmluZyByZWdpc3RlcnM6Ci0gKiBQVFJfTEEJTG9hZCB0aGUgYWRkcmVzcyBpbnRvIGEgcmVnaXN0ZXIKLSAqIExPTkdfUwlTdG9yZSB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIuCi0gKiBMT05HX0wJTG9hZCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIKLSAqIFBUUl9BRERJVQlBZGQgYSBjb25zdGFudCB2YWx1ZSB0byBhIHJlZ2lzdGVyIHVzZWQgYXMgYSBwb2ludGVyCisgKiBMT05HX0xfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgTE9OR19MIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CisgKiBMT05HX1NfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgTE9OR19TIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CisgKiBQVFJfTEFfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgUFRSX0xBIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CiAgKiBSRUdfU0laRQlOdW1iZXIgb2YgOC1iaXQgYnl0ZXMgaW4gYSBmdWxsIHdpZHRoIHJlZ2lzdGVyCiAgKi8KKyNkZWZpbmUgTE9OR19MXwkJVkFMKExPTkdfTCkgIiAiCisjZGVmaW5lIExPTkdfU18JCVZBTChMT05HX1MpICIgIgorI2RlZmluZSBQVFJfTEFfCQlWQUwoUFRSX0xBKSAiICIKKwogI2lmZGVmIENPTkZJR182NEJJVAogI3dhcm5pbmcgVE9ETzogNjQtYml0IGNvZGUgbmVlZHMgdG8gYmUgdmVyaWZpZWQKLSNkZWZpbmUgUFRSX0xBCQkiZGxhCSIKLSNkZWZpbmUgTE9OR19TCQkic2QJIgotI2RlZmluZSBMT05HX0wJCSJsZAkiCi0jZGVmaW5lIFBUUl9BRERJVQkiZGFkZGl1CSIKICNkZWZpbmUgUkVHX1NJWkUJIjgiCQkvKiBJbiBieXRlcyAqLwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfMzJCSVQKLSNkZWZpbmUgUFRSX0xBCQkibGEJIgotI2RlZmluZSBMT05HX1MJCSJzdwkiCi0jZGVmaW5lIExPTkdfTAkJImx3CSIKLSNkZWZpbmUgUFRSX0FERElVCSJhZGRpdQkiCiAjZGVmaW5lIFJFR19TSVpFCSI0IgkJLyogSW4gYnl0ZXMgKi8KICNlbmRpZgogCkBAIC0xMTMsOSArMTA5LDkgQEAKIAkJICogc3RydWN0dXJlLiAqLwogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCQkiLnNldAlub2F0XG4iCi0JCQlMT05HX1MJCSIkYXQsICVbYXRdXG4iCi0JCQlMT05HX1MJCSIkMiwgJVt2MF1cbiIKLQkJCUxPTkdfUwkJIiQzLCAlW3YxXVxuIgorCQkJTE9OR19TXwkJIiRhdCwgJVthdF1cbiIKKwkJCUxPTkdfU18JCSIkMiwgJVt2MF1cbiIKKwkJCUxPTkdfU18JCSIkMywgJVt2MV1cbiIKIAkJOgogCQkJW2F0XSAiPW0iIChhdCksCiAJCQlbdjBdICI9bSIgKHYwKSwKQEAgLTEyOSw1NCArMTI1LDU0IEBACiAJCQkibW92ZQkJJGF0LCAlW3B0X3JlZ3NdXG4iCiAKIAkJCS8qIEFyZ3VtZW50IHJlZ2lzdGVycyAqLwotCQkJTE9OR19TCQkiJDQsICIgVkFMKFBUX1I0KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQ1LCAiIFZBTChQVF9SNSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkNiwgIiBWQUwoUFRfUjYpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDcsICIgVkFMKFBUX1I3KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkNCwgIiBWQUwoUFRfUjQpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQ1LCAiIFZBTChQVF9SNSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDYsICIgVkFMKFBUX1I2KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkNywgIiBWQUwoUFRfUjcpICIoJGF0KVxuIgogCiAJCQkvKiBUZW1wb3JhcnkgcmVncyAqLwotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1I4KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQ5LCAiIFZBTChQVF9SOSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTAsICIgVkFMKFBUX1IxMCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTEsICIgVkFMKFBUX1IxMSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTIsICIgVkFMKFBUX1IxMikgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTMsICIgVkFMKFBUX1IxMykgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTQsICIgVkFMKFBUX1IxNCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTUsICIgVkFMKFBUX1IxNSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDgsICIgVkFMKFBUX1I4KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkOSwgIiBWQUwoUFRfUjkpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxMCwgIiBWQUwoUFRfUjEwKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTEsICIgVkFMKFBUX1IxMSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDEyLCAiIFZBTChQVF9SMTIpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxMywgIiBWQUwoUFRfUjEzKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTQsICIgVkFMKFBUX1IxNCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE1LCAiIFZBTChQVF9SMTUpICIoJGF0KVxuIgogCiAJCQkvKiAiU2F2ZWQiIHJlZ2lzdGVycyAqLwotCQkJTE9OR19TCQkiJDE2LCAiIFZBTChQVF9SMTYpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE3LCAiIFZBTChQVF9SMTcpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE4LCAiIFZBTChQVF9SMTgpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE5LCAiIFZBTChQVF9SMTkpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIwLCAiIFZBTChQVF9SMjApICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIxLCAiIFZBTChQVF9SMjEpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIyLCAiIFZBTChQVF9SMjIpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIzLCAiIFZBTChQVF9SMjMpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxNiwgIiBWQUwoUFRfUjE2KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTcsICIgVkFMKFBUX1IxNykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE4LCAiIFZBTChQVF9SMTgpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxOSwgIiBWQUwoUFRfUjE5KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjAsICIgVkFMKFBUX1IyMCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDIxLCAiIFZBTChQVF9SMjEpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyMiwgIiBWQUwoUFRfUjIyKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjMsICIgVkFMKFBUX1IyMykgIigkYXQpXG4iCiAKIAkJCS8qIEFkZCdsIHRlbXAgcmVncyAqLwotCQkJTE9OR19TCQkiJDI0LCAiIFZBTChQVF9SMjQpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDI1LCAiIFZBTChQVF9SMjUpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyNCwgIiBWQUwoUFRfUjI0KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjUsICIgVkFMKFBUX1IyNSkgIigkYXQpXG4iCiAKIAkJCS8qIEtlcm5lbCB0ZW1wIHJlZ3MgKi8KLQkJCUxPTkdfUwkJIiQyNiwgIiBWQUwoUFRfUjI2KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyNywgIiBWQUwoUFRfUjI3KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjYsICIgVkFMKFBUX1IyNikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDI3LCAiIFZBTChQVF9SMjcpICIoJGF0KVxuIgogCiAJCQkvKiBHbG9iYWwgcG9pbnRlciwgc3RhY2sgcG9pbnRlciwgZnJhbWUgcG9pbnRlciBhbmQKIAkJCSAqIHJldHVybiBhZGRyZXNzICovCi0JCQlMT05HX1MJCSIkZ3AsICIgVkFMKFBUX1IyOCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkc3AsICIgVkFMKFBUX1IyOSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkZnAsICIgVkFMKFBUX1IzMCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkcmEsICIgVkFMKFBUX1IzMSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJGdwLCAiIFZBTChQVF9SMjgpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiRzcCwgIiBWQUwoUFRfUjI5KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkZnAsICIgVkFMKFBUX1IzMCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJHJhLCAiIFZBTChQVF9SMzEpICIoJGF0KVxuIgogCiAJCQkvKiBOb3cgd2UgY2FuIGdldCB0aGUgJGF0IGFuZCB2MCByZWdpc3RlcnMgYmFjayBhbmQKIAkJCSAqIHN0b3JlIHRoZW0gKi8KLQkJCUxPTkdfTAkJIiQ4LCAlW2F0XVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IxKSAiKCRhdClcbiIKLQkJCUxPTkdfTAkJIiQ4LCAlW3YwXVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IyKSAiKCRhdClcbiIKLQkJCUxPTkdfTAkJIiQ4LCAlW3YxXVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IzKSAiKCRhdClcbiIKKwkJCUxPTkdfTF8JCSIkOCwgJVthdF1cbiIKKwkJCUxPTkdfU18JCSIkOCwgIiBWQUwoUFRfUjEpICIoJGF0KVxuIgorCQkJTE9OR19MXwkJIiQ4LCAlW3YwXVxuIgorCQkJTE9OR19TXwkJIiQ4LCAiIFZBTChQVF9SMikgIigkYXQpXG4iCisJCQlMT05HX0xfCQkiJDgsICVbdjFdXG4iCisJCQlMT05HX1NfCQkiJDgsICIgVkFMKFBUX1IzKSAiKCRhdClcbiIKIAkJOgogCQk6CiAJCQlbYXRdICJtIiAoYXQpLApAQCAtMTkxLDggKzE4Nyw4IEBACiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJCSIuc2V0CW5vYXRcbiIKIAkJIjE6XG4iCi0JCQlQVFJfTEEJCSIkYXQsIDFiXG4iCi0JCQlMT05HX1MJCSIkYXQsICVbY3AwX2VwY11cbiIKKwkJCVBUUl9MQV8JCSIkYXQsIDFiXG4iCisJCQlMT05HX1NfCQkiJGF0LCAlW2NwMF9lcGNdXG4iCiAJCToKIAkJCVtjcDBfZXBjXSAiPW0iIChteV9yZWdzLmNwMF9lcGMpCiAJCToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKaW5kZXggZDljNzlkOC4uYzNkMzBhOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKQEAgLTEzMyw0ICsxMzMsMyBAQAogCQlyZXR1cm4gKEtETV9UT19QSFlTKFBBR0VfQUxJR04oU1lNTU9OX1NUS19BRERSKG5hc2lkLCAwKSkpID4+CiAJCQkJCQkJCVBBR0VfU0hJRlQpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCmluZGV4IDZjNWE2MzAuLmJjNGZhOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCkBAIC0xNywxMSArMTcsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIENOT0RFSURfTk9ORSAoY25vZGVpZF90KS0xCi0jZGVmaW5lIGVudGVyX3BhbmljX21vZGUoKQlzcGluX2xvY2soJm5taV9sb2NrKQogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWFjaHJlZ190OwogCi1ERUZJTkVfU1BJTkxPQ0sobm1pX2xvY2spOworc3RhdGljIGFyY2hfc3BpbmxvY2tfdCBubWlfbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIC8qCiAgKiBMZXRzIHNlZSB3aGF0IGVsc2Ugd2UgbmVlZCB0byBkbyBoZXJlLiBTZXQgdXAgc3AsIGdwPwpAQCAtMTkzLDkgKzE5Miw5IEBACiAJYXRvbWljX2luYygmbm1pZWRfY3B1cyk7CiAjZW5kaWYKIAkvKgotCSAqIFVzZSBlbnRlcl9wYW5pY19tb2RlIHRvIGFsbG93IG9ubHkgMSBjcHUgdG8gcHJvY2VlZAorCSAqIE9ubHkgYWxsb3cgMSBjcHUgdG8gcHJvY2VlZAogCSAqLwotCWVudGVyX3BhbmljX21vZGUoKTsKKwlhcmNoX3NwaW5fbG9jaygmbm1pX2xvY2spOwogCiAjaWZkZWYgUkVBTF9OTUlfU0lHTkFMCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKaW5kZXggNWMyYmYxMS4uZDhiNjUyMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKQEAgLTUxMiwxMCArNTEyLDYgQEAKIAkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgQ1JJTUVfR0JFMF9JUlEgLi4uIENSSU1FX0dCRTNfSVJROgotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAotCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCQkJYnJlYWs7CiAJCWNhc2UgQ1JJTUVfQ1BVRVJSX0lSUToKIAkJY2FzZSBDUklNRV9NRU1FUlJfSVJROgogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLApAQCAtNTIzLDEyICs1MTksOSBAQAogCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBDUklNRV9HQkUwX0lSUSAuLi4gQ1JJTUVfR0JFM19JUlE6CiAJCWNhc2UgQ1JJTUVfUkVfRU1QVFlfRV9JUlEgLi4uIENSSU1FX1JFX0lETEVfRV9JUlE6CiAJCWNhc2UgQ1JJTUVfU09GVDBfSVJRIC4uLiBDUklNRV9TT0ZUMl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCi0JCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JCQlicmVhazsKLQogCQljYXNlIENSSU1FX1ZJQ0VfSVJROgogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAogCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCmluZGV4IDQwNzAyNjguLjA2ZTI1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKQEAgLTczLDE0ICs3MywxNCBAQAogLyogU3RvcmUgdGhlIENQVSBpZCAobm90IHRoZSBsb2dpY2FsIG51bWJlcikgKi8KIGludCBiY20xNDgwX2lycV9vd25lcltCQ00xNDgwX05SX0lSUVNdOwogCi1ERUZJTkVfU1BJTkxPQ0soYmNtMTQ4MF9pbXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhiY20xNDgwX2ltcl9sb2NrKTsKIAogdm9pZCBiY20xNDgwX21hc2tfaXJxKGludCBjcHUsIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgaGxfc3BhY2luZzsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCWhsX3NwYWNpbmcgPSAwOwogCWlmICgoaXJxID49IEJDTTE0ODBfTlJfSVJRU19IQUxGKSAmJiAoaXJxIDw9IEJDTTE0ODBfTlJfSVJRUykpIHsKIAkJaGxfc3BhY2luZyA9IEJDTTE0ODBfSU1SX0hMX1NQQUNJTkc7CkBAIC04OSw3ICs4OSw3IEBACiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwogCWN1cl9pbnRzIHw9ICgoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgYmNtMTQ4MF91bm1hc2tfaXJxKGludCBjcHUsIGludCBpcnEpCkBAIC05Nyw3ICs5Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgaGxfc3BhY2luZzsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCWhsX3NwYWNpbmcgPSAwOwogCWlmICgoaXJxID49IEJDTTE0ODBfTlJfSVJRU19IQUxGKSAmJiAoaXJxIDw9IEJDTTE0ODBfTlJfSVJRUykpIHsKIAkJaGxfc3BhY2luZyA9IEJDTTE0ODBfSU1SX0hMX1NQQUNJTkc7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAljdXJfaW50cyA9IF9fX19yYXdfcmVhZHEoSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7CiAJY3VyX2ludHMgJj0gfigoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMjMsNyArMTIzLDcgQEAKIAljcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CiAKIAkvKiBQcm90ZWN0IGFnYWluc3Qgb3RoZXIgYWZmaW5pdHkgY2hhbmdlcnMgYW5kIElNUiBtYW5pcHVsYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJLyogU3dpenpsZSBlYWNoIENQVSdzIElNUiAoYnV0IGxlYXZlIHRoZSBJUCBzZWxlY3Rpb24gYWxvbmUpICovCiAJb2xkX2NwdSA9IGJjbTE0ODBfaXJxX293bmVyW2lycV07CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9CQ00xNDgwX0lNUl9NQVBQRVIoY3B1KSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX01BU0tfSCArIChrKkJDTTE0ODBfSU1SX0hMX1NQQUNJTkcpKSk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKaW5kZXggMTVlYTc3OC4uZWQyNDUzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKaW5kZXggNWU3ZjIwMS4uYWI0NGEyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKQEAgLTcyLDIwICs3MiwyMCBAQAogLyogU3RvcmUgdGhlIENQVSBpZCAobm90IHRoZSBsb2dpY2FsIG51bWJlcikgKi8KIGludCBzYjEyNTBfaXJxX293bmVyW1NCMTI1MF9OUl9JUlFTXTsKIAotREVGSU5FX1NQSU5MT0NLKHNiMTI1MF9pbXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzYjEyNTBfaW1yX2xvY2spOwogCiB2b2lkIHNiMTI1MF9tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0lNUl9NQVBQRVIoY3B1KSArCiAJCQkJCVJfSU1SX0lOVEVSUlVQVF9NQVNLKSk7CiAJY3VyX2ludHMgfD0gKCgodTY0KSAxKSA8PCBpcnEpOwogCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9JTVJfTUFQUEVSKGNwdSkgKwogCQkJCQlSX0lNUl9JTlRFUlJVUFRfTUFTSykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBzYjEyNTBfdW5tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQpAQCAtOTMsMTMgKzkzLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIAljdXJfaW50cyA9IF9fX19yYXdfcmVhZHEoSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKIAljdXJfaW50cyAmPSB+KCgodTY0KSAxKSA8PCBpcnEpOwogCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9JTVJfTUFQUEVSKGNwdSkgKwogCQkJCQlSX0lNUl9JTlRFUlJVUFRfTUFTSykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTExNSw3ICsxMTUsNyBAQAogCWNwdSA9IGNwdV9sb2dpY2FsX21hcChpKTsKIAogCS8qIFByb3RlY3QgYWdhaW5zdCBvdGhlciBhZmZpbml0eSBjaGFuZ2VycyBhbmQgSU1SIG1hbmlwdWxhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJLyogU3dpenpsZSBlYWNoIENQVSdzIElNUiAoYnV0IGxlYXZlIHRoZSBJUCBzZWxlY3Rpb24gYWxvbmUpICovCiAJb2xkX2NwdSA9IHNiMTI1MF9pcnFfb3duZXJbaXJxXTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3JtMjAwLmMgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKaW5kZXggNDZmMDA2OS4uOTBjNTU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgKiByZWFkYi93cml0ZWIgdG8gYWNjZXNzIHRoZW0KICAqLwogCi1ERUZJTkVfU1BJTkxPQ0soc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAjZGVmaW5lIFBJQ19DTUQgICAgMHgwMAogI2RlZmluZSBQSUNfSU1SICAgIDB4MDEKICNkZWZpbmUgUElDX0lTUiAgICBQSUNfQ01ECkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogCiAJaXJxIC09IFJNMjAwX0k4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJcm0yMDBfY2FjaGVkX2lycV9tYXNrIHw9IG1hc2s7CiAJaWYgKGlycSAmIDgpCiAJCXdyaXRlYihjYWNoZWRfc2xhdmVfbWFzaywgcm0yMDBfcGljX3NsYXZlICsgUElDX0lNUik7CiAJZWxzZQogCQl3cml0ZWIoY2FjaGVkX21hc3Rlcl9tYXNrLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBzbmlfcm0yMDBfZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTc3LDEzICsxNzcsMTMgQEAKIAogCWlycSAtPSBSTTIwMF9JODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IH4oMSA8PCBpcnEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogCXJtMjAwX2NhY2hlZF9pcnFfbWFzayAmPSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQl3cml0ZWIoY2FjaGVkX3NsYXZlX21hc2ssIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwogCWVsc2UKIAkJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc25pX3JtMjAwX2k4MjU5QV9pcnFfcmVhbCh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjE2LDcgKzIxNiw3IEBACiAKIAlpcnEgLT0gUk0yMDBfSTgyNTlBX0lSUV9CQVNFOwogCWlycW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIExpZ2h0d2VpZ2h0IHNwdXJpb3VzIElSUSBkZXRlY3Rpb24uIFdlIGRvIG5vdCB3YW50CiAJICogdG8gb3ZlcmRvIHNwdXJpb3VzIElSUSBoYW5kbGluZyAtIGl0J3MgdXN1YWxseSBhIHNpZ24KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQl3cml0ZWIoY2FjaGVkX21hc3Rlcl9tYXNrLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7CiAJCXdyaXRlYigweDYwK2lycSwgcm0yMDBfcGljX21hc3RlciArIFBJQ19DTUQpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogCiBzcHVyaW91c184MjU5QV9pcnE6CkBAIC0yOTgsNyArMjk4LDcgQEAKIHsKIAlpbnQgaXJxOwogCi0Jc3Bpbl9sb2NrKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2spOworCXJhd19zcGluX2xvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAKIAkvKiBQZXJmb3JtIGFuIGludGVycnVwdCBhY2tub3dsZWRnZSBjeWNsZSBvbiBjb250cm9sbGVyIDEuICovCiAJd3JpdGViKDB4MEMsIHJtMjAwX3BpY19tYXN0ZXIgKyBQSUNfQ01EKTsJLyogcHJlcGFyZSBmb3IgcG9sbCAqLwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCQlpcnEgPSAtMTsKIAl9CiAKLQlzcGluX3VubG9jaygmc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAKIAlyZXR1cm4gbGlrZWx5KGlycSA+PSAwKSA/IGlycSArIFJNMjAwX0k4MjU5QV9JUlFfQkFTRSA6IGlycTsKIH0KQEAgLTMzNCw3ICszMzQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCXdyaXRlYigweGZmLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7CiAJd3JpdGViKDB4ZmYsIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwogCXdyaXRlYihjYWNoZWRfc2xhdmVfbWFzaywgcm0yMDBfcGljX3NsYXZlICsgUElDX0lNUik7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC00MDQsNyArNDA0LDcgQEAKIAlpZiAoIXJtMjAwX3BpY19tYXN0ZXIpCiAJCXJldHVybjsKIAlybTIwMF9waWNfc2xhdmUgPSBpb3JlbWFwX25vY2FjaGUoMHgxNjAwMDBhMCwgNCk7Ci0JaWYgKCFybTIwMF9waWNfbWFzdGVyKSB7CisJaWYgKCFybTIwMF9waWNfc2xhdmUpIHsKIAkJaW91bm1hcChybTIwMF9waWNfbWFzdGVyKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwppbmRleCBlMjc4MDliLi43MTc0ZDgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCkBAIC0zOTksMTEgKzM5OSw2IEBACiAJcmV0dXJuIHR4eDlfc3lzdGVtX3R5cGU7CiB9CiAKLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLQogY29uc3QgY2hhciAqX19pbml0IHByb21fZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJY29uc3QgczMyICpzdHI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L3NldHVwLmMKaW5kZXggMjVlNTBhNy4uMzIwNmY3NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2ptcjM5Mjcvc2V0dXAuYwpAQCAtNjcsOCArNjcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgam1yMzkyN19tZW1fc2V0dXAodm9pZCkKIHsKLQljaGFyICphcmdwdHI7Ci0KIAlzZXRfaW9fcG9ydF9iYXNlKEpNUjM5MjdfUE9SVF9CQVNFICsgSk1SMzkyN19QQ0lJTyk7CiAKIAlfbWFjaGluZV9yZXN0YXJ0ID0gam1yMzkyN19tYWNoaW5lX3Jlc3RhcnQ7CkBAIC05NywxMSArOTUsNiBAQAogCWptcjM5MjdfYm9hcmRfaW5pdCgpOwogCiAJdHgzOTI3X3Npb19pbml0KDAsIDEgPDwgMSk7IC8qIGNoMTogbm9DVFMgKi8KLSNpZmRlZiBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRQotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWlmICghc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9IikpCi0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMSwxMTUyMDAiKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgam1yMzkyN19wY2lfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9zZXR1cC5jCmluZGV4IGVlNDY4ZWEuLmIxNWFkZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mjcvc2V0dXAuYwpAQCAtMTg3LDggKzE4Nyw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCByYnR4NDkyN19tZW1fc2V0dXAodm9pZCkKIHsKLQljaGFyICphcmdwdHI7Ci0KIAlpZiAoVFg0OTI3X1JFVl9QQ09ERSgpID09IDB4NDkyNykgewogCQlyYnR4NDkyN19jbG9ja19pbml0KCk7CiAJCXR4NDkyN19zZXR1cCgpOwpAQCAtMjEzLDExICsyMTEsNiBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNSwgMSk7CiAKIAl0eDQ5Mjdfc2lvX2luaXQoMCwgMCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEUKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlpZiAoIXN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpKQotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMzg0MDAiKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MjdfY2xvY2tfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMKaW5kZXggZDY2NTA5Yi4uZDZlNzBkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jCkBAIC0xNTMsNyArMTUzLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCByYnR4NDkzOF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGNmZzsKLQljaGFyICphcmdwdHI7CiAKIAlpZiAodHh4OV9tYXN0ZXJfY2xvY2sgPT0gMCkKIAkJdHh4OV9tYXN0ZXJfY2xvY2sgPSAyNTAwMDAwMDsgLyogMjVNSHogKi8KQEAgLTE2OCwxMSArMTY3LDYgQEAKICNlbmRpZgogCiAJdHg0OTM4X3Npb19pbml0KDczNzI4MDAsIDApOwotI2lmZGVmIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JaWYgKCFzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKSkKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDM4NDAwIik7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19UT1NISUJBX1JCVFg0OTM4X01QTEVYX1BJTzU4XzYxCiAJcHJfaW5mbygiUElPU0VMOiBkaXNhYmxpbmcgYm90aCBBVEEgYW5kIE5BTkQgc2VsZWN0aW9uXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYwppbmRleCA3OGNkMTM0Li5kNjExOWI4IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jCkBAIC0zMSw5ICszMSwxMSBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogeworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CisKICNpZiAwCiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CiAKQEAgLTQ3LDE0ICs0OSwxMCBAQAogCSAgICAgICApOwogI2VuZGlmCiAKLQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IHJlcy0+c3RhcnQ7CisJaWYgKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgJiYgKHN0YXJ0ICYgMHgzMDApKQorCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKIAotCQlpZiAoc3RhcnQgJiAweDMwMCkgewotCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KLQl9CisJcmV0dXJuIHN0YXJ0OwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCmluZGV4IDJjYjdlNzUuLjZkODcyMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYwpAQCAtMzMxLDEyICszMzEsMTAgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlzX3ZhbGlkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgpCiB7CiAJdW5zaWduZWQgaW50IGksIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCXN0cnVjdCByZXNvdXJjZSAqZGV2ciA9ICZkZXYtPnJlc291cmNlW2lkeF0sICpidXNyOwogCiAJaWYgKGRldi0+YnVzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQkJc3RydWN0IHJlc291cmNlICpidXNyID0gZGV2LT5idXMtPnJlc291cmNlW2ldOwotCisJCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoZGV2LT5idXMsIGJ1c3IsIGkpIHsKIAkJCWlmICghYnVzciB8fCAoYnVzci0+ZmxhZ3MgXiBkZXZyLT5mbGFncykgJiB0eXBlX21hc2spCiAJCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IDUyNGQ5MzUuLmYzODhkYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtMTgsNyArMTgsNiBAQAogCXNlbGVjdCBCVUcKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICE2NEJJVAotCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJaGVscAogCSAgVGhlIFBBLVJJU0MgbWljcm9wcm9jZXNzb3IgaXMgZGVzaWduZWQgYnkgSGV3bGV0dC1QYWNrYXJkIGFuZCB1c2VkCiAJICBpbiBtYW55IG9mIHRoZWlyIHdvcmtzdGF0aW9ucyAmIHNlcnZlcnMgKEhQOTAwMCA3MDAgYW5kIDgwMCBzZXJpZXMsCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggN2E3M2I2MS4uNDc3Mjc3NyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMzgsNiArMzgsMTggQEAKIAogI2RlZmluZSBmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlKHN0YXJ0LHNpemUpIFwKIAlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbSgoc3RhcnQpLCAoc3RhcnQpKyhzaXplKSk7CisvKiB2bWFwIHJhbmdlIGZsdXNoZXMgYW5kIGludmFsaWRhdGVzLiAgQXJjaGl0ZWN0dXJhbGx5LCB3ZSBkb24ndCBuZWVkCisgKiB0aGUgaW52YWxpZGF0ZSwgYmVjYXVzZSB0aGUgQ1BVIHNob3VsZCByZWZ1c2UgdG8gc3BlY3VsYXRlIG9uY2UgYW4KKyAqIGFyZWEgaGFzIGJlZW4gZmx1c2hlZCwgc28gaW52YWxpZGF0ZSBpcyBsZWZ0IGVtcHR5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKKworCWZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2VfYXNtKHN0YXJ0LCBzdGFydCArIHNpemUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQoreworfQogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYwppbmRleCBmNzA2NGFiLi4zODM3MmU3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlLmg+CQkvKiBmb3IgTDFfQ0FDSEVfQllURVMgKi8KICNpbmNsdWRlIDxhc20vc3VwZXJpby5oPgogCiAjZGVmaW5lIERFQlVHX1JFU09VUkNFUyAwCkBAIC0xMjMsNiArMTIyLDEwIEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNpX2Jpb3MgIT0gTlVMTCBidXQgaW5pdCgpIGlzIVxuIik7CiAJfQorCisJLyogU2V0IHRoZSBDTFMgZm9yIFBDSSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gKi8KKwlwY2lfY2FjaGVfbGluZV9zaXplID0gcGNpX2RmbF9jYWNoZV9saW5lX3NpemU7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTcxLDcgKzE3NCw3IEBACiAJKiogdXBwZXIgYnl0ZSBpcyBQQ0lfTEFURU5DWV9USU1FUi4KIAkqLwogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsCi0JCQkJKDB4ODAgPDwgOCkgfCAoTDFfQ0FDSEVfQllURVMgLyBzaXplb2YodTMyKSkpOworCQkJICAgICAgKDB4ODAgPDwgOCkgfCBwY2lfY2FjaGVfbGluZV9zaXplKTsKIH0KIAogCkBAIC0yNTQsMTAgKzI1NywxMCBAQAogICogU2luY2Ugd2UgYXJlIGp1c3QgY2hlY2tpbmcgY2FuZGlkYXRlcywgZG9uJ3QgdXNlIGFueSBmaWVsZHMgb3RoZXIKICAqIHRoYW4gcmVzLT5zdGFydC4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbm1lbnQpCiB7Ci0JcmVzb3VyY2Vfc2l6ZV90IG1hc2ssIGFsaWduOworCXJlc291cmNlX3NpemVfdCBtYXNrLCBhbGlnbiwgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJREJHX1JFUygicGNpYmlvc19hbGlnbl9yZXNvdXJjZSglcywgKCVwKSBbJWx4LCVseF0vJXgsIDB4JWx4LCAweCVseClcbiIsCiAJCXBjaV9uYW1lKCgoc3RydWN0IHBjaV9kZXYgKikgZGF0YSkpLApAQCAtMjY5LDEwICsyNzIsMTAgQEAKIAogCS8qIEFsaWduIHRvIGxhcmdlc3Qgb2YgTUlOIG9yIGlucHV0IHNpemUgKi8KIAltYXNrID0gbWF4KGFsaWdubWVudCwgYWxpZ24pIC0gMTsKLQlyZXMtPnN0YXJ0ICs9IG1hc2s7Ci0JcmVzLT5zdGFydCAmPSB+bWFzazsKKwlzdGFydCArPSBtYXNrOworCXN0YXJ0ICY9IH5tYXNrOwogCi0JLyogVGhlIGNhbGxlciB1cGRhdGVzIHRoZSBlbmQgZmllbGQsIHdlIGRvbid0LiAgKi8KKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCmluZGV4IGZiMzdhYzUuLjM1YzgyN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTQ2OCw3ICs0NjgsOSBAQAogCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCXRyYWNlaG9va19zaWduYWxfaGFuZGxlcihzaWcsIGluZm8sIGthLCByZWdzLCAwKTsKKwl0cmFjZWhvb2tfc2lnbmFsX2hhbmRsZXIoc2lnLCBpbmZvLCBrYSwgcmVncywgCisJCXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApIHx8CisJCXRlc3RfdGhyZWFkX2ZsYWcoVElGX0JMT0NLU1RFUCkpOwogCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IGJhMzk0OGMuLjE1NWQ1NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC01OCw3ICs1OCw3IEBACiAKIGNvbmZpZyBOUl9JUlFTCiAJaW50ICJOdW1iZXIgb2YgdmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVycyIKLQlyYW5nZSAzMiA1MTIKKwlyYW5nZSAzMiAzMjc2OAogCWRlZmF1bHQgIjUxMiIKIAloZWxwCiAJICBUaGlzIGRlZmluZXMgdGhlIG51bWJlciBvZiB2aXJ0dWFsIGludGVycnVwdCBudW1iZXJzIHRoZSBrZXJuZWwKQEAgLTE3Myw2ICsxNzMsNyBAQAogCiBjb25maWcgT0YKIAlkZWZfYm9vbCB5CisJc2VsZWN0IE9GX0ZMQVRUUkVFCiAKIGNvbmZpZyBQUENfVURCR18xNjU1MAogCWJvb2wKQEAgLTI0MCw2ICsyNDEsMzMgQEAKIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwogCWRlZl9ib29sIHkKIAorY29uZmlnIFBQQ19BRFZfREVCVUdfUkVHUworCWJvb2wKKwlkZXBlbmRzIG9uIDQweCB8fCBCT09LRQorCWRlZmF1bHQgeQorCitjb25maWcgUFBDX0FEVl9ERUJVR19JQUNTCisJaW50CisJZGVwZW5kcyBvbiBQUENfQURWX0RFQlVHX1JFR1MKKwlkZWZhdWx0IDQgaWYgNDR4CisJZGVmYXVsdCAyCisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0RBQ1MKKwlpbnQKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUworCWRlZmF1bHQgMgorCitjb25maWcgUFBDX0FEVl9ERUJVR19EVkNTCisJaW50CisJZGVwZW5kcyBvbiBQUENfQURWX0RFQlVHX1JFR1MKKwlkZWZhdWx0IDIgaWYgNDR4CisJZGVmYXVsdCAwCisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCWJvb2wKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUyAmJiA0NHgKKwlkZWZhdWx0IHkKKwogc291cmNlICJpbml0L0tjb25maWciCiAKIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hcmNoZXMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKaW5kZXggNDE0ZWY4Yi4uMzBmNDEyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKQEAgLTYwLDYgKzYwLDcgQEAKIAkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CiAJCQlkY3ItY29udHJvbGxlcjsKIAkJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMkMwPjsKIAkJfTsKIAl9OwogCkBAIC0xNDYsNiArMTQ3LDEzIEBACiAJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKIAkJfTsKIAorCQlDUllQVE86IGNyeXB0b0AxODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLHBwYzQ2MGd0LWNyeXB0byIsICJhbWNjLHBwYzR4eC1jcnlwdG8iOworCQkJcmVnID0gPDQgMHgwMDE4MDAwMCAweDgwNDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4ND47CisJCX07CisKIAkJTUFMMDogbWNtYWwgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDYwZ3QiLCAiaWJtLG1jbWFsMiI7CiAJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKQEAgLTI3NCw2ICsyODIsNyBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OwogCQkJCXBoeS1tb2RlID0gInNnbWlpIjsKIAkJCQlwaHktbWFwID0gPDB4ZmZmZmZmZmY+OwogCQkJCWdwY3MtYWRkcmVzcyA9IDwweDAwMDAwMDBhPjsKQEAgLTMwMiw2ICszMTEsNyBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OwogCQkJCXBoeS1tb2RlID0gInNnbWlpIjsKIAkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OwogCQkJCWdwY3MtYWRkcmVzcyA9IDwweDAwMDAwMDBiPjsKQEAgLTMzMSw2ICszNDEsOCBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OworCQkJCXR4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsgLyogZW1hYzImMyBvbmx5ICovCiAJCQkJcGh5LW1vZGUgPSAic2dtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMT47CiAJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMEM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cwppbmRleCBjODYxMTRlLi45NzdmMjYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cwpAQCAtMzQxLDYgKzM0MSwyMiBAQAogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCisJCW1zaUA0MTYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKIAkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKaW5kZXggODIwYzJiMy4uOGU0ZWZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwpAQCAtMzIsNiArMzIsNyBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CiAJfTsKIAogCWNwdXMgewpAQCAtMzM4LDYgKzMzOSwyMiBAQAogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCisJCW1zaUA0MTYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKIAkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CkBAIC0zNTgsNyArMzc1LDcgQEAKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MHgxOCAweDI+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZmYwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkweDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MgogCQkJMHgwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cwppbmRleCAzMDkxMWFkLi5iYjcwNjAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCkBAIC03NSwxNCArNzUsNDggQEAKIAkJaW50ZXJydXB0cyA9IDwxOSAyPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAKLQkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAgICAgIC8vIDE2TUIgQm9vdCBmbGFzaAotCQkJICAxIDAgMHhlODAwMDAwMCAweDA4MDAwMDAwICAgICAvLyBQYWdlZCBGbGFzaCAwCi0JCQkgIDIgMCAweGUwMDAwMDAwIDB4MDgwMDAwMDAgICAgIC8vIFBhZ2VkIEZsYXNoIDEKLQkJCSAgMyAwIDB4ZmMxMDAwMDAgMHgwMDAyMDAwMCAgICAgLy8gTlZSQU0KLQkJCSAgNCAwIDB4ZmMwMDAwMDAgMHgwMDAwODAwMCAgICAgLy8gRlBHQQotCQkJICA1IDAgMHhmYzAwODAwMCAweDAwMDA4MDAwICAgICAvLyBBRklYIEZQR0EKLQkJCSAgNiAwIDB4ZmQwMDAwMDAgMHgwMDgwMDAwMCAgICAgLy8gSU8gRlBHQSAoOC1iaXQpCi0JCQkgIDcgMCAweGZkODAwMDAwIDB4MDA4MDAwMDA+OyAgIC8vIElPIEZQR0EgKDMyLWJpdCkKKwkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAJLy8gMTZNQiBCb290IGZsYXNoCisJCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMAorCQkJICAyIDAgMHhlMDAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDEKKwkJCSAgMyAwIDB4ZmMxMDAwMDAgMHgwMDAyMDAwMAkvLyBOVlJBTQorCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwCS8vIEZQR0EKKwkJCSAgNSAwIDB4ZmMwMDgwMDAgMHgwMDAwODAwMAkvLyBBRklYIEZQR0EKKwkJCSAgNiAwIDB4ZmQwMDAwMDAgMHgwMDgwMDAwMAkvLyBJTyBGUEdBICg4LWJpdCkKKwkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47CS8vIElPIEZQR0EgKDMyLWJpdCkKKworCQkvKiBmbGFzaEAwLDAgaXMgYSBtaXJyb3Igb2YgcGFydCBvZiB0aGUgbWVtb3J5IGluIGZsYXNoQDEsMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYsc2JjNjEwLWZpcm13YXJlLW1pcnJvciIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHgxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKwkJKi8KKworCQlmbGFzaEAxLDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYsc2JjNjEwLXBhZ2VkLWZsYXNoIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgxIDB4MCAweDgwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MCAweDc4MDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3ODAwMDAwIHsKKwkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQkJcmVnID0gPDB4NzgwMDAwMCAweDgwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKIAogCQludnJhbUAzLDAgewogCQkJZGV2aWNlX3R5cGUgPSAibnZyYW0iOwpAQCAtMzA1LDYgKzMzOSwyMiBAQAogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCisJCW1zaUA0MTYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKIAkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKaW5kZXggZjZmNjE4OS4uZDYyYTRmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIEFNQ0MgR2xhY2llciAoNDYwR1QpCiAgKgotICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQKQEAgLTQyLDYgKzQyLDcgQEAKIAkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CiAJCQlkY3ItY29udHJvbGxlcjsKIAkJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMkMwPjsKIAkJfTsKIAl9OwogCkBAIC0xMDYsNiArMTA3LDE2IEBACiAJCWRjci1yZWcgPSA8MHgwMGMgMHgwMDI+OwogCX07CiAKKwlMMkMwOiBsMmMgeworCQljb21wYXRpYmxlID0gImlibSxsMi1jYWNoZS00NjBndCIsICJpYm0sbDItY2FjaGUiOworCQlkY3ItcmVnID0gPDB4MDIwIDB4MDA4CQkvKiBJbnRlcm5hbCBTUkFNIERDUidzICovCisJCQkgICAweDAzMCAweDAwOD47CS8qIEwyIGNhY2hlIERDUidzICovCisJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CQkvKiAzMiBieXRlcyAqLworCQljYWNoZS1zaXplID0gPDI2MjE0ND47CQkvKiBMMiwgMjU2SyAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJaW50ZXJydXB0cyA9IDwxMSAxPjsKKwl9OworCiAJcGxiIHsKIAkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQ2MGd0IiwgImlibSxwbGI0IjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CkBAIC0xMTgsNiArMTI5LDEzIEBACiAJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKIAkJfTsKIAorCQlDUllQVE86IGNyeXB0b0AxODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLHBwYzQ2MGd0LWNyeXB0byIsICJhbWNjLHBwYzR4eC1jcnlwdG8iOworCQkJcmVnID0gPDQgMHgwMDE4MDAwMCAweDgwNDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4ND47CisJCX07CisKIAkJTUFMMDogbWNtYWwgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDYwZ3QiLCAiaWJtLG1jbWFsMiI7CiAJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKQEAgLTE4Niw2ICsyMDQsMjkgQEAKIAkJCQkJCXJlZyA9IDwweDAzZmEwMDAwIDB4MDAwNjAwMDA+OwogCQkJCQl9OwogCQkJCX07CisKKwkJCQluZGZjQDMsMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiaWJtLG5kZmMiOworCQkJCQlyZWcgPSA8MHgwMDAwMDAwMyAweDAwMDAwMDAwIDB4MDAwMDIwMDA+OworCQkJCQljY3IgPSA8MHgwMDAwMTAwMD47CisJCQkJCWJhbmstc2V0dGluZ3MgPSA8MHg4MDAwMjIyMj47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJCQluYW5kIHsKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCQkJCXBhcnRpdGlvbkAwIHsKKwkJCQkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAxMDAwMDA+OworCQkJCQkJfTsKKwkJCQkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCQkJCWxhYmVsID0gInVzZXIiOworCQkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDNmMDAwMDA+OworCQkJCQkJfTsKKwkJCQkJfTsKKwkJCQl9OwogCQkJfTsKIAogCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDMwMCB7CkBAIC0yMzcsNiArMjc4LDIwIEBACiAJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gInN0bSxtNDF0ODAiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4MTkgMHg4PjsKKwkJCQl9OworCQkJCXN0dG1ANDggeworCQkJCQljb21wYXRpYmxlID0gImFkLGFkNzQxNCI7CisJCQkJCXJlZyA9IDwweDQ4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQkJCWludGVycnVwdHMgPSA8MHgxNCAweDg+OworCQkJCX07CiAJCQl9OwogCiAJCQlJSUMxOiBpMmNAZWY2MDA4MDAgewpAQCAtMjc1LDcgKzMzMCw3IEBACiAKIAkJCUVNQUMwOiBldGhlcm5ldEBlZjYwMGUwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTI4Myw3ICszMzgsNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMCAweDQKIAkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE0IDB4ND47Ci0JCQkJcmVnID0gPDB4ZWY2MDBlMDAgMHgwMDAwMDA3ND47CisJCQkJcmVnID0gPDB4ZWY2MDBlMDAgMHgwMDAwMDBjND47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OwpAQCAtMzA1LDcgKzM2MCw3IEBACiAKIAkJCUVNQUMxOiBldGhlcm5ldEBlZjYwMGYwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzE+OwogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTMxMyw3ICszNjgsNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMSAweDQKIAkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE1IDB4ND47Ci0JCQkJcmVnID0gPDB4ZWY2MDBmMDAgMHgwMDAwMDA3ND47CisJCQkJcmVnID0gPDB4ZWY2MDBmMDAgMHgwMDAwMDBjND47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDE+OwpAQCAtMzM2LDcgKzM5MSw3IEBACiAKIAkJCUVNQUMyOiBldGhlcm5ldEBlZjYwMTEwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzI+OwogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTM0NCw3ICszOTksNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMiAweDQKIAkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE2IDB4ND47Ci0JCQkJcmVnID0gPDB4ZWY2MDExMDAgMHgwMDAwMDA3ND47CisJCQkJcmVnID0gPDB4ZWY2MDExMDAgMHgwMDAwMDBjND47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDI+OwpAQCAtMzY2LDcgKzQyMSw3IEBACiAKIAkJCUVNQUMzOiBldGhlcm5ldEBlZjYwMTIwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzM+OwogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTM3NCw3ICs0MjksNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMyAweDQKIAkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE3IDB4ND47Ci0JCQkJcmVnID0gPDB4ZWY2MDEyMDAgMHgwMDAwMDA3ND47CisJCQkJcmVnID0gPDB4ZWY2MDEyMDAgMHgwMDAwMDBjND47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDM+OwpAQCAtNDE0LDYgKzQ2OSw3IEBACiAJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZAogCQkJICovCiAJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAgMHgwMDAwMDAwZCAweDgwMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwYyAweDBlZTAwMDAwIDB4MDAwMDAwMDAgMHgwMDEwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwYyAweDA4MDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAxMDAwMD47CiAKIAkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KQEAgLTQ0NCw2ICs1MDAsNyBAQAogCQkJICogbGF0ZXIgY2Fubm90IGJlIGNoYW5nZWQKIAkJCSAqLwogCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwIDB4MDAwMDAwMGUgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAxMDAwMDAKIAkJCQkgIDB4MDEwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHg4MDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMTAwMDA+OwogCiAJCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCkBAIC00ODUsNiArNTQyLDcgQEAKIAkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCiAJCQkgKi8KIAkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMCAweDAwMDAwMDBlIDB4ODAwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBmIDB4MDAxMDAwMDAgMHgwMDAwMDAwMCAweDAwMTAwMDAwCiAJCQkJICAweDAxMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBmIDB4ODAwMTAwMDAgMHgwMDAwMDAwMCAweDAwMDEwMDAwPjsKIAogCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cwppbmRleCA4ZjM0NWRlOS4uOGNmMmMwYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJpYm0sb3BiLTQ0MHNwZSIsICJpYm0sb3BiLTQ0MGdwIiwgImlibSxvcGIiOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCXJhbmdlcyA9IDwweDAwMDAwMDAwIDB4MDAwMDAwMDQgMHhlMDAwMDAwMCAweDIwMDAwMDAwPjsKKwkJCXJhbmdlcyA9IDwweGUwMDAwMDAwIDB4MDAwMDAwMDQgMHhlMDAwMDAwMCAweDIwMDAwMDAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLwogCiAJCQlFQkMwOiBlYmMgewpAQCAtMTY1LDE0ICsxNjUsNDcgQEAKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KKwkJCQkvKiByYW5nZXMgcHJvcGVydHkgaXMgc3VwcGxpZWQgYnkgVS1Cb290ICovCiAJCQkJaW50ZXJydXB0cyA9IDwweDUgMHgxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKworCQkJCW5vcl9mbGFzaEAwLDAgeworCQkJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQkJCWJhbmstd2lkdGggPSA8Mj47CisJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMTAwMDAwMD47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQkJcGFydGl0aW9uQDAgeworCQkJCQkJbGFiZWwgPSAia2VybmVsIjsKKwkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAxZTAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMWUwMDAwIHsKKwkJCQkJCWxhYmVsID0gImR0YiI7CisJCQkJCQlyZWcgPSA8MHgwMDFlMDAwMCAweDAwMDIwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJyb290IjsKKwkJCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDAyMDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25ANDAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInVzZXIiOworCQkJCQkJcmVnID0gPDB4MDA0MDAwMDAgMHgwMGI2MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkBmNjAwMDAgeworCQkJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQkJCXJlZyA9IDwweDAwZjYwMDAwIDB4MDAwNDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AZmEwMDAwIHsKKwkJCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJCQlyZWcgPSA8MHgwMGZhMDAwMCAweDAwMDYwMDAwPjsKKwkJCQkJfTsKKwkJCQl9OwogCQkJfTsKIAotCQkJVUFSVDA6IHNlcmlhbEAxMDAwMDIwMCB7CisJCQlVQVJUMDogc2VyaWFsQGYwMDAwMjAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQkJcmVnID0gPDB4MTAwMDAyMDAgMHgwMDAwMDAwOD47CisJCQkJcmVnID0gPDB4ZjAwMDAyMDAgMHgwMDAwMDAwOD47CiAJCQkJdmlydHVhbC1yZWcgPSA8MHhhMDAwMDIwMD47CiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCiAJCQkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OwpAQCAtMTgwLDEwICsyMTMsMTAgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDQ+OwogCQkJfTsKIAotCQkJVUFSVDE6IHNlcmlhbEAxMDAwMDMwMCB7CisJCQlVQVJUMTogc2VyaWFsQGYwMDAwMzAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQkJcmVnID0gPDB4MTAwMDAzMDAgMHgwMDAwMDAwOD47CisJCQkJcmVnID0gPDB4ZjAwMDAzMDAgMHgwMDAwMDAwOD47CiAJCQkJdmlydHVhbC1yZWcgPSA8MHhhMDAwMDMwMD47CiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47CkBAIC0xOTIsMTAgKzIyNSwxMCBAQAogCQkJfTsKIAogCi0JCQlVQVJUMjogc2VyaWFsQDEwMDAwNjAwIHsKKwkJCVVBUlQyOiBzZXJpYWxAZjAwMDA2MDAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDYwMCAweDAwMDAwMDA4PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDYwMCAweDAwMDAwMDA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDwweGEwMDAwNjAwPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsKQEAgLTIwMywyNyArMjM2LDI3IEBACiAJCQkJaW50ZXJydXB0cyA9IDwweDUgMHg0PjsKIAkJCX07CiAKLQkJCUlJQzA6IGkyY0AxMDAwMDQwMCB7CisJCQlJSUMwOiBpMmNAZjAwMDA0MDAgewogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBzcGUiLCAiaWJtLGlpYy00NDBncCIsICJpYm0saWljIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDQwMCAweDAwMDAwMDE0PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDQwMCAweDAwMDAwMDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OwogCQkJfTsKIAotCQkJSUlDMTogaTJjQDEwMDAwNTAwIHsKKwkJCUlJQzE6IGkyY0BmMDAwMDUwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ0MHNwZSIsICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOwotCQkJCXJlZyA9IDwweDEwMDAwNTAwIDB4MDAwMDAwMTQ+OworCQkJCXJlZyA9IDwweGYwMDAwNTAwIDB4MDAwMDAwMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgzIDB4ND47CiAJCQl9OwogCi0JCQlFTUFDMDogZXRoZXJuZXRAMTAwMDA4MDAgeworCQkJRU1BQzA6IGV0aGVybmV0QGYwMDAwODAwIHsKIAkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDB4MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBzcGUiLCAiaWJtLGVtYWM0IjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MWMgMHg0IDB4MWQgMHg0PjsKLQkJCQlyZWcgPSA8MHgxMDAwMDgwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDgwMCAweDAwMDAwMDc0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OwpAQCAtMjQ4LDExICsyODEsMTEgQEAKIAkJCXByaW1hcnk7CiAJCQlsYXJnZS1pbmJvdW5kLXdpbmRvd3M7CiAJCQllbmFibGUtbXNpLWhvbGU7Ci0JCQlyZWcgPSA8MHgwMDAwMDAwYyAweDBlYzAwMDAwICAgMHgwMDAwMDAwOAkvKiBDb25maWcgc3BhY2UgYWNjZXNzICovCi0JCQkgICAgICAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAJCS8qIG5vIElBQ0sgY3ljbGVzICovCi0JCQkgICAgICAgMHgwMDAwMDAwYyAweDBlZDAwMDAwICAgMHgwMDAwMDAwNCAgIC8qIFNwZWNpYWwgY3ljbGVzICovCi0JCQkgICAgICAgMHgwMDAwMDAwYyAweDBlYzgwMDAwIDB4MDAwMDAxMDAJLyogSW50ZXJuYWwgcmVnaXN0ZXJzICovCi0JCQkgICAgICAgMHgwMDAwMDAwYyAweDBlYzgwMTAwICAweDAwMDAwMGZjPjsJLyogSW50ZXJuYWwgbWVzc2FnaW5nIHJlZ2lzdGVycyAqLworCQkJcmVnID0gPDB4MDAwMDAwMGMgMHgwZWMwMDAwMCAweDAwMDAwMDA4ICAgLyogQ29uZmlnIHNwYWNlIGFjY2VzcyAqLworCQkJICAgICAgIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwICAgLyogbm8gSUFDSyBjeWNsZXMgKi8KKwkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVkMDAwMDAgMHgwMDAwMDAwNCAgIC8qIFNwZWNpYWwgY3ljbGVzICovCisJCQkgICAgICAgMHgwMDAwMDAwYyAweDBlYzgwMDAwIDB4MDAwMDAxMDAgICAvKiBJbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAxMDAgMHgwMDAwMDBmYz47IC8qIEludGVybmFsIG1lc3NhZ2luZyByZWdpc3RlcnMgKi8KIAogCQkJLyogT3V0Ym91bmQgcmFuZ2VzLCBvbmUgbWVtb3J5IGFuZCBvbmUgSU8sCiAJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZApAQCAtNDUzLDYgKzQ4Niw2IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9wbGIvb3BiL3NlcmlhbEAxMDAwMDIwMCI7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9wbGIvb3BiL3NlcmlhbEBmMDAwMDIwMCI7CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKaW5kZXggYzM1M2RhYy4uYzllZjZiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwpAQCAtNjIsMTcgKzYyLDEyIEBACiAJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJYmFuay13aWR0aCA9IDwxPjsKIAkJLy8gQURTIGhhcyB0d28gSHluaXggNTEyTUIgTmFuZCBmbGFzaCBjaGlwcyBpbiBhIHNpbmdsZQotCQkvLyBzdGFja2VkIHBhY2thZ2UgLgorCQkvLyBzdGFja2VkIHBhY2thZ2UuCiAJCWNoaXBzID0gPDI+OwotCQluYW5kMEAwIHsKLQkJCWxhYmVsID0gIm5hbmQwIjsKLQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDIwMDAwMDA+OyAJLy8gZmlyc3QgMzIgTUIgb2YgY2hpcCAwCi0JCX07Ci0JCW5hbmQxQDIwMDAwMDAwIHsKLQkJCWxhYmVsID0gIm5hbmQxIjsKLQkJCXJlZyA9IDwweDIwMDAwMDAwIDB4MDIwMDAwMDA+OyAJLy8gZmlyc3QgMzIgTUIgb2YgY2hpcCAxCisJCW5hbmRAMCB7CisJCQlsYWJlbCA9ICJuYW5kIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwIDB4NDAwMDAwMDA+OwkvLyA1MTJNQiArIDUxMk1CCiAJCX07CiAJfTsKIApAQCAtMTY2LDYgKzE2MSwxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKIAorCQlyZXNldEBlMDAgewkvLyBSZXNldCBtb2R1bGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcmVzZXQiOworCQkJcmVnID0gPDB4ZTAwIDB4MTAwPjsKKwkJfTsKKwogCQljbG9ja0BmMDAgewkvLyBDbG9jayBjb250cm9sCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWNsb2NrIjsKIAkJCXJlZyA9IDwweGYwMCAweDEwMD47CkBAIC0xODUsMTcgKzE4NSwxNSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKIAotCQltc2NhbkAxMzAwIHsKKwkJY2FuQDEzMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJaW50ZXJydXB0cyA9IDwxMiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCXJlZyA9IDwweDEzMDAgMHg4MD47CiAJCX07CiAKLQkJbXNjYW5AMTM4MCB7CisJCWNhbkAxMzgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWludGVycnVwdHMgPSA8MTMgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQlyZWcgPSA8MHgxMzgwIDB4ODA+OwpAQCAtMjA1LDE3ICsyMDMsMzEgQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWkyYyIsICJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgxNzAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDw5IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJZnNsLHByZXNlcnZlLWNsb2NraW5nOworCisJCQlod21vbkA0YSB7CisJCQkJY29tcGF0aWJsZSA9ICJhZGksYWQ3NDE0IjsKKwkJCQlyZWcgPSA8MHg0YT47CisJCQl9OworCisJCQllZXByb21ANTAgeworCQkJCWNvbXBhdGlibGUgPSAiYXQsMjRjMzIiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJzdG0sbTQxdDYyIjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQl9OwogCQl9OwogCiAJCWkyY0AxNzIwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWkyYyIsICJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHgxNzIwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwxMCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKQEAgLTIyNSw3ICsyMzcsNiBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDE3NDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDExIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwpAQCAtMjQ0LDcgKzI1NSw3IEBACiAJCX07CiAKIAkJZGlzcGxheUAyMTAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZGl1IiwgImZzbC1kaXUiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kaXUiOwogCQkJcmVnID0gPDB4MjEwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDY0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwpAQCAtMjc3LDcgKzI4OCw3IEBACiAKIAkJLy8gVVNCMSB1c2luZyBleHRlcm5hbCBVTFBJIFBIWQogCQkvL3VzYkAzMDAwIHsKLQkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIiwgImZzbC11c2IyLWRyIjsKKwkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIjsKIAkJLy8JcmVnID0gPDB4MzAwMCAweDEwMDA+OwogCQkvLwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJLy8JI3NpemUtY2VsbHMgPSA8MD47CkBAIC0yODUsMTIgKzI5NiwxMSBAQAogCQkvLwlpbnRlcnJ1cHRzID0gPDQzIDB4OD47CiAJCS8vCWRyX21vZGUgPSAib3RnIjsKIAkJLy8JcGh5X3R5cGUgPSAidWxwaSI7Ci0JCS8vCXBvcnQxOwogCQkvL307CiAKIAkJLy8gVVNCMCB1c2luZyBpbnRlcm5hbCBVVE1JIFBIWQogCQl1c2JANDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiLCAiZnNsLXVzYjItZHIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIjsKIAkJCXJlZyA9IDwweDQwMDAgMHgxMDAwPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0yOTgsNyArMzA4LDggQEAKIAkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKIAkJCWRyX21vZGUgPSAib3RnIjsKIAkJCXBoeV90eXBlID0gInV0bWlfd2lkZSI7Ci0JCQlwb3J0MDsKKwkJCWZzbCxpbnZlcnQtZHJ2dmJ1czsKKwkJCWZzbCxpbnZlcnQtcHdyLWZhdWx0OwogCQl9OwogCiAJCS8vIElPIGNvbnRyb2wKQEAgLTM2NSw3ICszNzYsNyBAQAogCQl9OwogCiAJCWRtYUAxNDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRtYTIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kbWEiOwogCQkJcmVnID0gPDB4MTQwMDAgMHgxODAwPjsKIAkJCWludGVycnVwdHMgPSA8NjUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKaW5kZXggNmQ4OTJiYS4uOTJmYjE3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwpAQCAtNTQsOSArNTQsNTIgQEAKIAkJcmVnID0gPDB4MCAweDEwMDAwMDAwPjsKIAl9OwogCi0JYmNzckBmODAwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtYmNzciI7Ci0JCXJlZyA9IDwweGY4MDAwMDAwIDB4ODAwMD47CisJbG9jYWxidXNAZTAwMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjgtbG9jYWxidXMiLCAiZnNsLHBxMy1sb2NhbGJ1cyIsCisJCQkgICAgICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4ZTAwMDUwMDAgMHgxMDAwPjsKKworCQlyYW5nZXMgPSA8MHgwIDB4MCAweGZlMDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgMHgxIDB4MCAweGY4MDAwMDAwIDB4MDAwMDgwMDAKKwkJCSAgMHgyIDB4MCAweGYwMDAwMDAwIDB4MDQwMDAwMDAKKwkJCSAgMHg0IDB4MCAweGY4MDA4MDAwIDB4MDAwMDgwMDAKKwkJCSAgMHg1IDB4MCAweGY4MDEwMDAwIDB4MDAwMDgwMDA+OworCisJCW5vckAwLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MDIwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJfTsKKworCQliY3NyQDEsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OG1kcy1iY3NyIjsKKwkJCXJlZyA9IDwxIDAgMHg4MDAwPjsKKwkJCXJhbmdlcyA9IDwwIDEgMCAweDgwMDA+OworCisJCQliY3NyNTogZ3Bpby1jb250cm9sbGVyQDExIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLWJjc3ItZ3BpbyI7CisJCQkJcmVnID0gPDB4NSAweDE+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisJCX07CisKKwkJcGliQDQsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLXBpYiI7CisJCQlyZWcgPSA8NCAwIDB4ODAwMD47CisJCX07CisKKwkJcGliQDUsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLXBpYiI7CisJCQlyZWcgPSA8NSAwIDB4ODAwMD47CisJCX07CiAJfTsKIAogCXNvYzg1NjhAZTAwMDAwMDAgewpAQCAtNjEwLDQgKzY1MywyMCBAQAogCQlzbGVlcCA9IDwmcG1jIDB4MDAwODAwMDAgICAvKiBjb250cm9sbGVyICovCiAJCQkgJnBtYyAweDAwMDQwMDAwPjsgLyogbWVzc2FnZSB1bml0ICovCiAJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJZ3JlZW4geworCQkJZ3Bpb3MgPSA8JmJjc3I1IDEgMD47CisJCX07CisKKwkJYW1iZXIgeworCQkJZ3Bpb3MgPSA8JmJjc3I1IDIgMD47CisJCX07CisKKwkJcmVkIHsKKwkJCWdwaW9zID0gPCZiY3NyNSAzIDA+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2FjYWRpYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZwppbmRleCAxNzNhNWJiLi44ZTk1ZjhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjE3OjQ2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNTozMzowNyAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogQ09ORklHXzQweD15CkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR180eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI3LDE1ICsyOCwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTQ5LDExICs1MywxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTY3LDkgKzc1LDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODQsMzEgKzEwNCw0MCBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIwLDYgKzE0OSwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzEsOCArMTY4LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MCwxOSArMTc2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKIApAQCAtMTY2LDYgKzIyNCw3IEBACiBDT05GSUdfQUNBRElBPXkKICMgQ09ORklHX0VQNDA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0hDVTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9URk9PVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKICMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldApAQCAtMjA4LDEwICsyNjcsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjI3LDEwICsyODgsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKQEAgLTI1NSw2ICszMTgsNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjcyLDE0ICszMzYsMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMTYsNiArMzc4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMjksNiArMzkyLDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0MSw4ICs0MDYsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzU1LDYgKzQyNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM2Nyw5ICs0MzgsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDQ1LDcgKzUxNiw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTQ2MSw2ICs1MzEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC00OTEsNyArNTYyLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTEyLDYgKzU4Nyw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC01MzAsMTcgKzYwNywxOCBAQAogQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUj15CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC01NTMsNiArNjMxLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTU5OCw2ICs2NzcsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNjE0LDYgKzY5NCwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02MzYsMjcgKzcyMSwxMyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtNjc4LDcgKzc0OSwxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC02ODksMTQgKzc2NSwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTcwNiw2ICs3ODUsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC03NjAsNyArODQ0LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtNzc2LDYgKzg1OSw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtNzkwLDExICs4NzQsMTMgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTgwNCw2ICs4OTAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04MTIsMTYgKzg5OSwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC04MzMsMzUgKzkyNyw0NSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC04NzcsMTMgKzk4MSwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC04OTIsMTAgKzk5OSwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtOTIzLDExICsxMDMyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC05NjQsNiArMTA3NSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtOTcyLDUgKzEwODQsNiBAQAogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcKaW5kZXggZTliODQ5NS4uOTE4ZjIzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIFR1ZSBKYW4gMjAgMDg6MTc6NDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE1OjM3OjM0IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiBDT05GSUdfNDB4PXkKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzR4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjcsMTUgKzI4LDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNDksMTEgKzUzLDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNjcsOSArNzUsMjEgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04NCwzMSArMTA0LDQwIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjAsNiArMTQ5LDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzMSw4ICsxNjgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQwLDE5ICsxNzYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAogCkBAIC0xNjYsNiArMjI0LDcgQEAKICMgQ09ORklHX0FDQURJQSBpcyBub3Qgc2V0CiBDT05GSUdfRVA0MDU9eQogIyBDT05GSUdfSENVNCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RGT09UIGlzIG5vdCBzZXQKICMgQ09ORklHX0tJTEFVRUEgaXMgbm90IHNldAogIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0CkBAIC0yMTAsMTAgKzI2OSwxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMjksMTAgKzI5MCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldApAQCAtMjU3LDYgKzMyMCw3IEBACiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yNzQsMTQgKzMzOCwxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMxOCw2ICszODAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTMzMSw2ICszOTQsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzQzLDggKzQwOCwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zNTcsNiArNDI3LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtMzY5LDkgKzQ0MCw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00NDcsNyArNTE4LDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNDYzLDYgKzUzMyw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC00NzYsMTIgKzU0NywxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MDEsNyArNTc3LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTIyLDYgKzYwMiw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC01NDAsNyArNjIyLDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU0OCw2ICs2MzMsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01NTgsOSArNjQ0LDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNTcwLDYgKzY2MCw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC01NzksMTQgKzY3MCwxNCBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02MDgsNiArNjk5LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTY1Myw2ICs3NDUsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNjY5LDYgKzc2MiwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02OTEsMjcgKzc4OSwxMyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTc0OCwxNCArODMyLDE2IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKQEAgLTc3NSwxMSArODYxLDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKQEAgLTgwNyw3ICs4OTMsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTgyMiw2ICs5MDcsNyBAQAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC04MzEsNyArOTE3LDEyIEBACiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTg0MiwxNCArOTMzLDE3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtODU5LDYgKzk1MywxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTkxMyw3ICsxMDEyLDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTI3LDggKzEwMjUsNDggQEAKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTk0MywxMSArMTA4MSwxMyBAQAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtOTU3LDYgKzEwOTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NjUsMTYgKzExMDYsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtOTg2LDM1ICsxMTM0LDQ1IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTEwMzAsMTMgKzExODgsMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTA0NSwxMCArMTIwNiwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTA3NiwxMSArMTIzOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTExNyw2ICsxMjgyLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMTI1LDUgKzEyOTEsNiBAQAogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2hjdTRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2hjdTRfZGVmY29uZmlnCmluZGV4IDhjMDE5ZDcuLmY4N2VmMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9oY3U0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvaGN1NF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoxNzo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTU6NDU6MTEgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKIENPTkZJR180MHg9eQpAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfNHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yNywxNSArMjgsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC00OSwxMSArNTMsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC02Nyw5ICs3NSwyMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg0LDMxICsxMDQsNDAgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMCw2ICsxNDksMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTMxLDggKzE2OCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDAsMTkgKzE3Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CiAKQEAgLTE2Niw2ICsyMjQsNyBAQAogIyBDT05GSUdfQUNBRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQNDA1IGlzIG5vdCBzZXQKIENPTkZJR19IQ1U0PXkKKyMgQ09ORklHX0hPVEZPT1QgaXMgbm90IHNldAogIyBDT05GSUdfS0lMQVVFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUtBTFUgaXMgbm90IHNldAogIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKQEAgLTIwOCwxMCArMjY3LDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIyNywxMCArMjg4LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CkBAIC0yNTUsNiArMzE4LDcgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI3MiwxNCArMzM2LDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzE2LDYgKzM3OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzI5LDYgKzM5Miw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNDEsOCArNDA2LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM1NSw2ICs0MjUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zNjcsOSArNDM4LDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ0NSw3ICs1MTYsNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC00NjEsNiArNTMxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNDczLDEyICs1NDQsMTcgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDk4LDcgKzU3NCwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTUxOSw2ICs1OTksOCBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQpAQCAtNTM3LDcgKzYxOSwxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC01NDUsNiArNjMwLDcgQEAKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNTU1LDkgKzY0MSwxMyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTU2Nyw2ICs2NTcsNyBAQAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldApAQCAtNTc2LDE0ICs2NjcsMTMgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU5Niw2ICs2ODYsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjQxLDYgKzczMiw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02NTcsMTMgKzc0OSwxNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02ODAsMjcgKzc3NiwxMyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTcyMiw3ICs4MDQsMTIgQEAKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzMzLDE0ICs4MjAsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC03NTAsNiArODQwLDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtODA0LDcgKzg5OSw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTgyMCw2ICs5MTQsNyBAQAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTgzNCwxMSArOTI5LDEzIEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC04NDgsNiArOTQ1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODU2LDE2ICs5NTQsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtODc3LDM1ICs5ODIsNDUgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApAQCAtOTIxLDEzICsxMDM2LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTkzNiwxMCArMTA1NCwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtOTY3LDExICsxMDg3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDA4LDYgKzExMzAsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTYsNSArMTEzOSw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcKaW5kZXggOWEwNWVjMC4uMTlmYmNiMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAxMzoyODozNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTU6NTE6MjMgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR180eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDcgKzMwLDkgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKQEAgLTUyLDYgKzU1LDcgQEAKIENPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQpAQCAtNzksMTEgKzgzLDEzIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjEsMjIgKzEyNywyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0NCw2ICsxNDksOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE2OSwxNCArMTc2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKIApAQCAtMTkwLDYgKzIyNCw3IEBACiAjIENPTkZJR19BQ0FESUEgaXMgbm90IHNldAogIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAogIyBDT05GSUdfSENVNCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RGT09UIGlzIG5vdCBzZXQKIENPTkZJR19LSUxBVUVBPXkKICMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldApAQCAtMjMzLDEwICsyNjgsMTEgQEAKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjUyLDggKzI4OCw3IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDMsNiArMzc4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzAsNyArNDA2LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzgzLDYgKzQyNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM5NSw5ICs0MzgsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDk4LDYgKzU0MSw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTU3NCwxNiArNjE4LDE3IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU5Niw2ICs2NDEsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjQxLDYgKzY4Nyw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02NTYsNiArNzAzLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02OTYsMTEgKzc0NCw2IEBACiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldApAQCAtNzA5LDEwICs3NTIsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTczMCw2ICs3NjksMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzUzLDYgKzc5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE03NT15CiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKQEAgLTc3OSw2ICs4MjQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC03OTAsNyArODM2LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTgxMCwxMCArODU1LDEzIEBACiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtODIxLDYgKzg2OSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtODY4LDYgKzkxNyw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTg4OSw3ICs5MzksOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC05MTMsNiArOTY1LDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtOTIwLDYgKzk3Myw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05NzksNyArMTAzMyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEwMzcsNiArMTA5MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNTQsNiArMTEwOCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMDcyLDEwICsxMTI3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwOTksMTAgKzExNTYsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTEyNCwxMyArMTE4MSwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTcyLDExICsxMjMyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvbWFrYWx1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCmluZGV4IDE0Njc0NzUuLmViNDFjZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmM3Ci0jIFdlZCBKdW4gIDMgMDk6MTE6MDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE1OjU1OjEyIDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiBDT05GSUdfNDB4PXkKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzR4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksMTQgKzMwLDE2IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NSwxMyBAQAogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc4LDExICs4MywxMyBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA4LDcgKzExNSw2IEBACiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTIxLDYgKzEyNywxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjksNyArMTQyLDYgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xMzcsNiArMTQ5LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0OSw3ICsxNjgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE1NywxNCArMTc2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKIApAQCAtMTc4LDYgKzIyNCw3IEBACiAjIENPTkZJR19BQ0FESUEgaXMgbm90IHNldAogIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAogIyBDT05GSUdfSENVNCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RGT09UIGlzIG5vdCBzZXQKICMgQ09ORklHX0tJTEFVRUEgaXMgbm90IHNldAogQ09ORklHX01BS0FMVT15CiAjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldApAQCAtMjIwLDEwICsyNjcsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM5LDkgKzI4OCw4IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMzMwLDYgKzM3OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQ0LDYgKzM5Myw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzU2LDcgKzQwNiwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICs0MjUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zODEsOSArNDM4LDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ3NCw2ICs1MzEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01MDQsMTQgKzU2MiwxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NDYsMTYgKzYwNywxOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTY4LDYgKzYzMSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02MTMsNiArNjc3LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTYyOSw2ICs2OTQsMTEgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjUxLDI3ICs3MjEsMTMgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTY5NSw2ICs3NTEsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzA1LDE0ICs3NjUsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC03NzAsNyArODMzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODE4LDYgKzg4MCw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTgyNyw2ICs4OTAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NDQsMTAgKzkwOCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTg1OSwxMSArOTI3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTg3MywyNCArOTQyLDI2IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC05MTAsMTMgKzk4MSwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC05NTgsMTEgKzEwMzIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxudXRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcKaW5kZXggNWFiMjlkZC4uYmZmZjBlYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoxNzo1NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTU6NTY6MzAgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKIENPTkZJR180MHg9eQpAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfNHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yNywxNSArMjgsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC00OSwxMSArNTMsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC02Nyw5ICs3NSwyMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg0LDMxICsxMDQsNDAgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMCw2ICsxNDksMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTMxLDggKzE2OCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDAsMTkgKzE3Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CiAKQEAgLTE2Niw2ICsyMjQsNyBAQAogIyBDT05GSUdfQUNBRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQNDA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0hDVTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9URk9PVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKICMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CiBDT05GSUdfV0FMTlVUPXkKQEAgLTIxMSwxMCArMjcwLDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzMCwxMCArMjkxLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CkBAIC0yNTgsNiArMzIxLDcgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI3NSwxNCArMzM5LDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzE5LDYgKzM4MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzMyLDYgKzM5NSw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNDQsOCArNDA5LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM1OCw2ICs0MjgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zNzAsOSArNDQxLDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ0OCw3ICs1MTksNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC00NjQsNiArNTM0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNDc2LDEyICs1NDcsMTcgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTAxLDcgKzU3NywxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTUyMiw2ICs2MDIsOCBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQpAQCAtNTQwLDcgKzYyMiwxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC01NDgsNiArNjMzLDcgQEAKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNTU4LDkgKzY0NCwxMyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTU3MCw2ICs2NjAsNyBAQAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldApAQCAtNTc5LDE0ICs2NzAsMTMgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU5OSw2ICs2ODksNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjQ0LDYgKzczNSw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02NjAsNiArNzUyLDExIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY4MiwyNyArNzc5LDEzIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtNzI3LDcgKzgxMCw3IEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKQEAgLTc0Myw3ICs4MjYsMTIgQEAKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzU0LDE0ICs4NDIsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC03NzEsNiArODYyLDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtODI1LDcgKzkyMSw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTg0MSw2ICs5MzYsNyBAQAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTg1NSwxMSArOTUxLDEzIEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC04NjksNiArOTY3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODc3LDE2ICs5NzYsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtODk4LDM1ICsxMDA0LDQ1IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTk0MiwxMyArMTA1OCwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC05NTcsMTAgKzEwNzYsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTk4OCwxMSArMTEwOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTAyOSw2ICsxMTUyLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMDM3LDUgKzExNjEsNiBAQAogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZwppbmRleCA2Zjk3NmI1Li4xZjZkMDQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKLSMgVGh1IEF1ZyAxMyAxNDoxNDowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTQ6MDI6MzUgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfUFRFXzY0QklUPXkKIENPTkZJR19QSFlTXzY0QklUPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0zMyw3ICszNCw5IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CkBAIC01Niw2ICs1OSw3IEBACiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKQEAgLTgzLDExICs4NywxMyBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMjEsMjIgKzEyNywyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0NCw2ICsxNDksOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE2OSwxNCArMTc2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKIApAQCAtMTk4LDYgKzIzMiw3IEBACiAjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0NHhfU0lNUExFPXkKQEAgLTI0MSwxMCArMjc2LDExIEBACiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw4ICsyOTYsNyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CkBAIC0zNTIsNiArMzg3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzksNyArNDE1LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzkyLDYgKzQzNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQwNCw5ICs0NDcsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDk3LDYgKzU0MCw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTU3MywxNiArNjE3LDE3IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU5NSw2ICs2NDAsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjQwLDYgKzY4Niw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02NTYsNiArNzAzLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02OTYsMTEgKzc0NCw2IEBACiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldApAQCAtNzA5LDEwICs3NTIsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTczMCw2ICs3NjksMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiBDT05GSUdfU0VOU09SU19BRDc0MTQ9eQogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTc1Myw2ICs3OTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKQEAgLTc3OSw2ICs4MjQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC03OTAsOSArODM2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgxMCwxMCArODU0LDEzIEBACiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtODIxLDYgKzg2OCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTg1OCw2ICs5MDYsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC04NjUsNiArOTE0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTkzNCw3ICs5ODQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC05OTMsNiArMTA0Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwMTAsNiArMTA2MCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMDI4LDEwICsxMDc5LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwNTUsMTAgKzExMDgsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTA4MCw3ICsxMTMzLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2JhbWJvb19kZWZjb25maWcKaW5kZXggZTU3ZjFlNC4uNzg4ZmFhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2JhbWJvb19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2JhbWJvb19kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoyMjozMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTQ6MDk6MDMgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfUFRFXzY0QklUPXkKIENPTkZJR19QSFlTXzY0QklUPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0zMSwxNSArMzIsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MywxMSArNTcsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03MSw5ICs3OSwyMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg4LDggKzEwOCwxMiBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtOTksMTkgKzEyMywyNSBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjMsNiArMTUzLDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzNCw4ICsxNzIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQzLDE5ICsxODAsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAogCkBAIC0xNzYsNiArMjM1LDggQEAKICMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0NHhfU0lNUExFPXkKQEAgLTIxOCwxMCArMjc5LDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzNywxMCArMzAwLDEzIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKQEAgLTI2NSw2ICszMzEsNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjgyLDE0ICszNDksMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMjYsNiArMzkxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMzksNiArNDA1LDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM1MSw4ICs0MTksMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzY1LDYgKzQzOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM4Niw2ICs0NjAsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC0zOTgsMTIgKzQ3MywxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00MjMsNyArNTAzLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNDQ0LDYgKzUyOCw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC00NjIsNyArNTQ4LDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTQ3MCw2ICs1NTksNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC00ODAsOSArNTcwLDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNDkyLDYgKzU4Niw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC01MDEsMTQgKzU5NiwxMyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTIxLDYgKzYxNSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC01NjYsNiArNjYxLDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTU4Miw2ICs2NzgsMTEgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjA0LDI3ICs3MDUsMTMgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtNjQ5LDcgKzczNiw3IEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKQEAgLTY2NSw3ICs3NTIsMTIgQEAKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNjc2LDE0ICs3NjgsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC02OTMsNiArNzg4LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtNzQ2LDcgKzg0Niw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTc2Miw2ICs4NjEsNyBAQAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTc3NiwxMSArODc2LDEzIEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC03OTAsNiArODkyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNzk4LDE2ICs5MDEsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtODE5LDM1ICs5MjksNDUgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApAQCAtODYzLDEzICs5ODMsMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtODc4LDEwICsxMDAxLDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC05MDksMTEgKzEwMzQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk1MCw2ICsxMDc3LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC05NTgsNSArMTA4Niw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwppbmRleCBiMzEyYjE2Ni4uNGVmOGJjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDE3OjI3OjIwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNDoxMjoyMCAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMzLDcgKzM0LDkgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKQEAgLTU2LDYgKzU5LDcgQEAKIENPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQpAQCAtODMsMTEgKzg3LDEzIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEyMSwyMiArMTI3LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ0LDYgKzE0OSw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTY5LDE0ICsxNzYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0xOTgsNiArMjMyLDcgQEAKIENPTkZJR19DQU5ZT05MQU5EUz15CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0NHhfU0lNUExFPXkKQEAgLTI0MSwxMCArMjc2LDExIEBACiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw4ICsyOTYsNyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CkBAIC0zNTIsNiArMzg3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzksNyArNDE1LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzkyLDYgKzQzNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQwNCw5ICs0NDcsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNTA4LDYgKzU1MSw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC01ODUsMTYgKzYyOSwxOCBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYxNiw2ICs2NjIsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjYxLDYgKzcwOCw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02NzYsNiArNzI0LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03MTcsMTEgKzc2Niw2IEBACiAjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldApAQCAtNzMwLDEwICs3NzQsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTc1MSw2ICs3OTEsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiBDT05GSUdfU0VOU09SU19BRDc0MTQ9eQogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTc3NCw2ICs4MTksNyBAQAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKQEAgLTgwMCw2ICs4NDYsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04MTEsOSArODU4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgzMSwxMCArODc2LDEzIEBACiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtODQyLDYgKzg5MCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtODgyLDEwICs5MzEsMTIgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CkBAIC05OTMsNiArMTA0NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTTQxVDgwPXkKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC0xMDE0LDcgKzEwNjYsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xMDM4LDYgKzEwOTIsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMDQ1LDYgKzExMDAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEwNCw3ICsxMTYwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMSw2ICsxMjU2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIxOCw2ICsxMjc0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEyMzYsMTAgKzEyOTMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTI2MywxMCArMTMyMiwxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMjg4LDcgKzEzNDcsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9lYm9ueV9kZWZjb25maWcKaW5kZXggYjY1MmY3ZC4uY2ExN2IxNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWJvbnlfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIFR1ZSBKYW4gMjAgMDg6MjI6MzYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE0OjIwOjQ2IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldApAQCAtMTksNiArMTksNyBAQAogQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMzAsMTUgKzMxLDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzAsOSArNzgsMjEgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04NywzMSArMTA3LDQwIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjMsNiArMTUyLDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzNCw4ICsxNzEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQzLDE5ICsxNzksNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAogCkBAIC0xNzYsNiArMjM0LDggQEAKICMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzQ0eF9TSU1QTEUgaXMgbm90IHNldApAQCAtMjE4LDEwICsyNzgsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzNywxMCArMjk5LDEzIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldApAQCAtMjY0LDYgKzMyOSw3IEBACiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yODEsMTQgKzM0NywxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMyNSw2ICszODksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTMzOCw2ICs0MDMsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzUwLDggKzQxNywxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zNjQsNiArNDM2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtMzc2LDkgKzQ0OSw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ1Myw3ICs1MjYsNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC00NjksNiArNTQxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNDgxLDEyICs1NTQsMTcgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTA2LDcgKzU4NCwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTUyNyw2ICs2MDksOCBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQpAQCAtNTQ1LDcgKzYyOSwxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC01NTMsNiArNjQwLDcgQEAKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNTYzLDkgKzY1MSwxMyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTU3NSw2ICs2NjcsNyBAQAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldApAQCAtNTg0LDE0ICs2NzcsMTMgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYwNCw2ICs2OTYsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjQ5LDYgKzc0Miw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02NjUsNiArNzU5LDExIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY4NywyNyArNzg2LDEzIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC03MzIsNyArODE3LDcgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIApAQCAtNzQ4LDcgKzgzMywxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC03NTksMTQgKzg0OSwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc3Niw2ICs4NjksMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC04NDAsNyArOTM4LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODU2LDYgKzk1Myw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtODcxLDExICs5NjksMTMgQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTg4NSw2ICs5ODUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04OTMsMTYgKzk5NCwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC05MTQsMzUgKzEwMjIsNDUgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApAQCAtOTU4LDEzICsxMDc2LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTk3MywxMCArMTA5NCwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTAwNCwxMSArMTEyNywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTA0NSw2ICsxMTcwLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWlnZXJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZwppbmRleCAwMDdmM2JkLi5lMzE0OWJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWlnZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFdlZCBBdWcgMTkgMTM6MDY6NTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE0OjMzOjA0IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNyArMzQsOSBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQpAQCAtNTcsNiArNTksNyBAQAogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CkBAIC04NCwxMSArODcsMTMgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTIyLDIyICsxMjcsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDUsNiArMTQ5LDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xNzAsMTQgKzE3Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15CiAKQEAgLTI0MywxMCArMjc2LDExIEBACiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Miw4ICsyOTYsNyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CkBAIC0zNTgsNiArMzkxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODcsMTQgKzQyMSwxMSBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwNyw2ICs0MzgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MTksOSArNDUxLDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC01MjIsNiArNTU0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTczLDggKzYwNiwxMSBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC02MTEsNyArNjQ3LDEwIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02ODIsNyArNzIxLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MTEsMTIgKzc1MiwxMSBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzMwLDYgKzc3MCw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC03NzUsNiArODE2LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTc5MSw2ICs4MzMsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgzMSwxMSArODc0LDYgQEAKICMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC04NDQsMTAgKzg4Miw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CkBAIC04NjUsNyArODk5LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4MywxMCArOTE2LDEzIEBACiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtODk0LDYgKzkzMCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTkzNSw2ICs5NzIsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC05NDIsNiArOTgwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwMDEsNyArMTA0MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEwNTksNiArMTA5Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwOTUsMTAgKzExMzQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTEyMiwxMCArMTE2MywxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMTQ3LDEzICsxMTg4LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQpAQCAtMTE5NywxMSArMTI0MSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fWENCQz15CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fR0hBU0g9eQogQ09ORklHX0NSWVBUT19NRDQ9eQogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcKaW5kZXggYzIzYTRlZi4uYWYyNDRlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoyMjozOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM1CisjIFR1ZSBKYW4gMjYgMTQ6NDA6NTggMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CkBAIC0xOSw2ICsxOSw3IEBACiBDT05GSUdfUFRFXzY0QklUPXkKIENPTkZJR19QSFlTXzY0QklUPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0zMCwxNSArMzEsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03MCw5ICs3OCwyMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODMsOCArMTAzLDEzIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtOTQsMTkgKzExOSwyNSBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTgsNiArMTQ5LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEyOSw4ICsxNjcsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTM4LDE5ICsxNzUsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKIApAQCAtMTcxLDYgKzIzMCw4IEBACiAjIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAogIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNDR4X1NJTVBMRT15CkBAIC0yMTIsMTAgKzI3MywxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMzEsMTAgKzI5NCwxMyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CkBAIC0yNTksNiArMzI1LDcgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI3NiwxNCArMzQzLDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzIwLDYgKzM4NSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzMzLDYgKzM5OSw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNDUsOCArNDEzLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM1OSw2ICs0MzIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zNjksNyArNDQzLDkwIEBACiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19QUk9DX0VWRU5UUz15Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKQEAgLTM4MCw2ICs1MzcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC0zOTIsMTIgKzU1MCwxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00MTcsNyArNTgwLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNDQwLDYgKzYwNyw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC00NTgsNyArNjI3LDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTQ2Niw2ICs2MzgsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC00NzYsOSArNjQ5LDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNDg4LDYgKzY2NSw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC00OTcsMTQgKzY3NSwxMyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTE3LDYgKzY5NCw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC01NjIsNiArNzQwLDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTU3OCwxMyArNzU3LDE3IEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTYwMSwyNyArNzg0LDEzIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTY0Niw3ICs4MTUsNyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCkBAIC02NjIsNyArODMxLDEyIEBACiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTY3NiwxMSArODUwLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNjkwLDYgKzg2NiwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTcyMiw2ICs5MDMsNyBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC03NDMsNyArOTI1LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtNzU5LDYgKzk0MCw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtNzczLDExICs5NTUsMTMgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTc4Nyw2ICs5NzEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTc5NSwxNiArOTgwLDIzIEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTgxNiwzNSArMTAwOCw0MyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC04NTksMTMgKzEwNTksMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtODc0LDEwICsxMDc3LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC05MDUsMTEgKzExMTAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk0Niw2ICsxMTUzLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC05NTQsNSArMTE2Miw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmFpbmllcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmFpbmllcl9kZWZjb25maWcKaW5kZXggYjI1ZmFkMS4uOGZlZDNiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjIyOjQxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNDo1OToxMiAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTE5LDYgKzE5LDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMwLDE1ICszMSwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcwLDkgKzc4LDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODcsOCArMTA3LDEyIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC05OCwxOSArMTIyLDI1IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMiw2ICsxNTIsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTMzLDggKzE3MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDIsMTkgKzE3OSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CiAKQEAgLTE3NSw2ICsyMzQsOCBAQAogIyBDT05GSUdfQVJDSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQpAQCAtMjE2LDEwICsyNzcsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzNSwxMCArMjk4LDEzIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKQEAgLTI2Myw2ICszMjksNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjgwLDE0ICszNDcsMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMjQsNiArMzg5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMzcsNiArNDAzLDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0OSw4ICs0MTcsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzYzLDYgKzQzNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM3NSw5ICs0NDksOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDUzLDcgKzUyNyw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTQ2OSw2ICs1NDIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC00ODEsMTIgKzU1NSwxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MDYsNyArNTg1LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTMzLDYgKzYxNiw3IEBACiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTU0Myw5ICs2MjcsMTMgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC01NTUsNiArNjQzLDcgQEAKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKQEAgLTU2NCwxNCArNjUzLDEzIEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC01ODQsNiArNjcyLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTYyOSw2ICs3MTgsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNjQ1LDYgKzczNSwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02NjcsMjcgKzc2MiwxMyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC03MTIsNyArNzkzLDcgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIApAQCAtNzI4LDcgKzgwOSwxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC03MzksMTQgKzgyNSwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc1Niw2ICs4NDUsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC04MjAsNyArOTE0LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODM2LDYgKzkyOSw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtODUxLDExICs5NDUsMTMgQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTg2NSw2ICs5NjEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NzMsMTYgKzk3MCwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC04OTQsMzUgKzk5OCw0NSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC05NDIsNiArMTA1Niw3IEBACiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eD15CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19DUE0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1VTQkdFQ0tPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4X1BIWVNMT1c9MHhlZjYwMDMwMAogQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0hJR0g9MHgxCiAKQEAgLTk1MSwxMyArMTA2NiwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC05NjYsMTAgKzEwODQsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTk5NywxMSArMTExNywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTAzOCw2ICsxMTYwLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMDQ2LDUgKzExNjksNiBAQAogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnCmluZGV4IGVkMzFkNGYuLmE2N2VjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKLSMgV2VkIEZlYiAgNCAxNDozMTowOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTU6MDU6MDUgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfUFRFXzY0QklUPXkKIENPTkZJR19QSFlTXzY0QklUPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0zMSwxNSArMzIsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MywxMSArNTcsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03MSw2ICs3OSw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CkBAIC03OCwxMSArODcsMTMgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtOTMsOCArMTA0LDEyIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC0xMDQsMTkgKzExOSwyNSBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjgsNiArMTQ5LDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzOSw4ICsxNjgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQ4LDE0ICsxNzYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0xNzcsNiArMjMyLDcgQEAKICMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAogQ09ORklHX1JFRFdPT0Q9eQorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0NHhfU0lNUExFPXkKQEAgLTIxOSwxMCArMjc1LDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzOCwxMCArMjk2LDEzIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKQEAgLTI2MiwxMiArMzIzLDE1IEBACiBDT05GSUdfUENJX1NZU0NBTEw9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKIENPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFQUVSX0lOSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQogIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yODUsMTQgKzM0OSwxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMyOSw2ICszOTEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0Miw2ICs0MDUsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzU0LDEzICs0MTksMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zNzMsNiArNDM4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtMzg1LDkgKzQ1MSw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDYyLDcgKzUyOCw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTQ3OSw2ICs1NDQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01MTIsMTAgKzU3OCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MzMsMjMgKzU5NSwzMCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldApAQCAtNTU4LDcgKzYyNyw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKQEAgLTU2OSw4ICs2MzcsMTIgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19GVVNJT049eQpAQCAtNTg2LDcgKzY1OCwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTYxNCw2ICs2OTAsOCBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQpAQCAtNjMyLDcgKzcxMCwxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NDAsNiArNzIxLDcgQEAKIENPTkZJR19FMTAwMEU9eQogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTY1MCwxOSArNzMyLDIxIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02NzYsNiArNzYwLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTcyMSw2ICs4MDYsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNzM3LDYgKzgyMyw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzc3LDExICs4NjQsNiBAQAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTc5MCwyNSArODcyLDIzIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKIENPTkZJR19JMkNfREVCVUdfQlVTPXkKIENPTkZJR19JMkNfREVCVUdfQ0hJUD15CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI2LDMxICs5MDYsMjEgQEAKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtODc2LDcgKzk0NiwxMiBAQAogIwogIyBETUEgRGV2aWNlcwogIworIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODg3LDE0ICs5NjIsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05MDQsNiArOTgyLDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtOTU4LDcgKzEwNDEsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC05NzQsNiArMTA1Niw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtOTg4LDExICsxMDcxLDEzIEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDAyLDYgKzEwODcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDEwLDE2ICsxMDk2LDIzIEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEwMzEsMzUgKzExMjQsNDUgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApAQCAtMTA3NSwxMyArMTE3OCwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTEwOTIsMTAgKzExOTgsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkc9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogQ09ORklHX0NSWVBUT19HRjEyOE1VTD15CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiBDT05GSUdfQ1JZUFRPX0NSWVBURD15CiBDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTEyMywxMSArMTIzMSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fWENCQz15CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fR0hBU0g9eQogQ09ORklHX0NSWVBUT19NRDQ9eQogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTExNjQsNiArMTI3NCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3Miw1ICsxMjgzLDYgQEAKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zYW00NDBlcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnCmluZGV4IGUxNGU4OWEuLjg4NmNiNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zYW00NDBlcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NhbTQ0MGVwX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjIyOjQyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNToxMToyNCAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMxLDE1ICszMiwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUzLDExICs1NywxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcxLDkgKzc5LDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC04OSw4ICsxMDksMTIgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTk5LDE5ICsxMjMsMjUgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIzLDYgKzE1MywxMyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzQsOCArMTcxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQzLDE5ICsxNzksNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAogCkBAIC0xNzYsNiArMjM0LDggQEAKICMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzQ0eF9TSU1QTEUgaXMgbm90IHNldApAQCAtMjE4LDEwICsyNzgsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM3LDEwICsyOTksMTMgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1NUREJJTlVUSUxTPXkKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQpAQCAtMjY0LDYgKzMyOSw3IEBACiAjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjgxLDE0ICszNDcsMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMjUsNiArMzg5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMzgsNiArNDAzLDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM1MCw4ICs0MTcsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzY0LDYgKzQzNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM4NSw2ICs0NTgsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTQyMCwxMCArNDk0LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC00NDAsOCArNTEwLDEwIEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiAjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC00NjMsNiArNTM1LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC00ODgsMTQgKzU2MSwxNiBAQAogIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldApAQCAtNTA4LDcgKzU4MywxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTUyOSw2ICs2MDgsOCBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQpAQCAtNTQ3LDE3ICs2MjgsMTkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU4MCw2ICs2NjMsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNTg5LDYgKzY3Myw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02MDUsMjUgKzY5MCwzMCBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiBDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQogQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKQEAgLTYzOSw2ICs3MjksNyBAQAogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY3Niw2ICs3NjcsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNjkxLDYgKzc4Myw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPXkKQEAgLTczMywxMSArODI2LDYgQEAKICMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC03NDYsMjcgKzgzNCwyMyBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03ODQsMzEgKzg2OCwyMSBAQAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTg3MCw2ICs5NDQsNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQogIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldApAQCAtODk5LDcgKzk3NCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtOTEyLDE1ICs5ODYsMTggQEAKICMKICMgU3BlY2lhbCBISUQgZHJpdmVycwogIwotQ09ORklHX0hJRF9DT01QQVQ9eQogQ09ORklHX0hJRF9BNFRFQ0g9eQogQ09ORklHX0hJRF9BUFBMRT15CiBDT05GSUdfSElEX0JFTEtJTj15CiBDT05GSUdfSElEX0NIRVJSWT15CiBDT05GSUdfSElEX0NISUNPTlk9eQogQ09ORklHX0hJRF9DWVBSRVNTPXkKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldApAQCAtOTMzLDEwICsxMDEwLDExIEBACiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLUNPTkZJR19USFJVU1RNQVNURVJfRkY9bQotQ09ORklHX1pFUk9QTFVTX0ZGPW0KKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtOTYyLDE3ICsxMDQwLDIwIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQpAQCAtOTkyLDExICsxMDczLDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMDM4LDcgKzExMTksNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTEwNTQsNiArMTEzNCw3IEBACiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTEwOTAsOSArMTE3MSwxMSBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX000MVQ4MD15CiBDT05GSUdfUlRDX0RSVl9NNDFUODBfV0RUPXkKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTExMTAsMTUgKzExOTMsMjIgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMzAsNiArMTIyMCw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CkBAIC0xMTQyLDEwICsxMjMzLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTExNTUsNiArMTI0OSwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfSVNPOTY2MF9GUz15CkBAIC0xMjY3LDYgKzEzNjYsNyBAQAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTI4MSwxMSArMTM4MSwxMyBAQAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTI5NSwyNyArMTM5NywyOSBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMzI2LDcgKzE0MzAsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NlcXVvaWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NlcXVvaWFfZGVmY29uZmlnCmluZGV4IDY0MDBhYWUuLjFiMmY0MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2VxdW9pYV9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQotIyBUdWUgQXByICA3IDE3OjA0OjUyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNToxNTo1MSAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMxLDE1ICszMiwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUzLDEyICs1NywxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcyLDYgKzc5LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKQEAgLTc5LDExICs4NywxMyBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTIxLDYgKzEzMSwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjksNyArMTQ2LDYgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xMzcsNiArMTUzLDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0OSw3ICsxNzIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE1NywxNCArMTgwLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAogCkBAIC0xODYsNiArMjM2LDcgQEAKICMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAogIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQpAQCAtMjI4LDEwICsyNzksMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ3LDkgKzMwMCw4IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1NUREJJTlVUSUxTPXkKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yOTMsMTEgKzM0NSwxMSBAQAogIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKICMKIENPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfTE9XTUVNX0NBTV9OVU09MwogQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzM5LDYgKzM5MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzUzLDYgKzQwNiw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzY1LDcgKzQxOSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM3OCw2ICs0MzgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zOTAsOSArNDUxLDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ5Myw2ICs1NTQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01MTUsNiArNTc3LDcgQEAKICMgRUVQUk9NIHN1cHBvcnQKICMKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MzQsMTQgKzU5NywxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NzYsNyArNjQyLDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU4NCw2ICs2NTMsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01OTQsNiArNjY0LDkgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNjE5LDEyICs2OTIsMTEgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYzNyw2ICs3MDksNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjgyLDYgKzc1NSw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02OTgsNiArNzcyLDExIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTcyMCwyNyArNzk5LDEzIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTc4Myw2ICs4NDgsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzkzLDE0ICs4NjIsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05MTYsNiArOTg4LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtOTI1LDYgKzk5OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTkzMywxNiArMTAwNywyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC05NTQsMTEgKzEwMzUsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtOTY4LDI3ICsxMDUwLDMwIEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC0xMDA0LDEzICsxMDg5LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEwNTIsMTEgKzExNDAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZwppbmRleCBlZjMyY2M0Li4xMjA0MWQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdGFpc2hhbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3RhaXNoYW5fZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIFR1ZSBKYW4gMjAgMDg6MjI6NDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE1OjIxOjA0IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldApAQCAtMTksNiArMTksNyBAQAogQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMzAsMTUgKzMxLDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzAsOSArNzgsMjEgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04Nyw4ICsxMDcsMTIgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTk4LDE5ICsxMjIsMjUgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIyLDYgKzE1MiwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzMsOCArMTcxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MiwxOSArMTc5LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKIApAQCAtMTc1LDYgKzIzNCw4IEBACiAjIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAogIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNDR4X1NJTVBMRT15CkBAIC0yMTYsMTAgKzI3NywxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMzUsMTAgKzI5OCwxMyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CkBAIC0yNjMsNiArMzI5LDcgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI4MCwxNCArMzQ3LDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzI0LDYgKzM4OSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzM3LDYgKzQwMyw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNDksOCArNDE3LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM2Myw2ICs0MzYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zNzUsOSArNDQ5LDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDUzLDcgKzUyNyw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTQ2OSw2ICs1NDIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC00ODEsMTIgKzU1NSwxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MDYsNyArNTg1LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTI5LDYgKzYxMiw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC01NDcsNyArNjMyLDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU1NSw2ICs2NDMsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01NjUsOSArNjU0LDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNTc3LDYgKzY3MCw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC01ODYsMTQgKzY4MCwxMyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjA2LDYgKzY5OSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NTEsNiArNzQ1LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY2Nyw2ICs3NjIsMTEgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjg5LDI3ICs3ODksMTMgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtNzM0LDcgKzgyMCw3IEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKQEAgLTc1MCw3ICs4MzYsMTIgQEAKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNzYxLDE0ICs4NTIsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC03NzgsNiArODcyLDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtODMyLDcgKzkzMSw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTg0OCw2ICs5NDYsNyBAQAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTg2MiwxMSArOTYxLDEzIEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC04NzYsNiArOTc3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODg0LDE2ICs5ODYsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtOTA1LDM1ICsxMDE0LDQ1IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTk0OSwxMyArMTA2OCwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC05NjQsMTAgKzEwODYsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTk5NSwxMSArMTExOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTAzNiw2ICsxMTYyLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMDQ0LDUgKzExNzEsNiBAQAogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnCmluZGV4IDc4NzYzNWYuLjk5ZWZmNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUdWUgSnVuICA5IDIzOjM1OjM2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNToyNzo0NiAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMxLDE1ICszMiwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKQEAgLTU2LDExICs2MCwxMyBAQAogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTgxLDExICs4NywxMyBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTExLDcgKzExOSw2IEBACiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTEyNCw2ICsxMzEsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTMxLDcgKzE0NSw2IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTM5LDYgKzE1MiwxMyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNTEsNyArMTcxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE1OSwxNCArMTc5LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE4Nyw2ICsyMzQsNyBAQAogIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAogIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUEM0NHhfU0lNUExFIGlzIG5vdCBzZXQKQEAgLTIyOSwxMCArMjc3LDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0OCw5ICsyOTgsOCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU2LDYgKzQwNSw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzcxLDYgKzQyMSw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzgzLDcgKzQzNCwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0NTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQwNyw5ICs0NjUsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNTEzLDYgKzU3MSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01MjQsOSArNTg2LDExIEBACiAjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNTM0LDcgKzU5OCw5IEBACiAjCiBDT05GSUdfRUVQUk9NX0FUMjQ9eQogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU1NywxNSArNjIzLDExIEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1dBSVRfU0NBTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNTgyLDcgKzY0NCw2IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02MDksMTQgKzY3MCwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY3OCw2ICs3MzksNyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNjkzLDYgKzc1NSw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTcyNSwxNyArNzg4LDE3IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQpAQCAtNzYxLDEwICs4MjQsMTkgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogQ09ORklHX1NFTlNPUlNfQUQ3NDE0PXkKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC03ODcsNiArODU5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CkBAIC04MTIsNiArODg1LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CkBAIC04MjEsNyArODk2LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiBDT05GSUdfVEhFUk1BTF9IV01PTj15CiBDT05GSUdfV0FUQ0hET0c9eQpAQCAtODU1LDI2ICs5MjksMTUgQEAKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC05MTcsMTAgKzk4MCwxMSBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKQEAgLTk4OCw2ICsxMDUyLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTEwMTQsNyArMTA3OSw4IEBACiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1dCU0QgaXMgbm90IHNldAotQ09ORklHX01NQ19QSUtBU0Q9eQorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15CkBAIC0xMDI1LDkgKzEwOTEsMTAgQEAKIENPTkZJR19MRURTX0dQSU89eQogIyBDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU9fT0Y9eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTEwNDgsNiArMTExNSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMDY1LDEwICsxMTM2LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTE0NSw3ICsxMjE5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIzNSw2ICsxMzA4LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTI0NCw2ICsxMzE4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI2MSwxMCArMTMzNiwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEyNzYsMTEgKzEzNTUsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTI5MCwyNyArMTM3MCwzMCBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApAQCAtMTMyNiwxMyArMTQwOSwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldApAQCAtMTM2NiwxMSArMTQ1MiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKaW5kZXggYTg1ZjkyNy4uNjIyZDg0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpAQCAtMTU1Nyw3ICsxNTU3LDUyIEBACiAjCiAjIFRJIFZMWU5RCiAjCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFHSU5HPXkKKyMgQ09ORklHX1NUQUdJTkdfRVhDTFVERV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVDEzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUU0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FSUxIQVVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JUF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01FREkgaXMgbm90IHNldAorIyBDT05GSUdfQVNVU19PTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMVEVSQV9QQ0lFX0NIRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQU5aUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQW5kcm9pZAorIworIyBDT05GSUdfQU5EUk9JRCBpcyBub3Qgc2V0CisjIENPTkZJR19EU1QgaXMgbm90IHNldAorIyBDT05GSUdfUE9ITUVMRlMgaXMgbm90IHNldAorIyBDT05GSUdfQjNERkcgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1BISVNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFOOUFVVEggaXMgbm90IHNldAorIyBDT05GSUdfSEVDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1BDIGlzIG5vdCBzZXQKKworIworIyBRdWFsY29tbSBNU00gQ2FtZXJhIEFuZCBWaWRlbworIworCisjCisjIENhbWVyYSBTZW5zb3IgU2VsZWN0aW9uCisjCisjIENPTkZJR19IWVBFUlZfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19IWVBFUlZfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSFlQRVJWX05FVCBpcyBub3Qgc2V0CitDT05GSUdfVk1FX0JVUz15CisKKyMKKyMgVk1FIEJyaWRnZSBEcml2ZXJzCisjCitDT05GSUdfVk1FX1RTSTE0OD15CisKKyMKKyMgVk1FIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19WTUVfVVNFUiBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwppbmRleCA0NTU0ZDliLi42MmMyYjgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKQEAgLTI2NSw3ICsyNjUsNyBAQAogIwogIyBLZXJuZWwgb3B0aW9ucwogIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfSElHSE1FTT15CiBDT05GSUdfVElDS19PTkVTSE9UPXkKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQpAQCAtNjUxLDcgKzY1MSw3IEBACiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKQEAgLTY3MSwxMyArNjcxLDkgQEAKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKICMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CiBDT05GSUdfTVREX0dFTl9QUk9CRT15Ci1DT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci0jIENPTkZJR19NVERfQ0ZJX05PU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKQEAgLTY4OCw3ICs2ODQsNiBAQAogQ09ORklHX01URF9DRklfSTI9eQogIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CkBAIC0xNjUyLDcgKzE2NDcsNDQgQEAKICMKICMgVEkgVkxZTlEKICMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorQ09ORklHX1NUQUdJTkc9eQorIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUMTMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRTQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUVJTEhBVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lQX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ0hPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTUVESSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1VTX09MRUQgaXMgbm90IHNldAorIyBDT05GSUdfQUxURVJBX1BDSUVfQ0hETUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlNSU8gaXMgbm90IHNldAorIyBDT05GSUdfVFJBTlpQT1JUIGlzIG5vdCBzZXQKKworIworIyBBbmRyb2lkCisjCisjIENPTkZJR19BTkRST0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTVCBpcyBub3Qgc2V0CisjIENPTkZJR19QT0hNRUxGUyBpcyBub3Qgc2V0CisjIENPTkZJR19CM0RGRyBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfUEhJU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQU45QVVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19IRUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUNjY1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1BDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEQ18xN0YzMTAxWCBpcyBub3Qgc2V0CitDT05GSUdfVk1FX0JVUz15CisKKyMKKyMgVk1FIEJyaWRnZSBEcml2ZXJzCisjCisjIENPTkZJR19WTUVfQ0E5MUNYNDIgaXMgbm90IHNldAorQ09ORklHX1ZNRV9UU0kxNDg9eQorCisjCisjIFZNRSBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfVk1FX1VTRVIgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTcyOSw3ICsxNzYxLDE3IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtMTg3NCw2ICsxOTE2LDcgQEAKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUxMnhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNDcyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2OTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKKyMgRnJpIEZlYiAgNSAxMTo0ODoyOSAyMDEwCisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKKyMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CitDT05GSUdfUkRfTFpPPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9ERUFETElORT15CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorQ09ORklHX1BQQ19NUEM1MTJ4PXkKK0NPTkZJR19QUENfTVBDNTEyMT15CitDT05GSUdfTVBDNTEyMV9BRFM9eQorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAorQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQorQ09ORklHX0lQSUM9eQorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfQ0FOPXkKK0NPTkZJR19DQU5fUkFXPXkKK0NPTkZJR19DQU5fQkNNPXkKKworIworIyBDQU4gRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19DQU5fVkNBTj15CitDT05GSUdfQ0FOX0RFVj15CisjIENPTkZJR19DQU5fQ0FMQ19CSVRUSU1JTkcgaXMgbm90IHNldAorQ09ORklHX0NBTl9NU0NBTj15CisjIENPTkZJR19DQU5fU0pBMTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgQ0FOIFVTQiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19DQU5fRU1TX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVM9eQorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUk9NPXkKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9GU0xfRUxCQyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfTVBDNTEyMV9ORkM9eQorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworQ09ORklHX01URF9VQkk9eQorQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKK0NPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKKyMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKKworIworIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MQorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfWElQPXkKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworQ09ORklHX0VFUFJPTV9BVDI0PXkKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQorQ09ORklHX0ZJWEVEX1BIWT15CitDT05GSUdfTURJT19CSVRCQU5HPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CitDT05GSUdfRlNfRU5FVD15CitDT05GSUdfRlNfRU5FVF9NUEM1MTIxX0ZFQz15CitDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKK0NPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9NUEM1Mnh4PXkKK0NPTkZJR19TRVJJQUxfTVBDNTJ4eF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfTVBDNTJ4eF9DT05TT0xFX0JBVUQ9MTE1MjAwCisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfU1VQUE9SVD15CisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKK0NPTkZJR19WSURFT19ERVY9eQorQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPXkKKyMgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19NRURJQT15CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfSVJfQ09SRT15CitDT05GSUdfVklERU9fSVI9eQorIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUj15CisjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT15CitDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD15CitDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz15CitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT15CitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz15CitDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPXkKK0NPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9eQorQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD15CitDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDM9eQorQ09ORklHX1ZJREVPX1Y0TDI9eQorQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CitDT05GSUdfVklERU9fQURWX0RFQlVHPXkKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSVJfSTJDPXkKKworIworIyBFbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzCisjCisKKyMKKyMgQXVkaW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1RWQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBNzQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE5ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEVBNjQxNUMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEVBNjQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NU1AzNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTM0NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUzUzTDMyQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NNTI3OTAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVExWMzIwQUlDMjNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XTTg3MzkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVlAyN1NNUFggaXMgbm90IHNldAorCisjCisjIFJEUyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fU0FBNjU4OCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX0FEVjcxODAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQlQ4MTkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQlQ4NTYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQlQ4NjYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fS1MwMTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NVDlWMDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RDTTgyNVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzExMCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fU0FBNzExWD15CisjIENPTkZJR19WSURFT19TQUE3MTdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFZQNTE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WUFgzMjIwIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBhbmQgYXVkaW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX0NYMjU4NDAgaXMgbm90IHNldAorCisjCisjIE1QRUcgdmlkZW8gZW5jb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX0NYMjM0MVggaXMgbm90IHNldAorCisjCisjIFZpZGVvIGVuY29kZXJzCisjCisjIENPTkZJR19WSURFT19TQUE3MTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxODUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQURWNzE3MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BRFY3MTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RIUzczMDMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQURWNzM0MyBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMKKyMKKyMgQ09ORklHX1ZJREVPX1VQRDY0MDMxQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19VUEQ2NDA4MyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CitDT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKKyMgQ09ORklHX1VTQl9WSURFT19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1ZJREVPX0NMQVNTX0lOUFVUX0VWREVWPXkKK0NPTkZJR19VU0JfR1NQQ0E9bQorIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVFYwNlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HTDg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfQ09ORVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMDIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVEswMTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NUVjA2ODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1Q2MTMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1RWODUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9aQzNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19QVlJVU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hEUFZSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DWDIzMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1VTQlZJU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVQ2MVgyNTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NOOUMxMDIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVj15CisjIENPTkZJR19VU0JfWlIzNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CitDT05GSUdfUkFESU9fQURBUFRFUlM9eQorIyBDT05GSUdfSTJDX1NJNDcxMyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MTMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0k0NzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NUjgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RFRjY4NjIgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfRlNMX0RJVT15CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKKyMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0tZRT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfVFdJTkhBTj15CitDT05GSUdfSElEX0tFTlNJTkdUT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19ISURfR1JFRU5BU0lBPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz15CisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1pFUk9QTFVTPXkKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU89eQorQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fREVTQz15CisjIENPTkZJR19YUFNfVVNCX0hDRF9YSUxJTlggaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0ZTTD15CitDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NNDFUODA9eQorIyBDT05GSUdfUlRDX0RSVl9NNDFUODBfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX01QQzUxMjE9eQorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCisjIENPTkZJR19GU0xfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM1MTJYX0RNQT15CitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKyMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDJfRlNfWElQPXkKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1hJUD15CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTPXkKKyMgQ09ORklHX1VCSUZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GU19MWk89eQorQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQorIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTFpPPXkKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0NMT0NLPXkKK0NPTkZJR19QUENfTElCX1JIRUFQPXkKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQweF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhfZGVmY29uZmlnCmluZGV4IDMyNjIwNWMuLjM1YjYwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQweF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDB4X2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBGcmkgSmFuIDIzIDA4OjQ0OjAzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxMzo1NDowNiAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogQ09ORklHXzQweD15CkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR180eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI3LDE1ICsyOCwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKQEAgLTUwLDExICs1NCwxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19EVEM9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC02OCw5ICs3NiwyMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg1LDMxICsxMDUsNDAgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMSw2ICsxNTAsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTMyLDggKzE2OSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDEsMTkgKzE3Nyw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0xNjgsMTIgKzIyNiwxNCBAQAogQ09ORklHX0FDQURJQT15CiBDT05GSUdfRVA0MDU9eQogQ09ORklHX0hDVTQ9eQorQ09ORklHX0hPVEZPT1Q9eQogQ09ORklHX0tJTEFVRUE9eQogQ09ORklHX01BS0FMVT15CiBDT05GSUdfV0FMTlVUPXkKIENPTkZJR19YSUxJTlhfVklSVEVYX0dFTkVSSUNfQk9BUkQ9eQogQ09ORklHX1BQQzQweF9TSU1QTEU9eQogQ09ORklHXzQwNUdQPXkKK0NPTkZJR180MDVFUD15CiBDT05GSUdfNDA1RVg9eQogQ09ORklHXzQwNUVaPXkKIENPTkZJR180MDVHUFI9eQpAQCAtMTk1LDYgKzI1NSw3IEBACiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfUlRDPXkKICMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9QQ0kgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0yMTgsMTAgKzI3OSwxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMzcsMTAgKzMwMCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldApAQCAtMjY1LDYgKzMzMCw3IEBACiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yODIsMTQgKzM0OCwxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM0MSw2ICs0MDUsNyBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQorIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTM0OSw2ICs0MTQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Miw2ICs0MjgsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzc0LDEzICs0NDIsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTMsNiArNDYxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDA1LDkgKzQ3NCw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00ODMsNyArNTUyLDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNDkxLDcgKzU1OSw3IEBACiBDT05GSUdfTVREX1VCST1tCiBDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgogQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQotQ09ORklHX01URF9VQklfR0xVRUJJPXkKK0NPTkZJR19NVERfVUJJX0dMVUVCST1tCiAKICMKICMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCkBAIC01MDksNiArNTc3LDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTIwLDE0ICs1ODksMjUgQEAKIENPTkZJR19YSUxJTlhfU1lTQUNFPW0KICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NDcsNyArNjI3LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTY4LDYgKzY1Miw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC01ODYsNyArNjcyLDEwIEBACiBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSPXkKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC01OTQsNiArNjgzLDcgQEAKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNjA0LDkgKzY5NCwxMyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTYxNiw2ICs3MTAsNyBAQAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldApAQCAtNjI1LDE0ICs3MjAsMTMgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY0NSw2ICs3MzksNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjYzLDYgKzc1OCw3IEBACiAjIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMj1tCisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjk3LDYgKzc5Myw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC03MTQsNiArODExLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPW0KQEAgLTc1NiwxMSArODU0LDYgQEAKICMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC03NjksMjAgKzg2MiwxNyBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKQEAgLTgwNCwxMSArODk0LDE3IEBACiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtODMyLDI4ICs5MjgsMTUgQEAKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTA5LDYgKzk5Miw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTMwLDcgKzEwMTQsNyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCkBAIC05NDYsNyArMTAzMCwxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC05NTYsNiArMTA0NSw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKQEAgLTk2NiwxMSArMTA1NiwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk4MCw2ICsxMDcyLDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtMTA1Myw3ICsxMTUwLDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTEwOCw2ICsxMjA0LDcgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTExMjUsMTEgKzEyMjIsMTMgQEAKIENPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX0xaT19DT01QUkVTUz1tCiBDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTExMzksNiArMTIzOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNDcsMTYgKzEyNDcsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTE2OCwzNSArMTI3NSw0NSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC0xMjEyLDEzICsxMzI5LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyMjcsMTAgKzEzNDcsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTEyNTgsMTEgKzEzODAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyOTksNiArMTQyMyw3IEBACiAjIENvbXByZXNzaW9uCiAjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19MWk89bQogCiAjCkBAIC0xMzA3LDUgKzE0MzIsNiBAQAogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZjb25maWcKaW5kZXggNWU2ZDU1Zi4uNDZmNWM0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIEZyaSBKYW4gMjMgMDg6NDM6NDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDEzOjQyOjE3IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldApAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMzEsMTUgKzMyLDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldApAQCAtNTQsMTEgKzU4LDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0RUQz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcyLDkgKzgwLDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODksMzEgKzEwOSw0MCBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTI1LDYgKzE1NCwxMyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzYsOCArMTcyLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0NSwyMCArMTgwLDQyIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlM9eQotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0xNzksOCArMjM2LDExIEBACiBDT05GSUdfQVJDSEVTPXkKIENPTkZJR19DQU5ZT05MQU5EUz15CiBDT05GSUdfR0xBQ0lFUj15CitDT05GSUdfUkVEV09PRD15CitDT05GSUdfRUlHRVI9eQogQ09ORklHX1lPU0VNSVRFPXkKIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQ9eQorIyBDT05GSUdfWElMSU5YX01MNTEwIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0NHhfU0lNUExFPXkKIENPTkZJR19QUEM0eHhfR1BJTz15CiBDT05GSUdfNDQwRVA9eQpAQCAtMTkwLDYgKzI1MCw3IEBACiBDT05GSUdfNDQwR1g9eQogQ09ORklHXzQ0MFNQZT15CiBDT05GSUdfNDYwRVg9eQorQ09ORklHXzQ2MFNYPXkKIENPTkZJR19JQk00NDBFUF9FUlI0Mj15CiBDT05GSUdfWElMSU5YX1ZJUlRFWD15CiBDT05GSUdfWElMSU5YX1ZJUlRFWF81X0ZYVD15CkBAIC0yMDcsNiArMjY4LDcgQEAKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIENPTkZJR19PRl9SVEM9eQogIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTIzMCwxMCArMjkyLDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDksMTAgKzMxMywxMyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKQEAgLTI3Niw2ICszNDMsNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjkzLDE0ICszNjEsMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNTIsNiArNDE4LDcgQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPW0KKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CkBAIC0zNjAsNiArNDI3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtMzc1LDYgKzQ0Myw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODcsOCArNDU3LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwMSw2ICs0NzYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MTMsOSArNDg5LDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDkwLDcgKzU2Niw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTQ5OCw3ICs1NzMsNyBAQAogQ09ORklHX01URF9VQkk9bQogQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKIENPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKLUNPTkZJR19NVERfVUJJX0dMVUVCST15CitDT05GSUdfTVREX1VCSV9HTFVFQkk9bQogCiAjCiAjIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucwpAQCAtNTE2LDYgKzU5MSw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC01MjgsMTQgKzYwNCwyNSBAQAogQ09ORklHX1hJTElOWF9TWVNBQ0U9bQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU1OCwxMCArNjQ1LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTc4LDYgKzY2MSw3IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldApAQCAtNTg3LDcgKzY3MSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTYwOCw2ICs2OTYsOCBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQpAQCAtNjI2LDcgKzcxNiwxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02MzQsNiArNzI3LDcgQEAKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNjQ0LDkgKzczOCwxMyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTY1Niw2ICs3NTQsNyBAQAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldApAQCAtNjY1LDE0ICs3NjQsMTQgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjk1LDYgKzc5NCw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC03MTMsNiArODEzLDcgQEAKICMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyPW0KKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03NDcsNiArODQ4LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTc2NCw2ICs4NjYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9bQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9bQpAQCAtODA3LDExICs5MTAsNiBAQAogIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTgyMCwyMCArOTE4LDE3IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQpAQCAtODU1LDE2ICs5NTAsMjEgQEAKICMKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19DUzU1MzUgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4NCwyOCArOTg0LDE1IEBACiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTYxLDYgKzEwNDgsNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTk5NCwxOSArMTA4MiwyMiBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU89eQogQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fREVTQz15CisjIENPTkZJR19YUFNfVVNCX0hDRF9YSUxJTlggaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQpAQCAtMTAzMCwxMSArMTEyMSwxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApAQCAtMTA3NSw3ICsxMTY2LDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xMDgzLDYgKzExNzMsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTA5MSw2ICsxMTgyLDcgQEAKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMTAwLDcgKzExOTIsMTIgQEAKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTExMCw2ICsxMjA3LDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldApAQCAtMTExOSwxMSArMTIxNywxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTExMzMsNiArMTIzMywxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMDYsNyArMTMxMSw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNjEsNiArMTM2NSw3IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMjc4LDExICsxMzgzLDEzIEBACiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19MWk9fQ09NUFJFU1M9bQogQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjkyLDYgKzEzOTksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzMDAsMTYgKzE0MDgsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTMyMSwzNSArMTQzNiw0MyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC0xMzYzLDEzICsxNDg2LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzNzgsMTAgKzE1MDQsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE0MDksMTEgKzE1MzcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE0NTAsNiArMTU4MCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19MWk89bQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggN2IzODA0YS4uYjViMjU5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMTM3LDggKzEzNyw5IEBACiBDT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfS1BST0JFUz15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKQEAgLTE5MSw2ICsxOTIsNyBAQAogQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1BQQ19TTUxQQVI9eQogQ09ORklHX0NNTT15CitDT05GSUdfRFRMPXkKIENPTkZJR19QUENfSVNFUklFUz15CiAKICMKQEAgLTMyOCw5ICszMzAsMTAgQEAKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19QSFlQX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15Ci0jIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19OVU1BPXkKK0NPTkZJR19OT0RFU19TSElGVD04CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CkBAIC0zMzksNiArMzQyLDcgQEAKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQogQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CkBAIC0zNTQsMTEgKzM1OCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKIENPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15CiBDT05GSUdfUFBDX0hBU19IQVNIXzY0Sz15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCi0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX1NNVD15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgpAQCAtNzkwLDEyICs3OTUsMTIgQEAKIENPTkZJR19TQ1NJX0lQUl9UUkFDRT15CiBDT05GSUdfU0NTSV9JUFJfRFVNUD15CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1FMQV9GQz1tCiAjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MUEZDPW0KICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CkBAIC04NjcsOSArODcyLDggQEAKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15Ci1DT05GSUdfTURfUkFJRDEwPXkKLUNPTkZJR19NRF9SQUlENDU2PXkKLUNPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ0NTY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTk4NCw3ICs5ODgsNyBAQAogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMEU9bQogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQEAgLTEwMDYsMTkgKzEwMTAsMTkgQEAKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMT1tCitDT05GSUdfQ0hFTFNJT19UMz1tCiBDT05GSUdfRUhFQT1tCiAjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKK0NPTkZJR19JWEdCRT1tCiBDT05GSUdfSVhHQj1tCi0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorQ09ORklHX1MySU89bQorQ09ORklHX01ZUkkxMEdFPW0KK0NPTkZJR19ORVRYRU5fTklDPW0KICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CiBDT05GSUdfUEFTRU1JX01BQz15Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUxYNF9FTj1tCitDT05GSUdfTUxYNF9DT1JFPW0KICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKQEAgLTExNjksNyArMTE3Myw3IEBACiBDT05GSUdfSEFTX1RYWDlfU0VSSUFMPXkKIENPTkZJR19TRVJJQUxfVFhYOV9OUl9VQVJUUz02CiBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfSlNNPW0KICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTE1ODYsNyArMTU5MCw3IEBACiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPW0KICMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCkBAIC0xNjg2LDIxICsxNjkwLDIyIEBACiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EPW0KLSMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRD1tCitDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUz1tCitDT05GSUdfSU5GSU5JQkFORF9VU0VSX01FTT15CiBDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TPXkKIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKLSMgQ09ORklHX0lORklOSUJBTkRfSVBBVEggaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBBVEg9bQogQ09ORklHX0lORklOSUJBTkRfRUhDQT1tCiAjIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfTUxYNF9JTkZJTklCQU5EPW0KICMgQ09ORklHX0lORklOSUJBTkRfTkVTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00gaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQogIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX1NSUD1tCiBDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KIENPTkZJR19FREFDPXkKIApAQCAtMTc5OCw3ICsxODAzLDcgQEAKIENPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15Ci1DT05GSUdfSkZTX0ZTPXkKK0NPTkZJR19KRlNfRlM9bQogQ09ORklHX0pGU19QT1NJWF9BQ0w9eQogQ09ORklHX0pGU19TRUNVUklUWT15CiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldApAQCAtMTgxMSwxNCArMTgxNiwyMiBAQAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19PQ0ZTMl9GUz1tCitDT05GSUdfT0NGUzJfRlNfTzJDQj1tCitDT05GSUdfT0NGUzJfRlNfU1RBVFM9eQorQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0c9eQorIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRCBpcyBub3Qgc2V0CitDT05GSUdfQlRSRlNfRlM9bQorQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfTklMRlMyX0ZTPW0KIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9bQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTE4NTEsNyArMTg2NCw3IEBACiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMjA3NSw3ICsyMDg4LDcgQEAKIENPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKIENPTkZJR19ERUJVR0dFUj15CiBDT05GSUdfSVJRU1RBQ0tTPXkKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1ZJUlFfREVCVUc9eQogQ09ORklHX0JPT1RYX1RFWFQ9eQogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBjYTlmZjlhLi40MWRlM2RkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMTU5LDcgKzE1OSw3IEBACiBDT05GSUdfS01PRD15CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKIENPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0tfQ09NUEFUPXkKQEAgLTE5MSw2ICsxOTEsNyBAQAogQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1BQQ19TTUxQQVI9eQogQ09ORklHX0NNTT15CitDT05GSUdfRFRMPXkKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CkBAIC0yNTUsNyArMjU2LDggQEAKICMgQ09ORklHX1BIWVBfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKIENPTkZJR19OVU1BPXkKLUNPTkZJR19OT0RFU19TSElGVD00CitDT05GSUdfTk9ERVNfU0hJRlQ9OAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CkBAIC0yNzAsNyArMjcyLDkgQEAKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15Ci0jIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKQEAgLTcwNSw3ICs3MDksNyBAQAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ0NTY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTgwMCw3ICs4MDQsNyBAQAogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMEU9bQogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQEAgLTgxOCwxOCArODIyLDE4IEBACiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDE9bQorQ09ORklHX0NIRUxTSU9fVDM9bQogQ09ORklHX0VIRUE9eQogIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CitDT05GSUdfSVhHQkU9bQogQ09ORklHX0lYR0I9bQogQ09ORklHX1MySU89bQotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CitDT05GSUdfTVlSSTEwR0U9bQorQ09ORklHX05FVFhFTl9OSUM9bQogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0VOPW0KK0NPTkZJR19NTFg0X0NPUkU9bQogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldApAQCAtODk0LDcgKzg5OCw3IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNzEsNyArMTI3NSw3IEBACiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CitDT05GSUdfVVNCX01PTj1tCiAjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIApAQCAtMTMxMSw3ICsxMzE1LDcgQEAKICMKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19VU0JfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldApAQCAtMTMyMiw3ICsxMzI2LDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKQEAgLTEzNzcsMTcgKzEzODEsMTcgQEAKIENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQotIyBDT05GSUdfSU5GSU5JQkFORF9JUEFUSCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUEFUSD1tCiBDT05GSUdfSU5GSU5JQkFORF9FSENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0lORklOSUJBTkQ9bQogIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTT15CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfU1JQPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVNFUiBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldApAQCAtMTQ0Myw2ICsxNDQ3LDkgQEAKIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKICMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQgaXMgbm90IHNldAorQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX05JTEZTMl9GUz1tCiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE0NTUsOCArMTQ2Miw4IEBACiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19JU085NjYwX0ZTPXkKLUNPTkZJR19KT0xJRVQ9eQotQ09ORklHX1pJU09GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC0xNTA4LDE0ICsxNTE1LDE0IEBACiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQotQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjJfQUNMPXkKIENPTkZJR19ORlNEX1YzPXkKIENPTkZJR19ORlNEX1YzX0FDTD15CiBDT05GSUdfTkZTRF9WND15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15CitDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKQEAgLTE2ODEsMTIgKzE2ODgsMTIgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfSENBTExfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVD15CitDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUPXkKK0NPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc20tY29tcGF0LmgKaW5kZXggOGYwZmU3OS4uYzFiNDc1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLWNvbXBhdC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfQVNNX0NPTVBBVF9ICiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgogCiAjaWZkZWYgX19BU1NFTUJMWV9fCiAjICBkZWZpbmUgc3RyaW5naWZ5X2luX2MoLi4uKQlfX1ZBX0FSR1NfXwpAQCAtMjQsNyArMjUsNyBAQAogI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubGxvbmcpCiAjZGVmaW5lIFBQQ19MT05HX0FMSUdOCXN0cmluZ2lmeV9pbl9jKC5iYWxpZ24gOCkKICNkZWZpbmUgUFBDX1RMTkVJCXN0cmluZ2lmeV9pbl9jKHRkbmVpKQotI2RlZmluZSBQUENfTExBUlgJc3RyaW5naWZ5X2luX2MobGRhcngpCisjZGVmaW5lIFBQQ19MTEFSWCh0LCBhLCBiLCBlaCkJUFBDX0xEQVJYKHQsIGEsIGIsIGVoKQogI2RlZmluZSBQUENfU1RMQ1gJc3RyaW5naWZ5X2luX2Moc3RkY3guKQogI2RlZmluZSBQUENfQ05UTFpMCXN0cmluZ2lmeV9pbl9jKGNudGx6ZCkKIApAQCAtNDYsNyArNDcsNyBAQAogI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubG9uZykKICNkZWZpbmUgUFBDX0xPTkdfQUxJR04Jc3RyaW5naWZ5X2luX2MoLmJhbGlnbiA0KQogI2RlZmluZSBQUENfVExORUkJc3RyaW5naWZ5X2luX2ModHduZWkpCi0jZGVmaW5lIFBQQ19MTEFSWAlzdHJpbmdpZnlfaW5fYyhsd2FyeCkKKyNkZWZpbmUgUFBDX0xMQVJYKHQsIGEsIGIsIGVoKQlQUENfTFdBUlgodCwgYSwgYiwgZWgpCiAjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdHdjeC4pCiAjZGVmaW5lIFBQQ19DTlRMWkwJc3RyaW5naWZ5X2luX2MoY250bHp3KQogI2RlZmluZSBQUENfTVRPQ1JGCXN0cmluZ2lmeV9pbl9jKG10Y3JmKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDQwMTI0ODMuLmI4ZjE1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTQ5LDEzICs0OSwxMyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyCQkjIGF0b21pY19hZGRfcmV0dXJuXG5cCiAJYWRkCSUwLCUxLCUwXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklMCwwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtODUsMTMgKzg1LDEzIEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTIJCSMgYXRvbWljX3N1Yl9yZXR1cm5cblwKIAlzdWJmCSUwLCUxLCUwXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklMCwwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMTE5LDEzICsxMTksMTMgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfaW5jX3JldHVyblxuXAogCWFkZGljCSUwLCUwLDFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUwLDAsJTEgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAieGVyIiwgIm1lbW9yeSIpOwpAQCAtMTYzLDEzICsxNjMsMTMgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfZGVjX3JldHVyblxuXAogCWFkZGljCSUwLCUwLC0xXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMCwwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAieGVyIiwgIm1lbW9yeSIpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19hZGRfdW5sZXNzXG5cCiAJY21wdwkwLCUwLCUzIFxuXAogCWJlcS0JMmYgXG5cCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3R3Y3guCSUwLDAsJTEgXG5cCiAJYm5lLQkxYiBcbiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAiCXN1YmYJJTAsJTIsJTAgXG5cCiAyOiIKIAk6ICI9JnIiICh0KQpAQCAtMjI3LDcgKzIyNyw3IEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2RlY19pZl9wb3NpdGl2ZVxuXAogCWNtcHdpCSUwLDFcblwKIAlhZGRpCSUwLCUwLC0xXG5cCkBAIC0yMzUsNyArMjM1LDcgQEAKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIJOiAiPSZiIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCkBAIC0yODYsMTIgKzI4NiwxMiBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9hZGRfcmV0dXJuXG5cCiAJYWRkCSUwLCUxLCUwXG5cCiAJc3RkY3guCSUwLDAsJTIgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0zMjAsMTIgKzMyMCwxMiBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9zdWJfcmV0dXJuXG5cCiAJc3ViZgklMCwlMSwlMFxuXAogCXN0ZGN4LgklMCwwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMzUyLDEyICszNTIsMTIgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfaW5jX3JldHVyblxuXAogCWFkZGljCSUwLCUwLDFcblwKIAlzdGRjeC4JJTAsMCwlMSBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJ4ZXIiLCAibWVtb3J5Iik7CkBAIC0zOTQsMTIgKzM5NCwxMiBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9kZWNfcmV0dXJuXG5cCiAJYWRkaWMJJTAsJTAsLTFcblwKIAlzdGRjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgInhlciIsICJtZW1vcnkiKTsKQEAgLTQxOSwxMyArNDE5LDEzIEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZVxuXAogCWFkZGljLgklMCwlMCwtMVxuXAogCWJsdC0JMmZcblwKIAlzdGRjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCSJcblwKIDI6Igk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKQEAgLTQ1MSwxNCArNDUxLDE0IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWNfYWRkX3VubGVzc1xuXAogCWNtcGQJMCwlMCwlMyBcblwKIAliZXEtCTJmIFxuXAogCWFkZAklMCwlMiwlMCBcbiIKICIJc3RkY3guCSUwLDAsJTEgXG5cCiAJYm5lLQkxYiBcbiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAiCXN1YmYJJTAsJTIsJTAgXG5cCiAyOiIKIAk6ICI9JnIiICh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDU2ZjJmMmUuLjMwOTY0YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTY1LDcgKzY1LDcgQEAKIAl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKilfcDsJXAogCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQlcCiAJcHJlZml4CQkJCQlcCi0iMToiCVBQQ19MTEFSWCAiJTAsMCwlM1xuIgkJCVwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTMsMCkgIlxuIgkJXAogCXN0cmluZ2lmeV9pbl9jKG9wKSAiJTAsJTAsJTJcbiIJCVwKIAlQUEM0MDVfRVJSNzcoMCwlMykJCQlcCiAJUFBDX1NUTENYICIlMCwwLCUzXG4iCQkJXApAQCAtNzgsNyArNzgsNyBAQAogCiBERUZJTkVfQklUT1Aoc2V0X2JpdHMsIG9yLCAiIiwgIiIpCiBERUZJTkVfQklUT1AoY2xlYXJfYml0cywgYW5kYywgIiIsICIiKQotREVGSU5FX0JJVE9QKGNsZWFyX2JpdHNfdW5sb2NrLCBhbmRjLCBMV1NZTkNfT05fU01QLCAiIikKK0RFRklORV9CSVRPUChjbGVhcl9iaXRzX3VubG9jaywgYW5kYywgUFBDX1JFTEVBU0VfQkFSUklFUiwgIiIpCiBERUZJTkVfQklUT1AoY2hhbmdlX2JpdHMsIHhvciwgIiIsICIiKQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQpAQCAtMTAzLDMxICsxMDMsMzUgQEAKIAogLyogTGlrZSBERUZJTkVfQklUT1AoKSwgd2l0aCBjaGFuZ2VzIHRvIHRoZSBhcmd1bWVudHMgdG8gJ29wJyBhbmQgdGhlIG91dHB1dAogICogb3BlcmFuZHMuICovCi0jZGVmaW5lIERFRklORV9URVNUT1AoZm4sIG9wLCBwcmVmaXgsIHBvc3RmaXgpCVwKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZm4oCQlcCi0JCXVuc2lnbmVkIGxvbmcgbWFzaywJCVwKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqX3ApCVwKLXsJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBvbGQsIHQ7CQkJXAotCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKV9wOwlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCVwKLQlwcmVmaXgJCQkJCVwKLSIxOiIJUFBDX0xMQVJYICIlMCwwLCUzXG4iCQkJXAotCXN0cmluZ2lmeV9pbl9jKG9wKSAiJTEsJTAsJTJcbiIJCVwKLQlQUEM0MDVfRVJSNzcoMCwlMykJCQlcCi0JUFBDX1NUTENYICIlMSwwLCUzXG4iCQkJXAotCSJibmUtIDFiXG4iCQkJCVwKLQlwb3N0Zml4CQkJCQlcCi0JOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCQlcCi0JOiAiciIgKG1hc2spLCAiciIgKHApCQkJXAotCTogImNjIiwgIm1lbW9yeSIpOwkJCVwKLQlyZXR1cm4gKG9sZCAmIG1hc2spOwkJCVwKKyNkZWZpbmUgREVGSU5FX1RFU1RPUChmbiwgb3AsIHByZWZpeCwgcG9zdGZpeCwgZWgpCVwKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZm4oCQkJXAorCQl1bnNpZ25lZCBsb25nIG1hc2ssCQkJXAorCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpfcCkJCVwKK3sJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgb2xkLCB0OwkJCQlcCisJdW5zaWduZWQgbG9uZyAqcCA9ICh1bnNpZ25lZCBsb25nICopX3A7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQlcCisJcHJlZml4CQkJCQkJXAorIjE6IglQUENfTExBUlgoJTAsMCwlMyxlaCkgIlxuIgkJCVwKKwlzdHJpbmdpZnlfaW5fYyhvcCkgIiUxLCUwLCUyXG4iCQkJXAorCVBQQzQwNV9FUlI3NygwLCUzKQkJCQlcCisJUFBDX1NUTENYICIlMSwwLCUzXG4iCQkJCVwKKwkiYm5lLSAxYlxuIgkJCQkJXAorCXBvc3RmaXgJCQkJCQlcCisJOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCQkJXAorCTogInIiIChtYXNrKSwgInIiIChwKQkJCQlcCisJOiAiY2MiLCAibWVtb3J5Iik7CQkJCVwKKwlyZXR1cm4gKG9sZCAmIG1hc2spOwkJCQlcCiB9CiAKLURFRklORV9URVNUT1AodGVzdF9hbmRfc2V0X2JpdHMsIG9yLCBMV1NZTkNfT05fU01QLCBJU1lOQ19PTl9TTVApCi1ERUZJTkVfVEVTVE9QKHRlc3RfYW5kX3NldF9iaXRzX2xvY2ssIG9yLCAiIiwgSVNZTkNfT05fU01QKQotREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9jbGVhcl9iaXRzLCBhbmRjLCBMV1NZTkNfT05fU01QLCBJU1lOQ19PTl9TTVApCi1ERUZJTkVfVEVTVE9QKHRlc3RfYW5kX2NoYW5nZV9iaXRzLCB4b3IsIExXU1lOQ19PTl9TTVAsIElTWU5DX09OX1NNUCkKK0RFRklORV9URVNUT1AodGVzdF9hbmRfc2V0X2JpdHMsIG9yLCBQUENfUkVMRUFTRV9CQVJSSUVSLAorCSAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIsIDApCitERUZJTkVfVEVTVE9QKHRlc3RfYW5kX3NldF9iaXRzX2xvY2ssIG9yLCAiIiwKKwkgICAgICBQUENfQUNRVUlSRV9CQVJSSUVSLCAxKQorREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9jbGVhcl9iaXRzLCBhbmRjLCBQUENfUkVMRUFTRV9CQVJSSUVSLAorCSAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIsIDApCitERUZJTkVfVEVTVE9QKHRlc3RfYW5kX2NoYW5nZV9iaXRzLCB4b3IsIFBQQ19SRUxFQVNFX0JBUlJJRVIsCisJICAgICAgUFBDX0FDUVVJUkVfQkFSUklFUiwgMCkKIAogc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwKIAkJCQkgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKQEAgLTE1OCw3ICsxNjIsNyBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2xlYXJfYml0X3VubG9jayhpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oTFdTWU5DX09OX1NNUCAiIiA6OjogIm1lbW9yeSIpOworCV9fYXNtX18gX192b2xhdGlsZV9fKFBQQ19SRUxFQVNFX0JBUlJJRVIgIiIgOjo6ICJtZW1vcnkiKTsKIAlfX2NsZWFyX2JpdChuciwgYWRkcik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggODBmMzE1ZS4uYWJiODMzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTM4MSw5ICszODEsOSBAQAogI2RlZmluZSBDUFVfRlRSU19HRU5FUklDXzMyCShDUFVfRlRSX0NPTU1PTiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOKQogCiAvKiA2NC1iaXQgQ1BVcyAqLwotI2RlZmluZSBDUFVfRlRSU19QT1dFUjMJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCisjZGVmaW5lIENQVV9GVFJTX1BPV0VSMwkoQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfSUFCUiB8IENQVV9GVFJfUFBDX0xFKQotI2RlZmluZSBDUFVfRlRSU19SUzY0CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAorI2RlZmluZSBDUFVfRlRSU19SUzY0CShDUFVfRlRSX1VTRV9UQiB8IFwKIAkgICAgQ1BVX0ZUUl9JQUJSIHwgXAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9DVFJMKQogI2RlZmluZSBDUFVfRlRSU19QT1dFUjQJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAppbmRleCBmYTE5ZjNmLi44YmRjNmE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKQEAgLTczLDEwICs3Myw5IEBACiBzdGF0aWMgaW5saW5lIGNwdXRpbWVfdCBjcHV0aW1lX3RvX3NjYWxlZChjb25zdCBjcHV0aW1lX3QgY3QpCiB7CiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NQVVJSKSAmJgotCSAgICBwZXJfY3B1KGNwdXRpbWVfbGFzdF9kZWx0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkKLQkJcmV0dXJuIGN0ICoKLQkJCXBlcl9jcHUoY3B1dGltZV9zY2FsZWRfbGFzdF9kZWx0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKS8KLQkJCXBlcl9jcHUoY3B1dGltZV9sYXN0X2RlbHRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCSAgICBfX2dldF9jcHVfdmFyKGNwdXRpbWVfbGFzdF9kZWx0YSkpCisJCXJldHVybiBjdCAqIF9fZ2V0X2NwdV92YXIoY3B1dGltZV9zY2FsZWRfbGFzdF9kZWx0YSkgLworCQkJICAgIF9fZ2V0X2NwdV92YXIoY3B1dGltZV9sYXN0X2RlbHRhKTsKIAlyZXR1cm4gY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAxNzgyOGFkLi5jMzc2ZWRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yMzUsMTQgKzIzNSwxMCBAQAogI2lmZGVmIF9fcG93ZXJwYzY0X18KICMgZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkJCQkJCVwKIGRvIHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncyA9IDA7CQkJCVwKIAlpZiAoKGV4KS5lX2lkZW50W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQkJXAotCQluZXdfZmxhZ3MgPSBfVElGXzMyQklUOwkJCQlcCi0JaWYgKChjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzICYgX1RJRl8zMkJJVCkJCVwKLQkgICAgIT0gbmV3X2ZsYWdzKQkJCQkJXAotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX0FCSV9QRU5ESU5HKTsJCVwKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCk7CQkJXAogCWVsc2UJCQkJCQkJXAotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwkJXAorCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfMzJCSVQpOwkJCVwKIAlpZiAocGVyc29uYWxpdHkoY3VycmVudC0+cGVyc29uYWxpdHkpICE9IFBFUl9MSU5VWDMyKQlcCiAJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVggfAkJCVwKIAkJCShjdXJyZW50LT5wZXJzb25hbGl0eSAmICh+UEVSX01BU0spKSk7CVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKaW5kZXggY2JkNGRmYS4uOTZhN2QwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKQEAgLTE2NSw3ICsxNjUsNyBAQAogCS5wdXNoc2VjdGlvbiBzZWN0LCJhIjsJCQkJXAogCS5hbGlnbiAyOwkJCQkJXAogbGFiZWwjIzM6CQkJCQkgICAgICAgCVwKLQkubG9uZyBsYWJlbCMjMWItbGFiZWwjIzNiOwkJCVwKKwlGVFJfRU5UUllfT0ZGU0VUIGxhYmVsIyMxYi1sYWJlbCMjM2I7CQlcCiAJLnBvcHNlY3Rpb247CiAKICNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX0ZFQVRVUkVfRklYVVBTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdXRleC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z1dGV4LmgKaW5kZXggOTY5NmNjMy4uN2M1ODllZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z1dGV4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z1dGV4LmgKQEAgLTExLDcgKzExLDcgQEAKIAogI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKSBcCiAgIF9fYXNtX18gX192b2xhdGlsZSAoIFwKLQlMV1NZTkNfT05fU01QIFwKKwlQUENfUkVMRUFTRV9CQVJSSUVSIFwKICIxOglsd2FyeAklMCwwLCUyXG4iIFwKIAlpbnNuIFwKIAlQUEM0MDVfRVJSNzcoMCwgJTIpIFwKQEAgLTkwLDE0ICs5MCwxNCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgIExXU1lOQ19PTl9TTVAKKyAgICAgICAgUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6ICAgICBsd2FyeCAgICUwLDAsJTIgICAgICAgICAjIGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljXG5cCiAgICAgICAgIGNtcHcgICAgMCwlMCwlM1xuXAogICAgICAgICBibmUtICAgIDNmXG4iCiAgICAgICAgIFBQQzQwNV9FUlI3NygwLCUyKQogIjI6ICAgICBzdHdjeC4gICU0LDAsJTJcblwKICAgICAgICAgYm5lLSAgICAxYlxuIgotICAgICAgICBJU1lOQ19PTl9TTVAKKyAgICAgICAgUFBDX0FDUVVJUkVfQkFSUklFUgogIjM6CS5zZWN0aW9uIC5maXh1cCxcImF4XCJcblwKIDQ6CWxpCSUwLCU1XG5cCiAJYgkzYlxuXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggZmIzYzA1YS4uMzE0N2EyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xICsxLDI5IEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgorI2lmbmRlZiBfQVNNX1BPV0VSUENfSEFSRElSUV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgdGltZXJfaXJxczsKKwl1bnNpZ25lZCBpbnQgcG11X2lycXM7CisJdW5zaWduZWQgaW50IG1jZV9leGNlcHRpb25zOworCXVuc2lnbmVkIGludCBzcHVyaW91c19pcnFzOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworREVDTEFSRV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKKworI2RlZmluZSBfX0FSQ0hfSVJRX1NUQVQKKworI2RlZmluZSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5fX3NvZnRpcnFfcGVuZGluZworCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlwcmludGsoS0VSTl9DUklUICJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOworfQorCitleHRlcm4gdTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpOworI2RlZmluZSBhcmNoX2lycV9zdGF0X2NwdQlhcmNoX2lycV9zdGF0X2NwdQorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaAppbmRleCA4NGI0NTdhLi5jZTU4YzgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaApAQCAtMjQsNyArMjQsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTIJCSMgbG9jYWxfYWRkX3JldHVyblxuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMiwwKSAiCQkJIyBsb2NhbF9hZGRfcmV0dXJuXG5cCiAJYWRkCSUwLCUxLCUwXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAJUFBDX1NUTENYCSIlMCwwLCUyIFxuXApAQCAtNDMsNyArNDMsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTIJCSMgbG9jYWxfc3ViX3JldHVyblxuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMiwwKSAiCQkJIyBsb2NhbF9zdWJfcmV0dXJuXG5cCiAJc3ViZgklMCwlMSwlMFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogCVBQQ19TVExDWAkiJTAsMCwlMiBcblwKQEAgLTYwLDcgKzYwLDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUxCQkjIGxvY2FsX2luY19yZXR1cm5cblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTEsMCkgIgkJCSMgbG9jYWxfaW5jX3JldHVyblxuXAogCWFkZGljCSUwLCUwLDFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKIAlQUENfU1RMQ1gJIiUwLDAsJTEgXG5cCkBAIC04Nyw3ICs4Nyw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMQkJIyBsb2NhbF9kZWNfcmV0dXJuXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUxLDApICIJCQkjIGxvY2FsX2RlY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwtMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQogCVBQQ19TVExDWAkiJTAsMCwlMVxuXApAQCAtMTE3LDcgKzExNyw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfYWRkX3VubGVzc1xuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMSwwKSAiCQkJIyBsb2NhbF9hZGRfdW5sZXNzXG5cCiAJY21wdwkwLCUwLCUzIFxuXAogCWJlcS0JMmYgXG5cCiAJYWRkCSUwLCUyLCUwIFxuIgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMQkJIyBsb2NhbF9kZWNfaWZfcG9zaXRpdmVcblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTEsMCkgIgkJCSMgbG9jYWxfZGVjX2lmX3Bvc2l0aXZlXG5cCiAJY21wd2kJJTAsMVxuXAogCWFkZGkJJTAsJTAsLTFcblwKIAlibHQtCTJmXG4iCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTEyMS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUxMjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmEzMGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUxMjEuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogTVBDNTEyMSBQcm90b3R5cGVzIGFuZCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2lmbmRlZiBfX0FTTV9QT1dFUlBDX01QQzUxMjFfSF9fCisjZGVmaW5lIF9fQVNNX1BPV0VSUENfTVBDNTEyMV9IX18KKworLyogTVBDNTEyeCBSZXNldCBtb2R1bGUgcmVnaXN0ZXJzICovCitzdHJ1Y3QgbXBjNTEyeF9yZXNldF9tb2R1bGUgeworCXUzMglyY3dscjsJLyogUmVzZXQgQ29uZmlndXJhdGlvbiBXb3JkIExvdyBSZWdpc3RlciAqLworCXUzMglyY3docjsJLyogUmVzZXQgQ29uZmlndXJhdGlvbiBXb3JkIEhpZ2ggUmVnaXN0ZXIgKi8KKwl1MzIJcmVzZXJ2ZWQxOworCXUzMglyZXNlcnZlZDI7CisJdTMyCXJzcjsJLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovCisJdTMyCXJtcjsJLyogUmVzZXQgTW9kZSBSZWdpc3RlciAqLworCXUzMglycHI7CS8qIFJlc2V0IFByb3RlY3Rpb24gUmVnaXN0ZXIgKi8KKwl1MzIJcmNyOwkvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCXJjZXI7CS8qIFJlc2V0IENvbnRyb2wgRW5hYmxlIFJlZ2lzdGVyICovCit9OworCisjZW5kaWYgLyogX19BU01fUE9XRVJQQ19NUEM1MTIxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHhfcHNjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaAppbmRleCBmYjg0MTIwLi40MjU2MWY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaApAQCAtMjUsNyArMjUsMTEgQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogLyogTWF4IG51bWJlciBvZiBQU0NzICovCisjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CisjZGVmaW5lIE1QQzUyeHhfUFNDX01BWE5VTSAgICAgMTIKKyNlbHNlCiAjZGVmaW5lIE1QQzUyeHhfUFNDX01BWE5VTQk2CisjZW5kaWYKIAogLyogUHJvZ3JhbW1hYmxlIFNlcmlhbCBDb250cm9sbGVyIChQU0MpIHN0YXR1cyByZWdpc3RlciBiaXRzICovCiAjZGVmaW5lIE1QQzUyeHhfUFNDX1NSX1VORVhfUlgJMHgwMDAxCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaAppbmRleCBhMDAyNjgyLi42MTkxM2Q5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKQEAgLTI4OSw3ICsyODksNyBAQAogI2lmZGVmIENPTkZJR19NUElDX1UzX0hUX0lSUVMKIAkvKiBUaGUgZml4dXAgdGFibGUgKi8KIAlzdHJ1Y3QgbXBpY19pcnFfZml4dXAJKmZpeHVwczsKLQlzcGlubG9ja190CQlmaXh1cF9sb2NrOworCXJhd19zcGlubG9ja190CWZpeHVwX2xvY2s7CiAjZW5kaWYKIAogCS8qIFJlZ2lzdGVyIGFjY2VzcyBtZXRob2QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tdXRleC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL211dGV4LmgKaW5kZXggZGFiYzAxYy4uNTM5OWY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL211dGV4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL211dGV4LmgKQEAgLTE1LDcgKzE1LDcgQEAKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUzLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIKIAk6ICI9JnIiICh0KQpAQCAtMzUsNyArMzUsNyBAQAogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtNDgsNyArNDgsNyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUxCQkjIG11dGV4IHVubG9ja1xuXAogCWFkZGljCSUwLCUwLDFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmFtLmgKaW5kZXggMDk0ZjYzZC4uOTY1ZDQ1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmFtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmFtLmgKQEAgLTEsMjIgKzEgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX1BBUkFNX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX1BBUkFNX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBpbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jZGVmaW5lIFVTRVJfSFoJCTEwMAkJLyogZm9yIHVzZXIgaW50ZXJmYWNlcyBpbiAidGlja3MiICovCi0jZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBmcmVxdWVuY3kgYXQgd2hpY2ggdGltZXMoKSBjb3VudHMgKi8KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNpZm5kZWYgSFoKLSNkZWZpbmUgSFogMTAwCi0jZW5kaWYKLQotI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKLQotI2lmbmRlZiBOT0dST1VQCi0jZGVmaW5lIE5PR1JPVVAJCSgtMSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KLQotI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19QQVJBTV9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaAppbmRleCA4NzdjMzVhLi4wMGVlZGM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1hY19mZWF0dXJlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oCkBAIC0zNzgsNyArMzc4LDcgQEAKICAqIFRob3NlIGFyZSBleHBvcnRlZCBieSBwbWFjIGZlYXR1cmUgZm9yIGludGVybmFsIHVzZSBieSBhcmNoIGNvZGUKICAqIG9ubHkgbGlrZSB0aGUgcGxhdGZvcm0gZnVuY3Rpb24gY2FsbGJhY2tzLCBkbyBub3QgdXNlIGRpcmVjdGx5IGluIGRyaXZlcnMKICAqLwotZXh0ZXJuIHNwaW5sb2NrX3QgZmVhdHVyZV9sb2NrOworZXh0ZXJuIHJhd19zcGlubG9ja190IGZlYXR1cmVfbG9jazsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKnVuaW5vcnRoX25vZGU7CiBleHRlcm4gdTMyIF9faW9tZW0gKnVuaW5vcnRoX2Jhc2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCmluZGV4IGVmOWFhODQuLmFlYTcxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApAQCAtMjIsOCArMjIsMTAgQEAKICNkZWZpbmUgUFBDX0lOU1RfRENCWkwJCQkweDdjMjAwN2VjCiAjZGVmaW5lIFBQQ19JTlNUX0lTRUwJCQkweDdjMDAwMDFlCiAjZGVmaW5lIFBQQ19JTlNUX0lTRUxfTUFTSwkJMHhmYzAwMDAzZQorI2RlZmluZSBQUENfSU5TVF9MREFSWAkJCTB4N2MwMDAwYTgKICNkZWZpbmUgUFBDX0lOU1RfTFNXSQkJCTB4N2MwMDA0YWEKICNkZWZpbmUgUFBDX0lOU1RfTFNXWAkJCTB4N2MwMDA0MmEKKyNkZWZpbmUgUFBDX0lOU1RfTFdBUlgJCQkweDdjMDAwMDI5CiAjZGVmaW5lIFBQQ19JTlNUX0xXU1lOQwkJCTB4N2MyMDA0YWMKICNkZWZpbmUgUFBDX0lOU1RfTFhWRDJYCQkJMHg3YzAwMDY5OAogI2RlZmluZSBQUENfSU5TVF9NQ1JYUgkJCTB4N2MwMDA0MDAKQEAgLTU1LDE1ICs1NywzMSBAQAogI2RlZmluZSBfX1BQQ19SQShhKQkoKChhKSAmIDB4MWYpIDw8IDE2KQogI2RlZmluZSBfX1BQQ19SQihiKQkoKChiKSAmIDB4MWYpIDw8IDExKQogI2RlZmluZSBfX1BQQ19SUyhzKQkoKChzKSAmIDB4MWYpIDw8IDIxKQorI2RlZmluZSBfX1BQQ19SVChzKQlfX1BQQ19SUyhzKQogI2RlZmluZSBfX1BQQ19YUyhzKQkoKCgocykgJiAweDFmKSA8PCAyMSkgfCAoKChzKSAmIDB4MjApID4+IDUpKQogI2RlZmluZSBfX1BQQ19UX1RMQih0KQkoKCh0KSAmIDB4MykgPDwgMjEpCiAjZGVmaW5lIF9fUFBDX1dDKHcpCSgoKHcpICYgMHgzKSA8PCAyMSkKKy8qCisgKiBPbmx5IHVzZSB0aGUgbGFyeCBoaW50IGJpdCBvbiA2NGJpdCBDUFVzLiBPbmNlIHdlIHZlcmlmeSBpdCBkb2Vzbid0IGhhdmUKKyAqIGFueSBzaWRlIGVmZmVjdHMgb24gYWxsIDMyYml0IHByb2Nlc3NvcnMsIHdlIGNhbiBkbyB0aGlzIGFsbCB0aGUgdGltZS4KKyAqLworI2lmZGVmIENPTkZJR19QUEM2NAorI2RlZmluZSBfX1BQQ19FSChlaCkJKCgoZWgpICYgMHgxKSA8PCAwKQorI2Vsc2UKKyNkZWZpbmUgX19QUENfRUgoZWgpCTAKKyNlbmRpZgogCiAvKiBEZWFsIHdpdGggaW5zdHJ1Y3Rpb25zIHRoYXQgb2xkZXIgYXNzZW1ibGVycyBhcmVuJ3QgYXdhcmUgb2YgKi8KICNkZWZpbmUJUFBDX0RDQkFMKGEsIGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9EQ0JBTCB8IFwKIAkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKICNkZWZpbmUJUFBDX0RDQlpMKGEsIGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9EQ0JaTCB8IFwKIAkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX0xEQVJYKHQsIGEsIGIsIGVoKQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9MREFSWCB8IFwKKwkJCQkJX19QUENfUlQodCkgfCBfX1BQQ19SQShhKSB8IFwKKwkJCQkJX19QUENfUkIoYikgfCBfX1BQQ19FSChlaCkpCisjZGVmaW5lIFBQQ19MV0FSWCh0LCBhLCBiLCBlaCkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfTFdBUlggfCBcCisJCQkJCV9fUFBDX1JUKHQpIHwgX19QUENfUkEoYSkgfCBcCisJCQkJCV9fUFBDX1JCKGIpIHwgX19QUENfRUgoZWgpKQogI2RlZmluZSBQUENfTVNHU05EKGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9NU0dTTkQgfCBcCiAJCQkJCV9fUFBDX1JCKGIpKQogI2RlZmluZSBQUENfUkZDSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZDSSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLXBjaS5oCmluZGV4IDI4MjhmOWQuLjQyZmRmZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1wY2kuaApAQCAtMTM3LDYgKzEzNywxMSBAQAogdm9pZCBlZWhfc3lzZnNfYWRkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB2b2lkIGVlaF9zeXNmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICplZWhfcGNpX25hbWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpIAoreyAKKwlyZXR1cm4gcGRldiA/IHBjaV9uYW1lKHBkZXYpIDogIjxudWxsPiI7Cit9IAorCiAjZW5kaWYgLyogQ09ORklHX0VFSCAqLwogCiAjZWxzZSAvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggOWVlZDI5ZS4uMjIxYmE2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTYxLDkgKzE2MSw0MSBAQAogI2lmZGVmIENPTkZJR19QUEMzMgogCXZvaWQJCSpwZ2RpcjsJCS8qIHJvb3Qgb2YgcGFnZS10YWJsZSB0cmVlICovCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQgKENPTkZJR19CT09LRSkKLQl1bnNpZ25lZCBsb25nCWRiY3IwOwkJLyogZGVidWcgY29udHJvbCByZWdpc3RlciB2YWx1ZXMgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGhlbHAgdG8gbWFuYWdlIHRoZSB1c2Ugb2YgRGVidWcgQ29udHJvbCBSZWdpc3RlcnMKKwkgKiBvbSB0aGUgQm9va0UgcGxhdGZvcm1zLgorCSAqLworCXVuc2lnbmVkIGxvbmcJZGJjcjA7CiAJdW5zaWduZWQgbG9uZwlkYmNyMTsKKyNpZmRlZiBDT05GSUdfQk9PS0UKKwl1bnNpZ25lZCBsb25nCWRiY3IyOworI2VuZGlmCisJLyoKKwkgKiBUaGUgc3RvcmVkIHZhbHVlIG9mIHRoZSBEQlNSIHJlZ2lzdGVyIHdpbGwgYmUgdGhlIHZhbHVlIGF0IHRoZQorCSAqIGxhc3QgZGVidWcgaW50ZXJydXB0LiBUaGlzIHJlZ2lzdGVyIGNhbiBvbmx5IGJlIHJlYWQgZnJvbSB0aGUKKwkgKiB1c2VyICh3aWxsIG5ldmVyIGJlIHdyaXR0ZW4gdG8pIGFuZCBoYXMgdmFsdWUgd2hpbGUgaGVscGluZyB0bworCSAqIGRlc2NyaWJlIHRoZSByZWFzb24gZm9yIHRoZSBsYXN0IGRlYnVnIHRyYXAuICBUb3JlegorCSAqLworCXVuc2lnbmVkIGxvbmcJZGJzcjsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgd2lsbCBjb250YWluIGFkZHJlc3NlcyB1c2VkIGJ5IGRlYnVnIGFwcGxpY2F0aW9ucworCSAqIHRvIGhlbHAgdHJhY2UgYW5kIHRyYXAgb24gcGFydGljdWxhciBhZGRyZXNzIGxvY2F0aW9ucy4KKwkgKiBUaGUgYml0cyBpbiB0aGUgRGVidWcgQ29udHJvbCBSZWdpc3RlcnMgYWJvdmUgaGVscCBkZWZpbmUgd2hpY2gKKwkgKiBvZiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyB3aWxsIGNvbnRhaW4gdmFsaWQgZGF0YSBhbmQvb3IgYWRkcmVzc2VzLgorCSAqLworCXVuc2lnbmVkIGxvbmcJaWFjMTsKKwl1bnNpZ25lZCBsb25nCWlhYzI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwl1bnNpZ25lZCBsb25nCWlhYzM7CisJdW5zaWduZWQgbG9uZwlpYWM0OworI2VuZGlmCisJdW5zaWduZWQgbG9uZwlkYWMxOworCXVuc2lnbmVkIGxvbmcJZGFjMjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCXVuc2lnbmVkIGxvbmcJZHZjMTsKKwl1bnNpZ25lZCBsb25nCWR2YzI7CisjZW5kaWYKICNlbmRpZgogCS8qIEZQIGFuZCBWU1ggMC0zMSByZWdpc3RlciBzZXQgKi8KIAlkb3VibGUJCWZwclszMl1bVFNfRlBSV0lEVEhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9tLmgKaW5kZXggMmFiOWNiZC4uZGRkNDA4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvbS5oCkBAIC0yMywyMSArMjMsOCBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLSNkZWZpbmUgT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVAkxCi0jZGVmaW5lIE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQJMQotCi0jZGVmaW5lIG9mX2NvbXBhdF9jbXAoczEsIHMyLCBsKQlzdHJjYXNlY21wKChzMSksIChzMikpCi0jZGVmaW5lIG9mX3Byb3BfY21wKHMxLCBzMikJCXN0cmNtcCgoczEpLCAoczIpKQotI2RlZmluZSBvZl9ub2RlX2NtcChzMSwgczIpCQlzdHJjYXNlY21wKChzMSksIChzMikpCi0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQogI2RlZmluZSBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKIAotLyogRm9yIHVwZGF0aW5nIHRoZSBkZXZpY2UgdHJlZSBhdCBydW50aW1lICovCi1leHRlcm4gdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci1leHRlcm4gdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci0KICNpZmRlZiBDT05GSUdfUFBDMzIKIC8qCiAgKiBQQ0kgPC0+IE9GIG1hdGNoaW5nIGZ1bmN0aW9ucwpAQCAtNTIsMTEgKzM5LDYgQEAKIGV4dGVybiB2b2lkIHBjaV9jcmVhdGVfT0ZfYnVzX21hcCh2b2lkKTsKICNlbmRpZgogCi1leHRlcm4gc3RydWN0IHJlc291cmNlICpyZXF1ZXN0X09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwKLQkJCQlpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIG5hbWVfcG9zdGZpeCk7Ci1leHRlcm4gaW50IHJlbGVhc2VfT0ZfcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlKiBub2RlLCBpbnQgaW5kZXgpOwotCi0KIC8qCiAgKiBPRiBhZGRyZXNzIHJldHJlaXZhbCAmIHRyYW5zbGF0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBjYmQ3NTllLi5iNDUxMDgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0yNCw2ICsyNCwxMiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIHN0cnVjdCBwdF9yZWdzIHsKQEAgLTI5NCw0ICszMDAsNzUgQEAKIAogI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMHgxMDAJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLwogCisjZGVmaW5lIFBQQ19QVFJBQ0VfR0VUSFdEQkdJTkZPCTB4ODkKKyNkZWZpbmUgUFBDX1BUUkFDRV9TRVRIV0RFQlVHCTB4ODgKKyNkZWZpbmUgUFBDX1BUUkFDRV9ERUxIV0RFQlVHCTB4ODcKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHBwY19kZWJ1Z19pbmZvIHsKKwl1aW50MzJfdCB2ZXJzaW9uOwkJLyogT25seSB2ZXJzaW9uIDEgZXhpc3RzIHRvIGRhdGUgKi8KKwl1aW50MzJfdCBudW1faW5zdHJ1Y3Rpb25fYnBzOworCXVpbnQzMl90IG51bV9kYXRhX2JwczsKKwl1aW50MzJfdCBudW1fY29uZGl0aW9uX3JlZ3M7CisJdWludDMyX3QgZGF0YV9icF9hbGlnbm1lbnQ7CisJdWludDMyX3Qgc2l6ZW9mX2NvbmRpdGlvbjsJLyogc2l6ZSBvZiB0aGUgRFZDIHJlZ2lzdGVyICovCisJdWludDY0X3QgZmVhdHVyZXM7Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBmZWF0dXJlcyB3aWxsIGhhdmUgYml0cyBpbmRpY2F0aW9uIHdoZXRoZXIgdGhlcmUgaXMgc3VwcG9ydCBmb3I6CisgKi8KKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9SQU5HRQkJMHgwMDAwMDAwMDAwMDAwMDAxCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfTUFTSwkJMHgwMDAwMDAwMDAwMDAwMDAyCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfUkFOR0UJCTB4MDAwMDAwMDAwMDAwMDAwNAorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX01BU0sJCTB4MDAwMDAwMDAwMDAwMDAwOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgeworCXVpbnQzMl90IHZlcnNpb247CQkvKiBjdXJyZW50bHksIHZlcnNpb24gbXVzdCBiZSAxICovCisJdWludDMyX3QgdHJpZ2dlcl90eXBlOwkJLyogb25seSBzb21lIGNvbWJpbmF0aW9ucyBhbGxvd2VkICovCisJdWludDMyX3QgYWRkcl9tb2RlOwkJLyogYWRkcmVzcyBtYXRjaCBtb2RlICovCisJdWludDMyX3QgY29uZGl0aW9uX21vZGU7CS8qIGJyZWFrL3dhdGNocG9pbnQgY29uZGl0aW9uIGZsYWdzICovCisJdWludDY0X3QgYWRkcjsJCQkvKiBicmVhay93YXRjaHBvaW50IGFkZHJlc3MgKi8KKwl1aW50NjRfdCBhZGRyMjsJCQkvKiByYW5nZSBlbmQgb3IgbWFzayAqLworCXVpbnQ2NF90IGNvbmRpdGlvbl92YWx1ZTsJLyogY29udGVudHMgb2YgdGhlIERWQyByZWdpc3RlciAqLworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVHJpZ2dlciBUeXBlCisgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFCTB4MDAwMDAwMDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFECTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURQkweDAwMDAwMDA0CisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcJXAorCShQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQgfCBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCisvKgorICogQWRkcmVzcyBNb2RlCisgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVAkJMHgwMDAwMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRQkweDAwMDAwMDAxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFCTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLCQkweDAwMDAwMDAzCisKKy8qCisgKiBDb25kaXRpb24gTW9kZQorICovCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFCTB4MDAwMDAwMDMKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUJMHgwMDAwMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0VYQUNUCVBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX09SCTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0FORF9PUgkweDAwMDAwMDAzCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9BTEwJMHgwMGZmMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfU0hJRlQJMTYKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFKG4pCVwKKwkoMTw8KChuKStQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfU0hJRlQpKQorCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKaW5kZXggM2JmNzgzNS4uODgwOGQzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaApAQCAtMjQ4LDYgKzI0OCw4IEBACiAjZGVmaW5lIERCU1JfUkVUCTB4MDAwMDgwMDAJLyogUmV0dXJuIERlYnVnIEV2ZW50ICovCiAjZGVmaW5lIERCU1JfQ0lSUFQJMHgwMDAwMDA0MAkvKiBDcml0aWNhbCBJbnRlcnJ1cHQgVGFrZW4gRXZlbnQgKi8KICNkZWZpbmUgREJTUl9DUkVUCTB4MDAwMDAwMjAJLyogQ3JpdGljYWwgUmV0dXJuIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCU1JfSUFDMTJBVFMJMHgwMDAwMDAwMgkvKiBJbnN0ciBBZGRyZXNzIENvbXBhcmUgMS8yIFRvZ2dsZSAqLworI2RlZmluZSBEQlNSX0lBQzM0QVRTCTB4MDAwMDAwMDEJLyogSW5zdHIgQWRkcmVzcyBDb21wYXJlIDMvNCBUb2dnbGUgKi8KICNlbmRpZgogI2lmZGVmIENPTkZJR180MHgKICNkZWZpbmUgREJTUl9JQwkJMHg4MDAwMDAwMAkvKiBJbnN0cnVjdGlvbiBDb21wbGV0aW9uICovCkBAIC0zMTMsNiArMzE1LDM4IEBACiAjZGVmaW5lIERCQ1IwX0lBMTJUCTB4MDAwMDgwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgVG9nZ2xlICovCiAjZGVmaW5lIERCQ1IwX0lBMzRUCTB4MDAwMDQwMDAJLyogSW5zdHIgQWRkciAzLTQgcmFuZ2UgVG9nZ2xlICovCiAjZGVmaW5lIERCQ1IwX0ZUCTB4MDAwMDAwMDEJLyogRnJlZXplIFRpbWVycyBvbiBkZWJ1ZyBldmVudCAqLworCisjZGVmaW5lIGRiY3JfaWFjX3JhbmdlKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMCkKKyNkZWZpbmUgREJDUl9JQUMxMkkJREJDUjBfSUExMgkJCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyWAkoREJDUjBfSUExMiB8IERCQ1IwX0lBMTJYKQkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMxMk1PREUJKERCQ1IwX0lBMTIgfCBEQkNSMF9JQTEyWCkJLyogSUFDIDEtMiBNb2RlIEJpdHMgKi8KKyNkZWZpbmUgREJDUl9JQUMzNEkJREJDUjBfSUEzNAkJCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzM0WAkoREJDUjBfSUEzNCB8IERCQ1IwX0lBMzRYKQkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNE1PREUJKERCQ1IwX0lBMzQgfCBEQkNSMF9JQTM0WCkJLyogSUFDIDMtNCBNb2RlIEJpdHMgKi8KKworLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIERCQ1IxLiAqLworI2RlZmluZSBEQkNSMV9EQUMxUgkweDgwMDAwMDAwCS8qIERBQzEgUmVhZCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSMV9EQUMyUgkweDQwMDAwMDAwCS8qIERBQzIgUmVhZCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSMV9EQUMxVwkweDIwMDAwMDAwCS8qIERBQzEgV3JpdGUgRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUjFfREFDMlcJMHgxMDAwMDAwMAkvKiBEQUMyIFdyaXRlIERlYnVnIEV2ZW50ICovCisKKyNkZWZpbmUgZGJjcl9kYWModGFzaykJKCh0YXNrKS0+dGhyZWFkLmRiY3IxKQorI2RlZmluZSBEQkNSX0RBQzFSCURCQ1IxX0RBQzFSCisjZGVmaW5lIERCQ1JfREFDMVcJREJDUjFfREFDMVcKKyNkZWZpbmUgREJDUl9EQUMyUglEQkNSMV9EQUMyUgorI2RlZmluZSBEQkNSX0RBQzJXCURCQ1IxX0RBQzJXCisKKy8qCisgKiBBcmUgdGhlcmUgYW55IGFjdGl2ZSBEZWJ1ZyBFdmVudHMgcmVwcmVzZW50ZWQgaW4gdGhlCisgKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVycz8KKyAqLworI2RlZmluZSBEQkNSMF9BQ1RJVkVfRVZFTlRTCShEQkNSMF9JQ01QIHwgREJDUjBfSUFDMSB8IERCQ1IwX0lBQzIgfCBcCisJCQkJIERCQ1IwX0lBQzMgfCBEQkNSMF9JQUM0KQorI2RlZmluZSBEQkNSMV9BQ1RJVkVfRVZFTlRTCShEQkNSMV9EQUMxUiB8IERCQ1IxX0RBQzJSIHwgXAorCQkJCSBEQkNSMV9EQUMxVyB8IERCQ1IxX0RBQzJXKQorI2RlZmluZSBEQkNSX0FDVElWRV9FVkVOVFMoZGJjcjAsIGRiY3IxKSAgKCgoZGJjcjApICYgREJDUjBfQUNUSVZFX0VWRU5UUykgfHwgXAorCQkJCQkgICAoKGRiY3IxKSAmIERCQ1IxX0FDVElWRV9FVkVOVFMpKQorCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKICNkZWZpbmUgREJDUjBfRURNCTB4ODAwMDAwMDAJLyogRXh0ZXJuYWwgRGVidWcgTW9kZSAqLwogI2RlZmluZSBEQkNSMF9JRE0JMHg0MDAwMDAwMAkvKiBJbnRlcm5hbCBEZWJ1ZyBNb2RlICovCkBAIC0zNDIsMTkgKzM3Niw3OSBAQAogI2RlZmluZSBEQkNSMF9DUkVUCTB4MDAwMDAwMjAJLyogQ3JpdGljYWwgUmV0dXJuIERlYnVnIEV2ZW50ICovCiAjZGVmaW5lIERCQ1IwX0ZUCTB4MDAwMDAwMDEJLyogRnJlZXplIFRpbWVycyBvbiBkZWJ1ZyBldmVudCAqLwogCisjZGVmaW5lIGRiY3JfZGFjKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMCkKKyNkZWZpbmUgREJDUl9EQUMxUglEQkNSMF9EQUMxUgorI2RlZmluZSBEQkNSX0RBQzFXCURCQ1IwX0RBQzFXCisjZGVmaW5lIERCQ1JfREFDMlIJREJDUjBfREFDMlIKKyNkZWZpbmUgREJDUl9EQUMyVwlEQkNSMF9EQUMyVworCiAvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgREJDUjEuICovCisjZGVmaW5lIERCQ1IxX0lBQzFVUwkweEMwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMV9JQUMxRVIJMHgzMDAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAxIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8wMQkweDEwMDAwMDAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8xMAkweDIwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8xMQkweDMwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgRWZmL1JlYWwgTVNSW0lTXT0xICovCisjZGVmaW5lIERCQ1IxX0lBQzJVUwkweDBDMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMV9JQUMyRVIJMHgwMzAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAyIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8wMQkweDAxMDAwMDAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8xMAkweDAyMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8xMQkweDAzMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgRWZmL1JlYWwgTVNSW0lTXT0xICovCiAjZGVmaW5lIERCQ1IxX0lBQzEyTQkweDAwODAwMDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIGVuYWJsZSAqLwogI2RlZmluZSBEQkNSMV9JQUMxMk1YCTB4MDBDMDAwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgZVhjbHVzaXZlICovCiAjZGVmaW5lIERCQ1IxX0lBQzEyQVQJMHgwMDAxMDAwMAkvKiBJbnN0ciBBZGRyIDEtMiByYW5nZSBUb2dnbGUgKi8KKyNkZWZpbmUgREJDUjFfSUFDM1VTCTB4MDAwMEMwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IxX0lBQzNFUgkweDAwMDAzMDAwCS8qIEluc3RyIEFkZHIgQ21wIDMgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzAxCTB4MDAwMDEwMDAJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzEwCTB4MDAwMDIwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzExCTB4MDAwMDMwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBFZmYvUmVhbCBNU1JbSVNdPTEgKi8KKyNkZWZpbmUgREJDUjFfSUFDNFVTCTB4MDAwMDBDMDAJLyogSW5zdHIgQWRkciBDbXAgNCBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IxX0lBQzRFUgkweDAwMDAwMzAwCS8qIEluc3RyIEFkZHIgQ21wIDQgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzAxCTB4MDAwMDAxMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzEwCTB4MDAwMDAyMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzExCTB4MDAwMDAzMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTEgKi8KICNkZWZpbmUgREJDUjFfSUFDMzRNCTB4MDAwMDAwODAJLyogSW5zdHIgQWRkciAzLTQgcmFuZ2UgZW5hYmxlICovCiAjZGVmaW5lIERCQ1IxX0lBQzM0TVgJMHgwMDAwMDBDMAkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBlWGNsdXNpdmUgKi8KICNkZWZpbmUgREJDUjFfSUFDMzRBVAkweDAwMDAwMDAxCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIFRvZ2dsZSAqLwogCisjZGVmaW5lIGRiY3JfaWFjX3JhbmdlKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMSkKKyNkZWZpbmUgREJDUl9JQUMxMkkJREJDUjFfSUFDMTJNCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyWAlEQkNSMV9JQUMxMk1YCS8qIFJhbmdlIEV4Y2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyTU9ERQlEQkNSMV9JQUMxMk1YCS8qIElBQyAxLTIgTW9kZSBCaXRzICovCisjZGVmaW5lIERCQ1JfSUFDMzRJCURCQ1IxX0lBQzM0TQkvKiBSYW5nZSBJbmNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNFgJREJDUjFfSUFDMzRNWAkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNE1PREUJREJDUjFfSUFDMzRNWAkvKiBJQUMgMy00IE1vZGUgQml0cyAqLworCiAvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgREJDUjIuICovCisjZGVmaW5lIERCQ1IyX0RBQzFVUwkweEMwMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMSBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IyX0RBQzFFUgkweDMwMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMSBFZmYvUmVhbCAqLworI2RlZmluZSBEQkNSMl9EQUMyVVMJMHgwMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDIgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMl9EQUMyRVIJMHgwMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDIgRWZmL1JlYWwgKi8KICNkZWZpbmUgREJDUjJfREFDMTJNCTB4MDA4MDAwMDAJLyogREFDIDEtMiByYW5nZSBlbmFibGUgKi8KKyNkZWZpbmUgREJDUjJfREFDMTJNTQkweDAwNDAwMDAwCS8qIERBQyAxLTIgTWFzayBtb2RlKi8KICNkZWZpbmUgREJDUjJfREFDMTJNWAkweDAwQzAwMDAwCS8qIERBQyAxLTIgcmFuZ2UgZVhjbHVzaXZlICovCisjZGVmaW5lIERCQ1IyX0RBQzEyTU9ERQkweDAwQzAwMDAwCS8qIERBQyAxLTIgTW9kZSBCaXRzICovCiAjZGVmaW5lIERCQ1IyX0RBQzEyQQkweDAwMjAwMDAwCS8qIERBQyAxLTIgQXN5bmNocm9ub3VzICovCi0jZW5kaWYKKyNkZWZpbmUgREJDUjJfRFZDMU0JMHgwMDBDMDAwMAkvKiBEYXRhIFZhbHVlIENvbXAgMSBNb2RlICovCisjZGVmaW5lIERCQ1IyX0RWQzFNX1NISUZUCTE4CS8qICMgb2YgYml0cyB0byBzaGlmdCBEQkNSMl9EVkMxTSAqLworI2RlZmluZSBEQkNSMl9EVkMyTQkweDAwMDMwMDAwCS8qIERhdGEgVmFsdWUgQ29tcCAyIE1vZGUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMk1fU0hJRlQJMTYJLyogIyBvZiBiaXRzIHRvIHNoaWZ0IERCQ1IyX0RWQzJNICovCisjZGVmaW5lIERCQ1IyX0RWQzFCRQkweDAwMDAwRjAwCS8qIERhdGEgVmFsdWUgQ29tcCAxIEJ5dGUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMUJFX1NISUZUCTgJLyogIyBvZiBiaXRzIHRvIHNoaWZ0IERCQ1IyX0RWQzFCRSAqLworI2RlZmluZSBEQkNSMl9EVkMyQkUJMHgwMDAwMDAwRgkvKiBEYXRhIFZhbHVlIENvbXAgMiBCeXRlICovCisjZGVmaW5lIERCQ1IyX0RWQzJCRV9TSElGVAkwCS8qICMgb2YgYml0cyB0byBzaGlmdCBEQkNSMl9EVkMyQkUgKi8KKworLyoKKyAqIEFyZSB0aGVyZSBhbnkgYWN0aXZlIERlYnVnIEV2ZW50cyByZXByZXNlbnRlZCBpbiB0aGUKKyAqIERlYnVnIENvbnRyb2wgUmVnaXN0ZXJzPworICovCisjZGVmaW5lIERCQ1IwX0FDVElWRV9FVkVOVFMgIChEQkNSMF9JQ01QIHwgREJDUjBfSUFDMSB8IERCQ1IwX0lBQzIgfCBcCisJCQkgICAgICBEQkNSMF9JQUMzIHwgREJDUjBfSUFDNCB8IERCQ1IwX0RBQzFSIHwgXAorCQkJICAgICAgREJDUjBfREFDMVcgIHwgREJDUjBfREFDMlIgfCBEQkNSMF9EQUMyVykKKyNkZWZpbmUgREJDUjFfQUNUSVZFX0VWRU5UUwkwCisKKyNkZWZpbmUgREJDUl9BQ1RJVkVfRVZFTlRTKGRiY3IwLCBkYmNyMSkgICgoKGRiY3IwKSAmIERCQ1IwX0FDVElWRV9FVkVOVFMpIHx8IFwKKwkJCQkJICAgKChkYmNyMSkgJiBEQkNSMV9BQ1RJVkVfRVZFTlRTKSkKKyNlbmRpZiAvKiAjZWxpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgKi8KIAogLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRDUi4gKi8KICNkZWZpbmUgVENSX1dQKHgpCSgoKHgpJjB4Myk8PDMwKQkvKiBXRFQgUGVyaW9kICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDc2NDA5NGMuLmY5NjExYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKICNkZWZpbmUgYXJjaF9zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+c2xvY2sgIT0gMCkKIApAQCAtNjAsMTMgKzYxLDE0IEBACiAKIAl0b2tlbiA9IExPQ0tfVE9LRU47CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToJbHdhcngJCSUwLDAsJTJcblwKKyIxOgkiIFBQQ19MV0FSWCglMCwwLCUyLDEpICJcblwKIAljbXB3aQkJMCwlMCwwXG5cCiAJYm5lLQkJMmZcblwKIAlzdHdjeC4JCSUxLDAsJTJcblwKLQlibmUtCQkxYlxuXAotCWlzeW5jXG5cCi0yOiIJOiAiPSZyIiAodG1wKQorCWJuZS0JCTFiXG4iCisJUFBDX0FDUVVJUkVfQkFSUklFUgorIjI6IgorCTogIj0mciIgKHRtcCkKIAk6ICJyIiAodG9rZW4pLCAiciIgKCZsb2NrLT5zbG9jaykKIAk6ICJjcjAiLCAibWVtb3J5Iik7CiAKQEAgLTE0NCw3ICsxNDYsNyBAQAogewogCVNZTkNfSU87CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgYXJjaF9zcGluX3VubG9ja1xuXHQiCi0JCQkJTFdTWU5DX09OX1NNUDogOiA6Im1lbW9yeSIpOworCQkJCVBQQ19SRUxFQVNFX0JBUlJJRVI6IDogOiJtZW1vcnkiKTsKIAlsb2NrLT5zbG9jayA9IDA7CiB9CiAKQEAgLTE4NiwxNSArMTg4LDE1IEBACiAJbG9uZyB0bXA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOglsd2FyeAkJJTAsMCwlMVxuIgorIjE6CSIgUFBDX0xXQVJYKCUwLDAsJTEsMSkgIlxuIgogCV9fRE9fU0lHTl9FWFRFTkQKICIJYWRkaWMuCQklMCwlMCwxXG5cCiAJYmxlLQkJMmZcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCQklMCwwLCUxXG5cCi0JYm5lLQkJMWJcblwKLQlpc3luY1xuXAotMjoiCTogIj0mciIgKHRtcCkKKwlibmUtCQkxYlxuIgorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKKyIyOiIJOiAiPSZyIiAodG1wKQogCTogInIiICgmcnctPmxvY2spCiAJOiAiY3IwIiwgInhlciIsICJtZW1vcnkiKTsKIApAQCAtMjExLDE0ICsyMTMsMTQgQEAKIAogCXRva2VuID0gV1JMT0NLX1RPS0VOOwogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6CWx3YXJ4CQklMCwwLCUyXG5cCisiMToJIiBQUENfTFdBUlgoJTAsMCwlMiwxKSAiXG5cCiAJY21wd2kJCTAsJTAsMFxuXAogCWJuZS0JCTJmXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgkJJTEsMCwlMlxuXAotCWJuZS0JCTFiXG5cCi0JaXN5bmNcblwKLTI6Igk6ICI9JnIiICh0bXApCisJYm5lLQkJMWJcbiIKKwlQUENfQUNRVUlSRV9CQVJSSUVSCisiMjoiCTogIj0mciIgKHRtcCkKIAk6ICJyIiAodG9rZW4pLCAiciIgKCZydy0+bG9jaykKIAk6ICJjcjAiLCAibWVtb3J5Iik7CiAKQEAgLTI2OSw3ICsyNzEsNyBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIiMgcmVhZF91bmxvY2tcblx0IgotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJCSUwLDAsJTFcblwKIAlhZGRpYwkJJTAsJTAsLTFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKQEAgLTI4Myw3ICsyODUsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfdW5sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCIjIHdyaXRlX3VubG9ja1xuXHQiCi0JCQkJTFdTWU5DX09OX1NNUDogOiA6Im1lbW9yeSIpOworCQkJCVBQQ19SRUxFQVNFX0JBUlJJRVI6IDogOiJtZW1vcnkiKTsKIAlydy0+bG9jayA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeW5jaC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKaW5kZXggMjhmNmRkYi4uZDdjYWI0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKQEAgLTM3LDExICszNywxNSBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElTWU5DX09OX1NNUAkiXG5cdGlzeW5jXG4iCi0jZGVmaW5lIExXU1lOQ19PTl9TTVAJc3RyaW5naWZ5X2luX2MoTFdTWU5DKSAiXG4iCisjZGVmaW5lIF9fUFBDX0FDUVVJUkVfQkFSUklFUgkJCQlcCisJU1RBUlRfTFdTWU5DX1NFQ1RJT04oOTcpOwkJCVwKKwlpc3luYzsJCQkJCQlcCisJTUFLRV9MV1NZTkNfU0VDVElPTl9FTlRSWSg5NywgX19sd3N5bmNfZml4dXApOworI2RlZmluZSBQUENfQUNRVUlSRV9CQVJSSUVSCSJcbiIgc3RyaW5naWZ5X2luX2MoX19QUENfQUNRVUlSRV9CQVJSSUVSKQorI2RlZmluZSBQUENfUkVMRUFTRV9CQVJSSUVSCXN0cmluZ2lmeV9pbl9jKExXU1lOQykgIlxuIgogI2Vsc2UKLSNkZWZpbmUgSVNZTkNfT05fU01QCi0jZGVmaW5lIExXU1lOQ19PTl9TTVAKKyNkZWZpbmUgUFBDX0FDUVVJUkVfQkFSUklFUgorI2RlZmluZSBQUENfUkVMRUFTRV9CQVJSSUVSCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBiYjhlMDA2Li5hNjI5N2M2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xMTIsOCArMTEyLDEzIEBACiAjZW5kaWYKIAogZXh0ZXJuIGludCBzZXRfZGFicih1bnNpZ25lZCBsb25nIGRhYnIpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK2V4dGVybiB2b2lkIGRvX3NlbmRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgaW50IHNpZ25hbF9jb2RlLCBpbnQgYnJrcHQpOworI2Vsc2UKIGV4dGVybiB2b2lkIGRvX2RhYnIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSk7CisjZW5kaWYKIGV4dGVybiB2b2lkIHByaW50X2JhY2t0cmFjZSh1bnNpZ25lZCBsb25nICopOwogZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CiBleHRlcm4gdm9pZCBmbHVzaF9pbnN0cnVjdGlvbl9jYWNoZSh2b2lkKTsKQEAgLTIzMiwxMiArMjM3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBwcmV2OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdHdjeC4JJTMsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilwKQogCTogInIiIChwKSwgInIiICh2YWwpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0yNzUsMTIgKzI4MCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgcHJldjsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMiBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3RkY3guCSUzLDAsJTIgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAocHJldiksICIrbSIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXApCiAJOiAiciIgKHApLCAiciIgKHZhbCkKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTM2NiwxNCArMzcxLDE0IEBACiAJdW5zaWduZWQgaW50IHByZXY7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyCQkjIF9fY21weGNoZ191MzJcblwKIAljbXB3CTAsJTAsJTNcblwKIAlibmUtCTJmXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklNCwwLCUyXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJIlxuXAogMjoiCiAJOiAiPSZyIiAocHJldiksICIrbSIgKCpwKQpAQCAtNDEyLDEzICs0MTcsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHByZXY7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUyCQkjIF9fY21weGNoZ191NjRcblwKIAljbXBkCTAsJTAsJTNcblwKIAlibmUtCTJmXG5cCiAJc3RkY3guCSU0LDAsJTJcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKnApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGM4YjMyOTIuLmFhOWQzODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xMTEsNyArMTExLDYgQEAKICNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJMTMJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCiAjZGVmaW5lIFRJRl9GUkVFWkUJCTE0CS8qIEZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAjZGVmaW5lIFRJRl9SVU5MQVRDSAkJMTUJLyogSXMgdGhlIHJ1bmxhdGNoIGVuYWJsZWQ/ICovCi0jZGVmaW5lIFRJRl9BQklfUEVORElORwkJMTYJLyogMzIvNjQgYml0IHN3aXRjaCBuZWVkZWQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCkBAIC0xMjksNyArMTI4LDYgQEAKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogI2RlZmluZSBfVElGX1JVTkxBVENICQkoMTw8VElGX1JVTkxBVENIKQotI2RlZmluZSBfVElGX0FCSV9QRU5ESU5HCSgxPDxUSUZfQUJJX1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UX09SX0EJKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TRUNDT01QKQogCiAjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sJKF9USUZfU0lHUEVORElORyB8IF9USUZfTkVFRF9SRVNDSEVEIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCBiYmY4OTcwLi44ZWFlYzMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtMzgsMjcgKzM4LDMzIEBACiAJCQkJIGNwdW1hc2tfb2Zfbm9kZShwY2lidXNfdG9fbm9kZShidXMpKSkKIAogLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIFBQQzY0IG1hY2hpbmVzICovCi0jZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAotCS5wYXJlbnQJCQk9IE5VTEwsCQkJXAotCS5jaGlsZAkJCT0gTlVMTCwJCQlcCi0JLmdyb3VwcwkJCT0gTlVMTCwJCQlcCi0JLm1pbl9pbnRlcnZhbAkJPSA4LAkJCVwKLQkubWF4X2ludGVydmFsCQk9IDMyLAkJCVwKLQkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJXAotCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCi0JLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCVwKLQkuYnVzeV9pZHgJCT0gMywJCQlcCi0JLmlkbGVfaWR4CQk9IDEsCQkJXAotCS5uZXdpZGxlX2lkeAkJPSAwLAkJCVwKLQkud2FrZV9pZHgJCT0gMCwJCQlcCi0JLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAotCQkJCXwgU0RfQkFMQU5DRV9FWEVDCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRk9SSwlcCi0JCQkJfCBTRF9CQUxBTkNFX05FV0lETEUJXAotCQkJCXwgU0RfU0VSSUFMSVpFLAkJXAotCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKLQkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAotCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXAorI2RlZmluZSBTRF9OT0RFX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCQkJXAorCS5taW5faW50ZXJ2YWwJCT0gOCwJCQkJCVwKKwkubWF4X2ludGVydmFsCQk9IDMyLAkJCQkJXAorCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQkJCVwKKwkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJCQlcCisJLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCQkJXAorCS5idXN5X2lkeAkJPSAzLAkJCQkJXAorCS5pZGxlX2lkeAkJPSAxLAkJCQkJXAorCS5uZXdpZGxlX2lkeAkJPSAwLAkJCQkJXAorCS53YWtlX2lkeAkJPSAwLAkJCQkJXAorCS5mb3JrZXhlY19pZHgJCT0gMCwJCQkJCVwKKwkJCQkJCQkJCVwKKwkuZmxhZ3MJCQk9IDEqU0RfTE9BRF9CQUxBTkNFCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX05FV0lETEUJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfRVhFQwkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAorCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCisJCQkJfCAwKlNEX1dBS0VfQUZGSU5FCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAorCQkJCXwgMCpTRF9QT1dFUlNBVklOR1NfQkFMQU5DRQkJXAorCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCisJCQkJfCAxKlNEX1NFUklBTElaRQkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX1NJQkxJTkcJCQlcCisJCQkJLAkJCQkJXAorCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCQkJXAorCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQkJCVwKIH0KIAogZXh0ZXJuIHZvaWQgX19pbml0IGR1bXBfbnVtYV9jcHVfdG9wb2xvZ3kodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggYmRjYjU1Ny4uMDcxMDlkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwpAQCAtNzkxLDkgKzc5MSw4IEBACiAJCiAgICAgICAgIGxpICAgICAgcjksMQogICAgICAgICBybGRpY3IgIHI5LHI5LE1TUl9TRl9MRywoNjMtTVNSX1NGX0xHKQotCW9yaQlyOSxyOSxNU1JfSVJ8TVNSX0RSfE1TUl9GRTB8TVNSX0ZFMXxNU1JfRlAKKwlvcmkJcjkscjksTVNSX0lSfE1TUl9EUnxNU1JfRkUwfE1TUl9GRTF8TVNSX0ZQfE1TUl9SSQogCWFuZGMJcjYscjAscjkKLQlvcmkJcjYscjYsTVNSX1JJCiAJc3luYwkJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgc28gU1JSMC8xICovCiAJbXRtc3JkCXIwCQkJLyogZG9uJ3QgZ2V0IHRyYXNoZWQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IDE2NzlhNzAuLjZiMWY0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKQEAgLTE3LDUgKzE3LDUgQEAKIAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogCi11bnNpZ25lZCBsb25nIHBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXM7Cit1bnNpZ25lZCBsb25nIHBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDdmNGJkN2YuLjI1NzkzYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTIxNCwxMSArMjE0LDExIEBACiAJYmwJMWYJCS8qIEZpbmQgb3VyIGFkZHJlc3MgKi8KIDE6CW1mbHIJcjkKIAlybHdpbWkJcjcscjksMCwyMCwzMQotCWFkZGkJcjcscjcsMjQKKwlhZGRpCXI3LHI3LCgyZiAtIDFiKQogCW10c3ByCVNQUk5fU1JSMCxyNwogCW10c3ByCVNQUk5fU1JSMSxyNgogCXJmaQotCisyOgogLyogNC4gQ2xlYXIgb3V0IFBJRHMgJiBTZWFyY2ggaW5mbyAqLwogCWxpCXI2LDAKIAltdHNwciAgIFNQUk5fTUFTNixyNgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggOTA0MDMzMC4uNjRmNmYyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC03Myw4ICs3MywxMCBAQAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSA8YXNtL3RyYWNlLmg+CiAKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChpcnFfc3RhdCk7CisKIGludCBfX2lycV9vZmZzZXRfdmFsdWU7Ci1zdGF0aWMgaW50IHBwY19zcHVyaW91c19pbnRlcnJ1cHRzOwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCiBFWFBPUlRfU1lNQk9MKF9faXJxX29mZnNldF92YWx1ZSk7CkBAIC0xODAsMzAgKzE4Miw2NCBAQAogRVhQT1JUX1NZTUJPTChyYXdfbG9jYWxfaXJxX3Jlc3RvcmUpOwogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCitzdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIGludCBwcmVjKQoreworCWludCBqOworCisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1RBVV9JTlQpCisJaWYgKHRhdV9pbml0aWFsaXplZCkgeworCQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUQVUiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCB0YXVfaW50ZXJydXB0cyhqKSk7CisJCXNlcV9wdXRzKHAsICIgIFBvd2VyUEMgICAgICAgICAgICAgVGhlcm1hbCBBc3Npc3QgKGNwdSB0ZW1wKVxuIik7CisJfQorI2VuZGlmIC8qIENPTkZJR19QUEMzMiAmJiBDT05GSUdfVEFVX0lOVCAqLworCisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiTE9DIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUoaXJxX3N0YXQsIGopLnRpbWVyX2lycXMpOworICAgICAgICBzZXFfcHJpbnRmKHAsICIgIExvY2FsIHRpbWVyIGludGVycnVwdHNcbiIpOworCisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiU1BVIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUoaXJxX3N0YXQsIGopLnNwdXJpb3VzX2lycXMpOworCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7CisKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDTlQiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShpcnFfc3RhdCwgaikucG11X2lycXMpOworCXNlcV9wcmludGYocCwgIiAgUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcnJ1cHRzXG4iKTsKKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIk1DRSIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBwZXJfY3B1KGlycV9zdGF0LCBqKS5tY2VfZXhjZXB0aW9ucyk7CisJc2VxX3ByaW50ZihwLCAiICBNYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnNcbiIpOworCisJcmV0dXJuIDA7Cit9CisKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewotCWludCBpID0gKihsb2ZmX3QgKil2LCBqOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFueV9jb3VudCA9IDA7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqLCBwcmVjOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpID09IDApIHsKLQkJc2VxX3B1dHMocCwgIiAgICAgICAgICAgIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsIGopOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLQl9IGVsc2UgaWYgKGkgPT0gbnJfaXJxcykgewotI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19UQVVfSU5UKQotCQlpZiAodGF1X2luaXRpYWxpemVkKXsKLQkJCXNlcV9wdXRzKHAsICJUQVU6ICIpOwotCQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOwotCQkJc2VxX3B1dHMocCwgIiAgUG93ZXJQQyAgICAgICAgICAgICBUaGVybWFsIEFzc2lzdCAoY3B1IHRlbXApXG4iKTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR19QUEMzMiAmJiBDT05GSUdfVEFVX0lOVCovCi0JCXNlcV9wcmludGYocCwgIkJBRDogJTEwdVxuIiwgcHBjX3NwdXJpb3VzX2ludGVycnVwdHMpOwotCisJaWYgKGkgPiBucl9pcnFzKQogCQlyZXR1cm4gMDsKKworCWZvciAocHJlYyA9IDMsIGogPSAxMDAwOyBwcmVjIDwgMTAgJiYgaiA8PSBucl9pcnFzOyArK3ByZWMpCisJCWogKj0gMTA7CisKKwlpZiAoaSA9PSBucl9pcnFzKQorCQlyZXR1cm4gc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHAsIHByZWMpOworCisJLyogcHJpbnQgaGVhZGVyICovCisJaWYgKGkgPT0gMCkgeworCQlzZXFfcHJpbnRmKHAsICIlKnMiLCBwcmVjICsgOCwgIiIpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIiwgaik7CisJCXNlcV9wdXRjKHAsICdcbicpOwogCX0KIAogCWRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKQEAgLTIxMSwzNyArMjQ3LDQ4IEBACiAJCXJldHVybiAwOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCWFueV9jb3VudCB8PSBrc3RhdF9pcnFzX2NwdShpLCBqKTsKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247Ci0JaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi0+aGFuZGxlcikKLQkJZ290byBza2lwOworCWlmICghYWN0aW9uICYmICFhbnlfY291bnQpCisJCWdvdG8gb3V0OwogCi0Jc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKLSNpZmRlZiBDT05GSUdfU01QCisJc2VxX3ByaW50ZihwLCAiJSpkOiAiLCBwcmVjLCBpKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwotI2Vsc2UKLQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogCWlmIChkZXNjLT5jaGlwKQotCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgZGVzYy0+Y2hpcC0+bmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAgJS0xNnMiLCBkZXNjLT5jaGlwLT5uYW1lKTsKIAllbHNlCi0JCXNlcV9wdXRzKHAsICIgIE5vbmUgICAgICAiKTsKKwkJc2VxX3ByaW50ZihwLCAiICAlLTE2cyIsICJOb25lIik7CisJc2VxX3ByaW50ZihwLCAiICUtOHMiLCAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCIgOiAiRWRnZSIpOwogCi0Jc2VxX3ByaW50ZihwLCAiJXMiLCAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCAiIDogIkVkZ2UgICIpOwotCXNlcV9wcmludGYocCwgIiAgICAlcyIsIGFjdGlvbi0+bmFtZSk7CisJaWYgKGFjdGlvbikgeworCQlzZXFfcHJpbnRmKHAsICIgICAgICVzIiwgYWN0aW9uLT5uYW1lKTsKKwkJd2hpbGUgKChhY3Rpb24gPSBhY3Rpb24tPm5leHQpICE9IE5VTEwpCisJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKKwl9CiAKLQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCi0JCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwogCXNlcV9wdXRjKHAsICdcbicpOwotCi1za2lwOgorb3V0OgogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIC9wcm9jL3N0YXQgaGVscGVycworICovCit1NjQgYXJjaF9pcnFfc3RhdF9jcHUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1NjQgc3VtID0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS50aW1lcl9pcnFzOworCisJc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkucG11X2lycXM7CisJc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkubWNlX2V4Y2VwdGlvbnM7CisJc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuc3B1cmlvdXNfaXJxczsKKworCXJldHVybiBzdW07Cit9CisKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHZvaWQgZml4dXBfaXJxcyhjcHVtYXNrX3QgbWFwKQogewpAQCAtMzUzLDggKzQwMCw3IEBACiAJaWYgKGlycSAhPSBOT19JUlEgJiYgaXJxICE9IE5PX0lSUV9JR05PUkUpCiAJCWhhbmRsZV9vbmVfaXJxKGlycSk7CiAJZWxzZSBpZiAoaXJxICE9IE5PX0lSUV9JR05PUkUpCi0JCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLwotCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOworCQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5zcHVyaW91c19pcnFzKys7CiAKIAlpcnFfZXhpdCgpOwogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CkBAIC00NzQsNyArNTIwLDcgQEAKICAqLwogCiBzdGF0aWMgTElTVF9IRUFEKGlycV9ob3N0cyk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9iaWdfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhpcnFfYmlnX2xvY2spOwogc3RhdGljIHVuc2lnbmVkIGludCByZXZtYXBfdHJlZXNfYWxsb2NhdGVkOwogc3RhdGljIERFRklORV9NVVRFWChyZXZtYXBfdHJlZXNfbXV0ZXgpOwogc3RydWN0IGlycV9tYXBfZW50cnkgaXJxX21hcFtOUl9JUlFTXTsKQEAgLTUyMCwxNCArNTY2LDE0IEBACiAJaWYgKGhvc3QtPm9wcy0+bWF0Y2ggPT0gTlVMTCkKIAkJaG9zdC0+b3BzLT5tYXRjaCA9IGRlZmF1bHRfaXJxX2hvc3RfbWF0Y2g7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAogCS8qIElmIGl0J3MgYSBsZWdhY3kgY29udHJvbGxlciwgY2hlY2sgZm9yIGR1cGxpY2F0ZXMgYW5kCiAJICogbWFyayBpdCBhcyBhbGxvY2F0ZWQgKHdlIHVzZSBpcnEgMCBob3N0IHBvaW50ZXIgZm9yIHRoYXQKIAkgKi8KIAlpZiAocmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX0xFR0FDWSkgewogCQlpZiAoaXJxX21hcFswXS5ob3N0ICE9IE5VTEwpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCQkJLyogSWYgd2UgYXJlIGVhcmx5IGJvb3QsIHdlIGNhbid0IGZyZWUgdGhlIHN0cnVjdHVyZSwKIAkJCSAqIHRvbyBiYWQuLi4KIAkJCSAqIHRoaXMgd2lsbCBiZSBmaXhlZCBvbmNlIHNsYWIgaXMgbWFkZSBhdmFpbGFibGUgZWFybHkKQEAgLTU0MSw3ICs1ODcsNyBAQAogCX0KIAogCWxpc3RfYWRkKCZob3N0LT5saW5rLCAmaXJxX2hvc3RzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAKIAkvKiBBZGRpdGlvbmFsIHNldHVwcyBwZXIgcmV2bWFwIHR5cGUgKi8KIAlzd2l0Y2gocmV2bWFwX3R5cGUpIHsKQEAgLTU5MiwxMyArNjM4LDEzIEBACiAJICogdGhlIGFic2VuY2Ugb2YgYSBkZXZpY2Ugbm9kZS4gVGhpcyBpc24ndCBhIHByb2JsZW0gc28gZmFyCiAJICogeWV0IHRob3VnaC4uLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmlycV9ob3N0cywgbGluaykKIAkJaWYgKGgtPm9wcy0+bWF0Y2goaCwgbm9kZSkpIHsKIAkJCWZvdW5kID0gaDsKIAkJCWJyZWFrOwogCQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiBmb3VuZDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlycV9maW5kX2hvc3QpOwpAQCAtOTY3LDcgKzEwMTMsNyBAQAogCWlmIChjb3VudCA9PSAwIHx8IGNvdW50ID4gKGlycV92aXJxX2NvdW50IC0gTlVNX0lTQV9JTlRFUlJVUFRTKSkKIAkJcmV0dXJuIE5PX0lSUTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCiAJLyogVXNlIGhpbnQgZm9yIDEgaW50ZXJydXB0IGlmIGFueSAqLwogCWlmIChjb3VudCA9PSAxICYmIGhpbnQgPj0gTlVNX0lTQV9JTlRFUlJVUFRTICYmCkBAIC05OTEsNyArMTAzNyw3IEBACiAJCX0KIAl9CiAJaWYgKGZvdW5kID09IE5PX0lSUSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTk9fSVJROwogCX0KICBoaW50X2ZvdW5kOgpAQCAtMTAwMCw3ICsxMDQ2LDcgQEAKIAkJc21wX3dtYigpOwogCQlpcnFfbWFwW2ldLmhvc3QgPSBob3N0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGZvdW5kOwogfQogCkBAIC0xMDEyLDcgKzEwNTgsNyBAQAogCVdBUk5fT04gKHZpcnEgPCBOVU1fSVNBX0lOVEVSUlVQVFMpOwogCVdBUk5fT04gKGNvdW50ID09IDAgfHwgKHZpcnEgKyBjb3VudCkgPiBpcnFfdmlycV9jb3VudCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSB2aXJxOyBpIDwgKHZpcnEgKyBjb3VudCk7IGkrKykgewogCQlzdHJ1Y3QgaXJxX2hvc3QgKmhvc3Q7CiAKQEAgLTEwMjUsNyArMTA3MSw3IEBACiAJCXNtcF93bWIoKTsKIAkJaXJxX21hcFtpXS5ob3N0ID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogfQogCiBpbnQgYXJjaF9lYXJseV9pcnFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwppbmRleCBiNmJkMWVhLi40MWJhZGEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJCWF0b21pY19zZXQoJmtnZGJfY3B1X2RvaW5nX3NpbmdsZV9zdGVwLCAtMSk7CiAJCS8qIHNldCB0aGUgdHJhY2UgYml0IGlmIHdlJ3JlIHN0ZXBwaW5nICovCiAJCWlmIChyZW1jb21faW5fYnVmZmVyWzBdID09ICdzJykgewotI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQkJbXRzcHIoU1BSTl9EQkNSMCwKIAkJCSAgICAgIG1mc3ByKFNQUk5fREJDUjApIHwgREJDUjBfSUMgfCBEQkNSMF9JRE0pOwogCQkJbGludXhfcmVncy0+bXNyIHw9IE1TUl9ERTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggYzkzMjk3OC4uM2ZkMWFmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2lmZGVmIENPTkZJR19CT09LRQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKICNkZWZpbmUgTVNSX1NJTkdMRVNURVAJKE1TUl9ERSkKICNlbHNlCiAjZGVmaW5lIE1TUl9TSU5HTEVTVEVQCShNU1JfU0UpCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkgKiBsaWtlIERlY3JlbWVudGVyIG9yIEV4dGVybmFsIEludGVycnVwdCAqLwogCXJlZ3MtPm1zciAmPSB+TVNSX0VFOwogCXJlZ3MtPm1zciB8PSBNU1JfU0lOR0xFU1RFUDsKLSNpZmRlZiBDT05GSUdfQk9PS0UKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJcmVncy0+bXNyICY9IH5NU1JfQ0U7CiAJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9JQyB8IERCQ1IwX0lETSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKaW5kZXggNzlhMDBiYi4uZDA5ZDFjNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCiAJdW5zaWduZWQgY2hhciAqbG9jYWxfYnVmZmVyID0ga21hbGxvYyhTUExQQVJfTUFYTEVOR1RILCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsX2J1ZmZlcikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIGttYWxsb2MgZmFpbHVyZSBhdCBsaW5lICVkIFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZFxuIiwKIAkJICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQpAQCAtMzgzLDEzICszODMsMTMgQEAKIAkJaW50IGlkeCwgd19pZHg7CiAJCWNoYXIgKndvcmtidWZmZXIgPSBremFsbG9jKFNQTFBBUl9NQVhMRU5HVEgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXdvcmtidWZmZXIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWQgXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZFxuIiwKIAkJCSAgICAgICBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCWtmcmVlKGxvY2FsX2J1ZmZlcik7CiAJCQlyZXR1cm47CiAJCX0KICNpZmRlZiBMUEFSQ0ZHX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gInN1Y2Nlc3MgY2FsbGluZyBnZXQtc3lzdGVtLXBhcmFtZXRlciBcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJzdWNjZXNzIGNhbGxpbmcgZ2V0LXN5c3RlbS1wYXJhbWV0ZXJcbiIpOwogI2VuZGlmCiAJCXNwbHBhcl9zdHJsZW4gPSBsb2NhbF9idWZmZXJbMF0gKiAyNTYgKyBsb2NhbF9idWZmZXJbMV07CiAJCWxvY2FsX2J1ZmZlciArPSAyOwkvKiBzdGVwIG92ZXIgc3RybGVuIHZhbHVlICovCkBAIC00NDAsNyArNDQwLDcgQEAKIAogCXdoaWxlICgoY3B1c19kbiA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGNwdXNfZG4sICJjcHUiKSkpIHsKICNpZmRlZiBMUEFSQ0ZHX0RFQlVHCi0JCXByaW50ayhLRVJOX0VSUiAiY3B1c19kbiAlcCBcbiIsIGNwdXNfZG4pOworCQlwcmludGsoS0VSTl9FUlIgImNwdXNfZG4gJXBcbiIsIGNwdXNfZG4pOwogI2VuZGlmCiAJCWNvdW50Kys7CiAJfQpAQCAtNzI1LDcgKzcyNSw3IEBACiAJY29uc3QgdW5zaWduZWQgaW50ICpscF9pbmRleF9wdHI7CiAJdW5zaWduZWQgaW50IGxwX2luZGV4ID0gMDsKIAotCXNlcV9wcmludGYobSwgIiVzICVzIFxuIiwgTU9EVUxFX05BTUUsIE1PRFVMRV9WRVJTKTsKKwlzZXFfcHJpbnRmKG0sICIlcyAlc1xuIiwgTU9EVUxFX05BTUUsIE1PRFVMRV9WRVJTKTsKIAogCXJvb3RkbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CiAJaWYgKHJvb3RkbikgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCmluZGV4IGFkNDYxZTcuLjljZjE5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKQEAgLTMzOCw4ICszMzgsOCBAQAogCiAJcmMgPSBudnJhbV93cml0ZV9oZWFkZXIobmV3X3BhcnQpOwogCWlmIChyYyA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjogbnZyYW1fd3JpdGVfaGVhZGVyIFwKLQkJCQlmYWlsZWQgKCVkKVxuIiwgcmMpOworCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlX2hlYWRlciAiCisJCQkJImZhaWxlZCAoJWQpXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTM0OSw3ICszNDksNyBAQAogCXJjID0gcHBjX21kLm52cmFtX3dyaXRlKChjaGFyICopJnNlcV9pbml0LCBzaXplb2Yoc2VxX2luaXQpLCAmdG1wX2luZGV4KTsKIAlpZiAocmMgPD0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlICIKLQkJCQkiZmFpbGVkICglZClcbiIsIHJjKTsKKwkJICAgICAgICJmYWlsZWQgKCVkKVxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCmluZGV4IDFhNGZjMGQuLjY2NmQwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogc3RhdGljIGludCBvZl9kZXZfcGhhbmRsZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJcGhhbmRsZSAqcGggPSBkYXRhOwotCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KS0+bm9kZS0+bGludXhfcGhhbmRsZSA9PSAqcGg7CisJcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5ub2RlLT5waGFuZGxlID09ICpwaDsKIH0KIAogc3RydWN0IG9mX2RldmljZSAqb2ZfZmluZF9kZXZpY2VfYnlfcGhhbmRsZShwaGFuZGxlIHBoKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCBjYWRiZWQ2Li4yNTk3Zjk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtMTA0NywxMCArMTA0Nyw4IEBACiAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gYnVzLT5zZWxmOwogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgKytpKSB7Ci0JCWlmICgocmVzID0gYnVzLT5yZXNvdXJjZVtpXSkgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXJlcy0+ZmxhZ3MpCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkgeworCQlpZiAoIXJlcyB8fCAhcmVzLT5mbGFncykKIAkJCWNvbnRpbnVlOwogCQlpZiAoaSA+PSAzICYmIGJ1cy0+c2VsZi0+dHJhbnNwYXJlbnQpCiAJCQljb250aW51ZTsKQEAgLTExODEsMjEgKzExNzksMjAgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwotCiAJCWlmIChza2lwX2lzYV9pb3Jlc291cmNlX2FsaWduKGRldikpCi0JCQlyZXR1cm47Ci0JCWlmIChzdGFydCAmIDB4MzAwKSB7CisJCQlyZXR1cm4gc3RhcnQ7CisJCWlmIChzdGFydCAmIDB4MzAwKQogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KIAl9CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaWJpb3NfYWxpZ25fcmVzb3VyY2UpOwogCkBAIC0xMjc4LDkgKzEyNzUsOCBAQAogCXByX2RlYnVnKCJQQ0k6IEFsbG9jYXRpbmcgYnVzIHJlc291cmNlcyBmb3IgJTA0eDolMDJ4Li4uXG4iLAogCQkgcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlcik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyArK2kpIHsKLQkJaWYgKChyZXMgPSBidXMtPnJlc291cmNlW2ldKSA9PSBOVUxMIHx8ICFyZXMtPmZsYWdzCi0JCSAgICB8fCByZXMtPnN0YXJ0ID4gcmVzLT5lbmQgfHwgcmVzLT5wYXJlbnQpCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkgeworCQlpZiAoIXJlcyB8fCAhcmVzLT5mbGFncyB8fCByZXMtPnN0YXJ0ID4gcmVzLT5lbmQgfHwgcmVzLT5wYXJlbnQpCiAJCQljb250aW51ZTsKIAkJaWYgKGJ1cy0+cGFyZW50ID09IE5VTEwpCiAJCQlwciA9IChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggY2NmNTZhYy4uZDQzZmM2NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAkgKiBHNSBtYWNoaW5lcy4uLiBTbyB3aGVuIHNvbWV0aGluZyBhc2tzIGZvciBidXMgMCBpbyBiYXNlCiAJICogKGJ1cyAwIGlzIEhUIHJvb3QpLCB3ZSByZXR1cm4gdGhlIEFHUCBvbmUgaW5zdGVhZC4KIAkgKi8KLQlpZiAoaW5fYnVzID09IDAgJiYgbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CisJaWYgKGluX2J1cyA9PSAwICYmIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFncDsKIAogCQlhZ3AgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAidTMtYWdwIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMKaW5kZXggNzMxMWZkZi4uY2QxMWQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX29mX3NjYW4uYwpAQCAtMTIzLDYgKzEyMyw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAljb25zdCBjaGFyICp0eXBlOworCXN0cnVjdCBwY2lfc2xvdCAqc2xvdDsKIAogCWRldiA9IGFsbG9jX3BjaV9kZXYoKTsKIAlpZiAoIWRldikKQEAgLTE0MCw2ICsxNDEsMTEgQEAKIAlkZXYtPmRldmZuID0gZGV2Zm47CiAJZGV2LT5tdWx0aWZ1bmN0aW9uID0gMDsJCS8qIG1heWJlIGEgbGllPyAqLwogCWRldi0+bmVlZHNfZnJlc2V0ID0gMDsJCS8qIHBjaWUgZnVuZGFtZW50YWwgcmVzZXQgcmVxdWlyZWQgKi8KKwlzZXRfcGNpZV9wb3J0X3R5cGUoZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgJmRldi0+YnVzLT5zbG90cywgbGlzdCkKKwkJaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IHNsb3QtPm51bWJlcikKKwkJCWRldi0+c2xvdCA9IHNsb3Q7CiAKIAlkZXYtPnZlbmRvciA9IGdldF9pbnRfcHJvcChub2RlLCAidmVuZG9yLWlkIiwgMHhmZmZmKTsKIAlkZXYtPmRldmljZSA9IGdldF9pbnRfcHJvcChub2RlLCAiZGV2aWNlLWlkIiwgMHhmZmZmKTsKQEAgLTE2MCwxMCArMTY2LDE0IEBACiAJZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKIAlkZXYtPmRtYV9tYXNrID0gMHhmZmZmZmZmZjsKIAorCS8qIEVhcmx5IGZpeHVwcywgYmVmb3JlIHByb2JpbmcgdGhlIEJBUnMgKi8KKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9lYXJseSwgZGV2KTsKKwogCWlmICghc3RyY21wKHR5cGUsICJwY2kiKSB8fCAhc3RyY21wKHR5cGUsICJwY2lleCIpKSB7CiAJCS8qIGEgUENJLVBDSSBicmlkZ2UgKi8KIAkJZGV2LT5oZHJfdHlwZSA9IFBDSV9IRUFERVJfVFlQRV9CUklER0U7CiAJCWRldi0+cm9tX2Jhc2VfcmVnID0gUENJX1JPTV9BRERSRVNTMTsKKwkJc2V0X3BjaWVfaG90cGx1Z19icmlkZ2UoZGV2KTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgImNhcmRidXMiKSkgewogCQlkZXYtPmhkcl90eXBlID0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVM7CiAJfSBlbHNlIHsKQEAgLTI5NCw3ICszMDQsNyBAQAogCWludCByZWdsZW4sIGRldmZuOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKLQlwcl9kZWJ1Zygib2Zfc2Nhbl9idXMoJXMpIGJ1cyBubyAlZC4uLiBcbiIsCisJcHJfZGVidWcoIm9mX3NjYW5fYnVzKCVzKSBidXMgbm8gJWQuLi5cbiIsCiAJCSBub2RlLT5mdWxsX25hbWUsIGJ1cy0+bnVtYmVyKTsKIAogCS8qIFNjYW4gZGlyZWN0IGNoaWxkcmVuICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggYTNjMTFjYS4uOTVhZDlkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtNDk1LDkgKzQ5NSw2IEBACiAKIAllbnRyeS0+bnIgPSAwOwogCi0JaWYgKGN1cnJlbnQtPnBpZCA9PSAwKQkJLyogaWRsZSB0YXNrPyAqLwotCQlyZXR1cm4gZW50cnk7Ci0KIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkgewogCQlwZXJmX2NhbGxjaGFpbl9rZXJuZWwocmVncywgZW50cnkpOwogCQlpZiAoY3VycmVudC0+bW0pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDFlYjg1ZmIuLmI2Y2Y4ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC03MTgsMTAgKzcxOCwxMCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBjcHUpCitzdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU7Ci0JZXZlbnQtPm9uY3B1ID0gY3B1OworCWV2ZW50LT5vbmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlldmVudC0+dHN0YW1wX3J1bm5pbmcgKz0gZXZlbnQtPmN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAlpZiAoaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQogCQlldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOwpAQCAtNzM1LDcgKzczNSw3IEBACiAgKi8KIGludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCiAJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwgaW50IGNwdSkKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKIAlsb25nIGksIG4sIG4wOwpAQCAtNzY2LDEwICs3NjYsMTAgQEAKIAkJY3B1aHctPmV2ZW50W2ldLT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW2ldOwogCWNwdWN0eC0+YWN0aXZlX29uY3B1ICs9IG47CiAJbiA9IDE7Ci0JZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyLCBjcHUpOworCWV2ZW50X3NjaGVkX2luKGdyb3VwX2xlYWRlcik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKIAkJaWYgKHN1Yi0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKLQkJCWV2ZW50X3NjaGVkX2luKHN1YiwgY3B1KTsKKwkJCWV2ZW50X3NjaGVkX2luKHN1Yik7CiAJCQkrK247CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYwppbmRleCAwNTE2ZTJkLi40NjE0OTliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMKQEAgLTM3LDcgKzM3LDcgQEAKIH0KIAogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtY19vd25lcl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBtY19vd25lcl9sb2NrKTsKIHN0YXRpYyB2b2lkICpwbWNfb3duZXJfY2FsbGVyOyAvKiBtb3N0bHkgZm9yIGRlYnVnZ2luZyAqLwogcGVyZl9pcnFfdCBwZXJmX2lycSA9IGR1bW15X3BlcmY7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9jaygmcG1jX293bmVyX2xvY2spOworCXJhd19zcGluX2xvY2soJnBtY19vd25lcl9sb2NrKTsKIAogCWlmIChwbWNfb3duZXJfY2FsbGVyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJlc2VydmVfcG1jX2hhcmR3YXJlOiAiCkBAIC01OSwyMSArNTksMjEgQEAKIAlwZXJmX2lycSA9IG5ld19wZXJmX2lycSA/IG5ld19wZXJmX2lycSA6IGR1bW15X3BlcmY7CiAKICBvdXQ6Ci0Jc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVzZXJ2ZV9wbWNfaGFyZHdhcmUpOwogCiB2b2lkIHJlbGVhc2VfcG1jX2hhcmR3YXJlKHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrKCZwbWNfb3duZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmcG1jX293bmVyX2xvY2spOwogCiAJV0FSTl9PTighIHBtY19vd25lcl9jYWxsZXIpOwogCiAJcG1jX293bmVyX2NhbGxlciA9IE5VTEw7CiAJcGVyZl9pcnEgPSBkdW1teV9wZXJmOwogCi0Jc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlbGVhc2VfcG1jX2hhcmR3YXJlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCBjOTMwYWMzLi5lNGQ3MWNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjQ1LDYgKzI0NSwyNCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK3ZvaWQgZG9fc2VuZF90cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCSAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCBpbnQgc2lnbmFsX2NvZGUsIGludCBicmVha3B0KQoreworCXNpZ2luZm9fdCBpbmZvOworCisJaWYgKG5vdGlmeV9kaWUoRElFX0RBQlJfTUFUQ0gsICJkYWJyX21hdGNoIiwgcmVncywgZXJyb3JfY29kZSwKKwkJCTExLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJLyogRGVsaXZlciB0aGUgc2lnbmFsIHRvIHVzZXJzcGFjZSAqLworCWluZm8uc2lfc2lnbm8gPSBTSUdUUkFQOworCWluZm8uc2lfZXJybm8gPSBicmVha3B0OwkvKiBicmVha3BvaW50IG9yIHdhdGNocG9pbnQgaWQgKi8KKwlpbmZvLnNpX2NvZGUgPSBzaWduYWxfY29kZTsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOworCWZvcmNlX3NpZ19pbmZvKFNJR1RSQVAsICZpbmZvLCBjdXJyZW50KTsKK30KKyNlbHNlCS8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCiB2b2lkIGRvX2RhYnIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKIHsKQEAgLTI1NywxMiArMjc1LDYgQEAKIAlpZiAoZGVidWdnZXJfZGFicl9tYXRjaChyZWdzKSkKIAkJcmV0dXJuOwogCi0JLyogQ2xlYXIgdGhlIERBQyBhbmQgc3RydWN0IGVudHJpZXMuICBPbmUgc2hvdCB0cmlnZ2VyICovCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgJiB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXCi0JCQkJCQkJfCBEQkNSMF9JRE0pKTsKLSNlbmRpZgotCiAJLyogQ2xlYXIgdGhlIERBQlIgKi8KIAlzZXRfZGFicigwKTsKIApAQCAtMjczLDkgKzI4NSw4MiBAQAogCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWFkZHJlc3M7CiAJZm9yY2Vfc2lnX2luZm8oU0lHVFJBUCwgJmluZm8sIGN1cnJlbnQpOwogfQorI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGN1cnJlbnRfZGFicik7CiAKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisvKgorICogU2V0IHRoZSBkZWJ1ZyByZWdpc3RlcnMgYmFjayB0byB0aGVpciBkZWZhdWx0ICJzYWZlIiB2YWx1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKK3sKKwl0aHJlYWQtPmlhYzEgPSB0aHJlYWQtPmlhYzIgPSAwOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJdGhyZWFkLT5pYWMzID0gdGhyZWFkLT5pYWM0ID0gMDsKKyNlbmRpZgorCXRocmVhZC0+ZGFjMSA9IHRocmVhZC0+ZGFjMiA9IDA7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwl0aHJlYWQtPmR2YzEgPSB0aHJlYWQtPmR2YzIgPSAwOworI2VuZGlmCisJdGhyZWFkLT5kYmNyMCA9IDA7CisjaWZkZWYgQ09ORklHX0JPT0tFCisJLyoKKwkgKiBGb3JjZSBVc2VyL1N1cGVydmlzb3IgYml0cyB0byBiMTEgKHVzZXItb25seSBNU1JbUFJdPTEpCisJICovCisJdGhyZWFkLT5kYmNyMSA9IERCQ1IxX0lBQzFVUyB8IERCQ1IxX0lBQzJVUyB8CVwKKwkJCURCQ1IxX0lBQzNVUyB8IERCQ1IxX0lBQzRVUzsKKwkvKgorCSAqIEZvcmNlIERhdGEgQWRkcmVzcyBDb21wYXJlIFVzZXIvU3VwZXJ2aXNvciBiaXRzIHRvIGJlIFVzZXItb25seQorCSAqICgwYjExIE1TUltQUl09MSkgYW5kIHNldCBhbGwgb3RoZXIgYml0cyBpbiBEQkNSMiByZWdpc3RlciB0byBiZSAwLgorCSAqLworCXRocmVhZC0+ZGJjcjIgPSBEQkNSMl9EQUMxVVMgfCBEQkNSMl9EQUMyVVM7CisjZWxzZQorCXRocmVhZC0+ZGJjcjEgPSAwOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByaW1lX2RlYnVnX3JlZ3Moc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKK3sKKwltdHNwcihTUFJOX0lBQzEsIHRocmVhZC0+aWFjMSk7CisJbXRzcHIoU1BSTl9JQUMyLCB0aHJlYWQtPmlhYzIpOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJbXRzcHIoU1BSTl9JQUMzLCB0aHJlYWQtPmlhYzMpOworCW10c3ByKFNQUk5fSUFDNCwgdGhyZWFkLT5pYWM0KTsKKyNlbmRpZgorCW10c3ByKFNQUk5fREFDMSwgdGhyZWFkLT5kYWMxKTsKKwltdHNwcihTUFJOX0RBQzIsIHRocmVhZC0+ZGFjMik7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwltdHNwcihTUFJOX0RWQzEsIHRocmVhZC0+ZHZjMSk7CisJbXRzcHIoU1BSTl9EVkMyLCB0aHJlYWQtPmR2YzIpOworI2VuZGlmCisJbXRzcHIoU1BSTl9EQkNSMCwgdGhyZWFkLT5kYmNyMCk7CisJbXRzcHIoU1BSTl9EQkNSMSwgdGhyZWFkLT5kYmNyMSk7CisjaWZkZWYgQ09ORklHX0JPT0tFCisJbXRzcHIoU1BSTl9EQkNSMiwgdGhyZWFkLT5kYmNyMik7CisjZW5kaWYKK30KKy8qCisgKiBVbmxlc3MgbmVpdGhlciB0aGUgb2xkIG9yIG5ldyB0aHJlYWQgYXJlIG1ha2luZyB1c2Ugb2YgdGhlCisgKiBkZWJ1ZyByZWdpc3RlcnMsIHNldCB0aGUgZGVidWcgcmVnaXN0ZXJzIGZyb20gdGhlIHZhbHVlcworICogc3RvcmVkIGluIHRoZSBuZXcgdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCBzd2l0Y2hfYm9va2VfZGVidWdfcmVncyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqbmV3X3RocmVhZCkKK3sKKwlpZiAoKGN1cnJlbnQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lETSkKKwkJfHwgKG5ld190aHJlYWQtPmRiY3IwICYgREJDUjBfSURNKSkKKwkJCXByaW1lX2RlYnVnX3JlZ3MobmV3X3RocmVhZCk7Cit9CisjZWxzZQkvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworc3RhdGljIHZvaWQgc2V0X2RlYnVnX3JlZ19kZWZhdWx0cyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQoreworCWlmICh0aHJlYWQtPmRhYnIpIHsKKwkJdGhyZWFkLT5kYWJyID0gMDsKKwkJc2V0X2RhYnIoMCk7CisJfQorfQorI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KKwogaW50IHNldF9kYWJyKHVuc2lnbmVkIGxvbmcgZGFicikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfZGFicikgPSBkYWJyOwpAQCAtMjg0LDcgKzM2OSw3IEBACiAJCXJldHVybiBwcGNfbWQuc2V0X2RhYnIoZGFicik7CiAKIAkvKiBYWFggc2hvdWxkIHdlIGhhdmUgYSBDUFVfRlRSX0hBU19EQUJSID8gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJbXRzcHIoU1BSTl9EQUMxLCBkYWJyKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1MpCiAJbXRzcHIoU1BSTl9EQUJSLCBkYWJyKTsKQEAgLTM3MSwxMCArNDU2LDggQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCS8qIElmIG5ldyB0aHJlYWQgREFDIChIVyBicmVha3BvaW50KSBpcyB0aGUgc2FtZSB0aGVuIGxlYXZlIGl0ICovCi0JaWYgKG5ldy0+dGhyZWFkLmRhYnIpCi0JCXNldF9kYWJyKG5ldy0+dGhyZWFkLmRhYnIpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwlzd2l0Y2hfYm9va2VfZGVidWdfcmVncygmbmV3LT50aHJlYWQpOwogI2Vsc2UKIAlpZiAodW5saWtlbHkoX19nZXRfY3B1X3ZhcihjdXJyZW50X2RhYnIpICE9IG5ldy0+dGhyZWFkLmRhYnIpKQogCQlzZXRfZGFicihuZXctPnRocmVhZC5kYWJyKTsKQEAgLTUxNCw3ICs1OTcsNyBAQAogCXByaW50aygiICBDUjogJTA4bHggIFhFUjogJTA4bHhcbiIsIHJlZ3MtPmNjciwgcmVncy0+eGVyKTsKIAl0cmFwID0gVFJBUChyZWdzKTsKIAlpZiAodHJhcCA9PSAweDMwMCB8fCB0cmFwID09IDB4NjAwKQotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQlwcmludGsoIkRFQVI6ICJSRUciLCBFU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsKICNlbHNlCiAJCXByaW50aygiREFSOiAiUkVHIiwgRFNJU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsKQEAgLTU1NCwyOCArNjM3LDkgQEAKIAogdm9pZCBmbHVzaF90aHJlYWQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Ci0KLQlpZiAodGVzdF90aV90aHJlYWRfZmxhZyh0LCBUSUZfQUJJX1BFTkRJTkcpKSB7Ci0JCWNsZWFyX3RpX3RocmVhZF9mbGFnKHQsIFRJRl9BQklfUEVORElORyk7Ci0JCWlmICh0ZXN0X3RpX3RocmVhZF9mbGFnKHQsIFRJRl8zMkJJVCkpCi0JCQljbGVhcl90aV90aHJlYWRfZmxhZyh0LCBUSUZfMzJCSVQpOwotCQllbHNlCi0JCQlzZXRfdGlfdGhyZWFkX2ZsYWcodCwgVElGXzMyQklUKTsKLQl9Ci0jZW5kaWYKLQogCWRpc2NhcmRfbGF6eV9jcHVfc3RhdGUoKTsKIAotCWlmIChjdXJyZW50LT50aHJlYWQuZGFicikgewotCQljdXJyZW50LT50aHJlYWQuZGFiciA9IDA7Ci0JCXNldF9kYWJyKDApOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXKTsKLSNlbmRpZgotCX0KKwlzZXRfZGVidWdfcmVnX2RlZmF1bHRzKCZjdXJyZW50LT50aHJlYWQpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDRlYzMwMDguLjQzMjM4YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC02MSwzNjUgKzYxLDEyIEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAotCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOwotc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3Rfc2l6ZV9jZWxsczsKLQogI2lmZGVmIENPTkZJR19QUEM2NAogaW50IF9faW5pdGRhdGEgaW9tbXVfaXNfb2ZmOwogaW50IF9faW5pdGRhdGEgaW9tbXVfZm9yY2Vfb247CiB1bnNpZ25lZCBsb25nIHRjZV9hbGxvY19zdGFydCwgdGNlX2FsbG9jX2VuZDsKICNlbmRpZgogCi10eXBlZGVmIHUzMiBjZWxsX3Q7Ci0KLSNpZiAwCi1zdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICppbml0aWFsX2Jvb3RfcGFyYW1zIF9faW5pdGRhdGE7Ci0jZWxzZQotc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICppbml0aWFsX2Jvb3RfcGFyYW1zOwotI2VuZGlmCi0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi1leHRlcm4gcndsb2NrX3QgZGV2dHJlZV9sb2NrOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi0vKiBleHBvcnQgdGhhdCB0byBvdXRzaWRlIHdvcmxkICovCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQotc3RhdGljIGlubGluZSBjaGFyICpmaW5kX2ZsYXRfZHRfc3RyaW5nKHUzMiBvZmZzZXQpCi17Ci0JcmV0dXJuICgoY2hhciAqKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cmluZ3MgKyBvZmZzZXQ7Ci19Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNjYW4gdGhlIGZsYXR0ZW5lZCBkZXZpY2UtdHJlZSwgaXQgaXMKLSAqIHVzZWQgdG8gZXh0cmFjdCB0aGUgbWVtb3J5IGluZm9ybWF0aW9ucyBhdCBib290IGJlZm9yZSB3ZSBjYW4KLSAqIHVuZmxhdHRlbiB0aGUgdHJlZQotICovCi1pbnQgX19pbml0IG9mX3NjYW5fZmxhdF9kdChpbnQgKCppdCkodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKLQkJCQkgICAgIHZvaWQgKmRhdGEpLAotCQkJICAgdm9pZCAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIHAgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCWludCByYyA9IDA7Ci0JaW50IGRlcHRoID0gLTE7Ci0KLQlkbyB7Ci0JCXUzMiB0YWcgPSAqKCh1MzIgKilwKTsKLQkJY2hhciAqcGF0aHA7Ci0JCQotCQlwICs9IDQ7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfRU5EX05PREUpIHsKLQkJCWRlcHRoIC0tOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApCi0JCQljb250aW51ZTsKLQkJaWYgKHRhZyA9PSBPRl9EVF9FTkQpCi0JCQlicmVhazsKLQkJaWYgKHRhZyA9PSBPRl9EVF9QUk9QKSB7Ci0JCQl1MzIgc3ogPSAqKCh1MzIgKilwKTsKLQkJCXAgKz0gODsKLQkJCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7Ci0JCQlwICs9IHN6OwotCQkJcCA9IF9BTElHTihwLCA0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCB0YWcgJXggc2Nhbm5pbmcgZmxhdHRlbmVkIgotCQkJICAgICAgICIgZGV2aWNlIHRyZWUgIVxuIiwgdGFnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWRlcHRoKys7Ci0JCXBhdGhwID0gKGNoYXIgKilwOwotCQlwID0gX0FMSUdOKHAgKyBzdHJsZW4ocGF0aHApICsgMSwgNCk7Ci0JCWlmICgoKnBhdGhwKSA9PSAnLycpIHsKLQkJCWNoYXIgKmxwLCAqbnA7Ci0JCQlmb3IgKGxwID0gTlVMTCwgbnAgPSBwYXRocDsgKm5wOyBucCsrKQotCQkJCWlmICgoKm5wKSA9PSAnLycpCi0JCQkJCWxwID0gbnArMTsKLQkJCWlmIChscCAhPSBOVUxMKQotCQkJCXBhdGhwID0gbHA7Ci0JCX0KLQkJcmMgPSBpdChwLCBwYXRocCwgZGVwdGgsIGRhdGEpOwotCQlpZiAocmMgIT0gMCkKLQkJCWJyZWFrOwkJCi0JfSB3aGlsZSgxKTsKLQotCXJldHVybiByYzsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0KLQl3aGlsZSgqKCh1MzIgKilwKSA9PSBPRl9EVF9OT1ApCi0JCXAgKz0gNDsKLQlCVUdfT04gKCooKHUzMiAqKXApICE9IE9GX0RUX0JFR0lOX05PREUpOwotCXAgKz0gNDsKLQlyZXR1cm4gX0FMSUdOKHAgKyBzdHJsZW4oKGNoYXIgKilwKSArIDEsIDQpOwotfQotCi0vKioKLSAqIFRoaXMgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdpdGhpbiBzY2FuX2ZsYXR0ZW5lZF9kdCBjYWxsYmFjayB0byBnZXQKLSAqIGFjY2VzcyB0byBwcm9wZXJ0aWVzCi0gKi8KLXZvaWQqIF9faW5pdCBvZl9nZXRfZmxhdF9kdF9wcm9wKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHAgPSBub2RlOwotCi0JZG8gewotCQl1MzIgdGFnID0gKigodTMyICopcCk7Ci0JCXUzMiBzeiwgbm9mZjsKLQkJY29uc3QgY2hhciAqbnN0cjsKLQotCQlwICs9IDQ7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQotCQkJY29udGludWU7Ci0JCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKLQkJCXJldHVybiBOVUxMOwotCi0JCXN6ID0gKigodTMyICopcCk7Ci0JCW5vZmYgPSAqKCh1MzIgKikocCArIDQpKTsKLQkJcCArPSA4OwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7Ci0KLQkJbnN0ciA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7Ci0JCWlmIChuc3RyID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGZpbmQgcHJvcGVydHkgaW5kZXgiCi0JCQkgICAgICAgIiBuYW1lICFcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJaWYgKHN0cmNtcChuYW1lLCBuc3RyKSA9PSAwKSB7Ci0JCQlpZiAoc2l6ZSkKLQkJCQkqc2l6ZSA9IHN6OwotCQkJcmV0dXJuICh2b2lkICopcDsKLQkJfQotCQlwICs9IHN6OwotCQlwID0gX0FMSUdOKHAsIDQpOwotCX0gd2hpbGUoMSk7Ci19Ci0KLWludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqY29tcGF0KQotewotCWNvbnN0IGNoYXIqIGNwOwotCXVuc2lnbmVkIGxvbmcgY3BsZW4sIGw7Ci0KLQljcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOwotCWlmIChjcCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQl3aGlsZSAoY3BsZW4gPiAwKSB7Ci0JCWlmIChzdHJuY2FzZWNtcChjcCwgY29tcGF0LCBzdHJsZW4oY29tcGF0KSkgPT0gMCkKLQkJCXJldHVybiAxOwotCQlsID0gc3RybGVuKGNwKSArIDE7Ci0JCWNwICs9IGw7Ci0JCWNwbGVuIC09IGw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkICpfX2luaXQgdW5mbGF0dGVuX2R0X2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKQotewotCXZvaWQgKnJlczsKLQotCSptZW0gPSBfQUxJR04oKm1lbSwgYWxpZ24pOwotCXJlcyA9ICh2b2lkICopKm1lbTsKLQkqbWVtICs9IHNpemU7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgdW5mbGF0dGVuX2R0X25vZGUodW5zaWduZWQgbG9uZyBtZW0sCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnAsCi0JCQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFkLAotCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKioqYWxsbmV4dHBwLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZwc2l6ZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHAsICoqcHJldl9wcCA9IE5VTEw7Ci0JY2hhciAqcGF0aHA7Ci0JdTMyIHRhZzsKLQl1bnNpZ25lZCBpbnQgbCwgYWxsb2NsOwotCWludCBoYXNfbmFtZSA9IDA7Ci0JaW50IG5ld19mb3JtYXQgPSAwOwotCi0JdGFnID0gKigodTMyICopKCpwKSk7Ci0JaWYgKHRhZyAhPSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCXByaW50aygiV2VpcmQgdGFnIGF0IHN0YXJ0IG9mIG5vZGU6ICV4XG4iLCB0YWcpOwotCQlyZXR1cm4gbWVtOwotCX0KLQkqcCArPSA0OwotCXBhdGhwID0gKGNoYXIgKikqcDsKLQlsID0gYWxsb2NsID0gc3RybGVuKHBhdGhwKSArIDE7Ci0JKnAgPSBfQUxJR04oKnAgKyBsLCA0KTsKLQotCS8qIHZlcnNpb24gMHgxMCBoYXMgYSBtb3JlIGNvbXBhY3QgdW5pdCBuYW1lIGhlcmUgaW5zdGVhZCBvZiB0aGUgZnVsbAotCSAqIHBhdGguIHdlIGFjY3VtdWxhdGUgdGhlIGZ1bGwgcGF0aCBzaXplIHVzaW5nICJmcHNpemUiLCB3ZSdsbCByZWJ1aWxkCi0JICogaXQgbGF0ZXIuIFdlIGRldGVjdCB0aGlzIGJlY2F1c2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbmFtZSBpcwotCSAqIG5vdCAnLycuCi0JICovCi0JaWYgKCgqcGF0aHApICE9ICcvJykgewotCQluZXdfZm9ybWF0ID0gMTsKLQkJaWYgKGZwc2l6ZSA9PSAwKSB7Ci0JCQkvKiByb290IG5vZGU6IHNwZWNpYWwgY2FzZS4gZnBzaXplIGFjY291bnRzIGZvciBwYXRoCi0JCQkgKiBwbHVzIHRlcm1pbmF0aW5nIHplcm8uIHJvb3Qgbm9kZSBvbmx5IGhhcyAnLycsIHNvCi0JCQkgKiBmcHNpemUgc2hvdWxkIGJlIDIsIGJ1dCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBmaXJzdAotCQkJICogbGV2ZWwgbm9kZXMgdG8gaGF2ZSB0d28gJy8nIHNvIHdlIHVzZSBmcHNpemUgMSBoZXJlCi0JCQkgKi8KLQkJCWZwc2l6ZSA9IDE7Ci0JCQlhbGxvY2wgPSAyOwotCQl9IGVsc2UgewotCQkJLyogYWNjb3VudCBmb3IgJy8nIGFuZCBwYXRoIHNpemUgbWludXMgdGVybWluYWwgMAotCQkJICogYWxyZWFkeSBpbiAnbCcKLQkJCSAqLwotCQkJZnBzaXplICs9IGw7Ci0JCQlhbGxvY2wgPSBmcHNpemU7Ci0JCX0KLQl9Ci0KLQotCW5wID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpICsgYWxsb2NsLAotCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOwotCWlmIChhbGxuZXh0cHApIHsKLQkJbWVtc2V0KG5wLCAwLCBzaXplb2YoKm5wKSk7Ci0JCW5wLT5mdWxsX25hbWUgPSAoKGNoYXIqKW5wKSArIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpOwotCQlpZiAobmV3X2Zvcm1hdCkgewotCQkJY2hhciAqcCA9IG5wLT5mdWxsX25hbWU7Ci0JCQkvKiByZWJ1aWxkIGZ1bGwgcGF0aCBmb3IgbmV3IGZvcm1hdCAqLwotCQkJaWYgKGRhZCAmJiBkYWQtPnBhcmVudCkgewotCQkJCXN0cmNweShwLCBkYWQtPmZ1bGxfbmFtZSk7Ci0jaWZkZWYgREVCVUcKLQkJCQlpZiAoKHN0cmxlbihwKSArIGwgKyAxKSAhPSBhbGxvY2wpIHsKLQkJCQkJREJHKCIlczogcDogJWQsIGw6ICVkLCBhOiAlZFxuIiwKLQkJCQkJICAgIHBhdGhwLCAoaW50KXN0cmxlbihwKSwgbCwgYWxsb2NsKTsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlwICs9IHN0cmxlbihwKTsKLQkJCX0KLQkJCSoocCsrKSA9ICcvJzsKLQkJCW1lbWNweShwLCBwYXRocCwgbCk7Ci0JCX0gZWxzZQotCQkJbWVtY3B5KG5wLT5mdWxsX25hbWUsIHBhdGhwLCBsKTsKLQkJcHJldl9wcCA9ICZucC0+cHJvcGVydGllczsKLQkJKiphbGxuZXh0cHAgPSBucDsKLQkJKmFsbG5leHRwcCA9ICZucC0+YWxsbmV4dDsKLQkJaWYgKGRhZCAhPSBOVUxMKSB7Ci0JCQlucC0+cGFyZW50ID0gZGFkOwotCQkJLyogd2UgdGVtcG9yYXJpbHkgdXNlIHRoZSBuZXh0IGZpZWxkIGFzIGBsYXN0X2NoaWxkJyovCi0JCQlpZiAoZGFkLT5uZXh0ID09IDApCi0JCQkJZGFkLT5jaGlsZCA9IG5wOwotCQkJZWxzZQotCQkJCWRhZC0+bmV4dC0+c2libGluZyA9IG5wOwotCQkJZGFkLT5uZXh0ID0gbnA7Ci0JCX0KLQkJa3JlZl9pbml0KCZucC0+a3JlZik7Ci0JfQotCXdoaWxlKDEpIHsKLQkJdTMyIHN6LCBub2ZmOwotCQljaGFyICpwbmFtZTsKLQotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApIHsKLQkJCSpwICs9IDQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCi0JCQlicmVhazsKLQkJKnAgKz0gNDsKLQkJc3ogPSAqKCh1MzIgKikoKnApKTsKLQkJbm9mZiA9ICooKHUzMiAqKSgoKnApICsgNCkpOwotCQkqcCArPSA4OwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQkqcCA9IF9BTElHTigqcCwgc3ogPj0gOCA/IDggOiA0KTsKLQotCQlwbmFtZSA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7Ci0JCWlmIChwbmFtZSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoIkNhbid0IGZpbmQgcHJvcGVydHkgbmFtZSBpbiBsaXN0ICFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0cmNtcChwbmFtZSwgIm5hbWUiKSA9PSAwKQotCQkJaGFzX25hbWUgPSAxOwotCQlsID0gc3RybGVuKHBuYW1lKSArIDE7Ci0JCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLAotCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKLQkJaWYgKGFsbG5leHRwcCkgewotCQkJaWYgKHN0cmNtcChwbmFtZSwgImxpbnV4LHBoYW5kbGUiKSA9PSAwKSB7Ci0JCQkJbnAtPm5vZGUgPSAqKCh1MzIgKikqcCk7Ci0JCQkJaWYgKG5wLT5saW51eF9waGFuZGxlID09IDApCi0JCQkJCW5wLT5saW51eF9waGFuZGxlID0gbnAtPm5vZGU7Ci0JCQl9Ci0JCQlpZiAoc3RyY21wKHBuYW1lLCAiaWJtLHBoYW5kbGUiKSA9PSAwKQotCQkJCW5wLT5saW51eF9waGFuZGxlID0gKigodTMyICopKnApOwotCQkJcHAtPm5hbWUgPSBwbmFtZTsKLQkJCXBwLT5sZW5ndGggPSBzejsKLQkJCXBwLT52YWx1ZSA9ICh2b2lkICopKnA7Ci0JCQkqcHJldl9wcCA9IHBwOwotCQkJcHJldl9wcCA9ICZwcC0+bmV4dDsKLQkJfQotCQkqcCA9IF9BTElHTigoKnApICsgc3osIDQpOwotCX0KLQkvKiB3aXRoIHZlcnNpb24gMHgxMCB3ZSBtYXkgbm90IGhhdmUgdGhlIG5hbWUgcHJvcGVydHksIHJlY3JlYXRlCi0JICogaXQgaGVyZSBmcm9tIHRoZSB1bml0IG5hbWUgaWYgYWJzZW50Ci0JICovCi0JaWYgKCFoYXNfbmFtZSkgewotCQljaGFyICpwID0gcGF0aHAsICpwcyA9IHBhdGhwLCAqcGEgPSBOVUxMOwotCQlpbnQgc3o7Ci0KLQkJd2hpbGUgKCpwKSB7Ci0JCQlpZiAoKCpwKSA9PSAnQCcpCi0JCQkJcGEgPSBwOwotCQkJaWYgKCgqcCkgPT0gJy8nKQotCQkJCXBzID0gcCArIDE7Ci0JCQlwKys7Ci0JCX0KLQkJaWYgKHBhIDwgcHMpCi0JCQlwYSA9IHA7Ci0JCXN6ID0gKHBhIC0gcHMpICsgMTsKLQkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyBzeiwKLQkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7Ci0JCWlmIChhbGxuZXh0cHApIHsKLQkJCXBwLT5uYW1lID0gIm5hbWUiOwotCQkJcHAtPmxlbmd0aCA9IHN6OwotCQkJcHAtPnZhbHVlID0gcHAgKyAxOwotCQkJKnByZXZfcHAgPSBwcDsKLQkJCXByZXZfcHAgPSAmcHAtPm5leHQ7Ci0JCQltZW1jcHkocHAtPnZhbHVlLCBwcywgc3ogLSAxKTsKLQkJCSgoY2hhciAqKXBwLT52YWx1ZSlbc3ogLSAxXSA9IDA7Ci0JCQlEQkcoImZpeGVkIHVwIG5hbWUgZm9yICVzIC0+ICVzXG4iLCBwYXRocCwKLQkJCQkoY2hhciAqKXBwLT52YWx1ZSk7Ci0JCX0KLQl9Ci0JaWYgKGFsbG5leHRwcCkgewotCQkqcHJldl9wcCA9IE5VTEw7Ci0JCW5wLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibmFtZSIsIE5VTEwpOwotCQlucC0+dHlwZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0KLQkJaWYgKCFucC0+bmFtZSkKLQkJCW5wLT5uYW1lID0gIjxOVUxMPiI7Ci0JCWlmICghbnAtPnR5cGUpCi0JCQlucC0+dHlwZSA9ICI8TlVMTD4iOwotCX0KLQl3aGlsZSAodGFnID09IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJbWVtID0gdW5mbGF0dGVuX2R0X25vZGUobWVtLCBwLCBucCwgYWxsbmV4dHBwLCBmcHNpemUpOwotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQl9Ci0JaWYgKHRhZyAhPSBPRl9EVF9FTkRfTk9ERSkgewotCQlwcmludGsoIldlaXJkIHRhZyBhdCBlbmQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7Ci0JCXJldHVybiBtZW07Ci0JfQotCSpwICs9IDQ7Ci0JcmV0dXJuIG1lbTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApCiB7CiAJaWYgKCFwKQpAQCAtNDQ2LDcgKzkzLDcgQEAKIAlEQkcoIi0+IG1vdmVfZGV2aWNlX3RyZWVcbiIpOwogCiAJc3RhcnQgPSBfX3BhKGluaXRpYWxfYm9vdF9wYXJhbXMpOwotCXNpemUgPSBpbml0aWFsX2Jvb3RfcGFyYW1zLT50b3RhbHNpemU7CisJc2l6ZSA9IGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnRvdGFsc2l6ZSk7CiAKIAlpZiAoKG1lbW9yeV9saW1pdCAmJiAoc3RhcnQgKyBzaXplKSA+IG1lbW9yeV9saW1pdCkgfHwKIAkJCW92ZXJsYXBzX2NyYXNoa2VybmVsKHN0YXJ0LCBzaXplKSkgewpAQCAtNDU5LDU0ICsxMDYsNiBAQAogCURCRygiPC0gbW92ZV9kZXZpY2VfdHJlZVxuIik7CiB9CiAKLS8qKgotICogdW5mbGF0dGVucyB0aGUgZGV2aWNlLXRyZWUgcGFzc2VkIGJ5IHRoZSBmaXJtd2FyZSwgY3JlYXRpbmcgdGhlCi0gKiB0cmVlIG9mIHN0cnVjdCBkZXZpY2Vfbm9kZS4gSXQgYWxzbyBmaWxscyB0aGUgIm5hbWUiIGFuZCAidHlwZSIKLSAqIHBvaW50ZXJzIG9mIHRoZSBub2RlcyBzbyB0aGUgbm9ybWFsIGRldmljZS10cmVlIHdhbGtpbmcgZnVuY3Rpb25zCi0gKiBjYW4gYmUgdXNlZCAodGhpcyB1c2VkIHRvIGJlIGRvbmUgYnkgZmluaXNoX2RldmljZV90cmVlKQotICovCi12b2lkIF9faW5pdCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7Ci0KLQlEQkcoIiAtPiB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Ci0KLQkvKiBGaXJzdCBwYXNzLCBzY2FuIGZvciBzaXplICovCi0Jc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCXNpemUgPSB1bmZsYXR0ZW5fZHRfbm9kZSgwLCAmc3RhcnQsIE5VTEwsIE5VTEwsIDApOwotCXNpemUgPSAoc2l6ZSB8IDMpICsgMTsKLQotCURCRygiICBzaXplIGlzICVseCwgYWxsb2NhdGluZy4uLlxuIiwgc2l6ZSk7Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBleHBhbmRlZCBkZXZpY2UgdHJlZSAqLwotCW1lbSA9IGxtYl9hbGxvYyhzaXplICsgNCwgX19hbGlnbm9mX18oc3RydWN0IGRldmljZV9ub2RlKSk7Ci0JbWVtID0gKHVuc2lnbmVkIGxvbmcpIF9fdmEobWVtKTsKLQotCSgodTMyICopbWVtKVtzaXplIC8gNF0gPSAweGRlYWRiZWVmOwotCi0JREJHKCIgIHVuZmxhdHRlbmluZyAlbHguLi5cbiIsIG1lbSk7Ci0KLQkvKiBTZWNvbmQgcGFzcywgZG8gYWN0dWFsIHVuZmxhdHRlbmluZyAqLwotCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQl1bmZsYXR0ZW5fZHRfbm9kZShtZW0sICZzdGFydCwgTlVMTCwgJmFsbG5leHRwLCAwKTsKLQlpZiAoKigodTMyICopc3RhcnQpICE9IE9GX0RUX0VORCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2VpcmQgdGFnIGF0IGVuZCBvZiB0cmVlOiAlMDh4XG4iLCAqKCh1MzIgKilzdGFydCkpOwotCWlmICgoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdICE9IDB4ZGVhZGJlZWYpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVuZCBvZiB0cmVlIG1hcmtlciBvdmVyd3JpdHRlbjogJTA4eFxuIiwKLQkJICAgICAgICgodTMyICopbWVtKVtzaXplIC8gNF0gKTsKLQkqYWxsbmV4dHAgPSBOVUxMOwotCi0JLyogR2V0IHBvaW50ZXIgdG8gT0YgIi9jaG9zZW4iIG5vZGUgZm9yIHVzZSBldmVyeXdoZXJlICovCi0Jb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW4iKTsKLQlpZiAob2ZfY2hvc2VuID09IE5VTEwpCi0JCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuQDAiKTsKLQotCURCRygiIDwtIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKLX0KLQogLyoKICAqIGlibSxwYS1mZWF0dXJlcyBpcyBhIHBlci1jcHUgcHJvcGVydHkgdGhhdCBjb250YWlucyBhIHN0cmluZyBvZgogICogYXR0cmlidXRlIGRlc2NyaXB0b3JzLCBlYWNoIG9mIHdoaWNoIGhhcyBhIDIgYnl0ZSBoZWFkZXIgcGx1cyB1cApAQCAtNzYzLDQ4ICszNjIsOSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGw7Ci0JdTMyICpwcm9wOwotCi0JREJHKCJMb29raW5nIGZvciBpbml0cmQgcHJvcGVydGllcy4uLiAiKTsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtc3RhcnQiLCAmbCk7Ci0JaWYgKHByb3ApIHsKLQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShvZl9yZWFkX3Vsb25nKHByb3AsIGwvNCkpOwotCi0JCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtZW5kIiwgJmwpOwotCQlpZiAocHJvcCkgewotCQkJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKQotCQkJCQlfX3ZhKG9mX3JlYWRfdWxvbmcocHJvcCwgbC80KSk7Ci0JCQlpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOwotCQl9IGVsc2UgewotCQkJaW5pdHJkX3N0YXJ0ID0gMDsKLQkJfQotCX0KLQotCURCRygiaW5pdHJkX3N0YXJ0PTB4JWx4ICBpbml0cmRfZW5kPTB4JWx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQotewotfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX2FyY2godW5zaWduZWQgbG9uZyBub2RlKQogewogCXVuc2lnbmVkIGxvbmcgKmxwcm9wOwotCXVuc2lnbmVkIGxvbmcgbDsKLQljaGFyICpwOwotCi0JREJHKCJzZWFyY2ggXCJjaG9zZW5cIiwgZGVwdGg6ICVkLCB1bmFtZTogJXNcbiIsIGRlcHRoLCB1bmFtZSk7Ci0KLQlpZiAoZGVwdGggIT0gMSB8fAotCSAgICAoc3RyY21wKHVuYW1lLCAiY2hvc2VuIikgIT0gMCAmJiBzdHJjbXAodW5hbWUsICJjaG9zZW5AMCIpICE9IDApKQotCQlyZXR1cm4gMDsKIAogI2lmZGVmIENPTkZJR19QUEM2NAogCS8qIGNoZWNrIGlmIGlvbW11IGlzIGZvcmNlZCBvbiBvciBvZmYgKi8KQEAgLTgxNSwxNyArMzc1LDE3IEBACiAjZW5kaWYKIAogCS8qIG1lbT14IG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgdGhlIHByZWZlcnJlZCBtZWNoYW5pc20gKi8KLSAJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxtZW1vcnktbGltaXQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJbWVtb3J5X2xpbWl0ID0gKmxwcm9wOworCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsbWVtb3J5LWxpbWl0IiwgTlVMTCk7CisJaWYgKGxwcm9wKQorCQltZW1vcnlfbGltaXQgPSAqbHByb3A7CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKLSAJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx0Y2UtYWxsb2Mtc3RhcnQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJdGNlX2FsbG9jX3N0YXJ0ID0gKmxwcm9wOwotIAlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHRjZS1hbGxvYy1lbmQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJdGNlX2FsbG9jX2VuZCA9ICpscHJvcDsKKwlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHRjZS1hbGxvYy1zdGFydCIsIE5VTEwpOworCWlmIChscHJvcCkKKwkJdGNlX2FsbG9jX3N0YXJ0ID0gKmxwcm9wOworCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdGNlLWFsbG9jLWVuZCIsIE5VTEwpOworCWlmIChscHJvcCkKKwkJdGNlX2FsbG9jX2VuZCA9ICpscHJvcDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tFWEVDCkBAIC04MzcsNTEgKzM5Nyw2IEBACiAJaWYgKGxwcm9wKQogCQljcmFzaGtfcmVzLmVuZCA9IGNyYXNoa19yZXMuc3RhcnQgKyAqbHByb3AgLSAxOwogI2VuZGlmCi0KLQllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7Ci0KLQkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KLSAJcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImJvb3RhcmdzIiwgJmwpOwotCWlmIChwICE9IE5VTEwgJiYgbCA+IDApCi0JCXN0cmxjcHkoY21kX2xpbmUsIHAsIG1pbigoaW50KWwsIENPTU1BTkRfTElORV9TSVpFKSk7Ci0KLSNpZmRlZiBDT05GSUdfQ01ETElORQotCWlmIChwID09IE5VTEwgfHwgbCA9PSAwIHx8IChsID09IDEgJiYgKCpwKSA9PSAwKSkKLQkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKLSNlbmRpZiAvKiBDT05GSUdfQ01ETElORSAqLwotCi0JREJHKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7Ci0KLQkvKiBicmVhayBub3cgKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCi17Ci0JdTMyICpwcm9wOwotCi0JaWYgKGRlcHRoICE9IDApCi0JCXJldHVybiAwOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgIiNzaXplLWNlbGxzIiwgTlVMTCk7Ci0JZHRfcm9vdF9zaXplX2NlbGxzID0gKHByb3AgPT0gTlVMTCkgPyAxIDogKnByb3A7Ci0JREJHKCJkdF9yb290X3NpemVfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9zaXplX2NlbGxzKTsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOwotCWR0X3Jvb3RfYWRkcl9jZWxscyA9IChwcm9wID09IE5VTEwpID8gMiA6ICpwcm9wOwotCURCRygiZHRfcm9vdF9hZGRyX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3RfYWRkcl9jZWxscyk7Ci0JCi0JLyogYnJlYWsgbm93ICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1NjQgX19pbml0IGR0X21lbV9uZXh0X2NlbGwoaW50IHMsIGNlbGxfdCAqKmNlbGxwKQotewotCWNlbGxfdCAqcCA9ICpjZWxscDsKLQotCSpjZWxscCA9IHAgKyBzOwotCXJldHVybiBvZl9yZWFkX251bWJlcihwLCBzKTsKIH0KIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwpAQCAtODkzLDIyICs0MDgsMjIgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkodW5zaWduZWQgbG9uZyBub2RlKQogewotCWNlbGxfdCAqZG0sICpscywgKnVzbTsKKwlfX2JlMzIgKmRtLCAqbHMsICp1c207CiAJdW5zaWduZWQgbG9uZyBsLCBuLCBmbGFnczsKIAl1NjQgYmFzZSwgc2l6ZSwgbG1iX3NpemU7CiAJdW5zaWduZWQgaW50IGlzX2tleGVjX2tkdW1wID0gMCwgcm5nczsKIAogCWxzID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGxtYi1zaXplIiwgJmwpOwotCWlmIChscyA9PSBOVUxMIHx8IGwgPCBkdF9yb290X3NpemVfY2VsbHMgKiBzaXplb2YoY2VsbF90KSkKKwlpZiAobHMgPT0gTlVMTCB8fCBsIDwgZHRfcm9vdF9zaXplX2NlbGxzICogc2l6ZW9mKF9fYmUzMikpCiAJCXJldHVybiAwOwogCWxtYl9zaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZscyk7CiAKIAlkbSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSxkeW5hbWljLW1lbW9yeSIsICZsKTsKLQlpZiAoZG0gPT0gTlVMTCB8fCBsIDwgc2l6ZW9mKGNlbGxfdCkpCisJaWYgKGRtID09IE5VTEwgfHwgbCA8IHNpemVvZihfX2JlMzIpKQogCQlyZXR1cm4gMDsKIAogCW4gPSAqZG0rKzsJLyogbnVtYmVyIG9mIGVudHJpZXMgKi8KLQlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoY2VsbF90KSkKKwlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoX19iZTMyKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBjaGVjayBpZiB0aGlzIGlzIGEga2V4ZWMva2R1bXAga2VybmVsLiAqLwpAQCAtOTYzLDY2ICs0NzgsNDggQEAKICNkZWZpbmUgZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSkJMAogI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5X3BwYyh1bnNpZ25lZCBsb25nIG5vZGUsCisJCQkJCQljb25zdCBjaGFyICp1bmFtZSwKKwkJCQkJCWludCBkZXB0aCwgdm9pZCAqZGF0YSkKIHsKLQljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKLQljZWxsX3QgKnJlZywgKmVuZHA7Ci0JdW5zaWduZWQgbG9uZyBsOwotCi0JLyogTG9vayBmb3IgdGhlIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkgbm9kZSAqLwogCWlmIChkZXB0aCA9PSAxICYmCiAJICAgIHN0cmNtcCh1bmFtZSwgImlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkiKSA9PSAwKQogCQlyZXR1cm4gZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSk7Ci0KLQkvKiBXZSBhcmUgc2Nhbm5pbmcgIm1lbW9yeSIgbm9kZXMgb25seSAqLwotCWlmICh0eXBlID09IE5VTEwpIHsKLQkJLyoKLQkJICogVGhlIGxvbmd0cmFpbCBkb2Vzbid0IGhhdmUgYSBkZXZpY2VfdHlwZSBvbiB0aGUKLQkJICogL21lbW9yeSBub2RlLCBzbyBsb29rIGZvciB0aGUgbm9kZSBjYWxsZWQgL21lbW9yeUAwLgotCQkgKi8KLQkJaWYgKGRlcHRoICE9IDEgfHwgc3RyY21wKHVuYW1lLCAibWVtb3J5QDAiKSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgIm1lbW9yeSIpICE9IDApCi0JCXJldHVybiAwOwotCi0JcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdXNhYmxlLW1lbW9yeSIsICZsKTsKLQlpZiAocmVnID09IE5VTEwpCi0JCXJlZyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsICZsKTsKLQlpZiAocmVnID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JZW5kcCA9IHJlZyArIChsIC8gc2l6ZW9mKGNlbGxfdCkpOwotCi0JREJHKCJtZW1vcnkgc2NhbiBub2RlICVzLCByZWcgc2l6ZSAlbGQsIGRhdGE6ICV4ICV4ICV4ICV4LFxuIiwKLQkgICAgdW5hbWUsIGwsIHJlZ1swXSwgcmVnWzFdLCByZWdbMl0sIHJlZ1szXSk7Ci0KLQl3aGlsZSAoKGVuZHAgLSByZWcpID49IChkdF9yb290X2FkZHJfY2VsbHMgKyBkdF9yb290X3NpemVfY2VsbHMpKSB7Ci0JCXU2NCBiYXNlLCBzaXplOwotCi0JCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywgJnJlZyk7Ci0JCXNpemUgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJnJlZyk7Ci0KLQkJaWYgKHNpemUgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlEQkcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkJaWYgKGlvbW11X2lzX29mZikgewotCQkJaWYgKGJhc2UgPj0gMHg4MDAwMDAwMHVsKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKChiYXNlICsgc2l6ZSkgPiAweDgwMDAwMDAwdWwpCi0JCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7Ci0JCX0KLSNlbmRpZgotCQlsbWJfYWRkKGJhc2UsIHNpemUpOwotCi0JCW1lbXN0YXJ0X2FkZHIgPSBtaW4oKHU2NCltZW1zdGFydF9hZGRyLCBiYXNlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwkKKwlyZXR1cm4gZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeShub2RlLCB1bmFtZSwgZGVwdGgsIGRhdGEpOwogfQogCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaCh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpCisJaWYgKGlvbW11X2lzX29mZikgeworCQlpZiAoYmFzZSA+PSAweDgwMDAwMDAwdWwpCisJCQlyZXR1cm47CisJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQorCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7CisJfQorI2VuZGlmCisKKwlsbWJfYWRkKGJhc2UsIHNpemUpOworCisJbWVtc3RhcnRfYWRkciA9IG1pbigodTY0KW1lbXN0YXJ0X2FkZHIsIGJhc2UpOworfQorCit1NjQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfbWVtb3J5X2FyY2godTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwlyZXR1cm4gbG1iX2FsbG9jKHNpemUsIGFsaWduKTsKK30KKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zZXR1cF9pbml0cmRfYXJjaCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKHN0YXJ0KTsKKwlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpX192YShlbmQpOworCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfbWVtKHZvaWQpCiB7CiAJdTY0IGJhc2UsIHNpemU7CkBAIC0xMTg2LDcgKzY4Myw3IEBACiAJLyogU2NhbiBtZW1vcnkgbm9kZXMgYW5kIHJlYnVpbGQgTE1CcyAqLwogCWxtYl9pbml0KCk7CiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9yb290LCBOVUxMKTsKLQlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSwgTlVMTCk7CisJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnlfcHBjLCBOVUxMKTsKIAogCS8qIFNhdmUgY29tbWFuZCBsaW5lIGZvciAvcHJvYy9jbWRsaW5lIGFuZCB0aGVuIHBhcnNlIHBhcmFtZXRlcnMgKi8KIAlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBjbWRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOwpAQCAtMTIzNCwyNSArNzMxLDYgQEAKIAlEQkcoIiA8LSBlYXJseV9pbml0X2RldnRyZWUoKVxuIik7CiB9CiAKLQotLyoqCi0gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm9vdCBub2RlIGhhcyBhIGdpdmVuIHZhbHVlIGluIGl0cwotICogY29tcGF0aWJsZSBwcm9wZXJ0eS4KLSAqLwotaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwotCWludCByYyA9IDA7Ci0KLQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlpZiAocm9vdCkgewotCQlyYyA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHJvb3QsIGNvbXBhdCk7Ci0JCW9mX25vZGVfcHV0KHJvb3QpOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci1FWFBPUlRfU1lNQk9MKG1hY2hpbmVfaXNfY29tcGF0aWJsZSk7Ci0KIC8qKioqKioqCiAgKgogICogTmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBPRiAiZmluZCIgQVBJcywgcmV0dXJuIGEgcmVmY291bnRlZApAQCAtMTI2NSwyNyArNzQzLDYgQEAKICAqKioqKioqLwogCiAvKioKLSAqCW9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlIC0gRmluZCBhIG5vZGUgZ2l2ZW4gYSBwaGFuZGxlCi0gKglAaGFuZGxlOglwaGFuZGxlIG9mIHRoZSBub2RlIHRvIGZpbmQKLSAqCi0gKglSZXR1cm5zIGEgbm9kZSBwb2ludGVyIHdpdGggcmVmY291bnQgaW5jcmVtZW50ZWQsIHVzZQotICoJb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCXJlYWRfbG9jaygmZGV2dHJlZV9sb2NrKTsKLQlmb3IgKG5wID0gYWxsbm9kZXM7IG5wICE9IDA7IG5wID0gbnAtPmFsbG5leHQpCi0JCWlmIChucC0+bGludXhfcGhhbmRsZSA9PSBoYW5kbGUpCi0JCQlicmVhazsKLQlvZl9ub2RlX2dldChucCk7Ci0JcmVhZF91bmxvY2soJmRldnRyZWVfbG9jayk7Ci0JcmV0dXJuIG5wOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7Ci0KLS8qKgogICoJb2ZfZmluZF9uZXh0X2NhY2hlX25vZGUgLSBGaW5kIGEgbm9kZSdzIHN1YnNpZGlhcnkgY2FjaGUKICAqCUBucDoJbm9kZSBvZiB0eXBlICJjcHUiIG9yICJjYWNoZSIKICAqCkBAIC0xMzE2LDEzOCArNzczLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyoqCi0gKglvZl9ub2RlX2dldCAtIEluY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKLSAqCUBub2RlOglOb2RlIHRvIGluYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KLSAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKLSAqCi0gKglSZXR1cm5zIG5vZGUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCWlmIChub2RlKQotCQlrcmVmX2dldCgmbm9kZS0+a3JlZik7Ci0JcmV0dXJuIG5vZGU7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX25vZGVfZ2V0KTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBrcmVmX3RvX2RldmljZV9ub2RlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXJldHVybiBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRldmljZV9ub2RlLCBrcmVmKTsKLX0KLQotLyoqCi0gKglvZl9ub2RlX3JlbGVhc2UgLSByZWxlYXNlIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG5vZGUKLSAqCUBrcmVmOiAga3JlZiBlbGVtZW50IG9mIHRoZSBub2RlIHRvIGJlIHJlbGVhc2VkCi0gKgotICoJSW4gb2Zfbm9kZV9wdXQoKSB0aGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBrcmVmX3B1dCgpCi0gKglhcyB0aGUgZGVzdHJ1Y3Rvci4KLSAqLwotc3RhdGljIHZvaWQgb2Zfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGtyZWZfdG9fZGV2aWNlX25vZGUoa3JlZik7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wID0gbm9kZS0+cHJvcGVydGllczsKLQotCS8qIFdlIHNob3VsZCBuZXZlciBiZSByZWxlYXNpbmcgbm9kZXMgdGhhdCBoYXZlbid0IGJlZW4gZGV0YWNoZWQuICovCi0JaWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfREVUQUNIRUQpKSB7Ci0JCXByaW50aygiV0FSTklORzogQmFkIG9mX25vZGVfcHV0KCkgb24gJXNcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJa3JlZl9pbml0KCZub2RlLT5rcmVmKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RZTkFNSUMpKQotCQlyZXR1cm47Ci0KLQl3aGlsZSAocHJvcCkgewotCQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQgPSBwcm9wLT5uZXh0OwotCQlrZnJlZShwcm9wLT5uYW1lKTsKLQkJa2ZyZWUocHJvcC0+dmFsdWUpOwotCQlrZnJlZShwcm9wKTsKLQkJcHJvcCA9IG5leHQ7Ci0KLQkJaWYgKCFwcm9wKSB7Ci0JCQlwcm9wID0gbm9kZS0+ZGVhZHByb3BzOwotCQkJbm9kZS0+ZGVhZHByb3BzID0gTlVMTDsKLQkJfQotCX0KLQlrZnJlZShub2RlLT5mdWxsX25hbWUpOwotCWtmcmVlKG5vZGUtPmRhdGEpOwotCWtmcmVlKG5vZGUpOwotfQotCi0vKioKLSAqCW9mX25vZGVfcHV0IC0gRGVjcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQotICoJQG5vZGU6CU5vZGUgdG8gZGVjIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bwotICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycwotICoKLSAqLwotdm9pZCBvZl9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCi17Ci0JaWYgKG5vZGUpCi0JCWtyZWZfcHV0KCZub2RlLT5rcmVmLCBvZl9ub2RlX3JlbGVhc2UpOwotfQotRVhQT1JUX1NZTUJPTChvZl9ub2RlX3B1dCk7Ci0KLS8qCi0gKiBQbHVnIGEgZGV2aWNlIG5vZGUgaW50byB0aGUgdHJlZSBhbmQgZ2xvYmFsIGxpc3QuCi0gKi8KLXZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQlucC0+c2libGluZyA9IG5wLT5wYXJlbnQtPmNoaWxkOwotCW5wLT5hbGxuZXh0ID0gYWxsbm9kZXM7Ci0JbnAtPnBhcmVudC0+Y2hpbGQgPSBucDsKLQlhbGxub2RlcyA9IG5wOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqICJVbnBsdWciIGEgbm9kZSBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gIFRoZSBjYWxsZXIgbXVzdCBob2xkCi0gKiBhIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gIFRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCi0gKiBpcyBub3QgZnJlZWQgdW50aWwgaXRzIHJlZmNvdW50IGdvZXMgdG8gemVyby4KLSAqLwotdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JcGFyZW50ID0gbnAtPnBhcmVudDsKLQlpZiAoIXBhcmVudCkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JaWYgKGFsbG5vZGVzID09IG5wKQotCQlhbGxub2RlcyA9IG5wLT5hbGxuZXh0OwotCWVsc2UgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXY7Ci0JCWZvciAocHJldiA9IGFsbG5vZGVzOwotCQkgICAgIHByZXYtPmFsbG5leHQgIT0gbnA7Ci0JCSAgICAgcHJldiA9IHByZXYtPmFsbG5leHQpCi0JCQk7Ci0JCXByZXYtPmFsbG5leHQgPSBucC0+YWxsbmV4dDsKLQl9Ci0KLQlpZiAocGFyZW50LT5jaGlsZCA9PSBucCkKLQkJcGFyZW50LT5jaGlsZCA9IG5wLT5zaWJsaW5nOwotCWVsc2UgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXZzaWI7Ci0JCWZvciAocHJldnNpYiA9IG5wLT5wYXJlbnQtPmNoaWxkOwotCQkgICAgIHByZXZzaWItPnNpYmxpbmcgIT0gbnA7Ci0JCSAgICAgcHJldnNpYiA9IHByZXZzaWItPnNpYmxpbmcpCi0JCQk7Ci0JCXByZXZzaWItPnNpYmxpbmcgPSBucC0+c2libGluZzsKLQl9Ci0KLQlvZl9ub2RlX3NldF9mbGFnKG5wLCBPRl9ERVRBQ0hFRCk7Ci0KLW91dF91bmxvY2s6Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotfQotCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAvKgogICogRml4IHVwIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhIG5ldyBkZXZpY2Ugbm9kZToKQEAgLTE0NzksOSArODA0LDkgQEAKIAlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogZml4IHVwIG5ldyBub2RlJ3MgbGludXhfcGhhbmRsZSBmaWVsZCAqLworCS8qIGZpeCB1cCBuZXcgbm9kZSdzIHBoYW5kbGUgZmllbGQgKi8KIAlpZiAoKGlibV9waGFuZGxlID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJpYm0scGhhbmRsZSIsIE5VTEwpKSkKLQkJbm9kZS0+bGludXhfcGhhbmRsZSA9ICppYm1fcGhhbmRsZTsKKwkJbm9kZS0+cGhhbmRsZSA9ICppYm1fcGhhbmRsZTsKIAogb3V0OgogCW9mX25vZGVfcHV0KHBhcmVudCk7CkBAIC0xNTIwLDEyMCArODQ1LDYgQEAKIF9faW5pdGNhbGwocHJvbV9yZWNvbmZpZ19zZXR1cCk7CiAjZW5kaWYKIAotLyoKLSAqIEFkZCBhIHByb3BlcnR5IHRvIGEgbm9kZQotICovCi1pbnQgcHJvbV9hZGRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlKiBucCwgc3RydWN0IHByb3BlcnR5KiBwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXByb3AtPm5leHQgPSBOVUxMOwkKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgKCpuZXh0KS0+bmFtZSkgPT0gMCkgewotCQkJLyogZHVwbGljYXRlICEgZG9uJ3QgaW5zZXJ0IGl0ICovCi0JCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQkqbmV4dCA9IHByb3A7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX2FkZF9wcm9wKG5wLT5wZGUsIHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSBhIG5vZGUuICBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkKLSAqIHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQgd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzCi0gKiB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuICBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkKLSAqIHRvIHRoZSAiZGVhZCBwcm9wZXJ0aWVzIiBsaXN0LCBzbyBpdCB3b24ndCBiZSBmb3VuZCBhbnkgbW9yZS4KLSAqLwotaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZvdW5kID0gMDsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKCpuZXh0ID09IHByb3ApIHsKLQkJCS8qIGZvdW5kIHRoZSBub2RlICovCi0JCQkqbmV4dCA9IHByb3AtPm5leHQ7Ci0JCQlwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKLQkJCW5wLT5kZWFkcHJvcHMgPSBwcm9wOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWZvdW5kKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gcmVtb3ZlIHRoZSBwcm9jIG5vZGUgYXMgd2VsbCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX3JlbW92ZV9wcm9wKG5wLT5wZGUsIHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0vKgotICogVXBkYXRlIGEgcHJvcGVydHkgaW4gYSBub2RlLiAgTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5Ci0gKiByZW1vdmUgaXQsIHNpbmNlIHdlIGhhdmUgZ2l2ZW4gb3V0IHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycwotICogdG8gdGhlIGRhdGEgdXNpbmcgZ2V0LXByb3BlcnR5LiAgSW5zdGVhZCB3ZSBqdXN0IG1vdmUgdGhlIHByb3BlcnR5Ci0gKiB0byB0aGUgImRlYWQgcHJvcGVydGllcyIgbGlzdCwgYW5kIGFkZCB0aGUgbmV3IHByb3BlcnR5IHRvIHRoZQotICogcHJvcGVydHkgbGlzdAotICovCi1pbnQgcHJvbV91cGRhdGVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCSBzdHJ1Y3QgcHJvcGVydHkgKm5ld3Byb3AsCi0JCQkgc3RydWN0IHByb3BlcnR5ICpvbGRwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZm91bmQgPSAwOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoKm5leHQgPT0gb2xkcHJvcCkgewotCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KLQkJCW5ld3Byb3AtPm5leHQgPSBvbGRwcm9wLT5uZXh0OwotCQkJKm5leHQgPSBuZXdwcm9wOwotCQkJb2xkcHJvcC0+bmV4dCA9IG5wLT5kZWFkcHJvcHM7Ci0JCQlucC0+ZGVhZHByb3BzID0gb2xkcHJvcDsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfdXBkYXRlX3Byb3AobnAtPnBkZSwgbmV3cHJvcCwgb2xkcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLQogLyogRmluZCB0aGUgZGV2aWNlIG5vZGUgZm9yIGEgZ2l2ZW4gbG9naWNhbCBjcHUgbnVtYmVyLCBhbHNvIHJldHVybnMgdGhlIGNwdQogICogbG9jYWwgdGhyZWFkIG51bWJlciAoaW5kZXggaW4gaWJtLGludGVycnVwdC1zZXJ2ZXIjcykgaWYgcmVsZXZhbnQgYW5kCiAgKiBhc2tlZCBmb3IgKG5vbiBOVUxMKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggYmFmYWMyZTQuLjVmMzA2YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtNjU0LDYgKzY1NCw5IEBACiAjZGVmaW5lIE9WNV9DTU8JCQkweDAwCiAjZW5kaWYKIAorLyogT3B0aW9uIFZlY3RvciA2OiBJQk0gUEFQUiBoaW50cyAqLworI2RlZmluZSBPVjZfTElOVVgJCTB4MDIJLyogTGludXggaXMgb3VyIE9TICovCisKIC8qCiAgKiBUaGUgYXJjaGl0ZWN0dXJlIHZlY3RvciBoYXMgYW4gYXJyYXkgb2YgUFZSIG1hc2svdmFsdWUgcGFpcnMsCiAgKiBmb2xsb3dlZCBieSAjIG9wdGlvbiB2ZWN0b3JzIC0gMSwgZm9sbG93ZWQgYnkgdGhlIG9wdGlvbiB2ZWN0b3JzLgpAQCAtNjY1LDcgKzY2OCw3IEBACiAJVygweGZmZmZmZmZmKSwgVygweDBmMDAwMDAzKSwJLyogYWxsIDIuMDYtY29tcGxpYW50ICovCiAJVygweGZmZmZmZmZmKSwgVygweDBmMDAwMDAyKSwJLyogYWxsIDIuMDUtY29tcGxpYW50ICovCiAJVygweGZmZmZmZmZlKSwgVygweDBmMDAwMDAxKSwJLyogYWxsIDIuMDQtY29tcGxpYW50IGFuZCBlYXJsaWVyICovCi0JNSAtIDEsCQkJCS8qIDUgb3B0aW9uIHZlY3RvcnMgKi8KKwk2IC0gMSwJCQkJLyogNiBvcHRpb24gdmVjdG9ycyAqLwogCiAJLyogb3B0aW9uIHZlY3RvciAxOiBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgKi8KIAkzIC0gMiwJCQkJLyogbGVuZ3RoICovCkBAIC02OTcsMTIgKzcwMCwyOSBAQAogCTAsCQkJCS8qIGRvbid0IGhhbHQgKi8KIAogCS8qIG9wdGlvbiB2ZWN0b3IgNTogUEFQUi9PRiBvcHRpb25zICovCi0JNSAtIDIsCQkJCS8qIGxlbmd0aCAqLworCTEzIC0gMiwJCQkJLyogbGVuZ3RoICovCiAJMCwJCQkJLyogZG9uJ3QgaWdub3JlLCBkb24ndCBoYWx0ICovCiAJT1Y1X0xQQVIgfCBPVjVfU1BMUEFSIHwgT1Y1X0xBUkdFX1BBR0VTIHwgT1Y1X0RSQ09ORl9NRU1PUlkgfAogCU9WNV9ET05BVEVfREVESUNBVEVfQ1BVIHwgT1Y1X01TSSwKIAkwLAogCU9WNV9DTU8sCisJMCwKKwkwLAorCTAsCisJMCwKKwkvKiBXQVJOSU5HOiBUaGUgb2Zmc2V0IG9mIHRoZSAibnVtYmVyIG9mIGNvcmVzIiBmaWVsZCBiZWxvdworCSAqIG11c3QgbWF0Y2ggYnkgdGhlIG1hY3JvIGJlbG93LiBVcGRhdGUgdGhlIGRlZmluaXRpb24gaWYKKwkgKiB0aGUgc3RydWN0dXJlIGxheW91dCBjaGFuZ2VzLgorCSAqLworI2RlZmluZSBJQk1fQVJDSF9WRUNfTlJDT1JFU19PRkZTRVQJMTAwCisJVyhOUl9DUFVTKSwJCQkvKiBudW1iZXIgb2YgY29yZXMgc3VwcG9ydGVkICovCisKKwkvKiBvcHRpb24gdmVjdG9yIDY6IElCTSBQQVBSIGhpbnRzICovCisJNCAtIDIsCQkJCS8qIGxlbmd0aCAqLworCTAsCisJMCwKKwlPVjZfTElOVVgsCisKIH07CiAKIC8qIE9sZCBtZXRob2QgLSBFTEYgaGVhZGVyIHdpdGggUFRfTk9URSBzZWN0aW9ucyAqLwpAQCAtNzkyLDEzICs4MTIsNzAgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBwcm9tX2NvdW50X3NtdF90aHJlYWRzKHZvaWQpCit7CisJcGhhbmRsZSBub2RlOworCWNoYXIgdHlwZVs2NF07CisJdW5zaWduZWQgaW50IHBsZW47CisKKwkvKiBQaWNrIHVwIHRoIGZpcnN0IENQVSBub2RlIHdlIGNhbiBmaW5kICovCisJZm9yIChub2RlID0gMDsgcHJvbV9uZXh0X25vZGUoJm5vZGUpOyApIHsKKwkJdHlwZVswXSA9IDA7CisJCXByb21fZ2V0cHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCB0eXBlLCBzaXplb2YodHlwZSkpOworCisJCWlmIChzdHJjbXAodHlwZSwgUkVMT0MoImNwdSIpKSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBUaGVyZSBpcyBhbiBlbnRyeSBmb3IgZWFjaCBzbXQgdGhyZWFkLCBlYWNoIGVudHJ5IGJlaW5nCisJCSAqIDQgYnl0ZXMgbG9uZy4gIEFsbCBjcHVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZgorCQkgKiBzbXQgdGhyZWFkcywgc28gcmV0dXJuIGFmdGVyIGZpbmRpbmcgdGhlIGZpcnN0LgorCQkgKi8KKwkJcGxlbiA9IHByb21fZ2V0cHJvcGxlbihub2RlLCAiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiKTsKKwkJaWYgKHBsZW4gPT0gUFJPTV9FUlJPUikKKwkJCWJyZWFrOworCQlwbGVuID4+PSAyOworCQlwcm9tX2RlYnVnKCJGb3VuZCAweCV4IHNtdCB0aHJlYWRzIHBlciBjb3JlXG4iLCAodW5zaWduZWQgbG9uZylwbGVuKTsKKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJaWYgKHBsZW4gPCAxIHx8IHBsZW4gPiA2NCkgeworCQkJcHJvbV9wcmludGYoIlRocmVhZHMgcGVyIGNvcmUgMHgleCBvdXQgb2YgYm91bmRzLCBhc3N1bWluZyAxXG4iLAorCQkJCSAgICAodW5zaWduZWQgbG9uZylwbGVuKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiBwbGVuOworCX0KKwlwcm9tX2RlYnVnKCJObyB0aHJlYWRzIGZvdW5kLCBhc3N1bWluZyAxIHBlciBjb3JlXG4iKTsKKworCXJldHVybiAxOworCit9CisKKwogc3RhdGljIHZvaWQgX19pbml0IHByb21fc2VuZF9jYXBhYmlsaXRpZXModm9pZCkKIHsKIAlpaGFuZGxlIGVsZmxvYWRlciwgcm9vdDsKIAlwcm9tX2FyZ190IHJldDsKKwl1MzIgKmNvcmVzOwogCiAJcm9vdCA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi8iKSk7CiAJaWYgKHJvb3QgIT0gMCkgeworCQkvKiBXZSBuZWVkIHRvIHRlbGwgdGhlIEZXIGFib3V0IHRoZSBudW1iZXIgb2YgY29yZXMgd2Ugc3VwcG9ydC4KKwkJICoKKwkJICogVG8gZG8gdGhhdCwgd2UgY291bnQgdGhlIG51bWJlciBvZiB0aHJlYWRzIG9uIHRoZSBmaXJzdCBjb3JlCisJCSAqICh3ZSBhc3N1bWUgdGhpcyBpcyB0aGUgc2FtZSBmb3IgYWxsIGNvcmVzKSBhbmQgdXNlIGl0IHRvCisJCSAqIGRpdmlkZSBOUl9DUFVTLgorCQkgKi8KKwkJY29yZXMgPSAodTMyICopUFRSUkVMT0MoJmlibV9hcmNoaXRlY3R1cmVfdmVjW0lCTV9BUkNIX1ZFQ19OUkNPUkVTX09GRlNFVF0pOworCQlpZiAoKmNvcmVzICE9IE5SX0NQVVMpIHsKKwkJCXByb21fcHJpbnRmKCJXQVJOSU5HICEgIgorCQkJCSAgICAiaWJtX2FyY2hpdGVjdHVyZV92ZWMgc3RydWN0dXJlIGluY29uc2lzdGVudDogMHgleCAhXG4iLAorCQkJCSAgICAqY29yZXMpOworCQl9IGVsc2UgeworCQkJKmNvcmVzID0gTlJfQ1BVUyAvIHByb21fY291bnRfc210X3RocmVhZHMoKTsKKwkJCXByb21fcHJpbnRmKCJNYXggbnVtYmVyIG9mIGNvcmVzIHBhc3NlZCB0byBmaXJtd2FyZTogMHgleFxuIiwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpKmNvcmVzKTsKKwkJfQorCiAJCS8qIHRyeSBjYWxsaW5nIHRoZSBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IG1ldGhvZCAqLwogCQlwcm9tX3ByaW50ZigiQ2FsbGluZyBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0Li4uIik7CiAJCWlmIChjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDMsIDIsICZyZXQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwppbmRleCBlZjE0OTg4Li5kOWIwNTg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIC8qCiAgKiBTZXQgb2YgbXNyIGJpdHMgdGhhdCBnZGIgY2FuIGNoYW5nZSBvbiBiZWhhbGYgb2YgYSBwcm9jZXNzLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAjZGVmaW5lIE1TUl9ERUJVR0NIQU5HRQkwCiAjZWxzZQogI2RlZmluZSBNU1JfREVCVUdDSEFOR0UJKE1TUl9TRSB8IE1TUl9CRSkKQEAgLTcwMyw3ICs3MDMsNyBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFzay0+dGhyZWFkLnJlZ3M7CiAKIAlpZiAocmVncyAhPSBOVUxMKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfQlQ7CiAJCXRhc2stPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JRE0gfCBEQkNSMF9JQzsKIAkJcmVncy0+bXNyIHw9IE1TUl9ERTsKQEAgLTcyMCw3ICs3MjAsNyBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFzay0+dGhyZWFkLnJlZ3M7CiAKIAlpZiAocmVncyAhPSBOVUxMKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUM7CiAJCXRhc2stPnRocmVhZC5kYmNyMCA9IERCQ1IwX0lETSB8IERCQ1IwX0JUOwogCQlyZWdzLT5tc3IgfD0gTVNSX0RFOwpAQCAtNzM3LDE3ICs3MzcsMjUgQEAKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2stPnRocmVhZC5yZWdzOwogCiAJaWYgKHJlZ3MgIT0gTlVMTCkgewotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCQkvKiBJZiBEQUMgZG9uJ3QgY2xlYXIgREJDUk9fSURNIG9yIE1TUl9ERSAqLwotCQlpZiAodGFzay0+dGhyZWFkLmRhYnIpCi0JCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfihEQkNSMF9JQyB8IERCQ1IwX0JUKTsKLQkJZWxzZSB7Ci0JCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfihEQkNSMF9JQyB8IERCQ1IwX0JUIHwgREJDUjBfSURNKTsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJCS8qCisJCSAqIFRoZSBsb2dpYyB0byBkaXNhYmxlIHNpbmdsZSBzdGVwcGluZyBzaG91bGQgYmUgYXMKKwkJICogc2ltcGxlIGFzIHR1cm5pbmcgb2ZmIHRoZSBJbnN0cnVjdGlvbiBDb21wbGV0ZSBmbGFnLgorCQkgKiBBbmQsIGFmdGVyIGRvaW5nIHNvLCBpZiBhbGwgZGVidWcgZmxhZ3MgYXJlIG9mZiwgdHVybgorCQkgKiBvZmYgREJDUjAoSURNKSBhbmQgTVNSKERFKSAuLi4uIFRvcmV6CisJCSAqLworCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lDOworCQkvKgorCQkgKiBUZXN0IHRvIHNlZSBpZiBhbnkgb2YgdGhlIERCQ1JfQUNUSVZFX0VWRU5UUyBiaXRzIGFyZSBzZXQuCisJCSAqLworCQlpZiAoIURCQ1JfQUNUSVZFX0VWRU5UUyh0YXNrLT50aHJlYWQuZGJjcjAsCisJCQkJCXRhc2stPnRocmVhZC5kYmNyMSkpIHsKKwkJCS8qCisJCQkgKiBBbGwgZGVidWcgZXZlbnRzIHdlcmUgb2ZmLi4uLi4KKwkJCSAqLworCQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JRE07CiAJCQlyZWdzLT5tc3IgJj0gfk1TUl9ERTsKIAkJfQotI2VsaWYgZGVmaW5lZChDT05GSUdfNDB4KQotCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfihEQkNSMF9JQyB8IERCQ1IwX0JUIHwgREJDUjBfSURNKTsKLQkJcmVncy0+bXNyICY9IH5NU1JfREU7CiAjZWxzZQogCQlyZWdzLT5tc3IgJj0gfihNU1JfU0UgfCBNU1JfQkUpOwogI2VuZGlmCkBAIC03NjksOCArNzc3LDcgQEAKIAlpZiAoKGRhdGEgJiB+MHg3VUwpID49IFRBU0tfU0laRSkKIAkJcmV0dXJuIC1FSU87CiAKLSNpZm5kZWYgQ09ORklHX0JPT0tFCi0KKyNpZm5kZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCS8qIEZvciBwcm9jZXNzb3JzIHVzaW5nIERBQlIgKGkuZS4gOTcwKSwgdGhlIGJvdHRvbSAzIGJpdHMgYXJlIGZsYWdzLgogCSAqICBJdCB3YXMgYXNzdW1lZCwgb24gcHJldmlvdXMgaW1wbGVtZW50YXRpb25zLCB0aGF0IDMgYml0cyB3ZXJlCiAJICogIHBhc3NlZCB0b2dldGhlciB3aXRoIHRoZSBkYXRhIGFkZHJlc3MsIGZpdHRpbmcgdGhlIGRlc2lnbiBvZiB0aGUKQEAgLTc4OSwyMSArNzk2LDIyIEBACiAKIAkvKiBNb3ZlIGNvbnRlbnRzIHRvIHRoZSBEQUJSIHJlZ2lzdGVyICovCiAJdGFzay0+dGhyZWFkLmRhYnIgPSBkYXRhOwotCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKLQorI2Vsc2UgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLwogCS8qIEFzIGRlc2NyaWJlZCBhYm92ZSwgaXQgd2FzIGFzc3VtZWQgMyBiaXRzIHdlcmUgcGFzc2VkIHdpdGggdGhlIGRhdGEKIAkgKiAgYWRkcmVzcywgYnV0IHdlIHdpbGwgYXNzdW1lIG9ubHkgdGhlIG1vZGUgYml0cyB3aWxsIGJlIHBhc3NlZAogCSAqICBhcyB0byBub3QgY2F1c2UgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyBmb3IgREFDLWJhc2VkIHByb2Nlc3NvcnMuCiAJICovCiAKIAkvKiBEQUMncyBob2xkIHRoZSB3aG9sZSBhZGRyZXNzIHdpdGhvdXQgYW55IG1vZGUgZmxhZ3MgKi8KLQl0YXNrLT50aHJlYWQuZGFiciA9IGRhdGEgJiB+MHgzVUw7CisJdGFzay0+dGhyZWFkLmRhYzEgPSBkYXRhICYgfjB4M1VMOwogCi0JaWYgKHRhc2stPnRocmVhZC5kYWJyID09IDApIHsKLQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH4oREJTUl9EQUMxUiB8IERCU1JfREFDMVcgfCBEQkNSMF9JRE0pOwotCQl0YXNrLT50aHJlYWQucmVncy0+bXNyICY9IH5NU1JfREU7CisJaWYgKHRhc2stPnRocmVhZC5kYWMxID09IDApIHsKKwkJZGJjcl9kYWModGFzaykgJj0gfihEQkNSX0RBQzFSIHwgREJDUl9EQUMxVyk7CisJCWlmICghREJDUl9BQ1RJVkVfRVZFTlRTKHRhc2stPnRocmVhZC5kYmNyMCwKKwkJCQkJdGFzay0+dGhyZWFkLmRiY3IxKSkgeworCQkJdGFzay0+dGhyZWFkLnJlZ3MtPm1zciAmPSB+TVNSX0RFOworCQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JRE07CisJCX0KIAkJcmV0dXJuIDA7CiAJfQogCkBAIC04MTQsMTcgKzgyMiwxNyBAQAogCiAJLyogU2V0IHRoZSBJbnRlcm5hbCBEZWJ1Z2dpbmcgZmxhZyAoSURNIGJpdCAxKSBmb3IgdGhlIERCQ1IwCiAJICAgcmVnaXN0ZXIgKi8KLQl0YXNrLT50aHJlYWQuZGJjcjAgPSBEQkNSMF9JRE07CisJdGFzay0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lETTsKIAogCS8qIENoZWNrIGZvciB3cml0ZSBhbmQgcmVhZCBmbGFncyBhbmQgc2V0IERCQ1IwCiAJICAgYWNjb3JkaW5nbHkgKi8KKwlkYmNyX2RhYyh0YXNrKSAmPSB+KERCQ1JfREFDMVJ8REJDUl9EQUMxVyk7CiAJaWYgKGRhdGEgJiAweDFVTCkKLQkJdGFzay0+dGhyZWFkLmRiY3IwIHw9IERCU1JfREFDMVI7CisJCWRiY3JfZGFjKHRhc2spIHw9IERCQ1JfREFDMVI7CiAJaWYgKGRhdGEgJiAweDJVTCkKLQkJdGFzay0+dGhyZWFkLmRiY3IwIHw9IERCU1JfREFDMVc7Ci0KKwkJZGJjcl9kYWModGFzaykgfD0gREJDUl9EQUMxVzsKIAl0YXNrLT50aHJlYWQucmVncy0+bXNyIHw9IE1TUl9ERTsKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtODM5LDYgKzg0NywzOTQgQEAKIAl1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoY2hpbGQpOwogfQogCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworc3RhdGljIGxvbmcgc2V0X2ludHJ1Y3Rpb25fYnAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJCSAgICAgIHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCAqYnBfaW5mbykKK3sKKwlpbnQgc2xvdDsKKwlpbnQgc2xvdDFfaW5fdXNlID0gKChjaGlsZC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSUFDMSkgIT0gMCk7CisJaW50IHNsb3QyX2luX3VzZSA9ICgoY2hpbGQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lBQzIpICE9IDApOworCWludCBzbG90M19pbl91c2UgPSAoKGNoaWxkLT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JQUMzKSAhPSAwKTsKKwlpbnQgc2xvdDRfaW5fdXNlID0gKChjaGlsZC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSUFDNCkgIT0gMCk7CisKKwlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMxMk1PREUpCisJCXNsb3QyX2luX3VzZSA9IDE7CisJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMzRNT0RFKQorCQlzbG90NF9pbl91c2UgPSAxOworCisJaWYgKGJwX2luZm8tPmFkZHIgPj0gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChicF9pbmZvLT5hZGRyX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCkgeworCisJCS8qIE1ha2Ugc3VyZSByYW5nZSBpcyB2YWxpZC4gKi8KKwkJaWYgKGJwX2luZm8tPmFkZHIyID49IFRBU0tfU0laRSkKKwkJCXJldHVybiAtRUlPOworCisJCS8qIFdlIG5lZWQgYSBwYWlyIG9mIElBQyByZWdzaXN0ZXJzICovCisJCWlmICgoIXNsb3QxX2luX3VzZSkgJiYgKCFzbG90Ml9pbl91c2UpKSB7CisJCQlzbG90ID0gMTsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMSA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmlhYzIgPSBicF9pbmZvLT5hZGRyMjsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDMTsKKwkJCWlmIChicF9pbmZvLT5hZGRyX21vZGUgPT0KKwkJCQkJUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9FWENMVVNJVkUpCisJCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpIHw9IERCQ1JfSUFDMTJYOworCQkJZWxzZQorCQkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSB8PSBEQkNSX0lBQzEySTsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgorCQl9IGVsc2UgaWYgKCghc2xvdDNfaW5fdXNlKSAmJiAoIXNsb3Q0X2luX3VzZSkpIHsKKwkJCXNsb3QgPSAzOworCQkJY2hpbGQtPnRocmVhZC5pYWMzID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuaWFjNCA9IGJwX2luZm8tPmFkZHIyOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUMzOworCQkJaWYgKGJwX2luZm8tPmFkZHJfbW9kZSA9PQorCQkJCQlQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0VYQ0xVU0lWRSkKKwkJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgfD0gREJDUl9JQUMzNFg7CisJCQllbHNlCisJCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpIHw9IERCQ1JfSUFDMzRJOworI2VuZGlmCisJCX0gZWxzZQorCQkJcmV0dXJuIC1FTk9TUEM7CisJfSBlbHNlIHsKKwkJLyogV2Ugb25seSBuZWVkIG9uZS4gIElmIHBvc3NpYmxlIGxlYXZlIGEgcGFpciBmcmVlIGluCisJCSAqIGNhc2UgYSByYW5nZSBpcyBuZWVkZWQgbGF0ZXIKKwkJICovCisJCWlmICghc2xvdDFfaW5fdXNlKSB7CisJCQkvKgorCQkJICogRG9uJ3QgdXNlIGlhYzEgaWYgaWFjMS1pYWMyIGFyZSBmcmVlIGFuZCBlaXRoZXIKKwkJCSAqIGlhYzMgb3IgaWFjNCAoYnV0IG5vdCBib3RoKSBhcmUgZnJlZQorCQkJICovCisJCQlpZiAoc2xvdDJfaW5fdXNlIHx8IChzbG90M19pbl91c2UgPT0gc2xvdDRfaW5fdXNlKSkgeworCQkJCXNsb3QgPSAxOworCQkJCWNoaWxkLT50aHJlYWQuaWFjMSA9IGJwX2luZm8tPmFkZHI7CisJCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUMxOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCWlmICghc2xvdDJfaW5fdXNlKSB7CisJCQlzbG90ID0gMjsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMiA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwkJfSBlbHNlIGlmICghc2xvdDNfaW5fdXNlKSB7CisJCQlzbG90ID0gMzsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMyA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzM7CisJCX0gZWxzZSBpZiAoIXNsb3Q0X2luX3VzZSkgeworCQkJc2xvdCA9IDQ7CisJCQljaGlsZC0+dGhyZWFkLmlhYzQgPSBicF9pbmZvLT5hZGRyOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUM0OworI2VuZGlmCisJCX0gZWxzZQorCQkJcmV0dXJuIC1FTk9TUEM7CisJfQorb3V0OgorCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSURNOworCWNoaWxkLT50aHJlYWQucmVncy0+bXNyIHw9IE1TUl9ERTsKKworCXJldHVybiBzbG90OworfQorCitzdGF0aWMgaW50IGRlbF9pbnN0cnVjdGlvbl9icChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgc2xvdCkKK3sKKwlzd2l0Y2ggKHNsb3QpIHsKKwljYXNlIDE6CisJCWlmIChjaGlsZC0+dGhyZWFkLmlhYzEgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzEyTU9ERSkgeworCQkJLyogYWRkcmVzcyByYW5nZSAtIGNsZWFyIHNsb3RzIDEgJiAyICovCisJCQljaGlsZC0+dGhyZWFkLmlhYzIgPSAwOworCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICY9IH5EQkNSX0lBQzEyTU9ERTsKKwkJfQorCQljaGlsZC0+dGhyZWFkLmlhYzEgPSAwOworCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMxOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmIChjaGlsZC0+dGhyZWFkLmlhYzIgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzEyTU9ERSkKKwkJCS8qIHVzZWQgaW4gYSByYW5nZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNoaWxkLT50aHJlYWQuaWFjMiA9IDA7CisJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzI7CisJCWJyZWFrOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJY2FzZSAzOgorCQlpZiAoY2hpbGQtPnRocmVhZC5pYWMzID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMzNE1PREUpIHsKKwkJCS8qIGFkZHJlc3MgcmFuZ2UgLSBjbGVhciBzbG90cyAzICYgNCAqLworCQkJY2hpbGQtPnRocmVhZC5pYWM0ID0gMDsKKwkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmPSB+REJDUl9JQUMzNE1PREU7CisJCX0KKwkJY2hpbGQtPnRocmVhZC5pYWMzID0gMDsKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAoY2hpbGQtPnRocmVhZC5pYWM0ID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMzNE1PREUpCisJCQkvKiBVc2VkIGluIGEgcmFuZ2UgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQljaGlsZC0+dGhyZWFkLmlhYzQgPSAwOworCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUM0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfZGFjKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCAqYnBfaW5mbykKK3sKKwlpbnQgYnl0ZV9lbmFibGUgPQorCQkoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgPj4gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX1NISUZUKQorCQkmIDB4ZjsKKwlpbnQgY29uZGl0aW9uX21vZGUgPQorCQlicF9pbmZvLT5jb25kaXRpb25fbW9kZSAmIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFOworCWludCBzbG90OworCisJaWYgKGJ5dGVfZW5hYmxlICYmIChjb25kaXRpb25fbW9kZSA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYnBfaW5mby0+YWRkciA+PSBUQVNLX1NJWkUpCisJCXJldHVybiAtRUlPOworCisJaWYgKChkYmNyX2RhYyhjaGlsZCkgJiAoREJDUl9EQUMxUiB8IERCQ1JfREFDMVcpKSA9PSAwKSB7CisJCXNsb3QgPSAxOworCQlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEKQorCQkJZGJjcl9kYWMoY2hpbGQpIHw9IERCQ1JfREFDMVI7CisJCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCQkJZGJjcl9kYWMoY2hpbGQpIHw9IERCQ1JfREFDMVc7CisJCWNoaWxkLT50aHJlYWQuZGFjMSA9ICh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwkJaWYgKGJ5dGVfZW5hYmxlKSB7CisJCQljaGlsZC0+dGhyZWFkLmR2YzEgPQorCQkJCSh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmNvbmRpdGlvbl92YWx1ZTsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjIgfD0KKwkJCQkoKGJ5dGVfZW5hYmxlIDw8IERCQ1IyX0RWQzFCRV9TSElGVCkgfAorCQkJCSAoY29uZGl0aW9uX21vZGUgPDwgREJDUjJfRFZDMU1fU0hJRlQpKTsKKwkJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJfSBlbHNlIGlmIChjaGlsZC0+dGhyZWFkLmRiY3IyICYgREJDUjJfREFDMTJNT0RFKSB7CisJCS8qIEJvdGggZGFjMSBhbmQgZGFjMiBhcmUgcGFydCBvZiBhIHJhbmdlICovCisJCXJldHVybiAtRU5PU1BDOworI2VuZGlmCisJfSBlbHNlIGlmICgoZGJjcl9kYWMoY2hpbGQpICYgKERCQ1JfREFDMlIgfCBEQkNSX0RBQzJXKSkgPT0gMCkgeworCQlzbG90ID0gMjsKKwkJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRCkKKwkJCWRiY3JfZGFjKGNoaWxkKSB8PSBEQkNSX0RBQzJSOworCQlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSkKKwkJCWRiY3JfZGFjKGNoaWxkKSB8PSBEQkNSX0RBQzJXOworCQljaGlsZC0+dGhyZWFkLmRhYzIgPSAodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJCWlmIChieXRlX2VuYWJsZSkgeworCQkJY2hpbGQtPnRocmVhZC5kdmMyID0KKwkJCQkodW5zaWduZWQgbG9uZylicF9pbmZvLT5jb25kaXRpb25fdmFsdWU7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IyIHw9CisJCQkJKChieXRlX2VuYWJsZSA8PCBEQkNSMl9EVkMyQkVfU0hJRlQpIHwKKwkJCQkgKGNvbmRpdGlvbl9tb2RlIDw8IERCQ1IyX0RWQzJNX1NISUZUKSk7CisJCX0KKyNlbmRpZgorCX0gZWxzZQorCQlyZXR1cm4gLUVOT1NQQzsKKwljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lETTsKKwljaGlsZC0+dGhyZWFkLnJlZ3MtPm1zciB8PSBNU1JfREU7CisKKwlyZXR1cm4gc2xvdCArIDQ7Cit9CisKK3N0YXRpYyBpbnQgZGVsX2RhYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgc2xvdCkKK3sKKwlpZiAoc2xvdCA9PSAxKSB7CisJCWlmIChjaGlsZC0+dGhyZWFkLmRhYzEgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWNoaWxkLT50aHJlYWQuZGFjMSA9IDA7CisJCWRiY3JfZGFjKGNoaWxkKSAmPSB+KERCQ1JfREFDMVIgfCBEQkNSX0RBQzFXKTsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwkJaWYgKGNoaWxkLT50aHJlYWQuZGJjcjIgJiBEQkNSMl9EQUMxMk1PREUpIHsKKwkJCWNoaWxkLT50aHJlYWQuZGFjMiA9IDA7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IyICY9IH5EQkNSMl9EQUMxMk1PREU7CisJCX0KKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAmPSB+KERCQ1IyX0RWQzFNIHwgREJDUjJfRFZDMUJFKTsKKyNlbmRpZgorI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJCWNoaWxkLT50aHJlYWQuZHZjMSA9IDA7CisjZW5kaWYKKwl9IGVsc2UgaWYgKHNsb3QgPT0gMikgeworCQlpZiAoY2hpbGQtPnRocmVhZC5kYWMxID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCQlpZiAoY2hpbGQtPnRocmVhZC5kYmNyMiAmIERCQ1IyX0RBQzEyTU9ERSkKKwkJCS8qIFBhcnQgb2YgYSByYW5nZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNoaWxkLT50aHJlYWQuZGJjcjIgJj0gfihEQkNSMl9EVkMyTSB8IERCQ1IyX0RWQzJCRSk7CisjZW5kaWYKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCQljaGlsZC0+dGhyZWFkLmR2YzIgPSAwOworI2VuZGlmCisJCWNoaWxkLT50aHJlYWQuZGFjMiA9IDA7CisJCWRiY3JfZGFjKGNoaWxkKSAmPSB+KERCQ1JfREFDMlIgfCBEQkNSX0RBQzJXKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCisKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKK3N0YXRpYyBpbnQgc2V0X2RhY19yYW5nZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkJIHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCAqYnBfaW5mbykKK3sKKwlpbnQgbW9kZSA9IGJwX2luZm8tPmFkZHJfbW9kZSAmIFBQQ19CUkVBS1BPSU5UX01PREVfTUFTSzsKKworCS8qIFdlIGRvbid0IGFsbG93IHJhbmdlIHdhdGNocG9pbnRzIHRvIGJlIHVzZWQgd2l0aCBEVkMgKi8KKwlpZiAoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBCZXN0IGVmZm9ydCB0byB2ZXJpZnkgdGhlIGFkZHJlc3MgcmFuZ2UuICBUaGUgdXNlci9zdXBlcnZpc29yIGJpdHMKKwkgKiBwcmV2ZW50IHRyYXBwaW5nIGluIGtlcm5lbCBzcGFjZSwgYnV0IGxldCdzIGZhaWwgb24gYW4gb2J2aW91cyBiYWQKKwkgKiByYW5nZS4gIFRoZSBzaW1wbGUgdGVzdCBvbiB0aGUgbWFzayBpcyBub3QgZm9vbC1wcm9vZiwgYW5kIGFueQorCSAqIGV4Y2x1c2l2ZSByYW5nZSB3aWxsIHNwaWxsIG92ZXIgaW50byBrZXJuZWwgc3BhY2UuCisJICovCisJaWYgKGJwX2luZm8tPmFkZHIgPj0gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAobW9kZSA9PSBQUENfQlJFQUtQT0lOVF9NT0RFX01BU0spIHsKKwkJLyoKKwkJICogZGFjMiBpcyBhIGJpdG1hc2suICBEb24ndCBhbGxvdyBhIG1hc2sgdGhhdCBtYWtlcyBhCisJCSAqIGtlcm5lbCBzcGFjZSBhZGRyZXNzIGZyb20gYSB2YWxpZCBkYWMxIHZhbHVlCisJCSAqLworCQlpZiAofigodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyMikgPj0gVEFTS19TSVpFKQorCQkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRm9yIHJhbmdlIGJyZWFrcG9pbnRzLCBhZGRyMiBtdXN0IGFsc28gYmUgYSB2YWxpZCBhZGRyZXNzCisJCSAqLworCQlpZiAoYnBfaW5mby0+YWRkcjIgPj0gVEFTS19TSVpFKQorCQkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGNoaWxkLT50aHJlYWQuZGJjcjAgJgorCSAgICAoREJDUjBfREFDMVIgfCBEQkNSMF9EQUMxVyB8IERCQ1IwX0RBQzJSIHwgREJDUjBfREFDMlcpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQpCisJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gKERCQ1IwX0RBQzFSIHwgREJDUjBfSURNKTsKKwlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSkKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSAoREJDUjBfREFDMVcgfCBEQkNSMF9JRE0pOworCWNoaWxkLT50aHJlYWQuZGFjMSA9IGJwX2luZm8tPmFkZHI7CisJY2hpbGQtPnRocmVhZC5kYWMyID0gYnBfaW5mby0+YWRkcjI7CisJaWYgKG1vZGUgPT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9JTkNMVVNJVkUpCisJCWNoaWxkLT50aHJlYWQuZGJjcjIgIHw9IERCQ1IyX0RBQzEyTTsKKwllbHNlIGlmIChtb2RlID09IFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFKQorCQljaGlsZC0+dGhyZWFkLmRiY3IyICB8PSBEQkNSMl9EQUMxMk1YOworCWVsc2UJLyogUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLICovCisJCWNoaWxkLT50aHJlYWQuZGJjcjIgIHw9IERCQ1IyX0RBQzEyTU07CisJY2hpbGQtPnRocmVhZC5yZWdzLT5tc3IgfD0gTVNSX0RFOworCisJcmV0dXJuIDU7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFICovCisKK3N0YXRpYyBsb25nIHBwY19zZXRfaHdkZWJ1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkgICAgIHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCAqYnBfaW5mbykKK3sKKwlpZiAoYnBfaW5mby0+dmVyc2lvbiAhPSAxKQorCQlyZXR1cm4gLUVOT1RTVVBQOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkvKgorCSAqIENoZWNrIGZvciBpbnZhbGlkIGZsYWdzIGFuZCBjb21iaW5hdGlvbnMKKwkgKi8KKwlpZiAoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSA9PSAwKSB8fAorCSAgICAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgfihQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEUgfAorCQkJCSAgICAgICBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSkgfHwKKwkgICAgKGJwX2luZm8tPmFkZHJfbW9kZSAmIH5QUENfQlJFQUtQT0lOVF9NT0RFX01BU0spIHx8CisJICAgIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSAmCisJICAgICB+KFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFIHwKKwkgICAgICAgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX0FMTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID09IDAKKwlpZiAoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUpCisJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisKKwlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFKSB7CisJCWlmICgoYnBfaW5mby0+dHJpZ2dlcl90eXBlICE9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURSkgfHwKKwkJICAgIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHNldF9pbnRydWN0aW9uX2JwKGNoaWxkLCBicF9pbmZvKTsKKwl9CisJaWYgKGJwX2luZm8tPmFkZHJfbW9kZSA9PSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUKQorCQlyZXR1cm4gc2V0X2RhYyhjaGlsZCwgYnBfaW5mbyk7CisKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwlyZXR1cm4gc2V0X2RhY19yYW5nZShjaGlsZCwgYnBfaW5mbyk7CisjZWxzZQorCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisjZWxzZSAvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyAqLworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IG9uZSBkYXRhIGJyZWFrcG9pbnQKKwkgKi8KKwlpZiAoKChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSA9PSAwKSB8fAorCSAgICAoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIH5QUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSAhPSAwKSB8fAorCSAgICAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICE9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpIHx8CisJICAgIChicF9pbmZvLT5hZGRyX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCkgfHwKKwkgICAgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2hpbGQtPnRocmVhZC5kYWJyKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICgodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyID49IFRBU0tfU0laRSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlsZC0+dGhyZWFkLmRhYnIgPSAodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyOworCisJcmV0dXJuIDE7CisjZW5kaWYgLyogIUNPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgKi8KK30KKworc3RhdGljIGxvbmcgcHBjX2RlbF9od2RlYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQoreworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwlpbnQgcmM7CisKKwlpZiAoZGF0YSA8PSA0KQorCQlyYyA9IGRlbF9pbnN0cnVjdGlvbl9icChjaGlsZCwgKGludClkYXRhKTsKKwllbHNlCisJCXJjID0gZGVsX2RhYyhjaGlsZCwgKGludClkYXRhIC0gNCk7CisKKwlpZiAoIXJjKSB7CisJCWlmICghREJDUl9BQ1RJVkVfRVZFTlRTKGNoaWxkLT50aHJlYWQuZGJjcjAsCisJCQkJCWNoaWxkLT50aHJlYWQuZGJjcjEpKSB7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JRE07CisJCQljaGlsZC0+dGhyZWFkLnJlZ3MtPm1zciAmPSB+TVNSX0RFOworCQl9CisJfQorCXJldHVybiByYzsKKyNlbHNlCisJaWYgKGRhdGEgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoaWxkLT50aHJlYWQuZGFiciA9PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWNoaWxkLT50aHJlYWQuZGFiciA9IDA7CisKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCiAvKgogICogSGVyZSBhcmUgdGhlIG9sZCAibGVnYWN5IiBwb3dlcnBjIHNwZWNpZmljIGdldHJlZ3Mvc2V0cmVncyBwdHJhY2UgY2FsbHMsCiAgKiB3ZSBtYXJrIHRoZW0gYXMgb2Jzb2xldGUgbm93LCB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uCkBAIC05MzIsMTMgKzEzMjgsNzcgQEAKIAkJYnJlYWs7CiAJfQogCisJY2FzZSBQUENfUFRSQUNFX0dFVEhXREJHSU5GTzogeworCQlzdHJ1Y3QgcHBjX2RlYnVnX2luZm8gZGJnaW5mbzsKKworCQlkYmdpbmZvLnZlcnNpb24gPSAxOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkJZGJnaW5mby5udW1faW5zdHJ1Y3Rpb25fYnBzID0gQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUzsKKwkJZGJnaW5mby5udW1fZGF0YV9icHMgPSBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNTOworCQlkYmdpbmZvLm51bV9jb25kaXRpb25fcmVncyA9IENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1M7CisJCWRiZ2luZm8uZGF0YV9icF9hbGlnbm1lbnQgPSA0OworCQlkYmdpbmZvLnNpemVvZl9jb25kaXRpb24gPSA0OworCQlkYmdpbmZvLmZlYXR1cmVzID0gUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9SQU5HRSB8CisJCQkJICAgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9NQVNLOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCQlkYmdpbmZvLmZlYXR1cmVzIHw9CisJCQkJICAgUFBDX0RFQlVHX0ZFQVRVUkVfREFUQV9CUF9SQU5HRSB8CisJCQkJICAgUFBDX0RFQlVHX0ZFQVRVUkVfREFUQV9CUF9NQVNLOworI2VuZGlmCisjZWxzZSAvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworCQlkYmdpbmZvLm51bV9pbnN0cnVjdGlvbl9icHMgPSAwOworCQlkYmdpbmZvLm51bV9kYXRhX2JwcyA9IDE7CisJCWRiZ2luZm8ubnVtX2NvbmRpdGlvbl9yZWdzID0gMDsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkJZGJnaW5mby5kYXRhX2JwX2FsaWdubWVudCA9IDg7CisjZWxzZQorCQlkYmdpbmZvLmRhdGFfYnBfYWxpZ25tZW50ID0gNDsKKyNlbmRpZgorCQlkYmdpbmZvLnNpemVvZl9jb25kaXRpb24gPSAwOworCQlkYmdpbmZvLmZlYXR1cmVzID0gMDsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkYXRhLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBjX2RlYnVnX2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSBfX2NvcHlfdG9fdXNlcigoc3RydWN0IHBwY19kZWJ1Z19pbmZvIF9fdXNlciAqKWRhdGEsCisJCQkJICAgICAmZGJnaW5mbywgc2l6ZW9mKHN0cnVjdCBwcGNfZGVidWdfaW5mbykpID8KKwkJICAgICAgLUVGQVVMVCA6IDA7CisJCWJyZWFrOworCX0KKworCWNhc2UgUFBDX1BUUkFDRV9TRVRIV0RFQlVHOiB7CisJCXN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCBicF9pbmZvOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBkYXRhLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSBfX2NvcHlfZnJvbV91c2VyKCZicF9pbmZvLAorCQkJCSAgICAgICAoc3RydWN0IHBwY19od19icmVha3BvaW50IF9fdXNlciAqKWRhdGEsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQpKSA/CisJCSAgICAgIC1FRkFVTFQgOiAwOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHBwY19zZXRfaHdkZWJ1ZyhjaGlsZCwgJmJwX2luZm8pOworCQlicmVhazsKKwl9CisKKwljYXNlIFBQQ19QVFJBQ0VfREVMSFdERUJVRzogeworCQlyZXQgPSBwcGNfZGVsX2h3ZGVidWcoY2hpbGQsIGFkZHIsIGRhdGEpOworCQlicmVhazsKKwl9CisKIAljYXNlIFBUUkFDRV9HRVRfREVCVUdSRUc6IHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJLyogV2Ugb25seSBzdXBwb3J0IG9uZSBEQUJSIGFuZCBubyBJQUJSUyBhdCB0aGUgbW9tZW50ICovCiAJCWlmIChhZGRyID4gMCkKIAkJCWJyZWFrOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkJcmV0ID0gcHV0X3VzZXIoY2hpbGQtPnRocmVhZC5kYWMxLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworI2Vsc2UKIAkJcmV0ID0gcHV0X3VzZXIoY2hpbGQtPnRocmVhZC5kYWJyLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworI2VuZGlmCiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMDBiNTA3OC4uYTBhZmI1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCkBAIC0xNDAsMTcgKzE0MCwxNSBAQAogCQlyZXR1cm4gMDsgICAgICAgICAgICAgICAvKiBubyBzaWduYWxzIGRlbGl2ZXJlZCAqLwogCX0KIAorI2lmbmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAgICAgICAgIC8qCiAJICogUmVlbmFibGUgdGhlIERBQlIgYmVmb3JlIGRlbGl2ZXJpbmcgdGhlIHNpZ25hbCB0bwogCSAqIHVzZXIgc3BhY2UuIFRoZSBEQUJSIHdpbGwgaGF2ZSBiZWVuIGNsZWFyZWQgaWYgaXQKIAkgKiB0cmlnZ2VyZWQgaW5zaWRlIHRoZSBrZXJuZWwuCiAJICovCi0JaWYgKGN1cnJlbnQtPnRocmVhZC5kYWJyKSB7CisJaWYgKGN1cnJlbnQtPnRocmVhZC5kYWJyKQogCQlzZXRfZGFicihjdXJyZW50LT50aHJlYWQuZGFicik7Ci0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JCW10c3ByKFNQUk5fREJDUjAsIGN1cnJlbnQtPnRocmVhZC5kYmNyMCk7CiAjZW5kaWYKLQl9CiAKIAlpZiAoaXMzMikgewogICAgICAgICAJaWYgKGthLnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IGQ2NzA0MjkuLjI2NjYxMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtMTA3OCw3ICsxMDc4LDcgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKIAl1bnNpZ25lZCBsb25nIG5ld19tc3IgPSByZWdzLT5tc3I7Ci0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJdW5zaWduZWQgbG9uZyBuZXdfZGJjcjAgPSBjdXJyZW50LT50aHJlYWQuZGJjcjA7CiAjZW5kaWYKIApAQCAtMTA4NywxMyArMTA4NywxNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXN3aXRjaCAob3AuZGJnX3R5cGUpIHsKIAkJY2FzZSBTSUdfREJHX1NJTkdMRV9TVEVQUElORzoKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJCWlmIChvcC5kYmdfdmFsdWUpIHsKIAkJCQluZXdfbXNyIHw9IE1TUl9ERTsKIAkJCQluZXdfZGJjcjAgfD0gKERCQ1IwX0lETSB8IERCQ1IwX0lDKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbmV3X21zciAmPSB+TVNSX0RFOwotCQkJCW5ld19kYmNyMCAmPSB+KERCQ1IwX0lETSB8IERCQ1IwX0lDKTsKKwkJCQluZXdfZGJjcjAgJj0gfkRCQ1IwX0lDOworCQkJCWlmICghREJDUl9BQ1RJVkVfRVZFTlRTKG5ld19kYmNyMCwKKwkJCQkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMSkpIHsKKwkJCQkJbmV3X21zciAmPSB+TVNSX0RFOworCQkJCQluZXdfZGJjcjAgJj0gfkRCQ1IwX0lETTsKKwkJCQl9CiAJCQl9CiAjZWxzZQogCQkJaWYgKG9wLmRiZ192YWx1ZSkKQEAgLTExMDMsNyArMTEwNyw3IEBACiAjZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIFNJR19EQkdfQlJBTkNIX1RSQUNJTkc6Ci0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCQlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCiAJCQlpZiAob3AuZGJnX3ZhbHVlKQpAQCAtMTEyNCw3ICsxMTI4LDcgQEAKIAkgICBmYWlsdXJlIGlzIGEgcHJvYmxlbSwgYW55d2F5LCBhbmQgaXQncyB2ZXJ5IHVubGlrZWx5IHVubGVzcwogCSAgIHRoZSB1c2VyIGlzIHJlYWxseSBkb2luZyBzb21ldGhpbmcgd3JvbmcuICovCiAJcmVncy0+bXNyID0gbmV3X21zcjsKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAljdXJyZW50LT50aHJlYWQuZGJjcjAgPSBuZXdfZGJjcjA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA2YzYwOTNkLi4xYjE2YjlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMjY1LDggKzI2NSw4IEBACiAJCWFjY291bnRfc3lzdGVtX3RpbWUodHNrLCAwLCBkZWx0YSwgZGVsdGFzY2FsZWQpOwogCWVsc2UKIAkJYWNjb3VudF9pZGxlX3RpbWUoZGVsdGEpOwotCXBlcl9jcHUoY3B1dGltZV9sYXN0X2RlbHRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gZGVsdGE7Ci0JcGVyX2NwdShjcHV0aW1lX3NjYWxlZF9sYXN0X2RlbHRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gZGVsdGFzY2FsZWQ7CisJX19nZXRfY3B1X3ZhcihjcHV0aW1lX2xhc3RfZGVsdGEpID0gZGVsdGE7CisJX19nZXRfY3B1X3ZhcihjcHV0aW1lX3NjYWxlZF9sYXN0X2RlbHRhKSA9IGRlbHRhc2NhbGVkOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjY291bnRfc3lzdGVtX3Z0aW1lKTsKQEAgLTU3NSw2ICs1NzUsOCBAQAogCiAJdHJhY2VfdGltZXJfaW50ZXJydXB0X2VudHJ5KHJlZ3MpOwogCisJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkudGltZXJfaXJxcysrOworCiAJLyogRW5zdXJlIGEgcG9zaXRpdmUgdmFsdWUgaXMgd3JpdHRlbiB0byB0aGUgZGVjcmVtZW50ZXIsIG9yIGVsc2UKIAkgKiBzb21lIENQVXMgd2lsbCBjb250aW51dWUgdG8gdGFrZSBkZWNyZW1lbnRlciBleGNlcHRpb25zICovCiAJc2V0X2RlYyhERUNSRU1FTlRFUl9NQVgpOwpAQCAtOTM1LDggKzkzNyw4IEBACiAJKmRlYyA9IGRlY3JlbWVudGVyX2Nsb2NrZXZlbnQ7CiAJZGVjLT5jcHVtYXNrID0gY3B1bWFza19vZihjcHUpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgImNsb2NrZXZlbnQ6ICVzIG11bHRbJXhdIHNoaWZ0WyVkXSBjcHVbJWRdXG4iLAotCSAgICAgICBkZWMtPm5hbWUsIGRlYy0+bXVsdCwgZGVjLT5zaGlmdCwgY3B1KTsKKwlwcmludGtfb25jZShLRVJOX0RFQlVHICJjbG9ja2V2ZW50OiAlcyBtdWx0WyV4XSBzaGlmdFslZF0gY3B1WyVkXVxuIiwKKwkJICAgIGRlYy0+bmFtZSwgZGVjLT5tdWx0LCBkZWMtPnNoaWZ0LCBjcHUpOwogCiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGRlYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggZDA2OWZmOC4uNjk2NjI2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtNjAsMTMgKzYwLDEzIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLWludCAoKl9fZGVidWdnZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfaXBpKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX2JwdCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9zc3RlcCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9pYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX2RhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfZmF1bHRfaGFuZGxlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50ICgqX19kZWJ1Z2dlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2lwaSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2JwdCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX3NzdGVwKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfaWFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2RhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OworaW50ICgqX19kZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKIAogRVhQT1JUX1NZTUJPTChfX2RlYnVnZ2VyKTsKIEVYUE9SVF9TWU1CT0woX19kZWJ1Z2dlcl9pcGkpOwpAQCAtMTAyLDExICsxMDIsMTEgQEAKIGludCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpCiB7CiAJc3RhdGljIHN0cnVjdCB7Ci0JCXNwaW5sb2NrX3QgbG9jazsKKwkJcmF3X3NwaW5sb2NrX3QgbG9jazsKIAkJdTMyIGxvY2tfb3duZXI7CiAJCWludCBsb2NrX293bmVyX2RlcHRoOwogCX0gZGllID0gewotCQkubG9jayA9CQkJX19TUElOX0xPQ0tfVU5MT0NLRUQoZGllLmxvY2spLAorCQkubG9jayA9CQkJX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKGRpZS5sb2NrKSwKIAkJLmxvY2tfb3duZXIgPQkJLTEsCiAJCS5sb2NrX293bmVyX2RlcHRoID0JMAogCX07CkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCWlmIChkaWUubG9ja19vd25lciAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CiAJCWNvbnNvbGVfdmVyYm9zZSgpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGllLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkaWUubG9jaywgZmxhZ3MpOwogCQlkaWUubG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJZGllLmxvY2tfb3duZXJfZGVwdGggPSAwOwogCQlidXN0X3NwaW5sb2NrcygxKTsKQEAgLTE0Niw2ICsxNDYsMTEgQEAKICNlbmRpZgogCQlwcmludGsoIiVzXG4iLCBwcGNfbWQubmFtZSA/IHBwY19tZC5uYW1lIDogIiIpOwogCisJCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKKwkJaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgZXJyLCAyNTUsCisJCQkgICAgICAgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm4gMTsKKwogCQlwcmludF9tb2R1bGVzKCk7CiAJCXNob3dfcmVncyhyZWdzKTsKIAl9IGVsc2UgewpAQCAtMTU1LDcgKzE2MCw3IEBACiAJYnVzdF9zcGlubG9ja3MoMCk7CiAJZGllLmxvY2tfb3duZXIgPSAtMTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWUubG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWUubG9jaywgZmxhZ3MpOwogCiAJaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSB8fAogCQlrZXhlY19zcl9hY3RpdmF0ZWQoc21wX3Byb2Nlc3Nvcl9pZCgpKSkKQEAgLTI5NCw3ICsyOTksNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAvKiBPbiA0eHgsIHRoZSByZWFzb24gZm9yIHRoZSBtYWNoaW5lIGNoZWNrIG9yIHByb2dyYW0gZXhjZXB0aW9uCiAgICBpcyBpbiB0aGUgRVNSLiAqLwogI2RlZmluZSBnZXRfcmVhc29uKHJlZ3MpCSgocmVncyktPmRzaXNyKQpAQCAtNDc4LDYgKzQ4Myw4IEBACiB7CiAJaW50IHJlY292ZXIgPSAwOwogCisJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkubWNlX2V4Y2VwdGlvbnMrKzsKKwogCS8qIFNlZSBpZiBhbnkgbWFjaGluZSBkZXBlbmRlbnQgY2FsbHMuIEluIHRoZW9yeSwgd2Ugd291bGQgd2FudAogCSAqIHRvIGNhbGwgdGhlIENQVSBmaXJzdCwgYW5kIGNhbGwgdGhlIHBwY19tZC4gb25lIGlmIHRoZSBDUFUKIAkgKiBvbmUgcmV0dXJucyBhIHBvc2l0aXZlIG51bWJlci4gSG93ZXZlciB0aGVyZSBpcyBleGlzdGluZyBjb2RlCkBAIC05NjAsNiArOTY3LDggQEAKIAogdm9pZCBwZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5wbXVfaXJxcysrOworCiAJcGVyZl9pcnEocmVncyk7CiB9CiAKQEAgLTEwMjQsMTAgKzEwMzMsNjkgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfOHh4ICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK3N0YXRpYyB2b2lkIGhhbmRsZV9kZWJ1ZyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBkZWJ1Z19zdGF0dXMpCit7CisJaW50IGNoYW5nZWQgPSAwOworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUgZGVidWcgZXZlbnQsIGNsZWFyIHRoZQorCSAqIGV2ZW50IGZsYWdzIGFuZCBzZW5kIGEgdHJhcCB0byB0aGUgaGFuZGxlci4gVG9yZXoKKwkgKi8KKwlpZiAoZGVidWdfc3RhdHVzICYgKERCU1JfREFDMVIgfCBEQlNSX0RBQzFXKSkgeworCQlkYmNyX2RhYyhjdXJyZW50KSAmPSB+KERCQ1JfREFDMVIgfCBEQkNSX0RBQzFXKTsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IyICY9IH5EQkNSMl9EQUMxMk1PREU7CisjZW5kaWYKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fREFDMSksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDUpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfSAgZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgKERCU1JfREFDMlIgfCBEQlNSX0RBQzJXKSkgeworCQlkYmNyX2RhYyhjdXJyZW50KSAmPSB+KERCQ1JfREFDMlIgfCBEQkNSX0RBQzJXKTsKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fREFDMiksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDYpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfSAgZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgREJTUl9JQUMxKSB7CisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMTsKKwkJZGJjcl9pYWNfcmFuZ2UoY3VycmVudCkgJj0gfkRCQ1JfSUFDMTJNT0RFOworCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9JQUMxKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgMSk7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiBEQlNSX0lBQzIpIHsKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMyOworCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9JQUMyKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgMik7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiBEQlNSX0lBQzMpIHsKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMzOworCQlkYmNyX2lhY19yYW5nZShjdXJyZW50KSAmPSB+REJDUl9JQUMzNE1PREU7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0lBQzMpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICAzKTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0gIGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIERCU1JfSUFDNCkgeworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzQ7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0lBQzQpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICA0KTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0KKwkvKgorCSAqIEF0IHRoZSBwb2ludCB0aGlzIHJvdXRpbmUgd2FzIGNhbGxlZCwgdGhlIE1TUihERSkgd2FzIHR1cm5lZCBvZmYuCisJICogQ2hlY2sgYWxsIG90aGVyIGRlYnVnIGZsYWdzIGFuZCBzZWUgaWYgdGhhdCBiaXQgbmVlZHMgdG8gYmUgdHVybmVkCisJICogYmFjayBvbiBvciBub3QuCisJICovCisJaWYgKERCQ1JfQUNUSVZFX0VWRU5UUyhjdXJyZW50LT50aHJlYWQuZGJjcjAsIGN1cnJlbnQtPnRocmVhZC5kYmNyMSkpCisJCXJlZ3MtPm1zciB8PSBNU1JfREU7CisJZWxzZQorCQkvKiBNYWtlIHN1cmUgdGhlIElETSBmbGFnIGlzIG9mZiAqLworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKKworCWlmIChjaGFuZ2VkICYgMHgwMSkKKwkJbXRzcHIoU1BSTl9EQkNSMCwgY3VycmVudC0+dGhyZWFkLmRiY3IwKTsKK30KIAogdm9pZCBfX2twcm9iZXMgRGVidWdFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZGVidWdfc3RhdHVzKQogeworCWN1cnJlbnQtPnRocmVhZC5kYnNyID0gZGVidWdfc3RhdHVzOworCiAJLyogSGFjayBhbGVydDogT24gQm9va0UsIEJyYW5jaCBUYWtlbiBzdG9wcyBvbiB0aGUgYnJhbmNoIGl0c2VsZiwgd2hpbGUKIAkgKiBvbiBzZXJ2ZXIsIGl0IHN0b3BzIG9uIHRoZSB0YXJnZXQgb2YgdGhlIGJyYW5jaC4gSW4gb3JkZXIgdG8gc2ltdWxhdGUKIAkgKiB0aGUgc2VydmVyIGJlaGF2aW91ciwgd2UgdGh1cyByZXN0YXJ0IHJpZ2h0IGF3YXkgd2l0aCBhIHNpbmdsZSBzdGVwCkBAIC0xMDcxLDI5ICsxMTM5LDIzIEBACiAJCWlmIChkZWJ1Z2dlcl9zc3RlcChyZWdzKSkKIAkJCXJldHVybjsKIAotCQlpZiAodXNlcl9tb2RlKHJlZ3MpKQotCQkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH4oREJDUjBfSUMpOworCQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CisJCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lDOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkJCWlmIChEQkNSX0FDVElWRV9FVkVOVFMoY3VycmVudC0+dGhyZWFkLmRiY3IwLAorCQkJCQkgICAgICAgY3VycmVudC0+dGhyZWFkLmRiY3IxKSkKKwkJCQlyZWdzLT5tc3IgfD0gTVNSX0RFOworCQkJZWxzZQorCQkJCS8qIE1ha2Ugc3VyZSB0aGUgSURNIGJpdCBpcyBvZmYgKi8KKwkJCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKKyNlbmRpZgorCQl9CiAKIAkJX2V4Y2VwdGlvbihTSUdUUkFQLCByZWdzLCBUUkFQX1RSQUNFLCByZWdzLT5uaXApOwotCX0gZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgKERCU1JfREFDMVIgfCBEQlNSX0RBQzFXKSkgewotCQlyZWdzLT5tc3IgJj0gfk1TUl9ERTsKLQotCQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7Ci0JCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfihEQlNSX0RBQzFSIHwgREJTUl9EQUMxVyB8Ci0JCQkJCQkJCURCQ1IwX0lETSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBEaXNhYmxlIERBQyBpbnRlcnVwdHMgKi8KLQkJCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApICYgfihEQlNSX0RBQzFSIHwKLQkJCQkJCURCU1JfREFDMVcgfCBEQkNSMF9JRE0pKTsKLQotCQkJLyogQ2xlYXIgdGhlIERBQyBldmVudCAqLwotCQkJbXRzcHIoU1BSTl9EQlNSLCAoREJTUl9EQUMxUiB8IERCU1JfREFDMVcpKTsKLQkJfQotCQkvKiBTZXR1cCBhbmQgc2VuZCB0aGUgdHJhcCB0byB0aGUgaGFuZGxlciAqLwotCQlkb19kYWJyKHJlZ3MsIG1mc3ByKFNQUk5fREFDMSksIGRlYnVnX3N0YXR1cyk7Ci0JfQorCX0gZWxzZQorCQloYW5kbGVfZGVidWcocmVncywgZGVidWdfc3RhdHVzKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfNHh4IHx8IENPTkZJR19CT09LRSAqLworI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAogI2lmICFkZWZpbmVkKENPTkZJR19UQVVfSU5UKQogdm9pZCBUQVVFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKaW5kZXggZTY4YmVhYy4uNGQ0ZWViOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwpAQCAtNDMsNjIgKzQzLDYyIEBACiAJbGQJcjcsMTYocjQpCiAJbGR1CXI4LDI0KHI0KQogMToJc3RkCXI1LDgocjMpCi0JbGQJcjksOChyNCkKIAlzdGQJcjYsMTYocjMpCisJbGQJcjksOChyNCkKIAlsZAlyMTAsMTYocjQpCiAJc3RkCXI3LDI0KHIzKQotCWxkCXIxMSwyNChyNCkKIAlzdGQJcjgsMzIocjMpCisJbGQJcjExLDI0KHI0KQogCWxkCXIxMiwzMihyNCkKIAlzdGQJcjksNDAocjMpCi0JbGQJcjUsNDAocjQpCiAJc3RkCXIxMCw0OChyMykKKwlsZAlyNSw0MChyNCkKIAlsZAlyNiw0OChyNCkKIAlzdGQJcjExLDU2KHIzKQotCWxkCXI3LDU2KHI0KQogCXN0ZAlyMTIsNjQocjMpCisJbGQJcjcsNTYocjQpCiAJbGQJcjgsNjQocjQpCiAJc3RkCXI1LDcyKHIzKQotCWxkCXI5LDcyKHI0KQogCXN0ZAlyNiw4MChyMykKKwlsZAlyOSw3MihyNCkKIAlsZAlyMTAsODAocjQpCiAJc3RkCXI3LDg4KHIzKQotCWxkCXIxMSw4OChyNCkKIAlzdGQJcjgsOTYocjMpCisJbGQJcjExLDg4KHI0KQogCWxkCXIxMiw5NihyNCkKIAlzdGQJcjksMTA0KHIzKQotCWxkCXI1LDEwNChyNCkKIAlzdGQJcjEwLDExMihyMykKKwlsZAlyNSwxMDQocjQpCiAJbGQJcjYsMTEyKHI0KQogCXN0ZAlyMTEsMTIwKHIzKQotCWxkCXI3LDEyMChyNCkKIAlzdGR1CXIxMiwxMjgocjMpCisJbGQJcjcsMTIwKHI0KQogCWxkdQlyOCwxMjgocjQpCiAJYmRuegkxYgogCiAJc3RkCXI1LDgocjMpCi0JbGQJcjksOChyNCkKIAlzdGQJcjYsMTYocjMpCisJbGQJcjksOChyNCkKIAlsZAlyMTAsMTYocjQpCiAJc3RkCXI3LDI0KHIzKQotCWxkCXIxMSwyNChyNCkKIAlzdGQJcjgsMzIocjMpCisJbGQJcjExLDI0KHI0KQogCWxkCXIxMiwzMihyNCkKIAlzdGQJcjksNDAocjMpCi0JbGQJcjUsNDAocjQpCiAJc3RkCXIxMCw0OChyMykKKwlsZAlyNSw0MChyNCkKIAlsZAlyNiw0OChyNCkKIAlzdGQJcjExLDU2KHIzKQotCWxkCXI3LDU2KHI0KQogCXN0ZAlyMTIsNjQocjMpCisJbGQJcjcsNTYocjQpCiAJbGQJcjgsNjQocjQpCiAJc3RkCXI1LDcyKHIzKQotCWxkCXI5LDcyKHI0KQogCXN0ZAlyNiw4MChyMykKKwlsZAlyOSw3MihyNCkKIAlsZAlyMTAsODAocjQpCiAJc3RkCXI3LDg4KHIzKQotCWxkCXIxMSw4OChyNCkKIAlzdGQJcjgsOTYocjMpCisJbGQJcjExLDg4KHI0KQogCWxkCXIxMiw5NihyNCkKIAlzdGQJcjksMTA0KHIzKQogCXN0ZAlyMTAsMTEyKHIzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TCmluZGV4IDY5M2IxNGEuLjU3OGI2MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvY29weXVzZXJfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMKQEAgLTQ0LDM3ICs0NCw1NSBAQAogCWFuZGkuCXIwLHI0LDcKIAlibmUJLkxzcmNfdW5hbGlnbmVkCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9VTkFMSUdORURfTERfU1REKQotCXNyZGkJcjcscjUsNAotMjA6CWxkCXI5LDAocjQpCi0JYWRkaQlyNCxyNCwtOAotCW10Y3RyCXI3Ci0JYW5kaS4JcjUscjUsNwotCWJmCWNyNyo0KzAsMjJmCi0JYWRkaQlyMyxyMyw4Ci0JYWRkaQlyNCxyNCw4Ci0JbXIJcjgscjkKLQlibHQJY3IxLDcyZgotMjE6CWxkCXI5LDgocjQpCi03MDoJc3RkCXI4LDgocjMpCi0yMjoJbGR1CXI4LDE2KHI0KQotNzE6CXN0ZHUJcjksMTYocjMpCi0JYmRuegkyMWIKLTcyOglzdGQJcjgsOChyMykKLQliZXErCTNmCisJYmx0CWNyMSwuTGRvX3RhaWwJCS8qIGlmIDwgMTYgYnl0ZXMgdG8gY29weSAqLworCXNyZGkJcjAscjUsNQorCWNtcGRpCWNyMSxyMCwwCisyMDoJbGQJcjcsMChyNCkKKzIyMDoJbGQJcjYsOChyNCkKKwlhZGRpCXI0LHI0LDE2CisJbXRjdHIJcjAKKwlhbmRpLglyMCxyNSwweDEwCisJYmVxCTIyZgogCWFkZGkJcjMscjMsMTYKKwlhZGRpCXI0LHI0LC0xNgorCW1yCXI5LHI3CisJbXIJcjgscjYKKwliZXEJY3IxLDcyZgorMjE6CWxkCXI3LDE2KHI0KQorMjIxOglsZAlyNiwyNChyNCkKKwlhZGRpCXI0LHI0LDMyCis3MDoJc3RkCXI5LDAocjMpCisyNzA6CXN0ZAlyOCw4KHIzKQorMjI6CWxkCXI5LDAocjQpCisyMjI6CWxkCXI4LDgocjQpCis3MToJc3RkCXI3LDE2KHIzKQorMjcxOglzdGQJcjYsMjQocjMpCisJYWRkaQlyMyxyMywzMgorCWJkbnoJMjFiCis3MjoJc3RkCXI5LDAocjMpCisyNzI6CXN0ZAlyOCw4KHIzKQorCWFuZGkuCXI1LHI1LDB4ZgorCWJlcSsJM2YKKwlhZGRpCXI0LHI0LDE2CiAuTGRvX3RhaWw6Ci0JYmYJY3I3KjQrMSwxZgotMjM6CWx3eglyOSw4KHI0KQorCWFkZGkJcjMscjMsMTYKKwliZgljcjcqNCswLDI0NmYKKzI0NDoJbGQJcjksMChyNCkKKwlhZGRpCXI0LHI0LDgKKzI0NToJc3RkCXI5LDAocjMpCisJYWRkaQlyMyxyMyw4CisyNDY6CWJmCWNyNyo0KzEsMWYKKzIzOglsd3oJcjksMChyNCkKIAlhZGRpCXI0LHI0LDQKIDczOglzdHcJcjksMChyMykKIAlhZGRpCXIzLHIzLDQKIDE6CWJmCWNyNyo0KzIsMmYKLTQ0OglsaHoJcjksOChyNCkKKzQ0OglsaHoJcjksMChyNCkKIAlhZGRpCXI0LHI0LDIKIDc0OglzdGgJcjksMChyMykKIAlhZGRpCXIzLHIzLDIKIDI6CWJmCWNyNyo0KzMsM2YKLTQ1OglsYnoJcjksOChyNCkKKzQ1OglsYnoJcjksMChyNCkKIDc1OglzdGIJcjksMChyMykKIDM6CWxpCXIzLDAKIAlibHIKQEAgLTIyMCw3ICsyMzgsOSBAQAogMTMxOgogCWFkZGkJcjMscjMsOAogMTIwOgorMzIwOgogMTIyOgorMzIyOgogMTI0OgogMTI1OgogMTI2OgpAQCAtMjI5LDkgKzI0OSwxMSBAQAogMTI5OgogMTMzOgogCWFkZGkJcjMscjMsOAotMTIxOgogMTMyOgogCWFkZGkJcjMscjMsOAorMTIxOgorMzIxOgorMzQ0OgogMTM0OgogMTM1OgogMTM4OgpAQCAtMzAzLDE4ICszMjUsMjIgQEAKIDE4MzoKIAlhZGQJcjMscjMscjcKIAliCTFmCiszNzE6CiAxODA6CiAJYWRkaQlyMyxyMyw4CiAxNzE6CiAxNzc6CiAJYWRkaQlyMyxyMyw4Ci0xNzA6Ci0xNzI6CiszNzA6CiszNzI6CiAxNzY6CiAxNzg6CiAJYWRkaQlyMyxyMyw0CiAxODU6CiAJYWRkaQlyMyxyMyw0CisxNzA6CisxNzI6CiszNDU6CiAxNzM6CiAxNzQ6CiAxNzU6CkBAIC0zNDEsMTEgKzM2NywxOSBAQAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLmFsaWduCTMKIAkubGxvbmcJMjBiLDEyMGIKKwkubGxvbmcJMjIwYiwzMjBiCiAJLmxsb25nCTIxYiwxMjFiCisJLmxsb25nCTIyMWIsMzIxYgogCS5sbG9uZwk3MGIsMTcwYgorCS5sbG9uZwkyNzBiLDM3MGIKIAkubGxvbmcJMjJiLDEyMmIKKwkubGxvbmcJMjIyYiwzMjJiCiAJLmxsb25nCTcxYiwxNzFiCisJLmxsb25nCTI3MWIsMzcxYgogCS5sbG9uZwk3MmIsMTcyYgorCS5sbG9uZwkyNzJiLDM3MmIKKwkubGxvbmcJMjQ0YiwzNDRiCisJLmxsb25nCTI0NWIsMzQ1YgogCS5sbG9uZwkyM2IsMTIzYgogCS5sbG9uZwk3M2IsMTczYgogCS5sbG9uZwk0NGIsMTQ0YgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCmluZGV4IDdlODg2NWIuLmU2NDAxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKQEAgLTExMiw3ICsxMTIsOCBAQAogCiB2b2lkIGRvX2x3c3luY19maXh1cHModW5zaWduZWQgbG9uZyB2YWx1ZSwgdm9pZCAqZml4dXBfc3RhcnQsIHZvaWQgKmZpeHVwX2VuZCkKIHsKLQl1bnNpZ25lZCBpbnQgKnN0YXJ0LCAqZW5kLCAqZGVzdDsKKwlsb25nICpzdGFydCwgKmVuZDsKKwl1bnNpZ25lZCBpbnQgKmRlc3Q7CiAKIAlpZiAoISh2YWx1ZSAmIENQVV9GVFJfTFdTWU5DKSkKIAkJcmV0dXJuIDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCmluZGV4IDA4ZGZhOGUuLjY1YWJmY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYwpAQCAtODQsOCArODQsOCBAQAogCSAqIHZlY3RvcnMgYW5kIHRoZSBrZXJuZWwgbGl2ZSBpbiByZWFsLW1vZGUuCiAJICovCiAKLSAgICAgICAgbXRzcHIoU1BSTl9EQ0NSLCAweEYwMDAwMDAwKTsJLyogNTEyIE1CIG9mIGRhdGEgc3BhY2UgYXQgMHgwLiAqLwotICAgICAgICBtdHNwcihTUFJOX0lDQ1IsIDB4RjAwMDAwMDApOwkvKiA1MTIgTUIgb2YgaW5zdHIuIHNwYWNlIGF0IDB4MC4gKi8KKyAgICAgICAgbXRzcHIoU1BSTl9EQ0NSLCAweEZGRkYwMDAwKTsJLyogMkdCeXRlIG9mIGRhdGEgc3BhY2UgYXQgMHgwLiAqLworICAgICAgICBtdHNwcihTUFJOX0lDQ1IsIDB4RkZGRjAwMDApOwkvKiAyR0J5dGUgb2YgaW5zdHIuIHNwYWNlIGF0IDB4MC4gKi8KIH0KIAogI2RlZmluZSBMQVJHRV9QQUdFX1NJWkVfMTZNCSgxPDwyNCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKaW5kZXggMDU2ZDIzYS4uNzg0YTQwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2RlZmluZSBIUFRFX0xPQ0tfQklUIDMKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhuYXRpdmVfdGxiaWVfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhuYXRpdmVfdGxiaWVfbG9jayk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYmllKHVuc2lnbmVkIGxvbmcgdmEsIGludCBwc2l6ZSwgaW50IHNzaXplKQogewpAQCAtMTA0LDcgKzEwNCw3IEBACiAJaWYgKHVzZV9sb2NhbCkKIAkJdXNlX2xvY2FsID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnRsYmllbDsKIAlpZiAobG9ja190bGJpZSAmJiAhdXNlX2xvY2FsKQotCQlzcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogCWFzbSB2b2xhdGlsZSgicHRlc3luYyI6IDogOiJtZW1vcnkiKTsKIAlpZiAodXNlX2xvY2FsKSB7CiAJCV9fdGxiaWVsKHZhLCBwc2l6ZSwgc3NpemUpOwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCWFzbSB2b2xhdGlsZSgiZWllaW87IHRsYnN5bmM7IHB0ZXN5bmMiOiA6IDoibWVtb3J5Iik7CiAJfQogCWlmIChsb2NrX3RsYmllICYmICF1c2VfbG9jYWwpCi0JCXNwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2xvY2tfaHB0ZShzdHJ1Y3QgaGFzaF9wdGUgKmhwdGVwKQpAQCAtMTIyLDcgKzEyMiw3IEBACiAJdW5zaWduZWQgbG9uZyAqd29yZCA9ICZocHRlcC0+djsKIAogCXdoaWxlICgxKSB7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChIUFRFX0xPQ0tfQklULCB3b3JkKSkKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soSFBURV9MT0NLX0JJVCwgd29yZCkpCiAJCQlicmVhazsKIAkJd2hpbGUodGVzdF9iaXQoSFBURV9MT0NLX0JJVCwgd29yZCkpCiAJCQljcHVfcmVsYXgoKTsKQEAgLTEzMyw4ICsxMzMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgKndvcmQgPSAmaHB0ZXAtPnY7CiAKLQlhc20gdm9sYXRpbGUoImx3c3luYyI6OjoibWVtb3J5Iik7Ci0JY2xlYXJfYml0KEhQVEVfTE9DS19CSVQsIHdvcmQpOworCWNsZWFyX2JpdF91bmxvY2soSFBURV9MT0NLX0JJVCwgd29yZCk7CiB9CiAKIHN0YXRpYyBsb25nIG5hdGl2ZV9ocHRlX2luc2VydCh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsIHVuc2lnbmVkIGxvbmcgdmEsCkBAIC00MzQsNyArNDMzLDcgQEAKIAkvKiB3ZSB0YWtlIHRoZSB0bGJpZSBsb2NrIGFuZCBob2xkIGl0LiAgU29tZSBoYXJkd2FyZSB3aWxsCiAJICogZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIHRsYmllIGZyb20gdHdvIHByb2Nlc3NvcnMgYXQgb25jZS4KIAkgKi8KLQlzcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAKIAlzbG90cyA9IHB0ZWdfY291bnQgKiBIUFRFU19QRVJfR1JPVVA7CiAKQEAgLTQ1OCw3ICs0NTcsNyBAQAogCX0KIAogCWFzbSB2b2xhdGlsZSgiZWllaW87IHRsYnN5bmM7IHB0ZXN5bmMiOjo6Im1lbW9yeSIpOwotCXNwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC01MjEsNyArNTIwLDcgQEAKIAkJaW50IGxvY2tfdGxiaWUgPSAhY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTE9DS0xFU1NfVExCSUUpOwogCiAJCWlmIChsb2NrX3RsYmllKQotCQkJc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJCQlyYXdfc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAKIAkJYXNtIHZvbGF0aWxlKCJwdGVzeW5jIjo6OiJtZW1vcnkiKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CkBAIC01MzYsNyArNTM1LDcgQEAKIAkJYXNtIHZvbGF0aWxlKCJlaWVpbzsgdGxic3luYzsgcHRlc3luYyI6OjoibWVtb3J5Iik7CiAKIAkJaWYgKGxvY2tfdGxiaWUpCi0JCQlzcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAJfQogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jCmluZGV4IGI5MTBkMzcuLjUxNjIyZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfaGFzaDY0LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhtbXVfY29udGV4dF9sb2NrKTsKLXN0YXRpYyBERUZJTkVfSURSKG1tdV9jb250ZXh0X2lkcik7CitzdGF0aWMgREVGSU5FX0lEQShtbXVfY29udGV4dF9pZGEpOwogCiAvKgogICogVGhlIHByb3RvLVZTSUQgc3BhY2UgaGFzIDJeMzUgLSAxIHNlZ21lbnRzIGF2YWlsYWJsZSBmb3IgdXNlciBtYXBwaW5ncy4KQEAgLTM5LDExICszOSwxMSBAQAogCWludCBlcnI7CiAKIGFnYWluOgotCWlmICghaWRyX3ByZV9nZXQoJm1tdV9jb250ZXh0X2lkciwgR0ZQX0tFUk5FTCkpCisJaWYgKCFpZGFfcHJlX2dldCgmbW11X2NvbnRleHRfaWRhLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2soJm1tdV9jb250ZXh0X2xvY2spOwotCWVyciA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZtbXVfY29udGV4dF9pZHIsIE5VTEwsIDEsICZpbmRleCk7CisJZXJyID0gaWRhX2dldF9uZXdfYWJvdmUoJm1tdV9jb250ZXh0X2lkYSwgMSwgJmluZGV4KTsKIAlzcGluX3VubG9jaygmbW11X2NvbnRleHRfbG9jayk7CiAKIAlpZiAoZXJyID09IC1FQUdBSU4pCkBAIC01Myw3ICs1Myw3IEBACiAKIAlpZiAoaW5kZXggPiBNQVhfQ09OVEVYVCkgewogCQlzcGluX2xvY2soJm1tdV9jb250ZXh0X2xvY2spOwotCQlpZHJfcmVtb3ZlKCZtbXVfY29udGV4dF9pZHIsIGluZGV4KTsKKwkJaWRhX3JlbW92ZSgmbW11X2NvbnRleHRfaWRhLCBpbmRleCk7CiAJCXNwaW5fdW5sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtODUsNyArODUsNyBAQAogdm9pZCBfX2Rlc3Ryb3lfY29udGV4dChpbnQgY29udGV4dF9pZCkKIHsKIAlzcGluX2xvY2soJm1tdV9jb250ZXh0X2xvY2spOwotCWlkcl9yZW1vdmUoJm1tdV9jb250ZXh0X2lkciwgY29udGV4dF9pZCk7CisJaWRhX3JlbW92ZSgmbW11X2NvbnRleHRfaWRhLCBjb250ZXh0X2lkKTsKIAlzcGluX3VubG9jaygmbW11X2NvbnRleHRfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2Rlc3Ryb3lfY29udGV4dCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKaW5kZXggMTA0NGE2My4uZGJjNjkyMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwpAQCAtNTYsNyArNTYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgKmNvbnRleHRfbWFwOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKnN0YWxlX21hcFtOUl9DUFVTXTsKIHN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICoqY29udGV4dF9tbTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29udGV4dF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGNvbnRleHRfbG9jayk7CiAKICNkZWZpbmUgQ1RYX01BUF9TSVpFCVwKIAkoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKGxhc3RfY29udGV4dCAvIEJJVFNfUEVSX0xPTkcgKyAxKSkKQEAgLTEyMSw5ICsxMjEsOSBAQAogCS8qIFRoaXMgd2lsbCBoYXBwZW4gaWYgeW91IGhhdmUgbW9yZSBDUFVzIHRoYW4gYXZhaWxhYmxlIGNvbnRleHRzLAogCSAqIGFsbCB3ZSBjYW4gZG8gaGVyZSBpcyB3YWl0IGEgYml0IGFuZCB0cnkgYWdhaW4KIAkgKi8KLQlzcGluX3VubG9jaygmY29udGV4dF9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmNvbnRleHRfbG9jayk7CiAJY3B1X3JlbGF4KCk7Ci0Jc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOworCXJhd19zcGluX2xvY2soJmNvbnRleHRfbG9jayk7CiAKIAkvKiBUaGlzIHdpbGwgY2F1c2UgdGhlIGNhbGxlciB0byB0cnkgYWdhaW4gKi8KIAlyZXR1cm4gTU1VX05PX0NPTlRFWFQ7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAl1bnNpZ25lZCBsb25nICptYXA7CiAKIAkvKiBObyBsb2NrbGVzcyBmYXN0IHBhdGggLi4geWV0ICovCi0Jc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOworCXJhd19zcGluX2xvY2soJmNvbnRleHRfbG9jayk7CiAKIAlwcl9oYXJkKCJbJWRdIGFjdGl2YXRpbmcgY29udGV4dCBmb3IgbW0gQCVwLCBhY3RpdmU9JWQsIGlkPSVkIiwKIAkJY3B1LCBuZXh0LCBuZXh0LT5jb250ZXh0LmFjdGl2ZSwgbmV4dC0+Y29udGV4dC5pZCk7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAkvKiBGbGljayB0aGUgTU1VIGFuZCByZWxlYXNlIGxvY2sgKi8KIAlwcl9oYXJkY29udCgiIC0+ICVkXG4iLCBpZCk7CiAJc2V0X2NvbnRleHQoaWQsIG5leHQtPnBnZCk7Ci0Jc3Bpbl91bmxvY2soJmNvbnRleHRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjb250ZXh0X2xvY2spOwogfQogCiAvKgpAQCAtMzA3LDcgKzMwNyw3IEBACiAKIAlXQVJOX09OKG1tLT5jb250ZXh0LmFjdGl2ZSAhPSAwKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNvbnRleHRfbG9jaywgZmxhZ3MpOwogCWlkID0gbW0tPmNvbnRleHQuaWQ7CiAJaWYgKGlkICE9IE1NVV9OT19DT05URVhUKSB7CiAJCV9fY2xlYXJfYml0KGlkLCBjb250ZXh0X21hcCk7CkBAIC0zMTgsNyArMzE4LDcgQEAKIAkJY29udGV4dF9tbVtpZF0gPSBOVUxMOwogCQlucl9mcmVlX2NvbnRleHRzKys7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnRleHRfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCmluZGV4IDI4MmQ5MzAuLjFlYzA2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYwpAQCAtNjMsMTUgKzYzLDIxIEBACiAJaWYgKGh1Z2UpIHsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJCXBzaXplID0gZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKTsKKwkJLyogTWFzayB0aGUgYWRkcmVzcyBmb3IgdGhlIGNvcnJlY3QgcGFnZSBzaXplICovCisJCWFkZHIgJj0gfigoMVVMIDw8IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdCkgLSAxKTsKICNlbHNlCiAJCUJVRygpOwogCQlwc2l6ZSA9IHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKTsgLyogc2h1dHVwIGdjYyAqLwogI2VuZGlmCi0JfSBlbHNlCisJfSBlbHNlIHsKIAkJcHNpemUgPSBwdGVfcGFnZXNpemVfaW5kZXgobW0sIGFkZHIsIHB0ZSk7CisJCS8qIE1hc2sgdGhlIGFkZHJlc3MgZm9yIHRoZSBzdGFuZGFyZCBwYWdlIHNpemUuICBJZiB3ZQorCQkgKiBoYXZlIGEgNjRrIHBhZ2Uga2VybmVsLCBidXQgdGhlIGhhcmR3YXJlIGRvZXMgbm90CisJCSAqIHN1cHBvcnQgNjRrIHBhZ2VzLCB0aGlzIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHRoZQorCQkgKiBoYXJkd2FyZSBwYWdlIHNpemUgZW5jb2RlZCBpbiB0aGUgc2xpY2UgdGFibGUuICovCisJCWFkZHIgJj0gUEFHRV9NQVNLOworCX0KIAotCS8qIE1hc2sgdGhlIGFkZHJlc3MgZm9yIHRoZSBjb3JyZWN0IHBhZ2Ugc2l6ZSAqLwotCWFkZHIgJj0gfigoMVVMIDw8IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdCkgLSAxKTsKIAogCS8qIEJ1aWxkIGZ1bGwgdmFkZHIgKi8KIAlpZiAoIWlzX2tlcm5lbF9hZGRyKGFkZHIpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCmluZGV4IGYyODgyNzkuLjhiMDRjNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBMb3cgbGV2ZSBUTEIgbWlzcyBoYW5kbGVycyBmb3IgQm9vazNFCisgKiAgTG93IGxldmVsIFRMQiBtaXNzIGhhbmRsZXJzIGZvciBCb29rM0UKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkKICAqICAgICAgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCmluZGV4IDJmYmM2ODAuLmU4MWQ1ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGxiaXZheF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRsYml2YXhfbG9jayk7CiAKIHN0YXRpYyBpbnQgbW1faXNfY29yZV9sb2NhbChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKQEAgLTIzMiwxMCArMjMyLDEwIEBACiAJCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9VU0VfVExCSVZBWF9CQ0FTVCkpIHsKIAkJCWludCBsb2NrID0gbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTCk7CiAJCQlpZiAobG9jaykKLQkJCQlzcGluX2xvY2soJnRsYml2YXhfbG9jayk7CisJCQkJcmF3X3NwaW5fbG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCV90bGJpdmF4X2JjYXN0KHZtYWRkciwgcGlkLCB0c2l6ZSwgaW5kKTsKIAkJCWlmIChsb2NrKQotCQkJCXNwaW5fdW5sb2NrKCZ0bGJpdmF4X2xvY2spOworCQkJCXJhd19zcGluX3VubG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCWdvdG8gYmFpbDsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCB0bGJfZmx1c2hfcGFyYW0gcCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9jbG9jay5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKaW5kZXggODQ1NDRkMC4uNGM0MjI0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKQEAgLTY5OCw4ICs2OTgsNyBAQAogCS5jbGtfZ2V0X3BhcmVudAkJPSBOVUxMLAogfTsKIAotc3RhdGljIGludAotbXBjNTEyMV9jbGtfaW5pdCh2b2lkKQoraW50IF9faW5pdCBtcGM1MTIxX2Nsa19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIApAQCAtNzI0LDYgKzcyMywzIEBACiAJY2xrX2Z1bmN0aW9ucyA9IG1wYzUxMjFfY2xrX2Z1bmN0aW9uczsKIAlyZXR1cm4gMDsKIH0KLQotCi1hcmNoX2luaXRjYWxsKG1wYzUxMjFfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwppbmRleCA0NDFhYmM0Li5lZTZhZTEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwpAQCAtNjQsOCArNjQsOSBAQAogCS5uYW1lCQkJPSAiTVBDNTEyMSBBRFMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9hZHNfcHJvYmUsCiAJLnNldHVwX2FyY2gJCT0gbXBjNTEyMV9hZHNfc2V0dXBfYXJjaCwKLQkuaW5pdAkJCT0gbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMsCisJLmluaXQJCQk9IG1wYzUxMnhfaW5pdCwKIAkuaW5pdF9JUlEJCT0gbXBjNTEyMV9hZHNfaW5pdF9JUlEsCiAJLmdldF9pcnEJCT0gaXBpY19nZXRfaXJxLAogCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5yZXN0YXJ0CQk9IG1wYzUxMnhfcmVzdGFydCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYwppbmRleCBkYTliMjBhLi40ZWNmNGNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcGxkX3BpYyA9IHsKLQkubmFtZSA9ICIgQ1BMRCBQSUMgIiwKKwkubmFtZSA9ICJDUExEIFBJQyIsCiAJLm1hc2sgPSBjcGxkX21hc2tfaXJxLAogCS5hY2sgPSBjcGxkX21hc2tfaXJxLAogCS51bm1hc2sgPSBjcGxkX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMKaW5kZXggMjQ3OWRlOS4uYTZjMGUzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfZ2VuZXJpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2dlbmVyaWMuYwpAQCAtNTEsOCArNTEsOSBAQAogZGVmaW5lX21hY2hpbmUobXBjNTEyMV9nZW5lcmljKSB7CiAJLm5hbWUJCQk9ICJNUEM1MTIxIGdlbmVyaWMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9nZW5lcmljX3Byb2JlLAotCS5pbml0CQkJPSBtcGM1MTJ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcywKKwkuaW5pdAkJCT0gbXBjNTEyeF9pbml0LAogCS5pbml0X0lSUQkJPSBtcGM1MTJ4X2luaXRfSVJRLAogCS5nZXRfaXJxCQk9IGlwaWNfZ2V0X2lycSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucmVzdGFydAkJPSBtcGM1MTJ4X3Jlc3RhcnQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4LmgKaW5kZXggMjJhNTM1Mi4uYjJkYWNhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeC5oCkBAIC0xMiw1ICsxMiw4IEBACiAjaWZuZGVmIF9fTVBDNTEyWF9IX18KICNkZWZpbmUgX19NUEM1MTJYX0hfXwogZXh0ZXJuIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdF9JUlEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbXBjNTEyeF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgbXBjNTEyMV9jbGtfaW5pdCh2b2lkKTsKIHZvaWQgX19pbml0IG1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgbXBjNTEyeF9yZXN0YXJ0KGNoYXIgKmNtZCk7CiAjZW5kaWYJCQkJLyogX19NUEM1MTJYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYwppbmRleCA0MzRkNjgzLi5iN2Y1MThhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYwpAQCAtMjEsOSArMjEsMzggQEAKICNpbmNsdWRlIDxhc20vaXBpYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbXBjNTEyMS5oPgogCiAjaW5jbHVkZSAibXBjNTEyeC5oIgogCitzdGF0aWMgc3RydWN0IG1wYzUxMnhfcmVzZXRfbW9kdWxlIF9faW9tZW0gKnJlc2V0X21vZHVsZV9iYXNlOworCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjNTEyeF9yZXN0YXJ0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzUxMjEtcmVzZXQiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm47CisKKwlyZXNldF9tb2R1bGVfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKK3ZvaWQgbXBjNTEyeF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlpZiAocmVzZXRfbW9kdWxlX2Jhc2UpIHsKKwkJLyogRW5hYmxlIHNvZnR3YXJlIHJlc2V0ICJSU1RFIiAqLworCQlvdXRfYmUzMigmcmVzZXRfbW9kdWxlX2Jhc2UtPnJwciwgMHg1MjUzNTQ0NSk7CisJCS8qIFNldCBzb2Z0d2FyZSBoYXJkIHJlc2V0ICovCisJCW91dF9iZTMyKCZyZXNldF9tb2R1bGVfYmFzZS0+cmNyLCAweDIpOworCX0gZWxzZSB7CisJCXByX2VycigiUmVzdGFydCBtb2R1bGUgbm90IG1hcHBlZC5cbiIpOworCX0KKwlmb3IgKDs7KQorCQk7Cit9CisKIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdF9JUlEodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpAQCAtNTMsOCArODIsMjIgQEAKIAogdm9pZCBfX2luaXQgbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCiAJaWYgKG9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9idXNfaWRzLCBOVUxMKSkKIAkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6ICIKIAkJCSJFcnJvciB3aGlsZSBwcm9iaW5nIG9mX3BsYXRmb3JtIGJ1c1xuIik7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjNTEyMS1uZmMiKTsKKwlpZiAobnApIHsKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgTlVMTCwgTlVMTCk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CiB9CiAKK3ZvaWQgX19pbml0IG1wYzUxMnhfaW5pdCh2b2lkKQoreworCW1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKCk7CisJbXBjNTEyMV9jbGtfaW5pdCgpOworCW1wYzUxMnhfcmVzdGFydF9pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCmluZGV4IDIxZjYxYjguLjA0ZDEwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCkBAIC0zMDIsMTEgKzMwMiwxNCBAQAogCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscmFwaWRpby1kZWx0YSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1ndXRzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdwaW8tbGVkcyIsIH0sCiAJe30sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4NXh4X3B1Ymxpc2hfZGV2aWNlcyh2b2lkKQogeworCWlmIChtYWNoaW5lX2lzKG1wYzg1NjhfbWRzKSkKKwkJc2ltcGxlX2dwaW9jaGlwX2luaXQoImZzbCxtcGM4NTY4bWRzLWJjc3ItZ3BpbyIpOwogCWlmIChtYWNoaW5lX2lzKG1wYzg1NjlfbWRzKSkKIAkJc2ltcGxlX2dwaW9jaGlwX2luaXQoImZzbCxtcGM4NTY5bWRzLWJjc3ItZ3BpbyIpOwogCkBAIC0zMzgsNyArMzQxLDggQEAKIAl9CiAKIAltcGljID0gbXBpY19hbGxvYyhucCwgci5zdGFydCwKLQkJCU1QSUNfUFJJTUFSWSB8IE1QSUNfV0FOVFNfUkVTRVQgfCBNUElDX0JJR19FTkRJQU4sCisJCQlNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOIHwKKwkJCU1QSUNfQlJPS0VOX0ZSUl9OSVJRUywKIAkJCTAsIDI1NiwgIiBPcGVuUElDICAiKTsKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKIAlvZl9ub2RlX3B1dChucCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKaW5kZXggMDQxNjBhNC4uYTE1ZjU4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwpAQCAtNDYsNiArNDYsNyBAQAogCV9faW9tZW0gdTMyICpicHRyX3ZhZGRyOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJaW50IG4gPSAwOworCWludCBpb3JlbWFwcGFibGU7CiAKIAlXQVJOX09OIChuciA8IDAgfHwgbnIgPj0gTlJfQ1BVUyk7CiAKQEAgLTU5LDIxICs2MCwzNyBAQAogCQlyZXR1cm47CiAJfQogCisJLyoKKwkgKiBBIHNlY29uZGFyeSBjb3JlIGNvdWxkIGJlIGluIGEgc3Bpbmxvb3AgaW4gdGhlIGJvb3RwYWdlCisJICogKDB4ZmZmZmYwMDApLCBzb21ld2hlcmUgaW4gaGlnaG1lbSwgb3Igc29tZXdoZXJlIGluIGxvd21lbS4KKwkgKiBUaGUgYm9vdHBhZ2UgYW5kIGhpZ2htZW0gY2FuIGJlIGFjY2Vzc2VkIHZpYSBpb3JlbWFwKCksIGJ1dAorCSAqIHdlIG5lZWQgdG8gZGlyZWN0bHkgYWNjZXNzIHRoZSBzcGlubG9vcCBpZiBpdHMgaW4gbG93bWVtLgorCSAqLworCWlvcmVtYXBwYWJsZSA9ICpjcHVfcmVsX2FkZHIgPiB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpOworCiAJLyogTWFwIHRoZSBzcGluIHRhYmxlICovCi0JYnB0cl92YWRkciA9IGlvcmVtYXAoKmNwdV9yZWxfYWRkciwgU0laRV9CT09UX0VOVFJZKTsKKwlpZiAoaW9yZW1hcHBhYmxlKQorCQlicHRyX3ZhZGRyID0gaW9yZW1hcCgqY3B1X3JlbF9hZGRyLCBTSVpFX0JPT1RfRU5UUlkpOworCWVsc2UKKwkJYnB0cl92YWRkciA9IHBoeXNfdG9fdmlydCgqY3B1X3JlbF9hZGRyKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCW91dF9iZTMyKGJwdHJfdmFkZHIgKyBCT09UX0VOVFJZX1BJUiwgbnIpOwogCW91dF9iZTMyKGJwdHJfdmFkZHIgKyBCT09UX0VOVFJZX0FERFJfTE9XRVIsIF9fcGEoX19lYXJseV9zdGFydCkpOwogCisJaWYgKCFpb3JlbWFwcGFibGUpCisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodWxvbmcpYnB0cl92YWRkciwKKwkJCQkodWxvbmcpKGJwdHJfdmFkZHIgKyBTSVpFX0JPT1RfRU5UUlkpKTsKKwogCS8qIFdhaXQgYSBiaXQgZm9yIHRoZSBDUFUgdG8gYWNrLiAqLwogCXdoaWxlICgoX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZSAhPSBucikgJiYgKCsrbiA8IDEwMDApKQogCQltZGVsYXkoMSk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlpb3VubWFwKGJwdHJfdmFkZHIpOworCWlmIChpb3JlbWFwcGFibGUpCisJCWlvdW5tYXAoYnB0cl92YWRkcik7CiAKIAlwcl9kZWJ1Zygid2FpdGVkICVkIG1zZWNzIGZvciBDUFUgIyVkLlxuIiwgbiwgbnIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYwppbmRleCBlNWRhNWY2Li40MmU4N2YwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc29jcmF0ZXNfZnBnYV9waWNfY2hpcCA9IHsKLQkubmFtZQkJPSAiIEZQR0EtUElDICIsCisJLm5hbWUJCT0gIkZQR0EtUElDIiwKIAkuYWNrCQk9IHNvY3JhdGVzX2ZwZ2FfcGljX2FjaywKIAkubWFzayAgICAgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19tYXNrLAogCS5tYXNrX2FjayAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2tfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKaW5kZXggZjU1OTkxOC4uYmMzM2QxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOwogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CiAKLQlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBSUEMgRWxlY3Ryb25pY3MgU1R4IFxuIik7CisJc2VxX3ByaW50ZihtLCAiVmVuZG9yXHRcdDogUlBDIEVsZWN0cm9uaWNzIFNUeFxuIik7CiAJc2VxX3ByaW50ZihtLCAiUFZSXHRcdDogMHgleFxuIiwgcHZpZCk7CiAJc2VxX3ByaW50ZihtLCAiU1ZSXHRcdDogMHgleFxuIiwgc3ZpZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC94ZXNfbXBjODV4eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMKaW5kZXggMWI0MjYwNS4uMDEyNTYwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMKQEAgLTgwLDggKzgwLDggQEAKIAlwcmludGsoS0VSTl9JTkZPICJ4ZXNfbXBjODV4eDogRW5hYmxpbmcgTDIgYXMgY2FjaGVcbiIpOwogCiAJY3RsID0gTVBDODV4eF9MMkNUTF9MMkUgfCBNUEM4NXh4X0wyQ1RMX0wySTsKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTQwIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTYwIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTVBDODU0MCIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTVBDODU2MCIpKQogCQkvKgogCQkgKiBBc3N1bWUgTDIgU1JBTSBpcyB1c2VkIGZ1bGx5IGZvciBjYWNoZSwgc28gc2V0CiAJCSAqIEwyQkxLU1ogKGJpdHMgNDo1KSB0byBtYXRjaCBMMlNJWiAoYml0cyAyOjMpLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaHRhYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaHRhYi5jCmluZGV4IDM1YjFlYzQuLjI1MTZjMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2h0YWIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9odGFiLmMKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUgREJHX0xPVyhmbXQuLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJlYXRfaHRhYl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGJlYXRfaHRhYl9sb2NrKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmVhdF9yZWFkX21hc2sodW5zaWduZWQgaHB0ZV9ncm91cCkKIHsKQEAgLTExNCwxOCArMTE0LDE4IEBACiAJaWYgKHJmbGFncyAmIF9QQUdFX05PX0NBQ0hFKQogCQlocHRlX3IgJj0gfl9QQUdFX0NPSEVSRU5UOwogCi0Jc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOwogCWxwYXJfcmMgPSBiZWF0X3JlYWRfbWFzayhocHRlX2dyb3VwKTsKIAlpZiAobHBhcl9yYyA9PSAwKSB7CiAJCWlmICghKHZmbGFncyAmIEhQVEVfVl9CT0xURUQpKQogCQkJREJHX0xPVygiIGZ1bGxcbiIpOwotCQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWxwYXJfcmMgPSBiZWF0X2luc2VydF9odGFiX2VudHJ5KDAsIGhwdGVfZ3JvdXAsIGxwYXJfcmMgPDwgNDgsCiAJCWhwdGVfdiwgaHB0ZV9yLCAmc2xvdCk7Ci0Jc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAogCS8qCiAJICogU2luY2Ugd2UgdHJ5IGFuZCBpb3JlbWFwIFBIQnMgd2UgZG9uJ3Qgb3duLCB0aGUgcHRlIGluc2VydApAQCAtMTk4LDE3ICsxOTgsMTcgQEAKIAkJImF2cG52PSUwMTZseCwgc2xvdD0lMDE2bHgsIHBzaXplOiAlZCwgbmV3cHAgJTAxNmx4IC4uLiAiLAogCQl3YW50X3YgJiBIUFRFX1ZfQVZQTiwgc2xvdCwgcHNpemUsIG5ld3BwKTsKIAotCXNwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX2xvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAlkdW1teTAgPSBiZWF0X2xwYXJfaHB0ZV9nZXR3b3JkMChzbG90KTsKIAlpZiAoKGR1bW15MCAmIH4weDdGVUwpICE9ICh3YW50X3YgJiB+MHg3RlVMKSkgewogCQlEQkdfTE9XKCJub3QgZm91bmQgIVxuIik7Ci0JCXNwaW5fdW5sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJbHBhcl9yYyA9IGJlYXRfd3JpdGVfaHRhYl9lbnRyeSgwLCBzbG90LCAwLCBuZXdwcCwgMCwgNywgJmR1bW15MCwKIAkJCQkJJmR1bW15MSk7Ci0Jc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAlpZiAobHBhcl9yYyAhPSAwIHx8IGR1bW15MCA9PSAwKSB7CiAJCURCR19MT1coIm5vdCBmb3VuZCAhXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjYyLDEzICsyNjIsMTMgQEAKIAl2c2lkID0gZ2V0X2tlcm5lbF92c2lkKGVhLCBNTVVfU0VHU0laRV8yNTZNKTsKIAl2YSA9ICh2c2lkIDw8IDI4KSB8IChlYSAmIDB4MGZmZmZmZmYpOwogCi0Jc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOwogCXNsb3QgPSBiZWF0X2xwYXJfaHB0ZV9maW5kKHZhLCBwc2l6ZSk7CiAJQlVHX09OKHNsb3QgPT0gLTEpOwogCiAJbHBhcl9yYyA9IGJlYXRfd3JpdGVfaHRhYl9lbnRyeSgwLCBzbG90LCAwLCBuZXdwcCwgMCwgNywKIAkJJmR1bW15MCwgJmR1bW15MSk7Ci0Jc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAogCUJVR19PTihscGFyX3JjICE9IDApOwogfQpAQCAtMjg1LDE4ICsyODUsMTggQEAKIAkJc2xvdCwgdmEsIHBzaXplLCBsb2NhbCk7CiAJd2FudF92ID0gaHB0ZV9lbmNvZGVfdih2YSwgcHNpemUsIE1NVV9TRUdTSVpFXzI1Nk0pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOwogCWR1bW15MSA9IGJlYXRfbHBhcl9ocHRlX2dldHdvcmQwKHNsb3QpOwogCiAJaWYgKChkdW1teTEgJiB+MHg3RlVMKSAhPSAod2FudF92ICYgfjB4N0ZVTCkpIHsKIAkJREJHX0xPVygibm90IGZvdW5kICFcbiIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdF9odGFiX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAogCWxwYXJfcmMgPSBiZWF0X3dyaXRlX2h0YWJfZW50cnkoMCwgc2xvdCwgMCwgMCwgSFBURV9WX1ZBTElELCAwLAogCQkmZHVtbXkxLCAmZHVtbXkyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOwogCiAJQlVHX09OKGxwYXJfcmMgIT0gMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCmluZGV4IDM2MDUyYTkuLjY4MmFmOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiYmVhdF93cmFwcGVyLmgiCiAKICNkZWZpbmUJTUFYX0lSUVMJTlJfSVJRUwotc3RhdGljIERFRklORV9TUElOTE9DSyhiZWF0aWNfaXJxX21hc2tfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhiZWF0aWNfaXJxX21hc2tfbG9jayk7CiBzdGF0aWMgdWludDY0X3QJYmVhdGljX2lycV9tYXNrX2VuYWJsZVsoTUFYX0lSUVMrMjU1KS82NF07CiBzdGF0aWMgdWludDY0X3QJYmVhdGljX2lycV9tYXNrX2Fja1soTUFYX0lSUVMrMjU1KS82NF07CiAKQEAgLTY1LDMwICs2NSwzMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiAJYmVhdGljX2lycV9tYXNrX2VuYWJsZVtpcnFfcGx1Zy82NF0gJj0gfigxVUwgPDwgKDYzIC0gKGlycV9wbHVnJTY0KSkpOwogCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlYXRpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfcGx1ZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogCWJlYXRpY19pcnFfbWFza19lbmFibGVbaXJxX3BsdWcvNjRdIHw9IDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKTsKIAliZWF0aWNfdXBkYXRlX2lycV9tYXNrKGlycV9wbHVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBiZWF0aWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX3BsdWcpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIAliZWF0aWNfaXJxX21hc2tfYWNrW2lycV9wbHVnLzY0XSAmPSB+KDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKSk7CiAJYmVhdGljX3VwZGF0ZV9pcnFfbWFzayhpcnFfcGx1Zyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYmVhdGljX2VuZF9pcnEodW5zaWduZWQgaW50IGlycV9wbHVnKQpAQCAtMTAzLDE0ICsxMDMsMTQgQEAKIAogCQlwcmludGsoS0VSTl9FUlIgIklSUSBvdmVyLWRvd25jb3VudGVkLCBwbHVnICVkXG4iLCBpcnFfcGx1Zyk7CiAJfQotCXNwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIAliZWF0aWNfaXJxX21hc2tfYWNrW2lycV9wbHVnLzY0XSB8PSAxVUwgPDwgKDYzIC0gKGlycV9wbHVnJTY0KSk7CiAJYmVhdGljX3VwZGF0ZV9pcnFfbWFzayhpcnFfcGx1Zyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiZWF0aWNfcGljID0gewotCS5uYW1lID0gIiBDRUxMLUJFQVQgIiwKKwkubmFtZSA9ICJDRUxMLUJFQVQiLAogCS51bm1hc2sgPSBiZWF0aWNfdW5tYXNrX2lycSwKIAkubWFzayA9IGJlYXRpY19tYXNrX2lycSwKIAkuZW9pID0gYmVhdGljX2VuZF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3Bvd2VyYnV0dG9uLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3Bvd2VyYnV0dG9uLmMKaW5kZXggZGNkZGFhNS4uZjc1YTRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9wb3dlcmJ1dHRvbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYwpAQCAtNDgsNyArNDgsNyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJJQk0sQ0JQTFVTLTEuMCIpKSB7CisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogTm90IGEgY2VsbCBibGFkZS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKaW5kZXggNjgyOWNmNy4uMTBlYjFhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwpAQCAtODgsNyArODgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlpY19jaGlwID0gewotCS5uYW1lID0gIiBDRUxMLUlJQyAiLAorCS5uYW1lID0gIkNFTEwtSUlDIiwKIAkubWFzayA9IGlpY19tYXNrLAogCS51bm1hc2sgPSBpaWNfdW5tYXNrLAogCS5lb2kgPSBpaWNfZW9pLApAQCAtMTMzLDcgKzEzMyw3IEBACiAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpaWNfaW9leGNfY2hpcCA9IHsKLQkubmFtZSA9ICIgQ0VMTC1JT0VYIiwKKwkubmFtZSA9ICJDRUxMLUlPRVgiLAogCS5tYXNrID0gaWljX21hc2ssCiAJLnVubWFzayA9IGlpY191bm1hc2ssCiAJLmVvaSA9IGlpY19pb2V4Y19lb2ksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMKaW5kZXggNWUwYTE5MS4uNjA4ZmQyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiB7CiAJc3RydWN0IGNiZV9wbWRfcmVncyBfX2lvbWVtICpyZWdzOwogCi0Jc3lzcmVzZXRfaGFjayA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiSUJNLENCUExVUy0xLjAiKTsKKwlzeXNyZXNldF9oYWNrID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJJQk0sQ0JQTFVTLTEuMCIpOwogCWlmICghc3lzcmVzZXRfaGFjaykKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCmluZGV4IDAxMjQ0ZjIuLjU4NzZlODggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3BpZGVyX3BpYyA9IHsKLQkubmFtZSA9ICIgU1BJREVSICAgIiwKKwkubmFtZSA9ICJTUElERVIiLAogCS51bm1hc2sgPSBzcGlkZXJfdW5tYXNrX2lycSwKIAkubWFzayA9IHNwaWRlcl9tYXNrX2lycSwKIAkuYWNrID0gc3BpZGVyX2Fja19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9tYW5hZ2UuYwppbmRleCA0YzUwNmMxLi44OTFmMThlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCQkJY29udGludWU7CiAJCXZpY19oYW5kbGVzID0gb2ZfZ2V0X3Byb3BlcnR5KHNwdV9kbiwgInZpY2luaXR5IiwgJmxlbnApOwogCQlmb3IgKGk9MDsgaSA8IChsZW5wIC8gc2l6ZW9mKHBoYW5kbGUpKTsgaSsrKSB7Ci0JCQlpZiAodmljX2hhbmRsZXNbaV0gPT0gdGFyZ2V0LT5saW51eF9waGFuZGxlKQorCQkJaWYgKHZpY19oYW5kbGVzW2ldID09IHRhcmdldC0+cGhhbmRsZSkKIAkJCQlyZXR1cm4gc3B1OwogCQl9CiAJfQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAKIAkJCWlmIChzdHJjbXAobmFtZSwgInNwZSIpID09IDApIHsKIAkJCQlzcHUgPSBkZXZub2RlX3NwdShjYmUsIHZpY19kbik7Ci0JCQkJYXZvaWRfcGggPSBsYXN0X3NwdV9kbi0+bGludXhfcGhhbmRsZTsKKwkJCQlhdm9pZF9waCA9IGxhc3Rfc3B1X2RuLT5waGFuZGxlOwogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSAqICJtaWMtdG0iIGFuZCAiYmlmMCIgbm9kZXMgZG8gbm90IGhhdmUKQEAgLTUxNCw3ICs1MTQsNyBAQAogCQkJCQlsYXN0X3NwdS0+aGFzX21lbV9hZmZpbml0eSA9IDE7CiAJCQkJCXNwdS0+aGFzX21lbV9hZmZpbml0eSA9IDE7CiAJCQkJfQotCQkJCWF2b2lkX3BoID0gdmljX2RuLT5saW51eF9waGFuZGxlOworCQkJCWF2b2lkX3BoID0gdmljX2RuLT5waGFuZGxlOwogCQkJfQogCiAJCQlsaXN0X2FkZF90YWlsKCZzcHUtPmFmZl9saXN0LCAmbGFzdF9zcHUtPmFmZl9saXN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZnNsX3VsaTE1NzUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZnNsX3VsaTE1NzUuYwppbmRleCBmZDIzYTFkLi44YjBjMjA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2ZzbF91bGkxNTc1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9mc2xfdWxpMTU3NS5jCkBAIC0yMjIsNiArMjIyLDcgQEAKIAlpbnQgaTsKIAl1OCAqZHVtbXk7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXJlc291cmNlX3NpemVfdCBlbmQgPSAwOwogCiAJZm9yIChpID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFUyszOyBpKyspIHsKQEAgLTIzMCwxMyArMjMxLDEyIEBACiAJCQllbmQgPSBwY2lfcmVzb3VyY2VfZW5kKGRldiwgaSk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCWlmICgoYnVzLT5yZXNvdXJjZVtpXSkgJiYKLQkJCShidXMtPnJlc291cmNlW2ldLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQkJaWYgKGJ1cy0+cmVzb3VyY2VbaV0tPmVuZCA9PSBlbmQpCi0JCQkJZHVtbXkgPSBpb3JlbWFwKGJ1cy0+cmVzb3VyY2VbaV0tPnN0YXJ0LCAweDQpOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpIHsKKwkJaWYgKHJlcyAmJiByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKKwkJCWlmIChyZXMtPmVuZCA9PSBlbmQpCisJCQkJZHVtbXkgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIDB4NCk7CiAJCQllbHNlCi0JCQkJZHVtbXkgPSBpb3JlbWFwKGJ1cy0+cmVzb3VyY2VbaV0tPmVuZCAtIDMsIDB4NCk7CisJCQkJZHVtbXkgPSBpb3JlbWFwKHJlcy0+ZW5kIC0gMywgMHg0KTsKIAkJCWlmIChkdW1teSkgewogCQkJCWluXzgoZHVtbXkpOwogCQkJCWlvdW5tYXAoZHVtbXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCmluZGV4IDg2YzRiMjkuLmJhNDQ2YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlzZXJpZXNfcGljID0gewotCS5uYW1lCT0gImlTZXJpZXMgaXJxIGNvbnRyb2xsZXIiLAorCS5uYW1lCQk9ICJpU2VyaWVzIiwKIAkuc3RhcnR1cAk9IGlzZXJpZXNfc3RhcnR1cF9JUlEsCiAJLnNodXRkb3duCT0gaXNlcmllc19zaHV0ZG93bl9JUlEsCiAJLnVubWFzawkJPSBpc2VyaWVzX2VuYWJsZV9JUlEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYwppbmRleCA5MWY0YzZjLi4wNjc2MzY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAogCQlzZXFfcHJpbnRmKG0sICIgIHRpdGFuIGVsYXBzZWQgPSAlbHUgdVNlY1xuIiwgdGl0YW5fdXNlYyk7CiAJCXNlcV9wcmludGYobSwgIiAgdGIgZWxhcHNlZCAgICA9ICVsdSB0aWNrc1xuIiwgdGJfdGlja3MpOwotCQlzZXFfcHJpbnRmKG0sICIgIHRpdGFuIGppZmZpZXMgPSAlbHUuJTA0bHUgXG4iLCB0aXRhbl9qaWZmaWVzLAorCQlzZXFfcHJpbnRmKG0sICIgIHRpdGFuIGppZmZpZXMgPSAlbHUuJTA0bHVcbiIsIHRpdGFuX2ppZmZpZXMsCiAJCQkgICB0aXRhbl9qaWZmX3JlbV91c2VjKTsKIAkJc2VxX3ByaW50ZihtLCAiICB0YiBqaWZmaWVzICAgID0gJWx1LiUwNGx1XG4iLCB0Yl9qaWZmaWVzLAogCQkJICAgdGJfamlmZl9yZW1fdXNlYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IGE2Y2QzMzkuLmIwODYzNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJbWVtX2Jsb2NrcyA9IGlTZXJpZXNfcHJvY2Vzc19Db25kb3JfbWFpbnN0b3JlX3ZwZChtYl9hcnJheSwKIAkJCQltYXhfZW50cmllcyk7CiAKLQlwcmludGsoIk1haW5zdG9yZV9WUEQ6IG51bU1lbW9yeUJsb2NrcyA9ICVsZCBcbiIsIG1lbV9ibG9ja3MpOworCXByaW50aygiTWFpbnN0b3JlX1ZQRDogbnVtTWVtb3J5QmxvY2tzID0gJWxkXG4iLCBtZW1fYmxvY2tzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbWVtX2Jsb2NrczsgKytpKSB7CiAJCXByaW50aygiTWFpbnN0b3JlX1ZQRDogYmxvY2sgJTNsZCBsb2dpY2FsIGNodW5rcyAlMDE2bHggLSAlMDE2bHhcbiIKIAkJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFicyBjaHVua3MgJTAxNmx4IC0gJTAxNmx4XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvY3B1ZnJlcS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvY3B1ZnJlcS5jCmluZGV4IGJlMjUyN2EuLmQzNWUwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2NwdWZyZXEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMKQEAgLTMwNCw4ICszMDQsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwYXNfY3B1ZnJlcV9pbml0KHZvaWQpCiB7Ci0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBBNlQtMTY4Mk0iKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJwYXNlbWkscHdyZmljaWVudCIpKQorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQQTZULTE2ODJNIikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgicGFzZW1pLHB3cmZpY2llbnQiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnBhc19jcHVmcmVxX2RyaXZlcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2Jvb3R4X2luaXQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jCmluZGV4IDlkZDc4OWEuLjg0ZDdmZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jCkBAIC01MzksNyArNTM5LDcgQEAKIAkJaWYgKG1vZGVsCiAJCSAgICAmJiAoc3RyY21wKG1vZGVsLCAiaU1hYywxIikgPT0gMAogCQkJfHwgc3RyY21wKG1vZGVsLCAiUG93ZXJNYWMxLDEiKSA9PSAwKSkgewotCQkJYm9vdHhfcHJpbnRmKCJpTWFjLDEgZGV0ZWN0ZWQsIHNodXR0aW5nIGRvd24gVVNCIFxuIik7CisJCQlib290eF9wcmludGYoImlNYWMsMSBkZXRlY3RlZCwgc2h1dHRpbmcgZG93biBVU0JcbiIpOwogCQkJb3V0X2xlMzIoKHVuc2lnbmVkIF9faW9tZW0gKikweDgwODgwMDA4LCAxKTsJLyogWFhYICovCiAJCX0KIAl9CkBAIC01NTQsNyArNTU0LDcgQEAKIAl9IGVsc2UKIAkJc3BhY2UgPSBiaS0+dG90YWxQYXJhbXNTaXplOwogCi0JYm9vdHhfcHJpbnRmKCJUb3RhbCBzcGFjZSB1c2VkIGJ5IHBhcmFtZXRlcnMgJiByYW1kaXNrOiAweCV4IFxuIiwgc3BhY2UpOworCWJvb3R4X3ByaW50ZigiVG90YWwgc3BhY2UgdXNlZCBieSBwYXJhbWV0ZXJzICYgcmFtZGlzazogMHgleFxuIiwgc3BhY2UpOwogCiAJLyogTmV3IEJvb3RYIHdpbGwgaGF2ZSBmbHVzaGVkIGFsbCBUTEJzIGFuZCBlbnRlcnMga2VybmVsIHdpdGgKIAkgKiBNTVUgc3dpdGNoZWQgT0ZGLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgdXNlZnVsIGFueW1vcmUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfMzIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCmluZGV4IDA4ZDk0ZTQuLmQ0ZjEyN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCkBAIC02NTcsMzEgKzY1NywzMSBAQAogCWN1cl9mcmVxID0gKCp2YWx1ZSkgLyAxMDAwOwogCiAJLyogIENoZWNrIGZvciA3NDQ3QSBiYXNlZCBNYWNSSVNDMyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikgJiYKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDMyIpICYmCiAJICAgIG9mX2dldF9wcm9wZXJ0eShjcHVub2RlLCAiZHluYW1pYy1wb3dlci1zdGVwIiwgTlVMTCkgJiYKIAkgICAgUFZSX1ZFUihtZnNwcihTUFJOX1BWUikpID09IDB4ODAwMykgewogCQlwbWFjX2NwdWZyZXFfaW5pdF83NDQ3QShjcHVub2RlKTsKIAkvKiBDaGVjayBmb3Igb3RoZXIgTWFjUklTQzMgbWFjaGluZXMgKi8KLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMyw0IikgfHwKLQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSB8fAotCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikpIHsKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMyw0IikgfHwKKwkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSB8fAorCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikpIHsKIAkJcG1hY19jcHVmcmVxX2luaXRfTWFjUklTQzMoY3B1bm9kZSk7CiAJLyogRWxzZSBjaGVjayBmb3IgaUJvb2syIDUwMC82MDAgKi8KLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikpIHsKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikpIHsKIAkJaGlfZnJlcSA9IGN1cl9mcmVxOwogCQlsb3dfZnJlcSA9IDQwMDAwMDsKIAkJc2V0X3NwZWVkX3Byb2MgPSBwbXVfc2V0X2NwdV9zcGVlZDsKIAkJaXNfcG11X2Jhc2VkID0gMTsKIAl9CiAJLyogRWxzZSBjaGVjayBmb3IgVGlQYiA1NTAgKi8KLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMyIpICYmIGN1cl9mcmVxID09IDU1MDAwMCkgeworCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikgJiYgY3VyX2ZyZXEgPT0gNTUwMDAwKSB7CiAJCWhpX2ZyZXEgPSBjdXJfZnJlcTsKIAkJbG93X2ZyZXEgPSA1MDAwMDA7CiAJCXNldF9zcGVlZF9wcm9jID0gcG11X3NldF9jcHVfc3BlZWQ7CiAJCWlzX3BtdV9iYXNlZCA9IDE7CiAJfQogCS8qIEVsc2UgY2hlY2sgZm9yIFRpUGIgNDAwICYgNTAwICovCi0JZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgeworCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpIHsKIAkJLyogV2Ugb25seSBrbm93IGFib3V0IHRoZSA0MDAgTUh6IGFuZCB0aGUgNTAwTWh6IG1vZGVsCiAJCSAqIHRoZXkgYm90aCBoYXZlIDMwMCBNSHogYXMgbG93IGZyZXF1ZW5jeQogCQkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKaW5kZXggNzA4Yzc1MS4uM2VkMjg4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKQEAgLTM5OCwxMSArMzk4LDExIEBACiAJaW50IHJjID0gLUVOT0RFVjsKIAogCS8qIENoZWNrIHN1cHBvcnRlZCBwbGF0Zm9ybXMgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDEiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzksMSIpKQogCQl1c2Vfdm9sdHNfc211ID0gMTsKLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTEsMiIpKQorCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCiAJCXVzZV92b2x0c192ZG5hcCA9IDE7CiAJZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTcyOSw5ICs3MjksOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmMgPSBnNV9wbTcyX2NwdWZyZXFfaW5pdChjcHVzKTsKICNpZmRlZiBDT05GSUdfUE1BQ19TTVUKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCmluZGV4IGZiYzliYmQuLjllMWI5ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCkBAIC01OSwxMCArNTksMTAgQEAKICAqIFdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgbG9jayB0byBwcm90ZWN0IGFjY2Vzc2VzLiBFYWNoIGRyaXZlciBoYXMKICAqIHRvIHRha2UgY2FyZSBvZiBpdHMgb3duIGxvY2tpbmcKICAqLwotREVGSU5FX1NQSU5MT0NLKGZlYXR1cmVfbG9jayk7CitERUZJTkVfUkFXX1NQSU5MT0NLKGZlYXR1cmVfbG9jayk7CiAKLSNkZWZpbmUgTE9DSyhmbGFncykJc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwotI2RlZmluZSBVTkxPQ0soZmxhZ3MpCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworI2RlZmluZSBMT0NLKGZsYWdzKQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworI2RlZmluZSBVTkxPQ0soZmxhZ3MpCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAogCiAvKgpAQCAtMjQyNiw3ICsyNDI2LDcgQEAKIAkgICAgfQogCX0KIAlmb3IoaT0wOyBpPEFSUkFZX1NJWkUocG1hY19tYl9kZWZzKTsgaSsrKSB7Ci0JICAgIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUocG1hY19tYl9kZWZzW2ldLm1vZGVsX3N0cmluZykpIHsKKwkgICAgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZShwbWFjX21iX2RlZnNbaV0ubW9kZWxfc3RyaW5nKSkgewogCQlwbWFjX21iID0gcG1hY19tYl9kZWZzW2ldOwogCQlnb3RvIGZvdW5kOwogCSAgICB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKaW5kZXggYzZmMGY5ZS4uODBhNTI1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYwpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIGludCBjb3JlOTlfYmFuayA9IDA7CiBzdGF0aWMgaW50IG52cmFtX3BhcnRpdGlvbnNbM107CiAvLyBYWFggVHVybiB0aGF0IGludG8gYSBzZW0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobnZfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhudl9sb2NrKTsKIAogc3RhdGljIGludCAoKmNvcmU5OV93cml0ZV9iYW5rKShpbnQgYmFuaywgdTgqIGRhdGFzKTsKIHN0YXRpYyBpbnQgKCpjb3JlOTlfZXJhc2VfYmFuaykoaW50IGJhbmspOwpAQCAtMTY1LDEwICsxNjUsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKIAlvdXRfOChudnJhbV9hZGRyLCBhZGRyID4+IDUpOwogCXZhbCA9IGluXzgoJm52cmFtX2RhdGFbKGFkZHIgJiAweDFmKSA8PCA0XSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gdmFsOwogfQpAQCAtMTc3LDEwICsxNzcsMTAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKIAlvdXRfOChudnJhbV9hZGRyLCBhZGRyID4+IDUpOwogCW91dF84KCZudnJhbV9kYXRhWyhhZGRyICYgMHgxZikgPDwgNF0sIHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CiB9CiAKIApAQCAtNDgxLDcgKzQ4MSw3IEBACiAJaWYgKCFpc19jb3JlXzk5IHx8ICFudnJhbV9kYXRhIHx8ICFudnJhbV9pbWFnZSkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKIAlpZiAoIW1lbWNtcChudnJhbV9pbWFnZSwgKHU4KiludnJhbV9kYXRhICsgY29yZTk5X2JhbmsqTlZSQU1fU0laRSwKIAkJTlZSQU1fU0laRSkpCiAJCWdvdG8gYmFpbDsKQEAgLTUwMyw3ICs1MDMsNyBAQAogCQlpZiAoY29yZTk5X3dyaXRlX2JhbmsoY29yZTk5X2JhbmssIG52cmFtX2ltYWdlKSkKIAkJCXByaW50aygibnZyYW06IEVycm9yIHdyaXRpbmcgYmFuayAlZFxuIiwgY29yZTk5X2JhbmspOwogIGJhaWw6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CiAKICNpZmRlZiBERUJVRwogICAgICAgIAltZGVsYXkoMjAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2Jhc2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jCmluZGV4IGRiMjBkZTUuLmY1ZTNjZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jCkBAIC01MCwxMyArNTAsMTMgQEAKIAkJdmFsdWUgPSB+dmFsdWU7CiAKIAkvKiBUb2dnbGUgdGhlIEdQSU8gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAl0bXAgPSByZWFkYihhZGRyKTsKIAl0bXAgPSAodG1wICYgfm1hc2spIHwgKHZhbHVlICYgbWFzayk7CiAJREJHKCJEbyB3cml0ZSAweCUwMnggdG8gR1BJTyAlcyAoJXApXG4iLAogCSAgICB0bXAsIGZ1bmMtPm5vZGUtPmZ1bGxfbmFtZSwgYWRkcik7CiAJd3JpdGViKHRtcCwgYWRkcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDUsOSArMTQ1LDkgQEAKIAlzdHJ1Y3QgbWFjaW9fY2hpcCAqbWFjaW8gPSBmdW5jLT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJTUFDSU9fT1VUMzIob2Zmc2V0LCAoTUFDSU9fSU4zMihvZmZzZXQpICYgfm1hc2spIHwgKHZhbHVlICYgbWFzaykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY4LDkgKzE2OCw5IEBACiAJc3RydWN0IG1hY2lvX2NoaXAgKm1hY2lvID0gZnVuYy0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCU1BQ0lPX09VVDgob2Zmc2V0LCAoTUFDSU9fSU44KG9mZnNldCkgJiB+bWFzaykgfCAodmFsdWUgJiBtYXNrKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjMsMTIgKzIyMywxMiBAQAogCWlmIChhcmdzID09IE5VTEwgfHwgYXJncy0+Y291bnQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAl0bXAgPSBNQUNJT19JTjMyKG9mZnNldCk7CiAJdmFsID0gYXJncy0+dVswXS52IDw8IHNoaWZ0OwogCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CiAJTUFDSU9fT1VUMzIob2Zmc2V0LCB0bXApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQzLDEyICsyNDMsMTIgQEAKIAlpZiAoYXJncyA9PSBOVUxMIHx8IGFyZ3MtPmNvdW50ID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJdG1wID0gTUFDSU9fSU44KG9mZnNldCk7CiAJdmFsID0gYXJncy0+dVswXS52IDw8IHNoaWZ0OwogCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CiAJTUFDSU9fT1VUOChvZmZzZXQsIHRtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzgsMTIgKzI3OCwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAkvKiBUaGlzIGlzIGZhaXJseSBib2d1cyBpbiBkYXJ3aW4sIGJ1dCBpdCBzaG91bGQgd29yayBmb3Igb3VyIG5lZWRzCiAJICogaW1wbGVtZXRlZCB0aGF0IHdheToKIAkgKi8KIAlVTl9PVVQob2Zmc2V0LCAoVU5fSU4ob2Zmc2V0KSAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKaW5kZXggOTZkNWNlNS4uZWRlNDllNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKQEAgLTg0Miw3ICs4NDIsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZnVuYywgJmRldi0+ZnVuY3Rpb25zLCBsaW5rKSB7CiAJCWlmIChuYW1lICYmIHN0cmNtcChuYW1lLCBmdW5jLT5uYW1lKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZnVuYy0+cGhhbmRsZSAmJiB0YXJnZXQtPm5vZGUgIT0gZnVuYy0+cGhhbmRsZSkKKwkJaWYgKGZ1bmMtPnBoYW5kbGUgJiYgdGFyZ2V0LT5waGFuZGxlICE9IGZ1bmMtPnBoYW5kbGUpCiAJCQljb250aW51ZTsKIAkJaWYgKChmdW5jLT5mbGFncyAmIGZsYWdzKSA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCAwOWU4MjcyLi42MzBhNTMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTU3LDcgKzU3LDcgQEAKIHN0YXRpYyBpbnQgbWF4X3JlYWxfaXJxczsKIHN0YXRpYyB1MzIgbGV2ZWxfbWFza1s0XTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhwbWFjX3BpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBtYWNfcGljX2xvY2spOwogCiAjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNfbG9zdF9pbnRlcnJ1cHRzW05SX01BU0tfV09SRFNdOwpAQCAtODUsNyArODUsNyBAQAogICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKICAgICAgICAgX19jbGVhcl9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KHNyYywgcHBjX2xvc3RfaW50ZXJydXB0cykpCiAgICAgICAgICAgICAgICAgYXRvbWljX2RlYygmcHBjX25fbG9zdF9pbnRlcnJ1cHRzKTsKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICBtYigpOwogICAgICAgICB9IHdoaWxlKChpbl9sZTMyKCZwbWFjX2lycV9od1tpXS0+ZW5hYmxlKSAmIGJpdCkKICAgICAgICAgICAgICAgICAhPSAocHBjX2NhY2hlZF9pcnFfbWFza1tpXSAmIGJpdCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbWFjX2Fja19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC0xMDcsMTIgKzEwNywxMiBAQAogICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChzcmMsIHBwY19sb3N0X2ludGVycnVwdHMpKQogICAgICAgICAgICAgICAgIGF0b21pY19kZWMoJnBwY19uX2xvc3RfaW50ZXJydXB0cyk7CiAgICAgICAgIG91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOwogICAgICAgICAodm9pZClpbl9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgX19wbWFjX3NldF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxX25yLCBpbnQgbm9raWNrbG9zdCkKQEAgLTE1MiwxMiArMTUyLDEyIEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYml0ID0gMVVMIDw8IChzcmMgJiAweDFmKTsKICAgICAgICAgaW50IGkgPSBzcmMgPj4gNTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJaWYgKChpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzICYgSVJRX0xFVkVMKSA9PSAwKQogCQlvdXRfbGUzMigmcG1hY19pcnFfaHdbaV0tPmFjaywgYml0KTsKICAgICAgICAgX19zZXRfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CiAgICAgICAgIF9fcG1hY19zZXRfaXJxX21hc2soc3JjLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY3LDEwICsxNjcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBfX2NsZWFyX2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwogICAgICAgICBfX3BtYWNfc2V0X2lycV9tYXNrKHNyYywgMSk7Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG1hY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtMTc4LDI0ICsxNzgsMjQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlfX3NldF9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgX19wbWFjX3NldF9pcnFfbWFzayhzcmMsIDApOwotICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgcG1hY19yZXRyaWdnZXIodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlfX3BtYWNfcmV0cmlnZ2VyKGlycV9tYXBbdmlycV0uaHdpcnEpOwotICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcG1hY19waWMgPSB7Ci0JLm5hbWUJCT0gIiBQTUFDLVBJQyAiLAorCS5uYW1lCQk9ICJQTUFDLVBJQyIsCiAJLnN0YXJ0dXAJPSBwbWFjX3N0YXJ0dXBfaXJxLAogCS5tYXNrCQk9IHBtYWNfbWFza19pcnEsCiAJLmFjawkJPSBwbWFjX2Fja19pcnEsCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlpbnQgaXJxLCBiaXRzOwogCWludCByYyA9IElSUV9OT05FOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCWZvciAoaXJxID0gbWF4X2lycXM7IChpcnEgLT0gMzIpID49IG1heF9yZWFsX2lycXM7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwogCQliaXRzID0gaW5fbGUzMigmcG1hY19pcnFfaHdbaV0tPmV2ZW50KSB8IHBwY19sb3N0X2ludGVycnVwdHNbaV07CkBAIC0yMjAsMTIgKzIyMCwxMiBAQAogCQlpZiAoYml0cyA9PSAwKQogCQkJY29udGludWU7CiAJCWlycSArPSBfX2lsb2cyKGJpdHMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAkJcmMgPSBJUlFfSEFORExFRDsKIAl9Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQlyZXR1cm4gTk9fSVJRX0lHTk9SRTsJLyogaWdub3JlLCBhbHJlYWR5IGhhbmRsZWQgKi8KICAgICAgICAgfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJZm9yIChpcnEgPSBtYXhfcmVhbF9pcnFzOyAoaXJxIC09IDMyKSA+PSAwOyApIHsKIAkJaW50IGkgPSBpcnEgPj4gNTsKIAkJYml0cyA9IGluX2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5ldmVudCkgfCBwcGNfbG9zdF9pbnRlcnJ1cHRzW2ldOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCWlycSArPSBfX2lsb2cyKGJpdHMpOwogCQlicmVhazsKIAl9Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoaXJxIDwgMCkpCiAJCXJldHVybiBOT19JUlE7CiAJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKHBtYWNfcGljX2hvc3QsIGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwppbmRleCBiNDBjMjJkLi42ODk4ZTgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKQEAgLTY5Myw5ICs2OTMsOSBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogCiAJLyogaTJjIGJhc2VkIEhXIHN5bmMgb24gc29tZSBHNXMgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJc21wX2NvcmU5OV9zZXR1cF9pMmNfaHdzeW5jKG5jcHVzKTsKIAogCS8qIHBmdW5jIGJhc2VkIEhXIHN5bmMgb24gcmVjZW50IEc1cyAqLwpAQCAtNzEzLDcgKzcxMyw3IEBACiAjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KIAogCS8qIEdQSU8gYmFzZWQgSFcgc3luYyBvbiBwcGMzMiBDb3JlOTkgKi8KLQlpZiAocG1hY190Yl9mcmVlemUgPT0gTlVMTCAmJiAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CisJaWYgKHBtYWNfdGJfZnJlZXplID09IE5VTEwgJiYgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKIAkJY29uc3QgdTMyICp0YnByb3AgPSBOVUxMOwogCkBAIC03NTAsNyArNzUwLDcgQEAKICNlbmRpZgogCiAJLyogMzIgYml0cyBTTVAgY2FuJ3QgTkFQICovCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCiAJCXBvd2Vyc2F2ZV9uYXAgPSAwOwogfQogCkBAIC04NTIsNyArODUyLDcgQEAKIAkJLyogSWYgd2UgZGlkbid0IHN0YXJ0IHRoZSBzZWNvbmQgQ1BVLCB3ZSBtdXN0IHRha2UKIAkJICogaXQgb2ZmIHRoZSBidXMKIAkJICovCi0JCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikgJiYKKwkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSAmJgogCQkgICAgbnVtX29ubGluZV9jcHVzKCkgPCAyKQkJCiAJCQlnNV9waHlfZGlzYWJsZV9jcHUxKCk7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCmluZGV4IDE4MTBlNDIuLjQ4MjExY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCkBAIC0zMTcsOSArMzE3LDkgQEAKIAkgKiBjYWxpYnJhdGlvbi4gVGhhdCdzIGJldHRlciBzaW5jZSB0aGUgVklBIGl0c2VsZiBzZWVtcwogCSAqIHRvIGJlIHNsaWdodGx5IG9mZi4gLS1CZW5ICiAJICovCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MyIikgJiYKLQkgICAgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDMiIpICYmCisJICAgICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKIAkJaWYgKHZpYV9jYWxpYnJhdGVfZGVjcigpKQogCQkJcmV0dXJuOwogCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkgKiBwcm9iYWJseSBpbXBsZW1lbnQgY2FsaWJyYXRpb24gYmFzZWQgb24gdGhlIEtMIHRpbWVyIG9uIHRoZXNlCiAJICogbWFjaGluZXMgYW55d2F5Li4uIC1CZW5ICiAJICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDUiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsNSIpKQogCQlpZiAodmlhX2NhbGlicmF0ZV9kZWNyKCkpCiAJCQlyZXR1cm47CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYwppbmRleCA5NDkwMTU3Li5kODMxMzVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfc2NjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCkBAIC0xMzIsOSArMTMyLDkgQEAKIAkJc2NjX2luaXR0YWJbMV0gPSBpbl84KHNjY2MpOwogCQlvdXRfOChzY2NjLCAxMik7CiAJCXNjY19pbml0dGFiWzNdID0gaW5fOChzY2NjKTsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCi0JCSAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCi0JCSAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwxIikKKwkJICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwyIikKKwkJICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CiAJCS8qIFhzZXJ2ZXMgYW5kIEc1cyBkZWZhdWx0IHRvIDU3NjAwICovCiAJCXNjY19pbml0dGFiWzFdID0gMDsKIAkJc2NjX2luaXR0YWJbM10gPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IGNjZDhkZDAuLjdkZjdmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogRVhQT1JUX1NZTUJPTChlZWhfc3Vic3lzdGVtX2VuYWJsZWQpOwogCiAvKiBMb2NrIHRvIGF2b2lkIHJhY2VzIGR1ZSB0byBtdWx0aXBsZSByZXBvcnRzIG9mIGFuIGVycm9yICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpcm1fZXJyb3JfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb25maXJtX2Vycm9yX2xvY2spOwogCiAvKiBCdWZmZXIgZm9yIHJlcG9ydGluZyBzbG90LWVycm9yLWRldGFpbCBydGFzIGNhbGxzLiBJdHMgaGVyZQogICogaW4gQlNTLCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jZWQsIHNvIHRoYXQgaXQgZW5kcyB1cCBpbgpAQCAtNDM2LDcgKzQzNiw3IEBACiB2b2lkIGVlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CiAJCiAJZG4gPSBmaW5kX2RldmljZV9wZSAoZG4pOwogCQpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfm1vZGVfZmxhZzsKIAlQQ0lfRE4oZG4pLT5lZWhfY2hlY2tfY291bnQgPSAwOwogCV9fZWVoX2NsZWFyX3Nsb3QoZG4sIG1vZGVfZmxhZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCSAgICBwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfTk9DSEVDSykgewogCQlpZ25vcmVkX2NoZWNrKys7CiAJCXByX2RlYnVnKCJFRUg6IElnbm9yZWQgY2hlY2sgKCV4KSBmb3IgJXMgJXNcbiIsCi0JCQkgcGRuLT5lZWhfbW9kZSwgcGNpX25hbWUgKGRldiksIGRuLT5mdWxsX25hbWUpOworCQkJIHBkbi0+ZWVoX21vZGUsIGVlaF9wY2lfbmFtZShkZXYpLCBkbi0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MDYsNyArNTA2LDcgQEAKIAkgKiBpbiBvbmUgc2xvdCBtaWdodCByZXBvcnQgZXJyb3JzIHNpbXVsdGFuZW91c2x5LCBhbmQgd2UKIAkgKiBvbmx5IHdhbnQgb25lIGVycm9yIHJlY292ZXJ5IHJvdXRpbmUgcnVubmluZy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAlyYyA9IDE7CiAJaWYgKHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9JU09MQVRFRCkgewogCQlwZG4tPmVlaF9jaGVja19jb3VudCArKzsKQEAgLTUxNSw3ICs1MTUsNyBAQAogCQkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiAlZCByZWFkcyBpZ25vcmVkIGZvciByZWNvdmVyaW5nIGRldmljZSBhdCAiCiAJCQkJImxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIiwKIAkJCQlwZG4tPmVlaF9jaGVja19jb3VudCwgbG9jYXRpb24sCi0JCQkJZGV2LT5kcml2ZXItPm5hbWUsIHBjaV9uYW1lKGRldikpOworCQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBlZWhfcGNpX25hbWUoZGV2KSk7CiAJCQlwcmludGsgKEtFUk5fRVJSICJFRUg6IE1pZ2h0IGJlIGluZmluaXRlIGxvb3AgaW4gJXMgZHJpdmVyXG4iLAogCQkJCWRldi0+ZHJpdmVyLT5uYW1lKTsKIAkJCWR1bXBfc3RhY2soKTsKQEAgLTU3NSw3ICs1NzUsNyBAQAogCSAqIHdpdGggb3RoZXIgZnVuY3Rpb25zIG9uIHRoaXMgZGV2aWNlLCBhbmQgZnVuY3Rpb25zIHVuZGVyCiAJICogYnJpZGdlcy4gKi8KIAllZWhfbWFya19zbG90IChkbiwgRUVIX01PREVfSVNPTEFURUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAogCWVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgKGRuLCBkZXYpOwogCkBAIC01ODYsNyArNTg2LDcgQEAKIAlyZXR1cm4gMTsKIAogZG5fdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEwNjQsNyArMTA2NCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpwaGIsICpucDsKIAlzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIGluZm87CiAKLQlzcGluX2xvY2tfaW5pdCgmY29uZmlybV9lcnJvcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJmNvbmZpcm1fZXJyb3JfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNsb3RfZXJyYnVmX2xvY2spOwogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IGVmOGU0NTQuLmI4ZDcwZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJCWxvY2F0aW9uID0gbG9jYXRpb24gPyBsb2NhdGlvbiA6ICJ1bmtub3duIjsKIAkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IEVycm9yOiBDYW5ub3QgZmluZCBwYXJ0aXRpb24gZW5kcG9pbnQgIgogCQkgICAgICAgICAgICAgICAgImZvciBsb2NhdGlvbj0lcyBwY2kgYWRkcj0lc1xuIiwKLQkJICAgICAgICBsb2NhdGlvbiwgcGNpX25hbWUoZXZlbnQtPmRldikpOworCQkgICAgICAgIGxvY2F0aW9uLCBlZWhfcGNpX25hbWUoZXZlbnQtPmRldikpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTM2OCw3ICszNjgsNyBAQAogCQlwY2lfc3RyID0gcGNpX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CiAJCWRydl9zdHIgPSBwY2lkX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CiAJfSBlbHNlIHsKLQkJcGNpX3N0ciA9IHBjaV9uYW1lIChldmVudC0+ZGV2KTsKKwkJcGNpX3N0ciA9IGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KTsKIAkJZHJ2X3N0ciA9IHBjaWRfbmFtZSAoZXZlbnQtPmRldik7CiAJfQogCQpAQCAtNDc4LDkgKzQ3OCw5IEBACiAJICogZHVlIHRvIGFjdHVhbCwgZmFpbGVkIGNhcmRzLgogCSAqLwogCXByaW50ayhLRVJOX0VSUgotCSAgICJFRUg6IFBDSSBkZXZpY2UgYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzIFxuIgorCSAgICJFRUg6IFBDSSBkZXZpY2UgYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iCiAJCSJoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXIgIgotCQkiYW5kIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLiBcbiIKKwkJImFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbiIKIAkJIlBsZWFzZSB0cnkgcmVzZWF0aW5nIHRoaXMgZGV2aWNlIG9yIHJlcGxhY2luZyBpdC5cbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyLCBmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50KTsKIAlnb3RvIHBlcm1fZXJyb3I7CkBAIC00ODgsNyArNDg4LDcgQEAKIGhhcmRfZmFpbDoKIAlwcmludGsoS0VSTl9FUlIKIAkgICAiRUVIOiBVbmFibGUgdG8gcmVjb3ZlciBmcm9tIGZhaWx1cmUgb2YgUENJIGRldmljZSAiCi0JICAgImF0IGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lcyBcbiIKKwkgICAiYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iCiAJICAgIlBsZWFzZSB0cnkgcmVzZWF0aW5nIHRoaXMgZGV2aWNlIG9yIHJlcGxhY2luZyBpdC5cbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCmluZGV4IGRkYjgwZjUuLmVjNWRmOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKQEAgLTgwLDcgKzgwLDcgQEAKIAllZWhfbWFya19zbG90KGV2ZW50LT5kbiwgRUVIX01PREVfUkVDT1ZFUklORyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJFRUg6IERldGVjdGVkIFBDSSBidXMgZXJyb3Igb24gZGV2aWNlICVzXG4iLAotCSAgICAgICBwY2lfbmFtZShldmVudC0+ZGV2KSk7CisJICAgICAgIGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KSk7CiAKIAlwZG4gPSBoYW5kbGVfZWVoX2V2ZW50cyhldmVudCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggNmVhNDY5OC4uZDFiMTI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTM4NywyNCArMzg3LDEyIEBACiAKIHN0YXRpYyBpbnQgcGFyc2VfY2VkZV9wYXJhbWV0ZXJzKHZvaWQpCiB7Ci0JaW50IGNhbGxfc3RhdHVzOwotCiAJbWVtc2V0KGNlZGVfcGFyYW1ldGVycywgMCwgQ0VERV9MQVRFTkNZX1BBUkFNX01BWF9MRU5HVEgpOwotCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAotCQkJCU5VTEwsCi0JCQkJQ0VERV9MQVRFTkNZX1RPS0VOLAotCQkJCV9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKLQkJCQlDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7Ci0KLQlpZiAoY2FsbF9zdGF0dXMgIT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ0VERV9MQVRFTkNZOiBcCi0JCQklcyAlcyBFcnJvciBjYWxsaW5nIGdldC1zeXN0ZW0tcGFyYW1ldGVyKDB4JXgpXG4iLAotCQkJX19GSUxFX18sIF9fZnVuY19fLCBjYWxsX3N0YXR1cyk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJDRURFX0xBVEVOQ1k6IFwKLQkJCWdldC1zeXN0ZW0tcGFyYW1ldGVyIHN1Y2Nlc3NmdWwuXG4iKTsKLQotCXJldHVybiBjYWxsX3N0YXR1czsKKwlyZXR1cm4gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAorCQkJIE5VTEwsCisJCQkgQ0VERV9MQVRFTkNZX1RPS0VOLAorCQkJIF9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKKwkJCSBDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfY3B1X2hvdHBsdWdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwppbmRleCAyZjU4YzcxLi4xZmVmYWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwpAQCAtMTI0LDggKzEyNCw4IEBACiAKIAloID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfc3RhdHMpW29wY29kZSAvIDRdOwogCWgtPm51bV9jYWxscysrOwotCWgtPnRiX3RvdGFsID0gbWZ0YigpIC0gaC0+dGJfc3RhcnQ7Ci0JaC0+cHVycl90b3RhbCA9IG1mc3ByKFNQUk5fUFVSUikgLSBoLT5wdXJyX3N0YXJ0OworCWgtPnRiX3RvdGFsICs9IG1mdGIoKSAtIGgtPnRiX3N0YXJ0OworCWgtPnB1cnJfdG90YWwgKz0gbWZzcHIoU1BSTl9QVVJSKSAtIGgtPnB1cnJfc3RhcnQ7CiAKIAlwdXRfY3B1X3ZhcihoY2FsbF9zdGF0cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKaW5kZXggYjZmYTNlNC4uNGI3YTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJjLCBpOwogCi0JcHJfZGVidWcoIlBDSTogUmVtb3ZpbmcgUEhCICUwNHg6JTAyeC4uLiBcbiIsCisJcHJfZGVidWcoIlBDSTogUmVtb3ZpbmcgUEhCICUwNHg6JTAyeC4uLlxuIiwKIAkJIHBjaV9kb21haW5fbnIoYiksIGItPm51bWJlcik7CiAKIAkvKiBXZSBjYW5ub3QgdG8gcmVtb3ZlIGEgcm9vdCBidXMgdGhhdCBoYXMgY2hpbGRyZW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYwppbmRleCAxNWViNjEwLi4yMjVhNTBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGh5cF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BoeXBfZHVtcC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJNYXggYXV0byB0aW1lPSAlZFxuIiwgcGgtPm1heHRpbWVfdG9fYXV0byk7CiAKIAkvKnNldCBjcHUgc3RhdGUgYW5kIGhwdGUgc3RhdGVzIGFzIHdlbGwgc2NyYXRjaCBwYWQgYXJlYSAqLwotCXByaW50ayhLRVJOX0lORk8gIiBDUFUgQVJFQSBcbiIpOworCXByaW50ayhLRVJOX0lORk8gIiBDUFUgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuZHVtcF9mbGFncyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IHNvdXJjZV90eXBlID0lZFxuIiwgcGgtPmNwdV9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJjcHUgZXJyb3JfZmxhZ3MgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuZXJyb3JfZmxhZ3MpOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGxlbmd0aF9jb3BpZWQgPSVsbHhcbiIsCiAJCXBoLT5jcHVfZGF0YS5sZW5ndGhfY29waWVkKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiBIUFRFIEFSRUEgXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICIgSFBURSBBUkVBXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gIkhQVEUgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGVycm9yX2ZsYWdzID0lZFxuIiwgcGgtPmhwdGVfZGF0YS5lcnJvcl9mbGFncyk7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGxlbmd0aF9jb3BpZWQgPSVsbHhcbiIsCiAJCXBoLT5ocHRlX2RhdGEubGVuZ3RoX2NvcGllZCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIgU1JTRCBBUkVBIFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiIFNSU0QgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiU1JTRCBkdW1wX2ZsYWdzID0lZFxuIiwgcGgtPmtlcm5lbF9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0Qgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuc291cmNlX3R5cGUpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0QgZXJyb3JfZmxhZ3MgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuZXJyb3JfZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IGI0ODg2NjMuLjRlN2Y4OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTE0NCw4ICsxNDQsOCBAQAogCQloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5yKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBoY3B1aWQpOwogCQlpZiAocmMgIT0gSF9TVUNDRVNTKQotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZFwKLQkJCQkJCVJldD0gJWxkXG4iLCBuciwgcmMpOworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZCAiCisJCQkJCQkiUmV0PSAlbGRcbiIsIG5yLCByYyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCBkODBmMTkzYy4uNGNhNjQxMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogCWxwYXJfcmMgPSBwbHBhcl94aXJyKCZyZXR1cm5fdmFsdWUpOwogCWlmIChscGFyX3JjICE9IEhfU1VDQ0VTUykKLQkJcGFuaWMoIiBiYWQgcmV0dXJuIGNvZGUgeGlyciAtIHJjID0gJWx4IFxuIiwgbHBhcl9yYyk7CisJCXBhbmljKCIgYmFkIHJldHVybiBjb2RlIHhpcnIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7CiAJcmV0dXJuICh1bnNpZ25lZCBpbnQpcmV0dXJuX3ZhbHVlOwogfQogCkBAIC0xOTEsMTEgKzE5MSw3IEBACiAJcmV0dXJuIGRlZmF1bHRfc2VydmVyOwogfQogI2Vsc2UKLXN0YXRpYyBpbnQgZ2V0X2lycV9zZXJ2ZXIodW5zaWduZWQgaW50IHZpcnEsIGNwdW1hc2tfdCBjcHVtYXNrLAotCQkJICB1bnNpZ25lZCBpbnQgc3RyaWN0X2NoZWNrKQotewotCXJldHVybiBkZWZhdWx0X3NlcnZlcjsKLX0KKyNkZWZpbmUgZ2V0X2lycV9zZXJ2ZXIodmlycSwgY3B1bWFzaywgc3RyaWN0X2NoZWNrKSAoZGVmYXVsdF9zZXJ2ZXIpCiAjZW5kaWYKIAogc3RhdGljIHZvaWQgeGljc191bm1hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtNDI4LDcgKzQyNCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGljc19waWNfZGlyZWN0ID0gewotCS5uYW1lID0gIiBYSUNTICAgICAiLAorCS5uYW1lID0gIlhJQ1MiLAogCS5zdGFydHVwID0geGljc19zdGFydHVwLAogCS5tYXNrID0geGljc19tYXNrX2lycSwKIAkudW5tYXNrID0geGljc191bm1hc2tfaXJxLApAQCAtNDM3LDcgKzQzMyw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2xwYXIgPSB7Ci0JLm5hbWUgPSAiIFhJQ1MgICAgICIsCisJLm5hbWUgPSAiWElDUyIsCiAJLnN0YXJ0dXAgPSB4aWNzX3N0YXJ0dXAsCiAJLm1hc2sgPSB4aWNzX21hc2tfaXJxLAogCS51bm1hc2sgPSB4aWNzX3VubWFza19pcnEsCkBAIC01MTQsMTUgKzUxMCwxMyBAQAogLyoKICAqIFhJQ1Mgb25seSBoYXMgYSBzaW5nbGUgSVBJLCBzbyBlbmNvZGUgdGhlIG1lc3NhZ2VzIHBlciBDUFUKICAqLwotc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLXN0YXRpYyBzdHJ1Y3QgeGljc19pcGlfc3RydWN0IHhpY3NfaXBpX21lc3NhZ2VbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRCh1bnNpZ25lZCBsb25nLCB4aWNzX2lwaV9tZXNzYWdlKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNtcF94aWNzX2RvX21lc3NhZ2UoaW50IGNwdSwgaW50IG1zZykKIHsKLQlzZXRfYml0KG1zZywgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSk7CisJdW5zaWduZWQgbG9uZyAqdGd0ID0gJnBlcl9jcHUoeGljc19pcGlfbWVzc2FnZSwgY3B1KTsKKworCXNldF9iaXQobXNnLCB0Z3QpOwogCW1iKCk7CiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCWxwYXJfcWlycl9pbmZvKGNwdSwgSVBJX1BSSU9SSVRZKTsKQEAgLTU0OCwyNSArNTQyLDIzIEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9kaXNwYXRjaChpbnQgY3B1KQogeworCXVuc2lnbmVkIGxvbmcgKnRndCA9ICZwZXJfY3B1KHhpY3NfaXBpX21lc3NhZ2UsIGNwdSk7CisKIAlXQVJOX09OKGNwdV9pc19vZmZsaW5lKGNwdSkpOwogCiAJbWIoKTsJLyogb3JkZXIgbW1pbyBjbGVhcmluZyBxaXJyICovCi0Jd2hpbGUgKHhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DVElPTiwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwl3aGlsZSAoKnRndCkgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DVElPTiwgdGd0KSkgewogCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0NBTExfRlVOQ1RJT04pOwogCQl9Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19SRVNDSEVEVUxFLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwgdGd0KSkgewogCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX1JFU0NIRURVTEUpOwogCQl9Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSwgdGd0KSkgewogCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUpOwogCQl9CiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdHRVIpIHx8IGRlZmluZWQoQ09ORklHX0tFWEVDKQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfREVCVUdHRVJfQlJFQUssCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19ERUJVR0dFUl9CUkVBSywgdGd0KSkgewogCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKIAkJfQogI2VuZGlmCkBAIC03ODgsOSArNzgwLDEzIEBACiB7CiAJc3RydWN0IHhpY3NfY3BwciAqb3NfY3BwciA9ICZfX2dldF9jcHVfdmFyKHhpY3NfY3Bwcik7CiAKLQlCVUdfT04ob3NfY3Bwci0+aW5kZXggIT0gMCk7CisJLyoKKwkgKiB3ZSBvbmx5IHJlYWxseSB3YW50IHRvIHNldCB0aGUgcHJpb3JpdHkgd2hlbiB0aGVyZSdzCisJICoganVzdCBvbmUgY3BwciB2YWx1ZSBvbiB0aGUgc3RhY2sKKwkgKi8KKwlXQVJOX09OKG9zX2NwcHItPmluZGV4ICE9IDApOwogCi0Jb3NfY3Bwci0+c3RhY2tbb3NfY3Bwci0+aW5kZXhdID0gY3BwcjsKKwlvc19jcHByLT5zdGFja1swXSA9IGNwcHI7CiAKIAlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKIAkJbHBhcl9jcHByX2luZm8oY3Bwcik7CkBAIC04MjUsOCArODIxLDE0IEBACiAKIHZvaWQgeGljc190ZWFyZG93bl9jcHUodm9pZCkKIHsKKwlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisJLyoKKwkgKiB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBjcHByIGluZGV4IHRvIDAgYmVjYXVzZSB3ZSdyZQorCSAqIG5vdCBnb2luZyB0byByZXR1cm4gZnJvbSB0aGUgSVBJCisJICovCisJb3NfY3Bwci0+aW5kZXggPSAwOwogCXhpY3Nfc2V0X2NwdV9wcmlvcml0eSgwKTsKIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIElQSSByZXF1ZXN0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IGE0YjQxZGIuLmVjYWQxMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC03Nyw3ICs3Nyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY3BtX3BpYyA9IHsKLQkubmFtZSA9ICIgQ1BNIFBJQyAiLAorCS5uYW1lID0gIkNQTSBQSUMiLAogCS5tYXNrID0gY3BtX21hc2tfaXJxLAogCS51bm1hc2sgPSBjcG1fdW5tYXNrX2lycSwKIAkuZW9pID0gY3BtX2VuZF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKaW5kZXggMTcwOWFjNS4uZmNlYTRmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY3BtMl9waWMgPSB7Ci0JLm5hbWUgPSAiIENQTTIgU0lVICIsCisJLm5hbWUgPSAiQ1BNMiBTSVUiLAogCS5tYXNrID0gY3BtMl9tYXNrX2lycSwKIAkudW5tYXNrID0gY3BtMl91bm1hc2tfaXJxLAogCS5hY2sgPSBjcG0yX2FjaywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKaW5kZXggYzZlMTFiMC4uZTA5NDM2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAkubWFzawkJPSBtYXNrX21zaV9pcnEsCiAJLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKIAkuYWNrCQk9IGZzbF9tc2lfZW5kX2lycSwKLQkubmFtZQk9ICIgRlNMLU1TSSAgIiwKKwkubmFtZQkJPSAiRlNMLU1TSSIsCiB9OwogCiBzdGF0aWMgaW50IGZzbF9tc2lfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9ncmFja2xlLmMKaW5kZXggNWRhMzdjMi4uY2YyN2RmNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9ncmFja2xlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9ncmFja2xlLmMKQEAgLTU2LDkgKzU2LDkgQEAKIHZvaWQgX19pbml0IHNldHVwX2dyYWNrbGUoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQogewogCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCAweGZlYzAwMDAwLCAweGZlZTAwMDAwLCAwKTsKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMSwxIikpCiAJCXBwY19wY2lfYWRkX2ZsYWdzKFBQQ19QQ0lfUkVBU1NJR05fQUxMX0JVUyk7Ci0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikpCiAJCWdyYWNrbGVfc2V0X2xvb3Bfc25vb3AoaG9zZSwgMSk7CiAjaWYgMAkvKiBEaXNhYmxlZCBmb3Igbm93LCBIVyBwcm9ibGVtcyA/Pz8gKi8KIAlncmFja2xlX3NldF9zdGcoaG9zZSwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKaW5kZXggMGE1NWRiOC4uNjMyM2U3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYwpAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBjYWNoZWRfQTEgKGNhY2hlZF84MjU5WzBdKQogI2RlZmluZSBjYWNoZWRfMjEgKGNhY2hlZF84MjU5WzFdKQogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGk4MjU5X2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaTgyNTlfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKmk4MjU5X2hvc3Q7CiAKQEAgLTQyLDcgKzQyLDcgQEAKIAlpZiAocGNpX2ludGFjaykKIAkJaXJxID0gcmVhZGIocGNpX2ludGFjayk7CiAJZWxzZSB7Ci0JCXNwaW5fbG9jaygmaTgyNTlfbG9jayk7CisJCXJhd19zcGluX2xvY2soJmk4MjU5X2xvY2spOwogCQlsb2NrID0gMTsKIAogCQkvKiBQZXJmb3JtIGFuIGludGVycnVwdCBhY2tub3dsZWRnZSBjeWNsZSBvbiBjb250cm9sbGVyIDEuICovCkBAIC03NCw3ICs3NCw3IEBACiAJCWlycSA9IE5PX0lSUTsKIAogCWlmIChsb2NrKQotCQlzcGluX3VubG9jaygmaTgyNTlfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmaTgyNTlfbG9jayk7CiAJcmV0dXJuIGlycTsKIH0KIApAQCAtODIsNyArODIsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogCWlmIChpcnFfbnIgPiA3KSB7CiAJCWNhY2hlZF9BMSB8PSAxIDw8IChpcnFfbnItOCk7CiAJCWluYigweEExKTsgCS8qIERVTU1ZICovCkBAIC05NSw3ICs5NSw3IEBACiAJCW91dGIoY2FjaGVkXzIxLCAweDIxKTsKIAkJb3V0YigweDIwLCAweDIwKTsJLyogTm9uLXNwZWNpZmljIEVPSSAqLwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaTgyNTlfc2V0X2lycV9tYXNrKGludCBpcnFfbnIpCkBAIC0xMTAsMTMgKzExMCwxMyBAQAogCiAJcHJfZGVidWcoImk4MjU5X21hc2tfaXJxKCVkKVxuIiwgaXJxX25yKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAJaWYgKGlycV9uciA8IDgpCiAJCWNhY2hlZF8yMSB8PSAxIDw8IGlycV9ucjsKIAllbHNlCiAJCWNhY2hlZF9BMSB8PSAxIDw8IChpcnFfbnItOCk7CiAJaTgyNTlfc2V0X2lycV9tYXNrKGlycV9ucik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGk4MjU5X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycV9ucikKQEAgLTEyNSwxNyArMTI1LDE3IEBACiAKIAlwcl9kZWJ1ZygiaTgyNTlfdW5tYXNrX2lycSglZClcbiIsIGlycV9ucik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogCWlmIChpcnFfbnIgPCA4KQogCQljYWNoZWRfMjEgJj0gfigxIDw8IGlycV9ucik7CiAJZWxzZQogCQljYWNoZWRfQTEgJj0gfigxIDw8IChpcnFfbnItOCkpOwogCWk4MjU5X3NldF9pcnFfbWFzayhpcnFfbnIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGk4MjU5X3BpYyA9IHsKLQkubmFtZQkJPSAiIGk4MjU5ICAgICIsCisJLm5hbWUJCT0gImk4MjU5IiwKIAkubWFzawkJPSBpODI1OV9tYXNrX2lycSwKIAkuZGlzYWJsZQk9IGk4MjU5X21hc2tfaXJxLAogCS51bm1hc2sJCT0gaTgyNTlfdW5tYXNrX2lycSwKQEAgLTI0MSw3ICsyNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBjb250cm9sbGVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAogCS8qIE1hc2sgYWxsIGZpcnN0ICovCiAJb3V0YigweGZmLCAweEExKTsKQEAgLTI3Myw3ICsyNzMsNyBAQAogCW91dGIoY2FjaGVkX0ExLCAweEExKTsKIAlvdXRiKGNhY2hlZF8yMSwgMHgyMSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAogCS8qIGNyZWF0ZSBhIGxlZ2FjeSBob3N0ICovCiAJaTgyNTlfaG9zdCA9IGlycV9hbGxvY19ob3N0KG5vZGUsIElSUV9IT1NUX01BUF9MRUdBQ1ksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCmluZGV4IDI4Y2RkZGQuLmQ3YjliOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCkBAIC0zMiw3ICszMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXBpYyAqIHByaW1hcnlfaXBpYzsKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXBpY19sZXZlbF9pcnFfY2hpcCwgaXBpY19lZGdlX2lycV9jaGlwOwotc3RhdGljIERFRklORV9TUElOTE9DSyhpcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaXBpY19sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBpcGljX2luZm8gaXBpY19pbmZvW10gPSB7CiAJWzFdID0gewpAQCAtNTMwLDEzICs1MzAsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgfD0gKDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrLCB0ZW1wKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKQEAgLTU0Niw3ICs1NDYsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKIAogCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzayk7CiAJdGVtcCAmPSB+KDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CkBAIC01NTYsNyArNTU2LDcgQEAKIAkgKiBmb3IgbmVhcmx5IGFsbCBjYXNlcy4gKi8KIAltYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpcGljX2Fja19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC01NjYsNyArNTY2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gMSA8PCAoMzEgLSBpcGljX2luZm9bc3JjXS5iaXQpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10uYWNrLCB0ZW1wKTsKQEAgLTU3NSw3ICs1NzUsNyBAQAogCSAqIGZvciBuZWFybHkgYWxsIGNhc2VzLiAqLwogCW1iKCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwaWNfbWFza19pcnFfYW5kX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKQEAgLTU4NSw3ICs1ODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKIAogCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzayk7CiAJdGVtcCAmPSB+KDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CkBAIC01OTgsNyArNTk4LDcgQEAKIAkgKiBmb3IgbmVhcmx5IGFsbCBjYXNlcy4gKi8KIAltYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGlwaWNfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQpAQCAtNjYwLDcgKzY2MCw3IEBACiAKIC8qIGxldmVsIGludGVycnVwdHMgYW5kIGVkZ2UgaW50ZXJydXB0cyBoYXZlIGRpZmZlcmVudCBhY2sgb3BlcmF0aW9ucyAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcGljX2xldmVsX2lycV9jaGlwID0gewotCS5uYW1lCQk9ICIgSVBJQyAgIiwKKwkubmFtZQkJPSAiSVBJQyIsCiAJLnVubWFzawkJPSBpcGljX3VubWFza19pcnEsCiAJLm1hc2sJCT0gaXBpY19tYXNrX2lycSwKIAkubWFza19hY2sJPSBpcGljX21hc2tfaXJxLApAQCAtNjY4LDcgKzY2OCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwaWNfZWRnZV9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiIElQSUMgICIsCisJLm5hbWUJCT0gIklQSUMiLAogCS51bm1hc2sJCT0gaXBpY191bm1hc2tfaXJxLAogCS5tYXNrCQk9IGlwaWNfbWFza19pcnEsCiAJLm1hc2tfYWNrCT0gaXBpY19tYXNrX2lycV9hbmRfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eF9waWMuYwppbmRleCA2OWJkNmY0Li44YzI3ZDI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eF9waWMuYwpAQCAtOTQsNyArOTQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzh4eF9waWMgPSB7Ci0JLm5hbWUgPSAiIE1QQzhYWCBTSVUgIiwKKwkubmFtZSA9ICJNUEM4WFggU0lVIiwKIAkudW5tYXNrID0gbXBjOHh4X3VubWFza19pcnEsCiAJLm1hc2sgPSBtcGM4eHhfbWFza19pcnEsCiAJLmFjayA9IG1wYzh4eF9hY2ssCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCmluZGV4IDQ3MGRjNmMuLjMzOWU4YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCkBAIC00Niw3ICs0Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbXBpYyAqbXBpY3M7CiBzdGF0aWMgc3RydWN0IG1waWMgKm1waWNfcHJpbWFyeTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXBpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG1waWNfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfUFBDMzIJLyogWFhYIGZvciBub3cgKi8KICNpZmRlZiBDT05GSUdfSVJRX0FMTF9DUFVTCkBAIC0zNDcsMTAgKzM0NywxMCBAQAogCQl1bnNpZ25lZCBpbnQgbWFzayA9IDFVIDw8IChmaXh1cC0+aW5kZXggJiAweDFmKTsKIAkJd3JpdGVsKG1hc2ssIGZpeHVwLT5hcHBsZWJhc2UgKyBzb2ZmKTsKIAl9IGVsc2UgewotCQlzcGluX2xvY2soJm1waWMtPmZpeHVwX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZtcGljLT5maXh1cF9sb2NrKTsKIAkJd3JpdGViKDB4MTEgKyAyICogZml4dXAtPmluZGV4LCBmaXh1cC0+YmFzZSArIDIpOwogCQl3cml0ZWwoZml4dXAtPmRhdGEsIGZpeHVwLT5iYXNlICsgNCk7Ci0JCXNwaW5fdW5sb2NrKCZtcGljLT5maXh1cF9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZtcGljLT5maXh1cF9sb2NrKTsKIAl9CiB9CiAKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJREJHKCJzdGFydHVwX2h0X2ludGVycnVwdCgweCV4LCAweCV4KSBpbmRleDogJWRcbiIsCiAJICAgIHNvdXJjZSwgaXJxZmxhZ3MsIGZpeHVwLT5pbmRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKIAkvKiBFbmFibGUgYW5kIGNvbmZpZ3VyZSAqLwogCXdyaXRlYigweDEwICsgMiAqIGZpeHVwLT5pbmRleCwgZml4dXAtPmJhc2UgKyAyKTsKIAl0bXAgPSByZWFkbChmaXh1cC0+YmFzZSArIDQpOwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJaWYgKGlycWZsYWdzICYgSVJRX0xFVkVMKQogCQl0bXAgfD0gMHgyMjsKIAl3cml0ZWwodG1wLCBmaXh1cC0+YmFzZSArIDQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOwogCiAjaWZkZWYgQ09ORklHX1BNCiAJLyogdXNlIHRoZSBsb3dlc3QgYml0IGludmVydGVkIHRvIHRoZSBhY3R1YWwgSFcsCkBAIC0zOTYsMTIgKzM5NiwxMiBAQAogCURCRygic2h1dGRvd25faHRfaW50ZXJydXB0KDB4JXgsIDB4JXgpXG4iLCBzb3VyY2UsIGlycWZsYWdzKTsKIAogCS8qIERpc2FibGUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOwogCXdyaXRlYigweDEwICsgMiAqIGZpeHVwLT5pbmRleCwgZml4dXAtPmJhc2UgKyAyKTsKIAl0bXAgPSByZWFkbChmaXh1cC0+YmFzZSArIDQpOwogCXRtcCB8PSAxOwogCXdyaXRlbCh0bXAsIGZpeHVwLT5iYXNlICsgNCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CiAKICNpZmRlZiBDT05GSUdfUE0KIAkvKiB1c2UgdGhlIGxvd2VzdCBiaXQgaW52ZXJ0ZWQgdG8gdGhlIGFjdHVhbCBIVywKQEAgLTUxNSw3ICs1MTUsNyBAQAogCUJVR19PTihtcGljLT5maXh1cHMgPT0gTlVMTCk7CiAKIAkvKiBJbml0IHNwaW5sb2NrICovCi0Jc3Bpbl9sb2NrX2luaXQoJm1waWMtPmZpeHVwX2xvY2spOworCXJhd19zcGluX2xvY2tfaW5pdCgmbXBpYy0+Zml4dXBfbG9jayk7CiAKIAkvKiBNYXAgVTMgY29uZmlnIHNwYWNlLiBXZSBhc3N1bWUgYWxsIElPLUFQSUNzIGFyZSBvbiB0aGUgcHJpbWFyeSBidXMKIAkgKiBzbyB3ZSBvbmx5IG5lZWQgdG8gbWFwIDY0a0IuCkBAIC01NzMsMTIgKzU3MywxMiBAQAogCiAJaWYgKGNwdW1hc2tfZXF1YWwobWFzaywgY3B1X2FsbF9tYXNrKSkgewogCQlzdGF0aWMgaW50IGlycV9yb3ZlcjsKLQkJc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfcm92ZXJfbG9jayk7CisJCXN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGlycV9yb3Zlcl9sb2NrKTsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQkvKiBSb3VuZC1yb2JpbiBkaXN0cmlidXRpb24uLi4gKi8KIAlkb19yb3VuZF9yb2JpbjoKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX3JvdmVyX2xvY2ssIGZsYWdzKTsKIAogCQl3aGlsZSAoIWNwdV9vbmxpbmUoaXJxX3JvdmVyKSkgewogCQkJaWYgKCsraXJxX3JvdmVyID49IE5SX0NQVVMpCkBAIC01OTAsNyArNTkwLDcgQEAKIAkJCQlpcnFfcm92ZXIgPSAwOwogCQl9IHdoaWxlICghY3B1X29ubGluZShpcnFfcm92ZXIpKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX3JvdmVyX2xvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogCQljcHVpZCA9IGNwdW1hc2tfZmlyc3RfYW5kKG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CiAJCWlmIChjcHVpZCA+PSBucl9jcHVfaWRzKQpAQCAtMTM2OCwxNCArMTM2OCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHY7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKIAl2ID0gbXBpY19yZWFkKG1waWMtPmdyZWdzLCBNUElDX0dSRUdfR0xPQkFMX0NPTkZfMSk7CiAJaWYgKGVuYWJsZSkKIAkJdiB8PSBNUElDX0dSRUdfR0xPQkFMX0NPTkZfMV9TSUU7CiAJZWxzZQogCQl2ICY9IH5NUElDX0dSRUdfR0xPQkFMX0NPTkZfMV9TSUU7CiAJbXBpY193cml0ZShtcGljLT5ncmVncywgTVBJQ19HUkVHX0dMT0JBTF9DT05GXzEsIHYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBtcGljX2lycV9zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaSkKQEAgLTEzODgsNyArMTM4OCw3IEBACiAJaWYgKCFtcGljKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKIAlpZiAobXBpY19pc19pcGkobXBpYywgaXJxKSkgewogCQlyZWcgPSBtcGljX2lwaV9yZWFkKHNyYyAtIG1waWMtPmlwaV92ZWNzWzBdKSAmCiAJCQl+TVBJQ19WRUNQUklfUFJJT1JJVFlfTUFTSzsKQEAgLTE0MDAsNyArMTQwMCw3IEBACiAJCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSwKIAkJCSAgICAgICByZWcgfCAocHJpIDw8IE1QSUNfVkVDUFJJX1BSSU9SSVRZX1NISUZUKSk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBtcGljX3NldHVwX3RoaXNfY3B1KHZvaWQpCkBAIC0xNDE1LDcgKzE0MTUsNyBAQAogCiAJREJHKCIlczogc2V0dXBfdGhpc19jcHUoJWQpXG4iLCBtcGljLT5uYW1lLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKIAogIAkvKiBsZXQgdGhlIG1waWMga25vdyB3ZSB3YW50IGludHJzLiBkZWZhdWx0IGFmZmluaXR5IGlzIDB4ZmZmZmZmZmYKIAkgKiB1bnRpbCBjaGFuZ2VkIHZpYSAvcHJvYy4gVGhhdCdzIGhvdyBpdCdzIGRvbmUgb24geDg2LiBJZiB3ZSB3YW50CkBAIC0xNDMxLDcgKzE0MzEsNyBAQAogCS8qIFNldCBjdXJyZW50IHByb2Nlc3NvciBwcmlvcml0eSB0byAwICovCiAJbXBpY19jcHVfd3JpdGUoTVBJQ19JTkZPKENQVV9DVVJSRU5UX1RBU0tfUFJJKSwgMCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogfQogCkBAIC0xNDYwLDcgKzE0NjAsNyBAQAogCUJVR19PTihtcGljID09IE5VTEwpOwogCiAJREJHKCIlczogdGVhcmRvd25fdGhpc19jcHUoJWQpXG4iLCBtcGljLT5uYW1lLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CiAKIAkvKiBsZXQgdGhlIG1waWMga25vdyB3ZSBkb24ndCB3YW50IGludHJzLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbXBpYy0+bnVtX3NvdXJjZXMgOyBpKyspCkBAIC0xNDc0LDcgKzE0NzQsNyBAQAogCSAqLwogCW1waWNfZW9pKG1waWMpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogfQogCiAKQEAgLTE1NzUsNyArMTU3NSw3IEBACiAJaW50IGk7CiAJQlVHX09OKG1waWMgPT0gTlVMTCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJtcGljOiByZXF1ZXN0aW5nIElQSXMgLi4uIFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAibXBpYzogcmVxdWVzdGluZyBJUElzLi4uXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJdW5zaWduZWQgaW50IHZpcGkgPSBpcnFfY3JlYXRlX21hcHBpbmcobXBpYy0+aXJxaG9zdCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCmluZGV4IDBmNmFiMDYuLjNiNmE5YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYwpAQCAtNjAsNyArNjAsNyBAQAogCS5lb2kJCT0gbXBpY19lbmRfaXJxLAogCS5zZXRfdHlwZQk9IG1waWNfc2V0X2lycV90eXBlLAogCS5zZXRfYWZmaW5pdHkJPSBtcGljX3NldF9hZmZpbml0eSwKLQkubmFtZQkJPSAiUEFTRU1JLU1TSSAiLAorCS5uYW1lCQk9ICJQQVNFTUktTVNJIiwKIH07CiAKIHN0YXRpYyBpbnQgcGFzZW1pX21zaV9jaGVja19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYwppbmRleCBiNmJkNzc1Li4zMWFjZDNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKQEAgLTE4OSw2ICsxOTAsNyBAQAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoTVBTQ19DVExSX05BTUUsIHBvcnRfbnVtYmVyKTsKIAlpZiAoIXBkZXYpCiAJCXJldHVybiAtRU5PTUVNOworCXBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByLCA1KTsKIAlpZiAoZXJyKQpAQCAtMzAyLDYgKzMwNCw3IEBACiAJaWYgKCFwZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgciwgMSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKaW5kZXggNmZmOWQ3MS4uOGFhMzMwMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKQEAgLTU2OSw3ICs1NjksOCBAQAogCWhvc2UtPmxhc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMV0gOiAweGZmOwogCiAJLyogU2V0dXAgY29uZmlnIHNwYWNlICovCi0Jc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmNfY2ZnLnN0YXJ0LCByc3JjX2NmZy5zdGFydCArIDB4NCwgMCk7CisJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmNfY2ZnLnN0YXJ0LCByc3JjX2NmZy5zdGFydCArIDB4NCwKKwkJCQkJUFBDX0lORElSRUNUX1RZUEVfU0VUX0NGR19UWVBFKTsKIAogCS8qIERpc2FibGUgYWxsIHdpbmRvd3MgKi8KIAl3cml0ZWwoMCwgcmVnICsgUENJWDBfUE9NMFNBKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3NvYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfc29jLmMKaW5kZXggNWIzMmFkYy4uNWMwMTQzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfc29jLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfc29jLmMKQEAgLTE3NCw3ICsxNzQsOCBAQAogCQl8IEwyQ19DRkdfQ1BJTSB8IEwyQ19DRkdfVFBJTSB8IEwyQ19DRkdfTElNIHwgTDJDX0NGR19TTUNNOwogCiAJLyogQ2hlY2sgZm9yIDQ2MEVYL0dUIHNwZWNpYWwgaGFuZGxpbmcgKi8KLQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sbDItY2FjaGUtNDYwZXgiKSkKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sbDItY2FjaGUtNDYwZXgiKSB8fAorCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxsMi1jYWNoZS00NjBndCIpKQogCQlyIHw9IEwyQ19DRkdfUkRCVzsKIAogCW10ZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX0NGRywgcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYwppbmRleCAyYWNjOTI4Li5kOTI3ZGE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHFlX2ljX2lycV9jaGlwID0gewotCS5uYW1lID0gIiBRRUlDICAiLAorCS5uYW1lID0gIlFFSUMiLAogCS51bm1hc2sgPSBxZV9pY191bm1hc2tfaXJxLAogCS5tYXNrID0gcWVfaWNfbWFza19pcnEsCiAJLm1hc2tfYWNrID0gcWVfaWNfbWFza19pcnEsCkBAIC0yNTYsNyArMjU2LDcgQEAKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CiAKIAlpZiAocWVfaWNfaW5mb1tod10ubWFzayA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgbWFwIHJlc2VydmVkIElSUSBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IG1hcCByZXNlcnZlZCBJUlFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogRGVmYXVsdCBjaGlwICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaW8uYwppbmRleCA3Yzg3NDYwLi43N2U0OTM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pby5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMKQEAgLTE1NywxMyArMTU3LDEzIEBACiAJY29uc3QgdW5zaWduZWQgaW50ICpwaW9fbWFwOwogCiAJaWYgKHBhcl9pbyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGFyX2lvIG5vdCBpbml0aWFsaXplZCBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInBhcl9pbyBub3QgaW5pdGlhbGl6ZWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcGggPSBvZl9nZXRfcHJvcGVydHkobnAsICJwaW8taGFuZGxlIiwgTlVMTCk7CiAJaWYgKHBoID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwaW8taGFuZGxlIG5vdCBhdmFpbGFibGUgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwaW8taGFuZGxlIG5vdCBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNzEsMTIgKzE3MSwxMiBAQAogCiAJcGlvX21hcCA9IG9mX2dldF9wcm9wZXJ0eShwaW8sICJwaW8tbWFwIiwgJnBpb19tYXBfbGVuKTsKIAlpZiAocGlvX21hcCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGlvLW1hcCBpcyBub3Qgc2V0ISBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInBpby1tYXAgaXMgbm90IHNldCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXBpb19tYXBfbGVuIC89IHNpemVvZih1bnNpZ25lZCBpbnQpOwogCWlmICgocGlvX21hcF9sZW4gJSA2KSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGlvLW1hcCBmb3JtYXQgd3JvbmchIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicGlvLW1hcCBmb3JtYXQgd3JvbmchXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKaW5kZXggNmYyMjBhOS4uMDAzOGZiNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB1aWNfaXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIiBVSUMgICIsCisJLm5hbWUJCT0gIlVJQyIsCiAJLnVubWFzawkJPSB1aWNfdW5tYXNrX2lycSwKIAkubWFzawkJPSB1aWNfbWFza19pcnEsCiAgCS5tYXNrX2Fjawk9IHVpY19tYXNrX2Fja19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggNGU2MTUyYy4uOGJhZDdkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtNjEsNyArNjEsNyBAQAogc3RhdGljIGludCB4bW9uX2dhdGU7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl94bW9uID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGluX3htb24gX19yZWFkX21vc3RseSA9IDA7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFkcnM7CiBzdGF0aWMgaW50IHNpemUgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBjODAyMzUyLi4wZDhjZDliIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNTQsNiArNTQsOSBAQAogCWRlcGVuZHMgb24gQlVHCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBHRU5FUklDX0JVR19SRUxBVElWRV9QT0lOVEVSUworCWRlZl9ib29sIHkKKwogY29uZmlnIE5PX0lPTUVNCiAJZGVmX2Jvb2wgeQogCkBAIC04Nyw2ICs5MCw3IEBACiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJc2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQogCXNlbGVjdCBIQVZFX0RFRkFVTFRfTk9fU1BJTl9NVVRFWEVTCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9LUFJPQkVTCkBAIC05NSw2ICs5OSw5IEBACiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKIAlzZWxlY3QgSU5JVF9BTExfUE9TU0lCTEUKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCisJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCisJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLCiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DS19CSAogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX0xPQ0sKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnLmRlYnVnIGIvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKaW5kZXggMjI4MzkzMy4uNDVlMGM2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKQEAgLTYsNCArNiwxNyBAQAogCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCitjb25maWcgREVCVUdfU1RSSUNUX1VTRVJfQ09QWV9DSEVDS1MKKwlib29sICJTdHJpY3QgdXNlciBjb3B5IHNpemUgY2hlY2tzIgorCS0tLWhlbHAtLS0KKwkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHR1cm5zIGEgY2VydGFpbiBzZXQgb2Ygc2FuaXR5IGNoZWNrcyBmb3IgdXNlcgorCSAgY29weSBvcGVyYXRpb25zIGludG8gY29tcGlsZSB0aW1lIHdhcm5pbmdzLgorCisJICBUaGUgY29weV9mcm9tX3VzZXIoKSBldGMgY2hlY2tzIGFyZSB0aGVyZSB0byBoZWxwIHRlc3QgaWYgdGhlcmUKKwkgIGFyZSBzdWZmaWNpZW50IHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgbGVuZ3RoIGFyZ3VtZW50IG9mCisJICB0aGUgY29weSBvcGVyYXRpb24sIGJ5IGhhdmluZyBnY2MgcHJvdmUgdGhhdCB0aGUgYXJndW1lbnQgaXMKKwkgIHdpdGhpbiBib3VuZHMuCisKKwkgIElmIHVuc3VyZSwgb3IgaWYgeW91IHJ1biBhbiBvbGRlciAocHJlIDQuNCkgZ2NjLCBzYXkgTi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL01ha2VmaWxlIGIvYXJjaC9zMzkwL01ha2VmaWxlCmluZGV4IGZjOGZiMjAuLjBkYTEwNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKICMKIAogaWZuZGVmIENPTkZJR182NEJJVAorTERfQkZECQk6PSBlbGYzMi1zMzkwCiBMREZMQUdTCQk6PSAtbSBlbGZfczM5MAogS0JVSUxEX0NGTEFHUwkrPSAtbTMxCiBLQlVJTERfQUZMQUdTCSs9IC1tMzEKQEAgLTIxLDYgKzIyLDcgQEAKIFNUQUNLX1NJWkUJOj0gODE5MgogQ0hFQ0tGTEFHUwkrPSAtRF9fczM5MF9fIC1tc2l6ZS1sb25nCiBlbHNlCitMRF9CRkQJCTo9IGVsZjY0LXMzOTAKIExERkxBR1MJCTo9IC1tIGVsZjY0X3MzOTAKIE1PREZMQUdTCSs9IC1mcGljIC1EX19QSUNfXwogS0JVSUxEX0NGTEFHUwkrPSAtbTY0CkBAIC0zMCw2ICszMiw4IEBACiBDSEVDS0ZMQUdTCSs9IC1EX19zMzkwX18gLURfX3MzOTB4X18KIGVuZGlmCiAKK2V4cG9ydCBMRF9CRkQKKwogY2ZsYWdzLSQoQ09ORklHX01BUkNIX0c1KSAgICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWc1KQogY2ZsYWdzLSQoQ09ORklHX01BUkNIX1o5MDApICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPXo5MDApCiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfWjk5MCkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ejk5MCkKQEAgLTg1LDcgKzg5LDkgQEAKIE9CSkNPUFlGTEFHUwk6PSAtTyBiaW5hcnkKIExERkxBR1Nfdm1saW51eCA6PSAtZSBzdGFydAogCi1oZWFkLXkJCTo9IGFyY2gvczM5MC9rZXJuZWwvaGVhZC5vIGFyY2gvczM5MC9rZXJuZWwvaW5pdF90YXNrLm8KK2hlYWQteQkJOj0gYXJjaC9zMzkwL2tlcm5lbC9oZWFkLm8KK2hlYWQteQkJKz0gYXJjaC9zMzkwL2tlcm5lbC8kKGlmICQoQ09ORklHXzY0QklUKSxoZWFkNjQubyxoZWFkMzEubykKK2hlYWQteQkJKz0gYXJjaC9zMzkwL2tlcm5lbC9pbml0X3Rhc2subwogCiBjb3JlLXkJCSs9IGFyY2gvczM5MC9tbS8gYXJjaC9zMzkwL2tlcm5lbC8gYXJjaC9zMzkwL2NyeXB0by8gXAogCQkgICBhcmNoL3MzOTAvYXBwbGRhdGEvIGFyY2gvczM5MC9oeXBmcy8gYXJjaC9zMzkwL2t2bS8KQEAgLTk5LDEyICsxMDUsMTIgQEAKIAogYm9vdAkJOj0gYXJjaC9zMzkwL2Jvb3QKIAotYWxsOiBpbWFnZQorYWxsOiBpbWFnZSBiekltYWdlCiAKIGluc3RhbGw6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICRACiAKLWltYWdlOiB2bWxpbnV4CitpbWFnZSBiekltYWdlOiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkKGJvb3QpLyRACiAKIHpmY3BkdW1wOgpAQCAtMTE2LDQgKzEyMiw1IEBACiAjIERvbid0IHVzZSB0YWJzIGluIGVjaG8gYXJndW1lbnRzCiBkZWZpbmUgYXJjaGhlbHAKICAgZWNobyAgJyogaW1hZ2UgICAgICAgICAgIC0gS2VybmVsIGltYWdlIGZvciBJUEwgKCQoYm9vdCkvaW1hZ2UpJworICBlY2hvCScqIGJ6SW1hZ2UgICAgICAgICAtIENvbXByZXNzZWQga2VybmVsIGltYWdlIGZvciBJUEwgKCQoYm9vdCkvYnpJbWFnZSknCiBlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQppbmRleCA0ZDk3ZWVmLi44ODAwY2YwOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUKQEAgLTksMTAgKzksMTggQEAKIEVYVFJBX0NGTEFHUyAgOj0gLURDT01QSUxFX1ZFUlNJT049JChDT01QSUxFX1ZFUlNJT04pIC1nc3RhYnMgLUkuCiAKIHRhcmdldHMgOj0gaW1hZ2UKK3RhcmdldHMgKz0gYnpJbWFnZQorc3ViZGlyLSA6PSBjb21wcmVzc2VkCiAKICQob2JqKS9pbWFnZTogdm1saW51eCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCiAKKyQob2JqKS9iekltYWdlOiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKworJChvYmopL2NvbXByZXNzZWQvdm1saW51eDogRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG9iaikvY29tcHJlc3NlZCAkQAorCiBpbnN0YWxsOiAkKENPTkZJR1VSRSkgJChvYmopL2ltYWdlCiAJc2ggLXggICQoc3JjdHJlZSkvJChvYmopL2luc3RhbGwuc2ggJChLRVJORUxSRUxFQVNFKSAkKG9iaikvaW1hZ2UgXAogCSAgICAgIFN5c3RlbS5tYXAgS2VybnR5cGVzICIkKElOU1RBTExfUEFUSCkiCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTRhNjdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMCwwICsxLDYwIEBACisjCisjIGxpbnV4L2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKyMKKyMgY3JlYXRlIGEgY29tcHJlc3NlZCB2bWxpbnV4IGltYWdlIGZyb20gdGhlIG9yaWdpbmFsIHZtbGludXgKKyMKKworQklUUyA6PSAkKGlmICQoQ09ORklHXzY0QklUKSw2NCwzMSkKKwordGFyZ2V0cwk6PSB2bWxpbnV4LmxkcyB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiBcCisJICAgdm1saW51eC5iaW4ubHptYSBtaXNjLm8gcGlnZ3kubyBzaXplcy5oIGhlYWQkKEJJVFMpLm8KKworS0JVSUxEX0NGTEFHUyA6PSAtbSQoQklUUykgLURfX0tFUk5FTF9fICQoTElOVVhfSU5DTFVERSkgLU8yCitLQlVJTERfQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCitLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW1wYWNrZWQtc3RhY2spCitLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLWZmcmVlc3RhbmRpbmcpCisKK0dDT1ZfUFJPRklMRSA6PSBuCisKK09CSkVDVFMgOj0gJChhZGRwcmVmaXggJChvYmp0cmVlKS9hcmNoL3MzOTAva2VybmVsLywgaGVhZC5vIHNjbHAubyBlYmNkaWMubykKK09CSkVDVFMgKz0gJChvYmopL2hlYWQkKEJJVFMpLm8gJChvYmopL21pc2MubyAkKG9iaikvcGlnZ3kubworCitMREZMQUdTX3ZtbGludXggOj0gLS1vZm9ybWF0ICQoTERfQkZEKSAtZSBzdGFydHVwIC1UCiskKG9iaikvdm1saW51eDogJChvYmopL3ZtbGludXgubGRzICQoT0JKRUNUUykKKwkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKKwlAOgorCitzZWQtc2l6ZXMgOj0gLWUgJ3MvXlwoWzAtOWEtZkEtRl0qXCkgLiBcKF9fYnNzX3N0YXJ0XHxfZW5kXCkkJC9cI2RlZmluZSBTWlwyIDB4XDEvcCcKKworcXVpZXRfY21kX3NpemVzID0gR0VOICRACisgICAgICBjbWRfc2l6ZXMgPSAkKE5NKSAkPCB8IHNlZCAtbiAkKHNlZC1zaXplcykgPiAkQAorCiskKG9iaikvc2l6ZXMuaDogdm1saW51eAorCSQoY2FsbCBpZl9jaGFuZ2VkLHNpemVzKQorCitBRkxBR1NfaGVhZCQoQklUUykubyArPSAtSSQob2JqKQorJChvYmopL2hlYWQkKEJJVFMpLm86ICQob2JqKS9zaXplcy5oCisKK0NGTEFHU19taXNjLm8gKz0gLUkkKG9iaikKKyQob2JqKS9taXNjLm86ICQob2JqKS9zaXplcy5oCisKK09CSkNPUFlGTEFHU192bWxpbnV4LmJpbiA6PSAgLVIgLmNvbW1lbnQgLVMKKyQob2JqKS92bWxpbnV4LmJpbjogdm1saW51eAorCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCisKK3ZtbGludXguYmluLmFsbC15IDo9ICQob2JqKS92bWxpbnV4LmJpbgorCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApICA6PSBnegorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikgOj0gYnoyCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpICA6PSBsem1hCisKKyQob2JqKS92bWxpbnV4LmJpbi5nejogJCh2bWxpbnV4LmJpbi5hbGwteSkKKwkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQorJChvYmopL3ZtbGludXguYmluLmJ6MjogJCh2bWxpbnV4LmJpbi5hbGwteSkKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKyQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKHZtbGludXguYmluLmFsbC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCisKK0xERkxBR1NfcGlnZ3kubyA6PSAtciAtLWZvcm1hdCBiaW5hcnkgLS1vZm9ybWF0ICQoTERfQkZEKSAtVAorJChvYmopL3BpZ2d5Lm86ICQob2JqKS92bWxpbnV4LnNjciAkKG9iaikvdm1saW51eC5iaW4uJChzdWZmaXgteSkKKwkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDMxLlMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL2hlYWQzMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTUyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL2hlYWQzMS5TCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBTdGFydHVwIGdsdWUgY29kZSB0byB1bmNvbXByZXNzIHRoZSBrZXJuZWwKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTAKKyAqCisgKiAgIEF1dGhvcihzKToJTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlICJzaXplcy5oIgorCitfX0hFQUQKKwkuZ2xvYmwJc3RhcnR1cF9jb250aW51ZQorc3RhcnR1cF9jb250aW51ZToKKwliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKKy5MUEcxOgorCSMgc2V0dXAgc3RhY2sKKwlsCSVyMTUsLkxzdGFjay0uTFBHMSglcjEzKQorCWFoaQklcjE1LC05NgorCWwJJXIxLC5MZGVjb21wcmVzcy0uTFBHMSglcjEzKQorCWJhc3IJJXIxNCwlcjEKKwkjIHNldHVwIHJlZ2lzdGVycyBmb3IgbWVtb3J5IG1vdmVyICYgYnJhbmNoIHRvIHRhcmdldAorCWxyCSVyNCwlcjIKKwlsCSVyMiwuTG9mZnNldC0uTFBHMSglcjEzKQorCWxhCSVyNCwwKCVyMiwlcjQpCisJbAklcjMsLkxtdnNpemUtLkxQRzEoJXIxMykKKwlscgklcjUsJXIzCisJIyBtb3ZlIHRoZSBtZW1vcnkgbW92ZXIgc29tZXBsYWNlIHNhZmUKKwlsYQklcjEsMHgyMDAKKwltdmMJMChtb3Zlcl9lbmQtbW92ZXIsJXIxKSxtb3Zlci0uTFBHMSglcjEzKQorCSMgZGVjb21wcmVzcyBpbWFnZSBpcyBzdGFydGVkIGF0IDB4MTEwMDAKKwlscgklcjYsJXIyCisJYnIJJXIxCittb3ZlcjoKKwltdmNsZQklcjIsJXI0LDAKKwlqbwltb3ZlcgorCWJyCSVyNgorbW92ZXJfZW5kOgorCisJLmFsaWduCTgKKy5Mc3RhY2s6CisJLmxvbmcJMHg4MDAwICsgKDE8PChQQUdFX1NISUZUK1RIUkVBRF9PUkRFUikpCisuTGRlY29tcHJlc3M6CisJLmxvbmcJZGVjb21wcmVzc19rZXJuZWwKKy5Mb2Zmc2V0OgorCS5sb25nCTB4MTEwMDAKKy5MbXZzaXplOgorCS5sb25nCVNaX19ic3Nfc3RhcnQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDY0LlMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL2hlYWQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODJjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL2hlYWQ2NC5TCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBTdGFydHVwIGdsdWUgY29kZSB0byB1bmNvbXByZXNzIHRoZSBrZXJuZWwKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTAKKyAqCisgKiAgIEF1dGhvcihzKToJTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlICJzaXplcy5oIgorCitfX0hFQUQKKwkuZ2xvYmwJc3RhcnR1cF9jb250aW51ZQorc3RhcnR1cF9jb250aW51ZToKKwliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKKy5MUEcxOgorCSMgc2V0dXAgc3RhY2sKKwlsZwklcjE1LC5Mc3RhY2stLkxQRzEoJXIxMykKKwlhZ2hpCSVyMTUsLTE2MAorCWJyYXNsCSVyMTQsZGVjb21wcmVzc19rZXJuZWwKKwkjIHNldHVwIHJlZ2lzdGVycyBmb3IgbWVtb3J5IG1vdmVyICYgYnJhbmNoIHRvIHRhcmdldAorCWxncgklcjQsJXIyCisJbGcJJXIyLC5Mb2Zmc2V0LS5MUEcxKCVyMTMpCisJbGEJJXI0LDAoJXIyLCVyNCkKKwlsZwklcjMsLkxtdnNpemUtLkxQRzEoJXIxMykKKwlsZ3IJJXI1LCVyMworCSMgbW92ZSB0aGUgbWVtb3J5IG1vdmVyIHNvbWVwbGFjZSBzYWZlCisJbGEJJXIxLDB4MjAwCisJbXZjCTAobW92ZXJfZW5kLW1vdmVyLCVyMSksbW92ZXItLkxQRzEoJXIxMykKKwkjIGRlY29tcHJlc3MgaW1hZ2UgaXMgc3RhcnRlZCBhdCAweDExMDAwCisJbGdyCSVyNiwlcjIKKwlicgklcjEKK21vdmVyOgorCW12Y2xlCSVyMiwlcjQsMAorCWpvCW1vdmVyCisJYnIJJXI2Cittb3Zlcl9lbmQ6CisKKwkuYWxpZ24JOAorLkxzdGFjazoKKwkucXVhZAkweDgwMDAgKyAoMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSkKKy5Mb2Zmc2V0OgorCS5xdWFkCTB4MTEwMDAKKy5MbXZzaXplOgorCS5xdWFkCVNaX19ic3Nfc3RhcnQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3ZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogRGVmaW5pdGlvbnMgYW5kIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBrZXJuZWwgZGVjb21wcmVzc29yCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDEwCisgKgorICogQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaXBsLmg+CisjaW5jbHVkZSAic2l6ZXMuaCIKKworLyoKKyAqIGd6aXAgZGVjbGFyYXRpb25zCisgKi8KKyNkZWZpbmUgU1RBVElDIHN0YXRpYworCisjdW5kZWYgbWVtc2V0CisjdW5kZWYgbWVtY3B5CisjdW5kZWYgbWVtbW92ZQorI2RlZmluZSBtZW16ZXJvKHMsIG4pIG1lbXNldCgocyksIDAsIChuKSkKKworLyogU3ltYm9scyBkZWZpbmVkIGJ5IGxpbmtlciBzY3JpcHRzICovCitleHRlcm4gY2hhciBpbnB1dF9kYXRhW107CitleHRlcm4gaW50IGlucHV0X2xlbjsKK2V4dGVybiBpbnQgX3RleHQ7CitleHRlcm4gaW50IF9lbmQ7CisKK3N0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOworCisjaWZkZWYgQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyCisjZGVmaW5lIEhFQVBfU0laRQkweDQwMDAwMAorI2Vsc2UKKyNkZWZpbmUgSEVBUF9TSVpFCTB4MTAwMDAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tFUk5FTF9HWklQCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0JaSVAyCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfYnVuemlwMi5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTUEKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6bWEuYyIKKyNlbmRpZgorCitleHRlcm4gX3NjbHBfcHJpbnRfZWFybHkoY29uc3QgY2hhciAqKTsKKworaW50IHB1dHMoY29uc3QgY2hhciAqcykKK3sKKwlfc2NscF9wcmludF9lYXJseShzKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikKK3sKKwljaGFyICp4czsKKworCWlmIChjID09IDApCisJCXJldHVybiBfX2J1aWx0aW5fbWVtc2V0KHMsIDAsIG4pOworCisJeHMgPSAoY2hhciAqKSBzOworCWlmIChuID4gMCkKKwkJZG8geworCQkJKnhzKysgPSBjOworCQl9IHdoaWxlICgtLW4gPiAwKTsKKwlyZXR1cm4gczsKK30KKwordm9pZCAqbWVtY3B5KHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKK3sKKwlyZXR1cm4gX19idWlsdGluX21lbWNweShfX2Rlc3QsIF9fc3JjLCBfX24pOworfQorCit2b2lkICptZW1tb3ZlKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKK3sKKwljaGFyICpkOworCWNvbnN0IGNoYXIgKnM7CisKKwlpZiAoX19kZXN0IDw9IF9fc3JjKQorCQlyZXR1cm4gX19idWlsdGluX21lbWNweShfX2Rlc3QsIF9fc3JjLCBfX24pOworCWQgPSBfX2Rlc3QgKyBfX247CisJcyA9IF9fc3JjICsgX19uOworCXdoaWxlIChfX24tLSkKKwkJKi0tZCA9ICotLXM7CisJcmV0dXJuIF9fZGVzdDsKK30KKworc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgcHN3ID0gMHgwMDBhMDAwMGRlYWRiZWVmVUxMOworCisJcHV0cygiXG5cbiIpOworCXB1dHMoeCk7CisJcHV0cygiXG5cbiAtLSBTeXN0ZW0gaGFsdGVkIik7CisKKwlhc20gdm9sYXRpbGUoImxwc3cgJTAiIDogOiAiUSIgKHBzdykpOworfQorCisvKgorICogU2FmZSBndWFyZCB0aGUgaXBsIHBhcmFtZXRlciBibG9jayBhZ2FpbnN0IGEgbWVtb3J5IGFyZWEgdGhhdCB3aWxsIGJlCisgKiBvdmVyd3JpdHRlbi4gVGhlIHZhbGlkaXR5IGNoZWNrIGZvciB0aGUgaXBsIHBhcmFtZXRlciBibG9jayBpcyBjb21wbGV4CisgKiAoc2VlIGNpb19nZXRfaXBsaW5mbyBhbmQgaXBsX3NhdmVfcGFyYW1ldGVycykgYnV0IGlmIHRoZSBwb2ludGVyIHRvCisgKiB0aGUgaXBsIHBhcmFtZXRlciBibG9jayBpbnRlcnNlY3RzIHdpdGggdGhlIHBhc3NlZCBtZW1vcnkgYXJlYSB3ZSBjYW4KKyAqIHNhZmVseSBhc3N1bWUgdGhhdCB3ZSBjYW4gcmVhZCBmcm9tIHRoYXQgbWVtb3J5LiBJbiB0aGF0IGNhc2UganVzdCBjb3B5CisgKiB0aGUgbWVtb3J5IHRvIElQTF9QQVJNQkxPQ0tfT1JJR0lOIGV2ZW4gaWYgdGhlcmUgaXMgbm8gaXBsIHBhcmFtZXRlcgorICogYmxvY2suCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2lwbF9wYXJtYmxvY2sodm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICpzcmMsICpkc3Q7CisKKwlzcmMgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBTMzkwX2xvd2NvcmUuaXBsX3Bhcm1ibG9ja19wdHI7CisJaWYgKHNyYyArIFBBR0VfU0laRSA8PSBzdGFydCB8fCBzcmMgPj0gc3RhcnQgKyBzaXplKQorCQlyZXR1cm47CisJZHN0ID0gKHZvaWQgKikgSVBMX1BBUk1CTE9DS19PUklHSU47CisJbWVtbW92ZShkc3QsIHNyYywgUEFHRV9TSVpFKTsKKwlTMzkwX2xvd2NvcmUuaXBsX3Bhcm1ibG9ja19wdHIgPSBJUExfUEFSTUJMT0NLX09SSUdJTjsKK30KKwordW5zaWduZWQgbG9uZyBkZWNvbXByZXNzX2tlcm5lbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgb3V0cHV0X2FkZHI7CisJdW5zaWduZWQgY2hhciAqb3V0cHV0OworCisJZnJlZV9tZW1fcHRyID0gKHVuc2lnbmVkIGxvbmcpJl9lbmQ7CisJZnJlZV9tZW1fZW5kX3B0ciA9IGZyZWVfbWVtX3B0ciArIEhFQVBfU0laRTsKKwlvdXRwdXQgPSAodW5zaWduZWQgY2hhciAqKSAoKGZyZWVfbWVtX2VuZF9wdHIgKyA0MDk1VUwpICYgLTQwOTZVTCk7CisKKwljaGVja19pcGxfcGFybWJsb2NrKCh2b2lkICopIDAsICh1bnNpZ25lZCBsb25nKSBvdXRwdXQgKyBTWl9fYnNzX3N0YXJ0KTsKKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCS8qCisJICogTW92ZSB0aGUgaW5pdHJkIHJpZ2h0IGJlaGluZCB0aGUgZW5kIG9mIHRoZSBkZWNvbXByZXNzZWQKKwkgKiBrZXJuZWwgaW1hZ2UuCisJICovCisJaWYgKElOSVRSRF9TVEFSVCAmJiBJTklUUkRfU0laRSAmJgorCSAgICBJTklUUkRfU1RBUlQgPCAodW5zaWduZWQgbG9uZykgb3V0cHV0ICsgU1pfX2Jzc19zdGFydCkgeworCQljaGVja19pcGxfcGFybWJsb2NrKG91dHB1dCArIFNaX19ic3Nfc3RhcnQsCisJCQkJICAgIElOSVRSRF9TVEFSVCArIElOSVRSRF9TSVpFKTsKKwkJbWVtbW92ZShvdXRwdXQgKyBTWl9fYnNzX3N0YXJ0LAorCQkJKHZvaWQgKikgSU5JVFJEX1NUQVJULCBJTklUUkRfU0laRSk7CisJCUlOSVRSRF9TVEFSVCA9ICh1bnNpZ25lZCBsb25nKSBvdXRwdXQgKyBTWl9fYnNzX3N0YXJ0OworCX0KKyNlbmRpZgorCisJcHV0cygiVW5jb21wcmVzc2luZyBMaW51eC4uLiAiKTsKKwlkZWNvbXByZXNzKGlucHV0X2RhdGEsIGlucHV0X2xlbiwgTlVMTCwgTlVMTCwgb3V0cHV0LCBOVUxMLCBlcnJvcik7CisJcHV0cygiT2ssIGJvb3RpbmcgdGhlIGtlcm5lbC5cbiIpOworCXJldHVybiAodW5zaWduZWQgbG9uZykgb3V0cHV0OworfQorCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwZjc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpAQCAtMCwwICsxLDU1IEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KKworI2lmZGVmIENPTkZJR182NEJJVAorT1VUUFVUX0ZPUk1BVCgiZWxmNjQtczM5MCIsICJlbGY2NC1zMzkwIiwgImVsZjY0LXMzOTAiKQorT1VUUFVUX0FSQ0goczM5MDo2NC1iaXQpCisjZWxzZQorT1VUUFVUX0ZPUk1BVCgiZWxmMzItczM5MCIsICJlbGYzMi1zMzkwIiwgImVsZjMyLXMzOTAiKQorT1VUUFVUX0FSQ0goczM5MCkKKyNlbmRpZgorCitFTlRSWShzdGFydHVwKQorCitTRUNUSU9OUworeworCS8qIEJlIGNhcmVmdWwgcGFydHMgb2YgaGVhZF82NC5TIGFzc3VtZSBzdGFydHVwXzMyIGlzIGF0CisJICogYWRkcmVzcyAwLgorCSAqLworCS4gPSAwOworCS5oZWFkLnRleHQgOiB7CisJCV9oZWFkID0gLiA7CisJCUhFQURfVEVYVAorCQlfZWhlYWQgPSAuIDsKKwl9CisJLnJvZGF0YS5jb21wcmVzc2VkIDogeworCQkqKC5yb2RhdGEuY29tcHJlc3NlZCkKKwl9CisJLnRleHQgOgl7CisJCV90ZXh0ID0gLjsJLyogVGV4dCAqLworCQkqKC50ZXh0KQorCQkqKC50ZXh0LiopCisJCV9ldGV4dCA9IC4gOworCX0KKwkucm9kYXRhIDogeworCQlfcm9kYXRhID0gLiA7CisJCSooLnJvZGF0YSkJIC8qIHJlYWQtb25seSBkYXRhICovCisJCSooLnJvZGF0YS4qKQorCQlfZXJvZGF0YSA9IC4gOworCX0KKwkuZGF0YSA6CXsKKwkJX2RhdGEgPSAuIDsKKwkJKiguZGF0YSkKKwkJKiguZGF0YS4qKQorCQlfZWRhdGEgPSAuIDsKKwl9CisJLiA9IEFMSUdOKDI1Nik7CisJLmJzcyA6IHsKKwkJX2JzcyA9IC4gOworCQkqKC5ic3MpCisJCSooLmJzcy4qKQorCQkqKENPTU1PTikKKwkJLiA9IEFMSUdOKDgpOwkvKiBGb3IgY29udmVuaWVuY2UgZHVyaW5nIHplcm9pbmcgKi8KKwkJX2Vic3MgPSAuOworCX0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5zY3IgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL3ZtbGludXguc2NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjM4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL3ZtbGludXguc2NyCkBAIC0wLDAgKzEsMTAgQEAKK1NFQ1RJT05TCit7CisgIC5yb2RhdGEuY29tcHJlc3NlZCA6IHsKKwlpbnB1dF9sZW4gPSAuOworCUxPTkcoaW5wdXRfZGF0YV9lbmQgLSBpbnB1dF9kYXRhKSBpbnB1dF9kYXRhID0gLjsKKwkqKC5kYXRhKQorCW91dHB1dF9sZW4gPSAuIC0gNDsKKwlpbnB1dF9kYXRhX2VuZCA9IC47CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCmluZGV4IDZiZTQ1MDMuLjU4ZjQ2NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKQEAgLTc4LDE0ICs3OCwxNCBAQAogCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCWludCByZXQ7CiAKLQlzY3R4LT5mYWxsYmFjay5ibGstPmJhc2UuY3J0X2ZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVNLOwotCXNjdHgtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgfD0gKHRmbS0+Y3J0X2ZsYWdzICYKKwlzY3R4LT5mYWxsYmFjay5jaXAtPmJhc2UuY3J0X2ZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVNLOworCXNjdHgtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgfD0gKHRmbS0+Y3J0X2ZsYWdzICYKIAkJCUNSWVBUT19URk1fUkVRX01BU0spOwogCiAJcmV0ID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkoc2N0eC0+ZmFsbGJhY2suY2lwLCBpbl9rZXksIGtleV9sZW4pOwogCWlmIChyZXQpIHsKIAkJdGZtLT5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVTX01BU0s7Ci0JCXRmbS0+Y3J0X2ZsYWdzIHw9IChzY3R4LT5mYWxsYmFjay5ibGstPmJhc2UuY3J0X2ZsYWdzICYKKwkJdGZtLT5jcnRfZmxhZ3MgfD0gKHNjdHgtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgJgogCQkJCUNSWVBUT19URk1fUkVTX01BU0spOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggYjQxNmFhMS4uN2FlNzFjYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0zNiw2ICszNiwxMyBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCmluZGV4IDJiOTJkNTAuLjg3Y2Y1MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAKIHN0YXRpYyBpbnQgZGlhZzIyNCh2b2lkICpwdHIpCiB7Ci0JaW50IHJjID0gLUVOT1RTVVBQOworCWludCByYyA9IC1FT1BOT1RTVVBQOwogCiAJYXNtIHZvbGF0aWxlKAogCQkiCWRpYWcJJTEsJTIsMHgyMjRcbiIKQEAgLTUwNyw3ICs1MDcsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoZGlhZzIyNChkaWFnMjI0X2NwdV9uYW1lcykpIHsKIAkJa2ZyZWUoZGlhZzIyNF9jcHVfbmFtZXMpOwotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCUVCQ0FTQyhkaWFnMjI0X2NwdV9uYW1lcyArIDE2LCAoKmRpYWcyMjRfY3B1X25hbWVzICsgMSkgKiAxNik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggMmExMTNkNi4uNDUxYmZiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTgsOCArMTgsNiBAQAogCiAjZGVmaW5lIEFUT01JQ19JTklUKGkpICB7IChpKSB9CiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotCiAjZGVmaW5lIF9fQ1NfTE9PUChwdHIsIG9wX3ZhbCwgb3Bfc3RyaW5nKSAoewkJCQlcCiAJaW50IG9sZF92YWwsIG5ld192YWw7CQkJCQkJXAogCWFzbSB2b2xhdGlsZSgJCQkJCQkJXApAQCAtMzUsMjYgKzMzLDYgQEAKIAluZXdfdmFsOwkJCQkJCQlcCiB9KQogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi0jZGVmaW5lIF9fQ1NfTE9PUChwdHIsIG9wX3ZhbCwgb3Bfc3RyaW5nKSAoewkJCQlcCi0JaW50IG9sZF92YWwsIG5ld192YWw7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAotCQkiCWwJJTAsMCglMylcbiIJCQkJXAotCQkiMDoJbHIJJTEsJTBcbiIJCQkJXAotCQlvcF9zdHJpbmcgIgklMSwlNFxuIgkJCQlcCi0JCSIJY3MJJTAsJTEsMCglMylcbiIJCQkJXAotCQkiCWpsCTBiIgkJCQkJXAotCQk6ICI9JmQiIChvbGRfdmFsKSwgIj0mZCIgKG5ld192YWwpLAkJCVwKLQkJICAiPW0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKLQkJOiAiYSIgKHB0ciksICJkIiAob3BfdmFsKSwJCQkJXAotCQkgICJtIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJCQlcCi0JCTogImNjIiwgIm1lbW9yeSIpOwkJCQkJXAotCW5ld192YWw7CQkJCQkJCVwKLX0pCi0KLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKIHsKIAliYXJyaWVyKCk7CkBAIC0xMDEsMTkgKzc5LDExIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQogewotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCiAJYXNtIHZvbGF0aWxlKAogCQkiCWNzCSUwLCUyLCUxIgogCQk6ICIrZCIgKG9sZCksICI9USIgKHYtPmNvdW50ZXIpCiAJCTogImQiIChuZXcpLCAiUSIgKHYtPmNvdW50ZXIpCiAJCTogImNjIiwgIm1lbW9yeSIpOwotI2Vsc2UgLyogX19HTlVDX18gKi8KLQlhc20gdm9sYXRpbGUoCi0JCSIJY3MJJTAsJTMsMCglMikiCi0JCTogIitkIiAob2xkKSwgIj1tIiAodi0+Y291bnRlcikKLQkJOiAiYSIgKHYpLCAiZCIgKG5ldyksICJtIiAodi0+Y291bnRlcikKLQkJOiAiY2MiLCAibWVtb3J5Iik7Ci0jZW5kaWYgLyogX19HTlVDX18gKi8KIAlyZXR1cm4gb2xkOwogfQogCkBAIC0xNDAsOCArMTEwLDYgQEAKIAogI2lmZGVmIENPTkZJR182NEJJVAogCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLQogI2RlZmluZSBfX0NTR19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKIAlsb25nIGxvbmcgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJCVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJCVwKQEAgLTE1NywyNiArMTI1LDYgQEAKIAluZXdfdmFsOwkJCQkJCQlcCiB9KQogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi0jZGVmaW5lIF9fQ1NHX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXAotCWxvbmcgbG9uZyBvbGRfdmFsLCBuZXdfdmFsOwkJCQkJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAotCQkiCWxnCSUwLDAoJTMpXG4iCQkJCVwKLQkJIjA6CWxncgklMSwlMFxuIgkJCQlcCi0JCW9wX3N0cmluZyAiCSUxLCU0XG4iCQkJCVwKLQkJIgljc2cJJTAsJTEsMCglMylcbiIJCQkJXAotCQkiCWpsCTBiIgkJCQkJXAotCQk6ICI9JmQiIChvbGRfdmFsKSwgIj0mZCIgKG5ld192YWwpLAkJCVwKLQkJICAiPW0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKLQkJOiAiYSIgKHB0ciksICJkIiAob3BfdmFsKSwJCQkJXAotCQkgICJtIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJCQlcCi0JCTogImNjIiwgIm1lbW9yeSIpOwkJCQkJXAotCW5ld192YWw7CQkJCQkJCVwKLX0pCi0KLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCiBzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF9yZWFkKGNvbnN0IGF0b21pYzY0X3QgKnYpCiB7CiAJYmFycmllcigpOwpAQCAtMjE0LDE5ICsxNjIsMTEgQEAKIHN0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGF0b21pYzY0X2NtcHhjaGcoYXRvbWljNjRfdCAqdiwKIAkJCQkJICAgICBsb25nIGxvbmcgb2xkLCBsb25nIGxvbmcgbmV3KQogewotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCiAJYXNtIHZvbGF0aWxlKAogCQkiCWNzZwklMCwlMiwlMSIKIAkJOiAiK2QiIChvbGQpLCAiPVEiICh2LT5jb3VudGVyKQogCQk6ICJkIiAobmV3KSwgIlEiICh2LT5jb3VudGVyKQogCQk6ICJjYyIsICJtZW1vcnkiKTsKLSNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKAotCQkiCWNzZwklMCwlMywwKCUyKSIKLQkJOiAiK2QiIChvbGQpLCAiPW0iICh2LT5jb3VudGVyKQotCQk6ICJhIiAodiksICJkIiAobmV3KSwgIm0iICh2LT5jb3VudGVyKQotCQk6ICJjYyIsICJtZW1vcnkiKTsKLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwogCXJldHVybiBvbGQ7CiB9CiAKQEAgLTI0MywxMCArMTgzLDggQEAKIAlyZWdpc3Rlcl9wYWlyIHJwOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCWxtCSUwLCVOMCwwKCUxKSIKLQkJOiAiPSZkIiAocnApCi0JCTogImEiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKLQkJKTsKKwkJIglsbQklMCwlTjAsJTEiCisJCTogIj0mZCIgKHJwKSA6ICJRIiAodi0+Y291bnRlcikJKTsKIAlyZXR1cm4gcnAucGFpcjsKIH0KIApAQCAtMjU1LDEwICsxOTMsOCBAQAogCXJlZ2lzdGVyX3BhaXIgcnAgPSB7LnBhaXIgPSBpfTsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIglzdG0JJTEsJU4xLDAoJTIpIgotCQk6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCTogImQiIChycCksICJhIiAoJnYtPmNvdW50ZXIpCi0JCSk7CisJCSIJc3RtCSUxLCVOMSwlMCIKKwkJOiAiPVEiICh2LT5jb3VudGVyKSA6ICJkIiAocnApICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBsb25nIG5ldykKQEAgLTI2NywxMSArMjAzLDExIEBACiAJcmVnaXN0ZXJfcGFpciBycF9vbGQ7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJbG0JJTAsJU4wLDAoJTIpXG4iCi0JCSIwOgljZHMJJTAsJTMsMCglMilcbiIKKwkJIglsbQklMCwlTjAsJTFcbiIKKwkJIjA6CWNkcwklMCwlMiwlMVxuIgogCQkiCWpsCTBiXG4iCi0JCTogIj0mZCIgKHJwX29sZCksICIrbSIgKHYtPmNvdW50ZXIpCi0JCTogImEiICgmdi0+Y291bnRlciksICJkIiAocnBfbmV3KQorCQk6ICI9JmQiIChycF9vbGQpLCAiPVEiICh2LT5jb3VudGVyKQorCQk6ICJkIiAocnBfbmV3KSwgIlEiICh2LT5jb3VudGVyKQogCQk6ICJjYyIpOwogCXJldHVybiBycF9vbGQucGFpcjsKIH0KQEAgLTI4Myw5ICsyMTksOSBAQAogCXJlZ2lzdGVyX3BhaXIgcnBfbmV3ID0gey5wYWlyID0gbmV3fTsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIgljZHMJJTAsJTMsMCglMikiCi0JCTogIismZCIgKHJwX29sZCksICIrbSIgKHYtPmNvdW50ZXIpCi0JCTogImEiICgmdi0+Y291bnRlciksICJkIiAocnBfbmV3KQorCQkiCWNkcwklMCwlMiwlMSIKKwkJOiAiKyZkIiAocnBfb2xkKSwgIj1RIiAodi0+Y291bnRlcikKKwkJOiAiZCIgKHJwX25ldyksICJRIiAodi0+Y291bnRlcikKIAkJOiAiY2MiKTsKIAlyZXR1cm4gcnBfb2xkLnBhaXI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggYjMwNjA2Zi4uMmUwNTk3MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtNzEsOCArNzEsNiBAQAogI2RlZmluZSBfX0JJVE9QU19BTkQJCSJuciIKICNkZWZpbmUgX19CSVRPUFNfWE9SCQkieHIiCiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotCiAjZGVmaW5lIF9fQklUT1BTX0xPT1AoX19vbGQsIF9fbmV3LCBfX2FkZHIsIF9fdmFsLCBfX29wX3N0cmluZykJXAogCWFzbSB2b2xhdGlsZSgJCQkJCQlcCiAJCSIJbAklMCwlMlxuIgkJCVwKQEAgLTg1LDIyICs4Myw2IEBACiAJCTogImQiIChfX3ZhbCksICJRIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikJXAogCQk6ICJjYyIpOwogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi0jZGVmaW5lIF9fQklUT1BTX0xPT1AoX19vbGQsIF9fbmV3LCBfX2FkZHIsIF9fdmFsLCBfX29wX3N0cmluZykJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQlcCi0JCSIJbAklMCwwKCU0KVxuIgkJCVwKLQkJIjA6CWxyCSUxLCUwXG4iCQkJXAotCQlfX29wX3N0cmluZyAiCSUxLCUzXG4iCQkJXAotCQkiCWNzCSUwLCUxLDAoJTQpXG4iCQkJXAotCQkiCWpsCTBiIgkJCQlcCi0JCTogIj0mZCIgKF9fb2xkKSwgIj0mZCIgKF9fbmV3KSwJCQlcCi0JCSAgIj1tIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikJCVwKLQkJOiAiZCIgKF9fdmFsKSwgImEiIChfX2FkZHIpLAkJCVwKLQkJICAibSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpIDogImNjIik7Ci0KLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAogI2RlZmluZSBfX0JJVE9QU19BTElHTgkJNwpAQCAtMTA5LDggKzkxLDYgQEAKICNkZWZpbmUgX19CSVRPUFNfQU5ECQkibmdyIgogI2RlZmluZSBfX0JJVE9QU19YT1IJCSJ4Z3IiCiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotCiAjZGVmaW5lIF9fQklUT1BTX0xPT1AoX19vbGQsIF9fbmV3LCBfX2FkZHIsIF9fdmFsLCBfX29wX3N0cmluZykJXAogCWFzbSB2b2xhdGlsZSgJCQkJCQlcCiAJCSIJbGcJJTAsJTJcbiIJCQlcCkBAIC0xMjMsMjMgKzEwMyw2IEBACiAJCTogImQiIChfX3ZhbCksICJRIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikJXAogCQk6ICJjYyIpOwogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi0jZGVmaW5lIF9fQklUT1BTX0xPT1AoX19vbGQsIF9fbmV3LCBfX2FkZHIsIF9fdmFsLCBfX29wX3N0cmluZykJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQlcCi0JCSIJbGcJJTAsMCglNClcbiIJCQlcCi0JCSIwOglsZ3IJJTEsJTBcbiIJCQlcCi0JCV9fb3Bfc3RyaW5nICIJJTEsJTNcbiIJCQlcCi0JCSIJY3NnCSUwLCUxLDAoJTQpXG4iCQkJXAotCQkiCWpsCTBiIgkJCQlcCi0JCTogIj0mZCIgKF9fb2xkKSwgIj0mZCIgKF9fbmV3KSwJCQlcCi0JCSAgIj1tIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikJCVwKLQkJOiAiZCIgKF9fdmFsKSwgImEiIChfX2FkZHIpLAkJCVwKLQkJICAibSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpIDogImNjIik7Ci0KLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAogI2RlZmluZSBfX0JJVE9QU19XT1JEUyhiaXRzKSAoKChiaXRzKStfX0JJVE9QU19XT1JEU0laRS0xKS9fX0JJVE9QU19XT1JEU0laRSkKQEAgLTI2MSw5ICsyMjQsOCBAQAogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWFzbSB2b2xhdGlsZSgKLQkJIglvYwkwKDEsJTEpLDAoJTIpIgotCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKSA6ICJhIiAoYWRkciksCi0JCSAgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJIglvYwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKSA6ICJRIiAoX29pX2JpdG1hcFtuciAmIDddKSA6ICJjYyIgKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIApAQCAtMjkwLDkgKzI1Miw4IEBACiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJYXNtIHZvbGF0aWxlKAotCQkiCW5jCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpCTogImEiIChhZGRyKSwKLQkJICAiYSIgKF9uaV9iaXRtYXAgKyAobnIgJiA3KSksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIik7CisJCSIJbmMJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikgOiAiUSIgKF9uaV9iaXRtYXBbbnIgJiA3XSkgOiAiY2MiICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKQEAgLTMxOCw5ICsyNzksOCBAQAogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWFzbSB2b2xhdGlsZSgKLQkJIgl4YwkwKDEsJTEpLDAoJTIpIgotCQk6ICAiPW0iICgqKGNoYXIgKikgYWRkcikgOiAiYSIgKGFkZHIpLAotCQkgICAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQkiCXhjCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpIDogIlEiIChfb2lfYml0bWFwW25yICYgN10pIDogImNjIiApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgCkBAIC0zNDksMTAgKzMwOSw5IEBACiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7CiAJYXNtIHZvbGF0aWxlKAotCQkiCW9jCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCTogImEiIChhZGRyKSwgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLAotCQkgICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiwgIm1lbW9yeSIpOworCQkiCW9jCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpCTogIlEiIChfb2lfYml0bWFwW25yICYgN10pCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiAoY2ggPj4gKG5yICYgNykpICYgMTsKIH0KICNkZWZpbmUgX190ZXN0X2FuZF9zZXRfYml0KFgsWSkJCXRlc3RfYW5kX3NldF9iaXRfc2ltcGxlKFgsWSkKQEAgLTM2OSwxMCArMzI4LDkgQEAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJY2ggPSAqKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKIAlhc20gdm9sYXRpbGUoCi0JCSIJbmMJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikKLQkJOiAiYSIgKGFkZHIpLCAiYSIgKF9uaV9iaXRtYXAgKyAobnIgJiA3KSksCi0JCSAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5Iik7CisJCSIJbmMJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikJOiAiUSIgKF9uaV9iaXRtYXBbbnIgJiA3XSkKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChjaCA+PiAobnIgJiA3KSkgJiAxOwogfQogI2RlZmluZSBfX3Rlc3RfYW5kX2NsZWFyX2JpdChYLFkpCXRlc3RfYW5kX2NsZWFyX2JpdF9zaW1wbGUoWCxZKQpAQCAtMzg5LDEwICszNDcsOSBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAljaCA9ICoodW5zaWduZWQgY2hhciAqKSBhZGRyOwogCWFzbSB2b2xhdGlsZSgKLQkJIgl4YwkwKDEsJTEpLDAoJTIpIgotCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQk6ICJhIiAoYWRkciksICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwKLQkJICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJIgl4YwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKQk6ICJRIiAoX29pX2JpdG1hcFtuciAmIDddKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7CiB9CiAjZGVmaW5lIF9fdGVzdF9hbmRfY2hhbmdlX2JpdChYLFkpCXRlc3RfYW5kX2NoYW5nZV9iaXRfc2ltcGxlKFgsWSkKQEAgLTU5MSwxMSArNTQ4LDExIEBACiAJcCA9ICh1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25nKSBwICsgb2Zmc2V0KTsKICNpZm5kZWYgX19zMzkweF9fCiAJYXNtIHZvbGF0aWxlKAotCQkiCWljCSUwLDAoJTEpXG4iCi0JCSIJaWNtCSUwLDIsMSglMSlcbiIKLQkJIglpY20JJTAsNCwyKCUxKVxuIgotCQkiCWljbQklMCw4LDMoJTEpIgotCQk6ICI9JmQiICh3b3JkKSA6ICJhIiAocCksICJtIiAoKnApIDogImNjIik7CisJCSIJaWMJJTAsJU8xKCVSMSlcbiIKKwkJIglpY20JJTAsMiwlTzErMSglUjEpXG4iCisJCSIJaWNtCSUwLDQsJU8xKzIoJVIxKVxuIgorCQkiCWljbQklMCw4LCVPMSszKCVSMSkiCisJCTogIj0mZCIgKHdvcmQpIDogIlEiICgqcCkgOiAiY2MiKTsKICNlbHNlCiAJYXNtIHZvbGF0aWxlKAogCQkiCWxydmcJJTAsJTEiCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggYjEwNjZiOS4uOWJlZWI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2J1Zy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaApAQCAtNSwxMiArNSw2IEBACiAKICNpZmRlZiBDT05GSUdfQlVHCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKLSNkZWZpbmUgUzM5MF9MT05HICIucXVhZCIKLSNlbHNlCi0jZGVmaW5lIFMzOTBfTE9ORyAiLmxvbmciCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCiAKICNkZWZpbmUgX19FTUlUX0JVRyh4KSBkbyB7CQkJCQlcCkBAIC0yMSw3ICsxNSw3IEBACiAJCSIyOgkuYXNjaXoJXCIiX19GSUxFX18iXCJcbiIJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJXAogCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCQlcCi0JCSIzOlx0IglTMzkwX0xPTkcgIlx0MWIsMmJcbiIJCQlcCisJCSIzOgkubG9uZwkxYi0zYiwyYi0zYlxuIgkJCVwKIAkJIgkuc2hvcnQJJTAsJTFcbiIJCQlcCiAJCSIJLm9yZwkzYislMlxuIgkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJXApAQCAtMzcsNyArMzEsNyBAQAogCQkiMDoJagkwYisyXG4iCQkJXAogCQkiMTpcbiIJCQkJCVwKIAkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQlcCi0JCSIyOlx0IglTMzkwX0xPTkcgIlx0MWJcbiIJCVwKKwkJIjI6CS5sb25nCTFiLTJiXG4iCQlcCiAJCSIJLnNob3J0CSUwXG4iCQkJXAogCQkiCS5vcmcJMmIrJTFcbiIJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmgKaW5kZXggMjE4NWE2ZC4uNzQ5YTk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaApAQCAtMzIsNiArMzIsNyBAQAogZXh0ZXJuIGludCBjcndfcmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpOwogZXh0ZXJuIHZvaWQgY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjKTsKIGV4dGVybiB2b2lkIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQodm9pZCk7Cit2b2lkIGNyd193YWl0X2Zvcl9jaGFubmVsX3JlcG9ydCh2b2lkKTsKIAogI2RlZmluZSBOUl9SU0NTIDE2CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ldHIuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ldHIuaAppbmRleCA4MGVmNThjLi41MzhlMWIzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZXRyLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2V0ci5oCkBAIC0xNDUsMTEgKzE0NSwxMSBAQAogCWludCByYyA9IC1FTk9TWVM7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJLmluc24JcywweGIyMTYwMDAwLDAoJTIpXG4iCisJCSIJLmluc24JcywweGIyMTYwMDAwLCUxXG4iCiAJCSIwOglsYQklMCwwXG4iCiAJCSIxOlxuIgogCQlFWF9UQUJMRSgwYiwxYikKLQkJOiAiK2QiIChyYykgOiAibSIgKCpjdHJsKSwgImEiIChjdHJsKSk7CisJCTogIitkIiAocmMpIDogIlEiICgqY3RybCkpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTU5LDExICsxNTksMTEgQEAKIAlpbnQgcmMgPSAtRU5PU1lTOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCS5pbnNuCXMsMHhiMjE3MDAwMCwwKCUyKVxuIgorCQkiCS5pbnNuCXMsMHhiMjE3MDAwMCwlMVxuIgogCQkiMDoJbGEJJTAsMFxuIgogCQkiMTpcbiIKIAkJRVhfVEFCTEUoMGIsMWIpCi0JCTogIitkIiAocmMpIDogIm0iICgqYWliKSwgImEiIChhaWIpKTsKKwkJOiAiK2QiIChyYykgOiAiUSIgKCphaWIpKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE3NCwxMSArMTc0LDExIEBACiAJaW50IHJjID0gLUVOT1NZUzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIgkuaW5zbglzLDB4YjJiMzAwMDAsMCglMilcbiIKKwkJIgkuaW5zbglzLDB4YjJiMzAwMDAsJTFcbiIKIAkJIjA6CWxhCSUwLDBcbiIKIAkJIjE6XG4iCiAJCUVYX1RBQkxFKDBiLDFiKQotCQk6ICIrZCIgKHJjKSA6ICJtIiAoKmFpYiksICJhIiAoYWliKSwgImQiIChyZWcwKSk7CisJCTogIitkIiAocmMpIDogIlEiICgqYWliKSwgImQiIChyZWcwKSk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCmluZGV4IGMyZmI0MzIuLjE1YjNhYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC04LDggKzgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KIC8qIHN0b3JlIHRoZW4gb3Igc3lzdGVtIG1hc2suICovCiAjZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zdG9zbShfX29yKQkJCQkJXAogKHsJCQkJCQkJCQlcCkBAIC0zNiw0MCArMzQsNiBAQAogCWFzbSB2b2xhdGlsZSgic3NtICAgJTAiIDogOiAiUSIgKF9fbWFzaykgOiAibWVtb3J5Iik7CQlcCiB9KQogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi0vKiBzdG9yZSB0aGVuIG9yIHN5c3RlbSBtYXNrLiAqLwotI2RlZmluZSBfX3Jhd19sb2NhbF9pcnFfc3Rvc20oX19vcikJCQkJCVwKLSh7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19tYXNrOwkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKLQkJIglzdG9zbQkwKCUxKSwlMiIJCQkJXAotCQk6ICI9bSIgKF9fbWFzaykJCQkJCQlcCi0JCTogImEiICgmX19tYXNrKSwgImkiIChfX29yKSA6ICJtZW1vcnkiKTsJCVwKLQlfX21hc2s7CQkJCQkJCQlcCi19KQotCi0vKiBzdG9yZSB0aGVuIGFuZCBzeXN0ZW0gbWFzay4gKi8KLSNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3N0bnNtKF9fYW5kKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX21hc2s7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAotCQkiCXN0bnNtCTAoJTEpLCUyIgkJCQlcCi0JCTogIj1tIiAoX19tYXNrKQkJCQkJCVwKLQkJOiAiYSIgKCZfX21hc2spLCAiaSIgKF9fYW5kKSA6ICJtZW1vcnkiKTsJCVwKLQlfX21hc2s7CQkJCQkJCQlcCi19KQotCi0vKiBzZXQgc3lzdGVtIG1hc2suICovCi0jZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zc20oX19tYXNrKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJc3NtCTAoJTApIgkJCQkJXAotCQk6IDogImEiICgmX19tYXNrKSwgIm0iIChfX21hc2spIDogIm1lbW9yeSIpOwkJXAotfSkKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIC8qIGludGVycnVwdCBjb250cm9sLi4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggZjJlZjRiNi4uMDU1MjdjMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xLDE0MSArMSwxNiBAQAogLyoKLSAqICBpbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSGFydG11dCBQZW5uZXIgKGhwQGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAxMAorICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAogI2lmbmRlZiBfQVNNX1MzOTBfTE9XQ09SRV9ICiAjZGVmaW5lIF9BU01fUzM5MF9MT1dDT1JFX0gKIAotI2RlZmluZSBfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSCQkweDAwMTQKLSNkZWZpbmUgX19MQ19FWFRfUEFSQU1TCQkJMHgwMDgwCi0jZGVmaW5lIF9fTENfQ1BVX0FERFJFU1MJCTB4MDA4NAotI2RlZmluZSBfX0xDX0VYVF9JTlRfQ09ERQkJMHgwMDg2Ci0KLSNkZWZpbmUgX19MQ19TVkNfSUxDCQkJMHgwMDg4Ci0jZGVmaW5lIF9fTENfU1ZDX0lOVF9DT0RFCQkweDAwOGEKLSNkZWZpbmUgX19MQ19QR01fSUxDCQkJMHgwMDhjCi0jZGVmaW5lIF9fTENfUEdNX0lOVF9DT0RFCQkweDAwOGUKLQotI2RlZmluZSBfX0xDX1BFUl9BVE1JRAkJCTB4MDA5NgotI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDAwOTgKLSNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDAwYTEKLSNkZWZpbmUgX19MQ19BUl9NT0RFX0lECQkJMHgwMGEzCi0KLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX0lECQkweDAwYjgKLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX05SCQkweDAwYmEKLSNkZWZpbmUgX19MQ19JT19JTlRfUEFSTQkJMHgwMGJjCi0jZGVmaW5lIF9fTENfSU9fSU5UX1dPUkQJCTB4MDBjMAotI2RlZmluZSBfX0xDX1NURkxfRkFDX0xJU1QJCTB4MDBjOAotI2RlZmluZSBfX0xDX01DQ0tfQ09ERQkJCTB4MDBlOAotCi0jZGVmaW5lIF9fTENfRFVNUF9SRUlQTAkJCTB4MGUwMAotCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAwMTgKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMDIwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDAyOAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAwMzAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMDM4Ci0jZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDA1OAotI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAwNjAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMDY4Ci0jZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDA3MAotI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAwNzgKLSNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKLSNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjQwCi0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyNDgKLSNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyNTAKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMjU4Ci0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDI2MAotI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyNjgKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDI3MAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyNzgKLSNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMjgwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDI4OAotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyOTAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMjk0Ci0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyOTgKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMjljCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDJhMAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAyYTQKLSNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAyYTgKLSNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMmFjCi0jZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAyYjAKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAyYzgKLSNkZWZpbmUgX19MQ19NQUNISU5FX0ZMQUdTCQkweDAyZDgKLSNkZWZpbmUgX19MQ19GVFJBQ0VfRlVOQwkJMHgwMmRjCi0jZGVmaW5lIF9fTENfSVJCCQkJMHgwMzAwCi0jZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0JCTB4MDA4MAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgwMGQ4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgwMGUwCi0jZGVmaW5lIF9fTENfUFNXX1NBVkVfQVJFQQkJMHgwMTAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgwMTA4Ci0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDAxMjAKLSNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDAxNjAKLSNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBCQkweDAxODAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MDFjMAotI2Vsc2UgLyogX19zMzkweF9fICovCi0jZGVmaW5lIF9fTENfTEFTVF9CUkVBSwkJCTB4MDExMAotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAxMzAKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMTQwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDE1MAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAxNjAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMTcwCi0jZGVmaW5lIF9fTENfUkVTVEFSVF9QU1cJCTB4MDFhMAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXCQkweDAxYjAKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVwkJMHgwMWMwCi0jZGVmaW5lIF9fTENfUEdNX05FV19QU1cJCTB4MDFkMAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXCQkweDAxZTAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXCQkJMHgwMWYwCi0jZGVmaW5lIF9fTENfU0FWRV9BUkVBCQkJMHgwMjAwCi0jZGVmaW5lIF9fTENfUkVUVVJOX1BTVwkJCTB4MDI4MAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVwkJMHgwMjkwCi0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgwMmEwCi0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MDJhOAotI2RlZmluZSBfX0xDX0VYSVRfVElNRVIJCQkweDAyYjAKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgwMmI4Ci0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDAyYzAKLSNkZWZpbmUgX19MQ19TVEVBTF9USU1FUgkJMHgwMmM4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MDJkMAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDAyZDgKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHgwMmUwCi0jZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4MDJlOAotI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSwkJMHgwMmYwCi0jZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sJCTB4MDJmOAotI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLCQkweDAzMDAKLSNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHgwMzA4Ci0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHgwMzEwCi0jZGVmaW5lIF9fTENfVVNFUl9FWEVDX0FTQ0UJCTB4MDMxOAotI2RlZmluZSBfX0xDX0NQVUlECQkJMHgwMzIwCi0jZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHgwMzQwCi0jZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweDAzNTAKLSNkZWZpbmUgX19MQ19NQUNISU5FX0ZMQUdTCQkweDAzNTgKLSNkZWZpbmUgX19MQ19GVFJBQ0VfRlVOQwkJMHgwMzYwCi0jZGVmaW5lIF9fTENfSVJCCQkJMHgwMzgwCi0jZGVmaW5lIF9fTENfUEFTVEUJCQkweDAzYzAKLSNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTQkJMHgxMWI4Ci0jZGVmaW5lIF9fTENfRlBSRUdTX1NBVkVfQVJFQQkJMHgxMjAwCi0jZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQQkJMHgxMjgwCi0jZGVmaW5lIF9fTENfUFNXX1NBVkVfQVJFQQkJMHgxMzAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgxMzE4Ci0jZGVmaW5lIF9fTENfRlBfQ1JFR19TQVZFX0FSRUEJCTB4MTMxYwotI2RlZmluZSBfX0xDX1RPRFJFR19TQVZFX0FSRUEJCTB4MTMyNAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgxMzI4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgxMzMxCi0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDEzNDAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MTM4MAotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8YXNtL2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKIHZvaWQgcmVzdGFydF9pbnRfaGFuZGxlcih2b2lkKTsKIHZvaWQgZXh0X2ludF9oYW5kbGVyKHZvaWQpOwpAQCAtMTQ0LDcgKzE5LDEyIEBACiB2b2lkIG1jY2tfaW50X2hhbmRsZXIodm9pZCk7CiB2b2lkIGlvX2ludF9oYW5kbGVyKHZvaWQpOwogCi1zdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTAgeworI2lmZGVmIENPTkZJR18zMkJJVAorCisjZGVmaW5lIExDX09SREVSIDAKKyNkZWZpbmUgTENfUEFHRVMgMQorCitzdHJ1Y3Qgc2F2ZV9hcmVhIHsKIAl1MzIJZXh0X3NhdmU7CiAJdTY0CXRpbWVyOwogCXU2NAljbGtfY21wOwpAQCAtMTU2LDU0ICszNiwxMyBAQAogCXU2NAlmcF9yZWdzWzRdOwogCXUzMglncF9yZWdzWzE2XTsKIAl1MzIJY3RybF9yZWdzWzE2XTsKLX0gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAotc3RydWN0IHNhdmVfYXJlYV9zMzkweCB7Ci0JdTY0CWZwX3JlZ3NbMTZdOwotCXU2NAlncF9yZWdzWzE2XTsKLQl1OAlwc3dbMTZdOwotCXU4CXBhZDFbOF07Ci0JdTMyCXByZWZfcmVnOwotCXUzMglmcF9jdHJsX3JlZzsKLQl1OAlwYWQyWzRdOwotCXUzMgl0b2RfcmVnOwotCXU2NAl0aW1lcjsKLQl1NjQJY2xrX2NtcDsKLQl1OAlwYWQzWzhdOwotCXUzMglhY2NfcmVnc1sxNl07Ci0JdTY0CWN0cmxfcmVnc1sxNl07Ci19ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotdW5pb24gc2F2ZV9hcmVhIHsKLQlzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTAJczM5MDsKLQlzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4CXMzOTB4OwotfTsKLQotI2RlZmluZSBTQVZFX0FSRUFfQkFTRV9TMzkwCTB4ZDQKLSNkZWZpbmUgU0FWRV9BUkVBX0JBU0VfUzM5MFgJMHgxMjAwCi0KLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIFNBVkVfQVJFQV9TSVpFIHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTApCi0jZGVmaW5lIFNBVkVfQVJFQV9CQVNFIFNBVkVfQVJFQV9CQVNFX1MzOTAKLSNlbHNlCi0jZGVmaW5lIFNBVkVfQVJFQV9TSVpFIHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4KQotI2RlZmluZSBTQVZFX0FSRUFfQkFTRSBTQVZFX0FSRUFfQkFTRV9TMzkwWAotI2VuZGlmCi0KLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIExDX09SREVSIDAKLSNlbHNlCi0jZGVmaW5lIExDX09SREVSIDEKLSNlbmRpZgotCi0jZGVmaW5lIExDX1BBR0VTICgxVUwgPDwgTENfT1JERVIpCi0KLXN0cnVjdCBfbG93Y29yZQotewotI2lmbmRlZiBfX3MzOTB4X18KLQkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCitzdHJ1Y3QgX2xvd2NvcmUgewogCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDAwMCAqLwotCV9fdTMyCWNjdzJbNF07CQkJLyogMHgwMDA4ICovCisJcHN3X3QJcmVzdGFydF9vbGRfcHN3OwkJLyogMHgwMDA4ICovCisJX191OAlwYWRfMHgwMDEwWzB4MDAxNC0weDAwMTBdOwkvKiAweDAwMTAgKi8KKwlfX3UzMglpcGxfcGFybWJsb2NrX3B0cjsJCS8qIDB4MDAxNCAqLwogCXBzd190CWV4dGVybmFsX29sZF9wc3c7CQkvKiAweDAwMTggKi8KIAlwc3dfdAlzdmNfb2xkX3BzdzsJCQkvKiAweDAwMjAgKi8KIAlwc3dfdAlwcm9ncmFtX29sZF9wc3c7CQkvKiAweDAwMjggKi8KQEAgLTIyOSw3ICs2OCw5IEBACiAJX191MzIJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDA5YyAqLwogCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KIAlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCi0JX191OAlwYWRfMHgwMGEyWzB4MDBiOC0weDAwYTJdOwkvKiAweDAwYTIgKi8KKwlfX3U4CW9wX2FjY2Vzc19pZDsJCQkvKiAweDAwYTIgKi8KKwlfX3U4CWFyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTMgKi8KKwlfX3U4CXBhZF8weDAwYTRbMHgwMGI4LTB4MDBhNF07CS8qIDB4MDBhNCAqLwogCV9fdTE2CXN1YmNoYW5uZWxfaWQ7CQkJLyogMHgwMGI4ICovCiAJX191MTYJc3ViY2hhbm5lbF9ucjsJCQkvKiAweDAwYmEgKi8KIAlfX3UzMglpb19pbnRfcGFybTsJCQkvKiAweDAwYmMgKi8KQEAgLTI0NSw4ICs4Niw5IEBACiAJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KIAlfX3UzMglmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCiAJX191OAlwYWRfMHgwMGZjWzB4MDEwMC0weDAwZmNdOwkvKiAweDAwZmMgKi8KLQlfX3UzMglzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOwkvKiAweDAxMDAgKi8KLQlfX3U4CXBhZF8weDAxMTBbMHgwMTIwLTB4MDExMF07CS8qIDB4MDExMCAqLworCXBzd190CXBzd19zYXZlX2FyZWE7CQkJLyogMHgwMTAwICovCisJX191MzIJcHJlZml4cmVnX3NhdmVfYXJlYTsJCS8qIDB4MDEwOCAqLworCV9fdTgJcGFkXzB4MDEwY1sweDAxMjAtMHgwMTBjXTsJLyogMHgwMTBjICovCiAKIAkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwogCV9fdTMyCWFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07CS8qIDB4MDEyMCAqLwpAQCAtMjkzLDEyICsxMzUsMTIgQEAKIAlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMmQwICovCiAJX191MzIJbWFjaGluZV9mbGFnczsJCQkvKiAweDAyZDggKi8KIAlfX3UzMglmdHJhY2VfZnVuYzsJCQkvKiAweDAyZGMgKi8KLQlfX3U4CXBhZF8weDAyZjBbMHgwMzAwLTB4MDJmMF07CS8qIDB4MDJmMCAqLworCV9fdTgJcGFkXzB4MDJlMFsweDAzMDAtMHgwMmUwXTsJLyogMHgwMmUwICovCiAKIAkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgKi8KIAlfX3U4CWlyYls2NF07CQkJLyogMHgwMzAwICovCiAKLQlfX3U4CXBhZF8weDA0MDBbMHgwZTAwLTB4MDQwMF07CS8qIDB4MDQwMCAqLworCV9fdTgJcGFkXzB4MDM0MFsweDBlMDAtMHgwMzQwXTsJLyogMHgwMzQwICovCiAKIAkvKgogCSAqIDB4ZTAwIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBJUEwgUGFyYW1ldGVyIEluZm9ybWF0aW9uCkBAIC0zMTAsMTAgKzE1MiwzMiBAQAogCiAJLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLwogCV9fdTgJcGFkXzB4MGUwOFsweDEwMDAtMHgwZTA4XTsJLyogMHgwZTA4ICovCi0jZWxzZSAvKiAhX19zMzkweF9fICovCi0JLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCV9fdTMyCWNjdzFbMl07CQkJLyogMHgwMDAwICovCi0JX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KK30gX19wYWNrZWQ7CisKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCisjZGVmaW5lIExDX09SREVSIDEKKyNkZWZpbmUgTENfUEFHRVMgMgorCitzdHJ1Y3Qgc2F2ZV9hcmVhIHsKKwl1NjQJZnBfcmVnc1sxNl07CisJdTY0CWdwX3JlZ3NbMTZdOworCXU4CXBzd1sxNl07CisJdTgJcGFkMVs4XTsKKwl1MzIJcHJlZl9yZWc7CisJdTMyCWZwX2N0cmxfcmVnOworCXU4CXBhZDJbNF07CisJdTMyCXRvZF9yZWc7CisJdTY0CXRpbWVyOworCXU2NAljbGtfY21wOworCXU4CXBhZDNbOF07CisJdTMyCWFjY19yZWdzWzE2XTsKKwl1NjQJY3RybF9yZWdzWzE2XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfbG93Y29yZSB7CisJX191OAlwYWRfMHgwMDAwWzB4MDAxNC0weDAwMDBdOwkvKiAweDAwMDAgKi8KKwlfX3UzMglpcGxfcGFybWJsb2NrX3B0cjsJCS8qIDB4MDAxNCAqLwogCV9fdTgJcGFkXzB4MDAxOFsweDAwODAtMHgwMDE4XTsJLyogMHgwMDE4ICovCiAJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KIAlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KQEAgLTM0NCw3ICsyMDgsOSBAQAogCV9fdTgJcGFkXzB4MDBmMFsweDAwZjQtMHgwMGYwXTsJLyogMHgwMGYwICovCiAJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KIAlhZGRyX3QJZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7CS8qIDB4MDBmOCAqLwotCV9fdTgJcGFkXzB4MDEwMFsweDAxMjAtMHgwMTAwXTsJLyogMHgwMTAwICovCisJX191OAlwYWRfMHgwMTAwWzB4MDExMC0weDAxMDBdOwkvKiAweDAxMDAgKi8KKwlfX3U2NAlicmVha2luZ19ldmVudF9hZGRyOwkJLyogMHgwMTEwICovCisJX191OAlwYWRfMHgwMTE4WzB4MDEyMC0weDAxMThdOwkvKiAweDAxMTggKi8KIAlwc3dfdAlyZXN0YXJ0X29sZF9wc3c7CQkvKiAweDAxMjAgKi8KIAlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMTMwICovCiAJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMTQwICovCkBAIC00MjUsNyArMjkxLDcgQEAKIAkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwogCV9fdTY0CWZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07CS8qIDB4MTIwMCAqLwogCV9fdTY0CWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgxMjgwICovCi0JX191MzIJc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsJLyogMHgxMzAwICovCisJcHN3X3QJcHN3X3NhdmVfYXJlYTsJCQkvKiAweDEzMDAgKi8KIAlfX3U4CXBhZF8weDEzMTBbMHgxMzE4LTB4MTMxMF07CS8qIDB4MTMxMCAqLwogCV9fdTMyCXByZWZpeHJlZ19zYXZlX2FyZWE7CQkvKiAweDEzMTggKi8KIAlfX3UzMglmcHRfY3JlZ19zYXZlX2FyZWE7CQkvKiAweDEzMWMgKi8KQEAgLTQzOSwxMCArMzA1LDEyIEBACiAKIAkvKiBhbGlnbiB0byB0aGUgdG9wIG9mIHRoZSBwcmVmaXggYXJlYSAqLwogCV9fdTgJcGFkXzB4MTQwMFsweDIwMDAtMHgxNDAwXTsJLyogMHgxNDAwICovCi0jZW5kaWYgLyogIV9fczM5MHhfXyAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgLyogRW5kIHN0cnVjdHVyZSovCit9IF9fcGFja2VkOworCisjZW5kaWYgLyogQ09ORklHXzMyQklUICovCiAKICNkZWZpbmUgUzM5MF9sb3djb3JlICgqKChzdHJ1Y3QgX2xvd2NvcmUgKikgMCkpCisKIGV4dGVybiBzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmVfcHRyW107CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJlZml4KF9fdTMyIGFkZHJlc3MpCkBAIC00NTgsNiArMzI2LDQgQEAKIAlyZXR1cm4gYWRkcmVzczsKIH0KIAotI2VuZGlmCi0KLSNlbmRpZgorI2VuZGlmIC8qIF9BU01fUzM5MF9MT1dDT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDVlOWRhZjUuLmFmNjUwZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTA3LDkgKzEwNyw2IEBACiAjZGVmaW5lIF9fcGdkKHgpICAgICAgICAoKHBnZF90KSB7ICh4KSB9ICkKICNkZWZpbmUgX19wZ3Byb3QoeCkgICAgICgocGdwcm90X3QpIHsgKHgpIH0gKQogCi0vKiBkZWZhdWx0IHN0b3JhZ2Uga2V5IHVzZWQgZm9yIGFsbCBwYWdlcyAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBkZWZhdWx0X3N0b3JhZ2Vfa2V5OwotCiBzdGF0aWMgaW5saW5lIHZvaWQKIHBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNrZXkpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggYjQyNzE1NC4uNzNlMjU5OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMjgsNyArMjgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2NwdV9pZChzdHJ1Y3QgY3B1aWQgKnB0cikKIHsKLQlhc20gdm9sYXRpbGUoInN0aWRwIDAoJTEpIiA6ICI9bSIgKCpwdHIpIDogImEiIChwdHIpKTsKKwlhc20gdm9sYXRpbGUoInN0aWRwICUwIiA6ICI9USIgKCpwdHIpKTsKIH0KIAogZXh0ZXJuIHZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fbG9hZF9wc3cocHN3X3QgcHN3KQogewogI2lmbmRlZiBfX3MzOTB4X18KLQlhc20gdm9sYXRpbGUoImxwc3cgIDAoJTApIiA6IDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogImNjIik7CisJYXNtIHZvbGF0aWxlKCJscHN3ICAlMCIgOiA6ICJRIiAocHN3KSA6ICJjYyIpOwogI2Vsc2UKLQlhc20gdm9sYXRpbGUoImxwc3dlIDAoJTApIiA6IDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogImNjIik7CisJYXNtIHZvbGF0aWxlKCJscHN3ZSAlMCIgOiA6ICJRIiAocHN3KSA6ICJjYyIpOwogI2VuZGlmCiB9CiAKQEAgLTIwNiwxNyArMjA2LDE3IEBACiAJYXNtIHZvbGF0aWxlKAogCQkiCWJhc3IJJTAsMFxuIgogCQkiMDoJYWhpCSUwLDFmLTBiXG4iCi0JCSIJc3QJJTAsNCglMSlcbiIKLQkJIglscHN3CTAoJTEpXG4iCisJCSIJc3QJJTAsJU8xKzQoJVIxKVxuIgorCQkiCWxwc3cJJTFcbiIKIAkJIjE6IgotCQk6ICI9JmQiIChhZGRyKSA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKKwkJOiAiPSZkIiAoYWRkciksICI9USIgKHBzdykgOiAiUSIgKHBzdykgOiAibWVtb3J5IiwgImNjIik7CiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAlhc20gdm9sYXRpbGUoCiAJCSIJbGFybAklMCwxZlxuIgotCQkiCXN0ZwklMCw4KCUxKVxuIgotCQkiCWxwc3dlCTAoJTEpXG4iCisJCSIJc3RnCSUwLCVPMSs4KCVSMSlcbiIKKwkJIglscHN3ZQklMVxuIgogCQkiMToiCi0JCTogIj0mZCIgKGFkZHIpIDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogIm1lbW9yeSIsICJjYyIpOworCQk6ICI9JmQiIChhZGRyKSwgIj1RIiAocHN3KSA6ICJRIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIH0KICAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA5NWRjZjE4Li5kZDJkOTEzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC00OTIsMTMgKzQ5MiwyNCBAQAogc3RydWN0IHRhc2tfc3RydWN0OwogZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwogCiAjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoKChyZWdzKS0+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+Y3B1KTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl9yZWxheCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdXNlcmNvcHkuYyBiL2FyY2gvczM5MC9saWIvdXNlcmNvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIzNjNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2xpYi91c2VyY29weS5jCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorCit2b2lkIGNvcHlfZnJvbV91c2VyX292ZXJmbG93KHZvaWQpCit7CisJV0FSTigxLCAiQnVmZmVyIG92ZXJmbG93IGRldGVjdGVkIVxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGNvcHlfZnJvbV91c2VyX292ZXJmbG93KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRtZW0uYyBiL2FyY2gvczM5MC9tbS9leHRtZW0uYwppbmRleCA1Yzg0NTcxLi42NDA5ZmQ1N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9leHRtZW0uYworKysgYi9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKQEAgLTMwOSw3ICszMDksNyBAQAogCX0KICNlbmRpZgogCWlmIChxb3V0LT5zZWdjbnQgPiA2KSB7Ci0JCXJjID0gLUVOT1RTVVBQOworCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMzI0LDExICszMjQsMTEgQEAKIAkJZm9yIChpPTA7IGk8cW91dC0+c2VnY250OyBpKyspIHsKIAkJCWlmICgoKHFvdXQtPnJhbmdlW2ldLnN0YXJ0ICYgMHhmZikgIT0gU0VHX1RZUEVfRVcpICYmCiAJCQkgICAgKChxb3V0LT5yYW5nZVtpXS5zdGFydCAmIDB4ZmYpICE9IFNFR19UWVBFX0VOKSkgewotCQkJCXJjID0gLUVOT1RTVVBQOworCQkJCXJjID0gLUVPUE5PVFNVUFA7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KIAkJCWlmIChzdGFydCAhPSBxb3V0LT5yYW5nZVtpXS5zdGFydCA+PiBQQUdFX1NISUZUKSB7Ci0JCQkJcmMgPSAtRU5PVFNVUFA7CisJCQkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQogCQkJc3RhcnQgPSAocW91dC0+cmFuZ2VbaV0uZW5kID4+IFBBR0VfU0hJRlQpICsgMTsKQEAgLTM1Nyw3ICszNTcsNyBAQAogICogLUVOT1NZUyAgOiB3ZSBhcmUgbm90IHJ1bm5pbmcgb24gVk0KICAqIC1FSU8gICAgIDogY291bGQgbm90IHBlcmZvcm0gcXVlcnkgZGlhZ25vc2UKICAqIC1FTk9FTlQgIDogbm8gc3VjaCBzZWdtZW50Ci0gKiAtRU5PVFNVUFA6IG11bHRpLXBhcnQgc2VnbWVudCBjYW5ub3QgYmUgdXNlZCB3aXRoIGxpbnV4CisgKiAtRU9QTk9UU1VQUDogbXVsdGktcGFydCBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggbGludXgKICAqIC1FTk9NRU0gIDogb3V0IG9mIG1lbW9yeQogICogMCAuLiA2ICAgOiB0eXBlIG9mIHNlZ21lbnQgYXMgZGVmaW5lZCBpbiBpbmNsdWRlL2FzbS1zMzkwL2V4dG1lbS5oCiAgKi8KQEAgLTUxNSw3ICs1MTUsNyBAQAogICogLUVOT1NZUyAgOiB3ZSBhcmUgbm90IHJ1bm5pbmcgb24gVk0KICAqIC1FSU8gICAgIDogY291bGQgbm90IHBlcmZvcm0gcXVlcnkgb3IgbG9hZCBkaWFnbm9zZQogICogLUVOT0VOVCAgOiBubyBzdWNoIHNlZ21lbnQKLSAqIC1FTk9UU1VQUDogbXVsdGktcGFydCBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggbGludXgKKyAqIC1FT1BOT1RTVVBQOiBtdWx0aS1wYXJ0IHNlZ21lbnQgY2Fubm90IGJlIHVzZWQgd2l0aCBsaW51eAogICogLUVOT1NQQyAgOiBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIChvdmVybGFwcyB3aXRoIHN0b3JhZ2UpCiAgKiAtRUJVU1kgICA6IHNlZ21lbnQgY2FuIHRlbXBvcmFyaWx5IG5vdCBiZSB1c2VkIChvdmVybGFwcyB3aXRoIGRjc3MpCiAgKiAtRVJBTkdFICA6IHNlZ21lbnQgY2Fubm90IGJlIHVzZWQgKGV4Y2VlZHMga2VybmVsIG1hcHBpbmcgcmFuZ2UpCkBAIC03NDIsNyArNzQyLDcgQEAKIAkJcHJfZXJyKCJMb2FkaW5nIG9yIHF1ZXJ5aW5nIERDU1MgJXMgcmVzdWx0ZWQgaW4gYSAiCiAJCSAgICAgICAiaGFyZHdhcmUgZXJyb3JcbiIsIHNlZ19uYW1lKTsKIAkJYnJlYWs7Ci0JY2FzZSAtRU5PVFNVUFA6CisJY2FzZSAtRU9QTk9UU1VQUDoKIAkJcHJfZXJyKCJEQ1NTICVzIGhhcyBtdWx0aXBsZSBwYWdlIHJhbmdlcyBhbmQgY2Fubm90IGJlICIKIAkJICAgICAgICJsb2FkZWQgb3IgcXVlcmllZFxuIiwgc2VnX25hbWUpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggZmMxMDJlNy4uMzA0MGQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KQEAgLTU5LDE1ICs2MCwxMyBAQAogewogCWludCByZXQgPSAwOwogCi0jaWZkZWYgQ09ORklHX0tQUk9CRVMKIAkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLwotCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJaWYgKGtwcm9iZXNfYnVpbHRfaW4oKSAmJiAhdXNlcl9tb2RlKHJlZ3MpKSB7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCAxNCkpCiAJCQlyZXQgPSAxOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KLSNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IDc2NTY0NzkuLmQ1ODY1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtMTQzLDMzICsxNDMsMzQgQEAKIH0KICNlbmRpZgogCi12b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQordm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBiZWdpbjsKIAotICAgICAgICBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pOwotICAgICAgICBmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJaWYgKGJlZ2luID49IGVuZCkKKwkJcmV0dXJuOworCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJbWVtc2V0KCh2b2lkICopYWRkciwgUE9JU09OX0ZSRUVfSU5JVE1FTSwgUEFHRV9TSVpFKTsKKwkJbWVtc2V0KCh2b2lkICopKGFkZHIgJiBQQUdFX01BU0spLCBQT0lTT05fRlJFRV9JTklUTUVNLAorCQkgICAgICAgUEFHRV9TSVpFKTsKIAkJZnJlZV9wYWdlKGFkZHIpOwogCQl0b3RhbHJhbV9wYWdlcysrOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ayAoIkZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsCi0JCSgodW5zaWduZWQgbG9uZykmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSZfX2luaXRfYmVnaW4pID4+IDEwKTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyAlczogJWx1ayBmcmVlZFxuIiwgd2hhdCwgKGVuZCAtIGJlZ2luKSA+PiAxMCk7Cit9CisKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCit7CisJZnJlZV9pbml0X3BhZ2VzKCJ1bnVzZWQga2VybmVsIG1lbW9yeSIsCisJCQkodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luLAorCQkJKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQpOwogfQogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiB2b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLSAgICAgICAgaWYgKHN0YXJ0IDwgZW5kKQotICAgICAgICAgICAgICAgIHByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwotICAgICAgICAgICAgICAgIGZyZWVfcGFnZShzdGFydCk7Ci0gICAgICAgICAgICAgICAgdG90YWxyYW1fcGFnZXMrKzsKLSAgICAgICAgfQorCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvbW0vaW5pdC5jIGIvYXJjaC9zY29yZS9tbS9pbml0LmMKaW5kZXggZGZhZjQ1OC4uN2YwMDFiYiAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9tbS9pbml0LmMKKysrIGIvYXJjaC9zY29yZS9tbS9pbml0LmMKQEAgLTU5LDcgKzU5LDcgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotc3RhdGljIGludCBfX2luaXQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCitpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCiB7CiAJaWYgKHBhZ2VuciA+PSBtaW5fbG93X3BmbiAmJiBwYWdlbnIgPCBtYXhfbG93X3BmbikKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggMjEyMWZiYi4uMDVjZWY1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTMsNyArMTMsNiBAQAogCXNlbGVjdCBIQVZFX0xNQgogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKLQlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKIAlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCkBAIC0yMiw2ICsyMSw3IEBACiAJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKIAlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQorCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk8KIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCiAJc2VsZWN0IFJUQ19MSUIKIAlzZWxlY3QgR0VORVJJQ19BVE9NSUM2NApAQCAtMzUsNiArMzUsNyBAQAogCWRlZl9ib29sIEFSQ0ggPSAic2giCiAJc2VsZWN0IEhBVkVfS1BST0JFUwogCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VICYmICFYMlRMQgogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKQEAgLTQyLDYgKzQzLDggQEAKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTk1JX0VOVEVSIGlmIERZTkFNSUNfRlRSQUNFCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCisJc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAorCXNlbGVjdCBQRVJGX0VWRU5UUyBpZiBIQVZFX0hXX0JSRUFLUE9JTlQKIAlzZWxlY3QgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpZiBNTVUKIAogY29uZmlnIFNVUEVSSDY0CkBAIC03OCwxMiArODEsMTMgQEAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQotCWRlZl9ib29sIHkKLQogY29uZmlnIElSUV9QRVJfQ1BVCiAJZGVmX2Jvb2wgeQogCitjb25maWcgU1BBUlNFX0lSUQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNVUEVSSDMyCisKIGNvbmZpZyBHRU5FUklDX0dQSU8KIAlkZWZfYm9vbCBuCiAKQEAgLTU0OCw4ICs1NTIsNyBAQAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjAzIHx8IFwKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwNiB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyNjMgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfTVhHICAgIHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc4NgorCQkJICAgICAgQ1BVX1NVQlRZUEVfTVhHCiAJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCiAJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKIAlkZWZhdWx0ICI1MDAwMDAwMCIKQEAgLTU2Myw3ICs1NjYsOCBAQAogCiBjb25maWcgU0hfQ0xLX0NQR19MRUdBQ1kKIAlkZXBlbmRzIG9uIFNIX0NMS19DUEcKLQlkZWZfYm9vbCB5IGlmICFDUFVfU1VCVFlQRV9TSDc3ODUgJiYgIUFSQ0hfU0hNT0JJTEUKKwlkZWZfYm9vbCB5IGlmICFDUFVfU1VCVFlQRV9TSDc3ODUgJiYgIUFSQ0hfU0hNT0JJTEUgJiYgXAorCQkgICAgICAhQ1BVX1NVQlRZUEVfU0g3Nzg2CiAKIGNvbmZpZyBTSF9DTEtfTUQKIAlpbnQgIkNQVSBNb2RlIFBpbiBTZXR0aW5nIgpAQCAtNzI1LDE4ICs3MjksNiBAQAogCSAgTExTQywgdGhpcyBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb3RoZXIgYWx0ZXJuYXRpdmUgb2YKIAkgIGRpc2FibGluZyBpbnRlcnJ1cHRzIGFyb3VuZCB0aGUgYXRvbWljIHNlcXVlbmNlLgogCi1jb25maWcgU1BBUlNFX0lSUQotCWJvb2wgIlN1cHBvcnQgc3BhcnNlIGlycSBudW1iZXJpbmciCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3BhcnNlIGlycXMuIFRoaXMgaXMgdXNlZnVsIGluIGdlbmVyYWwKLQkgIGFzIG1vc3QgQ1BVcyBoYXZlIGEgZmFpcmx5IHNwYXJzZSBhcnJheSBvZiBJUlEgdmVjdG9ycywgd2hpY2gKLQkgIHRoZSBpcnFfZGVzYyB0aGVuIG1hcHMgZGlyZWN0bHkgb24gdG8uIFN5c3RlbXMgd2l0aCBhIGhpZ2gKLQkgIG51bWJlciBvZiBvZmYtY2hpcCBJUlFzIHdpbGwgd2FudCB0byB0cmVhdCB0aGlzIGFzCi0JICBleHBlcmltZW50YWwgdW50aWwgdGhleSBoYXZlIGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZC4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KLQogZW5kbWVudQogCiBtZW51ICJCb290IG9wdGlvbnMiCkBAIC04MjIsMTEgKzgxNCwxNSBAQAogY29uZmlnIFBDSQogCWJvb2wgIlBDSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX1BDSQorCXNlbGVjdCBQQ0lfRE9NQUlOUwogCWhlbHAKIAkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgYSBQQ0kgbW90aGVyYm9hcmQuIFBDSSBpcyB0aGUgbmFtZSBvZiBhCiAJICBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCiAJICB5b3VyIGJveC4gSWYgeW91IGhhdmUgUENJLCBzYXkgWSwgb3RoZXJ3aXNlIE4uCiAKK2NvbmZpZyBQQ0lfRE9NQUlOUworCWJvb2wKKwogc291cmNlICJkcml2ZXJzL3BjaS9wY2llL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZy5jcHUgYi9hcmNoL3NoL0tjb25maWcuY3B1CmluZGV4IGNkNmUzZWEuLmRkZjA5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC9zaC9LY29uZmlnLmNwdQpAQCAtNjgsNyArNjgsOCBAQAogCiBjb25maWcgU1BFQ1VMQVRJVkVfRVhFQ1VUSU9OCiAJYm9vbCAiU3BlY3VsYXRpdmUgc3Vicm91dGluZSByZXR1cm4iCi0JZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODAgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGEgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb24gZmV0Y2ggZm9yCiAJICBzdWJyb3V0aW5lIHJldHVybi4gVGhlcmUgYXJlIHZhcmlvdXMgcGl0ZmFsbHMgYXNzb2NpYXRlZCB3aXRoCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCBkYjkxOTI1Li41ODg1NzlhIDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTgzLDYgKzgzLDcgQEAKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NzI0X1NPTFVUSU9OX0VOR0lORSkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NjE5X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAorZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1NESzc3ODYpCQk6PSB2bWxpbnV4LmJpbgogCiAjIFNldCBzb21lIHNlbnNpYmxlIEtidWlsZCBkZWZhdWx0cwogS0JVSUxEX0lNQUdFCQk6PSAkKGRlZmF1bHRpbWFnZS15KQpAQCAtMTQzLDExICsxNDQsMTEgQEAKIG1hY2hkaXItJChDT05GSUdfU0hfS0ZSMlIwOSkJCQkrPSBtYWNoLWtmcjJyMDkKIG1hY2hkaXItJChDT05GSUdfU0hfRUNPVkVDKQkJCSs9IG1hY2gtZWNvdmVjMjQKIG1hY2hkaXItJChDT05GSUdfU0hfU0RLNzc4MCkJCQkrPSBtYWNoLXNkazc3ODAKK21hY2hkaXItJChDT05GSUdfU0hfU0RLNzc4NikJCQkrPSBtYWNoLXNkazc3ODYKIG1hY2hkaXItJChDT05GSUdfU0hfWDNQUk9UTykJCQkrPSBtYWNoLXgzcHJvdG8KIG1hY2hkaXItJChDT05GSUdfU0hfU0g3NzYzUkRQKQkJCSs9IG1hY2gtc2g3NzYzcmRwCiBtYWNoZGlyLSQoQ09ORklHX1NIX1NINDIwMl9NSUNST0RFVikJCSs9IG1hY2gtbWljcm9kZXYKIG1hY2hkaXItJChDT05GSUdfU0hfTEFORElTSykJCQkrPSBtYWNoLWxhbmRpc2sKLW1hY2hkaXItJChDT05GSUdfU0hfVElUQU4pCQkJKz0gbWFjaC10aXRhbgogbWFjaGRpci0kKENPTkZJR19TSF9MQk9YX1JFMikJCQkrPSBtYWNoLWxib3hyZTIKIG1hY2hkaXItJChDT05GSUdfU0hfQ0FZTUFOKQkJCSs9IG1hY2gtY2F5bWFuCiBtYWNoZGlyLSQoQ09ORklHX1NIX1JTSykJCQkrPSBtYWNoLXJzawpAQCAtMjAzLDggKzIwNCw5IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgdUltYWdlLmJpbiBcCi0JICAgICAgIHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UKK0JPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2UubHpvIFwKKwkgICAgICAgdUltYWdlLnNyZWMgdUltYWdlLmJpbiB6SW1hZ2Ugdm1saW51eC5iaW4gdm1saW51eC5zcmVjIFwKKwkgICAgICAgcm9tSW1hZ2UKIFBIT05ZICs9ICQoQk9PVF9UQVJHRVRTKQogCiBhbGw6ICQoS0JVSUxEX0lNQUdFKQpAQCAtMjI1LDEwICsyMjcsMTIgQEAKIAlAZWNobyAnICB6SW1hZ2UgCSAgICAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZScKIAlAZWNobyAnICByb21JbWFnZQkgICAgICAgICAgIC0gQ29tcHJlc3NlZCBST00gaW1hZ2UsIGlmIHN1cHBvcnRlZCcKIAlAZWNobyAnICB2bWxpbnV4LnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBFTEYgUy1yZWNvcmQnCisJQGVjaG8gJyAgdm1saW51eC5iaW4JICAgICAgICAgICAtIENyZWF0ZSBhbiB1bmNvbXByZXNzZWQgYmluYXJ5IGltYWdlJwogCUBlY2hvICcqIHVJbWFnZSAgCSAgICAgICAgICAgLSBBbGlhcyB0byBib290YWJsZSBVLUJvb3QgaW1hZ2UnCiAJQGVjaG8gJyAgdUltYWdlLnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBTLXJlY29yZCBmb3IgVS1Cb290JwogCUBlY2hvICcgIHVJbWFnZS5iaW4JICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJpbiknCiAJQGVjaG8gJyogdUltYWdlLmd6CSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChnemlwKScKIAlAZWNobyAnICB1SW1hZ2UuYnoyCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiemlwMiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bWEJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6bWEpJworCUBlY2hvICcgIHVJbWFnZS5sem8JICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6byknCiBlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKaW5kZXggYWVkZDlkZS4uOTM4ZTg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCkBAIC0xNTAsNiArMTUwLDE0IEBACiAJICBTZWxlY3QgU0RLNzc4MCBpZiBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFNINzc4MCBTREs3NzgwUjMKIAkgIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBTSF9TREs3Nzg2CisJYm9vbCAiU0RLNzc4NiIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4NgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfUENJCisJaGVscAorCSAgU2VsZWN0IFNESzc3ODYgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBUZWNobm9sb2d5IEV1cm9wZQorCSAgU0g3Nzg2LTY1bm0gYm9hcmQuCisKIGNvbmZpZyBTSF9ISUdITEFOREVSCiAJYm9vbCAiSGlnaGxhbmRlciIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKaW5kZXggY2UwZjI2My4uNGY5MGY5YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfU0hfRURPU0s3NzYwKQkrPSBib2FyZC1lZG9zazc3NjAubwogb2JqLSQoQ09ORklHX1NIX0VTUFQpCQkrPSBib2FyZC1lc3B0Lm8KIG9iai0kKENPTkZJR19TSF9QT0xBUklTKQkrPSBib2FyZC1wb2xhcmlzLm8KK29iai0kKENPTkZJR19TSF9USVRBTikJCSs9IGJvYXJkLXRpdGFuLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKaW5kZXggOTlmZmM1Zi4uZWZiYTQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyMC5oPgogCi0jZGVmaW5lIExBTjkxMTVfUkVBRFkJKGN0cmxfaW5sKDB4QTgwMDAwODRVTCkgJiAweDAwMDAwMDAxVUwpCisjZGVmaW5lIExBTjkxMTVfUkVBRFkJKF9fcmF3X3JlYWRsKDB4QTgwMDAwODRVTCkgJiAweDAwMDAwMDAxVUwpCiAKIC8qIFByZWZlciBjbWRsaW5lIG92ZXIgUmVkQm9vdCAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCAiUmVkQm9vdCIsIE5VTEwgfTsKQEAgLTYwLDMzICs2MCwzMyBAQAogewogCS8qIENTMjogTEFOICgweDA4MDAwMDAwIC0gMHgwYmZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCBDUzJCQ1IpOworCV9fcmF3X3dyaXRlbCgweDM2ZGIwNDAwLCBDUzJCQ1IpOwogCS8qIChTVzoxLjUgV1I6MyBIVzoxLjUpLCBleHQuIHdhaXQgKi8KLQljdHJsX291dGwoMHgwMDAwMDNjMCwgQ1MyV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDNjMCwgQ1MyV0NSKTsKIAogCS8qIENTNDogQ0FOMSAoMHhiMDAwMDAwMCAtIDB4YjNmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgwMDAwMDIwMCwgQ1M0QkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M0QkNSKTsKIAkvKiAoU1c6MS41IFdSOjMgSFc6MS41KSwgZXh0LiB3YWl0ICovCi0JY3RybF9vdXRsKDB4MDAxMDA5ODEsIENTNFdDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMDA5ODEsIENTNFdDUik7CiAKIAkvKiBDUzVhOiBDQU4yICgweGI0MDAwMDAwIC0gMHhiNWZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDAwMDAwMjAwLCBDUzVBQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M1QUJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOTgxLCBDUzVBV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDEwMDk4MSwgQ1M1QVdDUik7CiAKIAkvKiBDUzViOiBDQU4zICgweGI2MDAwMDAwIC0gMHhiN2ZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDAwMDAwMjAwLCBDUzVCQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M1QkJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOTgxLCBDUzVCV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDEwMDk4MSwgQ1M1QldDUik7CiAKIAkvKiBDUzZhOiBSb3RhcnkgKDB4YjgwMDAwMDAgLSAweGI5ZmZmZmZmKSAqLwogCS8qIG5vIGlkbGUgY3ljbGVzLCBub3JtYWwgc3BhY2UsIDggYml0IGRhdGEgYnVzICovCi0JY3RybF9vdXRsKDB4MDAwMDAyMDAsIENTNkFCQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMDAwMjAwLCBDUzZBQkNSKTsKIAkvKiAoU1c6MS41IFdSOjMgSFc6MS41KSwgbm8gZXh0LiB3YWl0ICovCi0JY3RybF9vdXRsKDB4MDAxMDA5QzEsIENTNkFXQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMTAwOUMxLCBDUzZBV0NSKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3BvcnRfbXVsdGlwbGV4aW5nKHZvaWQpCkBAIC05NCw3MSArOTQsNzEgQEAKIAkvKiBBNyBHUE8oTEVEOCk7ICAgICBBNiBHUE8oTEVENyk7ICAgICBBNSBHUE8oTEVENik7CSAgQTQgR1BPKExFRDUpOwogCSAqIEEzIEdQTyhMRUQ0KTsgICAgIEEyIEdQTyhMRUQzKTsgICAgIEExIEdQTyhMRUQyKTsJICBBMCBHUE8oTEVEMSk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1NSwgUE9SVF9QQUNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTU1LCBQT1JUX1BBQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwogCiAJLyogQjcgR1BPKFJTVDQpOyAgIEI2IEdQTyhSU1QzKTsgIEI1IEdQTyhSU1QyKTsgICAgQjQgR1BPKFJTVDEpOwogCSAqIEIzIEdQTyhQQjMpOwkgICBCMiBHUE8oUEIyKTsJICBCMSBHUE8oUEIxKTsJICAgQjAgR1BPKFBCMCk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1NSwgUE9SVF9QQkNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTU1LCBQT1JUX1BCQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwogCiAJLyogQzcgR1BPKFBDNyk7CSAgQzYgR1BPKFBDNik7CSAgQzUgR1BPKFBDNSk7CSAgIEM0IEdQTyhQQzQpOwogCSAqIEMzIExDRF9EQVRBMzsgIEMyIExDRF9EQVRBMjsgICBDMSBMQ0RfREFUQTE7CSAgIEMwIExDRF9EQVRBMDsKIAkgKi8KLQljdHJsX291dHcoMHg1NTAwLCBQT1JUX1BDQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDU1MDAsIFBPUlRfUENDUik7CS8qIDAxIDAxIDAxIDAxIDAwIDAwIDAwIDAwICovCiAKIAkvKiBENyBHUE8oUEQ3KTsJRDYgR1BPKFBENik7CUQ1IEdQTyhQRDUpOwkgICBENCBHUE8oUEQ0KTsKIAkgKiBEMyBHUE8oUEQzKTsJRDIgR1BPKFBEMik7CUQxIEdQTyhQRDEpOwkgICBEMCBHUE8oUEQwKTsKIAkgKi8KLQljdHJsX291dHcoMHg1NTU1LCBQT1JUX1BEQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLworCV9fcmF3X3dyaXRldygweDU1NTUsIFBPUlRfUERDUik7CS8qIDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxICovCiAKIAkvKiBFNyAoeCk7CSAgRTYgR1BJKG51KTsJIEU1IEdQSShudSk7CSAgRTQgTENEX01fRElTUDsKIAkgKiBFMyBMQ0RfQ0wxOwkgIEUyIExDRF9DTDI7CSBFMSBMQ0RfRE9OOwkgIEUwIExDRF9GTE07CiAJICovCi0JY3RybF9vdXR3KDB4M0MwMCwgUE9SVF9QRUNSKTsJLyogMDAgMTEgMTEgMDAgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgzQzAwLCBQT1JUX1BFQ1IpOwkvKiAwMCAxMSAxMSAwMCAwMCAwMCAwMCAwMCAqLwogCiAJLyogRjcgKHgpOwkgICAgIEY2IERBMShWTENEKTsgICAgIEY1IERBMChuYyk7CSAgRjQgQU4zOwogCSAqIEYzIEFOMihNSURfQUQpOyAgIEYyIEFOMShFQVJUSF9BRCk7IEYxIEFOMChURU1QKTsJICBGMCBHUEkrKG5jKTsKIAkgKi8KLQljdHJsX291dHcoMHgwMDAyLCBQT1JUX1BGQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAxMCAqLworCV9fcmF3X3dyaXRldygweDAwMDIsIFBPUlRfUEZDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDEwICovCiAKIAkvKiBHNyAoeCk7CSAgRzYgSVJRNShUT1VDSF9CVVNZKTsgRzUgSVJRNChUT1VDSF9JUlEpOyBHNCBHUEkoS0VZMik7CiAJICogRzMgR1BJKEtFWTEpOyAgRzIgR1BPKExFRDExKTsJRzEgR1BPKExFRDEwKTsgICAgIEcwIEdQTyhMRUQ5KTsKIAkgKi8KLQljdHJsX291dHcoMHgwM0Q1LCBQT1JUX1BHQ1IpOwkvKiAwMCAwMCAwMCAxMSAxMSAwMSAwMSAwMSAqLworCV9fcmF3X3dyaXRldygweDAzRDUsIFBPUlRfUEdDUik7CS8qIDAwIDAwIDAwIDExIDExIDAxIDAxIDAxICovCiAKIAkvKiBINyAoeCk7CSAgICAgIEg2IC9SQVMoQlJBUyk7CSAgSDUgL0NBUyhCQ0FTKTsgSDQgQ0tFKEJDS0UpOwogCSAqIEgzIEdQTyhFQVJUSF9PRkYpOyBIMiBHUE8oRUFSVEhfVEVTVCk7IEgxIFVTQjJfUFdSOwkgSDAgVVNCMV9QV1I7CiAJICovCi0JY3RybF9vdXR3KDB4MDA1MCwgUE9SVF9QSENSKTsJLyogMDAgMDAgMDAgMDAgMDEgMDEgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDUwLCBQT1JUX1BIQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMSAwMSAwMCAwMCAqLwogCiAJLyogSjcgKHgpOwkgIEo2IEFVRENLOwkgICBKNSBBU0VCUktBSzsJICAgIEo0IEFVREFUQTM7CiAJICogSjMgQVVEQVRBMjsJICBKMiBBVURBVEExOwkgICBKMSBBVURBVEEwOwkgICAgSjAgQVVEU1lOQzsKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BKQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUEpDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCiAKIAkvKiBLNyAoeCk7CSAgICBLNiAoeCk7CSAgICAgSzUgKHgpOwkgICBLNCAoeCk7CiAJICogSzMgUElOVDcoL1BXUjIpOyBLMiBQSU5UNigvUFdSMSk7IEsxIFBJTlQ1KG51KTsgSzAgUElOVDQoRkxBU0hfUkVBRFkpCiAJICovCi0JY3RybF9vdXR3KDB4MDBGRiwgUE9SVF9QS0NSKTsJLyogMDAgMDAgMDAgMDAgMTEgMTEgMTEgMTEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMEZGLCBQT1JUX1BLQ1IpOwkvKiAwMCAwMCAwMCAwMCAxMSAxMSAxMSAxMSAqLwogCiAJLyogTDcgVFJTVDsJICAgTDYgVE1TOwkgICAgIEw1IFRETzsJCSAgTDQgVERJOwogCSAqIEwzIFRDSzsJICAgTDIgKHgpOwkgICAgIEwxICh4KTsJCSAgTDAgKHgpOwogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUExDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QTENSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KIAogCS8qIE03IEdQTyhDVVJSRU5UX1NJTkspOyAgICBNNiBHUE8oUFdSX1NXSVRDSCk7ICAgICBNNSBHUE8oTEFOX1NQRUVEKTsKIAkgKiBNNCBHUE8oTEFOX1JFU0VUKTsgICAgICAgTTMgR1BPKEJVWlpFUik7CSAgICBNMiBHUE8oTENEX0JMKTsKIAkgKiBNMSBDUzVCKENBTjNfQ1MpOwkgICAgTTAgR1BJKyhuYyk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1MiwgUE9SVF9QTUNSKTsJICAgLyogMDEgMDEgMDEgMDEgMDEgMDEgMDAgMTAgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTUyLCBQT1JUX1BNQ1IpOwkgICAvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMCAxMCAqLwogCiAJLyogQ1VSUkVOVF9TSU5LPW9mZiwJUFdSX1NXSVRDSD1vZmYsIExBTl9TUEVFRD0xMDBNQml0LAogCSAqIExBTl9SRVNFVD1vZmYsCUJVWlpFUj1vZmYsCUxDRF9CTD1vZmYKIAkgKi8KICNpZiBDT05GSUdfU0hfTUFHSUNfUEFORUxfUjJfVkVSU0lPTiA9PSAyCi0JY3RybF9vdXRiKDB4MzAsIFBPUlRfUE1EUik7CisJX19yYXdfd3JpdGViKDB4MzAsIFBPUlRfUE1EUik7CiAjZWxpZiBDT05GSUdfU0hfTUFHSUNfUEFORUxfUjJfVkVSU0lPTiA9PSAzCi0JY3RybF9vdXRiKDB4RjAsIFBPUlRfUE1EUik7CisJX19yYXdfd3JpdGViKDB4RjAsIFBPUlRfUE1EUik7CiAjZWxzZQogI2Vycm9yIFVua25vd24gcmV2aXNpb24gb2YgUExBVEZPUk1fTVBfUjIKICNlbmRpZgpAQCAtMTY3LDggKzE2Nyw4IEBACiAJICogUDQgR1BPKG51KTsJICAgICAgIFAzIElSUTMoTEFOX0lSUSk7ICBQMiBJUlEyKENBTjNfSVJRKTsKIAkgKiBQMSBJUlExKENBTjJfSVJRKTsgIFAwIElSUTAoQ0FOMV9JUlEpCiAJICovCi0JY3RybF9vdXR3KDB4MDEwMCwgUE9SVF9QUENSKTsJLyogMDAgMDAgMDAgMDEgMDAgMDAgMDAgMDAgKi8KLQljdHJsX291dGIoMHgxMCwgUE9SVF9QUERSKTsKKwlfX3Jhd193cml0ZXcoMHgwMTAwLCBQT1JUX1BQQ1IpOwkvKiAwMCAwMCAwMCAwMSAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRlYigweDEwLCBQT1JUX1BQRFIpOwogCiAJLyogUjcgQTI1OwkgICAgIFI2IEEyNDsJICAgICBSNSBBMjM7CQkgIFI0IEEyMjsKIAkgKiBSMyBBMjE7CSAgICAgUjIgQTIwOwkgICAgIFIxIEExOTsJCSAgUjAgQTA7CkBAIC0xODUsMjIgKzE4NSwyMiBAQAogCS8qIFM3ICh4KTsJCVM2ICh4KTsgICAgICAgIFM1ICh4KTsJICAgICBTNCBHUE8oRUVQUk9NX0NTMik7CiAJICogUzMgR1BPKEVFUFJPTV9DUzEpOyAgUzIgU0lPRjBfVFhEOyAgUzEgU0lPRjBfUlhEOyBTMCBTSU9GMF9TQ0s7CiAJICovCi0JY3RybF9vdXR3KDB4MDE0MCwgUE9SVF9QU0NSKTsJLyogMDAgMDAgMDAgMDEgMDEgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMTQwLCBQT1JUX1BTQ1IpOwkvKiAwMCAwMCAwMCAwMSAwMSAwMCAwMCAwMCAqLwogCiAJLyogVDcgKHgpOwkgICBUNiAoeCk7CSAgVDUgKHgpOwkgIFQ0IENPTTFfQ1RTOwogCSAqIFQzIENPTTFfUlRTOwkgICBUMiBDT00xX1RYRDsJICBUMSBDT00xX1JYRDsJICBUMCBHUE8oV0RPRykKIAkgKi8KLQljdHJsX291dHcoMHgwMDAxLCBQT1JUX1BUQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMSAqLworCV9fcmF3X3dyaXRldygweDAwMDEsIFBPUlRfUFRDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICovCiAKIAkvKiBVNyAoeCk7CSAgICAgVTYgKHgpOwkgICBVNSAoeCk7CSAgVTQgR1BJKygvQUNfRkFVTFQpOwogCSAqIFUzIEdQTyhUT1VDSF9DUyk7IFUyIFRPVUNIX1RYRDsgVTEgVE9VQ0hfUlhEOyAgVTAgVE9VQ0hfU0NLOwogCSAqLwotCWN0cmxfb3V0dygweDAyNDAsIFBPUlRfUFVDUik7CS8qIDAwIDAwIDAwIDEwIDAxIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDI0MCwgUE9SVF9QVUNSKTsJLyogMDAgMDAgMDAgMTAgMDEgMDAgMDAgMDAgKi8KIAogCS8qIFY3ICh4KTsJICBWNiAoeCk7CVY1ICh4KTsJCSAgVjQgR1BPKE1JRDIpOwogCSAqIFYzIEdQTyhNSUQxKTsgIFYyIENBUkRfVHhEOwlWMSBDQVJEX1J4RDsJICBWMCBHUEkrKC9CQVRfRkFVTFQpOwogCSAqLwotCWN0cmxfb3V0dygweDAxNDIsIFBPUlRfUFZDUik7CS8qIDAwIDAwIDAwIDAxIDAxIDAwIDAwIDEwICovCisJX19yYXdfd3JpdGV3KDB4MDE0MiwgUE9SVF9QVkNSKTsJLyogMDAgMDAgMDAgMDEgMDEgMDAgMDAgMTAgKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1wcjJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKQEAgLTIwOSwyNCArMjA5LDI0IEBACiAJICogL1BDQ19DRDEsIC9QQ0NfQ0QyLCAgUENDX0JWRDEsIFBDQ19CVkQyLAogCSAqIC9JT0lTMTYsICBJUlE0LAlJUlE1LAkgIFVTQjFkX1NVU1BFTkQKIAkgKi8KLQljdHJsX291dHcoMHhBQUJDLCBQT1JUX1BTRUxBKTsKKwlfX3Jhd193cml0ZXcoMHhBQUJDLCBQT1JUX1BTRUxBKTsKIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBCOgogCSAqIC9TQ0lGMF9SVFMsIC9TQ0lGMF9DVFMsIExDRF9WQ1BXQywKIAkgKiBMQ0RfVkVQV0MsICBJSUNfU0RBLCAgICBJSUNfU0NMLCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDNDMDAsIFBPUlRfUFNFTEIpOworCV9fcmF3X3dyaXRldygweDNDMDAsIFBPUlRfUFNFTEIpOwogCS8qIHNldCBQaW4gU2VsZWN0IFJlZ2lzdGVyIEM6CiAJICogU0lPRjFfU0NLLCBTSU9GMV9SeEQsIFNDSUYxX1J4RCwgU0NJRjFfVHhELCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFNFTEMpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFNFTEMpOwogCS8qIHNldCBQaW4gU2VsZWN0IFJlZ2lzdGVyIEQ6IFJlc2VydmVkLCBTSU9GMV9UeEQsIFJlc2VydmVkLCBTSU9GMV9NQ0xLLAogCSAqIFJlc2VydmVkLCBTSU9GMV9TWU5DLCBSZXNlcnZlZCwgU0NJRjFfU0NLLCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFNFTEQpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFNFTEQpOwogCS8qIHNldCBVU0IgVHhSeCBDb250cm9sOiBSZXNlcnZlZCwgRFJWLCBSZXNlcnZlZCwgVVNCX1RSQU5TLCBVU0JfU0VMICovCi0JY3RybF9vdXR3KDB4MDEwMSwgUE9SVF9VVFJDVEwpOworCV9fcmF3X3dyaXRldygweDAxMDEsIFBPUlRfVVRSQ1RMKTsKIAkvKiBzZXQgVVNCIENsb2NrIENvbnRyb2w6IFVTU0NTLCBVU1NUQiwgUmVzZXJ2ZWQgKEhpZ2hCeXRlIGFsd2F5cyBBNSkgKi8KLQljdHJsX291dHcoMHhBNUMwLCBQT1JUX1VDTEtDUl9XKTsKKwlfX3Jhd193cml0ZXcoMHhBNUMwLCBQT1JUX1VDTEtDUl9XKTsKIAogCXNldHVwX2NoaXBfc2VsZWN0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYwppbmRleCA2MjYwN2ViLi41OTQ4NjYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCkBAIC01OSwxNSArNTksMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CiAJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKIAkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAotCS5yZWdzaXplCT0gOCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUE9SVF9QQ0RSLAotCQkuZW5kCT0gUE9SVF9QQ0RSLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUE9SVF9QQ0RSLAorCS5lbmQJPSBQT1JUX1BDRFIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV84QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTc2LDggKzczLDggQEAKIAkuZGV2CT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBvbGFyaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CkBAIC05MiwxNSArODksMTUgQEAKIAlwcmludGsoS0VSTl9JTkZPICJDb25maWd1cmluZyBQb2xhcmlzIGV4dGVybmFsIGJ1c1xuIik7CiAKIAkvKiBDb25maWd1cmUgYXJlYSA1IHdpdGggMiB3YWl0IHN0YXRlcyAqLwotCXdjciA9IGN0cmxfaW53KFdDUjIpOworCXdjciA9IF9fcmF3X3JlYWR3KFdDUjIpOwogCXdjciAmPSAofkFSRUE1X1dBSVRfQ1RSTCk7CiAJd2NyIHw9IChXQUlUX1NUQVRFU18xMCA8PCAxMCk7Ci0JY3RybF9vdXR3KHdjciwgV0NSMik7CisJX19yYXdfd3JpdGV3KHdjciwgV0NSMik7CiAKIAkvKiBDb25maWd1cmUgYXJlYSA1IGZvciAzMi1iaXQgYWNjZXNzICovCi0JYmNyX21hc2sgPSBjdHJsX2ludyhCQ1IyKTsKKwliY3JfbWFzayA9IF9fcmF3X3JlYWR3KEJDUjIpOwogCWJjcl9tYXNrIHw9IDEgPDwgMTA7Ci0JY3RybF9vdXR3KGJjcl9tYXNrLCBCQ1IyKTsKKwlfX3Jhd193cml0ZXcoYmNyX21hc2ssIEJDUjIpOwogCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHBvbGFyaXNfZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShwb2xhcmlzX2RldmljZXMpKTsKQEAgLTEzMSwxMyArMTI4LDEzIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wb2xhcmlzX2lycSh2b2lkKQogewogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQljdHJsX291dHcoMCwgQkNSX0lMQ1JBKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JCKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JDKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JEKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JFKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JGKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JHKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JBKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JCKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JDKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JEKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JFKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JGKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JHKTsKIAogCXJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKCZpcHJfaXJxX2Rlc2MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCBlNWE4YTJmLi5mZTdlNjg2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLXBjYS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9yOGE2NjU5Ny5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxtYWNoL3NoNzc4NWxjci5oPgpAQCAtMzIsMjYgKzMzLDE3IEBACiAgKiBOT1RFOiBUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLgogICoJIFBsZWFzZSBsb29rIGF0IGluY2x1ZGUvYXNtLXNoL3NoNzc4NWxjci5oIG9yIGhhcmR3YXJlIG1hbnVhbC4KICAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQTERfTEVEQ1IsCi0JCS5lbmQJPSBQTERfTEVEQ1IsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gOCwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBMRF9MRURDUiwKKwkuZW5kCT0gUExEX0xFRENSLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCiAJLmlkCQk9IC0xLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKQEAgLTM0MSw4ICszMzMsMTQgQEAKIAlwbV9wb3dlcl9vZmYgPSBzaDc3ODVsY3JfcG93ZXJfb2ZmOwogCiAJLyogc201MDEgRFJBTSBjb25maWd1cmF0aW9uICovCi0Jc201MDFfcmVnID0gKHZvaWQgX19pb21lbSAqKTB4YjNlMDAwMDAgKyBTTTUwMV9EUkFNX0NPTlRST0w7Ci0Jd3JpdGVsKDB4MDAwMzA3YzIsIHNtNTAxX3JlZyk7CisJc201MDFfcmVnID0gaW9yZW1hcF9ub2NhY2hlKFNNMTA3X1JFR19BRERSLCBTTTUwMV9EUkFNX0NPTlRST0wpOworCWlmICghc201MDFfcmVnKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZWwoMHgwMDAzMDdjMiwgc201MDFfcmVnICsgU001MDFfRFJBTV9DT05UUk9MKTsKKwlpb3VubWFwKHNtNTAxX3JlZyk7CiB9CiAKIC8qIFJldHVybiB0aGUgYm9hcmQgc3BlY2lmaWMgYm9vdCBtb2RlIHBpbiBjb25maWd1cmF0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYwppbmRleCBiMWRjYmJjLi4zMjViZWQ1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKQEAgLTE3LDggKzE3LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfc2htaW5faXJxKHZvaWQpCiB7Ci0JY3RybF9vdXR3KDB4MmEwMCwgUEZDX1BIQ1IpOwkvLyBJUlEwLTM9SVJRCi0JY3RybF9vdXR3KDB4MGFhYSwgSU5UQ19JQ1IxKTsJLy8gSVJRMC0zPUlSUS1tb2RlLExvdy1hY3RpdmUuCisJX19yYXdfd3JpdGV3KDB4MmEwMCwgUEZDX1BIQ1IpOwkvLyBJUlEwLTM9SVJRCisJX19yYXdfd3JpdGV3KDB4MGFhYSwgSU5UQ19JQ1IxKTsJLy8gSVJRMC0zPUlSUS1tb2RlLExvdy1hY3RpdmUuCiAJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUlEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC10aXRhbi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdGl0YW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGMzNmM3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXRpdGFuLmMKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGFyY2gvc2gvYm9hcmRzL3RpdGFuL3NldHVwLmMgLSBTZXR1cCBmb3IgVGl0YW4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBKYW1pZSBMZW5laGFuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC90aXRhbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF90aXRhbl9pcnEodm9pZCkKK3sKKwkvKiBlbmFibGUgaW5kaXZpZHVhbCBpbnRlcnJ1cHQgbW9kZSBmb3IgZXh0ZXJuYWxzICovCisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUlEpOworfQorCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3RpdGFuIF9faW5pdG12ID0geworCS5tdl9uYW1lCT0gIlRpdGFuIiwKKwkubXZfaW5pdF9pcnEJPSBpbml0X3RpdGFuX2lycSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKaW5kZXggMzZiOGJhYy4uYTliZDZlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFJlbmVzYXMgVGVjaG5vbG9neSBDb3JwLiBTSDc3ODYgVXJxdWVsbCBTdXBwb3J0LgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCAgS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgIFBhdWwgTXVuZHQKICAqCiAgKiBCYXNlZCBvbiBib2FyZC1zaDc3ODVsY3IuYwogICogQ29weXJpZ2h0IChDKSAyMDA4ICBZb3NoaWhpcm8gU2hpbW9kYQpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPG1hY2gvdXJxdWVsbC5oPgogI2luY2x1ZGUgPGNwdS9zaDc3ODYuaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CkBAIC01MCwyNiArNTEsMTcgQEAKICAqLwogCiAvKiBIZWFydEJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQk9BUkRSRUcoU0xFRFIpLAotCQkuZW5kCT0gQk9BUkRSRUcoU0xFRFIpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gQk9BUkRSRUcoU0xFRFIpLAorCS5lbmQJPSBCT0FSRFJFRyhTTEVEUiksCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCiAJLmlkCQk9IC0xLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBMQU45MUMxMTEgKi8KQEAgLTE4NCw2ICsxNzYsMjcgQEAKIAlyZXR1cm4gX19yYXdfcmVhZHcoVUJPQVJEUkVHKE1EU1dNUikpOwogfQogCitzdGF0aWMgaW50IHVycXVlbGxfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHJldDsKKworCS8qCisJICogT25seSBoYW5kbGUgdGhlIEVYVEFMIGNhc2UsIGFueW9uZSBpbnRlcmZhY2luZyBhIGNyeXN0YWwKKwkgKiByZXNvbmF0b3Igd2lsbCBuZWVkIHRvIHByb3ZpZGUgdGhlaXIgb3duIGlucHV0IGNsb2NrLgorCSAqLworCWlmICh0ZXN0X21vZGVfcGluKE1PREVfUElOOSkpCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrID0gY2xrX2dldChOVUxMLCAiZXh0YWwiKTsKKwlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwlyZXQgPSBjbGtfc2V0X3JhdGUoY2xrLCAzMzMzMzMzMyk7CisJY2xrX3B1dChjbGspOworCisJcmV0dXJuIHJldDsKK30KKwogLyogSW5pdGlhbGl6ZSB0aGUgYm9hcmQgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCB1cnF1ZWxsX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CkBAIC0yMDAsNCArMjEzLDUgQEAKIAkubXZfc2V0dXAJPSB1cnF1ZWxsX3NldHVwLAogCS5tdl9pbml0X2lycQk9IHVycXVlbGxfaW5pdF9pcnEsCiAJLm12X21vZGVfcGlucwk9IHVycXVlbGxfbW9kZV9waW5zLAorCS5tdl9jbGtfaW5pdAk9IHVycXVlbGxfY2xrX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCmluZGV4IDFmNWZhNWMuLjU3ZTM3ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKQEAgLTE1OSwyMSArMTU5LDIxIEBACiAJbXNsZWVwKDEwMCk7CiAKIAkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT04gKi8KLQljdHJsX291dHcoRlBHQV9MQ0RSRUdfVkFMLCBGUEdBX0xDRFJFRyk7CisJX19yYXdfd3JpdGV3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOwogCiAJLyogYmFja2xpZ2h0ICovCiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAwKTsKLQljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKKwlfX3Jhd193cml0ZXcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIAogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vZmYodm9pZCAqYm9hcmRfZGF0YSkKIHsKIAkvKiBiYWNrbGlnaHQgKi8KLQljdHJsX291dHcoMCwgRlBHQV9CS0xSRUcpOworCV9fcmF3X3dyaXRldygwLCBGUEdBX0JLTFJFRyk7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAxKTsKIAogCS8qIEFTRCBBUC0zMjAvMzI1IExDRCBPRkYgKi8KLQljdHJsX291dHcoMCwgRlBHQV9MQ0RSRUcpOworCV9fcmF3X3dyaXRldygwLCBGUEdBX0xDRFJFRyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfaW5mbyBsY2RjX2luZm8gPSB7CkBAIC00MjAsNyArNDIwLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDEwMSwKKwkJLnN0YXJ0CT0gMTAwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00NDMsNyArNDQzLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDI0LAorCQkuc3RhcnQJPSAyMywKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDcxLDggKzQ3MSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyBvdjc3MjVfaW5mbyA9IHsKLQkuYnVzd2lkdGgJPSBTT0NBTV9EQVRBV0lEVEhfOCwKLQkuZmxhZ3MJCT0gT1Y3NzJYX0ZMQUdfVkZMSVAgfCBPVjc3MlhfRkxBR19IRkxJUCwKKwkuZmxhZ3MJCT0gT1Y3NzJYX0ZMQUdfVkZMSVAgfCBPVjc3MlhfRkxBR19IRkxJUCB8IFwKKwkJCSAgT1Y3NzJYX0ZMQUdfOEJJVCwKIAkuZWRnZWN0cmwJPSBPVjc3MlhfQVVUT19FREdFQ1RSTCgweGYsIDApLAogfTsKIApAQCAtNTk1LDcgKzU5NSw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRaNCwgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRaNCwgMCk7IC8qIFNBRERSICovCiAKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weDAwMDEsIFBPUlRfTVNFTENSQik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOwogCiAJLyogRkxDVEwgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GQ0UsIE5VTEwpOwpAQCAtNjEzLDkgKzYxMyw5IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRldFLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GUkIsIE5VTEwpOwogCi0JY3RybF9vdXR3KDAsIFBPUlRfSElaQ1JDKTsKLQljdHJsX291dHcoMHhGRkZGLCBQT1JUX0RSVkNSQSk7Ci0JY3RybF9vdXR3KDB4RkZGRiwgUE9SVF9EUlZDUkIpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX0hJWkNSQyk7CisJX19yYXdfd3JpdGV3KDB4RkZGRiwgUE9SVF9EUlZDUkEpOworCV9fcmF3X3dyaXRldygweEZGRkYsIFBPUlRfRFJWQ1JCKTsKIAogCXBsYXRmb3JtX3Jlc291cmNlX3NldHVwX21lbW9yeSgmY2V1X2RldmljZSwgImNldSIsIDQgPDwgMjApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtY2F5bWFuL2lycS5jCmluZGV4IDMzZjc3MDguLjEzOTRiMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtY2F5bWFuL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtY2F5bWFuL2lycS5jCkBAIC02Niw5ICs2Niw5IEBACiAJcmVnID0gRVBMRF9NQVNLX0JBU0UgKyAoKGlycSAvIDgpIDw8IDIpOwogCWJpdCA9IDE8PChpcnEgJSA4KTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JbWFzayA9IGN0cmxfaW5sKHJlZyk7CisJbWFzayA9IF9fcmF3X3JlYWRsKHJlZyk7CiAJbWFzayB8PSBiaXQ7Ci0JY3RybF9vdXRsKG1hc2ssIHJlZyk7CisJX19yYXdfd3JpdGVsKG1hc2ssIHJlZyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC04Myw5ICs4Myw5IEBACiAJcmVnID0gRVBMRF9NQVNLX0JBU0UgKyAoKGlycSAvIDgpIDw8IDIpOwogCWJpdCA9IDE8PChpcnEgJSA4KTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JbWFzayA9IGN0cmxfaW5sKHJlZyk7CisJbWFzayA9IF9fcmF3X3JlYWRsKHJlZyk7CiAJbWFzayAmPSB+Yml0OwotCWN0cmxfb3V0bChtYXNrLCByZWcpOworCV9fcmF3X3dyaXRlbChtYXNrLCByZWcpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMTA5LDggKzEwOSw4IEBACiAJCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCQlpbnQgaTsKIAotCQlzdGF0dXMgPSBjdHJsX2lubChFUExEX1NUQVRVU19CQVNFKSAmCi0JCQkgY3RybF9pbmwoRVBMRF9NQVNLX0JBU0UpICYgMHhmZjsKKwkJc3RhdHVzID0gX19yYXdfcmVhZGwoRVBMRF9TVEFUVVNfQkFTRSkgJgorCQkJIF9fcmF3X3JlYWRsKEVQTERfTUFTS19CQVNFKSAmIDB4ZmY7CiAJCWlmIChzdGF0dXMgPT0gMCkgewogCQkJaXJxID0gLTE7CiAJCX0gZWxzZSB7CkBAIC0xMjYsOCArMTI2LDggQEAKIAkJdW5zaWduZWQgbG9uZyBzdGF0dXM7CiAJCWludCBpOwogCi0JCXN0YXR1cyA9IGN0cmxfaW5sKEVQTERfU1RBVFVTX0JBU0UgKyAzICogc2l6ZW9mKHUzMikpICYKLQkJCSBjdHJsX2lubChFUExEX01BU0tfQkFTRSArIDMgKiBzaXplb2YodTMyKSkgJiAweGZmOworCQlzdGF0dXMgPSBfX3Jhd19yZWFkbChFUExEX1NUQVRVU19CQVNFICsgMyAqIHNpemVvZih1MzIpKSAmCisJCQkgX19yYXdfcmVhZGwoRVBMRF9NQVNLX0JBU0UgKyAzICogc2l6ZW9mKHUzMikpICYgMHhmZjsKIAkJaWYgKHN0YXR1cyA9PSAwKSB7CiAJCQlpcnEgPSAtMTsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMKaW5kZXggZjU1ZmM4ZS4uZDkzMjY2NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMKQEAgLTEzNSwzICsxMzUsMzAgQEAKIAkvKiBOb3QgcmVhY2hlZCAqLwogCXJldHVybiBpcnE7CiB9CisKK3ZvaWQgc3lzdGVtYXNpY19pcnFfaW5pdCh2b2lkKQoreworCWludCBpLCBuaWQgPSBjcHVfdG9fbm9kZShib290X2NwdV9kYXRhKTsKKworCS8qIEFzc2lnbiBhbGwgdmlydHVhbCBJUlFzIHRvIHRoZSBTeXN0ZW0gQVNJQyBpbnQuIGhhbmRsZXIgKi8KKwlmb3IgKGkgPSBIV19FVkVOVF9JUlFfQkFTRTsgaSA8IEhXX0VWRU5UX0lSUV9NQVg7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaXJxOworCisJCWlycSA9IGNyZWF0ZV9pcnFfbnIoaSwgbmlkKTsKKwkJaWYgKHVubGlrZWx5KGlycSA9PSAwKSkgeworCQkJcHJfZXJyKCIlczogZmFpbGVkIGhvb2tpbmcgaXJxICVkIGZvciBzeXN0ZW1hc2ljXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICh1bmxpa2VseShpcnEgIT0gaSkpIHsKKwkJCXByX2VycigiJXM6IGdvdCBpcnEgJWQgYnV0IHdhbnRlZCAlZCwgYmFpbGluZy5cbiIsCisJCQkgICAgICAgX19mdW5jX18sIGlycSwgaSk7CisJCQlkZXN0cm95X2lycShpcnEpOworCQkJcmV0dXJuOworCQl9CisKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZzeXN0ZW1hc2ljX2ludCwKKwkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3J0Yy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvcnRjLmMKaW5kZXggYTc0MzM2OC4uMDYxZDY1NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvcnRjLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvcnRjLmMKQEAgLTM1LDExICszNSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgdmFsMSwgdmFsMjsKIAogCWRvIHsKLQkJdmFsMSA9ICgoY3RybF9pbmwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKLQkJCShjdHJsX2lubChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKKwkJdmFsMSA9ICgoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKKwkJCShfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKIAotCQl2YWwyID0gKChjdHJsX2lubChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAotCQkJKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOworCQl2YWwyID0gKChfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAorCQkJKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOwogCX0gd2hpbGUgKHZhbDEgIT0gdmFsMik7CiAKIAl0cy0+dHZfc2VjID0gdmFsMSAtIFRXRU5UWV9ZRUFSUzsKQEAgLTYwLDE0ICs2MCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgYWRqID0gc2VjcyArIFRXRU5UWV9ZRUFSUzsKIAogCWRvIHsKLQkJY3RybF9vdXRsKChhZGogJiAweGZmZmYwMDAwKSA+PiAxNiwgQUlDQV9SVENfU0VDU19IKTsKLQkJY3RybF9vdXRsKChhZGogJiAweGZmZmYpLCBBSUNBX1JUQ19TRUNTX0wpOworCQlfX3Jhd193cml0ZWwoKGFkaiAmIDB4ZmZmZjAwMDApID4+IDE2LCBBSUNBX1JUQ19TRUNTX0gpOworCQlfX3Jhd193cml0ZWwoKGFkaiAmIDB4ZmZmZiksIEFJQ0FfUlRDX1NFQ1NfTCk7CiAKLQkJdmFsMSA9ICgoY3RybF9pbmwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKLQkJCShjdHJsX2lubChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKKwkJdmFsMSA9ICgoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKKwkJCShfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKIAotCQl2YWwyID0gKChjdHJsX2lubChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAotCQkJKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOworCQl2YWwyID0gKChfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAorCQkJKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOwogCX0gd2hpbGUgKHZhbDEgIT0gdmFsMik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCmluZGV4IGE0Yjc0MDIuLmFkMWE0ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYwpAQCAtMjgsMjUgKzI4LDggQEAKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPG1hY2gvc3lzYXNpYy5oPgogCi1leHRlcm4gc3RydWN0IGlycV9jaGlwIHN5c3RlbWFzaWNfaW50OwotZXh0ZXJuIHZvaWQgYWljYV90aW1lX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IHN5c3RlbWFzaWNfaXJxX2RlbXV4KGludCk7Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBkcmVhbWNhc3Rfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQlpbnQgaTsKLQotCS8qIE1hc2sgYWxsIGhhcmR3YXJlIGV2ZW50cyAqLwotCS8qIFhYWCAqLwotCi0JLyogQWNrbm93bGVkZ2UgYW55IHByZXZpb3VzIGV2ZW50cyAqLwotCS8qIFhYWCAqLwotCi0JLyogQXNzaWduIGFsbCB2aXJ0dWFsIElSUXMgdG8gdGhlIFN5c3RlbSBBU0lDIGludC4gaGFuZGxlciAqLwotCWZvciAoaSA9IEhXX0VWRU5UX0lSUV9CQVNFOyBpIDwgSFdfRVZFTlRfSVJRX01BWDsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnN5c3RlbWFzaWNfaW50LAotCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7Ci0KIAlib2FyZF90aW1lX2luaXQgPSBhaWNhX3RpbWVfaW5pdDsKIH0KIApAQCAtNTQsNCArMzcsNSBAQAogCS5tdl9uYW1lCQk9ICJTZWdhIERyZWFtY2FzdCIsCiAJLm12X3NldHVwCQk9IGRyZWFtY2FzdF9zZXR1cCwKIAkubXZfaXJxX2RlbXV4CQk9IHN5c3RlbWFzaWNfaXJxX2RlbXV4LAorCS5tdl9pbml0X2lycQkJPSBzeXN0ZW1hc2ljX2lycV9pbml0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2RyYW0uUyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2RyYW0uUwppbmRleCA4MzM0NDAwLi4zOTYzYzZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NkcmFtLlMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZHJhbS5TCkBAIC0zNyw2ICszNywxMCBAQAogCS5iYWxpZ24gNAogRU5UUlkoZWNvdmVjMjRfc2RyYW1fbGVhdmVfc3RhcnQpCiAKKwltb3YubAlAKFNIX1NMRUVQX01PREUsIHI1KSwgcjAKKwl0c3QJI1NVU1BfU0hfUlNUQU5EQlksIHIwCisJYmYJcmVzdW1lX3JzdGFuZGJ5CisKIAkvKiBEQlNDOiBwdXQgbWVtb3J5IGluIGF1dG8tcmVmcmVzaCBtb2RlICovCiAKIAlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAwIC8qIERCUkZQRE4wICovCkBAIC00OSw0ICs1Myw1OSBAQAogCXJ0cwogCSBub3AKIAorcmVzdW1lX3JzdGFuZGJ5OgorCisJLyogREJTQzogcmUtaW5pdGlhbGl6ZSBhbmQgcHV0IGluIGF1dG8tcmVmcmVzaCAqLworCisJRUQgMHhGRDAwMDEwOCwgMHgwMDAwMDE4MSAvKiBEQlBEQ05UMCAqLworCUVEIDB4RkQwMDAwMjAsIDB4MDE1QjAwMDIgLyogREJDT05GICovCisJRUQgMHhGRDAwMDAzMCwgMHgwMzA3MTUwMiAvKiBEQlRSMCAqLworCUVEIDB4RkQwMDAwMzQsIDB4MDIwMjAxMDIgLyogREJUUjEgKi8KKwlFRCAweEZEMDAwMDM4LCAweDAxMDkwNDA1IC8qIERCVFIyICovCisJRUQgMHhGRDAwMDAzQywgMHgwMDAwMDAwMiAvKiBEQlRSMyAqLworCUVEIDB4RkQwMDAwMDgsIDB4MDAwMDAwMDUgLyogREJLSU5EICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMSAvKiBEQlJGUEROMCAqLworCUVEIDB4RkQwMDAwNDAsIDB4MDAwMDAwMDAgLyogREJSRlBETjAgKi8KKwlFRCAweEZEMDAwMDE4LCAweDAwMDAwMDAxIC8qIERCQ0tFQ05UICovCisKKwltb3YJIzEwMCxyMAorV0FJVF80MDBOUzoKKwlkdAlyMAorCWJmCVdBSVRfNDAwTlMKKworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAyMDAwMCAvKiBEQk1SQ05UIChFTVIyKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMzAwMDAgLyogREJNUkNOVCAoRU1SMykgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwMDA0IC8qIERCTVJDTlQgKEVNUikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDAwNTMyIC8qIERCTVJDTlQgKE1SUykgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDAyIC8qIERCQ01EQ05UIChQQUxMKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDA0IC8qIERCQ01EQ05UIChSRUYpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAwMDQzMiAvKiBEQk1SQ05UIChNUlMpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAxMDNjMCAvKiBEQk1SQ05UIChFTVIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAxMDA0MCAvKiBEQk1SQ05UIChFTVIpICovCisKKwltb3YJIzEwMCxyMAorV0FJVF80MDBOU18yOgorCWR0CXIwCisJYmYJV0FJVF80MDBOU18yCisKKwlFRCAweEZEMDAwMDEwLCAweDAwMDAwMDAxIC8qIERCRU4gKi8KKwlFRCAweEZEMDAwMDQ0LCAweDAwMDAwNTBmIC8qIERCUkZQRE4xICovCisJRUQgMHhGRDAwMDA0OCwgMHgyMzY4MDBlNiAvKiBEQlJGUEROMiAqLworCisJbW92LmwJRFVNTVkscjAKKwltb3YubAlAcjAsIHIxIC8qIGZvcmNlIHNpbmdsZSBkdW1teSByZWFkICovCisKKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDAyIC8qIERCQ01EQ05UIChQQUxMKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMTA4LCAweDAwMDAwMDgwIC8qIERCUERDTlQwICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAxMDAwMCAvKiBEQlJGUEROMCAqLworCisJcnRzCisJIG5vcAorCisJLmJhbGlnbiA0CitEVU1NWToJLmxvbmcJMHhhYzQwMDAwMAorCiBFTlRSWShlY292ZWMyNF9zZHJhbV9sZWF2ZV9lbmQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggNWMyNDYyOC4uMzllZDg3MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtNjQsMTggKzY0LDE2IEBACiAKIC8qIEhlYXJ0YmVhdCAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgbGVkX3Bvc1tdID0geyAwLCAxLCAyLCAzIH07CisKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSA4LAogCS5ucl9iaXRzID0gNCwKIAkuYml0X3BvcyA9IGxlZF9wb3MsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSAweEE0MDUwMTJDLCAvKiBQVEcgKi8KLQkJLmVuZCAgICA9IDB4QTQwNTAxMkUgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydCAgPSAweEE0MDUwMTJDLCAvKiBQVEcgKi8KKwkuZW5kICAgID0gMHhBNDA1MDEyRSAtIDEsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CkBAIC04NCw4ICs4Miw4IEBACiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gMSwKKwkucmVzb3VyY2UgICAgICAgPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogTVREICovCkBAIC00NTUsNyArNDUzLDcgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQgID0gMTAxLAorCQkuc3RhcnQgID0gMTAwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00OTEsNyArNDg5LDcgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQgID0gMjQsCisJCS5zdGFydCAgPSAyMywKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNjk4LDEzICs2OTYsMTMgQEAKICNkZWZpbmUgRkNMS0JDUgkJMHhhNDE1MDAwYwogc3RhdGljIHZvaWQgZnNpbWNrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCXUzMiBzdGF0dXMgPSBjdHJsX2lubChjbGstPmVuYWJsZV9yZWcpOworCXUzMiBzdGF0dXMgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCiAJLyogdXNlIGV4dGVybmFsIGNsb2NrICovCiAJc3RhdHVzICY9IH4weDAwMDAwMGZmOwogCXN0YXR1cyB8PSAweDAwMDAwMDgwOwogCi0JY3RybF9vdXRsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKKwlfX3Jhd193cml0ZWwoc3RhdHVzLCBjbGstPmVuYWJsZV9yZWcpOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgZnNpbWNrX2Nsa19vcHMgPSB7CkBAIC03NTMsNiArNzUxLDI2IEBACiAJfSwKIH07CiAKKy8qIElyREEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJkYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIklyREEiLAorCQkuc3RhcnQgID0gMHhBNDVEMDAwMCwKKwkJLmVuZCAgICA9IDB4QTQ1RDAwNDksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IDIwLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlyZGFfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaF9zaXIiLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaXJkYV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGlyZGFfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVjb3ZlY19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmaGVhcnRiZWF0X2RldmljZSwKIAkmbm9yX2ZsYXNoX2RldmljZSwKQEAgLTc3Myw4ICs3OTEsMTAgQEAKIAkmY2FtZXJhX2RldmljZXNbMV0sCiAJJmNhbWVyYV9kZXZpY2VzWzJdLAogCSZmc2lfZGV2aWNlLAorCSZpcmRhX2RldmljZSwKIH07CiAKKyNpZmRlZiBDT05GSUdfSTJDCiAjZGVmaW5lIEVFUFJPTV9BRERSIDB4NTAKIHN0YXRpYyB1OCBtYWNfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmEsIHU4IGNvbW1hbmQpCiB7CkBAIC04MTcsNiArODM3LDEyIEBACiAJCW1zbGVlcCgxMCk7CiAJfQogfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBzaF9ldGhfaW5pdChzdHJ1Y3Qgc2hfZXRoX3BsYXRfZGF0YSAqcGQpCit7CisJcHJfZXJyKCJ1bmFibGUgdG8gcmVhZCBzaF9ldGggTUFDIGFkZHJlc3NcbiIpOworfQorI2VuZGlmCiAKICNkZWZpbmUgUE9SVF9ISVpBIDB4QTQwNTAxNTgKICNkZWZpbmUgSU9EUklWRUEgIDB4QTQwNTAxOEEKQEAgLTgzMSw3ICs4NTcsOCBAQAogCXN0cnVjdCBjbGsgKmNsazsKIAogCS8qIHJlZ2lzdGVyIGJvYXJkIHNwZWNpZmljIHNlbGYtcmVmcmVzaCBjb2RlICovCi0Jc2hfbW9iaWxlX3JlZ2lzdGVyX3NlbGZfcmVmcmVzaChTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGLAorCXNoX21vYmlsZV9yZWdpc3Rlcl9zZWxmX3JlZnJlc2goU1VTUF9TSF9TVEFOREJZIHwgU1VTUF9TSF9TRiB8CisJCQkJCVNVU1BfU0hfUlNUQU5EQlksCiAJCQkJCSZlY292ZWMyNF9zZHJhbV9lbnRlcl9zdGFydCwKIAkJCQkJJmVjb3ZlYzI0X3NkcmFtX2VudGVyX2VuZCwKIAkJCQkJJmVjb3ZlYzI0X3NkcmFtX2xlYXZlX3N0YXJ0LApAQCAtODU1LDcgKzg4Miw3IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRHMSwgMCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRHMiwgMCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRHMywgMCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkEpICYgfigweDEgPDwgMSkpICwgUE9SVF9ISVpBKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfSElaQSkgJiB+KDB4MSA8PCAxKSkgLCBQT1JUX0hJWkEpOwogCiAJLyogZW5hYmxlIFNILUV0aCAqLwogCWdwaW9fcmVxdWVzdChHUElPX1BUQTEsIE5VTEwpOwpAQCAtODc1LDE2ICs5MDIsMTYgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MTktTVEEsICAgICAgIE5VTEwpOwogCiAJLyogZW5hYmxlIFVTQiAqLwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTREODAwMDApOwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTREOTAwMDApOworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTREODAwMDApOworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTREOTAwMDApOwogCWdwaW9fcmVxdWVzdChHUElPX1BUQjMsICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVEI0LCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRCNSwgIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRCMyk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRCNCwgMCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRCNSwgMCk7Ci0JY3RybF9vdXR3KDB4MDYwMCwgMHhhNDA1MDFkNCk7Ci0JY3RybF9vdXR3KDB4MDYwMCwgMHhhNDA1MDE5Mik7CisJX19yYXdfd3JpdGV3KDB4MDYwMCwgMHhhNDA1MDFkNCk7CisJX19yYXdfd3JpdGV3KDB4MDYwMCwgMHhhNDA1MDE5Mik7CiAKIAlpZiAoZ3Bpb19nZXRfdmFsdWUoR1BJT19QVEIzKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJVU0IxIGZ1bmN0aW9uIGlzIHNlbGVjdGVkXG4iKTsKQEAgLTkyNSw3ICs5NTIsNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZTWU4sICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RET04sICAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENETENMSywgIE5VTEwpOwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9ISVpBKSAmIH4weDAwMDEpLCBQT1JUX0hJWkEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9ISVpBKSAmIH4weDAwMDEpLCBQT1JUX0hJWkEpOwogCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRFNiwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRVMSwgTlVMTCk7CkBAIC05MzcsNyArOTY0LDcgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEEyLCAwKTsKIAogCS8qIEkvTyBidWZmZXIgZHJpdmUgYWJpbGl0eSBpcyBoaWdoICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhJT0RSSVZFQSkgJiB+MHgwMGMwKSB8IDB4MDA4MCAsIElPRFJJVkVBKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KElPRFJJVkVBKSAmIH4weDAwYzApIHwgMHgwMDgwICwgSU9EUklWRUEpOwogCiAJaWYgKGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRFNikpIHsKIAkJLyogRFZJICovCkBAIC0xMDY5LDcgKzEwOTYsNyBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUQjcsIDApOwogCiAJLyogSS9PIGJ1ZmZlciBkcml2ZSBhYmlsaXR5IGlzIGhpZ2ggZm9yIFNESEkxICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhJT0RSSVZFQSkgJiB+MHgzMDAwKSB8IDB4MjAwMCAsIElPRFJJVkVBKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KElPRFJJVkVBKSAmIH4weDMwMDApIHwgMHgyMDAwICwgSU9EUklWRUEpOwogI2Vsc2UKIAkvKiBlbmFibGUgTVNJT0YwIG9uIENOMTEgKG5lZWRzIERTMi40IHNldCB0byBPRkYpICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTVNJT0YwX1RYRCwgTlVMTCk7CkBAIC0xMTA3LDYgKzExMzQsMTEgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQkxSQ0ssICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9DTEtBVURJT0JPLCBOVUxMKTsKIAorCS8qIHNldCBTUFUyIGNsb2NrIHRvIDgzLjQgTUh6ICovCisJY2xrID0gY2xrX2dldChOVUxMLCAic3B1X2NsayIpOworCWNsa19zZXRfcmF0ZShjbGssIGNsa19yb3VuZF9yYXRlKGNsaywgODMzMzMzMzMpKTsKKwljbGtfcHV0KGNsayk7CisKIAkvKiBjaGFuZ2UgcGFyZW50IG9mIEZTSSBCICovCiAJY2xrID0gY2xrX2dldChOVUxMLCAiZnNpYl9jbGsiKTsKIAljbGtfcmVnaXN0ZXIoJmZzaW1ja2JfY2xrKTsKQEAgLTExMjMsNiArMTE1NSwxNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lOVENfSVJRMSwgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19GTl9JTlRDX0lSUTEpOwogCisJLyogc2V0IFZQVSBjbG9jayB0byAxNjYgTUh6ICovCisJY2xrID0gY2xrX2dldChOVUxMLCAidnB1X2NsayIpOworCWNsa19zZXRfcmF0ZShjbGssIGNsa19yb3VuZF9yYXRlKGNsaywgMTY2MDAwMDAwKSk7CisJY2xrX3B1dChjbGspOworCisJLyogZW5hYmxlIElyREEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX09VVCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9JTiwgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX1BUVTUsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUVTUsIDApOworCiAJLyogZW5hYmxlIEkyQyBkZXZpY2UgKi8KIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmMwX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShpMmMwX2RldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMKaW5kZXggODNjMjhiYy4uOTg5M2ZkMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogdW5zaWduZWQgY2hhciAqIF9faW5pdCBoaWdobGFuZGVyX3BsYXRfaXJxX3NldHVwKHZvaWQpCiB7Ci0JaWYgKChjdHJsX2ludygweGE0MDAwNzAwKSAmIDB4ZjAwMCkgPT0gMHgyMDAwKSB7CisJaWYgKChfX3Jhd19yZWFkdygweGE0MDAwNzAwKSAmIDB4ZjAwMCkgPT0gMHgyMDAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHI3NzgwbXAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogCQlyZXR1cm4gaXJsMmlycTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKaW5kZXggYjcyMWU4Ni4uMDgwNWIyMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAogdW5zaWduZWQgY2hhciAqIF9faW5pdCBoaWdobGFuZGVyX3BsYXRfaXJxX3NldHVwKHZvaWQpCiB7Ci0JaWYgKGN0cmxfaW53KDB4YTUwMDA2MDApKSB7CisJaWYgKF9fcmF3X3JlYWR3KDB4YTUwMDA2MDApKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHI3NzgwcnAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogCQlyZXR1cm4gaXJsMmlycTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKaW5kZXggMzgxMWIwNi4uNTU4YjI0OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKQEAgLTY2LDIwICs2NiwyMCBAQAogCiB1bnNpZ25lZCBjaGFyICogX19pbml0IGhpZ2hsYW5kZXJfcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKLQlpZiAoKGN0cmxfaW53KDB4YTQwMDAxNTgpICYgMHhmMDAwKSAhPSAweDEwMDApCisJaWYgKChfX3Jhd19yZWFkdygweGE0MDAwMTU4KSAmIDB4ZjAwMCkgIT0gMHgxMDAwKQogCQlyZXR1cm4gTlVMTDsKIAogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHI3Nzg1cnAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAotCWN0cmxfb3V0dygweDAwMDAsIFBBX0lSTFNTUjEpOwkvKiBGUEdBIElSTFNTUjEoQ0ZfQ0QgY2xlYXIpICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUEFfSVJMU1NSMSk7CS8qIEZQR0EgSVJMU1NSMShDRl9DRCBjbGVhcikgKi8KIAogCS8qIFNldHVwIHRoZSBGUEdBIElSTCAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBBX0lSTFBSQSk7CS8qIEZQR0EgSVJMQSAqLwotCWN0cmxfb3V0dygweGU1OTgsIFBBX0lSTFBSQik7CS8qIEZQR0EgSVJMQiAqLwotCWN0cmxfb3V0dygweDcwNjAsIFBBX0lSTFBSQyk7CS8qIEZQR0EgSVJMQyAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBBX0lSTFBSRCk7CS8qIEZQR0EgSVJMRCAqLwotCWN0cmxfb3V0dygweDQzMjEsIFBBX0lSTFBSRSk7CS8qIEZQR0EgSVJMRSAqLwotCWN0cmxfb3V0dygweGRjYmEsIFBBX0lSTFBSRik7CS8qIEZQR0EgSVJMRiAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX0lSTFBSQSk7CS8qIEZQR0EgSVJMQSAqLworCV9fcmF3X3dyaXRldygweGU1OTgsIFBBX0lSTFBSQik7CS8qIEZQR0EgSVJMQiAqLworCV9fcmF3X3dyaXRldygweDcwNjAsIFBBX0lSTFBSQyk7CS8qIEZQR0EgSVJMQyAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX0lSTFBSRCk7CS8qIEZQR0EgSVJMRCAqLworCV9fcmF3X3dyaXRldygweDQzMjEsIFBBX0lSTFBSRSk7CS8qIEZQR0EgSVJMRSAqLworCV9fcmF3X3dyaXRldygweGRjYmEsIFBBX0lSTFBSRik7CS8qIEZQR0EgSVJMRiAqLwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogCXJldHVybiBpcmwyaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCmluZGV4IDM3YjFhMmUuLjUyMjc4NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbCwgbWFzazsKIAlpbnQgcmV0ID0gMDsKIAotCWwgPSBjdHJsX2ludyhQQV9EQlNXKTsKKwlsID0gX19yYXdfcmVhZHcoUEFfREJTVyk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8gc3RhdGUgY2hhbmdlICovCiAJaWYgKHBzdy0+c3RhdGUpIHsKQEAgLTQ1LDcgKzQ1LDcgQEAKIG91dDoKIAkvKiBDbGVhciB0aGUgc3dpdGNoIElSUXMgKi8KIAlsIHw9ICgweDcgPDwgMTIpOwotCWN0cmxfb3V0dyhsLCBQQV9EQlNXKTsKKwlfX3Jhd193cml0ZXcobCwgUEFfREJTVyk7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYwppbmRleCBmNjYzYzE0Li5hZmZkNjY3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYwpAQCAtMzExLDEzICszMTEsMTMgQEAKICAqLwogc3RhdGljIGludCBpdmRyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewotCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9JVkRSQ1RMKSB8ICgxIDw8IElWRFJfQ0tfT04pLCBQQV9JVkRSQ1RMKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUEFfSVZEUkNUTCkgfCAoMSA8PCBJVkRSX0NLX09OKSwgUEFfSVZEUkNUTCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGl2ZHJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewotCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9JVkRSQ1RMKSAmIH4oMSA8PCBJVkRSX0NLX09OKSwgUEFfSVZEUkNUTCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0lWRFJDVEwpICYgfigxIDw8IElWRFJfQ0tfT04pLCBQQV9JVkRSQ1RMKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIGl2ZHJfY2xrX29wcyA9IHsKQEAgLTMzNyw3ICszMzcsNyBAQAogc3RhdGljIHZvaWQgcjc3ODBycF9wb3dlcl9vZmYodm9pZCkKIHsKIAlpZiAobWFjaF9pc19yNzc4MG1wKCkgfHwgbWFjaF9pc19yNzc4NXJwKCkpCi0JCWN0cmxfb3V0dygweDAwMDEsIFBBX1BPRkYpOworCQlfX3Jhd193cml0ZXcoMHgwMDAxLCBQQV9QT0ZGKTsKIH0KIAogLyoKQEAgLTM0NSw3ICszNDUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgaGlnaGxhbmRlcl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCXUxNiB2ZXIgPSBjdHJsX2ludyhQQV9WRVJSRUcpOworCXUxNiB2ZXIgPSBfX3Jhd19yZWFkdyhQQV9WRVJSRUcpOwogCWludCBpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBTb2x1dGlvbnMgSGlnaGxhbmRlciAlcyBzdXBwb3J0LlxuIiwKQEAgLTM3MCwxMiArMzcwLDEyIEBACiAJCWNsa19lbmFibGUoY2xrKTsKIAl9CiAKLQljdHJsX291dHcoMHgwMDAwLCBQQV9PQkxFRCk7CS8qIENsZWFyIExFRC4gKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9PQkxFRCk7CS8qIENsZWFyIExFRC4gKi8KIAogCWlmIChtYWNoX2lzX3I3NzgwcnAoKSkKLQkJY3RybF9vdXR3KDB4MDAwMSwgUEFfU0RQT1cpOwkvKiBTRCBQb3dlciBPTiAqLworCQlfX3Jhd193cml0ZXcoMHgwMDAxLCBQQV9TRFBPVyk7CS8qIFNEIFBvd2VyIE9OICovCiAKLQljdHJsX291dHcoY3RybF9pbncoUEFfSVZEUkNUTCkgfCAweDAxLCBQQV9JVkRSQ1RMKTsJLyogU2kxMzExMiAqLworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9JVkRSQ1RMKSB8IDB4MDEsIFBBX0lWRFJDVEwpOwkvKiBTaTEzMTEyICovCiAKIAlwbV9wb3dlcl9vZmYgPSByNzc4MHJwX3Bvd2VyX29mZjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCmluZGV4IGU4NTIxMmYuLmI0OTUzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYwpAQCAtNTMsNyArNTMsNyBAQAogCWluZm8tPmFjX2xpbmVfc3RhdHVzID0gKGJhdHRlcnkgPiBIUDY4MF9CQVRURVJZX0FDX09OKSA/CiAJCQkgQVBNX0FDX09OTElORSA6IEFQTV9BQ19PRkZMSU5FOwogCi0JcGdkciA9IGN0cmxfaW5iKFBHRFIpOworCXBnZHIgPSBfX3Jhd19yZWFkYihQR0RSKTsKIAlpZiAocGdkciAmIFBHRFJfTUFJTl9CQVRURVJZX09VVCkgewogCQlpbmZvLT5iYXR0ZXJ5X3N0YXR1cwk9IEFQTV9CQVRURVJZX1NUQVRVU19OT1RfUFJFU0VOVDsKIAkJaW5mby0+YmF0dGVyeV9mbGFnCT0gMHg4MDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYwppbmRleCBkOTM2YzFhLi40NDk5YTM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCkBAIC01MywxNyArNTMsMTcgQEAKIAlzaF93ZHRfd3JpdGVfY250KDApOwogCiAJLyogZGlzYWJsZSBQTEwxICovCi0JZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJZnJxY3IgJj0gfihGUlFDUl9QTExFTiB8IEZSUUNSX1BTVEJZKTsKLQljdHJsX291dHcoZnJxY3IsIEZSUUNSKTsKKwlfX3Jhd193cml0ZXcoZnJxY3IsIEZSUUNSKTsKIAogCS8qIGVuYWJsZSBzdGFuZGJ5ICovCi0Jc3RiY3IgPSBjdHJsX2luYihTVEJDUik7Ci0JY3RybF9vdXRiKHN0YmNyIHwgU1RCQ1JfU1RCWSB8IFNUQkNSX01TVFAyLCBTVEJDUik7CisJc3RiY3IgPSBfX3Jhd19yZWFkYihTVEJDUik7CisJX19yYXdfd3JpdGViKHN0YmNyIHwgU1RCQ1JfU1RCWSB8IFNUQkNSX01TVFAyLCBTVEJDUik7CiAKIAkvKiBzZXQgc2VsZi1yZWZyZXNoICovCi0JbWNyID0gY3RybF9pbncoTUNSKTsKLQljdHJsX291dHcobWNyICYgfk1DUl9SRlNILCBNQ1IpOworCW1jciA9IF9fcmF3X3JlYWR3KE1DUik7CisJX19yYXdfd3JpdGV3KG1jciAmIH5NQ1JfUkZTSCwgTUNSKTsKIAogCS8qIHNldCBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWFzbSB2b2xhdGlsZSgic3RjIHZiciwgJTAiIDogIj1yIiAodmJyX29sZCkpOwpAQCAtNzMsOCArNzMsOCBAQAogCSAgICAgICAmd2FrZXVwX3N0YXJ0LCAmd2FrZXVwX2VuZCAtICZ3YWtldXBfc3RhcnQpOwogCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKHZicl9uZXcpKTsKIAotCWN0cmxfb3V0dygwLCBSVENOVCk7Ci0JY3RybF9vdXR3KG1jciB8IE1DUl9SRlNIIHwgTUNSX1JNT0RFLCBNQ1IpOworCV9fcmF3X3dyaXRldygwLCBSVENOVCk7CisJX19yYXdfd3JpdGV3KG1jciB8IE1DUl9SRlNIIHwgTUNSX1JNT0RFLCBNQ1IpOwogCiAJY3B1X3NsZWVwKCk7CiAKQEAgLTgzLDE0ICs4MywxNCBAQAogCWZyZWVfcGFnZSh2YnJfbmV3KTsKIAogCS8qIGVuYWJsZSBQTEwxICovCi0JZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJZnJxY3IgfD0gRlJRQ1JfUFNUQlk7Ci0JY3RybF9vdXR3KGZycWNyLCBGUlFDUik7CisJX19yYXdfd3JpdGV3KGZycWNyLCBGUlFDUik7CiAJdWRlbGF5KDUwKTsKIAlmcnFjciB8PSBGUlFDUl9QTExFTjsKLQljdHJsX291dHcoZnJxY3IsIEZSUUNSKTsKKwlfX3Jhd193cml0ZXcoZnJxY3IsIEZSUUNSKTsKIAotCWN0cmxfb3V0YihzdGJjciwgU1RCQ1IpOworCV9fcmF3X3dyaXRlYihzdGJjciwgU1RCQ1IpOwogCiAJY2xlYXJfYmxfYml0KCk7CiB9CkBAIC0xMTUsMjEgKzExNSwyMSBAQAogCW91dHcoaGQ2NDQ2MV9zdGJjciwgSEQ2NDQ2MV9TVEJDUik7CiAjZW5kaWYKIAotCWN0cmxfb3V0YigweDFmLCBEQUNSKTsKKwlfX3Jhd193cml0ZWIoMHgxZiwgREFDUik7CiAKLQlzdGJjciA9IGN0cmxfaW5iKFNUQkNSKTsKLQljdHJsX291dGIoMHgwMSwgU1RCQ1IpOworCXN0YmNyID0gX19yYXdfcmVhZGIoU1RCQ1IpOworCV9fcmF3X3dyaXRlYigweDAxLCBTVEJDUik7CiAKLQlzdGJjcjIgPSBjdHJsX2luYihTVEJDUjIpOwotCWN0cmxfb3V0YigweDdmICwgU1RCQ1IyKTsKKwlzdGJjcjIgPSBfX3Jhd19yZWFkYihTVEJDUjIpOworCV9fcmF3X3dyaXRlYigweDdmICwgU1RCQ1IyKTsKIAogCW91dHcoMHhmMDdmLCBIRDY0NDYxX1NDUFVDUik7CiAKIAlwbV9lbnRlcigpOwogCiAJb3V0dygwLCBIRDY0NDYxX1NDUFVDUik7Ci0JY3RybF9vdXRiKHN0YmNyLCBTVEJDUik7Ci0JY3RybF9vdXRiKHN0YmNyMiwgU1RCQ1IyKTsKKwlfX3Jhd193cml0ZWIoc3RiY3IsIFNUQkNSKTsKKwlfX3Jhd193cml0ZWIoc3RiY3IyLCBTVEJDUjIpOwogCiAjaWZkZWYgQ09ORklHX0hENjQ0NjFfRU5BQkxFUgogCWhkNjQ0NjFfc3RiY3IgPSBpbncoSEQ2NDQ2MV9TVEJDUik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKaW5kZXggZTZkZDVlOS4uOGM5YWRkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYwpAQCAtMTQ5LDE5ICsxNDksMTkgQEAKIAogCXNoX2RhY19vdXRwdXQoMCwgREFDX1NQRUFLRVJfVk9MVU1FKTsKIAlzaF9kYWNfZGlzYWJsZShEQUNfU1BFQUtFUl9WT0xVTUUpOwotCXY4ID0gY3RybF9pbmIoREFDUik7CisJdjggPSBfX3Jhd19yZWFkYihEQUNSKTsKIAl2OCAmPSB+REFDUl9EQUU7Ci0JY3RybF9vdXRiKHY4LERBQ1IpOworCV9fcmF3X3dyaXRlYih2OCxEQUNSKTsKIAotCXY4ID0gY3RybF9pbmIoU0NQRFIpOworCXY4ID0gX19yYXdfcmVhZGIoU0NQRFIpOwogCXY4IHw9IFNDUERSX1RTX1NDQU5fWCB8IFNDUERSX1RTX1NDQU5fWTsKIAl2OCAmPSB+U0NQRFJfVFNfU0NBTl9FTkFCTEU7Ci0JY3RybF9vdXRiKHY4LCBTQ1BEUik7CisJX19yYXdfd3JpdGViKHY4LCBTQ1BEUik7CiAKLQl2ID0gY3RybF9pbncoU0NQQ1IpOworCXYgPSBfX3Jhd19yZWFkdyhTQ1BDUik7CiAJdiAmPSB+U0NQQ1JfVFNfTUFTSzsKIAl2IHw9IFNDUENSX1RTX0VOQUJMRTsKLQljdHJsX291dHcodiwgU0NQQ1IpOworCV9fcmF3X3dyaXRldyh2LCBTQ1BDUik7CiB9CiBkZXZpY2VfaW5pdGNhbGwoaHA2eHhfZGV2aWNlc19zZXR1cCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKaW5kZXggNWQ3YjVkOS4uYjJjZDBlZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKQEAgLTI4Miw3ICsyODIsNyBAQAogCQkgKiB1c2UgMS44IFYgZm9yIFZjY1FfVklPCiAJCSAqIHVzZSAyLjg1ViBmb3IgVmNjUV9TUgogCQkgKi8KLQkJY3RybF9vdXR3KChjdHJsX2ludyhEUlZDUkIpICYgfjB4MDAwMykgfCAweDAwMDEsIERSVkNSQik7CisJCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoRFJWQ1JCKSAmIH4weDAwMDMpIHwgMHgwMDAxLCBEUlZDUkIpOwogCiAJCS8qIHJlc2V0IGNsZWFyICovCiAJCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1BUQjQsIE5VTEwpOwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDEwMSwKKwkJLnN0YXJ0ICA9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDkyLDEzICs0OTIsMTMgQEAKIAlpZiAoa2ZyMnIwOV91c2IwX2dhZGdldF9pMmNfc2V0dXAoKSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsgLyogdW5hYmxlIHRvIGNvbmZpZ3VyZSB1c2luZyBpMmMgKi8KIAotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsgLyogUi1zdGFuZGJ5IGRpc2FibGVzIFVTQiBjbG9jayAqLwogCWdwaW9fcmVxdWVzdChHUElPX1BUVjYsIE5VTEwpOyAvKiBVU0JDTEtfT04gKi8KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFY2LCAxKTsgLyogVVNCQ0xLX09OID0gSCAqLwogCW1zbGVlcCgyMCk7IC8qIHdhaXQgMjBtcyB0byBsZXQgdGhlIGNsb2NrIHNldHRsZSAqLwogCWNsa19lbmFibGUoY2xrX2dldChOVUxMLCAidXNiMCIpKTsKLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTI2LDEyICs1MjYsMTIgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEczLCAxKTsgLyogSFBPTl9PTiA9IEggKi8KIAogCS8qIHNldHVwIE5PUiBmbGFzaCBhdCBDUzAgKi8KLQljdHJsX291dGwoMHgzNmRiMDQwMCwgQlNDX0NTMEJDUik7Ci0JY3RybF9vdXRsKDB4MDAwMDA1MDAsIEJTQ19DUzBXQ1IpOworCV9fcmF3X3dyaXRlbCgweDM2ZGIwNDAwLCBCU0NfQ1MwQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDUwMCwgQlNDX0NTMFdDUik7CiAKIAkvKiBzZXR1cCBOQU5EIGZsYXNoIGF0IENTNCAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCBCU0NfQ1M0QkNSKTsKLQljdHJsX291dGwoMHgwMDAwMDUwMCwgQlNDX0NTNFdDUik7CisJX19yYXdfd3JpdGVsKDB4MzZkYjA0MDAsIEJTQ19DUzRCQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMDAwNTAwLCBCU0NfQ1M0V0NSKTsKIAogCS8qIHNldHVwIEtFWVNDIHBpbnMgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwppbmRleCA1MjgwMTMxLi4wMWU2YWJiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCkBAIC03NiwzOSArNzYsMzkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NTR0lPREFUQTE6CS8qIHdyaXRlIGJ5dGUgKi8KLQkJY3RybF9vdXRiKCh1bnNpZ25lZCBjaGFyKSgweDBmZiAmIGRhdGEpLCBhZGRyKTsKKwkJX19yYXdfd3JpdGViKCh1bnNpZ25lZCBjaGFyKSgweDBmZiAmIGRhdGEpLCBhZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NTR0lPREFUQTI6CS8qIHdyaXRlIHdvcmQgKi8KIAkJaWYgKGFkZHIgJiAweDAxKSB7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQljdHJsX291dHcoKHVuc2lnbmVkIHNob3J0IGludCkoMHgwZmZmZiAmIGRhdGEpLCBhZGRyKTsKKwkJX19yYXdfd3JpdGV3KCh1bnNpZ25lZCBzaG9ydCBpbnQpKDB4MGZmZmYgJiBkYXRhKSwgYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DU0dJT0RBVEE0OgkvKiB3cml0ZSBsb25nICovCiAJCWlmIChhZGRyICYgMHgwMykgewogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJY3RybF9vdXRsKGRhdGEsIGFkZHIpOworCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DR0dJT0RBVEExOgkvKiByZWFkIGJ5dGUgKi8KLQkJZGF0YSA9IGN0cmxfaW5iKGFkZHIpOworCQlkYXRhID0gX19yYXdfcmVhZGIoYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DR0dJT0RBVEEyOgkvKiByZWFkIHdvcmQgKi8KIAkJaWYgKGFkZHIgJiAweDAxKSB7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQlkYXRhID0gY3RybF9pbncoYWRkcik7CisJCWRhdGEgPSBfX3Jhd19yZWFkdyhhZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NHR0lPREFUQTQ6CS8qIHJlYWQgbG9uZyAqLwogCQlpZiAoYWRkciAmIDB4MDMpIHsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKKwkJZGF0YSA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9pcnEuYwppbmRleCA3YjI4NGNkLi45NmYzOGE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2lycS5jCkBAIC0yMiwxNCArMjIsMTQgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIG1hc2sgPSAweGZmIF4gKDB4MDEgPDwgKGlycSAtIDUpKTsKIAotCWN0cmxfb3V0YihjdHJsX2luYihQQV9JTUFTSykgJiBtYXNrLCBQQV9JTUFTSyk7CisJX19yYXdfd3JpdGViKF9fcmF3X3JlYWRiKFBBX0lNQVNLKSAmIG1hc2ssIFBBX0lNQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2xhbmRpc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgY2hhciB2YWx1ZSA9ICgweDAxIDw8IChpcnEgLSA1KSk7CiAKLQljdHJsX291dGIoY3RybF9pbmIoUEFfSU1BU0spIHwgdmFsdWUsIFBBX0lNQVNLKTsKKwlfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIoUEFfSU1BU0spIHwgdmFsdWUsIFBBX0lNQVNLKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsYW5kaXNrX2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC01Miw1ICs1Miw1IEBACiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCQllbmFibGVfbGFuZGlza19pcnEoaSk7CiAJfQotCWN0cmxfb3V0YigweDAwLCBQQV9QV1JJTlRfQ0xSKTsKKwlfX3Jhd193cml0ZWIoMHgwMCwgUEFfUFdSSU5UX0NMUik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svcHN3LmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svcHN3LmMKaW5kZXggZTZiMGVmYS4uYmVmODM1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3Bzdy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9wc3cuYwpAQCAtMjUsNyArMjUsNyBAQAogCXVuc2lnbmVkIGludCBzd192YWx1ZTsKIAlpbnQgcmV0ID0gMDsKIAotCXN3X3ZhbHVlID0gKDB4MGZmICYgKH5jdHJsX2luYihQQV9TVEFUVVMpKSk7CisJc3dfdmFsdWUgPSAoMHgwZmYgJiAofl9fcmF3X3JlYWRiKFBBX1NUQVRVUykpKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUncyBubyBzdGF0ZSBjaGFuZ2UgKi8KIAlpZiAocHN3LT5zdGF0ZSkgewpAQCAtNDIsNyArNDIsNyBAQAogCiBvdXQ6CiAJLyogQ2xlYXIgdGhlIHN3aXRjaCBJUlFzICovCi0JY3RybF9vdXRiKDB4MDAsIFBBX1BXUklOVF9DTFIpOworCV9fcmF3X3dyaXRlYigweDAwLCBQQV9QV1JJTlRfQ0xSKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKHJldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9zZXR1cC5jCmluZGV4IGRiMjJlYTIuLjUwMzM3YWNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYwpAQCAtMjUsNyArMjUsNyBAQAogCiBzdGF0aWMgdm9pZCBsYW5kaXNrX3Bvd2VyX29mZih2b2lkKQogewotICAgICAgICBjdHJsX291dGIoMHgwMSwgUEFfU0hVVERPV04pOworICAgICAgICBfX3Jhd193cml0ZWIoMHgwMSwgUEFfU0hVVERPV04pOwogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNmX2lkZV9yZXNvdXJjZXNbM107CkBAIC02Myw3ICs2Myw3IEBACiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilQQV9BUkVBNV9JTyk7CiAJcHJvdCA9IFBBR0VfS0VSTkVMX1BDQygxLCBfUEFHRV9QQ0NfSU8xNik7Ci0JY2ZfaWRlX2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwcm90LnBncHJvdCk7CisJY2ZfaWRlX2Jhc2UgPSBpb3JlbWFwX3Byb3QocGFkZHJiYXNlLCBQQUdFX1NJWkUsIHBncHJvdF92YWwocHJvdCkpOwogCWlmICghY2ZfaWRlX2Jhc2UpIHsKIAkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODgsNyArODgsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGxhbmRpc2tfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKICAgICAgICAgLyogTEVEIE9OICovCi0JY3RybF9vdXRiKGN0cmxfaW5iKFBBX0xFRCkgfCAweDAzLCBQQV9MRUQpOworCV9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihQQV9MRUQpIHwgMHgwMywgUEFfTEVEKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkktTyBEQVRBIERFVklDRSwgSU5DLiBcIkxBTkRJU0sgU2VyaWVzXCIgc3VwcG9ydC5cbiIpOwogCXBtX3Bvd2VyX29mZiA9IGxhbmRpc2tfcG93ZXJfb2ZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvc2V0dXAuYwppbmRleCAyYjBiNTgxLi43OWI0ZTBkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKQEAgLTU2LDggKzU2LDggQEAKIAkvKiBvcGVuIEkvTyBhcmVhIHdpbmRvdyAqLwogCXBhZGRyYmFzZSA9IHZpcnRfdG9fcGh5cygodm9pZCopUEFfQVJFQTVfSU8pOwogCXBzaXplID0gUEFHRV9TSVpFOwotCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoIDEgLCBfUEFHRV9QQ0NfSU8xNik7Ci0JY2YwX2lvX2Jhc2UgPSAodTMyKXAzX2lvcmVtYXAocGFkZHJiYXNlLCBwc2l6ZSwgcHJvdC5wZ3Byb3QpOworCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoMSwgX1BBR0VfUENDX0lPMTYpOworCWNmMF9pb19iYXNlID0gKHUzMilpb3JlbWFwX3Byb3QocGFkZHJiYXNlLCBwc2l6ZSwgcGdwcm90X3ZhbChwcm90KSk7CiAJaWYgKCFjZjBfaW9fYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIiAsIF9fZnVuY19fICk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCmluZGV4IDUyZGQ3NDguLjI5NjBjNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKQEAgLTE0MSwxMCArMTQxLDEwIEBACiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogCS8qIFN5c3RlbSBib2FyZCBwcmVzZW50LCBqdXN0IG1ha2UgYSBkdW1teSBTUkFNIGFjY2Vzcy4gIChDUzAgd2lsbCBiZQogCSAgIG1hcHBlZCB0byBQQ0kgbWVtb3J5LCBwcm9iYWJseSBnb29kIHRvIGF2b2lkIGl0LikgKi8KLQljdHJsX2ludygweGE2ODAwMDAwKTsKKwlfX3Jhd19yZWFkdygweGE2ODAwMDAwKTsKICNlbHNlCiAJLyogQ1MwIHdpbGwgYmUgbWFwcGVkIHRvIGZsYXNoLCBST00gZXRjIHNvIHNhZmUgdG8gYWNjZXNzIGl0LiAqLwotCWN0cmxfaW53KDB4YTAwMDAwMDApOworCV9fcmF3X3JlYWR3KDB4YTAwMDAwMDApOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCmluZGV4IGI1NTE5NjMuLmEyNmQxNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwpAQCAtODgsNyArODgsNyBAQAogCWZwZ2FJcnEgPSBmcGdhSXJxVGFibGVbaXJxXS5mcGdhSXJxOwogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBGUEdBIElOVEMgcmVnaXN0ZXIgKi8KLQljdHJsX291dGwoTUlDUk9ERVZfRlBHQV9JTlRDX01BU0soZnBnYUlycSksIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CisJX19yYXdfd3JpdGVsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfbWljcm9kZXZfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xMDcsMTMgKzEwNywxMyBAQAogCXByaW9yaXR5UmVnID0gTUlDUk9ERVZfRlBHQV9JTlRQUklfUkVHKGZwZ2FJcnEpOwogCiAJLyogc2V0IHByaW9yaXR5IGZvciB0aGUgaW50ZXJydXB0ICovCi0JcHJpb3JpdGllcyA9IGN0cmxfaW5sKHByaW9yaXR5UmVnKTsKKwlwcmlvcml0aWVzID0gX19yYXdfcmVhZGwocHJpb3JpdHlSZWcpOwogCXByaW9yaXRpZXMgJj0gfk1JQ1JPREVWX0ZQR0FfSU5UUFJJX01BU0soZnBnYUlycSk7CiAJcHJpb3JpdGllcyB8PSBNSUNST0RFVl9GUEdBX0lOVFBSSV9MRVZFTChmcGdhSXJxLCBwcmkpOwotCWN0cmxfb3V0bChwcmlvcml0aWVzLCBwcmlvcml0eVJlZyk7CisJX19yYXdfd3JpdGVsKHByaW9yaXRpZXMsIHByaW9yaXR5UmVnKTsKIAogCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBGUEdBIElOVEMgcmVnaXN0ZXIgKi8KLQljdHJsX291dGwoTUlDUk9ERVZfRlBHQV9JTlRDX01BU0soZnBnYUlycSksIE1JQ1JPREVWX0ZQR0FfSU5URU5CX1JFRyk7CisJX19yYXdfd3JpdGVsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVEVOQl9SRUcpOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlc2lyZWQgaXJxIGhhbmRsZXIgdG8gYmUgYSBNaWNyb0RldiB0eXBlICovCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlpbnQgaTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCi0JY3RybF9vdXRsKH4wdWwsIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CisJX19yYXdfd3JpdGVsKH4wdWwsIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VYVEVSTkFMX0lSUVM7IGkrKykKIAkJbWFrZV9taWNyb2Rldl9pcnEoaSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKaW5kZXggNTA3Yzc3Yi4uYmUzMDBhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSAxMDEsCisJCS5zdGFydAk9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDMxLDcgKzQzMSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyBvdjc3MjVfaW5mbyA9IHsKLQkuYnVzd2lkdGgJPSBTT0NBTV9EQVRBV0lEVEhfOCwKKwkuZmxhZ3MJCT0gT1Y3NzJYX0ZMQUdfOEJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIG92NzcyNV9saW5rID0gewpAQCAtNDk2LDI4ICs0OTYsMTYgQEAKIAkJCQkJJm1pZ29yX3NkcmFtX2VudGVyX2VuZCwKIAkJCQkJJm1pZ29yX3NkcmFtX2xlYXZlX3N0YXJ0LAogCQkJCQkmbWlnb3Jfc2RyYW1fbGVhdmVfZW5kKTsKLSNpZmRlZiBDT05GSUdfUE0KIAkvKiBMZXQgRDExIExFRCBzaG93IFNUQVRVUzAgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TVEFUVVMwLCBOVUxMKTsKIAogCS8qIExpdCBEMTIgTEVEIHNob3cgUERTVEFUVVMgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9QRFNUQVRVUywgTlVMTCk7Ci0jZWxzZQotCS8qIExpdCBEMTEgTEVEICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNywgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNywgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo3LCAwKTsKLQotCS8qIExpdCBEMTIgTEVEICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKLSNlbmRpZgogCiAJLyogU01DOTFDMTExIC0gRW5hYmxlIElSUTAsIFNldHVwIENTNCBmb3IgMTYtYml0IGZhc3QgYWNjZXNzICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRMCwgTlVMTCk7Ci0JY3RybF9vdXRsKDB4MDAwMDM0MDAsIEJTQ19DUzRCQ1IpOwotCWN0cmxfb3V0bCgweDAwMTEwMDgwLCBCU0NfQ1M0V0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMzQwMCwgQlNDX0NTNEJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMTAwODAsIEJTQ19DUzRXQ1IpOwogCiAJLyogS0VZU0MgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQwLCBOVUxMKTsKQEAgLTUzMyw3ICs1MjEsNyBAQAogCiAJLyogTkFORCBGbGFzaCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NTNkFfQ0UyQiwgTlVMTCk7Ci0JY3RybF9vdXRsKChjdHJsX2lubChCU0NfQ1M2QUJDUikgJiB+MHgwNjAwKSB8IDB4MDIwMCwgQlNDX0NTNkFCQ1IpOworCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwoQlNDX0NTNkFCQ1IpICYgfjB4MDYwMCkgfCAweDAyMDAsIEJTQ19DUzZBQkNSKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVEExLCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BUQTEpOwogCkBAIC02MjcsNyArNjE1LDcgQEAKICNlbHNlCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMCwgMSk7CiAjZW5kaWYKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSB8IDB4MjAwMCwgUE9SVF9NU0VMQ1JCKTsgLyogRDE1LT5EOCAqLworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX01TRUxDUkIpIHwgMHgyMDAwLCBQT1JUX01TRUxDUkIpOyAvKiBEMTUtPkQ4ICovCiAKIAlwbGF0Zm9ybV9yZXNvdXJjZV9zZXR1cF9tZW1vcnkoJm1pZ29yX2NldV9kZXZpY2UsICJjZXUiLCA0IDw8IDIwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYwppbmRleCA3OGQ3YjI3Li41NzRmMDA5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiB7CiAJc3RydWN0IGludGNfZGVzYyAqZDsKIAotCXN3aXRjaCAoY3RybF9pbncoUEFfVkVSUkVHKSAmIDB4ZjApIHsKKwlzd2l0Y2ggKF9fcmF3X3JlYWR3KFBBX1ZFUlJFRykgJiAweGYwKSB7CiAjaWZkZWYgQ09ORklHX1JUUzc3NTFSMkRfUExVUwogCWNhc2UgMHgxMDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgUjJELVBMVVMgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogI2VuZGlmCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5rbm93biBSMkQgaW50ZXJydXB0IGNvbnRyb2xsZXIgMHglMDR4XG4iLAotCQkgICAgICAgY3RybF9pbncoUEFfVkVSUkVHKSk7CisJCSAgICAgICBfX3Jhd19yZWFkdyhQQV9WRVJSRUcpKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKaW5kZXggYTYyNWVjYi4uYjg0ZGY2YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCkBAIC03MCw3ICs3MCw3IEBACiBzdGF0aWMgdm9pZCByMmRfY2hpcF9zZWxlY3Qoc3RydWN0IHNoX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHN0YXRlKQogewogCUJVR19PTihjcyAhPSAwKTsgIC8qIFNpbmdsZSBFcHNvbiBSVEMtOTcwMUpFIGF0dGFjaGVkIG9uIENTMCAqLwotCWN0cmxfb3V0dyhzdGF0ZSA9PSBCSVRCQU5HX0NTX0FDVElWRSwgUEFfUlRDQ0UpOworCV9fcmF3X3dyaXRldyhzdGF0ZSA9PSBCSVRCQU5HX0NTX0FDVElWRSwgUEFfUlRDQ0UpOwogfQogCiBzdGF0aWMgc3RydWN0IHNoX3NwaV9pbmZvIHNwaV9pbmZvID0gewpAQCAtMjYyLDcgKzI2Miw3IEBACiAKIHN0YXRpYyB2b2lkIHJ0czc3NTFyMmRfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JY3RybF9vdXR3KDB4MDAwMSwgUEFfUE9XT0ZGKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBQQV9QT1dPRkYpOwogfQogCiAvKgpAQCAtMjcxLDE0ICsyNzEsMTQgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBydHM3NzUxcjJkX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJdm9pZCBfX2lvbWVtICpzbTUwMV9yZWc7Ci0JdTE2IHZlciA9IGN0cmxfaW53KFBBX1ZFUlJFRyk7CisJdTE2IHZlciA9IF9fcmF3X3JlYWR3KFBBX1ZFUlJFRyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgU2FsZXMgUlRTNzc1MVIyRCBzdXBwb3J0LlxuIik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJGUEdBIHZlcnNpb246JWQgKHJldmlzaW9uOiVkKVxuIiwKIAkJCQkJKHZlciA+PiA0KSAmIDB4ZiwgdmVyICYgMHhmKTsKIAotCWN0cmxfb3V0dygweDAwMDAsIFBBX09VVFBPUlQpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX09VVFBPUlQpOwogCXBtX3Bvd2VyX29mZiA9IHJ0czc3NTFyMmRfcG93ZXJfb2ZmOwogCiAJLyogc201MDEgZHJhbSBjb25maWd1cmF0aW9uOgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwppbmRleCBjMzc2MTdlLi40ZmEwOGJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwpAQCAtOTYsNyArOTYsNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1JYRDAsIE5VTEwpOwogCiAJLyogU2V0dXAgTEFOOTExODogQ1MxIGluIDE2LWJpdCBCaWcgRW5kaWFuIE1vZGUsIElSUTAgYXQgUG9ydCBCICovCi0JY3RybF9vdXRsKDB4MzZkYjA0MDAsIDB4ZmZmYzAwMDgpOyAvKiBDUzFCQ1IgKi8KKwlfX3Jhd193cml0ZWwoMHgzNmRiMDQwMCwgMHhmZmZjMDAwOCk7IC8qIENTMUJDUiAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTBfUEIsIE5VTEwpOwogCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHJzazcyMDNfZGV2aWNlcywKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYwppbmRleCA4NTU1NTgxLi5lNWY3NTY0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCkBAIC0zNyw5ICszNyw5IEBACiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgU0RLNzc4MCBpbnRlcnJ1cHQgY29udHJvbGxlci5cbiIpOwogCi0JY3RybF9vdXR3KDB4RkZGRiwgRlBHQV9JUlEwTVIpOworCV9fcmF3X3dyaXRldygweEZGRkYsIEZQR0FfSVJRME1SKTsKIAkvKiBTZXR1cCBJUkwgMC0zICovCi0JY3RybF9vdXR3KDB4MDAwMywgRlBHQV9JTVNSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAzLCBGUEdBX0lNU1IpOwogCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJMMzIxMCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmZwZ2FfaW50Y19kZXNjKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL3NldHVwLmMKaW5kZXggYWFkOTRhNy4uNGRhMzhkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL3NldHVwLmMKQEAgLTIwLDI3ICsyMCwxOCBAQAogCiAjZGVmaW5lIEdQSU9fUEVDUiAgICAgICAgMHhGRkVBMDAwOAogCi0vLyogSGVhcnRiZWF0ICovCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gMTYsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBQQV9MRUQsCi0JCS5lbmQgICAgPSBQQV9MRUQsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAorLyogSGVhcnRiZWF0ICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gUEFfTEVELAorCS5lbmQgICAgPSBQQV9MRUQsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJoZWFydGJlYXQiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIFNNQzkxeCAqLwpAQCAtODMsOCArNzQsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2RrNzc4MF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCXUxNiB2ZXIgPSBjdHJsX2ludyhGUEdBX0ZQVkVSUik7Ci0JdTE2IGRhdGVTdGFtcCA9IGN0cmxfaW53KEZQR0FfRlBEQVRFUik7CisJdTE2IHZlciA9IF9fcmF3X3JlYWR3KEZQR0FfRlBWRVJSKTsKKwl1MTYgZGF0ZVN0YW1wID0gX19yYXdfcmVhZHcoRlBHQV9GUERBVEVSKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlJlbmVzYXMgVGVjaG5vbG9neSBFdXJvcGUgU0RLNzc4MCBzdXBwb3J0LlxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiQm9hcmQgdmVyc2lvbjogJWQgKHJldmlzaW9uICVkKSwgIgpAQCAtOTQsNyArODUsNyBAQAogCQkJIGRhdGVTdGFtcCk7CiAKIAkvKiBTZXR1cCBwaW4gbXV4J2luZyBmb3IgUENJQyAqLwotCWN0cmxfb3V0dygweDAwMDAsIEdQSU9fUEVDUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgR1BJT19QRUNSKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjlmMTllCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15CTo9IHNldHVwLm8gZnBnYS5vIGlycS5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvZnBnYS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2ZwZ2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRlYzY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2ZwZ2EuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogU0RLNzc4NiBGUEdBIFN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxtYWNoL2ZwZ2EuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworI2RlZmluZSBGUEdBX1JFR1NfT0ZGU0VUCTB4MDNmZmY4MDAKKyNkZWZpbmUgRlBHQV9SRUdTX1NJWkUJCTB4NDkwCisKKy8qCisgKiBUaGUgRlBHQSBjYW4gYmUgbWFwcGVkIGluIGFueSBvZiB0aGUgZ2VuZXJhbGx5IGF2YWlsYWJsZSBhcmVhcywKKyAqIHNvIHdlIGF0dGVtcHQgdG8gc2NhbiBmb3IgaXQgdXNpbmcgdGhlIGZpeGVkIFNSU1RSIHJlYWQgbWFnaWMuCisgKgorICogT25jZSB0aGUgRlBHQSBpcyBsb2NhdGVkLCB0aGUgcmVzdCBvZiB0aGUgbWFwcGluZyBkYXRhIGZvciB0aGUgb3RoZXIKKyAqIGNvbXBvbmVudHMgY2FuIGJlIGRldGVybWluZWQgZHluYW1pY2FsbHkgZnJvbSBpdHMgc2VjdGlvbiBtYXBwaW5nCisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNkazc3ODZfZnBnYV9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYXJlYTsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGFyZWFzIHdoZXJlIHRoZSBGUEdBIGNvdWxkIGJlIG1hcHBlZC4KKwkgKiBUaGUgcG9zc2libGUgcmFuZ2UgaXMgYW55d2hlcmUgZnJvbSBhcmVhIDAgdGhyb3VnaCA2LCBhcmVhIDcKKwkgKiBpcyByZXNlcnZlZC4KKwkgKi8KKwlmb3IgKGFyZWEgPSBQQV9BUkVBMDsgYXJlYSA8IFBBX0FSRUE3OyBhcmVhICs9IFNaXzY0TSkgeworCQliYXNlID0gaW9yZW1hcF9ub2NhY2hlKGFyZWEgKyBGUEdBX1JFR1NfT0ZGU0VULCBGUEdBX1JFR1NfU0laRSk7CisJCWlmICghYmFzZSkgeworCQkJLyogRmFpbGVkIHRvIHJlbWFwIHRoaXMgYXJlYSwgbW92ZSBhbG9uZy4gKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlvcmVhZDE2KGJhc2UgKyBTUlNUUikgPT0gU1JTVFJfTUFHSUMpCisJCQlyZXR1cm4gYmFzZTsJLyogRm91bmQgaXQhICovCisKKwkJaW91bm1hcChiYXNlKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX2lvbWVtICpzZGs3Nzg2X2ZwZ2FfYmFzZTsKKwordm9pZCBfX2luaXQgc2RrNzc4Nl9mcGdhX2luaXQodm9pZCkKK3sKKwl1MTYgdmVyc2lvbiwgZGF0ZTsKKworCXNkazc3ODZfZnBnYV9iYXNlID0gc2RrNzc4Nl9mcGdhX3Byb2JlKCk7CisJaWYgKHVubGlrZWx5KCFzZGs3Nzg2X2ZwZ2FfYmFzZSkpIHsKKwkJcGFuaWMoIkZQR0EgZGV0ZWN0aW9uIGZhaWxlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJdmVyc2lvbiA9IGZwZ2FfcmVhZF9yZWcoRlBHQVZSKTsKKwlkYXRlID0gZnBnYV9yZWFkX3JlZyhGUEdBRFIpOworCisJcHJfaW5mbygiXHRGUEdBIHZlcnNpb246XHQlZC4lZCAoYnVpbHQgb24gJWQvJWQvJWQpXG4iLAorCQliY2QyYmluKHZlcnNpb24gPj4gOCkgJiAweGYsIGJjZDJiaW4odmVyc2lvbiAmIDB4ZiksCisJCSgoZGF0ZSA+PiAxMikgJiAweGYpICsgMjAwMCwKKwkJKGRhdGUgPj4gOCkgJiAweGYsIGJjZDJiaW4oZGF0ZSAmIDB4ZmYpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njk0M2EwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2lycS5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBTREs3Nzg2IEZQR0EgSVJRIENvbnRyb2xsZXIgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hdHQgRmxlbWluZworICogQ29weXJpZ2h0IChDKSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL2ZwZ2EuaD4KKyNpbmNsdWRlIDxtYWNoL2lycS5oPgorCitlbnVtIHsKKwlBVEFfSVJRX0JJVAkJPSAxLAorCVNQSV9CVVNZX0JJVAkJPSAyLAorCUxJUlE1X0JJVAkJPSAzLAorCUxJUlE2X0JJVAkJPSA0LAorCUxJUlE3X0JJVAkJPSA1LAorCUxJUlE4X0JJVAkJPSA2LAorCUtFWV9JUlFfQklUCQk9IDcsCisJUEVOX0lSUV9CSVQJCT0gOCwKKwlFVEhfSVJRX0JJVAkJPSA5LAorCVJUQ19BTEFSTV9CSVQJCT0gMTAsCisJQ1JZU1RBTF9GQUlMX0JJVAk9IDEyLAorCUVUSF9QTUVfQklUCQk9IDE0LAorfTsKKwordm9pZCBfX2luaXQgc2RrNzc4Nl9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBFbmFibGUgcHJpb3JpdHkgZW5jb2RpbmcgZm9yIGFsbCBJUkxzICovCisJZnBnYV93cml0ZV9yZWcoZnBnYV9yZWFkX3JlZyhJTlRNU1IpIHwgMHgwMzAzLCBJTlRNU1IpOworCisJLyogQ2xlYXIgRlBHQSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworCWZwZ2Ffd3JpdGVfcmVnKDB4MDAwMCwgSU5UQVNSKTsKKwlmcGdhX3dyaXRlX3JlZygweDAwMDAsIElOVEJTUik7CisKKwkvKiBVbm1hc2sgRlBHQSBpbnRlcnJ1cHRzICovCisJdG1wID0gZnBnYV9yZWFkX3JlZyhJTlRBTVIpOworCXRtcCAmPSB+KDEgPDwgRVRIX0lSUV9CSVQpOworCWZwZ2Ffd3JpdGVfcmVnKHRtcCwgSU5UQU1SKTsKKworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJMNzY1NF9NQVNLKTsKKwlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDMyMTBfTUFTSyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOTRlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvc2V0dXAuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIFJlbmVzYXMgVGVjaG5vbG9neSBFdXJvcGUgU0RLNzc4NiBTdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWF0dCBGbGVtaW5nCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bWFjaC9mcGdhLmg+CisjaW5jbHVkZSA8bWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDA3ZmZmOGIwLAorCS5lbmQJCT0gMHgwN2ZmZjhiMCArIHNpemVvZih1MTYpIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJzbXNjOTExeC1tZW1vcnkiLAorCQkuc3RhcnQJCT0gMHgwN2ZmZmYwMCwKKwkJLmVuZAkJPSAweDA3ZmZmZjAwICsgU1pfMjU2IC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtaXJxIiwKKwkJLnN0YXJ0CQk9IGV2dDJpcnEoMHgyYzApLAorCQkuZW5kCQk9IGV2dDJpcnEoMHgyYzApLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfT1BFTl9EUkFJTiwKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtc2M5MTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21zYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbXNjOTExeF9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21zYzkxMXhfY29uZmlnLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYnVzX2ZwZ2FfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4MDdmZmY5ZTAsCisJLmVuZAkJPSAweDA3ZmZmOWUwICsgU1pfMzIgLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYnVzX2ZwZ2FfZGV2aWNlID0geworCS5uYW1lCQk9ICJpMmMtc2RrNzc4NiIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZzbWJ1c19mcGdhX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWJ1c19wY2llX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDA3ZmZmYzMwLAorCS5lbmQJCT0gMHgwN2ZmZmMzMCArIFNaXzMyIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWJ1c19wY2llX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaTJjLXNkazc3ODYiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmc21idXNfcGNpZV9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzZGs3Nzg2X2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygibWF4NjkwMCIsIDB4NjgpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3Nzg2X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoZWFydGJlYXRfZGV2aWNlLAorCSZzbXNjOTExeF9kZXZpY2UsCisJJnNtYnVzX2ZwZ2FfZGV2aWNlLAorCSZzbWJ1c19wY2llX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgc2RrNzc4Nl9pMmNfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyoKKwkgKiBIYW5kIG92ZXIgSTJDIGNvbnRyb2wgdG8gdGhlIEZQR0EuCisJICovCisJdG1wID0gZnBnYV9yZWFkX3JlZyhTQkNSKTsKKwl0bXAgJj0gflNDQlJfSTJDQ0VOOworCXRtcCB8PSBTQ0JSX0kyQ01FTjsKKwlmcGdhX3dyaXRlX3JlZyh0bXAsIFNCQ1IpOworCisJcmV0dXJuIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHNkazc3ODZfaTJjX2RldmljZXMsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoc2RrNzc4Nl9pMmNfZGV2aWNlcykpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzZGs3Nzg2X2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3Nzg2X2RldmljZXMsIEFSUkFZX1NJWkUoc2g3Nzg2X2RldmljZXMpKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNkazc3ODZfaTJjX3NldHVwKCk7Cit9CitfX2luaXRjYWxsKHNkazc3ODZfZGV2aWNlc19zZXR1cCk7CisKK3N0YXRpYyBpbnQgc2RrNzc4Nl9tb2RlX3BpbnModm9pZCkKK3sKKwlyZXR1cm4gZnBnYV9yZWFkX3JlZyhNT0RTV1IpOworfQorCitzdGF0aWMgaW50IHNkazc3ODZfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHJldDsKKworCS8qCisJICogT25seSBoYW5kbGUgdGhlIEVYVEFMIGNhc2UsIGFueW9uZSBpbnRlcmZhY2luZyBhIGNyeXN0YWwKKwkgKiByZXNvbmF0b3Igd2lsbCBuZWVkIHRvIHByb3ZpZGUgdGhlaXIgb3duIGlucHV0IGNsb2NrLgorCSAqLworCWlmICh0ZXN0X21vZGVfcGluKE1PREVfUElOOSkpCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrID0gY2xrX2dldChOVUxMLCAiZXh0YWwiKTsKKwlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwlyZXQgPSBjbGtfc2V0X3JhdGUoY2xrLCAzMzMzMzMzMyk7CisJY2xrX3B1dChjbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2RrNzc4Nl9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlmcGdhX3dyaXRlX3JlZygweGE1YTUsIFNSU1RSKTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgYm9hcmQgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzZGs3Nzg2X3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCit7CisJcHJfaW5mbygiUmVuZXNhcyBUZWNobm9sb2d5IEV1cm9wZSBTREs3Nzg2IHN1cHBvcnQ6XG4iKTsKKworCXNkazc3ODZfZnBnYV9pbml0KCk7CisKKwlwcl9pbmZvKCJcdFBDQiByZXZpc2lvbjpcdCVkXG4iLCBmcGdhX3JlYWRfcmVnKFBDQlJSKSAmIDB4Zik7CisKKwltYWNoaW5lX29wcy5yZXN0YXJ0ID0gc2RrNzc4Nl9yZXN0YXJ0OworfQorCisvKgorICogVGhlIE1hY2hpbmUgVmVjdG9yCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2RrNzc4NiBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiU0RLNzc4NiIsCisJLm12X3NldHVwCQk9IHNkazc3ODZfc2V0dXAsCisJLm12X21vZGVfcGlucwkJPSBzZGs3Nzg2X21vZGVfcGlucywKKwkubXZfY2xrX2luaXQJCT0gc2RrNzc4Nl9jbGtfaW5pdCwKKwkubXZfaW5pdF9pcnEJCT0gc2RrNzc4Nl9pbml0X2lycSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pby5jCmluZGV4IDE4MDQ1NTYuLmFkYWRjNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pby5jCkBAIC0xNiw3ICsxNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh2b2lkKQogewotCWN0cmxfaW53KDB4MjAwMDAwMDApOyAgLyogUDIgUk9NIEFyZWEgKi8KKwlfX3Jhd19yZWFkdygweDIwMDAwMDAwKTsgIC8qIFAyIFJPTSBBcmVhICovCiB9CiAKIC8qIE1TNzc1MCByZXF1aXJlcyBzcGVjaWFsIHZlcnNpb25zIG9mIGluKiwgb3V0KiByb3V0aW5lcywgc2luY2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pcnEuYwppbmRleCBhZWY3ZjA1Li44ZDgyMTc1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lycS5jCkBAIC0zMiwxMiArMzIsMTIgQEAKIAl1bnNpZ25lZCBzaG9ydCBtc2swLG1zazE7CiAKIAkvKiBTZXQgdGhlIHByaW9yaXR5IGluIElQUiB0byAwICovCi0JdmFsID0gY3RybF9pbncoSU5UQ19JUFIwMSk7CisJdmFsID0gX19yYXdfcmVhZHcoSU5UQ19JUFIwMSk7CiAJdmFsICY9IG1hc2s7Ci0JY3RybF9vdXR3KHZhbCwgSU5UQ19JUFIwMSk7CisJX19yYXdfd3JpdGV3KHZhbCwgSU5UQ19JUFIwMSk7CiAJLyogRlBHQSBtYXNrIHNldCAqLwotCW1zazAgPSBjdHJsX2ludyhJTlRNU0swKTsKLQltc2sxID0gY3RybF9pbncoSU5UTVNLMSk7CisJbXNrMCA9IF9fcmF3X3JlYWR3KElOVE1TSzApOworCW1zazEgPSBfX3Jhd19yZWFkdyhJTlRNU0sxKTsKIAogCXN3aXRjaCAoaXJxKSB7CiAJY2FzZSBJUlEwX0lSUToKQEAgLTUxLDggKzUxLDggQEAKIAkJbXNrMSB8PSAweDAwZmY7CiAJCWJyZWFrOwogCX0KLQljdHJsX291dHcobXNrMCwgSU5UTVNLMCk7Ci0JY3RybF9vdXR3KG1zazEsIElOVE1TSzEpOworCV9fcmF3X3dyaXRldyhtc2swLCBJTlRNU0swKTsKKwlfX3Jhd193cml0ZXcobXNrMSwgSU5UTVNLMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9zZTcyMDZfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC02MiwxMyArNjIsMTMgQEAKIAl1bnNpZ25lZCBzaG9ydCBtc2swLG1zazE7CiAKIAkvKiBTZXQgcHJpb3JpdHkgaW4gSVBSIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KLQl2YWwgPSBjdHJsX2ludyhJTlRDX0lQUjAxKTsKKwl2YWwgPSBfX3Jhd19yZWFkdyhJTlRDX0lQUjAxKTsKIAl2YWwgfD0gdmFsdWU7Ci0JY3RybF9vdXR3KHZhbCwgSU5UQ19JUFIwMSk7CisJX19yYXdfd3JpdGV3KHZhbCwgSU5UQ19JUFIwMSk7CiAKIAkvKiBGUEdBIG1hc2sgcmVzZXQgKi8KLQltc2swID0gY3RybF9pbncoSU5UTVNLMCk7Ci0JbXNrMSA9IGN0cmxfaW53KElOVE1TSzEpOworCW1zazAgPSBfX3Jhd19yZWFkdyhJTlRNU0swKTsKKwltc2sxID0gX19yYXdfcmVhZHcoSU5UTVNLMSk7CiAKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgSVJRMF9JUlE6CkBAIC04MiwxOSArODIsMjAgQEAKIAkJbXNrMSAmPSB+MHgwMGZmOwogCQlicmVhazsKIAl9Ci0JY3RybF9vdXR3KG1zazAsIElOVE1TSzApOwotCWN0cmxfb3V0dyhtc2sxLCBJTlRNU0sxKTsKKwlfX3Jhd193cml0ZXcobXNrMCwgSU5UTVNLMCk7CisJX19yYXdfd3JpdGV3KG1zazEsIElOVE1TSzEpOwogfQogCiBzdGF0aWMgdm9pZCBlb2lfc2U3MjA2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIHNob3J0IHN0czAsc3RzMTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCi0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpCisJaWYgKCEoZGVzYy0+c3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQogCQllbmFibGVfc2U3MjA2X2lycShpcnEpOwogCS8qIEZQR0EgaXNyIGNsZWFyICovCi0Jc3RzMCA9IGN0cmxfaW53KElOVFNUUzApOwotCXN0czEgPSBjdHJsX2ludyhJTlRTVFMxKTsKKwlzdHMwID0gX19yYXdfcmVhZHcoSU5UU1RTMCk7CisJc3RzMSA9IF9fcmF3X3JlYWR3KElOVFNUUzEpOwogCiAJc3dpdGNoIChpcnEpIHsKIAljYXNlIElSUTBfSVJROgpAQCAtMTA4LDggKzEwOSw4IEBACiAJCXN0czEgJj0gfjB4MDBmZjsKIAkJYnJlYWs7CiAJfQotCWN0cmxfb3V0dyhzdHMwLCBJTlRTVFMwKTsKLQljdHJsX291dHcoc3RzMSwgSU5UU1RTMSk7CisJX19yYXdfd3JpdGV3KHN0czAsIElOVFNUUzApOworCV9fcmF3X3dyaXRldyhzdHMxLCBJTlRTVFMxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzZTcyMDZfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKQEAgLTEzNiwxMSArMTM3LDExIEBACiAJbWFrZV9zZTcyMDZfaXJxKElSUTBfSVJRKTsgLyogU01DOTFDMTExICovCiAJbWFrZV9zZTcyMDZfaXJxKElSUTFfSVJRKTsgLyogQVRBICovCiAJbWFrZV9zZTcyMDZfaXJxKElSUTNfSVJRKTsgLyogU0xPVCAvIFBDTSAqLwotCWN0cmxfb3V0dyhpbncoSU5UQ19JQ1IxKSB8IDB4MDAwYiAsSU5UQ19JQ1IxICkgOyAvKiBJQ1IxICovCisJX19yYXdfd3JpdGV3KGludyhJTlRDX0lDUjEpIHwgMHgwMDBiICxJTlRDX0lDUjEgKSA7IC8qIElDUjEgKi8KIAogCS8qIEZQR0EgU3lzdGVtIHJlZ2lzdGVyIHNldHVwKi8KLQljdHJsX291dHcoMHgwMDAwLElOVFNUUzApOyAvKiBDbGVhciBJTlRTVFMwICovCi0JY3RybF9vdXR3KDB4MDAwMCxJTlRTVFMxKTsgLyogQ2xlYXIgSU5UU1RTMSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsSU5UU1RTMCk7IC8qIENsZWFyIElOVFNUUzAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLElOVFNUUzEpOyAvKiBDbGVhciBJTlRTVFMxICovCiAJLyogSVJRMD1MQU4sIElSUTE9QVRBLCBJUlEzPVNMVCxQQ00gKi8KLQljdHJsX291dHcoMHgwMDAxLElOVFNFTCk7CisJX19yYXdfd3JpdGV3KDB4MDAwMSxJTlRTRUwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvc2V0dXAuYwppbmRleCBmNTQ2NjM4NC4uOGY1YzY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L3NldHVwLmMKQEAgLTUwLDE1ICs1MCwxMiBAQAogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKIAkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAogCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCi0JLnJlZ3NpemUJPSAzMiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUEFfTEVELAotCQkuZW5kCT0gUEFfTEVELAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUEFfTEVELAorCS5lbmQJPSBQQV9MRUQsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8zMkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CkBAIC02Nyw4ICs2NCw4IEBACiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzZTcyMDZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvaXJxLmMKaW5kZXggMDUxYzI5ZC4uZDQzMDVjMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9pcnEuYwpAQCAtMTYsMTYgKzE2LDE4IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxtYWNoLXNlL21hY2gvc2U3MzQzLmg+CiAKK3Vuc2lnbmVkIGludCBzZTczNDNfZnBnYV9pcnFbU0U3MzQzX0ZQR0FfSVJRX05SXSA9IHsgMCwgfTsKKwogc3RhdGljIHZvaWQgZGlzYWJsZV9zZTczNDNfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIFNFNzM0M19GUEdBX0lSUV9CQVNFOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9DUExEX0lNU0spIHwgMSA8PCBiaXQsIFBBX0NQTERfSU1TSyk7CisJdW5zaWduZWQgaW50IGJpdCA9ICh1bnNpZ25lZCBpbnQpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUEFfQ1BMRF9JTVNLKSB8IDEgPDwgYml0LCBQQV9DUExEX0lNU0spOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3MzQzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBTRTczNDNfRlBHQV9JUlFfQkFTRTsKLQljdHJsX291dHcoY3RybF9pbncoUEFfQ1BMRF9JTVNLKSAmIH4oMSA8PCBiaXQpLCBQQV9DUExEX0lNU0spOworCXVuc2lnbmVkIGludCBiaXQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0NQTERfSU1TSykgJiB+KDEgPDwgYml0KSwgUEFfQ1BMRF9JTVNLKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzZTczNDNfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKQEAgLTM3LDE5ICszOSwxNiBAQAogCiBzdGF0aWMgdm9pZCBzZTczNDNfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gY3RybF9pbncoUEFfQ1BMRF9TVCk7Ci0Jc3RydWN0IGlycV9kZXNjICpleHRfZGVzYzsKLQl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IFNFNzM0M19GUEdBX0lSUV9CQVNFOworCXVuc2lnbmVkIHNob3J0IGludHYgPSBfX3Jhd19yZWFkdyhQQV9DUExEX1NUKTsKKwl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IDA7CiAKIAlpbnR2ICY9ICgxIDw8IFNFNzM0M19GUEdBX0lSUV9OUikgLSAxOwogCi0Jd2hpbGUgKGludHYpIHsKLQkJaWYgKGludHYgJiAxKSB7Ci0JCQlleHRfZGVzYyA9IGlycV9kZXNjICsgZXh0X2lycTsKLQkJCWhhbmRsZV9sZXZlbF9pcnEoZXh0X2lycSwgZXh0X2Rlc2MpOwotCQl9Ci0JCWludHYgPj49IDE7Ci0JCWV4dF9pcnErKzsKKwlmb3IgKDsgaW50djsgaW50diA+Pj0gMSwgZXh0X2lycSsrKSB7CisJCWlmICghKGludHYgJiAxKSkKKwkJCWNvbnRpbnVlOworCisJCWdlbmVyaWNfaGFuZGxlX2lycShzZTczNDNfZnBnYV9pcnFbZXh0X2lycV0pOwogCX0KIH0KIApAQCAtNTgsMTYgKzU3LDI0IEBACiAgKi8KIHZvaWQgX19pbml0IGluaXRfNzM0M3NlX0lSUSh2b2lkKQogewotCWludCBpOworCWludCBpLCBpcnE7CiAKLQljdHJsX291dHcoMCwgUEFfQ1BMRF9JTVNLKTsJLyogZGlzYWJsZSBhbGwgaXJxcyAqLwotCWN0cmxfb3V0dygweDIwMDAsIDB4YjAzZmZmZWMpOwkvKiBtcnNocGMgaXJxIGVuYWJsZSAqLworCV9fcmF3X3dyaXRldygwLCBQQV9DUExEX0lNU0spOwkvKiBkaXNhYmxlIGFsbCBpcnFzICovCisJX19yYXdfd3JpdGV3KDB4MjAwMCwgMHhiMDNmZmZlYyk7CS8qIG1yc2hwYyBpcnEgZW5hYmxlICovCiAKLQlmb3IgKGkgPSAwOyBpIDwgU0U3MzQzX0ZQR0FfSVJRX05SOyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgaSwKKwlmb3IgKGkgPSAwOyBpIDwgU0U3MzQzX0ZQR0FfSVJRX05SOyBpKyspIHsKKwkJaXJxID0gY3JlYXRlX2lycSgpOworCQlpZiAoaXJxIDwgMCkKKwkJCXJldHVybjsKKwkJc2U3MzQzX2ZwZ2FfaXJxW2ldID0gaXJxOworCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKHNlNzM0M19mcGdhX2lycVtpXSwKIAkJCQkJICAgICAgJnNlNzM0M19pcnFfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CiAKKwkJc2V0X2lycV9jaGlwX2RhdGEoc2U3MzQzX2ZwZ2FfaXJxW2ldLCAodm9pZCAqKWkpOworCX0KKwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUTBfSVJRLCBzZTczNDNfaXJxX2RlbXV4KTsKIAlzZXRfaXJxX3R5cGUoSVJRMF9JUlEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRMV9JUlEsIHNlNzM0M19pcnFfZGVtdXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvc2V0dXAuYwppbmRleCA0ZGU1NmYzLi5kMjM3MGFmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvc2V0dXAuYwpAQCAtMTEsMjYgKzExLDE3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFBBX0xFRCwKLQkJLmVuZAk9IFBBX0xFRCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBBX0xFRCwKKwkuZW5kCT0gUEFfTEVELAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJoZWFydGJlYXQiLAogCS5pZAkJPSAtMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CkBAIC04Miw3ICs3Myw2IEBACiAJCS5tYXBiYXNlCT0gMHgxNjAwMDAwMCwKIAkJLnJlZ3NoaWZ0CT0gMSwKIAkJLmZsYWdzCQk9IFNUMTZDMjU1MENfRkxBR1MsCi0JCS5pcnEJCT0gVUFSVEFfSVJRLAogCQkudWFydGNsawk9IDczNzI4MDAsCiAJfSwKIAlbMV0gPSB7CkBAIC05MCw3ICs4MCw2IEBACiAJCS5tYXBiYXNlCT0gMHgxNzAwMDAwMCwKIAkJLnJlZ3NoaWZ0CT0gMSwKIAkJLmZsYWdzCQk9IFNUMTZDMjU1MENfRkxBR1MsCi0JCS5pcnEJCT0gVUFSVEJfSVJRLAogCQkudWFydGNsawk9IDczNzI4MDAsCiAJfSwKIAl7IH0sCkBAIC0xMjEsNyArMTEwLDcgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzJdID0gewotCQkuc3RhcnQgID0gVVNCX0lSUSwKKwkJLyogRmlsbGVkIGluIGxhdGVyICovCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTEzOCw4ICsxMjcsOCBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiX2RldmljZSA9IHsKIAkubmFtZQkJCT0gImlzcDExNngtaGNkIiwKIAkuaWQJCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzICAJPSBBUlJBWV9TSVpFKHVzYl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICAJPSB1c2JfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUodXNiX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IHVzYl9yZXNvdXJjZXMsCiAJLmRldgkJCT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZ1c2JfcGxhdGZvcm1fZGF0YSwKIAl9LApAQCAtMTU1LDYgKzE0NCwxMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaDczNDNzZV9kZXZpY2VzX3NldHVwKHZvaWQpCiB7CisJLyogV2lyZS11cCBkeW5hbWljIHZlY3RvcnMgKi8KKwlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS5pcnEgPSBzZTczNDNfZnBnYV9pcnFbU0U3MzQzX0ZQR0FfSVJRX1VBUlRBXTsKKwlzZXJpYWxfcGxhdGZvcm1fZGF0YVsxXS5pcnEgPSBzZTczNDNfZnBnYV9pcnFbU0U3MzQzX0ZQR0FfSVJRX1VBUlRCXTsKKworCXVzYl9yZXNvdXJjZXNbMl0uc3RhcnQgPSB1c2JfcmVzb3VyY2VzWzJdLmVuZCA9CisJCXNlNzM0M19mcGdhX2lycVtTRTczNDNfRlBHQV9JUlFfVVNCXTsKKwogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDczNDNzZV9wbGF0Zm9ybV9kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKHNoNzM0M3NlX3BsYXRmb3JtX2RldmljZXMpKTsKIH0KQEAgLTE2NSwxMCArMTYxLDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBzaDczNDNzZV9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCWN0cmxfb3V0dygweGY5MDAsIEZQR0FfT1VUKTsJLyogRlBHQSAqLworCV9fcmF3X3dyaXRldygweGY5MDAsIEZQR0FfT1VUKTsJLyogRlBHQSAqLwogCi0JY3RybF9vdXR3KDB4MDAwMiwgUE9SVF9QRUNSKTsJLyogUE9SVCBFIDEgPSBJUlE1ICovCi0JY3RybF9vdXR3KDB4MDAyMCwgUE9SVF9QU0VMRCk7CisJX19yYXdfd3JpdGV3KDB4MDAwMiwgUE9SVF9QRUNSKTsJLyogUE9SVCBFIDEgPSBJUlE1ICovCisJX19yYXdfd3JpdGV3KDB4MDAyMCwgUE9SVF9QU0VMRCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJNUzczNDNDUDAxIFNldHVwLi4uZG9uZVxuIik7CiB9CkBAIC0xNzksNiArMTc1LDUgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfNzM0M3NlIF9faW5pdG12ID0gewogCS5tdl9uYW1lID0gIlNvbHV0aW9uRW5naW5lIDczNDMiLAogCS5tdl9zZXR1cCA9IHNoNzM0M3NlX3NldHVwLAotCS5tdl9ucl9pcnFzID0gU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTlIsCiAJLm12X2luaXRfaXJxID0gaW5pdF83MzQzc2VfSVJRLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9pcnEuYwppbmRleCBlYzFmZWE1Li4xMDI4YzE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L2lycS5jCkBAIC05NiwxMyArOTYsMTMgQEAKIHZvaWQgX19pbml0IGluaXRfc2VfSVJRKHZvaWQpCiB7CiAJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkEpOwotCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkIpOwotCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkMpOwotCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkQpOwotCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkUpOwotCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkYpOwotCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkcpOworCV9fcmF3X3dyaXRldygwLCBCQ1JfSUxDUkEpOworCV9fcmF3X3dyaXRldygwLCBCQ1JfSUxDUkIpOworCV9fcmF3X3dyaXRldygwLCBCQ1JfSUxDUkMpOworCV9fcmF3X3dyaXRldygwLCBCQ1JfSUxDUkQpOworCV9fcmF3X3dyaXRldygwLCBCQ1JfSUxDUkUpOworCV9fcmF3X3dyaXRldygwLCBCQ1JfSUxDUkYpOworCV9fcmF3X3dyaXRldygwLCBCQ1JfSUxDUkcpOwogCiAJcmVnaXN0ZXJfaXByX2NvbnRyb2xsZXIoJmlwcl9pcnFfZGVzYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9zZXR1cC5jCmluZGV4IDUyN2ViNmIuLjY2ZDM5ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9zZXR1cC5jCkBAIC05MywxNSArOTMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CiAJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKIAkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAotCS5yZWdzaXplCT0gMTYsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFBBX0xFRCwKLQkJLmVuZAk9IFBBX0xFRCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBBX0xFRCwKKwkuZW5kCT0gUEFfTEVELAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewpAQCAtMTEwLDggKzEwNyw4IEBACiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8XApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL2lycS5jCmluZGV4IGI0MTdhY2MuLmQ4NTAyMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvaXJxLmMKQEAgLTM4LDcgKzM4LDcgQEAKIHZvaWQgX19pbml0IGluaXRfc2U3NzIxX0lSUSh2b2lkKQogewogCS8qIFBQQ1IgKi8KLQljdHJsX291dHcoY3RybF9pbncoMHhhNDA1MDExOCkgJiB+MHgwMGZmLCAweGE0MDUwMTE4KTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoMHhhNDA1MDExOCkgJiB+MHgwMGZmLCAweGE0MDUwMTE4KTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIAlpbnRjX3NldF9wcmlvcml0eShNUlNIUENfSVJRMCwgMHhmIC0gTVJTSFBDX0lSUTApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvc2V0dXAuYwppbmRleCA1NWFmNGMzLi43NDE2YWQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvc2V0dXAuYwpAQCAtMjMsMTUgKzIzLDEyIEBACiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewogCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCiAJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKLQkucmVnc2l6ZQk9IDE2LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQQV9MRUQsCi0JCS5lbmQJPSBQQV9MRUQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQQV9MRUQsCisJLmVuZAk9IFBBX0xFRCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTQwLDggKzM3LDggQEAKIAkuZGV2CT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9pZGVfcmVzb3VyY2VzW10gPSB7CkBAIC04MywxMCArODAsMTAgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZTc3MjFfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiBmb3IgVVNCICovCi0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNDA1MDEwQyk7CS8qIFBHQ1IgKi8KLQljdHJsX291dHcoMHgwMDAwLCAweEE0MDUwMTBFKTsJLyogUEhDUiAqLwotCWN0cmxfb3V0dygweDAwQUEsIDB4QTQwNTAxMTgpOwkvKiBQUENSICovCi0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNDA1MDEyNCk7CS8qIFBTRUxBICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNDA1MDEwQyk7CS8qIFBHQ1IgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCAweEE0MDUwMTBFKTsJLyogUEhDUiAqLworCV9fcmF3X3dyaXRldygweDAwQUEsIDB4QTQwNTAxMTgpOwkvKiBQUENSICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNDA1MDEyNCk7CS8qIFBTRUxBICovCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvaXJxLmMKaW5kZXggYjIyMWI2OC4uNjE2MDVkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9pcnEuYwpAQCAtMjEsMTMgKzIxLDEzIEBACiBzdGF0aWMgdm9pZCBkaXNhYmxlX3NlNzcyMl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gKHVuc2lnbmVkIGludClnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhJUlEwMV9NQVNLKSB8IDEgPDwgYml0LCBJUlEwMV9NQVNLKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSVJRMDFfTUFTSykgfCAxIDw8IGJpdCwgSVJRMDFfTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9zZTc3MjJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9ICh1bnNpZ25lZCBpbnQpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQljdHJsX291dHcoY3RybF9pbncoSVJRMDFfTUFTSykgJiB+KDEgPDwgYml0KSwgSVJRMDFfTUFTSyk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElSUTAxX01BU0spICYgfigxIDw8IGJpdCksIElSUTAxX01BU0spOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNlNzcyMl9pcnFfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgdm9pZCBzZTc3MjJfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gY3RybF9pbncoSVJRMDFfU1RTKTsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gX19yYXdfcmVhZHcoSVJRMDFfU1RTKTsKIAl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IDA7CiAKIAlpbnR2ICY9ICgxIDw8IFNFNzcyMl9GUEdBX0lSUV9OUikgLSAxOwpAQCAtNTksOCArNTksOCBAQAogewogCWludCBpLCBpcnE7CiAKLQljdHJsX291dHcoMCwgSVJRMDFfTUFTSyk7ICAgICAgIC8qIGRpc2FibGUgYWxsIGlycXMgKi8KLQljdHJsX291dHcoMHgyMDAwLCAweGIwM2ZmZmVjKTsgIC8qIG1yc2hwYyBpcnEgZW5hYmxlICovCisJX19yYXdfd3JpdGV3KDAsIElSUTAxX01BU0spOyAgICAgICAvKiBkaXNhYmxlIGFsbCBpcnFzICovCisJX19yYXdfd3JpdGV3KDB4MjAwMCwgMHhiMDNmZmZlYyk7ICAvKiBtcnNocGMgaXJxIGVuYWJsZSAqLwogCiAJZm9yIChpID0gMDsgaSA8IFNFNzcyMl9GUEdBX0lSUV9OUjsgaSsrKSB7CiAJCWlycSA9IGNyZWF0ZV9pcnEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL3NldHVwLmMKaW5kZXggYjFjYjk0Mi4uODBhNGU1NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL3NldHVwLmMKQEAgLTI1LDI2ICsyNSwxNyBAQAogI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KIAogLyogSGVhcnRiZWF0ICovCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gMTYsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBQQV9MRUQsCi0JCS5lbmQgICAgPSBQQV9MRUQsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICA9IFBBX0xFRCwKKwkuZW5kICAgID0gUEFfTEVELAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAiaGVhcnRiZWF0IiwKIAkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSAxLAorCS5yZXNvdXJjZSAgICAgICA9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBTTUM5MXggKi8KQEAgLTE2NSwzMiArMTU2LDMyIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZTc3MjJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQljdHJsX291dHcoMHgwMTBELCBGUEdBX09VVCk7ICAgIC8qIEZQR0EgKi8KKwlfX3Jhd193cml0ZXcoMHgwMTBELCBGUEdBX09VVCk7ICAgIC8qIEZQR0EgKi8KIAotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUEVDUik7ICAgLyogUE9SVCBFIDEgPSBJUlE1ICxFIDAgPSBCUyAqLwotCWN0cmxfb3V0dygweDEwMDAsIFBPUlRfUEpDUik7ICAgLyogUE9SVCBKIDEgPSBJUlExLEogMCA9SVJRMCAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUEVDUik7ICAgLyogUE9SVCBFIDEgPSBJUlE1ICxFIDAgPSBCUyAqLworCV9fcmF3X3dyaXRldygweDEwMDAsIFBPUlRfUEpDUik7ICAgLyogUE9SVCBKIDEgPSBJUlExLEogMCA9SVJRMCAqLwogCiAJLyogTENEQyBJL08gKi8KLQljdHJsX291dHcoMHgwMDIwLCBQT1JUX1BTRUxEKTsKKwlfX3Jhd193cml0ZXcoMHgwMDIwLCBQT1JUX1BTRUxEKTsKIAogCS8qIFNJT0YxKi8KLQljdHJsX291dHcoMHgwMDAzLCBQT1JUX1BTRUxCKTsKLQljdHJsX291dHcoMHhlMDAwLCBQT1JUX1BTRUxDKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BLQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDMsIFBPUlRfUFNFTEIpOworCV9fcmF3X3dyaXRldygweGUwMDAsIFBPUlRfUFNFTEMpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUEtDUik7CiAKIAkvKiBMQ0RDICovCi0JY3RybF9vdXR3KDB4NDAyMCwgUE9SVF9QSENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BMQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUE1DUik7Ci0JY3RybF9vdXR3KDB4MDAwMiwgUE9SVF9QUkNSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BYQ1IpOyAgIC8qIExDREMsQ1M2QSAqLworCV9fcmF3X3dyaXRldygweDQwMjAsIFBPUlRfUEhDUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QTENSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BNQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDIsIFBPUlRfUFJDUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QWENSKTsgICAvKiBMQ0RDLENTNkEgKi8KIAogCS8qIEtFWVNDICovCi0JY3RybF9vdXR3KDB4MEExMCwgUE9SVF9QU0VMQSk7IC8qIEJTLFNISElEMiAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFlDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QWkNSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4NDAwMCwgUE9SVF9ISVpDUkEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQykgJiB+MHhjMDAwLCBQT1JUX0hJWkNSQyk7CisJX19yYXdfd3JpdGV3KDB4MEExMCwgUE9SVF9QU0VMQSk7IC8qIEJTLFNISElEMiAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFlDUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QWkNSKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9ISVpDUkEpICYgfjB4NDAwMCwgUE9SVF9ISVpDUkEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX0hJWkNSQykgJiB+MHhjMDAwLCBQT1JUX0hJWkNSQyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvaXJxLmMKaW5kZXggZjc2Y2YzYi4uMDk0MmJlMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9pcnEuYwpAQCAtNzIsMTQgKzcyLDE0IEBACiB7CiAJc3RydWN0IGZwZ2FfaXJxIHNldCA9IGdldF9mcGdhX2lycShmcGdhMmlycShpcnEpKTsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gc2V0LmJhc2U7Ci0JY3RybF9vdXR3KGN0cmxfaW53KHNldC5tcmFkZHIpIHwgMHgwMDAxIDw8IGJpdCwgc2V0Lm1yYWRkcik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KHNldC5tcmFkZHIpIHwgMHgwMDAxIDw8IGJpdCwgc2V0Lm1yYWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9zZTc3MjRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGZwZ2FfaXJxIHNldCA9IGdldF9mcGdhX2lycShmcGdhMmlycShpcnEpKTsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gc2V0LmJhc2U7Ci0JY3RybF9vdXR3KGN0cmxfaW53KHNldC5tcmFkZHIpICYgfigweDAwMDEgPDwgYml0KSwgc2V0Lm1yYWRkcik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KHNldC5tcmFkZHIpICYgfigweDAwMDEgPDwgYml0KSwgc2V0Lm1yYWRkcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2U3NzI0X2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC05MiwxOSArOTIsMTYgQEAKIHN0YXRpYyB2b2lkIHNlNzcyNF9pcnFfZGVtdXgodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXN0cnVjdCBmcGdhX2lycSBzZXQgPSBnZXRfZnBnYV9pcnEoaXJxKTsKLQl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gY3RybF9pbncoc2V0LnNyYWRkcik7Ci0Jc3RydWN0IGlycV9kZXNjICpleHRfZGVzYzsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gX19yYXdfcmVhZHcoc2V0LnNyYWRkcik7CiAJdW5zaWduZWQgaW50IGV4dF9pcnEgPSBzZXQuYmFzZTsKIAogCWludHYgJj0gc2V0Lm1hc2s7CiAKLQl3aGlsZSAoaW50dikgewotCQlpZiAoaW50diAmIDB4MDAwMSkgewotCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7Ci0JCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKLQkJfQotCQlpbnR2ID4+PSAxOwotCQlleHRfaXJxKys7CisJZm9yICg7IGludHY7IGludHYgPj49IDEsIGV4dF9pcnErKykgeworCQlpZiAoIShpbnR2ICYgMSkpCisJCQljb250aW51ZTsKKworCQlnZW5lcmljX2hhbmRsZV9pcnEoZXh0X2lycSk7CiAJfQogfQogCkBAIC0xMTMsMjAgKzExMCwzOSBAQAogICovCiB2b2lkIF9faW5pdCBpbml0X3NlNzcyNF9JUlEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgbmlkID0gY3B1X3RvX25vZGUoYm9vdF9jcHVfZGF0YSk7CiAKLQljdHJsX291dHcoMHhmZmZmLCBJUlEwX01SKTsgIC8qIG1hc2sgYWxsICovCi0JY3RybF9vdXR3KDB4ZmZmZiwgSVJRMV9NUik7ICAvKiBtYXNrIGFsbCAqLwotCWN0cmxfb3V0dygweGZmZmYsIElSUTJfTVIpOyAgLyogbWFzayBhbGwgKi8KLQljdHJsX291dHcoMHgwMDAwLCBJUlEwX1NSKTsgIC8qIGNsZWFyIGlycSAqLwotCWN0cmxfb3V0dygweDAwMDAsIElSUTFfU1IpOyAgLyogY2xlYXIgaXJxICovCi0JY3RybF9vdXR3KDB4MDAwMCwgSVJRMl9TUik7ICAvKiBjbGVhciBpcnEgKi8KLQljdHJsX291dHcoMHgwMDJhLCBJUlFfTU9ERSk7IC8qIHNldCBpcnEgdHlwZSAqLworCV9fcmF3X3dyaXRldygweGZmZmYsIElSUTBfTVIpOyAgLyogbWFzayBhbGwgKi8KKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBJUlExX01SKTsgIC8qIG1hc2sgYWxsICovCisJX19yYXdfd3JpdGV3KDB4ZmZmZiwgSVJRMl9NUik7ICAvKiBtYXNrIGFsbCAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIElSUTBfU1IpOyAgLyogY2xlYXIgaXJxICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgSVJRMV9TUik7ICAvKiBjbGVhciBpcnEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBJUlEyX1NSKTsgIC8qIGNsZWFyIGlycSAqLworCV9fcmF3X3dyaXRldygweDAwMmEsIElSUV9NT0RFKTsgLyogc2V0IGlycSB0eXBlICovCiAKLQlmb3IgKGkgPSAwOyBpIDwgU0U3NzI0X0ZQR0FfSVJRX05SOyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKFNFNzcyNF9GUEdBX0lSUV9CQVNFICsgaSwKKwlmb3IgKGkgPSAwOyBpIDwgU0U3NzI0X0ZQR0FfSVJRX05SOyBpKyspIHsKKwkJaW50IGlycSwgd2FudGVkOworCisJCXdhbnRlZCA9IFNFNzcyNF9GUEdBX0lSUV9CQVNFICsgaTsKKworCQlpcnEgPSBjcmVhdGVfaXJxX25yKHdhbnRlZCwgbmlkKTsKKwkJaWYgKHVubGlrZWx5KGlycSA9PSAwKSkgeworCQkJcHJfZXJyKCIlczogZmFpbGVkIGhvb2tpbmcgaXJxICVkIGZvciBGUEdBXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB3YW50ZWQpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHVubGlrZWx5KGlycSAhPSB3YW50ZWQpKSB7CisJCQlwcl9lcnIoIiVzOiBnb3QgaXJxICVkIGJ1dCB3YW50ZWQgJWQsIGJhaWxpbmcuXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpcnEsIHdhbnRlZCk7CisJCQlkZXN0cm95X2lycShpcnEpOworCQkJcmV0dXJuOworCQl9CisKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAogCQkJCQkgICAgICAmc2U3NzI0X2lycV9jaGlwLAogCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKKwl9CiAKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlEwX0lSUSwgc2U3NzI0X2lycV9kZW11eCk7CiAJc2V0X2lycV90eXBlKElSUTBfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2RyYW0uUwppbmRleCA5MDQwMTY3Li42ZmE0NzM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2RyYW0uUworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2RyYW0uUwpAQCAtMzksNiArMzksMTAgQEAKIAogCS8qIERCU0M6IHB1dCBtZW1vcnkgaW4gYXV0by1yZWZyZXNoIG1vZGUgKi8KIAorCW1vdi5sCUAoU0hfU0xFRVBfTU9ERSwgcjUpLCByMAorCXRzdAkjU1VTUF9TSF9SU1RBTkRCWSwgcjAKKwliZglyZXN1bWVfcnN0YW5kYnkKKwogCUVEIDB4RkQwMDAwNDAsIDB4MDAwMDAwMDAgLyogREJSRlBETjAgKi8KIAlXQUlUIDEKIAlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDAyIC8qIERCQ01EQ05UIChQQUxMKSAqLwpAQCAtNDksNCArNTMsNzkgQEAKIAlydHMKIAkgbm9wCiAKK3Jlc3VtZV9yc3RhbmRieToKKworCS8qIENQRzogc2V0dXAgY2xvY2tzIGJlZm9yZSByZXN0YXJ0aW5nIGV4dGVybmFsIG1lbW9yeSAqLworCisJRUQgMHhBNDE1MDAyNCwgMHgwMDAwNDAwMCAvKiBQTExDUiAqLworCisJbW92LmwJRlJRQ1JBLHIwCisJbW92LmwJQHIwLHIzCisJbW92LmwJS0lDSyxyMQorCW9yCXIxLCByMworCW1vdi5sCXIzLCBAcjAKKworCW1vdi5sCUxTVEFUUyxyMAorCW1vdgkjMSxyMQorV0FJVF9MU1RBVFM6CisJbW92LmwJQHIwLHIzCisJdHN0CXIxLHIzCisJYmYJV0FJVF9MU1RBVFMKKworCS8qIERCU0M6IHJlLWluaXRpYWxpemUgYW5kIHB1dCBpbiBhdXRvLXJlZnJlc2ggKi8KKworCUVEIDB4RkQwMDAxMDgsIDB4MDAwMDAxODEgLyogREJQRENOVDAgKi8KKwlFRCAweEZEMDAwMDIwLCAweDAxNUIwMDAyIC8qIERCQ09ORiAqLworCUVEIDB4RkQwMDAwMzAsIDB4MDMwNzE1MDIgLyogREJUUjAgKi8KKwlFRCAweEZEMDAwMDM0LCAweDAyMDIwMTAyIC8qIERCVFIxICovCisJRUQgMHhGRDAwMDAzOCwgMHgwMTA5MDQwNSAvKiBEQlRSMiAqLworCUVEIDB4RkQwMDAwM0MsIDB4MDAwMDAwMDIgLyogREJUUjMgKi8KKwlFRCAweEZEMDAwMDA4LCAweDAwMDAwMDA1IC8qIERCS0lORCAqLworCUVEIDB4RkQwMDAwNDAsIDB4MDAwMDAwMDEgLyogREJSRlBETjAgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAwIC8qIERCUkZQRE4wICovCisJRUQgMHhGRDAwMDAxOCwgMHgwMDAwMDAwMSAvKiBEQkNLRUNOVCAqLworCisJbW92CSMxMDAscjAKK1dBSVRfNDAwTlM6CisJZHQJcjAKKwliZglXQUlUXzQwME5TCisKKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDAyIC8qIERCQ01EQ05UIChQQUxMKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMjAwMDAgLyogREJNUkNOVCAoRU1SMikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDMwMDAwIC8qIERCTVJDTlQgKEVNUjMpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAxMDAwNCAvKiBEQk1SQ05UIChFTVIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAwMDUzMiAvKiBEQk1SQ05UIChNUlMpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDA0IC8qIERCQ01EQ05UIChSRUYpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMDA0MzIgLyogREJNUkNOVCAoTVJTKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAzYzAgLyogREJNUkNOVCAoRU1SKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAwNDAgLyogREJNUkNOVCAoRU1SKSAqLworCisJbW92CSMxMDAscjAKK1dBSVRfNDAwTlNfMjoKKwlkdAlyMAorCWJmCVdBSVRfNDAwTlNfMgorCisJRUQgMHhGRDAwMDAxMCwgMHgwMDAwMDAwMSAvKiBEQkVOICovCisJRUQgMHhGRDAwMDA0NCwgMHgwMDAwMDUwZiAvKiBEQlJGUEROMSAqLworCUVEIDB4RkQwMDAwNDgsIDB4MjM2ODAwZTYgLyogREJSRlBETjIgKi8KKworCW1vdi5sCURVTU1ZLHIwCisJbW92LmwJQHIwLCByMSAvKiBmb3JjZSBzaW5nbGUgZHVtbXkgcmVhZCAqLworCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDA0IC8qIERCQ01EQ05UIChSRUYpICovCisJRUQgMHhGRDAwMDEwOCwgMHgwMDAwMDA4MCAvKiBEQlBEQ05UMCAqLworCUVEIDB4RkQwMDAwNDAsIDB4MDAwMTAwMDAgLyogREJSRlBETjAgKi8KKworCXJ0cworCSBub3AKKworCS5iYWxpZ24gNAorRFVNTVk6CS5sb25nCTB4YWM0MDAwMDAKK0ZSUUNSQToJLmxvbmcJMHhhNDE1MDAwMAorS0lDSzoJLmxvbmcJMHg4MDAwMDAwMAorTFNUQVRTOgkubG9uZwkweGE0MTUwMDYwCisKIEVOVFJZKG1zNzcyNHNlX3NkcmFtX2xlYXZlX2VuZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKaW5kZXggODU4ZWNiMi4uNjZjZGJjMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKQEAgLTUzLDI2ICs1MywxNyBAQAogICovCiAKIC8qIEhlYXJ0YmVhdCAqLwotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gUEFfTEVELAotCQkuZW5kICAgID0gUEFfTEVELAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydCAgPSBQQV9MRUQsCisJLmVuZCAgICA9IFBBX0xFRCwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gImhlYXJ0YmVhdCIsCiAJLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gMSwKKwkucmVzb3VyY2UgICAgICAgPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogTEFOOTFDMTExICovCkBAIC0yNjUsMTIgKzI1NiwxMiBAQAogI2RlZmluZSBGQ0xLQUNSCQkweGE0MTUwMDA4CiBzdGF0aWMgdm9pZCBmc2ltY2tfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIHN0YXR1cyA9IGN0cmxfaW5sKGNsay0+ZW5hYmxlX3JlZyk7CisJdTMyIHN0YXR1cyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CiAKIAkvKiB1c2UgZXh0ZXJuYWwgY2xvY2sgKi8KIAlzdGF0dXMgJj0gfjB4MDAwMDAwZmY7CiAJc3RhdHVzIHw9IDB4MDAwMDAwODA7Ci0JY3RybF9vdXRsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKKwlfX3Jhd193cml0ZWwoc3RhdHVzLCBjbGstPmVuYWJsZV9yZWcpOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgZnNpbWNrX2Nsa19vcHMgPSB7CkBAIC0zMjIsNyArMzEzLDcgQEAKIC8qIEtFWVNDIGluIFNvQyAoTmVlZHMgU1czMy0yIHNldCB0byBPTikgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyBrZXlzY19pbmZvID0gewogCS5tb2RlID0gU0hfS0VZU0NfTU9ERV8xLAotCS5zY2FuX3RpbWluZyA9IDEwLAorCS5zY2FuX3RpbWluZyA9IDMsCiAJLmRlbGF5ID0gNTAsCiAJLmtleWNvZGVzID0gewogCQlLRVlfMSwgS0VZXzIsIEtFWV8zLCBLRVlfNCwgS0VZXzUsCkBAIC00NjAsNyArNDUxLDcgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQgID0gMTAxLAorCQkuc3RhcnQgID0gMTAwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00ODMsNyArNDc0LDcgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQgID0gMjQsCisJCS5zdGFydCAgPSAyMywKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDk4LDYgKzQ4OSwyNiBAQAogCX0sCiB9OwogCisvKiBJckRBICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlyZGFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJJckRBIiwKKwkJLnN0YXJ0ICA9IDB4QTQ1RDAwMDAsCisJCS5lbmQgICAgPSAweEE0NUQwMDQ5LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAyMCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcmRhX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfc2lyIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGlyZGFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBpcmRhX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptczc3MjRzZV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmaGVhcnRiZWF0X2RldmljZSwKIAkmc21jOTF4X2V0aF9kZXZpY2UsCkBAIC01MTIsNiArNTIzLDcgQEAKIAkmZnNpX2RldmljZSwKIAkmc2RoaTBfY243X2RldmljZSwKIAkmc2RoaTFfY244X2RldmljZSwKKwkmaXJkYV9kZXZpY2UsCiB9OwogCiAvKiBJMkMgZGV2aWNlICovCkBAIC01MzEsNyArNTQzLDcgQEAKIAlpbnQgdCA9IDEwMDAwOwogCiAJd2hpbGUgKHQtLSkgewotCQlpZiAoIWN0cmxfaW53KEVFUFJPTV9TVEFUKSkKKwkJaWYgKCFfX3Jhd19yZWFkdyhFRVBST01fU1RBVCkpCiAJCQlyZXR1cm4gMTsKIAkJdWRlbGF5KDEpOwogCX0KQEAgLTU1MSwxMyArNTYzLDEzIEBACiAKIAkvKiByZWFkIE1BQyBhZGRyIGZyb20gRUVQUk9NICovCiAJZm9yIChpID0gMCA7IGkgPCAzIDsgaSsrKSB7Ci0JCWN0cmxfb3V0dygweDAsIEVFUFJPTV9PUCk7IC8qIHJlYWQgKi8KLQkJY3RybF9vdXR3KGkqMiwgRUVQUk9NX0FEUik7Ci0JCWN0cmxfb3V0dygweDEsIEVFUFJPTV9TVFJUKTsKKwkJX19yYXdfd3JpdGV3KDB4MCwgRUVQUk9NX09QKTsgLyogcmVhZCAqLworCQlfX3Jhd193cml0ZXcoaSoyLCBFRVBST01fQURSKTsKKwkJX19yYXdfd3JpdGV3KDB4MSwgRUVQUk9NX1NUUlQpOwogCQlpZiAoIXNoX2V0aF9pc19lZXByb21fcmVhZHkoKSkKIAkJCXJldHVybjsKIAotCQltYWMgPSBjdHJsX2ludyhFRVBST01fREFUQSk7CisJCW1hYyA9IF9fcmF3X3JlYWR3KEVFUFJPTV9EQVRBKTsKIAkJc2hfZXRoX3BsYXQubWFjX2FkZHJbaSA8PCAxXSA9IG1hYyAmIDB4ZmY7CiAJCXNoX2V0aF9wbGF0Lm1hY19hZGRyWyhpIDw8IDEpICsgMV0gPSBtYWMgPj4gODsKIAl9CkBAIC01OTQsMjggKzYwNiwyOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkZXZpY2VzX3NldHVwKHZvaWQpCiB7Ci0JdTE2IHN3ID0gY3RybF9pbncoU1c0MTQwKTsgLyogc2VsZWN0IGNhbWVyYSwgbW9uaXRvciAqLwotCXN0cnVjdCBjbGsgKmZzaWFfY2xrOworCXUxNiBzdyA9IF9fcmF3X3JlYWR3KFNXNDE0MCk7IC8qIHNlbGVjdCBjYW1lcmEsIG1vbml0b3IgKi8KKwlzdHJ1Y3QgY2xrICpjbGs7CiAKIAkvKiByZWdpc3RlciBib2FyZCBzcGVjaWZpYyBzZWxmLXJlZnJlc2ggY29kZSAqLwotCXNoX21vYmlsZV9yZWdpc3Rlcl9zZWxmX3JlZnJlc2goU1VTUF9TSF9TVEFOREJZIHwgU1VTUF9TSF9TRiwKKwlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YgfAorCQkJCQlTVVNQX1NIX1JTVEFOREJZLAogCQkJCQkmbXM3NzI0c2Vfc2RyYW1fZW50ZXJfc3RhcnQsCiAJCQkJCSZtczc3MjRzZV9zZHJhbV9lbnRlcl9lbmQsCiAJCQkJCSZtczc3MjRzZV9zZHJhbV9sZWF2ZV9zdGFydCwKIAkJCQkJJm1zNzcyNHNlX3NkcmFtX2xlYXZlX2VuZCk7CiAJLyogUmVzZXQgUmVsZWFzZSAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhGUEdBX09VVCkgJgorCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhGUEdBX09VVCkgJgogCQkgIH4oKDEgPDwgMSkgIHwgLyogTEFOICovCiAJCSAgICAoMSA8PCA2KSAgfCAvKiBWSURFTyBEQUMgKi8KIAkJICAgICgxIDw8IDcpICB8IC8qIEFLNDY0MyAqLworCQkgICAgKDEgPDwgOCkgIHwgLyogSXJEQSAqLwogCQkgICAgKDEgPDwgMTIpIHwgLyogVVNCMCAqLwogCQkgICAgKDEgPDwgMTQpKSwgLyogUk1JSSAqLwogCQkgIEZQR0FfT1VUKTsKIAogCS8qIHR1cm4gb24gVVNCIGNsb2NrcywgdXNlIGV4dGVybmFsIGNsb2NrICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX01TRUxDUkIpICYgfjB4YzAwMCkgfCAweDgwMDAsIFBPUlRfTVNFTENSQik7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX01TRUxDUkIpICYgfjB4YzAwMCkgfCAweDgwMDAsIFBPUlRfTVNFTENSQik7CiAKLSNpZmRlZiBDT05GSUdfUE0KIAkvKiBMZXQgTEVEOSBzaG93IFNUQVRVUzIgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TVEFUVVMyLCBOVUxMKTsKIApAQCAtNjI0LDI4ICs2MzcsMTIgQEAKIAogCS8qIExpdCBMRUQxMSBzaG93IFBEU1RBVFVTICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOwotI2Vsc2UKLQkvKiBMaXQgTEVEOSAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjYsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjYsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNiwgMCk7Ci0KLQkvKiBMaXQgTEVEMTAgKi8KLQlncGlvX3JlcXVlc3QoR1BJT19QVEo1LCBOVUxMKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo1LCAxKTsKLQlncGlvX2V4cG9ydChHUElPX1BUSjUsIDApOwotCi0JLyogTGl0IExFRDExICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNywgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNywgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo3LCAwKTsKLSNlbmRpZgogCiAJLyogZW5hYmxlIFVTQjAgcG9ydCAqLwotCWN0cmxfb3V0dygweDA2MDAsIDB4YTQwNTAxZDQpOworCV9fcmF3X3dyaXRldygweDA2MDAsIDB4YTQwNTAxZDQpOwogCiAJLyogZW5hYmxlIFVTQjEgcG9ydCAqLwotCWN0cmxfb3V0dygweDA2MDAsIDB4YTQwNTAxOTIpOworCV9fcmF3X3dyaXRldygweDA2MDAsIDB4YTQwNTAxOTIpOwogCiAJLyogZW5hYmxlIElSUSAwLDEsMiAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lOVENfSVJRMCwgTlVMTCk7CkBAIC02OTMsNyArNjkwLDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWQ1BXQywgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEUkQsICAgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRExDTEssICBOVUxMKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfSElaQSkgJiB+MHgwMDAxKSwgUE9SVF9ISVpBKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfSElaQSkgJiB+MHgwMDAxKSwgUE9SVF9ISVpBKTsKIAogCS8qIGVuYWJsZSBDRVUwICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPMF9EMTUsIE5VTEwpOwpAQCAtNzY0LDEzICs3NjEsMTggQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9DTEtBVURJT0JPLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQVNELCAgICBOVUxMKTsKIAorCS8qIHNldCBTUFUyIGNsb2NrIHRvIDgzLjQgTUh6ICovCisJY2xrID0gY2xrX2dldChOVUxMLCAic3B1X2NsayIpOworCWNsa19zZXRfcmF0ZShjbGssIGNsa19yb3VuZF9yYXRlKGNsaywgODMzMzMzMzMpKTsKKwljbGtfcHV0KGNsayk7CisKIAkvKiBjaGFuZ2UgcGFyZW50IG9mIEZTSSBBICovCi0JZnNpYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJmc2lhX2NsayIpOworCWNsayA9IGNsa19nZXQoTlVMTCwgImZzaWFfY2xrIik7CiAJY2xrX3JlZ2lzdGVyKCZmc2ltY2thX2Nsayk7Ci0JY2xrX3NldF9wYXJlbnQoZnNpYV9jbGssICZmc2ltY2thX2Nsayk7Ci0JY2xrX3NldF9yYXRlKGZzaWFfY2xrLCAxMTAwMCk7CisJY2xrX3NldF9wYXJlbnQoY2xrLCAmZnNpbWNrYV9jbGspOworCWNsa19zZXRfcmF0ZShjbGssIDExMDAwKTsKIAljbGtfc2V0X3JhdGUoJmZzaW1ja2FfY2xrLCAxMTAwMCk7Ci0JY2xrX3B1dChmc2lhX2Nsayk7CisJY2xrX3B1dChjbGspOwogCiAJLyogU0RISTAgY29ubmVjdGVkIHRvIGNuNyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESEkwQ0QsIE5VTEwpOwpAQCAtNzkyLDYgKzc5NCwxMCBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESEkxQ01ELCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMUNMSywgTlVMTCk7CiAKKwkvKiBlbmFibGUgSXJEQSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfT1VULCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0lOLCAgTlVMTCk7CisKIAkvKgogCSAqIGVuYWJsZSBTSC1FdGgKIAkgKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL2lycS5jCmluZGV4IDEyMTc0NGMuLmQ1YzllZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvaXJxLmMKQEAgLTI0LDMwICsyNCwzMCBAQAogdm9pZCBfX2luaXQgaW5pdF9zZTc3ODBfSVJRKHZvaWQpCiB7CiAJLyogZW5hYmxlIGFsbCBpbnRlcnJ1cHQgYXQgRlBHQSAqLwotCWN0cmxfb3V0dygwLCBGUEdBX0lOVE1TSzEpOworCV9fcmF3X3dyaXRldygwLCBGUEdBX0lOVE1TSzEpOwogCS8qIG1hc2sgU001MDEgaW50ZXJydXB0ICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhGUEdBX0lOVE1TSzEpIHwgMHgwMDAyKSwgRlBHQV9JTlRNU0sxKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KEZQR0FfSU5UTVNLMSkgfCAweDAwMDIpLCBGUEdBX0lOVE1TSzEpOwogCS8qIGVuYWJsZSBhbGwgaW50ZXJydXB0IGF0IEZQR0EgKi8KLQljdHJsX291dHcoMCwgRlBHQV9JTlRNU0syKTsKKwlfX3Jhd193cml0ZXcoMCwgRlBHQV9JTlRNU0syKTsKIAogCS8qIHNldCBGUEdBIElOVFNFTCByZWdpc3RlciAqLwogCS8qIEZQR0EgKyAweDA2ICovCi0JY3RybF9vdXR3KCAoKElSUVBJTl9TTTUwMSA8PCBJUlFQT1NfU001MDEpIHwKKwlfX3Jhd193cml0ZXcoICgoSVJRUElOX1NNNTAxIDw8IElSUVBPU19TTTUwMSkgfAogCQkoSVJRUElOX1NNQzkxQ1ggPDwgSVJRUE9TX1NNQzkxQ1gpKSwgRlBHQV9JTlRTRUwxKTsKIAogCS8qIEZQR0EgKyAweDA4ICovCi0JY3RybF9vdXR3KCgoSVJRUElOX0VYVElOVDQgPDwgSVJRUE9TX0VYVElOVDQpIHwKKwlfX3Jhd193cml0ZXcoKChJUlFQSU5fRVhUSU5UNCA8PCBJUlFQT1NfRVhUSU5UNCkgfAogCQkoSVJRUElOX0VYVElOVDMgPDwgSVJRUE9TX0VYVElOVDMpIHwKIAkJKElSUVBJTl9FWFRJTlQyIDw8IElSUVBPU19FWFRJTlQyKSB8CiAJCShJUlFQSU5fRVhUSU5UMSA8PCBJUlFQT1NfRVhUSU5UMSkpLCBGUEdBX0lOVFNFTDIpOwogCiAJLyogRlBHQSArIDB4MEEgKi8KLQljdHJsX291dHcoKElSUVBJTl9QQ0NQVyA8PCBJUlFQT1NfUENDUFcpLCBGUEdBX0lOVFNFTDMpOworCV9fcmF3X3dyaXRldygoSVJRUElOX1BDQ1BXIDw8IElSUVBPU19QQ0NQVyksIEZQR0FfSU5UU0VMMyk7CiAKIAlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSUSk7IC8qIGluc3RhbGwgaGFuZGxlcnMgZm9yIElSUTAtNyAqLwogCiAJLyogSUNSMTogZGV0ZWN0IGxvdyBsZXZlbChmb3IgMm5kY3V0KSAqLwotCWN0cmxfb3V0bCgweEFBQUEwMDAwLCBJTlRDX0lDUjEpOworCV9fcmF3X3dyaXRlbCgweEFBQUEwMDAwLCBJTlRDX0lDUjEpOwogCiAJLyoKIAkgKiBGUEdBIFBDSVNFTCByZWdpc3RlciBpbml0aWFsaXplCkBAIC02Myw2ICs2Myw2IEBACiAJICogIElOVEQgfHwgSU5URCAgfCBJTlRDICB8ICAtLSAgIHwgSU5UQQogCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICovCi0JY3RybF9vdXR3KDB4MDAxMywgRlBHQV9QQ0lfSU5UU0VMMSk7Ci0JY3RybF9vdXR3KDB4RTQwMiwgRlBHQV9QQ0lfSU5UU0VMMik7CisJX19yYXdfd3JpdGV3KDB4MDAxMywgRlBHQV9QQ0lfSU5UU0VMMSk7CisJX19yYXdfd3JpdGV3KDB4RTQwMiwgRlBHQV9QQ0lfSU5UU0VMMik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9zZXR1cC5jCmluZGV4IDFkM2E4NjcuLjZmN2MyMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9zZXR1cC5jCkBAIC0xNywyNiArMTcsMTcgQEAKICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CiAKIC8qIEhlYXJ0YmVhdCAqLwotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gUEFfTEVELAotCQkuZW5kICAgID0gUEFfTEVELAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydCAgPSBQQV9MRUQsCisJLmVuZCAgICA9IFBBX0xFRCwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gImhlYXJ0YmVhdCIsCiAJLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gMSwKKwkucmVzb3VyY2UgICAgICAgPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogU01DOTF4ICovCkBAIC04NCwxNCArNzUsMTQgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZTc3ODBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiAiU0gtTGludXgiIG9uIExFRCBEaXNwbGF5ICovCi0JY3RybF9vdXR3KCAnUycgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDBfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ0gnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwxX0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICctJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMl9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnTCcgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDNfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ2knICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw0X0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICduJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNV9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAndScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDZfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ3gnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw3X0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICdTJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMF9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnSCcgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDFfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJy0nICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwyX0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICdMJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMM19BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnaScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDRfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ24nICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw1X0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICd1JyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNl9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAneCcgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDdfQUREUiA8PCAxKSApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSGl0YWNoaSBVTCBTb2x1dGlvbnMgRW5naW5lIDc3ODBTRTAzIHN1cHBvcnQuXG4iKTsKIApAQCAtMTAyLDE1ICs5MywxNSBAQAogCSAqICAgUkVRMi9HTlQyIC0+IFNlcmlhbCBBVEEKIAkgKiAgIFJFUTMvR05UMyAtPiBQQ0kgc2xvdAogCSAqLwotCWN0cmxfb3V0dygweDAyMTMsIEZQR0FfUkVRU0VMKTsKKwlfX3Jhd193cml0ZXcoMHgwMjEzLCBGUEdBX1JFUVNFTCk7CiAKIAkvKiBHUElPIHNldHRpbmcgKi8KLQljdHJsX291dHcoMHgwMDAwLCBHUElPX1BFQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhHUElPX1BIQ1IpJjB4ZmZmMywgR1BJT19QSENSKTsKLQljdHJsX291dHcoMHgwYzAwLCBHUElPX1BNU0VMUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgR1BJT19QRUNSKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoR1BJT19QSENSKSYweGZmZjMsIEdQSU9fUEhDUik7CisJX19yYXdfd3JpdGV3KDB4MGMwMCwgR1BJT19QTVNFTFIpOwogCiAJLyogaVZEUiBQb3dlciBPTiAqLwotCWN0cmxfb3V0dygweDAwMDEsIEZQR0FfSVZEUlBXKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBGUEdBX0lWRFJQVyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvcnRjLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvcnRjLmMKaW5kZXggYThiOWY4NDQuLjFiMjAwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9ydGMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvcnRjLmMKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCXNwaW5fbG9jaygmc2gwM19ydGNfbG9jayk7CiAgYWdhaW46CiAJZG8gewotCQlzZWMgID0gKGN0cmxfaW5iKFJUQ19TRUMxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMDsKLQkJbWluICA9IChjdHJsX2luYihSVENfTUlOMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NSU4xMCkgJiAweGYpICogMTA7Ci0JCWhvdXIgPSAoY3RybF9pbmIoUlRDX0hPVTEpICYgMHhmKSArIChjdHJsX2luYihSVENfSE9VMTApICYgMHhmKSAqIDEwOwotCQlkYXkgID0gKGN0cmxfaW5iKFJUQ19EQVkxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX0RBWTEwKSAmIDB4ZikgKiAxMDsKLQkJbW9uICA9IChjdHJsX2luYihSVENfTU9OMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NT04xMCkgJiAweGYpICogMTA7Ci0JCXllYXIgPSAoY3RybF9pbmIoUlRDX1lFQTEpICYgMHhmKSArIChjdHJsX2luYihSVENfWUVBMTApICYgMHhmKSAqIDEwCi0JCSAgICAgKyAoY3RybF9pbmIoUlRDX1lFQTEwMCApICYgMHhmKSAqIDEwMAotCQkgICAgICsgKGN0cmxfaW5iKFJUQ19ZRUExMDAwKSAmIDB4ZikgKiAxMDAwOwotCX0gd2hpbGUgKHNlYyAhPSAoY3RybF9pbmIoUlRDX1NFQzEpICYgMHhmKSArIChjdHJsX2luYihSVENfU0VDMTApICYgMHg3KSAqIDEwKTsKKwkJc2VjICA9IChfX3Jhd19yZWFkYihSVENfU0VDMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19TRUMxMCkgJiAweDcpICogMTA7CisJCW1pbiAgPSAoX19yYXdfcmVhZGIoUlRDX01JTjEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfTUlOMTApICYgMHhmKSAqIDEwOworCQlob3VyID0gKF9fcmF3X3JlYWRiKFJUQ19IT1UxKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX0hPVTEwKSAmIDB4ZikgKiAxMDsKKwkJZGF5ICA9IChfX3Jhd19yZWFkYihSVENfREFZMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19EQVkxMCkgJiAweGYpICogMTA7CisJCW1vbiAgPSAoX19yYXdfcmVhZGIoUlRDX01PTjEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfTU9OMTApICYgMHhmKSAqIDEwOworCQl5ZWFyID0gKF9fcmF3X3JlYWRiKFJUQ19ZRUExKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX1lFQTEwKSAmIDB4ZikgKiAxMAorCQkgICAgICsgKF9fcmF3X3JlYWRiKFJUQ19ZRUExMDAgKSAmIDB4ZikgKiAxMDAKKwkJICAgICArIChfX3Jhd19yZWFkYihSVENfWUVBMTAwMCkgJiAweGYpICogMTAwMDsKKwl9IHdoaWxlIChzZWMgIT0gKF9fcmF3X3JlYWRiKFJUQ19TRUMxKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMCk7CiAJaWYgKHllYXIgPT0gMCB8fCBtb24gPCAxIHx8IG1vbiA+IDEyIHx8IGRheSA+IDMxIHx8IGRheSA8IDEgfHwKIAkgICAgaG91ciA+IDIzIHx8IG1pbiA+IDU5IHx8IHNlYyA+IDU5KSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtNjAsMTYgKzYwLDE2IEBACiAJCXByaW50aygieWVhcj0lZCwgbW9uPSVkLCBkYXk9JWQsIGhvdXI9JWQsIG1pbj0lZCwgc2VjPSVkXG4iLAogCQkgICAgICAgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKIAotCQljdHJsX291dGIoMCwgUlRDX1NFQzEpOyBjdHJsX291dGIoMCwgUlRDX1NFQzEwKTsKLQkJY3RybF9vdXRiKDAsIFJUQ19NSU4xKTsgY3RybF9vdXRiKDAsIFJUQ19NSU4xMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfSE9VMSk7IGN0cmxfb3V0YigwLCBSVENfSE9VMTApOwotCQljdHJsX291dGIoNiwgUlRDX1dFRTEpOwotCQljdHJsX291dGIoMSwgUlRDX0RBWTEpOyBjdHJsX291dGIoMCwgUlRDX0RBWTEwKTsKLQkJY3RybF9vdXRiKDEsIFJUQ19NT04xKTsgY3RybF9vdXRiKDAsIFJUQ19NT04xMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfWUVBMSk7IGN0cmxfb3V0YigwLCBSVENfWUVBMTApOwotCQljdHJsX291dGIoMCwgUlRDX1lFQTEwMCk7Ci0JCWN0cmxfb3V0YigyLCBSVENfWUVBMTAwMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfQ1RMKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19TRUMxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19TRUMxMCk7CisJCV9fcmF3X3dyaXRlYigwLCBSVENfTUlOMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfTUlOMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX0hPVTEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX0hPVTEwKTsKKwkJX19yYXdfd3JpdGViKDYsIFJUQ19XRUUxKTsKKwkJX19yYXdfd3JpdGViKDEsIFJUQ19EQVkxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19EQVkxMCk7CisJCV9fcmF3X3dyaXRlYigxLCBSVENfTU9OMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfTU9OMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX1lFQTEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX1lFQTEwKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19ZRUExMDApOworCQlfX3Jhd193cml0ZWIoMiwgUlRDX1lFQTEwMDApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX0NUTCk7CiAJCWdvdG8gYWdhaW47CiAJfQogCkBAIC05Myw5ICs5Myw5IEBACiAJLyogZ2V0cyByZWNhbGxlZCB3aXRoIGlycSBsb2NhbGx5IGRpc2FibGVkICovCiAJc3Bpbl9sb2NrKCZzaDAzX3J0Y19sb2NrKTsKIAlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspCS8qIG1heSB0YWtlIHVwIHRvIDEgc2Vjb25kLi4uICovCi0JCWlmICghKGN0cmxfaW5iKFJUQ19DVEwpICYgUlRDX0JVU1kpKQorCQlpZiAoIShfX3Jhd19yZWFkYihSVENfQ1RMKSAmIFJUQ19CVVNZKSkKIAkJCWJyZWFrOwotCWNtb3NfbWludXRlcyA9IChjdHJsX2luYihSVENfTUlOMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NSU4xMCkgJiAweGYpICogMTA7CisJY21vc19taW51dGVzID0gKF9fcmF3X3JlYWRiKFJUQ19NSU4xKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX01JTjEwKSAmIDB4ZikgKiAxMDsKIAlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7CiAJcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOwogCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCkBAIC0xMDMsMTAgKzEwMywxMCBAQAogCXJlYWxfbWludXRlcyAlPSA2MDsKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCWN0cmxfb3V0YihyZWFsX3NlY29uZHMgJSAxMCwgUlRDX1NFQzEpOwotCQljdHJsX291dGIocmVhbF9zZWNvbmRzIC8gMTAsIFJUQ19TRUMxMCk7Ci0JCWN0cmxfb3V0YihyZWFsX21pbnV0ZXMgJSAxMCwgUlRDX01JTjEpOwotCQljdHJsX291dGIocmVhbF9taW51dGVzIC8gMTAsIFJUQ19NSU4xMCk7CisJCV9fcmF3X3dyaXRlYihyZWFsX3NlY29uZHMgJSAxMCwgUlRDX1NFQzEpOworCQlfX3Jhd193cml0ZWIocmVhbF9zZWNvbmRzIC8gMTAsIFJUQ19TRUMxMCk7CisJCV9fcmF3X3dyaXRlYihyZWFsX21pbnV0ZXMgJSAxMCwgUlRDX01JTjEpOworCQlfX3Jhd193cml0ZWIocmVhbF9taW51dGVzIC8gMTAsIFJUQ19NSU4xMCk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgInNldF9ydGNfbW1zczogY2FuJ3QgdXBkYXRlIGZyb20gJWQgdG8gJWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCmluZGV4IDc0Y2ZiNGIuLmFmNGEwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCkBAIC04Miw3ICs4Miw3IEBACiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilQQV9BUkVBNV9JTyk7CiAJcHJvdCA9IFBBR0VfS0VSTkVMX1BDQygxLCBfUEFHRV9QQ0NfSU8xNik7Ci0JY2ZfaWRlX2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwcm90LnBncHJvdCk7CisJY2ZfaWRlX2Jhc2UgPSBpb3JlbWFwX3Byb3QocGFkZHJiYXNlLCBQQUdFX1NJWkUsIHBncHJvdF92YWwocHJvdCkpOwogCWlmICghY2ZfaWRlX2Jhc2UpIHsKIAkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYwppbmRleCBkOGViZmE3Li5hZGQ2OThjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYwpAQCAtMjgsMTggKzI4LDE4IEBACiB2b2lkIF9faW5pdCBpbml0X3NoNzc2M3JkcF9JUlEodm9pZCkKIHsKIAkvKiBHUElPIGVuYWJsZWQgKi8KLQljdHJsX291dGwoMSA8PCAyNSwgSU5UQ19JTlQyTVNLQ1IpOworCV9fcmF3X3dyaXRlbCgxIDw8IDI1LCBJTlRDX0lOVDJNU0tDUik7CiAKIAkvKiBlbmFibGUgR1BJTyBpbnRlcnJ1cHRzICovCi0JY3RybF9vdXRsKChjdHJsX2lubChJTlRDX0lOVDJQUkk3KSAmIDB4RkYwMEZGRkYpIHwgMHgwMDBGMDAwMCwKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKElOVENfSU5UMlBSSTcpICYgMHhGRjAwRkZGRikgfCAweDAwMEYwMDAwLAogCQkgIElOVENfSU5UMlBSSTcpOwogCiAJLyogVVNCSCBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgMTcsIElOVENfSU5UMk1TS0NSMSk7CisJX19yYXdfd3JpdGVsKDEgPDwgMTcsIElOVENfSU5UMk1TS0NSMSk7CiAKIAkvKiBHRVRIRVIgZW5hYmxlZCAqLwotCWN0cmxfb3V0bCgxIDw8IDE2LCBJTlRDX0lOVDJNU0tDUjEpOworCV9fcmF3X3dyaXRlbCgxIDw8IDE2LCBJTlRDX0lOVDJNU0tDUjEpOwogCiAJLyogRE1BQyBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgOCwgSU5UQ19JTlQyTVNLQ1IpOworCV9fcmF3X3dyaXRlbCgxIDw8IDgsIElOVENfSU5UMk1TS0NSKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCmluZGV4IDM5MDUzNGEuLmY2NGE2OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwpAQCAtMTU4LDUwICsxNTgsNTAgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzaDc3NjNyZHBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiBCb2FyZCB2ZXJzaW9uIGNoZWNrICovCi0JaWYgKGN0cmxfaW53KENQTERfQk9BUkRfSURfRVJWX1JFRykgPT0gMHhFQ0IxKQorCWlmIChfX3Jhd19yZWFkdyhDUExEX0JPQVJEX0lEX0VSVl9SRUcpID09IDB4RUNCMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUlRFIFN0YW5kYXJkIENvbmZpZ3VyYXRpb25cbiIpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUlRBIFN0YW5kYXJkIENvbmZpZ3VyYXRpb25cbiIpOwogCiAJLyogVVNCIHBpbiBzZWxlY3QgYml0cyAoY2xlYXIgYml0IDUtMiB0byAwKSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMikgJiAweEZGQzMpLCBQT1JUX1BTRUwyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDIpICYgMHhGRkMzKSwgUE9SVF9QU0VMMik7CiAJLyogVVNCSCBzZXR1cCBwb3J0IEkgY29udHJvbHMgdG8gb3RoZXIgKGNsZWFyIGJpdHMgNC05IHRvIDApICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUElDUikgJiAweEZDMEYsIFBPUlRfUElDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUElDUikgJiAweEZDMEYsIFBPUlRfUElDUik7CiAKIAkvKiBTZWxlY3QgVVNCIEhvc3QgY29udHJvbGxlciAqLwotCWN0cmxfb3V0dygweDAwLCBVU0JfVVNCSFNDKTsKKwlfX3Jhd193cml0ZXcoMHgwMCwgVVNCX1VTQkhTQyk7CiAKIAkvKiBGb3IgTENEICovCiAJLyogc2V0IFBUSjctMSwgYml0cyAxNS0yIG9mIFBKQ1IgdG8gMCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BKQ1IpICYgMHgwMDAzLCBQT1JUX1BKQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BKQ1IpICYgMHgwMDAzLCBQT1JUX1BKQ1IpOwogCS8qIHNldCBQVEk1LCBiaXRzIDExLTEwIG9mIFBJQ1IgdG8gMCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BJQ1IpICYgMHhGM0ZGLCBQT1JUX1BJQ1IpOwotCWN0cmxfb3V0dygwLCBQT1JUX1BLQ1IpOwotCWN0cmxfb3V0dygwLCBQT1JUX1BMQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BJQ1IpICYgMHhGM0ZGLCBQT1JUX1BJQ1IpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX1BLQ1IpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX1BMQ1IpOwogCS8qIHNldCBQU0VMMiBiaXRzIDE0LTgsIDUtNCwgb2YgUFNFTDIgdG8gMCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMikgJiAweDAwQzApLCBQT1JUX1BTRUwyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDIpICYgMHgwMEMwKSwgUE9SVF9QU0VMMik7CiAJLyogc2V0IFBTRUwzIGJpdHMgMTQtMTIsIDYtNCwgMi0wIG9mIFBTRUwzIHRvIDAgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTDMpICYgMHgwNzAwKSwgUE9SVF9QU0VMMyk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX1BTRUwzKSAmIDB4MDcwMCksIFBPUlRfUFNFTDMpOwogCiAJLyogRm9yIEhBQyAqLwogCS8qIGJpdDMtMCAgMDEwMDpIQUMgJiBTU0kxIGVuYWJsZSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMSkgJiAweEZGRjApIHwgMHgwMDA0LCBQT1JUX1BTRUwxKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDEpICYgMHhGRkYwKSB8IDB4MDAwNCwgUE9SVF9QU0VMMSk7CiAJLyogYml0MTQgICAgICAxOlNTSV9IQUNfQ0xLIGVuYWJsZSAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUw0KSB8IDB4NDAwMCwgUE9SVF9QU0VMNCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUFNFTDQpIHwgMHg0MDAwLCBQT1JUX1BTRUw0KTsKIAogCS8qIFNILUV0aGVyICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTRUwxKSAmIH4weGZmMDApIHwgMHgyNDAwLCBQT1JUX1BTRUwxKTsKLQljdHJsX291dHcoMHgwLCBQT1JUX1BGQ1IpOwotCWN0cmxfb3V0dygweDAsIFBPUlRfUEZDUik7Ci0JY3RybF9vdXR3KDB4MCwgUE9SVF9QRkNSKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDEpICYgfjB4ZmYwMCkgfCAweDI0MDAsIFBPUlRfUFNFTDEpOworCV9fcmF3X3dyaXRldygweDAsIFBPUlRfUEZDUik7CisJX19yYXdfd3JpdGV3KDB4MCwgUE9SVF9QRkNSKTsKKwlfX3Jhd193cml0ZXcoMHgwLCBQT1JUX1BGQ1IpOwogCiAJLyogTU1DICovCiAJLypzZWxlY3RzIFNDSUYgYW5kIE1NQyBvdGhlciBmdW5jdGlvbnMgKi8KLQljdHJsX291dHcoMHgwMDAxLCBQT1JUX1BTRUwwKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBQT1JUX1BTRUwwKTsKIAkvKiBNTUMgY2xvY2sgb3BlcmF0ZXMgKi8KLQljdHJsX291dGwoY3RybF9pbmwoTVNUUENSMSkgJiB+MHg4LCBNU1RQQ1IxKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QQUNSKSAmIH4weDMwMDAsIFBPUlRfUEFDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUENDUikgJiB+MHhDRkMzLCBQT1JUX1BDQ1IpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChNU1RQQ1IxKSAmIH4weDgsIE1TVFBDUjEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BBQ1IpICYgfjB4MzAwMCwgUE9SVF9QQUNSKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9QQ0NSKSAmIH4weENGQzMsIFBPUlRfUENDUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2g3NzYzcmRwIF9faW5pdG12ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCmluZGV4IGEzMjc3YTIuLjMzMTc0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IGVyYXNlY29uZmlnX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JKHZvaWQpY3RybF9pbmIoMHhiODAwMDAwMCk7CS8qIGR1bW15IHJlYWQgKi8KKwkodm9pZClfX3Jhd19yZWFkYigweGI4MDAwMDAwKTsJLyogZHVtbXkgcmVhZCAqLwogCiAJcHJpbnRrKCJTbmFwR2VhcjogZXJhc2Ugc3dpdGNoIGludGVycnVwdCFcbiIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKaW5kZXggOTg2YTBlNy4uNTIzYWVhNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYwpAQCAtNDEsMTMgKzQxLDEzIEBACiAJCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrID0gMHgwMSA8PCAxOwogCiAJCS8qIENsZWFyIHRoZSAiaXJxInRoIGJpdCBpbiB0aGUgbWFzayBhbmQgc2V0IGl0IGluIHRoZSByZXF1ZXN0ICovCi0JCXZhbCA9IGN0cmxfaW5sKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOworCQl2YWwgPSBfX3Jhd19yZWFkbCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKIAkJdmFsICY9IH5tYXNrOwotCQljdHJsX291dGwodmFsLCAodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKKwkJX19yYXdfd3JpdGVsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CiAKLQkJdmFsID0gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfcmVxdWVzdF9yZWdpc3Rlcik7CisJCXZhbCA9IF9fcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOwogCQl2YWwgfD0gbWFzazsKLQkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfcmVxdWVzdF9yZWdpc3Rlcik7CisJCV9fcmF3X3dyaXRlbCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOwogCX0KIH0KIApAQCAtNTcsOSArNTcsOSBAQAogCQl1bnNpZ25lZCBsb25nIHZhbCwgbWFzayA9IDB4MDEgPDwgMTsKIAogCQkvKiBTZXQgImlycSJ0aCBiaXQgaW4gdGhlIG1hc2sgcmVnaXN0ZXIgKi8KLQkJdmFsID0gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CisJCXZhbCA9IF9fcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwogCQl2YWwgfD0gbWFzazsKLQkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CisJCV9fcmF3X3dyaXRlbCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZDc1MzcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIE5pbWJsZSBNaWNyb3N5c3RlbXMgVElUQU4gc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1vYmoteQkgOj0gc2V0dXAubyBpby5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMzBlOTguLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKglJL08gcm91dGluZXMgZm9yIFRpdGFuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxtYWNoL3RpdGFuLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBvcnQyYWRyKHVuc2lnbmVkIGludCBwb3J0KQotewotICAgICAgICBtYXliZWJhZGlvKCh1bnNpZ25lZCBsb25nKXBvcnQpOwotICAgICAgICByZXR1cm4gcG9ydDsKLX0KLQotdTggdGl0YW5faW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihwb3J0KTsKLSAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7Ci19Ci0KLXU4IHRpdGFuX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgdTggdjsKLQotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgdiA9IGN0cmxfaW5iKHBvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdiA9IGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7Ci0gICAgICAgIGN0cmxfZGVsYXkoKTsKLSAgICAgICAgcmV0dXJuIHY7Ci19Ci0KLXUxNiB0aXRhbl9pbncodW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQpOwotICAgICAgICBlbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbncocG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXUzMiB0aXRhbl9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5sKHBvcnQpOwotICAgICAgICBlbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbncocG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotfQotCi12b2lkIHRpdGFuX291dGJfcCh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotICAgICAgICBjdHJsX2RlbGF5KCk7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0dyh1MTYgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UgaWYgKHBvcnQgPj0gMHgyMDAwKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCB0aXRhbl9vdXRsKHUzMiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRsKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgdGl0YW5faW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLSAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCB0aXRhbl9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLSAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCBfX2lvbWVtICp0aXRhbl9pb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaWYgKFBYU0VHKHBvcnQpKQotCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQ7Ci0KLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQyYWRyKHBvcnQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWU3ZTBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jIC0gU2V0dXAgZm9yIFRpdGFuCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiAgSmFtaWUgTGVuZWhhbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCi17Ci0JLyogZW5hYmxlIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIGV4dGVybmFscyAqLwotCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl90aXRhbiBfX2luaXRtdiA9IHsKLQkubXZfbmFtZSA9CSJUaXRhbiIsCi0KLQkubXZfaW5iID0JdGl0YW5faW5iLAotCS5tdl9pbncgPQl0aXRhbl9pbncsCi0JLm12X2lubCA9CXRpdGFuX2lubCwKLQkubXZfb3V0YiA9CXRpdGFuX291dGIsCi0JLm12X291dHcgPQl0aXRhbl9vdXR3LAotCS5tdl9vdXRsID0JdGl0YW5fb3V0bCwKLQotCS5tdl9pbmJfcCA9CXRpdGFuX2luYl9wLAotCS5tdl9pbndfcCA9CXRpdGFuX2ludywKLQkubXZfaW5sX3AgPQl0aXRhbl9pbmwsCi0JLm12X291dGJfcCA9CXRpdGFuX291dGJfcCwKLQkubXZfb3V0d19wID0JdGl0YW5fb3V0dywKLQkubXZfb3V0bF9wID0JdGl0YW5fb3V0bCwKLQotCS5tdl9pbnNsID0JdGl0YW5faW5zbCwKLQkubXZfb3V0c2wgPQl0aXRhbl9vdXRzbCwKLQotCS5tdl9pb3BvcnRfbWFwID0gdGl0YW5faW9wb3J0X21hcCwKLQotCS5tdl9pbml0X2lycSA9CWluaXRfdGl0YW5faXJxLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKaW5kZXggYjVjNjczYy4uNWM5ODQyNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKQEAgLTcwLDEwICs3MCwxMCBAQAogCXByX2RlYnVnKCIlczogYml0IyVkOiBhZGRyIC0gMHglMDhseCAoc2hpZnQgJWQsIHNldCAlZClcbiIsCiAJCSBfX2Z1bmNfXywgYml0LCBhZGRyLCBzaGlmdCwgc2V0KTsKIAotCXRtcCA9IGN0cmxfaW53KGFkZHIpOworCXRtcCA9IF9fcmF3X3JlYWR3KGFkZHIpOwogCXRtcCAmPSB+KDB4ZiA8PCBzaGlmdCk7CiAJdG1wIHw9IHNldCA8PCBzaGlmdDsKLQljdHJsX291dHcodG1wLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcodG1wLCBhZGRyKTsKIH0KIAogLyoqCkBAIC0xNDIsOSArMTQyLDkgQEAKIAogCWFkZHIgPSBta19pbHNlbF9hZGRyKGlycSk7CiAKLQl0bXAgPSBjdHJsX2ludyhhZGRyKTsKKwl0bXAgPSBfX3Jhd19yZWFkdyhhZGRyKTsKIAl0bXAgJj0gfigweGYgPDwgbWtfaWxzZWxfc2hpZnQoaXJxKSk7Ci0JY3RybF9vdXR3KHRtcCwgYWRkcik7CisJX19yYXdfd3JpdGV3KHRtcCwgYWRkcik7CiAKIAljbGVhcl9iaXQoaXJxLCAmaWxzZWxfbGV2ZWxfbWFwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKaW5kZXggZWZlNGNiOS4uZTI4NDU5MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJMMzIxMCk7CiAKIAkvKiBTZXQgSUNSMC5MVkxNT0RFICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKDB4ZmU0MTAwMDApIHwgKDEgPDwgMjEpLCAweGZlNDEwMDAwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoMHhmZTQxMDAwMCkgfCAoMSA8PCAyMSksIDB4ZmU0MTAwMDApOwogfQogCiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3gzcHJvdG8gX19pbml0bXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggY2I4Y2Y1NS4uMWNlNjM2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMjEsMTIgKzIxLDE1IEBACiBDT05GSUdfRU5UUllfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIAogc3VmZml4LXkgOj0gYmluCi1zdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApICA6PSBnegotc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikgOj0gYnoyCi1zdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpICA6PSBsem1hCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApCTo9IGd6CitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKQk6PSBiejIKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkJOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk8pCTo9IGx6bwogCi10YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5iaW4KLWV4dHJhLXkgKz0gdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEKK3RhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZSB1SW1hZ2UgdUltYWdlLnNyZWMgdUltYWdlLmd6IFwKKwkgICB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5sem8gdUltYWdlLmJpbgorZXh0cmEteSArPSB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCisJICAgdm1saW51eC5iaW4ubHpvCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcm9taW1hZ2UKIAogJChvYmopL3pJbWFnZTogJChvYmopL2NvbXByZXNzZWQvdm1saW51eCBGT1JDRQpAQCAtNDMsMTUgKzQ2LDggQEAKICQob2JqKS9yb21pbWFnZS92bWxpbnV4OiAkKG9iaikvekltYWdlIEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChvYmopL3JvbWltYWdlICRACiAKLUtFUk5FTF9NRU1PUlkgOj0gMHgwMDAwMDAwMAotaWZlcSAoJChDT05GSUdfUE1CX0ZJWEVEKSx5KQotS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKK0tFUk5FTF9NRU1PUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfTUVNT1JZX1NUQVJUKSAmIDB4MWZmZmZmZmZdJykKLWVuZGlmCi1pZmVxICgkKENPTkZJR18yOUJJVCkseSkKLUtFUk5FTF9NRU1PUlkgOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCi0JCSAgICAgJCRbJChDT05GSUdfTUVNT1JZX1NUQVJUKV0nKQotZW5kaWYKIAogS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKQEAgLTgwLDYgKzc2LDkgQEAKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQogCiskKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem8pCisKICQob2JqKS91SW1hZ2UuYnoyOiAkKG9iaikvdm1saW51eC5iaW4uYnoyCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGJ6aXAyKQogCkBAIC04OSw2ICs4OCw5IEBACiAkKG9iaikvdUltYWdlLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbi5sem1hCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bWEpCiAKKyQob2JqKS91SW1hZ2UubHpvOiAkKG9iaikvdm1saW51eC5iaW4ubHpvCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bykKKwogJChvYmopL3VJbWFnZS5iaW46ICQob2JqKS92bWxpbnV4LmJpbgogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxub25lKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDYxODJlY2EuLjVkNjYwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC02LDE0ICs2LDExIEBACiAKIHRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogXAogCQkgICB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCisJCSAgIHZtbGludXguYmluLmx6byBcCiAJCSAgIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCiAKIE9CSkVDVFMgPSAkKG9iaikvaGVhZF8kKEJJVFMpLm8gJChvYmopL21pc2MubyAkKG9iaikvY2FjaGUubwogCi1pZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwotT0JKRUNUUyArPSAkKG9iaikvLi4vLi4va2VybmVsL3NoX2Jpb3MubwotZW5kaWYKLQogIwogIyBJTUFHRV9PRkZTRVQgaXMgdGhlIGxvYWQgb2Zmc2V0IG9mIHRoZSBjb21wcmVzc2lvbiBsb2FkZXIKICMKQEAgLTQ3LDYgKzQ0LDggQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiskKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKIAogT0JKQ09QWUZMQUdTICs9IC1SIC5lbXB0eV96ZXJvX3BhZ2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IGI1MWIxZmMuLjI3MTQwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CiAKIC8qCiAgKiBnemlwIGRlY2xhcmF0aW9ucwpAQCAtNjIsMjkgKzYxLDE1IEBACiAjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi1zaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpCi17Ci0JaW50IGkgPSAwOworI2lmZGVmIENPTkZJR19LRVJORUxfTFpPCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem8uYyIKKyNlbmRpZgogCi0Jd2hpbGUgKCpzKyspCi0JCWkrKzsKLQlyZXR1cm4gaTsKLX0KLQotaW50IHB1dHMoY29uc3QgY2hhciAqcykKLXsKLQlpbnQgbGVuID0gc3RybGVuKHMpOwotCXNoX2Jpb3NfY29uc29sZV93cml0ZShzLCBsZW4pOwotCXJldHVybiBsZW47Ci19Ci0jZWxzZQogaW50IHB1dHMoY29uc3QgY2hhciAqcykKIHsKIAkvKiBUaGlzIHNob3VsZCBiZSB1cGRhdGVkIHRvIHVzZSB0aGUgc2gtc2NpIHJvdXRpbmVzICovCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogdm9pZCogbWVtc2V0KHZvaWQqIHMsIGludCBjLCBzaXplX3QgbikKIHsKQEAgLTEzMiw3ICsxMTcsNyBAQAogCW91dHB1dF9hZGRyID0gKENPTkZJR19NRU1PUllfU1RBUlQgKyAweDIwMDApOwogI2Vsc2UKIAlvdXRwdXRfYWRkciA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpJl90ZXh0K1BBR0VfU0laRSk7Ci0jaWZkZWYgQ09ORklHXzI5QklUCisjaWYgZGVmaW5lZChDT05GSUdfMjlCSVQpCiAJb3V0cHV0X2FkZHIgfD0gUDJTRUc7CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwppbmRleCA1MGFhMGMxLi5iY2IzMWFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYworKysgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwpAQCAtNTUsMjUgKzU1LDIyIEBACiAKIHN0YXRpYyB2b2lkIGhkNjQ0NjFfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gY3RybF9pbncoSEQ2NDQ2MV9OSVJSKTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmV4dF9kZXNjOworCXVuc2lnbmVkIHNob3J0IGludHYgPSBfX3Jhd19yZWFkdyhIRDY0NDYxX05JUlIpOwogCXVuc2lnbmVkIGludCBleHRfaXJxID0gSEQ2NDQ2MV9JUlFCQVNFOwogCiAJaW50diAmPSAoMSA8PCBIRDY0NDYxX0lSUV9OVU0pIC0gMTsKIAotCXdoaWxlIChpbnR2KSB7Ci0JCWlmIChpbnR2ICYgMSkgewotCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7Ci0JCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKLQkJfQotCQlpbnR2ID4+PSAxOwotCQlleHRfaXJxKys7CisJZm9yICg7IGludHY7IGludHYgPj49IDEsIGV4dF9pcnErKykgeworCQlpZiAoIShpbnR2ICYgMSkpCisJCQljb250aW51ZTsKKworCQlnZW5lcmljX2hhbmRsZV9pcnEoZXh0X2lycSk7CiAJfQogfQogCiBpbnQgX19pbml0IHNldHVwX2hkNjQ0NjEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgbmlkID0gY3B1X3RvX25vZGUoYm9vdF9jcHVfZGF0YSk7CiAKIAlpZiAoIU1BQ0hfSEQ2NDQ2MSkKIAkJcmV0dXJuIDA7CkBAIC05MCw5ICs4NywyNiBAQAogCV9fcmF3X3dyaXRldygweGZmZmYsIEhENjQ0NjFfTklNUik7CiAKIAkvKiAgSVJRIDgwIC0+IDk1IGJlbG9uZ3MgdG8gSEQ2NDQ2MSAgKi8KLQlmb3IgKGkgPSBIRDY0NDYxX0lSUUJBU0U7IGkgPCBIRDY0NDYxX0lSUUJBU0UgKyAxNjsgaSsrKQorCWZvciAoaSA9IEhENjQ0NjFfSVJRQkFTRTsgaSA8IEhENjQ0NjFfSVJRQkFTRSArIDE2OyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycTsKKworCQlpcnEgPSBjcmVhdGVfaXJxX25yKGksIG5pZCk7CisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCBob29raW5nIGlycSAlZCBmb3IgSEQ2NDQ2MVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJaWYgKHVubGlrZWx5KGlycSAhPSBpKSkgeworCQkJcHJfZXJyKCIlczogZ290IGlycSAlZCBidXQgd2FudGVkICVkLCBiYWlsaW5nLlxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaXJxLCBpKTsKKwkJCWRlc3Ryb3lfaXJxKGlycSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmaGQ2NDQ2MV9pcnFfY2hpcCwKIAkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOworCX0KIAogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKENPTkZJR19IRDY0NDYxX0lSUSwgaGQ2NDQ2MV9pcnFfZGVtdXgpOwogCXNldF9pcnFfdHlwZShDT05GSUdfSEQ2NDQ2MV9JUlEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzMzFlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE3NTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzcKKyMgVHVlIEZlYiAgOSAxNToyNzowNiAyMDEwCisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CisjIENPTkZJR19TVVBFUkg2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CitDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CitDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX0NPSEVSRU5UPXkKKyMgQ09ORklHX0RNQV9OT05DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1VfVFJBQ0U9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9OUz15CitDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eQorQ09ORklHX0NHUk9VUF9ERVZJQ0U9eQorIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKK0NPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSPXkKKyMgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTU1fT1dORVI9eQorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CitDT05GSUdfVVRTX05TPXkKK0NPTkZJR19JUENfTlM9eQorQ09ORklHX1VTRVJfTlM9eQorQ09ORklHX1BJRF9OUz15CitDT05GSUdfTkVUX05TPXkKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CitDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfQ0dST1VQPXkKKyMgQ09ORklHX0RFQlVHX0JMS19DR1JPVVAgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRD15CisjIENPTkZJR19ERUJVR19DRlFfSU9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKK0NPTkZJR19DUFVfU0hYMz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4Nj15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4NjAwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDIwMDAwMDAwCisjIENPTkZJR18yOUJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1BNQj15CisjIENPTkZJR19QTUJfTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YMlRMQj15CitDT05GSUdfVlNZU0NBTEw9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15CitDT05GSUdfSU9SRU1BUF9GSVhFRD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8yNTZLIGlzIG5vdCBzZXQKK0NPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUI9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEyTUIgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19NRU1PUllfSE9UUExVRz15CitDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKK0NPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0xCitDT05GSUdfS1NNPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBRVg9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCitDT05GSUdfU0hfU0RLNzc4Nj15CisjIENPTkZJR19TSF9VUlFVRUxMIGlzIG5vdCBzZXQKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RJTUVSX1RNVT15CitDT05GSUdfU0hfQ0xLX0NQRz15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPW0KK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPW0KK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkU9bQorQ09ORklHX1NIX0NQVV9GUkVRPXkKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19LRVhFQz15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0dVU0E9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCBlYXJseXByaW50az1zaC1zY2kuMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgbm1pX2RlYnVnPXN0YXRlLGRlYm91bmNlIHJvb3RkZWxheT0xMCIKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0CitDT05GSUdfUENJRUFFUl9JTkpFQ1Q9eQorQ09ORklHX1BDSUVBU1BNPXkKK0NPTkZJR19QQ0lFQVNQTV9ERUJVRz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfREVCVUc9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19QTT15CitDT05GSUdfUE1fREVCVUc9eQorQ09ORklHX1BNX1ZFUkJPU0U9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQorQ09ORklHX0NQVV9JRExFPXkKK0NPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKK0NPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUwyND15CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorQ09ORklHX1BBVEFfUExBVEZPUk09eQorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NRElPX0JJVEJBTkc9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NIX01TSU9GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TSF9TQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfV0RUIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfVkdBX0FSQj15CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CitDT05GSUdfVVNCX002NjU5Mj15CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NQVg2OTAwPXkKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1NIPXkKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorQ09ORklHX1VJTz1tCisjIENPTkZJR19VSU9fQ0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QRFJWX0dFTklSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19BRUMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1NFUkNPUzMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BDSV9HRU5FUklDIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19WTT15CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorQ09ORklHX0tTWU1fVFJBQ0VSPXkKKyMgQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1QX0NPREU9eQorQ09ORklHX0RXQVJGX1VOV0lOREVSPXkKKyMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jCmluZGV4IDM5MWNiZTEuLjNjZWU1OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMKQEAgLTQwLDEwICs0MCwxMCBAQAogCiBzdGF0aWMgaW50IHB2cjJfcmVxdWVzdF9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWlmIChjdHJsX2lubChQVlIyX0RNQV9NT0RFKSAhPSAwKQorCWlmIChfX3Jhd19yZWFkbChQVlIyX0RNQV9NT0RFKSAhPSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JY3RybF9vdXRsKDAsIFBWUjJfRE1BX0xNTU9ERTApOworCV9fcmF3X3dyaXRlbCgwLCBQVlIyX0RNQV9MTU1PREUwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjAsOSArNjAsOSBAQAogCiAJeGZlcl9jb21wbGV0ZSA9IDA7CiAKLQljdHJsX291dGwoY2hhbi0+ZGFyLCBQVlIyX0RNQV9BRERSKTsKLQljdHJsX291dGwoY2hhbi0+Y291bnQsIFBWUjJfRE1BX0NPVU5UKTsKLQljdHJsX291dGwoY2hhbi0+bW9kZSAmIERNQV9NT0RFX01BU0ssIFBWUjJfRE1BX01PREUpOworCV9fcmF3X3dyaXRlbChjaGFuLT5kYXIsIFBWUjJfRE1BX0FERFIpOworCV9fcmF3X3dyaXRlbChjaGFuLT5jb3VudCwgUFZSMl9ETUFfQ09VTlQpOworCV9fcmF3X3dyaXRlbChjaGFuLT5tb2RlICYgRE1BX01PREVfTUFTSywgUFZSMl9ETUFfTU9ERSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCmluZGV4IDM3ZmI1YjguLjgyNzIwODcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwpAQCAtNTIsMTEgKzUyLDE0IEBACiAgKgogICogaXRlcmF0aW9ucyB0byBjb21wbGV0ZSB0aGUgdHJhbnNmZXIuCiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSA9IFRTX1NISUZUOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FsY194bWl0X3NoaWZ0KHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQl1MzIgY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKKwl1MzIgY2hjciA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKKwlpbnQgY250ID0gKChjaGNyICYgQ0hDUl9UU19MT1dfTUFTSykgPj4gQ0hDUl9UU19MT1dfU0hJRlQpIHwKKwkJKChjaGNyICYgQ0hDUl9UU19ISUdIX01BU0spID4+IENIQ1JfVFNfSElHSF9TSElGVCk7CiAKLQlyZXR1cm4gdHNfc2hpZnRbKGNoY3IgJiBDSENSX1RTX01BU0spPj5DSENSX1RTX1NISUZUXTsKKwlyZXR1cm4gdHNfc2hpZnRbY250XTsKIH0KIAogLyoKQEAgLTcwLDEzICs3MywxMyBAQAogCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbiA9IGRldl9pZDsKIAl1MzIgY2hjcjsKIAotCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJY2hjciA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAogCWlmICghKGNoY3IgJiBDSENSX1RFKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJY2hjciAmPSB+KENIQ1JfSUUgfCBDSENSX0RFKTsKLQljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CisJX19yYXdfd3JpdGVsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJd2FrZV91cCgmY2hhbi0+d2FpdF9xdWV1ZSk7CiAKQEAgLTExNSw3ICsxMTgsNyBAQAogCQljaGFuLT5mbGFncyAmPSB+RE1BX1RFSV9DQVBBQkxFOwogCX0KIAotCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKKwlfX3Jhd193cml0ZWwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAljaGFuLT5mbGFncyB8PSBETUFfQ09ORklHVVJFRDsKIAlyZXR1cm4gMDsKQEAgLTEyNiwxMyArMTI5LDEzIEBACiAJaW50IGlycTsKIAl1MzIgY2hjcjsKIAotCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJY2hjciA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAljaGNyIHw9IENIQ1JfREU7CiAKIAlpZiAoY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpCiAJCWNoY3IgfD0gQ0hDUl9JRTsKIAotCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKKwlfX3Jhd193cml0ZWwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAlpZiAoY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpIHsKIAkJaXJxID0gZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pOwpAQCAtMTUwLDkgKzE1Myw5IEBACiAJCWRpc2FibGVfaXJxKGlycSk7CiAJfQogCi0JY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKKwljaGNyID0gX19yYXdfcmVhZGwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCWNoY3IgJj0gfihDSENSX0RFIHwgQ0hDUl9URSB8IENIQ1JfSUUpOwotCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKKwlfX3Jhd193cml0ZWwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfZG1hY194ZmVyX2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCkBAIC0xODMsMTIgKzE4NiwxMiBAQAogCSAqLwogCWlmIChjaGFuLT5zYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKIAkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCi0JCWN0cmxfb3V0bChjaGFuLT5zYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dK1NBUikpOworCQlfX3Jhd193cml0ZWwoY2hhbi0+c2FyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXStTQVIpKTsKIAlpZiAoY2hhbi0+ZGFyIHx8IChtYWNoX2lzX2RyZWFtY2FzdCgpICYmCiAJCQkgIGNoYW4tPmNoYW4gPT0gUFZSMl9DQVNDQURFX0NIQU4pKQotCQljdHJsX291dGwoY2hhbi0+ZGFyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIERBUikpOworCQlfX3Jhd193cml0ZWwoY2hhbi0+ZGFyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIERBUikpOwogCi0JY3RybF9vdXRsKGNoYW4tPmNvdW50ID4+IGNhbGNfeG1pdF9zaGlmdChjaGFuKSwKKwlfX3Jhd193cml0ZWwoY2hhbi0+Y291bnQgPj4gY2FsY194bWl0X3NoaWZ0KGNoYW4pLAogCQkoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIFRDUikpOwogCiAJc2hfZG1hY19lbmFibGVfZG1hKGNoYW4pOwpAQCAtMTk4LDEwICsyMDEsMTAgQEAKIAogc3RhdGljIGludCBzaF9kbWFjX2dldF9kbWFfcmVzaWR1ZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JaWYgKCEoY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpICYgQ0hDUl9ERSkpCisJaWYgKCEoX19yYXdfcmVhZGwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpICYgQ0hDUl9ERSkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpCisJcmV0dXJuIF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpCiAJCSA8PCBjYWxjX3htaXRfc2hpZnQoY2hhbik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hYnJnLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jCmluZGV4IDVlMjI2ODkuLjcyNjIyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hYnJnLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWFicmcuYwpAQCAtODYsOCArODYsOCBAQAogCXVuc2lnbmVkIGxvbmcgZGNyOwogCXVuc2lnbmVkIGludCBpOwogCi0JZGNyID0gY3RybF9pbmwoRE1BQlJHQ1IpOwotCWN0cmxfb3V0bChkY3IgJiB+MHgwMGZmMDAwMywgRE1BQlJHQ1IpOwkvKiBhY2sgYWxsICovCisJZGNyID0gX19yYXdfcmVhZGwoRE1BQlJHQ1IpOworCV9fcmF3X3dyaXRlbChkY3IgJiB+MHgwMGZmMDAwMywgRE1BQlJHQ1IpOwkvKiBhY2sgYWxsICovCiAJZGNyICY9IGRjciA+PiA4OwkvKiBpZ25vcmUgbWFza2VkICovCiAKIAkvKiBVU0Igc3R1ZmYsIGdldCBpdCBvdXQgb2YgdGhlIHdheSBmaXJzdCAqLwpAQCAtMTA5LDE3ICsxMDksMTcgQEAKIHN0YXRpYyB2b2lkIGRtYWJyZ19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgZG1haXJxKQogewogCXVuc2lnbmVkIGxvbmcgZGNyOwotCWRjciA9IGN0cmxfaW5sKERNQUJSR0NSKTsKKwlkY3IgPSBfX3Jhd19yZWFkbChETUFCUkdDUik7CiAJZGNyICY9IH4oMSA8PCAoKGRtYWlycSA+IDEpID8gZG1haXJxICsgMjIgOiBkbWFpcnEgKyA4KSk7Ci0JY3RybF9vdXRsKGRjciwgRE1BQlJHQ1IpOworCV9fcmF3X3dyaXRlbChkY3IsIERNQUJSR0NSKTsKIH0KIAogc3RhdGljIHZvaWQgZG1hYnJnX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGRtYWlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGRjcjsKLQlkY3IgPSBjdHJsX2lubChETUFCUkdDUik7CisJZGNyID0gX19yYXdfcmVhZGwoRE1BQlJHQ1IpOwogCWRjciB8PSAoMSA8PCAoKGRtYWlycSA+IDEpID8gZG1haXJxICsgMjIgOiBkbWFpcnEgKyA4KSk7Ci0JY3RybF9vdXRsKGRjciwgRE1BQlJHQ1IpOworCV9fcmF3X3dyaXRlbChkY3IsIERNQUJSR0NSKTsKIH0KIAogaW50IGRtYWJyZ19yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgZG1haXJxLCB2b2lkKCpoYW5kbGVyKSh2b2lkKiksCkBAIC0xNjUsMTMgKzE2NSwxMyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJETUFCUkc6IERNQUMgY2gwIG5vdCByZXNlcnZlZCFcbiIpOwogI2VuZGlmCiAKLQljdHJsX291dGwoMCwgRE1BQlJHQ1IpOwotCWN0cmxfb3V0bCgwLCBETUFDSENSMCk7Ci0JY3RybF9vdXRsKDB4OTQwMDAwMDAsIERNQVJTUkEpOwkvKiBlbmFibGUgRE1BQlJHIGluIERNQUMgMCAqLworCV9fcmF3X3dyaXRlbCgwLCBETUFCUkdDUik7CisJX19yYXdfd3JpdGVsKDAsIERNQUNIQ1IwKTsKKwlfX3Jhd193cml0ZWwoMHg5NDAwMDAwMCwgRE1BUlNSQSk7CS8qIGVuYWJsZSBETUFCUkcgaW4gRE1BQyAwICovCiAKIAkvKiBlbmFibGUgRE1BQlJHIG1vZGUsIGVuYWJsZSB0aGUgRE1BQyAqLwotCW9yID0gY3RybF9pbmwoRE1BT1IpOwotCWN0cmxfb3V0bChvciB8IERNQU9SX0JSRyB8IERNQU9SX0RNRU4sIERNQU9SKTsKKwlvciA9IF9fcmF3X3JlYWRsKERNQU9SKTsKKwlfX3Jhd193cml0ZWwob3IgfCBETUFPUl9CUkcgfCBETUFPUl9ETUVOLCBETUFPUik7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShETUFCUkdJMCwgZG1hYnJnX2lycSwgSVJRRl9ESVNBQkxFRCwKIAkJCSJETUFCUkcgVVNCIGFkZHJlc3MgZXJyb3IiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYyBiL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYwppbmRleCBhOTMzOWE2Li4yYWNiYzc5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2hlYXJ0YmVhdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEdlbmVyaWMgaGVhcnRiZWF0IGRyaXZlciBmb3IgcmVndWxhciBMRUQgYmFua3MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMTAgIFBhdWwgTXVuZHQKICAqCiAgKiBNb3N0IFNIIHJlZmVyZW5jZSBib2FyZHMgaW5jbHVkZSBhIG51bWJlciBvZiBpbmRpdmlkdWFsIExFRHMgdGhhdCBjYW4KICAqIGJlIGluZGVwZW5kZW50bHkgY29udHJvbGxlZCAoZWl0aGVyIHZpYSBhIHByZS1kZWZpbmVkIGhhcmR3YXJlCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJoZWFydGJlYXQiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMS4yIgogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBkZWZhdWx0X2JpdF9wb3NbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyB9OwogCkBAIC05OCw3ICs5OCw3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQloZC0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwloZC0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICh1bmxpa2VseSghaGQtPmJhc2UpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKIApAQCAtMTE3LDggKzExNywyMCBAQAogCWZvciAoaSA9IDA7IGkgPCBoZC0+bnJfYml0czsgaSsrKQogCQloZC0+bWFzayB8PSAoMSA8PCBoZC0+Yml0X3Bvc1tpXSk7CiAKLQlpZiAoIWhkLT5yZWdzaXplKQotCQloZC0+cmVnc2l6ZSA9IDg7CS8qIGRlZmF1bHQgYWNjZXNzIHNpemUgKi8KKwlpZiAoIWhkLT5yZWdzaXplKSB7CisJCXN3aXRjaCAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNX1RZUEVfTUFTSykgeworCQljYXNlIElPUkVTT1VSQ0VfTUVNXzMyQklUOgorCQkJaGQtPnJlZ3NpemUgPSAzMjsKKwkJCWJyZWFrOworCQljYXNlIElPUkVTT1VSQ0VfTUVNXzE2QklUOgorCQkJaGQtPnJlZ3NpemUgPSAxNjsKKwkJCWJyZWFrOworCQljYXNlIElPUkVTT1VSQ0VfTUVNXzhCSVQ6CisJCWRlZmF1bHQ6CisJCQloZC0+cmVnc2l6ZSA9IDg7CisJCQlicmVhazsKKwkJfQorCX0KIAogCXNldHVwX3RpbWVyKCZoZC0+dGltZXIsIGhlYXJ0YmVhdF90aW1lciwgKHVuc2lnbmVkIGxvbmcpaGQpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlCmluZGV4IDA4YWYxZjQuLjRhNTllNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIFBDSSBzcGVjaWZpYyBrZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzIHVuZGVyIExpbnV4LgogIwotb2JqLXkJCQkJCSs9IHBjaS5vCitvYmoteQkJCQkJKz0gY29tbW9uLm8gcGNpLm8KIAogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkJKz0gcGNpLXNoNzc1MS5vIG9wcy1zaDQubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpCSs9IHBjaS1zaDc3NTEubyBvcHMtc2g0Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCSs9IHBjaS1zaDc3ODAubyBvcHMtc2g0Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCSs9IHBjaS1zaDc3ODAubyBvcHMtc2g0Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCSs9IHBjaS1zaDc3ODAubyBvcHMtc2g0Lm8KLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCSs9IG9wcy1zaDc3ODYubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikJKz0gcGNpZS1zaDc3ODYubyBvcHMtc2g3Nzg2Lm8KIG9iai0kKENPTkZJR19DUFVfU0g1KQkJCSs9IHBjaS1zaDUubyBvcHMtc2g1Lm8KIAogb2JqLSQoQ09ORklHX1NIX0RSRUFNQ0FTVCkJCSs9IG9wcy1kcmVhbWNhc3QubyBmaXh1cHMtZHJlYW1jYXN0Lm8gXApAQCAtMjUsNCArMjUsMyBAQAogb2JqLSQoQ09ORklHX1NIX0xBTkRJU0spCQkrPSBmaXh1cHMtbGFuZGlzay5vCiBvYmotJChDT05GSUdfU0hfTEJPWF9SRTIpCQkrPSBmaXh1cHMtcnRzNzc1MXIyZC5vCiBvYmotJChDT05GSUdfU0hfQ0FZTUFOKQkJCSs9IGZpeHVwcy1jYXltYW4ubwotb2JqLSQoQ09ORklHX1NIX1VSUVVFTEwpCQkrPSBwY2llLXNoNzc4Ni5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2NvbW1vbi5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmYxMzgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9jb21tb24uYwpAQCAtMCwwICsxLDE2MiBAQAorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZWFybHkgb24gYmVmb3JlIFBDSSBzY2FubmluZyBpcyBkb25lCisgKiBhbmQgYWxsIG9mIHRoZSBwY2lfZGV2IGFuZCBwY2lfYnVzIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIGNyZWF0ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZmFrZV9wY2lfZGV2KHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwKKwlpbnQgdG9wX2J1cywgaW50IGJ1c25yLCBpbnQgZGV2Zm4pCit7CisJc3RhdGljIHN0cnVjdCBwY2lfZGV2IGRldjsKKwlzdGF0aWMgc3RydWN0IHBjaV9idXMgYnVzOworCisJZGV2LmJ1cyA9ICZidXM7CisJZGV2LnN5c2RhdGEgPSBob3NlOworCWRldi5kZXZmbiA9IGRldmZuOworCWJ1cy5udW1iZXIgPSBidXNucjsKKwlidXMuc3lzZGF0YSA9IGhvc2U7CisJYnVzLm9wcyA9IGhvc2UtPnBjaV9vcHM7CisKKwlpZihidXNuciAhPSB0b3BfYnVzKQorCQkvKiBGYWtlIGEgcGFyZW50IGJ1cyBzdHJ1Y3R1cmUuICovCisJCWJ1cy5wYXJlbnQgPSAmYnVzOworCWVsc2UKKwkJYnVzLnBhcmVudCA9IE5VTEw7CisKKwlyZXR1cm4gJmRldjsKK30KKworI2RlZmluZSBFQVJMWV9QQ0lfT1AocncsIHNpemUsIHR5cGUpCQkJCQlcCitpbnQgX19pbml0IGVhcmx5XyMjcncjI19jb25maWdfIyNzaXplKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwJCVwKKwlpbnQgdG9wX2J1cywgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB0eXBlIHZhbHVlKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBwY2lfIyNydyMjX2NvbmZpZ18jI3NpemUoCQkJCVwKKwkJZmFrZV9wY2lfZGV2KGhvc2UsIHRvcF9idXMsIGJ1cywgZGV2Zm4pLAkJXAorCQlvZmZzZXQsIHZhbHVlKTsJCQkJCQlcCit9CisKK0VBUkxZX1BDSV9PUChyZWFkLCBieXRlLCB1OCAqKQorRUFSTFlfUENJX09QKHJlYWQsIHdvcmQsIHUxNiAqKQorRUFSTFlfUENJX09QKHJlYWQsIGR3b3JkLCB1MzIgKikKK0VBUkxZX1BDSV9PUCh3cml0ZSwgYnl0ZSwgdTgpCitFQVJMWV9QQ0lfT1Aod3JpdGUsIHdvcmQsIHUxNikKK0VBUkxZX1BDSV9PUCh3cml0ZSwgZHdvcmQsIHUzMikKKworaW50IF9faW5pdCBwY2lfaXNfNjZtaHpfY2FwYWJsZShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCisJCQkJaW50IHRvcF9idXMsIGludCBjdXJyZW50X2J1cykKK3sKKwl1MzIgcGNpX2RldmZuOworCXVuc2lnbmVkIHNob3J0IHZpZDsKKwlpbnQgY2FwNjYgPSAtMTsKKwl1MTYgc3RhdDsKKworCXByaW50ayhLRVJOX0lORk8gIlBDSTogQ2hlY2tpbmcgNjZNSHogY2FwYWJpbGl0aWVzLi4uXG4iKTsKKworCWZvciAocGNpX2RldmZuID0gMDsgcGNpX2RldmZuIDwgMHhmZjsgcGNpX2RldmZuKyspIHsKKwkJaWYgKFBDSV9GVU5DKHBjaV9kZXZmbikpCisJCQljb250aW51ZTsKKwkJaWYgKGVhcmx5X3JlYWRfY29uZmlnX3dvcmQoaG9zZSwgdG9wX2J1cywgY3VycmVudF9idXMsCisJCQkJCSAgIHBjaV9kZXZmbiwgUENJX1ZFTkRPUl9JRCwgJnZpZCkgIT0KKwkJICAgIFBDSUJJT1NfU1VDQ0VTU0ZVTCkKKwkJCWNvbnRpbnVlOworCQlpZiAodmlkID09IDB4ZmZmZikKKwkJCWNvbnRpbnVlOworCisJCS8qIGNoZWNrIDY2TUh6IGNhcGFiaWxpdHkgKi8KKwkJaWYgKGNhcDY2IDwgMCkKKwkJCWNhcDY2ID0gMTsKKwkJaWYgKGNhcDY2KSB7CisJCQllYXJseV9yZWFkX2NvbmZpZ193b3JkKGhvc2UsIHRvcF9idXMsIGN1cnJlbnRfYnVzLAorCQkJCQkgICAgICAgcGNpX2RldmZuLCBQQ0lfU1RBVFVTLCAmc3RhdCk7CisJCQlpZiAoIShzdGF0ICYgUENJX1NUQVRVU182Nk1IWikpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiUENJOiAlMDJ4OiUwMnggbm90IDY2TUh6IGNhcGFibGUuXG4iLAorCQkJCSAgICAgICBjdXJyZW50X2J1cywgcGNpX2RldmZuKTsKKwkJCQljYXA2NiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gY2FwNjYgPiAwOworfQorCitzdGF0aWMgdm9pZCBwY2liaW9zX2VuYWJsZV9lcnIodW5zaWduZWQgbG9uZyBfX2RhdGEpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gKHN0cnVjdCBwY2lfY2hhbm5lbCAqKV9fZGF0YTsKKworCWRlbF90aW1lcigmaG9zZS0+ZXJyX3RpbWVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiByZS1lbmFibGluZyBlcnJvciBJUlEuXG4iKTsKKwllbmFibGVfaXJxKGhvc2UtPmVycl9pcnEpOworfQorCitzdGF0aWMgdm9pZCBwY2liaW9zX2VuYWJsZV9zZXJyKHVuc2lnbmVkIGxvbmcgX19kYXRhKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NoYW5uZWwgKilfX2RhdGE7CisKKwlkZWxfdGltZXIoJmhvc2UtPnNlcnJfdGltZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHJlLWVuYWJsaW5nIHN5c3RlbSBlcnJvciBJUlEuXG4iKTsKKwllbmFibGVfaXJxKGhvc2UtPnNlcnJfaXJxKTsKK30KKwordm9pZCBwY2liaW9zX2VuYWJsZV90aW1lcnMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCWlmIChob3NlLT5lcnJfaXJxKSB7CisJCWluaXRfdGltZXIoJmhvc2UtPmVycl90aW1lcik7CisJCWhvc2UtPmVycl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaG9zZTsKKwkJaG9zZS0+ZXJyX3RpbWVyLmZ1bmN0aW9uID0gcGNpYmlvc19lbmFibGVfZXJyOworCX0KKworCWlmIChob3NlLT5zZXJyX2lycSkgeworCQlpbml0X3RpbWVyKCZob3NlLT5zZXJyX3RpbWVyKTsKKwkJaG9zZS0+c2Vycl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaG9zZTsKKwkJaG9zZS0+c2Vycl90aW1lci5mdW5jdGlvbiA9IHBjaWJpb3NfZW5hYmxlX3NlcnI7CisJfQorfQorCisvKgorICogQSBzaW1wbGUgaGFuZGxlciBmb3IgdGhlIHJlZ3VsYXIgUENJIHN0YXR1cyBlcnJvcnMsIGNhbGxlZCBmcm9tIElSUQorICogY29udGV4dC4KKyAqLwordW5zaWduZWQgaW50IHBjaWJpb3NfaGFuZGxlX3N0YXR1c19lcnJvcnModW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgIHVuc2lnbmVkIGludCBzdGF0dXMsCisJCQkJCSAgc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCXVuc2lnbmVkIGludCBjbWQgPSAwOworCisJaWYgKHN0YXR1cyAmIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBtYXN0ZXIgYWJvcnQsIHBjPTB4JTA4bHhcbiIsIGFkZHIpOworCQljbWQgfD0gUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUOworCX0KKworCWlmIChzdGF0dXMgJiBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogdGFyZ2V0IGFib3J0OiAiKTsKKwkJcGNpYmlvc19yZXBvcnRfc3RhdHVzKFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8CisJCQkJICAgICAgUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUIHwKKwkJCQkgICAgICBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQsIDEpOworCQlwcmludGsoIlxuIik7CisKKwkJY21kIHw9IFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVDsKKwl9CisKKwlpZiAoc3RhdHVzICYgKFBDSV9TVEFUVVNfUEFSSVRZIHwgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHBhcml0eSBlcnJvciBkZXRlY3RlZDogIik7CisJCXBjaWJpb3NfcmVwb3J0X3N0YXR1cyhQQ0lfU1RBVFVTX1BBUklUWSB8CisJCQkJICAgICAgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFksIDEpOworCQlwcmludGsoIlxuIik7CisKKwkJY21kIHw9IFBDSV9TVEFUVVNfUEFSSVRZIHwgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFk7CisKKwkJLyogTm93IGJhY2sgb2ZmIG9mIHRoZSBJUlEgZm9yIGF3aGlsZSAqLworCQlpZiAoaG9zZS0+ZXJyX2lycSkgeworCQkJZGlzYWJsZV9pcnFfbm9zeW5jKGhvc2UtPmVycl9pcnEpOworCQkJaG9zZS0+ZXJyX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJCQlhZGRfdGltZXIoJmhvc2UtPmVycl90aW1lcik7CisJCX0KKwl9CisKKwlyZXR1cm4gY21kOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYwppbmRleCBlZDdmNDg5Li45NDJlZjRmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYwpAQCAtMzksNyArMzksNyBAQAogCQkvKgogCQkgKiBXZSBhbHNvIGFzc3VtZSB0aGF0IGRldi0+ZGV2Zm4gPT0gMAogCQkgKi8KLQkJZGV2LT5yZXNvdXJjZVsxXS5zdGFydAk9IHAtPmlvX3Jlc291cmNlLT5zdGFydCAgKyAweDEwMDsKKwkJZGV2LT5yZXNvdXJjZVsxXS5zdGFydAk9IHAtPnJlc291cmNlc1swXS5zdGFydCAgKyAweDEwMDsKIAkJZGV2LT5yZXNvdXJjZVsxXS5lbmQJPSBkZXYtPnJlc291cmNlWzFdLnN0YXJ0ICsgMHgyMDAgLSAxOwogCiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMKaW5kZXggMTVjYTY1Yy4uMDhiMmQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYwpAQCAtMjIsMTUgKzIyLDMgQEAKIHsKIAlyZXR1cm4gaXJxX3RhYltzbG90XTsKIH0KLQotaW50IHBjaV9maXh1cF9wY2ljKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbikKLXsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDQzZmYsIFNINF9QQ0lJTlRNKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINzc4MF9QQ0lJQkFSKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDgwMDAwMDAsIFNINzc4MF9QQ0lDU0NSMCk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDFiLCBTSDc3ODBfUENJQ1NBUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhmZDAwMDAwMCwgU0g3NzgwX1BDSUNTQ1IxKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMGYsIFNINzc4MF9QQ0lDU0FSMSk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYwppbmRleCA3ODk4ZjE0Li5lMjQ4NTE2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jCkBAIC00Myw3ICs0Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBiY3IxLCBtY3I7CiAKLQliY3IxID0gY3RybF9pbmwoU0g3NzUxX0JDUjEpOworCWJjcjEgPSBfX3Jhd19yZWFkbChTSDc3NTFfQkNSMSk7CiAJYmNyMSB8PSAweDQwMDgwMDAwOwkvKiBFbmFibGUgQml0IDE5IEJSRVFFTiwgc2V0IFBDSUMgdG8gc2xhdmUgKi8KIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGJjcjEsIFNINF9QQ0lCQ1IxKTsKIApAQCAtNTQsNyArNTQsNyBAQAogCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhmYjkwMDA0NywgU0g3NzUxX1BDSUNPTkYxKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4YWIwMDAwMDEsIFNINzc1MV9QQ0lDT05GNCk7CiAKLQltY3IgPSBjdHJsX2lubChTSDc3NTFfTUNSKTsKKwltY3IgPSBfX3Jhd19yZWFkbChTSDc3NTFfTUNSKTsKIAltY3IgPSAobWNyICYgUENJTUNSX01SU0VUX09GRikgJiBQQ0lNQ1JfUkZTSF9PRkY7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBtY3IsIFNINF9QQ0lNQ1IpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZGs3NzgwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZGs3NzgwLmMKaW5kZXggMjUwYjBlZC4uMDkzMGY5OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2RrNzc4MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNkazc3ODAuYwpAQCAtMzEsMjIgKzMxLDMgQEAKIHsKICAgICAgICByZXR1cm4gc2RrNzc4MF9pcnFfdGFiW3Bpbi0xXVtzbG90XTsKIH0KLWludCBwY2lfZml4dXBfcGNpYyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pCi17Ci0JLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHRzLCBzbyB3ZSBrbm93IHdoYXQgdG8gZml4ICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDBDM0ZGLCBTSDc3ODBfUENJSU1SKTsKLQotCS8qIFNldCB1cCBzdGFuZGFyZCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwODAwMDAwMCwgU0g3NzgwX1BDSU1CQVIwKTsJLyogUENJICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDA4MDAwMDAwLCBTSDRfUENJTEFSMCk7CS8qIFNId3kgKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDdGMDAwMDEsIFNINF9QQ0lMU1IwKTsJLyogc2l6ZSAxMjhNIHcvIE1CQVIgKi8KLQotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g3NzgwX1BDSU1CQVIxKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINF9QQ0lMQVIxKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINF9QQ0lMU1IxKTsKLQotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhBQjAwMDgwMSwgU0g3NzgwX1BDSUlCQVIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhBNTAwMEMwMSwgU0g0X1BDSUNSKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2U3NzUxLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZTc3NTEuYwppbmRleCA0NzVmYTlmLi5hNGM3ZDNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZTc3NTEuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZTc3NTEuYwpAQCAtOTcsMTIgKzk3LDEyIEBACiAJKiBtZWFuaW5nIGFsbCBjYWxscyBnbyBzdHJhaWdodCB0aHJvdWdoLi4uIHVzZSBCVUdfT04gdG8KIAkqIGNhdGNoIGVycm9uZW91cyBhc3N1bXB0aW9uLgogCSovCi0JQlVHX09OKGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQgIT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSk7CisJQlVHX09OKGNoYW4tPnJlc291cmNlc1sxXS5zdGFydCAhPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFKTsKIAotCVBDSUNfV1JJVEUoU0g3NzUxX1BDSU1CUiwgY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydCk7CisJUENJQ19XUklURShTSDc3NTFfUENJTUJSLCBjaGFuLT5yZXNvdXJjZXNbMV0uc3RhcnQpOwogCiAJLyogU2V0IElPQlIgZm9yIHdpbmRvdyBjb250YWluaW5nIGFyZWEgc3BlY2lmaWVkIGluIHBjaS5oICovCi0JUENJQ19XUklURShTSDc3NTFfUENJSU9CUiwgKGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydCAmIFNINzc1MV9QQ0lJT0JSX01BU0spKTsKKwlQQ0lDX1dSSVRFKFNINzc1MV9QQ0lJT0JSLCAoY2hhbi0+cmVzb3VyY2VzWzBdLnN0YXJ0ICYgU0g3NzUxX1BDSUlPQlJfTUFTSykpOwogCiAJLyogQWxsIGRvbmUsIG1heSBhcyB3ZWxsIHNheSBzby4uLiAqLwogCXByaW50aygiU0g3NzUxIFBDSTogRmluaXNoZWQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFBDSSBjb250cm9sbGVyXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMKaW5kZXggNzhiZWJlYi4uMGI4MTk5OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqIERpcmVjdCBhY2Nlc3MgdG8gUENJIGhhcmR3YXJlLi4uCiAgKi8KICNkZWZpbmUgQ09ORklHX0NNRChidXMsIGRldmZuLCB3aGVyZSkgXAotCShQMVNFRyB8IChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiB+MykpCisJKDB4ODAwMDAwMDAgfCAoYnVzLT5udW1iZXIgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgfjMpKQogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNoNF9wY2lfbG9jayk7CiAKQEAgLTEwMiwzNCArMTAyLDYgQEAKIAkud3JpdGUJCT0gc2g0X3BjaV93cml0ZSwKIH07CiAKLS8qCi0gKiBOb3QgcmVhbGx5IHJlbGF0ZWQgdG8gcGNpX29wcywgYnV0IGl0J3MgY29tbW9uIGFuZCBub3Qgd29ydGggc2hvdmluZwotICogc29tZXdoZXJlIGVsc2UgZm9yIG5vdy4uCi0gKi8KLWludCBfX2luaXQgc2g0X3BjaV9jaGVja19kaXJlY3Qoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKQotewotCS8qCi0JICogQ2hlY2sgaWYgY29uZmlndXJhdGlvbiB3b3Jrcy4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgdG1wID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINF9QQ0lQQVIpOwotCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCBQMVNFRywgU0g0X1BDSVBBUik7Ci0KLQlpZiAocGNpX3JlYWRfcmVnKGNoYW4sIFNINF9QQ0lQQVIpID09IFAxU0VHKSB7Ci0JCXBjaV93cml0ZV9yZWcoY2hhbiwgdG1wLCBTSDRfUENJUEFSKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBVc2luZyBjb25maWd1cmF0aW9uIHR5cGUgMVxuIik7Ci0JCXJlcXVlc3RfcmVnaW9uKGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSVBBUiwgOCwKLQkJCSAgICAgICAiUENJIGNvbmYxIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXBjaV93cml0ZV9yZWcoY2hhbiwgdG1wLCBTSDRfUENJUEFSKTsKLQotCXByaW50ayhLRVJOX0VSUiAiUENJOiAlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCiBpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIHBjaV9maXh1cF9wY2ljKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbikKIHsKIAkvKiBOb3RoaW5nIHRvIGRvLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktZHJlYW1jYXN0LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1kcmVhbWNhc3QuYwppbmRleCAyMTBmOWQ0Li42MzM2OTQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1kcmVhbWNhc3QuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1kcmVhbWNhc3QuYwpAQCAtMjUsMjUgKzI1LDI1IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvcGNpLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ2Fwc3BjaV9pb19yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJHQVBTUENJIElPIiwKLQkuc3RhcnQJPSBHQVBTUENJX0JCQV9DT05GSUcsCi0JLmVuZAk9IEdBUFNQQ0lfQkJBX0NPTkZJRyArIEdBUFNQQ0lfQkJBX0NPTkZJR19TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnYXBzcGNpX21lbV9yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJHQVBTUENJIG1lbSIsCi0JLnN0YXJ0CT0gR0FQU1BDSV9ETUFfQkFTRSwKLQkuZW5kCT0gR0FQU1BDSV9ETUFfQkFTRSArIEdBUFNQQ0lfRE1BX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnYXBzcGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiR0FQU1BDSSBJTyIsCisJCS5zdGFydAk9IEdBUFNQQ0lfQkJBX0NPTkZJRywKKwkJLmVuZAk9IEdBUFNQQ0lfQkJBX0NPTkZJRyArIEdBUFNQQ0lfQkJBX0NPTkZJR19TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LCAgeworCQkubmFtZQk9ICJHQVBTUENJIG1lbSIsCisJCS5zdGFydAk9IEdBUFNQQ0lfRE1BX0JBU0UsCisJCS5lbmQJPSBHQVBTUENJX0RNQV9CQVNFICsgR0FQU1BDSV9ETUFfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jaGFubmVsIGRyZWFtY2FzdF9wY2lfY29udHJvbGxlciA9IHsKIAkucGNpX29wcwk9ICZnYXBzcGNpX3BjaV9vcHMsCi0JLmlvX3Jlc291cmNlCT0gJmdhcHNwY2lfaW9fcmVzb3VyY2UsCisJLnJlc291cmNlcwk9IGdhcHNwY2lfcmVzb3VyY2VzLAorCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGdhcHNwY2lfcmVzb3VyY2VzKSwKIAkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKLQkubWVtX3Jlc291cmNlCT0gJmdhcHNwY2lfbWVtX3Jlc291cmNlLAogCS5tZW1fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKIH07CiAKQEAgLTk1LDggKzk1LDYgQEAKIAlvdXRsKDB4MDAwMDIwMDEsIEdBUFNQQ0lfQkJBX0NPTkZJRysweDEwKTsKIAlvdXRsKDB4MDEwMDAwMDAsIEdBUFNQQ0lfQkJBX0NPTkZJRysweDE0KTsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZkcmVhbWNhc3RfcGNpX2NvbnRyb2xsZXIpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZkcmVhbWNhc3RfcGNpX2NvbnRyb2xsZXIpOwogfQogYXJjaF9pbml0Y2FsbChnYXBzcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmggYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDQuaAppbmRleCAzZDUyOTZjLi5jYmY3NjNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDQuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDQuaApAQCAtNDksNiArNDksMTcgQEAKICAgI2RlZmluZSBTSDRfUENJSU5UX01XUEQJICAweDAwMDAwMDAyCS8qIE1hc3RlciBXcml0ZSBQRVJSIERldGVjdCAqLwogICAjZGVmaW5lIFNINF9QQ0lJTlRfTVJQRAkgIDB4MDAwMDAwMDEJLyogTWFzdGVyIFJlYWQgUEVSUiBEZXRlY3QgKi8KICNkZWZpbmUgU0g0X1BDSUlOVE0JCTB4MTE4CQkvKiBQQ0kgSW50ZXJydXB0IE1hc2sgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9UVEFESU0JICBCSVQoMTQpCS8qIFRhcmdldC10YXJnZXQgYWJvcnQgaW50ZXJydXB0ICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fVE1UT0lNCSAgQklUKDkpCS8qIFRhcmdldCByZXRyeSB0aW1lb3V0ICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fTURFSU0JICBCSVQoOCkJLyogTWFzdGVyIGZ1bmN0aW9uIGRpc2FibGUgZXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9BUEVESU0JICBCSVQoNykJLyogQWRkcmVzcyBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fU0RJTQkgIEJJVCg2KQkvKiBTRVJSIGRldGVjdGlvbiAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX0RQRUlUV00JICBCSVQoNSkJLyogRGF0YSBwYXJpdHkgZXJyb3IgZm9yIHRhcmdldCB3cml0ZSAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1BFRElUUk0JICBCSVQoNCkJLyogUEVSUiBkZXRlY3Rpb24gZm9yIHRhcmdldCByZWFkICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fVEFESU1NCSAgQklUKDMpCS8qIFRhcmdldCBhYm9ydCBmb3IgbWFzdGVyICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fTUFESU1NCSAgQklUKDIpCS8qIE1hc3RlciBhYm9ydCBmb3IgbWFzdGVyICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fTVdQRElNCSAgQklUKDEpCS8qIE1hc3RlciB3cml0ZSBkYXRhIHBhcml0eSBlcnJvciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX01SRFBFSU0JICBCSVQoMCkJLyogTWFzdGVyIHJlYWQgZGF0YSBwYXJpdHkgZXJyb3IgKi8KICNkZWZpbmUgU0g0X1BDSUFMUgkJMHgxMUMJCS8qIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g0X1BDSUNMUgkJMHgxMjAJCS8qIEVycm9yIENvbW1hbmQvRGF0YSAqLwogICAjZGVmaW5lIFNINF9QQ0lDTFJfTVBJTwkgIDB4ODAwMDAwMDAKQEAgLTYxLDcgKzcyLDcgQEAKICNkZWZpbmUgU0g0X1BDSUFJTlQJCTB4MTMwCQkvKiBBcmJpdGVyIEludGVycnVwdCBSZWdpc3RlciAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX01CS04JICAweDAwMDAyMDAwCS8qIE1hc3RlciBCcm9rZW4gSW50ZXJydXB0ICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfVEJUTwkgIDB4MDAwMDEwMDAJLyogVGFyZ2V0IEJ1cyBUaW1lIE91dCAqLwotICAjZGVmaW5lIFNINF9QQ0lBSU5UX01CVE8JICAweDAwMDAxMDAwCS8qIE1hc3RlciBCdXMgVGltZSBPdXQgKi8KKyAgI2RlZmluZSBTSDRfUENJQUlOVF9NQlRPCSAgMHgwMDAwMDgwMAkvKiBNYXN0ZXIgQnVzIFRpbWUgT3V0ICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfVEFCVAkgIDB4MDAwMDAwMDgJLyogVGFyZ2V0IEFib3J0ICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfTUFCVAkgIDB4MDAwMDAwMDQJLyogTWFzdGVyIEFib3J0ICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfUkRQRQkgIDB4MDAwMDAwMDIJLyogUmVhZCBEYXRhIFBhcml0eSBFcnJvciAqLwpAQCAtMTUxLDcgKzE2Miw2IEBACiAKIC8qIGFyY2gvc2gva2VybmVsL2RyaXZlcnMvcGNpL29wcy1zaDQuYyAqLwogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHNoNF9wY2lfb3BzOwotaW50IHNoNF9wY2lfY2hlY2tfZGlyZWN0KHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbik7CiBpbnQgcGNpX2ZpeHVwX3BjaWMoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKTsKIAogc3RydWN0IHNoNF9wY2lfYWRkcmVzc19zcGFjZSB7CkBAIC0xNjcsMTMgKzE3NywxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHBjaV93cml0ZV9yZWcoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuLAogCQkJCSB1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgbG9uZyByZWcpCiB7Ci0JY3RybF9vdXRsKHZhbCwgY2hhbi0+cmVnX2Jhc2UgKyByZWcpOworCV9fcmF3X3dyaXRlbCh2YWwsIGNoYW4tPnJlZ19iYXNlICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBjaV9yZWFkX3JlZyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4sCiAJCQkJCSB1bnNpZ25lZCBsb25nIHJlZykKIHsKLQlyZXR1cm4gY3RybF9pbmwoY2hhbi0+cmVnX2Jhc2UgKyByZWcpOworCXJldHVybiBfX3Jhd19yZWFkbChjaGFuLT5yZWdfYmFzZSArIHJlZyk7CiB9CiAKICNlbmRpZiAvKiBfX1BDSV9TSDRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuYwppbmRleCA4NzNlZDJiLi4wYmYyOTZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuYwpAQCAtODksMTQgKzg5LDEzIEBACiAJcmV0dXJuIElSUV9OT05FOwogfQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNV9pb19yZXNvdXJjZSA9IHsgLyogcGxhY2UgaG9sZGVyICovIH07Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNV9tZW1fcmVzb3VyY2UgPSB7IC8qIHBsYWNlIGhvbGRlciAqLyB9Oworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDVfcGNpX3Jlc291cmNlc1syXTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBzaDVwY2lfY29udHJvbGxlciA9IHsKIAkucGNpX29wcwkJPSAmc2g1X3BjaV9vcHMsCi0JLm1lbV9yZXNvdXJjZQkJPSAmc2g1X21lbV9yZXNvdXJjZSwKKwkucmVzb3VyY2VzCQk9IHNoNV9wY2lfcmVzb3VyY2VzLAorCS5ucl9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShzaDVfcGNpX3Jlc291cmNlcyksCiAJLm1lbV9vZmZzZXQJCT0gMHgwMDAwMDAwMCwKLQkuaW9fcmVzb3VyY2UJCT0gJnNoNV9pb19yZXNvdXJjZSwKIAkuaW9fb2Zmc2V0CQk9IDB4MDAwMDAwMDAsCiB9OwogCkBAIC0yMTAsMTQgKzIwOSwxMiBAQAogICAgICAgICBTSDVQQ0lfV1JJVEUoQUlOVE0sIH4wKTsKICAgICAgICAgU0g1UENJX1dSSVRFKFBJTlRNLCB+MCk7CiAKLQlzaDVfaW9fcmVzb3VyY2Uuc3RhcnQgPSBQQ0lfSU9fQVJFQTsKLQlzaDVfaW9fcmVzb3VyY2UuZW5kID0gUENJX0lPX0FSRUEgKyAweDEwMDAwOworCXNoNV9wY2lfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gUENJX0lPX0FSRUE7CisJc2g1X3BjaV9yZXNvdXJjZXNbMF0uZW5kID0gUENJX0lPX0FSRUEgKyAweDEwMDAwOwogCi0Jc2g1X21lbV9yZXNvdXJjZS5zdGFydCA9IG1lbVN0YXJ0OwotCXNoNV9tZW1fcmVzb3VyY2UuZW5kID0gbWVtU3RhcnQgKyBtZW1TaXplOworCXNoNV9wY2lfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gbWVtU3RhcnQ7CisJc2g1X3BjaV9yZXNvdXJjZXNbMV0uZW5kID0gbWVtU3RhcnQgKyBtZW1TaXplOwogCi0JcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJnNoNXBjaV9jb250cm9sbGVyKTsKLQotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmc2g1cGNpX2NvbnRyb2xsZXIpOwogfQogYXJjaF9pbml0Y2FsbChzaDVwY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5oCmluZGV4IGYyNzc2MjguLjNmMDFkZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5oCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5oCkBAIC04NiwxNCArODYsMTQgQEAKIC8qICNkZWZpbmUgUENJU0g1X1ZDUl9SRUcoeCkgICAgICAgICAgICAgICAgKCBTSDVQQ0lfVkNSX0JBU0UgKFBDSVNINV9WQ1JfIyN4KSkgKi8KIAogLyogV3JpdGUgSS9PIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBTSDVQQ0lfV1JJVEUocmVnLHZhbCkgICAgICAgIGN0cmxfb3V0bCgodTMyKSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCi0jZGVmaW5lIFNINVBDSV9XUklURV9TSE9SVChyZWcsdmFsKSAgY3RybF9vdXR3KCh1MTYpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKLSNkZWZpbmUgU0g1UENJX1dSSVRFX0JZVEUocmVnLHZhbCkgICBjdHJsX291dGIoKHU4KSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9XUklURShyZWcsdmFsKSAgICAgICAgX19yYXdfd3JpdGVsKCh1MzIpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1dSSVRFX1NIT1JUKHJlZyx2YWwpICBfX3Jhd193cml0ZXcoKHUxNikodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfV1JJVEVfQllURShyZWcsdmFsKSAgIF9fcmF3X3dyaXRlYigodTgpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKIAogLyogUmVhZCBJL08gZnVuY3Rpb25zICovCi0jZGVmaW5lIFNINVBDSV9SRUFEKHJlZykgICAgICAgICAgICAgY3RybF9pbmwoUENJU0g1X0lDUl9SRUcocmVnKSkKLSNkZWZpbmUgU0g1UENJX1JFQURfU0hPUlQocmVnKSAgICAgICBjdHJsX2ludyhQQ0lTSDVfSUNSX1JFRyhyZWcpKQotI2RlZmluZSBTSDVQQ0lfUkVBRF9CWVRFKHJlZykgICAgICAgIGN0cmxfaW5iKFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9SRUFEKHJlZykgICAgICAgICAgICAgX19yYXdfcmVhZGwoUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1JFQURfU0hPUlQocmVnKSAgICAgICBfX3Jhd19yZWFkdyhQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfUkVBRF9CWVRFKHJlZykgICAgICAgIF9fcmF3X3JlYWRiKFBDSVNINV9JQ1JfUkVHKHJlZykpCiAKIC8qIFNldCBQQ0kgY29uZmlnIGJpdHMgKi8KICNkZWZpbmUgU0VUX0NPTkZJR19CSVRTKGJ1cyxkZXZmbix3aGVyZSkgICgoKChidXMpIDw8IDE2KSB8ICgoZGV2Zm4pIDw8IDgpIHwgKCh3aGVyZSkgJiB+MykpIHwgMHg4MDAwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmMKaW5kZXggNzBjMTk5OS4uMTc4MTFlNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmMKQEAgLTQ0LDI1ICs0NCwyNSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc1MV9pb19yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJTSDc3NTFfSU8iLAotCS5zdGFydAk9IFNINzc1MV9QQ0lfSU9fQkFTRSwKLQkuZW5kCT0gU0g3NzUxX1BDSV9JT19CQVNFICsgU0g3NzUxX1BDSV9JT19TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc1MV9tZW1fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiU0g3NzUxX21lbSIsCi0JLnN0YXJ0CT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSwKLQkuZW5kCT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSArIFNINzc1MV9QQ0lfTUVNX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc1MV9wY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJTSDc3NTFfSU8iLAorCQkuc3RhcnQJPSBTSDc3NTFfUENJX0lPX0JBU0UsCisJCS5lbmQJPSBTSDc3NTFfUENJX0lPX0JBU0UgKyBTSDc3NTFfUENJX0lPX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCisJfSwgeworCQkubmFtZQk9ICJTSDc3NTFfbWVtIiwKKwkJLnN0YXJ0CT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSwKKwkJLmVuZAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UgKyBTSDc3NTFfUENJX01FTV9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBzaDc3NTFfcGNpX2NvbnRyb2xsZXIgPSB7CiAJLnBjaV9vcHMJPSAmc2g0X3BjaV9vcHMsCi0JLm1lbV9yZXNvdXJjZQk9ICZzaDc3NTFfbWVtX3Jlc291cmNlLAorCS5yZXNvdXJjZXMJPSBzaDc3NTFfcGNpX3Jlc291cmNlcywKKwkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3NTFfcGNpX3Jlc291cmNlcyksCiAJLm1lbV9vZmZzZXQJPSAweDAwMDAwMDAwLAotCS5pb19yZXNvdXJjZQk9ICZzaDc3NTFfaW9fcmVzb3VyY2UsCiAJLmlvX29mZnNldAk9IDB4MDAwMDAwMDAsCiAJLmlvX21hcF9iYXNlCT0gU0g3NzUxX1BDSV9JT19CQVNFLAogfTsKQEAgLTc5LDcgKzc5LDYgQEAKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSAmc2g3NzUxX3BjaV9jb250cm9sbGVyOwogCXVuc2lnbmVkIGludCBpZDsKIAl1MzIgd29yZCwgcmVnOwotCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogU3RhcnRpbmcgaW50aWFsaXphdGlvbi5cbiIpOwogCkBAIC05MywxMyArOTIsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKChyZXQgPSBzaDRfcGNpX2NoZWNrX2RpcmVjdChjaGFuKSkgIT0gMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIFNldCB0aGUgQkNSJ3MgdG8gZW5hYmxlIFBDSSBhY2Nlc3MgKi8KLQlyZWcgPSBjdHJsX2lubChTSDc3NTFfQkNSMSk7CisJcmVnID0gX19yYXdfcmVhZGwoU0g3NzUxX0JDUjEpOwogCXJlZyB8PSAweDgwMDAwOwotCWN0cmxfb3V0bChyZWcsIFNINzc1MV9CQ1IxKTsKKwlfX3Jhd193cml0ZWwocmVnLCBTSDc3NTFfQkNSMSk7CiAKIAkvKiBUdXJuIHRoZSBjbG9ja3MgYmFjayBvbiAobm90IGRvbmUgaW4gcmVzZXQpKi8KIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDAsIFNINF9QQ0lDTEtSKTsKQEAgLTEzMiwxMyArMTI4LDEzIEBACiAJLyogU2V0IHRoZSBsb2NhbCAxNk1CIFBDSSBtZW1vcnkgc3BhY2Ugd2luZG93IHRvCiAJICogdGhlIGxvd2VzdCBQQ0kgbWFwcGVkIGFkZHJlc3MKIAkgKi8KLQl3b3JkID0gY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydCAmIFNINF9QQ0lNQlJfTUFTSzsKKwl3b3JkID0gY2hhbi0+cmVzb3VyY2VzWzFdLnN0YXJ0ICYgU0g0X1BDSU1CUl9NQVNLOwogCXByX2RlYnVnKCJQQ0k6IFNldHRpbmcgdXBwZXIgYml0cyBvZiBNZW1vcnkgd2luZG93IHRvIDB4JXhcbiIsIHdvcmQpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCAsIFNINF9QQ0lNQlIpOwogCiAJLyogTWFrZSBzdXJlIHRoZSBNU0IncyBvZiBJTyB3aW5kb3cgYXJlIHNldCB0byBhY2Nlc3MgUENJIHNwYWNlCiAJICogY29ycmVjdGx5ICovCi0Jd29yZCA9IGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydCAmIFNINF9QQ0lJT0JSX01BU0s7CisJd29yZCA9IGNoYW4tPnJlc291cmNlc1swXS5zdGFydCAmIFNINF9QQ0lJT0JSX01BU0s7CiAJcHJfZGVidWcoIlBDSTogU2V0dGluZyB1cHBlciBiaXRzIG9mIElPIHdpbmRvdyB0byAweCV4XG4iLCB3b3JkKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lJT0JSKTsKIApAQCAtMTU5LDEzICsxNTUsMTMgQEAKIAkJcmV0dXJuIC0xOwogCiAJLyogY29uZmlndXJlIHRoZSB3YWl0IGNvbnRyb2wgcmVnaXN0ZXJzICovCi0Jd29yZCA9IGN0cmxfaW5sKFNINzc1MV9XQ1IxKTsKKwl3b3JkID0gX19yYXdfcmVhZGwoU0g3NzUxX1dDUjEpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSVdDUjEpOwotCXdvcmQgPSBjdHJsX2lubChTSDc3NTFfV0NSMik7CisJd29yZCA9IF9fcmF3X3JlYWRsKFNINzc1MV9XQ1IyKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lXQ1IyKTsKLQl3b3JkID0gY3RybF9pbmwoU0g3NzUxX1dDUjMpOworCXdvcmQgPSBfX3Jhd19yZWFkbChTSDc3NTFfV0NSMyk7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJV0NSMyk7Ci0Jd29yZCA9IGN0cmxfaW5sKFNINzc1MV9NQ1IpOworCXdvcmQgPSBfX3Jhd19yZWFkbChTSDc3NTFfTUNSKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lNQ1IpOwogCiAJLyogTk9URTogSSdtIGlnbm9yaW5nIHRoZSBQQ0kgZXJyb3IgSVJRcyBmb3Igbm93Li4KQEAgLTE4MCw4ICsxNzYsNiBAQAogCXdvcmQgPSBTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX0NGSU4gfCBTSDRfUENJQ1JfQVJCTTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lDUik7CiAKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjaGFuKTsKLQotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjaGFuKTsKIH0KIGFyY2hfaW5pdGNhbGwoc2g3NzUxX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKaW5kZXggMzIzYjkyZC4uZmZkY2JmMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTG93LUxldmVsIFBDSSBTdXBwb3J0IGZvciB0aGUgU0g3NzgwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTExLDUyICsxMSwyNDAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg1X2lvX3Jlc291cmNlID0gewotCS5uYW1lCT0gIlNINzc4NV9JTyIsCi0JLnN0YXJ0CT0gU0g3NzgwX1BDSV9JT19CQVNFLAotCS5lbmQJPSBTSDc3ODBfUENJX0lPX0JBU0UgKyBTSDc3ODBfUENJX0lPX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg1X21lbV9yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJTSDc3ODVfbWVtIiwKLQkuc3RhcnQJPSBTSDc3ODBfUENJX01FTU9SWV9CQVNFLAotCS5lbmQJPSBTSDc3ODBfUENJX01FTU9SWV9CQVNFICsgU0g3NzgwX1BDSV9NRU1fU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg1X3BjaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIlBDSSBJTyIsCisJCS5zdGFydAk9IDB4MTAwMCwKKwkJLmVuZAk9IFNaXzRNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LCB7CisJCS5uYW1lCT0gIlBDSSBNRU0gMCIsCisJCS5zdGFydAk9IDB4ZmQwMDAwMDAsCisJCS5lbmQJPSAweGZkMDAwMDAwICsgU1pfMTZNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkubmFtZQk9ICJQQ0kgTUVNIDEiLAorCQkuc3RhcnQJPSAweDEwMDAwMDAwLAorCQkuZW5kCT0gMHgxMDAwMDAwMCArIFNaXzY0TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLyoKKwkJICogMzItYml0IG9ubHkgcmVzb3VyY2VzIG11c3QgYmUgbGFzdC4KKwkJICovCisJCS5uYW1lCT0gIlBDSSBNRU0gMiIsCisJCS5zdGFydAk9IDB4YzAwMDAwMDAsCisJCS5lbmQJPSAweGMwMDAwMDAwICsgU1pfNTEyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgc2g3NzgwX3BjaV9jb250cm9sbGVyID0gewogCS5wY2lfb3BzCT0gJnNoNF9wY2lfb3BzLAotCS5tZW1fcmVzb3VyY2UJPSAmc2g3Nzg1X21lbV9yZXNvdXJjZSwKLQkubWVtX29mZnNldAk9IDB4MDAwMDAwMDAsCi0JLmlvX3Jlc291cmNlCT0gJnNoNzc4NV9pb19yZXNvdXJjZSwKLQkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKLQkuaW9fbWFwX2Jhc2UJPSBTSDc3ODBfUENJX0lPX0JBU0UsCisJLnJlc291cmNlcwk9IHNoNzc4NV9wY2lfcmVzb3VyY2VzLAorCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4NV9wY2lfcmVzb3VyY2VzKSwKKwkuaW9fb2Zmc2V0CT0gMCwKKwkubWVtX29mZnNldAk9IDAsCisJLmlvX21hcF9iYXNlCT0gMHhmZTIwMDAwMCwKKwkuc2Vycl9pcnEJPSBldnQyaXJxKDB4YTAwKSwKKwkuZXJyX2lycQk9IGV2dDJpcnEoMHhhYTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwIHNoNzc4MF9wY2lfbWFwID0gewotCS53aW5kb3cwCT0gewotI2lmIGRlZmluZWQoQ09ORklHXzMyQklUKQotCQkuYmFzZQk9IFNINzc4MF8zMkJJVF9ERFJfQkFTRV9BRERSLAotCQkuc2l6ZQk9IDB4NDAwMDAwMDAsCi0jZWxzZQotCQkuYmFzZQk9IFNINzc4MF9DUzBfQkFTRV9BRERSLAotCQkuc2l6ZQk9IDB4MjAwMDAwMDAsCi0jZW5kaWYKLQl9LAorc3RydWN0IHBjaV9lcnJvcnMgeworCXVuc2lnbmVkIGludAltYXNrOworCWNvbnN0IGNoYXIJKnN0cjsKK30gcGNpX2FyYml0ZXJfZXJyb3JzW10gPSB7CisJeyBTSDRfUENJQUlOVF9NQktOLAkibWFzdGVyIGJyb2tlbiIgfSwKKwl7IFNINF9QQ0lBSU5UX1RCVE8sCSJ0YXJnZXQgYnVzIHRpbWUgb3V0IiB9LAorCXsgU0g0X1BDSUFJTlRfTUJUTywJIm1hc3RlciBidXMgdGltZSBvdXQiIH0sCisJeyBTSDRfUENJQUlOVF9UQUJULAkidGFyZ2V0IGFib3J0IiB9LAorCXsgU0g0X1BDSUFJTlRfTUFCVCwJIm1hc3RlciBhYm9ydCIgfSwKKwl7IFNINF9QQ0lBSU5UX1JEUEUsCSJyZWFkIGRhdGEgcGFyaXR5IGVycm9yIiB9LAorCXsgU0g0X1BDSUFJTlRfV0RQRSwJIndyaXRlIGRhdGEgcGFyaXR5IGVycm9yIiB9LAorfSwgcGNpX2ludGVycnVwdF9lcnJvcnNbXSA9IHsKKwl7IFNINF9QQ0lJTlRfTUxDSywJIm1hc3RlciBsb2NrIGVycm9yIiB9LAorCXsgU0g0X1BDSUlOVF9UQUJULAkidGFyZ2V0LXRhcmdldCBhYm9ydCIgfSwKKwl7IFNINF9QQ0lJTlRfVFJFVCwJInRhcmdldCByZXRyeSB0aW1lIG91dCIgfSwKKwl7IFNINF9QQ0lJTlRfTUZERSwJIm1hc3RlciBmdW5jdGlvbiBkaXNhYmxlIGVyb3JyIiB9LAorCXsgU0g0X1BDSUlOVF9QUlRZLAkiYWRkcmVzcyBwYXJpdHkgZXJyb3IiIH0sCisJeyBTSDRfUENJSU5UX1NFUlIsCSJTRVJSIiB9LAorCXsgU0g0X1BDSUlOVF9UV0RQLAkiZGF0YSBwYXJpdHkgZXJyb3IgZm9yIHRhcmdldCB3cml0ZSIgfSwKKwl7IFNINF9QQ0lJTlRfVFJEUCwJIlBFUlIgZGV0ZWN0ZWQgZm9yIHRhcmdldCByZWFkIiB9LAorCXsgU0g0X1BDSUlOVF9NVEFCVCwJInRhcmdldCBhYm9ydCBmb3IgbWFzdGVyIiB9LAorCXsgU0g0X1BDSUlOVF9NTUFCVCwJIm1hc3RlciBhYm9ydCBmb3IgbWFzdGVyIiB9LAorCXsgU0g0X1BDSUlOVF9NV1BELAkibWFzdGVyIHdyaXRlIGRhdGEgcGFyaXR5IGVycm9yIiB9LAorCXsgU0g0X1BDSUlOVF9NUlBELAkibWFzdGVyIHJlYWQgZGF0YSBwYXJpdHkgZXJyb3IiIH0sCiB9OwogCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2g3NzgwX3BjaV9lcnJfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGNtZDsKKwlpbnQgaTsKKworCWFkZHIgPSBfX3Jhd19yZWFkbChob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBTFIpOworCisJLyoKKwkgKiBIYW5kbGUgc3RhdHVzIGVycm9ycy4KKwkgKi8KKwlzdGF0dXMgPSBfX3Jhd19yZWFkdyhob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCWlmIChzdGF0dXMgJiAoUENJX1NUQVRVU19QQVJJVFkgfAorCQkgICAgICBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSB8CisJCSAgICAgIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCB8CisJCSAgICAgIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8CisJCSAgICAgIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCkpIHsKKwkJY21kID0gcGNpYmlvc19oYW5kbGVfc3RhdHVzX2Vycm9ycyhhZGRyLCBzdGF0dXMsIGhvc2UpOworCQlpZiAobGlrZWx5KGNtZCkpCisJCQlfX3Jhd193cml0ZXcoY21kLCBob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCX0KKworCS8qCisJICogSGFuZGxlIGFyYml0ZXIgZXJyb3JzLgorCSAqLworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFJTlQpOworCWZvciAoaSA9IGNtZCA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9hcmJpdGVyX2Vycm9ycyk7IGkrKykgeworCQlpZiAoc3RhdHVzICYgcGNpX2FyYml0ZXJfZXJyb3JzW2ldLm1hc2spIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6ICVzLCBhZGRyPSUwOGx4XG4iLAorCQkJICAgICAgIHBjaV9hcmJpdGVyX2Vycm9yc1tpXS5zdHIsIGFkZHIpOworCQkJY21kIHw9IHBjaV9hcmJpdGVyX2Vycm9yc1tpXS5tYXNrOworCQl9CisJfQorCV9fcmF3X3dyaXRlbChjbWQsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFJTlQpOworCisJLyoKKwkgKiBIYW5kbGUgdGhlIHJlbWFpbmluZyBQQ0kgZXJyb3JzLgorCSAqLworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUlOVCk7CisJZm9yIChpID0gY21kID0gMDsgaSA8IEFSUkFZX1NJWkUocGNpX2ludGVycnVwdF9lcnJvcnMpOyBpKyspIHsKKwkJaWYgKHN0YXR1cyAmIHBjaV9pbnRlcnJ1cHRfZXJyb3JzW2ldLm1hc2spIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6ICVzLCBhZGRyPSUwOGx4XG4iLAorCQkJICAgICAgIHBjaV9pbnRlcnJ1cHRfZXJyb3JzW2ldLnN0ciwgYWRkcik7CisJCQljbWQgfD0gcGNpX2ludGVycnVwdF9lcnJvcnNbaV0ubWFzazsKKwkJfQorCX0KKwlfX3Jhd193cml0ZWwoY21kLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lJTlQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2g3NzgwX3BjaV9zZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2X2lkOworCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogc3lzdGVtIGVycm9yIHJlY2VpdmVkOiAiKTsKKwlwY2liaW9zX3JlcG9ydF9zdGF0dXMoUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SLCAxKTsKKwlwcmludGsoIlxuIik7CisKKwkvKiBEZWFzc2VydCBTRVJSICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lJTlRNX1NESU0sIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUlOVE0pOworCisJLyogQmFjayBvZmYgdGhlIElSUSBmb3IgYXdoaWxlICovCisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJaG9zZS0+c2Vycl90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOworCWFkZF90aW1lcigmaG9zZS0+c2Vycl90aW1lcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzc4MF9wY2lfc2V0dXBfaXJxcyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCit7CisJaW50IHJldDsKKworCS8qIENsZWFyIG91dCBQQ0kgYXJiaXRlciBJUlFzICovCisJX19yYXdfd3JpdGVsKDAsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFJTlQpOworCisJLyogQ2xlYXIgYWxsIGVycm9yIGNvbmRpdGlvbnMgKi8KKwlfX3Jhd193cml0ZXcoUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgIHwgXAorCQkgICAgIFBDSV9TVEFUVVNfU0lHX1NZU1RFTV9FUlJPUiB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQgfCBcCisJCSAgICAgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUIHwgXAorCQkgICAgIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1BBUklUWSwgaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGhvc2UtPnNlcnJfaXJxLCBzaDc3ODBfcGNpX3NlcnJfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJICAiUENJIFNFUlIgaW50ZXJydXB0IiwgaG9zZSk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEZhaWxlZCBob29raW5nIFNFUlIgSVJRXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIFRoZSBQQ0kgRVJSIElSUSBuZWVkcyB0byBiZSBJUlFGX1NIQVJFRCBzaW5jZSBhbGwgb2YgdGhlIHBvd2VyCisJICogZG93biBJUlEgdmVjdG9ycyBhcmUgcm91dGVkIHRocm91Z2ggdGhlIEVSUiBJUlEgdmVjdG9yLiBXZQorCSAqIG9ubHkgcmVxdWVzdF9pcnEoKSBvbmNlIGFzIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbWFza2luZworCSAqIHNvdXJjZSBmb3IgbXVsdGlwbGUgZXZlbnRzLgorCSAqLworCXJldCA9IHJlcXVlc3RfaXJxKGhvc2UtPmVycl9pcnEsIHNoNzc4MF9wY2lfZXJyX2lycSwgSVJRRl9TSEFSRUQsCisJCQkgICJQQ0kgRVJSIGludGVycnVwdCIsIGhvc2UpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWZyZWVfaXJxKGhvc2UtPnNlcnJfaXJxLCBob3NlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBVbm1hc2sgYWxsIG9mIHRoZSBhcmJpdGVyIElSUXMuICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lBSU5UX01CS04gfCBTSDRfUENJQUlOVF9UQlRPIHwgU0g0X1BDSUFJTlRfTUJUTyB8IFwKKwkJICAgICBTSDRfUENJQUlOVF9UQUJUIHwgU0g0X1BDSUFJTlRfTUFCVCB8IFNINF9QQ0lBSU5UX1JEUEUgfCBcCisJCSAgICAgU0g0X1BDSUFJTlRfV0RQRSwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQUlOVE0pOworCisJLyogVW5tYXNrIGFsbCBvZiB0aGUgUENJIElSUXMgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUlOVE1fVFRBRElNICB8IFNINF9QQ0lJTlRNX1RNVE9JTSAgfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fTURFSU0gICB8IFNINF9QQ0lJTlRNX0FQRURJTSAgfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fU0RJTSAgICB8IFNINF9QQ0lJTlRNX0RQRUlUV00gfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fUEVESVRSTSB8IFNINF9QQ0lJTlRNX1RBRElNTSAgfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fTUFESU1NICB8IFNINF9QQ0lJTlRNX01XUERJTSAgfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fTVJEUEVJTSwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJSU5UTSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNoNzc4MF9wY2lfdGVhcmRvd25faXJxcyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCit7CisJZnJlZV9pcnEoaG9zZS0+ZXJyX2lycSwgaG9zZSk7CisJZnJlZV9pcnEoaG9zZS0+c2Vycl9pcnEsIGhvc2UpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2g3NzgwX3BjaTY2X2luaXQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAoIXBjaV9pc182Nm1oel9jYXBhYmxlKGhvc2UsIDAsIDApKQorCQlyZXR1cm47CisKKwkvKiBFbmFibGUgcmVnaXN0ZXIgYWNjZXNzICovCisJdG1wID0gX19yYXdfcmVhZGwoaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCXRtcCB8PSBTSDRfUENJQ1JfUFJFRklYOworCV9fcmF3X3dyaXRlbCh0bXAsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKworCS8qIEVuYWJsZSA2Nk1IeiBvcGVyYXRpb24gKi8KKwl0bXAgPSBfX3Jhd19yZWFkdyhob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCXRtcCB8PSBQQ0lfU1RBVFVTXzY2TUhaOworCV9fcmF3X3dyaXRldyh0bXAsIGhvc2UtPnJlZ19iYXNlICsgUENJX1NUQVRVUyk7CisKKwkvKiBEb25lICovCisJdG1wID0gX19yYXdfcmVhZGwoaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCXRtcCB8PSBTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX0NGSU47CisJX19yYXdfd3JpdGVsKHRtcCwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3ODBfcGNpX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSAmc2g3NzgwX3BjaV9jb250cm9sbGVyOworCXBoeXNfYWRkcl90IG1lbXBoeXM7CisJc2l6ZV90IG1lbXNpemU7CiAJdW5zaWduZWQgaW50IGlkOwotCWNvbnN0IGNoYXIgKnR5cGUgPSBOVUxMOwotCWludCByZXQ7Ci0JdTMyIHdvcmQ7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgcmV0LCBpOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IFN0YXJ0aW5nIGludGlhbGl6YXRpb24uXG4iKTsKIApAQCAtNjUsMTcgKzI1MywyOCBAQAogCS8qIEVuYWJsZSBDUFUgYWNjZXNzIHRvIHRoZSBQQ0lDIHJlZ2lzdGVycy4gKi8KIAlfX3Jhd193cml0ZWwoUENJRUNSX0VOQkwsIFBDSUVDUik7CiAKLQlpZCA9IF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVZJRCk7Ci0JaWYgKGlkICE9IFNINzc4MF9WRU5ET1JfSUQpIHsKKwkvKiBSZXNldCAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX1BSU1QsCisJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCisJLyoKKwkgKiBXYWl0IGZvciBpdCB0byBjb21lIGJhY2sgdXAuIFRoZSBzcGVjIHNheXMgdG8gYWxsb3cgZm9yIHVwIHRvCisJICogMSBzZWNvbmQgYWZ0ZXIgdG9nZ2xpbmcgdGhlIHJlc2V0IHBpbiwgYnV0IGluIHByYWN0aWNlIDEwMG1zCisJICogaXMgbW9yZSB0aGFuIGVub3VnaC4KKwkgKi8KKwltZGVsYXkoMTAwKTsKKworCWlkID0gX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfVkVORE9SX0lEKTsKKwlpZiAoaWQgIT0gUENJX1ZFTkRPUl9JRF9SRU5FU0FTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiBVbmtub3duIHZlbmRvciBJRCAweCUwNHguXG4iLCBpZCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlkID0gX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJRElEKTsKLQl0eXBlID0gKGlkID09IFNINzc2M19ERVZJQ0VfSUQpCT8gIlNINzc2MyIgOgotCSAgICAgICAoaWQgPT0gU0g3NzgwX0RFVklDRV9JRCkgPyAiU0g3NzgwIiA6Ci0JICAgICAgIChpZCA9PSBTSDc3ODFfREVWSUNFX0lEKSA/ICJTSDc3ODEiIDoKLQkgICAgICAgKGlkID09IFNINzc4NV9ERVZJQ0VfSUQpID8gIlNINzc4NSIgOgorCWlkID0gX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfREVWSUNFX0lEKTsKKwl0eXBlID0gKGlkID09IFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3NjMpID8gIlNINzc2MyIgOgorCSAgICAgICAoaWQgPT0gUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc4MCkgPyAiU0g3NzgwIiA6CisJICAgICAgIChpZCA9PSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzgxKSA/ICJTSDc3ODEiIDoKKwkgICAgICAgKGlkID09IFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODUpID8gIlNINzc4NSIgOgogCQkJCQkgIE5VTEw7CiAJaWYgKHVubGlrZWx5KCF0eXBlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlBDSTogRm91bmQgYW4gdW5zdXBwb3J0ZWQgUmVuZXNhcyBob3N0ICIKQEAgLTg1LDYyICsyODQsMTE5IEBACiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogRm91bmQgYSBSZW5lc2FzICVzIGhvc3QgIgogCSAgICAgICAiY29udHJvbGxlciwgcmV2aXNpb24gJWQuXG4iLCB0eXBlLAotCSAgICAgICBfX3Jhd19yZWFkYihjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lSSUQpKTsKKwkgICAgICAgX19yYXdfcmVhZGIoY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfUkVWSVNJT05fSUQpKTsKIAotCWlmICgocmV0ID0gc2g0X3BjaV9jaGVja19kaXJlY3QoY2hhbikpICE9IDApCisJLyoKKwkgKiBOb3cgdGhyb3cgaXQgaW4gdG8gcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gbW9kZSBhbmQKKwkgKiBzdGFydCB0aGUgcmVhbCB3b3JrLgorCSAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJQ1JfUFJFRklYLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CisKKwltZW1waHlzID0gX19wYShtZW1vcnlfc3RhcnQpOworCW1lbXNpemUgPSByb3VuZHVwX3Bvd19vZl90d28obWVtb3J5X2VuZCAtIG1lbW9yeV9zdGFydCk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3MgbW9yZSB0aGFuIDUxMk1CIG9mIG1lbW9yeSwgd2UgbmVlZCB0byByb2xsIG92ZXIgdG8KKwkgKiBMQVIxL0xTUjEuCisJICovCisJaWYgKG1lbXNpemUgPiBTWl81MTJNKSB7CisJCV9fcmF3X3dyaXRlbChtZW1waHlzICsgU1pfNTEyTSwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTEFSMSk7CisJCV9fcmF3X3dyaXRlbCgoKChtZW1zaXplIC0gU1pfNTEyTSkgLSBTWl8xTSkgJiAweDFmZjAwMDAwKSB8IDEsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxTUjEpOworCQltZW1zaXplID0gU1pfNTEyTTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBPdGhlcndpc2UganVzdCB6ZXJvIGl0IG91dCBhbmQgZGlzYWJsZSBpdC4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMQVIxKTsKKwkJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxTUjEpOworCX0KKworCS8qCisJICogTEFSMC9MU1IwIGNvdmVycyB1cCB0byB0aGUgZmlyc3QgNTEyTUIsIHdoaWNoIGlzIGVub3VnaCB0bworCSAqIGNvdmVyIGFsbCBvZiBsb3dtZW0gb24gbW9zdCBwbGF0Zm9ybXMuCisJICovCisJX19yYXdfd3JpdGVsKG1lbXBoeXMsIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxBUjApOworCV9fcmF3X3dyaXRlbCgoKG1lbXNpemUgLSBTWl8xTSkgJiAweDFmZjAwMDAwKSB8IDEsCisJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTFNSMCk7CisKKwkvKgorCSAqIEhvb2sgdXAgdGhlIEVSUiBhbmQgU0VSUiBJUlFzLgorCSAqLworCXJldCA9IHNoNzc4MF9wY2lfc2V0dXBfaXJxcyhjaGFuKTsKKwlpZiAodW5saWtlbHkocmV0KSkKIAkJcmV0dXJuIHJldDsKIAogCS8qCi0JICogU2V0IHRoZSBjbGFzcyBhbmQgc3ViLWNsYXNzIGNvZGVzLgorCSAqIERpc2FibGUgdGhlIGNhY2hlIHNub29wIGNvbnRyb2xsZXIgZm9yIG5vbi1jb2hlcmVudCBETUEuCiAJICovCi0JX19yYXdfd3JpdGViKFBDSV9DTEFTU19CUklER0VfSE9TVCA+PiA4LAotCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUJDQyk7Ci0JX19yYXdfd3JpdGViKFBDSV9DTEFTU19CUklER0VfSE9TVCAmIDB4ZmYsCi0JCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJU1VCKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ1NDUjApOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lDU0FSMCk7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUNTQ1IxKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ1NBUjEpOwogCiAJLyoKLQkgKiBTZXQgSU8gYW5kIE1lbSB3aW5kb3dzIHRvIGxvY2FsIGFkZHJlc3MKLQkgKiBNYWtlIFBDSSBhbmQgbG9jYWwgYWRkcmVzcyB0aGUgc2FtZSBmb3IgZWFzeSAxIHRvIDEgbWFwcGluZworCSAqIFNldHVwIHRoZSBtZW1vcnkgQkFScwogCSAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgc2g3NzgwX3BjaV9tYXAud2luZG93MC5zaXplIC0gMHhmZmZmZiwgU0g0X1BDSUxTUjApOwotCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAwIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCBzaDc3ODBfcGNpX21hcC53aW5kb3cwLmJhc2UsIFNINF9QQ0lMQVIwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHNoNzc4MF9wY2lfbWFwLndpbmRvdzAuYmFzZSwgU0g3NzgwX1BDSU1CQVIwKTsKKwlmb3IgKGkgPSAxOyBpIDwgY2hhbi0+bnJfcmVzb3VyY2VzOyBpKyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBjaGFuLT5yZXNvdXJjZXMgKyBpOworCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKIAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMzgwZiwgU0g0X1BDSUFJTlRNKTsKKwkJaWYgKHVubGlrZWx5KHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkKKwkJCWNvbnRpbnVlOwogCi0JLyogU2V0IHVwIHN0YW5kYXJkIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0JX19yYXdfd3JpdGV3KDB4RkIwMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJU1RBVFVTKTsKLQlfX3Jhd193cml0ZXcoMHgwMDQ3LCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lDTUQpOwotCV9fcmF3X3dyaXRldygweDE5MTIsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVNWSUQpOwotCV9fcmF3X3dyaXRldygweDAwMDEsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVNJRCk7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSdyZSBpbiB0aGUgcmlnaHQgcGh5c2ljYWwgYWRkcmVzc2luZyBtb2RlCisJCSAqIGZvciBkZWFsaW5nIHdpdGggdGhlIHJlc291cmNlLgorCQkgKi8KKwkJaWYgKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fMzJCSVQpICYmIF9faW5fMjliaXRfbW9kZSgpKSB7CisJCQljaGFuLT5ucl9yZXNvdXJjZXMtLTsKKwkJCWNvbnRpbnVlOworCQl9CiAKLQlfX3Jhd193cml0ZWIoMHgwMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJUElGKTsKKwkJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAotCS8qIEFwcGx5IGFueSBsYXN0LW1pbnV0ZSBQQ0lDIGZpeHVwcyAqLwotCXBjaV9maXh1cF9wY2ljKGNoYW4pOworCQkvKgorCQkgKiBUaGUgTUJNUiBtYXNrIGlzIGNhbGN1bGF0ZWQgaW4gdW5pdHMgb2YgMjU2a0IsIHdoaWNoCisJCSAqIGtlZXBzIHRoaW5ncyBwcmV0dHkgc2ltcGxlLgorCQkgKi8KKwkJX19yYXdfd3JpdGVsKCgocm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpIC8gU1pfMjU2SykgLSAxKSA8PCAxOCwKKwkJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJTUJNUihpIC0gMSkpOworCQlfX3Jhd193cml0ZWwocmVzLT5zdGFydCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJTUJSKGkgLSAxKSk7CisJfQogCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweGZkMDAwMDAwLCBTSDc3ODBfUENJTUJSMCk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwZmMwMDAwLCBTSDc3ODBfUENJTUJNUjApOworCS8qCisJICogQW5kIEkvTy4KKwkgKi8KKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfQkFTRV9BRERSRVNTXzApOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lJT0JSKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJSU9CTVIpOwogCi0jaWZkZWYgQ09ORklHXzMyQklUCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweGMwMDAwMDAwLCBTSDc3ODBfUENJTUJSMik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDIwMDAwMDAwIC0gU0g3NzgwX1BDSV9JT19TSVpFLCBTSDc3ODBfUENJTUJNUjIpOwotI2VuZGlmCisJX19yYXdfd3JpdGV3KFBDSV9DT01NQU5EX1NFUlIgICB8IFBDSV9DT01NQU5EX1dBSVQgICB8IFwKKwkJICAgICBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBcCisJCSAgICAgUENJX0NPTU1BTkRfTUVNT1JZLCBjaGFuLT5yZWdfYmFzZSArIFBDSV9DT01NQU5EKTsKIAotCS8qIFNldCBJT0JSIGZvciB3aW5kb3dzIGNvbnRhaW5pbmcgYXJlYSBzcGVjaWZpZWQgaW4gcGNpLmggKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydCAmIH4oU0g3NzgwX1BDSV9JT19TSVpFLTEpLAotCQkgICAgICBTSDc3ODBfUENJSU9CUik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAoKFNINzc4MF9QQ0lfSU9fU0laRS0xKSAmICg3PDwxOCkpLAotCQkgICAgICBTSDc3ODBfUENJSU9CTVIpOworCS8qCisJICogSW5pdGlhbGl6YXRpb24gbW9kZSBjb21wbGV0ZSwgcmVsZWFzZSB0aGUgY29udHJvbCByZWdpc3RlciBhbmQKKwkgKiBlbmFibGUgcm91bmQgcm9iaW4gbW9kZSB0byBzdG9wIGRldmljZSBvdmVycnVucy9zdGFydmF0aW9uLgorCSAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX0NGSU4gfCBTSDRfUENJQ1JfRlRPLAorCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKIAotCS8qIFNINzc4MCBpbml0IGRvbmUsIHNldCBjZW50cmFsIGZ1bmN0aW9uIGluaXQgY29tcGxldGUgKi8KLQkvKiB1c2Ugcm91bmQgcm9iaW4gbW9kZSB0byBzdG9wIGEgZGV2aWNlIHN0YXJ2aW5nL292ZXJydW5pbmcgKi8KLQl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOIHwgU0g0X1BDSUNSX0ZUTzsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lDUik7CisJcmV0ID0gcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY2hhbik7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyOwogCi0JcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY2hhbik7CisJc2g3NzgwX3BjaTY2X2luaXQoY2hhbik7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogUnVubmluZyBhdCAlZE1Iei5cbiIsCisJICAgICAgIChfX3Jhd19yZWFkdyhjaGFuLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpICYgUENJX1NUQVRVU182Nk1IWikgPworCSAgICAgICA2NiA6IDMzKTsKIAogCXJldHVybiAwOworCitlcnI6CisJc2g3NzgwX3BjaV90ZWFyZG93bl9pcnFzKGNoYW4pOworCXJldHVybiByZXQ7CiB9CiBhcmNoX2luaXRjYWxsKHNoNzc4MF9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oCmluZGV4IDRhNTI0NzguLjIwNWRjYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oCkBAIC0xMiwxMiArMTIsMTEgQEAKICNpZm5kZWYgX1BDSV9TSDc3ODBfSF8KICNkZWZpbmUgX1BDSV9TSDc3ODBfSF8KIAotLyogUGxhdGZvcm0gU3BlY2lmaWMgVmFsdWVzICovCi0jZGVmaW5lIFNINzc4MF9WRU5ET1JfSUQJMHgxOTEyCi0jZGVmaW5lIFNINzc4MV9ERVZJQ0VfSUQJMHgwMDAxCi0jZGVmaW5lIFNINzc4MF9ERVZJQ0VfSUQJMHgwMDAyCi0jZGVmaW5lIFNINzc2M19ERVZJQ0VfSUQJMHgwMDA0Ci0jZGVmaW5lIFNINzc4NV9ERVZJQ0VfSUQJMHgwMDA3CisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVORVNBUwkJMHgxOTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODEJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODAJMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3NjMJMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODUJMHgwMDA3CiAKIC8qIFNINzc4MCBDb250cm9sIFJlZ2lzdGVycyAqLwogI2RlZmluZQlQQ0lFQ1IJCQkweEZFMDAwMDA4CkBAIC0yNyw0NCArMjYsOSBAQAogI2RlZmluZSBTSDc3ODBfUENJX0NPTkZJR19CQVNFCTB4RkQwMDAwMDAJLyogQ29uZmlnIHNwYWNlIGJhc2UgYWRkciAqLwogI2RlZmluZSBTSDc3ODBfUENJX0NPTkZJR19TSVpFCTB4MDEwMDAwMDAJLyogQ29uZmlnIHNwYWNlIHNpemUgKi8KIAotI2RlZmluZSBTSDc3ODBfUENJX01FTU9SWV9CQVNFCTB4RkQwMDAwMDAJLyogTWVtb3J5IHNwYWNlIGJhc2UgYWRkciAqLwotI2RlZmluZSBTSDc3ODBfUENJX01FTV9TSVpFCTB4MDEwMDAwMDAJLyogU2l6ZSBvZiBNZW1vcnkgd2luZG93ICovCi0KLSNkZWZpbmUgU0g3NzgwX1BDSV9JT19CQVNFCTB4RkUyMDAwMDAJLyogSU8gc3BhY2UgYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFNINzc4MF9QQ0lfSU9fU0laRQkweDAwNDAwMDAwCS8qIFNpemUgb2YgSU8gd2luZG93ICovCi0KICNkZWZpbmUgU0g3NzgwX1BDSVJFR19CQVNFCTB4RkUwNDAwMDAJLyogUENJIHJlZ3MgYmFzZSBhZGRyZXNzICovCiAKIC8qIFNINzc4MCBQQ0kgQ29uZmlnIFJlZ2lzdGVycyAqLwotI2RlZmluZSBTSDc3ODBfUENJVklECQkweDAwMAkJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lESUQJCTB4MDAyCQkvKiBEZXZpY2UgSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUNNRAkJMHgwMDQJCS8qIENvbW1hbmQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVNUQVRVUwkweDAwNgkJLyogU3RhdHVzICovCi0jZGVmaW5lIFNINzc4MF9QQ0lSSUQJCTB4MDA4CQkvKiBSZXZpc2lvbiBJRCAqLwotI2RlZmluZSBTSDc3ODBfUENJUElGCQkweDAwOQkJLyogUHJvZ3JhbSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVNVQgkJMHgwMGEJCS8qIFN1YiBjbGFzcyBjb2RlICovCi0jZGVmaW5lIFNINzc4MF9QQ0lCQ0MJCTB4MDBiCQkvKiBCYXNlIGNsYXNzIGNvZGUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUNMUwkJMHgwMGMJCS8qIENhY2hlIGxpbmUgc2l6ZSAqLwotI2RlZmluZSBTSDc3ODBfUENJTFRNCQkweDAwZAkJLyogbGF0ZW5jeSB0aW1lciAqLwotI2RlZmluZSBTSDc3ODBfUENJSERSCQkweDAwZQkJLyogSGVhZGVyIHR5cGUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUJJU1QJCTB4MDBmCQkvKiBCSVNUICovCi0jZGVmaW5lIFNINzc4MF9QQ0lJQkFSCQkweDAxMAkJLyogSU8gQmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFNINzc4MF9QQ0lNQkFSMAkJMHgwMTQJCS8qIE1lbW9yeSBiYXNlIGFkZHJlc3MwICovCi0jZGVmaW5lIFNINzc4MF9QQ0lNQkFSMQkJMHgwMTgJCS8qIE1lbW9yeSBiYXNlIGFkZHJlc3MxICovCi0jZGVmaW5lIFNINzc4MF9QQ0lTVklECQkweDAyYwkJLyogU3ViIHN5c3RlbSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVNJRAkJMHgwMmUJCS8qIFN1YiBzeXN0ZW0gSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUNQCQkweDAzNAotI2RlZmluZSBTSDc3ODBfUENJSU5UTElORQkweDAzYwkJLyogSW50ZXJydXB0IGxpbmUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUlOVFBJTgkweDAzZAkJLyogSW50ZXJydXB0IHBpbiAqLwotI2RlZmluZSBTSDc3ODBfUENJTUlOR05UCTB4MDNlCQkvKiBNaW51bXVtIGdyYW5kICovCi0jZGVmaW5lIFNINzc4MF9QQ0lNQVhMQVQJMHgwM2YJCS8qIE1heG11bSBsYXRlbmN5ICovCi0jZGVmaW5lIFNINzc4MF9QQ0lDSUQJCTB4MDQwCi0jZGVmaW5lIFNINzc4MF9QQ0lOSVAJCTB4MDQxCi0jZGVmaW5lIFNINzc4MF9QQ0lQTUMJCTB4MDQyCi0jZGVmaW5lIFNINzc4MF9QQ0lQTUNTUgkJMHgwNDQKLSNkZWZpbmUgU0g3NzgwX1BDSVBNQ1NSX0JTRQkweDA0NgotI2RlZmluZSBTSDc3ODBfUENJQ0RECQkweDA0NwotCiAjZGVmaW5lIFNINzc4MF9QQ0lJUgkJMHgxMTQJCS8qIFBDSSBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSUlNUgkJMHgxMTgJCS8qIFBDSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwogI2RlZmluZSBTSDc3ODBfUENJQUlSCQkweDExQwkJLyogRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLwpAQCAtNzYsMTAgKzQwLDggQEAKICNkZWZpbmUgU0g3NzgwX1BDSVBJTlQJCTB4MUNDCQkvKiBQb3dlciBNZ21udCBJbnQuIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINzc4MF9QQ0lQSU5UTQkJMHgxRDAJCS8qIFBvd2VyIE1nbW50IE1hc2sgUmVnaXN0ZXIgKi8KIAotI2RlZmluZSBTSDc3ODBfUENJTUJSMAkJMHgxRTAKLSNkZWZpbmUgU0g3NzgwX1BDSU1CTVIwCQkweDFFNAotI2RlZmluZSBTSDc3ODBfUENJTUJSMgkJMHgxRjAKLSNkZWZpbmUgU0g3NzgwX1BDSU1CTVIyCQkweDFGNAorI2RlZmluZSBTSDc3ODBfUENJTUJSKHgpCSgweDFFMCArICgoeCkgKiA4KSkKKyNkZWZpbmUgU0g3NzgwX1BDSU1CTVIoeCkJKDB4MUU0ICsgKCh4KSAqIDgpKQogI2RlZmluZSBTSDc3ODBfUENJSU9CUgkJMHgxRjgKICNkZWZpbmUgU0g3NzgwX1BDSUlPQk1SCQkweDFGQwogI2RlZmluZSBTSDc3ODBfUENJQ1NDUjAJCTB4MjEwCQkvKiBDYWNoZSBTbm9vcDEgQ250LiBSZWdpc3RlciAqLwpAQCAtODcsMTYgKzQ5LDQgQEAKICNkZWZpbmUgU0g3NzgwX1BDSUNTQVIwCQkweDIxOAkvKiBDYWNoZSBTbm9vcDEgQWRkci4gUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSUNTQVIxCQkweDIxQwkvKiBDYWNoZSBTbm9vcDIgQWRkci4gUmVnaXN0ZXIgKi8KIAotLyogR2VuZXJhbCBNZW1vcnkgQ29uZmlnIEFkZHJlc3NlcyAqLwotI2RlZmluZSBTSDc3ODBfQ1MwX0JBU0VfQUREUgkweDAKLSNkZWZpbmUgU0g3NzgwX01FTV9SRUdJT05fU0laRQkweDA0MDAwMDAwCi0jZGVmaW5lIFNINzc4MF9DUzFfQkFTRV9BRERSCShTSDc3ODBfQ1MwX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzJfQkFTRV9BRERSCShTSDc3ODBfQ1MxX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzNfQkFTRV9BRERSCShTSDc3ODBfQ1MyX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzRfQkFTRV9BRERSCShTSDc3ODBfQ1MzX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzVfQkFTRV9BRERSCShTSDc3ODBfQ1M0X0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzZfQkFTRV9BRERSCShTSDc3ODBfQ1M1X0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0KLSNkZWZpbmUgU0g3NzgwXzMyQklUX0REUl9CQVNFX0FERFIJMHg0MDAwMDAwMAotCiAjZW5kaWYgLyogX1BDSV9TSDc3ODBfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IGM0ODFkZjYuLjk1M2FmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMzMsMTUgKzMzLDIyIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpYmlvc19zY2FuYnVzKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKIHsKIAlzdGF0aWMgaW50IG5leHRfYnVzbm87CisJc3RhdGljIGludCBuZWVkX2RvbWFpbl9pbmZvOwogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAKIAlidXMgPSBwY2lfc2Nhbl9idXMobmV4dF9idXNubywgaG9zZS0+cGNpX29wcywgaG9zZSk7CisJaG9zZS0+YnVzID0gYnVzOworCisJbmVlZF9kb21haW5faW5mbyA9IG5lZWRfZG9tYWluX2luZm8gfHwgaG9zZS0+aW5kZXg7CisJaG9zZS0+bmVlZF9kb21haW5faW5mbyA9IG5lZWRfZG9tYWluX2luZm87CiAJaWYgKGJ1cykgewogCQluZXh0X2J1c25vID0gYnVzLT5zdWJvcmRpbmF0ZSArIDE7CiAJCS8qIERvbid0IGFsbG93IDgtYml0IGJ1cyBudW1iZXIgb3ZlcmZsb3cgaW5zaWRlIHRoZSBob3NlIC0KIAkJICAgcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBicmlkZ2VzLiAqLwotCQlpZiAobmV4dF9idXNubyA+IDIyNCkKKwkJaWYgKG5leHRfYnVzbm8gPiAyMjQpIHsKIAkJCW5leHRfYnVzbm8gPSAwOworCQkJbmVlZF9kb21haW5faW5mbyA9IDE7CisJCX0KIAogCQlwY2lfYnVzX3NpemVfYnJpZGdlcyhidXMpOwogCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKQEAgLTUxLDEwICs1OCwyMSBAQAogCiBzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9zY2FuX211dGV4KTsKIAotdm9pZCBfX2RldmluaXQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoraW50IF9fZGV2aW5pdCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCiB7Ci0JcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIGhvc2UtPm1lbV9yZXNvdXJjZSk7Ci0JcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCBob3NlLT5pb19yZXNvdXJjZSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG9zZS0+bnJfcmVzb3VyY2VzOyBpKyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBob3NlLT5yZXNvdXJjZXMgKyBpOworCisJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgeworCQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgcmVzKSA8IDApCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcykgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJfQogCiAJKmhvc2VfdGFpbCA9IGhvc2U7CiAJaG9zZV90YWlsID0gJmhvc2UtPm5leHQ7CkBAIC02OCw2ICs4NiwxMSBAQAogCX0KIAogCS8qCisJICogU2V0dXAgdGhlIEVSUi9QRVJSIGFuZCBTRVJSIHRpbWVycywgaWYgYXZhaWxhYmxlLgorCSAqLworCXBjaWJpb3NfZW5hYmxlX3RpbWVycyhob3NlKTsKKworCS8qCiAJICogU2NhbiB0aGUgYnVzIGlmIGl0IGlzIHJlZ2lzdGVyIGFmdGVyIHRoZSBQQ0kgc3Vic3lzdGVtCiAJICogaW5pdGlhbGl6YXRpb24uCiAJICovCkBAIC03Niw2ICs5OSwxNSBAQAogCQlwY2liaW9zX3NjYW5idXMoaG9zZSk7CiAJCW11dGV4X3VubG9jaygmcGNpX3NjYW5fbXV0ZXgpOwogCX0KKworCXJldHVybiAwOworCitvdXQ6CisJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQorCQlyZWxlYXNlX3Jlc291cmNlKCZob3NlLT5yZXNvdXJjZXNbaV0pOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiU2tpcHBpbmcgUENJIGJ1cyBzY2FuIGR1ZSB0byByZXNvdXJjZSBjb25mbGljdFxuIik7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKQEAgLTEyNywxMSArMTU5LDEzIEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsbjsKLQlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSBidXMtPnN5c2RhdGE7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gYnVzLT5zeXNkYXRhOwogCiAJaWYgKCFkZXYpIHsKLQkJYnVzLT5yZXNvdXJjZVswXSA9IGNoYW4tPmlvX3Jlc291cmNlOwotCQlidXMtPnJlc291cmNlWzFdID0gY2hhbi0+bWVtX3Jlc291cmNlOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgaG9zZS0+bnJfcmVzb3VyY2VzOyBpKyspCisJCQlidXMtPnJlc291cmNlW2ldID0gaG9zZS0+cmVzb3VyY2VzICsgaTsKIAl9CiAKIAlmb3IgKGxuID0gYnVzLT5kZXZpY2VzLm5leHQ7IGxuICE9ICZidXMtPmRldmljZXM7IGxuID0gbG4tPm5leHQpIHsKQEAgLTE0OCwzNCArMTgyLDI5IEBACiAgKiBhZGRyZXNzZXMgdG8gYmUgYWxsb2NhdGVkIGluIHRoZSAweDAwMC0weDBmZiByZWdpb24KICAqIG1vZHVsbyAweDQwMC4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOwotCXN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiA9IGRldi0+c3lzZGF0YTsKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXYtPnN5c2RhdGE7CiAJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlpZiAoc3RhcnQgPCBQQ0lCSU9TX01JTl9JTyArIGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydCkKLQkJCXN0YXJ0ID0gUENJQklPU19NSU5fSU8gKyBjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQ7CisJCWlmIChzdGFydCA8IFBDSUJJT1NfTUlOX0lPICsgaG9zZS0+cmVzb3VyY2VzWzBdLnN0YXJ0KQorCQkJc3RhcnQgPSBQQ0lCSU9TX01JTl9JTyArIGhvc2UtPnJlc291cmNlc1swXS5zdGFydDsKIAogCQkvKgogICAgICAgICAgICAgICAgICAqIFB1dCBldmVyeXRoaW5nIGludG8gMHgwMC0weGZmIHJlZ2lvbiBtb2R1bG8gMHg0MDAuCiAJCSAqLwotCQlpZiAoc3RhcnQgJiAweDMwMCkgeworCQlpZiAoc3RhcnQgJiAweDMwMCkKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9Ci0JfSBlbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKLQkJaWYgKHN0YXJ0IDwgUENJQklPU19NSU5fTUVNICsgY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydCkKLQkJCXN0YXJ0ID0gUENJQklPU19NSU5fTUVNICsgY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydDsKIAl9CiAKLQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CisJcmV0dXJuIHN0YXJ0OwogfQogCiB2b2lkIHBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uLAotCQkJIHN0cnVjdCByZXNvdXJjZSAqcmVzKQorCQkJICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXYtPnN5c2RhdGE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwpAQCAtMTg5LDkgKzIxOCw4IEBACiAJcmVnaW9uLT5lbmQgPSByZXMtPmVuZCAtIG9mZnNldDsKIH0KIAotdm9pZCBfX2RldmluaXQKLXBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pCit2b2lkIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJICAgICBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbikKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXYtPnN5c2RhdGE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwpAQCAtMjc0LDYgKzMwMiw4NiBAQAogCXJldHVybiBzdHI7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdAorcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1c19lYXJseShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCisJCQkJaW50IHRvcF9idXMsIGludCBjdXJyZW50X2J1cywKKwkJCQl1bnNpZ25lZCBpbnQgc3RhdHVzX21hc2ssIGludCB3YXJuKQoreworCXVuc2lnbmVkIGludCBwY2lfZGV2Zm47CisJdTE2IHN0YXR1czsKKwlpbnQgcmV0OworCisJZm9yIChwY2lfZGV2Zm4gPSAwOyBwY2lfZGV2Zm4gPCAweGZmOyBwY2lfZGV2Zm4rKykgeworCQlpZiAoUENJX0ZVTkMocGNpX2RldmZuKSkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBlYXJseV9yZWFkX2NvbmZpZ193b3JkKGhvc2UsIHRvcF9idXMsIGN1cnJlbnRfYnVzLAorCQkJCQkgICAgIHBjaV9kZXZmbiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CisJCWlmIChyZXQgIT0gUENJQklPU19TVUNDRVNTRlVMKQorCQkJY29udGludWU7CisJCWlmIChzdGF0dXMgPT0gMHhmZmZmKQorCQkJY29udGludWU7CisKKwkJZWFybHlfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgdG9wX2J1cywgY3VycmVudF9idXMsCisJCQkJCXBjaV9kZXZmbiwgUENJX1NUQVRVUywKKwkJCQkJc3RhdHVzICYgc3RhdHVzX21hc2spOworCQlpZiAod2FybikKKwkJCXByaW50aygiKCUwMng6JTAyeDogJTA0WCkgIiwgY3VycmVudF9idXMsCisJCQkgICAgICAgcGNpX2RldmZuLCBzdGF0dXMpOworCX0KK30KKworLyoKKyAqIFdlIGNhbid0IHVzZSBwY2lfZmluZF9kZXZpY2UoKSBoZXJlIHNpbmNlIHdlIGFyZQorICogY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdF9yZWZvaworcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgc3RhdHVzX21hc2ssCisJCQkgIGludCB3YXJuKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJdTE2IHN0YXR1czsKKworCQkvKgorCQkgKiBpZ25vcmUgaG9zdCBicmlkZ2UgLSB3ZSBoYW5kbGUKKwkJICogdGhhdCBzZXBhcmF0ZWx5CisJCSAqLworCQlpZiAoZGV2LT5idXMtPm51bWJlciA9PSAwICYmIGRldi0+ZGV2Zm4gPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CisJCWlmIChzdGF0dXMgPT0gMHhmZmZmKQorCQkJY29udGludWU7CisKKwkJaWYgKChzdGF0dXMgJiBzdGF0dXNfbWFzaykgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIGNsZWFyIHRoZSBzdGF0dXMgZXJyb3JzICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsIHN0YXR1cyAmIHN0YXR1c19tYXNrKTsKKworCQlpZiAod2FybikKKwkJCXByaW50aygiKCVzOiAlMDRYKSAiLCBwY2lfbmFtZShkZXYpLCBzdGF0dXMpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJaWYgKGRldi0+c3Vib3JkaW5hdGUpCisJCQlwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzKGRldi0+c3Vib3JkaW5hdGUsIHN0YXR1c19tYXNrLCB3YXJuKTsKK30KKwordm9pZCBfX2luaXRfcmVmb2sgcGNpYmlvc19yZXBvcnRfc3RhdHVzKHVuc2lnbmVkIGludCBzdGF0dXNfbWFzaywgaW50IHdhcm4pCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlOworCisJZm9yIChob3NlID0gaG9zZV9oZWFkOyBob3NlOyBob3NlID0gaG9zZS0+bmV4dCkgeworCQlpZiAodW5saWtlbHkoIWhvc2UtPmJ1cykpCisJCQlwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzX2Vhcmx5KGhvc2UsIGhvc2VfaGVhZC0+aW5kZXgsCisJCQkJCWhvc2UtPmluZGV4LCBzdGF0dXNfbWFzaywgd2Fybik7CisJCWVsc2UKKwkJCXBjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXMoaG9zZS0+YnVzLCBzdGF0dXNfbWFzaywgd2Fybik7CisJfQorfQorCiBpbnQgcGNpX21tYXBfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCWVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpCiB7CkBAIC0zMDIsOSArNDEwLDE1IEBACiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gZGV2LT5zeXNkYXRhOwogCi0JaWYgKCFjaGFuLT5pb19tYXBfYmFzZSkKKwlpZiAodW5saWtlbHkoIWNoYW4tPmlvX21hcF9iYXNlKSkgewogCQljaGFuLT5pb19tYXBfYmFzZSA9IGdlbmVyaWNfaW9fYmFzZTsKIAorCQlpZiAocGNpX2RvbWFpbnNfc3VwcG9ydGVkKQorCQkJcGFuaWMoIlRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbiBpb19tYXBfYmFzZSBNVVNUIGJlICIKKwkJCSAgICAgICJzZXQgd2l0aCBtdWx0aXBsZSBQQ0kgZG9tYWlucy4iKTsKKwl9CisKKwogCXJldHVybiAodm9pZCBfX2lvbWVtICopKGNoYW4tPmlvX21hcF9iYXNlICsgcG9ydCk7CiB9CiAKQEAgLTMyMSwyMCArNDM1LDkgQEAKIAogCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCXJldHVybiBpb3BvcnRfbWFwX3BjaShkZXYsIHN0YXJ0LCBsZW4pOwotCi0JLyoKLQkgKiBQcmVzZW50bHkgdGhlIElPUkVTT1VSQ0VfTUVNIGNhc2UgaXMgYSBiaXQgc3BlY2lhbCwgbW9zdAotCSAqIFNINzc1MSBzdHlsZSBQQ0kgY29udHJvbGxlcnMgaGF2ZSBQQ0kgbWVtb3J5IGF0IGEgZml4ZWQKLQkgKiBsb2NhdGlvbiBpbiB0aGUgYWRkcmVzcyBzcGFjZSB3aGVyZSBubyByZW1hcHBpbmcgaXMgZGVzaXJlZC4KLQkgKiBXaXRoIHRoZSBJT1JFU09VUkNFX01FTSBjYXNlIG1vcmUgY2FyZSBoYXMgdG8gYmUgdGFrZW4KLQkgKiB0byBpbmhpYml0IHBhZ2UgdGFibGUgbWFwcGluZyBmb3IgbGVnYWN5IGNvcmVzLCBidXQgdGhpcyBpcwotCSAqIHB1bnRlZCBvZmYgdG8gX19pb3JlbWFwKCkuCi0JICoJCQkJCS0tIFBGTS4KLQkgKi8KIAlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgewogCQlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX0NBQ0hFQUJMRSkKIAkJCXJldHVybiBpb3JlbWFwKHN0YXJ0LCBsZW4pOwotCiAJCXJldHVybiBpb3JlbWFwX25vY2FjaGUoc3RhcnQsIGxlbik7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMKaW5kZXggYWMzN2VlOC4uYWU5MWEyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBMb3ctTGV2ZWwgUENJIEV4cHJlc3MgU3VwcG9ydCBmb3IgdGhlIFNINzc4NgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTMwLDYwICszMCw4NCBAQAogCWludCAoKnBvcnRfaW5pdF9odykoc3RydWN0IHNoNzc4Nl9wY2llX3BvcnQgKnBvcnQpOwogfSAqc2g3Nzg2X3BjaWVfaHdvcHM7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg2X3BjaV8zMmJpdF9tZW1fcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2kwX3Jlc291cmNlc1tdID0gewogCXsKLQkJLm5hbWUJPSAicGNpMF9tZW0iLAotCQkuc3RhcnQJPSBTSDRBX1BDSU1FTV9CQVNFQSwKLQkJLmVuZAk9IFNINEFfUENJTUVNX0JBU0VBICsgU1pfNjRNIC0gMSwKKwkJLm5hbWUJPSAiUENJZTAgSU8iLAorCQkuc3RhcnQJPSAweGZkMDAwMDAwLAorCQkuZW5kCT0gMHhmZDAwMDAwMCArIFNaXzhNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LCB7CisJCS5uYW1lCT0gIlBDSWUwIE1FTSAwIiwKKwkJLnN0YXJ0CT0gMHhjMDAwMDAwMCwKKwkJLmVuZAk9IDB4YzAwMDAwMDAgKyBTWl81MTJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8zMkJJVCwKKwl9LCB7CisJCS5uYW1lCT0gIlBDSWUwIE1FTSAxIiwKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTAwMDAwMDAgKyBTWl82NE0gLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5uYW1lCT0gInBjaTFfbWVtIiwKLQkJLnN0YXJ0CT0gU0g0QV9QQ0lNRU1fQkFTRUExLAotCQkuZW5kCT0gU0g0QV9QQ0lNRU1fQkFTRUExICsgU1pfNjRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkubmFtZQk9ICJwY2kyX21lbSIsCi0JCS5zdGFydAk9IFNINEFfUENJTUVNX0JBU0VBMiwKLQkJLmVuZAk9IFNINEFfUENJTUVNX0JBU0VBMiArIFNaXzY0TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkubmFtZQk9ICJQQ0llMCBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmUxMDAwMDAsCisJCS5lbmQJPSAweGZlMTAwMDAwICsgU1pfMU0gLSAxLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2lfMjliaXRfbWVtX3Jlc291cmNlID0gewotCS5zdGFydAk9IFNINEFfUENJTUVNX0JBU0UsCi0JLmVuZAk9IFNINEFfUENJTUVNX0JBU0UgKyBTWl82NE0gLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIlBDSWUxIElPIiwKKwkJLnN0YXJ0CT0gMHhmZDgwMDAwMCwKKwkJLmVuZAk9IDB4ZmQ4MDAwMDAgKyBTWl84TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMCIsCisJCS5zdGFydAk9IDB4YTAwMDAwMDAsCisJCS5lbmQJPSAweGEwMDAwMDAwICsgU1pfNTEyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMSIsCisJCS5zdGFydAk9IDB4MzAwMDAwMDAsCisJCS5lbmQJPSAweDMwMDAwMDAwICsgU1pfMjU2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmUzMDAwMDAsCisJCS5lbmQJPSAweGZlMzAwMDAwICsgU1pfMU0gLSAxLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2lfaW9fcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2kyX3Jlc291cmNlc1tdID0gewogCXsKLQkJLm5hbWUJPSAicGNpMF9pbyIsCi0JCS5zdGFydAk9IFNINEFfUENJSU9fQkFTRSwKLQkJLmVuZAk9IFNINEFfUENJSU9fQkFTRSArIFNaXzhNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJLm5hbWUJPSAiUENJZTIgSU8iLAorCQkuc3RhcnQJPSAweGZjODAwMDAwLAorCQkuZW5kCT0gMHhmYzgwMDAwMCArIFNaXzRNIC0gMSwKIAl9LCB7Ci0JCS5uYW1lCT0gInBjaTFfaW8iLAotCQkuc3RhcnQJPSBTSDRBX1BDSUlPX0JBU0UxLAotCQkuZW5kCT0gU0g0QV9QQ0lJT19CQVNFMSArIFNaXzhNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJLm5hbWUJPSAiUENJZTIgTUVNIDAiLAorCQkuc3RhcnQJPSAweDgwMDAwMDAwLAorCQkuZW5kCT0gMHg4MDAwMDAwMCArIFNaXzUxMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAogCX0sIHsKLQkJLm5hbWUJPSAicGNpMl9pbyIsCi0JCS5zdGFydAk9IFNINEFfUENJSU9fQkFTRTIsCi0JCS5lbmQJPSBTSDRBX1BDSUlPX0JBU0UyICsgU1pfNE0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCQkubmFtZQk9ICJQQ0llMiBNRU0gMSIsCisJCS5zdGFydAk9IDB4MjAwMDAwMDAsCisJCS5lbmQJPSAweDIwMDAwMDAwICsgU1pfMjU2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMiBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmNkMDAwMDAsCisJCS5lbmQJPSAweGZjZDAwMDAwICsgU1pfMU0gLSAxLAogCX0sCiB9OwogCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgc2g3Nzg2X3BjaV9vcHM7CiAKLSNkZWZpbmUgREVGSU5FX0NPTlRST0xMRVIoc3RhcnQsIGlkeCkJCQkJXAotewkJCQkJCQkJXAotCS5wY2lfb3BzCT0gJnNoNzc4Nl9wY2lfb3BzLAkJCVwKLQkucmVnX2Jhc2UJPSBzdGFydCwJCQkJXAotCS8qIG1lbV9yZXNvdXJjZSBmaWxsZWQgaW4gYXQgcHJvYmUgdGltZSAqLwkJXAotCS5tZW1fb2Zmc2V0CT0gMCwJCQkJCVwKLQkuaW9fcmVzb3VyY2UJPSAmc2g3Nzg2X3BjaV9pb19yZXNvdXJjZXNbaWR4XSwJXAotCS5pb19vZmZzZXQJPSAwLAkJCQkJXAorI2RlZmluZSBERUZJTkVfQ09OVFJPTExFUihzdGFydCwgaWR4KQkJCQkJXAorewkJCQkJCQkJCVwKKwkucGNpX29wcwk9ICZzaDc3ODZfcGNpX29wcywJCQkJXAorCS5yZXNvdXJjZXMJPSBzaDc3ODZfcGNpIyNpZHgjI19yZXNvdXJjZXMsCQkJXAorCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4Nl9wY2kjI2lkeCMjX3Jlc291cmNlcyksCVwKKwkucmVnX2Jhc2UJPSBzdGFydCwJCQkJCVwKKwkubWVtX29mZnNldAk9IDAsCQkJCQkJXAorCS5pb19vZmZzZXQJPSAwLAkJCQkJCVwKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBzaDc3ODZfcGNpX2NoYW5uZWxzW10gPSB7CkBAIC0xODAsNyArMjA0LDkgQEAKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSBwb3J0LT5ob3NlOwogCXVuc2lnbmVkIGludCBkYXRhOwotCWludCByZXQ7CisJcGh5c19hZGRyX3QgbWVtcGh5czsKKwlzaXplX3QgbWVtc2l6ZTsKKwlpbnQgcmV0LCBpOwogCiAJLyogQmVnaW4gaW5pdGlhbGl6YXRpb24gKi8KIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDAsIFNINEFfUENJRVRDVExSKTsKQEAgLTIwMywxNSArMjI5LDI0IEBACiAJZGF0YSB8PSBQQ0lfQ0FQX0lEX0VYUDsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRUVYUENBUDApOwogCi0JLyogRW5hYmxlIHg0IGxpbmsgd2lkdGggYW5kIGV4dGVuZGVkIHN5bmMuICovCisJLyogRW5hYmxlIGRhdGEgbGluayBsYXllciBhY3RpdmUgc3RhdGUgcmVwb3J0aW5nICovCisJcGNpX3dyaXRlX3JlZyhjaGFuLCBQQ0lfRVhQX0xOS0NBUF9ETExMQVJDLCBTSDRBX1BDSUVFWFBDQVAzKTsKKworCS8qIEVuYWJsZSBleHRlbmRlZCBzeW5jIGFuZCBBU1BNIEwwcyBzdXBwb3J0ICovCiAJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVFWFBDQVA0KTsKLQlkYXRhICY9IH4oUENJX0VYUF9MTktTVEFfTkxXIDw8IDE2KTsKLQlkYXRhIHw9ICgxIDw8IDIyKSB8IFBDSV9FWFBfTE5LQ1RMX0VTOworCWRhdGEgJj0gflBDSV9FWFBfTE5LQ1RMX0FTUE1DOworCWRhdGEgfD0gUENJX0VYUF9MTktDVExfRVMgfCAxOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgZGF0YSwgU0g0QV9QQ0lFRVhQQ0FQNCk7CiAKKwkvKiBXcml0ZSBvdXQgdGhlIHBoeXNpY2FsIHNsb3QgbnVtYmVyICovCisJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVFWFBDQVA1KTsKKwlkYXRhICY9IH5QQ0lfRVhQX1NMVENBUF9QU047CisJZGF0YSB8PSAocG9ydC0+aW5kZXggKyAxKSA8PCAxOTsKKwlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRUVYUENBUDUpOworCiAJLyogU2V0IHRoZSBjb21wbGV0aW9uIHRpbWVyIHRpbWVvdXQgdG8gdGhlIG1heGltdW0gMzJtcy4gKi8KIAlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVRMQ1RMUik7Ci0JZGF0YSAmPSB+MHhmZmZmOworCWRhdGEgJj0gfjB4M2YwMDsKIAlkYXRhIHw9IDB4MzIgPDwgODsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRVRMQ1RMUik7CiAKQEAgLTIyNCw2ICsyNTksMzMgQEAKIAlkYXRhIHw9ICgweGZmIDw8IDE2KTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRU1BQ0NUTFIpOwogCisJbWVtcGh5cyA9IF9fcGEobWVtb3J5X3N0YXJ0KTsKKwltZW1zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQpOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG1vcmUgdGhhbiA1MTJNQiBvZiBtZW1vcnksIHdlIG5lZWQgdG8gcm9sbCBvdmVyIHRvCisJICogTEFSMS9MQU1SMS4KKwkgKi8KKwlpZiAobWVtc2l6ZSA+IFNaXzUxMk0pIHsKKwkJX19yYXdfd3JpdGVsKG1lbXBoeXMgKyBTWl81MTJNLCBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRUxBUjEpOworCQlfX3Jhd193cml0ZWwoKChtZW1zaXplIC0gU1pfNTEyTSkgLSBTWl8yNTYpIHwgMSwKKwkJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQU1SMSk7CisJCW1lbXNpemUgPSBTWl81MTJNOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE90aGVyd2lzZSBqdXN0IHplcm8gaXQgb3V0IGFuZCBkaXNhYmxlIGl0LgorCQkgKi8KKwkJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFSMSk7CisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRUxBTVIxKTsKKwl9CisKKwkvKgorCSAqIExBUjAvTEFNUjAgY292ZXJzIHVwIHRvIHRoZSBmaXJzdCA1MTJNQiwgd2hpY2ggaXMgZW5vdWdoIHRvCisJICogY292ZXIgYWxsIG9mIGxvd21lbSBvbiBtb3N0IHBsYXRmb3Jtcy4KKwkgKi8KKwlfX3Jhd193cml0ZWwobWVtcGh5cywgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQVIwKTsKKwlfX3Jhd193cml0ZWwoKG1lbXNpemUgLSBTWl8yNTYpIHwgMSwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQU1SMCk7CisKIAkvKiBGaW5pc2ggaW5pdGlhbGl6YXRpb24gKi8KIAlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVRDVExSKTsKIAlkYXRhIHw9IDB4MTsKQEAgLTI0MywxMCArMzA1LDE0IEBACiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAxMDAwMDcsIFNINEFfUENJRVBDSUNPTkYxKTsKKwlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVBDSUNPTkYxKTsKKwlkYXRhICY9IH4oUENJX1NUQVRVU19ERVZTRUxfTUFTSyA8PCAxNik7CisJZGF0YSB8PSBQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8CisJCShQQ0lfU1RBVFVTX0NBUF9MSVNUIHwgUENJX1NUQVRVU19ERVZTRUxfRkFTVCkgPDwgMTY7CisJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVQQ0lDT05GMSk7CisKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ODA4ODgwMDAsIFNINEFfUENJRVRYVkMwRENUTFIpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDIyMjAwMCwgU0g0QV9QQ0lFUlhWQzBEQ1RMUik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDA1MEEwLCBTSDRBX1BDSUVFWFBDQVAyKTsKIAogCXdtYigpOwogCkBAIC0yNTQsMTUgKzMyMCwzMiBAQAogCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBQQ0llIyVkIGxpbmsgd2lkdGggJWRcbiIsCiAJICAgICAgIHBvcnQtPmluZGV4LCAoZGF0YSA+PiAyMCkgJiAweDNmKTsKIAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDdjMDAwMCwgU0g0QV9QQ0lFUEFNUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSSDApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSTDApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHg4MDAwMDEwMCwgU0g0QV9QQ0lFUFRDVExSMCk7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDNmYzAwMDAsIFNINEFfUENJRVBBTVIyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkgyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkwyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ODAwMDAwMDAsIFNINEFfUENJRVBUQ1RMUjIpOworCWZvciAoaSA9IDA7IGkgPCBjaGFuLT5ucl9yZXNvdXJjZXM7IGkrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGNoYW4tPnJlc291cmNlcyArIGk7CisJCXJlc291cmNlX3NpemVfdCBzaXplOworCQl1MzIgZW5hYmxlX21hc2s7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQVENUTFIoaSkpOworCisJCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwkJLyoKKwkJICogVGhlIFBBTVIgbWFzayBpcyBjYWxjdWxhdGVkIGluIHVuaXRzIG9mIDI1NmtCLCB3aGljaAorCQkgKiBrZWVwcyB0aGluZ3MgcHJldHR5IHNpbXBsZS4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgoKHJvdW5kdXBfcG93X29mX3R3byhzaXplKSAvIFNaXzI1NkspIC0gMSkgPDwgMTgsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFUEFNUihpKSk7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJIKGkpKTsKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJMKGkpKTsKKworCQllbmFibGVfbWFzayA9IE1BU0tfUEFSRTsKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQkJZW5hYmxlX21hc2sgfD0gTUFTS19TUEM7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCBlbmFibGVfbWFzaywgU0g0QV9QQ0lFUFRDVExSKGkpKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5Niw5ICszNzksNyBAQAogCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJcmV0dXJuIHJldDsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHBvcnQtPmhvc2UpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHBvcnQtPmhvc2UpOwogfQogCiBzdGF0aWMgc3RydWN0IHNoNzc4Nl9wY2llX2h3b3BzIHNoNzc4Nl82NW5tX3BjaWVfaHdvcHMgX19pbml0ZGF0YSA9IHsKQEAgLTMzMiwxNyArNDEzLDcgQEAKIAogCQlwb3J0LT5pbmRleAkJPSBpOwogCQlwb3J0LT5ob3NlCQk9IHNoNzc4Nl9wY2lfY2hhbm5lbHMgKyBpOwotCQlwb3J0LT5ob3NlLT5pb19tYXBfYmFzZQk9IHBvcnQtPmhvc2UtPmlvX3Jlc291cmNlLT5zdGFydDsKLQotCQkvKgotCQkgKiBDaGVjayBpZiB3ZSBhcmUgYm9vdGluZyBpbiAyOSBvciAzMi1iaXQgbW9kZQotCQkgKgotCQkgKiAzMi1iaXQgbW9kZSBwcm92aWRlcyBlYWNoIGNvbnRyb2xsZXIgd2l0aCBpdHMgb3duCi0JCSAqIG1lbW9yeSB3aW5kb3csIHdoaWxlIDI5LWJpdCBtb2RlIHVzZXMgYSBzaGFyZWQgb25lLgotCQkgKi8KLQkJcG9ydC0+aG9zZS0+bWVtX3Jlc291cmNlID0gdGVzdF9tb2RlX3BpbihNT0RFX1BJTjEwKSA/Ci0JCQkmc2g3Nzg2X3BjaV8zMmJpdF9tZW1fcmVzb3VyY2VzW2ldIDoKLQkJCSZzaDc3ODZfcGNpXzI5Yml0X21lbV9yZXNvdXJjZTsKKwkJcG9ydC0+aG9zZS0+aW9fbWFwX2Jhc2UJPSBwb3J0LT5ob3NlLT5yZXNvdXJjZXNbMF0uc3RhcnQ7CiAKIAkJcmV0IHw9IHNoNzc4Nl9wY2llX2h3b3BzLT5wb3J0X2luaXRfaHcocG9ydCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5oCmluZGV4IGM2NTUyOTAuLjkwYTY5OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmgKQEAgLTMwLDQ3ICszMCw5IEBACiAgKiBmb3Igb3RoZXIoTWF4IFBheWxvYWQgU2l6ZT00MDk2QixQQ0lJT19TSVpFPThNKQogICovCiAKLS8qIFBDSTAtMDogUENJIEkvTyBzcGFjZSAqLwotI2RlZmluZSBTSDRBX1BDSUlPX0JBU0UJCTB4RkQwMDAwMDAJLyogUENJIEkvTyBmb3IgY29udHJvbGxlciAwICovCi0jZGVmaW5lIFNINEFfUENJSU9fQkFTRTEJMHhGRDgwMDAwMAkvKiBQQ0kgSS9PIGZvciBjb250cm9sbGVyIDEgKFJldjEuMTQpKi8KLSNkZWZpbmUgU0g0QV9QQ0lJT19CQVNFMgkweEZDODAwMDAwCS8qIFBDSSBJL08gZm9yIGNvbnRyb2xsZXIgMiAoUmV2MS4xNzEpKi8KLQotI2RlZmluZSBTSDRBX1BDSUlPX1NJWkU2NAkweDAwMDEwMDAwCS8qIFBMWCBhbGxvd3Mgb25seSA2NEsgKi8KLSNkZWZpbmUgU0g0QV9QQ0lJT19TSVpFCQkweDAwODAwMDAwCS8qIDhNICovCi0jZGVmaW5lIFNINEFfUENJSU9fU0laRTIJMHgwMDQwMDAwMAkvKiA0TSAoUmV2MS4xNzEpKi8KLQotLyogUENJMC0xOiBQQ0kgbWVtb3J5IHNwYWNlIDI5LWJpdCBhZGRyZXNzICovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0UJMHgxMDAwMDAwMAotI2RlZmluZSBTSDRBX1BDSU1FTV9TSVpFCTB4MDQwMDAwMDAJLyogNjRNICovCi0KLS8qIFBDSTAtMjogUENJIG1lbW9yeSBzcGFjZSAzMi1iaXQgYWRkcmVzcyAqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFQQkweEMwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAwICovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0VBMQkweEEwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAxIChSZXYxLjE0KSovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0VBMgkweDgwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAyIChSZXYxLjE3MSkqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9TSVpFQQkweDIwMDAwMDAwCS8qIDUxMk0gKi8KLQogLyogUENJMDogUENJIG1lbW9yeSB0YXJnZXQgdHJhbnNmZXIgMzItYml0IGFkZHJlc3MgdHJhbnNsYXRpb24gdmFsdWUoUmV2MS4xMVQpKi8KICNkZWZpbmUgU0g0QV9QQ0lCTVNUUl9UUkFOU0xBVElPTgkweDIwMDAwMDAwCiAKLSNkZWZpbmUgU0g0QV9QQ0lfREVWSUNFX0lECQkweDAwMDIKLSNkZWZpbmUgU0g0QV9QQ0lfVkVORE9SX0lECQkweDE5MTIKLQotLy8gUENJIGNvbXBhdGlibGUgMDAwLTAzZgotI2RlZmluZSBQQ0lfQ01ECQkweDAwNAotI2RlZmluZSBQQ0lfUklECQkweDAwOAotI2RlZmluZSBQQ0lfSUJBUgkweDAxMAotI2RlZmluZSBQQ0lfTUJBUjAJMHgwMTQKLSNkZWZpbmUgUENJX01CQVIxCTB4MDE4Ci0KLS8qIFBDSSBwb3dlciBtYW5hZ2VtZW50L01TSS9jYXBhYmxpdHkgMDQwLTBmZiAqLwotLyogUENJRSBleHRlbmRlZCAxMDAtZmZmICovCi0KLS8qIFNINzc4NiBkZXZpY2UgaWRlbnRpZmljYXRpb24gKi8JLy8gUmV2MS4xNzEKLSNkZWZpbmUgU0g0QV9QVlIJCSgweEZGMDAwMDMwKQotI2RlZmluZSBTSDRBX1BWUl9TSFgzCQkoMHgxMDQwMDAwMCkKLSNkZWZpbmUgU0g0QV9QUlIJCSgweEZGMDAwMDQ0KQotI2RlZmluZSBTSDRBX1BSUl9TSDc3ODYJCSgweDAwMDAwNDAwKQkvLyBSZXYxLjE3MQotCiAvKglTUFZDUjAJCSovCiAjZGVmaW5lCVNINEFfUENJRVZDUjAJCSgweDAwMDAwMCkJLyogUiAtIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCQlCSVRTX1RPUF9NQgkoMjQpCkBAIC0zNTAsMjMgKzMxMiwyMyBAQAogI2RlZmluZQlTSDRBX1BDSUVDU0FSNQkJKDB4MDIwMkI0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRVNUQ1RMUjUJKDB4MDIwMkI4KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAKLS8qCVBDSUVQQVJMMAkqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMAkJKDB4MDIwNDAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCisvKglQQ0lFUEFSTAkqLworI2RlZmluZQlTSDRBX1BDSUVQQVJMKHgpCSgweDAyMDQwMCArICgoeCkgKiAweDIwKSkgLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19QQUwJKDE4KQogI2RlZmluZQkJTUFTS19QQUwJKDB4M2ZmZjw8QklUU19QQUwpCiAKLS8qCVBDSUVQQVJIMAkqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMAkJKDB4MDIwNDA0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCisvKglQQ0lFUEFSSAkqLworI2RlZmluZQlTSDRBX1BDSUVQQVJIKHgpCSgweDAyMDQwNCArICgoeCkgKiAweDIwKSkgLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19QQUgJKDApCiAjZGVmaW5lCQlNQVNLX1BBSAkoMHhmZmZmZmZmZjw8QklUU19QQUgpCiAKLS8qCVBDSUVQQU1SMAkgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjAJCSgweDAyMDQwOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLworLyoJUENJRVBBTVIJICovCisjZGVmaW5lCVNINEFfUENJRVBBTVIoeCkJKDB4MDIwNDA4ICsgKCh4KSAqIDB4MjApKSAvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCQlCSVRTX1BBTQkoMTgpCiAjZGVmaW5lCQlNQVNLX1BBTQkoMHgzZmZmPDxCSVRTX1BBTSkKIAotLyoJUENJRVBUQ1RMUjAJKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMAkoMHgwMjA0MEMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KKy8qCVBDSUVQVENUTFIJKi8KKyNkZWZpbmUgU0g0QV9QQ0lFUFRDVExSKHgpCSgweDAyMDQwQyArICgoeCkgKiAweDIwKSkKICNkZWZpbmUJCUJJVFNfUEFSRQkoMzEpCiAjZGVmaW5lCQlNQVNLX1BBUkUJKDB4MTw8QklUU19QQVJFKQogI2RlZmluZQkJQklUU19UQwkJKDIwKQpAQCAtMzc4LDI2ICszNDAsNiBAQAogI2RlZmluZQkJQklUU19TUEMJKDgpCiAjZGVmaW5lCQlNQVNLX1NQQwkoMHgxPDxCSVRTX1NQQykKIAotI2RlZmluZQlTSDRBX1BDSUVQQVJMMQkJKDB4MDIwNDIwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgxCQkoMHgwMjA0MjQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjEJCSgweDAyMDQyOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIxCSgweDAyMDQyQykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMgkJKDB4MDIwNDQwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgyCQkoMHgwMjA0NDQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjIJCSgweDAyMDQ0OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIyCSgweDAyMDQ0QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMwkJKDB4MDIwNDYwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgzCQkoMHgwMjA0NjQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjMJCSgweDAyMDQ2OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIzCSgweDAyMDQ2QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMNAkJKDB4MDIwNDgwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkg0CQkoMHgwMjA0ODQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjQJCSgweDAyMDQ4OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFI0CSgweDAyMDQ4QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMNQkJKDB4MDIwNEEwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkg1CQkoMHgwMjA0QTQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjUJCSgweDAyMDRBOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFI1CSgweDAyMDRBQykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVETUFPUgkJKDB4MDIxMDAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRURNU0FSMAkJKDB4MDIxMTAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRURNU0FIUjAJKDB4MDIxMTA0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jIGIvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYwppbmRleCAzYjE0YmY4Li42ZGE2MmU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9zdXBlcmh5d2F5L29wcy1zaDQtMjAyLmMKQEAgLTEzNCw4ICsxMzQsOCBAQAogCSAqCiAJICogRG8gbm90IHRydXN0IHRoZSBkb2N1bWVudGF0aW9uLCBmb3IgaXQgaXMgZXZpbC4KIAkgKi8KLQl2Y3JoID0gY3RybF9pbmwoYmFzZSk7Ci0JdmNybCA9IGN0cmxfaW5sKGJhc2UgKyBzaXplb2YodTMyKSk7CisJdmNyaCA9IF9fcmF3X3JlYWRsKGJhc2UpOworCXZjcmwgPSBfX3Jhd19yZWFkbChiYXNlICsgc2l6ZW9mKHUzMikpOwogCiAJdG1wID0gKCh1NjQpdmNyaCA8PCAzMikgfCB2Y3JsOwogCW1lbWNweSh2Y3IsICZ0bXAsIHNpemVvZih1NjQpKTsKQEAgLTE0Nyw4ICsxNDcsOCBAQAogewogCXU2NCB0bXAgPSAqKHU2NCAqKSZ2Y3I7CiAKLQljdHJsX291dGwoKHRtcCA+PiAzMikgJiAweGZmZmZmZmZmLCBiYXNlKTsKLQljdHJsX291dGwodG1wICYgMHhmZmZmZmZmZiwgYmFzZSArIHNpemVvZih1MzIpKTsKKwlfX3Jhd193cml0ZWwoKHRtcCA+PiAzMikgJiAweGZmZmZmZmZmLCBiYXNlKTsKKwlfX3Jhd193cml0ZWwodG1wICYgMHhmZmZmZmZmZiwgYmFzZSArIHNpemVvZih1MzIpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZAppbmRleCBlMTIxYzMwLi40NmNiOTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZApAQCAtMSw2ICsxLDggQEAKIGluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCiAKLWhlYWRlci15ICs9IGNhY2hlY3RsLmggY3B1LWZlYXR1cmVzLmgKK2hlYWRlci15ICs9IGNhY2hlY3RsLmgKK2hlYWRlci15ICs9IGNwdS1mZWF0dXJlcy5oCitoZWFkZXIteSArPSBod19icmVha3BvaW50LmgKIAogdW5pZmRlZi15ICs9IHVuaXN0ZF8zMi5oCiB1bmlmZGVmLXkgKz0gdW5pc3RkXzY0LmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCmluZGV4IDk5ZDZiM2UuLjQ0NmIzODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaApAQCAtMjgsNyArMjgsNyBAQAogLyogUmV0dXJucyB0aGUgcHJpdmlsZWdlZCBzZWdtZW50IGJhc2Ugb2YgYSBnaXZlbiBhZGRyZXNzICAqLwogI2RlZmluZSBQWFNFRyhhKQkoKCh1bnNpZ25lZCBsb25nKShhKSkgJiAweGUwMDAwMDAwKQogCi0jaWYgZGVmaW5lZChDT05GSUdfMjlCSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKKyNpZmRlZiBDT05GSUdfMjlCSVQKIC8qCiAgKiBNYXAgYW4gYWRkcmVzcyB0byBhIGNlcnRhaW4gcHJpdmlsZWdlZCBzZWdtZW50CiAgKi8KQEAgLTQwLDcgKzQwLDE1IEBACiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQM1NFRykpCiAjZGVmaW5lIFA0U0VHQUREUihhKQlcCiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQNFNFRykpCi0jZW5kaWYgLyogMjlCSVQgfHwgUE1CX0ZJWEVEICovCisjZWxzZQorLyoKKyAqIFRoZXNlIHdpbGwgbmV2ZXIgd29yayBpbiAzMi1iaXQsIGRvbid0IGV2ZW4gYm90aGVyLgorICovCisjZGVmaW5lIFAxU0VHQUREUihhKQlfX2Z1dGlsZV9yZW1hcHBpbmdfYXR0ZW1wdAorI2RlZmluZSBQMlNFR0FERFIoYSkJX19mdXRpbGVfcmVtYXBwaW5nX2F0dGVtcHQKKyNkZWZpbmUgUDNTRUdBRERSKGEpCV9fZnV0aWxlX3JlbWFwcGluZ19hdHRlbXB0CisjZGVmaW5lIFA0U0VHQUREUihhKQlfX2Z1dGlsZV9yZW1hcHBpbmdfYXR0ZW1wdAorI2VuZGlmCiAjZW5kaWYgLyogUDFTRUcgKi8KIAogLyogQ2hlY2sgaWYgYW4gYWRkcmVzcyBjYW4gYmUgcmVhY2hlZCBpbiAyOSBiaXRzICovCkBAIC01NywxMSArNjUsNSBAQAogI2RlZmluZSBQM19BRERSX01BWAkJUDRTRUcKICNlbmRpZgogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2lmZGVmIENPTkZJR19QTUIKLWV4dGVybiBpbnQgX19pbl8yOWJpdF9tb2RlKHZvaWQpOwotI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9BRERSU1BBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hbGlnbm1lbnQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWxpZ25tZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyZWZlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWxpZ25tZW50LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9BTElHTk1FTlRfSAorI2RlZmluZSBfX0FTTV9TSF9BTElHTk1FTlRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgaW5jX3VuYWxpZ25lZF9ieXRlX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfd29yZF9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX2R3b3JkX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfbXVsdGlfYWNjZXNzKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5jX3VuYWxpZ25lZF91c2VyX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfa2VybmVsX2FjY2Vzcyh2b2lkKTsKKworI2RlZmluZSBVTV9XQVJOCQkoMSA8PCAwKQorI2RlZmluZSBVTV9GSVhVUAkoMSA8PCAxKQorI2RlZmluZSBVTV9TSUdOQUwJKDEgPDwgMikKKworZXh0ZXJuIHVuc2lnbmVkIGludCB1bmFsaWduZWRfdXNlcl9hY3Rpb24odm9pZCk7CisKK2V4dGVybiB2b2lkIHVuYWxpZ25lZF9maXh1cHNfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnNuX3NpemVfdCwgc3RydWN0IHB0X3JlZ3MgKik7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9BTElHTk1FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaAppbmRleCA0YzViN2RiLi5hMjczYzg4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaApAQCAtMTIwLDUwICsxMjAsNCBAQAogCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQotewotCWludCByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIgICAuYWxpZ24gMgkJXG5cdCIKLQkJIiAgIG1vdmEgICAgIDFmLCAgcjAJXG5cdCIKLQkJIiAgIG5vcAkJCVxuXHQiCi0JCSIgICBtb3YgICAgIHIxNSwgIHIxCVxuXHQiCi0JCSIgICBtb3YgICAgIy04LCAgcjE1CVxuXHQiCi0JCSIgICBtb3YubCAgIEAlMSwgICUwCVxuXHQiCi0JCSIgICBjbXAvZXEgICAlMiwgICUwCVxuXHQiCi0JCSIgICBiZgkgICAgIDFmCQlcblx0IgotCQkiICAgbW92LmwgICAgJTMsIEAlMQlcblx0IgotCQkiMTogbW92ICAgICAgcjEsICByMTUJXG5cdCIKLQkJOiAiPSZyIiAocmV0KQotCQk6ICJyIiAodiksICJyIiAob2xkKSwgInIiIChuZXcpCi0JCTogIm1lbW9yeSIgLCAicjAiLCAicjEiICwgInQiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiAgIC5hbGlnbiAyCQlcblx0IgotCQkiICAgbW92YSAgICAxZiwgICByMAlcblx0IgotCQkiICAgbm9wCQkJXG5cdCIKLQkJIiAgIG1vdiAgICByMTUsICAgcjEJXG5cdCIKLQkJIiAgIG1vdiAgICAjLTEyLCAgcjE1CVxuXHQiCi0JCSIgICBtb3YubCAgQCUyLCAgICUxCVxuXHQiCi0JCSIgICBtb3YJICAgICUxLCAgICUwICAgIFxuXHQiCi0JCSIgICBjbXAvZXEgICU0LCAgICUwCVxuXHQiCi0JCSIgICBidC9zICAgIDFmCQlcblx0IgotCQkiICAgIGFkZCAgICAlMywgICAlMQlcblx0IgotCQkiICAgbW92LmwgICAlMSwgIEAlMglcblx0IgotCQkiMTogbW92ICAgICByMSwgICByMTUJXG5cdCIKLQkJOiAiPSZyIiAocmV0KSwgIj0mciIgKHRtcCkKLQkJOiAiciIgKHYpLCAiciIgKGEpLCAiciIgKHUpCi0JCTogIm1lbW9yeSIgLCAicjAiLCAicjEiICwgInQiKTsKLQotCXJldHVybiByZXQgIT0gdTsKLX0KICNlbmRpZiAvKiBfX0FTTV9TSF9BVE9NSUNfR1JCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWxsc2MuaAppbmRleCBiMDQwZTFlLi40YjAwYjc4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1sbHNjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtbGxzYy5oCkBAIC0xMDQsMzEgKzEwNCw0IEBACiAJOiAidCIpOwogfQogCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQotCi0vKioKLSAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCi0gKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCBjLCBvbGQ7Ci0JYyA9IGF0b21pY19yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKLQkJCWJyZWFrOwotCQljID0gb2xkOwotCX0KLQotCXJldHVybiBjICE9ICh1KTsKLX0KLQogI2VuZGlmIC8qIF9fQVNNX1NIX0FUT01JQ19MTFNDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGIxNjM4OGQuLjI3NWE0NDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMjUsNTggKzI1LDQzIEBACiAjZW5kaWYKIAogI2RlZmluZSBhdG9taWNfYWRkX25lZ2F0aXZlKGEsIHYpCShhdG9taWNfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KQkJYXRvbWljX3N1Yl9yZXR1cm4oMSwgKHYpKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KQkJYXRvbWljX2FkZF9yZXR1cm4oMSwgKHYpKQorI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpCQkoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKKyNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChpLHYpCShhdG9taWNfc3ViX3JldHVybigoaSksICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KQkJKGF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KQkJYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCi0jZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpIGF0b21pY19zdWJfcmV0dXJuKDEsKHYpKQotI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSBhdG9taWNfYWRkX3JldHVybigxLCh2KSkKKyNkZWZpbmUgYXRvbWljX2luYyh2KQkJCWF0b21pY19hZGQoMSwgKHYpKQorI2RlZmluZSBhdG9taWNfZGVjKHYpCQkJYXRvbWljX3N1YigxLCAodikpCiAKLS8qCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykJCSh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKKyNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgbywgbikJCShjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorCisvKioKKyAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KICAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KICAqLwotI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpIChhdG9taWNfaW5jX3JldHVybih2KSA9PSAwKQotCi0jZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KSAoYXRvbWljX3N1Yl9yZXR1cm4oKGkpLCAodikpID09IDApCi0jZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikgKGF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfaW5jKHYpIGF0b21pY19hZGQoMSwodikpCi0jZGVmaW5lIGF0b21pY19kZWModikgYXRvbWljX3N1YigxLCh2KSkKLQotI2lmICFkZWZpbmVkKENPTkZJR19HVVNBX1JCKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmV0ID0gdi0+Y291bnRlcjsKLQlpZiAobGlrZWx5KHJldCA9PSBvbGQpKQotCQl2LT5jb3VudGVyID0gbmV3OwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCiB7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlyZXQgPSB2LT5jb3VudGVyOwotCWlmIChyZXQgIT0gdSkKLQkJdi0+Y291bnRlciArPSBhOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiByZXQgIT0gdTsKKwlyZXR1cm4gYyAhPSAodSk7CiB9Ci0jZW5kaWYgLyogIUNPTkZJR19HVVNBX1JCICYmICFDT05GSUdfQ1BVX1NINEEgKi8KLQotI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKLSNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYigpCiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCXNtcF9tYigpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGRkYTk2ZWIuLmRhM2ViZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC02Myw2ICs2MywxNCBAQAogCWlmIChib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgJiYgUGFnZUFub24ocGFnZSkpCiAJCV9fZmx1c2hfYW5vbl9wYWdlKHBhZ2UsIHZtYWRkcik7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJX19mbHVzaF93YmFja19yZWdpb24oYWRkciwgc2l6ZSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlfX2ZsdXNoX2ludmFsaWRhdGVfcmVnaW9uKGFkZHIsIHNpemUpOworfQogCiAjZGVmaW5lIEFSQ0hfSEFTX0ZMVVNIX0tFUk5FTF9EQ0FDSEVfUEFHRQogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAppbmRleCA5ZmU3ZDdmLi4xMWRhNGM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0xNDYsOCArMTQ2LDE3IEBACiAJLmZsYWdzID0gX2ZsYWdzLAkJCQkJCVwKIH0KIAorc3RydWN0IGNsa19kaXY0X3RhYmxlIHsKKwlzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlICpkaXZfbXVsdF90YWJsZTsKKwl2b2lkICgqa2ljaykoc3RydWN0IGNsayAqY2xrKTsKK307CisKIGludCBzaF9jbGtfZGl2NF9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCi0JCQkgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUpOworCQkJIHN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpOworaW50IHNoX2Nsa19kaXY0X2VuYWJsZV9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQkgc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSk7CitpbnQgc2hfY2xrX2RpdjRfcmVwYXJlbnRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJIHN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpOwogCiAjZGVmaW5lIFNIX0NMS19ESVY2KF9uYW1lLCBfcGFyZW50LCBfcmVnLCBfZmxhZ3MpCVwKIHsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oCmluZGV4IGUyNjgxYWIuLjQ2NzZiZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmgKQEAgLTU3LDExICs1NywxMCBAQAogCQkiICAgbW92LmwgIEAlMSwgICAlMCAgICAgIFxuXHQiIC8qIGxvYWQgIG9sZCB2YWx1ZSAqLwogCQkiICAgY21wL2VxICAlMCwgICAlMiAgICAgIFxuXHQiCiAJCSIgICBiZiAgICAgICAgICAgIDFmICAgICAgXG5cdCIgLyogaWYgbm90IGVxdWFsICovCi0JCSIgICBtb3YubCAgICUyLCAgIEAlMSAgICAgXG5cdCIgLyogc3RvcmUgbmV3IHZhbHVlICovCisJCSIgICBtb3YubCAgICUzLCAgIEAlMSAgICAgXG5cdCIgLyogc3RvcmUgbmV3IHZhbHVlICovCiAJCSIxOiBtb3YgICAgIHIxLCAgIHIxNSAgICAgXG5cdCIgLyogTE9HT1VUICovCi0JCTogIj0mciIgKHJldHZhbCksCi0JCSAgIityIiAgKG0pCi0JCTogInIiICAgKG5ldykKKwkJOiAiPSZyIiAocmV0dmFsKQorCQk6ICAiciIgIChtKSwgInIiICAob2xkKSwgInIiICAobmV3KQogCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIiwgInQiKTsKIAogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggODdjZWQxMy4uYmVhMzMzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtODksOCArODksNiBAQAogewogCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIAotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsJLyogZm9yIHBvcnRhYmlsaXR5ICovCi0KIAlpZiAoZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIGdldF9vcmRlcihzaXplKSwgdmFkZHIpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCmluZGV4IDc4ZWVkM2UuLmU5MzRhMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaApAQCAtMjAsMTQgKzIwLDE0IEBACiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQogI2RlZmluZSBkbWFvcl9yZWFkX3JlZyhuKSBcCi0gICAgKG4gPyBjdHJsX2ludyhTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKLQk6IGN0cmxfaW53KFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCisgICAgKG4gPyBfX3Jhd19yZWFkdyhTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKKwk6IF9fcmF3X3JlYWR3KFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCiAjZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhuLCBkYXRhKSBcCi0gICAgKG4gPyBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMSArIERNQU9SKSBcCi0gICAgOiBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKKyAgICAobiA/IF9fcmF3X3dyaXRldyhkYXRhLCBTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKKyAgICA6IF9fcmF3X3dyaXRldyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQogI2Vsc2UgLyogT3RoZXIgQ1BVICovCi0jZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIGN0cmxfaW53KFNIX0RNQUNfQkFTRTAgKyBETUFPUikKLSNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpCisjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIF9fcmF3X3JlYWR3KFNIX0RNQUNfQkFTRTAgKyBETUFPUikKKyNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIF9fcmF3X3dyaXRldyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpCiAjZW5kaWYKIAogc3RhdGljIGludCBkbXRlX2lycV9tYXBbXSBfX21heWJlX3VudXNlZCA9IHsKQEAgLTY0LDggKzY0LDEwIEBACiAjZGVmaW5lIEFDS19MCTB4MDAwMTAwMDAKICNkZWZpbmUgRE1fSU5DCTB4MDAwMDQwMDAKICNkZWZpbmUgRE1fREVDCTB4MDAwMDgwMDAKKyNkZWZpbmUgRE1fRklYCTB4MDAwMGMwMDAKICNkZWZpbmUgU01fSU5DCTB4MDAwMDEwMDAKICNkZWZpbmUgU01fREVDCTB4MDAwMDIwMDAKKyNkZWZpbmUgU01fRklYCTB4MDAwMDMwMDAKICNkZWZpbmUgUlNfSU4JMHgwMDAwMDIwMAogI2RlZmluZSBSU19PVVQJMHgwMDAwMDMwMAogI2RlZmluZSBUU19CTEsJMHgwMDAwMDA0MApAQCAtODMsNyArODUsNyBAQAogICogRGVmaW5lIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGR1YWwgYWRkcmVzcyBtZW1vcnktbWVtb3J5IHRyYW5zZmVyLgogICogVGhlIDB4NDAwIHZhbHVlIHJlcHJlc2VudHMgYXV0by1yZXF1ZXN0LCBleHRlcm5hbC0+ZXh0ZXJuYWwuCiAgKi8KLSNkZWZpbmUgUlNfRFVBTAkoRE1fSU5DIHwgU01fSU5DIHwgMHg0MDAgfCBUU18zMikKKyNkZWZpbmUgUlNfRFVBTAkoRE1fSU5DIHwgU01fSU5DIHwgMHg0MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl8zMkJJVCkpCiAKIC8qIERNQSBiYXNlIGFkZHJlc3MgKi8KIHN0YXRpYyB1MzIgZG1hX2Jhc2VfYWRkcltdIF9fbWF5YmVfdW51c2VkID0gewpAQCAtMTIzLDEwICsxMjUsNDcgQEAKICAqLwogI2RlZmluZSBTSERNQV9NSVhfSVJRCSgxIDw8IDEpCiAjZGVmaW5lIFNIRE1BX0RNQU9SMQkoMSA8PCAyKQotI2RlZmluZSBTSERNQV9ETUFFMQkJKDEgPDwgMykKKyNkZWZpbmUgU0hETUFfRE1BRTEJKDEgPDwgMykKKworZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgeworCVNIRE1BX1NMQVZFX1NDSUYwX1RYLAorCVNIRE1BX1NMQVZFX1NDSUYwX1JYLAorCVNIRE1BX1NMQVZFX1NDSUYxX1RYLAorCVNIRE1BX1NMQVZFX1NDSUYxX1JYLAorCVNIRE1BX1NMQVZFX1NDSUYyX1RYLAorCVNIRE1BX1NMQVZFX1NDSUYyX1JYLAorCVNIRE1BX1NMQVZFX1NDSUYzX1RYLAorCVNIRE1BX1NMQVZFX1NDSUYzX1JYLAorCVNIRE1BX1NMQVZFX1NDSUY0X1RYLAorCVNIRE1BX1NMQVZFX1NDSUY0X1JYLAorCVNIRE1BX1NMQVZFX1NDSUY1X1RYLAorCVNIRE1BX1NMQVZFX1NDSUY1X1JYLAorCVNIRE1BX1NMQVZFX1NJVUFfVFgsCisJU0hETUFfU0xBVkVfU0lVQV9SWCwKKwlTSERNQV9TTEFWRV9TSVVCX1RYLAorCVNIRE1BX1NMQVZFX1NJVUJfUlgsCisJU0hETUFfU0xBVkVfTlVNQkVSLAkvKiBNdXN0IHN0YXkgbGFzdCAqLworfTsKKworc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIHsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZAlzbGF2ZV9pZDsKKwlkbWFfYWRkcl90CQkJYWRkcjsKKwl1MzIJCQkJY2hjcjsKKwljaGFyCQkJCW1pZF9yaWQ7Cit9OwogCiBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSB7CiAJdW5zaWduZWQgaW50IG1vZGU7CisJc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnICpjb25maWc7CisJaW50IGNvbmZpZ19udW07Cit9OworCitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSB7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfaWQ7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KKwlzdHJ1Y3QgZGV2aWNlCQkJKmRtYV9kZXY7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcJKmNvbmZpZzsgIC8qIFNldCBieSB0aGUgZHJpdmVyICovCiB9OwogCiAjZW5kaWYgLyogX19ETUFfU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kd2FyZi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kd2FyZi5oCmluZGV4IGJkY2NiYmYuLmQ2MmFiZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZHdhcmYuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2R3YXJmLmgKQEAgLTI0MywxNiArMjQzLDEzIEBACiAKIAl1bnNpZ25lZCBsb25nIGNpZV9wb2ludGVyOwogCi0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKICNkZWZpbmUgRFdBUkZfQ0lFX1pfQVVHTUVOVEFUSU9OCSgxIDw8IDApCiAKLQkvKgotCSAqICdtb2QnIHdpbGwgYmUgbm9uLU5VTEwgaWYgdGhpcyBDSUUgY2FtZSBmcm9tIGEgbW9kdWxlJ3MKLQkgKiAuZWhfZnJhbWUgc2VjdGlvbi4KLQkgKi8KLQlzdHJ1Y3QgbW9kdWxlICptb2Q7CisJLyogbGlua2VkLWxpc3QgZW50cnkgaWYgdGhpcyBDSUUgaXMgZnJvbSBhIG1vZHVsZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKworCXN0cnVjdCByYl9ub2RlIG5vZGU7CiB9OwogCiAvKioKQEAgLTI2NiwxMyArMjYzLDExIEBACiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzX3JhbmdlOwogCXVuc2lnbmVkIGNoYXIgKmluc3RydWN0aW9uczsKIAl1bnNpZ25lZCBjaGFyICplbmQ7CisKKwkvKiBsaW5rZWQtbGlzdCBlbnRyeSBpZiB0aGlzIEZERSBpcyBmcm9tIGEgbW9kdWxlICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwogCi0JLyoKLQkgKiAnbW9kJyB3aWxsIGJlIG5vbi1OVUxMIGlmIHRoaXMgRkRFIGNhbWUgZnJvbSBhIG1vZHVsZSdzCi0JICogLmVoX2ZyYW1lIHNlY3Rpb24uCi0JICovCi0Jc3RydWN0IG1vZHVsZSAqbW9kOworCXN0cnVjdCByYl9ub2RlIG5vZGU7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDVhYzFlNDAuLjZlN2NlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZml4bWFwLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtNTUsMTYgKzU1LDI5IEBACiAjZGVmaW5lIEZJWF9OX0NPTE9VUlMgOAogCUZJWF9DTUFQX0JFR0lOLAogCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgKEZJWF9OX0NPTE9VUlMgKiBOUl9DUFVTKSAtIDEsCi0JRklYX1VOQ0FDSEVELAorCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAlGSVhfS01BUF9CRUdJTiwJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KIAlGSVhfS01BUF9FTkQgPSBGSVhfS01BUF9CRUdJTisoS01fVFlQRV9OUipOUl9DUFVTKS0xLAogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU9SRU1BUF9GSVhFRAorCS8qCisJICogRklYX0lPUkVNQVAgZW50cmllcyBhcmUgdXNlZnVsIGZvciBtYXBwaW5nIHBoeXNpY2FsIGFkZHJlc3MKKwkgKiBzcGFjZSBiZWZvcmUgaW9yZW1hcCgpIGlzIHVzZWFibGUsIGUuZy4gcmVhbGx5IGVhcmx5IGluIGJvb3QKKwkgKiBiZWZvcmUga21hbGxvYygpIGlzIHdvcmtpbmcuCisJICovCisjZGVmaW5lIEZJWF9OX0lPUkVNQVBTCTMyCisJRklYX0lPUkVNQVBfQkVHSU4sCisJRklYX0lPUkVNQVBfRU5EID0gRklYX0lPUkVNQVBfQkVHSU4gKyBGSVhfTl9JT1JFTUFQUywKKyNlbmRpZgorCiAJX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCiB9OwogCiBleHRlcm4gdm9pZCBfX3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LAogCQkJIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpOworZXh0ZXJuIHZvaWQgX19jbGVhcl9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LCBwZ3Byb3RfdCBmbGFncyk7CiAKICNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpIFwKIAkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaAppbmRleCBmYjZiYmI5Li4wNmM0MjgxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTIsOCArMiw4IEBACiAjZGVmaW5lIF9fQVNNX1NIX0ZQVV9ICiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RydWN0IHRhc2tfc3RydWN0OwogCiAjaWZkZWYgQ09ORklHX1NIX0ZQVQogc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfZnB1KHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMTYsMjIgKzE2LDIzIEBACiAJcmVncy0+c3IgJj0gflNSX0ZEOwogfQogCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci0KIGV4dGVybiB2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqX190c2spOwotdm9pZCBmcHVfc3RhdGVfcmVzdG9yZShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fdHNrKTsKK2V4dGVybiB2b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIF9fZnB1X3N0YXRlX3Jlc3RvcmUodm9pZCk7CiAjZWxzZQotCi0jZGVmaW5lIHNhdmVfZnB1KHRzaykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcmVsZWFzZV9mcHUocmVncykJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBncmFiX2ZwdShyZWdzKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmcHVfc3RhdGVfcmVzdG9yZShyZWdzKQlkbyB7IH0gd2hpbGUgKDApCi0KKyNkZWZpbmUgc2F2ZV9mcHUodHNrKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmVzdG9yZV9mcHUodHNrKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZWxlYXNlX2ZwdShyZWdzKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBncmFiX2ZwdShyZWdzKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZnB1X3N0YXRlX3Jlc3RvcmUocmVncykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19mcHVfc3RhdGVfcmVzdG9yZShyZWdzKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogc3RydWN0IHVzZXJfcmVnc2V0OwogCiBleHRlcm4gaW50IGRvX2ZwdV9pbnN0KHVuc2lnbmVkIHNob3J0LCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCiBleHRlcm4gaW50IGZwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LApAQCAtNjUsMTggKzY2LDYgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlpZiAodHNrX3VzZWRfbWF0aCh0c2spKSB7Ci0JCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSAmJiB0c2sgPT0gY3VycmVudCkKLQkJCXVubGF6eV9mcHUodHNrLCB0YXNrX3B0X3JlZ3ModHNrKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0c2spOwotCXJldHVybiAwOwotfQotCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX0FTTV9TSF9GUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjVkZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfX0FTTV9TSF9IV19CUkVBS1BPSU5UX0gKKyNkZWZpbmUgX19BU01fU0hfSFdfQlJFQUtQT0lOVF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fQVJDSF9IV19CUkVBS1BPSU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgeworCWNoYXIJCSpuYW1lOyAvKiBDb250YWlucyBuYW1lIG9mIHRoZSBzeW1ib2wgdG8gc2V0IGJrcHQgKi8KKwl1bnNpZ25lZCBsb25nCWFkZHJlc3M7CisJdTE2CQlsZW47CisJdTE2CQl0eXBlOworfTsKKworZW51bSB7CisJU0hfQlJFQUtQT0lOVF9SRUFECT0gKDEgPDwgMSksCisJU0hfQlJFQUtQT0lOVF9XUklURQk9ICgxIDw8IDIpLAorCVNIX0JSRUFLUE9JTlRfUlcJPSBTSF9CUkVBS1BPSU5UX1JFQUQgfCBTSF9CUkVBS1BPSU5UX1dSSVRFLAorCisJU0hfQlJFQUtQT0lOVF9MRU5fMQk9ICgxIDw8IDEyKSwKKwlTSF9CUkVBS1BPSU5UX0xFTl8yCT0gKDEgPDwgMTMpLAorCVNIX0JSRUFLUE9JTlRfTEVOXzQJPSBTSF9CUkVBS1BPSU5UX0xFTl8xIHwgU0hfQlJFQUtQT0lOVF9MRU5fMiwKKwlTSF9CUkVBS1BPSU5UX0xFTl84CT0gKDEgPDwgMTQpLAorfTsKKworc3RydWN0IHNoX3ViYyB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1bnNpZ25lZCBpbnQJbnVtX2V2ZW50czsKKwl1bnNpZ25lZCBpbnQJdHJhcF9ucjsKKwl2b2lkCQkoKmVuYWJsZSkoc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqLCBpbnQpOworCXZvaWQJCSgqZGlzYWJsZSkoc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqLCBpbnQpOworCXZvaWQJCSgqZW5hYmxlX2FsbCkodW5zaWduZWQgbG9uZyk7CisJdm9pZAkJKCpkaXNhYmxlX2FsbCkodm9pZCk7CisJdW5zaWduZWQgbG9uZwkoKmFjdGl2ZV9tYXNrKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nCSgqdHJpZ2dlcmVkX21hc2spKHZvaWQpOworCXZvaWQJCSgqY2xlYXJfdHJpZ2dlcmVkX21hc2spKHVuc2lnbmVkIGxvbmcpOworCXN0cnVjdCBjbGsJKmNsazsJLyogb3B0aW9uYWwgaW50ZXJmYWNlIGNsb2NrIC8gTVNUUCBiaXQgKi8KK307CisKK3N0cnVjdCBwZXJmX2V2ZW50Oworc3RydWN0IHRhc2tfc3RydWN0Oworc3RydWN0IHBtdTsKKworLyogTWF4aW11bSBudW1iZXIgb2YgVUJDIGNoYW5uZWxzICovCisjZGVmaW5lIEhCUF9OVU0JCTIKKworLyogYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jICovCitleHRlcm4gaW50IGFyY2hfY2hlY2tfdmFfaW5fdXNlcnNwYWNlKHVuc2lnbmVkIGxvbmcgdmEsIHUxNiBoYnBfbGVuKTsKK2V4dGVybiBpbnQgYXJjaF92YWxpZGF0ZV9od2JrcHRfc2V0dGluZ3Moc3RydWN0IHBlcmZfZXZlbnQgKmJwLAorCQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIGludCBod19icmVha3BvaW50X2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSk7CisKK2ludCBhcmNoX2luc3RhbGxfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwordm9pZCBhcmNoX3VuaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7Cit2b2lkIGh3X2JyZWFrcG9pbnRfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfdW50aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOworCitleHRlcm4gdm9pZCBhcmNoX2ZpbGxfcGVyZl9icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CitleHRlcm4gaW50IHJlZ2lzdGVyX3NoX3ViYyhzdHJ1Y3Qgc2hfdWJjICopOworCitleHRlcm4gc3RydWN0IHBtdSBwZXJmX29wc19icDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9IV19CUkVBS1BPSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAppbmRleCAwMjZkZDY1Li43ZGFiN2IyMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaApAQCAtMjIsNiArMjIsNyBAQAogICogZm9yIG9sZCBjb21wYXQgY29kZSBmb3IgSS9PIG9mZnNldGluZyB0byBTdXBlcklPcywgYWxsIG9mIHdoaWNoIGFyZQogICogYmV0dGVyIGhhbmRsZWQgdGhyb3VnaCB0aGUgbWFjaHZlYyBpb3BvcnQgbWFwcGluZyByb3V0aW5lcyB0aGVzZSBkYXlzLgogICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgpAQCAtNzksMTYgKzgwLDUxIEBACiAjZGVmaW5lIHdyaXRlbCh2LGEpCQkoeyBfX3Jhd193cml0ZWwoKHYpLChhKSk7IG1iKCk7IH0pCiAjZGVmaW5lIHdyaXRlcSh2LGEpCQkoeyBfX3Jhd193cml0ZXEoKHYpLChhKSk7IG1iKCk7IH0pCiAKLS8qIFN1cGVySCBvbi1jaGlwIEkvTyBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgY3RybF9pbmIJCV9fcmF3X3JlYWRiCi0jZGVmaW5lIGN0cmxfaW53CQlfX3Jhd19yZWFkdwotI2RlZmluZSBjdHJsX2lubAkJX19yYXdfcmVhZGwKLSNkZWZpbmUgY3RybF9pbnEJCV9fcmF3X3JlYWRxCisvKgorICogTGVnYWN5IFN1cGVySCBvbi1jaGlwIEkvTyBmdW5jdGlvbnMKKyAqCisgKiBUaGVzZSBhcmUgYWxsIGRlcHJlY2F0ZWQsIGFsbCBuZXcgKGFuZCBlc3BlY2lhbGx5IGNyb3NzLXBsYXRmb3JtKSBjb2RlCisgKiBzaG91bGQgYmUgdXNpbmcgdGhlIF9fcmF3X3h4eCgpIHJvdXRpbmVzIGRpcmVjdGx5LgorICovCitzdGF0aWMgaW5saW5lIHU4IF9fZGVwcmVjYXRlZCBjdHJsX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRiKGFkZHIpOworfQogCi0jZGVmaW5lIGN0cmxfb3V0YgkJX19yYXdfd3JpdGViCi0jZGVmaW5lIGN0cmxfb3V0dwkJX19yYXdfd3JpdGV3Ci0jZGVmaW5lIGN0cmxfb3V0bAkJX19yYXdfd3JpdGVsCi0jZGVmaW5lIGN0cmxfb3V0cQkJX19yYXdfd3JpdGVxCitzdGF0aWMgaW5saW5lIHUxNiBfX2RlcHJlY2F0ZWQgY3RybF9pbncodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkdyhhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19kZXByZWNhdGVkIGN0cmxfaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IF9fZGVwcmVjYXRlZCBjdHJsX2lucSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRxKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIGN0cmxfb3V0Yih1OCB2LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19yYXdfd3JpdGViKHYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIGN0cmxfb3V0dyh1MTYgdiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fcmF3X3dyaXRldyh2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBjdHJsX291dGwodTMyIHYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX3Jhd193cml0ZWwodiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgY3RybF9vdXRxKHU2NCB2LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19yYXdfd3JpdGVxKHYsIGFkZHIpOworfQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBnZW5lcmljX2lvX2Jhc2U7CiAKQEAgLTk3LDYgKzEzMywyOCBAQAogCV9fcmF3X3JlYWR3KGdlbmVyaWNfaW9fYmFzZSk7CiB9CiAKKyNkZWZpbmUgX19CVUlMRF9VTkNBQ0hFRF9JTyhid2xxLCB0eXBlKQkJCQkJXAorc3RhdGljIGlubGluZSB0eXBlIHJlYWQjI2J3bHEjI191bmNhY2hlZCh1bnNpZ25lZCBsb25nIGFkZHIpCQlcCit7CQkJCQkJCQkJXAorCXR5cGUgcmV0OwkJCQkJCQlcCisJanVtcF90b191bmNhY2hlZCgpOwkJCQkJCVwKKwlyZXQgPSBfX3Jhd19yZWFkIyNid2xxKGFkZHIpOwkJCQkJXAorCWJhY2tfdG9fY2FjaGVkKCk7CQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGUjI2J3bHEjI191bmNhY2hlZCh0eXBlIHYsIHVuc2lnbmVkIGxvbmcgYWRkcikJXAorewkJCQkJCQkJCVwKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CQkJCQkJXAorCV9fcmF3X3dyaXRlIyNid2xxKHYsIGFkZHIpOwkJCQkJXAorCWJhY2tfdG9fY2FjaGVkKCk7CQkJCQkJXAorfQorCitfX0JVSUxEX1VOQ0FDSEVEX0lPKGIsIHU4KQorX19CVUlMRF9VTkNBQ0hFRF9JTyh3LCB1MTYpCitfX0JVSUxEX1VOQ0FDSEVEX0lPKGwsIHUzMikKK19fQlVJTERfVU5DQUNIRURfSU8ocSwgdTY0KQorCiAjZGVmaW5lIF9fQlVJTERfTUVNT1JZX1NUUklORyhid2xxLCB0eXBlKQkJCQlcCiAJCQkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLAlcCkBAIC0yMzQsMjggKzI5MiwyMSBAQAogICovCiAjaWZkZWYgQ09ORklHX01NVQogdm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKTsKKwkJCSAgICAgICBwZ3Byb3RfdCBwcm90LCB2b2lkICpjYWxsZXIpOwogdm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgotX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKIHsKLQlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihvZmZzZXQsIHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKG9mZnNldCwgc2l6ZSwgcHJvdCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgotX19pb3JlbWFwX21vZGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK19faW9yZW1hcF8yOWJpdCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewotI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSDMyKSAmJiAhZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKSAmJiAhZGVmaW5lZChDT05GSUdfUE1CKQorI2lmZGVmIENPTkZJR18yOUJJVAogCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyID0gb2Zmc2V0ICsgc2l6ZSAtIDE7Ci0jZW5kaWYKLQl2b2lkIF9faW9tZW0gKnJldDsKIAotCXJldCA9IF9faW9yZW1hcF90cmFwcGVkKG9mZnNldCwgc2l6ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSDMyKSAmJiAhZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKSAmJiAhZGVmaW5lZChDT05GSUdfUE1CKQogCS8qCiAJICogRm9yIFAxIGFuZCBQMiBzcGFjZSB0aGlzIGlzIHRyaXZpYWwsIGFzIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeQogCSAqIG1hcHBlZC4gVW5jYWNoZWQgYWNjZXNzIGZvciBQMSBhZGRyZXNzZXMgYXJlIGRvbmUgdGhyb3VnaCBQMi4KQEAgLTI2Myw3ICszMTQsNyBAQAogCSAqIG1hcHBpbmcgbXVzdCBiZSBkb25lIGJ5IHRoZSBQTUIgb3IgYnkgdXNpbmcgcGFnZSB0YWJsZXMuCiAJICovCiAJaWYgKGxpa2VseShQWFNFRyhvZmZzZXQpIDwgUDNTRUcgJiYgUFhTRUcobGFzdF9hZGRyKSA8IFAzU0VHKSkgewotCQlpZiAodW5saWtlbHkoZmxhZ3MgJiBfUEFHRV9DQUNIQUJMRSkpCisJCWlmICh1bmxpa2VseShwZ3Byb3RfdmFsKHByb3QpICYgX1BBR0VfQ0FDSEFCTEUpKQogCQkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilQMVNFR0FERFIob2Zmc2V0KTsKIAogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKVAyU0VHQUREUihvZmZzZXQpOwpAQCAtMjc0LDI2ICszMjUsNzAgQEAKIAkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilQNFNFR0FERFIob2Zmc2V0KTsKICNlbmRpZgogCi0JcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgorX19pb3JlbWFwX21vZGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwl2b2lkIF9faW9tZW0gKnJldDsKKworCXJldCA9IF9faW9yZW1hcF90cmFwcGVkKG9mZnNldCwgc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IF9faW9yZW1hcF8yOWJpdChvZmZzZXQsIHNpemUsIHByb3QpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgcHJvdCk7CiB9CiAjZWxzZQotI2RlZmluZSBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJCSgodm9pZCBfX2lvbWVtICopKG9mZnNldCkpCi0jZGVmaW5lIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgZmxhZ3MpCSgodm9pZCBfX2lvbWVtICopKG9mZnNldCkpCisjZGVmaW5lIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIHByb3QpCQkoKHZvaWQgX19pb21lbSAqKShvZmZzZXQpKQorI2RlZmluZSBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIHByb3QpCSgodm9pZCBfX2lvbWVtICopKG9mZnNldCkpCiAjZGVmaW5lIF9faW91bm1hcChhZGRyKQkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogCi0jZGVmaW5lIGlvcmVtYXAob2Zmc2V0LCBzaXplKQkJCQlcCi0JX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgMCkKLSNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSkJCQlcCi0JX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgMCkKLSNkZWZpbmUgaW9yZW1hcF9jYWNoZShvZmZzZXQsIHNpemUpCQkJXAotCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIF9QQUdFX0NBQ0hBQkxFKQotI2RlZmluZSBwM19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpCQkJXAotCV9faW9yZW1hcCgob2Zmc2V0KSwgKHNpemUpLCAoZmxhZ3MpKQotI2RlZmluZSBpb3JlbWFwX3Byb3Qob2Zmc2V0LCBzaXplLCBmbGFncykJCVwKLQlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAoZmxhZ3MpKQotI2RlZmluZSBpb3VubWFwKGFkZHIpCQkJCQlcCi0JX19pb3VubWFwKChhZGRyKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgoraW9yZW1hcF9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIFBBR0VfS0VSTkVMKTsKK30KKworI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVAorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgoraW9yZW1hcF9wcm90KHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBfX3BncHJvdChmbGFncykpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU9SRU1BUF9GSVhFRAorZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9maXhlZChyZXNvdXJjZV9zaXplX3QsIHVuc2lnbmVkIGxvbmcsCisJCQkJICAgdW5zaWduZWQgbG9uZywgcGdwcm90X3QpOworZXh0ZXJuIGludCBpb3VubWFwX2ZpeGVkKHZvaWQgX19pb21lbSAqKTsKK2V4dGVybiB2b2lkIGlvcmVtYXBfZml4ZWRfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitpb3JlbWFwX2ZpeGVkKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwlCVUcoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvcmVtYXBfZml4ZWRfaW5pdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlvdW5tYXBfZml4ZWQodm9pZCBfX2lvbWVtICphZGRyKSB7IHJldHVybiAtRUlOVkFMOyB9CisjZW5kaWYKKworI2RlZmluZSBpb3JlbWFwX25vY2FjaGUJaW9yZW1hcAorI2RlZmluZSBpb3VubWFwCQlfX2lvdW5tYXAKIAogI2RlZmluZSBtYXliZWJhZGlvKHBvcnQpIFwKIAlwcmludGsoS0VSTl9FUlIgImJhZCBQQy1saWtlIGlvICVzOiV1IGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9rZGVidWcuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20va2RlYnVnLmgKaW5kZXggOTg1MjE5Zi4uNWY2ZDJlOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9rZGVidWcuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCkBAIC02LDYgKzYsOCBAQAogCURJRV9UUkFQLAogCURJRV9OTUksCiAJRElFX09PUFMsCisJRElFX0JSRUFLUE9JTlQsCisJRElFX1NTVEVQLAogfTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX0tERUJVR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBjNzQyNmFkLi4xNWEwNWI2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKQEAgLTExLDcgKzExLDkgQEAKIAogI2RlZmluZSBQTUJfQUREUgkJMHhmNjEwMDAwMAogI2RlZmluZSBQTUJfREFUQQkJMHhmNzEwMDAwMAotI2RlZmluZSBQTUJfRU5UUllfTUFYCQkxNgorCisjZGVmaW5lIE5SX1BNQl9FTlRSSUVTCQkxNgorCiAjZGVmaW5lIFBNQl9FX01BU0sJCTB4MDAwMDAwMGYKICNkZWZpbmUgUE1CX0VfU0hJRlQJCTgKIApAQCAtMjUsMTEgKzI3LDE1IEBACiAjZGVmaW5lIFBNQl9DCQkJMHgwMDAwMDAwOAogI2RlZmluZSBQTUJfV1QJCQkweDAwMDAwMDAxCiAjZGVmaW5lIFBNQl9VQgkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgUE1CX0NBQ0hFX01BU0sJCShQTUJfQyB8IFBNQl9XVCB8IFBNQl9VQikKICNkZWZpbmUgUE1CX1YJCQkweDAwMDAwMTAwCiAKICNkZWZpbmUgUE1CX05PX0VOVFJZCQkoLTEpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfaWRfdFtOUl9DUFVTXTsKQEAgLTQ3LDI5ICs1MywzMCBAQAogI2VuZGlmCiB9IG1tX2NvbnRleHRfdDsKIAotc3RydWN0IHBtYl9lbnRyeTsKLQotc3RydWN0IHBtYl9lbnRyeSB7Ci0JdW5zaWduZWQgbG9uZyB2cG47Ci0JdW5zaWduZWQgbG9uZyBwcG47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogMCAuLiBOUl9QTUJfRU5UUklFUyBmb3Igc3BlY2lmaWMgZW50cnkgc2VsZWN0aW9uLCBvcgotCSAqIFBNQl9OT19FTlRSWSB0byBzZWFyY2ggZm9yIGEgZnJlZSBvbmUKLQkgKi8KLQlpbnQgZW50cnk7Ci0KLQlzdHJ1Y3QgcG1iX2VudHJ5ICpuZXh0OwotCS8qIEFkamFjZW50IGVudHJ5IGxpbmsgZm9yIGNvbnRpZ3VvdXMgbXVsdGktZW50cnkgbWFwcGluZ3MgKi8KLQlzdHJ1Y3QgcG1iX2VudHJ5ICpsaW5rOwotfTsKLQorI2lmZGVmIENPTkZJR19QTUIKIC8qIGFyY2gvc2gvbW0vcG1iLmMgKi8KIGxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLAotCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwogdm9pZCBwbWJfdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyKTsKLWludCBwbWJfaW5pdCh2b2lkKTsKK3ZvaWQgcG1iX2luaXQodm9pZCk7Citib29sIF9faW5fMjliaXRfbW9kZSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNkZWZpbmUgcG1iX3VubWFwKGFkZHIpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBtYl9pbml0KGFkZHIpCQlkbyB7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfMjlCSVQKKyNkZWZpbmUgX19pbl8yOWJpdF9tb2RlKCkJKDEpCisjZWxzZQorI2RlZmluZSBfX2luXzI5Yml0X21vZGUoKQkoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1BNQiAqLwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDQxMDgwYjEuLjM4NGM3NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBFbmFibGUgTU1VICovCi0JY3RybF9vdXRsKE1NVV9DT05UUk9MX0lOSVQsIE1NVUNSKTsKKwlfX3Jhd193cml0ZWwoTU1VX0NPTlRST0xfSU5JVCwgTU1VQ1IpOwogCWN0cmxfYmFycmllcigpOwogCiAJaWYgKGFzaWRfY2FjaGUoY3B1KSA9PSBOT19DT05URVhUKQpAQCAtMTcxLDkgKzE3MSw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBjcjsKIAotCWNyID0gY3RybF9pbmwoTU1VQ1IpOworCWNyID0gX19yYXdfcmVhZGwoTU1VQ1IpOwogCWNyICY9IH5NTVVfQ09OVFJPTF9JTklUOwotCWN0cmxfb3V0bChjciwgTU1VQ1IpOworCV9fcmF3X3dyaXRlbChjciwgTU1VQ1IpOwogCiAJY3RybF9iYXJyaWVyKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKaW5kZXggOGVmODAwYy4uMTBlMmUxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaApAQCAtNDksMTEgKzQ5LDExIEBACiAvKiBNTVVfVFRCIGlzIHVzZWQgZm9yIG9wdGltaXppbmcgdGhlIGZhdWx0IGhhbmRsaW5nLiAqLwogc3RhdGljIGlubGluZSB2b2lkIHNldF9UVEIocGdkX3QgKnBnZCkKIHsKLQljdHJsX291dGwoKHVuc2lnbmVkIGxvbmcpcGdkLCBNTVVfVFRCKTsKKwlfX3Jhd193cml0ZWwoKHVuc2lnbmVkIGxvbmcpcGdkLCBNTVVfVFRCKTsKIH0KIAogc3RhdGljIGlubGluZSBwZ2RfdCAqZ2V0X1RUQih2b2lkKQogewotCXJldHVybiAocGdkX3QgKiljdHJsX2lubChNTVVfVFRCKTsKKwlyZXR1cm4gKHBnZF90ICopX19yYXdfcmVhZGwoTU1VX1RUQik7CiB9CiAjZW5kaWYgLyogX19BU01fU0hfTU1VX0NPTlRFWFRfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggMDY4YmYxNi4uYjc5MjdkZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xLDcgKzEsMjIgQEAKICNpZm5kZWYgX0FTTV9TSF9NT0RVTEVfSAogI2RlZmluZSBfQVNNX1NIX01PRFVMRV9ICiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tb2R1bGUuaD4KK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7CisjaWZkZWYgQ09ORklHX0RXQVJGX1VOV0lOREVSCisJc3RydWN0IGxpc3RfaGVhZCBmZGVfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNpZV9saXN0OworI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIEVsZl9TaGRyIEVsZjY0X1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGY2NF9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmNjRfRWhkcgorI2Vsc2UKKyNkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgorI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQorI2RlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgogIyBpZmRlZiBDT05GSUdfQ1BVX1NIMgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA4MWJmZmMwLi5kNzFmZWIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtNDUsNiArNDUsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3VuY2FjaGVkLmg+CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNobV9hbGlnbl9tYXNrOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm4sIG1pbl9sb3dfcGZuOwpAQCAtNTYsNyArNTcsNiBAQAogCXJldHVybiAoYWRkcjEgXiBhZGRyMikgJiBzaG1fYWxpZ25fbWFzazsKIH0KIAotCiAjZGVmaW5lIGNsZWFyX3BhZ2UocGFnZSkJbWVtc2V0KCh2b2lkICopKHBhZ2UpLCAwLCBQQUdFX1NJWkUpCiBleHRlcm4gdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOwogCkBAIC04OCw3ICs4OCw3IEBACiAjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIHB0ZV9sb3c7IH0gcHRlX3Q7Ci10eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OwogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKICNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZV9sb3cpCiAjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQpAQCAtMTI3LDEyICsxMjcsNyBAQAogICogaXMgbm90IHZpc2libGUgKGl0IGlzIHBhcnQgb2YgdGhlIFBNQiBtYXBwaW5nKSBhbmQgc28gbmVlZHMgdG8gYmUKICAqIGFkZGVkIG9yIHN1YnRyYWN0ZWQgYXMgcmVxdWlyZWQuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCi0vKiBwaHlzID0gdmlydCAtIFBBR0VfT0ZGU0VUIC0gKF9fTUVNT1JZX1NUQVJUICYgMHhlMDAwMDAwMCkgKi8KLSNkZWZpbmUgUE1CX09GRlNFVAkoUEFHRV9PRkZTRVQgLSBQWFNFRyhfX01FTU9SWV9TVEFSVCkpCi0jZGVmaW5lIF9fcGEoeCkJKCh1bnNpZ25lZCBsb25nKSh4KSAtIFBNQl9PRkZTRVQpCi0jZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSArIFBNQl9PRkZTRVQpKQotI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCisjaWZkZWYgQ09ORklHX1BNQgogI2RlZmluZSBfX3BhKHgpCSgodW5zaWduZWQgbG9uZykoeCktUEFHRV9PRkZTRVQrX19NRU1PUllfU1RBUlQpCiAjZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVC1fX01FTU9SWV9TVEFSVCkpCiAjZWxzZQpAQCAtMTQwLDYgKzEzNSwxNCBAQAogI2RlZmluZSBfX3ZhKHgpCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkrUEFHRV9PRkZTRVQpKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworI2RlZmluZSBVTkNBQ19BRERSKGFkZHIpCSgoYWRkcikgLSBQQUdFX09GRlNFVCArIHVuY2FjaGVkX3N0YXJ0KQorI2RlZmluZSBDQUNfQUREUihhZGRyKQkJKChhZGRyKSAtIHVuY2FjaGVkX3N0YXJ0ICsgUEFHRV9PRkZTRVQpCisjZWxzZQorI2RlZmluZSBVTkNBQ19BRERSKGFkZHIpCSgoYWRkcikpCisjZGVmaW5lIENBQ19BRERSKGFkZHIpCQkoKGFkZHIpKQorI2VuZGlmCisKICNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDY3ZjM5OTkuLjEwNDJmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMTUsMjAgKzE1LDQ5IEBACiAgKi8KIHN0cnVjdCBwY2lfY2hhbm5lbCB7CiAJc3RydWN0IHBjaV9jaGFubmVsCSpuZXh0OworCXN0cnVjdCBwY2lfYnVzCQkqYnVzOwogCiAJc3RydWN0IHBjaV9vcHMJCSpwY2lfb3BzOwotCXN0cnVjdCByZXNvdXJjZQkJKmlvX3Jlc291cmNlOwotCXN0cnVjdCByZXNvdXJjZQkJKm1lbV9yZXNvdXJjZTsKKworCXN0cnVjdCByZXNvdXJjZQkJKnJlc291cmNlczsKKwl1bnNpZ25lZCBpbnQJCW5yX3Jlc291cmNlczsKIAogCXVuc2lnbmVkIGxvbmcJCWlvX29mZnNldDsKIAl1bnNpZ25lZCBsb25nCQltZW1fb2Zmc2V0OwogCiAJdW5zaWduZWQgbG9uZwkJcmVnX2Jhc2U7Ci0KIAl1bnNpZ25lZCBsb25nCQlpb19tYXBfYmFzZTsKKworCXVuc2lnbmVkIGludAkJaW5kZXg7CisJdW5zaWduZWQgaW50CQluZWVkX2RvbWFpbl9pbmZvOworCisJLyogT3B0aW9uYWwgZXJyb3IgaGFuZGxpbmcgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAllcnJfdGltZXIsIHNlcnJfdGltZXI7CisJdW5zaWduZWQgaW50CQllcnJfaXJxLCBzZXJyX2lycTsKIH07CiAKLWV4dGVybiB2b2lkIHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSk7CisvKiBhcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jICovCitleHRlcm4gaW50IHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSk7CitleHRlcm4gdm9pZCBwY2liaW9zX3JlcG9ydF9zdGF0dXModW5zaWduZWQgaW50IHN0YXR1c19tYXNrLCBpbnQgd2Fybik7CisKKy8qIGFyY2gvc2gvZHJpdmVycy9wY2kvY29tbW9uLmMgKi8KK2V4dGVybiBpbnQgZWFybHlfcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB1OCAqdmFsdWUpOworZXh0ZXJuIGludCBlYXJseV9yZWFkX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHUxNiAqdmFsdWUpOworZXh0ZXJuIGludCBlYXJseV9yZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTMyICp2YWx1ZSk7CitleHRlcm4gaW50IGVhcmx5X3dyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICAgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB1OCB2YWx1ZSk7CitleHRlcm4gaW50IGVhcmx5X3dyaXRlX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICAgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB1MTYgdmFsdWUpOworZXh0ZXJuIGludCBlYXJseV93cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgICAgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB1MzIgdmFsdWUpOworZXh0ZXJuIHZvaWQgcGNpYmlvc19lbmFibGVfdGltZXJzKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSk7CitleHRlcm4gdW5zaWduZWQgaW50IHBjaWJpb3NfaGFuZGxlX3N0YXR1c19lcnJvcnModW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSB1bnNpZ25lZCBpbnQgc3RhdHVzLCBzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpOworZXh0ZXJuIGludCBwY2lfaXNfNjZtaHpfY2FwYWJsZShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCisJCQkJaW50IHRvcF9idXMsIGludCBjdXJyZW50X2J1cyk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIFBDSUJJT1NfTUlOX0lPLCBQQ0lCSU9TX01JTl9NRU07CiAKQEAgLTk5LDIwICsxMjgsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKLS8qCi0gKiBJZiB3ZSdyZSBvbiBhbiBTSDc3NTEgb3IgU0g3NzgwIFBDSSBjb250cm9sbGVyLCBQQ0kgbWVtb3J5IGlzIG1hcHBlZAotICogYXQgdGhlIGVuZCBvZiB0aGUgYWRkcmVzcyBzcGFjZSBpbiBhIHNwZWNpYWwgbm9uLXRyYW5zbGF0YWJsZSBhcmVhLgotICovCi0jZGVmaW5lIFBDSV9NRU1fRklYRURfU1RBUlQJMHhmZDAwMDAwMAotI2RlZmluZSBQQ0lfTUVNX0ZJWEVEX0VORAkoUENJX01FTV9GSVhFRF9TVEFSVCArIDB4MDEwMDAwMDApCi0KLSNkZWZpbmUgaXNfcGNpX21lbW9yeV9maXhlZF9yYW5nZShzLCBlKQlcCi0JKChzKSA+PSBQQ0lfTUVNX0ZJWEVEX1NUQVJUICYmIChlKSA8IFBDSV9NRU1fRklYRURfRU5EKQotI2Vsc2UKLSNkZWZpbmUgaXNfcGNpX21lbW9yeV9maXhlZF9yYW5nZShzLCBlKQkoMCkKLSNlbmRpZgotCiAvKiBCb2FyZC1zcGVjaWZpYyBmaXh1cCByb3V0aW5lcy4gKi8KIGludCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKTsKIApAQCAtMTIyLDYgKzEzNywxNCBAQAogZXh0ZXJuIHZvaWQgcGNpYmlvc19idXNfdG9fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQkJICAgIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKTsKIAorI2RlZmluZSBwY2lfZG9tYWluX25yKGJ1cykgKChzdHJ1Y3QgcGNpX2NoYW5uZWwgKikoYnVzKS0+c3lzZGF0YSktPmluZGV4CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9wcm9jX2RvbWFpbihzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKwlyZXR1cm4gaG9zZS0+bmVlZF9kb21haW5faW5mbzsKK30KKwogLyogQ2hhbmNlcyBhcmUgdGhpcyBpbnRlcnJ1cHQgaXMgd2lyZWQgUEMtc3R5bGUgLi4uICAqLwogc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggNjNjYTM3Yi4uOGMwMDc4NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTQsOCArNCwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3F1aWNrbGlzdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKLSNkZWZpbmUgUVVJQ0tfUEdEIDAJLyogV2UgcHJlc2VydmUgc3BlY2lhbCBtYXBwaW5ncyBvdmVyIGZyZWUgKi8KLSNkZWZpbmUgUVVJQ0tfUFQgMQkvKiBPdGhlciBwYWdlIHRhYmxlIHBhZ2VzIHRoYXQgYXJlIHplcm8gb24gZnJlZSAqLworI2RlZmluZSBRVUlDS19QVCAwCS8qIE90aGVyIHBhZ2UgdGFibGUgcGFnZXMgdGhhdCBhcmUgemVybyBvbiBmcmVlICovCisKK2V4dGVybiBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7CisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMgorZXh0ZXJuIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZCk7CitleHRlcm4gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCk7CisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCiAJCQkJICAgICAgIHB0ZV90ICpwdGUpCkBAIC0yMCwyOCArMjgsOSBAQAogfQogI2RlZmluZSBwbWRfcGd0YWJsZShwbWQpIHBtZF9wYWdlKHBtZCkKIAotc3RhdGljIGlubGluZSB2b2lkIHBnZF9jdG9yKHZvaWQgKngpCi17Ci0JcGdkX3QgKnBnZCA9IHg7Ci0KLQltZW1jcHkocGdkICsgVVNFUl9QVFJTX1BFUl9QR0QsCi0JICAgICAgIHN3YXBwZXJfcGdfZGlyICsgVVNFUl9QVFJTX1BFUl9QR0QsCi0JICAgICAgIChQVFJTX1BFUl9QR0QgLSBVU0VSX1BUUlNfUEVSX1BHRCkgKiBzaXplb2YocGdkX3QpKTsKLX0KLQogLyoKICAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLgogICovCi1zdGF0aWMgaW5saW5lIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JcmV0dXJuIHF1aWNrbGlzdF9hbGxvYyhRVUlDS19QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQsIHBnZF9jdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQotewotCXF1aWNrbGlzdF9mcmVlKFFVSUNLX1BHRCwgTlVMTCwgcGdkKTsKLX0KLQogc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewpAQCAtODEsNyArNzAsNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfcGd0X2NhY2hlKHZvaWQpCiB7Ci0JcXVpY2tsaXN0X3RyaW0oUVVJQ0tfUEdELCBOVUxMLCAyNSwgMTYpOwogCXF1aWNrbGlzdF90cmltKFFVSUNLX1BULCBOVUxMLCAyNSwgMTYpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliZDg5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX1NIX1BHVEFCTEVfMkxFVkVMX0gKKyNkZWZpbmUgX19BU01fU0hfUEdUQUJMRV8yTEVWRUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgorCisvKgorICogdHJhZGl0aW9uYWwgdHdvLWxldmVsIHBhZ2luZyBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTIKKworLyogUFRFIGJpdHMgKi8KKyNkZWZpbmUgUFRFX01BR05JVFVERQkJMgkvKiAzMi1iaXQgUFRFcyAqLworCisjZGVmaW5lIFBURV9TSElGVAkJUEFHRV9TSElGVAorI2RlZmluZSBQVEVfQklUUwkJKFBURV9TSElGVCAtIFBURV9NQUdOSVRVREUpCisKKy8qIFBHRCBiaXRzICovCisjZGVmaW5lIFBHRElSX1NISUZUCQkoUFRFX1NISUZUICsgUFRFX0JJVFMpCisKKyNkZWZpbmUgUFRSU19QRVJfUEdECQkoUEFHRV9TSVpFIC8gKDEgPDwgUFRFX01BR05JVFVERSkpCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUvUEdESVJfU0laRSkKKworI2VuZGlmIC8qIF9fQVNNX1NIX1BHVEFCTEVfMkxFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDlhOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19BU01fU0hfUEdUQUJMRV8zTEVWRUxfSAorI2RlZmluZSBfX0FTTV9TSF9QR1RBQkxFXzNMRVZFTF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+CisKKy8qCisgKiBTb21lIGNvcmVzIG5lZWQgYSAzLWxldmVsIHBhZ2UgdGFibGUgbGF5b3V0LCBmb3IgZXhhbXBsZSB3aGVuIHVzaW5nCisgKiA2NC1iaXQgUFRFcyBhbmQgNEsgcGFnZXMuCisgKi8KKyNkZWZpbmUgUEFHRVRBQkxFX0xFVkVMUwkzCisKKyNkZWZpbmUgUFRFX01BR05JVFVERQkJMwkvKiA2NC1iaXQgUFRFcyBvbiBTSC1YMiBUTEIgKi8KKworLyogUEdEIGJpdHMgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJCTMwCisKKyNkZWZpbmUgUFRSU19QRVJfUEdECQk0CisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECTIKKworLyogUE1EIGJpdHMgKi8KKyNkZWZpbmUgUE1EX1NISUZUCShQQUdFX1NISUZUICsgKFBBR0VfU0hJRlQgLSBQVEVfTUFHTklUVURFKSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkoKDEgPDwgUEdESVJfU0hJRlQpIC8gUE1EX1NJWkUpCisKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwMTZsbHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwoZSkpCisKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIHBtZDsgfSBwbWRfdDsKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKKyNkZWZpbmUgX19wbWQoeCkJKChwbWRfdCkgeyAoeCkgfSApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdWRfcGFnZV92YWRkcihwdWRfdCBwdWQpCit7CisJcmV0dXJuIHB1ZF92YWwocHVkKTsKK30KKworI2RlZmluZSBwbWRfaW5kZXgoYWRkcmVzcykJKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfb2Zmc2V0KHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHBtZF90ICopcHVkX3BhZ2VfdmFkZHIoKnB1ZCkgKyBwbWRfaW5kZXgoYWRkcmVzcyk7Cit9CisKKyNkZWZpbmUgcHVkX25vbmUoeCkJKCFwdWRfdmFsKHgpKQorI2RlZmluZSBwdWRfcHJlc2VudCh4KQkocHVkX3ZhbCh4KSkKKyNkZWZpbmUgcHVkX2NsZWFyKHhwKQlkbyB7IHNldF9wdWQoeHAsIF9fcHVkKDApKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUJcHVkX2JhZCh4KQkocHVkX3ZhbCh4KSAmIH5QQUdFX01BU0spCisKKy8qCisgKiAocHVkcyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKKyAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCisgKi8KKyNkZWZpbmUgc2V0X3B1ZChwdWRwdHIsIHB1ZHZhbCkgZG8geyAqKHB1ZHB0cikgPSAocHVkdmFsKTsgfSB3aGlsZSgwKQorCisjZW5kaWYgLyogX19BU01fU0hfUEdUQUJMRV8zTEVWRUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBiYTMwNDZlLi5hYWI3NjUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTIsNyArMTIsMTEgQEAKICNpZm5kZWYgX19BU01fU0hfUEdUQUJMRV9ICiAjZGVmaW5lIF9fQVNNX1NIX1BHVEFCTEVfSAogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgorI2lmZGVmIENPTkZJR19YMlRMQgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTNsZXZlbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC01MSwyOCArNTUsMTIgQEAKICNkZWZpbmUJTlBIWVNfU0lHTgkoMUxMIDw8IChOUEhZUyAtIDEpKQogI2RlZmluZQlOUEhZU19NQVNLCSgtMUxMIDw8IE5QSFlTKQogCi0vKgotICogdHJhZGl0aW9uYWwgdHdvLWxldmVsIHBhZ2luZyBzdHJ1Y3R1cmUKLSAqLwotLyogUFRFIGJpdHMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19YMlRMQikgfHwgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCi0jIGRlZmluZSBQVEVfTUFHTklUVURFCTMJLyogNjQtYml0IFBURXMgb24gZXh0ZW5kZWQgbW9kZSBTSC1YMiBUTEIgKi8KLSNlbHNlCi0jIGRlZmluZSBQVEVfTUFHTklUVURFCTIJLyogMzItYml0IFBURXMgKi8KLSNlbmRpZgotI2RlZmluZSBQVEVfU0hJRlQJUEFHRV9TSElGVAotI2RlZmluZSBQVEVfQklUUwkoUFRFX1NISUZUIC0gUFRFX01BR05JVFVERSkKLQotLyogUEdEIGJpdHMgKi8KLSNkZWZpbmUgUEdESVJfU0hJRlQJKFBURV9TSElGVCArIFBURV9CSVRTKQogI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCiAjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKIAogLyogRW50cmllcyBwZXIgbGV2ZWwgKi8KICNkZWZpbmUgUFRSU19QRVJfUFRFCShQQUdFX1NJWkUgLyAoMSA8PCBQVEVfTUFHTklUVURFKSkKLSNkZWZpbmUgUFRSU19QRVJfUEdECShQQUdFX1NJWkUgLyBzaXplb2YocGdkX3QpKQogCi0jZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUvUEdESVJfU0laRSkKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKIAogI2RlZmluZSBQSFlTX0FERFJfTUFTSzI5CQkweDFmZmZmZmZmCkBAIC0xNTMsOSArMTQxLDkgQEAKICNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoKHgpLnB0ZV9sb3cgPj4gUEFHRV9TSElGVCkpKQogCiAvKgotICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQorICogSW5pdGlhbGlzZSB0aGUgcGFnZSB0YWJsZSBjYWNoZXMKICAqLwotI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAppbmRleCA1MDAzZWU4Li5lMTcyZDY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApAQCAtNzEsNiArNzEsOCBAQAogI2RlZmluZSBfUEFHRV9FWFRfS0VSTl9XUklURQkweDEwMDAJLyogRVBSNC1iaXQ6IEtlcm5lbCBzcGFjZSB3cml0YWJsZSAqLwogI2RlZmluZSBfUEFHRV9FWFRfS0VSTl9SRUFECTB4MjAwMAkvKiBFUFI1LWJpdDogS2VybmVsIHNwYWNlIHJlYWRhYmxlICovCiAKKyNkZWZpbmUgX1BBR0VfRVhUX1dJUkVECQkweDQwMDAJLyogc29mdHdhcmU6IFdpcmUgVExCIGVudHJ5ICovCisKIC8qIFdyYXBwZXIgZm9yIGV4dGVuZGVkIG1vZGUgcGdwcm90IHR3aWRkbGluZyAqLwogI2RlZmluZSBfUEFHRV9FWFQoeCkJCSgodW5zaWduZWQgbG9uZyBsb25nKSh4KSA8PCAzMikKIApAQCAtMTQxLDEyICsxNDMsMTQgQEAKICMgZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CKQogIyAgZGVmaW5lIF9QQUdFX1NaSFVHRQkoX1BBR0VfRVhUX0VTWjIgfCBfUEFHRV9FWFRfRVNaMykKICMgZW5kaWYKKyMgZGVmaW5lIF9QQUdFX1dJUkVECShfUEFHRV9FWFQoX1BBR0VfRVhUX1dJUkVEKSkKICNlbHNlCiAjIGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SykKICMgIGRlZmluZSBfUEFHRV9TWkhVR0UJKF9QQUdFX1NaMSkKICMgZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUIpCiAjICBkZWZpbmUgX1BBR0VfU1pIVUdFCShfUEFHRV9TWjAgfCBfUEFHRV9TWjEpCiAjIGVuZGlmCisjIGRlZmluZSBfUEFHRV9XSVJFRAkoMCkKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAppbmRleCAxN2NkYmVjLi4wZWU0Njc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtNDMsMTEgKzQzLDYgQEAKIH0KICNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBtZF9zZXQocG1kX3QgKnBtZHAscHRlX3QgKnB0ZXApCi17Ci0JcG1kX3ZhbCgqcG1kcCkgPSAodW5zaWduZWQgbG9uZykgcHRlcDsKLX0KLQogLyoKICAqIFBHRCBkZWZpbmVzLiBUb3AgbGV2ZWwuCiAgKi8KQEAgLTEyOCw4ICsxMjMsMjEgQEAKICNkZWZpbmUgX1BBR0VfRElSVFkJMHg0MDAgIC8qIHNvZnR3YXJlOiBwYWdlIGFjY2Vzc2VkIGluIHdyaXRlICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4ODAwICAvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCiAKKy8qIFdyYXBwZXIgZm9yIGV4dGVuZGVkIG1vZGUgcGdwcm90IHR3aWRkbGluZyAqLworI2RlZmluZSBfUEFHRV9FWFQoeCkJCSgodW5zaWduZWQgbG9uZyBsb25nKSh4KSA8PCAzMikKKworLyoKKyAqIFdlIGNhbiB1c2UgdGhlIHNpZ24tZXh0ZW5kZWQgYml0cyBpbiB0aGUgUFRFTCB0byBnZXQgMzIgYml0cyBvZgorICogc29mdHdhcmUgZmxhZ3MuIFRoaXMgd29ya3MgZm9yIG5vdyBiZWNhdXNlIG5vIGltcGxlbWVudGF0aW9ucyB1c2VzCisgKiBhbnl0aGluZyBhYm92ZSB0aGUgUFBOIGZpZWxkLgorICovCisjZGVmaW5lIF9QQUdFX1dJUkVECV9QQUdFX0VYVCgweDAwMSkgLyogc29mdHdhcmU6IHdpcmUgdGhlIHRsYiBlbnRyeSAqLworCisjZGVmaW5lIF9QQUdFX0NMRUFSX0ZMQUdTCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRklMRSB8IF9QQUdFX1NIQVJFRCB8IFwKKwkJCQkgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1dJUkVEKQorCiAvKiBNYXNrIHdoaWNoIGRyb3BzIHNvZnR3YXJlIGZsYWdzICovCi0jZGVmaW5lIF9QQUdFX0ZMQUdTX0hBUkRXQVJFX01BU0sJMHhmZmZmZmZmZmZmZmZmM2RiTEwKKyNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkoTkVGRl9NQVNLICYgfihfUEFHRV9DTEVBUl9GTEFHUykpCiAKIC8qCiAgKiBIdWdlVExCIHN1cHBvcnQKQEAgLTIwMywxMiArMjExLDYgQEAKICNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZShwcm90KSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpICYgfl9QQUdFX0NBQ0hBQkxFKQogCiAvKgotICogSGFuZGxpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgcGFnZSB0YWJsZSBzZXR1cC4KLSAqLwotZXh0ZXJuIHZvaWQgX19oYW5kbGVfYmFkX3BtZF9rZXJuZWwocG1kX3QgKiBwbWQpOwotI2RlZmluZSBfX2hhbmRsZV9iYWRfcG1kKHgpCV9faGFuZGxlX2JhZF9wbWRfa2VybmVsKHgpCi0KLS8qCiAgKiBQVEUgbGV2ZWwgYWNjZXNzIHJvdXRpbmVzLgogICoKICAqIE5vdGUxOgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMDE3ZTBjMS4uOTYwNWUwNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC05OCwxMyArOTgsMzQgQEAKIAogLyogRm9yd2FyZCBkZWNsICovCiBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnM7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIGV4dGVybiBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVnczsKIAorLyogYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jICovCitleHRlcm4gdW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOworZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfeHN0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwOworCisvKiBhcmNoL3NoL21tL2FsaWdubWVudC5jICovCitleHRlcm4gaW50IGdldF91bmFsaWduX2N0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiBpbnQgc2V0X3VuYWxpZ25fY3RsKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB1bnNpZ25lZCBpbnQgdmFsKTsKKworI2RlZmluZSBHRVRfVU5BTElHTl9DVEwodHNrLCBhZGRyKQlnZXRfdW5hbGlnbl9jdGwoKHRzayksIChhZGRyKSkKKyNkZWZpbmUgU0VUX1VOQUxJR05fQ1RMKHRzaywgdmFsKQlzZXRfdW5hbGlnbl9jdGwoKHRzayksICh2YWwpKQorCisvKiBhcmNoL3NoL21tL2luaXQuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBtZW1faW5pdF9kb25lOworCiAvKiBhcmNoL3NoL2tlcm5lbC9zZXR1cC5jICovCiBjb25zdCBjaGFyICpnZXRfY3B1X3N1YnR5cGUoc3RydWN0IHNoX2NwdWluZm8gKmMpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wOwogCisvKiB0aHJlYWRfc3RydWN0IGZsYWdzICovCisjZGVmaW5lIFNIX1RIUkVBRF9VQUNfTk9QUklOVAkoMSA8PCAwKQorI2RlZmluZSBTSF9USFJFQURfVUFDX1NJR0JVUwkoMSA8PCAxKQorI2RlZmluZSBTSF9USFJFQURfVUFDX01BU0sJKFNIX1RIUkVBRF9VQUNfTk9QUklOVCB8IFNIX1RIUkVBRF9VQUNfU0lHQlVTKQorCiAvKiBwcm9jZXNzb3IgYm9vdCBtb2RlIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgTU9ERV9QSU4wICgxIDw8IDApCiAjZGVmaW5lIE1PREVfUElOMSAoMSA8PCAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKaW5kZXggMWYzZDZmYS4uNTcyYjRlYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KIAogLyoKICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKQEAgLTkwLDkgKzkxLDkgQEAKIAl1bnNpZ25lZCBsb25nIGVudHJ5X3BjOwogfTsKIAotdW5pb24gc2hfZnB1X3VuaW9uIHsKLQlzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0IGhhcmQ7Ci0Jc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCBzb2Z0OwordW5pb24gdGhyZWFkX3hzdGF0ZSB7CisJc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkZnB1OworCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdGZwdTsKIH07CiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKQEAgLTEwMCwzOCArMTAxLDMwIEBACiAJdW5zaWduZWQgbG9uZyBzcDsKIAl1bnNpZ25lZCBsb25nIHBjOwogCi0JLyogSGFyZHdhcmUgZGVidWdnaW5nIHJlZ2lzdGVycyAqLwotCXVuc2lnbmVkIGxvbmcgdWJjX3BjOworCS8qIFZhcmlvdXMgdGhyZWFkIGZsYWdzLCBzZWUgU0hfVEhSRUFEX3h4eCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBmbG9hdGluZyBwb2ludCBpbmZvICovCi0JdW5pb24gc2hfZnB1X3VuaW9uIGZwdTsKKwkvKiBTYXZlIG1pZGRsZSBzdGF0ZXMgb2YgcHRyYWNlIGJyZWFrcG9pbnRzICovCisJc3RydWN0IHBlcmZfZXZlbnQgKnB0cmFjZV9icHNbSEJQX05VTV07CiAKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAJLyogRHNwIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwogCXN0cnVjdCBzaF9kc3Bfc3RydWN0IGRzcF9zdGF0dXM7CiAjZW5kaWYKLX07CiAKLS8qIENvdW50IG9mIGFjdGl2ZSB0YXNrcyB3aXRoIFVCQyBzZXR0aW5ncyAqLwotZXh0ZXJuIGludCB1YmNfdXNlcmNudDsKKwkvKiBFeHRlbmRlZCBwcm9jZXNzb3Igc3RhdGUgKi8KKwl1bmlvbiB0aHJlYWRfeHN0YXRlICp4c3RhdGU7Cit9OwogCiAjZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJCQkJXAogCS5zcCA9IHNpemVvZihpbml0X3N0YWNrKSArIChsb25nKSAmaW5pdF9zdGFjaywJCVwKKwkuZmxhZ3MgPSAwLAkJCQkJCVwKIH0KIAotLyoKLSAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KLSAqLwotI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIG5ld19wYywgbmV3X3NwKQkgXAotCXNldF9mcyhVU0VSX0RTKTsJCQkgXAotCV9yZWdzLT5wciA9IDA7CQkJCSBcCi0JX3JlZ3MtPnNyID0gU1JfRkQ7CS8qIFVzZXIgbW9kZS4gKi8gXAotCV9yZWdzLT5wYyA9IG5ld19wYzsJCQkgXAotCV9yZWdzLT5yZWdzWzE1XSA9IG5ld19zcAotCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLwogc3RydWN0IHRhc2tfc3RydWN0Owotc3RydWN0IG1tX3N0cnVjdDsKKworZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19wYywgdW5zaWduZWQgbG9uZyBuZXdfc3ApOwogCiAvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KIGV4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCmluZGV4IDU3MjdkMzEuLjYyMWJjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaApAQCAtODcsMjYgKzg3LDMxIEBACiAJLyogbG9uZyBzdGF0dXM7ICogc29mdHdhcmUgc3RhdHVzIGluZm9ybWF0aW9uICovCiB9OwogCi0jaWYgMAogLyogRHVtbXkgZnB1IGVtdWxhdG9yICAqLwogc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGZwX3JlZ3NbMzJdOworCXVuc2lnbmVkIGxvbmcgZnBfcmVnc1s2NF07CiAJdW5zaWduZWQgaW50IGZwc2NyOwogCXVuc2lnbmVkIGNoYXIgbG9va2FoZWFkOwogCXVuc2lnbmVkIGxvbmcgZW50cnlfcGM7CiB9OwotI2VuZGlmCiAKLXVuaW9uIHNoX2ZwdV91bmlvbiB7Ci0Jc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkOwotCS8qICdoYXJkJyBpdHNlbGYgb25seSBwcm9kdWNlcyAzMiBiaXQgYWxpZ25tZW50LCB5ZXQgd2UgbmVlZAotCSAgIHRvIGFjY2VzcyBpdCB1c2luZyA2NCBiaXQgbG9hZC9zdG9yZSBhcyB3ZWxsLiAqLwordW5pb24gdGhyZWFkX3hzdGF0ZSB7CisJc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkZnB1OworCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdGZwdTsKKwkvKgorCSAqIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgb25seSBwcm9kdWNlIDMyIGJpdCBhbGlnbm1lbnQsIHlldCB3ZSBuZWVkCisJICogdG8gYWNjZXNzIHRoZW0gdXNpbmcgNjQgYml0IGxvYWQvc3RvcmUgYXMgd2VsbC4KKwkgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgYWxpZ25tZW50X2R1bW15OwogfTsKIAogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgc3A7CiAJdW5zaWduZWQgbG9uZyBwYzsKKworCS8qIFZhcmlvdXMgdGhyZWFkIGZsYWdzLCBzZWUgU0hfVEhSRUFEX3h4eCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAkvKiBUaGlzIHN0b3JlcyB0aGUgYWRkcmVzcyBvZiB0aGUgcHRfcmVncyBidWlsdCBkdXJpbmcgYSBjb250ZXh0CiAJICAgc3dpdGNoLCBvciBvZiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhIGJ1aWx0IGZvciBhIGtlcm5lbCBtb2RlCiAJICAgZXhjZXB0aW9uLiAgSXQgaXMgdXNlZCBmb3IgYmFja3RyYWNpbmcgdGhlIHN0YWNrIG9mIGEgc2xlZXBpbmcgdGFzawpAQCAtMTIyLDcgKzEyNyw3IEBACiAJLyogSGFyZHdhcmUgZGVidWdnaW5nIHJlZ2lzdGVycyBtYXkgY29tZSBoZXJlICovCiAKIAkvKiBmbG9hdGluZyBwb2ludCBpbmZvICovCi0JdW5pb24gc2hfZnB1X3VuaW9uIGZwdTsKKwl1bmlvbiB0aHJlYWRfeHN0YXRlICp4c3RhdGU7CiB9OwogCiAjZGVmaW5lIElOSVRfTU1BUCBcCkBAIC0xMzcsNyArMTQyLDcgQEAKIAkudHJhcF9ubwk9IDAsCQkJXAogCS5lcnJvcl9jb2RlCT0gMCwJCQlcCiAJLmFkZHJlc3MJPSAwLAkJCVwKLQkuZnB1CQk9IHsgeyB7IDAsIH0gfSwgfQlcCisJLmZsYWdzCQk9IDAsCQkJXAogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMWRjMTJjYi4uZTExYjE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMDIsMTMgKzEwMiwxNSBAQAogI2RlZmluZQlQVFJBQ0VfR0VURFNQUkVHUwk1NQkvKiBEU1AgcmVnaXN0ZXJzICovCiAjZGVmaW5lCVBUUkFDRV9TRVREU1BSRUdTCTU2CiAKLSNkZWZpbmUgUFRfVEVYVF9FTkRfQUREUiAJMjQwCi0jZGVmaW5lIFBUX1RFWFRfQUREUiAJCTI0NAkvKiAmKHN0cnVjdCB1c2VyKS0+c3RhcnRfY29kZSAqLwotI2RlZmluZSBQVF9EQVRBX0FERFIgCQkyNDgJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2RhdGEgKi8KKyNkZWZpbmUgUFRfVEVYVF9FTkRfQUREUgkyNDAKKyNkZWZpbmUgUFRfVEVYVF9BRERSCQkyNDQJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2NvZGUgKi8KKyNkZWZpbmUgUFRfREFUQV9BRERSCQkyNDgJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2RhdGEgKi8KICNkZWZpbmUgUFRfVEVYVF9MRU4JCTI1MgogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2RlZmluZSB1c2VyX21vZGUocmVncykJCQkoKChyZWdzKS0+c3IgJiAweDQwMDAwMDAwKT09MCkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQkoKHVuc2lnbmVkIGxvbmcpKHJlZ3MpLT5wYykKQEAgLTEyNCw2ICsxMjYsMTIgQEAKIGV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKK3N0cnVjdCBwZXJmX2V2ZW50Oworc3RydWN0IHBlcmZfc2FtcGxlX2RhdGE7CisKK2V4dGVybiB2b2lkIHB0cmFjZV90cmlnZ2VyZWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBpbnQgbm1pLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCiAJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKIApAQCAtMTMxLDEwICsxMzksOCBAQAogewogCXVuc2lnbmVkIGxvbmcgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwogCi0jaWZkZWYgUDJTRUcKLQlpZiAocGMgPj0gUDJTRUcgJiYgcGMgPCBQM1NFRykKLQkJcGMgLT0gMHgyMDAwMDAwMDsKLSNlbmRpZgorCWlmICh2aXJ0X2FkZHJfdW5jYWNoZWQocGMpKQorCQlyZXR1cm4gQ0FDX0FERFIocGMpOwogCiAJcmV0dXJuIHBjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yZWJvb3QuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcmVib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkYTBjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcmVib290LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9SRUJPT1RfSAorI2RlZmluZSBfX0FTTV9TSF9SRUJPT1RfSAorCisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCitzdHJ1Y3QgbWFjaGluZV9vcHMgeworCXZvaWQgKCpyZXN0YXJ0KShjaGFyICpjbWQpOworCXZvaWQgKCpoYWx0KSh2b2lkKTsKKwl2b2lkICgqcG93ZXJfb2ZmKSh2b2lkKTsKKwl2b2lkICgqc2h1dGRvd24pKHZvaWQpOworCXZvaWQgKCpjcmFzaF9zaHV0ZG93bikoc3RydWN0IHB0X3JlZ3MgKik7Cit9OworCitleHRlcm4gc3RydWN0IG1hY2hpbmVfb3BzIG1hY2hpbmVfb3BzOworCisvKiBhcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgKi8KK3ZvaWQgbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX19BU01fU0hfUkVCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBjZTM3NDM1Li40NzU4MzI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xOCw3ICsxOCw2IEBACiAvKiAuLi4gKi8KICNkZWZpbmUgQ09NTUFORF9MSU5FICgoY2hhciAqKSAoUEFSQU0rMHgxMDApKQogCi1pbnQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKik7CiB2b2lkIHNoX212X3NldHVwKHZvaWQpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9iaW9zLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaAppbmRleCBkOWM5NmQ3Li45NTcxNGMyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaApAQCAtMSwxOCArMSwyNyBAQAogI2lmbmRlZiBfX0FTTV9TSF9CSU9TX0gKICNkZWZpbmUgX19BU01fU0hfQklPU19ICiAKKyNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUworCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAwIEdyZWcgQmFua3MsIE1pdGNoIERhdmlzCiAgKiBDIEFQSSB0byBpbnRlcmZhY2UgdG8gdGhlIHN0YW5kYXJkIExpbnV4U0ggQklPUwogICogdXN1YWxseSBmcm9tIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIGtlcm5lbCBib290LgogICovCi0KLQogZXh0ZXJuIHZvaWQgc2hfYmlvc19jb25zb2xlX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Ci1leHRlcm4gdm9pZCBzaF9iaW9zX2NoYXJfb3V0KGNoYXIgY2gpOwogZXh0ZXJuIHZvaWQgc2hfYmlvc19nZGJfZGV0YWNoKHZvaWQpOwogCiBleHRlcm4gdm9pZCBzaF9iaW9zX2dldF9ub2RlX2FkZHIodW5zaWduZWQgY2hhciAqbm9kZV9hZGRyKTsKIGV4dGVybiB2b2lkIHNoX2Jpb3Nfc2h1dGRvd24odW5zaWduZWQgaW50IGhvdyk7CiAKK2V4dGVybiB2b2lkIHNoX2Jpb3NfdmJyX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzaF9iaW9zX3Zicl9yZWxvYWQodm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9iaW9zX3Zicl9pbml0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHNoX2Jpb3NfdmJyX3JlbG9hZCh2b2lkKSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19TSF9TVEFOREFSRF9CSU9TICovCisKICNlbmRpZiAvKiBfX0FTTV9TSF9CSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKaW5kZXggZmU5YzJhMS4uNjRlYjQxYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKQEAgLTkyLDUgKzkyLDYgQEAKICNkZWZpbmUgU1VTUF9TSF9VU1RBTkRCWQkoMSA8PCAzKSAvKiBTSC1Nb2JpbGUgVS1zdGFuZGJ5IG1vZGUgKi8KICNkZWZpbmUgU1VTUF9TSF9TRgkJKDEgPDwgNCkgLyogRW5hYmxlIHNlbGYtcmVmcmVzaCAqLwogI2RlZmluZSBTVVNQX1NIX01NVQkJKDEgPDwgNSkgLyogU2F2ZS9yZXN0b3JlIE1NVSBhbmQgY2FjaGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9SRUdTCQkoMSA8PCA2KSAvKiBTYXZlL3Jlc3RvcmUgcmVnaXN0ZXJzICovCiAKICNlbmRpZiAvKiBfQVNNX1NIX1NVU1BFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAppbmRleCA2YTM4MTQyLi5hYTc3NzdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTF9ICiAjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExfSAogCitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzeXNfY2FsbF90YWJsZVtdOworCiAjaWZkZWYgQ09ORklHX1NVUEVSSDMyCiAjIGluY2x1ZGUgInN5c2NhbGxfMzIuaCIKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBjMTU0MTViLi4wYmQ3YTE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKICNkZWZpbmUgQVRfVkVDVE9SX1NJWkVfQVJDSCA1IC8qIGVudHJpZXMgaW4gQVJDSF9ETElORk8gKi8KIApAQCAtMzIsNyArMzEsNyBAQAogI2RlZmluZSBtYigpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmNvIjogOiA6Im1lbW9yeSIpCiAjZGVmaW5lIHJtYigpCQltYigpCiAjZGVmaW5lIHdtYigpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmNvIjogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIGN0cmxfYmFycmllcigpCV9faWNiaSgweGE4MDAwMDAwKQorI2RlZmluZSBjdHJsX2JhcnJpZXIoKQlfX2ljYmkoUEFHRV9PRkZTRVQpCiAjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBtYigpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiI6IDogOiJtZW1vcnkiKQpAQCAtMTE0LDYgKzExMyw4IEBACiAJCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCiAgIH0pCiAKK3N0cnVjdCBwdF9yZWdzOworCiBleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwogdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7CiB2b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CkBAIC0xMzcsMTQgKzEzOCwxNCBAQAogI2VuZGlmCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVuY2FjaGVkX3NpemU7CiAKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpzaF9kZWJ1Z2ZzX3Jvb3Q7CiAKIHZvaWQgcGVyX2NwdV90cmFwX2luaXQodm9pZCk7CiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKTsKIHZvaWQgY3B1X2lkbGVfd2FpdCh2b2lkKTsKLQotYXNtbGlua2FnZSB2b2lkIGJyZWFrX3BvaW50X3RyYXAodm9pZCk7Cit2b2lkIHN0b3BfdGhpc19jcHUodm9pZCAqKTsKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogI2RlZmluZSBCVUlMRF9UUkFQX0hBTkRMRVIobmFtZSkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCmluZGV4IDA2ODE0ZjUuLjUxMjk2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19BU01fU0hfU1lTVEVNXzMyX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAjaWZkZWYgQ09ORklHX1NIX0RTUAogCkBAIC0xNDQsOSArMTQ1LDYgQEAKIAkJX19yZXN0b3JlX2RzcChwcmV2KTsJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3VzZXNfanVtcF90b191bmNhY2hlZCBcCi0Jbm9pbmxpbmUgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnVuY2FjaGVkLnRleHQiKSkpCi0KIC8qCiAgKiBKdW1wIHRvIHVuY2FjaGVkIGFyZWEuCiAgKiBXaGVuIGhhbmRsaW5nIFRMQiBvciBjYWNoZXMsIHdlIG5lZWQgdG8gZG8gaXQgZnJvbSBhbiB1bmNhY2hlZCBhcmVhLgpAQCAtMjE2LDYgKzIxNCwxNyBAQAogaW50IGhhbmRsZV91bmFsaWduZWRfYWNjZXNzKGluc25fc2l6ZV90IGluc3RydWN0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSAgICBzdHJ1Y3QgbWVtX2FjY2VzcyAqbWEsIGludCk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2FkZHJlc3NfZXJyb3Iodm9pZCkKK3sKKwlpZiAoX19pbl8yOWJpdF9tb2RlKCkpCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSJsZGMgJTAsIHNyXG5cdCIKKwkJCSJtb3YubCBAJTEsICUwIgorCQkJOgorCQkJOiAiciIgKDB4MTAwMDAwMDApLCAiciIgKDB4ODAwMDAwMDEpCisJCSk7Cit9CisKIGFzbWxpbmthZ2Ugdm9pZCBkb19hZGRyZXNzX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCSB1bnNpZ25lZCBsb25nIHdyaXRlYWNjZXNzLAogCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKaW5kZXggYWIxZGQ5MS4uMzYzMzg2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC0xOCw2ICsxOCw3IEBACiAvKgogICoJc3dpdGNoX3RvKCkgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIG5yIG4sIGZpcnN0CiAgKi8KK3N0cnVjdCB0aHJlYWRfc3RydWN0Owogc3RydWN0IHRhc2tfc3RydWN0ICpzaDY0X3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCQkJICAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnByZXZfdGhyZWFkLAogCQkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwKQEAgLTMzLDggKzM0LDYgQEAKIAkJCSAgICAgICZuZXh0LT50aHJlYWQpOwkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQKLQogI2RlZmluZSBqdW1wX3RvX3VuY2FjaGVkKCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiYWNrX3RvX2NhY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKIApAQCAtNDgsNiArNDcsMTMgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykoc2lnbmVkIGxvbmcgbG9uZykoc2lnbmVkIGxvbmcpdmFsOwogfQogCitleHRlcm4gdm9pZCBwaHlzX3N0ZXh0KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgdHJpZ2dlcl9hZGRyZXNzX2Vycm9yKHZvaWQpCit7CisJcGh5c19zdGV4dCgpOworfQorCiAjZGVmaW5lIFNSX0JMX0xMCTB4MDAwMDAwMDAxMDAwMDAwMExMCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYmxfYml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMWYzZDkyNy4uNTVhMzZmZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTMsMTQgKzkzLDE2IEBACiAKICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKFRIUkVBRF9TSElGVCAtIFBBR0VfU0hJRlQpCiAKLSNlbHNlIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KLQotI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKKyNlbmRpZgogCiBleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiBleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpOworZXh0ZXJuIHZvaWQgYXJjaF90YXNrX2NhY2hlX2luaXQodm9pZCk7CisjZGVmaW5lIGFyY2hfdGFza19jYWNoZV9pbml0IGFyY2hfdGFza19jYWNoZV9pbml0CitleHRlcm4gaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7CitleHRlcm4gdm9pZCBpbml0X3RocmVhZF94c3RhdGUodm9pZCk7CiAKLSNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IGRhOGZlN2EuLjc1YWJiMzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaApAQCAtMTEsNiArMTEsNyBAQAogI2lmZGVmIENPTkZJR19NTVUKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCiAvKgogICogVExCIGhhbmRsaW5nLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHBhZ2VzIGZyb20gdGhlIHBhZ2UKQEAgLTk3LDYgKzk4LDIyIEBACiAKICNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkgfHwgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCitleHRlcm4gdm9pZCB0bGJfd2lyZV9lbnRyeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworZXh0ZXJuIHZvaWQgdGxiX3Vud2lyZV9lbnRyeSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3dpcmVfZW50cnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdW53aXJlX2VudHJ5KHZvaWQpCit7CisJQlVHKCk7Cit9CisjZW5kaWYKKwogI2Vsc2UgLyogQ09ORklHX01NVSAqLwogCiAjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCQkJCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdWJjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3ViYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmY5NjE2Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvdWJjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX1NIX1VCQ19ICi0jZGVmaW5lIF9fQVNNX1NIX1VCQ19ICi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8Y3B1L3ViYy5oPgotCi0vKiBVc2VyIEJyZWFrIENvbnRyb2xsZXIgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLSNkZWZpbmUgVUJDX1RZUEVfU0g3NzI5CShjdXJyZW50X2NwdV9kYXRhLnR5cGUgPT0gQ1BVX1NINzcyOSkKLSNlbHNlCi0jZGVmaW5lIFVCQ19UWVBFX1NINzcyOQkwCi0jZW5kaWYKLQotI2RlZmluZSBCQU1SX0FTSUQJCSgxIDw8IDIpCi0jZGVmaW5lIEJBTVJfTk9ORQkJMAotI2RlZmluZSBCQU1SXzEwCQkJMHgxCi0jZGVmaW5lIEJBTVJfMTIJCQkweDIKLSNkZWZpbmUgQkFNUl9BTEwJCTB4MwotI2RlZmluZSBCQU1SXzE2CQkJMHg4Ci0jZGVmaW5lIEJBTVJfMjAJCQkweDkKLQotI2RlZmluZSBCQlJfSU5TVAkJKDEgPDwgNCkKLSNkZWZpbmUgQkJSX0RBVEEJCSgyIDw8IDQpCi0jZGVmaW5lIEJCUl9SRUFECQkoMSA8PCAyKQotI2RlZmluZSBCQlJfV1JJVEUJCSgyIDw8IDIpCi0jZGVmaW5lIEJCUl9CWVRFCQkweDEKLSNkZWZpbmUgQkJSX0hBTEYJCTB4MgotI2RlZmluZSBCQlJfTE9ORwkJMHgzCi0jZGVmaW5lIEJCUl9RVUFECQkoMSA8PCA2KQkvKiBTSDc3NTAgKi8KLSNkZWZpbmUgQkJSX0NQVQkJCSgxIDw8IDYpCS8qIFNINzcwOUEsU0g3NzI5ICovCi0jZGVmaW5lIEJCUl9ETUEJCQkoMiA8PCA2KQkvKiBTSDc3MDlBLFNINzcyOSAqLwotCi0jZGVmaW5lIEJSQ1JfQ01GQQkJKDEgPDwgMTUpCi0jZGVmaW5lIEJSQ1JfQ01GQgkJKDEgPDwgMTQpCi0KLSNpZiBkZWZpbmVkIENPTkZJR19DUFVfU0gyQQotI2RlZmluZSBCUkNSX0NNRkNBCQkoMSA8PCAxNSkKLSNkZWZpbmUgQlJDUl9DTUZDQgkJKDEgPDwgMTQpCi0jZGVmaW5lIEJSQ1JfQ01GREEJCSgxIDw8IDEzKQotI2RlZmluZSBCUkNSX0NNRkRCCQkoMSA8PCAxMikKLSNkZWZpbmUgQlJDUl9QQ0JCCQkoMSA8PCA2KQkvKiAxOiBhZnRlciBleGVjdXRpb24gKi8KLSNkZWZpbmUgQlJDUl9QQ0JBCQkoMSA8PCA1KQkvKiAxOiBhZnRlciBleGVjdXRpb24gKi8KLSNkZWZpbmUgQlJDUl9QQ1RFCQkwCi0jZWxzZQotI2RlZmluZSBCUkNSX1BDVEUJCSgxIDw8IDExKQotI2RlZmluZSBCUkNSX1BDQkEJCSgxIDw8IDEwKQkvKiAxOiBhZnRlciBleGVjdXRpb24gKi8KLSNkZWZpbmUgQlJDUl9EQkVCCQkoMSA8PCA3KQotI2RlZmluZSBCUkNSX1BDQkIJCSgxIDw8IDYpCi0jZGVmaW5lIEJSQ1JfU0VRCQkoMSA8PCAzKQotI2RlZmluZSBCUkNSX1VCREUJCSgxIDw8IDApCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfX0FTTV9TSF9VQkNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmNhY2hlZC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmNhY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDE5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuY2FjaGVkLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9VTkNBQ0hFRF9ICisjZGVmaW5lIF9fQVNNX1NIX1VOQ0FDSEVEX0gKKworI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVuY2FjaGVkX3N0YXJ0LCB1bmNhY2hlZF9lbmQ7CisKK2V4dGVybiBpbnQgdmlydF9hZGRyX3VuY2FjaGVkKHVuc2lnbmVkIGxvbmcga2FkZHIpOworZXh0ZXJuIHZvaWQgdW5jYWNoZWRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVuY2FjaGVkX3Jlc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpOworI2Vsc2UKKyNkZWZpbmUgdmlydF9hZGRyX3VuY2FjaGVkKGthZGRyKQkoMCkKKyNkZWZpbmUgdW5jYWNoZWRfaW5pdCgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1bmNhY2hlZF9yZXNpemUoc2l6ZSkJCUJVRygpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1VOQ0FDSEVEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdm1saW51eC5sZHMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdm1saW51eC5sZHMuaAppbmRleCAyNDRlYzRhLi5kNThhZDQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3ZtbGludXgubGRzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS92bWxpbnV4Lmxkcy5oCkBAIC0xNCw0ICsxNCwxMiBAQAogI2RlZmluZSBEV0FSRl9FSF9GUkFNRQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU1VQRVJINjQKKyNkZWZpbmUgRVhUUkFfVEVYVAkJXAorCSooLnRleHQ2NCkJCVwKKwkqKC50ZXh0Li5TSG1lZGlhMzIpCisjZWxzZQorI2RlZmluZSBFWFRSQV9URVhUCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fQVNNX1NIX1ZNTElOVVhfTERTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vd2F0Y2hkb2cuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vd2F0Y2hkb2cuaAppbmRleCAxOWRmZmY1Li44NWE3YWNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3dhdGNoZG9nLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS93YXRjaGRvZy5oCkBAIC03MCw3ICs3MCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX191MzIgc2hfd2R0X3JlYWRfY250KHZvaWQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5sKFdUQ05UX1IpOworCXJldHVybiBfX3Jhd19yZWFkbChXVENOVF9SKTsKIH0KIAogLyoqCkBAIC04Miw3ICs4Miw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfY250KF9fdTMyIHZhbCkKIHsKLQljdHJsX291dGwoKFdUQ05UX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RDTlQpOworCV9fcmF3X3dyaXRlbCgoV1RDTlRfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVENOVCk7CiB9CiAKIC8qKgpAQCAtOTQsNyArOTQsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2JzdChfX3UzMiB2YWwpCiB7Ci0JY3RybF9vdXRsKChXVEJTVF9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQlNUKTsKKwlfX3Jhd193cml0ZWwoKFdUQlNUX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RCU1QpOwogfQogLyoqCiAgKiAJc2hfd2R0X3JlYWRfY3NyIC0gUmVhZCBmcm9tIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBfX3UzMiBzaF93ZHRfcmVhZF9jc3Iodm9pZCkKIHsKLQlyZXR1cm4gY3RybF9pbmwoV1RDU1JfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRsKFdUQ1NSX1IpOwogfQogCiAvKioKQEAgLTExNSw3ICsxMTUsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2NzcihfX3UzMiB2YWwpCiB7Ci0JY3RybF9vdXRsKChXVENTUl9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQ1NSKTsKKwlfX3Jhd193cml0ZWwoKFdUQ1NSX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RDU1IpOwogfQogI2Vsc2UKIC8qKgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX191OCBzaF93ZHRfcmVhZF9jbnQodm9pZCkKIHsKLQlyZXR1cm4gY3RybF9pbmIoV1RDTlRfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRiKFdUQ05UX1IpOwogfQogCiAvKioKQEAgLTEzNiw3ICsxMzYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2NudChfX3U4IHZhbCkKIHsKLQljdHJsX291dHcoKFdUQ05UX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBXVENOVCk7CisJX19yYXdfd3JpdGV3KChXVENOVF9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgV1RDTlQpOwogfQogCiAvKioKQEAgLTE0Niw3ICsxNDYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIF9fdTggc2hfd2R0X3JlYWRfY3NyKHZvaWQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5iKFdUQ1NSX1IpOworCXJldHVybiBfX3Jhd19yZWFkYihXVENTUl9SKTsKIH0KIAogLyoqCkBAIC0xNTgsNyArMTU4LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF93cml0ZV9jc3IoX191OCB2YWwpCiB7Ci0JY3RybF9vdXR3KChXVENTUl9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgV1RDU1IpOworCV9fcmF3X3dyaXRldygoV1RDU1JfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFdUQ1NSKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IHx8IENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvdWJjLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvdWJjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMGU4N2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3ViYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDIvdWJjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX0NQVV9TSDJfVUJDX0gKLSNkZWZpbmUgX19BU01fQ1BVX1NIMl9VQkNfSAotCi0jZGVmaW5lIFVCQ19CQVJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmNDAKLSNkZWZpbmUgVUJDX0JBTVJBICAgICAgICAgICAgICAgMHhmZmZmZmY0NAotI2RlZmluZSBVQkNfQkJSQSAgICAgICAgICAgICAgICAweGZmZmZmZjQ4Ci0jZGVmaW5lIFVCQ19CQVJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmNjAKLSNkZWZpbmUgVUJDX0JBTVJCICAgICAgICAgICAgICAgMHhmZmZmZmY2NAotI2RlZmluZSBVQkNfQkJSQiAgICAgICAgICAgICAgICAweGZmZmZmZjY4Ci0jZGVmaW5lIFVCQ19CRFJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmNzAKLSNkZWZpbmUgVUJDX0JETVJCICAgICAgICAgICAgICAgMHhmZmZmZmY3NAotI2RlZmluZSBVQkNfQlJDUiAgICAgICAgICAgICAgICAweGZmZmZmZjc4Ci0KLS8qCi0gKiBXZSBkb24ndCBoYXZlIGFueSBBU0lEIGNoYW5nZXMgdG8gbWFrZSBpbiB0aGUgVUJDIG9uIHRoZSBTSC0yLgotICoKLSAqIE1ha2UgdGhlc2UgcHVycG9zZWx5IGludmFsaWQgdG8gdHJhY2sgbWlzdXNlLgotICovCi0jZGVmaW5lIFVCQ19CQVNSQQkJMHgwMDAwMDAwMAotI2RlZmluZSBVQkNfQkFTUkIJCTB4MDAwMDAwMDAKLQotI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDJfVUJDX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3dhdGNoZG9nLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvd2F0Y2hkb2cuaAppbmRleCAzOTMxNjFjLi4xZWFiOGFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvd2F0Y2hkb2cuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvd2F0Y2hkb2cuaApAQCAtNDQsNyArNDQsNyBAQAogCS8qCiAJICogU2FtZSByZWFkL3dyaXRlIGJyYWluLWRhbWFnZSBhcyBmb3IgV1RDTlQgaGVyZS4uCiAJICovCi0JcmV0dXJuIGN0cmxfaW5iKFJTVENTUl9SKTsKKwlyZXR1cm4gX19yYXdfcmVhZGIoUlNUQ1NSX1IpOwogfQogCiAvKioKQEAgLTYyLDcgKzYyLDcgQEAKIAkgKiB3ZSBjYW4ndCBwcmVzZW50bHkgdG91Y2ggdGhlIFdPVkYgYml0LCBzaW5jZSB0aGUgdXBwZXIgYnl0ZQogCSAqIGhhcyB0byBiZSBzd2FwcGVkIGZvciB0aGlzLiBTbyBqdXN0IGxlYXZlIGl0IGFsb25lLi4KIAkgKi8KLQljdHJsX291dHcoKFdUQ05UX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBSU1RDU1IpOworCV9fcmF3X3dyaXRlYigoV1RDTlRfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFJTVENTUik7CiB9CiAKICNlbmRpZiAvKiBfX0FTTV9DUFVfU0gyX1dBVENIRE9HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kYWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kYWMuaAppbmRleCAwNWZkYTgzLi45OGYxZDE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZGFjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RhYy5oCkBAIC0xNywyNSArMTcsMjUgQEAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2hfZGFjX2VuYWJsZShpbnQgY2hhbm5lbCkKIHsKIAl1bnNpZ25lZCBjaGFyIHY7Ci0JdiA9IGN0cmxfaW5iKERBQ1IpOworCXYgPSBfX3Jhd19yZWFkYihEQUNSKTsKIAlpZihjaGFubmVsKSB2IHw9IERBQ1JfREFPRTE7CiAJZWxzZSB2IHw9IERBQ1JfREFPRTA7Ci0JY3RybF9vdXRiKHYsREFDUik7CisJX19yYXdfd3JpdGViKHYsREFDUik7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2hfZGFjX2Rpc2FibGUoaW50IGNoYW5uZWwpCiB7CiAJdW5zaWduZWQgY2hhciB2OwotCXYgPSBjdHJsX2luYihEQUNSKTsKKwl2ID0gX19yYXdfcmVhZGIoREFDUik7CiAJaWYoY2hhbm5lbCkgdiAmPSB+REFDUl9EQU9FMTsKIAllbHNlIHYgJj0gfkRBQ1JfREFPRTA7Ci0JY3RybF9vdXRiKHYsREFDUik7CisJX19yYXdfd3JpdGViKHYsREFDUik7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2hfZGFjX291dHB1dCh1OCB2YWx1ZSwgaW50IGNoYW5uZWwpCiB7Ci0JaWYoY2hhbm5lbCkgY3RybF9vdXRiKHZhbHVlLERBRFIxKTsKLQllbHNlIGN0cmxfb3V0Yih2YWx1ZSxEQURSMCk7CisJaWYoY2hhbm5lbCkgX19yYXdfd3JpdGViKHZhbHVlLERBRFIxKTsKKwllbHNlIF9fcmF3X3dyaXRlYih2YWx1ZSxEQURSMCk7CiB9CiAKICNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX0RBQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKaW5kZXggMGVhMTVmMy4uMjA3ODExYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaApAQCAtMjAsOCArMjAsMTAgQEAKICNkZWZpbmUgVFNfMzIJCTB4MDAwMDAwMTAKICNkZWZpbmUgVFNfMTI4CQkweDAwMDAwMDE4CiAKLSNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4MTgKLSNkZWZpbmUgQ0hDUl9UU19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKIAogI2RlZmluZSBETUFPUl9JTklUCURNQU9SX0RNRQogCkBAIC0zNiwxMSArMzgsMTMgQEAKIAlYTUlUX1NaXzEyOEJJVCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKLQlbWE1JVF9TWl84QklUXQkJPSAwLAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAotCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAotfTsKKyNkZWZpbmUgVFNfU0hJRlQgewkJCVwKKwlbWE1JVF9TWl84QklUXQkJPSAwLAlcCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAorCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAlcCit9CisKKyNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKGkpICYgMykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpCiAKICNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvdWJjLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvdWJjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNjM4MWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3ViYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDMvdWJjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX0NQVV9TSDNfVUJDX0gKLSNkZWZpbmUgX19BU01fQ1BVX1NIM19VQkNfSAotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQotI2RlZmluZSBVQkNfQkFSQQkJMHhhNGZmZmZiMAotI2RlZmluZSBVQkNfQkFNUkEJCTB4YTRmZmZmYjQKLSNkZWZpbmUgVUJDX0JCUkEJCTB4YTRmZmZmYjgKLSNkZWZpbmUgVUJDX0JBU1JBCQkweGZmZmZmZmU0Ci0jZGVmaW5lIFVCQ19CQVJCCQkweGE0ZmZmZmEwCi0jZGVmaW5lIFVCQ19CQU1SQgkJMHhhNGZmZmZhNAotI2RlZmluZSBVQkNfQkJSQgkJMHhhNGZmZmZhOAotI2RlZmluZSBVQkNfQkFTUkIJCTB4ZmZmZmZmZTgKLSNkZWZpbmUgVUJDX0JEUkIJCTB4YTRmZmZmOTAKLSNkZWZpbmUgVUJDX0JETVJCCQkweGE0ZmZmZjk0Ci0jZGVmaW5lIFVCQ19CUkNSCQkweGE0ZmZmZjk4Ci0jZWxzZQotI2RlZmluZSBVQkNfQkFSQSAgICAgICAgICAgICAgICAweGZmZmZmZmIwCi0jZGVmaW5lIFVCQ19CQU1SQSAgICAgICAgICAgICAgIDB4ZmZmZmZmYjQKLSNkZWZpbmUgVUJDX0JCUkEgICAgICAgICAgICAgICAgMHhmZmZmZmZiOAotI2RlZmluZSBVQkNfQkFTUkEgICAgICAgICAgICAgICAweGZmZmZmZmU0Ci0jZGVmaW5lIFVCQ19CQVJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmYTAKLSNkZWZpbmUgVUJDX0JBTVJCICAgICAgICAgICAgICAgMHhmZmZmZmZhNAotI2RlZmluZSBVQkNfQkJSQiAgICAgICAgICAgICAgICAweGZmZmZmZmE4Ci0jZGVmaW5lIFVCQ19CQVNSQiAgICAgICAgICAgICAgIDB4ZmZmZmZmZTgKLSNkZWZpbmUgVUJDX0JEUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY5MAotI2RlZmluZSBVQkNfQkRNUkIgICAgICAgICAgICAgICAweGZmZmZmZjk0Ci0jZGVmaW5lIFVCQ19CUkNSICAgICAgICAgICAgICAgIDB4ZmZmZmZmOTgKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NIM19VQkNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2FkZHJzcGFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2FkZHJzcGFjZS5oCmluZGV4IGEzZmE3MzMuLmQ1MWRhMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9hZGRyc3BhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvYWRkcnNwYWNlLmgKQEAgLTI4LDYgKzI4LDE1IEBACiAjZGVmaW5lIFA0U0VHX1RMQl9EQVRBCTB4ZjcwMDAwMDAKICNkZWZpbmUgUDRTRUdfUkVHX0JBU0UJMHhmZjAwMDAwMAogCisjZGVmaW5lIFBBX0FSRUEwCTB4MDAwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTEJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9BUkVBMgkweDA4MDAwMDAwCisjZGVmaW5lIFBBX0FSRUEzCTB4MGMwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTQJMHgxMDAwMDAwMAorI2RlZmluZSBQQV9BUkVBNQkweDE0MDAwMDAwCisjZGVmaW5lIFBBX0FSRUE2CTB4MTgwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTcJMHgxYzAwMDAwMAorCiAjZGVmaW5lIFBBX0FSRUE1X0lPCTB4YjQwMDAwMDAJLyogQXJlYSA1IElPIE1lbW9yeSAqLwogI2RlZmluZSBQQV9BUkVBNl9JTwkweGI4MDAwMDAwCS8qIEFyZWEgNiBJTyBNZW1vcnkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAppbmRleCBjNGVkNjYwLi5lNzM0ZWE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApAQCAtMiwyMiArMiwzOCBAQAogI2RlZmluZSBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzMwKQogI2RlZmluZSBETVRFMF9JUlEJNDgKICNkZWZpbmUgRE1URTRfSVJRCTc2CiAjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGRTAwOTAwMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CisjZGVmaW5lIERNVEU0X0lSUQk3NgorI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTB4MDAzMDAwMDAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTIwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCiAjZGVmaW5lIERNVEUwX0lSUQkzNAogI2RlZmluZSBETVRFNF9JUlEJNDQKICNkZWZpbmUgRE1BRTBfSVJRCTM4CiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRjYwODAyMAotI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkY2MDkwMDAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZGNjA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKICNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCiAjZGVmaW5lIERNVEU0X0lSUQk3NgkvKiBETUFDMEIgKi8KICNkZWZpbmUgRE1URTZfSVJRCTQwCkBAIC0yOSw3ICs0NSwyOSBAQAogI2RlZmluZSBETUFFMV9JUlEJNzQJLyogRE1BIEVycm9yIElSUSovCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAogI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkRDMDgwMjAKLSNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZEQzA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkRDMDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQorI2RlZmluZSBETVRFMF9JUlEJNDgJLyogRE1BQzBBKi8KKyNkZWZpbmUgRE1URTRfSVJRCTc2CS8qIERNQUMwQiAqLworI2RlZmluZSBETVRFNl9JUlEJNDAKKyNkZWZpbmUgRE1URThfSVJRCTQyCS8qIERNQUMxQSAqLworI2RlZmluZSBETVRFOV9JUlEJNDMKKyNkZWZpbmUgRE1URTEwX0lSUQk3MgkvKiBETUFDMUIgKi8KKyNkZWZpbmUgRE1URTExX0lSUQk3MworI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIERNQUUxX0lSUQk3NAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGREMwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UxCTB4RkRDMDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMHgwMDYwMDAwMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMjEKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKICNkZWZpbmUgRE1URTBfSVJRCTM0CiAjZGVmaW5lIERNVEU0X0lSUQk0NApAQCAtNDEsNyArNzksMTEgQEAKICNkZWZpbmUgRE1BRTBfSVJRCTM4CS8qIERNQSBFcnJvciBJUlEgKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQzgxODAyMAotI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkM4MDkwMDAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGQzgwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCiAjZWxzZSAvKiBTSDc3ODUgKi8KICNkZWZpbmUgRE1URTBfSVJRCTMzCiAjZGVmaW5lIERNVEU0X0lSUQkzNwpAQCAtNTQsMTggKzk2LDE3IEBACiAjZGVmaW5lIERNQUUxX0lSUQk1OAkvKiBETUEgRXJyb3IgSVJRMSAqLwogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDQzA4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZDODA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbmRpZgogCi0jZGVmaW5lIFJFUV9IRQkweDAwMDAwMEMwCi0jZGVmaW5lIFJFUV9ICTB4MDAwMDAwODAKLSNkZWZpbmUgUkVRX0xFCTB4MDAwMDAwNDAKLSNkZWZpbmUgVE1fQlVSU1QgMHgwMDAwMDIwCi0jZGVmaW5lIFRTXzgJMHgwMDAwMDAwMAotI2RlZmluZSBUU18xNgkweDAwMDAwMDA4Ci0jZGVmaW5lIFRTXzMyCTB4MDAwMDAwMTAKLSNkZWZpbmUgVFNfMTZCTEsJMHgwMDAwMDAxOAotI2RlZmluZSBUU18zMkJMSwkweDAwMTAwMDAwCisjZGVmaW5lIFJFUV9IRQkJMHgwMDAwMDBDMAorI2RlZmluZSBSRVFfSAkJMHgwMDAwMDA4MAorI2RlZmluZSBSRVFfTEUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDAyMAogCiAvKgogICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKQEAgLTc0LDIyICsxMTUsMzEgQEAKICAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCiAgKi8KIGVudW0gewotCVhNSVRfU1pfOEJJVCwKLQlYTUlUX1NaXzE2QklULAotCVhNSVRfU1pfMzJCSVQsCi0JWE1JVF9TWl8xMjhCSVQsCi0JWE1JVF9TWl8yNTZCSVQsCisJWE1JVF9TWl84QklUCQk9IDAsCisJWE1JVF9TWl8xNkJJVAkJPSAxLAorCVhNSVRfU1pfMzJCSVQJCT0gMiwKKwlYTUlUX1NaXzY0QklUCQk9IDcsCisJWE1JVF9TWl8xMjhCSVQJCT0gMywKKwlYTUlUX1NaXzI1NkJJVAkJPSA0LAorCVhNSVRfU1pfMTI4QklUX0JMSwk9IDB4YiwKKwlYTUlUX1NaXzI1NkJJVF9CTEsJPSAweGMsCiB9OwogCiAvKgogICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKLQlbWE1JVF9TWl84QklUXQkJPSAwLAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAotCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAotCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAotfTsKKyNkZWZpbmUgVFNfU0hJRlQgewkJCVwKKwlbWE1JVF9TWl84QklUXQkJPSAwLAlcCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAorCVtYTUlUX1NaXzY0QklUXQkJPSAzLAlcCisJW1hNSVRfU1pfMTI4QklUXQk9IDQsCVwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwJXAorCVtYTUlUX1NaXzEyOEJJVF9CTEtdCT0gNCwJXAorCVtYTUlUX1NaXzI1NkJJVF9CTEtdCT0gNSwJXAorfQorCisjZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKCgoaSkgJiAzKSA8PCBDSENSX1RTX0xPV19TSElGVCkgfCBcCisJCQkgKCgoKGkpID4+IDIpICYgMykgPDwgQ0hDUl9UU19ISUdIX1NISUZUKSkKIAogI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKaW5kZXggYmNiMzAyNC4uMTE0YTM2OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaApAQCAtNiw4ICs2LDYgQEAKICNpZmRlZiBDT05GSUdfQ1BVX1NINEEKIAogI2RlZmluZSBETUFPUl9JTklUCShETUFPUl9ETUUpCi0jZGVmaW5lIENIQ1JfVFNfTUFTSwkweDE4Ci0jZGVmaW5lIENIQ1JfVFNfU0hJRlQJMwogCiAjaW5jbHVkZSA8Y3B1L2RtYS1zaDRhLmg+CiAjZWxzZSAvKiBDT05GSUdfQ1BVX1NINEEgKi8KQEAgLTI5LDggKzI3LDEwIEBACiAjZGVmaW5lIFRTXzMyCQkweDAwMDAwMDMwCiAjZGVmaW5lIFRTXzY0CQkweDAwMDAwMDAwCiAKLSNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4NzAKLSNkZWZpbmUgQ0hDUl9UU19TSElGVAk0CisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHg3MAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAk0CisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKIAogI2RlZmluZSBETUFPUl9DT0QJMHgwMDAwMDAwOAogCkBAIC00MSwyMyArNDEsMjYgQEAKICAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCiAgKi8KIGVudW0gewotCVhNSVRfU1pfNjRCSVQsCi0JWE1JVF9TWl84QklULAotCVhNSVRfU1pfMTZCSVQsCi0JWE1JVF9TWl8zMkJJVCwKLQlYTUlUX1NaXzI1NkJJVCwKKwlYTUlUX1NaXzhCSVQJPSAxLAorCVhNSVRfU1pfMTZCSVQJPSAyLAorCVhNSVRfU1pfMzJCSVQJPSAzLAorCVhNSVRfU1pfNjRCSVQJPSAwLAorCVhNSVRfU1pfMjU2QklUCT0gNCwKIH07CiAKIC8qCiAgKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewotCVtYTUlUX1NaXzY0QklUXQkJPSAzLAotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCi0JW1hNSVRfU1pfMjU2QklUXQk9IDUsCi19OworI2RlZmluZSBUU19TSElGVCB7CQkJXAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCisJW1hNSVRfU1pfNjRCSVRdCQk9IDMsCVwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwJXAorfQorCisjZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKChpKSAmIDcpIDw8IENIQ1JfVFNfTE9XX1NISUZUKQorCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKaW5kZXggM2NlN2VmNi4uMDNlYTc1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKQEAgLTI1LDYgKzI1LDEwIEBACiAKICNkZWZpbmUgTU1VQ1JfVEkJCSgxPDwyKQogCisjZGVmaW5lIE1NVUNSX1VSQgkJMHgwMEZDMDAwMAorI2RlZmluZSBNTVVDUl9VUkJfU0hJRlQJCTE4CisjZGVmaW5lIE1NVUNSX1VSQl9ORU5UUklFUwk2NAorCiAjaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDApCiAjZGVmaW5lIE1NVUNSX1NFCQkoMSA8PCA0KQogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zcS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKaW5kZXggNTg2ZDY0OS4uNzQ3MTZiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgX19BU01fQ1BVX1NINF9TUV9ICiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyoKICAqIFN0b3JlIHF1ZXVlcyByYW5nZSBmcm9tIGUwMDAwMDAwLWUzZmZmZmZjLCBhbGxvd2luZyBhcHByb3guIDY0TUIgdG8gYmUKQEAgLTI4LDcgKzI5LDcgQEAKIAogLyogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jICovCiB1bnNpZ25lZCBsb25nIHNxX3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgaW50IHNpemUsCi0JCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHBncHJvdF90IHByb3QpOwogdm9pZCBzcV91bm1hcCh1bnNpZ25lZCBsb25nIHZhZGRyKTsKIHZvaWQgc3FfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgaW50IGxlbik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS91YmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2ZTE3MC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvY3B1LXNoNC91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGluZW8gU29sdXRpb25zIEluYy4gc3VwcG9ydCBTSDRBIFVCQwotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX0NQVV9TSDRfVUJDX0gKLSNkZWZpbmUgX19BU01fQ1BVX1NINF9VQkNfSAotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0jZGVmaW5lIFVCQ19DQlIwCQkweGZmMjAwMDAwCi0jZGVmaW5lIFVCQ19DUlIwCQkweGZmMjAwMDA0Ci0jZGVmaW5lIFVCQ19DQVIwCQkweGZmMjAwMDA4Ci0jZGVmaW5lIFVCQ19DQU1SMAkJMHhmZjIwMDAwYwotI2RlZmluZSBVQkNfQ0JSMQkJMHhmZjIwMDAyMAotI2RlZmluZSBVQkNfQ1JSMQkJMHhmZjIwMDAyNAotI2RlZmluZSBVQkNfQ0FSMQkJMHhmZjIwMDAyOAotI2RlZmluZSBVQkNfQ0FNUjEJCTB4ZmYyMDAwMmMKLSNkZWZpbmUgVUJDX0NEUjEJCTB4ZmYyMDAwMzAKLSNkZWZpbmUgVUJDX0NETVIxCQkweGZmMjAwMDM0Ci0jZGVmaW5lIFVCQ19DRVRSMQkJMHhmZjIwMDAzOAotI2RlZmluZSBVQkNfQ0NNRlIJCTB4ZmYyMDA2MDAKLSNkZWZpbmUgVUJDX0NCQ1IJCTB4ZmYyMDA2MjAKLQotLyogQ0JSCSovCi0jZGVmaW5lIFVCQ19DQlJfQUlFCQkoMHgwMTw8MzApCi0jZGVmaW5lIFVCQ19DQlJfSURfSU5TVAkJKDB4MDE8PDQpCi0jZGVmaW5lIFVCQ19DQlJfUldfUkVBRAkJKDB4MDE8PDEpCi0jZGVmaW5lIFVCQ19DQlJfQ0UJCSgweDAxKQotCi0jZGVmaW5lCVVCQ19DQlJfQUlWX01BU0sJKDB4MDBGRjAwMDApCi0jZGVmaW5lCVVCQ19DQlJfQUlWX1NISUZUCSgxNikKLSNkZWZpbmUgVUJDX0NCUl9BSVZfU0VUKGFzaWQpCSgoKGFzaWQpPDxVQkNfQ0JSX0FJVl9TSElGVCkgJiBVQkNfQ0JSX0FJVl9NQVNLKQotCi0jZGVmaW5lIFVCQ19DQlJfSU5JVAkJMHgyMDAwMDAwMAotCi0vKiBDUlIJKi8KLSNkZWZpbmUgVUJDX0NSUl9SRVMJCSgweDAxPDwxMykKLSNkZWZpbmUgVUJDX0NSUl9QQ0IJCSgweDAxPDwxKQotI2RlZmluZSBVQkNfQ1JSX0JJRQkJKDB4MDEpCi0KLSNkZWZpbmUgVUJDX0NSUl9JTklUCQkweDAwMDAyMDAwCi0KLSNlbHNlCS8qIENPTkZJR19DUFVfU0g0ICovCi0jZGVmaW5lIFVCQ19CQVJBCQkweGZmMjAwMDAwCi0jZGVmaW5lIFVCQ19CQU1SQQkJMHhmZjIwMDAwNAotI2RlZmluZSBVQkNfQkJSQQkJMHhmZjIwMDAwOAotI2RlZmluZSBVQkNfQkFTUkEJCTB4ZmYwMDAwMTQKLSNkZWZpbmUgVUJDX0JBUkIJCTB4ZmYyMDAwMGMKLSNkZWZpbmUgVUJDX0JBTVJCCQkweGZmMjAwMDEwCi0jZGVmaW5lIFVCQ19CQlJCCQkweGZmMjAwMDE0Ci0jZGVmaW5lIFVCQ19CQVNSQgkJMHhmZjAwMDAxOAotI2RlZmluZSBVQkNfQkRSQgkJMHhmZjIwMDAxOAotI2RlZmluZSBVQkNfQkRNUkIJCTB4ZmYyMDAwMWMKLSNkZWZpbmUgVUJDX0JSQ1IJCTB4ZmYyMDAwMjAKLSNlbmRpZgkvKiBDT05GSUdfQ1BVX1NINCAqLwotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NINF9VQkNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9tYWdpY3BhbmVscjIuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCmluZGV4IGM2NDRhNzcuLjE4M2EyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCkBAIC0xOSwxMiArMTksMTIgQEAKICNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgogCiAKLSNkZWZpbmUgU0VUQklUU19PVVRCKG1hc2ssIHJlZykgICBjdHJsX291dGIoY3RybF9pbmIocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgU0VUQklUU19PVVRXKG1hc2ssIHJlZykgICBjdHJsX291dHcoY3RybF9pbncocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgU0VUQklUU19PVVRMKG1hc2ssIHJlZykgICBjdHJsX291dGwoY3RybF9pbmwocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgQ0xSQklUU19PVVRCKG1hc2ssIHJlZykgICBjdHJsX291dGIoY3RybF9pbmIocmVnKSAmIH5tYXNrLCByZWcpCi0jZGVmaW5lIENMUkJJVFNfT1VUVyhtYXNrLCByZWcpICAgY3RybF9vdXR3KGN0cmxfaW53KHJlZykgJiB+bWFzaywgcmVnKQotI2RlZmluZSBDTFJCSVRTX09VVEwobWFzaywgcmVnKSAgIGN0cmxfb3V0bChjdHJsX2lubChyZWcpICYgfm1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRCKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRXKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRMKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgQ0xSQklUU19PVVRCKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIocmVnKSAmIH5tYXNrLCByZWcpCisjZGVmaW5lIENMUkJJVFNfT1VUVyhtYXNrLCByZWcpICAgX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KHJlZykgJiB+bWFzaywgcmVnKQorI2RlZmluZSBDTFJCSVRTX09VVEwobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpICYgfm1hc2ssIHJlZykKIAogCiAjZGVmaW5lIFBBX0xFRCAgICAgICAgICBQT1JUX1BBRFIgICAgICAvKiBMRUQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaAppbmRleCBmMzM0MjY2Li41OGY3MTBlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1kcmVhbWNhc3QvbWFjaC9zeXNhc2ljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oCkBAIC0zOSw1ICszOSwxMCBAQAogCiAjZGVmaW5lIEhXX0VWRU5UX0lSUV9NQVggKEhXX0VWRU5UX0lSUV9CQVNFICsgOTUpCiAKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jICovCitleHRlcm4gaW50IHN5c3RlbWFzaWNfaXJxX2RlbXV4KGludCk7CitleHRlcm4gdm9pZCBzeXN0ZW1hc2ljX2lycV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgYWljYV90aW1lX2luaXQodm9pZCk7CisKICNlbmRpZiAvKiBfX0FTTV9TSF9EUkVBTUNBU1RfU1lTQVNJQ19IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvZnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjBkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvZnBnYS5oCkBAIC0wLDAgKzEsMTE0IEBACisjaWZuZGVmIF9fTUFDSF9TREs3Nzg2X0ZQR0FfSAorI2RlZmluZSBfX01BQ0hfU0RLNzc4Nl9GUEdBX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBTUlNUUgkJMHgwMDAKKyNkZWZpbmUgIFNSU1RSX01BR0lDCTB4MTk3MQkvKiBGaXhlZCBtYWdpY2FsIHJlYWQgdmFsdWUgKi8KKworI2RlZmluZSBJTlRBU1IJCTB4MDEwCisjZGVmaW5lIElOVEFNUgkJMHgwMjAKKyNkZWZpbmUgTU9EU1dSCQkweDAzMAorI2RlZmluZSBJTlRURVNUUgkweDA0MAorI2RlZmluZSBTWVNTUgkJMHgwNTAKKyNkZWZpbmUgTlJHUFIJCTB4MDYwCisjZGVmaW5lIE5NSVNSCQkweDA3MAorCisjZGVmaW5lIE5NSU1SCQkweDA4MAorI2RlZmluZSAgTk1JTVJfTUFOX05NSU0JQklUKDApCS8qIE1hbnVhbCBOTUkgbWFzayAqLworI2RlZmluZSAgTk1JTVJfQVVYX05NSU0JQklUKDEpCS8qIEF1eGlsaWFyeSBOTUkgbWFzayAqLworCisjZGVmaW5lIElOVEJTUgkJMHgwOTAKKyNkZWZpbmUgSU5UQk1SCQkweDBhMAorI2RlZmluZSBVU1JMRURSCQkweDBiMAorI2RlZmluZSBNQVBTV1IJCTB4MGMwCisjZGVmaW5lIEZQR0FWUgkJMHgwZDAKKyNkZWZpbmUgRlBHQURSCQkweDBlMAorI2RlZmluZSBQQ0JSUgkJMHgwZjAKKyNkZWZpbmUgUlNSCQkweDEwMAorI2RlZmluZSBFWFRBU1IJCTB4MTEwCisjZGVmaW5lIFNQQ0FSCQkweDEyMAorI2RlZmluZSBJTlRNU1IJCTB4MTMwCisjZGVmaW5lIFBDSUVDUgkJMHgxNDAKKyNkZWZpbmUgRkFFUgkJMHgxNTAKKyNkZWZpbmUgVVNSR1BJUgkJMHgxNjAKKy8qIDB4MTcwIHJlc2VydmVkICovCisjZGVmaW5lIExDTEFTUgkJMHgxODAKKworI2RlZmluZSBTQkNSCQkweDE5MAorI2RlZmluZSAgU0NCUl9JMkNNRU4JQklUKDApCS8qIEZQR0EgSTJDIG1hc3RlciBlbmFibGUgKi8KKyNkZWZpbmUgIFNDQlJfSTJDQ0VOCUJJVCgxKQkvKiBDUFUgSTJDIG1hc3RlciBlbmFibGUgKi8KKworI2RlZmluZSBQV1JDUgkJMHgxYTAKKyNkZWZpbmUgU1BDQlIJCTB4MWIwCisjZGVmaW5lIFNQSUNSCQkweDFjMAorI2RlZmluZSBTUElEUgkJMHgxZDAKKyNkZWZpbmUgSTJDQ1IJCTB4MWUwCisjZGVmaW5lIEkyQ0RSCQkweDFmMAorI2RlZmluZSBGUEdBQ1IJCTB4MjAwCisjZGVmaW5lIElBU0VMUjEJCTB4MjEwCisjZGVmaW5lIElBU0VMUjIJCTB4MjIwCisjZGVmaW5lIElBU0VMUjMJCTB4MjMwCisjZGVmaW5lIElBU0VMUjQJCTB4MjQwCisjZGVmaW5lIElBU0VMUjUJCTB4MjUwCisjZGVmaW5lIElBU0VMUjYJCTB4MjYwCisjZGVmaW5lIElBU0VMUjcJCTB4MjcwCisjZGVmaW5lIElBU0VMUjgJCTB4MjgwCisjZGVmaW5lIElBU0VMUjkJCTB4MjkwCisjZGVmaW5lIElBU0VMUjEwCTB4MmEwCisjZGVmaW5lIElBU0VMUjExCTB4MmIwCisjZGVmaW5lIElBU0VMUjEyCTB4MmMwCisjZGVmaW5lIElBU0VMUjEzCTB4MmQwCisjZGVmaW5lIElBU0VMUjE0CTB4MmUwCisjZGVmaW5lIElBU0VMUjE1CTB4MmYwCisvKiAweDMwMCByZXNlcnZlZCAqLworI2RlZmluZSBJQlNFTFIxCQkweDMxMAorI2RlZmluZSBJQlNFTFIyCQkweDMyMAorI2RlZmluZSBJQlNFTFIzCQkweDMzMAorI2RlZmluZSBJQlNFTFI0CQkweDM0MAorI2RlZmluZSBJQlNFTFI1CQkweDM1MAorI2RlZmluZSBJQlNFTFI2CQkweDM2MAorI2RlZmluZSBJQlNFTFI3CQkweDM3MAorI2RlZmluZSBJQlNFTFI4CQkweDM4MAorI2RlZmluZSBJQlNFTFI5CQkweDM5MAorI2RlZmluZSBJQlNFTFIxMAkweDNhMAorI2RlZmluZSBJQlNFTFIxMQkweDNiMAorI2RlZmluZSBJQlNFTFIxMgkweDNjMAorI2RlZmluZSBJQlNFTFIxMwkweDNkMAorI2RlZmluZSBJQlNFTFIxNAkweDNlMAorI2RlZmluZSBJQlNFTFIxNQkweDNmMAorI2RlZmluZSBVU1JBQ1IJCTB4NDAwCisjZGVmaW5lIEJFRVBSCQkweDQxMAorI2RlZmluZSBVU1JMQ0RSCQkweDQyMAorI2RlZmluZSBTTUJDUgkJMHg0MzAKKyNkZWZpbmUgU01CRFIJCTB4NDQwCisjZGVmaW5lIFVTQkNSCQkweDQ1MAorI2RlZmluZSBBTVNSCQkweDQ2MAorI2RlZmluZSBBQ0NSCQkweDQ3MAorI2RlZmluZSBTRElGQ1IJCTB4NDgwCisKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKnNkazc3ODZfZnBnYV9iYXNlOworZXh0ZXJuIHZvaWQgc2RrNzc4Nl9mcGdhX2luaXQodm9pZCk7CisKKyNkZWZpbmUgU0RLNzc4Nl9GUEdBX1JFR0FERFIocmVnKQkoc2RrNzc4Nl9mcGdhX2Jhc2UgKyAocmVnKSkKKworLyoKKyAqIEEgY29udmVuaWVuY2Ugd3JhcHBlciBmcm9tIHJlZ2lzdGVyIG9mZnNldCB0byBpbnRlcm5hbCBJMkMgYWRkcmVzcywKKyAqIHdoZW4gdGhlIEZQR0EgaXMgaW4gSTJDIHNsYXZlIG1vZGUuCisgKi8KKyNkZWZpbmUgU0RLNzc4Nl9GUEdBX0kyQ0FERFIocmVnKQkoKHJlZykgPj4gMykKKworc3RhdGljIGlubGluZSB1MTYgZnBnYV9yZWFkX3JlZyh1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBpb3JlYWQxNihzZGs3Nzg2X2ZwZ2FfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcGdhX3dyaXRlX3JlZyh1MTYgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCWlvd3JpdGUxNih2YWwsIHNkazc3ODZfZnBnYV9iYXNlICsgcmVnKTsKK30KKworI2VuZGlmIC8qIF9fTUFDSF9TREs3Nzg2X0ZQR0FfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2lycS5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTg0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvaXJxLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fTUFDSF9TREs3Nzg2X0lSUV9ICisjZGVmaW5lIF9fTUFDSF9TREs3Nzg2X0lSUV9ICisKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9pcnEuYyAqLworZXh0ZXJuIHZvaWQgc2RrNzc4Nl9pbml0X2lycSh2b2lkKTsKKworI2VuZGlmIC8qIF9fTUFDSF9TREs3Nzg2X0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZS9tYWNoL3NlNzM0My5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2UvbWFjaC9zZTczNDMuaAppbmRleCA3NDk5MTRiLi44ZDgxNzBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZS9tYWNoL3NlNzM0My5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNlL21hY2gvc2U3MzQzLmgKQEAgLTk0LDI2ICs5NCwyNiBAQAogCiAjZGVmaW5lIFBPUlRfRFJWQ1IJMHhBNDA1MDE4MAogCi0jZGVmaW5lIFBPUlRfUEFEUiAgCTB4QTQwNTAxMjAKLSNkZWZpbmUgUE9SVF9QQkRSICAJMHhBNDA1MDEyMgotI2RlZmluZSBQT1JUX1BDRFIgIAkweEE0MDUwMTI0Ci0jZGVmaW5lIFBPUlRfUEREUiAgCTB4QTQwNTAxMjYKLSNkZWZpbmUgUE9SVF9QRURSICAJMHhBNDA1MDEyOAotI2RlZmluZSBQT1JUX1BGRFIgIAkweEE0MDUwMTJBCi0jZGVmaW5lIFBPUlRfUEdEUiAgCTB4QTQwNTAxMkMKLSNkZWZpbmUgUE9SVF9QSERSICAJMHhBNDA1MDEyRQotI2RlZmluZSBQT1JUX1BKRFIgIAkweEE0MDUwMTMwCi0jZGVmaW5lIFBPUlRfUEtEUiAgCTB4QTQwNTAxMzIKLSNkZWZpbmUgUE9SVF9QTERSICAJMHhBNDA1MDEzNAotI2RlZmluZSBQT1JUX1BNRFIgIAkweEE0MDUwMTM2Ci0jZGVmaW5lIFBPUlRfUE5EUiAgCTB4QTQwNTAxMzgKLSNkZWZpbmUgUE9SVF9QUURSICAJMHhBNDA1MDEzQQotI2RlZmluZSBQT1JUX1BSRFIgIAkweEE0MDUwMTNDCi0jZGVmaW5lIFBPUlRfUFREUiAgCTB4QTQwNTAxNjAKLSNkZWZpbmUgUE9SVF9QVURSICAJMHhBNDA1MDE2MgotI2RlZmluZSBQT1JUX1BWRFIgIAkweEE0MDUwMTY0Ci0jZGVmaW5lIFBPUlRfUFdEUiAgCTB4QTQwNTAxNjYKLSNkZWZpbmUgUE9SVF9QWURSICAJMHhBNDA1MDE2OAorI2RlZmluZSBQT1JUX1BBRFIJMHhBNDA1MDEyMAorI2RlZmluZSBQT1JUX1BCRFIJMHhBNDA1MDEyMgorI2RlZmluZSBQT1JUX1BDRFIJMHhBNDA1MDEyNAorI2RlZmluZSBQT1JUX1BERFIJMHhBNDA1MDEyNgorI2RlZmluZSBQT1JUX1BFRFIJMHhBNDA1MDEyOAorI2RlZmluZSBQT1JUX1BGRFIJMHhBNDA1MDEyQQorI2RlZmluZSBQT1JUX1BHRFIJMHhBNDA1MDEyQworI2RlZmluZSBQT1JUX1BIRFIJMHhBNDA1MDEyRQorI2RlZmluZSBQT1JUX1BKRFIJMHhBNDA1MDEzMAorI2RlZmluZSBQT1JUX1BLRFIJMHhBNDA1MDEzMgorI2RlZmluZSBQT1JUX1BMRFIJMHhBNDA1MDEzNAorI2RlZmluZSBQT1JUX1BNRFIJMHhBNDA1MDEzNgorI2RlZmluZSBQT1JUX1BORFIJMHhBNDA1MDEzOAorI2RlZmluZSBQT1JUX1BRRFIJMHhBNDA1MDEzQQorI2RlZmluZSBQT1JUX1BSRFIJMHhBNDA1MDEzQworI2RlZmluZSBQT1JUX1BURFIJMHhBNDA1MDE2MAorI2RlZmluZSBQT1JUX1BVRFIJMHhBNDA1MDE2MgorI2RlZmluZSBQT1JUX1BWRFIJMHhBNDA1MDE2NAorI2RlZmluZSBQT1JUX1BXRFIJMHhBNDA1MDE2NgorI2RlZmluZSBQT1JUX1BZRFIJMHhBNDA1MDE2OAogCiAjZGVmaW5lIEZQR0FfSU4JCTB4YjE0MDAwMDAKICNkZWZpbmUgRlBHQV9PVVQJMHhiMTQwMDAwMgpAQCAtMTMzLDE4ICsxMzMsMTAgQEAKICNkZWZpbmUgU0U3MzQzX0ZQR0FfSVJRX1VBUlRCCTExCiAKICNkZWZpbmUgU0U3MzQzX0ZQR0FfSVJRX05SCTEyCi0jZGVmaW5lIFNFNzM0M19GUEdBX0lSUV9CQVNFCTEyMAotCi0jZGVmaW5lIE1SU0hQQ19JUlEzICAgIAkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTVJTSFBDMykKLSNkZWZpbmUgTVJTSFBDX0lSUTIgICAgCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9NUlNIUEMyKQotI2RlZmluZSBNUlNIUENfSVJRMSAgICAJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX01SU0hQQzEpCi0jZGVmaW5lIE1SU0hQQ19JUlEwICAgIAkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTVJTSFBDMCkKLSNkZWZpbmUgU01DX0lSUQkJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1NNQykKLSNkZWZpbmUgVVNCX0lSUQkJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1VTQikKLSNkZWZpbmUgVUFSVEFfSVJRCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9VQVJUQSkKLSNkZWZpbmUgVUFSVEJfSVJRCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9VQVJUQikKIAogLyogYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9pcnEuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBzZTczNDNfZnBnYV9pcnFbXTsKKwogdm9pZCBpbml0XzczNDNzZV9JUlEodm9pZCk7CiAKICNlbmRpZiAgLyogX19BU01fU0hfSElUQUNISV9TRTczNDNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQppbmRleCAwZDU4N2RhLi4wMmZkM2FlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTMsOCArMTMsOSBAQAogCiBvYmoteQk6PSBkZWJ1Z3RyYXBzLm8gZG1hLW5vbW11Lm8gZHVtcHN0YWNrLm8gCQkJXAogCSAgIGlkbGUubyBpby5vIGlvX2dlbmVyaWMubyBpcnEubwkJCQlcCi0JICAgaXJxXyQoQklUUykubyBtYWNodmVjLm8gbm1pX2RlYnVnLm8gcHJvY2Vzc18kKEJJVFMpLm8gCVwKLQkgICBwdHJhY2VfJChCSVRTKS5vIHJldHVybl9hZGRyZXNzLm8JCQkJXAorCSAgIGlycV8kKEJJVFMpLm8gbWFjaHZlYy5vIG5taV9kZWJ1Zy5vIHByb2Nlc3MubwkJXAorCSAgIHByb2Nlc3NfJChCSVRTKS5vIHB0cmFjZV8kKEJJVFMpLm8JCQkJXAorCSAgIHJlYm9vdC5vIHJldHVybl9hZGRyZXNzLm8JCQkJCVwKIAkgICBzZXR1cC5vIHNpZ25hbF8kKEJJVFMpLm8gc3lzX3NoLm8gc3lzX3NoJChCSVRTKS5vCQlcCiAJICAgc3lzY2FsbHNfJChCSVRTKS5vIHRpbWUubyB0b3BvbG9neS5vIHRyYXBzLm8JCQlcCiAJICAgdHJhcHNfJChCSVRTKS5vIHVud2luZGVyLm8KQEAgLTIyLDcgKzIzLDcgQEAKIG9iai15CQkJCSs9IGNwdS8KIG9iai0kKENPTkZJR19WU1lTQ0FMTCkJCSs9IHZzeXNjYWxsLwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCi1vYmotJChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykJKz0gc2hfYmlvcy5vIGVhcmx5X3ByaW50ay5vCitvYmotJChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykJKz0gc2hfYmlvcy5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwogb2JqLSQoQ09ORklHX1NIX0NQVV9GUkVRKQkrPSBjcHVmcmVxLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gc2hfa3N5bXNfJChCSVRTKS5vIG1vZHVsZS5vCkBAIC0zOSw2ICs0MCw3IEBACiBvYmotJChDT05GSUdfRFdBUkZfVU5XSU5ERVIpCSs9IGR3YXJmLm8KIG9iai0kKENPTkZJR19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vIHBlcmZfY2FsbGNoYWluLm8KIAorb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkJCSs9IGh3X2JyZWFrcG9pbnQubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUKQkrPSBsb2NhbHRpbWVyLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCBkOTdjODAzLi4wZTQ4YmM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0xNyw1ICsxNyw3IEBACiAKIG9iai0kKENPTkZJR19TSF9BREMpCQkrPSBhZGMubwogb2JqLSQoQ09ORklHX1NIX0NMS19DUEcpCSs9IGNsb2NrLWNwZy5vCitvYmotJChDT05GSUdfU0hfRlBVKQkJKz0gZnB1Lm8KK29iai0kKENPTkZJR19TSF9GUFVfRU1VKQkrPSBmcHUubwogCiBvYmoteQkrPSBpcnEvIGluaXQubyBjbG9jay5vIGh3YmxrLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9hZGMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9hZGMuYwppbmRleCBkYTNkNjg3Li5kMzA3NTcxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvYWRjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2FkYy5jCkBAIC0xOCwxOSArMTgsMTkgQEAKIAogCW9mZiA9IChjaGFubmVsICYgMHgwMykgPDwgMjsKIAotCWNzciA9IGN0cmxfaW5iKEFEQ1NSKTsKKwljc3IgPSBfX3Jhd19yZWFkYihBRENTUik7CiAJY3NyID0gY2hhbm5lbCB8IEFEQ1NSX0FEU1QgfCBBRENTUl9DS1M7Ci0JY3RybF9vdXRiKGNzciwgQURDU1IpOworCV9fcmF3X3dyaXRlYihjc3IsIEFEQ1NSKTsKIAogCWRvIHsKLQkJY3NyID0gY3RybF9pbmIoQURDU1IpOworCQljc3IgPSBfX3Jhd19yZWFkYihBRENTUik7CiAJfSB3aGlsZSAoKGNzciAmIEFEQ1NSX0FERikgPT0gMCk7CiAKIAljc3IgJj0gfihBRENTUl9BREYgfCBBRENTUl9BRFNUKTsKLQljdHJsX291dGIoY3NyLCBBRENTUik7CisJX19yYXdfd3JpdGViKGNzciwgQURDU1IpOwogCi0JcmV0dXJuICgoKGN0cmxfaW5iKEFERFJBSCArIG9mZikgPDwgOCkgfAotCQljdHJsX2luYihBRERSQUwgKyBvZmYpKSA+PiA2KTsKKwlyZXR1cm4gKCgoX19yYXdfcmVhZGIoQUREUkFIICsgb2ZmKSA8PCA4KSB8CisJCV9fcmF3X3JlYWRiKEFERFJBTCArIG9mZikpID4+IDYpOwogfQogCiBFWFBPUlRfU1lNQk9MKGFkY19zaW5nbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCmluZGV4IDZkZmUyY2MuLmVlZDVlYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKQEAgLTE0OSw3ICsxNDksOCBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9jbGtfZGl2NF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlID0gY2xrLT5wcml2OworCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqZDR0ID0gY2xrLT5wcml2OworCXN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlID0gZDR0LT5kaXZfbXVsdF90YWJsZTsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCiAJY2xrX3JhdGVfdGFibGVfYnVpbGQoY2xrLCBjbGstPmZyZXFfdGFibGUsIHRhYmxlLT5ucl9kaXZpc29ycywKQEAgLTE2MCwxNyArMTYxLDkwIEBACiAJcmV0dXJuIGNsay0+ZnJlcV90YWJsZVtpZHhdLmZyZXF1ZW5jeTsKIH0KIAorc3RhdGljIGludCBzaF9jbGtfZGl2NF9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqZDR0ID0gY2xrLT5wcml2OworCXN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlID0gZDR0LT5kaXZfbXVsdF90YWJsZTsKKwl1MzIgdmFsdWU7CisJaW50IHJldDsKKworCWlmICghc3RyY21wKCJwbGxfY2xrIiwgcGFyZW50LT5uYW1lKSkKKwkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpICYgfigxIDw8IDcpOworCWVsc2UKKwkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpIHwgKDEgPDwgNyk7CisKKwlyZXQgPSBjbGtfcmVwYXJlbnQoY2xrLCBwYXJlbnQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOworCisJLyogUmViaXVsZCB0aGUgZnJlcXVlbmN5IHRhYmxlICovCisJY2xrX3JhdGVfdGFibGVfYnVpbGQoY2xrLCBjbGstPmZyZXFfdGFibGUsIHRhYmxlLT5ucl9kaXZpc29ycywKKwkJCSAgICAgdGFibGUsICZjbGstPmFyY2hfZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfY2xrX2RpdjRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBhbGdvX2lkKQoreworCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqZDR0ID0gY2xrLT5wcml2OworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJaW50IGlkeCA9IGNsa19yYXRlX3RhYmxlX2ZpbmQoY2xrLCBjbGstPmZyZXFfdGFibGUsIHJhdGUpOworCWlmIChpZHggPCAwKQorCQlyZXR1cm4gaWR4OworCisJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXZhbHVlICY9IH4oMHhmIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJdmFsdWUgfD0gKGlkeCA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKKworCWlmIChkNHQtPmtpY2spCisJCWQ0dC0+a2ljayhjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfY2xrX2RpdjRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSAmIH4oMSA8PCA4KSwgY2xrLT5lbmFibGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hfY2xrX2RpdjRfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgfCAoMSA8PCA4KSwgY2xrLT5lbmFibGVfcmVnKTsKK30KKwogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoX2Nsa19kaXY0X2Nsa19vcHMgPSB7CiAJLnJlY2FsYwkJPSBzaF9jbGtfZGl2NF9yZWNhbGMsCisJLnNldF9yYXRlCT0gc2hfY2xrX2RpdjRfc2V0X3JhdGUsCiAJLnJvdW5kX3JhdGUJPSBzaF9jbGtfZGl2X3JvdW5kX3JhdGUsCiB9OwogCi1pbnQgX19pbml0IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKLQkJCQlzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlICp0YWJsZSkKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaF9jbGtfZGl2NF9lbmFibGVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHNoX2Nsa19kaXY0X3JlY2FsYywKKwkuc2V0X3JhdGUJPSBzaF9jbGtfZGl2NF9zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9IHNoX2Nsa19kaXZfcm91bmRfcmF0ZSwKKwkuZW5hYmxlCQk9IHNoX2Nsa19kaXY0X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHNoX2Nsa19kaXY0X2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2hfY2xrX2RpdjRfcmVwYXJlbnRfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHNoX2Nsa19kaXY0X3JlY2FsYywKKwkuc2V0X3JhdGUJPSBzaF9jbGtfZGl2NF9zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9IHNoX2Nsa19kaXZfcm91bmRfcmF0ZSwKKwkuZW5hYmxlCQk9IHNoX2Nsa19kaXY0X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHNoX2Nsa19kaXY0X2Rpc2FibGUsCisJLnNldF9wYXJlbnQJPSBzaF9jbGtfZGl2NF9zZXRfcGFyZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hfY2xrX2RpdjRfcmVnaXN0ZXJfb3BzKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKKwkJCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUsIHN0cnVjdCBjbGtfb3BzICpvcHMpCiB7CiAJc3RydWN0IGNsayAqY2xrcDsKIAl2b2lkICpmcmVxX3RhYmxlOwotCWludCBucl9kaXZzID0gdGFibGUtPm5yX2Rpdmlzb3JzOworCWludCBucl9kaXZzID0gdGFibGUtPmRpdl9tdWx0X3RhYmxlLT5ucl9kaXZpc29yczsKIAlpbnQgZnJlcV90YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSk7CiAJaW50IHJldCA9IDA7CiAJaW50IGs7CkBAIC0xODUsNyArMjU5LDcgQEAKIAlmb3IgKGsgPSAwOyAhcmV0ICYmIChrIDwgbnIpOyBrKyspIHsKIAkJY2xrcCA9IGNsa3MgKyBrOwogCi0JCWNsa3AtPm9wcyA9ICZzaF9jbGtfZGl2NF9jbGtfb3BzOworCQljbGtwLT5vcHMgPSBvcHM7CiAJCWNsa3AtPmlkID0gLTE7CiAJCWNsa3AtPnByaXYgPSB0YWJsZTsKIApAQCAtMTk4LDYgKzI3MiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBfX2luaXQgc2hfY2xrX2RpdjRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpCit7CisJcmV0dXJuIHNoX2Nsa19kaXY0X3JlZ2lzdGVyX29wcyhjbGtzLCBuciwgdGFibGUsICZzaF9jbGtfZGl2NF9jbGtfb3BzKTsKK30KKworaW50IF9faW5pdCBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpCit7CisJcmV0dXJuIHNoX2Nsa19kaXY0X3JlZ2lzdGVyX29wcyhjbGtzLCBuciwgdGFibGUsCisJCQkJCSZzaF9jbGtfZGl2NF9lbmFibGVfY2xrX29wcyk7Cit9CisKK2ludCBfX2luaXQgc2hfY2xrX2RpdjRfcmVwYXJlbnRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpCit7CisJcmV0dXJuIHNoX2Nsa19kaXY0X3JlZ2lzdGVyX29wcyhjbGtzLCBuciwgdGFibGUsCisJCQkJCSZzaF9jbGtfZGl2NF9yZXBhcmVudF9jbGtfb3BzKTsKK30KKwogI2lmZGVmIENPTkZJR19TSF9DTEtfQ1BHX0xFR0FDWQogc3RhdGljIHN0cnVjdCBjbGsgbWFzdGVyX2NsayA9IHsKIAkubmFtZQkJPSAibWFzdGVyX2NsayIsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IGYzYTQ2YmUuLjgzZGE1ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC01OTgsNyArNTk4LDcgQEAKIHN0YXRpYyBpbnQgY2xrX2RlYnVnZnNfcmVnaXN0ZXJfb25lKHN0cnVjdCBjbGsgKmMpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgZGVudHJ5ICpkLCAqY2hpbGQ7CisJc3RydWN0IGRlbnRyeSAqZCwgKmNoaWxkLCAqY2hpbGRfdG1wOwogCXN0cnVjdCBjbGsgKnBhID0gYy0+cGFyZW50OwogCWNoYXIgc1syNTVdOwogCWNoYXIgKnAgPSBzOwpAQCAtNjMwLDcgKzYzMCw3IEBACiAKIGVycl9vdXQ6CiAJZCA9IGMtPmRlbnRyeTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGQsIGNoaWxkX3RtcCwgJmQtPmRfc3ViZGlycywgZF91LmRfY2hpbGQpCiAJCWRlYnVnZnNfcmVtb3ZlKGNoaWxkKTsKIAlkZWJ1Z2ZzX3JlbW92ZShjLT5kZW50cnkpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvZnB1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvZnB1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1OWVkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9mcHUuYwpAQCAtMCwwICsxLDg0IEBACisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ZwdS5oPgorCitpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHRza191c2VkX21hdGgodHNrKSkgeworCQlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgJiYgdHNrID09IGN1cnJlbnQpCisJCQl1bmxhenlfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE1lbW9yeSBhbGxvY2F0aW9uIGF0IHRoZSBmaXJzdCB1c2FnZSBvZiB0aGUgRlBVIGFuZCBvdGhlciBzdGF0ZS4KKwkgKi8KKwlpZiAoIXRzay0+dGhyZWFkLnhzdGF0ZSkgeworCQl0c2stPnRocmVhZC54c3RhdGUgPSBrbWVtX2NhY2hlX2FsbG9jKHRhc2tfeHN0YXRlX2NhY2hlcCwKKwkJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIXRzay0+dGhyZWFkLnhzdGF0ZSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKKwkJc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCAqZnAgPSAmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1OworCQltZW1zZXQoZnAsIDAsIHhzdGF0ZV9zaXplKTsKKwkJZnAtPmZwc2NyID0gRlBTQ1JfSU5JVDsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcCA9ICZ0c2stPnRocmVhZC54c3RhdGUtPnNvZnRmcHU7CisJCW1lbXNldChmcCwgMCwgeHN0YXRlX3NpemUpOworCQlmcC0+ZnBzY3IgPSBGUFNDUl9JTklUOworCX0KKworCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0c2spOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1NIX0ZQVQordm9pZCBfX2ZwdV9zdGF0ZV9yZXN0b3JlKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJcmVzdG9yZV9mcHUodHNrKTsKKworCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7CisJdHNrLT5mcHVfY291bnRlcisrOworfQorCit2b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCWlmICh1bmxpa2VseSghdXNlcl9tb2RlKHJlZ3MpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkJVRzogRlBVIGlzIHVzZWQgaW4ga2VybmVsIG1vZGUuXG4iKTsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXRza191c2VkX21hdGgodHNrKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCS8qCisJCSAqIGRvZXMgYSBzbGFiIGFsbG9jIHdoaWNoIGNhbiBzbGVlcAorCQkgKi8KKwkJaWYgKGluaXRfZnB1KHRzaykpIHsKKwkJCS8qCisJCQkgKiByYW4gb3V0IG9mIG1lbW9yeSEKKwkJCSAqLworCQkJZG9fZ3JvdXBfZXhpdChTSUdLSUxMKTsKKwkJCXJldHVybjsKKwkJfQorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCX0KKworCWdyYWJfZnB1KHJlZ3MpOworCisJX19mcHVfc3RhdGVfcmVzdG9yZSgpOworfQorCitCVUlMRF9UUkFQX0hBTkRMRVIoZnB1X3N0YXRlX3Jlc3RvcmUpCit7CisJVFJBUF9IQU5ETEVSX0RFQ0w7CisKKwlmcHVfc3RhdGVfcmVzdG9yZShyZWdzKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU0hfRlBVICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYwppbmRleCA4OWI0Yjc2Li5jNzM2NDIyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKQEAgLTI0LDIyICsyNCwzMiBAQAogI2luY2x1ZGUgPGFzbS9lbGYuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCi0jaW5jbHVkZSA8YXNtL3ViYy5oPgorI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CisKKyNpZmRlZiBDT05GSUdfU0hfRlBVCisjZGVmaW5lIGNwdV9oYXNfZnB1CTEKKyNlbHNlCisjZGVmaW5lIGNwdV9oYXNfZnB1CTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NIX0RTUAorI2RlZmluZSBjcHVfaGFzX2RzcAkxCisjZWxzZQorI2RlZmluZSBjcHVfaGFzX2RzcAkwCiAjZW5kaWYKIAogLyoKICAqIEdlbmVyaWMgd3JhcHBlciBmb3IgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBkaXNhYmxlIG9uLWNoaXAKICAqIHBlcmlwaGVyYWxzIChub2ZwdSwgbm9kc3AsIGFuZCBzbyBmb3J0aCkuCiAgKi8KLSNkZWZpbmUgb25jaGlwX3NldHVwKHgpCQkJCVwKLXN0YXRpYyBpbnQgeCMjX2Rpc2FibGVkIF9faW5pdGRhdGEgPSAwOwkJXAotCQkJCQkJXAotc3RhdGljIGludCBfX2luaXQgeCMjX3NldHVwKGNoYXIgKm9wdHMpCQlcCi17CQkJCQkJXAotCXgjI19kaXNhYmxlZCA9IDE7CQkJXAotCXJldHVybiAxOwkJCQlcCi19CQkJCQkJXAorI2RlZmluZSBvbmNoaXBfc2V0dXAoeCkJCQkJCVwKK3N0YXRpYyBpbnQgeCMjX2Rpc2FibGVkIF9faW5pdGRhdGEgPSAhY3B1X2hhc18jI3g7CVwKKwkJCQkJCQlcCitzdGF0aWMgaW50IF9faW5pdCB4IyNfc2V0dXAoY2hhciAqb3B0cykJCQlcCit7CQkJCQkJCVwKKwl4IyNfZGlzYWJsZWQgPSAxOwkJCQlcCisJcmV0dXJuIDE7CQkJCQlcCit9CQkJCQkJCVwKIF9fc2V0dXAoIm5vIiBfX3N0cmluZ2lmeSh4KSwgeCMjX3NldHVwKTsKIAogb25jaGlwX3NldHVwKGZwdSk7CkBAIC01MiwxMCArNjIsMTAgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVjdWxhdGl2ZV9leGVjdXRpb25faW5pdCh2b2lkKQogewogCS8qIENsZWFyIFJBQkQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoQ1BVT1BNKSAmIH5DUFVPUE1fUkFCRCwgQ1BVT1BNKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoQ1BVT1BNKSAmIH5DUFVPUE1fUkFCRCwgQ1BVT1BNKTsKIAogCS8qIEZsdXNoIHRoZSB1cGRhdGUgKi8KLQkodm9pZCljdHJsX2lubChDUFVPUE0pOworCSh2b2lkKV9fcmF3X3JlYWRsKENQVU9QTSk7CiAJY3RybF9iYXJyaWVyKCk7CiB9CiAjZWxzZQpAQCAtODksNyArOTksNyBAQAogI2VuZGlmCiAKIC8qIDJuZC1sZXZlbCBjYWNoZSBpbml0ICovCi12b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkgbDJfY2FjaGVfaW5pdCh2b2lkKQordm9pZCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIGwyX2NhY2hlX2luaXQodm9pZCkKIHsKIH0KIApAQCAtOTcsMTIgKzEwNywxMiBAQAogICogR2VuZXJpYyBmaXJzdC1sZXZlbCBjYWNoZSBpbml0CiAgKi8KICNpZmRlZiBDT05GSUdfU1VQRVJIMzIKLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGNhY2hlX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGNhY2hlX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNjciwgZmxhZ3M7CiAKIAlqdW1wX3RvX3VuY2FjaGVkKCk7Ci0JY2NyID0gY3RybF9pbmwoQ0NSKTsKKwljY3IgPSBfX3Jhd19yZWFkbChDQ1IpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50IHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgY2FjaGUgaXMgZW5hYmxlZCBvciBub3QgLSBhCkBAIC0xNDYsNyArMTU2LDcgQEAKIAkJCWZvciAoYWRkciA9IGFkZHJzdGFydDsKIAkJCSAgICAgYWRkciA8IGFkZHJzdGFydCArIHdheXNpemU7CiAJCQkgICAgIGFkZHIgKz0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubGluZXN6KQotCQkJCWN0cmxfb3V0bCgwLCBhZGRyKTsKKwkJCQlfX3Jhd193cml0ZWwoMCwgYWRkcik7CiAKIAkJCWFkZHJzdGFydCArPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlfaW5jcjsKIAkJfSB3aGlsZSAoLS13YXlzKTsKQEAgLTE3OSw3ICsxODksNyBAQAogCiAJbDJfY2FjaGVfaW5pdCgpOwogCi0JY3RybF9vdXRsKGZsYWdzLCBDQ1IpOworCV9fcmF3X3dyaXRlbChmbGFncywgQ0NSKTsKIAliYWNrX3RvX2NhY2hlZCgpOwogfQogI2Vsc2UKQEAgLTIwNyw2ICsyMTcsMTggQEAKIAkJbDJfY2FjaGVfc2hhcGUgPSAtMTsgLyogTm8gUy1jYWNoZSAqLwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgZnB1X2luaXQodm9pZCkKK3sKKwkvKiBEaXNhYmxlIHRoZSBGUFUgKi8KKwlpZiAoZnB1X2Rpc2FibGVkICYmIChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKSB7CisJCXByaW50aygiRlBVIERpc2FibGVkXG4iKTsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyAmPSB+Q1BVX0hBU19GUFU7CisJfQorCisJZGlzYWJsZV9mcHUoKTsKKwljbGVhcl91c2VkX21hdGgoKTsKK30KKwogI2lmZGVmIENPTkZJR19TSF9EU1AKIHN0YXRpYyB2b2lkIF9faW5pdCByZWxlYXNlX2RzcCh2b2lkKQogewpAQCAtMjQ0LDI4ICsyNjYsMzUgQEAKIAlpZiAoc3IgJiBTUl9EU1ApCiAJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19EU1A7CiAKKwkvKiBEaXNhYmxlIHRoZSBEU1AgKi8KKwlpZiAoZHNwX2Rpc2FibGVkICYmIChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19EU1ApKSB7CisJCXByaW50aygiRFNQIERpc2FibGVkXG4iKTsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyAmPSB+Q1BVX0hBU19EU1A7CisJfQorCiAJLyogTm93IHRoYXQgd2UndmUgZGV0ZXJtaW5lZCB0aGUgRFNQIHN0YXR1cywgY2xlYXIgdGhlIERTUCBiaXQuICovCiAJcmVsZWFzZV9kc3AoKTsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGRzcF9pbml0KHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19TSF9EU1AgKi8KIAogLyoqCiAgKiBzaF9jcHVfaW5pdAogICoKLSAqIFRoaXMgaXMgb3VyIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGVhY2ggQ1BVLCBhbmQgaXMgaW52b2tlZCBvbiB0aGUgYm9vdAotICogQ1BVIHByaW9yIHRvIGNhbGxpbmcgc3RhcnRfa2VybmVsKCkuIEZvciBTTVAsIGEgY29tYmluYXRpb24gb2YgdGhpcyBhbmQKLSAqIHN0YXJ0X3NlY29uZGFyeSgpIHdpbGwgYnJpbmcgdXAgZWFjaCBwcm9jZXNzb3IgdG8gYSByZWFkeSBzdGF0ZSBwcmlvcgotICogdG8gaGFuZCBmb3JraW5nIHRoZSBpZGxlIGxvb3AuCisgKiBUaGlzIGlzIG91ciBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBlYWNoIENQVSwgYW5kIGlzIGludm9rZWQgb24gdGhlCisgKiBib290IENQVSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0X2tlcm5lbCgpLiBGb3IgU01QLCBhIGNvbWJpbmF0aW9uIG9mCisgKiB0aGlzIGFuZCBzdGFydF9zZWNvbmRhcnkoKSB3aWxsIGJyaW5nIHVwIGVhY2ggcHJvY2Vzc29yIHRvIGEgcmVhZHkKKyAqIHN0YXRlIHByaW9yIHRvIGhhbmQgZm9ya2luZyB0aGUgaWRsZSBsb29wLgogICoKLSAqIFdlIGRvIGFsbCBvZiB0aGUgYmFzaWMgcHJvY2Vzc29yIGluaXQgaGVyZSwgaW5jbHVkaW5nIHNldHRpbmcgdXAgdGhlCi0gKiBjYWNoZXMsIEZQVSwgRFNQLCBraWNraW5nIHRoZSBVQkMsIGV0Yy4gQnkgdGhlIHRpbWUgc3RhcnRfa2VybmVsKCkgaXMKLSAqIGhpdCAoYW5kIHN1YnNlcXVlbnRseSBwbGF0Zm9ybV9zZXR1cCgpKSB0aGluZ3MgbGlrZSBkZXRlcm1pbmluZyB0aGUKLSAqIENQVSBzdWJ0eXBlIGFuZCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gd2lsbCBhbGwgYmUgZG9uZS4KKyAqIFdlIGRvIGFsbCBvZiB0aGUgYmFzaWMgcHJvY2Vzc29yIGluaXQgaGVyZSwgaW5jbHVkaW5nIHNldHRpbmcgdXAKKyAqIHRoZSBjYWNoZXMsIEZQVSwgRFNQLCBldGMuIEJ5IHRoZSB0aW1lIHN0YXJ0X2tlcm5lbCgpIGlzIGhpdCAoYW5kCisgKiBzdWJzZXF1ZW50bHkgcGxhdGZvcm1fc2V0dXAoKSkgdGhpbmdzIGxpa2UgZGV0ZXJtaW5pbmcgdGhlIENQVQorICogc3VidHlwZSBhbmQgaW5pdGlhbCBjb25maWd1cmF0aW9uIHdpbGwgYWxsIGJlIGRvbmUuCiAgKgogICogRWFjaCBwcm9jZXNzb3IgZmFtaWx5IGlzIHN0aWxsIHJlc3BvbnNpYmxlIGZvciBkb2luZyBpdHMgb3duIHByb2JpbmcKICAqIGFuZCBjYWNoZSBjb25maWd1cmF0aW9uIGluIGRldGVjdF9jcHVfYW5kX2NhY2hlX3N5c3RlbSgpLgogICovCi0KIGFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgc2hfY3B1X2luaXQodm9pZCkKIHsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMzAyLDE4ICszMzEsOCBAQAogCQlkZXRlY3RfY2FjaGVfc2hhcGUoKTsKIAl9CiAKLQkvKiBEaXNhYmxlIHRoZSBGUFUgKi8KLQlpZiAoZnB1X2Rpc2FibGVkKSB7Ci0JCXByaW50aygiRlBVIERpc2FibGVkXG4iKTsKLQkJY3VycmVudF9jcHVfZGF0YS5mbGFncyAmPSB+Q1BVX0hBU19GUFU7Ci0JfQotCi0JLyogRlBVIGluaXRpYWxpemF0aW9uICovCi0JZGlzYWJsZV9mcHUoKTsKLQlpZiAoKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpIHsKLQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7Ci0JCWNsZWFyX3VzZWRfbWF0aCgpOwotCX0KKwlmcHVfaW5pdCgpOworCWRzcF9pbml0KCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHBlci1DUFUgQVNJRCBjYWNoZSB2ZXJ5IGVhcmx5LCBzaW5jZSB0aGUKQEAgLTMyMSwxOCArMzQwLDI0IEBACiAJICovCiAJY3VycmVudF9jcHVfZGF0YS5hc2lkX2NhY2hlID0gTk9fQ09OVEVYVDsKIAotI2lmZGVmIENPTkZJR19TSF9EU1AKLQkvKiBQcm9iZSBmb3IgRFNQICovCi0JZHNwX2luaXQoKTsKLQotCS8qIERpc2FibGUgdGhlIERTUCAqLwotCWlmIChkc3BfZGlzYWJsZWQpIHsKLQkJcHJpbnRrKCJEU1AgRGlzYWJsZWRcbiIpOwotCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0RTUDsKLQkJcmVsZWFzZV9kc3AoKTsKLQl9Ci0jZW5kaWYKLQogCXNwZWN1bGF0aXZlX2V4ZWN1dGlvbl9pbml0KCk7CiAJZXhwbWFza19pbml0KCk7CisKKwkvKiBEbyB0aGUgcmVzdCBvZiB0aGUgYm9vdCBwcm9jZXNzb3Igc2V0dXAgKi8KKwlpZiAocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKSB7CisJCS8qIFNhdmUgb2ZmIHRoZSBCSU9TIFZCUiwgaWYgdGhlcmUgaXMgb25lICovCisJCXNoX2Jpb3NfdmJyX2luaXQoKTsKKworCQkvKgorCQkgKiBTZXR1cCBWQlIgZm9yIGJvb3QgQ1BVLiBTZWNvbmRhcnkgQ1BVcyBkbyB0aGlzIHRocm91Z2gKKwkJICogc3RhcnRfc2Vjb25kYXJ5KCkuCisJCSAqLworCQlwZXJfY3B1X3RyYXBfaW5pdCgpOworCisJCS8qCisJCSAqIEJvb3QgcHJvY2Vzc29yIHRvIHNldHVwIHRoZSBGUCBhbmQgZXh0ZW5kZWQgc3RhdGUKKwkJICogY29udGV4dCBpbmZvLgorCQkgKi8KKwkJaW5pdF90aHJlYWRfeHN0YXRlKCk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCmluZGV4IDA2ZTdlMjkuLjk2YTIzOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQliaXRtYXNrID0gMSA8PCAoaXJxIC0gMzIpOwogCX0KIAotCWN0cmxfb3V0bChiaXRtYXNrLCByZWcpOworCV9fcmF3X3dyaXRlbChiaXRtYXNrLCByZWcpOwogfQogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2ludGNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xMzksNyArMTM5LDcgQEAKIAkJYml0bWFzayA9IDEgPDwgKGlycSAtIDMyKTsKIAl9CiAKLQljdHJsX291dGwoYml0bWFzaywgcmVnKTsKKwlfX3Jhd193cml0ZWwoYml0bWFzaywgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX2ludGModW5zaWduZWQgaW50IGlycSkKQEAgLTE3MCwxMSArMTcwLDExIEBACiAKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHNldCBhbGwgcHJpb3JpdGllcyB0byAwIHRvIGF2b2lkIHRyb3VibGUgKi8KLQljdHJsX291dGwoLTEsIElOVENfSU5URFNCXzApOwotCWN0cmxfb3V0bCgtMSwgSU5UQ19JTlREU0JfMSk7CisJX19yYXdfd3JpdGVsKC0xLCBJTlRDX0lOVERTQl8wKTsKKwlfX3Jhd193cml0ZWwoLTEsIElOVENfSU5URFNCXzEpOwogCiAJZm9yIChyZWcgPSBJTlRDX0lOVFBSSV8wLCBpID0gMDsgaSA8IElOVENfSU5UUFJJX1BSRUdTOyBpKyssIHJlZyArPSA4KQotCQljdHJsX291dGwoIE5PX1BSSU9SSVRZLCByZWcpOworCQlfX3Jhd193cml0ZWwoIE5PX1BSSU9SSVRZLCByZWcpOwogCiAKICNpZmRlZiBDT05GSUdfU0hfQ0FZTUFOCkBAIC0xOTksNyArMTk5LDcgQEAKIAkJCXJlZyA9IElOVENfSUNSX1NFVDsKIAkJCWkgPSBJUlFfSVJMMDsKIAkJfQotCQljdHJsX291dGwoSU5UQ19JQ1JfSVJMTSwgcmVnKTsKKwkJX19yYXdfd3JpdGVsKElOVENfSUNSX0lSTE0sIHJlZyk7CiAKIAkJLyogU2V0IGludGVycnVwdCBwcmlvcml0aWVzIGFjY29yZGluZyB0byBwbGF0Zm9ybSBkZXNjcmlwdGlvbiAqLwogCQlmb3IgKGRhdGEgPSAwLCByZWcgPSBJTlRDX0lOVFBSSV8wOyBpIDwgTlJfSU5UQ19JUlFTOyBpKyspIHsKQEAgLTIwNyw3ICsyMDcsNyBAQAogCQkJCSgoaSAlIElOVENfSU5UUFJJX1BQUkVHKSAqIDQpOwogCQkJaWYgKChpICUgSU5UQ19JTlRQUklfUFBSRUcpID09IChJTlRDX0lOVFBSSV9QUFJFRyAtIDEpKSB7CiAJCQkJLyogVXBvbiB0aGUgN3RoLCBzZXQgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KLQkJCQljdHJsX291dGwoZGF0YSwgcmVnKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgcmVnKTsKIAkJCQlkYXRhID0gMDsKIAkJCQlyZWcgKz0gODsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jCmluZGV4IDRmZTg2MzEuLjBjOWYyNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYwpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiA3XTsKKwljbGstPnJhdGUgKj0gUExMMiAqIHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc2MTlfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00MCw3ICs0MCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUwLDcgKzUwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBsbDFyYXRlWyhjdHJsX2ludyhGUkVRQ1IpID4+IDgpICYgN107CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzYxOV9idXNfY2xrX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKaW5kZXggNzgxNGM3Ni4uYjI2MjY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlyZXR1cm4gMTAwMDAwMDAgKiBQTEwyICogcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOworCXJldHVybiAxMDAwMDAwMCAqIFBMTDIgKiBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDFfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00Myw3ICs0Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNjMsNyArNjMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbncoRlJFUUNSKSA+PiA0KSAmIDB4MDAwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA0KSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMKaW5kZXggOTQwOTg2OS4uN2U3NWQ4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiAweDAwMDNdICogUExMMiA7CisJY2xrLT5yYXRlICo9IHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgMHgwMDAzXSAqIFBMTDIgOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjAzX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01OCw3ICs1OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeC0yXTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYwppbmRleCBjMjI2OGJkLi5iMjdhNWUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYwpAQCAtMzQsNyArMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOworCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjA2X21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDMsNyArNDMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Myw3ICs1Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjA2X2J1c19jbGtfb3BzID0gewpAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCmluZGV4IGQzOTVjZTUuLjQ4OGQyNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCkBAIC0yNiw4ICsyNiw3IEBACiAvKgogICogU2F2ZSBGUFUgcmVnaXN0ZXJzIG9udG8gdGFzayBzdHJ1Y3R1cmUuCiAgKi8KLXZvaWQKLXNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQordm9pZCBzYXZlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCkBAIC01Miw3ICs1MSw3IEBACiAJCSAgICAgImZtb3YucwlmcjAsIEAtJTBcblx0IgogCQkgICAgICJsZHMJJTMsIGZwc2NyXG5cdCIKIAkJICAgICA6ICI9ciIgKGR1bW15KQotCQkgICAgIDogIjAiICgoY2hhciAqKSgmdHNrLT50aHJlYWQuZnB1LmhhcmQuc3RhdHVzKSksCisJCSAgICAgOiAiMCIgKChjaGFyICopKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuc3RhdHVzKSksCiAJCSAgICAgICAiciIgKEZQU0NSX1JDSEcpLAogCQkgICAgICAgInIiIChGUFNDUl9JTklUKQogCQkgICAgIDogIm1lbW9yeSIpOwpAQCAtNjAsOCArNTksNyBAQAogCWRpc2FibGVfZnB1KCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1yZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3ZvaWQgcmVzdG9yZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJdW5zaWduZWQgbG9uZyBkdW1teTsKIApAQCAtODUsNDUgKzgzLDEyIEBACiAJCSAgICAgImxkcy5sCUAlMCssIGZwc2NyXG5cdCIKIAkJICAgICAibGRzLmwJQCUwKywgZnB1bFxuXHQiCiAJCSAgICAgOiAiPXIiIChkdW1teSkKLQkJICAgICA6ICIwIiAoJnRzay0+dGhyZWFkLmZwdSksICJyIiAoRlBTQ1JfUkNIRykKKwkJICAgICA6ICIwIiAodHNrLT50aHJlYWQueHN0YXRlKSwgInIiIChGUFNDUl9SQ0hHKQogCQkgICAgIDogIm1lbW9yeSIpOwogCWRpc2FibGVfZnB1KCk7CiB9CiAKIC8qCi0gKiBMb2FkIHRoZSBGUFUgd2l0aCBzaWduYWxsaW5nIE5BTlMuICBUaGlzIGJpdCBwYXR0ZXJuIHdlJ3JlIHVzaW5nCi0gKiBoYXMgdGhlIHByb3BlcnR5IHRoYXQgbm8gbWF0dGVyIHdldGhlciBjb25zaWRlcmVkIGFzIHNpbmdsZSBvciBhcwotICogZG91YmxlIHByZWNpc3Npb24gcmVwcmVzZW50cyBzaWduYWxpbmcgTkFOUy4KLSAqLwotCi1zdGF0aWMgdm9pZAotZnB1X2luaXQodm9pZCkKLXsKLQllbmFibGVfZnB1KCk7Ci0JYXNtIHZvbGF0aWxlKCJsZHMJJTAsIGZwdWxcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyMFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjJcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyM1xuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI0XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjVcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyNlxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI3XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjhcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyOVxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxMFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxMVxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxMlxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxM1xuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxNFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxNVxuXHQiCi0JCSAgICAgImxkcwklMiwgZnBzY3Jcblx0IgotCQkgICAgIDogLyogbm8gb3V0cHV0ICovCi0JCSAgICAgOiAiciIgKDApLCAiciIgKEZQU0NSX1JDSEcpLCAiciIgKEZQU0NSX0lOSVQpKTsKLQlkaXNhYmxlX2ZwdSgpOwotfQotCi0vKgogICoJRW11bGF0ZSBhcml0aG1ldGljIG9wcyBvbiBkZW5vcm1hbGl6ZWQgbnVtYmVyIGZvciBzb21lIEZQVSBpbnNucy4KICAqLwogCkBAIC00OTAsOSArNDU1LDkgQEAKIAlpZiAoKGZpbnNuICYgMHhmMWZmKSA9PSAweGYwYWQpIHsgLyogZmNudnNkICovCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCQlpZiAoKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKSkgeworCQlpZiAoKHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikpIHsKIAkJCS8qIEZQVSBlcnJvciAqLwotCQkJZGVub3JtYWxfdG9fZG91YmxlICgmdHNrLT50aHJlYWQuZnB1LmhhcmQsCisJCQlkZW5vcm1hbF90b19kb3VibGUgKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsCiAJCQkJCSAgICAoZmluc24gPj4gOCkgJiAweGYpOwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwpAQCAtNTA3LDkgKzQ3Miw5IEBACiAKIAkJbiA9IChmaW5zbiA+PiA4KSAmIDB4ZjsKIAkJbSA9IChmaW5zbiA+PiA0KSAmIDB4ZjsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dOwotCQloeSA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07Ci0JCWZwc2NyID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3I7CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl07CisJCWh5ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CisJCWZwc2NyID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyOwogCQlwcmVjID0gZnBzY3IgJiAoMSA8PCAxOSk7CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKQEAgLTUxOSwxNSArNDg0LDE1IEBACiAKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZykgaHggPDwgMzIpCi0JCQkgICAgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24rMV07CisJCQkgICAgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuKzFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpIGh5IDw8IDMyKQotCQkJICAgICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttKzFdOworCQkJICAgICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSsxXTsKIAkJCWlmICgoaHggJiAweDdmZmZmZmZmKSA+PSAweDAwMTAwMDAwKQogCQkJCWxseCA9IGRlbm9ybWFsX211bGQobGx5LCBsbHgpOwogCQkJZWxzZQogCQkJCWxseCA9IGRlbm9ybWFsX211bGQobGx4LCBsbHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbisxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24rMV0gPSBsbHggJiAweGZmZmZmZmZmOwogCQl9IGVsc2UgaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKIAkJICAgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCSAgIHx8IChoeSAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMCkpKSB7CkBAIC01MzYsNyArNTAxLDcgQEAKIAkJCQloeCA9IGRlbm9ybWFsX211bGYoaHksIGh4KTsKIAkJCWVsc2UKIAkJCQloeCA9IGRlbm9ybWFsX211bGYoaHgsIGh5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBoeDsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gaHg7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CiAKQEAgLTU1MCw5ICs1MTUsOSBAQAogCiAJCW4gPSAoZmluc24gPj4gOCkgJiAweGY7CiAJCW0gPSAoZmluc24gPj4gNCkgJiAweGY7Ci0JCWh4ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXTsKLQkJaHkgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOwotCQlmcHNjciA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dOworCQloeSA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOworCQlmcHNjciA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjcjsKIAkJcHJlYyA9IGZwc2NyICYgKDEgPDwgMTkpOwogCiAJCWlmICgoZnBzY3IgJiBGUFNDUl9GUFVfRVJST1IpCkBAIC01NjIsMTUgKzUyNywxNSBAQAogCiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAqLwogCQkJbGx4ID0gKChsb25nIGxvbmcpIGh4IDw8IDMyKQotCQkJICAgICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuKzFdOworCQkJICAgICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbisxXTsKIAkJCWxseSA9ICgobG9uZyBsb25nKSBoeSA8PCAzMikKLQkJCSAgICAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbSsxXTsKKwkJCSAgICAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20rMV07CiAJCQlpZiAoKGZpbnNuICYgMHhmMDBmKSA9PSAweGYwMDApCiAJCQkJbGx4ID0gZGVub3JtYWxfYWRkZChsbHgsIGxseSk7CiAJCQllbHNlCiAJCQkJbGx4ID0gZGVub3JtYWxfYWRkZChsbHgsIGxseSBeICgxTEwgPDwgNjMpKTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24rMV0gPSBsbHggJiAweGZmZmZmZmZmOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuKzFdID0gbGx4ICYgMHhmZmZmZmZmZjsKIAkJfSBlbHNlIGlmICgoZnBzY3IgJiBGUFNDUl9GUFVfRVJST1IpCiAJCSAgICAgJiYgKCFwcmVjICYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDAKIAkJCQkgICB8fCAoaHkgJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDApKSkgewpAQCAtNTc5LDcgKzU0NCw3IEBACiAJCQkJaHggPSBkZW5vcm1hbF9hZGRmKGh4LCBoeSk7CiAJCQllbHNlCiAJCQkJaHggPSBkZW5vcm1hbF9hZGRmKGh4LCBoeSBeIDB4ODAwMDAwMDApOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGh4OworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBoeDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtNTk3LDcgKzU2Miw3IEBACiAKIAlfX3VubGF6eV9mcHUodHNrLCByZWdzKTsKIAlpZiAoaWVlZV9mcGVfaGFuZGxlcihyZWdzKSkgewotCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmPQorCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJj0KIAkJCX4oRlBTQ1JfQ0FVU0VfTUFTSyB8IEZQU0NSX0ZMQUdfTUFTSyk7CiAJCWdyYWJfZnB1KHJlZ3MpOwogCQlyZXN0b3JlX2ZwdSh0c2spOwpAQCAtNjA3LDMzICs1NzIsMyBAQAogCiAJZm9yY2Vfc2lnKFNJR0ZQRSwgdHNrKTsKIH0KLQotdm9pZCBmcHVfc3RhdGVfcmVzdG9yZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0KLQlncmFiX2ZwdShyZWdzKTsKLQlpZiAodW5saWtlbHkoIXVzZXJfbW9kZShyZWdzKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IEZQVSBpcyB1c2VkIGluIGtlcm5lbCBtb2RlLlxuIik7Ci0JCUJVRygpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxpa2VseSh1c2VkX21hdGgoKSkpIHsKLQkJLyogVXNpbmcgdGhlIEZQVSBhZ2Fpbi4gICovCi0JCXJlc3RvcmVfZnB1KHRzayk7Ci0JfSBlbHNlCXsKLQkJLyogRmlyc3QgdGltZSBGUFUgdXNlci4gICovCi0JCWZwdV9pbml0KCk7Ci0JCXNldF91c2VkX21hdGgoKTsKLQl9Ci0JdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsKLQl0c2stPmZwdV9jb3VudGVyKys7Ci19Ci0KLUJVSUxEX1RSQVBfSEFORExFUihmcHVfc3RhdGVfcmVzdG9yZSkKLXsKLQlUUkFQX0hBTkRMRVJfREVDTDsKLQotCWZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2gzLmMKaW5kZXggMjdiODczOC4uYjc4Mzg0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoMy5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbaWR4XTsKQEAgLTQwLDcgKzQwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKQEAgLTUyLDcgKzUyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDgwMDApID4+IDEzKSB8ICgoZnJxY3IgJiAweDAwMzApID4+IDQpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gc3RjX211bHRpcGxpZXJzW2lkeF07CkBAIC02NCw3ICs2NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHg0MDAwKSA+PiAxMikgfCAoKGZycWNyICYgMHgwMDBjKSA+PiAyKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKaW5kZXggMGNhOGYyYy4uMGVjZWExNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNS5jCkBAIC0zMiw3ICszMiw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2ludyhGUlFDUikgJiAweDAwMDNdOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDAzXTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzcwNV9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQxLDcgKzQxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSBjdHJsX2ludyhGUlFDUikgJiAweDAwMDM7CisJaW50IGlkeCA9IF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwMzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTEsNyArNTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAzMDApID4+IDg7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAzMDApID4+IDg7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gc3RjX211bHRpcGxpZXJzW2lkeF07CiB9CiAKQEAgLTYxLDcgKzYxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDMwKSA+PiA0OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDMwKSA+PiA0OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDYuYwppbmRleCA0YmY3ODg3Li42ZjlmZjhiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tpZHhdOwpAQCAtMzYsNyArMzYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCk7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKQEAgLTYwLDcgKzYwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDQwMDApID4+IDEyKSB8ICgoZnJxY3IgJiAweDAwMGMpID4+IDIpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDkuYwppbmRleCBlODc0OTUwLi5mMzAyYmEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tpZHhdOwpAQCAtMzYsNyArMzYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKGZycWNyICYgMHgwMDgwKSA/CiAJCSgoZnJxY3IgJiAweDgwMDApID4+IDEzKSB8ICgoZnJxY3IgJiAweDAwMzApID4+IDQpIDogMTsKIApAQCAtNjEsNyArNjEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4NDAwMCkgPj4gMTIpIHwgKChmcnFjciAmIDB4MDAwYykgPj4gMik7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMC5jCmluZGV4IDAzMGE1OGIuLjI5YTg3ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTAuYwpAQCAtMjYsNyArMjYsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBtZF90YWJsZVtjdHJsX2ludyhGUlFDUikgJiAweDAwMDddOworCWNsay0+cmF0ZSAqPSBtZF90YWJsZVtfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzEwX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzUsNyArMzUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZF90YWJsZVtpZHhdOwogfQogCkBAIC00NSw3ICs0NSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDcwMCkgPj4gODsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDcwMCkgPj4gODsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZF90YWJsZVtpZHhdOwogfQogCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDA3MCkgPj4gNDsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDA3MCkgPj4gNDsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZF90YWJsZVtpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTIuYwppbmRleCA2NDI4ZWU2Li5iMGQwYzUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEyLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoZnJxY3IgJiAweDAzMDApID4+IDg7CiAKIAljbGstPnJhdGUgKj0gbXVsdGlwbGllcnNbaWR4XTsKQEAgLTM1LDcgKzM1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9IGZycWNyICYgMHgwMDA3OwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZGl2aXNvcnNbaWR4XTsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9IChmcnFjciAmIDB4MDAzMCkgPj4gNDsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdmlzb3JzW2lkeF07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggM2Y3ZTJhMi4uZjZhMzg5YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMTMyLDcgKzEzMiw2IEBACiAJIG1vdgkjMSwgcjUKIAogY2FsbF9oYW5kbGVfdGxibWlzczoKLQlzZXR1cF9mcmFtZV9yZWcKIAltb3YubAkxZiwgcjAKIAltb3YJcjUsIHI4CiAJbW92LmwJQHIwLCByNgpAQCAtMzY1LDYgKzM2NCw4IEBACiAJIG1vdi5sCUBrMiwgazIJCSEgcmVhZCBvdXQgdmVjdG9yIGFuZCBrZWVwIGluIGsyCiAKIGhhbmRsZV9leGNlcHRpb25fc3BlY2lhbDoKKwlzZXR1cF9mcmFtZV9yZWcKKwogCSEgU2V0dXAgcmV0dXJuIGFkZHJlc3MgYW5kIGp1bXAgdG8gZXhjZXB0aW9uIGhhbmRsZXIKIAltb3YubAk3ZiwgcjkJCSEgZmV0Y2ggcmV0dXJuIGFkZHJlc3MKIAlzdGMJcjJfYmFuaywgcjAJISBrMiAodmVjdG9yKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCmluZGV4IDQ2NjEwYzMuLjk5YjRkMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAkubG9uZwlleGNlcHRpb25fZXJyb3IJISByZXNlcnZlZF9pbnN0cnVjdGlvbiAoZmlsbGVkIGJ5IHRyYXBfaW5pdCkgLyogMTgwICovCiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgaWxsZWdhbF9zbG90X2luc3RydWN0aW9uIChmaWxsZWQgYnkgdHJhcF9pbml0KSAvKjFBMCovCiAJLmxvbmcJbm1pX3RyYXBfaGFuZGxlcgkvKiAxQzAgKi8JISBBbGxvdyB0cmFwIHRvIGRlYnVnZ2VyCi0JLmxvbmcJYnJlYWtfcG9pbnRfdHJhcAkvKiAxRTAgKi8KKwkubG9uZwlicmVha3BvaW50X3RyYXBfaGFuZGxlcgkvKiAxRTAgKi8KIAogCS8qCiAJICogUGFkIHRoZSByZW1haW5kZXIgb2YgdGhlIHRhYmxlIG91dCwgZXhjZXB0aW9ucyByZXNpZGluZyBpbiBmYXIKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYwppbmRleCBmOWM3ZGY2Li4yOTVlYzRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLWludCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBkZXRlY3RfY3B1X2FuZF9jYWNoZV9zeXN0ZW0odm9pZCkKK2ludCBkZXRlY3RfY3B1X2FuZF9jYWNoZV9zeXN0ZW0odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIwLCBhZGRyMSwgZGF0YTAsIGRhdGExLCBkYXRhMiwgZGF0YTM7CiAKQEAgLTMwLDIzICszMCwyMyBAQAogCWFkZHIxID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWSArICgxIDw8IDEyKTsKIAogCS8qIEZpcnN0LCB3cml0ZSBiYWNrICYgaW52YWxpZGF0ZSAqLwotCWRhdGEwICA9IGN0cmxfaW5sKGFkZHIwKTsKLQljdHJsX291dGwoZGF0YTAmfihTSF9DQUNIRV9WQUxJRHxTSF9DQUNIRV9VUERBVEVEKSwgYWRkcjApOwotCWRhdGExICA9IGN0cmxfaW5sKGFkZHIxKTsKLQljdHJsX291dGwoZGF0YTEmfihTSF9DQUNIRV9WQUxJRHxTSF9DQUNIRV9VUERBVEVEKSwgYWRkcjEpOworCWRhdGEwICA9IF9fcmF3X3JlYWRsKGFkZHIwKTsKKwlfX3Jhd193cml0ZWwoZGF0YTAmfihTSF9DQUNIRV9WQUxJRHxTSF9DQUNIRV9VUERBVEVEKSwgYWRkcjApOworCWRhdGExICA9IF9fcmF3X3JlYWRsKGFkZHIxKTsKKwlfX3Jhd193cml0ZWwoZGF0YTEmfihTSF9DQUNIRV9WQUxJRHxTSF9DQUNIRV9VUERBVEVEKSwgYWRkcjEpOwogCiAJLyogTmV4dCwgY2hlY2sgaWYgdGhlcmUncyBzaGFkb3cgb3Igbm90ICovCi0JZGF0YTAgPSBjdHJsX2lubChhZGRyMCk7CisJZGF0YTAgPSBfX3Jhd19yZWFkbChhZGRyMCk7CiAJZGF0YTAgXj0gU0hfQ0FDSEVfVkFMSUQ7Ci0JY3RybF9vdXRsKGRhdGEwLCBhZGRyMCk7Ci0JZGF0YTEgPSBjdHJsX2lubChhZGRyMSk7CisJX19yYXdfd3JpdGVsKGRhdGEwLCBhZGRyMCk7CisJZGF0YTEgPSBfX3Jhd19yZWFkbChhZGRyMSk7CiAJZGF0YTIgPSBkYXRhMSBeIFNIX0NBQ0hFX1ZBTElEOwotCWN0cmxfb3V0bChkYXRhMiwgYWRkcjEpOwotCWRhdGEzID0gY3RybF9pbmwoYWRkcjApOworCV9fcmF3X3dyaXRlbChkYXRhMiwgYWRkcjEpOworCWRhdGEzID0gX19yYXdfcmVhZGwoYWRkcjApOwogCiAJLyogTGFzdGx5LCBpbnZhbGlhdGUgdGhlbS4gKi8KLQljdHJsX291dGwoZGF0YTAmflNIX0NBQ0hFX1ZBTElELCBhZGRyMCk7Ci0JY3RybF9vdXRsKGRhdGEyJn5TSF9DQUNIRV9WQUxJRCwgYWRkcjEpOworCV9fcmF3X3dyaXRlbChkYXRhMCZ+U0hfQ0FDSEVfVkFMSUQsIGFkZHIwKTsKKwlfX3Jhd193cml0ZWwoZGF0YTImflNIX0NBQ0hFX1ZBTElELCBhZGRyMSk7CiAKIAliYWNrX3RvX2NhY2hlZCgpOwogCkBAIC05NCw5ICs5NCw5IEBACiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyCT0gKDEgPDwgMTMpOwogCQlib290X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9tYXNrCT0gMHgxZmYwOwogCQlib290X2NwdV9kYXRhLmRjYWNoZS5zZXRzCT0gNTEyOwotCQljdHJsX291dGwoQ0NSX0NBQ0hFXzMyS0IsIENDUjNfUkVHKTsKKwkJX19yYXdfd3JpdGVsKENDUl9DQUNIRV8zMktCLCBDQ1IzX1JFRyk7CiAjZWxzZQotCQljdHJsX291dGwoQ0NSX0NBQ0hFXzE2S0IsIENDUjNfUkVHKTsKKwkJX19yYXdfd3JpdGVsKENDUl9DQUNIRV8xNktCLCBDQ1IzX1JFRyk7CiAjZW5kaWYKICNlbmRpZgogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2gzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoMy5jCmluZGV4IGM5ODg0NjguLjUzYmU3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2gzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDMuYwpAQCAtNTgsNyArNTgsNyBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXBfcGlucyhpbnQgbW9kZSkKIHsKIAlpZiAobW9kZSA9PSBJUlFfTU9ERV9JUlEpIHsKLQkJY3RybF9vdXR3KGN0cmxfaW53KElOVENfSUNSMSkgJiB+SU5UQ19JQ1IxX0lSUUxWTCwgSU5UQ19JQ1IxKTsKKwkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElOVENfSUNSMSkgJiB+SU5UQ19JQ1IxX0lSUUxWTCwgSU5UQ19JQ1IxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LTIwMi5jCmluZGV4IDIxNDIxZTMuLjZiODA4NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LTIwMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LTIwMi5jCkBAIC0yMyw3ICsyMyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVtaV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gY3RybF9pbmwoQ1BHMl9GUlFDUjMpICYgMHgwMDA3OworCWludCBpZHggPSBfX3Jhd19yZWFkbChDUEcyX0ZSUUNSMykgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZnJxY3IzX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZmVtaV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKENQRzJfRlJRQ1IzKSA+PiAzKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKENQRzJfRlJRQ1IzKSA+PiAzKSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtOTIsNyArOTIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG9jX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbmwoQ1BHMl9GUlFDUjMpID4+IDYpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZGwoQ1BHMl9GUlFDUjMpID4+IDYpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGZycWNyM19kaXZpc29yc1tpZHhdOwogfQogCkBAIC0xMjIsMTAgKzEyMiwxMCBAQAogCiAJdG1wID0gZnJxY3IzX2xvb2t1cChjbGssIHJhdGUpOwogCi0JZnJxY3IzID0gY3RybF9pbmwoQ1BHMl9GUlFDUjMpOworCWZycWNyMyA9IF9fcmF3X3JlYWRsKENQRzJfRlJRQ1IzKTsKIAlmcnFjcjMgJj0gfigweDAwMDcgPDwgNik7CiAJZnJxY3IzIHw9IHRtcCA8PCA2OwotCWN0cmxfb3V0bChmcnFjcjMsIENQRzJfRlJRQ1IzKTsKKwlfX3Jhd193cml0ZWwoZnJxY3IzLCBDUEcyX0ZSUUNSMyk7CiAKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGZycWNyM19kaXZpc29yc1t0bXBdOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQuYwppbmRleCA3MzI5NGQ5Li41YWRkNzVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwN107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g0X21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzcsNyArMzcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDcsNyArNDcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgPj4gMykgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgPj4gMykgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpID4+IDYpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpID4+IDYpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYwppbmRleCBlOTc4NTdhLi40NDc0ODJkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKQEAgLTg1LDE0ICs4NSwxNCBAQAogCQkgICAgICAiZm1vdi5zCWZyMSwgQC0lMFxuXHQiCiAJCSAgICAgICJmbW92LnMJZnIwLCBALSUwXG5cdCIKIAkJICAgICAgImxkcwklMywgZnBzY3Jcblx0IjoiPXIiIChkdW1teSkKLQkJICAgICAgOiIwIigoY2hhciAqKSgmdHNrLT50aHJlYWQuZnB1LmhhcmQuc3RhdHVzKSksCisJCSAgICAgIDoiMCIoKGNoYXIgKikoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5zdGF0dXMpKSwKIAkJICAgICAgInIiKEZQU0NSX1JDSEcpLCAiciIoRlBTQ1JfSU5JVCkKIAkJICAgICAgOiJtZW1vcnkiKTsKIAogCWRpc2FibGVfZnB1KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQordm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCkBAIC0xMzUsNjIgKzEzNSwxMSBAQAogCQkgICAgICAibGRzLmwJQCUwKywgZnBzY3Jcblx0IgogCQkgICAgICAibGRzLmwJQCUwKywgZnB1bFxuXHQiCiAJCSAgICAgIDoiPXIiIChkdW1teSkKLQkJICAgICAgOiIwIigmdHNrLT50aHJlYWQuZnB1KSwgInIiKEZQU0NSX1JDSEcpCisJCSAgICAgIDoiMCIgKHRzay0+dGhyZWFkLnhzdGF0ZSksICJyIiAoRlBTQ1JfUkNIRykKIAkJICAgICAgOiJtZW1vcnkiKTsKIAlkaXNhYmxlX2ZwdSgpOwogfQogCi0vKgotICogTG9hZCB0aGUgRlBVIHdpdGggc2lnbmFsbGluZyBOQU5TLiAgVGhpcyBiaXQgcGF0dGVybiB3ZSdyZSB1c2luZwotICogaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IG5vIG1hdHRlciB3ZXRoZXIgY29uc2lkZXJlZCBhcyBzaW5nbGUgb3IgYXMKLSAqIGRvdWJsZSBwcmVjaXNpb24gcmVwcmVzZW50cyBzaWduYWxpbmcgTkFOUy4KLSAqLwotCi1zdGF0aWMgdm9pZCBmcHVfaW5pdCh2b2lkKQotewotCWVuYWJsZV9mcHUoKTsKLQlhc20gdm9sYXRpbGUgKAkibGRzCSUwLCBmcHVsXG5cdCIKLQkJCSJsZHMJJTEsIGZwc2NyXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjFcblx0IgotCQkJImZzdHMJZnB1bCwgZnIyXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyM1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjRcblx0IgotCQkJImZzdHMJZnB1bCwgZnI1XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjdcblx0IgotCQkJImZzdHMJZnB1bCwgZnI4XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyOVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEwXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTFcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEzXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTRcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxNVxuXHQiCi0JCQkiZnJjaGdcblx0IgotCQkJImZzdHMJZnB1bCwgZnIwXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjJcblx0IgotCQkJImZzdHMJZnB1bCwgZnIzXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjVcblx0IgotCQkJImZzdHMJZnB1bCwgZnI2XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyN1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjhcblx0IgotCQkJImZzdHMJZnB1bCwgZnI5XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTBcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEyXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTNcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxNFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjE1XG5cdCIKLQkJCSJmcmNoZ1xuXHQiCi0JCQkibGRzCSUyLCBmcHNjclxuXHQiCi0JCQk6CS8qIG5vIG91dHB1dCAqLwotCQkJOiJyIiAoMCksICJyIihGUFNDUl9SQ0hHKSwgInIiKEZQU0NSX0lOSVQpKTsKLQlkaXNhYmxlX2ZwdSgpOwotfQotCiAvKioKICAqICAgICAgZGVub3JtYWxfdG9fZG91YmxlIC0gR2l2ZW4gZGVub3JtYWxpemVkIGZsb2F0IG51bWJlciwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgZG91YmxlIGZsb2F0CkBAIC0yODIsOSArMjMxLDkgQEAKIAkJLyogZmNudnNkICovCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCQlpZiAoKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpKQorCQlpZiAoKHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKSkKIAkJCS8qIEZQVSBlcnJvciAqLwotCQkJZGVub3JtYWxfdG9fZG91YmxlKCZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwkJCWRlbm9ybWFsX3RvX2RvdWJsZSgmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LAogCQkJCQkgICAoZmluc24gPj4gOCkgJiAweGYpOwogCQllbHNlCiAJCQlyZXR1cm4gMDsKQEAgLTMwMCw5ICsyNDksOSBAQAogCiAJCW4gPSAoZmluc24gPj4gOCkgJiAweGY7CiAJCW0gPSAoZmluc24gPj4gNCkgJiAweGY7Ci0JCWh4ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXTsKLQkJaHkgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOwotCQlmcHNjciA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dOworCQloeSA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOworCQlmcHNjciA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjcjsKIAkJcHJlYyA9IGZwc2NyICYgRlBTQ1JfREJMX1BSRUNJU0lPTjsKIAogCQlpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCkBAIC0zMTIsMTggKzI2MSwxOCBAQAogCiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAoZG91YmxlcykgKi8KIAkJCWxseCA9ICgobG9uZyBsb25nKWh4IDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuICsgMV07CisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuICsgMV07CiAJCQlsbHkgPSAoKGxvbmcgbG9uZyloeSA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbSArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSArIDFdOwogCQkJbGx4ID0gZmxvYXQ2NF9tdWwobGx4LCBsbHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gbGx4ID4+IDMyOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKIAkJfSBlbHNlIGlmICgoZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKIAkJCSAgICYmICghcHJlYyAmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwCiAJCQkJCSB8fCAoaHkgJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDApKSkgewogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGZsb2F0cykgKi8KIAkJCWh4ID0gZmxvYXQzMl9tdWwoaHgsIGh5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBoeDsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gaHg7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CiAKQEAgLTMzOCw5ICsyODcsOSBAQAogCiAJCW4gPSAoZmluc24gPj4gOCkgJiAweGY7CiAJCW0gPSAoZmluc24gPj4gNCkgJiAweGY7Ci0JCWh4ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXTsKLQkJaHkgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOwotCQlmcHNjciA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dOworCQloeSA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOworCQlmcHNjciA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjcjsKIAkJcHJlYyA9IGZwc2NyICYgRlBTQ1JfREJMX1BSRUNJU0lPTjsKIAogCQlpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCkBAIC0zNTAsMTUgKzI5OSwxNSBAQAogCiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAoZG91YmxlcykgKi8KIAkJCWxseCA9ICgobG9uZyBsb25nKWh4IDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuICsgMV07CisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuICsgMV07CiAJCQlsbHkgPSAoKGxvbmcgbG9uZyloeSA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbSArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSArIDFdOwogCQkJaWYgKChmaW5zbiAmIDB4ZjAwZikgPT0gMHhmMDAwKQogCQkJCWxseCA9IGZsb2F0NjRfYWRkKGxseCwgbGx5KTsKIAkJCWVsc2UKIAkJCQlsbHggPSBmbG9hdDY0X3N1YihsbHgsIGxseSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gbGx4ID4+IDMyOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuICsgMV0gPSBsbHggJiAweGZmZmZmZmZmOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuICsgMV0gPSBsbHggJiAweGZmZmZmZmZmOwogCQl9IGVsc2UgaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQogCQkJICAgJiYgKCFwcmVjICYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDAKIAkJCQkJIHx8IChoeSAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMCkpKSB7CkBAIC0zNjcsNyArMzE2LDcgQEAKIAkJCQloeCA9IGZsb2F0MzJfYWRkKGh4LCBoeSk7CiAJCQllbHNlCiAJCQkJaHggPSBmbG9hdDMyX3N1YihoeCwgaHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGh4OworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBoeDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtMzgyLDkgKzMzMSw5IEBACiAKIAkJbiA9IChmaW5zbiA+PiA4KSAmIDB4ZjsKIAkJbSA9IChmaW5zbiA+PiA0KSAmIDB4ZjsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dOwotCQloeSA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07Ci0JCWZwc2NyID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3I7CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl07CisJCWh5ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CisJCWZwc2NyID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyOwogCQlwcmVjID0gZnBzY3IgJiBGUFNDUl9EQkxfUFJFQ0lTSU9OOwogCiAJCWlmICgoZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKQEAgLTM5NCwyMCArMzQzLDIwIEBACiAKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChkb3VibGVzKSAqLwogCQkJbGx4ID0gKChsb25nIGxvbmcpaHggPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXTsKIAkJCWxseSA9ICgobG9uZyBsb25nKWh5IDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttICsgMV07CisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttICsgMV07CiAKIAkJCWxseCA9IGZsb2F0NjRfZGl2KGxseCwgbGx5KTsKIAotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gbGx4ID4+IDMyOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKIAkJfSBlbHNlIGlmICgoZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKIAkJCSAgICYmICghcHJlYyAmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwCiAJCQkJCSB8fCAoaHkgJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDApKSkgewogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGZsb2F0cykgKi8KIAkJCWh4ID0gZmxvYXQzMl9kaXYoaHgsIGh5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBoeDsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gaHg7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CiAKQEAgLTQyMCwxNyArMzY5LDE3IEBACiAJCXVuc2lnbmVkIGludCBoeDsKIAogCQltID0gKGZpbnNuID4+IDgpICYgMHg3OwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CiAKLQkJaWYgKCh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQorCQlpZiAoKHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQogCQkJJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDEwMDAwMCkpIHsKIAkJCS8qIHN1Ym5vcm1hbCBkb3VibGUgdG8gZmxvYXQgY29udmVyc2lvbiAqLwogCQkJbG9uZyBsb25nIGxseDsKIAotCQkJbGx4ID0gKChsb25nIGxvbmcpdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXSA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbSArIDFdOworCQkJbGx4ID0gKChsb25nIGxvbmcpdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV0gPDwgMzIpCisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttICsgMV07CiAKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwdWwgPSBmbG9hdDY0X3RvX2Zsb2F0MzIobGx4KTsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHVsID0gZmxvYXQ2NF90b19mbG9hdDMyKGxseCk7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CiAKQEAgLTQ0OSw3ICszOTgsNyBAQAogaW50IGZsb2F0X3JvdW5kaW5nX21vZGUodm9pZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JaW50IHJvdW5kaW5nTW9kZSA9IEZQU0NSX1JPVU5ESU5HX01PREUodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IpOworCWludCByb3VuZGluZ01vZGUgPSBGUFNDUl9ST1VORElOR19NT0RFKHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjcik7CiAJcmV0dXJuIHJvdW5kaW5nTW9kZTsKIH0KIApAQCAtNDYxLDE2ICs0MTAsMTYgQEAKIAlfX3VubGF6eV9mcHUodHNrLCByZWdzKTsKIAlmcHVfZXhjZXB0aW9uX2ZsYWdzID0gMDsKIAlpZiAoaWVlZV9mcGVfaGFuZGxlcihyZWdzKSkgewotCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmPQorCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJj0KIAkJICAgIH4oRlBTQ1JfQ0FVU0VfTUFTSyB8IEZQU0NSX0ZMQUdfTUFTSyk7Ci0JCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyIHw9IGZwdV9leGNlcHRpb25fZmxhZ3M7CisJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciB8PSBmcHVfZXhjZXB0aW9uX2ZsYWdzOwogCQkvKiBTZXQgdGhlIEZQU0NSIGZsYWcgYXMgd2VsbCBhcyBjYXVzZSBiaXRzIC0gc2ltcGx5CiAJCSAqIHJlcGxpY2F0ZSB0aGUgY2F1c2UgKi8KLQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgfD0gKGZwdV9leGNlcHRpb25fZmxhZ3MgPj4gMTApOworCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgfD0gKGZwdV9leGNlcHRpb25fZmxhZ3MgPj4gMTApOwogCQlncmFiX2ZwdShyZWdzKTsKIAkJcmVzdG9yZV9mcHUodHNrKTsKIAkJdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsKLQkJaWYgKCgoKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICYgRlBTQ1JfRU5BQkxFX01BU0spID4+IDcpICYKKwkJaWYgKCgoKHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmIEZQU0NSX0VOQUJMRV9NQVNLKSA+PiA3KSAmCiAJCSAgICAgKGZwdV9leGNlcHRpb25fZmxhZ3MgPj4gMikpID09IDApIHsKIAkJCXJldHVybjsKIAkJfQpAQCAtNDc4LDMzICs0MjcsMyBAQAogCiAJZm9yY2Vfc2lnKFNJR0ZQRSwgdHNrKTsKIH0KLQotdm9pZCBmcHVfc3RhdGVfcmVzdG9yZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0KLQlncmFiX2ZwdShyZWdzKTsKLQlpZiAodW5saWtlbHkoIXVzZXJfbW9kZShyZWdzKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IEZQVSBpcyB1c2VkIGluIGtlcm5lbCBtb2RlLlxuIik7Ci0JCUJVRygpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxpa2VseSh1c2VkX21hdGgoKSkpIHsKLQkJLyogVXNpbmcgdGhlIEZQVSBhZ2Fpbi4gICovCi0JCXJlc3RvcmVfZnB1KHRzayk7Ci0JfSBlbHNlIHsKLQkJLyogRmlyc3QgdGltZSBGUFUgdXNlci4gICovCi0JCWZwdV9pbml0KCk7Ci0JCXNldF91c2VkX21hdGgoKTsKLQl9Ci0JdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsKLQl0c2stPmZwdV9jb3VudGVyKys7Ci19Ci0KLUJVSUxEX1RSQVBfSEFORExFUihmcHVfc3RhdGVfcmVzdG9yZSkKLXsKLQlUUkFQX0hBTkRMRVJfREVDTDsKLQotCWZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCmluZGV4IGQzNmYwYzQuLjgyMjk3N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKQEAgLTI4LDkgKzI4LDkgQEAKIAkJWzldID0gKDEgPDwgMTYpCiAJfTsKIAotCXB2ciA9IChjdHJsX2lubChDQ05fUFZSKSA+PiA4KSAmIDB4ZmZmZmZmOwotCXByciA9IChjdHJsX2lubChDQ05fUFJSKSA+PiA0KSAmIDB4ZmY7Ci0JY3ZyID0gKGN0cmxfaW5sKENDTl9DVlIpKTsKKwlwdnIgPSAoX19yYXdfcmVhZGwoQ0NOX1BWUikgPj4gOCkgJiAweGZmZmZmZjsKKwlwcnIgPSAoX19yYXdfcmVhZGwoQ0NOX1BSUikgPj4gNCkgJiAweGZmOworCWN2ciA9IChfX3Jhd19yZWFkbChDQ05fQ1ZSKSk7CiAKIAkvKgogCSAqIFNldHVwIHNvbWUgc2FuZSBTSC00IGRlZmF1bHRzIGZvciB0aGUgaWNhY2hlCkBAIC03MSwxMSArNzEsMTEgQEAKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7CiAJfSBlbHNlIHsKIAkJLyogQW5kIHNvbWUgU0gtNCBkZWZhdWx0cy4uICovCi0JCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19QVEVBOworCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfUFRFQSB8IENQVV9IQVNfRlBVOwogCQlib290X2NwdV9kYXRhLmZhbWlseSA9IENQVV9GQU1JTFlfU0g0OwogCX0KIAotCS8qIEZQVSBkZXRlY3Rpb24gd29ya3MgZm9yIGV2ZXJ5b25lICovCisJLyogRlBVIGRldGVjdGlvbiB3b3JrcyBmb3IgYWxtb3N0IGV2ZXJ5b25lICovCiAJaWYgKChjdnIgJiAweDIwMDAwMDAwKSkKIAkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKIApAQCAtMTI0LDYgKzEyNCw3IEBACiAJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3ODU7CiAJCWJyZWFrOwogCWNhc2UgMHg0MDA0OgorCWNhc2UgMHg0MDA1OgogCQlib290X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3Nzg2OwogCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfUFRFQUVYIHwgQ1BVX0hBU19MMl9DQUNIRTsKIAkJYnJlYWs7CkBAIC0xNjAsNiArMTYxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDcwMDoKIAkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINF81MDE7CisJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgJj0gfkNQVV9IQVNfRlBVOwogCQlib290X2NwdV9kYXRhLmljYWNoZS53YXlzID0gMjsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDI7CiAJCWJyZWFrOwpAQCAtMjI3LDcgKzIyOSw3IEBACiAJCQkgKiBTaXplIGNhbGN1bGF0aW9uIGlzIG11Y2ggbW9yZSBzZW5zaWJsZQogCQkJICogdGhhbiBpdCBpcyBmb3IgdGhlIEwxLgogCQkJICoKLQkJCSAqIFNpemVzIGFyZSAxMjhLQiwgMjU4S0IsIDUxMktCLCBhbmQgMU1CLgorCQkJICogU2l6ZXMgYXJlIDEyOEtCLCAyNTZLQiwgNTEyS0IsIGFuZCAxTUIuCiAJCQkgKi8KIAkJCXNpemUgPSAoY3ZyICYgMHhmKSA8PCAxNzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwppbmRleCA0YjczMzcxLi5iOWI3ZTEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiB7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6IC8qIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOworCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmxtKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCmluZGV4IGIyYTlkZjEuLmZmZDc5ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUTogLyogaW5kaXZpZHVhbCBpbnRlcnJ1cHQgbW9kZSBmb3IgSVJMMy0wICovCi0JCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybG0pOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKaW5kZXggNWI3NGNjMC4uYTE2ZWIzNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCkBAIC0zMTksNyArMzE5LDcgQEAKIHsKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUToKLQkJY3RybF9vdXR3KGN0cmxfaW53KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKKwkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwppbmRleCA4YThhOTkzLi5mYzA2NWY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCkBAIC00Myw5ICs0Myw5IEBACiAKICNkZWZpbmUgc3RvcmVfcXVldWVfYmFycmllcigpCQkJXAogZG8gewkJCQkJCVwKLQkodm9pZCljdHJsX2lubChQNFNFR19TVE9SRV9RVUUpOwlcCi0JY3RybF9vdXRsKDAsIFA0U0VHX1NUT1JFX1FVRSArIDApOwlcCi0JY3RybF9vdXRsKDAsIFA0U0VHX1NUT1JFX1FVRSArIDgpOwlcCisJKHZvaWQpX19yYXdfcmVhZGwoUDRTRUdfU1RPUkVfUVVFKTsJXAorCV9fcmF3X3dyaXRlbCgwLCBQNFNFR19TVE9SRV9RVUUgKyAwKTsJXAorCV9fcmF3X3dyaXRlbCgwLCBQNFNFR19TVE9SRV9RVUUgKyA4KTsJXAogfSB3aGlsZSAoMCk7CiAKIC8qKgpAQCAtMTAwLDcgKzEwMCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZzcV9tYXBwaW5nX2xvY2spOwogfQogCi1zdGF0aWMgaW50IF9fc3FfcmVtYXAoc3RydWN0IHNxX21hcHBpbmcgKm1hcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBpbnQgX19zcV9yZW1hcChzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwLCBwZ3Byb3RfdCBwcm90KQogewogI2lmIGRlZmluZWQoQ09ORklHX01NVSkKIAlzdHJ1Y3Qgdm1fc3RydWN0ICp2bWE7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdm1hLT5hZGRyLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nKXZtYS0+YWRkciArIG1hcC0+c2l6ZSwKLQkJCSAgICAgICB2bWEtPnBoeXNfYWRkciwgX19wZ3Byb3QoZmxhZ3MpKSkgeworCQkJICAgICAgIHZtYS0+cGh5c19hZGRyLCBwcm90KSkgewogCQl2dW5tYXAodm1hLT5hZGRyKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtMTIzLDggKzEyMyw4IEBACiAJICogc3RyYWlnaHRmb3J3YXJkLCBhcyB3ZSBjYW4ganVzdCBsb2FkIHVwIGVhY2ggcXVldWUncyBRQUNSIHdpdGgKIAkgKiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcHByb3ByaWF0ZWx5IG1hc2tlZC4KIAkgKi8KLQljdHJsX291dGwoKChtYXAtPmFkZHIgPj4gMjYpIDw8IDIpICYgMHgxYywgU1FfUUFDUjApOwotCWN0cmxfb3V0bCgoKG1hcC0+YWRkciA+PiAyNikgPDwgMikgJiAweDFjLCBTUV9RQUNSMSk7CisJX19yYXdfd3JpdGVsKCgobWFwLT5hZGRyID4+IDI2KSA8PCAyKSAmIDB4MWMsIFNRX1FBQ1IwKTsKKwlfX3Jhd193cml0ZWwoKChtYXAtPmFkZHIgPj4gMjYpIDw8IDIpICYgMHgxYywgU1FfUUFDUjEpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTEzNSwxNCArMTM1LDE0IEBACiAgKiBAcGh5czogUGh5c2ljYWwgYWRkcmVzcyBvZiBtYXBwaW5nLgogICogQHNpemU6IExlbmd0aCBvZiBtYXBwaW5nLgogICogQG5hbWU6IFVzZXIgaW52b2tpbmcgbWFwcGluZy4KLSAqIEBmbGFnczogUHJvdGVjdGlvbiBmbGFncy4KKyAqIEBwcm90OiBQcm90ZWN0aW9uIGJpdHMuCiAgKgogICogUmVtYXBzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIEBwaHlzIHRocm91Z2ggdGhlIG5leHQgYXZhaWxhYmxlIHN0b3JlIHF1ZXVlCiAgKiBhZGRyZXNzIG9mIEBzaXplIGxlbmd0aC4gQG5hbWUgaXMgbG9nZ2VkIGF0IGJvb3QgdGltZSBhcyB3ZWxsIGFzIHRocm91Z2gKICAqIHRoZSBzeXNmcyBpbnRlcmZhY2UuCiAgKi8KIHVuc2lnbmVkIGxvbmcgc3FfcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBwZ3Byb3RfdCBwcm90KQogewogCXN0cnVjdCBzcV9tYXBwaW5nICptYXA7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAogCW1hcC0+c3FfYWRkciA9IFA0U0VHX1NUT1JFX1FVRSArIChwYWdlIDw8IFBBR0VfU0hJRlQpOwogCi0JcmV0ID0gX19zcV9yZW1hcChtYXAsIHBncHJvdF92YWwoUEFHRV9LRVJORUxfTk9DQUNIRSkgfCBmbGFncyk7CisJcmV0ID0gX19zcV9yZW1hcChtYXAsIHByb3QpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwogCkBAIC0zMDksOCArMzA5LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAobGlrZWx5KGxlbikpIHsKLQkJaW50IHJldCA9IHNxX3JlbWFwKGJhc2UsIGxlbiwgIlVzZXJzcGFjZSIsCi0JCQkJICAgcGdwcm90X3ZhbChQQUdFX1NIQVJFRCkpOworCQlpbnQgcmV0ID0gc3FfcmVtYXAoYmFzZSwgbGVuLCAiVXNlcnNwYWNlIiwgUEFHRV9TSEFSRUQpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCmluZGV4IDMzYmFiNDcuLmIxNDRlOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCkBAIC00MSw3ICs0MSw4IEBACiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQk6PSBwaW5tdXgtc2g3Nzg1Lm8KIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCTo9IHBpbm11eC1zaDc3ODYubwogCi1vYmoteQkJCQkrPSAkKGNsb2NrLXkpCi1vYmotJChDT05GSUdfU01QKQkJKz0gJChzbXAteSkKLW9iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGlubXV4LXkpCi1vYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfZXZlbnQubworb2JqLXkJCQkJCSs9ICQoY2xvY2steSkKK29iai0kKENPTkZJR19TTVApCQkJKz0gJChzbXAteSkKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCQkrPSAkKHBpbm11eC15KQorb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkJKz0gcGVyZl9ldmVudC5vCitvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKQkrPSB1YmMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYwppbmRleCAwZWUzZWU4Li4yYzE2ZGYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYwpAQCAtMTA3LDEzICsxMDcsMTcgQEAKIHN0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Owogc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXZpc29ycywKIAkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKIAkubXVsdGlwbGllcnMgPSBtdWx0aXBsaWVycywKIAkubnJfbXVsdGlwbGllcnMgPSBBUlJBWV9TSVpFKG11bHRpcGxpZXJzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CisKIGVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsCiAgICAgICAgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfTlIgfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYwppbmRleCBhOTVlYmFiLi45MTU4OGQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYwpAQCAtMTEwLDEzICsxMTAsMTcgQEAKIHN0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Owogc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXZpc29ycywKIAkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKIAkubXVsdGlwbGllcnMgPSBtdWx0aXBsaWVycywKIAkubnJfbXVsdGlwbGllcnMgPSBBUlJBWV9TSVpFKG11bHRpcGxpZXJzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CisKIGVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsCiAgICAgICAgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfTlIgfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjIuYwppbmRleCBlYTM4YjU1Li4xNWRiNmQ1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjIuYwpAQCAtMTEwLDE5ICsxMTAsMjIgQEAKIHN0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Owogc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXZpc29ycywKIAkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKIAkubXVsdGlwbGllcnMgPSBtdWx0aXBsaWVycywKIAkubnJfbXVsdGlwbGllcnMgPSBBUlJBWV9TSVpFKG11bHRpcGxpZXJzKSwKIH07CiAKLWVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsCi0gICAgICAgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfSVJEQSwgRElWNF9OUiB9Oworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKICAgU0hfQ0xLX0RJVjQoX3N0ciwgJnBsbF9jbGssIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCiAKK2VudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsIERJVjRfTlIgfTsKKwogc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7CiAJW0RJVjRfSV0gPSBESVY0KCJjcHVfY2xrIiwgRlJRQ1IsIDIwLCAweDFmZWYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfVV0gPSBESVY0KCJ1bWVtX2NsayIsIEZSUUNSLCAxNiwgMHgxZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLApAQCAtMTMwLDkgKzEzMywxOSBAQAogCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIEZSUUNSLCA4LCAweDFmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQjNdID0gRElWNCgiYjNfY2xrIiwgRlJRQ1IsIDQsIDB4MWZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9QXSA9IERJVjQoInBlcmlwaGVyYWxfY2xrIiwgRlJRQ1IsIDAsIDB4MWZmZiwgMCksCit9OworCitlbnVtIHsgRElWNF9JUkRBLCBESVY0X0VOQUJMRV9OUiB9OworCitzdHJ1Y3QgY2xrIGRpdjRfZW5hYmxlX2Nsa3NbRElWNF9FTkFCTEVfTlJdID0geworCVtESVY0X0lSREFdID0gRElWNCgiaXJkYV9jbGsiLCBJUkRBQ0xLQ1IsIDAsIDB4MWZmZiwgMCksCit9OworCitlbnVtIHsgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfUkVQQVJFTlRfTlIgfTsKKworc3RydWN0IGNsayBkaXY0X3JlcGFyZW50X2Nsa3NbRElWNF9SRVBBUkVOVF9OUl0gPSB7CiAJW0RJVjRfU0lVQV0gPSBESVY0KCJzaXVhX2NsayIsIFNDTEtBQ1IsIDAsIDB4MWZmZiwgMCksCiAJW0RJVjRfU0lVQl0gPSBESVY0KCJzaXViX2NsayIsIFNDTEtCQ1IsIDAsIDB4MWZmZiwgMCksCi0JW0RJVjRfSVJEQV0gPSBESVY0KCJpcmRhX2NsayIsIElSREFDTEtDUiwgMCwgMHgxZmZmLCAwKSwKIH07CiAKIHN0cnVjdCBjbGsgZGl2Nl9jbGtzW10gPSB7CkBAIC0xODksNiArMjAyLDE0IEBACiAJCXJldCA9IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKGRpdjRfY2xrcywgRElWNF9OUiwgJmRpdjRfdGFibGUpOwogCiAJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X2VuYWJsZV9yZWdpc3RlcihkaXY0X2VuYWJsZV9jbGtzLAorCQkJCQlESVY0X0VOQUJMRV9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X3JlcGFyZW50X3JlZ2lzdGVyKGRpdjRfcmVwYXJlbnRfY2xrcywKKwkJCQkJRElWNF9SRVBBUkVOVF9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCiAJCXJldCA9IHNoX2Nsa19kaXY2X3JlZ2lzdGVyKGRpdjZfY2xrcywgQVJSQVlfU0laRShkaXY2X2Nsa3MpKTsKIAogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYwppbmRleCAyMGEzMWMyLi41MGJhYmUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYwpAQCAtMTEwLDE1ICsxMTAsMTggQEAKIHN0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Owogc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXZpc29ycywKIAkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKIAkubXVsdGlwbGllcnMgPSBtdWx0aXBsaWVycywKIAkubnJfbXVsdGlwbGllcnMgPSBBUlJBWV9TSVpFKG11bHRpcGxpZXJzKSwKIH07CiAKLWVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsCi0gICAgICAgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfSVJEQSwgRElWNF9OUiB9Oworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorfTsKKworZW51bSB7IERJVjRfSSwgRElWNF9VLCBESVY0X1NILCBESVY0X0IsIERJVjRfQjMsIERJVjRfUCwgRElWNF9OUiB9OwogCiAjZGVmaW5lIERJVjQoX3N0ciwgX3JlZywgX2JpdCwgX21hc2ssIF9mbGFncykgXAogICBTSF9DTEtfRElWNChfc3RyLCAmcGxsX2NsaywgX3JlZywgX2JpdCwgX21hc2ssIF9mbGFncykKQEAgLTEzMCwxMSArMTMzLDIwIEBACiAJW0RJVjRfQl0gPSBESVY0KCJidXNfY2xrIiwgRlJRQ1IsIDgsIDB4MGRiZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9CM10gPSBESVY0KCJiM19jbGsiLCBGUlFDUiwgNCwgMHgwZGI0LCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X1BdID0gRElWNCgicGVyaXBoZXJhbF9jbGsiLCBGUlFDUiwgMCwgMHgwZGJmLCAwKSwKLQlbRElWNF9TSVVBXSA9IERJVjQoInNpdWFfY2xrIiwgU0NMS0FDUiwgMCwgMHgwZGJmLCAwKSwKLQlbRElWNF9TSVVCXSA9IERJVjQoInNpdWJfY2xrIiwgU0NMS0JDUiwgMCwgMHgwZGJmLCAwKSwKK307CisKK2VudW0geyBESVY0X0lSREEsIERJVjRfRU5BQkxFX05SIH07CisKK3N0cnVjdCBjbGsgZGl2NF9lbmFibGVfY2xrc1tESVY0X0VOQUJMRV9OUl0gPSB7CiAJW0RJVjRfSVJEQV0gPSBESVY0KCJpcmRhX2NsayIsIElSREFDTEtDUiwgMCwgMHgwZGJmLCAwKSwKIH07CiAKK2VudW0geyBESVY0X1NJVUEsIERJVjRfU0lVQiwgRElWNF9SRVBBUkVOVF9OUiB9OworCitzdHJ1Y3QgY2xrIGRpdjRfcmVwYXJlbnRfY2xrc1tESVY0X1JFUEFSRU5UX05SXSA9IHsKKwlbRElWNF9TSVVBXSA9IERJVjQoInNpdWFfY2xrIiwgU0NMS0FDUiwgMCwgMHgwZGJmLCAwKSwKKwlbRElWNF9TSVVCXSA9IERJVjQoInNpdWJfY2xrIiwgU0NMS0JDUiwgMCwgMHgwZGJmLCAwKSwKK307CiBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tdID0gewogCVNIX0NMS19ESVY2KCJ2aWRlb19jbGsiLCAmcGxsX2NsaywgVkNMS0NSLCAwKSwKIH07CkBAIC0yMTYsNiArMjI4LDE0IEBACiAJCXJldCA9IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKGRpdjRfY2xrcywgRElWNF9OUiwgJmRpdjRfdGFibGUpOwogCiAJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X2VuYWJsZV9yZWdpc3RlcihkaXY0X2VuYWJsZV9jbGtzLAorCQkJCQlESVY0X0VOQUJMRV9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X3JlcGFyZW50X3JlZ2lzdGVyKGRpdjRfcmVwYXJlbnRfY2xrcywKKwkJCQkJRElWNF9SRVBBUkVOVF9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCiAJCXJldCA9IHNoX2Nsa19kaXY2X3JlZ2lzdGVyKGRpdjZfY2xrcywgQVJSQVlfU0laRShkaXY2X2Nsa3MpKTsKIAogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjQuYwppbmRleCA5ZGI3NDM4Li42NzA3MDYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjQuYwpAQCAtMTI3LDEzICsxMjcsMjggQEAKIAkmZGl2M19jbGssCiB9OwogCitzdGF0aWMgdm9pZCBkaXY0X2tpY2soc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwkvKiBzZXQgS0lDSyBiaXQgaW4gRlJRQ1JBIHRvIHVwZGF0ZSBoYXJkd2FyZSBzZXR0aW5nICovCisJdmFsdWUgPSBfX3Jhd19yZWFkbChGUlFDUkEpOworCXZhbHVlIHw9ICgxIDw8IDMxKTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIEZSUUNSQSk7Cit9CisKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAwLCAyNCwgMzIsIDM2LCA0OCwgMCwgNzIgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCisJLmtpY2sgPSBkaXY0X2tpY2ssCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1NILCBESVY0X0IsIERJVjRfUCwgRElWNF9NMSwgRElWNF9OUiB9OwogCiAjZGVmaW5lIERJVjQoX3N0ciwgX3JlZywgX2JpdCwgX21hc2ssIF9mbGFncykgXApAQCAtMTQ0LDcgKzE1OSw3IEBACiAJW0RJVjRfU0hdID0gRElWNCgic2h5d2F5X2NsayIsIEZSUUNSQSwgMTIsIDB4MmY3YywgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9CXSA9IERJVjQoImJ1c19jbGsiLCBGUlFDUkEsIDgsIDB4MmY3YywgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9QXSA9IERJVjQoInBlcmlwaGVyYWxfY2xrIiwgRlJRQ1JBLCAwLCAweDJmN2MsIDApLAotCVtESVY0X00xXSA9IERJVjQoInZwdV9jbGsiLCBGUlFDUkIsIDQsIDB4MmY3YywgMCksCisJW0RJVjRfTTFdID0gRElWNCgidnB1X2NsayIsIEZSUUNSQiwgNCwgMHgyZjdjLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogfTsKIAogc3RydWN0IGNsayBkaXY2X2Nsa3NbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKaW5kZXggZGRjMjM1Yy4uODZhYWU2MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogc3RhdGljIHZvaWQgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSBjdHJsX2lubChGUlFDUikgJiAweDAwMDAwMDBmOworCWludCBpZHggPSBfX3Jhd19yZWFkbChGUlFDUikgJiAweDAwMDAwMDBmOwogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gcDFmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC00NSw3ICs0NSw3IEBACiAKIHN0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSA+PiA4KSAmIDB4MDAwMDAwMGY7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChGUlFDUikgPj4gOCkgJiAweDAwMDAwMDBmOwogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbmwoRlJRQ1IpID4+IDIwKSAmIDB4MDAwMDAwMGY7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjApICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC03OCw3ICs3OCw3IEBACiAKIHN0YXRpYyB2b2lkIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSA+PiAxMikgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDEyKSAmIDB4MDAwMDAwMGY7CiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBzZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NjMuYwppbmRleCAzNzBjZDQ3Li45ZjQwMTE2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NjMuYwpAQCAtMjIsNyArMjIsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwMGZjX2Rpdmlzb3JzWyhjdHJsX2lubChGUlFDUikgPj4gNCkgJiAweDA3XTsKKwljbGstPnJhdGUgKj0gcDBmY19kaXZpc29yc1soX19yYXdfcmVhZGwoRlJRQ1IpID4+IDQpICYgMHgwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3NjNfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zMSw3ICszMSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gNCkgJiAweDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gNCkgJiAweDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwMGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTQxLDcgKzQxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAxNikgJiAweDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMTYpICYgMHgwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTY4LDcgKzY4LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyMCkgJiAweDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjApICYgMHgwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gY2ZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzcwLmMKaW5kZXggZTBiODk2Ny4uOWUzMzU0MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzcwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzcwLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzWyhjdHJsX2lubChGUlFDUikgPj4gMjgpICYgMHgwMDBmXTsKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzWyhfX3Jhd19yZWFkbChGUlFDUikgPj4gMjgpICYgMHgwMDBmXTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc3MF9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyOCkgJiAweDAwMGYpOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAyOCkgJiAweDAwMGYpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC00MCw3ICs0MCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSAmIDB4MDAwZik7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChGUlFDUikgJiAweDAwMGYpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01MCw3ICs1MCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjQpICYgMHgwMDBmKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjQpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODAuYwppbmRleCBhMjQ5ZDgyLi4xNTA5NjNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODAuYwpAQCAtMjIsNyArMjIsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbY3RybF9pbmwoRlJRQ1IpICYgMHgwMDAzXTsKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW19fcmF3X3JlYWRsKEZSUUNSKSAmIDB4MDAwM107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODBfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zMSw3ICszMSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSAmIDB4MDAwMyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChGUlFDUikgJiAweDAwMDMpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC00MSw3ICs0MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMTYpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMTYpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTEsNyArNTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwMSk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwMSk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTc0LDcgKzc0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyMCkgJiAweDAwMDcpOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAyMCkgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCmluZGV4IDczYWJmYmYuLmQ5OTdmMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCkBAIC01NywxMSArNTcsMTUgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGl2MltdID0geyAxLCAyLCA0LCA2LCA4LCAxMiwgMTYsIDE4LAogCQkJICAgICAgIDI0LCAzMiwgMzYsIDQ4IH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfdGFibGUgPSB7CitzdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X2Rpdl9tdWx0X3RhYmxlID0gewogCS5kaXZpc29ycyA9IGRpdjIsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXYyKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CisKIGVudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0REUiwgRElWNF9HQSwKIAlESVY0X0RVLCBESVY0X1AsIERJVjRfTlIgfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwppbmRleCBhMGU4ODY5Li5hZjY5ZmQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwpAQCAtMywxMSArMyw3IEBACiAgKgogICogU0g3Nzg2IHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCi0gKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+Ci0gKgotICogQmFzZWQgb24gU0g3Nzg1Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE1LDEyNyArMTEsMTI3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vZnJlcS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi1zdGF0aWMgaW50IGlmY19kaXZpc29yc1tdID0geyAxLCAyLCA0LCAxIH07Ci1zdGF0aWMgaW50IHNmY19kaXZpc29yc1tdID0geyAxLCAxLCA0LCAxIH07Ci1zdGF0aWMgaW50IGJmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxMiwgMTYsIDEsCi0JCQkgICAgIDI0LCAzMiwgMSwgMSwgMSwgMSwgMSwgMSB9Owotc3RhdGljIGludCBtZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Owotc3RhdGljIGludCBwZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMSwgMTYsIDEsCi0JCQkgICAgICAyNCwgMzIsIDEsIDQ4LCAxLCAxLCAxLCAxIH07Ci0KLXN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2lubChGUlFNUjEpICYgMHgwMDBmXTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9tYXN0ZXJfY2xrX29wcyA9IHsKLQkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFNUjEpICYgMHgwMDBmKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9tb2R1bGVfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IG1vZHVsZV9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTYpICYgMHgwMDBmKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9idXNfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjgpICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9jcHVfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDc3ODZfY2xrX29wc1tdID0gewotCSZzaDc3ODZfbWFzdGVyX2Nsa19vcHMsCi0JJnNoNzc4Nl9tb2R1bGVfY2xrX29wcywKLQkmc2g3Nzg2X2J1c19jbGtfb3BzLAotCSZzaDc3ODZfY3B1X2Nsa19vcHMsCi19OwotCi12b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKLXsKLQlpZiAoaWR4IDwgQVJSQVlfU0laRShzaDc3ODZfY2xrX29wcykpCi0JCSpvcHMgPSBzaDc3ODZfY2xrX29wc1tpZHhdOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAyMCkgJiAweDAwMDMpOwotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHNmY19kaXZpc29yc1tpZHhdOwotfQotCi1zdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X3NoeXdheV9jbGtfb3BzID0gewotCS5yZWNhbGMJCT0gc2h5d2F5X2Nsa19yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzaDc3ODZfc2h5d2F5X2NsayA9IHsKLQkubmFtZQkJPSAic2h5d2F5X2NsayIsCi0JLmZsYWdzCQk9IENMS19FTkFCTEVfT05fSU5JVCwKLQkub3BzCQk9ICZzaDc3ODZfc2h5d2F5X2Nsa19vcHMsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZHJfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAxMikgJiAweDAwMDMpOwotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1mY19kaXZpc29yc1tpZHhdOwotfQotCi1zdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X2Rkcl9jbGtfb3BzID0gewotCS5yZWNhbGMJCT0gZGRyX2Nsa19yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzaDc3ODZfZGRyX2NsayA9IHsKLQkubmFtZQkJPSAiZGRyX2NsayIsCi0JLmZsYWdzCQk9IENMS19FTkFCTEVfT05fSU5JVCwKLQkub3BzCQk9ICZzaDc3ODZfZGRyX2Nsa19vcHMsCi19OwogCiAvKgotICogQWRkaXRpb25hbCBTSDc3ODYtc3BlY2lmaWMgb24tY2hpcCBjbG9ja3MgdGhhdCBhcmVuJ3QgYWxyZWFkeSBwYXJ0IG9mIHRoZQotICogY2xvY2sgZnJhbWV3b3JrCisgKiBEZWZhdWx0IHJhdGUgZm9yIHRoZSByb290IGlucHV0IGNsb2NrLCByZXNldCB0aGlzIHdpdGggY2xrX3NldF9yYXRlKCkKKyAqIGZyb20gdGhlIHBsYXRmb3JtIGNvZGUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrICpzaDc3ODZfb25jaGlwX2Nsb2Nrc1tdID0gewotCSZzaDc3ODZfc2h5d2F5X2NsaywKLQkmc2g3Nzg2X2Rkcl9jbGssCitzdGF0aWMgc3RydWN0IGNsayBleHRhbF9jbGsgPSB7CisJLm5hbWUJCT0gImV4dGFsIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMzMzMzMzMzMsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgbXVsdGlwbGllcjsKKworCS8qCisJICogQ2xvY2sgbW9kZXMgMCwgMSwgYW5kIDIgdXNlIGFuIHg2NCBtdWx0aXBsaWVyIGFnYWluc3QgUExMMSwKKwkgKiB3aGlsZSBtb2RlcyAzLCA0LCBhbmQgNSB1c2UgYW4geDMyLgorCSAqLworCW11bHRpcGxpZXIgPSAoc2hfbXYubXZfbW9kZV9waW5zKCkgJiAweGYpIDwgMyA/IDY0IDogMzI7CisKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgKiBtdWx0aXBsaWVyOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgcGxsX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBwbGxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGxsX2NsayA9IHsKKwkubmFtZQkJPSAicGxsX2NsayIsCisJLmlkCQk9IC0xLAorCS5vcHMJCT0gJnBsbF9jbGtfb3BzLAorCS5wYXJlbnQJCT0gJmV4dGFsX2NsaywKKwkuZmxhZ3MJCT0gQ0xLX0VOQUJMRV9PTl9JTklULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSA9IHsKKwkmZXh0YWxfY2xrLAorCSZwbGxfY2xrLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBkaXYyW10gPSB7IDEsIDIsIDQsIDYsIDgsIDEyLCAxNiwgMTgsCisJCQkgICAgICAgMjQsIDMyLCAzNiwgNDggfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKKwkuZGl2aXNvcnMgPSBkaXYyLAorCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2MiksCit9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCitlbnVtIHsgRElWNF9JLCBESVY0X1NILCBESVY0X0IsIERJVjRfRERSLCBESVY0X0RVLCBESVY0X1AsIERJVjRfTlIgfTsKKworI2RlZmluZSBESVY0KF9zdHIsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKKyAgU0hfQ0xLX0RJVjQoX3N0ciwgJnBsbF9jbGssIEZSUU1SMSwgX2JpdCwgX21hc2ssIF9mbGFncykKKworc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7CisJW0RJVjRfUF0gPSBESVY0KCJwZXJpcGhlcmFsX2NsayIsIDAsIDB4MGI0MCwgMCksCisJW0RJVjRfRFVdID0gRElWNCgiZHVfY2xrIiwgNCwgMHgwMDEwLCAwKSwKKwlbRElWNF9ERFJdID0gRElWNCgiZGRyX2NsayIsIDEyLCAweDAwMDIsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfQl0gPSBESVY0KCJidXNfY2xrIiwgMTYsIDB4MDM2MCwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKKwlbRElWNF9TSF0gPSBESVY0KCJzaHl3YXlfY2xrIiwgMjAsIDB4MDAwMiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKKwlbRElWNF9JXSA9IERJVjQoImNwdV9jbGsiLCAyOCwgMHgwMDA2LCBDTEtfRU5BQkxFX09OX0lOSVQpLAorfTsKKworI2RlZmluZSBNU1RQQ1IwCQkweGZmYzQwMDMwCisjZGVmaW5lIE1TVFBDUjEJCTB4ZmZjNDAwMzQKKworc3RhdGljIHN0cnVjdCBjbGsgbXN0cF9jbGtzW10gPSB7CisJLyogTVNUUENSMCAqLworCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgNSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyOSwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCA0LCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI4LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDMsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjcsIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgMiwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyNiwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAxLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI1LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDAsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjQsIDApLAorCVNIX0NMS19NU1RQMzIoInNzaV9mY2siLCAzLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDIzLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMiwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMiwgMCksCisJU0hfQ0xLX01TVFAzMigic3NpX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjEsIDApLAorCVNIX0NMS19NU1RQMzIoInNzaV9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDIwLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJoYWNfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxNywgMCksCisJU0hfQ0xLX01TVFAzMigiaGFjX2ZjayIsIDAsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTYsIDApLAorCVNIX0NMS19NU1RQMzIoImkyY19mY2siLCAxLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDE1LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJpMmNfZmNrIiwgMCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxNCwgMCksCisJU0hfQ0xLX01TVFAzMigidG11OV8xMV9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxMSwgMCksCisJU0hfQ0xLX01TVFAzMigidG11Njc4X2ZjayIsIC0xLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDEwLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJ0bXUzNDVfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgOSwgMCksCisJU0hfQ0xLX01TVFAzMigidG11MDEyX2ZjayIsIC0xLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDgsIDApLAorCVNIX0NMS19NU1RQMzIoInNkaWZfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCA1LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzZGlmX2ZjayIsIDAsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgNCwgMCksCisJU0hfQ0xLX01TVFAzMigiaHNwaV9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyLCAwKSwKKworCS8qIE1TVFBDUjEgKi8KKwlTSF9DTEtfTVNUUDMyKCJ1c2JfZmNrIiwgLTEsIE5VTEwsIE1TVFBDUjEsIDEyLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJwY2llX2ZjayIsIDIsIE5VTEwsIE1TVFBDUjEsIDEwLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJwY2llX2ZjayIsIDEsIE5VTEwsIE1TVFBDUjEsIDksIDApLAorCVNIX0NMS19NU1RQMzIoInBjaWVfZmNrIiwgMCwgTlVMTCwgTVNUUENSMSwgOCwgMCksCisJU0hfQ0xLX01TVFAzMigiZG1hY18xMV82X2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCA1LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJkbWFjXzVfMF9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgNCwgMCksCisJU0hfQ0xLX01TVFAzMigiZHVfZmNrIiwgLTEsIE5VTEwsIE1TVFBDUjEsIDMsIDApLAorCVNIX0NMS19NU1RQMzIoImV0aGVyX2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAyLCAwKSwKIH07CiAKIGludCBfX2luaXQgYXJjaF9jbGtfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjbGsgKmNsazsKIAlpbnQgaSwgcmV0ID0gMDsKIAotCWNwZ19jbGtfaW5pdCgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsa3MpOyBpKyspCisJCXJldCB8PSBjbGtfcmVnaXN0ZXIoY2xrc1tpXSk7CiAKLQljbGsgPSBjbGtfZ2V0KE5VTEwsICJtYXN0ZXJfY2xrIik7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2g3Nzg2X29uY2hpcF9jbG9ja3MpOyBpKyspIHsKLQkJc3RydWN0IGNsayAqY2xrcCA9IHNoNzc4Nl9vbmNoaXBfY2xvY2tzW2ldOwotCi0JCWNsa3AtPnBhcmVudCA9IGNsazsKLQkJcmV0IHw9IGNsa19yZWdpc3RlcihjbGtwKTsKLQl9Ci0KLQljbGtfcHV0KGNsayk7CisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKGRpdjRfY2xrcywgQVJSQVlfU0laRShkaXY0X2Nsa3MpLAorCQkJCQkgICAmZGl2NF90YWJsZSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19tc3RwMzJfcmVnaXN0ZXIobXN0cF9jbGtzLCBBUlJBWV9TSVpFKG1zdHBfY2xrcykpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYwppbmRleCAyM2MyN2QzLi5lNzVjNTdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jCkBAIC0zMyw3ICszMyw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IFBGQ19QT1MpICYgUEZDX01TS107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soX19yYXdfcmVhZGwoRlJRQ1IpID4+IFBGQ19QT1MpICYgUEZDX01TS107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaHgzX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDIsNyArNDIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IFBGQ19QT1MpICYgUEZDX01TSyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IFBGQ19QT1MpICYgUEZDX01TSyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBCRkNfUE9TKSAmIEJGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBCRkNfUE9TKSAmIEJGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC02Miw3ICs2Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gSUZDX1BPUykgJiBJRkNfTVNLKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gSUZDX1BPUykgJiBJRkNfTVNLKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtODUsNyArODUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IENGQ19QT1MpICYgQ0ZDX01TSyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IENGQ19QT1MpICYgQ0ZDX01TSyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gY2ZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjIuYwppbmRleCBjYjlkMDdiLi4wNjg4YTc1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jCkBAIC0yNzgsNiArMjc4LDcgQEAKIAlISVpBOF9MQ0RDLCBISVpBOF9ISVosCiAJSElaQTdfTENEQywgSElaQTdfSElaLAogCUhJWkE2X0xDREMsIEhJWkE2X0hJWiwKKwlISVpCNF9TSVVBLCBISVpCNF9ISVosCiAJSElaQjFfVklPLCBISVpCMV9ISVosCiAJSElaQjBfVklPLCBISVpCMF9ISVosCiAJSElaQzE1X0lSUTcsIEhJWkMxNV9ISVosCkBAIC01NDYsNyArNTQ3LDcgQEAKIAlQSU5NVVhfREFUQShWSU9fVkQyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKIAkJICAgIEhJWkIwX1ZJTywgRk9FX1ZJT19WRDIpLAogCVBJTk1VWF9EQVRBKFZJT19IRDJfTUFSSywgUFNFM19WSU8sIE1TRUxCOV9WSU8yLAotCQkgICAgSElaQjFfVklPLCBISVpCMV9WSU8sIEZDRV9WSU9fSEQyKSwKKwkJICAgIEhJWkIxX1ZJTywgRkNFX1ZJT19IRDIpLAogCVBJTk1VWF9EQVRBKFZJT19DTEsyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKIAkJICAgIEhJWkIxX1ZJTywgRlJCX1ZJT19DTEsyKSwKIApAQCAtNjU4LDE0ICs2NTksMTQgQEAKIAlQSU5NVVhfREFUQShTREhJQ0xLX01BUkssIFNESElDTEspLAogCiAJLyogU0lVIC0gUG9ydCBBICovCi0JUElOTVVYX0RBVEEoU0lVQU9MUl9NQVJLLCBQU0MxM19TSVVBT0xSLCBTSVVBT0xSX1NJT0YxX1NZTkMpLAotCVBJTk1VWF9EQVRBKFNJVUFPQlRfTUFSSywgUFNDMTRfU0lVQU9CVCwgU0lVQU9CVF9TSU9GMV9TQ0spLAotCVBJTk1VWF9EQVRBKFNJVUFJU0xEX01BUkssIFBTQzE1X1NJVUFJU0xELCBTSVVBSVNMRF9TSU9GMV9SWEQpLAotCVBJTk1VWF9EQVRBKFNJVUFJTFJfTUFSSywgUFNDMTFfU0lVQUlMUiwgU0lVQUlMUl9TSU9GMV9TUzIpLAotCVBJTk1VWF9EQVRBKFNJVUFJQlRfTUFSSywgUFNDMTJfU0lVQUlCVCwgU0lVQUlCVF9TSU9GMV9TUzEpLAotCVBJTk1VWF9EQVRBKFNJVUFPU0xEX01BUkssIFBTQjBfU0lVQU9TTEQsIFNJVUFPU0xEX1NJT0YxX1RYRCksCi0JUElOTVVYX0RBVEEoU0lVTUNLQV9NQVJLLCBQU0UxMV9TSVVNQ0tBX1NJT0YxX01DSywgUFNCMV9TSVVNQ0tBLCBQVEswKSwKLQlQSU5NVVhfREFUQShTSVVGQ0tBX01BUkssIFBTRTExX1NJVUZDS0EsIFBUSzApLAorCVBJTk1VWF9EQVRBKFNJVUFPTFJfTUFSSywgUFNDMTNfU0lVQU9MUiwgSElaQjRfU0lVQSwgU0lVQU9MUl9TSU9GMV9TWU5DKSwKKwlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQzE0X1NJVUFPQlQsIEhJWkI0X1NJVUEsIFNJVUFPQlRfU0lPRjFfU0NLKSwKKwlQSU5NVVhfREFUQShTSVVBSVNMRF9NQVJLLCBQU0MxNV9TSVVBSVNMRCwgSElaQjRfU0lVQSwgU0lVQUlTTERfU0lPRjFfUlhEKSwKKwlQSU5NVVhfREFUQShTSVVBSUxSX01BUkssIFBTQzExX1NJVUFJTFIsIEhJWkI0X1NJVUEsIFNJVUFJTFJfU0lPRjFfU1MyKSwKKwlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQzEyX1NJVUFJQlQsIEhJWkI0X1NJVUEsIFNJVUFJQlRfU0lPRjFfU1MxKSwKKwlQSU5NVVhfREFUQShTSVVBT1NMRF9NQVJLLCBQU0IwX1NJVUFPU0xELCBISVpCNF9TSVVBLCBTSVVBT1NMRF9TSU9GMV9UWEQpLAorCVBJTk1VWF9EQVRBKFNJVU1DS0FfTUFSSywgUFNFMTFfU0lVTUNLQV9TSU9GMV9NQ0ssIEhJWkI0X1NJVUEsIFBTQjFfU0lVTUNLQSwgUFRLMCksCisJUElOTVVYX0RBVEEoU0lVRkNLQV9NQVJLLCBQU0UxMV9TSVVGQ0tBLCBISVpCNF9TSVVBLCBQVEswKSwKIAogCS8qIFNJVSAtIFBvcnQgQiAqLwogCVBJTk1VWF9EQVRBKFNJVUJPTFJfTUFSSywgUFNCMTFfU0lVQk9MUiwgU0lPU1RSQjFfU0lVQk9MUiksCkBAIC0xNjEyLDcgKzE2MTMsNyBAQAogCQkwLCAwLAogCQkwLCAwLAogCQkwLCAwLAotCQkwLCAwLAorCQlISVpCNF9TSVVBLCBISVpCNF9ISVosCiAJCTAsIDAsCiAJCTAsIDAsCiAJCUhJWkIxX1ZJTywgSElaQjFfSElaLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwppbmRleCBiNTMzNWI1Li5lZjNmOTc4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpAQCAtNDQ2LDYgKzQ0Niw4IEBACiAKIGVudW0gewogCVVOVVNFRD0wLAorCUVOQUJMRUQsCisJRElTQUJMRUQsCiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCkBAIC00NjEsNyArNDYzLDYgQEAKIAlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTSU9GMCwgU0lPRjEsIFNJTywKIAlGTENUTF9GTFNURUksIEZMQ1RMX0ZMRU5ESSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJLAogCUkyQ19BTEksIEkyQ19UQUNLSSwgSTJDX1dBSVRJLCBJMkNfRFRFSSwKLQlTREhJMCwgU0RISTEsIFNESEkyLCBTREhJMywKIAlDTVQsIFRTSUYsIFNJVSwgVFdPREcsCiAJVE1VMCwgVE1VMSwgVE1VMiwKIAlJUkRBLCBKUFUsIExDREMsCkBAIC00OTQsOCArNDk1LDggQEAKIAlJTlRDX1ZFQ1QoRkxDVExfRkxUUkVRMEksIDB4ZGMwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMVFJFUTFJLCAweGRlMCksCiAJSU5UQ19WRUNUKEkyQ19BTEksIDB4ZTAwKSwgSU5UQ19WRUNUKEkyQ19UQUNLSSwgMHhlMjApLAogCUlOVENfVkVDVChJMkNfV0FJVEksIDB4ZTQwKSwgSU5UQ19WRUNUKEkyQ19EVEVJLCAweGU2MCksCi0JSU5UQ19WRUNUKFNESEkwLCAweGU4MCksIElOVENfVkVDVChTREhJMSwgMHhlYTApLAotCUlOVENfVkVDVChTREhJMiwgMHhlYzApLCBJTlRDX1ZFQ1QoU0RISTMsIDB4ZWUwKSwKKwlJTlRDX1ZFQ1QoU0RISSwgMHhlODApLCBJTlRDX1ZFQ1QoU0RISSwgMHhlYTApLAorCUlOVENfVkVDVChTREhJLCAweGVjMCksIElOVENfVkVDVChTREhJLCAweGVlMCksCiAJSU5UQ19WRUNUKENNVCwgMHhmMDApLCBJTlRDX1ZFQ1QoVFNJRiwgMHhmMjApLAogCUlOVENfVkVDVChTSVUsIDB4ZjgwKSwgSU5UQ19WRUNUKFRXT0RHLCAweGZhMCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKQEAgLTUxMyw3ICs1MTQsNiBAQAogCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxFTkRJLAogCQkgICBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxUUkVRMUkpLAogCUlOVENfR1JPVVAoSTJDLCBJMkNfQUxJLCBJMkNfVEFDS0ksIEkyQ19XQUlUSSwgSTJDX0RURUkpLAotCUlOVENfR1JPVVAoU0RISSwgU0RISTAsIFNESEkxLCBTREhJMiwgU0RISTMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKQEAgLTUzNSw3ICs1MzUsNyBAQAogCSAgeyBJMkNfRFRFSSwgSTJDX1dBSVRJLCBJMkNfVEFDS0ksIEkyQ19BTEksCiAJICAgIEZMQ1RMX0ZMVFJFUTFJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxFTkRJLCBGTENUTF9GTFNURUkgfSB9LAogCXsgMHhhNDA4MDBhMCwgMHhhNDA4MDBlMCwgOCwgLyogSU1SOCAvIElNQ1I4ICovCi0JICB7IFNESEkzLCBTREhJMiwgU0RISTEsIFNESEkwLCAwLCAwLCBUV09ERywgU0lVIH0gfSwKKwkgIHsgRElTQUJMRUQsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVELCAwLCAwLCBUV09ERywgU0lVIH0gfSwKIAl7IDB4YTQwODAwYTQsIDB4YTQwODAwZTQsIDgsIC8qIElNUjkgLyBJTUNSOSAqLwogCSAgeyAwLCAwLCAwLCBDTVQsIDAsIFVTQl9VU0JJMSwgVVNCX1VTQkkwLCB9IH0sCiAJeyAweGE0MDgwMGE4LCAweGE0MDgwMGU4LCA4LCAvKiBJTVIxMCAvIElNQ1IxMCAqLwpAQCAtNTczLDkgKzU3MywxMyBAQAogCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjLCAic2g3NzIyIiwgdmVjdG9ycywgZ3JvdXBzLAotCQkJICAgICBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywKLQkJCSAgICAgYWNrX3JlZ2lzdGVycyk7CitzdGF0aWMgc3RydWN0IGludGNfZGVzYyBpbnRjX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJzaDc3MjIiLAorCS5mb3JjZV9lbmFibGUgPSBFTkFCTEVELAorCS5mb3JjZV9kaXNhYmxlID0gRElTQUJMRUQsCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdpc3RlcnMsCisJCQkgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKSwKK307CiAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCmluZGV4IDc3MmI5MjYuLjg1YzYxZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCkBAIC01OTIsMTQgKzU5MiwxNyBAQAogI2RlZmluZSBSQU1DUl9DQUNIRV9MMkZDCTB4MDAwMgogI2RlZmluZSBSQU1DUl9DQUNIRV9MMkUJCTB4MDAwMQogI2RlZmluZSBMMl9DQUNIRV9FTkFCTEUJCShSQU1DUl9DQUNIRV9MMkV8UkFNQ1JfQ0FDSEVfTDJGQykKLXZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgbDJfY2FjaGVfaW5pdCh2b2lkKQorCit2b2lkIGwyX2NhY2hlX2luaXQodm9pZCkKIHsKIAkvKiBFbmFibGUgTDIgY2FjaGUgKi8KLQljdHJsX291dGwoTDJfQ0FDSEVfRU5BQkxFLCBSQU1DUik7CisJX19yYXdfd3JpdGVsKEwyX0NBQ0hFX0VOQUJMRSwgUkFNQ1IpOwogfQogCiBlbnVtIHsKIAlVTlVTRUQ9MCwKKwlFTkFCTEVELAorCURJU0FCTEVELAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LApAQCAtNjIyLDcgKzYyNSw2IEBACiAJU0NJRkFfU0NJRkExLAogCUZMQ1RMX0ZMU1RFSSxGTENUTF9GTFRFTkRJLEZMQ1RMX0ZMVFJFUTBJLEZMQ1RMX0ZMVFJFUTFJLAogCUkyQ19BTEksSTJDX1RBQ0tJLEkyQ19XQUlUSSxJMkNfRFRFSSwKLQlTREhJMF9TREhJSTAsU0RISTBfU0RISUkxLFNESEkwX1NESElJMiwKIAlDTVRfQ01USSwKIAlUU0lGX1RTSUZJLAogCVNJVV9TSVVJLApAQCAtNjMwLDcgKzYzMiw2IEBACiAJVE1VMF9UVU5JMCwgVE1VMF9UVU5JMSwgVE1VMF9UVU5JMiwKIAlJUkRBX0lSREFJLAogCUFUQVBJX0FUQVBJSSwKLQlTREhJMV9TREhJSTAsU0RISTFfU0RISUkxLFNESEkxX1NESElJMiwKIAlWRVUySDFfVkVVMkhJLAogCUxDRENfTENEQ0ksCiAJVE1VMV9UVU5JMCxUTVUxX1RVTkkxLFRNVTFfVFVOSTIsCkBAIC03MDEsOSArNzAyLDkgQEAKIAlJTlRDX1ZFQ1QoSTJDX1dBSVRJLDB4RTQwKSwKIAlJTlRDX1ZFQ1QoSTJDX0RURUksMHhFNjApLAogCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMCwweEU4MCksCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMSwweEVBMCksCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMiwweEVDMCksCisJSU5UQ19WRUNUKFNESEkwLCAweEU4MCksCisJSU5UQ19WRUNUKFNESEkwLCAweEVBMCksCisJSU5UQ19WRUNUKFNESEkwLCAweEVDMCksCiAKIAlJTlRDX1ZFQ1QoQ01UX0NNVEksMHhGMDApLAogCUlOVENfVkVDVChUU0lGX1RTSUZJLDB4RjIwKSwKQEAgLTcxNyw5ICs3MTgsOSBAQAogCUlOVENfVkVDVChJUkRBX0lSREFJLDB4NDgwKSwKIAlJTlRDX1ZFQ1QoQVRBUElfQVRBUElJLDB4NEEwKSwKIAotCUlOVENfVkVDVChTREhJMV9TREhJSTAsMHg0RTApLAotCUlOVENfVkVDVChTREhJMV9TREhJSTEsMHg1MDApLAotCUlOVENfVkVDVChTREhJMV9TREhJSTIsMHg1MjApLAorCUlOVENfVkVDVChTREhJMSwgMHg0RTApLAorCUlOVENfVkVDVChTREhJMSwgMHg1MDApLAorCUlOVENfVkVDVChTREhJMSwgMHg1MjApLAogCiAJSU5UQ19WRUNUKFZFVTJIMV9WRVUySEksMHg1NjApLAogCUlOVENfVkVDVChMQ0RDX0xDRENJLDB4NTgwKSwKQEAgLTczOCwxNSArNzM5LDE0IEBACiAJSU5UQ19HUk9VUChGTENUTCxGTENUTF9GTFNURUksRkxDVExfRkxURU5ESSxGTENUTF9GTFRSRVEwSSxGTENUTF9GTFRSRVExSSksCiAJSU5UQ19HUk9VUChJMkMsSTJDX0FMSSxJMkNfVEFDS0ksSTJDX1dBSVRJLEkyQ19EVEVJKSwKIAlJTlRDX0dST1VQKF8yREcsIF8yREdfVFJJLF8yREdfSU5JLF8yREdfQ0VJKSwKLQlJTlRDX0dST1VQKFNESEkxLCBTREhJMV9TREhJSTAsU0RISTFfU0RISUkxLFNESEkxX1NESElJMiksCiAJSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksUlRDX1BSSSxSVENfQ1VJKSwKIAlJTlRDX0dST1VQKERNQUMxQiwgRE1BQzFCX0RFSTQsRE1BQzFCX0RFSTUsRE1BQzFCX0RBREVSUiksCi0JSU5UQ19HUk9VUChTREhJMCxTREhJMF9TREhJSTAsU0RISTBfU0RISUkxLFNESEkwX1NESElJMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhhNDA4MDA4MCwgMHhhNDA4MDBjMCwgOCwgLyogSU1SMCAvIElNQ1IwICovCi0JICB7IDAsICBUTVUxX1RVTkkyLFRNVTFfVFVOSTEsVE1VMV9UVU5JMCwwLFNESEkxX1NESElJMixTREhJMV9TREhJSTEsU0RISTFfU0RISUkwfSB9LAorCSAgeyAwLCBUTVUxX1RVTkkyLCBUTVUxX1RVTkkxLCBUTVUxX1RVTkkwLAorCSAgICAwLCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCB9IH0sCiAJeyAweGE0MDgwMDg0LCAweGE0MDgwMGM0LCA4LCAvKiBJTVIxIC8gSU1DUjEgKi8KIAkgIHsgVklPX1ZPVUksIFZJT19WRVUySEksVklPX0JFVUksVklPX0NFVUksRE1BQzBBX0RFSTMsRE1BQzBBX0RFSTIsRE1BQzBBX0RFSTEsRE1BQzBBX0RFSTAgfSB9LAogCXsgMHhhNDA4MDA4OCwgMHhhNDA4MDBjOCwgOCwgLyogSU1SMiAvIElNQ1IyICovCkBAIC03NjMsNyArNzYzLDggQEAKIAkgIHsgSTJDX0RURUksIEkyQ19XQUlUSSwgSTJDX1RBQ0tJLCBJMkNfQUxJLAogCSAgICBGTENUTF9GTFRSRVExSSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVEVOREksIEZMQ1RMX0ZMU1RFSSB9IH0sCiAJeyAweGE0MDgwMGEwLCAweGE0MDgwMGUwLCA4LCAvKiBJTVI4IC8gSU1DUjggKi8KLQkgIHsgMCxTREhJMF9TREhJSTIsU0RISTBfU0RISUkxLFNESEkwX1NESElJMCwwLDAsU0NJRkFfU0NJRkEyLFNJVV9TSVVJIH0gfSwKKwkgIHsgMCwgRElTQUJMRUQsIEVOQUJMRUQsIEVOQUJMRUQsCisJICAgIDAsIDAsIFNDSUZBX1NDSUZBMiwgU0lVX1NJVUkgfSB9LAogCXsgMHhhNDA4MDBhNCwgMHhhNDA4MDBlNCwgOCwgLyogSU1SOSAvIElNQ1I5ICovCiAJICB7IDAsIDAsIDAsIENNVF9DTVRJLCAwLCAwLCBVU0JfVVNJMCwwIH0gfSwKIAl7IDB4YTQwODAwYTgsIDB4YTQwODAwZTgsIDgsIC8qIElNUjEwIC8gSU1DUjEwICovCkBAIC04MDMsOSArODA0LDEzIEBACiAJICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjX2Rlc2MsICJzaDc3MjMiLCB2ZWN0b3JzLCBncm91cHMsCi0JCQkgICAgIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLAotCQkJICAgICBhY2tfcmVnaXN0ZXJzKTsKK3N0YXRpYyBzdHJ1Y3QgaW50Y19kZXNjIGludGNfZGVzYyBfX2luaXRkYXRhID0geworCS5uYW1lID0gInNoNzcyMyIsCisJLmZvcmNlX2VuYWJsZSA9IEVOQUJMRUQsCisJLmZvcmNlX2Rpc2FibGUgPSBESVNBQkxFRCwKKwkuaHcgPSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ2lzdGVycywKKwkJCSAgIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsIGFja19yZWdpc3RlcnMpLAorfTsKIAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKaW5kZXggZDMyZjk2Yy4uMzFlMzQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKQEAgLTcxNCwxNCArNzE0LDE3IEBACiAjZGVmaW5lIFJBTUNSX0NBQ0hFX0wyRkMJMHgwMDAyCiAjZGVmaW5lIFJBTUNSX0NBQ0hFX0wyRQkJMHgwMDAxCiAjZGVmaW5lIEwyX0NBQ0hFX0VOQUJMRQkJKFJBTUNSX0NBQ0hFX0wyRXxSQU1DUl9DQUNIRV9MMkZDKQotdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsMl9jYWNoZV9pbml0KHZvaWQpCisKK3ZvaWQgbDJfY2FjaGVfaW5pdCh2b2lkKQogewogCS8qIEVuYWJsZSBMMiBjYWNoZSAqLwotCWN0cmxfb3V0bChMMl9DQUNIRV9FTkFCTEUsIFJBTUNSKTsKKwlfX3Jhd193cml0ZWwoTDJfQ0FDSEVfRU5BQkxFLCBSQU1DUik7CiB9CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCisJRU5BQkxFRCwKKwlESVNBQkxFRCwKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKQEAgLTc1MCwxNCArNzUzLDEyIEBACiAJRVRISSwKIAlJMkMxX0FMSSwgSTJDMV9UQUNLSSwgSTJDMV9XQUlUSSwgSTJDMV9EVEVJLAogCUkyQzBfQUxJLCBJMkMwX1RBQ0tJLCBJMkMwX1dBSVRJLCBJMkMwX0RURUksCi0JU0RISTBfU0RISUkwLCBTREhJMF9TREhJSTEsIFNESEkwX1NESElJMiwgU0RISTBfU0RISUkzLAogCUNNVCwKIAlUU0lGLAogCUZTSSwKIAlTQ0lGQTUsCiAJVE1VMF9UVU5JMCwgVE1VMF9UVU5JMSwgVE1VMF9UVU5JMiwKIAlJUkRBLAotCVNESEkxX1NESElJMCwgU0RISTFfU0RISUkxLCBTREhJMV9TREhJSTIsCiAJSlBVLAogCV8yRERNQUMsCiAJTU1DX01NQzJJLCBNTUNfTU1DM0ksCkBAIC04MzksMTAgKzg0MCwxMCBAQAogCUlOVENfVkVDVChJMkMwX1dBSVRJLCAweEU0MCksCiAJSU5UQ19WRUNUKEkyQzBfRFRFSSwgMHhFNjApLAogCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMCwgMHhFODApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTEsIDB4RUEwKSwKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkyLCAweEVDMCksCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMywgMHhFRTApLAorCUlOVENfVkVDVChTREhJMCwgMHhFODApLAorCUlOVENfVkVDVChTREhJMCwgMHhFQTApLAorCUlOVENfVkVDVChTREhJMCwgMHhFQzApLAorCUlOVENfVkVDVChTREhJMCwgMHhFRTApLAogCiAJSU5UQ19WRUNUKENNVCwgICAgMHhGMDApLAogCUlOVENfVkVDVChUU0lGLCAgIDB4RjIwKSwKQEAgLTg1NSw5ICs4NTYsOSBAQAogCiAJSU5UQ19WRUNUKElSREEsICAgIDB4NDgwKSwKIAotCUlOVENfVkVDVChTREhJMV9TREhJSTAsIDB4NEUwKSwKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkxLCAweDUwMCksCi0JSU5UQ19WRUNUKFNESEkxX1NESElJMiwgMHg1MjApLAorCUlOVENfVkVDVChTREhJMSwgMHg0RTApLAorCUlOVENfVkVDVChTREhJMSwgMHg1MDApLAorCUlOVENfVkVDVChTREhJMSwgMHg1MjApLAogCiAJSU5UQ19WRUNUKEpQVSwgMHg1NjApLAogCUlOVENfVkVDVChfMkRETUFDLCAweDRBMCksCkBAIC04ODMsOCArODg0LDYgQEAKIAlJTlRDX0dST1VQKERNQUMwQiwgRE1BQzBCX0RFSTQsIERNQUMwQl9ERUk1LCBETUFDMEJfREFERVJSKSwKIAlJTlRDX0dST1VQKEkyQzAsIEkyQzBfQUxJLCBJMkMwX1RBQ0tJLCBJMkMwX1dBSVRJLCBJMkMwX0RURUkpLAogCUlOVENfR1JPVVAoSTJDMSwgSTJDMV9BTEksIEkyQzFfVEFDS0ksIEkyQzFfV0FJVEksIEkyQzFfRFRFSSksCi0JSU5UQ19HUk9VUChTREhJMCwgU0RISTBfU0RISUkwLCBTREhJMF9TREhJSTEsIFNESEkwX1NESElJMiwgU0RISTBfU0RISUkzKSwKLQlJTlRDX0dST1VQKFNESEkxLCBTREhJMV9TREhJSTAsIFNESEkxX1NESElJMSwgU0RISTFfU0RISUkyKSwKIAlJTlRDX0dST1VQKFNQVSwgU1BVX1NQVUkwLCBTUFVfU1BVSTEpLAogCUlOVENfR1JPVVAoTU1DSUYsIE1NQ19NTUMySSwgTU1DX01NQzNJKSwKIH07CkBAIC04OTIsNyArODkxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGE0MDgwMDgwLCAweGE0MDgwMGMwLCA4LCAvKiBJTVIwIC8gSU1DUjAgKi8KIAkgIHsgMCwgVE1VMV9UVU5JMiwgVE1VMV9UVU5JMSwgVE1VMV9UVU5JMCwKLQkgICAgMCwgU0RISTFfU0RISUkyLCBTREhJMV9TREhJSTEsIFNESEkxX1NESElJMCB9IH0sCisJICAgIDAsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVEIH0gfSwKIAl7IDB4YTQwODAwODQsIDB4YTQwODAwYzQsIDgsIC8qIElNUjEgLyBJTUNSMSAqLwogCSAgeyBWSU9fVk9VLCBWSU9fVkVVMSwgVklPX0JFVTAsIFZJT19DRVUwLAogCSAgICBETUFDMEFfREVJMywgRE1BQzBBX0RFSTIsIERNQUMwQV9ERUkxLCBETUFDMEFfREVJMCB9IH0sCkBAIC05MTQsNyArOTEzLDcgQEAKIAkgIHsgSTJDMF9EVEVJLCBJMkMwX1dBSVRJLCBJMkMwX1RBQ0tJLCBJMkMwX0FMSSwKIAkgICAgSTJDMV9EVEVJLCBJMkMxX1dBSVRJLCBJMkMxX1RBQ0tJLCBJMkMxX0FMSSB9IH0sCiAJeyAweGE0MDgwMGEwLCAweGE0MDgwMGUwLCA4LCAvKiBJTVI4IC8gSU1DUjggKi8KLQkgIHsgU0RISTBfU0RISUkzLCBTREhJMF9TREhJSTIsIFNESEkwX1NESElJMSwgU0RISTBfU0RISUkwLAorCSAgeyBESVNBQkxFRCwgRElTQUJMRUQsIEVOQUJMRUQsIEVOQUJMRUQsCiAJICAgIDAsIDAsIFNDSUZBNSwgRlNJIH0gfSwKIAl7IDB4YTQwODAwYTQsIDB4YTQwODAwZTQsIDgsIC8qIElNUjkgLyBJTUNSOSAqLwogCSAgeyAwLCAwLCAwLCBDTVQsIDAsIFVTQjEsIFVTQjAsIDAgfSB9LApAQCAtOTYxLDkgKzk2MCwxMyBAQAogCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjLCAic2g3NzI0IiwgdmVjdG9ycywgZ3JvdXBzLAotCQkJICAgICBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywKLQkJCSAgICAgYWNrX3JlZ2lzdGVycyk7CitzdGF0aWMgc3RydWN0IGludGNfZGVzYyBpbnRjX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJzaDc3MjQiLAorCS5mb3JjZV9lbmFibGUgPSBFTkFCTEVELAorCS5mb3JjZV9kaXNhYmxlID0gRElTQUJMRUQsCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdpc3RlcnMsCisJCQkgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKSwKK307CiAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc1Ny5jCmluZGV4IDM3ZTMyZWYuLmU3NWVkZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc1Ny5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc1Ny5jCkBAIC00ODcsMTcgKzQ4NywxNyBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTMtMCArIElSUTctNCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJLyogZGlzYWJsZSBob2xkaW5nIGZ1bmN0aW9uLCBpZSBlbmFibGUgIlNILTQgTW9kZSIgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtNTA3LDMyICs1MDcsMzIgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUTc2NTQ6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnE0NTY3KTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUlEzMjEwOgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmwwMTIzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKaW5kZXggNmFiYTI2Zi4uN2Y2YjBhNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKQEAgLTUzOCwxMSArNTM4LDExIEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewogCS8qIGRpc2FibGUgSVJRNy0wICovCi0JY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisJX19yYXdfd3JpdGVsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CiAKIAkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwotCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCV9fcmF3X3dyaXRlbCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCV9fcmF3X3dyaXRlbCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtNTUyLDI3ICs1NTIsMjcgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUToKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcnFfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDc2NTRfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsMzIxMF9kZXNjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKaW5kZXggYzE2NDNiYy4uODZkNjgxZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKQEAgLTY5NCwxNyArNjk0LDE3IEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewogCS8qIGRpc2FibGUgSVJRNy0wICovCi0JY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisJX19yYXdfd3JpdGVsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CiAKIAkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwotCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCV9fcmF3X3dyaXRlbCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCV9fcmF3X3dyaXRlbCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOwogCiAJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAKIAkvKiBkaXNhYmxlIGhvbGRpbmcgZnVuY3Rpb24sIGllIGVuYWJsZSAiU0gtNCBNb2RlIiAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiB9CkBAIC03MTQsMjcgKzcxNCwyNyBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lycV9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgogCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTA6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgogCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsNzY1NF9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmwzMjEwX2Rlc2MpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwppbmRleCBjMzEwNTU4Li5mOGYyMTYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwpAQCAtNDYxLDE3ICs0NjEsMTcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlE3LTAgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCS8qIGRpc2FibGUgaG9sZGluZyBmdW5jdGlvbiwgaWUgZW5hYmxlICJTSC00IE1vZGUiICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTQ4MSwyNyArNDgxLDI3IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJxX2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmw3NjU0X2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDMyMTBfZGVzYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IGY2ODViOWIuLjIzNDQ4ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC01NDEsMTcgKzU0MSwxNyBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTMtMCArIElSUTctNCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJLyogZGlzYWJsZSBob2xkaW5nIGZ1bmN0aW9uLCBpZSBlbmFibGUgIlNILTQgTW9kZSIgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtNTYxLDMyICs1NjEsMzIgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUTc2NTQ6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnE0NTY3KTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUlEzMjEwOgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmwwMTIzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKaW5kZXggNzE2NzM0OC4uN2U1ODUzMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKQEAgLTg2NywxNCArODY3LDE0IEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewogCS8qIGRpc2FibGUgSVJRMy0wICsgSVJRNy00ICovCi0JY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisJX19yYXdfd3JpdGVsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CiAKIAkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwotCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCV9fcmF3X3dyaXRlbCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCV9fcmF3X3dyaXRlbCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOwogCiAJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiB9CkBAIC04ODQsMzIgKzg4NCwzMiBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJRNzY1NDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkw3LTQgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSUTMyMTA6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEwMTIzKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgogCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTA6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgogCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmw0NTY3KTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDAxMjMpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKaW5kZXggNTg2M2UwYy4uMTFiZjRjMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCkBAIC03OCw3ICs3OCwxMCBAQAogCiB2b2lkIHBsYXRfc3RhcnRfY3B1KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZW50cnlfcG9pbnQpCiB7Ci0JX19yYXdfd3JpdGVsKGVudHJ5X3BvaW50LCBSRVNFVF9SRUcoY3B1KSk7CisJaWYgKF9faW5fMjliaXRfbW9kZSgpKQorCQlfX3Jhd193cml0ZWwoZW50cnlfcG9pbnQsIFJFU0VUX1JFRyhjcHUpKTsKKwllbHNlCisJCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoZW50cnlfcG9pbnQpLCBSRVNFVF9SRUcoY3B1KSk7CiAKIAlpZiAoIShfX3Jhd19yZWFkbChTVEJDUl9SRUcoY3B1KSkgJiBTVEJDUl9NU1RQKSkKIAkJX19yYXdfd3JpdGVsKFNUQkNSX01TVFAsIFNUQkNSX1JFRyhjcHUpKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3ViYy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvdWJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZiMjc0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3ViYy5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvdWJjLmMKKyAqCisgKiBPbi1jaGlwIFVCQyBzdXBwb3J0IGZvciBTSC00QSBDUFVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTAgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+CisKKyNkZWZpbmUgVUJDX0NCUihpZHgpCSgweGZmMjAwMDAwICsgKDB4MjAgKiBpZHgpKQorI2RlZmluZSBVQkNfQ1JSKGlkeCkJKDB4ZmYyMDAwMDQgKyAoMHgyMCAqIGlkeCkpCisjZGVmaW5lIFVCQ19DQVIoaWR4KQkoMHhmZjIwMDAwOCArICgweDIwICogaWR4KSkKKyNkZWZpbmUgVUJDX0NBTVIoaWR4KQkoMHhmZjIwMDAwYyArICgweDIwICogaWR4KSkKKworI2RlZmluZSBVQkNfQ0NNRlIJMHhmZjIwMDYwMAorI2RlZmluZSBVQkNfQ0JDUgkweGZmMjAwNjIwCisKKy8qIENSUiAqLworI2RlZmluZSBVQkNfQ1JSX1BDQgkoMSA8PCAxKQorI2RlZmluZSBVQkNfQ1JSX0JJRQkoMSA8PCAwKQorCisvKiBDQlIgKi8KKyNkZWZpbmUgVUJDX0NCUl9DRQkoMSA8PCAwKQorCitzdGF0aWMgc3RydWN0IHNoX3ViYyBzaDRhX3ViYzsKKworc3RhdGljIHZvaWQgc2g0YV91YmNfZW5hYmxlKHN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8sIGludCBpZHgpCit7CisJX19yYXdfd3JpdGVsKFVCQ19DQlJfQ0UgfCBpbmZvLT5sZW4gfCBpbmZvLT50eXBlLCBVQkNfQ0JSKGlkeCkpOworCV9fcmF3X3dyaXRlbChpbmZvLT5hZGRyZXNzLCBVQkNfQ0FSKGlkeCkpOworfQorCitzdGF0aWMgdm9pZCBzaDRhX3ViY19kaXNhYmxlKHN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8sIGludCBpZHgpCit7CisJX19yYXdfd3JpdGVsKDAsIFVCQ19DQlIoaWR4KSk7CisJX19yYXdfd3JpdGVsKDAsIFVCQ19DQVIoaWR4KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2VuYWJsZV9hbGwodW5zaWduZWQgbG9uZyBtYXNrKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNoNGFfdWJjLm51bV9ldmVudHM7IGkrKykKKwkJaWYgKG1hc2sgJiAoMSA8PCBpKSkKKwkJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChVQkNfQ0JSKGkpKSB8IFVCQ19DQlJfQ0UsCisJCQkJICAgICBVQkNfQ0JSKGkpKTsKK30KKworc3RhdGljIHZvaWQgc2g0YV91YmNfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaDRhX3ViYy5udW1fZXZlbnRzOyBpKyspCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChVQkNfQ0JSKGkpKSAmIH5VQkNfQ0JSX0NFLAorCQkJICAgICBVQkNfQ0JSKGkpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2g0YV91YmNfYWN0aXZlX21hc2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFjdGl2ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2g0YV91YmMubnVtX2V2ZW50czsgaSsrKQorCQlpZiAoX19yYXdfcmVhZGwoVUJDX0NCUihpKSkgJiBVQkNfQ0JSX0NFKQorCQkJYWN0aXZlIHw9ICgxIDw8IGkpOworCisJcmV0dXJuIGFjdGl2ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2g0YV91YmNfdHJpZ2dlcmVkX21hc2sodm9pZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoVUJDX0NDTUZSKTsKK30KKworc3RhdGljIHZvaWQgc2g0YV91YmNfY2xlYXJfdHJpZ2dlcmVkX21hc2sodW5zaWduZWQgbG9uZyBtYXNrKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChVQkNfQ0NNRlIpICYgfm1hc2ssIFVCQ19DQ01GUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfdWJjIHNoNGFfdWJjID0geworCS5uYW1lCQkJPSAiU0gtNEEiLAorCS5udW1fZXZlbnRzCQk9IDIsCisJLnRyYXBfbnIJCT0gMHgxZTAsCisJLmVuYWJsZQkJCT0gc2g0YV91YmNfZW5hYmxlLAorCS5kaXNhYmxlCQk9IHNoNGFfdWJjX2Rpc2FibGUsCisJLmVuYWJsZV9hbGwJCT0gc2g0YV91YmNfZW5hYmxlX2FsbCwKKwkuZGlzYWJsZV9hbGwJCT0gc2g0YV91YmNfZGlzYWJsZV9hbGwsCisJLmFjdGl2ZV9tYXNrCQk9IHNoNGFfdWJjX2FjdGl2ZV9tYXNrLAorCS50cmlnZ2VyZWRfbWFzawkJPSBzaDRhX3ViY190cmlnZ2VyZWRfbWFzaywKKwkuY2xlYXJfdHJpZ2dlcmVkX21hc2sJPSBzaDRhX3ViY19jbGVhcl90cmlnZ2VyZWRfbWFzaywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNGFfdWJjX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICp1YmNfaWNsayA9IGNsa19nZXQoTlVMTCwgInViYzAiKTsKKwlpbnQgaTsKKworCS8qCisJICogVGhlIFVCQyBNU1RQIGJpdCBpcyBvcHRpb25hbCwgYXMgbm90IGFsbCBwbGF0Zm9ybXMgd2lsbCBoYXZlCisJICogaXQuIEp1c3QgaWdub3JlIGl0IGlmIHdlIGNhbid0IGZpbmQgaXQuCisJICovCisJaWYgKElTX0VSUih1YmNfaWNsaykpCisJCXViY19pY2xrID0gTlVMTDsKKworCWNsa19lbmFibGUodWJjX2ljbGspOworCisJX19yYXdfd3JpdGVsKDAsIFVCQ19DQkNSKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaDRhX3ViYy5udW1fZXZlbnRzOyBpKyspIHsKKwkJX19yYXdfd3JpdGVsKDAsIFVCQ19DQU1SKGkpKTsKKwkJX19yYXdfd3JpdGVsKDAsIFVCQ19DQlIoaSkpOworCisJCV9fcmF3X3dyaXRlbChVQkNfQ1JSX0JJRSB8IFVCQ19DUlJfUENCLCBVQkNfQ1JSKGkpKTsKKworCQkvKiBkdW1teSByZWFkIGZvciB3cml0ZSBwb3N0aW5nICovCisJCSh2b2lkKV9fcmF3X3JlYWRsKFVCQ19DUlIoaSkpOworCX0KKworCWNsa19kaXNhYmxlKHViY19pY2xrKTsKKworCXNoNGFfdWJjLmNsayA9IHViY19pY2xrOworCisJcmV0dXJuIHJlZ2lzdGVyX3NoX3ViYygmc2g0YV91YmMpOworfQorYXJjaF9pbml0Y2FsbChzaDRhX3ViY19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvY2xvY2stc2g1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jCmluZGV4IDdmODY0ZWIuLjljZmMxOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvY2xvY2stc2g1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpAQCAtMjQsNyArMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbmwoY3ByY19iYXNlICsgMHgwMCkgPj4gNikgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChjcHJjX2Jhc2UgKyAweDAwKSA+PiA2KSAmIDB4MDAwNzsKIAljbGstPnJhdGUgKj0gaWZjX3RhYmxlW2lkeF07CiB9CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSA+PiAxMikgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhjcHJjX2Jhc2UpID4+IDEyKSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKIH0KIApAQCAtNDQsNyArNDQsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhjcHJjX2Jhc2UpID4+IDMpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoY3ByY19iYXNlKSA+PiAzKSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKIH0KIApAQCAtNTQsNyArNTQsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhjcHJjX2Jhc2UpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KGNwcmNfYmFzZSkgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY190YWJsZVtpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2VudHJ5LlMKaW5kZXggOGYxM2Y3My4uNmI4MDI5NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZW50cnkuUwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJLnJlcHQgNgogCQkubG9uZyBkb19leGNlcHRpb25fZXJyb3IJLyogMHg4ODAgLSAweDkyMCAqLwogCS5lbmRyCi0JLmxvbmcJZG9fc29mdHdhcmVfYnJlYWtfcG9pbnQJLyogMHg5NDAgKi8KKwkubG9uZwlicmVha3BvaW50X3RyYXBfaGFuZGxlcgkvKiAweDk0MCAqLwogCS5sb25nCWRvX2V4Y2VwdGlvbl9lcnJvcgkJLyogMHg5NjAgKi8KIAkubG9uZwlkb19zaW5nbGVfc3RlcAkJLyogMHg5ODAgKi8KIApAQCAtMTEyNCw3ICsxMTI0LDcgQEAKIAlwdGEJaXRzX0lSUSwgdHIwCiAJYmVxaS9sCXI0LCBFVkVOVF9JTlRFUlJVUFQsIHRyMAogI2lmZGVmIENPTkZJR19TSF9GUFUKLQltb3ZpCWRvX2ZwdV9zdGF0ZV9yZXN0b3JlLCByNgorCW1vdmkJZnB1X3N0YXRlX3Jlc3RvcmVfdHJhcF9oYW5kbGVyLCByNgogI2Vsc2UKIAltb3ZpCWRvX2V4Y2VwdGlvbl9lcnJvciwgcjYKICNlbmRpZgpAQCAtMTEzNSw3ICsxMTM1LDcgQEAKIAlwdGEJaXRzX0lSUSwgdHIwCiAJYmVxaS9sCXI0LCBFVkVOVF9JTlRFUlJVUFQsIHRyMAogI2lmZGVmIENPTkZJR19TSF9GUFUKLQltb3ZpCWRvX2ZwdV9zdGF0ZV9yZXN0b3JlLCByNgorCW1vdmkJZnB1X3N0YXRlX3Jlc3RvcmVfdHJhcF9oYW5kbGVyLCByNgogI2Vsc2UKIAltb3ZpCWRvX2V4Y2VwdGlvbl9lcnJvciwgcjYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMKaW5kZXggNDY0OGNjZS4uNGIzYmIzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2ZwdS5jCkBAIC0xNSwyNCArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS91c2VyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2ZwdS5oPgotCi0vKgotICogSW5pdGlhbGx5IGxvYWQgdGhlIEZQVSB3aXRoIHNpZ25hbGxpbmcgTkFOUy4gIFRoaXMgYml0IHBhdHRlcm4KLSAqIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBubyBtYXR0ZXIgd2hldGhlciBjb25zaWRlcmVkIGFzIHNpbmdsZSBvciBhcwotICogZG91YmxlIHByZWNpc2lvbiwgaXQgc3RpbGwgcmVwcmVzZW50cyBhIHNpZ25hbGxpbmcgTkFOLgotICovCi0jZGVmaW5lIHNOQU42NAkJMHhGRkZGRkZGRkZGRkZGRkZGVUxMCi0jZGVmaW5lIHNOQU4zMgkJMHhGRkZGRkZGRlVMCi0KLXN0YXRpYyB1bmlvbiBzaF9mcHVfdW5pb24gaW5pdF9mcHVyZWdzID0gewotCS5oYXJkID0gewotCQkuZnBfcmVncyA9IHsgWzAgLi4uIDYzXSA9IHNOQU4zMiB9LAotCQkuZnBzY3IgPSBGUFNDUl9JTklUCi0JfQotfTsKIAogdm9pZCBzYXZlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKQEAgLTcyLDEyICs1NCwxMSBAQAogCQkgICAgICJmZ2V0c2NyICAgZnI2M1xuXHQiCiAJCSAgICAgImZzdC5zICAgICAlMCwgKDMyKjgpLCBmcjYzXG5cdCIKIAkJOiAvKiBubyBvdXRwdXQgKi8KLQkJOiAiciIgKCZ0c2stPnRocmVhZC5mcHUuaGFyZCkKKwkJOiAiciIgKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUpCiAJCTogIm1lbW9yeSIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZwbG9hZChzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0ICpmcHJlZ3MpCit2b2lkIHJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCWFzbSB2b2xhdGlsZSgiZmxkLnAgICAgICUwLCAoMCo4KSwgZnAwXG5cdCIKIAkJICAgICAiZmxkLnAgICAgICUwLCAoMSo4KSwgZnAyXG5cdCIKQEAgLTExNiwxNiArOTcsMTEgQEAKIAogCQkgICAgICJmbGQucCAgICAgJTAsICgzMSo4KSwgZnA2MlxuXHQiCiAJCTogLyogbm8gb3V0cHV0ICovCi0JCTogInIiIChmcHJlZ3MpICk7CisJCTogInIiICgmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1KQorCQk6ICJtZW1vcnkiKTsKIH0KIAotdm9pZCBmcGluaXQoc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCAqZnByZWdzKQotewotCSpmcHJlZ3MgPSBpbml0X2ZwdXJlZ3MuaGFyZDsKLX0KLQotYXNtbGlua2FnZSB2b2lkCi1kb19mcHVfZXJyb3IodW5zaWduZWQgbG9uZyBleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgZG9fZnB1X2Vycm9yKHVuc2lnbmVkIGxvbmcgZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIApAQCAtMTMzLDM1ICsxMDksNiBAQAogCiAJdHNrLT50aHJlYWQudHJhcF9ubyA9IDExOwogCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSAwOworCiAJZm9yY2Vfc2lnKFNJR0ZQRSwgdHNrKTsKIH0KLQotCi1hc21saW5rYWdlIHZvaWQKLWRvX2ZwdV9zdGF0ZV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKTsKLQotCWlmICghIHVzZXJfbW9kZShyZWdzKSkKLQkJZGllKCJGUFUgdXNlZCBpbiBrZXJuZWwiLCByZWdzLCBleCk7Ci0KLQlyZWdzLT5zciAmPSB+U1JfRkQ7Ci0KLQlpZiAobGFzdF90YXNrX3VzZWRfbWF0aCA9PSBjdXJyZW50KQotCQlyZXR1cm47Ci0KLQllbmFibGVfZnB1KCk7Ci0JaWYgKGxhc3RfdGFza191c2VkX21hdGggIT0gTlVMTCkKLQkJLyogT3RoZXIgcHJvY2Vzc2VzIGZwdSBzdGF0ZSwgc2F2ZSBhd2F5ICovCi0JCXNhdmVfZnB1KGxhc3RfdGFza191c2VkX21hdGgpOwotCi0gICAgICAgIGxhc3RfdGFza191c2VkX21hdGggPSBjdXJyZW50OwotICAgICAgICBpZiAodXNlZF9tYXRoKCkpIHsKLSAgICAgICAgICAgICAgICBmcGxvYWQoJmN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0JCS8qIEZpcnN0IHRpbWUgRlBVIHVzZXIuICAqLwotCQlmcGxvYWQoJmluaXRfZnB1cmVncy5oYXJkKTsKLSAgICAgICAgICAgICAgICBzZXRfdXNlZF9tYXRoKCk7Ci0gICAgICAgIH0KLQlkaXNhYmxlX2ZwdSgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYwppbmRleCBjYTAyOWE0Li5lNTU5Njg3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYwpAQCAtMzMsNyArMzMsOCBAQAogI2RlZmluZSBTVVNQX01PREVfU0xFRVAJCShTVVNQX1NIX1NMRUVQKQogI2RlZmluZSBTVVNQX01PREVfU0xFRVBfU0YJKFNVU1BfU0hfU0xFRVAgfCBTVVNQX1NIX1NGKQogI2RlZmluZSBTVVNQX01PREVfU1RBTkRCWV9TRgkoU1VTUF9TSF9TVEFOREJZIHwgU1VTUF9TSF9TRikKLSNkZWZpbmUgU1VTUF9NT0RFX1JTVEFOREJZCShTVVNQX1NIX1JTVEFOREJZIHwgU1VTUF9TSF9NTVUgfCBTVVNQX1NIX1NGKQorI2RlZmluZSBTVVNQX01PREVfUlNUQU5EQllfU0YgXAorCShTVVNQX1NIX1JTVEFOREJZIHwgU1VTUF9TSF9NTVUgfCBTVVNQX1NIX1JFR1MgfCBTVVNQX1NIX1NGKQogIC8qCiAgICogVS1zdGFuZGJ5IG1vZGUgaXMgdW5zdXBwb3J0ZWQgc2luY2UgaXQgbmVlZHMgYm9vdGxvYWRlciBoYWNrcwogICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUwppbmRleCBlOWRkN2ZhLi5lNmFhYzY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUwpAQCAtNDgsOCArNDgsNDggQEAKIAlzdGMJc3IsIHIwCiAJbW92LmwJcjAsIEAoU0hfU0xFRVBfU1IsIHI1KQogCi0JLyogc2F2ZSBzcCAqLworCS8qIHNhdmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyB0byBzdGFjayBpZiBuZWVkZWQgKi8KKwltb3YubAlAKFNIX1NMRUVQX01PREUsIHI1KSwgcjAKKwl0c3QJI1NVU1BfU0hfUkVHUywgcjAKKwlidAlza2lwX3JlZ3Nfc2F2ZQorCisJc3RzLmwJcHIsIEAtcjE1CisJbW92LmwJcjE0LCBALXIxNQorCW1vdi5sCXIxMywgQC1yMTUKKwltb3YubAlyMTIsIEAtcjE1CisJbW92LmwJcjExLCBALXIxNQorCW1vdi5sCXIxMCwgQC1yMTUKKwltb3YubAlyOSwgQC1yMTUKKwltb3YubAlyOCwgQC1yMTUKKworCS8qIG1ha2Ugc3VyZSBiYW5rMCBpcyBzZWxlY3RlZCwgc2F2ZSBsb3cgcmVnaXN0ZXJzICovCisJbW92LmwJcmJfYml0LCByOQorCW5vdAlyOSwgcjkKKwlic3IJc2V0X3NyCisJIG1vdgkjMCwgcjEwCisKKwlic3IJc2F2ZV9sb3dfcmVncworCSBub3AKKworCS8qIHN3aXRjaCB0byBiYW5rIDEsIHNhdmUgbG93IHJlZ2lzdGVycyAqLworCW1vdi5sCXJiX2JpdCwgcjEwCisJYnNyCXNldF9zcgorCSBtb3YJIy0xLCByOQorCisJYnNyCXNhdmVfbG93X3JlZ3MKKwkgbm9wCisKKwkvKiBzd2l0Y2ggYmFjayB0byBiYW5rIDAgKi8KKwltb3YubAlyYl9iaXQsIHI5CisJbm90CXI5LCByOQorCWJzcglzZXRfc3IKKwkgbW92CSMwLCByMTAKKworc2tpcF9yZWdzX3NhdmU6CisKKwkvKiBzYXZlIHNwLCBhbHNvIHNldCB0byBpbnRlcm5hbCByYW0gKi8KIAltb3YubAlyMTUsIEAoU0hfU0xFRVBfU1AsIHI1KQorCW1vdglyNSwgcjE1CiAKIAkvKiBzYXZlIHN0YmNyICovCiAJYnNyICAgICBzYXZlX3JlZ2lzdGVyCkBAIC02MCw3ICsxMDAsNyBAQAogCXRzdAkjU1VTUF9TSF9NTVUsIHIwCiAJYnQJc2tpcF9tbXVfc2F2ZV9kaXNhYmxlCiAKLSAgICAgICAvKiBzYXZlIG1tdSBzdGF0ZSAqLworCS8qIHNhdmUgbW11IHN0YXRlICovCiAJYnNyCXNhdmVfcmVnaXN0ZXIKIAkgbW92CSNTSF9TTEVFUF9SRUdfUFRFSCwgcjAKIApAQCAtMTc3LDYgKzIxNywyOSBAQAogCW1vdi5sCUAocjAsIHI1KSwgcjAKIAlydHMKIAkgbm9wCisKK3NldF9zcjoKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCW9yCXIxMCwgcjgKKwlsZGMJcjgsIHNyCisJcnRzCisJIG5vcAorCitzYXZlX2xvd19yZWdzOgorCW1vdi5sCXI3LCBALXIxNQorCW1vdi5sCXI2LCBALXIxNQorCW1vdi5sCXI1LCBALXIxNQorCW1vdi5sCXI0LCBALXIxNQorCW1vdi5sCXIzLCBALXIxNQorCW1vdi5sCXIyLCBALXIxNQorCW1vdi5sCXIxLCBALXIxNQorCXJ0cworCSBtb3YubAlyMCwgQC1yMTUKKworCS5iYWxpZ24gNAorcmJfYml0OgkubG9uZwkweDIwMDAwMDAwICEgUkI9MQorCiBFTlRSWShzaF9tb2JpbGVfc2xlZXBfZW50ZXJfZW5kKQogCiAJLmJhbGlnbiA0CkBAIC0yNzAsNiArMzMzLDQwIEBACiAJaWNiaQlAcjAKIAogc2tpcF9yZXN0b3JlX21tdToKKworCS8qIHJlc3RvcmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBpZiBuZWVkZWQgKi8KKwltb3YubAlAKFNIX1NMRUVQX01PREUsIHI1KSwgcjAKKwl0c3QJI1NVU1BfU0hfUkVHUywgcjAKKwlidAlza2lwX3Jlc3RvcmVfcmVncworCisJLyogc3dpdGNoIHRvIGJhbmsgMSwgcmVzdG9yZSBsb3cgcmVnaXN0ZXJzICovCisJbW92LmwJX3JiX2JpdCwgcjEwCisJYnNyCV9zZXRfc3IKKwkgbW92CSMtMSwgcjkKKworCWJzcglyZXN0b3JlX2xvd19yZWdzCisJIG5vcAorCisJLyogc3dpdGNoIHRvIGJhbmswLCByZXN0b3JlIGxvdyByZWdpc3RlcnMgKi8KKwltb3YubAlfcmJfYml0LCByOQorCW5vdAlyOSwgcjkKKwlic3IJX3NldF9zcgorCSBtb3YJIzAsIHIxMAorCisJYnNyCXJlc3RvcmVfbG93X3JlZ3MKKwkgbm9wCisKKwkvKiByZXN0b3JlIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgKi8KKwltb3YubAlAcjE1KywgcjgKKwltb3YubAlAcjE1KywgcjkKKwltb3YubAlAcjE1KywgcjEwCisJbW92LmwJQHIxNSssIHIxMQorCW1vdi5sCUByMTUrLCByMTIKKwltb3YubAlAcjE1KywgcjEzCisJbW92LmwJQHIxNSssIHIxNAorCWxkcy5sCUByMTUrLCBwcgorCitza2lwX3Jlc3RvcmVfcmVnczoKIAlydGUKIAkgbm9wCiAKQEAgLTI4Myw2ICszODAsMjYgQEAKIAlydHMKIAkgbm9wCiAKK19zZXRfc3I6CisJc3RjCXNyLCByOAorCWFuZAlyOSwgcjgKKwlvcglyMTAsIHI4CisJbGRjCXI4LCBzcgorCXJ0cworCSBub3AKKworcmVzdG9yZV9sb3dfcmVnczoKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwlydHMKKwkgbW92LmwJQHIxNSssIHI3CisKIAkuYmFsaWduIDQKK19yYl9iaXQ6CS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCiAxOgkubG9uZwl+MHg3ZmYKIEVOVFJZKHNoX21vYmlsZV9zbGVlcF9yZXN1bWVfZW5kKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZGVidWd0cmFwcy5TIGIvYXJjaC9zaC9rZXJuZWwvZGVidWd0cmFwcy5TCmluZGV4IDU5MTc0MTMuLjdhMWI0NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC9kZWJ1Z3RyYXBzLlMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNpZiAhZGVmaW5lZChDT05GSUdfS0dEQikKLSNkZWZpbmUgYnJlYWtwb2ludF90cmFwX2hhbmRsZXIJCWRlYnVnX3RyYXBfaGFuZGxlcgogI2RlZmluZSBzaW5nbGVzdGVwX3RyYXBfaGFuZGxlcgkJZGVidWdfdHJhcF9oYW5kbGVyCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYyBiL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKaW5kZXggMzU3NmI3MC4uYmQxYzQ5NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCkBAIC0zOSwxMCArMzksMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZHdhcmZfcmVnX2NhY2hlcDsKIHN0YXRpYyBtZW1wb29sX3QgKmR3YXJmX3JlZ19wb29sOwogCi1zdGF0aWMgTElTVF9IRUFEKGR3YXJmX2NpZV9saXN0KTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBjaWVfcm9vdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHdhcmZfY2llX2xvY2spOwogCi1zdGF0aWMgTElTVF9IRUFEKGR3YXJmX2ZkZV9saXN0KTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBmZGVfcm9vdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHdhcmZfZmRlX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGR3YXJmX2NpZSAqY2FjaGVkX2NpZTsKQEAgLTMwMSw3ICszMDEsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGR3YXJmX2NpZSAqZHdhcmZfbG9va3VwX2NpZSh1bnNpZ25lZCBsb25nIGNpZV9wdHIpCiB7Ci0Jc3RydWN0IGR3YXJmX2NpZSAqY2llOworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZjaWVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCBkd2FyZl9jaWUgKmNpZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwpAQCAtMzE1LDE2ICszMTYsMjQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaWUsICZkd2FyZl9jaWVfbGlzdCwgbGluaykgewotCQlpZiAoY2llLT5jaWVfcG9pbnRlciA9PSBjaWVfcHRyKSB7Ci0JCQljYWNoZWRfY2llID0gY2llOwotCQkJYnJlYWs7CisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9jaWUgKmNpZV90bXA7CisKKwkJY2llX3RtcCA9IHJiX2VudHJ5KCpyYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfY2llLCBub2RlKTsKKwkJQlVHX09OKCFjaWVfdG1wKTsKKworCQlpZiAoY2llX3B0ciA9PSBjaWVfdG1wLT5jaWVfcG9pbnRlcikgeworCQkJY2llID0gY2llX3RtcDsKKwkJCWNhY2hlZF9jaWUgPSBjaWVfdG1wOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQlpZiAoY2llX3B0ciA8IGNpZV90bXAtPmNpZV9wb2ludGVyKQorCQkJCXJiX25vZGUgPSAmKCpyYl9ub2RlKS0+cmJfbGVmdDsKKwkJCWVsc2UKKwkJCQlyYl9ub2RlID0gJigqcmJfbm9kZSktPnJiX3JpZ2h0OwogCQl9CiAJfQogCi0JLyogQ291bGRuJ3QgZmluZCB0aGUgZW50cnkgaW4gdGhlIGxpc3QuICovCi0JaWYgKCZjaWUtPmxpbmsgPT0gJmR3YXJmX2NpZV9saXN0KQotCQljaWUgPSBOVUxMOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2NpZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGNpZTsKQEAgLTMzNiwyNSArMzQ1LDM0IEBACiAgKi8KIHN0cnVjdCBkd2FyZl9mZGUgKmR3YXJmX2xvb2t1cF9mZGUodW5zaWduZWQgbG9uZyBwYykKIHsKLQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGU7CisJc3RydWN0IHJiX25vZGUgKipyYl9ub2RlID0gJmZkZV9yb290LnJiX25vZGU7CisJc3RydWN0IGR3YXJmX2ZkZSAqZmRlID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZkZSwgJmR3YXJmX2ZkZV9saXN0LCBsaW5rKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwl3aGlsZSAoKnJiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2ZkZSAqZmRlX3RtcDsKKwkJdW5zaWduZWQgbG9uZyB0bXBfc3RhcnQsIHRtcF9lbmQ7CiAKLQkJc3RhcnQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb247Ci0JCWVuZCA9IGZkZS0+aW5pdGlhbF9sb2NhdGlvbiArIGZkZS0+YWRkcmVzc19yYW5nZTsKKwkJZmRlX3RtcCA9IHJiX2VudHJ5KCpyYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfZmRlLCBub2RlKTsKKwkJQlVHX09OKCFmZGVfdG1wKTsKIAotCQlpZiAocGMgPj0gc3RhcnQgJiYgcGMgPCBlbmQpCi0JCQlicmVhazsKKwkJdG1wX3N0YXJ0ID0gZmRlX3RtcC0+aW5pdGlhbF9sb2NhdGlvbjsKKwkJdG1wX2VuZCA9IGZkZV90bXAtPmluaXRpYWxfbG9jYXRpb24gKyBmZGVfdG1wLT5hZGRyZXNzX3JhbmdlOworCisJCWlmIChwYyA8IHRtcF9zdGFydCkgeworCQkJcmJfbm9kZSA9ICYoKnJiX25vZGUpLT5yYl9sZWZ0OworCQl9IGVsc2UgeworCQkJaWYgKHBjIDwgdG1wX2VuZCkgeworCQkJCWZkZSA9IGZkZV90bXA7CisJCQkJZ290byBvdXQ7CisJCQl9IGVsc2UKKwkJCQlyYl9ub2RlID0gJigqcmJfbm9kZSktPnJiX3JpZ2h0OworCQl9CiAJfQogCi0JLyogQ291bGRuJ3QgZmluZCB0aGUgZW50cnkgaW4gdGhlIGxpc3QuICovCi0JaWYgKCZmZGUtPmxpbmsgPT0gJmR3YXJmX2ZkZV9saXN0KQotCQlmZGUgPSBOVUxMOwotCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfZmRlX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBmZGU7CkBAIC01NDAsNiArNTU4LDggQEAKIAltZW1wb29sX2ZyZWUoZnJhbWUsIGR3YXJmX2ZyYW1lX3Bvb2wpOwogfQogCitleHRlcm4gdm9pZCByZXRfZnJvbV9pcnEodm9pZCk7CisKIC8qKgogICoJZHdhcmZfdW53aW5kX3N0YWNrIC0gdW53aW5kIHRoZSBzdGFjawogICoKQEAgLTU1MCw4ICs1NzAsOCBAQAogICoJb24gdGhlIGNhbGxzdGFjay4gRWFjaCBvZiB0aGUgbG93ZXIgKG9sZGVyKSBzdGFjayBmcmFtZXMgYXJlCiAgKglsaW5rZWQgdmlhIHRoZSAicHJldiIgbWVtYmVyLgogICovCi1zdHJ1Y3QgZHdhcmZfZnJhbWUgKiBkd2FyZl91bndpbmRfc3RhY2sodW5zaWduZWQgbG9uZyBwYywKLQkJCQkJc3RydWN0IGR3YXJmX2ZyYW1lICpwcmV2KQorc3RydWN0IGR3YXJmX2ZyYW1lICpkd2FyZl91bndpbmRfc3RhY2sodW5zaWduZWQgbG9uZyBwYywKKwkJCQkgICAgICAgc3RydWN0IGR3YXJmX2ZyYW1lICpwcmV2KQogewogCXN0cnVjdCBkd2FyZl9mcmFtZSAqZnJhbWU7CiAJc3RydWN0IGR3YXJmX2NpZSAqY2llOwpAQCAtNjc4LDYgKzY5OCwyNCBAQAogCWFkZHIgPSBmcmFtZS0+Y2ZhICsgcmVnLT5hZGRyOwogCWZyYW1lLT5yZXR1cm5fYWRkciA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCisJLyoKKwkgKiBBaCwgdGhlIGpveXMgb2YgdW53aW5kaW5nIHRocm91Z2ggaW50ZXJydXB0cy4KKwkgKgorCSAqIEludGVycnVwdHMgYXJlIHRyaWNreSAtIHRoZSBEV0FSRiBpbmZvIG5lZWRzIHRvIGJlIF9yZWFsbHlfCisJICogYWNjdXJhdGUgYW5kIHVuZm9ydHVuYXRlbHkgSSdtIHNlZWluZyBhIGxvdCBvZiBib2d1cyBEV0FSRgorCSAqIGluZm8uIEZvciBleGFtcGxlLCBJJ3ZlIHNlZW4gaW50ZXJydXB0cyBvY2N1ciBpbiBlcGlsb2d1ZXMKKwkgKiBqdXN0IGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIChyMTQpIGhhZCBiZWVuIHJlc3RvcmVkLiBUaGUKKwkgKiBwcm9ibGVtIHdhcyB0aGF0IHRoZSBEV0FSRiBpbmZvIGNsYWltZWQgdGhhdCB0aGUgQ0ZBIGNvdWxkIGJlCisJICogcmVhY2hlZCBieSB1c2luZyB0aGUgdmFsdWUgb2YgdGhlIGZyYW1lIHBvaW50ZXIgYmVmb3JlIGl0IHdhcworCSAqIHJlc3RvcmVkLgorCSAqCisJICogU28gdW50aWwgdGhlIGNvbXBpbGVyIGNhbiBiZSB0cnVzdGVkIHRvIHByb2R1Y2UgcmVsaWFibGUKKwkgKiBEV0FSRiBpbmZvIHdoZW4gaXQgcmVhbGx5IG1hdHRlcnMsIGxldCdzIHN0b3AgdW53aW5kaW5nIG9uY2UKKwkgKiB3ZSd2ZSBjYWxjdWxhdGVkIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBpbnRlcnJ1cHRlZC4KKwkgKi8KKwlpZiAocHJldiAmJiBwcmV2LT5wYyA9PSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9pcnEpCisJCWZyYW1lLT5yZXR1cm5fYWRkciA9IDA7CisKIAlyZXR1cm4gZnJhbWU7CiAKIGJhaWw6CkBAIC02ODgsNiArNzI2LDggQEAKIHN0YXRpYyBpbnQgZHdhcmZfcGFyc2VfY2llKHZvaWQgKmVudHJ5LCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCSAgIHVuc2lnbmVkIGNoYXIgKmVuZCwgc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZjaWVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IGR3YXJmX2NpZSAqY2llOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNvdW50OwpAQCAtNzgyLDExICs4MjIsMzAgQEAKIAljaWUtPmluaXRpYWxfaW5zdHJ1Y3Rpb25zID0gcDsKIAljaWUtPmluc3RydWN0aW9uc19lbmQgPSBlbmQ7CiAKLQljaWUtPm1vZCA9IG1vZDsKLQogCS8qIEFkZCB0byBsaXN0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR3YXJmX2NpZV9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmY2llLT5saW5rLCAmZHdhcmZfY2llX2xpc3QpOworCisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9jaWUgKmNpZV90bXA7CisKKwkJY2llX3RtcCA9IHJiX2VudHJ5KCpyYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfY2llLCBub2RlKTsKKworCQlwYXJlbnQgPSAqcmJfbm9kZTsKKworCQlpZiAoY2llLT5jaWVfcG9pbnRlciA8IGNpZV90bXAtPmNpZV9wb2ludGVyKQorCQkJcmJfbm9kZSA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNpZS0+Y2llX3BvaW50ZXIgPj0gY2llX3RtcC0+Y2llX3BvaW50ZXIpCisJCQlyYl9ub2RlID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCVdBUk5fT04oMSk7CisJfQorCisJcmJfbGlua19ub2RlKCZjaWUtPm5vZGUsIHBhcmVudCwgcmJfbm9kZSk7CisJcmJfaW5zZXJ0X2NvbG9yKCZjaWUtPm5vZGUsICZjaWVfcm9vdCk7CisKKwlpZiAobW9kICE9IE5VTEwpCisJCWxpc3RfYWRkX3RhaWwoJmNpZS0+bGluaywgJm1vZC0+YXJjaC5jaWVfbGlzdCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC03OTYsNiArODU1LDggQEAKIAkJCSAgIHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCSAgIHVuc2lnbmVkIGNoYXIgKmVuZCwgc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZmZGVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IGR3YXJmX2ZkZSAqZmRlOwogCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODQzLDExICs5MDQsMzggQEAKIAlmZGUtPmluc3RydWN0aW9ucyA9IHA7CiAJZmRlLT5lbmQgPSBlbmQ7CiAKLQlmZGUtPm1vZCA9IG1vZDsKLQogCS8qIEFkZCB0byBsaXN0LiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJmZkZS0+bGluaywgJmR3YXJmX2ZkZV9saXN0KTsKKworCXdoaWxlICgqcmJfbm9kZSkgeworCQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGVfdG1wOworCQl1bnNpZ25lZCBsb25nIHRtcF9zdGFydCwgdG1wX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCisJCWZkZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2ZkZSwgbm9kZSk7CisKKwkJc3RhcnQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb247CisJCWVuZCA9IGZkZS0+aW5pdGlhbF9sb2NhdGlvbiArIGZkZS0+YWRkcmVzc19yYW5nZTsKKworCQl0bXBfc3RhcnQgPSBmZGVfdG1wLT5pbml0aWFsX2xvY2F0aW9uOworCQl0bXBfZW5kID0gZmRlX3RtcC0+aW5pdGlhbF9sb2NhdGlvbiArIGZkZV90bXAtPmFkZHJlc3NfcmFuZ2U7CisKKwkJcGFyZW50ID0gKnJiX25vZGU7CisKKwkJaWYgKHN0YXJ0IDwgdG1wX3N0YXJ0KQorCQkJcmJfbm9kZSA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHN0YXJ0ID49IHRtcF9lbmQpCisJCQlyYl9ub2RlID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCVdBUk5fT04oMSk7CisJfQorCisJcmJfbGlua19ub2RlKCZmZGUtPm5vZGUsIHBhcmVudCwgcmJfbm9kZSk7CisJcmJfaW5zZXJ0X2NvbG9yKCZmZGUtPm5vZGUsICZmZGVfcm9vdCk7CisKKwlpZiAobW9kICE9IE5VTEwpCisJCWxpc3RfYWRkX3RhaWwoJmZkZS0+bGluaywgJm1vZC0+YXJjaC5mZGVfbGlzdCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC04OTIsMTkgKzk4MCwyOSBAQAogCiBzdGF0aWMgdm9pZCBkd2FyZl91bndpbmRlcl9jbGVhbnVwKHZvaWQpCiB7Ci0Jc3RydWN0IGR3YXJmX2NpZSAqY2llOwotCXN0cnVjdCBkd2FyZl9mZGUgKmZkZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKmZkZV9yYl9ub2RlID0gJmZkZV9yb290LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKipjaWVfcmJfbm9kZSA9ICZjaWVfcm9vdC5yYl9ub2RlOwogCiAJLyoKIAkgKiBEZWFsbG9jYXRlIGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIERXQVJGIHVud2luZGVyLgogCSAqIFRyYXZlcnNlIGFsbCB0aGUgRkRFL0NJRSBsaXN0cyBhbmQgcmVtb3ZlIGFuZCBmcmVlIGFsbCB0aGUKIAkgKiBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRob3NlIGRhdGEgc3RydWN0dXJlcy4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNpZSwgJmR3YXJmX2NpZV9saXN0LCBsaW5rKQotCQlrZnJlZShjaWUpOworCXdoaWxlICgqZmRlX3JiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2ZkZSAqZmRlOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShmZGUsICZkd2FyZl9mZGVfbGlzdCwgbGluaykKKwkJZmRlID0gcmJfZW50cnkoKmZkZV9yYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfZmRlLCBub2RlKTsKKwkJcmJfZXJhc2UoKmZkZV9yYl9ub2RlLCAmZmRlX3Jvb3QpOwogCQlrZnJlZShmZGUpOworCX0KKworCXdoaWxlICgqY2llX3JiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2NpZSAqY2llOworCisJCWNpZSA9IHJiX2VudHJ5KCpjaWVfcmJfbm9kZSwgc3RydWN0IGR3YXJmX2NpZSwgbm9kZSk7CisJCXJiX2VyYXNlKCpjaWVfcmJfbm9kZSwgJmNpZV9yb290KTsKKwkJa2ZyZWUoY2llKTsKKwl9CiAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZHdhcmZfcmVnX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGR3YXJmX2ZyYW1lX2NhY2hlcCk7CkBAIC0xMDA0LDYgKzExMDIsOCBAQAogCiAJLyogRGlkIHdlIGZpbmQgdGhlIC5laF9mcmFtZSBzZWN0aW9uPyAqLwogCWlmIChpICE9IGhkci0+ZV9zaG51bSkgeworCQlJTklUX0xJU1RfSEVBRCgmbWUtPmFyY2guY2llX2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmbWUtPmFyY2guZmRlX2xpc3QpOwogCQllcnIgPSBkd2FyZl9wYXJzZV9zZWN0aW9uKChjaGFyICopc3RhcnQsIChjaGFyICopZW5kLCBtZSk7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gcGFyc2UgRFdBUkYgaW5mb1xuIiwKQEAgLTEwMjQsMzggKzExMjQsMjYgQEAKICAqLwogdm9pZCBtb2R1bGVfZHdhcmZfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0Jc3RydWN0IGR3YXJmX2ZkZSAqZmRlOwotCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKKwlzdHJ1Y3QgZHdhcmZfZmRlICpmZGUsICpmdG1wOworCXN0cnVjdCBkd2FyZl9jaWUgKmNpZSwgKmN0bXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCi1hZ2Fpbl9jaWU6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaWUsICZkd2FyZl9jaWVfbGlzdCwgbGluaykgewotCQlpZiAoY2llLT5tb2QgPT0gbW9kKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCZjaWUtPmxpbmsgIT0gJmR3YXJmX2NpZV9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNpZSwgY3RtcCwgJm1vZC0+YXJjaC5jaWVfbGlzdCwgbGluaykgewogCQlsaXN0X2RlbCgmY2llLT5saW5rKTsKKwkJcmJfZXJhc2UoJmNpZS0+bm9kZSwgJmNpZV9yb290KTsKIAkJa2ZyZWUoY2llKTsKLQkJZ290byBhZ2Fpbl9jaWU7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCi1hZ2Fpbl9mZGU6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShmZGUsICZkd2FyZl9mZGVfbGlzdCwgbGluaykgewotCQlpZiAoZmRlLT5tb2QgPT0gbW9kKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCZmZGUtPmxpbmsgIT0gJmR3YXJmX2ZkZV9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZkZSwgZnRtcCwgJm1vZC0+YXJjaC5mZGVfbGlzdCwgbGluaykgewogCQlsaXN0X2RlbCgmZmRlLT5saW5rKTsKKwkJcmJfZXJhc2UoJmZkZS0+bm9kZSwgJmZkZV9yb290KTsKIAkJa2ZyZWUoZmRlKTsKLQkJZ290byBhZ2Fpbl9mZGU7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfZmRlX2xvY2ssIGZsYWdzKTsKQEAgLTEwNzQsOCArMTE2Miw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBkd2FyZl91bndpbmRlcl9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKLQlJTklUX0xJU1RfSEVBRCgmZHdhcmZfY2llX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZkd2FyZl9mZGVfbGlzdCk7CiAKIAlkd2FyZl9mcmFtZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZHdhcmZfZnJhbWVzIiwKIAkJCXNpemVvZihzdHJ1Y3QgZHdhcmZfZnJhbWUpLCAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhiYjUwYy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYQotICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3ICBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+Ci0KLS8qCi0gKglQcmludCBhIHN0cmluZyB0aHJvdWdoIHRoZSBCSU9TCi0gKi8KLXN0YXRpYyB2b2lkIHNoX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLAotCQkJCSB1bnNpZ25lZCBjb3VudCkKLXsKLQlzaF9iaW9zX2NvbnNvbGVfd3JpdGUocywgY291bnQpOwotfQotCi0vKgotICoJU2V0dXAgaW5pdGlhbCBiYXVkL2JpdHMvcGFyaXR5LiBXZSBkbyB0d28gdGhpbmdzIGhlcmU6Ci0gKgktIGNvbnN0cnVjdCBhIGNmbGFnIHNldHRpbmcgZm9yIHRoZSBmaXJzdCByc19vcGVuKCkKLSAqCS0gaW5pdGlhbGl6ZSB0aGUgc2VyaWFsIHBvcnQKLSAqCVJldHVybiBub24temVybyBpZiB3ZSBkaWRuJ3QgZmluZCBhIHNlcmlhbCBwb3J0LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBzaF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKLXsKLQlpbnQJY2ZsYWcgPSBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCi0JLyoKLQkgKglOb3cgY29uc3RydWN0IGEgY2ZsYWcgc2V0dGluZy4KLQkgKglUT0RPOiB0aGlzIGlzIGEgdG90YWxseSBib2d1cyBjZmxhZywgYXMgd2UgaGF2ZQotCSAqCW5vIGlkZWEgd2hhdCBzZXJpYWwgc2V0dGluZ3MgdGhlIEJJT1MgaXMgdXNpbmcsIG9yCi0JICoJZXZlbiBpZiBpdHMgdXNpbmcgdGhlIHNlcmlhbCBwb3J0IGF0IGFsbC4KLQkgKi8KLQljZmxhZyB8PSBCMTE1MjAwIHwgQ1M4IHwgLypubyBwYXJpdHkqLzA7Ci0KLQljby0+Y2ZsYWcgPSBjZmxhZzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgYmlvc19jb25zb2xlID0gewotCS5uYW1lCQk9ICJiaW9zIiwKLQkud3JpdGUJCT0gc2hfY29uc29sZV93cml0ZSwKLQkuc2V0dXAJCT0gc2hfY29uc29sZV9zZXR1cCwKLQkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAotCS5pbmRleAkJPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSAqZWFybHlfY29uc29sZTsKLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKmJ1ZikKLXsKLQlpbnQga2VlcF9lYXJseSA9IDA7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc3Ryc3RyKGJ1ZiwgImtlZXAiKSkKLQkJa2VlcF9lYXJseSA9IDE7Ci0KLQlpZiAoIXN0cm5jbXAoYnVmLCAiYmlvcyIsIDQpKQotCQllYXJseV9jb25zb2xlID0gJmJpb3NfY29uc29sZTsKLQotCWlmIChsaWtlbHkoZWFybHlfY29uc29sZSkpIHsKLQkJaWYgKGtlZXBfZWFybHkpCi0JCQllYXJseV9jb25zb2xlLT5mbGFncyAmPSB+Q09OX0JPT1Q7Ci0JCWVsc2UKLQkJCWVhcmx5X2NvbnNvbGUtPmZsYWdzIHw9IENPTl9CT09UOwotCQlyZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOwotCX0KLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImVhcmx5cHJpbnRrIiwgc2V0dXBfZWFybHlfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggZjBhYmQ1OC4uMmIxNWFlNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTcwLDggKzcwLDE0IEBACiAJQ0ZJX1NUQVJUUFJPQyBzaW1wbGUKIAlDRklfREVGX0NGQSByMTQsIDAKIAlDRklfUkVMX09GRlNFVCAxNywgNjQKLQlDRklfUkVMX09GRlNFVCAxNSwgMAorCUNGSV9SRUxfT0ZGU0VUIDE1LCA2MAogCUNGSV9SRUxfT0ZGU0VUIDE0LCA1NgorCUNGSV9SRUxfT0ZGU0VUIDEzLCA1MgorCUNGSV9SRUxfT0ZGU0VUIDEyLCA0OAorCUNGSV9SRUxfT0ZGU0VUIDExLCA0NAorCUNGSV9SRUxfT0ZGU0VUIDEwLCA0MAorCUNGSV9SRUxfT0ZGU0VUIDksIDM2CisJQ0ZJX1JFTF9PRkZTRVQgOCwgMzIKIAlwcmVlbXB0X3N0b3AoKQogRU5UUlkocmV0X2Zyb21faXJxKQogCSEKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYTQ4Y2RlZC4uMzBlMTMxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKQEAgLTM5OSwxMiArMzk5LDMgQEAKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnN5c19jYWxsX3RhYmxlOwotCi11bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW25yXTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NZU0NBTExTICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3NoL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggMTE1MWVjZC4uZmUwYjc0MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvc2gva2VybmVsL2hlYWRfMzIuUwpAQCAtMyw2ICszLDcgQEAKICAqICBhcmNoL3NoL2tlcm5lbC9oZWFkLlMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EgJiBLYXogS29qaW1hCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTMsNiArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+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+dV9mcHZhbGlkKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCmluZGV4IDg3M2ViZGMuLjVmZDY0NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCkBAIC04OCw3ICs4OCw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCXRtcCA9ICgobG9uZyAqKSZ0YXNrLT50aHJlYWQuZnB1KVthZGRyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKwl0bXAgPSAoKGxvbmcgKil0YXNrLT50aHJlYWQueHN0YXRlKVthZGRyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKIAlyZXR1cm4gdG1wOwogfQogCkBAIC0xMTQsOCArMTE0LDcgQEAKIAlyZWdzID0gKHN0cnVjdCBwdF9yZWdzKikoKHVuc2lnbmVkIGNoYXIgKil0YXNrICsgVEhSRUFEX1NJWkUpIC0gMTsKIAogCWlmICghdHNrX3VzZWRfbWF0aCh0YXNrKSkgewotCQlmcGluaXQoJnRhc2stPnRocmVhZC5mcHUuaGFyZCk7Ci0JCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXNrKTsKKwkJaW5pdF9mcHUodGFzayk7CiAJfSBlbHNlIGlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoID09IHRhc2spIHsKIAkJZW5hYmxlX2ZwdSgpOwogCQlzYXZlX2ZwdSh0YXNrKTsKQEAgLTEyNCw3ICsxMjMsNyBAQAogCQlyZWdzLT5zciB8PSBTUl9GRDsKIAl9CiAKLQkoKGxvbmcgKikmdGFzay0+dGhyZWFkLmZwdSlbYWRkciAvIHNpemVvZih1bnNpZ25lZCBsb25nKV0gPSBkYXRhOworCSgobG9uZyAqKXRhc2stPnRocmVhZC54c3RhdGUpW2FkZHIgLyBzaXplb2YodW5zaWduZWQgbG9uZyldID0gZGF0YTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMzLDYgKzEzMiw4IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBjaGlsZC0+dGhyZWFkLnVyZWdzOwogCiAJcmVncy0+c3IgfD0gU1JfU1NURVA7CS8qIGF1dG8tcmVzZXR0aW5nIHVwb24gZXhjZXB0aW9uICovCisKKwlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU0lOR0xFU1RFUCk7CiB9CiAKIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCkBAIC0xNDAsNiArMTQxLDggQEAKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGNoaWxkLT50aHJlYWQudXJlZ3M7CiAKIAlyZWdzLT5zciAmPSB+U1JfU1NURVA7CisKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKIH0KIAogc3RhdGljIGludCBnZW5yZWdzX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKQEAgLTIyMiw3ICsyMjUsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJICAgJnRhcmdldC0+dGhyZWFkLmZwdS5oYXJkLCAwLCAtMSk7CisJCQkJICAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgMCwgLTEpOwogfQogCiBzdGF0aWMgaW50IGZwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCkBAIC0yMzksNyArMjQyLDcgQEAKIAlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFyZ2V0KTsKIAogCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKwkJCQkgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsIDAsIC0xKTsKIH0KIAogc3RhdGljIGludCBmcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LApAQCAtNDU0LDYgKzQ1Nyw4IEBACiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCWludCBzdGVwOworCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQogCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+cmVnc1s5XSksCiAJCQkJICAgcmVncy0+cmVnc1s5XSk7CkBAIC00NjEsOCArNDY2LDkgQEAKIAlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSkpCiAJCXRyYWNlX3N5c19leGl0KHJlZ3MsIHJlZ3MtPnJlZ3NbOV0pOwogCi0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQotCQl0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAwKTsKKwlzdGVwID0gdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCk7CisJaWYgKHN0ZXAgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCXRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIHN0ZXApOwogfQogCiAvKiBDYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCkBAIC00NzksOSArNDg1LDEwIEBACiB9CiAKIC8qIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLWFzbWxpbmthZ2Ugdm9pZCBkb19zb2Z0d2FyZV9icmVha19wb2ludCh1bnNpZ25lZCBsb25nIGxvbmcgdmVjLAotCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK0JVSUxEX1RSQVBfSEFORExFUihicmVha3BvaW50KQogeworCVRSQVBfSEFORExFUl9ERUNMOworCiAJLyogV2UgbmVlZCB0byBmb3J3YXJkIHN0ZXAgdGhlIFBDLCB0byBjb3VudGVyYWN0IHRoZSBiYWNrc3RlcCBkb25lCiAJICAgaW4gc2lnbmFsLmMuICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcmVib290LmMgYi9hcmNoL3NoL2tlcm5lbC9yZWJvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZjYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvcmVib290LmMKQEAgLTAsMCArMSw5OCBAQAorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyNpbmNsdWRlIDxhc20vd2F0Y2hkb2cuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCit2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKK0VYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorc3RhdGljIHZvaWQgd2F0Y2hkb2dfdHJpZ2dlcl9pbW1lZGlhdGUodm9pZCkKK3sKKwlzaF93ZHRfd3JpdGVfY250KDB4RkYpOworCXNoX3dkdF93cml0ZV9jc3IoMHhDMik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbmF0aXZlX21hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qIEFkZHJlc3MgZXJyb3Igd2l0aCBTUi5CTD0xIGZpcnN0LiAqLworCXRyaWdnZXJfYWRkcmVzc19lcnJvcigpOworCisjaWZkZWYgQ09ORklHX1NVUEVSSDMyCisJLyogSWYgdGhhdCBmYWlscyBvciBpcyB1bnN1cHBvcnRlZCwgZ28gZm9yIHRoZSB3YXRjaGRvZyBuZXh0LiAqLworCXdhdGNoZG9nX3RyaWdnZXJfaW1tZWRpYXRlKCk7CisjZW5kaWYKKworCS8qCisJICogR2l2ZSB1cCBhbmQgc2xlZXAuCisJICovCisJd2hpbGUgKDEpCisJCWNwdV9zbGVlcCgpOworfQorCitzdGF0aWMgdm9pZCBuYXRpdmVfbWFjaGluZV9zaHV0ZG93bih2b2lkKQoreworCXNtcF9zZW5kX3N0b3AoKTsKK30KKworc3RhdGljIHZvaWQgbmF0aXZlX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJaWYgKHBtX3Bvd2VyX29mZikKKwkJcG1fcG93ZXJfb2ZmKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hdGl2ZV9tYWNoaW5lX2hhbHQodm9pZCkKK3sKKwkvKiBzdG9wIG90aGVyIGNwdXMgKi8KKwltYWNoaW5lX3NodXRkb3duKCk7CisKKwkvKiBzdG9wIHRoaXMgY3B1ICovCisJc3RvcF90aGlzX2NwdShOVUxMKTsKK30KKworc3RydWN0IG1hY2hpbmVfb3BzIG1hY2hpbmVfb3BzID0geworCS5wb3dlcl9vZmYJPSBuYXRpdmVfbWFjaGluZV9wb3dlcl9vZmYsCisJLnNodXRkb3duCT0gbmF0aXZlX21hY2hpbmVfc2h1dGRvd24sCisJLnJlc3RhcnQJPSBuYXRpdmVfbWFjaGluZV9yZXN0YXJ0LAorCS5oYWx0CQk9IG5hdGl2ZV9tYWNoaW5lX2hhbHQsCisjaWZkZWYgQ09ORklHX0tFWEVDCisJLmNyYXNoX3NodXRkb3duID0gbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24sCisjZW5kaWYKK307CisKK3ZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKK3sKKwltYWNoaW5lX29wcy5wb3dlcl9vZmYoKTsKK30KKwordm9pZCBtYWNoaW5lX3NodXRkb3duKHZvaWQpCit7CisJbWFjaGluZV9vcHMuc2h1dGRvd24oKTsKK30KKwordm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQoreworCW1hY2hpbmVfb3BzLnJlc3RhcnQoY21kKTsKK30KKwordm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKK3sKKwltYWNoaW5lX29wcy5oYWx0KCk7Cit9CisKKyNpZmRlZiBDT05GSUdfS0VYRUMKK3ZvaWQgbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwltYWNoaW5lX29wcy5jcmFzaF9zaHV0ZG93bihyZWdzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggOGIwZTY5Ny4uMzQ1OWU3MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC00MjEsNiArNDIxLDggQEAKIAogCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CiAKKwl1bmNhY2hlZF9pbml0KCk7CisKIAlwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCgpOwogCiAJLyogTGV0IGVhcmx5cHJpbnRrIG91dHB1dCBlYXJseSBjb25zb2xlIG1lc3NhZ2VzICovCkBAIC00NDksMTcgKzQ1MSwxNSBAQAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CiAjZW5kaWYKKwlwYWdpbmdfaW5pdCgpOworCXBtYl9pbml0KCk7CisKKwlpb3JlbWFwX2ZpeGVkX2luaXQoKTsKIAogCS8qIFBlcmZvcm0gdGhlIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gKi8KIAlpZiAobGlrZWx5KHNoX212Lm12X3NldHVwKSkKIAkJc2hfbXYubXZfc2V0dXAoY21kbGluZV9wKTsKIAotCXBhZ2luZ19pbml0KCk7Ci0KLSNpZmRlZiBDT05GSUdfUE1CX0VOQUJMRQotCXBtYl9pbml0KCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TTVAKIAlwbGF0X3NtcF9zZXR1cCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMKaW5kZXggYzg1MmY3OC4uNDc0NzVjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfYmlvcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2Jpb3MuYwpAQCAtMSwxOSArMSwzMCBAQAogLyoKLSAqICBsaW51eC9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMKICAqICBDIGludGVyZmFjZSBmb3IgdHJhcHBpbmcgaW50byB0aGUgc3RhbmRhcmQgTGludXhTSCBCSU9TLgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR3JlZyBCYW5rcywgTWl0Y2ggRGF2aXMKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYQorICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDEwICBQYXVsIE11bmR0CiAgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgogCiAjZGVmaW5lIEJJT1NfQ0FMTF9DT05TT0xFX1dSSVRFCQkwCiAjZGVmaW5lIEJJT1NfQ0FMTF9FVEhfTk9ERV9BRERSCQkxMAogI2RlZmluZSBCSU9TX0NBTExfU0hVVERPV04JCTExCi0jZGVmaW5lIEJJT1NfQ0FMTF9DSEFSX09VVAkJMHgxZgkvKiBUT0RPOiBoYWNrICovCiAjZGVmaW5lIEJJT1NfQ0FMTF9HREJfREVUQUNICQkweGZmCiAKK3ZvaWQgKmdkYl92YnJfdmVjdG9yID0gTlVMTDsKKwogc3RhdGljIGlubGluZSBsb25nIHNoX2Jpb3NfY2FsbChsb25nIGZ1bmMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCiAJCQkJICAgIGxvbmcgYXJnMykKIHsKQEAgLTIzLDYgKzM0LDkgQEAKIAlyZWdpc3RlciBsb25nIHI2IF9fYXNtX18oInI2IikgPSBhcmcyOwogCXJlZ2lzdGVyIGxvbmcgcjcgX19hc21fXygicjciKSA9IGFyZzM7CiAKKwlpZiAoIWdkYl92YnJfdmVjdG9yKQorCQlyZXR1cm4gLUVOT1NZUzsKKwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJ0cmFwYQkjMHgzZiI6Ij16IihyMCkKIAkJCSAgICAgOiIwIihyMCksICJyIihyNCksICJyIihyNSksICJyIihyNiksICJyIihyNykKIAkJCSAgICAgOiJtZW1vcnkiKTsKQEAgLTM0LDExICs0OCw2IEBACiAJc2hfYmlvc19jYWxsKEJJT1NfQ0FMTF9DT05TT0xFX1dSSVRFLCAobG9uZylidWYsIChsb25nKWxlbiwgMCwgMCk7CiB9CiAKLXZvaWQgc2hfYmlvc19jaGFyX291dChjaGFyIGNoKQotewotCXNoX2Jpb3NfY2FsbChCSU9TX0NBTExfQ0hBUl9PVVQsIGNoLCAwLCAwLCAwKTsKLX0KLQogdm9pZCBzaF9iaW9zX2dkYl9kZXRhY2godm9pZCkKIHsKIAlzaF9iaW9zX2NhbGwoQklPU19DQUxMX0dEQl9ERVRBQ0gsIDAsIDAsIDAsIDApOwpAQCAtNTUsMyArNjQsMTA5IEBACiB7CiAJc2hfYmlvc19jYWxsKEJJT1NfQ0FMTF9TSFVURE9XTiwgaG93LCAwLCAwLCAwKTsKIH0KKworLyoKKyAqIFJlYWQgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgVkJSIHJlZ2lzdGVyIHRvIGluaXRpYWxpc2UgdGhlIHZlY3RvcgorICogdGhyb3VnaCB3aGljaCBkZWJ1ZyBhbmQgQklPUyB0cmFwcyBhcmUgZGVsZWdhdGVkIGJ5IHRoZSBMaW51eCB0cmFwCisgKiBoYW5kbGVyLgorICovCit2b2lkIHNoX2Jpb3NfdmJyX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZicjsKKworCWlmICh1bmxpa2VseShnZGJfdmJyX3ZlY3RvcikpCisJCXJldHVybjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RjIHZiciwgJTAiIDogIj1yIiAodmJyKSk7CisKKwlpZiAodmJyKSB7CisJCWdkYl92YnJfdmVjdG9yID0gKHZvaWQgKikodmJyICsgMHgxMDApOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNldHRpbmcgR0RCIHRyYXAgdmVjdG9yIHRvICVwXG4iLAorCQkgICAgICAgZ2RiX3Zicl92ZWN0b3IpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNILUJJT1Mgbm90IGRldGVjdGVkXG4iKTsKK30KKworLyoqCisgKiBzaF9iaW9zX3Zicl9yZWxvYWQgLSBSZS1sb2FkIHRoZSBzeXN0ZW0gVkJSIGZyb20gdGhlIEJJT1MgdmVjdG9yLgorICoKKyAqIFRoaXMgY2FuIGJlIHVzZWQgYnkgc2F2ZS9yZXN0b3JlIGNvZGUgdG8gcmVpbml0aWFsaXplIHRoZSBzeXN0ZW0gVkJSCisgKiBmcm9tIHRoZSBmaXhlZCBCSU9TIFZCUi4gQSBuby1vcCBpZiBubyBCSU9TIFZCUiBpcyBrbm93bi4KKyAqLwordm9pZCBzaF9iaW9zX3Zicl9yZWxvYWQodm9pZCkKK3sKKwlpZiAoZ2RiX3Zicl92ZWN0b3IpCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSJsZGMgJTAsIHZiciIKKwkJCToKKwkJCTogInIiICgoKHVuc2lnbmVkIGxvbmcpIGdkYl92YnJfdmVjdG9yKSAtIDB4MTAwKQorCQkJOiAibWVtb3J5IgorCQkpOworfQorCisvKgorICoJUHJpbnQgYSBzdHJpbmcgdGhyb3VnaCB0aGUgQklPUworICovCitzdGF0aWMgdm9pZCBzaF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKwkJCQkgdW5zaWduZWQgY291bnQpCit7CisJc2hfYmlvc19jb25zb2xlX3dyaXRlKHMsIGNvdW50KTsKK30KKworLyoKKyAqCVNldHVwIGluaXRpYWwgYmF1ZC9iaXRzL3Bhcml0eS4gV2UgZG8gdHdvIHRoaW5ncyBoZXJlOgorICoJLSBjb25zdHJ1Y3QgYSBjZmxhZyBzZXR0aW5nIGZvciB0aGUgZmlyc3QgcnNfb3BlbigpCisgKgktIGluaXRpYWxpemUgdGhlIHNlcmlhbCBwb3J0CisgKglSZXR1cm4gbm9uLXplcm8gaWYgd2UgZGlkbid0IGZpbmQgYSBzZXJpYWwgcG9ydC4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2hfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJaW50CWNmbGFnID0gQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKworCS8qCisJICoJTm93IGNvbnN0cnVjdCBhIGNmbGFnIHNldHRpbmcuCisJICoJVE9ETzogdGhpcyBpcyBhIHRvdGFsbHkgYm9ndXMgY2ZsYWcsIGFzIHdlIGhhdmUKKwkgKglubyBpZGVhIHdoYXQgc2VyaWFsIHNldHRpbmdzIHRoZSBCSU9TIGlzIHVzaW5nLCBvcgorCSAqCWV2ZW4gaWYgaXRzIHVzaW5nIHRoZSBzZXJpYWwgcG9ydCBhdCBhbGwuCisJICovCisJY2ZsYWcgfD0gQjExNTIwMCB8IENTOCB8IC8qbm8gcGFyaXR5Ki8wOworCisJY28tPmNmbGFnID0gY2ZsYWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIGJpb3NfY29uc29sZSA9IHsKKwkubmFtZQkJPSAiYmlvcyIsCisJLndyaXRlCQk9IHNoX2NvbnNvbGVfd3JpdGUsCisJLnNldHVwCQk9IHNoX2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXgJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGU7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICpidWYpCit7CisJaW50IGtlZXBfZWFybHkgPSAwOworCisJaWYgKCFidWYpCisJCXJldHVybiAwOworCisJaWYgKHN0cnN0cihidWYsICJrZWVwIikpCisJCWtlZXBfZWFybHkgPSAxOworCisJaWYgKCFzdHJuY21wKGJ1ZiwgImJpb3MiLCA0KSkKKwkJZWFybHlfY29uc29sZSA9ICZiaW9zX2NvbnNvbGU7CisKKwlpZiAobGlrZWx5KGVhcmx5X2NvbnNvbGUpKSB7CisJCWlmIChrZWVwX2Vhcmx5KQorCQkJZWFybHlfY29uc29sZS0+ZmxhZ3MgJj0gfkNPTl9CT09UOworCQllbHNlCisJCQllYXJseV9jb25zb2xlLT5mbGFncyB8PSBDT05fQk9PVDsKKwkJcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJlYXJseXByaW50ayIsIHNldHVwX2Vhcmx5X3ByaW50ayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDEyODE1Y2UuLjU3OWNkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlzZXRfdXNlZF9tYXRoKCk7Ci0JcmV0dXJuIF9fY29weV9mcm9tX3VzZXIoJnRzay0+dGhyZWFkLmZwdS5oYXJkLCAmc2MtPnNjX2ZwcmVnc1swXSwKKwlyZXR1cm4gX19jb3B5X2Zyb21fdXNlcigmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAmc2MtPnNjX2ZwcmVnc1swXSwKIAkJCQlzaXplb2YobG9uZykqKDE2KjIrMikpOwogfQogCkBAIC0xNzUsNyArMTc1LDcgQEAKIAljbGVhcl91c2VkX21hdGgoKTsKIAogCXVubGF6eV9mcHUodHNrLCByZWdzKTsKLQlyZXR1cm4gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsCiAJCQkgICAgICBzaXplb2YobG9uZykqKDE2KjIrMikpOwogfQogI2VuZGlmIC8qIENPTkZJR19TSF9GUFUgKi8KQEAgLTUyOCw3ICs1MjgsNyBAQAogCQkvKiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKIAkJCXJlZ3MtPnJlZ3NbMF0gPSBzYXZlX3IwOwotCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShjdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAJCQlicmVhazsKIAl9CiB9CkBAIC02MjYsOSArNjI2LDkgQEAKIAkJICAgIHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUU1lTIHx8CiAJCSAgICByZWdzLT5yZWdzWzBdID09IC1FUkVTVEFSVE5PSU5UUikgewogCQkJcmVncy0+cmVnc1swXSA9IHNhdmVfcjA7Ci0JCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShfX3Jhd19yZWFkdyhyZWdzLT5wYyAtIDQpKTsKIAkJfSBlbHNlIGlmIChyZWdzLT5yZWdzWzBdID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKLQkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKF9fcmF3X3JlYWR3KHJlZ3MtPnBjIC0gNCkpOwogCQkJcmVncy0+cmVnc1szXSA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCBjZTc2ZGJkLi41YTlmMWYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtMTE4LDcgKzExOCw5IEBACiAJCQkgKiBjbGVhciB0aGUgVFNfUkVTVE9SRV9TSUdNQVNLIGZsYWcuCiAJCQkgKi8KIAkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19SRVNUT1JFX1NJR01BU0s7Ci0JCQl0cmFjZWhvb2tfc2lnbmFsX2hhbmRsZXIoc2lnbnIsICZpbmZvLCAma2EsIHJlZ3MsIDApOworCisJCQl0cmFjZWhvb2tfc2lnbmFsX2hhbmRsZXIoc2lnbnIsICZpbmZvLCAma2EsIHJlZ3MsCisJCQkJCXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQpAQCAtMjk1LDcgKzI5Nyw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQsICZzYy0+c2NfZnByZWdzWzBdLAorCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAmc2MtPnNjX2ZwcmVnc1swXSwKIAkJCQkoc2l6ZW9mKGxvbmcgbG9uZykgKiAzMikgKyAoc2l6ZW9mKGludCkgKiAxKSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzIwLDcgKzMyMiw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmc2MtPnNjX2ZwcmVnc1swXSwgJmN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZCwKKwllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LAogCQkJICAgICAgKHNpemVvZihsb25nIGxvbmcpICogMzIpICsgKHNpemVvZihpbnQpICogMSkpOwogCWNsZWFyX3VzZWRfbWF0aCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDk4M2UwNzkuLmUxMjRjZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0xNjEsMTUgKzE2MSw2IEBACiAJcGxhdF9zZW5kX2lwaShjcHUsIFNNUF9NU0dfUkVTQ0hFRFVMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3BfdGhpc19jcHUodm9pZCAqdW51c2VkKQotewotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JZm9yICg7OykKLQkJY3B1X3JlbGF4KCk7Ci19Ci0KIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQogewogCXNtcF9jYWxsX2Z1bmN0aW9uKHN0b3BfdGhpc19jcHUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKaW5kZXggN2IwMzYzMy4uMDgzMGMyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCkBAIC01OCw3ICs1OCw3IEBACiAJVFJBUF9IQU5ETEVSX0RFQ0w7CiAKIAkvKiBSZXdpbmQgKi8KLQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+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+PiBNTVVDUl9VUkJfU0hJRlQ7CisJc3RhdHVzICY9IH5NTVVDUl9VUkI7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSdyZSBub3QgdHJ5aW5nIHRvIHVud2lyZSBhIFRMQiBlbnRyeSB3aGVuIG5vbmUKKwkgKiBoYXZlIGJlZW4gd2lyZWQuCisJICovCisJQlVHX09OKHVyYisrID09IE1NVUNSX1VSQl9ORU5UUklFUyk7CisKKwl1cmIgPSB1cmIgJSBNTVVDUl9VUkJfTkVOVFJJRVM7CisKKwlzdGF0dXMgfD0gKHVyYiA8PCBNTVVDUl9VUkJfU0hJRlQpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIE1NVUNSKTsKKwljdHJsX2JhcnJpZXIoKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfMzIuYyBiL2FyY2gvc2gvbW0vdGxiZmx1c2hfMzIuYwppbmRleCA2ZjQ1YzFmLi4wMDRiYjNmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYmZsdXNoXzMyLmMKKysrIGIvYXJjaC9zaC9tbS90bGJmbHVzaF8zMi5jCkBAIC0xMzIsOSArMTMyLDkgQEAKIAkgKiAgICAgIEl0J3Mgc2FtZSBwb3NpdGlvbiwgYml0ICMyLgogCSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlzdGF0dXMgPSBjdHJsX2lubChNTVVDUik7CisJc3RhdHVzID0gX19yYXdfcmVhZGwoTU1VQ1IpOwogCXN0YXR1cyB8PSAweDA0OwotCWN0cmxfb3V0bChzdGF0dXMsIE1NVUNSKTsKKwlfX3Jhd193cml0ZWwoc3RhdHVzLCBNTVVDUik7CiAJY3RybF9iYXJyaWVyKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jIGIvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCmluZGV4IGRlMGIwZTguLjcwNmRhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYworKysgYi9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHByaW50X3Byb3RzKHBncHJvdF90IHByb3QpCiB7Ci0JcHJpbnRrKCJwcm90IGlzIDB4JTA4bHhcbiIscGdwcm90X3ZhbChwcm90KSk7CisJcHJpbnRrKCJwcm90IGlzIDB4JTAxNmxseFxuIixwZ3Byb3RfdmFsKHByb3QpKTsKIAogCXByaW50aygiJXMgJXMgJXMgJXMgJXNcbiIsUFBST1QoX1BBR0VfU0hBUkVEKSxQUFJPVChfUEFHRV9SRUFEKSwKIAkgICAgICAgUFBST1QoX1BBR0VfRVhFQ1VURSksUFBST1QoX1BBR0VfV1JJVEUpLFBQUk9UKF9QQUdFX1VTRVIpKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdW5jYWNoZWQuYyBiL2FyY2gvc2gvbW0vdW5jYWNoZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjIwYTVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS91bmNhY2hlZC5jCkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgdW5jYWNoZWQgc2VjdGlvbiBmcm9tIGl0cyBjYWNoZWQgYWxpYXMuCisgKgorICogTGVnYWN5IHBsYXRmb3JtcyBoYW5kbGUgdHJpdmlhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNhY2hlZCBhbmQKKyAqIHVuY2FjaGVkIHNlZ21lbnRzIGJ5IG1ha2luZyB1c2Ugb2YgdGhlIDE6MSBtYXBwaW5nIHJlbGF0aW9uc2hpcCBpbgorICogNTEyTUIgbG93bWVtLCBvdGhlcnMgdmlhIGEgc3BlY2lhbCB1bmNhY2hlZCBtYXBwaW5nLgorICoKKyAqIERlZmF1bHQgdmFsdWUgb25seSB2YWxpZCBpbiAyOSBiaXQgbW9kZSwgaW4gMzJiaXQgbW9kZSB0aGlzIHdpbGwgYmUKKyAqIHVwZGF0ZWQgYnkgdGhlIGVhcmx5IFBNQiBpbml0aWFsaXphdGlvbiBjb2RlLgorICovCit1bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZCA9IFNaXzUxMk07Cit1bnNpZ25lZCBsb25nIHVuY2FjaGVkX3NpemUgPSBTWl81MTJNOwordW5zaWduZWQgbG9uZyB1bmNhY2hlZF9zdGFydCwgdW5jYWNoZWRfZW5kOworCitpbnQgdmlydF9hZGRyX3VuY2FjaGVkKHVuc2lnbmVkIGxvbmcga2FkZHIpCit7CisJcmV0dXJuIChrYWRkciA+PSB1bmNhY2hlZF9zdGFydCkgJiYgKGthZGRyIDwgdW5jYWNoZWRfZW5kKTsKK30KKwordm9pZCBfX2luaXQgdW5jYWNoZWRfaW5pdCh2b2lkKQoreworCXVuY2FjaGVkX3N0YXJ0ID0gbWVtb3J5X2VuZDsKKwl1bmNhY2hlZF9lbmQgPSB1bmNhY2hlZF9zdGFydCArIHVuY2FjaGVkX3NpemU7Cit9CisKK3ZvaWQgX19pbml0IHVuY2FjaGVkX3Jlc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5jYWNoZWRfc2l6ZSA9IHNpemU7CisJdW5jYWNoZWRfZW5kID0gdW5jYWNoZWRfc3RhcnQgKyB1bmNhY2hlZF9zaXplOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDY2MzliMjUuLmIyNWFhNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTMyLDYgKzMyLDcgQEAKIFNOQVBHRUFSCQlTSF9TRUNVUkVFREdFNTQxMAogRURPU0s3NzA1CQlTSF9FRE9TSzc3MDUKIEVET1NLNzc2MAkJU0hfRURPU0s3NzYwCitTREs3Nzg2CQkJU0hfU0RLNzc4NgogU0g0MjAyX01JQ1JPREVWCQlTSF9TSDQyMDJfTUlDUk9ERVYKIFNIMDMJCQlTSF9TSDAzCiBMQU5ESVNLCQkJU0hfTEFORElTSwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zdGF0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXQuaAppbmRleCA1NWRiNWVjLi4zOTMyN2Q2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXQuaApAQCAtNTMsOCArNTMsOCBAQAogCWlub190CQlzdF9pbm87CiAJbW9kZV90CQlzdF9tb2RlOwogCXNob3J0CQlzdF9ubGluazsKLQl1aWRfdAkJc3RfdWlkOwotCWdpZF90CQlzdF9naWQ7CisJdWlkMTZfdAkJc3RfdWlkOworCWdpZDE2X3QJCXN0X2dpZDsKIAl1bnNpZ25lZCBzaG9ydAlzdF9yZGV2OwogCW9mZl90CQlzdF9zaXplOwogCXRpbWVfdAkJc3RfYXRpbWU7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDc0ODZjNjAuLjAyNWEwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC01LDYgKzUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAorLyoKKyAqIFRoZSBzeXNjYWxsIHRhYmxlIGFsd2F5cyBjb250YWlucyAzMiBiaXQgcG9pbnRlcnMgc2luY2Ugd2Uga25vdyB0aGF0IHRoZQorICogYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlzICh3YXkpIGJlbG93IDRHQi4gIFNvIHRoZSAiaW50IgorICogdHlwZSBoZXJlIGlzIHdoYXQgd2Ugd2FudCBbbmVlZF0gZm9yIGJvdGggMzIgYml0IGFuZCA2NCBiaXQgc3lzdGVtcy4KKyAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBzeXNfY2FsbF90YWJsZVtdOworCiAvKiBUaGUgc3lzdGVtIGNhbGwgbnVtYmVyIGlzIGdpdmVuIGJ5IHRoZSB1c2VyIGluICVnMSAqLwogc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCmluZGV4IGIxNzFhZTguLmIwNjJkZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAogCWN1cl9pbnN0ID0gMDsKIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUoZHAsICJjcHUiKSB7Ci0JCWludCBlcnIgPSBjaGVja19jcHVfbm9kZShkcC0+bm9kZSwgJmN1cl9pbnN0LAorCQlpbnQgZXJyID0gY2hlY2tfY3B1X25vZGUoZHAtPnBoYW5kbGUsICZjdXJfaW5zdCwKIAkJCQkJIGNvbXBhcmUsIGNvbXBhcmVfYXJnLAogCQkJCQkgcHJvbV9ub2RlLCBtaWQpOwogCQlpZiAoIWVycikgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwppbmRleCAyOTk3M2RhLi45MTAzYTU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwpAQCAtOTEsMTQgKzkxLDMgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotCi1leHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc3lzX2NhbGxfdGFibGVbbnJdOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2tzdGFjay5oIGIvYXJjaC9zcGFyYy9rZXJuZWwva3N0YWNrLmgKaW5kZXggNDI0OGQ5Ni4uNTI0NzI4MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwva3N0YWNrLmgKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwva3N0YWNrLmgKQEAgLTExLDYgKzExLDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gKHVuc2lnbmVkIGxvbmcpIHRwOwogCisJLyogU3RhY2sgcG9pbnRlciBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25lZC4gICovCisJaWYgKHNwICYgKDE2VUwgLSAxKSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYgKHNwID49IChiYXNlICsgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfaW5mbykpICYmCiAJICAgIHNwIDw9IChiYXNlICsgVEhSRUFEX1NJWkUgLSBzaXplb2Yoc3RydWN0IHNwYXJjX3N0YWNrZikpKQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKaW5kZXggNGMyNmViNS4uZGE1MjdiMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBzdGF0aWMgaW50IG9mX2J1c19hbWJhcHBfbWF0Y2goc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQlyZXR1cm4gIXN0cmNtcChucC0+bmFtZSwgImFtYmFwcCIpOworCXJldHVybiAhc3RyY21wKG5wLT50eXBlLCAiYW1iYXBwIik7CiB9CiAKIHN0YXRpYyB2b2lkIG9mX2J1c19hbWJhcHBfY291bnRfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwKQEAgLTQzMyw3ICs0MzMsNyBAQAogCWlmICghcGFyZW50KQogCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICJyb290Iik7CiAJZWxzZQotCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICIlMDh4IiwgZHAtPm5vZGUpOworCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICIlMDh4IiwgZHAtPnBoYW5kbGUpOwogCiAJaWYgKG9mX2RldmljZV9yZWdpc3RlcihvcCkpIHsKIAkJcHJpbnRrKCIlczogQ291bGQgbm90IHJlZ2lzdGVyIG9mIGRldmljZS5cbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCmluZGV4IDBhNmYyZDEuLmIzZDRjYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCkBAIC02NzYsNyArNjc2LDcgQEAKIAlpZiAoIXBhcmVudCkKIAkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAicm9vdCIpOwogCWVsc2UKLQkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5ub2RlKTsKKwkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5waGFuZGxlKTsKIAogCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIob3ApKSB7CiAJCXByaW50aygiJXM6IENvdWxkIG5vdCByZWdpc3RlciBvZiBkZXZpY2UuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwppbmRleCA1MzllODNmLi4zN2I2NmM2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwpAQCAtMjQ3LDYgKzI0Nyw3IEBACiAJCQkJCSBzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7CiAJc3RydWN0IGRldl9hcmNoZGF0YSAqc2Q7CisJc3RydWN0IHBjaV9zbG90ICpzbG90OwogCXN0cnVjdCBvZl9kZXZpY2UgKm9wOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJY29uc3QgY2hhciAqdHlwZTsKQEAgLTI4Niw2ICsyODcsMTEgQEAKIAlkZXYtPmRldi5idXMgPSAmcGNpX2J1c190eXBlOwogCWRldi0+ZGV2Zm4gPSBkZXZmbjsKIAlkZXYtPm11bHRpZnVuY3Rpb24gPSAwOwkJLyogbWF5YmUgYSBsaWU/ICovCisJc2V0X3BjaWVfcG9ydF90eXBlKGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZkZXYtPmJ1cy0+c2xvdHMsIGxpc3QpCisJCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSBzbG90LT5udW1iZXIpCisJCQlkZXYtPnNsb3QgPSBzbG90OwogCiAJZGV2LT52ZW5kb3IgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQobm9kZSwgInZlbmRvci1pZCIsIDB4ZmZmZik7CiAJZGV2LT5kZXZpY2UgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQobm9kZSwgImRldmljZS1pZCIsIDB4ZmZmZik7CkBAIC0zMjIsNiArMzI4LDcgQEAKIAogCWRldi0+Y3VycmVudF9zdGF0ZSA9IDQ7CQkvKiB1bmtub3duIHBvd2VyIHN0YXRlICovCiAJZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKKwlkZXYtPmRtYV9tYXNrID0gMHhmZmZmZmZmZjsKIAogCWlmICghc3RyY21wKG5vZGUtPm5hbWUsICJwY2kiKSkgewogCQkvKiBhIFBDSS1QQ0kgYnJpZGdlICovCkBAIC03MTUsOSArNzIyLDEwIEBACiB7CiB9CiAKLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKKwlyZXR1cm4gcmVzLT5zdGFydDsKIH0KIAogaW50IHBjaWJpb3NfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzaykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYwppbmRleCA0ZTI3MjRlLi43NWU4OGMwMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYwpAQCAtNzY4LDkgKzc2OCwxMCBAQAogCXJldHVybiBzdHI7CiB9CiAKLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKKwlyZXR1cm4gcmVzLT5zdGFydDsKIH0KIAogaW50IHBjaWJpb3NfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1hc2spCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggZTg1NjQ1Ni4uOWYyYjJiYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtOTgwLDEwICs5ODAsMTAgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIHZvaWQgZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgY3B1KQorc3RhdGljIHZvaWQgZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOwotCWV2ZW50LT5vbmNwdSA9IGNwdTsKKwlldmVudC0+b25jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGV2ZW50LT5jdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CiAJaWYgKGlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKIAkJZXZlbnQtPnBtdS0+ZW5hYmxlKGV2ZW50KTsKQEAgLTk5MSw3ICs5OTEsNyBAQAogCiBpbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAogCQkJICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJCSAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwgaW50IGNwdSkKKwkJCSAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCXN0cnVjdCBwZXJmX2V2ZW50ICpzdWI7CkBAIC0xMDE1LDEwICsxMDE1LDEwIEBACiAKIAljcHVjdHgtPmFjdGl2ZV9vbmNwdSArPSBuOwogCW4gPSAxOwotCWV2ZW50X3NjaGVkX2luKGdyb3VwX2xlYWRlciwgY3B1KTsKKwlldmVudF9zY2hlZF9pbihncm91cF9sZWFkZXIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CiAJCWlmIChzdWItPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKSB7Ci0JCQlldmVudF9zY2hlZF9pbihzdWIsIGNwdSk7CisJCQlldmVudF9zY2hlZF9pbihzdWIpOwogCQkJbisrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDI4MzBiNDEuLmM0OTg2NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTUyNiw3ICs1MjYsNyBAQAogCQkJICogU2V0IHNvbWUgdmFsaWQgc3RhY2sgZnJhbWVzIHRvIGdpdmUgdG8gdGhlIGNoaWxkLgogCQkJICovCiAJCQljaGlsZHN0YWNrID0gKHN0cnVjdCBzcGFyY19zdGFja2YgX191c2VyICopCi0JCQkJKHNwICYgfjB4N1VMKTsKKwkJCQkoc3AgJiB+MHhmVUwpOwogCQkJcGFyZW50c3RhY2sgPSAoc3RydWN0IHNwYXJjX3N0YWNrZiBfX3VzZXIgKikKIAkJCQlyZWdzLT51X3JlZ3NbVVJFR19GUF07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBjM2YxY2NlLi5jYjcwNDc2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC0zOTgsMTEgKzM5OCwxMSBAQAogCX0gZWxzZQogCQlfX2dldF91c2VyKGZwLCAmKCgoc3RydWN0IHJlZ193aW5kb3czMiBfX3VzZXIgKilwc3ApLT5pbnNbNl0pKTsKIAotCS8qIE5vdyA4LWJ5dGUgYWxpZ24gdGhlIHN0YWNrIGFzIHRoaXMgaXMgbWFuZGF0b3J5IGluIHRoZQotCSAqIFNwYXJjIEFCSSBkdWUgdG8gaG93IHJlZ2lzdGVyIHdpbmRvd3Mgd29yay4gIFRoaXMgaGlkZXMKLQkgKiB0aGUgcmVzdHJpY3Rpb24gZnJvbSB0aHJlYWQgbGlicmFyaWVzIGV0Yy4gIC1EYXZlTQorCS8qIE5vdyBhbGlnbiB0aGUgc3RhY2sgYXMgdGhpcyBpcyBtYW5kYXRvcnkgaW4gdGhlIFNwYXJjIEFCSQorCSAqIGR1ZSB0byBob3cgcmVnaXN0ZXIgd2luZG93cyB3b3JrLiAgVGhpcyBoaWRlcyB0aGUKKwkgKiByZXN0cmljdGlvbiBmcm9tIHRocmVhZCBsaWJyYXJpZXMgZXRjLgogCSAqLwotCWNzcCAmPSB+N1VMOworCWNzcCAmPSB+MTVVTDsKIAogCWRpc3RhbmNlID0gZnAgLSBwc3A7CiAJcnZhbCA9IChjc3AgLSBkaXN0YW5jZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmgKaW5kZXggNDUzMzk3Zi4uYTg1OTFlZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5oCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaApAQCAtNCw5ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KLQogZXh0ZXJuIHZvaWQgKiBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBpcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKaW5kZXggZDgwYTY1ZC4uNTdhYzllMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCkBAIC0zNywxOCArMzcsNiBAQAogY2hhciAqb2ZfY29uc29sZV9vcHRpb25zOwogRVhQT1JUX1NZTUJPTChvZl9jb25zb2xlX29wdGlvbnMpOwogCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKHBoYW5kbGUgaGFuZGxlKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlmb3IgKG5wID0gYWxsbm9kZXM7IG5wOyBucCA9IG5wLT5hbGxuZXh0KQotCQlpZiAobnAtPm5vZGUgPT0gaGFuZGxlKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gbnA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKTsKLQogaW50IG9mX2dldGludHByb3BfZGVmYXVsdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZGVmKQogewogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKQEAgLTg5LDcgKzc3LDcgQEAKIAkJCXZvaWQgKm9sZF92YWwgPSBwcm9wLT52YWx1ZTsKIAkJCWludCByZXQ7CiAKLQkJCXJldCA9IHByb21fc2V0cHJvcChkcC0+bm9kZSwgbmFtZSwgdmFsLCBsZW4pOworCQkJcmV0ID0gcHJvbV9zZXRwcm9wKGRwLT5waGFuZGxlLCBuYW1lLCB2YWwsIGxlbik7CiAKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlpZiAocmV0ID49IDApIHsKQEAgLTIzNiw3ICsyMjQsNyBAQAogCiAJZHAtPm5hbWUgPSBnZXRfb25lX3Byb3BlcnR5KG5vZGUsICJuYW1lIik7CiAJZHAtPnR5cGUgPSBnZXRfb25lX3Byb3BlcnR5KG5vZGUsICJkZXZpY2VfdHlwZSIpOwotCWRwLT5ub2RlID0gbm9kZTsKKwlkcC0+cGhhbmRsZSA9IG5vZGU7CiAKIAlkcC0+cHJvcGVydGllcyA9IGJ1aWxkX3Byb3BfbGlzdChub2RlKTsKIApAQCAtMzEzLDcgKzMwMSw3IEBACiAKIAluZXh0cCA9ICZhbGxub2Rlcy0+YWxsbmV4dDsKIAlhbGxub2Rlcy0+Y2hpbGQgPSBwcm9tX2J1aWxkX3RyZWUoYWxsbm9kZXMsCi0JCQkJCSAgcHJvbV9nZXRjaGlsZChhbGxub2Rlcy0+bm9kZSksCisJCQkJCSAgcHJvbV9nZXRjaGlsZChhbGxub2Rlcy0+cGhhbmRsZSksCiAJCQkJCSAgJm5leHRwKTsKIAlvZl9jb25zb2xlX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggYmE1YjA5YS4uZWEyMmNkMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWwzMi5jCkBAIC0xMjAsOCArMTIwLDggQEAKIH07CiAKIC8qIEFsaWduIG1hY3JvcyAqLwotI2RlZmluZSBTRl9BTElHTkVEU1ogICgoKHNpemVvZihzdHJ1Y3Qgc2lnbmFsX2ZyYW1lMzIpICsgNykgJiAofjcpKSkKLSNkZWZpbmUgUlRfQUxJR05FRFNaICAoKChzaXplb2Yoc3RydWN0IHJ0X3NpZ25hbF9mcmFtZTMyKSArIDcpICYgKH43KSkpCisjZGVmaW5lIFNGX0FMSUdORURTWiAgKCgoc2l6ZW9mKHN0cnVjdCBzaWduYWxfZnJhbWUzMikgKyAxNSkgJiAofjE1KSkpCisjZGVmaW5lIFJUX0FMSUdORURTWiAgKCgoc2l6ZW9mKHN0cnVjdCBydF9zaWduYWxfZnJhbWUzMikgKyAxNSkgJiAofjE1KSkpCiAKIGludCBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp0bywgc2lnaW5mb190ICpmcm9tKQogewpAQCAtNDIwLDE1ICs0MjAsMTcgQEAKIAkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7CiAJfQogCisJc3AgLT0gZnJhbWVzaXplOworCiAJLyogQWx3YXlzIGFsaWduIHRoZSBzdGFjayBmcmFtZS4gIFRoaXMgaGFuZGxlcyB0d28gY2FzZXMuICBGaXJzdCwKIAkgKiBzaWdhbHRzdGFjayBuZWVkIG5vdCBiZSBtaW5kZnVsIG9mIHBsYXRmb3JtIHNwZWNpZmljIHN0YWNrCiAJICogYWxpZ25tZW50LiAgU2Vjb25kLCBpZiB3ZSB0b29rIHRoaXMgc2lnbmFsIGJlY2F1c2UgdGhlIHN0YWNrCiAJICogaXMgbm90IGFsaWduZWQgcHJvcGVybHksIHdlJ2QgbGlrZSB0byB0YWtlIHRoZSBzaWduYWwgY2xlYW5seQogCSAqIGFuZCByZXBvcnQgdGhhdC4KIAkgKi8KLQlzcCAmPSB+N1VMOworCXNwICY9IH4xNVVMOwogCi0JcmV0dXJuICh2b2lkIF9fdXNlciAqKShzcCAtIGZyYW1lc2l6ZSk7CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSBzcDsKIH0KIAogc3RhdGljIGludCBzYXZlX2ZwdV9zdGF0ZTMyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBfX3NpZ2luZm9fZnB1X3QgX191c2VyICpmcHUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDdjZTFhMTAuLjk4ODJkZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0yNjcsMTUgKzI2NywxNyBAQAogCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKIAl9CiAKKwlzcCAtPSBmcmFtZXNpemU7CisKIAkvKiBBbHdheXMgYWxpZ24gdGhlIHN0YWNrIGZyYW1lLiAgVGhpcyBoYW5kbGVzIHR3byBjYXNlcy4gIEZpcnN0LAogCSAqIHNpZ2FsdHN0YWNrIG5lZWQgbm90IGJlIG1pbmRmdWwgb2YgcGxhdGZvcm0gc3BlY2lmaWMgc3RhY2sKIAkgKiBhbGlnbm1lbnQuICBTZWNvbmQsIGlmIHdlIHRvb2sgdGhpcyBzaWduYWwgYmVjYXVzZSB0aGUgc3RhY2sKIAkgKiBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSwgd2UnZCBsaWtlIHRvIHRha2UgdGhlIHNpZ25hbCBjbGVhbmx5CiAJICogYW5kIHJlcG9ydCB0aGF0LgogCSAqLwotCXNwICY9IH43VUw7CisJc3AgJj0gfjE1VUw7CiAKLQlyZXR1cm4gKHZvaWQgX191c2VyICopKHNwIC0gZnJhbWVzaXplKTsKKwlyZXR1cm4gKHZvaWQgX191c2VyICopIHNwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCA2NDdhZmJkLi45ZmE0OGMzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAvKiBDaGVja3MgaWYgdGhlIGZwIGlzIHZhbGlkICovCiBzdGF0aWMgaW50IGludmFsaWRfZnJhbWVfcG9pbnRlcih2b2lkIF9fdXNlciAqZnAsIGludCBmcGxlbikKIHsKLQlpZiAoKCh1bnNpZ25lZCBsb25nKSBmcCkgJiA3KQorCWlmICgoKHVuc2lnbmVkIGxvbmcpIGZwKSAmIDE1KQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM5NiwxNSArMzk2LDE3IEBACiAJCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwogCX0KIAorCXNwIC09IGZyYW1lc2l6ZTsKKwogCS8qIEFsd2F5cyBhbGlnbiB0aGUgc3RhY2sgZnJhbWUuICBUaGlzIGhhbmRsZXMgdHdvIGNhc2VzLiAgRmlyc3QsCiAJICogc2lnYWx0c3RhY2sgbmVlZCBub3QgYmUgbWluZGZ1bCBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBzdGFjawogCSAqIGFsaWdubWVudC4gIFNlY29uZCwgaWYgd2UgdG9vayB0aGlzIHNpZ25hbCBiZWNhdXNlIHRoZSBzdGFjawogCSAqIGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5LCB3ZSdkIGxpa2UgdG8gdGFrZSB0aGUgc2lnbmFsIGNsZWFubHkKIAkgKiBhbmQgcmVwb3J0IHRoYXQuCiAJICovCi0Jc3AgJj0gfjdVTDsKKwlzcCAmPSB+MTVVTDsKIAotCXJldHVybiAodm9pZCBfX3VzZXIgKikoc3AgLSBmcmFtZXNpemUpOworCXJldHVybiAodm9pZCBfX3VzZXIgKikgc3A7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCBhYTM2MjIzLi5lYjE0ODQ0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJfSBlbHNlIHsKIAkJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9mX2ZpbmRfbm9kZV9ieV9jcHVpZChjcHUpOwogCi0JCXByb21fc3RhcnRjcHUoZHAtPm5vZGUsIGVudHJ5LCBjb29raWUpOworCQlwcm9tX3N0YXJ0Y3B1KGRwLT5waGFuZGxlLCBlbnRyeSwgY29va2llKTsKIAl9CiAKIAlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgNTAwMDA7IHRpbWVvdXQrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC90c2IuUwppbmRleCA4YzkxZDliLi5kYjE1ZDEyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90c2IuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90c2IuUwpAQCAtMTkxLDEwICsxOTEsMTIgQEAKIAogdHNiX2l0bGJfbG9hZDoKIAkvKiBFeGVjdXRhYmxlIGJpdCBtdXN0IGJlIHNldC4gICovCi02NjE6CWFuZGNjCQklZzUsIF9QQUdFX0VYRUNfNFUsICVnMAotCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgImF4IgorNjYxOglzZXRoaQkJJWhpKF9QQUdFX0VYRUNfNFUpLCAlZzQKKwlhbmRjYwkJJWc1LCAlZzQsICVnMAorCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgImF4IgogCS53b3JkCQk2NjFiCiAJYW5kY2MJCSVnNSwgX1BBR0VfRVhFQ180ViwgJWcwCisJbm9wCiAJLnByZXZpb3VzCiAKIAliZSxwbgkJJXhjYywgdHNiX2RvX2ZhdWx0CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKaW5kZXggMjIwMWU5Yy4uYzFlYTllYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQpAQCAtOCw3ICs4LDggQEAKIAlzZXRqbXAubyBzaWduYWwubyBzdHViLm8gc3R1Yl9zZWd2Lm8gc3lzY2FsbHMubyBzeXNjYWxsX3RhYmxlLm8gXAogCXN5c3JxLm8ga3N5bXMubyB0bHMubwogCi1zdWJhcmNoLW9iai15ID0gbGliL2NzdW0tcGFydGlhbF82NC5vIGxpYi9tZW1jcHlfNjQubyBsaWIvdGh1bmtfNjQubworc3ViYXJjaC1vYmoteSA9IGxpYi9jc3VtLXBhcnRpYWxfNjQubyBsaWIvbWVtY3B5XzY0Lm8gbGliL3RodW5rXzY0Lm8gXAorCQlsaWIvcndzZW1fNjQubwogc3ViYXJjaC1vYmotJChDT05GSUdfTU9EVUxFUykgKz0ga2VybmVsL21vZHVsZS5vCiAKIGxkdC15ID0gLi4vc3lzLWkzODYvbGR0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGViNDA5MjUuLjA4OTYwMDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNDUsNiArNDUsNyBAQAogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlmIFg4Nl8zMgogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCiAJc2VsZWN0IFVTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUCisJc2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCBmMjBkZGY4Li5hMTk4MjkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtMzE5LDcgKzMxOSw3IEBACiAKIGNvbmZpZyBYODZfWEFERAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhTTM4NgorCWRlcGVuZHMgb24gWDg2XzY0IHx8ICFNMzg2CiAKIGNvbmZpZyBYODZfUFBST19GRU5DRQogCWJvb2wgIlBlbnRpdW1Qcm8gbWVtb3J5IG9yZGVyaW5nIGVycmF0YSB3b3JrYXJvdW5kIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCA3OGIzMmJlLi4wYTQzZGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMTM1LDkgKzEzNSw3IEBACiAjIHN1c3BlbmQgYW5kIGhpYmVybmF0aW9uIHN1cHBvcnQKIGRyaXZlcnMtJChDT05GSUdfUE0pICs9IGFyY2gveDg2L3Bvd2VyLwogCi1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpCiBkcml2ZXJzLSQoQ09ORklHX0ZCKSArPSBhcmNoL3g4Ni92aWRlby8KLWVuZGlmCiAKICMjIyMKICMgYm9vdCBsb2FkZXIgc3VwcG9ydC4gU2V2ZXJhbCB0YXJnZXRzIGFyZSBrZXB0IGZvciBsZWdhY3kgcHVycG9zZXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDNiMjJmZTguLjUxZTI0MDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTksMTEgKzE5LDYgQEAKICNkZWZpbmUgX0FTTV9YODZfREVTQ19IIDEKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBfTElOVVhfU1RSSU5HX0hfIDEKLSNkZWZpbmUgX19MSU5VWF9CSVRNQVBfSCAxCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgpAQCAtMTMxLDggKzEyNiw4IEBACiBzdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1zICpyZWFsX21vZGU7CQkvKiBQb2ludGVyIHRvIHJlYWwtbW9kZSBkYXRhICovCiBzdGF0aWMgaW50IHF1aWV0OwogCi1zdGF0aWMgdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCB1bnNpZ25lZCBuKTsKLXZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIG4pOwordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CiAKIHN0YXRpYyB2b2lkIF9fcHV0c3RyKGludCwgY29uc3QgY2hhciAqKTsKICNkZWZpbmUgcHV0c3RyKF9feCkgIF9fcHV0c3RyKDAsIF9feCkKQEAgLTE4NSwxMSArMTgwLDkgQEAKIAkJcmV0dXJuOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAJaWYgKHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ192aWRlb19tb2RlID09IDAgJiYKIAkgICAgbGluZXMgPT0gMCAmJiBjb2xzID09IDApCiAJCXJldHVybjsKLSNlbmRpZgogCiAJeCA9IHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ194OwogCXkgPSByZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfeTsKQEAgLTIyMyw3ICsyMTYsNyBAQAogCW91dGIoMHhmZiAmIChwb3MgPj4gMSksIHZpZHBvcnQrMSk7CiB9CiAKLXN0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHVuc2lnbmVkIG4pCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQogewogCWludCBpOwogCWNoYXIgKnNzID0gczsKQEAgLTIzMyw3ICsyMjYsNyBAQAogCXJldHVybiBzOwogfQogCi12b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBuKQordm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCiB7CiAJaW50IGk7CiAJY29uc3QgY2hhciAqcyA9IHNyYzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYyBiL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYwppbmRleCA4ZWY2MGYyLi45MTkyNTdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21rY3B1c3RyLmMKKysrIGIvYXJjaC94ODYvYm9vdC9ta2NwdXN0ci5jCkBAIC0yMiw3ICsyMiw3IEBACiAJaW50IGksIGo7CiAJY29uc3QgY2hhciAqc3RyOwogCi0JcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciB4ODZfY2FwX3N0cnNbXSA9IFxuIik7CisJcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciB4ODZfY2FwX3N0cnNbXSA9XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQ0FQSU5UUzsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwppbmRleCA4MTljYWExLi5lZDdhZWZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKQEAgLTQyLDIyICs0MiwxNSBAQAogewogCXN0cnVjdCBiaW9zcmVncyBpcmVnLCBvcmVnOwogCXUxNiBheDsKLQl1OCByb3dzOwogCXU4IG1vZGU7CiAKIAlpbml0cmVncygmaXJlZyk7CiAKKwkvKiBRdWVyeSBjdXJyZW50IG1vZGUgKi8KIAlheCA9IDB4MGYwMDsKIAlpbnRjYWxsKDB4MTAsICZpcmVnLCAmb3JlZyk7CiAJbW9kZSA9IG9yZWcuYWw7CiAKLQlzZXRfZnMoMCk7Ci0Jcm93cyA9IHJkZnM4KDB4NDg0KTsJLyogcm93cyBtaW51cyBvbmUgKi8KLQotCWlmICgob3JlZy5heCA9PSAweDUwMDMgfHwgb3JlZy5heCA9PSAweDUwMDcpICYmCi0JICAgIChyb3dzID09IDAgfHwgcm93cyA9PSAyNCkpCi0JCXJldHVybiBtb2RlOwotCiAJaWYgKG1vZGUgIT0gMyAmJiBtb2RlICE9IDcpCiAJCW1vZGUgPSAzOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKaW5kZXggZjc2NzE2NC4uNDNlZGEyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uYwpAQCAtMjk4LDExICsyOTgsMTggQEAKIAl9CiAKIAkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCWlmIChzYXZlZC5jdXJ4ID49IHhzKQorCQlzYXZlZC5jdXJ4ID0geHMtMTsKKwlpZiAoc2F2ZWQuY3VyeSA+PSB5cykKKwkJc2F2ZWQuY3VyeSA9IHlzLTE7CisKIAlpbml0cmVncygmaXJlZyk7CiAJaXJlZy5haCA9IDB4MDI7CQkvKiBTZXQgY3Vyc29yIHBvc2l0aW9uICovCiAJaXJlZy5kaCA9IHNhdmVkLmN1cnk7CiAJaXJlZy5kbCA9IHNhdmVkLmN1cng7CiAJaW50Y2FsbCgweDEwLCAmaXJlZywgTlVMTCk7CisKKwlzdG9yZV9jdXJzb3JfcG9zaXRpb24oKTsKIH0KIAogdm9pZCBzZXRfdmlkZW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfYW91dC5jCmluZGV4IGY5ZjQ3MjQuLjkwNDZlNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJICogc2l6ZSBsaW1pdHMgaW1wb3NlZCBvbiB0aGVtIGJ5IGNyZWF0aW5nIHByb2dyYW1zIHdpdGggbGFyZ2UKIAkgKiBhcnJheXMgaW4gdGhlIGRhdGEgb3IgYnNzLgogCSAqLwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCXJsaW0gPSBybGltaXQoUkxJTUlUX0RBVEEpOwogCWlmIChybGltID49IFJMSU1fSU5GSU5JVFkpCiAJCXJsaW0gPSB+MDsKIAlpZiAoZXguYV9kYXRhICsgZXguYV9ic3MgPiBybGltKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKaW5kZXggNjliNzRhNy4uZjFlMjUzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCkBAIC02NSwxMiArNjUsMTcgQEAKIAkJCQkJdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpOwogZXh0ZXJuIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCk7CiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKTsKK2V4dGVybiBpbnQgYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCiAJCQkJCSAgICAgICB2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAogCQkJCQkgICAgICAgdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKSB7fQorc3RhdGljIGlubGluZSBpbnQgYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgkvKiBDT05GSUdfU01QICovCiAKIC8qIGFsdGVybmF0aXZlIGFzc2VtYmx5IHByaW1pdGl2ZTogKi8KQEAgLTEyNSwxMSArMTMwLDE2IEBACiAJYXNtIHZvbGF0aWxlIChBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpCQlcCiAJCTogb3V0cHV0IDogImkiICgwKSwgIyMgaW5wdXQpCiAKKy8qIExpa2UgYWx0ZXJuYXRpdmVfaW8sIGJ1dCBmb3IgcmVwbGFjaW5nIGEgZGlyZWN0IGNhbGwgd2l0aCBhbm90aGVyIG9uZS4gKi8KKyNkZWZpbmUgYWx0ZXJuYXRpdmVfY2FsbChvbGRmdW5jLCBuZXdmdW5jLCBmZWF0dXJlLCBvdXRwdXQsIGlucHV0Li4uKQlcCisJYXNtIHZvbGF0aWxlIChBTFRFUk5BVElWRSgiY2FsbCAlUFtvbGRdIiwgImNhbGwgJVBbbmV3XSIsIGZlYXR1cmUpIFwKKwkJOiBvdXRwdXQgOiBbb2xkXSAiaSIgKG9sZGZ1bmMpLCBbbmV3XSAiaSIgKG5ld2Z1bmMpLCAjIyBpbnB1dCkKKwogLyoKICAqIHVzZSB0aGlzIG1hY3JvKHMpIGlmIHlvdSBuZWVkIG1vcmUgdGhhbiBvbmUgb3V0cHV0IHBhcmFtZXRlcgogICogaW4gYWx0ZXJuYXRpdmVfaW8KICAqLwotI2RlZmluZSBBU01fT1VUUFVUMihhLCBiKSBhLCBiCisjZGVmaW5lIEFTTV9PVVRQVVQyKGEuLi4pIGEKIAogc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGU7CiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfcHJvdG8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oCmluZGV4IDRkODE3ZjkuLmQyNTQ0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oCkBAIC0zMSw2ICszMSw3IEBACiBleHRlcm4gaW50IGFtZF9pb21tdV9pbml0X2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfdW5pbml0X2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfaW5pdF9ub3RpZmllcih2b2lkKTsKK2V4dGVybiB2b2lkIGFtZF9pb21tdV9pbml0X2FwaSh2b2lkKTsKICNpZm5kZWYgQ09ORklHX0FNRF9JT01NVV9TVEFUUwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2lvbW11X3N0YXRzX2luaXQodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDRlMWI4ODcuLjhmODIxN2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xLDUgKzEsMzAwIEBACi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJhdG9taWNfMzIuaCIKLSNlbHNlCi0jIGluY2x1ZGUgImF0b21pY182NC5oIgorI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUNfSAorI2RlZmluZSBfQVNNX1g4Nl9BVE9NSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKy8qKgorICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKK3sKKwlyZXR1cm4gdi0+Y291bnRlcjsKK30KKworLyoqCisgKiBhdG9taWNfc2V0IC0gc2V0IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IHJlcXVpcmVkIHZhbHVlCisgKgorICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zZXQoYXRvbWljX3QgKnYsIGludCBpKQoreworCXYtPmNvdW50ZXIgPSBpOworfQorCisvKioKKyAqIGF0b21pY19hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSk7Cit9CisKKy8qKgorICogYXRvbWljX3N1YiAtIHN1YnRyYWN0IGludGVnZXIgZnJvbSBhdG9taWMgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSk7Cit9CisKKy8qKgorICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbmMoYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgaW50ZWdlciBhbmQgcmV0dXJuCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJaW50IF9faTsKKyNpZmRlZiBDT05GSUdfTTM4NgorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKHVubGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2IDw9IDMpKQorCQlnb3RvIG5vX3hhZGQ7CiAjZW5kaWYKKwkvKiBNb2Rlcm4gNDg2KyBwcm9jZXNzb3IgKi8KKwlfX2kgPSBpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxIgorCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gaSArIF9faTsKKworI2lmZGVmIENPTkZJR19NMzg2Citub194YWRkOiAvKiBMZWdhY3kgMzg2IHByb2Nlc3NvciAqLworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19pID0gYXRvbWljX3JlYWQodik7CisJYXRvbWljX3NldCh2LCBpICsgX19pKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBpICsgX19pOworI2VuZGlmCit9CisKKy8qKgorICogYXRvbWljX3N1Yl9yZXR1cm4gLSBzdWJ0cmFjdCBpbnRlZ2VyIGFuZCByZXR1cm4KKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucyBAdiAtIEBpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksIHYpOworfQorCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikpCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQoreworCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbmV3KQoreworCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOworfQorCisvKioKKyAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGFscmVhZHkgYSBnaXZlbiB2YWx1ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KKyAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBAdiB3YXMgbm90IGFscmVhZHkgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCisvKioKKyAqIGF0b21pY19pbmNfc2hvcnQgLSBpbmNyZW1lbnQgb2YgYSBzaG9ydCBpbnRlZ2VyCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGludAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyAxIHRvIEB2CisgKiBSZXR1cm5zIHRoZSBuZXcgdmFsdWUgb2YgQHUKKyAqLworc3RhdGljIGlubGluZSBzaG9ydCBpbnQgYXRvbWljX2luY19zaG9ydChzaG9ydCBpbnQgKnYpCit7CisJYXNtKExPQ0tfUFJFRklYICJhZGR3ICQxLCAlMCIgOiAiK20iICgqdikpOworCXJldHVybiAqdjsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qKgorICogYXRvbWljX29yX2xvbmcgLSBPUiBvZiB0d28gbG9uZyBpbnRlZ2VycworICogQHYxOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZworICogQHYyOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZworICoKKyAqIEF0b21pY2FsbHkgT1JzIEB2MSBhbmQgQHYyCisgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIE9SCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfb3JfbG9uZyh1bnNpZ25lZCBsb25nICp2MSwgdW5zaWduZWQgbG9uZyB2MikKK3sKKwlhc20oTE9DS19QUkVGSVggIm9ycSAlMSwgJTAiIDogIittIiAoKnYxKSA6ICJyIiAodjIpKTsKK30KKyNlbmRpZgorCisvKiBUaGVzZSBhcmUgeDg2LXNwZWNpZmljLCB1c2VkIGJ5IHNvbWUgaGVhZGVyIGZpbGVzICovCisjZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFuZGwgJTAsJTEiCQkJXAorCQkgICAgIDogOiAiciIgKH4obWFzaykpLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCisKKyNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9ybCAlMCwlMSIJCQlcCisJCSAgICAgOiA6ICJyIiAoKHVuc2lnbmVkKShtYXNrKSksICJtIiAoKihhZGRyKSkJXAorCQkgICAgIDogIm1lbW9yeSIpCisKKy8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBpbmNsdWRlICJhdG9taWM2NF8zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAiYXRvbWljNjRfNjQuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMjdiZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWM2NF8zMi5oCkBAIC0wLDAgKzEsMTYwIEBACisjaWZuZGVmIF9BU01fWDg2X0FUT01JQzY0XzMyX0gKKyNkZWZpbmUgX0FTTV9YODZfQVRPTUlDNjRfMzJfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKy8vI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisKKy8qIEFuIDY0Yml0IGF0b21pYyB0eXBlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1NjQgX19hbGlnbmVkKDgpIGNvdW50ZXI7Cit9IGF0b21pYzY0X3Q7CisKKyNkZWZpbmUgQVRPTUlDNjRfSU5JVCh2YWwpCXsgKHZhbCkgfQorCitleHRlcm4gdTY0IGF0b21pYzY0X2NtcHhjaGcoYXRvbWljNjRfdCAqcHRyLCB1NjQgb2xkX3ZhbCwgdTY0IG5ld192YWwpOworCisvKioKKyAqIGF0b21pYzY0X3hjaGcgLSB4Y2hnIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKiBAbmV3X3ZhbDogIHZhbHVlIHRvIGFzc2lnbgorICoKKyAqIEF0b21pY2FsbHkgeGNoZ3MgdGhlIHZhbHVlIG9mIEBwdHIgdG8gQG5ld192YWwgYW5kIHJldHVybnMKKyAqIHRoZSBvbGQgdmFsdWUuCisgKi8KK2V4dGVybiB1NjQgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBuZXdfdmFsKTsKKworLyoqCisgKiBhdG9taWM2NF9zZXQgLSBzZXQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqIEBuZXdfdmFsOiAgdmFsdWUgdG8gYXNzaWduCisgKgorICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAcHRyIHRvIEBuZXdfdmFsLgorICovCitleHRlcm4gdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqcHRyLCB1NjQgbmV3X3ZhbCk7CisKKy8qKgorICogYXRvbWljNjRfcmVhZCAtIHJlYWQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAcHRyIGFuZCByZXR1cm5zIGl0LgorICovCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnB0cikKK3sKKwl1NjQgcmVzOworCisJLyoKKwkgKiBOb3RlLCB3ZSBpbmxpbmUgdGhpcyBhdG9taWM2NF90IHByaW1pdGl2ZSBiZWNhdXNlCisJICogaXQgb25seSBjbG9iYmVycyBFQVgvRURYIGFuZCBsZWF2ZXMgdGhlIG90aGVycworCSAqIHVudG91Y2hlZC4gV2UgYWxzbyAoc29tZXdoYXQgc3VidGx5KSByZWx5IG9uIHRoZQorCSAqIGZhY3QgdGhhdCBjbXB4Y2hnOGIgcmV0dXJucyB0aGUgY3VycmVudCA2NC1iaXQgdmFsdWUKKwkgKiBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uIHdlIGFyZSB0b3VjaGluZzoKKwkgKi8KKwlhc20gdm9sYXRpbGUoCisJCSJtb3YgJSVlYngsICUlZWF4XG5cdCIKKwkJIm1vdiAlJWVjeCwgJSVlZHhcblx0IgorCQlMT0NLX1BSRUZJWCAiY21weGNoZzhiICUxXG4iCisJCQk6ICI9JkEiIChyZXMpCisJCQk6ICJtIiAoKnB0cikKKwkJKTsKKworCXJldHVybiByZXM7Cit9CisKK2V4dGVybiB1NjQgYXRvbWljNjRfcmVhZChhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgorICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ciBhbmQgcmV0dXJucyBAZGVsdGEgKyAqQHB0cgorICovCitleHRlcm4gdTY0IGF0b21pYzY0X2FkZF9yZXR1cm4odTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworCisvKgorICogT3RoZXIgdmFyaWFudHMgd2l0aCBkaWZmZXJlbnQgYXJpdGhtZXRpYyBvcGVyYXRvcnM6CisgKi8KK2V4dGVybiB1NjQgYXRvbWljNjRfc3ViX3JldHVybih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CitleHRlcm4gdTY0IGF0b21pYzY0X2luY19yZXR1cm4oYXRvbWljNjRfdCAqcHRyKTsKK2V4dGVybiB1NjQgYXRvbWljNjRfZGVjX3JldHVybihhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyLgorICovCitleHRlcm4gdm9pZCBhdG9taWM2NF9hZGQodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWM2NCB2YXJpYWJsZQorICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGRlbHRhIGZyb20gQHB0ci4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfc3ViKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGRlbHRhIGZyb20gQHB0ciBhbmQgcmV0dXJucworICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitleHRlcm4gaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdCh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfaW5jIC0gaW5jcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAcHRyIGJ5IDEuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHB0ciBieSAxLgorICovCitleHRlcm4gdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBwdHIgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitleHRlcm4gaW50IGF0b21pYzY0X2RlY19hbmRfdGVzdChhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHB0ciBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK2V4dGVybiBpbnQgYXRvbWljNjRfaW5jX2FuZF90ZXN0KGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyIGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworZXh0ZXJuIGludCBhdG9taWM2NF9hZGRfbmVnYXRpdmUodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworCisjZW5kaWYgLyogX0FTTV9YODZfQVRPTUlDNjRfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjNWI0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzY0LmgKQEAgLTAsMCArMSwyMjQgQEAKKyNpZm5kZWYgX0FTTV9YODZfQVRPTUlDNjRfNjRfSAorI2RlZmluZSBfQVNNX1g4Nl9BVE9NSUM2NF82NF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisKKy8qIFRoZSA2NC1iaXQgYXRvbWljIHR5cGUgKi8KKworI2RlZmluZSBBVE9NSUM2NF9JTklUKGkpCXsgKGkpIH0KKworLyoqCisgKiBhdG9taWM2NF9yZWFkIC0gcmVhZCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCisgKiBEb2Vzbid0IGltcGx5IGEgcmVhZCBtZW1vcnkgYmFycmllci4KKyAqLworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3JlYWQoY29uc3QgYXRvbWljNjRfdCAqdikKK3sKKwlyZXR1cm4gdi0+Y291bnRlcjsKK30KKworLyoqCisgKiBhdG9taWM2NF9zZXQgLSBzZXQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICogQGk6IHJlcXVpcmVkIHZhbHVlCisgKgorICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICp2LCBsb25nIGkpCit7CisJdi0+Y291bnRlciA9IGk7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljNjQgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfYWRkKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZHEgJTEsJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWM2NCB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zdWIobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VicSAlMSwlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdChsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUyLCUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljNjRfaW5jIC0gaW5jcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jcSAlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWM2NF9kZWMgLSBkZWNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNxICUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfZGVjX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNxICUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pYzY0X2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfaW5jX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pYzY0X2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9hZGRfbmVnYXRpdmUobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMiwlMDsgc2V0cyAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pYzY0X2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfYWRkX3JldHVybihsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyBfX2kgPSBpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZHEgJTAsICUxOyIKKwkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQorCQkgICAgIDogOiAibWVtb3J5Iik7CisJcmV0dXJuIGkgKyBfX2k7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlyZXR1cm4gYXRvbWljNjRfYWRkX3JldHVybigtaSwgdik7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KSAgKGF0b21pYzY0X2FkZF9yZXR1cm4oMSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KSAgKGF0b21pYzY0X3N1Yl9yZXR1cm4oMSwgKHYpKSkKKworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X2NtcHhjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBvbGQsIGxvbmcgbmV3KQoreworCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF94Y2hnKGF0b21pYzY0X3QgKnYsIGxvbmcgbmV3KQoreworCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOworfQorCisvKioKKyAqIGF0b21pYzY0X2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCBsb25nIGEsIGxvbmcgdSkKK3sKKwlsb25nIGMsIG9sZDsKKwljID0gYXRvbWljNjRfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljNjRfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCisjZW5kaWYgLyogX0FTTV9YODZfQVRPTUlDNjRfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM1YTY2Ny4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxNSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0FUT01JQ18zMl9ICi0jZGVmaW5lIF9BU01fWDg2X0FUT01JQ18zMl9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+Ci0KLS8qCi0gKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgotICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KLSAqLwotCi0jZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KLQotLyoqCi0gKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQotewotCXJldHVybiB2LT5jb3VudGVyOwotfQotCi0vKioKLSAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAaTogcmVxdWlyZWQgdmFsdWUKLSAqCi0gKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCi17Ci0Jdi0+Y291bnRlciA9IGk7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgotCQkgICAgIDogIittIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgaW50ZWdlciBmcm9tIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUxLCUwIgotCQkgICAgIDogIittIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlYyAtIGRlY3JlbWVudCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwIgotCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCi0gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwOyBzZXRlICUxIgotCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQotICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgotICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTIsJTA7IHNldHMgJTEiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkX3JldHVybiAtIGFkZCBpbnRlZ2VyIGFuZCByZXR1cm4KLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlpbnQgX19pOwotI2lmZGVmIENPTkZJR19NMzg2Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpZiAodW5saWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPD0gMykpCi0JCWdvdG8gbm9feGFkZDsKLSNlbmRpZgotCS8qIE1vZGVybiA0ODYrIHByb2Nlc3NvciAqLwotCV9faSA9IGk7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkbCAlMCwgJTEiCi0JCSAgICAgOiAiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBpICsgX19pOwotCi0jaWZkZWYgQ09ORklHX00zODYKLW5vX3hhZGQ6IC8qIExlZ2FjeSAzODYgcHJvY2Vzc29yICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9faSA9IGF0b21pY19yZWFkKHYpOwotCWF0b21pY19zZXQodiwgaSArIF9faSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBpICsgX19pOwotI2VuZGlmCi19Ci0KLS8qKgotICogYXRvbWljX3N1Yl9yZXR1cm4gLSBzdWJ0cmFjdCBpbnRlZ2VyIGFuZCByZXR1cm4KLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucyBAdiAtIEBpCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksIHYpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKLXsKLQlyZXR1cm4gY21weGNoZygmdi0+Y291bnRlciwgb2xkLCBuZXcpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfeGNoZyhhdG9taWNfdCAqdiwgaW50IG5ldykKLXsKLQlyZXR1cm4geGNoZygmdi0+Y291bnRlciwgbmV3KTsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhbHJlYWR5IGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCi0gKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgQHYgd2FzIG5vdCBhbHJlYWR5IEB1LgotICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCi17Ci0JaW50IGMsIG9sZDsKLQljID0gYXRvbWljX3JlYWQodik7Ci0JZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQotCQkJYnJlYWs7Ci0JCW9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7Ci0JCWlmIChsaWtlbHkob2xkID09IGMpKQotCQkJYnJlYWs7Ci0JCWMgPSBvbGQ7Ci0JfQotCXJldHVybiBjICE9ICh1KTsKLX0KLQotI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSAgKGF0b21pY19hZGRfcmV0dXJuKDEsIHYpKQotI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAgKGF0b21pY19zdWJfcmV0dXJuKDEsIHYpKQotCi0vKiBUaGVzZSBhcmUgeDg2LXNwZWNpZmljLCB1c2VkIGJ5IHNvbWUgaGVhZGVyIGZpbGVzICovCi0jZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFuZGwgJTAsJTEiCQkJXAotCQkgICAgIDogOiAiciIgKH4obWFzaykpLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCi0KLSNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9ybCAlMCwlMSIJCQkJXAotCQkgICAgIDogOiAiciIgKG1hc2spLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCi0KLS8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCi0vKiBBbiA2NGJpdCBhdG9taWMgdHlwZSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdTY0IF9fYWxpZ25lZCg4KSBjb3VudGVyOwotfSBhdG9taWM2NF90OwotCi0jZGVmaW5lIEFUT01JQzY0X0lOSVQodmFsKQl7ICh2YWwpIH0KLQotZXh0ZXJuIHU2NCBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG9sZF92YWwsIHU2NCBuZXdfdmFsKTsKLQotLyoqCi0gKiBhdG9taWM2NF94Y2hnIC0geGNoZyBhdG9taWM2NCB2YXJpYWJsZQotICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICogQG5ld192YWw6ICB2YWx1ZSB0byBhc3NpZ24KLSAqCi0gKiBBdG9taWNhbGx5IHhjaGdzIHRoZSB2YWx1ZSBvZiBAcHRyIHRvIEBuZXdfdmFsIGFuZCByZXR1cm5zCi0gKiB0aGUgb2xkIHZhbHVlLgotICovCi1leHRlcm4gdTY0IGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqcHRyLCB1NjQgbmV3X3ZhbCk7Ci0KLS8qKgotICogYXRvbWljNjRfc2V0IC0gc2V0IGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKiBAbmV3X3ZhbDogIHZhbHVlIHRvIGFzc2lnbgotICoKLSAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHB0ciB0byBAbmV3X3ZhbC4KLSAqLwotZXh0ZXJuIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnB0ciwgdTY0IG5ld192YWwpOwotCi0vKioKLSAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHB0ciBhbmQgcmV0dXJucyBpdC4KLSAqLwotc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfcmVhZChhdG9taWM2NF90ICpwdHIpCi17Ci0JdTY0IHJlczsKLQotCS8qCi0JICogTm90ZSwgd2UgaW5saW5lIHRoaXMgYXRvbWljNjRfdCBwcmltaXRpdmUgYmVjYXVzZQotCSAqIGl0IG9ubHkgY2xvYmJlcnMgRUFYL0VEWCBhbmQgbGVhdmVzIHRoZSBvdGhlcnMKLQkgKiB1bnRvdWNoZWQuIFdlIGFsc28gKHNvbWV3aGF0IHN1YnRseSkgcmVseSBvbiB0aGUKLQkgKiBmYWN0IHRoYXQgY21weGNoZzhiIHJldHVybnMgdGhlIGN1cnJlbnQgNjQtYml0IHZhbHVlCi0JICogb2YgdGhlIG1lbW9yeSBsb2NhdGlvbiB3ZSBhcmUgdG91Y2hpbmc6Ci0JICovCi0JYXNtIHZvbGF0aWxlKAotCQkibW92ICUlZWJ4LCAlJWVheFxuXHQiCi0JCSJtb3YgJSVlY3gsICUlZWR4XG5cdCIKLQkJTE9DS19QUkVGSVggImNtcHhjaGc4YiAlMVxuIgotCQkJOiAiPSZBIiAocmVzKQotCQkJOiAibSIgKCpwdHIpCi0JCSk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1leHRlcm4gdTY0IGF0b21pYzY0X3JlYWQoYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KLSAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIgYW5kIHJldHVybnMgQGRlbHRhICsgKkBwdHIKLSAqLwotZXh0ZXJuIHU2NCBhdG9taWM2NF9hZGRfcmV0dXJuKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKLQotLyoKLSAqIE90aGVyIHZhcmlhbnRzIHdpdGggZGlmZmVyZW50IGFyaXRobWV0aWMgb3BlcmF0b3JzOgotICovCi1leHRlcm4gdTY0IGF0b21pYzY0X3N1Yl9yZXR1cm4odTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotZXh0ZXJuIHU2NCBhdG9taWM2NF9pbmNfcmV0dXJuKGF0b21pYzY0X3QgKnB0cik7Ci1leHRlcm4gdTY0IGF0b21pYzY0X2RlY19yZXR1cm4oYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ci4KLSAqLwotZXh0ZXJuIHZvaWQgYXRvbWljNjRfYWRkKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBkZWx0YSBmcm9tIEBwdHIuCi0gKi8KLWV4dGVybiB2b2lkIGF0b21pYzY0X3N1Yih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKLSAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBkZWx0YSBmcm9tIEBwdHIgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotZXh0ZXJuIGludCBhdG9taWM2NF9zdWJfYW5kX3Rlc3QodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2luYyAtIGluY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHB0ciBieSAxLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9pbmMoYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9kZWMgLSBkZWNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBwdHIgYnkgMS4KLSAqLwotZXh0ZXJuIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0Ci0gKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAcHRyIGJ5IDEgYW5kCi0gKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCi0gKiBjYXNlcy4KLSAqLwotZXh0ZXJuIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKLSAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEBwdHIgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1leHRlcm4gaW50IGF0b21pYzY0X2luY19hbmRfdGVzdChhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ciBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLWV4dGVybiBpbnQgYXRvbWljNjRfYWRkX25lZ2F0aXZlKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+Ci0jZW5kaWYgLyogX0FTTV9YODZfQVRPTUlDXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MDVkYzIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0ODUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUNfNjRfSAotI2RlZmluZSBfQVNNX1g4Nl9BVE9NSUNfNjRfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KLSNpbmNsdWRlIDxhc20vY21weGNoZy5oPgotCi0vKgotICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKLSAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCi0gKi8KLQotI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9Ci0KLS8qKgotICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKLXsKLQlyZXR1cm4gdi0+Y291bnRlcjsKLX0KLQotLyoqCi0gKiBhdG9taWNfc2V0IC0gc2V0IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IHJlcXVpcmVkIHZhbHVlCi0gKgotICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zZXQoYXRvbWljX3QgKnYsIGludCBpKQotewotCXYtPmNvdW50ZXIgPSBpOwotfQotCi0vKioKLSAqIGF0b21pY19hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWMgdmFyaWFibGUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0Ci0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbmMoYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCi0gKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCi0gKiBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCi0gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwOyBzZXRlICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlpbnQgX19pID0gaTsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMSIKLQkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGkgKyBfX2k7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksIHYpOwotfQotCi0jZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikpCi0jZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCi0KLS8qIFRoZSA2NC1iaXQgYXRvbWljIHR5cGUgKi8KLQotI2RlZmluZSBBVE9NSUM2NF9JTklUKGkpCXsgKGkpIH0KLQotLyoqCi0gKiBhdG9taWM2NF9yZWFkIC0gcmVhZCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCi0gKiBEb2Vzbid0IGltcGx5IGEgcmVhZCBtZW1vcnkgYmFycmllci4KLSAqLwotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3JlYWQoY29uc3QgYXRvbWljNjRfdCAqdikKLXsKLQlyZXR1cm4gdi0+Y291bnRlcjsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9zZXQgLSBzZXQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICogQGk6IHJlcXVpcmVkIHZhbHVlCi0gKgotICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICp2LCBsb25nIGkpCi17Ci0Jdi0+Y291bnRlciA9IGk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljNjQgdmFyaWFibGUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfYWRkKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZHEgJTEsJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pYzY0X3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWM2NCB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zdWIobG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VicSAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCi0gKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdChsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUyLCUwOyBzZXRlICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfaW5jIC0gaW5jcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jcSAlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9kZWMgLSBkZWNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNxICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCi0gKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCi0gKiBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfZGVjX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNxICUwOyBzZXRlICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfaW5jX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwOyBzZXRlICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQotICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgotICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9hZGRfbmVnYXRpdmUobG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMiwlMDsgc2V0cyAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgotICovCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfYWRkX3JldHVybihsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JbG9uZyBfX2kgPSBpOwotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZHEgJTAsICUxOyIKLQkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGkgKyBfX2k7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQlyZXR1cm4gYXRvbWljNjRfYWRkX3JldHVybigtaSwgdik7Ci19Ci0KLSNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KSAgKGF0b21pYzY0X2FkZF9yZXR1cm4oMSwgKHYpKSkKLSNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KSAgKGF0b21pYzY0X3N1Yl9yZXR1cm4oMSwgKHYpKSkKLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X2NtcHhjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBvbGQsIGxvbmcgbmV3KQotewotCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF94Y2hnKGF0b21pYzY0X3QgKnYsIGxvbmcgbmV3KQotewotCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCi17Ci0JcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbmV3KQotewotCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCi0gKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCBjLCBvbGQ7Ci0JYyA9IGF0b21pY19yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKLQkJCWJyZWFrOwotCQljID0gb2xkOwotCX0KLQlyZXR1cm4gYyAhPSAodSk7Ci19Ci0KLSNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCi0KLS8qKgotICogYXRvbWljNjRfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCi0gKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIGxvbmcgYSwgbG9uZyB1KQotewotCWxvbmcgYywgb2xkOwotCWMgPSBhdG9taWM2NF9yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWM2NF9jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7Ci0JCWlmIChsaWtlbHkob2xkID09IGMpKQotCQkJYnJlYWs7Ci0JCWMgPSBvbGQ7Ci0JfQotCXJldHVybiBjICE9ICh1KTsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jX3Nob3J0IC0gaW5jcmVtZW50IG9mIGEgc2hvcnQgaW50ZWdlcgotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBpbnQKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgMSB0byBAdgotICogUmV0dXJucyB0aGUgbmV3IHZhbHVlIG9mIEB1Ci0gKi8KLXN0YXRpYyBpbmxpbmUgc2hvcnQgaW50IGF0b21pY19pbmNfc2hvcnQoc2hvcnQgaW50ICp2KQotewotCWFzbShMT0NLX1BSRUZJWCAiYWRkdyAkMSwgJTAiIDogIittIiAoKnYpKTsKLQlyZXR1cm4gKnY7Ci19Ci0KLS8qKgotICogYXRvbWljX29yX2xvbmcgLSBPUiBvZiB0d28gbG9uZyBpbnRlZ2VycwotICogQHYxOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZwotICogQHYyOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZwotICoKLSAqIEF0b21pY2FsbHkgT1JzIEB2MSBhbmQgQHYyCi0gKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIE9SCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfb3JfbG9uZyh1bnNpZ25lZCBsb25nICp2MSwgdW5zaWduZWQgbG9uZyB2MikKLXsKLQlhc20oTE9DS19QUkVGSVggIm9ycSAlMSwgJTAiIDogIittIiAoKnYxKSA6ICJyIiAodjIpKTsKLX0KLQotI2RlZmluZSBhdG9taWM2NF9pbmNfbm90X3plcm8odikgYXRvbWljNjRfYWRkX3VubGVzcygodiksIDEsIDApCi0KLS8qIFRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHVzZWQgYnkgc29tZSBoZWFkZXIgZmlsZXMgKi8KLSNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikJCQkJCVwKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFuZGwgJTAsJTEiCQkJCVwKLQkJICAgICA6IDogInIiICh+KG1hc2spKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQotCi0jZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKQkJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAib3JsICUwLCUxIgkJCQlcCi0JCSAgICAgOiA6ICJyIiAoKHVuc2lnbmVkKShtYXNrKSksICJtIiAoKihhZGRyKSkJCVwKLQkJICAgICA6ICJtZW1vcnkiKQotCi0vKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiB4ODYgKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+Ci0jZW5kaWYgLyogX0FTTV9YODZfQVRPTUlDXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCA2MzdlMWVjLi4wY2Q4MmQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0xNjgsNiArMTY4LDEwIEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZMRVhQUklPUklUWSAoOCozMisgMikgLyogSW50ZWwgRmxleFByaW9yaXR5ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0VQVCAgICAgICAgICg4KjMyKyAzKSAvKiBJbnRlbCBFeHRlbmRlZCBQYWdlIFRhYmxlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1ZQSUQgICAgICAgICg4KjMyKyA0KSAvKiBJbnRlbCBWaXJ0dWFsIFByb2Nlc3NvciBJRCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9OUFQJCSg4KjMyKzUpICAvKiBBTUQgTmVzdGVkIFBhZ2UgVGFibGUgc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MQlJWCSg4KjMyKzYpICAvKiBBTUQgTEJSIFZpcnR1YWxpemF0aW9uIHN1cHBvcnQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZNTAkoOCozMis3KSAgLyogInN2bV9sb2NrIiBBTUQgU1ZNIGxvY2tpbmcgTVNSICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05SSVBTCSg4KjMyKzgpICAvKiAibnJpcF9zYXZlIiBBTUQgU1ZNIG5leHRfcmlwIHNhdmUgKi8KIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaAppbmRleCA4MjQwZjc2Li5iODEwMDJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmgKQEAgLTE0LDYgKzE0LDkgQEAKICAgIHdoaWNoIGRlYnVnZ2luZyByZWdpc3RlciB3YXMgcmVzcG9uc2libGUgZm9yIHRoZSB0cmFwLiAgVGhlIG90aGVyIGJpdHMKICAgIGFyZSBlaXRoZXIgcmVzZXJ2ZWQgb3Igbm90IG9mIGludGVyZXN0IHRvIHVzLiAqLwogCisvKiBEZWZpbmUgcmVzZXJ2ZWQgYml0cyBpbiBEUjYgd2hpY2ggYXJlIGFsd2F5cyBzZXQgdG8gMSAqLworI2RlZmluZSBEUjZfUkVTRVJWRUQJKDB4RkZGRjBGRjApCisKICNkZWZpbmUgRFJfVFJBUDAJKDB4MSkJCS8qIGRiMCAqLwogI2RlZmluZSBEUl9UUkFQMQkoMHgyKQkJLyogZGIxICovCiAjZGVmaW5lIERSX1RSQVAyCSgweDQpCQkvKiBkYjIgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMTk5NGQzZi4uZjJhZDIxNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTE3MCwxMCArMTcwLDcgQEAKIH0KIAogI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCQkJXAotZG8gewkJCQkJCQlcCi0JZWxmX2NvbW1vbl9pbml0KCZjdXJyZW50LT50aHJlYWQsIF9yLCAwKTsJXAotCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JQTMyKTsJCQlcCi19IHdoaWxlICgwKQorCWVsZl9jb21tb25faW5pdCgmY3VycmVudC0+dGhyZWFkLCBfciwgMCkKIAogI2RlZmluZQlDT01QQVRfRUxGX1BMQVRfSU5JVChyZWdzLCBsb2FkX2FkZHIpCQlcCiAJZWxmX2NvbW1vbl9pbml0KCZjdXJyZW50LT50aHJlYWQsIHJlZ3MsIF9fVVNFUl9EUykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oCmluZGV4IDUzMDE4NDYuLjI1MTlkMDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaApAQCAtMTIsMTAgKzEyLDYgQEAKIAkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfUENEOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgZmJfaXNfcHJpbWFyeV9kZXZpY2Uoc3RydWN0IGZiX2luZm8gKmluZm8pIHsgcmV0dXJuIDA7IH0KLSNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9YODZfRkJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCAxNGY5ODkwLi42MzVmMDNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMTE4LDE0ICsxMTgsMjAgQEAKIAkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCiAJICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgogCSAqCi0JICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKLQkgKiBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKKwkgKiBJZiBuZWNlc3Nhcnkgd2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgMjU2IHBhZ2VzIGJvdW5kYXJ5IHNvCisJICogdGhhdCB3ZSBjYW4gaGF2ZSBhIHNpbmdsZSBwZ2QgZW50cnkgYW5kIGEgc2luZ2xlIHB0ZSB0YWJsZToKIAkgKi8KICNkZWZpbmUgTlJfRklYX0JUTUFQUwkJNjQKICNkZWZpbmUgRklYX0JUTUFQU19TTE9UUwk0Ci0JRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyAyNTYgLQotCQkJKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAyNTUpLAotCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAorI2RlZmluZSBUT1RBTF9GSVhfQlRNQVBTCShOUl9GSVhfQlRNQVBTICogRklYX0JUTUFQU19TTE9UUykKKwlGSVhfQlRNQVBfRU5EID0KKwkgKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgXgorCSAgKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyBUT1RBTF9GSVhfQlRNQVBTIC0gMSkpICYKKwkgLVBUUlNfUEVSX1BURQorCSA/IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgKyBUT1RBTF9GSVhfQlRNQVBTIC0KKwkgICAoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyAmIChUT1RBTF9GSVhfQlRNQVBTIC0gMSkpCisJIDogX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKKwlGSVhfQlRNQVBfQkVHSU4gPSBGSVhfQlRNQVBfRU5EICsgVE9UQUxfRklYX0JUTUFQUyAtIDEsCiAjaWZkZWYgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKIAlGSVhfT0hDSTEzOTRfQkFTRSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNzM3MzkzMi4uYTFkY2ZhMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDggKzEsNDIgQEAKICNpZm5kZWYgX0FTTV9YODZfSU9fSAogI2RlZmluZSBfQVNNX1g4Nl9JT19ICiAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucworICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQorICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKKyAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCisgKgorICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCisgKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0CisgKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKKyAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKKyAqIG1pc3Rha2Ugc29tZXdoZXJlLgorICovCisKKy8qCisgKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCisgKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCisgKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6CisgKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCisgKgorICoJCUxpbnVzCisgKi8KKworIC8qCisgICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKKyAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCisgICoKKyAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKKyAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCisgICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgICovCisKICNkZWZpbmUgQVJDSF9IQVNfSU9SRU1BUF9XQwogCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNzMsMTEgKzIwNywxMjYgQEAKIGV4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJpb18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiaW9fNjQuaCIKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgorCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIHNpemVfdCBjb3VudCkKK3sKKwltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgc2l6ZV90IGNvdW50KQoreworCW1lbWNweShkc3QsIChjb25zdCB2b2lkIF9fZm9yY2UgKilzcmMsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCit7CisJbWVtY3B5KCh2b2lkIF9fZm9yY2UgKilkc3QsIHNyYywgY291bnQpOworfQorCisvKgorICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBhIHR5cGljYWwgeDg2IHN5c3RlbSwgbm8gbmVlZCB0bworICogZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKKyAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKKyAqIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcG9pbnRlciBjYW4gYmUKKyAqIHVzZWQgYXMgdGhlIElPLWFyZWEgcG9pbnRlciAoaXQgY2FuIGJlIGlvdW5tYXBwZWQgYXMgd2VsbCwgc28gdGhlCisgKiBhbmFsb2d5IHdpdGggUENJIGlzIHF1aXRlIGxhcmdlKToKKyAqLworI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKKworLyoKKyAqCUNhY2hlIG1hbmFnZW1lbnQKKyAqCisgKglUaGlzIG5lZWRlZCBmb3IgdHdvIGNhc2VzCisgKgkxLiBPdXQgb2Ygb3JkZXIgYXdhcmUgcHJvY2Vzc29ycworICoJMi4gQWNjaWRlbnRhbGx5IG91dCBvZiBvcmRlciBwcm9jZXNzb3JzIChQUHJvIGVycmF0YSAjNTEpCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dyaXRlX2J1ZmZlcnModm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCisJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwogI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK2V4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKKworZXh0ZXJuIGludCBpb19kZWxheV90eXBlOworZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQoreworCW5hdGl2ZV9pb19kZWxheSgpOworI2lmZGVmIFJFQUxMWV9TTE9XX0lPCisJbmF0aXZlX2lvX2RlbGF5KCk7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNkZWZpbmUgQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJvdXQiICNid2wgIiAlIiAjYncgIjAsICV3MSIJCQlcCisJCSAgICAgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOwkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCB0eXBlIHZhbHVlOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUoImluIiAjYndsICIgJXcxLCAlIiAjYncgIjAiCQkJXAorCQkgICAgIDogIj1hIih2YWx1ZSkgOiAiTmQiKHBvcnQpKTsJCQlcCisJcmV0dXJuIHZhbHVlOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQlcCisJb3V0IyNid2wodmFsdWUsIHBvcnQpOwkJCQkJCVwKKwlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfcChpbnQgcG9ydCkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOwkJCQlcCisJc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKKwlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0cyMjYndsKGludCBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicmVwOyBvdXRzIiAjYndsCQkJCQlcCisJCSAgICAgOiAiK1MiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIGlucyMjYndsKGludCBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQlcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicmVwOyBpbnMiICNid2wJCQkJCVwKKwkJICAgICA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsJCVwKK30KKworQlVJTERJTyhiLCBiLCBjaGFyKQorQlVJTERJTyh3LCB3LCBzaG9ydCkKK0JVSUxESU8obCwgLCBpbnQpCiAKIGV4dGVybiB2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOwogZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyOTk5MDAuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0lPXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfSU9fMzJfSAotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCi0gKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCi0gKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgotICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKLSAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKLSAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZwotICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQotICogbWlzdGFrZSBzb21ld2hlcmUuCi0gKi8KLQotLyoKLSAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KLSAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKLSAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCi0gKgotICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKLSAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKLSAqCi0gKgkJTGludXMKLSAqLwotCi0gLyoKLSAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQotICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KLSAgKgotICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAotICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKLSAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAgKi8KLQotI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0vKgotICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgotICovCi0jZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIGludCBjb3VudCkKLXsKLQltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgaW50IGNvdW50KQotewotCV9fbWVtY3B5KGRzdCwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXNyYywgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBjb3VudCkKLXsKLQlfX21lbWNweSgodm9pZCBfX2ZvcmNlICopZHN0LCBzcmMsIGNvdW50KTsKLX0KLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLS8qCi0gKglDYWNoZSBtYW5hZ2VtZW50Ci0gKgotICoJVGhpcyBuZWVkZWQgZm9yIHR3byBjYXNlcwotICoJMS4gT3V0IG9mIG9yZGVyIGF3YXJlIHByb2Nlc3NvcnMKLSAqCTIuIEFjY2lkZW50YWxseSBvdXQgb2Ygb3JkZXIgcHJvY2Vzc29ycyAoUFBybyBlcnJhdGEgIzUxKQotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF93cml0ZV9idWZmZXJzKHZvaWQpCi17Ci0JYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSBkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi1leHRlcm4gdm9pZCBuYXRpdmVfaW9fZGVsYXkodm9pZCk7Ci0KLWV4dGVybiBpbnQgaW9fZGVsYXlfdHlwZTsKLWV4dGVybiB2b2lkIGlvX2RlbGF5X2luaXQodm9pZCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkKLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd25faW8odm9pZCkKLXsKLQluYXRpdmVfaW9fZGVsYXkoKTsKLSNpZmRlZiBSRUFMTFlfU0xPV19JTwotCW5hdGl2ZV9pb19kZWxheSgpOwotCW5hdGl2ZV9pb19kZWxheSgpOwotCW5hdGl2ZV9pb19kZWxheSgpOwotI2VuZGlmCi19Ci0KLSNlbmRpZgotCi0jZGVmaW5lIF9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKLXsJCQkJCQkJCVwKLQlvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsJCQkJXAotfQkJCQkJCQkJXAotCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQlcCi0JcmV0dXJuIGluIyNid2wjI19sb2NhbChwb3J0KTsJCQkJXAotfQotCi0jZGVmaW5lIEJVSUxESU8oYndsLCBidywgdHlwZSkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19sb2NhbCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoIm91dCIgI2J3bCAiICUiICNidyAiMCwgJXcxIgkJXAotCQkgICAgIDogOiAiYSIodmFsdWUpLCAiTmQiKHBvcnQpKTsJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIHR5cGUgdmFsdWU7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIJCVwKLQkJICAgICA6ICI9YSIodmFsdWUpIDogIk5kIihwb3J0KSk7CQkJXAotCXJldHVybiB2YWx1ZTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKLXsJCQkJCQkJCQlcCi0Jb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7CQkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsX3AoaW50IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOwkJCVwKLQlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAotCXJldHVybiB2YWx1ZTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLV9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCQlcCi17CQkJCQkJCQkJXAotCW91dCMjYndsKHZhbHVlLCBwb3J0KTsJCQkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX3AoaW50IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bChwb3J0KTsJCQkJXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi0JcmV0dXJuIHZhbHVlOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dHMjI2J3bChpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInJlcDsgb3V0cyIgI2J3bAkJCQkJXAotCQkgICAgIDogIitTIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOwkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI2J3bChpbnQgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInJlcDsgaW5zIiAjYndsCQkJCQlcCi0JCSAgICAgOiAiK0QiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCi19Ci0KLUJVSUxESU8oYiwgYiwgY2hhcikKLUJVSUxESU8odywgdywgc2hvcnQpCi1CVUlMRElPKGwsICwgaW50KQotCi0jZW5kaWYgLyogX0FTTV9YODZfSU9fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDA2NzguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0lPXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfSU9fNjRfSAotCi0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucwotICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQotICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKLSAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCi0gKgotICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCi0gKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0Ci0gKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKLSAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKLSAqIG1pc3Rha2Ugc29tZXdoZXJlLgotICovCi0KLS8qCi0gKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCi0gKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCi0gKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgotICoKLSAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6Ci0gKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCi0gKgotICoJCUxpbnVzCi0gKi8KLQotIC8qCi0gICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKLSAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCi0gICoKLSAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKLSAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCi0gICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+Ci0gICovCi0KLWV4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKLQotZXh0ZXJuIGludCBpb19kZWxheV90eXBlOwotZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQotewotCW5hdGl2ZV9pb19kZWxheSgpOwotI2lmZGVmIFJFQUxMWV9TTE9XX0lPCi0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKgotICogVGFsayBhYm91dCBtaXN1c2luZyBtYWNyb3MuLgotICovCi0jZGVmaW5lIF9fT1VUMShzLCB4KQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNzKHVuc2lnbmVkIHggdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsKLQotI2RlZmluZSBfX09VVDIocywgczEsIHMyKQkJCQlcCi1hc20gdm9sYXRpbGUgKCJvdXQiICNzICIgJSIgczEgIjAsJSIgczIgIjEiCi0KLSNpZm5kZWYgUkVBTExZX1NMT1dfSU8KLSNkZWZpbmUgUkVBTExZX1NMT1dfSU8KLSNkZWZpbmUgVU5TRVRfUkVBTExZX1NMT1dfSU8KLSNlbmRpZgotCi0jZGVmaW5lIF9fT1VUKHMsIHMxLCB4KQkJCQkJCQlcCi0JX19PVVQxKHMsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsJXAotCX0JCQkJCQkJCVwKLQlfX09VVDEocyMjX3AsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsgXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgX19JTjEocykJCQkJCQkJXAotc3RhdGljIGlubGluZSBSRVRVUk5fVFlQRSBpbiMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0KQkJCVwKLXsJCQkJCQkJCQlcCi0JUkVUVVJOX1RZUEUgX3Y7Ci0KLSNkZWZpbmUgX19JTjIocywgczEsIHMyKQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJpbiIgI3MgIiAlIiBzMiAiMSwlIiBzMSAiMCIKLQotI2RlZmluZSBfX0lOKHMsIHMxLCBpLi4uKQkJCQkJCVwKLQlfX0lOMShzKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOwlcCi0JcmV0dXJuIF92OwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCV9fSU4xKHMjI19wKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOwlcCi0Jc2xvd19kb3duX2lvKCk7IFwKLQlyZXR1cm4gX3Y7IH0KLQotI2lmZGVmIFVOU0VUX1JFQUxMWV9TTE9XX0lPCi0jdW5kZWYgUkVBTExZX1NMT1dfSU8KLSNlbmRpZgotCi0jZGVmaW5lIF9fSU5TKHMpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqYWRkciwJCVwKLQkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJyZXAgOyBpbnMiICNzCQkJCQlcCi0JCSAgICAgIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KQkJCVwKLQkJICAgICAgOiAiZCIgKHBvcnQpLCAiMCIgKGFkZHIpLCAiMSIgKGNvdW50KSk7CQlcCi19Ci0KLSNkZWZpbmUgX19PVVRTKHMpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsCVwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQpCQkJCVwKLXsJCQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlICgicmVwIDsgb3V0cyIgI3MJCQkJCVwKLQkJICAgICAgOiAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJXAotCQkgICAgICA6ICJkIiAocG9ydCksICIwIiAoYWRkciksICIxIiAoY291bnQpKTsJCVwKLX0KLQotI2RlZmluZSBSRVRVUk5fVFlQRSB1bnNpZ25lZCBjaGFyCi1fX0lOKGIsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIHNob3J0Ci1fX0lOKHcsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGludAotX19JTihsLCAiIikKLSN1bmRlZiBSRVRVUk5fVFlQRQotCi1fX09VVChiLCAiYiIsIGNoYXIpCi1fX09VVCh3LCAidyIsIHNob3J0KQotX19PVVQobCwgLCBpbnQpCi0KLV9fSU5TKGIpCi1fX0lOUyh3KQotX19JTlMobCkKLQotX19PVVRTKGIpCi1fX09VVFModykKLV9fT1VUUyhsKQotCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCi0KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCi12b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKTsKLXZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwKLQkJCQkgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X2Zyb21pbyh0bywgKHVuc2lnbmVkIGxvbmcpZnJvbSwgbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCi0JCQkgICAgICAgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X3RvaW8oKHVuc2lnbmVkIGxvbmcpdG8sIGZyb20sIGxlbik7Ci19Ci0KLXZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSwgaW50IGIsIHNpemVfdCBjKTsKLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLSNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCi0KLS8qCi0gKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fWDg2X0lPXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKaW5kZXggYTI5ZjQ4Yy4uMjg4Yjk2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKQEAgLTM5LDExICszOSw1IEBACiAjZGVmaW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKICNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkgICAgICAgKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbiArCVwKIAkJCQkgTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcykKLQotI2lmZGVmIENPTkZJR19OVU1BX0VNVQotI2RlZmluZSBGQUtFX05PREVfTUlOX1NJWkUJKDY0ICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLCSh+KEZBS0VfTk9ERV9NSU5fU0laRSAtIDFVTCkpCi0jZW5kaWYKLQogI2VuZGlmCiAjZW5kaWYgLyogX0FTTV9YODZfTU1aT05FXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKaW5kZXggMTM5ZDRjMS4uOTNkYTljMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTE5LDcgKzE5LDYgQEAKIGV4dGVybiBpbnQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKIGV4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IGF2YWlsX3RvX3Jlc3J2X3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHJlc2VydmVfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHJlbGVhc2VfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgcmVzZXJ2ZV9ldm50c2VsX25taSh1bnNpZ25lZCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oCmluZGV4IGM0YWU4MjIuLjgyM2UwNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKQEAgLTM2LDYgKzM2LDExIEBACiBleHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7CisKKyNpZmRlZiBDT05GSUdfTlVNQV9FTVUKKyNkZWZpbmUgRkFLRV9OT0RFX01JTl9TSVpFCSgodTY0KTY0IDw8IDIwKQorI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxVUwpKQorI2VuZGlmIC8qIENPTkZJR19OVU1BX0VNVSAqLwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NwdV90b19ub2RlKHZvaWQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKQl7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCmluZGV4IDlmMGE1ZjUuLjEzMzcwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaApAQCAtMzMsNiArMzMsMTAgQEAKIAogZXh0ZXJuIHZvaWQgKnhxdWFkX3BvcnRpbzsKIAorI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCisjZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCisjZGVmaW5lIFhRVUFEX1BPUlRfQUREUihwb3J0LCBxdWFkKSAoeHF1YWRfcG9ydGlvICsgKFhRVUFEX1BPUlRJT19RVUFEKnF1YWQpICsgcG9ydCkKKwogLyoKICAqIFNZU19DRkdfREFUQV9QUklWX0FERFIsIHN0cnVjdCBlYWNocXVhZG1lbSwgYW5kIHN0cnVjdCBzeXNfY2ZnX2RhdGEgYXJlIHRoZQogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKaW5kZXggNjQyZmUzNC4uYTY2N2YyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaApAQCAtNDAsNyArNDAsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1leHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKIGV4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKaW5kZXggYjRiZjlhOS4uMDViNThjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBQQ0lfQ0hFQ0tfRU5BQkxFX0FNRF9NTUNPTkYJMHgyMDAwMAogI2RlZmluZSBQQ0lfSEFTX0lPX0VDUwkJMHg0MDAwMAogI2RlZmluZSBQQ0lfTk9BU1NJR05fUk9NUwkweDgwMDAwCisjZGVmaW5lIFBDSV9ST09UX05PX0NSUwkJMHgxMDAwMDAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2lfcHJvYmU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwaXJxX3RhYmxlX2FkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggMTM4MDM2Ny4uYmVmZDE3MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMjcsNyArMjcsMTQgQEAKIC8qCiAgKiBJbmNsdWRlcyBldmVudHNlbCBhbmQgdW5pdCBtYXNrIGFzIHdlbGw6CiAgKi8KLSNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0sJCQkJICAgIDB4ZmZmZgorCisKKyNkZWZpbmUgSU5URUxfQVJDSF9FVlRTRUxfTUFTSwkJMHgwMDAwMDBGRlVMTAorI2RlZmluZSBJTlRFTF9BUkNIX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAorI2RlZmluZSBJTlRFTF9BUkNIX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAorI2RlZmluZSBJTlRFTF9BUkNIX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfQ05UX01BU0sJCTB4RkYwMDAwMDBVTEwKKyNkZWZpbmUgSU5URUxfQVJDSF9FVkVOVF9NQVNLCShJTlRFTF9BUkNIX1VOSVRfTUFTS3xJTlRFTF9BUkNIX0VWVFNFTF9NQVNLKQogCiAvKgogICogZmlsdGVyIG1hc2sgdG8gdmFsaWRhdGUgZml4ZWQgY291bnRlciBldmVudHMuCkBAIC0zOCw3ICs0NSwxMiBAQAogICogIFRoZSBvdGhlciBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQgYnkgZml4ZWQgY291bnRlcnMuCiAgKiAgVGhlIGFueS10aHJlYWQgb3B0aW9uIGlzIHN1cHBvcnRlZCBzdGFydGluZyB3aXRoIHYzLgogICovCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVF9GSUxURVJfTUFTSwkJCTB4ZmY4NDAwMDAKKyNkZWZpbmUgSU5URUxfQVJDSF9GSVhFRF9NQVNLIFwKKwkoSU5URUxfQVJDSF9DTlRfTUFTS3wgXAorCSBJTlRFTF9BUkNIX0lOVl9NQVNLfCBcCisJIElOVEVMX0FSQ0hfRURHRV9NQVNLfFwKKwkgSU5URUxfQVJDSF9VTklUX01BU0t8XAorCSBJTlRFTF9BUkNIX0VWVFNFTF9NQVNLKQogCiAjZGVmaW5lIEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19TRUwJCSAgICAgIDB4M2MKICNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1VNQVNLCQkoMHgwMCA8PCA4KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDBlOGMyYTAuLjI3MWRlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTIzLDYgKzIzLDExIEBACiAjZW5kaWYKIAogLyoKKyAqIEZsYWdzIHRvIHVzZSB3aGVuIGFsbG9jYXRpbmcgYSB1c2VyIHBhZ2UgdGFibGUgcGFnZS4KKyAqLworZXh0ZXJuIGdmcF90IF9fdXNlcnB0ZV9hbGxvY19nZnA7CisKKy8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KICAqLwogZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggZmM4MDFiYS4uYjc1M2VhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTQ1MCw2ICs0NTAsOCBAQAogCXN0cnVjdCBwZXJmX2V2ZW50CSpwdHJhY2VfYnBzW0hCUF9OVU1dOwogCS8qIERlYnVnIHN0YXR1cyB1c2VkIGZvciB0cmFwcywgc2luZ2xlIHN0ZXBzLCBldGMuLi4gKi8KIAl1bnNpZ25lZCBsb25nICAgICAgICAgICBkZWJ1Z3JlZzY7CisJLyogS2VlcCB0cmFjayBvZiB0aGUgZXhhY3QgZHI3IHZhbHVlIHNldCBieSB0aGUgdXNlciAqLworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIHB0cmFjZV9kcjc7CiAJLyogRmF1bHQgaW5mbzogKi8KIAl1bnNpZ25lZCBsb25nCQljcjI7CiAJdW5zaWduZWQgbG9uZwkJdHJhcF9ubzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggOWQzNjlmNi4uMjAxMDI4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTI3NCwxMCArMjc0LDYgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLS8qIEdldCBOdGggYXJndW1lbnQgYXQgZnVuY3Rpb24gY2FsbCAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVnc19nZXRfYXJndW1lbnRfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgbik7Ci0KIC8qCiAgKiBUaGVzZSBhcmUgZGVmaW5lZCBhcyBwZXIgbGludXgvcHRyYWNlLmgsIHdoaWNoIHNlZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmgKaW5kZXggY2E3NTE3ZC4uNjA2ZWRlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KIAogc3RydWN0IHJ3c2VtX3dhaXRlcjsKIApAQCAtNTUsMTcgKzU2LDI4IEBACiAKIC8qCiAgKiB0aGUgc2VtYXBob3JlIGRlZmluaXRpb24KKyAqCisgKiBUaGUgYmlhcyB2YWx1ZXMgYW5kIHRoZSBjb3VudGVyIHR5cGUgbGltaXRzIHRoZSBudW1iZXIgb2YKKyAqIHBvdGVudGlhbCByZWFkZXJzL3dyaXRlcnMgdG8gMzI3NjcgZm9yIDMyIGJpdHMgYW5kIDIxNDc0ODM2NDcKKyAqIGZvciA2NCBiaXRzLgogICovCiAKLSNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDAKLSNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmYKLSNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkoLTB4MDAwMTAwMDApCisjaWZkZWYgQ09ORklHX1g4Nl82NAorIyBkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4ZmZmZmZmZmZMCisjZWxzZQorIyBkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmZMCisjZW5kaWYKKworI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMEwKKyNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDFMCisjZGVmaW5lIFJXU0VNX1dBSVRJTkdfQklBUwkJKC1SV1NFTV9BQ1RJVkVfTUFTSy0xKQogI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCQlSV1NFTV9BQ1RJVkVfQklBUwogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQogCit0eXBlZGVmIHNpZ25lZCBsb25nIHJ3c2VtX2NvdW50X3Q7CisKIHN0cnVjdCByd19zZW1hcGhvcmUgewotCXNpZ25lZCBsb25nCQljb3VudDsKKwlyd3NlbV9jb3VudF90CQljb3VudDsKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKQEAgLTEwNSw3ICsxMTcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fcmVhZFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgaW5jbCAgICAgICglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYIF9BU01fSU5DICIoJTEpXG5cdCIKIAkJICAgICAvKiBhZGRzIDB4MDAwMDAwMDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwogCQkgICAgICIgIGpucyAgICAgICAgMWZcbiIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fZG93bl9yZWFkX2ZhaWxlZFxuIgpAQCAtMTIxLDE0ICsxMzMsMTQgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JX19zMzIgcmVzdWx0LCB0bXA7CisJcndzZW1fY291bnRfdCByZXN1bHQsIHRtcDsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgotCQkgICAgICIgIG1vdmwgICAgICAlMCwlMVxuXHQiCisJCSAgICAgIiAgbW92ICAgICAgICAgICUwLCUxXG5cdCIKIAkJICAgICAiMTpcblx0IgotCQkgICAgICIgIG1vdmwJICAgICAlMSwlMlxuXHQiCi0JCSAgICAgIiAgYWRkbCAgICAgICUzLCUyXG5cdCIKKwkJICAgICAiICBtb3YgICAgICAgICAgJTEsJTJcblx0IgorCQkgICAgICIgIGFkZCAgICAgICAgICAlMywlMlxuXHQiCiAJCSAgICAgIiAgamxlCSAgICAgMmZcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIGNtcHhjaGdsICAlMiwlMFxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgY21weGNoZyAgJTIsJTBcblx0IgogCQkgICAgICIgIGpuegkgICAgIDFiXG5cdCIKIAkJICAgICAiMjpcblx0IgogCQkgICAgICIjIGVuZGluZyBfX2Rvd25fcmVhZF90cnlsb2NrXG5cdCIKQEAgLTE0MywxMyArMTU1LDEzIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGVfbmVzdGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgaW50IHN1YmNsYXNzKQogewotCWludCB0bXA7CisJcndzZW1fY291bnRfdCB0bXA7CiAKIAl0bXAgPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fd3JpdGVcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJTEsKCUyKVxuXHQiCiAJCSAgICAgLyogc3VidHJhY3QgMHgwMDAwZmZmZiwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCi0JCSAgICAgIiAgdGVzdGwgICAgICUlZWR4LCUlZWR4XG5cdCIKKwkJICAgICAiICB0ZXN0ICAgICAgJTEsJTFcblx0IgogCQkgICAgIC8qIHdhcyB0aGUgY291bnQgMCBiZWZvcmU/ICovCiAJCSAgICAgIiAganogICAgICAgIDFmXG4iCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVkXG4iCkBAIC0xNzAsOSArMTgyLDkgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCXNpZ25lZCBsb25nIHJldCA9IGNtcHhjaGcoJnNlbS0+Y291bnQsCi0JCQkJICBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwKLQkJCQkgIFJXU0VNX0FDVElWRV9XUklURV9CSUFTKTsKKwlyd3NlbV9jb3VudF90IHJldCA9IGNtcHhjaGcoJnNlbS0+Y291bnQsCisJCQkJICAgIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLAorCQkJCSAgICBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyk7CiAJaWYgKHJldCA9PSBSV1NFTV9VTkxPQ0tFRF9WQUxVRSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CkBAIC0xODMsOSArMTk1LDkgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JX19zMzIgdG1wID0gLVJXU0VNX0FDVElWRV9SRUFEX0JJQVM7CisJcndzZW1fY291bnRfdCB0bXAgPSAtUldTRU1fQUNUSVZFX1JFQURfQklBUzsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZCAgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKIAkJICAgICAvKiBzdWJ0cmFjdHMgMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCiAJCSAgICAgIiAgam5zICAgICAgICAxZlxuXHQiCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKQEAgLTIwMSwxOCArMjEzLDE4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKKwlyd3NlbV9jb3VudF90IHRtcDsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgotCQkgICAgICIgIG1vdmwgICAgICAlMiwlJWVkeFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZGwgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKIAkJICAgICAvKiB0cmllcyB0byB0cmFuc2l0aW9uCiAJCQkweGZmZmYwMDAxIC0+IDB4MDAwMDAwMDAgKi8KIAkJICAgICAiICBqeiAgICAgICAxZlxuIgogCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV93YWtlXG4iCiAJCSAgICAgIjE6XG5cdCIKIAkJICAgICAiIyBlbmRpbmcgX191cF93cml0ZVxuIgotCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKLQkJICAgICA6ICJhIiAoc2VtKSwgImkiICgtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCi0JCSAgICAgOiAibWVtb3J5IiwgImNjIiwgImVkeCIpOworCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKKwkJICAgICA6ICJhIiAoc2VtKSwgIjEiICgtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKIC8qCkBAIC0yMjEsMzMgKzIzMywzOCBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZG93bmdyYWRlX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bmdyYWRlX3dyaXRlXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICBhZGRsICAgICAgJTIsKCUlZWF4KVxuXHQiCi0JCSAgICAgLyogdHJhbnNpdGlvbnMgMHhaWlpaMDAwMSAtPiAweFlZWVkwMDAxICovCisJCSAgICAgTE9DS19QUkVGSVggX0FTTV9BREQgIiUyLCglMSlcblx0IgorCQkgICAgIC8qCisJCSAgICAgICogdHJhbnNpdGlvbnMgMHhaWlpaMDAwMSAtPiAweFlZWVkwMDAxIChpMzg2KQorCQkgICAgICAqICAgICAweFpaWlpaWlpaMDAwMDAwMDEgLT4gMHhZWVlZWVlZWTAwMDAwMDAxICh4ODZfNjQpCisJCSAgICAgICovCiAJCSAgICAgIiAgam5zICAgICAgIDFmXG5cdCIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fZG93bmdyYWRlX3dha2VcbiIKIAkJICAgICAiMTpcblx0IgogCQkgICAgICIjIGVuZGluZyBfX2Rvd25ncmFkZV93cml0ZVxuIgogCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKLQkJICAgICA6ICJhIiAoc2VtKSwgImkiICgtUldTRU1fV0FJVElOR19CSUFTKQorCQkgICAgIDogImEiIChzZW0pLCAiZXIiICgtUldTRU1fV0FJVElOR19CSUFTKQogCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCiAvKgogICogaW1wbGVtZW50IGF0b21pYyBhZGQgZnVuY3Rpb25hbGl0eQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKHJ3c2VtX2NvdW50X3QgZGVsdGEsCisJCQkJICAgIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIF9BU01fQUREICIlMSwlMCIKIAkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCi0JCSAgICAgOiAiaXIiIChkZWx0YSkpOworCQkgICAgIDogImVyIiAoZGVsdGEpKTsKIH0KIAogLyoKICAqIGltcGxlbWVudCBleGNoYW5nZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKICAqLwotc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3N0YXRpYyBpbmxpbmUgcndzZW1fY291bnRfdCByd3NlbV9hdG9taWNfdXBkYXRlKHJ3c2VtX2NvdW50X3QgZGVsdGEsCisJCQkJCQlzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JaW50IHRtcCA9IGRlbHRhOworCXJ3c2VtX2NvdW50X3QgdG1wID0gZGVsdGE7CiAKIAlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGQgJTAsJTEiCiAJCSAgICAgOiAiK3IiICh0bXApLCAiK20iIChzZW0tPmNvdW50KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAxZTc5Njc4Li40Y2ZjOTA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMTM1LDYgKzEzNSw4IEBACiB2b2lkIG5hdGl2ZV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwogdm9pZCBuYXRpdmVfcGxheV9kZWFkKHZvaWQpOwogdm9pZCBwbGF5X2RlYWRfY29tbW9uKHZvaWQpOwordm9pZCB3YmludmRfb25fY3B1KGludCBjcHUpOworaW50IHdiaW52ZF9vbl9hbGxfY3B1cyh2b2lkKTsKIAogdm9pZCBuYXRpdmVfc2VuZF9jYWxsX2Z1bmNfaXBpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKIHZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkoaW50IGNwdSk7CkBAIC0xNDcsNiArMTQ5LDEzIEBACiB7CiAJcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9jYWxsb3V0X21hc2spOwogfQorI2Vsc2UgLyogIUNPTkZJR19TTVAgKi8KKyNkZWZpbmUgd2JpbnZkX29uX2NwdShjcHUpICAgICB3YmludmQoKQorc3RhdGljIGlubGluZSBpbnQgd2JpbnZkX29uX2FsbF9jcHVzKHZvaWQpCit7CisJd2JpbnZkKCk7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiBleHRlcm4gdW5zaWduZWQgZGlzYWJsZWRfY3B1cyBfX2NwdWluaXRkYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCmluZGV4IDM1ZTg5MTIuLjRkYWI3OGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKQEAgLTMsOCArMyw2IEBACiAKIGV4dGVybiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50OwogCi1pbnQgeDg2X2lzX3N0YWNrX2lkKGludCBpZCwgY2hhciAqbmFtZSk7Ci0KIHN0cnVjdCB0aHJlYWRfaW5mbzsKIHN0cnVjdCBzdGFja3RyYWNlX29wczsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDhkMzNiYzUuLmM0YTM0OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzeXNfY2FsbF90YWJsZVtdOworCiAvKgogICogT25seSB0aGUgbG93IDMyIGJpdHMgb2Ygb3JpZ19heCBhcmUgbWVhbmluZ2Z1bCwgc28gd2UgcmV0dXJuIGludC4KICAqIFRoaXMgaW1wb3J0YW50bHkgaWdub3JlcyB0aGUgaGlnaCBiaXRzIG9uIDY0LWJpdCwgc28gY29tcGFyaXNvbnMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggZWNiNTQ0ZS4uZTA0NzQwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTExLDkgKzExLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogCiAvKiBlbnRyaWVzIGluIEFSQ0hfRExJTkZPOiAqLwotI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgorI2lmIGRlZmluZWQoQ09ORklHX0lBMzJfRU1VTEFUSU9OKSB8fCAhZGVmaW5lZChDT05GSUdfWDg2XzY0KQogIyBkZWZpbmUgQVRfVkVDVE9SX1NJWkVfQVJDSCAyCi0jZWxzZQorI2Vsc2UgLyogZWxzZSBpdCdzIG5vbi1jb21wYXQgeDg2LTY0ICovCiAjIGRlZmluZSBBVF9WRUNUT1JfU0laRV9BUkNIIDEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKaW5kZXggNTM1ZTQyMTQuLjMxNjcwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qCkBAIC0xNiw3ICsxOCwyNCBAQAogCiAvKiBIYW5kbGVzIGV4Y2VwdGlvbnMgaW4gYm90aCB0byBhbmQgZnJvbSwgYnV0IGRvZXNuJ3QgZG8gYWNjZXNzX29rICovCiBfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZwotY29weV91c2VyX2dlbmVyaWModm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7Citjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7CitfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZworY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKK2NvcHlfdXNlcl9nZW5lcmljKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsZW4pCit7CisJdW5zaWduZWQgcmV0OworCisJYWx0ZXJuYXRpdmVfY2FsbChjb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCwKKwkJCSBjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcsCisJCQkgWDg2X0ZFQVRVUkVfUkVQX0dPT0QsCisJCQkgQVNNX09VVFBVVDIoIj1hIiAocmV0KSwgIj1EIiAodG8pLCAiPVMiIChmcm9tKSwKKwkJCQkgICAgICI9ZCIgKGxlbikpLAorCQkJICIxIiAodG8pLCAiMiIgKGZyb20pLCAiMyIgKGxlbikKKwkJCSA6ICJtZW1vcnkiLCAicmN4IiwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiKTsKKwlyZXR1cm4gcmV0OworfQogCiBfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZwogX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggMDM2ZDI4YS4uZjk1NzAzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtNDksNiArNDksNyBAQAogCiAjaWZkZWYJQ09ORklHX1g4Nl82NAogIyBpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyMgaW5jbHVkZSA8YXNtL251bWFfNjQuaD4KICNlbmRpZgkJCQkvKiBYODYgKi8KIAogI2RlZmluZSBCQURfTUFEVF9FTlRSWShlbnRyeSwgZW5kKSAoCQkJCQkgICAgXApAQCAtNDgyLDYgKzQ4MywyNSBAQAogICovCiAjaWZkZWYgQ09ORklHX0FDUElfSE9UUExVR19DUFUKIAorc3RhdGljIHZvaWQgYWNwaV9tYXBfY3B1Mm5vZGUoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgY3B1LCBpbnQgcGh5c2lkKQoreworI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKwlpbnQgbmlkOworCisJbmlkID0gYWNwaV9nZXRfbm9kZShoYW5kbGUpOworCWlmIChuaWQgPT0gLTEgfHwgIW5vZGVfb25saW5lKG5pZCkpCisJCXJldHVybjsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJYXBpY2lkX3RvX25vZGVbcGh5c2lkXSA9IG5pZDsKKwludW1hX3NldF9ub2RlKGNwdSwgbmlkKTsKKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKwlhcGljaWRfMl9ub2RlW3BoeXNpZF0gPSBuaWQ7CisJY3B1X3RvX25vZGVfbWFwW2NwdV0gPSBuaWQ7CisjZW5kaWYKKworI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgX19jcHVpbml0IF9hY3BpX21hcF9sc2FwaWMoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKnBjcHUpCiB7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKQEAgLTU0MCw2ICs1NjAsNyBAQAogCX0KIAogCWNwdSA9IGNwdW1hc2tfZmlyc3QobmV3X21hcCk7CisJYWNwaV9tYXBfY3B1Mm5vZGUoaGFuZGxlLCBjcHUsIHBoeXNpZCk7CiAKIAkqcGNwdSA9IGNwdTsKIAlyZXR2YWwgPSAwOwpAQCAtMTE4NSw5ICsxMjA2LDYgQEAKIAkJaWYgKCFlcnJvcikgewogCQkJYWNwaV9sYXBpYyA9IDE7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0JJR1NNUAotCQkJZ2VuZXJpY19iaWdzbXBfcHJvYmUoKTsKLSNlbmRpZgogCQkJLyoKIAkJCSAqIFBhcnNlIE1BRFQgSU8tQVBJQyBlbnRyaWVzCiAJCQkgKi8KQEAgLTExOTcsOCArMTIxNSw2IEBACiAJCQkJYWNwaV9pb2FwaWMgPSAxOwogCiAJCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDE7Ci0JCQkJaWYgKGFwaWMtPnNldHVwX2FwaWNfcm91dGluZykKLQkJCQkJYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKCk7CiAJCQl9CiAJCX0KIAkJaWYgKGVycm9yID09IC1FSU5WQUwpIHsKQEAgLTEzNDksMTQgKzEzNjUsNiBAQAogCSB9LAogCXsKIAkgLmNhbGxiYWNrID0gZm9yY2VfYWNwaV9odCwKLQkgLmlkZW50ID0gIkFTVVMgUDJCLURTIiwKLQkgLm1hdGNoZXMgPSB7Ci0JCSAgICAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIElOQy4iKSwKLQkJICAgICBETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJQMkItRFMiKSwKLQkJICAgICB9LAotCSB9LAotCXsKLQkgLmNhbGxiYWNrID0gZm9yY2VfYWNwaV9odCwKIAkgLmlkZW50ID0gIkFTVVMgQ1VSLURMUyIsCiAJIC5tYXRjaGVzID0gewogCQkgICAgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJTkMuIiksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IGRlNzM1M2MuLmU2ZWEwMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJCQkJIHN0cnVjdCBhbHRfaW5zdHIgKmVuZCkKIHsKIAlzdHJ1Y3QgYWx0X2luc3RyICphOwotCWNoYXIgaW5zbmJ1ZltNQVhfUEFUQ0hfTEVOXTsKKwl1OCBpbnNuYnVmW01BWF9QQVRDSF9MRU5dOwogCiAJRFBSSU5USygiJXM6IGFsdCB0YWJsZSAlcCAtPiAlcFxuIiwgX19mdW5jX18sIHN0YXJ0LCBlbmQpOwogCWZvciAoYSA9IHN0YXJ0OyBhIDwgZW5kOyBhKyspIHsKQEAgLTIyMyw2ICsyMjMsOCBAQAogCQl9CiAjZW5kaWYKIAkJbWVtY3B5KGluc25idWYsIGEtPnJlcGxhY2VtZW50LCBhLT5yZXBsYWNlbWVudGxlbik7CisJCWlmICgqaW5zbmJ1ZiA9PSAweGU4ICYmIGEtPnJlcGxhY2VtZW50bGVuID09IDUpCisJCSAgICAqKHMzMiAqKShpbnNuYnVmICsgMSkgKz0gYS0+cmVwbGFjZW1lbnQgLSBhLT5pbnN0cjsKIAkJYWRkX25vcHMoaW5zbmJ1ZiArIGEtPnJlcGxhY2VtZW50bGVuLAogCQkJIGEtPmluc3RybGVuIC0gYS0+cmVwbGFjZW1lbnRsZW4pOwogCQl0ZXh0X3Bva2VfZWFybHkoaW5zdHIsIGluc25idWYsIGEtPmluc3RybGVuKTsKQEAgLTM5MCw2ICszOTIsMjQgQEAKIAltdXRleF91bmxvY2soJnNtcF9hbHQpOwogfQogCisvKiBSZXR1cm4gMSBpZiB0aGUgYWRkcmVzcyByYW5nZSBpcyByZXNlcnZlZCBmb3Igc21wLWFsdGVybmF0aXZlcyAqLworaW50IGFsdGVybmF0aXZlc190ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJc3RydWN0IHNtcF9hbHRfbW9kdWxlICptb2Q7CisJdTggKipwdHI7CisJdTggKnRleHRfc3RhcnQgPSBzdGFydDsKKwl1OCAqdGV4dF9lbmQgPSBlbmQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJnNtcF9hbHRfbW9kdWxlcywgbmV4dCkgeworCQlpZiAobW9kLT50ZXh0ID4gdGV4dF9lbmQgfHwgbW9kLT50ZXh0X2VuZCA8IHRleHRfc3RhcnQpCisJCQljb250aW51ZTsKKwkJZm9yIChwdHIgPSBtb2QtPmxvY2tzOyBwdHIgPCBtb2QtPmxvY2tzX2VuZDsgcHRyKyspCisJCQlpZiAodGV4dF9zdGFydCA8PSAqcHRyICYmIHRleHRfZW5kID49ICpwdHIpCisJCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCmluZGV4IDIzODI0ZmUuLmFkYjBiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKQEAgLTk4MCw3ICs5ODAsNyBAQAogewogCWludCBpbmRleCA9IGRtYV9kb20tPmFwZXJ0dXJlX3NpemUgPj4gQVBFUlRVUkVfUkFOR0VfU0hJRlQ7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7Ci0JaW50IGk7CisJdW5zaWduZWQgbG9uZyBpOwogCiAjaWZkZWYgQ09ORklHX0lPTU1VX1NUUkVTUwogCXBvcHVsYXRlID0gZmFsc2U7CkBAIC0xNDg5LDExICsxNDg5LDE0IEBACiB7CiAJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOwogCXN0cnVjdCBpb21tdV9kZXZfZGF0YSAqYWxpYXNfZGF0YTsKKwlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKCFkZXZfZGF0YS0+ZG9tYWluKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfZGF0YS0+ZG9tYWluLT5sb2NrLCBmbGFncyk7CisJZG9tYWluID0gZGV2X2RhdGEtPmRvbWFpbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAogCWlmIChkZXZfZGF0YS0+YWxpYXMgIT0gZGV2KSB7CiAJCWFsaWFzX2RhdGEgPSBnZXRfZGV2X2RhdGEoZGV2X2RhdGEtPmFsaWFzKTsKQEAgLTE1MDQsMTMgKzE1MDcsMTUgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2X2RhdGEtPmJpbmQpKQogCQlkb19kZXRhY2goZGV2KTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9kYXRhLT5kb21haW4tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogSWYgd2UgcnVuIGluIHBhc3N0aHJvdWdoIG1vZGUgdGhlIGRldmljZSBtdXN0IGJlIGFzc2lnbmVkIHRvIHRoZQotCSAqIHBhc3N0aHJvdWdoIGRvbWFpbiBpZiBpdCBpcyBkZXRhY2hlZCBmcm9tIGFueSBvdGhlciBkb21haW4KKwkgKiBwYXNzdGhyb3VnaCBkb21haW4gaWYgaXQgaXMgZGV0YWNoZWQgZnJvbSBhbnkgb3RoZXIgZG9tYWluLgorCSAqIE1ha2Ugc3VyZSB3ZSBjYW4gZGVhc3NpZ24gZnJvbSB0aGUgcHRfZG9tYWluIGl0c2VsZi4KIAkgKi8KLQlpZiAoaW9tbXVfcGFzc190aHJvdWdoICYmIGRldl9kYXRhLT5kb21haW4gPT0gTlVMTCkKKwlpZiAoaW9tbXVfcGFzc190aHJvdWdoICYmCisJICAgIChkZXZfZGF0YS0+ZG9tYWluID09IE5VTEwgJiYgZG9tYWluICE9IHB0X2RvbWFpbikpCiAJCV9fYXR0YWNoX2RldmljZShkZXYsIHB0X2RvbWFpbik7CiB9CiAKQEAgLTIyMTgsNiArMjIyMywxMiBAQAogLyoKICAqIFRoZSBmdW5jdGlvbiB3aGljaCBjbHVlcyB0aGUgQU1EIElPTU1VIGRyaXZlciBpbnRvIGRtYV9vcHMuCiAgKi8KKwordm9pZCBfX2luaXQgYW1kX2lvbW11X2luaXRfYXBpKHZvaWQpCit7CisJcmVnaXN0ZXJfaW9tbXUoJmFtZF9pb21tdV9vcHMpOworfQorCiBpbnQgX19pbml0IGFtZF9pb21tdV9pbml0X2RtYV9vcHModm9pZCkKIHsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKQEAgLTIyNTMsOCArMjI2NCw2IEBACiAJLyogTWFrZSB0aGUgZHJpdmVyIGZpbmFsbHkgdmlzaWJsZSB0byB0aGUgZHJpdmVycyAqLwogCWRtYV9vcHMgPSAmYW1kX2lvbW11X2RtYV9vcHM7CiAKLQlyZWdpc3Rlcl9pb21tdSgmYW1kX2lvbW11X29wcyk7Ci0KIAlhbWRfaW9tbXVfc3RhdHNfaW5pdCgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IGZiNDkwY2UuLjlkYzkxYjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCkBAIC0xMjkyLDkgKzEyOTIsMTIgQEAKIAkJcmV0ID0gYW1kX2lvbW11X2luaXRfcGFzc3Rocm91Z2goKTsKIAllbHNlCiAJCXJldCA9IGFtZF9pb21tdV9pbml0X2RtYV9vcHMoKTsKKwogCWlmIChyZXQpCiAJCWdvdG8gZnJlZTsKIAorCWFtZF9pb21tdV9pbml0X2FwaSgpOworCiAJYW1kX2lvbW11X2luaXRfbm90aWZpZXIoKTsKIAogCWVuYWJsZV9pb21tdXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCAzOTg3ZTQ0Li42ZTI5YjJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC01ODEsNyArNTgxLDcgQEAKIAkJcmVzID0gKCgodTY0KSgqZGVsdGF0c2MpKSAqIHBtXzEwMG1zKTsKIAkJZG9fZGl2KHJlcywgZGVsdGFwbSk7CiAJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlRTQyBkZWx0YSBhZGp1c3RlZCB0byAiCi0JCQkJCSAgIlBNLVRpbWVyOiAlbHUgKCVsZCkgXG4iLAorCQkJCQkgICJQTS1UaW1lcjogJWx1ICglbGQpXG4iLAogCQkJCQkodW5zaWduZWQgbG9uZylyZXMsICpkZWx0YXRzYyk7CiAJCSpkZWx0YXRzYyA9IChsb25nKXJlczsKIAl9CkBAIC0xNjQxLDkgKzE2NDEsNyBAQAogI2VuZGlmCiAKIAllbmFibGVfSVJfeDJhcGljKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKCk7Ci0jZW5kaWYKIAogCXZlcmlmeV9sb2NhbF9BUElDKCk7CiAJY29ubmVjdF9ic3BfQVBJQygpOwpAQCAtMTg5MSwyMSArMTg4OSw2IEBACiAJaWYgKGFwaWNpZCA+IG1heF9waHlzaWNhbF9hcGljaWQpCiAJCW1heF9waHlzaWNhbF9hcGljaWQgPSBhcGljaWQ7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKG51bV9wcm9jZXNzb3JzID4gOCkgewotCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCQlpZiAoIUFQSUNfWEFQSUModmVyc2lvbikpIHsKLQkJCQlkZWZfdG9fYmlnc21wID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIElmIFA0IGFuZCBhYm92ZSBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJCWRlZl90b19iaWdzbXAgPSAxOwotCQl9Ci0JfQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKIAllYXJseV9wZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOwogCWVhcmx5X3Blcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCA1MzI0M2NhLi42YmRkMmM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC0xNjQ3LDcgKzE2NDcsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIElSUSByZWRpcmVjdGlvbiB0YWJsZTpcbiIpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBEc3QgTWFzayBUcmlnIElSUiBQb2wiCi0JCQkgICIgU3RhdCBEbW9kIERlbGkgVmVjdDogICBcbiIpOworCQkJICAiIFN0YXQgRG1vZCBEZWxpIFZlY3Q6XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPD0gcmVnXzAxLmJpdHMuZW50cmllczsgaSsrKSB7CiAJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKaW5kZXggOThjNDY2NS4uNDdkZDg1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAogCW1wY19yZWNvcmQgPSAwOwogCXByaW50ayhLRVJOX0lORk8KLQkJIkZvdW5kIGFuIE9FTSBNUEMgdGFibGUgYXQgJThwIC0gcGFyc2luZyBpdCAuLi4gXG4iLCBvZW10YWJsZSk7CisJCSJGb3VuZCBhbiBPRU0gTVBDIHRhYmxlIGF0ICU4cCAtIHBhcnNpbmcgaXQuLi5cbiIsIG9lbXRhYmxlKTsKIAogCWlmIChtZW1jbXAob2VtdGFibGUtPnNpZ25hdHVyZSwgTVBDX09FTV9TSUdOQVRVUkUsIDQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCmluZGV4IDFhNjU1OWYuLjk5ZDJmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYwpAQCAtNTIsNyArNTIsMzIgQEAKIH0KIGxhdGVfaW5pdGNhbGwocHJpbnRfaXBpX21vZGUpOwogCi12b2lkIGRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit2b2lkIF9faW5pdCBkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZyh2b2lkKQoreworCWludCB2ZXJzaW9uID0gYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF07CisKKwlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDgpIHsKKwkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkJaWYgKCFBUElDX1hBUElDKHZlcnNpb24pKSB7CisJCQkJZGVmX3RvX2JpZ3NtcCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBJZiBQNCBhbmQgYWJvdmUgZmFsbCB0aHJvdWdoICovCisJCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCQlkZWZfdG9fYmlnc21wID0gMTsKKwkJfQorCX0KKworI2lmZGVmIENPTkZJR19YODZfQklHU01QCisJZ2VuZXJpY19iaWdzbXBfcHJvYmUoKTsKKyNlbmRpZgorCisJaWYgKGFwaWMtPnNldHVwX2FwaWNfcm91dGluZykKKwkJYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2FwaWNfZmxhdF9yb3V0aW5nKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJcHJpbnRrKEtFUk5fSU5GTwpAQCAtMTAzLDcgKzEyOCw3IEBACiAJLmluaXRfYXBpY19sZHIJCQk9IGRlZmF1bHRfaW5pdF9hcGljX2xkciwKIAogCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gZGVmYXVsdF9pb2FwaWNfcGh5c19pZF9tYXAsCi0JLnNldHVwX2FwaWNfcm91dGluZwkJPSBkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZywKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IHNldHVwX2FwaWNfZmxhdF9yb3V0aW5nLAogCS5tdWx0aV90aW1lcl9jaGVjawkJPSBOVUxMLAogCS5hcGljaWRfdG9fbm9kZQkJCT0gZGVmYXVsdF9hcGljaWRfdG9fbm9kZSwKIAkuY3B1X3RvX2xvZ2ljYWxfYXBpY2lkCQk9IGRlZmF1bHRfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKaW5kZXggNDUwZmUyMC4uODNlOWJlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJfQogI2VuZGlmCiAKLQlpZiAoYXBpYyA9PSAmYXBpY19mbGF0ICYmIG51bV9wcm9jZXNzb3JzID4gOCkKKwlpZiAoYXBpYyA9PSAmYXBpY19mbGF0ICYmIG51bV9wb3NzaWJsZV9jcHVzKCkgPiA4KQogCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBBUElDIHJvdXRpbmcgdG8gJXNcbiIsIGFwaWMtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCmluZGV4IGI1YjZiMjMuLjAzMWFhODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKQEAgLTE5OTIsOCArMTk5Miw4IEBACiAJCWFwbV9pbmZvLmRpc2FibGVkID0gMTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgbWFjaGluZSBkZXRlY3RlZC4gIgogCQkgICAgICAgIkRpc2FibGluZyBBUE0uXG4iLCBkLT5pZGVudCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlRoaXMgYnVnIGlzIGZpeGVkIGluIGJpb3MgUDE1IHdoaWNoIGlzIGF2YWlsYWJsZSBmb3IgXG4iKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZG93bmxvYWQgZnJvbSBzdXBwb3J0LmludGVsLmNvbSBcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJUaGlzIGJ1ZyBpcyBmaXhlZCBpbiBiaW9zIFAxNSB3aGljaCBpcyBhdmFpbGFibGUgZm9yXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZG93bmxvYWQgZnJvbSBzdXBwb3J0LmludGVsLmNvbVxuIik7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCmluZGV4IDQ2ODQ4OWIuLjk3YWQ3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKQEAgLTMyLDYgKzMyLDEwIEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgX19jcHVpbml0Y29uc3QgY3B1aWRfYml0c1tdID0gewogCQl7IFg4Nl9GRUFUVVJFX0lEQSwgQ1JfRUFYLCAxLCAweDAwMDAwMDA2IH0sCiAJCXsgWDg2X0ZFQVRVUkVfQVJBVCwgQ1JfRUFYLCAyLCAweDAwMDAwMDA2IH0sCisJCXsgWDg2X0ZFQVRVUkVfTlBULCAgIENSX0VEWCwgMCwgMHg4MDAwMDAwYSB9LAorCQl7IFg4Nl9GRUFUVVJFX0xCUlYsICBDUl9FRFgsIDEsIDB4ODAwMDAwMGEgfSwKKwkJeyBYODZfRkVBVFVSRV9TVk1MLCAgQ1JfRURYLCAyLCAweDgwMDAwMDBhIH0sCisJCXsgWDg2X0ZFQVRVUkVfTlJJUFMsIENSX0VEWCwgMywgMHg4MDAwMDAwYSB9LAogCQl7IDAsIDAsIDAsIDAgfQogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggZjEyNWU1Yy4uNmU0NDUxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTEzNTYsNiArMTM1Niw3IEBACiAKIAlrZnJlZShkYXRhLT5wb3dlcm5vd190YWJsZSk7CiAJa2ZyZWUoZGF0YSk7CisJcGVyX2NwdShwb3dlcm5vd19kYXRhLCBwb2wtPmNwdSkgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzc1LDcgKzEzNzYsNyBAQAogCWludCBlcnI7CiAKIAlpZiAoIWRhdGEpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAogCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHF1ZXJ5X3ZhbHVlc19vbl9jcHUsICZlcnIsIHRydWUpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCBmYzZjOGVmLi5lZGRiMWJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL2s4Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAjZGVmaW5lIExWTF8xX0lOU1QJMQogI2RlZmluZSBMVkxfMV9EQVRBCTIKQEAgLTMxLDYgKzMyLDggQEAKIAlzaG9ydCBzaXplOwogfTsKIAorI2RlZmluZSBNQih4KQkoKHgpICogMTAyNCkKKwogLyogQWxsIHRoZSBjYWNoZSBkZXNjcmlwdG9yIHR5cGVzIHdlIGNhcmUgYWJvdXQgKG5vIFRMQiBvcgogICAgdHJhY2UgY2FjaGUgZW50cmllcykgKi8KIApAQCAtNDQsOSArNDcsOSBAQAogCXsgMHgwZCwgTFZMXzFfREFUQSwgMTYgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgyMSwgTFZMXzIsICAgICAgMjU2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MjIsIExWTF8zLCAgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHgyMywgTFZMXzMsICAgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHgyNSwgTFZMXzMsICAgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHgyOSwgTFZMXzMsICAgICAgNDA5NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHgyMywgTFZMXzMsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4MjUsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDI5LCBMVkxfMywgICAgICBNQig0KSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgyYywgTFZMXzFfREFUQSwgMzIgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgzMCwgTFZMXzFfSU5TVCwgMzIgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgzOSwgTFZMXzIsICAgICAgMTI4IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCkBAIC01OSwxNiArNjIsMTYgQEAKIAl7IDB4NDEsIExWTF8yLCAgICAgIDEyOCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDQyLCBMVkxfMiwgICAgICAyNTYgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0MywgTFZMXzIsICAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDQsIExWTF8yLCAgICAgIDEwMjQgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0NSwgTFZMXzIsICAgICAgMjA0OCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ2LCBMVkxfMywgICAgICA0MDk2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDcsIExWTF8zLCAgICAgIDgxOTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0OSwgTFZMXzMsICAgICAgNDA5NiB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0YSwgTFZMXzMsICAgICAgNjE0NCB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0YiwgTFZMXzMsICAgICAgODE5MiB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0YywgTFZMXzMsICAgICAxMjI4OCB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0ZCwgTFZMXzMsICAgICAxNjM4NCB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0ZSwgTFZMXzIsICAgICAgNjE0NCB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0NCwgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0NSwgTFZMXzIsICAgICAgTUIoMikgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0NiwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0NywgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0OSwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NGEsIExWTF8zLCAgICAgIE1CKDYpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRiLCBMVkxfMywgICAgICBNQig4KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0YywgTFZMXzMsICAgICAgTUIoMTIpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRkLCBMVkxfMywgICAgICBNQigxNikgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NGUsIExWTF8yLCAgICAgIE1CKDYpIH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDYwLCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg2NiwgTFZMXzFfREFUQSwgOCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg2NywgTFZMXzFfREFUQSwgMTYgfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KQEAgLTc3LDM0ICs4MCwzNCBAQAogCXsgMHg3MSwgTFZMX1RSQUNFLCAgMTYgfSwJLyogOC13YXkgc2V0IGFzc29jICovCiAJeyAweDcyLCBMVkxfVFJBQ0UsICAzMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MgKi8KIAl7IDB4NzMsIExWTF9UUkFDRSwgIDY0IH0sCS8qIDgtd2F5IHNldCBhc3NvYyAqLwotCXsgMHg3OCwgTFZMXzIsICAgIDEwMjQgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg3OSwgTFZMXzIsICAgICAxMjggfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4N2EsIExWTF8yLCAgICAgMjU2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdiLCBMVkxfMiwgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg3YywgTFZMXzIsICAgIDEwMjQgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4N2QsIExWTF8yLCAgICAyMDQ4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4N2YsIExWTF8yLCAgICAgNTEyIH0sCS8qIDItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ODIsIExWTF8yLCAgICAgMjU2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ODMsIExWTF8yLCAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ODQsIExWTF8yLCAgICAxMDI0IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ODUsIExWTF8yLCAgICAyMDQ4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ODYsIExWTF8yLCAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ODcsIExWTF8yLCAgICAxMDI0IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZDAsIExWTF8zLCAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZDEsIExWTF8zLCAgICAxMDI0IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZDIsIExWTF8zLCAgICAyMDQ4IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZDYsIExWTF8zLCAgICAxMDI0IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZDcsIExWTF8zLCAgICAyMDQ4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZDgsIExWTF8zLCAgICA0MDk2IH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGRjLCBMVkxfMywgICAgMjA0OCB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkZCwgTFZMXzMsICAgIDQwOTYgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZGUsIExWTF8zLCAgICA4MTkyIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGUyLCBMVkxfMywgICAgMjA0OCB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlMywgTFZMXzMsICAgIDQwOTYgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZTQsIExWTF8zLCAgICA4MTkyIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGVhLCBMVkxfMywgICAgMTIyODggfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZWIsIExWTF8zLCAgICAxODQzMiB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlYywgTFZMXzMsICAgIDI0NTc2IH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDc4LCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDc5LCBMVkxfMiwgICAgICAxMjggfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2EsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3YiwgTFZMXzIsICAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDdjLCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3ZCwgTFZMXzIsICAgICAgTUIoMikgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3ZiwgTFZMXzIsICAgICAgNTEyIH0sCS8qIDItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODIsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCisJeyAweDgzLCBMVkxfMiwgICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4NCwgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4NSwgTFZMXzIsICAgICAgTUIoMikgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4NiwgTFZMXzIsICAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODcsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZDAsIExWTF8zLCAgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGQxLCBMVkxfMywgICAgICBNQigxKSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGQyLCBMVkxfMywgICAgICBNQigyKSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGQ2LCBMVkxfMywgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGQ3LCBMVkxfMywgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGQ4LCBMVkxfMywgICAgICBNQig0KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkYywgTFZMXzMsICAgICAgTUIoMikgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZGQsIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGRlLCBMVkxfMywgICAgICBNQig4KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlMiwgTFZMXzMsICAgICAgTUIoMikgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZTMsIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGU0LCBMVkxfMywgICAgICBNQig4KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlYSwgTFZMXzMsICAgICAgTUIoMTIpIH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGViLCBMVkxfMywgICAgICBNQigxOCkgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZWMsIExWTF8zLCAgICAgIE1CKDI0KSB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgwMCwgMCwgMH0KIH07CiAKQEAgLTE1MCw3ICsxNTMsOCBAQAogCXVuaW9uIF9jcHVpZDRfbGVhZl9lYnggZWJ4OwogCXVuaW9uIF9jcHVpZDRfbGVhZl9lY3ggZWN4OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGNhbl9kaXNhYmxlOworCWJvb2wgY2FuX2Rpc2FibGU7CisJdW5zaWduZWQgaW50IGwzX2luZGljZXM7CiAJREVDTEFSRV9CSVRNQVAoc2hhcmVkX2NwdV9tYXAsIE5SX0NQVVMpOwogfTsKIApAQCAtMTYwLDcgKzE2NCw4IEBACiAJdW5pb24gX2NwdWlkNF9sZWFmX2VieCBlYng7CiAJdW5pb24gX2NwdWlkNF9sZWFmX2VjeCBlY3g7CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGxvbmcgY2FuX2Rpc2FibGU7CisJYm9vbCBjYW5fZGlzYWJsZTsKKwl1bnNpZ25lZCBpbnQgbDNfaW5kaWNlczsKIH07CiAKIHVuc2lnbmVkIHNob3J0CQkJbnVtX2NhY2hlX2xlYXZlczsKQEAgLTI5MCw2ICsyOTUsMzYgQEAKIAkJKGVieC0+c3BsaXQud2F5c19vZl9hc3NvY2lhdGl2aXR5ICsgMSkgLSAxOwogfQogCitzdHJ1Y3QgX2NhY2hlX2F0dHIgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjb25zdCBjaGFyICosIHNpemVfdCBjb3VudCk7Cit9OworCisjaWZkZWYgQ09ORklHX0NQVV9TVVBfQU1ECitzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdCBhbWRfY2FsY19sM19pbmRpY2VzKHZvaWQpCit7CisJLyoKKwkgKiBXZSdyZSBjYWxsZWQgb3ZlciBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoKSBhbmQgdGhlcmVmb3JlCisJICogYXJlIG9uIHRoZSBjb3JyZWN0IGNwdS4KKwkgKi8KKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOworCXVuc2lnbmVkIGludCBzYzAsIHNjMSwgc2MyLCBzYzM7CisJdTMyIHZhbCA9IDA7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDFDNCwgJnZhbCk7CisKKwkvKiBjYWxjdWxhdGUgc3ViY2FjaGUgc2l6ZXMgKi8KKwlzYzAgPSAhKHZhbCAmIEJJVCgwKSk7CisJc2MxID0gISh2YWwgJiBCSVQoNCkpOworCXNjMiA9ICEodmFsICYgQklUKDgpKSAgKyAhKHZhbCAmIEJJVCg5KSk7CisJc2MzID0gISh2YWwgJiBCSVQoMTIpKSArICEodmFsICYgQklUKDEzKSk7CisKKwlyZXR1cm4gKG1heChtYXgobWF4KHNjMCwgc2MxKSwgc2MyKSwgc2MzKSA8PCAxMCkgLSAxOworfQorCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQKIGFtZF9jaGVja19sM19kaXNhYmxlKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCiB7CkBAIC0yOTksMTMgKzMzNCwxMDQgQEAKIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxMSkKIAkJcmV0dXJuOwogCi0JLyogc2VlIGVycmF0dW0gIzM4MiAqLwotCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxMCkgJiYgKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDwgMHg4KSkKKwkvKiBzZWUgZXJyYXRhICMzODIgYW5kICMzODggKi8KKwlpZiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTApICYmCisJICAgICgoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDgpIHx8CisJICAgICAoYm9vdF9jcHVfZGF0YS54ODZfbWFzayAgPCAweDEpKSkKIAkJcmV0dXJuOwogCi0JdGhpc19sZWFmLT5jYW5fZGlzYWJsZSA9IDE7CisJdGhpc19sZWFmLT5jYW5fZGlzYWJsZSA9IHRydWU7CisJdGhpc19sZWFmLT5sM19pbmRpY2VzICA9IGFtZF9jYWxjX2wzX2luZGljZXMoKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmLAorCQkJCSAgdW5zaWduZWQgaW50IGluZGV4KQoreworCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOworCWludCBub2RlID0gYW1kX2dldF9uYl9pZChjcHUpOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBub2RlX3RvX2s4X25iX21pc2Mobm9kZSk7CisJdW5zaWduZWQgaW50IHJlZyA9IDA7CisKKwlpZiAoIXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsICZyZWcpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgcmVnKTsKK30KKworI2RlZmluZSBTSE9XX0NBQ0hFX0RJU0FCTEUoaW5kZXgpCQkJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd19jYWNoZV9kaXNhYmxlXyMjaW5kZXgoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHNob3dfY2FjaGVfZGlzYWJsZSh0aGlzX2xlYWYsIGJ1ZiwgaW5kZXgpOwkJXAorfQorU0hPV19DQUNIRV9ESVNBQkxFKDApCitTSE9XX0NBQ0hFX0RJU0FCTEUoMSkKKworc3RhdGljIHNzaXplX3Qgc3RvcmVfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdCh0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKKwlpbnQgbm9kZSA9IGFtZF9nZXRfbmJfaWQoY3B1KTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOworCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKKworI2RlZmluZSBTVUJDQUNIRV9NQVNLCSgzVUwgPDwgMjApCisjZGVmaW5lIFNVQkNBQ0hFX0lOREVYCTB4ZmZmCisKKwlpZiAoIXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBkbyBub3QgYWxsb3cgd3JpdGVzIG91dHNpZGUgb2YgYWxsb3dlZCBiaXRzICovCisJaWYgKCh2YWwgJiB+KFNVQkNBQ0hFX01BU0sgfCBTVUJDQUNIRV9JTkRFWCkpIHx8CisJICAgICgodmFsICYgU1VCQ0FDSEVfSU5ERVgpID4gdGhpc19sZWFmLT5sM19pbmRpY2VzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgfD0gQklUKDMwKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsIHZhbCk7CisJLyoKKwkgKiBXZSBuZWVkIHRvIFdCSU5WRCBvbiBhIGNvcmUgb24gdGhlIG5vZGUgY29udGFpbmluZyB0aGUgTDMgY2FjaGUgd2hpY2gKKwkgKiBpbmRpY2VzIHdlIGRpc2FibGUgdGhlcmVmb3JlIGEgc2ltcGxlIHdiaW52ZCgpIGlzIG5vdCBzdWZmaWNpZW50LgorCSAqLworCXdiaW52ZF9vbl9jcHUoY3B1KTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsIHZhbCB8IEJJVCgzMSkpOworCXJldHVybiBjb3VudDsKK30KKworI2RlZmluZSBTVE9SRV9DQUNIRV9ESVNBQkxFKGluZGV4KQkJCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3N0b3JlX2NhY2hlX2Rpc2FibGVfIyNpbmRleChzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCQlcCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBzdG9yZV9jYWNoZV9kaXNhYmxlKHRoaXNfbGVhZiwgYnVmLCBjb3VudCwgaW5kZXgpOwlcCit9CitTVE9SRV9DQUNIRV9ESVNBQkxFKDApCitTVE9SRV9DQUNIRV9ESVNBQkxFKDEpCisKK3N0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgY2FjaGVfZGlzYWJsZV8wID0gX19BVFRSKGNhY2hlX2Rpc2FibGVfMCwgMDY0NCwKKwkJc2hvd19jYWNoZV9kaXNhYmxlXzAsIHN0b3JlX2NhY2hlX2Rpc2FibGVfMCk7CitzdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMSA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzEsIDA2NDQsCisJCXNob3dfY2FjaGVfZGlzYWJsZV8xLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzEpOworCisjZWxzZQkvKiBDT05GSUdfQ1BVX1NVUF9BTUQgKi8KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdAorYW1kX2NoZWNrX2wzX2Rpc2FibGUoaW50IGluZGV4LCBzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZikKK3sKK307CisjZW5kaWYgLyogQ09ORklHX0NQVV9TVVBfQU1EICovCisKIHN0YXRpYyBpbnQKIF9fY3B1aW5pdCBjcHVpZDRfY2FjaGVfbG9va3VwX3JlZ3MoaW50IGluZGV4LAogCQkJCSAgIHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqdGhpc19sZWFmKQpAQCAtNzExLDgyICs4MzcsNiBAQAogI2RlZmluZSB0b19vYmplY3QoaykJY29udGFpbmVyX29mKGssIHN0cnVjdCBfaW5kZXhfa29iamVjdCwga29iaikKICNkZWZpbmUgdG9fYXR0cihhKQljb250YWluZXJfb2YoYSwgc3RydWN0IF9jYWNoZV9hdHRyLCBhdHRyKQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjaGFyICpidWYsCi0JCQkJICB1bnNpZ25lZCBpbnQgaW5kZXgpCi17Ci0JaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QodG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7Ci0JaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBub2RlX3RvX2s4X25iX21pc2Mobm9kZSk7Ci0JdW5zaWduZWQgaW50IHJlZyA9IDA7Ci0KLQlpZiAoIXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsICZyZWcpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCByZWcpOwotfQotCi0jZGVmaW5lIFNIT1dfQ0FDSEVfRElTQUJMRShpbmRleCkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X2NhY2hlX2Rpc2FibGVfIyNpbmRleChzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikgIAlcCi17CQkJCQkJCQkJXAotCXJldHVybiBzaG93X2NhY2hlX2Rpc2FibGUodGhpc19sZWFmLCBidWYsIGluZGV4KTsJCVwKLX0KLVNIT1dfQ0FDSEVfRElTQUJMRSgwKQotU0hPV19DQUNIRV9ESVNBQkxFKDEpCi0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAotCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpCi17Ci0JaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QodG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7Ci0JaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBub2RlX3RvX2s4X25iX21pc2Mobm9kZSk7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAwOwotCXVuc2lnbmVkIGludCBzY3J1YmJlciA9IDA7Ci0KLQlpZiAoIXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2YWwgfD0gMHhjMDAwMDAwMDsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NTgsICZzY3J1YmJlcik7Ci0Jc2NydWJiZXIgJj0gfjB4MWYwMDAwMDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NTgsIHNjcnViYmVyKTsKLQotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDFCQyArIGluZGV4ICogNCwgdmFsICYgfjB4NDAwMDAwMDApOwotCXdiaW52ZCgpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDFCQyArIGluZGV4ICogNCwgdmFsKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLSNkZWZpbmUgU1RPUkVfQ0FDSEVfRElTQUJMRShpbmRleCkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zdG9yZV9jYWNoZV9kaXNhYmxlXyMjaW5kZXgoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAkgICAgIAlcCi0JCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCi17CQkJCQkJCQkJXAotCXJldHVybiBzdG9yZV9jYWNoZV9kaXNhYmxlKHRoaXNfbGVhZiwgYnVmLCBjb3VudCwgaW5kZXgpOwlcCi19Ci1TVE9SRV9DQUNIRV9ESVNBQkxFKDApCi1TVE9SRV9DQUNIRV9ESVNBQkxFKDEpCi0KLXN0cnVjdCBfY2FjaGVfYXR0ciB7Ci0Jc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwotCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgX2NwdWlkNF9pbmZvICosIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgX2NwdWlkNF9pbmZvICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90IGNvdW50KTsKLX07Ci0KICNkZWZpbmUgZGVmaW5lX29uZV9ybyhfbmFtZSkgXAogc3RhdGljIHN0cnVjdCBfY2FjaGVfYXR0ciBfbmFtZSA9IFwKIAlfX0FUVFIoX25hbWUsIDA0NDQsIHNob3dfIyNfbmFtZSwgTlVMTCkKQEAgLTgwMSwyMyArODUxLDI4IEBACiBkZWZpbmVfb25lX3JvKHNoYXJlZF9jcHVfbWFwKTsKIGRlZmluZV9vbmVfcm8oc2hhcmVkX2NwdV9saXN0KTsKIAotc3RhdGljIHN0cnVjdCBfY2FjaGVfYXR0ciBjYWNoZV9kaXNhYmxlXzAgPSBfX0FUVFIoY2FjaGVfZGlzYWJsZV8wLCAwNjQ0LAotCQlzaG93X2NhY2hlX2Rpc2FibGVfMCwgc3RvcmVfY2FjaGVfZGlzYWJsZV8wKTsKLXN0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgY2FjaGVfZGlzYWJsZV8xID0gX19BVFRSKGNhY2hlX2Rpc2FibGVfMSwgMDY0NCwKLQkJc2hvd19jYWNoZV9kaXNhYmxlXzEsIHN0b3JlX2NhY2hlX2Rpc2FibGVfMSk7CisjZGVmaW5lIERFRkFVTFRfU1lTRlNfQ0FDSEVfQVRUUlMJXAorCSZ0eXBlLmF0dHIsCQkJXAorCSZsZXZlbC5hdHRyLAkJCVwKKwkmY29oZXJlbmN5X2xpbmVfc2l6ZS5hdHRyLAlcCisJJnBoeXNpY2FsX2xpbmVfcGFydGl0aW9uLmF0dHIsCVwKKwkmd2F5c19vZl9hc3NvY2lhdGl2aXR5LmF0dHIsCVwKKwkmbnVtYmVyX29mX3NldHMuYXR0ciwJCVwKKwkmc2l6ZS5hdHRyLAkJCVwKKwkmc2hhcmVkX2NwdV9tYXAuYXR0ciwJCVwKKwkmc2hhcmVkX2NwdV9saXN0LmF0dHIKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlZmF1bHRfYXR0cnNbXSA9IHsKLQkmdHlwZS5hdHRyLAotCSZsZXZlbC5hdHRyLAotCSZjb2hlcmVuY3lfbGluZV9zaXplLmF0dHIsCi0JJnBoeXNpY2FsX2xpbmVfcGFydGl0aW9uLmF0dHIsCi0JJndheXNfb2ZfYXNzb2NpYXRpdml0eS5hdHRyLAotCSZudW1iZXJfb2Zfc2V0cy5hdHRyLAotCSZzaXplLmF0dHIsCi0JJnNoYXJlZF9jcHVfbWFwLmF0dHIsCi0JJnNoYXJlZF9jcHVfbGlzdC5hdHRyLAorCURFRkFVTFRfU1lTRlNfQ0FDSEVfQVRUUlMsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlZmF1bHRfbDNfYXR0cnNbXSA9IHsKKwlERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTLAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAogCSZjYWNoZV9kaXNhYmxlXzAuYXR0ciwKIAkmY2FjaGVfZGlzYWJsZV8xLmF0dHIsCisjZW5kaWYKIAlOVUxMCiB9OwogCkBAIC05MDgsNiArOTYzLDcgQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc3lzX2Rldi0+aWQ7CiAJdW5zaWduZWQgbG9uZyBpLCBqOwogCXN0cnVjdCBfaW5kZXhfa29iamVjdCAqdGhpc19vYmplY3Q7CisJc3RydWN0IF9jcHVpZDRfaW5mbyAgICp0aGlzX2xlYWY7CiAJaW50IHJldHZhbDsKIAogCXJldHZhbCA9IGNwdWlkNF9jYWNoZV9zeXNmc19pbml0KGNwdSk7CkBAIC05MjYsNiArOTgyLDE0IEBACiAJCXRoaXNfb2JqZWN0ID0gSU5ERVhfS09CSkVDVF9QVFIoY3B1LCBpKTsKIAkJdGhpc19vYmplY3QtPmNwdSA9IGNwdTsKIAkJdGhpc19vYmplY3QtPmluZGV4ID0gaTsKKworCQl0aGlzX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoY3B1LCBpKTsKKworCQlpZiAodGhpc19sZWFmLT5jYW5fZGlzYWJsZSkKKwkJCWt0eXBlX2NhY2hlLmRlZmF1bHRfYXR0cnMgPSBkZWZhdWx0X2wzX2F0dHJzOworCQllbHNlCisJCQlrdHlwZV9jYWNoZS5kZWZhdWx0X2F0dHJzID0gZGVmYXVsdF9hdHRyczsKKwogCQlyZXR2YWwgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmKHRoaXNfb2JqZWN0LT5rb2JqKSwKIAkJCQkJICAgICAgJmt0eXBlX2NhY2hlLAogCQkJCQkgICAgICBwZXJfY3B1KGljaV9jYWNoZV9rb2JqZWN0LCBjcHUpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCmluZGV4IGY0MzYxYjUuLmFkOWU1ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACi1vYmoteQkJOj0gbWFpbi5vIGlmLm8gZ2VuZXJpYy5vIHN0YXRlLm8gY2xlYW51cC5vCitvYmoteQkJOj0gbWFpbi5vIGlmLm8gZ2VuZXJpYy5vIGNsZWFudXAubwogb2JqLSQoQ09ORklHX1g4Nl8zMikgKz0gYW1kLm8gY3lyaXgubyBjZW50YXVyLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2FtZC5jCmluZGV4IDMzYWYxNDEuLjkyYmE5Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG10cnJfb3BzIGFtZF9tdHJyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgYW1kX210cnJfb3BzID0gewogCS52ZW5kb3IgICAgICAgICAgICA9IFg4Nl9WRU5ET1JfQU1ELAogCS5zZXQgICAgICAgICAgICAgICA9IGFtZF9zZXRfbXRyciwKIAkuZ2V0ICAgICAgICAgICAgICAgPSBhbWRfZ2V0X210cnIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2VudGF1ci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYwppbmRleCBkZTg5ZjE0Li4zMTZmZTNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2VudGF1ci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG10cnJfb3BzIGNlbnRhdXJfbXRycl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG10cnJfb3BzIGNlbnRhdXJfbXRycl9vcHMgPSB7CiAJLnZlbmRvciAgICAgICAgICAgID0gWDg2X1ZFTkRPUl9DRU5UQVVSLAogCS5zZXQgICAgICAgICAgICAgICA9IGNlbnRhdXJfc2V0X21jciwKIAkuZ2V0ICAgICAgICAgICAgICAgPSBjZW50YXVyX2dldF9tY3IsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jCmluZGV4IDIyOGQ5ODIuLjY4YTMzNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlwb3N0X3NldCgpOwogfQogCi1zdGF0aWMgc3RydWN0IG10cnJfb3BzIGN5cml4X210cnJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtdHJyX29wcyBjeXJpeF9tdHJyX29wcyA9IHsKIAkudmVuZG9yICAgICAgICAgICAgPSBYODZfVkVORE9SX0NZUklYLAogCS5zZXRfYWxsCSAgID0gY3lyaXhfc2V0X2FsbCwKIAkuc2V0ICAgICAgICAgICAgICAgPSBjeXJpeF9zZXRfYXJyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKaW5kZXggNTVkYTBjNS4uOWFhNWRjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC00NjQsNyArNDY0LDcgQEAKIAkJdG1wIHw9IH4oKDE8PChoaSAtIDEpKSAtIDEpOwogCiAJCWlmICh0bXAgIT0gbWFza19sbykgewotCQkJV0FSTl9PTkNFKDEsIEtFUk5fSU5GTyAibXRycjogeW91ciBCSU9TIGhhcyBzZXQgdXAgYW4gaW5jb3JyZWN0IG1hc2ssIGZpeGluZyBpdCB1cC5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogeW91ciBCSU9TIGhhcyBjb25maWd1cmVkIGFuIGluY29ycmVjdCBtYXNrLCBmaXhpbmcgaXQuXG4iKTsKIAkJCW1hc2tfbG8gPSB0bXA7CiAJCX0KIAl9CkBAIC01NzAsNyArNTcwLDcgQEAKIAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcjQ7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNldF9hdG9taWNpdHlfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzZXRfYXRvbWljaXR5X2xvY2spOwogCiAvKgogICogU2luY2Ugd2UgYXJlIGRpc2FibGluZyB0aGUgY2FjaGUgZG9uJ3QgYWxsb3cgYW55IGludGVycnVwdHMsCkBAIC01OTAsNyArNTkwLDcgQEAKIAkgKiBjaGFuZ2VzIHRvIHRoZSB3YXkgdGhlIGtlcm5lbCBib290cwogCSAqLwogCi0Jc3Bpbl9sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOworCXJhd19zcGluX2xvY2soJnNldF9hdG9taWNpdHlfbG9jayk7CiAKIAkvKiBFbnRlciB0aGUgbm8tZmlsbCAoQ0Q9MSwgTlc9MCkgY2FjaGUgbW9kZSBhbmQgZmx1c2ggY2FjaGVzLiAqLwogCWNyMCA9IHJlYWRfY3IwKCkgfCBYODZfQ1IwX0NEOwpAQCAtNjI3LDcgKzYyNyw3IEBACiAJLyogUmVzdG9yZSB2YWx1ZSBvZiBDUjQgKi8KIAlpZiAoY3B1X2hhc19wZ2UpCiAJCXdyaXRlX2NyNChjcjQpOwotCXNwaW5fdW5sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOworCXJhd19zcGluX3VubG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXJpY19zZXRfYWxsKHZvaWQpCkBAIC03NTIsNyArNzUyLDcgQEAKIC8qCiAgKiBHZW5lcmljIHN0cnVjdHVyZS4uLgogICovCi1zdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBtdHJyX29wcyBnZW5lcmljX210cnJfb3BzID0gewogCS51c2VfaW50ZWxfaWYJCT0gMSwKIAkuc2V0X2FsbAkJPSBnZW5lcmljX3NldF9hbGwsCiAJLmdldAkJCT0gZ2VuZXJpY19nZXRfbXRyciwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IDg0ZTgzZGUuLmZlNDYyMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtNjAsMTQgKzYwLDE0IEBACiB1NjQgc2l6ZV9vcl9tYXNrLCBzaXplX2FuZF9tYXNrOwogc3RhdGljIGJvb2wgbXRycl9hcHNfZGVsYXllZF9pbml0OwogCi1zdGF0aWMgc3RydWN0IG10cnJfb3BzICptdHJyX29wc1tYODZfVkVORE9SX05VTV07CitzdGF0aWMgY29uc3Qgc3RydWN0IG10cnJfb3BzICptdHJyX29wc1tYODZfVkVORE9SX05VTV07CiAKLXN0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKK2NvbnN0IHN0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKIAogc3RhdGljIHZvaWQgc2V0X210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpOwogCi12b2lkIHNldF9tdHJyX29wcyhzdHJ1Y3QgbXRycl9vcHMgKm9wcykKK3ZvaWQgc2V0X210cnJfb3BzKGNvbnN0IHN0cnVjdCBtdHJyX29wcyAqb3BzKQogewogCWlmIChvcHMtPnZlbmRvciAmJiBvcHMtPnZlbmRvciA8IFg4Nl9WRU5ET1JfTlVNKQogCQltdHJyX29wc1tvcHMtPnZlbmRvcl0gPSBvcHM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAppbmRleCBhNTAxZGVlLi5kZjVlNDFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKQEAgLTMyLDcgKzMyLDcgQEAKIGV4dGVybiBpbnQgZ2VuZXJpY192YWxpZGF0ZV9hZGRfcGFnZSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgICAgIHVuc2lnbmVkIGludCB0eXBlKTsKIAotZXh0ZXJuIHN0cnVjdCBtdHJyX29wcyBnZW5lcmljX210cnJfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdHJyX29wcyBnZW5lcmljX210cnJfb3BzOwogCiBleHRlcm4gaW50IHBvc2l0aXZlX2hhdmVfd3Jjb21iKHZvaWQpOwogCkBAIC01MywxMCArNTMsMTAgQEAKIAkJdTMyIGJhc2VfbG8sIHUzMiBiYXNlX2hpLCB1MzIgbWFza19sbywgdTMyIG1hc2tfaGkpOwogdm9pZCBnZXRfbXRycl9zdGF0ZSh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgc2V0X210cnJfb3BzKHN0cnVjdCBtdHJyX29wcyAqb3BzKTsKK2V4dGVybiB2b2lkIHNldF9tdHJyX29wcyhjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm9wcyk7CiAKIGV4dGVybiB1NjQgc2l6ZV9vcl9tYXNrLCBzaXplX2FuZF9tYXNrOwotZXh0ZXJuIHN0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm10cnJfaWY7CiAKICNkZWZpbmUgaXNfY3B1KHZuZCkJKG10cnJfaWYgJiYgbXRycl9pZi0+dmVuZG9yID09IFg4Nl9WRU5ET1JfIyN2bmQpCiAjZGVmaW5lIHVzZV9pbnRlbCgpCShtdHJyX2lmICYmIG10cnJfaWYtPnVzZV9pbnRlbF9pZiA9PSAxKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjODBiNC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1jeXJpeC5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLQotI2luY2x1ZGUgIm10cnIuaCIKLQotLyogUHV0IHRoZSBwcm9jZXNzb3IgaW50byBhIHN0YXRlIHdoZXJlIE1UUlJzIGNhbiBiZSBzYWZlbHkgc2V0ICovCi12b2lkIHNldF9tdHJyX3ByZXBhcmVfc2F2ZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCkKLXsKLQl1bnNpZ25lZCBpbnQgY3IwOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGxvY2FsbHkgKi8KLQlsb2NhbF9pcnFfc2F2ZShjdHh0LT5mbGFncyk7Ci0KLQlpZiAodXNlX2ludGVsKCkgfHwgaXNfY3B1KENZUklYKSkgewotCi0JCS8qIFNhdmUgdmFsdWUgb2YgQ1I0IGFuZCBjbGVhciBQYWdlIEdsb2JhbCBFbmFibGUgKGJpdCA3KSAqLwotCQlpZiAoY3B1X2hhc19wZ2UpIHsKLQkJCWN0eHQtPmNyNHZhbCA9IHJlYWRfY3I0KCk7Ci0JCQl3cml0ZV9jcjQoY3R4dC0+Y3I0dmFsICYgflg4Nl9DUjRfUEdFKTsKLQkJfQotCi0JCS8qCi0JCSAqIERpc2FibGUgYW5kIGZsdXNoIGNhY2hlcy4gTm90ZSB0aGF0IHdiaW52ZCBmbHVzaGVzIHRoZSBUTEJzCi0JCSAqIGFzIGEgc2lkZS1lZmZlY3QKLQkJICovCi0JCWNyMCA9IHJlYWRfY3IwKCkgfCBYODZfQ1IwX0NEOwotCQl3YmludmQoKTsKLQkJd3JpdGVfY3IwKGNyMCk7Ci0JCXdiaW52ZCgpOwotCi0JCWlmICh1c2VfaW50ZWwoKSkgewotCQkJLyogU2F2ZSBNVFJSIHN0YXRlICovCi0JCQlyZG1zcihNU1JfTVRSUmRlZlR5cGUsIGN0eHQtPmRlZnR5cGVfbG8sIGN0eHQtPmRlZnR5cGVfaGkpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEN5cml4IEFSUnMgLQotCQkJICogZXZlcnl0aGluZyBlbHNlIHdlcmUgZXhjbHVkZWQgYXQgdGhlIHRvcAotCQkJICovCi0JCQljdHh0LT5jY3IzID0gZ2V0Q3g4NihDWDg2X0NDUjMpOwotCQl9Ci0JfQotfQotCi12b2lkIHNldF9tdHJyX2NhY2hlX2Rpc2FibGUoc3RydWN0IHNldF9tdHJyX2NvbnRleHQgKmN0eHQpCi17Ci0JaWYgKHVzZV9pbnRlbCgpKSB7Ci0JCS8qIERpc2FibGUgTVRSUnMsIGFuZCBzZXQgdGhlIGRlZmF1bHQgdHlwZSB0byB1bmNhY2hlZCAqLwotCQltdHJyX3dybXNyKE1TUl9NVFJSZGVmVHlwZSwgY3R4dC0+ZGVmdHlwZV9sbyAmIDB4ZjMwMFVMLAotCQkgICAgICBjdHh0LT5kZWZ0eXBlX2hpKTsKLQl9IGVsc2UgewotCQlpZiAoaXNfY3B1KENZUklYKSkgewotCQkJLyogQ3lyaXggQVJScyAtIGV2ZXJ5dGhpbmcgZWxzZSB3ZXJlIGV4Y2x1ZGVkIGF0IHRoZSB0b3AgKi8KLQkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCAoY3R4dC0+Y2NyMyAmIDB4MGYpIHwgMHgxMCk7Ci0JCX0KLQl9Ci19Ci0KLS8qIFJlc3RvcmUgdGhlIHByb2Nlc3NvciBhZnRlciBhIHNldF9tdHJyX3ByZXBhcmUgKi8KLXZvaWQgc2V0X210cnJfZG9uZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCkKLXsKLQlpZiAodXNlX2ludGVsKCkgfHwgaXNfY3B1KENZUklYKSkgewotCi0JCS8qIEZsdXNoIGNhY2hlcyBhbmQgVExCcyAqLwotCQl3YmludmQoKTsKLQotCQkvKiBSZXN0b3JlIE1UUlJkZWZUeXBlICovCi0JCWlmICh1c2VfaW50ZWwoKSkgewotCQkJLyogSW50ZWwgKFA2KSBzdGFuZGFyZCBNVFJScyAqLwotCQkJbXRycl93cm1zcihNU1JfTVRSUmRlZlR5cGUsIGN0eHQtPmRlZnR5cGVfbG8sCi0JCQkJICAgY3R4dC0+ZGVmdHlwZV9oaSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogQ3lyaXggQVJScyAtCi0JCQkgKiBldmVyeXRoaW5nIGVsc2Ugd2FzIGV4Y2x1ZGVkIGF0IHRoZSB0b3AKLQkJCSAqLwotCQkJc2V0Q3g4NihDWDg2X0NDUjMsIGN0eHQtPmNjcjMpOwotCQl9Ci0KLQkJLyogRW5hYmxlIGNhY2hlcyAqLwotCQl3cml0ZV9jcjAocmVhZF9jcjAoKSAmIDB4YmZmZmZmZmYpOwotCi0JCS8qIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICovCi0JCWlmIChjcHVfaGFzX3BnZSkKLQkJCXdyaXRlX2NyNChjdHh0LT5jcjR2YWwpOwotCX0KLQkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyBsb2NhbGx5IChpZiBlbmFibGVkIHByZXZpb3VzbHkpICovCi0JbG9jYWxfaXJxX3Jlc3RvcmUoY3R4dC0+ZmxhZ3MpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCA4YzFjMDcwLi42NDFjY2I5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtNyw2ICs3LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiwgUm9iZXJ0IFJpY2h0ZXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24sIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuLCBTdGVwaGFuZSBFcmFuaWFuCiAgKgogICogIEZvciBsaWNlbmNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORwogICovCkBAIC0yMiw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KQEAgLTY4LDI2ICs3MCw1OSBAQAogCXU2NAlwZWJzX2V2ZW50X3Jlc2V0W01BWF9QRUJTX0VWRU5UU107CiB9OwogCitzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCB7CisJdW5pb24geworCQl1bnNpZ25lZCBsb25nCWlkeG1za1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOworCQl1NjQJCWlkeG1zazY0WzFdOworCX07CisJaW50CWNvZGU7CisJaW50CWNtYXNrOworCWludAl3ZWlnaHQ7Cit9OworCitzdHJ1Y3QgYW1kX25iIHsKKwlpbnQgbmJfaWQ7ICAvKiBOb3J0aEJyaWRnZSBpZCAqLworCWludCByZWZjbnQ7IC8qIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCBwZXJmX2V2ZW50ICpvd25lcnNbWDg2X1BNQ19JRFhfTUFYXTsKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBldmVudF9jb25zdHJhaW50c1tYODZfUE1DX0lEWF9NQVhdOworfTsKKwogc3RydWN0IGNwdV9od19ldmVudHMgewotCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudHNbWDg2X1BNQ19JRFhfTUFYXTsKLQl1bnNpZ25lZCBsb25nCQl1c2VkX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRzW1g4Nl9QTUNfSURYX01BWF07IC8qIGluIGNvdW50ZXIgb3JkZXIgKi8KIAl1bnNpZ25lZCBsb25nCQlhY3RpdmVfbWFza1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOwogCXVuc2lnbmVkIGxvbmcJCWludGVycnVwdHM7CiAJaW50CQkJZW5hYmxlZDsKIAlzdHJ1Y3QgZGVidWdfc3RvcmUJKmRzOworCisJaW50CQkJbl9ldmVudHM7CisJaW50CQkJbl9hZGRlZDsKKwlpbnQJCQlhc3NpZ25bWDg2X1BNQ19JRFhfTUFYXTsgLyogZXZlbnQgdG8gY291bnRlciBhc3NpZ25tZW50ICovCisJdTY0CQkJdGFnc1tYODZfUE1DX0lEWF9NQVhdOworCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudF9saXN0W1g4Nl9QTUNfSURYX01BWF07IC8qIGluIGVuYWJsZWQgb3JkZXIgKi8KKwlzdHJ1Y3QgYW1kX25iCQkqYW1kX25iOwogfTsKIAotc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgewotCXVuc2lnbmVkIGxvbmcJaWR4bXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07Ci0JaW50CQljb2RlOwotfTsKKyNkZWZpbmUgX19FVkVOVF9DT05TVFJBSU5UKGMsIG4sIG0sIHcpIHtcCisJeyAuaWR4bXNrNjRbMF0gPSAobikgfSwJCVwKKwkuY29kZSA9IChjKSwJCQlcCisJLmNtYXNrID0gKG0pLAkJCVwKKwkud2VpZ2h0ID0gKHcpLAkJCVwKK30KIAotI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UKGMsIG0pIHsgLmNvZGUgPSAoYyksIC5pZHhtc2tbMF0gPSAobSkgfQotI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UX0VORCAgeyAuY29kZSA9IDAsIC5pZHhtc2tbMF0gPSAwIH0KKyNkZWZpbmUgRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBtKQlcCisJX19FVkVOVF9DT05TVFJBSU5UKGMsIG4sIG0sIEhXRUlHSFQobikpCiAKLSNkZWZpbmUgZm9yX2VhY2hfZXZlbnRfY29uc3RyYWludChlLCBjKSBcCi0JZm9yICgoZSkgPSAoYyk7IChlKS0+aWR4bXNrWzBdOyAoZSkrKykKKyNkZWZpbmUgSU5URUxfRVZFTlRfQ09OU1RSQUlOVChjLCBuKQlcCisJRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBJTlRFTF9BUkNIX0VWVFNFTF9NQVNLKQogCisjZGVmaW5lIEZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoYywgbikJXAorCUVWRU5UX0NPTlNUUkFJTlQoYywgbiwgSU5URUxfQVJDSF9GSVhFRF9NQVNLKQorCisjZGVmaW5lIEVWRU5UX0NPTlNUUkFJTlRfRU5ECQlcCisJRVZFTlRfQ09OU1RSQUlOVCgwLCAwLCAwKQorCisjZGVmaW5lIGZvcl9lYWNoX2V2ZW50X2NvbnN0cmFpbnQoZSwgYykJXAorCWZvciAoKGUpID0gKGMpOyAoZSktPmNtYXNrOyAoZSkrKykKIAogLyoKICAqIHN0cnVjdCB4ODZfcG11IC0gZ2VuZXJpYyB4ODYgcG11CkBAIC0xMTQsOCArMTQ5LDE0IEBACiAJdTY0CQlpbnRlbF9jdHJsOwogCXZvaWQJCSgqZW5hYmxlX2J0cykodTY0IGNvbmZpZyk7CiAJdm9pZAkJKCpkaXNhYmxlX2J0cykodm9pZCk7Ci0JaW50CQkoKmdldF9ldmVudF9pZHgpKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAotCQkJCQkgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3Yyk7CisKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCisJCQkoKmdldF9ldmVudF9jb25zdHJhaW50cykoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKworCXZvaWQJCSgqcHV0X2V2ZW50X2NvbnN0cmFpbnRzKShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCXN0cnVjdCBldmVudF9jb25zdHJhaW50ICpldmVudF9jb25zdHJhaW50czsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSB4ODZfcG11IF9fcmVhZF9tb3N0bHk7CkBAIC0xMjQsMTExICsxNjUsOCBAQAogCS5lbmFibGVkID0gMSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqZXZlbnRfY29uc3RyYWludHM7Ci0KLS8qCi0gKiBOb3Qgc3VyZSBhYm91dCBzb21lIG9mIHRoZXNlCi0gKi8KLXN0YXRpYyBjb25zdCB1NjQgcDZfcGVyZm1vbl9ldmVudF9tYXBbXSA9Ci17Ci0gIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3OSwKLSAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwZjJlLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDEyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKLSAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMDYyLAotfTsKLQotc3RhdGljIHU2NCBwNl9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKLXsKLQlyZXR1cm4gcDZfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOwotfQotCi0vKgotICogRXZlbnQgc2V0dGluZyB0aGF0IGlzIHNwZWNpZmllZCBub3QgdG8gY291bnQgYW55dGhpbmcuCi0gKiBXZSB1c2UgdGhpcyB0byBlZmZlY3RpdmVseSBkaXNhYmxlIGEgY291bnRlci4KLSAqCi0gKiBMMl9SUVNUUyB3aXRoIDAgTUVTSSB1bml0IG1hc2suCi0gKi8KLSNkZWZpbmUgUDZfTk9QX0VWRU5UCQkJMHgwMDAwMDAyRVVMTAotCi1zdGF0aWMgdTY0IHA2X3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQotewotI2RlZmluZSBQNl9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAotI2RlZmluZSBQNl9FVk5UU0VMX1JFR19NQVNLCQkweEZGMDAwMDAwVUxMCi0KLSNkZWZpbmUgUDZfRVZOVFNFTF9NQVNLCQkJXAotCShQNl9FVk5UU0VMX0VWRU5UX01BU0sgfAlcCi0JIFA2X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKLQkgUDZfRVZOVFNFTF9FREdFX01BU0sgIHwJXAotCSBQNl9FVk5UU0VMX0lOVl9NQVNLICAgfAlcCi0JIFA2X0VWTlRTRUxfUkVHX01BU0spCi0KLQlyZXR1cm4gaHdfZXZlbnQgJiBQNl9FVk5UU0VMX01BU0s7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9wNl9ldmVudF9jb25zdHJhaW50c1tdID0KLXsKLQlFVkVOVF9DT05TVFJBSU5UKDB4YzEsIDB4MSksCS8qIEZMT1BTICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLAkvKiBGUF9DT01QX09QU19FWEUgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MSksCS8qIEZQX0FTU0lTVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwJLyogTVVMICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLAkvKiBESVYgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksCS8qIENZQ0xFU19ESVZfQlVTWSAqLwotCUVWRU5UX0NPTlNUUkFJTlRfRU5ECi19OwotCi0vKgotICogSW50ZWwgUGVyZk1vbiB2My4gVXNlZCBvbiBDb3JlMiBhbmQgbGF0ZXIuCi0gKi8KLXN0YXRpYyBjb25zdCB1NjQgaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbXSA9Ci17Ci0gIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDAzYywKLSAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHg0ZjJlLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4NDEyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKLSAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMTNjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2NvcmVfZXZlbnRfY29uc3RyYWludHNbXSA9Ci17Ci0JRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLAkvKiBGUF9DT01QX09QU19FWEUgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksCS8qIEZQX0FTU0lTVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwJLyogTVVMICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLAkvKiBESVYgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksCS8qIENZQ0xFU19ESVZfQlVTWSAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxOCwgMHgxKSwJLyogSURMRV9EVVJJTkdfRElWICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDE5LCAweDIpLAkvKiBERUxBWUVEX0JZUEFTUyAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHhhMSwgMHgxKSwJLyogUlNfVU9QU19ESVNQQVRDSF9DWUNMRVMgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksCS8qIE1FTV9MT0FEX1JFVElSRUQgKi8KLQlFVkVOVF9DT05TVFJBSU5UX0VORAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHNbXSA9Ci17Ci0JRVZFTlRfQ09OU1RSQUlOVCgweDQwLCAweDMpLAkvKiBMMURfQ0FDSEVfTEQgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NDEsIDB4MyksCS8qIEwxRF9DQUNIRV9TVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg0MiwgMHgzKSwJLyogTDFEX0NBQ0hFX0xPQ0sgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NDMsIDB4MyksCS8qIEwxRF9BTExfUkVGICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDRlLCAweDMpLAkvKiBMMURfUFJFRkVUQ0ggKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NGMsIDB4MyksCS8qIExPQURfSElUX1BSRSAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg1MSwgMHgzKSwJLyogTDFEICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDUyLCAweDMpLAkvKiBMMURfQ0FDSEVfUFJFRkVUQ0hfTE9DS19GQl9ISVQgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NTMsIDB4MyksCS8qIEwxRF9DQUNIRV9MT0NLX0ZCX0hJVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHhjNSwgMHgzKSwJLyogQ0FDSEVfTE9DS19DWUNMRVMgKi8KLQlFVkVOVF9DT05TVFJBSU5UX0VORAotfTsKLQotc3RhdGljIHU2NCBpbnRlbF9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKLXsKLQlyZXR1cm4gaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOwotfQorc3RhdGljIGludCB4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCk7CiAKIC8qCiAgKiBHZW5lcmFsaXplZCBodyBjYWNoaW5nIHJlbGF0ZWQgaHdfZXZlbnQgdGFibGUsIGZpbGxlZApAQCAtMjQ1LDQyNCArMTgzLDYgQEAKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07CiAKLXN0YXRpYyBfX2luaXRjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMKLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KLXsKLSBbIEMoTDFEKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogTDFEX0NBQ0hFX1NULklfU1RBVEUgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI0ZSwgLyogTDFEX1BSRUZFVENILk1JU1MgICAgICAgICAgICAqLwotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODAsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwLAotCX0sCi0gfSwKLSBbIEMoTEwgICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzMjQsIC8qIEwyX1JRU1RTLkxPQURTICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyMjQsIC8qIEwyX1JRU1RTLkxEX01JU1MgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBjMjQsIC8qIEwyX1JRU1RTLlJGT1MgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MjQsIC8qIEwyX1JRU1RTLlJGT19NSVNTICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMmUsIC8qIExMQyBSZWZlcmVuY2UgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMmUsIC8qIExMQyBNaXNzZXMgICAgICAgICAgICAgICAgICAgKi8KLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgIChhbGlhcykgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTA4LCAvKiBEVExCX0xPQURfTUlTU0VTLkFOWSAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgIChhbGlhcykgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTBjLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgyMGM4LCAvKiBJVExCX01JU1NfUkVUSVJFRCAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotIFsgQyhCUFUgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFMTF9CUkFOQ0hFUyAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDNlOCwgLyogQlBVX0NMRUFSUy5BTlkgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLX07Ci0KLXN0YXRpYyBfX2luaXRjb25zdCB1NjQgY29yZTJfaHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQwLCAvKiBMMURfQ0FDSEVfTEQuSV9TVEFURSAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgxMDRlLCAvKiBMMURfUFJFRkVUQ0guUkVRVUVTVFMgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMMUkgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogTDFJLlJFQURTICAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODEsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTEwgICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMjksIC8qIEwyX0xELk1FU0kgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTI5LCAvKiBMMl9MRC5JU1RBVEUgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyQSwgLyogTDJfU1QuTUVTSSAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMkEsIC8qIEwyX1NULklTVEFURSAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoRFRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAoYWxpYXMpICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjA4LCAvKiBEVExCX01JU1NFUy5NSVNTX0xEICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgIChhbGlhcykgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfU1QgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoSVRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzAsIC8qIElOU1RfUkVUSVJFRC5BTllfUCAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgxMjgyLCAvKiBJVExCTUlTU0VTICAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLSBbIEMoQlBVICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTlkgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGM1LCAvKiBCUF9JTlNUX1JFVElSRUQuTUlTUFJFRCAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLX07Ci0KLXN0YXRpYyBfX2luaXRjb25zdCB1NjQgYXRvbV9od19jYWNoZV9ldmVudF9pZHMKLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KLXsKLSBbIEMoTDFEKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFLkxEICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjI0MCwgLyogTDFEX0NBQ0hFLlNUICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMTQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDUwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwNjA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MiwgLyogSVRMQi5NSVNTRVMgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi0gWyBDKEJQVSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi1zdGF0aWMgdTY0IGludGVsX3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQotewotI2RlZmluZSBDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSwkJMHgwMDAwMDBGRlVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9SRUdfTUFTSwkJMHhGRjAwMDAwMFVMTAotCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9NQVNLCQlcCi0JKENPUkVfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAotCSBDT1JFX0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKLQkgQ09SRV9FVk5UU0VMX0VER0VfTUFTSyAgfAlcCi0JIENPUkVfRVZOVFNFTF9JTlZfTUFTSyAgfAlcCi0JIENPUkVfRVZOVFNFTF9SRUdfTUFTSykKLQotCXJldHVybiBod19ldmVudCAmIENPUkVfRVZOVFNFTF9NQVNLOwotfQotCi1zdGF0aWMgX19pbml0Y29uc3QgdTY0IGFtZF9od19jYWNoZV9ldmVudF9pZHMKLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KLXsKLSBbIEMoTDFEKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDEsIC8qIERhdGEgQ2FjaGUgTWlzc2VzICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTQyLCAvKiBEYXRhIENhY2hlIFJlZmlsbHMgOnN5c3RlbSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMjY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmF0dGVtcHRzICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE2NywgLyogRGF0YSBQcmVmZXRjaGVyIDpjYW5jZWxsZWQgKi8KLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBmZXRjaGVzICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4MSwgLyogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNEIsIC8qIFByZWZldGNoIEluc3RydWN0aW9ucyA6TG9hZCAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMTCAgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM3RCwgLyogUmVxdWVzdHMgdG8gTDIgQ2FjaGUgOklDK0RDICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMzdFLCAvKiBMMiBDYWNoZSBNaXNzZXMgOiBJQytEQyAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxN0YsIC8qIEwyIEZpbGwvV3JpdGViYWNrICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoRFRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQ2LCAvKiBMMSBEVExCIGFuZCBMMiBETFRCIE1pc3MgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogSW5zdHJ1Y3Rpb24gZmVjdGhlcyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODUsIC8qIEluc3RyLiBmZXRjaCBJVExCIG1pc3NlcyAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotIFsgQyhCUFUgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMiwgLyogUmV0aXJlZCBCcmFuY2ggSW5zdHIuICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzMsIC8qIFJldGlyZWQgTWlzcHJlZGljdGVkIEJJICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotfTsKLQotLyoKLSAqIEFNRCBQZXJmb3JtYW5jZSBNb25pdG9yIEs3IGFuZCBsYXRlci4KLSAqLwotc3RhdGljIGNvbnN0IHU2NCBhbWRfcGVyZm1vbl9ldmVudF9tYXBbXSA9Ci17Ci0gIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3NiwKLSAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwMDgwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDA4MSwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKLX07Ci0KLXN0YXRpYyB1NjQgYW1kX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQotewotCXJldHVybiBhbWRfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOwotfQotCi1zdGF0aWMgdTY0IGFtZF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKLXsKLSNkZWZpbmUgSzdfRVZOVFNFTF9FVkVOVF9NQVNLCTB4NzAwMDAwMEZGVUxMCi0jZGVmaW5lIEs3X0VWTlRTRUxfVU5JVF9NQVNLCTB4MDAwMDBGRjAwVUxMCi0jZGVmaW5lIEs3X0VWTlRTRUxfRURHRV9NQVNLCTB4MDAwMDQwMDAwVUxMCi0jZGVmaW5lIEs3X0VWTlRTRUxfSU5WX01BU0sJMHgwMDA4MDAwMDBVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9SRUdfTUFTSwkweDBGRjAwMDAwMFVMTAotCi0jZGVmaW5lIEs3X0VWTlRTRUxfTUFTSwkJCVwKLQkoSzdfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAotCSBLN19FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCi0JIEs3X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKLQkgSzdfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAotCSBLN19FVk5UU0VMX1JFR19NQVNLKQotCi0JcmV0dXJuIGh3X2V2ZW50ICYgSzdfRVZOVFNFTF9NQVNLOwotfQotCiAvKgogICogUHJvcGFnYXRlIGV2ZW50IGVsYXBzZWQgdGltZSBpbnRvIHRoZSBnZW5lcmljIGV2ZW50LgogICogQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgb24gdGhlIENQVSB3aGVyZSB0aGUgZXZlbnQgaXMgYWN0aXZlLgpAQCAtOTE0LDQyICs0MzQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2J0cyh1NjQgY29uZmlnKQotewotCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7Ci0KLQlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOwotCi0JZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX1RSOwotCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFM7Ci0JZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUSU5UOwotCi0JaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKSkKLQkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfT1M7Ci0KLQlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKSkKLQkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSOwotCi0JdXBkYXRlX2RlYnVnY3RsbXNyKGRlYnVnY3RsbXNyKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X2Rpc2FibGVfYnRzKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQl1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyOwotCi0JaWYgKCFjcHVjLT5kcykKLQkJcmV0dXJuOwotCi0JZGVidWdjdGxtc3IgPSBnZXRfZGVidWdjdGxtc3IoKTsKLQotCWRlYnVnY3RsbXNyICY9Ci0JCX4oWDg2X0RFQlVHQ1RMX1RSIHwgWDg2X0RFQlVHQ1RMX0JUUyB8IFg4Nl9ERUJVR0NUTF9CVElOVCB8Ci0JCSAgWDg2X0RFQlVHQ1RMX0JUU19PRkZfT1MgfCBYODZfREVCVUdDVExfQlRTX09GRl9VU1IpOwotCi0JdXBkYXRlX2RlYnVnY3RsbXNyKGRlYnVnY3RsbXNyKTsKLX0KLQogLyoKICAqIFNldHVwIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGF0dHJfdHlwZQogICovCkBAIC05ODgsNiArNDcyLDggQEAKIAlod2MtPmNvbmZpZyA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9JTlQ7CiAKIAlod2MtPmlkeCA9IC0xOworCWh3Yy0+bGFzdF9jcHUgPSAtMTsKKwlod2MtPmxhc3RfdGFnID0gfjBVTEw7CiAKIAkvKgogCSAqIENvdW50IHVzZXIgYW5kIE9TIGV2ZW50cyB1bmxlc3MgcmVxdWVzdGVkIG5vdCB0by4KQEAgLTEwNTYsMTI2ICs1NDIsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcDZfcG11X2Rpc2FibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQl1NjQgdmFsOwotCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQliYXJyaWVyKCk7Ci0KLQkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCi0JcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKLQl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlpZiAoIWNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAwOwotCWJhcnJpZXIoKTsKLQotCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTsKLQotCWlmICh0ZXN0X2JpdChYODZfUE1DX0lEWF9GSVhFRF9CVFMsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJaW50ZWxfcG11X2Rpc2FibGVfYnRzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFtZF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfZGlzYWJsZV9hbGwodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCWludCBpZHg7CiAKLQlpZiAoIWNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAwOwotCS8qCi0JICogZW5zdXJlIHdlIHdyaXRlIHRoZSBkaXNhYmxlIGJlZm9yZSB3ZSBzdGFydCBkaXNhYmxpbmcgdGhlCi0JICogZXZlbnRzIHByb3Blciwgc28gdGhhdCBhbWRfcG11X2VuYWJsZV9ldmVudCgpIGRvZXMgdGhlCi0JICogcmlnaHQgdGhpbmcuCi0JICovCi0JYmFycmllcigpOwotCiAJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CiAJCXU2NCB2YWw7CiAKIAkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKIAkJCWNvbnRpbnVlOwotCQlyZG1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOworCQlyZG1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgdmFsKTsKIAkJaWYgKCEodmFsICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEUpKQogCQkJY29udGludWU7CiAJCXZhbCAmPSB+QVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0JCXdybXNybChNU1JfSzdfRVZOVFNFTDAgKyBpZHgsIHZhbCk7CisJCXdybXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCB2YWwpOwogCX0KIH0KIAogdm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKIHsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCiAJaWYgKCF4ODZfcG11X2luaXRpYWxpemVkKCkpCiAJCXJldHVybjsKLQlyZXR1cm4geDg2X3BtdS5kaXNhYmxlX2FsbCgpOwotfQogCi1zdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2FsbCh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwlpZiAoIWNwdWMtPmVuYWJsZWQpCiAJCXJldHVybjsKIAotCWNwdWMtPmVuYWJsZWQgPSAxOworCWNwdWMtPm5fYWRkZWQgPSAwOworCWNwdWMtPmVuYWJsZWQgPSAwOwogCWJhcnJpZXIoKTsKIAotCS8qIHA2IG9ubHkgaGFzIG9uZSBlbmFibGUgcmVnaXN0ZXIgKi8KLQlyZG1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOwotCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQl3cm1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOworCXg4Nl9wbXUuZGlzYWJsZV9hbGwoKTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JaWYgKGNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAxOwotCWJhcnJpZXIoKTsKLQotCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCB4ODZfcG11LmludGVsX2N0cmwpOwotCi0JaWYgKHRlc3RfYml0KFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgY3B1Yy0+YWN0aXZlX21hc2spKSB7Ci0JCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9Ci0JCQljcHVjLT5ldmVudHNbWDg2X1BNQ19JRFhfRklYRURfQlRTXTsKLQotCQlpZiAoV0FSTl9PTl9PTkNFKCFldmVudCkpCi0JCQlyZXR1cm47Ci0KLQkJaW50ZWxfcG11X2VuYWJsZV9idHMoZXZlbnQtPmh3LmNvbmZpZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2VuYWJsZV9hbGwodm9pZCkKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfZW5hYmxlX2FsbCh2b2lkKQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJaW50IGlkeDsKIAotCWlmIChjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMTsKLQliYXJyaWVyKCk7Ci0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CiAJCXU2NCB2YWw7CkBAIC0xMTg1LDMyICs1OTEsMjY2IEBACiAKIAkJdmFsID0gZXZlbnQtPmh3LmNvbmZpZzsKIAkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCQl3cm1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOworCQl3cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgdmFsKTsKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBtdTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfeDg2X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gZXZlbnQtPnBtdSA9PSAmcG11OworfQorCitzdGF0aWMgaW50IHg4Nl9zY2hlZHVsZV9ldmVudHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBuLCBpbnQgKmFzc2lnbikKK3sKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqYywgKmNvbnN0cmFpbnRzW1g4Nl9QTUNfSURYX01BWF07CisJdW5zaWduZWQgbG9uZyB1c2VkX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKKwlpbnQgaSwgaiwgdywgd21heCwgbnVtID0gMDsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJYml0bWFwX3plcm8odXNlZF9tYXNrLCBYODZfUE1DX0lEWF9NQVgpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQljb25zdHJhaW50c1tpXSA9CisJCSAgeDg2X3BtdS5nZXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgY3B1Yy0+ZXZlbnRfbGlzdFtpXSk7CisJfQorCisJLyoKKwkgKiBmYXN0cGF0aCwgdHJ5IHRvIHJldXNlIHByZXZpb3VzIHJlZ2lzdGVyCisJICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlod2MgPSAmY3B1Yy0+ZXZlbnRfbGlzdFtpXS0+aHc7CisJCWMgPSBjb25zdHJhaW50c1tpXTsKKworCQkvKiBuZXZlciBhc3NpZ25lZCAqLworCQlpZiAoaHdjLT5pZHggPT0gLTEpCisJCQlicmVhazsKKworCQkvKiBjb25zdHJhaW50IHN0aWxsIGhvbm9yZWQgKi8KKwkJaWYgKCF0ZXN0X2JpdChod2MtPmlkeCwgYy0+aWR4bXNrKSkKKwkJCWJyZWFrOworCisJCS8qIG5vdCBhbHJlYWR5IHVzZWQgKi8KKwkJaWYgKHRlc3RfYml0KGh3Yy0+aWR4LCB1c2VkX21hc2spKQorCQkJYnJlYWs7CisKKwkJc2V0X2JpdChod2MtPmlkeCwgdXNlZF9tYXNrKTsKKwkJaWYgKGFzc2lnbikKKwkJCWFzc2lnbltpXSA9IGh3Yy0+aWR4OworCX0KKwlpZiAoaSA9PSBuKQorCQlnb3RvIGRvbmU7CisKKwkvKgorCSAqIGJlZ2luIHNsb3cgcGF0aAorCSAqLworCisJYml0bWFwX3plcm8odXNlZF9tYXNrLCBYODZfUE1DX0lEWF9NQVgpOworCisJLyoKKwkgKiB3ZWlnaHQgPSBudW1iZXIgb2YgcG9zc2libGUgY291bnRlcnMKKwkgKgorCSAqIDEgICAgPSBtb3N0IGNvbnN0cmFpbmVkLCBvbmx5IHdvcmtzIG9uIG9uZSBjb3VudGVyCisJICogd21heCA9IGxlYXN0IGNvbnN0cmFpbmVkLCB3b3JrcyBvbiBhbnkgY291bnRlcgorCSAqCisJICogYXNzaWduIGV2ZW50cyB0byBjb3VudGVycyBzdGFydGluZyB3aXRoIG1vc3QKKwkgKiBjb25zdHJhaW5lZCBldmVudHMuCisJICovCisJd21heCA9IHg4Nl9wbXUubnVtX2V2ZW50czsKKworCS8qCisJICogd2hlbiBmaXhlZCBldmVudCBjb3VudGVycyBhcmUgcHJlc2VudCwKKwkgKiB3bWF4IGlzIGluY3JlbWVudGVkIGJ5IDEgdG8gYWNjb3VudAorCSAqIGZvciBvbmUgbW9yZSBjaG9pY2UKKwkgKi8KKwlpZiAoeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkKQorCQl3bWF4Kys7CisKKwlmb3IgKHcgPSAxLCBudW0gPSBuOyBudW0gJiYgdyA8PSB3bWF4OyB3KyspIHsKKwkJLyogZm9yIGVhY2ggZXZlbnQgKi8KKwkJZm9yIChpID0gMDsgbnVtICYmIGkgPCBuOyBpKyspIHsKKwkJCWMgPSBjb25zdHJhaW50c1tpXTsKKwkJCWh3YyA9ICZjcHVjLT5ldmVudF9saXN0W2ldLT5odzsKKworCQkJaWYgKGMtPndlaWdodCAhPSB3KQorCQkJCWNvbnRpbnVlOworCisJCQlmb3JfZWFjaF9iaXQoaiwgYy0+aWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpIHsKKwkJCQlpZiAoIXRlc3RfYml0KGosIHVzZWRfbWFzaykpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoaiA9PSBYODZfUE1DX0lEWF9NQVgpCisJCQkJYnJlYWs7CisKKwkJCXNldF9iaXQoaiwgdXNlZF9tYXNrKTsKKworCQkJaWYgKGFzc2lnbikKKwkJCQlhc3NpZ25baV0gPSBqOworCQkJbnVtLS07CisJCX0KKwl9Citkb25lOgorCS8qCisJICogc2NoZWR1bGluZyBmYWlsZWQgb3IgaXMganVzdCBhIHNpbXVsYXRpb24sCisJICogZnJlZSByZXNvdXJjZXMgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKCFhc3NpZ24gfHwgbnVtKSB7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWlmICh4ODZfcG11LnB1dF9ldmVudF9jb25zdHJhaW50cykKKwkJCQl4ODZfcG11LnB1dF9ldmVudF9jb25zdHJhaW50cyhjcHVjLCBjcHVjLT5ldmVudF9saXN0W2ldKTsKKwkJfQorCX0KKwlyZXR1cm4gbnVtID8gLUVOT1NQQyA6IDA7Cit9CisKKy8qCisgKiBkb2dycDogdHJ1ZSBpZiBtdXN0IGNvbGxlY3Qgc2libGluZ3MgZXZlbnRzIChncm91cCkKKyAqIHJldHVybnMgdG90YWwgbnVtYmVyIG9mIGV2ZW50cyBhbmQgZXJyb3IgY29kZQorICovCitzdGF0aWMgaW50IGNvbGxlY3RfZXZlbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyLCBib29sIGRvZ3JwKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlpbnQgbiwgbWF4X2NvdW50OworCisJbWF4X2NvdW50ID0geDg2X3BtdS5udW1fZXZlbnRzICsgeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkOworCisJLyogY3VycmVudCBudW1iZXIgb2YgZXZlbnRzIGFscmVhZHkgYWNjZXB0ZWQgKi8KKwluID0gY3B1Yy0+bl9ldmVudHM7CisKKwlpZiAoaXNfeDg2X2V2ZW50KGxlYWRlcikpIHsKKwkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJcmV0dXJuIC1FTk9TUEM7CisJCWNwdWMtPmV2ZW50X2xpc3Rbbl0gPSBsZWFkZXI7CisJCW4rKzsKKwl9CisJaWYgKCFkb2dycCkKKwkJcmV0dXJuIG47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghaXNfeDg2X2V2ZW50KGV2ZW50KSB8fAorCQkgICAgZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQkJY29udGludWU7CisKKwkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJcmV0dXJuIC1FTk9TUEM7CisKKwkJY3B1Yy0+ZXZlbnRfbGlzdFtuXSA9IGV2ZW50OworCQluKys7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeDg2X2Fzc2lnbl9od19ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBpKQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJaHdjLT5pZHggPSBjcHVjLT5hc3NpZ25baV07CisJaHdjLT5sYXN0X2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlod2MtPmxhc3RfdGFnID0gKytjcHVjLT50YWdzW2ldOworCisJaWYgKGh3Yy0+aWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykgeworCQlod2MtPmNvbmZpZ19iYXNlID0gMDsKKwkJaHdjLT5ldmVudF9iYXNlCT0gMDsKKwl9IGVsc2UgaWYgKGh3Yy0+aWR4ID49IFg4Nl9QTUNfSURYX0ZJWEVEKSB7CisJCWh3Yy0+Y29uZmlnX2Jhc2UgPSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMOworCQkvKgorCQkgKiBXZSBzZXQgaXQgc28gdGhhdCBldmVudF9iYXNlICsgaWR4IGluIHdybXNyL3JkbXNyIG1hcHMgdG8KKwkJICogTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC4uLiBDVFIyOgorCQkgKi8KKwkJaHdjLT5ldmVudF9iYXNlID0KKwkJCU1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCAtIFg4Nl9QTUNfSURYX0ZJWEVEOworCX0gZWxzZSB7CisJCWh3Yy0+Y29uZmlnX2Jhc2UgPSB4ODZfcG11LmV2ZW50c2VsOworCQlod2MtPmV2ZW50X2Jhc2UgID0geDg2X3BtdS5wZXJmY3RyOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfcHJldl9hc3NpZ25tZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCisJCQkJCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAorCQkJCQlpbnQgaSkKK3sKKwlyZXR1cm4gaHdjLT5pZHggPT0gY3B1Yy0+YXNzaWduW2ldICYmCisJCWh3Yy0+bGFzdF9jcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpICYmCisJCWh3Yy0+bGFzdF90YWcgPT0gY3B1Yy0+dGFnc1tpXTsKK30KKworc3RhdGljIHZvaWQgeDg2X3BtdV9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisKIHZvaWQgaHdfcGVyZl9lbmFibGUodm9pZCkKIHsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCWludCBpOworCiAJaWYgKCF4ODZfcG11X2luaXRpYWxpemVkKCkpCiAJCXJldHVybjsKKworCWlmIChjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoY3B1Yy0+bl9hZGRlZCkgeworCQkvKgorCQkgKiBhcHBseSBhc3NpZ25tZW50IG9idGFpbmVkIGVpdGhlciBmcm9tCisJCSAqIGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oKSBvciB4ODZfcG11X2VuYWJsZSgpCisJCSAqCisJCSAqIHN0ZXAxOiBzYXZlIGV2ZW50cyBtb3ZpbmcgdG8gbmV3IGNvdW50ZXJzCisJCSAqIHN0ZXAyOiByZXByb2dyYW0gbW92ZWQgZXZlbnRzIGludG8gbmV3IGNvdW50ZXJzCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgY3B1Yy0+bl9ldmVudHM7IGkrKykgeworCisJCQlldmVudCA9IGNwdWMtPmV2ZW50X2xpc3RbaV07CisJCQlod2MgPSAmZXZlbnQtPmh3OworCisJCQkvKgorCQkJICogd2UgY2FuIGF2b2lkIHJlcHJvZ3JhbW1pbmcgY291bnRlciBpZjoKKwkJCSAqIC0gYXNzaWduZWQgc2FtZSBjb3VudGVyIGFzIGxhc3QgdGltZQorCQkJICogLSBydW5uaW5nIG9uIHNhbWUgQ1BVIGFzIGxhc3QgdGltZQorCQkJICogLSBubyBvdGhlciBldmVudCBoYXMgdXNlZCB0aGUgY291bnRlciBzaW5jZQorCQkJICovCisJCQlpZiAoaHdjLT5pZHggPT0gLTEgfHwKKwkJCSAgICBtYXRjaF9wcmV2X2Fzc2lnbm1lbnQoaHdjLCBjcHVjLCBpKSkKKwkJCQljb250aW51ZTsKKworCQkJeDg2X3BtdV9zdG9wKGV2ZW50KTsKKworCQkJaHdjLT5pZHggPSAtMTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBjcHVjLT5uX2V2ZW50czsgaSsrKSB7CisKKwkJCWV2ZW50ID0gY3B1Yy0+ZXZlbnRfbGlzdFtpXTsKKwkJCWh3YyA9ICZldmVudC0+aHc7CisKKwkJCWlmIChod2MtPmlkeCA9PSAtMSkgeworCQkJCXg4Nl9hc3NpZ25faHdfZXZlbnQoZXZlbnQsIGNwdWMsIGkpOworCQkJCXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaHdjLT5pZHgpOworCQkJfQorCQkJLyoKKwkJCSAqIG5lZWQgdG8gbWFyayBhcyBhY3RpdmUgYmVjYXVzZSB4ODZfcG11X2Rpc2FibGUoKQorCQkJICogY2xlYXIgYWN0aXZlX21hc2sgYW5kIGV2ZW50c1tdIHlldCBpdCBwcmVzZXJ2ZXMKKwkJCSAqIGlkeAorCQkJICovCisJCQlzZXRfYml0KGh3Yy0+aWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisJCQljcHVjLT5ldmVudHNbaHdjLT5pZHhdID0gZXZlbnQ7CisKKwkJCXg4Nl9wbXUuZW5hYmxlKGh3YywgaHdjLT5pZHgpOworCQkJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCQl9CisJCWNwdWMtPm5fYWRkZWQgPSAwOworCQlwZXJmX2V2ZW50c19sYXBpY19pbml0KCk7CisJfQorCisJY3B1Yy0+ZW5hYmxlZCA9IDE7CisJYmFycmllcigpOworCiAJeDg2X3BtdS5lbmFibGVfYWxsKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IGludGVsX3BtdV9nZXRfc3RhdHVzKHZvaWQpCi17Ci0JdTY0IHN0YXR1czsKLQotCXJkbXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIHN0YXR1cyk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcG11X2Fja19zdGF0dXModTY0IGFjaykKLXsKLQl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwsIGFjayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4ODZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIF9feDg2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwKIAkJCSAgICAgIGh3Yy0+Y29uZmlnIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEUpOwpAQCAtMTIyMSw1MyArODYxLDYgQEAKIAkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgaHdjLT5jb25maWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKLXsKLQlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKLQl1NjQgY3RybF92YWwsIG1hc2s7Ci0KLQltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKLQotCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci0JY3RybF92YWwgJj0gfm1hc2s7Ci0JKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1wNl9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdTY0IHZhbCA9IFA2X05PUF9FVkVOVDsKLQotCWlmIChjcHVjLT5lbmFibGVkKQotCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0KLQkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgewotCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7Ci0JCWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKGh3YywgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYW1kX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JeDg2X3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKLX0KLQogc3RhdGljIERFRklORV9QRVJfQ1BVKHU2NCBbWDg2X1BNQ19JRFhfTUFYXSwgcG1jX3ByZXZfbGVmdCk7CiAKIC8qCkBAIC0xMzI2LDIyMCArOTE5LDYwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZW5hYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKLXsKLQlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKLQl1NjQgY3RybF92YWwsIGJpdHMsIG1hc2s7Ci0JaW50IGVycjsKLQotCS8qCi0JICogRW5hYmxlIElSUSBnZW5lcmF0aW9uICgweDgpLAotCSAqIGFuZCBlbmFibGUgcmluZy0zIGNvdW50aW5nICgweDIpIGFuZCByaW5nLTAgY291bnRpbmcgKDB4MSkKLQkgKiBpZiByZXF1ZXN0ZWQ6Ci0JICovCi0JYml0cyA9IDB4OFVMTDsKLQlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKQotCQliaXRzIHw9IDB4MjsKLQlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpCi0JCWJpdHMgfD0gMHgxOwotCi0JLyoKLQkgKiBBTlkgYml0IGlzIHN1cHBvcnRlZCBpbiB2MyBhbmQgdXAKLQkgKi8KLQlpZiAoeDg2X3BtdS52ZXJzaW9uID4gMiAmJiBod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9BTlkpCi0JCWJpdHMgfD0gMHg0OwotCi0JYml0cyA8PD0gKGlkeCAqIDQpOwotCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOwotCi0JcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKLQljdHJsX3ZhbCAmPSB+bWFzazsKLQljdHJsX3ZhbCB8PSBiaXRzOwotCWVyciA9IGNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQl1NjQgdmFsOwotCi0JdmFsID0gaHdjLT5jb25maWc7CiAJaWYgKGNwdWMtPmVuYWJsZWQpCi0JCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQotCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlICsgaWR4LCB2YWwpOwotfQotCi0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKLXsKLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKLQkJaWYgKCFfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpLmVuYWJsZWQpCi0JCQlyZXR1cm47Ci0KLQkJaW50ZWxfcG11X2VuYWJsZV9idHMoaHdjLT5jb25maWcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKLQkJaW50ZWxfcG11X2VuYWJsZV9maXhlZChod2MsIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl4ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFtZF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQotCWlmIChjcHVjLT5lbmFibGVkKQotCQl4ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbnQgZml4ZWRfbW9kZV9pZHgoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKLXsKLQl1bnNpZ25lZCBpbnQgaHdfZXZlbnQ7Ci0KLQlod19ldmVudCA9IGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0s7Ci0KLQlpZiAodW5saWtlbHkoKGh3X2V2ZW50ID09Ci0JCSAgICAgIHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpICYmCi0JCSAgICAgKGh3Yy0+c2FtcGxlX3BlcmlvZCA9PSAxKSkpCi0JCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9CVFM7Ci0KLQlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBmaXhlZCBjb3VudGVycyBkbyBub3QgdGFrZSBhbGwgcG9zc2libGUgZmlsdGVycwotCSAqLwotCWlmIChod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVF9GSUxURVJfTUFTSykKLQkJcmV0dXJuIC0xOwotCi0JaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKSkpCi0JCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9JTlNUUlVDVElPTlM7Ci0JaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUykpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQ1BVX0NZQ0xFUzsKLQlpZiAodW5saWtlbHkoaHdfZXZlbnQgPT0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTKSkpCi0JCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9CVVNfQ1lDTEVTOwotCi0JcmV0dXJuIC0xOworCQlfX3g4Nl9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKIH0KIAogLyoKLSAqIGdlbmVyaWMgY291bnRlciBhbGxvY2F0b3I6IGdldCBuZXh0IGZyZWUgY291bnRlcgotICovCi1zdGF0aWMgaW50Ci1nZW5fZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKLXsKLQlpbnQgaWR4OwotCi0JaWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChjcHVjLT51c2VkX21hc2ssIHg4Nl9wbXUubnVtX2V2ZW50cyk7Ci0JcmV0dXJuIGlkeCA9PSB4ODZfcG11Lm51bV9ldmVudHMgPyAtMSA6IGlkeDsKLX0KLQotLyoKLSAqIGludGVsLXNwZWNpZmljIGNvdW50ZXIgYWxsb2NhdG9yOiBjaGVjayBldmVudCBjb25zdHJhaW50cwotICovCi1zdGF0aWMgaW50Ci1pbnRlbF9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQotewotCWNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50ICpldmVudF9jb25zdHJhaW50OwotCWludCBpLCBjb2RlOwotCi0JaWYgKCFldmVudF9jb25zdHJhaW50cykKLQkJZ290byBza2lwOwotCi0JY29kZSA9IGh3Yy0+Y29uZmlnICYgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0s7Ci0KLQlmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGV2ZW50X2NvbnN0cmFpbnQsIGV2ZW50X2NvbnN0cmFpbnRzKSB7Ci0JCWlmIChjb2RlID09IGV2ZW50X2NvbnN0cmFpbnQtPmNvZGUpIHsKLQkJCWZvcl9lYWNoX2JpdChpLCBldmVudF9jb25zdHJhaW50LT5pZHhtc2ssIFg4Nl9QTUNfSURYX01BWCkgewotCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBjcHVjLT51c2VkX21hc2spKQotCQkJCQlyZXR1cm4gaTsKLQkJCX0KLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLXNraXA6Ci0JcmV0dXJuIGdlbl9nZXRfZXZlbnRfaWR4KGNwdWMsIGh3Yyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXg4Nl9zY2hlZHVsZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKLXsKLQlpbnQgaWR4OwotCi0JaWR4ID0gZml4ZWRfbW9kZV9pZHgoaHdjKTsKLQlpZiAoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykgewotCQkvKiBCVFMgaXMgYWxyZWFkeSBvY2N1cGllZC4gKi8KLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJaHdjLT5jb25maWdfYmFzZQk9IDA7Ci0JCWh3Yy0+ZXZlbnRfYmFzZQkJPSAwOwotCQlod2MtPmlkeAkJPSBpZHg7Ci0JfSBlbHNlIGlmIChpZHggPj0gMCkgewotCQkvKgotCQkgKiBUcnkgdG8gZ2V0IHRoZSBmaXhlZCBldmVudCwgaWYgdGhhdCBpcyBhbHJlYWR5IHRha2VuCi0JCSAqIHRoZW4gdHJ5IHRvIGdldCBhIGdlbmVyaWMgZXZlbnQ6Ci0JCSAqLwotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpCi0JCQlnb3RvIHRyeV9nZW5lcmljOwotCi0JCWh3Yy0+Y29uZmlnX2Jhc2UgPSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMOwotCQkvKgotCQkgKiBXZSBzZXQgaXQgc28gdGhhdCBldmVudF9iYXNlICsgaWR4IGluIHdybXNyL3JkbXNyIG1hcHMgdG8KLQkJICogTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC4uLiBDVFIyOgotCQkgKi8KLQkJaHdjLT5ldmVudF9iYXNlID0KLQkJCU1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCAtIFg4Nl9QTUNfSURYX0ZJWEVEOwotCQlod2MtPmlkeCA9IGlkeDsKLQl9IGVsc2UgewotCQlpZHggPSBod2MtPmlkeDsKLQkJLyogVHJ5IHRvIGdldCB0aGUgcHJldmlvdXMgZ2VuZXJpYyBldmVudCBhZ2FpbiAqLwotCQlpZiAoaWR4ID09IC0xIHx8IHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKSB7Ci10cnlfZ2VuZXJpYzoKLQkJCWlkeCA9IHg4Nl9wbXUuZ2V0X2V2ZW50X2lkeChjcHVjLCBod2MpOwotCQkJaWYgKGlkeCA9PSAtMSkKLQkJCQlyZXR1cm4gLUVBR0FJTjsKLQotCQkJc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7Ci0JCQlod2MtPmlkeCA9IGlkeDsKLQkJfQotCQlod2MtPmNvbmZpZ19iYXNlID0geDg2X3BtdS5ldmVudHNlbDsKLQkJaHdjLT5ldmVudF9iYXNlICA9IHg4Nl9wbXUucGVyZmN0cjsKLQl9Ci0KLQlyZXR1cm4gaWR4OwotfQotCi0vKgotICogRmluZCBhIFBNQyBzbG90IGZvciB0aGUgZnJlc2hseSBlbmFibGVkIC8gc2NoZWR1bGVkIGluIGV2ZW50OgorICogYWN0aXZhdGUgYSBzaW5nbGUgZXZlbnQKKyAqCisgKiBUaGUgZXZlbnQgaXMgYWRkZWQgdG8gdGhlIGdyb3VwIG9mIGVuYWJsZWQgZXZlbnRzCisgKiBidXQgb25seSBpZiBpdCBjYW4gYmUgc2NlaGR1bGVkIHdpdGggZXhpc3RpbmcgZXZlbnRzLgorICoKKyAqIENhbGxlZCB3aXRoIFBNVSBkaXNhYmxlZC4gSWYgc3VjY2Vzc2Z1bCBhbmQgcmV0dXJuIHZhbHVlIDEsCisgKiB0aGVuIGd1YXJhbnRlZWQgdG8gY2FsbCBwZXJmX2VuYWJsZSgpIGFuZCBod19wZXJmX2VuYWJsZSgpCiAgKi8KIHN0YXRpYyBpbnQgeDg2X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKwlpbnQgYXNzaWduW1g4Nl9QTUNfSURYX01BWF07CisJaW50IG4sIG4wLCByZXQ7CisKKwlod2MgPSAmZXZlbnQtPmh3OworCisJbjAgPSBjcHVjLT5uX2V2ZW50czsKKwluID0gY29sbGVjdF9ldmVudHMoY3B1YywgZXZlbnQsIGZhbHNlKTsKKwlpZiAobiA8IDApCisJCXJldHVybiBuOworCisJcmV0ID0geDg2X3NjaGVkdWxlX2V2ZW50cyhjcHVjLCBuLCBhc3NpZ24pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyoKKwkgKiBjb3B5IG5ldyBhc3NpZ25tZW50LCBub3cgd2Uga25vdyBpdCBpcyBwb3NzaWJsZQorCSAqIHdpbGwgYmUgdXNlZCBieSBod19wZXJmX2VuYWJsZSgpCisJICovCisJbWVtY3B5KGNwdWMtPmFzc2lnbiwgYXNzaWduLCBuKnNpemVvZihpbnQpKTsKKworCWNwdWMtPm5fZXZlbnRzID0gbjsKKwljcHVjLT5uX2FkZGVkICA9IG4gLSBuMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHg4Nl9wbXVfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorewogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCWludCBpZHg7CiAKLQlpZHggPSB4ODZfc2NoZWR1bGVfZXZlbnQoY3B1YywgaHdjKTsKLQlpZiAoaWR4IDwgMCkKLQkJcmV0dXJuIGlkeDsKKwlpZiAoaHdjLT5pZHggPT0gLTEpCisJCXJldHVybiAtRUFHQUlOOwogCi0JcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOwotCi0JeDg2X3BtdS5kaXNhYmxlKGh3YywgaWR4KTsKLQotCWNwdWMtPmV2ZW50c1tpZHhdID0gZXZlbnQ7Ci0Jc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKLQotCXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KTsKLQl4ODZfcG11LmVuYWJsZShod2MsIGlkeCk7Ci0KLQlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CisJeDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBod2MtPmlkeCk7CisJeDg2X3BtdS5lbmFibGUoaHdjLCBod2MtPmlkeCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1ODMsNyArMTAxNiw3IEBACiAJCXByX2luZm8oIkNQVSMlZDogb3ZlcmZsb3c6ICAgJTAxNmxseFxuIiwgY3B1LCBvdmVyZmxvdyk7CiAJCXByX2luZm8oIkNQVSMlZDogZml4ZWQ6ICAgICAgJTAxNmxseFxuIiwgY3B1LCBmaXhlZCk7CiAJfQotCXByX2luZm8oIkNQVSMlZDogdXNlZDogICAgICAgJTAxNmxseFxuIiwgY3B1LCAqKHU2NCAqKWNwdWMtPnVzZWRfbWFzayk7CisJcHJfaW5mbygiQ1BVIyVkOiBhY3RpdmU6ICAgICAgICUwMTZsbHhcbiIsIGNwdSwgKih1NjQgKiljcHVjLT5hY3RpdmVfbWFzayk7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJcmRtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIHBtY19jdHJsKTsKQEAgLTE2MDcsNjcgKzEwNDAsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpCi17Ci0Jc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IGNwdWMtPmRzOwotCXN0cnVjdCBidHNfcmVjb3JkIHsKLQkJdTY0CWZyb207Ci0JCXU2NAl0bzsKLQkJdTY0CWZsYWdzOwotCX07Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107Ci0Jc3RydWN0IGJ0c19yZWNvcmQgKmF0LCAqdG9wOwotCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOwotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgcHRfcmVncyByZWdzOwotCi0JaWYgKCFldmVudCkKLQkJcmV0dXJuOwotCi0JaWYgKCFkcykKLQkJcmV0dXJuOwotCi0JYXQgID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19idWZmZXJfYmFzZTsKLQl0b3AgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2luZGV4OwotCi0JaWYgKHRvcCA8PSBhdCkKLQkJcmV0dXJuOwotCi0JZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7Ci0KLQotCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwotCWRhdGEuYWRkcgk9IDA7Ci0JZGF0YS5yYXcJPSBOVUxMOwotCXJlZ3MuaXAJCT0gMDsKLQotCS8qCi0JICogUHJlcGFyZSBhIGdlbmVyaWMgc2FtcGxlLCBpLmUuIGZpbGwgaW4gdGhlIGludmFyaWFudCBmaWVsZHMuCi0JICogV2Ugd2lsbCBvdmVyd3JpdGUgdGhlIGZyb20gYW5kIHRvIGFkZHJlc3MgYmVmb3JlIHdlIG91dHB1dAotCSAqIHRoZSBzYW1wbGUuCi0JICovCi0JcGVyZl9wcmVwYXJlX3NhbXBsZSgmaGVhZGVyLCAmZGF0YSwgZXZlbnQsICZyZWdzKTsKLQotCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwKLQkJCSAgICAgIGhlYWRlci5zaXplICogKHRvcCAtIGF0KSwgMSwgMSkpCi0JCXJldHVybjsKLQotCWZvciAoOyBhdCA8IHRvcDsgYXQrKykgewotCQlkYXRhLmlwCQk9IGF0LT5mcm9tOwotCQlkYXRhLmFkZHIJPSBhdC0+dG87Ci0KLQkJcGVyZl9vdXRwdXRfc2FtcGxlKCZoYW5kbGUsICZoZWFkZXIsICZkYXRhLCBldmVudCk7Ci0JfQotCi0JcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOwotCi0JLyogVGhlcmUncyBuZXcgZGF0YSBhdmFpbGFibGUuICovCi0JZXZlbnQtPmh3LmludGVycnVwdHMrKzsKLQlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKLX0KLQotc3RhdGljIHZvaWQgeDg2X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKQEAgLTE2ODEsNzMgKzEwNTQsMzggQEAKIAl4ODZfcG11LmRpc2FibGUoaHdjLCBpZHgpOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgdGhlIGNsZWFyZWQgcG9pbnRlciBiZWNvbWVzIHZpc2libGUgYmVmb3JlIHdlCi0JICogKHBvdGVudGlhbGx5KSBmcmVlIHRoZSBldmVudDoKLQkgKi8KLQliYXJyaWVyKCk7Ci0KLQkvKgogCSAqIERyYWluIHRoZSByZW1haW5pbmcgZGVsdGEgY291bnQgb3V0IG9mIGEgZXZlbnQKIAkgKiB0aGF0IHdlIGFyZSBkaXNhYmxpbmc6CiAJICovCiAJeDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CiAKLQkvKiBEcmFpbiB0aGUgcmVtYWluaW5nIEJUUyByZWNvcmRzLiAqLwotCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkKLQkJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoY3B1Yyk7Ci0KIAljcHVjLT5ldmVudHNbaWR4XSA9IE5VTEw7Ci0JY2xlYXJfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKTsKK30KIAorc3RhdGljIHZvaWQgeDg2X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCWludCBpOworCisJeDg2X3BtdV9zdG9wKGV2ZW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBjcHVjLT5uX2V2ZW50czsgaSsrKSB7CisJCWlmIChldmVudCA9PSBjcHVjLT5ldmVudF9saXN0W2ldKSB7CisKKwkJCWlmICh4ODZfcG11LnB1dF9ldmVudF9jb25zdHJhaW50cykKKwkJCQl4ODZfcG11LnB1dF9ldmVudF9jb25zdHJhaW50cyhjcHVjLCBldmVudCk7CisKKwkJCXdoaWxlICgrK2kgPCBjcHVjLT5uX2V2ZW50cykKKwkJCQljcHVjLT5ldmVudF9saXN0W2ktMV0gPSBjcHVjLT5ldmVudF9saXN0W2ldOworCisJCQktLWNwdWMtPm5fZXZlbnRzOworCQkJYnJlYWs7CisJCX0KKwl9CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogfQogCi0vKgotICogU2F2ZSBhbmQgcmVzdGFydCBhbiBleHBpcmVkIGV2ZW50LiBDYWxsZWQgYnkgTk1JIGNvbnRleHRzLAotICogc28gaXQgaGFzIHRvIGJlIGNhcmVmdWwgYWJvdXQgcHJlZW1wdGluZyBub3JtYWwgZXZlbnQgb3BzOgotICovCi1zdGF0aWMgaW50IGludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlpbnQgaWR4ID0gaHdjLT5pZHg7Ci0JaW50IHJldDsKLQotCXg4Nl9wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOwotCXJldCA9IHg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KTsKLQotCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCi0JCWludGVsX3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X3Jlc2V0KHZvaWQpCi17Ci0Jc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZHM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaWR4OwotCi0JaWYgKCF4ODZfcG11Lm51bV9ldmVudHMpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCXByaW50aygiY2xlYXJpbmcgUE1VIHN0YXRlIG9uIENQVSMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgewotCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgMHVsbCk7Ci0JCWNoZWNraW5nX3dybXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCAwdWxsKTsKLQl9Ci0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7IGlkeCsrKSB7Ci0JCWNoZWNraW5nX3dybXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIDB1bGwpOwotCX0KLQlpZiAoZHMpCi0JCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHA2X3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCB4ODZfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKQEAgLTE3ODIsMTE3ICsxMTIwLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCi0JCQlwNl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Ci0JfQotCi0JaWYgKGhhbmRsZWQpCi0JCWluY19pcnFfc3RhdChhcGljX3BlcmZfaXJxcyk7Ci0KLQlyZXR1cm4gaGFuZGxlZDsKLX0KLQotLyoKLSAqIFRoaXMgaGFuZGxlciBpcyB0cmlnZ2VyZWQgYnkgdGhlIGxvY2FsIEFQSUMsIHNvIHRoZSBBUElDIElSUSBoYW5kbGluZwotICogcnVsZXMgYXBwbHk6Ci0gKi8KLXN0YXRpYyBpbnQgaW50ZWxfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKLQlpbnQgYml0LCBsb29wczsKLQl1NjQgYWNrLCBzdGF0dXM7Ci0KLQlkYXRhLmFkZHIgPSAwOwotCWRhdGEucmF3ID0gTlVMTDsKLQotCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQotCXBlcmZfZGlzYWJsZSgpOwotCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMpOwotCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJcGVyZl9lbmFibGUoKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbG9vcHMgPSAwOwotYWdhaW46Ci0JaWYgKCsrbG9vcHMgPiAxMDApIHsKLQkJV0FSTl9PTkNFKDEsICJwZXJmZXZlbnRzOiBpcnEgbG9vcCBzdHVjayFcbiIpOwotCQlwZXJmX2V2ZW50X3ByaW50X2RlYnVnKCk7Ci0JCWludGVsX3BtdV9yZXNldCgpOwotCQlwZXJmX2VuYWJsZSgpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOwotCWFjayA9IHN0YXR1czsKLQlmb3JfZWFjaF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZzdGF0dXMsIFg4Nl9QTUNfSURYX01BWCkgewotCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbYml0XTsKLQotCQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSAmc3RhdHVzKTsKLQkJaWYgKCF0ZXN0X2JpdChiaXQsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoZXZlbnQpKQotCQkJY29udGludWU7Ci0KLQkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7Ci0KLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKLQkJCWludGVsX3BtdV9kaXNhYmxlX2V2ZW50KCZldmVudC0+aHcsIGJpdCk7Ci0JfQotCi0JaW50ZWxfcG11X2Fja19zdGF0dXMoYWNrKTsKLQotCS8qCi0JICogUmVwZWF0IGlmIHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lOgotCSAqLwotCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBhZ2FpbjsKLQotCXBlcmZfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBhbWRfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKLQlpbnQgaWR4LCBoYW5kbGVkID0gMDsKLQl1NjQgdmFsOwotCi0JZGF0YS5hZGRyID0gMDsKLQlkYXRhLnJhdyA9IE5VTEw7Ci0KLQljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKLQkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCi0JCWV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07Ci0JCWh3YyA9ICZldmVudC0+aHc7Ci0KLQkJdmFsID0geDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7Ci0JCWlmICh2YWwgJiAoMVVMTCA8PCAoeDg2X3BtdS5ldmVudF9iaXRzIC0gMSkpKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogZXZlbnQgb3ZlcmZsb3cKLQkJICovCi0JCWhhbmRsZWQJCT0gMTsKLQkJZGF0YS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7Ci0KLQkJaWYgKCF4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQotCQkJYW1kX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKKwkJCXg4Nl9wbXUuZGlzYWJsZShod2MsIGlkeCk7CiAJfQogCiAJaWYgKGhhbmRsZWQpCkBAIC0xOTc1LDE5NSArMTIwMywxMzggQEAKIAkucHJpb3JpdHkJCT0gMQogfTsKIAotc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IHA2X3BtdSA9IHsKLQkubmFtZQkJCT0gInA2IiwKLQkuaGFuZGxlX2lycQkJPSBwNl9wbXVfaGFuZGxlX2lycSwKLQkuZGlzYWJsZV9hbGwJCT0gcDZfcG11X2Rpc2FibGVfYWxsLAotCS5lbmFibGVfYWxsCQk9IHA2X3BtdV9lbmFibGVfYWxsLAotCS5lbmFibGUJCQk9IHA2X3BtdV9lbmFibGVfZXZlbnQsCi0JLmRpc2FibGUJCT0gcDZfcG11X2Rpc2FibGVfZXZlbnQsCi0JLmV2ZW50c2VsCQk9IE1TUl9QNl9FVk5UU0VMMCwKLQkucGVyZmN0cgkJPSBNU1JfUDZfUEVSRkNUUjAsCi0JLmV2ZW50X21hcAkJPSBwNl9wbXVfZXZlbnRfbWFwLAotCS5yYXdfZXZlbnQJCT0gcDZfcG11X3Jhd19ldmVudCwKLQkubWF4X2V2ZW50cwkJPSBBUlJBWV9TSVpFKHA2X3BlcmZtb25fZXZlbnRfbWFwKSwKLQkuYXBpYwkJCT0gMSwKLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAotCS52ZXJzaW9uCQk9IDAsCi0JLm51bV9ldmVudHMJCT0gMiwKLQkvKgotCSAqIEV2ZW50cyBoYXZlIDQwIGJpdHMgaW1wbGVtZW50ZWQuIEhvd2V2ZXIgdGhleSBhcmUgZGVzaWduZWQgc3VjaAotCSAqIHRoYXQgYml0cyBbMzItMzldIGFyZSBzaWduIGV4dGVuc2lvbnMgb2YgYml0IDMxLiBBcyBzdWNoIHRoZQotCSAqIGVmZmVjdGl2ZSB3aWR0aCBvZiBhIGV2ZW50IGZvciBQNi1saWtlIFBNVSBpcyAzMiBiaXRzIG9ubHkuCi0JICoKLQkgKiBTZWUgSUEtMzIgSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIGRldmVsb3BlciBtYW51YWwgVm9sIDNCCi0JICovCi0JLmV2ZW50X2JpdHMJCT0gMzIsCi0JLmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgMzIpIC0gMSwKLQkuZ2V0X2V2ZW50X2lkeAkJPSBpbnRlbF9nZXRfZXZlbnRfaWR4LAotfTsKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCB1bmNvbnN0cmFpbmVkOworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGVtcHR5Y29uc3RyYWludDsKIAotc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IGludGVsX3BtdSA9IHsKLQkubmFtZQkJCT0gIkludGVsIiwKLQkuaGFuZGxlX2lycQkJPSBpbnRlbF9wbXVfaGFuZGxlX2lycSwKLQkuZGlzYWJsZV9hbGwJCT0gaW50ZWxfcG11X2Rpc2FibGVfYWxsLAotCS5lbmFibGVfYWxsCQk9IGludGVsX3BtdV9lbmFibGVfYWxsLAotCS5lbmFibGUJCQk9IGludGVsX3BtdV9lbmFibGVfZXZlbnQsCi0JLmRpc2FibGUJCT0gaW50ZWxfcG11X2Rpc2FibGVfZXZlbnQsCi0JLmV2ZW50c2VsCQk9IE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwLAotCS5wZXJmY3RyCQk9IE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAsCi0JLmV2ZW50X21hcAkJPSBpbnRlbF9wbXVfZXZlbnRfbWFwLAotCS5yYXdfZXZlbnQJCT0gaW50ZWxfcG11X3Jhd19ldmVudCwKLQkubWF4X2V2ZW50cwkJPSBBUlJBWV9TSVpFKGludGVsX3BlcmZtb25fZXZlbnRfbWFwKSwKLQkuYXBpYwkJCT0gMSwKLQkvKgotCSAqIEludGVsIFBNQ3MgY2Fubm90IGJlIGFjY2Vzc2VkIHNhbmVseSBhYm92ZSAzMiBiaXQgd2lkdGgsCi0JICogc28gd2UgaW5zdGFsbCBhbiBhcnRpZmljaWFsIDE8PDMxIHBlcmlvZCByZWdhcmRsZXNzIG9mCi0JICogdGhlIGdlbmVyaWMgZXZlbnQgcGVyaW9kOgotCSAqLwotCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDMxKSAtIDEsCi0JLmVuYWJsZV9idHMJCT0gaW50ZWxfcG11X2VuYWJsZV9idHMsCi0JLmRpc2FibGVfYnRzCQk9IGludGVsX3BtdV9kaXNhYmxlX2J0cywKLQkuZ2V0X2V2ZW50X2lkeAkJPSBpbnRlbF9nZXRfZXZlbnRfaWR4LAotfTsKLQotc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IGFtZF9wbXUgPSB7Ci0JLm5hbWUJCQk9ICJBTUQiLAotCS5oYW5kbGVfaXJxCQk9IGFtZF9wbXVfaGFuZGxlX2lycSwKLQkuZGlzYWJsZV9hbGwJCT0gYW1kX3BtdV9kaXNhYmxlX2FsbCwKLQkuZW5hYmxlX2FsbAkJPSBhbWRfcG11X2VuYWJsZV9hbGwsCi0JLmVuYWJsZQkJCT0gYW1kX3BtdV9lbmFibGVfZXZlbnQsCi0JLmRpc2FibGUJCT0gYW1kX3BtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudHNlbAkJPSBNU1JfSzdfRVZOVFNFTDAsCi0JLnBlcmZjdHIJCT0gTVNSX0s3X1BFUkZDVFIwLAotCS5ldmVudF9tYXAJCT0gYW1kX3BtdV9ldmVudF9tYXAsCi0JLnJhd19ldmVudAkJPSBhbWRfcG11X3Jhd19ldmVudCwKLQkubWF4X2V2ZW50cwkJPSBBUlJBWV9TSVpFKGFtZF9wZXJmbW9uX2V2ZW50X21hcCksCi0JLm51bV9ldmVudHMJCT0gNCwKLQkuZXZlbnRfYml0cwkJPSA0OCwKLQkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCA0OCkgLSAxLAotCS5hcGljCQkJPSAxLAotCS8qIHVzZSBoaWdoZXN0IGJpdCB0byBkZXRlY3Qgb3ZlcmZsb3cgKi8KLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCA0NykgLSAxLAotCS5nZXRfZXZlbnRfaWR4CQk9IGdlbl9nZXRfZXZlbnRfaWR4LAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgcDZfcG11X2luaXQodm9pZCkKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCit4ODZfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCkgewotCWNhc2UgMToKLQljYXNlIDM6ICAvKiBQZW50aXVtIFBybyAqLwotCWNhc2UgNToKLQljYXNlIDY6ICAvKiBQZW50aXVtIElJICovCi0JY2FzZSA3OgotCWNhc2UgODoKLQljYXNlIDExOiAvKiBQZW50aXVtIElJSSAqLwotCQlldmVudF9jb25zdHJhaW50cyA9IGludGVsX3A2X2V2ZW50X2NvbnN0cmFpbnRzOwotCQlicmVhazsKLQljYXNlIDk6Ci0JY2FzZSAxMzoKLQkJLyogUGVudGl1bSBNICovCi0JCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfcDZfZXZlbnRfY29uc3RyYWludHM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX2NvbnQoInVuc3VwcG9ydGVkIHA2IENQVSBtb2RlbCAlZCAiLAotCQkJYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqYzsKKworCWlmICh4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzKSB7CisJCWZvcl9lYWNoX2V2ZW50X2NvbnN0cmFpbnQoYywgeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cykgeworCQkJaWYgKChldmVudC0+aHcuY29uZmlnICYgYy0+Y21hc2spID09IGMtPmNvZGUpCisJCQkJcmV0dXJuIGM7CisJCX0KIAl9CiAKLQl4ODZfcG11ID0gcDZfcG11OwotCi0JcmV0dXJuIDA7CisJcmV0dXJuICZ1bmNvbnN0cmFpbmVkOwogfQogCi1zdGF0aWMgX19pbml0IGludCBpbnRlbF9wbXVfaW5pdCh2b2lkKQorc3RhdGljIGludCB4ODZfZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQogewotCXVuaW9uIGNwdWlkMTBfZWR4IGVkeDsKLQl1bmlvbiBjcHVpZDEwX2VheCBlYXg7Ci0JdW5zaWduZWQgaW50IHVudXNlZDsKLQl1bnNpZ25lZCBpbnQgZWJ4OwotCWludCB2ZXJzaW9uOworCWludCByZXQgPSAwOwogCi0JaWYgKCFjcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04pKSB7Ci0JCS8qIGNoZWNrIGZvciBQNiBwcm9jZXNzb3IgZmFtaWx5ICovCi0JICAgaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYpIHsKLQkJcmV0dXJuIHA2X3BtdV9pbml0KCk7Ci0JICAgfSBlbHNlIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JICAgfQotCX0KKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKKwlldmVudC0+b25jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGV2ZW50LT5jdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CiAKLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIEFyY2hpdGVjdHVyYWwgUGVyZk1vbiBzdXBwb3J0cwotCSAqIEJyYW5jaCBNaXNzZXMgUmV0aXJlZCBod19ldmVudCBvciBub3QuCi0JICovCi0JY3B1aWQoMTAsICZlYXguZnVsbCwgJmVieCwgJnVudXNlZCwgJmVkeC5mdWxsKTsKLQlpZiAoZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoIDw9IEFSQ0hfUEVSRk1PTl9CUkFOQ0hfTUlTU0VTX1JFVElSRUQpCi0JCXJldHVybiAtRU5PREVWOworCWlmICghaXNfeDg2X2V2ZW50KGV2ZW50KSkKKwkJcmV0ID0gZXZlbnQtPnBtdS0+ZW5hYmxlKGV2ZW50KTsKIAotCXZlcnNpb24gPSBlYXguc3BsaXQudmVyc2lvbl9pZDsKLQlpZiAodmVyc2lvbiA8IDIpCi0JCXJldHVybiAtRU5PREVWOworCWlmICghcmV0ICYmICFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCWNwdWN0eC0+YWN0aXZlX29uY3B1Kys7CiAKLQl4ODZfcG11CQkJCT0gaW50ZWxfcG11OwotCXg4Nl9wbXUudmVyc2lvbgkJCT0gdmVyc2lvbjsKLQl4ODZfcG11Lm51bV9ldmVudHMJCT0gZWF4LnNwbGl0Lm51bV9ldmVudHM7Ci0JeDg2X3BtdS5ldmVudF9iaXRzCQk9IGVheC5zcGxpdC5iaXRfd2lkdGg7Ci0JeDg2X3BtdS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IGVheC5zcGxpdC5iaXRfd2lkdGgpIC0gMTsKKwlpZiAoIXJldCAmJiBldmVudC0+YXR0ci5leGNsdXNpdmUpCisJCWNwdWN0eC0+ZXhjbHVzaXZlID0gMTsKIAotCS8qCi0JICogUXVpcms6IHYyIHBlcmZtb24gZG9lcyBub3QgcmVwb3J0IGZpeGVkLXB1cnBvc2UgZXZlbnRzLCBzbwotCSAqIGFzc3VtZSBhdCBsZWFzdCAzIGV2ZW50czoKLQkgKi8KLQl4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQJPSBtYXgoKGludCllZHguc3BsaXQubnVtX2V2ZW50c19maXhlZCwgMyk7Ci0KLQkvKgotCSAqIEluc3RhbGwgdGhlIGh3LWNhY2hlLWV2ZW50cyB0YWJsZToKLQkgKi8KLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7Ci0JY2FzZSAxNTogLyogb3JpZ2luYWwgNjUgbm0gY2VsZXJvbi9wZW50aXVtL2NvcmUyL3hlb24sICJNZXJvbSIvIkNvbnJvZSIgKi8KLQljYXNlIDIyOiAvKiBzaW5nbGUtY29yZSA2NSBubSBjZWxlcm9uL2NvcmUyc29sbyAiTWVyb20tTCIvIkNvbnJvZS1MIiAqLwotCWNhc2UgMjM6IC8qIGN1cnJlbnQgNDUgbm0gY2VsZXJvbi9jb3JlMi94ZW9uICJQZW5yeW4iLyJXb2xmZGFsZSIgKi8KLQljYXNlIDI5OiAvKiBzaXgtY29yZSA0NSBubSB4ZW9uICJEdW5uaW5ndG9uIiAqLwotCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMsCi0JCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7Ci0KLQkJcHJfY29udCgiQ29yZTIgZXZlbnRzLCAiKTsKLQkJZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCWNhc2UgMjY6Ci0JCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzLAotCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwotCi0JCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfbmVoYWxlbV9ldmVudF9jb25zdHJhaW50czsKLQkJcHJfY29udCgiTmVoYWxlbS9Db3JlaTcgZXZlbnRzLCAiKTsKLQkJYnJlYWs7Ci0JY2FzZSAyODoKLQkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgYXRvbV9od19jYWNoZV9ldmVudF9pZHMsCi0JCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7Ci0KLQkJcHJfY29udCgiQXRvbSBldmVudHMsICIpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgYW1kX3BtdV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCB4ODZfZXZlbnRfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQogewotCS8qIFBlcmZvcm1hbmNlLW1vbml0b3Jpbmcgc3VwcG9ydGVkIGZyb20gSzcgYW5kIGxhdGVyOiAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiA8IDYpCi0JCXJldHVybiAtRU5PREVWOworCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkU7CisJZXZlbnQtPm9uY3B1ID0gLTE7CiAKLQl4ODZfcG11ID0gYW1kX3BtdTsKKwlpZiAoIWlzX3g4Nl9ldmVudChldmVudCkpCisJCWV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOwogCi0JLyogRXZlbnRzIGFyZSBjb21tb24gZm9yIGFsbCBBTURzICovCi0JbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcywKLQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCWV2ZW50LT50c3RhbXBfcnVubmluZyAtPSBldmVudC0+Y3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOwogCi0JcmV0dXJuIDA7CisJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCWNwdWN0eC0+YWN0aXZlX29uY3B1LS07CisKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVzaXZlIHx8ICFjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKKwkJY3B1Y3R4LT5leGNsdXNpdmUgPSAwOwogfQogCisvKgorICogQ2FsbGVkIHRvIGVuYWJsZSBhIHdob2xlIGdyb3VwIG9mIGV2ZW50cy4KKyAqIFJldHVybnMgMSBpZiB0aGUgZ3JvdXAgd2FzIGVuYWJsZWQsIG9yIC1FQUdBSU4gaWYgaXQgY291bGQgbm90IGJlLgorICogQXNzdW1lcyB0aGUgY2FsbGVyIGhhcyBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBoYXMKKyAqIGZyb3plbiB0aGUgUE1VIHdpdGggaHdfcGVyZl9zYXZlX2Rpc2FibGUuCisgKgorICogY2FsbGVkIHdpdGggUE1VIGRpc2FibGVkLiBJZiBzdWNjZXNzZnVsIGFuZCByZXR1cm4gdmFsdWUgMSwKKyAqIHRoZW4gZ3VhcmFudGVlZCB0byBjYWxsIHBlcmZfZW5hYmxlKCkgYW5kIGh3X3BlcmZfZW5hYmxlKCkKKyAqLworaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciwKKwkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IHBlcmZfZXZlbnQgKnN1YjsKKwlpbnQgYXNzaWduW1g4Nl9QTUNfSURYX01BWF07CisJaW50IG4wLCBuMSwgcmV0OworCisJLyogbjAgPSB0b3RhbCBudW1iZXIgb2YgZXZlbnRzICovCisJbjAgPSBjb2xsZWN0X2V2ZW50cyhjcHVjLCBsZWFkZXIsIHRydWUpOworCWlmIChuMCA8IDApCisJCXJldHVybiBuMDsKKworCXJldCA9IHg4Nl9zY2hlZHVsZV9ldmVudHMoY3B1YywgbjAsIGFzc2lnbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHg4Nl9ldmVudF9zY2hlZF9pbihsZWFkZXIsIGNwdWN0eCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW4xID0gMTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoc3ViLT5zdGF0ZSA+IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKSB7CisJCQlyZXQgPSB4ODZfZXZlbnRfc2NoZWRfaW4oc3ViLCBjcHVjdHgpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIHVuZG87CisJCQkrK24xOworCQl9CisJfQorCS8qCisJICogY29weSBuZXcgYXNzaWdubWVudCwgbm93IHdlIGtub3cgaXQgaXMgcG9zc2libGUKKwkgKiB3aWxsIGJlIHVzZWQgYnkgaHdfcGVyZl9lbmFibGUoKQorCSAqLworCW1lbWNweShjcHVjLT5hc3NpZ24sIGFzc2lnbiwgbjAqc2l6ZW9mKGludCkpOworCisJY3B1Yy0+bl9ldmVudHMgID0gbjA7CisJY3B1Yy0+bl9hZGRlZCAgID0gbjE7CisJY3R4LT5ucl9hY3RpdmUgKz0gbjE7CisKKwkvKgorCSAqIDEgbWVhbnMgc3VjY2Vzc2Z1bCBhbmQgZXZlbnRzIGFyZSBhY3RpdmUKKwkgKiBUaGlzIGlzIG5vdCBxdWl0ZSB0cnVlIGJlY2F1c2Ugd2UgZGVmZXIKKwkgKiBhY3R1YWwgYWN0aXZhdGlvbiB1bnRpbCBod19wZXJmX2VuYWJsZSgpIGJ1dAorCSAqIHRoaXMgd2F5IHdlKiBlbnN1cmUgY2FsbGVyIHdvbid0IHRyeSB0byBlbmFibGUKKwkgKiBpbmRpdmlkdWFsIGV2ZW50cworCSAqLworCXJldHVybiAxOwordW5kbzoKKwl4ODZfZXZlbnRfc2NoZWRfb3V0KGxlYWRlciwgY3B1Y3R4KTsKKwluMCAgPSAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChzdWItPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKSB7CisJCQl4ODZfZXZlbnRfc2NoZWRfb3V0KHN1YiwgY3B1Y3R4KTsKKwkJCWlmICgrK24wID09IG4xKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKKyNpbmNsdWRlICJwZXJmX2V2ZW50X2FtZC5jIgorI2luY2x1ZGUgInBlcmZfZXZlbnRfcDYuYyIKKyNpbmNsdWRlICJwZXJmX2V2ZW50X2ludGVsLmMiCisKIHN0YXRpYyB2b2lkIF9faW5pdCBwbXVfY2hlY2tfYXBpYyh2b2lkKQogewogCWlmIChjcHVfaGFzX2FwaWMpCkBAIC0yMjIwLDYgKzEzOTEsMTAgQEAKIAlwZXJmX2V2ZW50c19sYXBpY19pbml0KCk7CiAJcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZwZXJmX2V2ZW50X25taV9ub3RpZmllcik7CiAKKwl1bmNvbnN0cmFpbmVkID0gKHN0cnVjdCBldmVudF9jb25zdHJhaW50KQorCQlfX0VWRU5UX0NPTlNUUkFJTlQoMCwgKDFVTEwgPDwgeDg2X3BtdS5udW1fZXZlbnRzKSAtIDEsCisJCQkJICAgMCwgeDg2X3BtdS5udW1fZXZlbnRzKTsKKwogCXByX2luZm8oIi4uLiB2ZXJzaW9uOiAgICAgICAgICAgICAgICAlZFxuIiwgICAgIHg4Nl9wbXUudmVyc2lvbik7CiAJcHJfaW5mbygiLi4uIGJpdCB3aWR0aDogICAgICAgICAgICAgICVkXG4iLCAgICAgeDg2X3BtdS5ldmVudF9iaXRzKTsKIAlwcl9pbmZvKCIuLi4gZ2VuZXJpYyByZWdpc3RlcnM6ICAgICAgJWRcbiIsICAgICB4ODZfcG11Lm51bV9ldmVudHMpOwpAQCAtMjIzNyw1MCArMTQxMiw3OSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcG11ID0gewogCS5lbmFibGUJCT0geDg2X3BtdV9lbmFibGUsCiAJLmRpc2FibGUJPSB4ODZfcG11X2Rpc2FibGUsCisJLnN0YXJ0CQk9IHg4Nl9wbXVfc3RhcnQsCisJLnN0b3AJCT0geDg2X3BtdV9zdG9wLAogCS5yZWFkCQk9IHg4Nl9wbXVfcmVhZCwKIAkudW50aHJvdHRsZQk9IHg4Nl9wbXVfdW50aHJvdHRsZSwKIH07CiAKLXN0YXRpYyBpbnQKLXZhbGlkYXRlX2V2ZW50KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IGh3X3BlcmZfZXZlbnQgZmFrZV9ldmVudCA9IGV2ZW50LT5odzsKLQotCWlmIChldmVudC0+cG11ICYmIGV2ZW50LT5wbXUgIT0gJnBtdSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geDg2X3NjaGVkdWxlX2V2ZW50KGNwdWMsICZmYWtlX2V2ZW50KSA+PSAwOwotfQotCisvKgorICogdmFsaWRhdGUgYSBzaW5nbGUgZXZlbnQgZ3JvdXAKKyAqCisgKiB2YWxpZGF0aW9uIGluY2x1ZGU6CisgKgktIGNoZWNrIGV2ZW50cyBhcmUgY29tcGF0aWJsZSB3aGljaCBlYWNoIG90aGVyCisgKgktIGV2ZW50cyBkbyBub3QgY29tcGV0ZSBmb3IgdGhlIHNhbWUgY291bnRlcgorICoJLSBudW1iZXIgb2YgZXZlbnRzIDw9IG51bWJlciBvZiBjb3VudGVycworICoKKyAqIHZhbGlkYXRpb24gZW5zdXJlcyB0aGUgZ3JvdXAgY2FuIGJlIGxvYWRlZCBvbnRvIHRoZQorICogUE1VIGlmIGl0IHdhcyB0aGUgb25seSBncm91cCBhdmFpbGFibGUuCisgKi8KIHN0YXRpYyBpbnQgdmFsaWRhdGVfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nLCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyBmYWtlX3BtdTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqZmFrZV9jcHVjOworCWludCByZXQsIG47CiAKLQltZW1zZXQoJmZha2VfcG11LCAwLCBzaXplb2YoZmFrZV9wbXUpKTsKKwlyZXQgPSAtRU5PTUVNOworCWZha2VfY3B1YyA9IGttYWxsb2Moc2l6ZW9mKCpmYWtlX2NwdWMpLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKCFmYWtlX2NwdWMpCisJCWdvdG8gb3V0OwogCi0JaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCi0JCXJldHVybiAtRU5PU1BDOworCS8qCisJICogdGhlIGV2ZW50IGlzIG5vdCB5ZXQgY29ubmVjdGVkIHdpdGggaXRzCisJICogc2libGluZ3MgdGhlcmVmb3JlIHdlIG11c3QgZmlyc3QgY29sbGVjdAorCSAqIGV4aXN0aW5nIHNpYmxpbmdzLCB0aGVuIGFkZCB0aGUgbmV3IGV2ZW50CisJICogYmVmb3JlIHdlIGNhbiBzaW11bGF0ZSB0aGUgc2NoZWR1bGluZworCSAqLworCXJldCA9IC1FTk9TUEM7CisJbiA9IGNvbGxlY3RfZXZlbnRzKGZha2VfY3B1YywgbGVhZGVyLCB0cnVlKTsKKwlpZiAobiA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNpYmxpbmcsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIHNpYmxpbmcpKQotCQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQorCWZha2VfY3B1Yy0+bl9ldmVudHMgPSBuOworCW4gPSBjb2xsZWN0X2V2ZW50cyhmYWtlX2NwdWMsIGV2ZW50LCBmYWxzZSk7CisJaWYgKG4gPCAwKQorCQlnb3RvIG91dF9mcmVlOwogCi0JaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGV2ZW50KSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJZmFrZV9jcHVjLT5uX2V2ZW50cyA9IG47CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSB4ODZfc2NoZWR1bGVfZXZlbnRzKGZha2VfY3B1YywgbiwgTlVMTCk7CisKK291dF9mcmVlOgorCWtmcmVlKGZha2VfY3B1Yyk7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKKwljb25zdCBzdHJ1Y3QgcG11ICp0bXA7CiAJaW50IGVycjsKIAogCWVyciA9IF9faHdfcGVyZl9ldmVudF9pbml0KGV2ZW50KTsKIAlpZiAoIWVycikgeworCQkvKgorCQkgKiB3ZSB0ZW1wb3JhcmlseSBjb25uZWN0IGV2ZW50IHRvIGl0cyBwbXUKKwkJICogc3VjaCB0aGF0IHZhbGlkYXRlX2dyb3VwKCkgY2FuIGNsYXNzaWZ5CisJCSAqIGl0IGFzIGFuIHg4NiBldmVudCB1c2luZyBpc194ODZfZXZlbnQoKQorCQkgKi8KKwkJdG1wID0gZXZlbnQtPnBtdTsKKwkJZXZlbnQtPnBtdSA9ICZwbXU7CisKIAkJaWYgKGV2ZW50LT5ncm91cF9sZWFkZXIgIT0gZXZlbnQpCiAJCQllcnIgPSB2YWxpZGF0ZV9ncm91cChldmVudCk7CisKKwkJZXZlbnQtPnBtdSA9IHRtcDsKIAl9CiAJaWYgKGVycikgewogCQlpZiAoZXZlbnQtPmRlc3Ryb3kpCkBAIC0yMzA0LDcgKzE1MDgsNiBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfaXJxX2VudHJ5KTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnksIHBtY19ubWlfZW50cnkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgaW5faWdub3JlZF9mcmFtZSk7CiAKIAogc3RhdGljIHZvaWQKQEAgLTIzMjAsMTAgKzE1MjMsNiBAQAogCiBzdGF0aWMgaW50IGJhY2t0cmFjZV9zdGFjayh2b2lkICpkYXRhLCBjaGFyICpuYW1lKQogewotCXBlcl9jcHUoaW5faWdub3JlZF9mcmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9Ci0JCQl4ODZfaXNfc3RhY2tfaWQoTk1JX1NUQUNLLCBuYW1lKSB8fAotCQkJeDg2X2lzX3N0YWNrX2lkKERFQlVHX1NUQUNLLCBuYW1lKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMzMxLDkgKzE1MzAsNiBAQAogewogCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkgPSBkYXRhOwogCi0JaWYgKHBlcl9jcHUoaW5faWdub3JlZF9mcmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkKLQkJcmV0dXJuOwotCiAJaWYgKHJlbGlhYmxlKQogCQljYWxsY2hhaW5fc3RvcmUoZW50cnksIGFkZHIpOwogfQpAQCAtMjQ0MCw5ICsxNjM2LDYgQEAKIAogCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7CiAKLQlpZiAoIWN1cnJlbnQgfHwgY3VycmVudC0+cGlkID09IDApCi0JCXJldHVybjsKLQogCWlmIChpc191c2VyICYmIGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORykKIAkJcmV0dXJuOwogCkBAIC0yNDcyLDQgKzE2NjUsMjUgQEAKIHZvaWQgaHdfcGVyZl9ldmVudF9zZXR1cF9vbmxpbmUoaW50IGNwdSkKIHsKIAlpbml0X2RlYnVnX3N0b3JlX29uX2NwdShjcHUpOworCisJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlhbWRfcG11X2NwdV9vbmxpbmUoY3B1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCBod19wZXJmX2V2ZW50X3NldHVwX29mZmxpbmUoaW50IGNwdSkKK3sKKwlpbml0X2RlYnVnX3N0b3JlX29uX2NwdShjcHUpOworCisJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlhbWRfcG11X2NwdV9vZmZsaW5lKGNwdSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzZGJmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYwpAQCAtMCwwICsxLDQxNiBAQAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAorCitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhhbWRfbmJfbG9jayk7CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcworCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQoreworIFsgQyhMMUQpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDQwLCAvKiBEYXRhIENhY2hlIEFjY2Vzc2VzICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA0MSwgLyogRGF0YSBDYWNoZSBNaXNzZXMgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNDIsIC8qIERhdGEgQ2FjaGUgUmVmaWxscyA6c3lzdGVtICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyNjcsIC8qIERhdGEgUHJlZmV0Y2hlciA6YXR0ZW1wdHMgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmNhbmNlbGxlZCAqLworCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEluc3RydWN0aW9uIGNhY2hlIGZldGNoZXMgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0QiwgLyogUHJlZmV0Y2ggSW5zdHJ1Y3Rpb25zIDpMb2FkICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzdELCAvKiBSZXF1ZXN0cyB0byBMMiBDYWNoZSA6SUMrREMgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzN0UsIC8qIEwyIENhY2hlIE1pc3NlcyA6IElDK0RDICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE3RiwgLyogTDIgRmlsbC9Xcml0ZWJhY2sgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDYsIC8qIEwxIERUTEIgYW5kIEwyIERMVEIgTWlzcyAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBmZWN0aGVzICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4NSwgLyogSW5zdHIuIGZldGNoIElUTEIgbWlzc2VzICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCisgWyBDKEJQVSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMyLCAvKiBSZXRpcmVkIEJyYW5jaCBJbnN0ci4gICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjMywgLyogUmV0aXJlZCBNaXNwcmVkaWN0ZWQgQkkgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCisvKgorICogQU1EIFBlcmZvcm1hbmNlIE1vbml0b3IgSzcgYW5kIGxhdGVyLgorICovCitzdGF0aWMgY29uc3QgdTY0IGFtZF9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3sKKyAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDc2LAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDAwODAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHgwMDgxLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAorfTsKKworc3RhdGljIHU2NCBhbWRfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCit7CisJcmV0dXJuIGFtZF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Cit9CisKK3N0YXRpYyB1NjQgYW1kX3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQoreworI2RlZmluZSBLN19FVk5UU0VMX0VWRU5UX01BU0sJMHhGMDAwMDAwRkZVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9VTklUX01BU0sJMHgwMDAwMEZGMDBVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9FREdFX01BU0sJMHgwMDAwNDAwMDBVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9JTlZfTUFTSwkweDAwMDgwMDAwMFVMTAorI2RlZmluZSBLN19FVk5UU0VMX1JFR19NQVNLCTB4MEZGMDAwMDAwVUxMCisKKyNkZWZpbmUgSzdfRVZOVFNFTF9NQVNLCQkJXAorCShLN19FVk5UU0VMX0VWRU5UX01BU0sgfAlcCisJIEs3X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKKwkgSzdfRVZOVFNFTF9FREdFX01BU0sgIHwJXAorCSBLN19FVk5UU0VMX0lOVl9NQVNLICAgfAlcCisJIEs3X0VWTlRTRUxfUkVHX01BU0spCisKKwlyZXR1cm4gaHdfZXZlbnQgJiBLN19FVk5UU0VMX01BU0s7Cit9CisKKy8qCisgKiBBTUQ2NCBldmVudHMgYXJlIGRldGVjdGVkIGJhc2VkIG9uIHRoZWlyIGV2ZW50IGNvZGVzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhbWRfaXNfbmJfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKK3sKKwlyZXR1cm4gKGh3Yy0+Y29uZmlnICYgMHhlMCkgPT0gMHhlMDsKK30KKworc3RhdGljIHZvaWQgYW1kX3B1dF9ldmVudF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJc3RydWN0IGFtZF9uYiAqbmIgPSBjcHVjLT5hbWRfbmI7CisJaW50IGk7CisKKwkvKgorCSAqIG9ubHkgY2FyZSBhYm91dCBOQiBldmVudHMKKwkgKi8KKwlpZiAoIShuYiAmJiBhbWRfaXNfbmJfZXZlbnQoaHdjKSkpCisJCXJldHVybjsKKworCS8qCisJICogbmVlZCB0byBzY2FuIHdob2xlIGxpc3QgYmVjYXVzZSBldmVudCBtYXkgbm90IGhhdmUKKwkgKiBiZWVuIGFzc2lnbmVkIGR1cmluZyBzY2hlZHVsaW5nCisJICoKKwkgKiBubyByYWNlIGNvbmRpdGlvbiBwb3NzaWJsZSBiZWNhdXNlIGV2ZW50IGNhbiBvbmx5CisJICogYmUgcmVtb3ZlZCBvbiBvbmUgQ1BVIGF0IGEgdGltZSBBTkQgUE1VIGlzIGRpc2FibGVkCisJICogd2hlbiB3ZSBjb21lIGhlcmUKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpKyspIHsKKwkJaWYgKG5iLT5vd25lcnNbaV0gPT0gZXZlbnQpIHsKKwkJCWNtcHhjaGcobmItPm93bmVycytpLCBldmVudCwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworIC8qCisgICogQU1ENjQgTm9ydGhCcmlkZ2UgZXZlbnRzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgYmVjYXVzZQorICAqIGNvdW50ZXIgYWNjZXNzIG5lZWRzIHRvIGJlIHN5bmNocm9uaXplZCBhY3Jvc3MgYWxsIGNvcmVzCisgICogb2YgYSBwYWNrYWdlLiBSZWZlciB0byBCS0RHIHNlY3Rpb24gMy4xMgorICAqCisgICogTkIgZXZlbnRzIGFyZSBldmVudHMgbWVhc3VyaW5nIEwzIGNhY2hlLCBIeXBlcnRyYW5zcG9ydAorICAqIHRyYWZmaWMuIFRoZXkgYXJlIGlkZW50aWZpZWQgYnkgYW4gZXZlbnQgY29kZSA+PSAweGUwMC4KKyAgKiBUaGV5IG1lYXN1cmUgZXZlbnRzIG9uIHRoZSBOb3J0aEJyaWRlIHdoaWNoIGlzIHNoYXJlZAorICAqIGJ5IGFsbCBjb3JlcyBvbiBhIHBhY2thZ2UuIE5CIGV2ZW50cyBhcmUgY291bnRlZCBvbiBhCisgICogc2hhcmVkIHNldCBvZiBjb3VudGVycy4gV2hlbiBhIE5CIGV2ZW50IGlzIHByb2dyYW1tZWQKKyAgKiBpbiBhIGNvdW50ZXIsIHRoZSBkYXRhIGFjdHVhbGx5IGNvbWVzIGZyb20gYSBzaGFyZWQKKyAgKiBjb3VudGVyLiBUaHVzLCBhY2Nlc3MgdG8gdGhvc2UgY291bnRlcnMgbmVlZHMgdG8gYmUKKyAgKiBzeW5jaHJvbml6ZWQuCisgICoKKyAgKiBXZSBpbXBsZW1lbnQgdGhlIHN5bmNocm9uaXphdGlvbiBzdWNoIHRoYXQgbm8gdHdvIGNvcmVzCisgICogY2FuIGJlIG1lYXN1cmluZyBOQiBldmVudHMgdXNpbmcgdGhlIHNhbWUgY291bnRlcnMuIFRodXMsCisgICogd2UgbWFpbnRhaW4gYSBwZXItTkIgYWxsb2NhdGlvbiB0YWJsZS4gVGhlIGF2YWlsYWJsZSBzbG90CisgICogaXMgcHJvcGFnYXRlZCB1c2luZyB0aGUgZXZlbnRfY29uc3RyYWludCBzdHJ1Y3R1cmUuCisgICoKKyAgKiBXZSBwcm92aWRlIG9ubHkgb25lIGNob2ljZSBmb3IgZWFjaCBOQiBldmVudCBiYXNlZCBvbgorICAqIHRoZSBmYWN0IHRoYXQgb25seSBOQiBldmVudHMgaGF2ZSByZXN0cmljdGlvbnMuIENvbnNlcXVlbnRseSwKKyAgKiBpZiBhIGNvdW50ZXIgaXMgYXZhaWxhYmxlLCB0aGVyZSBpcyBhIGd1YXJhbnRlZSB0aGUgTkIgZXZlbnQKKyAgKiB3aWxsIGJlIGFzc2lnbmVkIHRvIGl0LiBJZiBubyBzbG90IGlzIGF2YWlsYWJsZSwgYW4gZW1wdHkKKyAgKiBjb25zdHJhaW50IGlzIHJldHVybmVkIGFuZCBzY2hlZHVsaW5nIHdpbGwgZXZlbnR1YWxseSBmYWlsCisgICogZm9yIHRoaXMgZXZlbnQuCisgICoKKyAgKiBOb3RlIHRoYXQgYWxsIGNvcmVzIGF0dGFjaGVkIHRoZSBzYW1lIE5CIGNvbXBldGUgZm9yIHRoZSBzYW1lCisgICogY291bnRlcnMgdG8gaG9zdCBOQiBldmVudHMsIHRoaXMgaXMgd2h5IHdlIHVzZSBhdG9taWMgb3BzLiBTb21lCisgICogbXVsdGktY2hpcCBDUFVzIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgTkIuCisgICoKKyAgKiBHaXZlbiB0aGF0IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkIChjbXB4Y2hnKSwgdGhleSBtdXN0IGJlCisgICogZXZlbnR1YWxseSBmcmVlZCBmb3Igb3RoZXJzIHRvIHVzZS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkKKyAgKiBjYWxsaW5nIGFtZF9wdXRfZXZlbnRfY29uc3RyYWludHMoKS4KKyAgKgorICAqIE5vbiBOQiBldmVudHMgYXJlIG5vdCBpbXBhY3RlZCBieSB0aGlzIHJlc3RyaWN0aW9uLgorICAqLworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50ICoKK2FtZF9nZXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlzdHJ1Y3QgYW1kX25iICpuYiA9IGNwdWMtPmFtZF9uYjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqb2xkID0gTlVMTDsKKwlpbnQgbWF4ID0geDg2X3BtdS5udW1fZXZlbnRzOworCWludCBpLCBqLCBrID0gLTE7CisKKwkvKgorCSAqIGlmIG5vdCBOQiBldmVudCBvciBubyBOQiwgdGhlbiBubyBjb25zdHJhaW50cworCSAqLworCWlmICghKG5iICYmIGFtZF9pc19uYl9ldmVudChod2MpKSkKKwkJcmV0dXJuICZ1bmNvbnN0cmFpbmVkOworCisJLyoKKwkgKiBkZXRlY3QgaWYgYWxyZWFkeSBwcmVzZW50LCBpZiBzbyByZXVzZQorCSAqCisJICogY2Fubm90IG1lcmdlIHdpdGggYWN0dWFsIGFsbG9jYXRpb24KKwkgKiBiZWNhdXNlIG9mIHBvc3NpYmxlIGhvbGVzCisJICoKKwkgKiBldmVudCBjYW4gYWxyZWFkeSBiZSBwcmVzZW50IHlldCBub3QgYXNzaWduZWQgKGluIGh3Yy0+aWR4KQorCSAqIGJlY2F1c2Ugb2Ygc3VjY2Vzc2l2ZSBjYWxscyB0byB4ODZfc2NoZWR1bGVfZXZlbnRzKCkgZnJvbQorCSAqIGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oKSB3aXRob3V0IGh3X3BlcmZfZW5hYmxlKCkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKwkJLyoKKwkJICoga2VlcCB0cmFjayBvZiBmaXJzdCBmcmVlIHNsb3QKKwkJICovCisJCWlmIChrID09IC0xICYmICFuYi0+b3duZXJzW2ldKQorCQkJayA9IGk7CisKKwkJLyogYWxyZWFkeSBwcmVzZW50LCByZXVzZSAqLworCQlpZiAobmItPm93bmVyc1tpXSA9PSBldmVudCkKKwkJCWdvdG8gZG9uZTsKKwl9CisJLyoKKwkgKiBub3QgcHJlc2VudCwgc28gZ3JhYiBhIG5ldyBzbG90CisJICogc3RhcnRpbmcgZWl0aGVyIGF0OgorCSAqLworCWlmIChod2MtPmlkeCAhPSAtMSkgeworCQkvKiBwcmV2aW91cyBhc3NpZ25tZW50ICovCisJCWkgPSBod2MtPmlkeDsKKwl9IGVsc2UgaWYgKGsgIT0gLTEpIHsKKwkJLyogc3RhcnQgZnJvbSBmcmVlIHNsb3QgZm91bmQgKi8KKwkJaSA9IGs7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogZXZlbnQgbm90IGZvdW5kLCBubyBzbG90IGZvdW5kIGluCisJCSAqIGZpcnN0IHBhc3MsIHRyeSBhZ2FpbiBmcm9tIHRoZQorCQkgKiBiZWdpbm5pbmcKKwkJICovCisJCWkgPSAwOworCX0KKwlqID0gaTsKKwlkbyB7CisJCW9sZCA9IGNtcHhjaGcobmItPm93bmVycytpLCBOVUxMLCBldmVudCk7CisJCWlmICghb2xkKQorCQkJYnJlYWs7CisJCWlmICgrK2kgPT0gbWF4KQorCQkJaSA9IDA7CisJfSB3aGlsZSAoaSAhPSBqKTsKK2RvbmU6CisJaWYgKCFvbGQpCisJCXJldHVybiAmbmItPmV2ZW50X2NvbnN0cmFpbnRzW2ldOworCisJcmV0dXJuICZlbXB0eWNvbnN0cmFpbnQ7Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBhbWRfcG11ID0geworCS5uYW1lCQkJPSAiQU1EIiwKKwkuaGFuZGxlX2lycQkJPSB4ODZfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IHg4Nl9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0geDg2X3BtdV9lbmFibGVfYWxsLAorCS5lbmFibGUJCQk9IHg4Nl9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IHg4Nl9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX0s3X0VWTlRTRUwwLAorCS5wZXJmY3RyCQk9IE1TUl9LN19QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IGFtZF9wbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gYW1kX3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShhbWRfcGVyZm1vbl9ldmVudF9tYXApLAorCS5udW1fZXZlbnRzCQk9IDQsCisJLmV2ZW50X2JpdHMJCT0gNDgsCisJLmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgNDgpIC0gMSwKKwkuYXBpYwkJCT0gMSwKKwkvKiB1c2UgaGlnaGVzdCBiaXQgdG8gZGV0ZWN0IG92ZXJmbG93ICovCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgNDcpIC0gMSwKKwkuZ2V0X2V2ZW50X2NvbnN0cmFpbnRzCT0gYW1kX2dldF9ldmVudF9jb25zdHJhaW50cywKKwkucHV0X2V2ZW50X2NvbnN0cmFpbnRzCT0gYW1kX3B1dF9ldmVudF9jb25zdHJhaW50cworfTsKKworc3RhdGljIHN0cnVjdCBhbWRfbmIgKmFtZF9hbGxvY19uYihpbnQgY3B1LCBpbnQgbmJfaWQpCit7CisJc3RydWN0IGFtZF9uYiAqbmI7CisJaW50IGk7CisKKwluYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRfbmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5iKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChuYiwgMCwgc2l6ZW9mKCpuYikpOworCW5iLT5uYl9pZCA9IG5iX2lkOworCisJLyoKKwkgKiBpbml0aWFsaXplIGFsbCBwb3NzaWJsZSBOQiBjb25zdHJhaW50cworCSAqLworCWZvciAoaSA9IDA7IGkgPCB4ODZfcG11Lm51bV9ldmVudHM7IGkrKykgeworCQlzZXRfYml0KGksIG5iLT5ldmVudF9jb25zdHJhaW50c1tpXS5pZHhtc2spOworCQluYi0+ZXZlbnRfY29uc3RyYWludHNbaV0ud2VpZ2h0ID0gMTsKKwl9CisJcmV0dXJuIG5iOworfQorCitzdGF0aWMgdm9pZCBhbWRfcG11X2NwdV9vbmxpbmUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1MSwgKmNwdTI7CisJc3RydWN0IGFtZF9uYiAqbmIgPSBOVUxMOworCWludCBpLCBuYl9pZDsKKworCWlmIChib290X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMgPCAyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgdG9vIGVhcmx5IGluIHRoZQorCSAqIGJvb3QgcHJvY2VzcywgaW4gd2hpY2ggY2FzZSBuYl9pZCBpcyBib2d1cworCSAqLworCW5iX2lkID0gYW1kX2dldF9uYl9pZChjcHUpOworCWlmIChuYl9pZCA9PSBCQURfQVBJQ0lEKQorCQlyZXR1cm47CisKKwljcHUxID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KTsKKwljcHUxLT5hbWRfbmIgPSBOVUxMOworCisJcmF3X3NwaW5fbG9jaygmYW1kX25iX2xvY2spOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWNwdTIgPSAmcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBpKTsKKwkJbmIgPSBjcHUyLT5hbWRfbmI7CisJCWlmICghbmIpCisJCQljb250aW51ZTsKKwkJaWYgKG5iLT5uYl9pZCA9PSBuYl9pZCkKKwkJCWdvdG8gZm91bmQ7CisJfQorCisJbmIgPSBhbWRfYWxsb2NfbmIoY3B1LCBuYl9pZCk7CisJaWYgKCFuYikgeworCQlwcl9lcnIoInBlcmZfZXZlbnRzOiBmYWlsZWQgTkIgYWxsb2NhdGlvbiBmb3IgQ1BVJWRcbiIsIGNwdSk7CisJCXJhd19zcGluX3VubG9jaygmYW1kX25iX2xvY2spOworCQlyZXR1cm47CisJfQorZm91bmQ6CisJbmItPnJlZmNudCsrOworCWNwdTEtPmFtZF9uYiA9IG5iOworCisJcmF3X3NwaW5fdW5sb2NrKCZhbWRfbmJfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X29mZmxpbmUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHc7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzIDwgMikKKwkJcmV0dXJuOworCisJY3B1aHcgPSAmcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpOworCisJcmF3X3NwaW5fbG9jaygmYW1kX25iX2xvY2spOworCisJaWYgKC0tY3B1aHctPmFtZF9uYi0+cmVmY250ID09IDApCisJCWtmcmVlKGNwdWh3LT5hbWRfbmIpOworCisJY3B1aHctPmFtZF9uYiA9IE5VTEw7CisKKwlyYXdfc3Bpbl91bmxvY2soJmFtZF9uYl9sb2NrKTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgYW1kX3BtdV9pbml0KHZvaWQpCit7CisJLyogUGVyZm9ybWFuY2UtbW9uaXRvcmluZyBzdXBwb3J0ZWQgZnJvbSBLNyBhbmQgbGF0ZXI6ICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgNikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl4ODZfcG11ID0gYW1kX3BtdTsKKworCS8qIEV2ZW50cyBhcmUgY29tbW9uIGZvciBhbGwgQU1EcyAqLworCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGFtZF9od19jYWNoZV9ldmVudF9pZHMsCisJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCS8qCisJICogZXhwbGljaXRseSBpbml0aWFsaXplIHRoZSBib290IGNwdSwgb3RoZXIgY3B1cyB3aWxsIGdldAorCSAqIHRoZSBjcHUgaG90cGx1ZyBjYWxsYmFja3MgZnJvbSBzbXBfaW5pdCgpCisJICovCisJYW1kX3BtdV9jcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIENPTkZJR19DUFVfU1VQX0FNRCAqLworCitzdGF0aWMgaW50IGFtZF9wbXVfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbWRfcG11X2NwdV9vbmxpbmUoaW50IGNwdSkKK3sKK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9jcHVfb2ZmbGluZShpbnQgY3B1KQoreworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2NTkwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCkBAIC0wLDAgKzEsOTcxIEBACisjaWZkZWYgQ09ORklHX0NQVV9TVVBfSU5URUwKKworLyoKKyAqIEludGVsIFBlcmZNb24gdjMuIFVzZWQgb24gQ29yZTIgYW5kIGxhdGVyLgorICovCitzdGF0aWMgY29uc3QgdTY0IGludGVsX3BlcmZtb25fZXZlbnRfbWFwW10gPQoreworICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwM2MsCisgIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4NGYyZSwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDQxMmUsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCisgIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDEzYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzW10gPQoreworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgyKSwgLyogRlBfQVNTSVNUICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLCAvKiBNVUwgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksIC8qIERJViAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwgLyogQ1lDTEVTX0RJVl9CVVNZICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDE5LCAweDIpLCAvKiBERUxBWUVEX0JZUEFTUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMSwgMHgxKSwgLyogRlBfQ09NUF9JTlNUUl9SRVQgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2NvcmUyX2V2ZW50X2NvbnN0cmFpbnRzW10gPQoreworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHhjMCwgKDB4M3woMVVMTDw8MzIpKSksIC8qIElOU1RSVUNUSU9OU19SRVRJUkVEICovCisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDNjLCAoMHgzfCgxVUxMPDwzMykpKSwgLyogVU5IQUxURURfQ09SRV9DWUNMRVMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTAsIDB4MSksIC8qIEZQX0NPTVBfT1BTX0VYRSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgyKSwgLyogRlBfQVNTSVNUICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLCAvKiBNVUwgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksIC8qIERJViAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwgLyogQ1lDTEVTX0RJVl9CVVNZICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDE4LCAweDEpLCAvKiBJRExFX0RVUklOR19ESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTksIDB4MiksIC8qIERFTEFZRURfQllQQVNTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGExLCAweDEpLCAvKiBSU19VT1BTX0RJU1BBVENIX0NZQ0xFUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwgLyogTUVNX0xPQURfUkVUSVJFRCAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweGZ8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4ZnwoMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQwLCAweDMpLCAvKiBMMURfQ0FDSEVfTEQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NDEsIDB4MyksIC8qIEwxRF9DQUNIRV9TVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0MiwgMHgzKSwgLyogTDFEX0NBQ0hFX0xPQ0sgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NDMsIDB4MyksIC8qIEwxRF9BTExfUkVGICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQ4LCAweDMpLCAvKiBMMURfUEVORF9NSVNTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDRlLCAweDMpLCAvKiBMMURfUFJFRkVUQ0ggKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NTEsIDB4MyksIC8qIEwxRCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg2MywgMHgzKSwgLyogQ0FDSEVfTE9DS19DWUNMRVMgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3dlc3RtZXJlX2V2ZW50X2NvbnN0cmFpbnRzW10gPQoreworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHhjMCwgKDB4ZnwoMVVMTDw8MzIpKSksIC8qIElOU1RSVUNUSU9OU19SRVRJUkVEICovCisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDNjLCAoMHhmfCgxVUxMPDwzMykpKSwgLyogVU5IQUxURURfQ09SRV9DWUNMRVMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NTEsIDB4MyksIC8qIEwxRCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg2MCwgMHgxKSwgLyogT0ZGQ09SRV9SRVFVRVNUU19PVVRTVEFORElORyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg2MywgMHgzKSwgLyogQ0FDSEVfTE9DS19DWUNMRVMgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2dlbl9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweDN8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4M3woMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyB1NjQgaW50ZWxfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCit7CisJcmV0dXJuIGludGVsX3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKK30KKworc3RhdGljIF9faW5pdGNvbnN0IHU2NCB3ZXN0bWVyZV9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDEwYiwgLyogTUVNX0lOU1RfUkVUSVJFRC5MT0FEUyAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE1MSwgLyogTDFELlJFUEwgICAgICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDIwYiwgLyogTUVNX0lOU1RfUkVUVVJFRC5TVE9SRVMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI1MSwgLyogTDFELk1fUkVQTCAgICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI0ZSwgLyogTDFEX1BSRUZFVENILk1JU1MgICAgICAgICAgICAqLworCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODAsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwLAorCX0sCisgfSwKKyBbIEMoTEwgICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzMjQsIC8qIEwyX1JRU1RTLkxPQURTICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyMjQsIC8qIEwyX1JRU1RTLkxEX01JU1MgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBjMjQsIC8qIEwyX1JRU1RTLlJGT1MgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MjQsIC8qIEwyX1JRU1RTLlJGT19NSVNTICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMmUsIC8qIExMQyBSZWZlcmVuY2UgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMmUsIC8qIExMQyBNaXNzZXMgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTBiLCAvKiBNRU1fSU5TVF9SRVRJUkVELkxPQURTICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTA4LCAvKiBEVExCX0xPQURfTUlTU0VTLkFOWSAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMjBiLCAvKiBNRU1fSU5TVF9SRVRVUkVELlNUT1JFUyAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTBjLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTg1LCAvKiBJVExCX01JU1NFUy5BTlkgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFMTF9CUkFOQ0hFUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDNlOCwgLyogQlBVX0NMRUFSUy5BTlkgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKK307CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogTDFEX0NBQ0hFX1NULklfU1RBVEUgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI0ZSwgLyogTDFEX1BSRUZFVENILk1JU1MgICAgICAgICAgICAqLworCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODAsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwLAorCX0sCisgfSwKKyBbIEMoTEwgICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzMjQsIC8qIEwyX1JRU1RTLkxPQURTICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyMjQsIC8qIEwyX1JRU1RTLkxEX01JU1MgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBjMjQsIC8qIEwyX1JRU1RTLlJGT1MgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MjQsIC8qIEwyX1JRU1RTLlJGT19NSVNTICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMmUsIC8qIExMQyBSZWZlcmVuY2UgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMmUsIC8qIExMQyBNaXNzZXMgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgIChhbGlhcykgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTA4LCAvKiBEVExCX0xPQURfTUlTU0VTLkFOWSAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgIChhbGlhcykgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTBjLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgyMGM4LCAvKiBJVExCX01JU1NfUkVUSVJFRCAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFMTF9CUkFOQ0hFUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDNlOCwgLyogQlBVX0NMRUFSUy5BTlkgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKK307CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgY29yZTJfaHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQwLCAvKiBMMURfQ0FDSEVfTEQuSV9TVEFURSAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgxMDRlLCAvKiBMMURfUFJFRkVUQ0guUkVRVUVTVFMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMMUkgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogTDFJLlJFQURTICAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODEsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTEwgICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMjksIC8qIEwyX0xELk1FU0kgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTI5LCAvKiBMMl9MRC5JU1RBVEUgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyQSwgLyogTDJfU1QuTUVTSSAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMkEsIC8qIEwyX1NULklTVEFURSAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoRFRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAoYWxpYXMpICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjA4LCAvKiBEVExCX01JU1NFUy5NSVNTX0xEICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgIChhbGlhcykgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfU1QgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoSVRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzAsIC8qIElOU1RfUkVUSVJFRC5BTllfUCAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgxMjgyLCAvKiBJVExCTUlTU0VTICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTlkgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGM1LCAvKiBCUF9JTlNUX1JFVElSRUQuTUlTUFJFRCAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKK307CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgYXRvbV9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFLkxEICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjI0MCwgLyogTDFEX0NBQ0hFLlNUICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMTQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDUwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwNjA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MiwgLyogSVRMQi5NSVNTRVMgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCisgWyBDKEJQVSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgdTY0IGludGVsX3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQoreworI2RlZmluZSBDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSwkJMHgwMDAwMDBGRlVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9SRUdfTUFTSwkJMHhGRjAwMDAwMFVMTAorCisjZGVmaW5lIENPUkVfRVZOVFNFTF9NQVNLCQlcCisJKElOVEVMX0FSQ0hfRVZUU0VMX01BU0sgfAlcCisJIElOVEVMX0FSQ0hfVU5JVF9NQVNLICAgfAlcCisJIElOVEVMX0FSQ0hfRURHRV9NQVNLICAgfAlcCisJIElOVEVMX0FSQ0hfSU5WX01BU0sgICAgfAlcCisJIElOVEVMX0FSQ0hfQ05UX01BU0spCisKKwlyZXR1cm4gaHdfZXZlbnQgJiBDT1JFX0VWTlRTRUxfTUFTSzsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9idHModTY0IGNvbmZpZykKK3sKKwl1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyOworCisJZGVidWdjdGxtc3IgPSBnZXRfZGVidWdjdGxtc3IoKTsKKworCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9UUjsKKwlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTOworCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVElOVDsKKworCWlmICghKGNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUykpCisJCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TOworCisJaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikpCisJCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX1VTUjsKKworCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2J0cyh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKKworCWlmICghY3B1Yy0+ZHMpCisJCXJldHVybjsKKworCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7CisKKwlkZWJ1Z2N0bG1zciAmPQorCQl+KFg4Nl9ERUJVR0NUTF9UUiB8IFg4Nl9ERUJVR0NUTF9CVFMgfCBYODZfREVCVUdDVExfQlRJTlQgfAorCQkgIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TIHwgWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSKTsKKworCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgMCk7CisKKwlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgeDg2X3BtdS5pbnRlbF9jdHJsKTsKKworCWlmICh0ZXN0X2JpdChYODZfUE1DX0lEWF9GSVhFRF9CVFMsIGNwdWMtPmFjdGl2ZV9tYXNrKSkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPQorCQkJY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107CisKKwkJaWYgKFdBUk5fT05fT05DRSghZXZlbnQpKQorCQkJcmV0dXJuOworCisJCWludGVsX3BtdV9lbmFibGVfYnRzKGV2ZW50LT5ody5jb25maWcpOworCX0KK30KKworc3RhdGljIGlubGluZSB1NjQgaW50ZWxfcG11X2dldF9zdGF0dXModm9pZCkKK3sKKwl1NjQgc3RhdHVzOworCisJcmRtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9wbXVfYWNrX3N0YXR1cyh1NjQgYWNrKQoreworCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCwgYWNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZGlzYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCit7CisJaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7CisJdTY0IGN0cmxfdmFsLCBtYXNrOworCisJbWFzayA9IDB4ZlVMTCA8PCAoaWR4ICogNCk7CisKKwlyZG1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworCWN0cmxfdmFsICY9IH5tYXNrOworCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKHZvaWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gY3B1Yy0+ZHM7CisJc3RydWN0IGJ0c19yZWNvcmQgeworCQl1NjQJZnJvbTsKKwkJdTY0CXRvOworCQl1NjQJZmxhZ3M7CisJfTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbWDg2X1BNQ19JRFhfRklYRURfQlRTXTsKKwlzdHJ1Y3QgYnRzX3JlY29yZCAqYXQsICp0b3A7CisJc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisKKwlpZiAoIWRzKQorCQlyZXR1cm47CisKKwlhdCAgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2J1ZmZlcl9iYXNlOworCXRvcCA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfaW5kZXg7CisKKwlpZiAodG9wIDw9IGF0KQorCQlyZXR1cm47CisKKwlkcy0+YnRzX2luZGV4ID0gZHMtPmJ0c19idWZmZXJfYmFzZTsKKworCisJZGF0YS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7CisJZGF0YS5hZGRyCT0gMDsKKwlkYXRhLnJhdwk9IE5VTEw7CisJcmVncy5pcAkJPSAwOworCisJLyoKKwkgKiBQcmVwYXJlIGEgZ2VuZXJpYyBzYW1wbGUsIGkuZS4gZmlsbCBpbiB0aGUgaW52YXJpYW50IGZpZWxkcy4KKwkgKiBXZSB3aWxsIG92ZXJ3cml0ZSB0aGUgZnJvbSBhbmQgdG8gYWRkcmVzcyBiZWZvcmUgd2Ugb3V0cHV0CisJICogdGhlIHNhbXBsZS4KKwkgKi8KKwlwZXJmX3ByZXBhcmVfc2FtcGxlKCZoZWFkZXIsICZkYXRhLCBldmVudCwgJnJlZ3MpOworCisJaWYgKHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LAorCQkJICAgICAgaGVhZGVyLnNpemUgKiAodG9wIC0gYXQpLCAxLCAxKSkKKwkJcmV0dXJuOworCisJZm9yICg7IGF0IDwgdG9wOyBhdCsrKSB7CisJCWRhdGEuaXAJCT0gYXQtPmZyb207CisJCWRhdGEuYWRkcgk9IGF0LT50bzsKKworCQlwZXJmX291dHB1dF9zYW1wbGUoJmhhbmRsZSwgJmhlYWRlciwgJmRhdGEsIGV2ZW50KTsKKwl9CisKKwlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7CisKKwkvKiBUaGVyZSdzIG5ldyBkYXRhIGF2YWlsYWJsZS4gKi8KKwlldmVudC0+aHcuaW50ZXJydXB0cysrOworCWV2ZW50LT5wZW5kaW5nX2tpbGwgPSBQT0xMX0lOOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ludGVsX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7CisJCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOworCQlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcigpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKKwkJaW50ZWxfcG11X2Rpc2FibGVfZml4ZWQoaHdjLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJeDg2X3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZW5hYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKK3sKKwlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKKwl1NjQgY3RybF92YWwsIGJpdHMsIG1hc2s7CisJaW50IGVycjsKKworCS8qCisJICogRW5hYmxlIElSUSBnZW5lcmF0aW9uICgweDgpLAorCSAqIGFuZCBlbmFibGUgcmluZy0zIGNvdW50aW5nICgweDIpIGFuZCByaW5nLTAgY291bnRpbmcgKDB4MSkKKwkgKiBpZiByZXF1ZXN0ZWQ6CisJICovCisJYml0cyA9IDB4OFVMTDsKKwlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKQorCQliaXRzIHw9IDB4MjsKKwlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpCisJCWJpdHMgfD0gMHgxOworCisJLyoKKwkgKiBBTlkgYml0IGlzIHN1cHBvcnRlZCBpbiB2MyBhbmQgdXAKKwkgKi8KKwlpZiAoeDg2X3BtdS52ZXJzaW9uID4gMiAmJiBod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9BTlkpCisJCWJpdHMgfD0gMHg0OworCisJYml0cyA8PD0gKGlkeCAqIDQpOworCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOworCisJcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKKwljdHJsX3ZhbCAmPSB+bWFzazsKKwljdHJsX3ZhbCB8PSBiaXRzOworCWVyciA9IGNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKKwkJaWYgKCFfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpLmVuYWJsZWQpCisJCQlyZXR1cm47CisKKwkJaW50ZWxfcG11X2VuYWJsZV9idHMoaHdjLT5jb25maWcpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKKwkJaW50ZWxfcG11X2VuYWJsZV9maXhlZChod2MsIGlkeCk7CisJCXJldHVybjsKKwl9CisKKwlfX3g4Nl9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKK30KKworLyoKKyAqIFNhdmUgYW5kIHJlc3RhcnQgYW4gZXhwaXJlZCBldmVudC4gQ2FsbGVkIGJ5IE5NSSBjb250ZXh0cywKKyAqIHNvIGl0IGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IHByZWVtcHRpbmcgbm9ybWFsIGV2ZW50IG9wczoKKyAqLworc3RhdGljIGludCBpbnRlbF9wbXVfc2F2ZV9hbmRfcmVzdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJaW50IGlkeCA9IGh3Yy0+aWR4OworCWludCByZXQ7CisKKwl4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwlyZXQgPSB4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVzZXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5kczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpZHg7CisKKwlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50cykKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJcHJpbnRrKCJjbGVhcmluZyBQTVUgc3RhdGUgb24gQ1BVIyVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CisJCWNoZWNraW5nX3dybXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCAwdWxsKTsKKwkJY2hlY2tpbmdfd3Jtc3JsKHg4Nl9wbXUucGVyZmN0ciAgKyBpZHgsIDB1bGwpOworCX0KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZDsgaWR4KyspIHsKKwkJY2hlY2tpbmdfd3Jtc3JsKE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCArIGlkeCwgMHVsbCk7CisJfQorCWlmIChkcykKKwkJZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGhhbmRsZXIgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBsb2NhbCBBUElDLCBzbyB0aGUgQVBJQyBJUlEgaGFuZGxpbmcKKyAqIHJ1bGVzIGFwcGx5OgorICovCitzdGF0aWMgaW50IGludGVsX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CisJaW50IGJpdCwgbG9vcHM7CisJdTY0IGFjaywgc3RhdHVzOworCisJZGF0YS5hZGRyID0gMDsKKwlkYXRhLnJhdyA9IE5VTEw7CisKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlwZXJmX2Rpc2FibGUoKTsKKwlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcigpOworCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJcGVyZl9lbmFibGUoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbG9vcHMgPSAwOworYWdhaW46CisJaWYgKCsrbG9vcHMgPiAxMDApIHsKKwkJV0FSTl9PTkNFKDEsICJwZXJmZXZlbnRzOiBpcnEgbG9vcCBzdHVjayFcbiIpOworCQlwZXJmX2V2ZW50X3ByaW50X2RlYnVnKCk7CisJCWludGVsX3BtdV9yZXNldCgpOworCQlwZXJmX2VuYWJsZSgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOworCWFjayA9IHN0YXR1czsKKwlmb3JfZWFjaF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZzdGF0dXMsIFg4Nl9QTUNfSURYX01BWCkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbYml0XTsKKworCQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSAmc3RhdHVzKTsKKwkJaWYgKCF0ZXN0X2JpdChiaXQsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoZXZlbnQpKQorCQkJY29udGludWU7CisKKwkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7CisKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKKwkJCWludGVsX3BtdV9kaXNhYmxlX2V2ZW50KCZldmVudC0+aHcsIGJpdCk7CisJfQorCisJaW50ZWxfcG11X2Fja19zdGF0dXMoYWNrKTsKKworCS8qCisJICogUmVwZWF0IGlmIHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lOgorCSAqLworCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBhZ2FpbjsKKworCXBlcmZfZW5hYmxlKCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGJ0c19jb25zdHJhaW50ID0KKwlFVkVOVF9DT05TVFJBSU5UKDAsIDFVTEwgPDwgWDg2X1BNQ19JRFhfRklYRURfQlRTLCAwKTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50ICoKK2ludGVsX3NwZWNpYWxfY29uc3RyYWludHMoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXVuc2lnbmVkIGludCBod19ldmVudDsKKworCWh3X2V2ZW50ID0gZXZlbnQtPmh3LmNvbmZpZyAmIElOVEVMX0FSQ0hfRVZFTlRfTUFTSzsKKworCWlmICh1bmxpa2VseSgoaHdfZXZlbnQgPT0KKwkJICAgICAgeDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TKSkgJiYKKwkJICAgICAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QgPT0gMSkpKSB7CisKKwkJcmV0dXJuICZidHNfY29uc3RyYWludDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCitpbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqYzsKKworCWMgPSBpbnRlbF9zcGVjaWFsX2NvbnN0cmFpbnRzKGV2ZW50KTsKKwlpZiAoYykKKwkJcmV0dXJuIGM7CisKKwlyZXR1cm4geDg2X2dldF9ldmVudF9jb25zdHJhaW50cyhjcHVjLCBldmVudCk7Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBjb3JlX3BtdSA9IHsKKwkubmFtZQkJCT0gImNvcmUiLAorCS5oYW5kbGVfaXJxCQk9IHg4Nl9wbXVfaGFuZGxlX2lycSwKKwkuZGlzYWJsZV9hbGwJCT0geDg2X3BtdV9kaXNhYmxlX2FsbCwKKwkuZW5hYmxlX2FsbAkJPSB4ODZfcG11X2VuYWJsZV9hbGwsCisJLmVuYWJsZQkJCT0geDg2X3BtdV9lbmFibGVfZXZlbnQsCisJLmRpc2FibGUJCT0geDg2X3BtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudHNlbAkJPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwLAorCS5ldmVudF9tYXAJCT0gaW50ZWxfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGludGVsX3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShpbnRlbF9wZXJmbW9uX2V2ZW50X21hcCksCisJLmFwaWMJCQk9IDEsCisJLyoKKwkgKiBJbnRlbCBQTUNzIGNhbm5vdCBiZSBhY2Nlc3NlZCBzYW5lbHkgYWJvdmUgMzIgYml0IHdpZHRoLAorCSAqIHNvIHdlIGluc3RhbGwgYW4gYXJ0aWZpY2lhbCAxPDwzMSBwZXJpb2QgcmVnYXJkbGVzcyBvZgorCSAqIHRoZSBnZW5lcmljIGV2ZW50IHBlcmlvZDoKKwkgKi8KKwkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAorCS5nZXRfZXZlbnRfY29uc3RyYWludHMJPSBpbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMsCisJLmV2ZW50X2NvbnN0cmFpbnRzCT0gaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50cywKK307CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBpbnRlbF9wbXUgPSB7CisJLm5hbWUJCQk9ICJJbnRlbCIsCisJLmhhbmRsZV9pcnEJCT0gaW50ZWxfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IGludGVsX3BtdV9kaXNhYmxlX2FsbCwKKwkuZW5hYmxlX2FsbAkJPSBpbnRlbF9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IGludGVsX3BtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudHNlbAkJPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwLAorCS5ldmVudF9tYXAJCT0gaW50ZWxfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGludGVsX3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShpbnRlbF9wZXJmbW9uX2V2ZW50X21hcCksCisJLmFwaWMJCQk9IDEsCisJLyoKKwkgKiBJbnRlbCBQTUNzIGNhbm5vdCBiZSBhY2Nlc3NlZCBzYW5lbHkgYWJvdmUgMzIgYml0IHdpZHRoLAorCSAqIHNvIHdlIGluc3RhbGwgYW4gYXJ0aWZpY2lhbCAxPDwzMSBwZXJpb2QgcmVnYXJkbGVzcyBvZgorCSAqIHRoZSBnZW5lcmljIGV2ZW50IHBlcmlvZDoKKwkgKi8KKwkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAorCS5lbmFibGVfYnRzCQk9IGludGVsX3BtdV9lbmFibGVfYnRzLAorCS5kaXNhYmxlX2J0cwkJPSBpbnRlbF9wbXVfZGlzYWJsZV9idHMsCisJLmdldF9ldmVudF9jb25zdHJhaW50cwk9IGludGVsX2dldF9ldmVudF9jb25zdHJhaW50cworfTsKKworc3RhdGljIF9faW5pdCBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKK3sKKwl1bmlvbiBjcHVpZDEwX2VkeCBlZHg7CisJdW5pb24gY3B1aWQxMF9lYXggZWF4OworCXVuc2lnbmVkIGludCB1bnVzZWQ7CisJdW5zaWduZWQgaW50IGVieDsKKwlpbnQgdmVyc2lvbjsKKworCWlmICghY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKSkgeworCQkvKiBjaGVjayBmb3IgUDYgcHJvY2Vzc29yIGZhbWlseSAqLworCSAgIGlmIChib290X2NwdV9kYXRhLng4NiA9PSA2KSB7CisJCXJldHVybiBwNl9wbXVfaW5pdCgpOworCSAgIH0gZWxzZSB7CisJCXJldHVybiAtRU5PREVWOworCSAgIH0KKwl9CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgdGhlIEFyY2hpdGVjdHVyYWwgUGVyZk1vbiBzdXBwb3J0cworCSAqIEJyYW5jaCBNaXNzZXMgUmV0aXJlZCBod19ldmVudCBvciBub3QuCisJICovCisJY3B1aWQoMTAsICZlYXguZnVsbCwgJmVieCwgJnVudXNlZCwgJmVkeC5mdWxsKTsKKwlpZiAoZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoIDw9IEFSQ0hfUEVSRk1PTl9CUkFOQ0hfTUlTU0VTX1JFVElSRUQpCisJCXJldHVybiAtRU5PREVWOworCisJdmVyc2lvbiA9IGVheC5zcGxpdC52ZXJzaW9uX2lkOworCWlmICh2ZXJzaW9uIDwgMikKKwkJeDg2X3BtdSA9IGNvcmVfcG11OworCWVsc2UKKwkJeDg2X3BtdSA9IGludGVsX3BtdTsKKworCXg4Nl9wbXUudmVyc2lvbgkJCT0gdmVyc2lvbjsKKwl4ODZfcG11Lm51bV9ldmVudHMJCT0gZWF4LnNwbGl0Lm51bV9ldmVudHM7CisJeDg2X3BtdS5ldmVudF9iaXRzCQk9IGVheC5zcGxpdC5iaXRfd2lkdGg7CisJeDg2X3BtdS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IGVheC5zcGxpdC5iaXRfd2lkdGgpIC0gMTsKKworCS8qCisJICogUXVpcms6IHYyIHBlcmZtb24gZG9lcyBub3QgcmVwb3J0IGZpeGVkLXB1cnBvc2UgZXZlbnRzLCBzbworCSAqIGFzc3VtZSBhdCBsZWFzdCAzIGV2ZW50czoKKwkgKi8KKwlpZiAodmVyc2lvbiA+IDEpCisJCXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCA9IG1heCgoaW50KWVkeC5zcGxpdC5udW1fZXZlbnRzX2ZpeGVkLCAzKTsKKworCS8qCisJICogSW5zdGFsbCB0aGUgaHctY2FjaGUtZXZlbnRzIHRhYmxlOgorCSAqLworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKKwljYXNlIDE0OiAvKiA2NSBubSBjb3JlIHNvbG8vZHVvLCAiWW9uYWgiICovCisJCXByX2NvbnQoIkNvcmUgZXZlbnRzLCAiKTsKKwkJYnJlYWs7CisKKwljYXNlIDE1OiAvKiBvcmlnaW5hbCA2NSBubSBjZWxlcm9uL3BlbnRpdW0vY29yZTIveGVvbiwgIk1lcm9tIi8iQ29ucm9lIiAqLworCWNhc2UgMjI6IC8qIHNpbmdsZS1jb3JlIDY1IG5tIGNlbGVyb24vY29yZTJzb2xvICJNZXJvbS1MIi8iQ29ucm9lLUwiICovCisJY2FzZSAyMzogLyogY3VycmVudCA0NSBubSBjZWxlcm9uL2NvcmUyL3hlb24gIlBlbnJ5biIvIldvbGZkYWxlIiAqLworCWNhc2UgMjk6IC8qIHNpeC1jb3JlIDQ1IG5tIHhlb24gIkR1bm5pbmd0b24iICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfY29yZTJfZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIkNvcmUyIGV2ZW50cywgIik7CisJCWJyZWFrOworCisJY2FzZSAyNjogLyogNDUgbm0gbmVoYWxlbSwgIkJsb29tZmllbGQiICovCisJY2FzZSAzMDogLyogNDUgbm0gbmVoYWxlbSwgIkx5bm5maWVsZCIgKi8KKwkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMsCisJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIk5laGFsZW0vQ29yZWk3IGV2ZW50cywgIik7CisJCWJyZWFrOworCWNhc2UgMjg6CisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGF0b21faHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9nZW5fZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIkF0b20gZXZlbnRzLCAiKTsKKwkJYnJlYWs7CisKKwljYXNlIDM3OiAvKiAzMiBubSBuZWhhbGVtLCAiQ2xhcmtkYWxlIiAqLworCWNhc2UgNDQ6IC8qIDMyIG5tIG5laGFsZW0sICJHdWxmdG93biIgKi8KKwkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgd2VzdG1lcmVfaHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF93ZXN0bWVyZV9ldmVudF9jb25zdHJhaW50czsKKwkJcHJfY29udCgiV2VzdG1lcmUgZXZlbnRzLCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogZGVmYXVsdCBjb25zdHJhaW50cyBmb3IgdjIgYW5kIHVwCisJCSAqLworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfZ2VuX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJnZW5lcmljIGFyY2hpdGVjdGVkIHBlcmZtb24sICIpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogQ09ORklHX0NQVV9TVVBfSU5URUwgKi8KKworc3RhdGljIGludCBpbnRlbF9wbXVfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9TVVBfSU5URUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhNWJhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNi5jCkBAIC0wLDAgKzEsMTU3IEBACisjaWZkZWYgQ09ORklHX0NQVV9TVVBfSU5URUwKKworLyoKKyAqIE5vdCBzdXJlIGFib3V0IHNvbWUgb2YgdGhlc2UKKyAqLworc3RhdGljIGNvbnN0IHU2NCBwNl9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3sKKyAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDc5LAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDBmMmUsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHgwMTJlLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAorICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAwNjIsCit9OworCitzdGF0aWMgdTY0IHA2X3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBwNl9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Cit9CisKKy8qCisgKiBFdmVudCBzZXR0aW5nIHRoYXQgaXMgc3BlY2lmaWVkIG5vdCB0byBjb3VudCBhbnl0aGluZy4KKyAqIFdlIHVzZSB0aGlzIHRvIGVmZmVjdGl2ZWx5IGRpc2FibGUgYSBjb3VudGVyLgorICoKKyAqIEwyX1JRU1RTIHdpdGggMCBNRVNJIHVuaXQgbWFzay4KKyAqLworI2RlZmluZSBQNl9OT1BfRVZFTlQJCQkweDAwMDAwMDJFVUxMCisKK3N0YXRpYyB1NjQgcDZfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCit7CisjZGVmaW5lIFA2X0VWTlRTRUxfRVZFTlRfTUFTSwkJMHgwMDAwMDBGRlVMTAorI2RlZmluZSBQNl9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAorI2RlZmluZSBQNl9FVk5UU0VMX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAorI2RlZmluZSBQNl9FVk5UU0VMX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCisjZGVmaW5lIFA2X0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKKworI2RlZmluZSBQNl9FVk5UU0VMX01BU0sJCQlcCisJKFA2X0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKKwkgUDZfRVZOVFNFTF9VTklUX01BU0sgIHwJXAorCSBQNl9FVk5UU0VMX0VER0VfTUFTSyAgfAlcCisJIFA2X0VWTlRTRUxfSU5WX01BU0sgICB8CVwKKwkgUDZfRVZOVFNFTF9SRUdfTUFTSykKKworCXJldHVybiBod19ldmVudCAmIFA2X0VWTlRTRUxfTUFTSzsKK30KKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IHA2X2V2ZW50X2NvbnN0cmFpbnRzW10gPQoreworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMSwgMHgxKSwJLyogRkxPUFMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTAsIDB4MSksCS8qIEZQX0NPTVBfT1BTX0VYRSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgxKSwJLyogRlBfQVNTSVNUICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLAkvKiBNVUwgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksCS8qIERJViAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwJLyogQ1lDTEVTX0RJVl9CVVNZICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyB2b2lkIHA2X3BtdV9kaXNhYmxlX2FsbCh2b2lkKQoreworCXU2NCB2YWw7CisKKwkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCisJcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKKwl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfYWxsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCisJcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKKwl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CisJd3Jtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwNl9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdTY0IHZhbCA9IFA2X05PUF9FVkVOVDsKKworCWlmIChjcHVjLT5lbmFibGVkKQorCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CisKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgcDZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdTY0IHZhbDsKKworCXZhbCA9IGh3Yy0+Y29uZmlnOworCWlmIChjcHVjLT5lbmFibGVkKQorCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CisKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKK30KKworc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IHA2X3BtdSA9IHsKKwkubmFtZQkJCT0gInA2IiwKKwkuaGFuZGxlX2lycQkJPSB4ODZfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IHA2X3BtdV9kaXNhYmxlX2FsbCwKKwkuZW5hYmxlX2FsbAkJPSBwNl9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSBwNl9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IHA2X3BtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudHNlbAkJPSBNU1JfUDZfRVZOVFNFTDAsCisJLnBlcmZjdHIJCT0gTVNSX1A2X1BFUkZDVFIwLAorCS5ldmVudF9tYXAJCT0gcDZfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IHA2X3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShwNl9wZXJmbW9uX2V2ZW50X21hcCksCisJLmFwaWMJCQk9IDEsCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKKwkudmVyc2lvbgkJPSAwLAorCS5udW1fZXZlbnRzCQk9IDIsCisJLyoKKwkgKiBFdmVudHMgaGF2ZSA0MCBiaXRzIGltcGxlbWVudGVkLiBIb3dldmVyIHRoZXkgYXJlIGRlc2lnbmVkIHN1Y2gKKwkgKiB0aGF0IGJpdHMgWzMyLTM5XSBhcmUgc2lnbiBleHRlbnNpb25zIG9mIGJpdCAzMS4gQXMgc3VjaCB0aGUKKwkgKiBlZmZlY3RpdmUgd2lkdGggb2YgYSBldmVudCBmb3IgUDYtbGlrZSBQTVUgaXMgMzIgYml0cyBvbmx5LgorCSAqCisJICogU2VlIElBLTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBkZXZlbG9wZXIgbWFudWFsIFZvbCAzQgorCSAqLworCS5ldmVudF9iaXRzCQk9IDMyLAorCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDMyKSAtIDEsCisJLmdldF9ldmVudF9jb25zdHJhaW50cwk9IHg4Nl9nZXRfZXZlbnRfY29uc3RyYWludHMsCisJLmV2ZW50X2NvbnN0cmFpbnRzCT0gcDZfZXZlbnRfY29uc3RyYWludHMsCit9OworCitzdGF0aWMgX19pbml0IGludCBwNl9wbXVfaW5pdCh2b2lkKQoreworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKKwljYXNlIDE6CisJY2FzZSAzOiAgLyogUGVudGl1bSBQcm8gKi8KKwljYXNlIDU6CisJY2FzZSA2OiAgLyogUGVudGl1bSBJSSAqLworCWNhc2UgNzoKKwljYXNlIDg6CisJY2FzZSAxMTogLyogUGVudGl1bSBJSUkgKi8KKwljYXNlIDk6CisJY2FzZSAxMzoKKwkJLyogUGVudGl1bSBNICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2NvbnQoInVuc3VwcG9ydGVkIHA2IENQVSBtb2RlbCAlZCAiLAorCQkJYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl4ODZfcG11ID0gcDZfcG11OworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NVUF9JTlRFTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYwppbmRleCA4OThkZjk3Li43NGY0ZTg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYwpAQCAtMTE1LDE3ICsxMTUsNiBAQAogCiAJcmV0dXJuICF0ZXN0X2JpdChjb3VudGVyLCBwZXJmY3RyX25taV9vd25lcik7CiB9Ci0KLS8qIGNoZWNrcyB0aGUgYW4gbXNyIGZvciBhdmFpbGFiaWxpdHkgKi8KLWludCBhdmFpbF90b19yZXNydl9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQgbXNyKQotewotCXVuc2lnbmVkIGludCBjb3VudGVyOwotCi0JY291bnRlciA9IG5taV9wZXJmY3RyX21zcl90b19iaXQobXNyKTsKLQlCVUdfT04oY291bnRlciA+IE5NSV9NQVhfQ09VTlRFUl9CSVRTKTsKLQotCXJldHVybiAhdGVzdF9iaXQoY291bnRlciwgcGVyZmN0cl9ubWlfb3duZXIpOwotfQogRVhQT1JUX1NZTUJPTChhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQpOwogCiBpbnQgcmVzZXJ2ZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQgbXNyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCmluZGV4IGFlNzc1Y2EuLjExNTQwYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKQEAgLTE4LDExICsxOCw2IEBACiAKICNpbmNsdWRlICJkdW1wc3RhY2suaCIKIAotLyogSnVzdCBhIHN0dWIgZm9yIG5vdyAqLwotaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIDA7Ci19CiAKIHZvaWQgZHVtcF90cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCAwYWQ5NTk3Li5kY2U5OWFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0zMywxMSArMzMsNiBAQAogI2VuZGlmCiB9OwogCi1pbnQgeDg2X2lzX3N0YWNrX2lkKGludCBpZCwgY2hhciAqbmFtZSkKLXsKLQlyZXR1cm4geDg2X3N0YWNrX2lkc1tpZCAtIDFdID09IG5hbWU7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nICppbl9leGNlcHRpb25fc3RhY2sodW5zaWduZWQgY3B1LCB1bnNpZ25lZCBsb25nIHN0YWNrLAogCQkJCQkgdW5zaWduZWQgKnVzZWRwLCBjaGFyICoqaWRwKQogewpAQCAtMjkxLDYgKzI4Niw3IEBACiAKIAlzcCA9IHJlZ3MtPnNwOwogCXByaW50aygiQ1BVICVkICIsIGNwdSk7CisJcHJpbnRfbW9kdWxlcygpOwogCV9fc2hvd19yZWdzKHJlZ3MsIDEpOwogCXByaW50aygiUHJvY2VzcyAlcyAocGlkOiAlZCwgdGhyZWFkaW5mbyAlcCwgdGFzayAlcClcbiIsCiAJCWN1ci0+Y29tbSwgY3VyLT5waWQsIHRhc2tfdGhyZWFkX2luZm8oY3VyKSwgY3VyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IGExYTc4NzYuLmE5NjZiNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtNTE3LDExICs1MTcsMTkgQEAKIAkJCSAgICAgaW50IGNoZWNrdHlwZSkKIHsKIAlpbnQgaTsKKwl1NjQgZW5kOwogCXU2NCByZWFsX3JlbW92ZWRfc2l6ZSA9IDA7CiAKIAlpZiAoc2l6ZSA+IChVTExPTkdfTUFYIC0gc3RhcnQpKQogCQlzaXplID0gVUxMT05HX01BWCAtIHN0YXJ0OwogCisJZW5kID0gc3RhcnQgKyBzaXplOworCXByaW50ayhLRVJOX0RFQlVHICJlODIwIHJlbW92ZSByYW5nZTogJTAxNkx4IC0gJTAxNkx4ICIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZCk7CisJZTgyMF9wcmludF90eXBlKG9sZF90eXBlKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworCiAJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKIAkJc3RydWN0IGU4MjBlbnRyeSAqZWkgPSAmZTgyMC5tYXBbaV07CiAJCXU2NCBmaW5hbF9zdGFydCwgZmluYWxfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGNkY2ZiMTIuLmMyZmE5YjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3QgbWFwIHRoZSBmaXJtd2FyZSB2ZW5kb3IhXG4iKTsKIAllYXJseV9pb3VubWFwKHRtcCwgMik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJFRkkgdiV1LiUuMDJ1IGJ5ICVzIFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJFRkkgdiV1LiUuMDJ1IGJ5ICVzXG4iLAogCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gPj4gMTYsCiAJICAgICAgIGVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiAmIDB4ZmZmZiwgdmVuZG9yKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCmluZGV4IDMwOTY4OTIuLmNkMzc0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKQEAgLTMwLDE0ICszMCwzMiBAQAogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKKy8qCisgKiBtb2RpZnlpbmdfY29kZSBpcyBzZXQgdG8gbm90aWZ5IE5NSXMgdGhhdCB0aGV5IG5lZWQgdG8gdXNlCisgKiBtZW1vcnkgYmFycmllcnMgd2hlbiBlbnRlcmluZyBvciBleGl0aW5nLiBCdXQgd2UgZG9uJ3Qgd2FudAorICogdG8gYnVyZGVuIE5NSXMgd2l0aCB1bm5lY2Vzc2FyeSBtZW1vcnkgYmFycmllcnMgd2hlbiBjb2RlCisgKiBtb2RpZmljYXRpb24gaXMgbm90IGJlaW5nIGRvbmUgKHdoaWNoIGlzIG1vc3Qgb2YgdGhlIHRpbWUpLgorICoKKyAqIEEgbXV0ZXggaXMgYWxyZWFkeSBoZWxkIHdoZW4gZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZQorICogYW5kIHBvc3RfcHJvY2VzcyBhcmUgY2FsbGVkLiBObyBsb2NrcyBuZWVkIHRvIGJlIHRha2VuIGhlcmUuCisgKgorICogU3RvcCBtYWNoaW5lIHdpbGwgbWFrZSBzdXJlIGN1cnJlbnRseSBydW5uaW5nIE5NSXMgYXJlIGRvbmUKKyAqIGFuZCBuZXcgTk1JcyB3aWxsIHNlZSB0aGUgdXBkYXRlZCB2YXJpYWJsZSBiZWZvcmUgd2UgbmVlZAorICogdG8gd29ycnkgYWJvdXQgTk1JcyBkb2luZyBtZW1vcnkgYmFycmllcnMuCisgKi8KK3N0YXRpYyBpbnQgbW9kaWZ5aW5nX2NvZGUgX19yZWFkX21vc3RseTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHNhdmVfbW9kaWZ5aW5nX2NvZGUpOworCiBpbnQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKQogewogCXNldF9rZXJuZWxfdGV4dF9ydygpOworCW1vZGlmeWluZ19jb2RlID0gMTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3Bvc3RfcHJvY2Vzcyh2b2lkKQogeworCW1vZGlmeWluZ19jb2RlID0gMDsKIAlzZXRfa2VybmVsX3RleHRfcm8oKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0OSw2ICsxNjcsMTEgQEAKIAogdm9pZCBmdHJhY2Vfbm1pX2VudGVyKHZvaWQpCiB7CisJX19nZXRfY3B1X3ZhcihzYXZlX21vZGlmeWluZ19jb2RlKSA9IG1vZGlmeWluZ19jb2RlOworCisJaWYgKCFfX2dldF9jcHVfdmFyKHNhdmVfbW9kaWZ5aW5nX2NvZGUpKQorCQlyZXR1cm47CisKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJm5taV9ydW5uaW5nKSAmIE1PRF9DT0RFX1dSSVRFX0ZMQUcpIHsKIAkJc21wX3JtYigpOwogCQlmdHJhY2VfbW9kX2NvZGUoKTsKQEAgLTE2MCw2ICsxODMsOSBAQAogCiB2b2lkIGZ0cmFjZV9ubWlfZXhpdCh2b2lkKQogeworCWlmICghX19nZXRfY3B1X3ZhcihzYXZlX21vZGlmeWluZ19jb2RlKSkKKwkJcmV0dXJuOworCiAJLyogRmluaXNoIGFsbCBleGVjdXRpb25zIGJlZm9yZSBjbGVhcmluZyBubWlfcnVubmluZyAqLwogCXNtcF9tYigpOwogCWF0b21pY19kZWMoJm5taV9ydW5uaW5nKTsKQEAgLTQ4NCwxMyArNTEwLDMgQEAKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyAqc3lzX2NhbGxfdGFibGU7Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKCZzeXNfY2FsbF90YWJsZSlbbnJdOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCAwNWQ1ZmVjLi5kY2EyODAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTIxMiwyNSArMjEyLDYgQEAKIAlyZXR1cm4gKHZhID49IFRBU0tfU0laRSkgJiYgKCh2YSArIGxlbiAtIDEpID49IFRBU0tfU0laRSk7CiB9CiAKLS8qCi0gKiBTdG9yZSBhIGJyZWFrcG9pbnQncyBlbmNvZGVkIGFkZHJlc3MsIGxlbmd0aCwgYW5kIHR5cGUuCi0gKi8KLXN0YXRpYyBpbnQgYXJjaF9zdG9yZV9pbmZvKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKLXsKLQlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKLQkvKgotCSAqIEZvciBrZXJuZWwtYWRkcmVzc2VzLCBlaXRoZXIgdGhlIGFkZHJlc3Mgb3Igc3ltYm9sIG5hbWUgY2FuIGJlCi0JICogc3BlY2lmaWVkLgotCSAqLwotCWlmIChpbmZvLT5uYW1lKQotCQlpbmZvLT5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpCi0JCQkJa2FsbHN5bXNfbG9va3VwX25hbWUoaW5mby0+bmFtZSk7Ci0JaWYgKGluZm8tPmFkZHJlc3MpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIGludCBhcmNoX2JwX2dlbmVyaWNfZmllbGRzKGludCB4ODZfbGVuLCBpbnQgeDg2X3R5cGUsCiAJCQkgICBpbnQgKmdlbl9sZW4sIGludCAqZ2VuX3R5cGUpCiB7CkBAIC0zNjIsMTAgKzM0MywxMyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGFyY2hfc3RvcmVfaW5mbyhicCk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwkvKgorCSAqIEZvciBrZXJuZWwtYWRkcmVzc2VzLCBlaXRoZXIgdGhlIGFkZHJlc3Mgb3Igc3ltYm9sIG5hbWUgY2FuIGJlCisJICogc3BlY2lmaWVkLgorCSAqLworCWlmIChpbmZvLT5uYW1lKQorCQlpbmZvLT5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJa2FsbHN5bXNfbG9va3VwX25hbWUoaW5mby0+bmFtZSk7CiAJLyoKIAkgKiBDaGVjayB0aGF0IHRoZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYXBwcm9wcmlhdGUKIAkgKiBmb3IgdGhlIGFsaWdubWVudCBpbXBsaWVkIGJ5IGxlbi4KQEAgLTUwMiw4ICs0ODYsNiBAQAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKIAkJYnAgPSBwZXJfY3B1KGJwX3Blcl9yZWdbaV0sIGNwdSk7Ci0JCWlmIChicCkKLQkJCXJjID0gTk9USUZZX0RPTkU7CiAJCS8qCiAJCSAqIFJlc2V0IHRoZSAnaSd0aCBUUkFQIGJpdCBpbiBkcjYgdG8gZGVub3RlIGNvbXBsZXRpb24gb2YKIAkJICogZXhjZXB0aW9uIGhhbmRsaW5nCkBAIC01MjIsNyArNTA0LDEzIEBACiAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQotCWlmIChkcjYgJiAofkRSX1RSQVBfQklUUykpCisJLyoKKwkgKiBGdXJ0aGVyIHByb2Nlc3NpbmcgaW4gZG9fZGVidWcoKSBpcyBuZWVkZWQgZm9yIGEpIHVzZXItc3BhY2UKKwkgKiBicmVha3BvaW50cyAodG8gZ2VuZXJhdGUgc2lnbmFscykgYW5kIGIpIHdoZW4gdGhlIHN5c3RlbSBoYXMKKwkgKiB0YWtlbiBleGNlcHRpb24gZHVlIHRvIG11bHRpcGxlIGNhdXNlcworCSAqLworCWlmICgoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnNiAmIERSX1RSQVBfQklUUykgfHwKKwkgICAgKGRyNiAmICh+RFJfVFJBUF9CSVRTKSkpCiAJCXJjID0gTk9USUZZX0RPTkU7CiAKIAlzZXRfZGVidWdyZWcoZHI3LCA3KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCmluZGV4IGRkNzRmZTcuLmJmYmE2MDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2tnZGIuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CiAKICNpbmNsdWRlIDxhc20vZGVidWdyZWcuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgpAQCAtMjA0LDQwICsyMDUsODEgQEAKIAogc3RhdGljIHN0cnVjdCBod19icmVha3BvaW50IHsKIAl1bnNpZ25lZAkJZW5hYmxlZDsKLQl1bnNpZ25lZAkJdHlwZTsKLQl1bnNpZ25lZAkJbGVuOwogCXVuc2lnbmVkIGxvbmcJCWFkZHI7CisJaW50CQkJbGVuOworCWludAkJCXR5cGU7CisJc3RydWN0IHBlcmZfZXZlbnQJKipwZXY7CiB9IGJyZWFraW5mb1s0XTsKIAogc3RhdGljIHZvaWQga2dkYl9jb3JyZWN0X2h3X2JyZWFrKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBkcjc7Ci0JaW50IGNvcnJlY3RpdCA9IDA7Ci0JaW50IGJyZWFrYml0OwogCWludCBicmVha25vOwogCi0JZ2V0X2RlYnVncmVnKGRyNywgNyk7CiAJZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IDQ7IGJyZWFrbm8rKykgewotCQlicmVha2JpdCA9IDIgPDwgKGJyZWFrbm8gPDwgMSk7Ci0JCWlmICghKGRyNyAmIGJyZWFrYml0KSAmJiBicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCkgewotCQkJY29ycmVjdGl0ID0gMTsKLQkJCWRyNyB8PSBicmVha2JpdDsKLQkJCWRyNyAmPSB+KDB4ZjAwMDAgPDwgKGJyZWFrbm8gPDwgMikpOwotCQkJZHI3IHw9ICgoYnJlYWtpbmZvW2JyZWFrbm9dLmxlbiA8PCAyKSB8Ci0JCQkJIGJyZWFraW5mb1ticmVha25vXS50eXBlKSA8PAotCQkJICAgICAgICgoYnJlYWtubyA8PCAyKSArIDE2KTsKLQkJCXNldF9kZWJ1Z3JlZyhicmVha2luZm9bYnJlYWtub10uYWRkciwgYnJlYWtubyk7Ci0KLQkJfSBlbHNlIHsKLQkJCWlmICgoZHI3ICYgYnJlYWtiaXQpICYmICFicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCkgewotCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJZHI3ICY9IH5icmVha2JpdDsKLQkJCQlkcjcgJj0gfigweGYwMDAwIDw8IChicmVha25vIDw8IDIpKTsKLQkJCX0KLQkJfQorCQlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisJCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm87CisJCWludCB2YWw7CisJCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCQlpZiAoIWJyZWFraW5mb1ticmVha25vXS5lbmFibGVkKQorCQkJY29udGludWU7CisJCWJwID0gKnBlcl9jcHVfcHRyKGJyZWFraW5mb1ticmVha25vXS5wZXYsIGNwdSk7CisJCWluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCQlpZiAoYnAtPmF0dHIuZGlzYWJsZWQgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlicC0+YXR0ci5icF9hZGRyID0gYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHI7CisJCWJwLT5hdHRyLmJwX2xlbiA9IGJyZWFraW5mb1ticmVha25vXS5sZW47CisJCWJwLT5hdHRyLmJwX3R5cGUgPSBicmVha2luZm9bYnJlYWtub10udHlwZTsKKwkJaW5mby0+YWRkcmVzcyA9IGJyZWFraW5mb1ticmVha25vXS5hZGRyOworCQlpbmZvLT5sZW4gPSBicmVha2luZm9bYnJlYWtub10ubGVuOworCQlpbmZvLT50eXBlID0gYnJlYWtpbmZvW2JyZWFrbm9dLnR5cGU7CisJCXZhbCA9IGFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KGJwKTsKKwkJaWYgKCF2YWwpCisJCQlicC0+YXR0ci5kaXNhYmxlZCA9IDA7CiAJfQotCWlmIChjb3JyZWN0aXQpCi0JCXNldF9kZWJ1Z3JlZyhkcjcsIDcpOworCWh3X2JyZWFrcG9pbnRfcmVzdG9yZSgpOworfQorCitzdGF0aWMgaW50IGh3X2JyZWFrX3Jlc2VydmVfc2xvdChpbnQgYnJlYWtubykKK3sKKwlpbnQgY3B1OworCWludCBjbnQgPSAwOworCXN0cnVjdCBwZXJmX2V2ZW50ICoqcGV2ZW50OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJY250Kys7CisJCXBldmVudCA9IHBlcl9jcHVfcHRyKGJyZWFraW5mb1ticmVha25vXS5wZXYsIGNwdSk7CisJCWlmIChkYmdfcmVzZXJ2ZV9icF9zbG90KCpwZXZlbnQpKQorCQkJZ290byBmYWlsOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWNudC0tOworCQlpZiAoIWNudCkKKwkJCWJyZWFrOworCQlwZXZlbnQgPSBwZXJfY3B1X3B0cihicmVha2luZm9bYnJlYWtub10ucGV2LCBjcHUpOworCQlkYmdfcmVsZWFzZV9icF9zbG90KCpwZXZlbnQpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgaHdfYnJlYWtfcmVsZWFzZV9zbG90KGludCBicmVha25vKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICoqcGV2ZW50OworCWludCBjcHU7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlwZXZlbnQgPSBwZXJfY3B1X3B0cihicmVha2luZm9bYnJlYWtub10ucGV2LCBjcHUpOworCQlpZiAoZGJnX3JlbGVhc2VfYnBfc2xvdCgqcGV2ZW50KSkKKwkJCS8qCisJCQkgKiBUaGUgZGVidWdnZXIgaXMgcmVzcG9uaXNibGUgZm9yIGhhbmRpbmcgdGhlIHJldHJ5IG9uCisJCQkgKiByZW1vdmUgZmFpbHVyZS4KKwkJCSAqLworCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtMjUxLDYgKzI5MywxMCBAQAogCWlmIChpID09IDQpCiAJCXJldHVybiAtMTsKIAorCWlmIChod19icmVha19yZWxlYXNlX3Nsb3QoaSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgcmVtb3ZlIGh3IGJyZWFrcG9pbnQgYXQgJWx4XG4iLCBhZGRyKTsKKwkJcmV0dXJuIC0xOworCX0KIAlicmVha2luZm9baV0uZW5hYmxlZCA9IDA7CiAKIAlyZXR1cm4gMDsKQEAgLTI1OSwxNSArMzA1LDIzIEBACiBzdGF0aWMgdm9pZCBrZ2RiX3JlbW92ZV9hbGxfaHdfYnJlYWsodm9pZCkKIHsKIAlpbnQgaTsKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQltZW1zZXQoJmJyZWFraW5mb1tpXSwgMCwgc2l6ZW9mKHN0cnVjdCBod19icmVha3BvaW50KSk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoIWJyZWFraW5mb1tpXS5lbmFibGVkKQorCQkJY29udGludWU7CisJCWJwID0gKnBlcl9jcHVfcHRyKGJyZWFraW5mb1tpXS5wZXYsIGNwdSk7CisJCWlmIChicC0+YXR0ci5kaXNhYmxlZCA9PSAxKQorCQkJY29udGludWU7CisJCWFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoYnApOworCQlicC0+YXR0ci5kaXNhYmxlZCA9IDE7CisJfQogfQogCiBzdGF0aWMgaW50CiBrZ2RiX3NldF9od19icmVhayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4sIGVudW0ga2dkYl9icHR5cGUgYnB0eXBlKQogewotCXVuc2lnbmVkIHR5cGU7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQpAQCAtMjc4LDI3ICszMzIsNDIgQEAKIAogCXN3aXRjaCAoYnB0eXBlKSB7CiAJY2FzZSBCUF9IQVJEV0FSRV9CUkVBS1BPSU5UOgotCQl0eXBlID0gMDsKLQkJbGVuICA9IDE7CisJCWxlbiA9IDE7CisJCWJyZWFraW5mb1tpXS50eXBlID0gWDg2X0JSRUFLUE9JTlRfRVhFQ1VURTsKIAkJYnJlYWs7CiAJY2FzZSBCUF9XUklURV9XQVRDSFBPSU5UOgotCQl0eXBlID0gMTsKKwkJYnJlYWtpbmZvW2ldLnR5cGUgPSBYODZfQlJFQUtQT0lOVF9XUklURTsKIAkJYnJlYWs7CiAJY2FzZSBCUF9BQ0NFU1NfV0FUQ0hQT0lOVDoKLQkJdHlwZSA9IDM7CisJCWJyZWFraW5mb1tpXS50eXBlID0gWDg2X0JSRUFLUE9JTlRfUlc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKIAl9Ci0KLQlpZiAobGVuID09IDEgfHwgbGVuID09IDIgfHwgbGVuID09IDQpCi0JCWJyZWFraW5mb1tpXS5sZW4gID0gbGVuIC0gMTsKLQllbHNlCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCWJyZWFraW5mb1tpXS5sZW4gPSBYODZfQlJFQUtQT0lOVF9MRU5fMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlicmVha2luZm9baV0ubGVuID0gWDg2X0JSRUFLUE9JTlRfTEVOXzI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJYnJlYWtpbmZvW2ldLmxlbiA9IFg4Nl9CUkVBS1BPSU5UX0xFTl80OworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJY2FzZSA4OgorCQlicmVha2luZm9baV0ubGVuID0gWDg2X0JSRUFLUE9JTlRfTEVOXzg7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwotCi0JYnJlYWtpbmZvW2ldLmVuYWJsZWQgPSAxOworCX0KIAlicmVha2luZm9baV0uYWRkciA9IGFkZHI7Ci0JYnJlYWtpbmZvW2ldLnR5cGUgPSB0eXBlOworCWlmIChod19icmVha19yZXNlcnZlX3Nsb3QoaSkpIHsKKwkJYnJlYWtpbmZvW2ldLmFkZHIgPSAwOworCQlyZXR1cm4gLTE7CisJfQorCWJyZWFraW5mb1tpXS5lbmFibGVkID0gMTsKIAogCXJldHVybiAwOwogfQpAQCAtMzEzLDggKzM4MiwyMSBAQAogICovCiB2b2lkIGtnZGJfZGlzYWJsZV9od19kZWJ1ZyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlpbnQgaTsKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisKIAkvKiBEaXNhYmxlIGhhcmR3YXJlIGRlYnVnZ2luZyB3aGlsZSB3ZSBhcmUgaW4ga2dkYjogKi8KIAlzZXRfZGVidWdyZWcoMFVMLCA3KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmICghYnJlYWtpbmZvW2ldLmVuYWJsZWQpCisJCQljb250aW51ZTsKKwkJYnAgPSAqcGVyX2NwdV9wdHIoYnJlYWtpbmZvW2ldLnBldiwgY3B1KTsKKwkJaWYgKGJwLT5hdHRyLmRpc2FibGVkID09IDEpCisJCQljb250aW51ZTsKKwkJYXJjaF91bmluc3RhbGxfaHdfYnJlYWtwb2ludChicCk7CisJCWJwLT5hdHRyLmRpc2FibGVkID0gMTsKKwl9CiB9CiAKIC8qKgpAQCAtMzc4LDcgKzQ2MCw2IEBACiAJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKmxpbnV4X3JlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGxvbmcgZHI2OwogCWNoYXIgKnB0cjsKIAlpbnQgbmV3UEM7CiAKQEAgLTQwNCwyMCArNDg1LDYgQEAKIAkJCQkgICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJfQogCi0JCWdldF9kZWJ1Z3JlZyhkcjYsIDYpOwotCQlpZiAoIShkcjYgJiAweDQwMDApKSB7Ci0JCQlpbnQgYnJlYWtubzsKLQotCQkJZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IDQ7IGJyZWFrbm8rKykgewotCQkJCWlmIChkcjYgJiAoMSA8PCBicmVha25vKSAmJgotCQkJCSAgICBicmVha2luZm9bYnJlYWtub10udHlwZSA9PSAwKSB7Ci0JCQkJCS8qIFNldCByZXN0b3JlIGZsYWc6ICovCi0JCQkJCWxpbnV4X3JlZ3MtPmZsYWdzIHw9IFg4Nl9FRkxBR1NfUkY7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlzZXRfZGVidWdyZWcoMFVMLCA2KTsKIAkJa2dkYl9jb3JyZWN0X2h3X2JyZWFrKCk7CiAKIAkJcmV0dXJuIDA7CkBAIC00ODUsOCArNTUyLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIERJRV9ERUJVRzoKLQkJaWYgKGF0b21pY19yZWFkKCZrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcCkgPT0KLQkJICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcCkgIT0gLTEpIHsKIAkJCWlmICh1c2VyX21vZGUocmVncykpCiAJCQkJcmV0dXJuIHNpbmdsZV9zdGVwX2NvbnQocmVncywgYXJncyk7CiAJCQlicmVhazsKQEAgLTUzOSw3ICs2MDUsNDIgQEAKICAqLwogaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHJlZ2lzdGVyX2RpZV9ub3RpZmllcigma2dkYl9ub3RpZmllcik7CisJaW50IGksIGNwdTsKKwlpbnQgcmV0OworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqKnBldmVudDsKKworCXJldCA9IHJlZ2lzdGVyX2RpZV9ub3RpZmllcigma2dkYl9ub3RpZmllcik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCS8qCisJICogUHJlLWFsbG9jYXRlIHRoZSBodyBicmVha3BvaW50IHN0cnVjdGlvbnMgaW4gdGhlIG5vbi1hdG9taWMKKwkgKiBwb3J0aW9uIG9mIGtnZGIgYmVjYXVzZSB0aGlzIG9wZXJhdGlvbiByZXF1aXJlcyBtdXRleHMgdG8KKwkgKiBjb21wbGV0ZS4KKwkgKi8KKwlhdHRyLmJwX2FkZHIgPSAodW5zaWduZWQgbG9uZylrZ2RiX2FyY2hfaW5pdDsKKwlhdHRyLnR5cGUgPSBQRVJGX1RZUEVfQlJFQUtQT0lOVDsKKwlhdHRyLmJwX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzE7CisJYXR0ci5icF90eXBlID0gSFdfQlJFQUtQT0lOVF9XOworCWF0dHIuZGlzYWJsZWQgPSAxOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJYnJlYWtpbmZvW2ldLnBldiA9IHJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludCgmYXR0ciwgTlVMTCk7CisJCWlmIChJU19FUlIoYnJlYWtpbmZvW2ldLnBldikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAia2dkYjogQ291bGQgbm90IGFsbG9jYXRlIGh3IGJyZWFrcG9pbnRzXG4iKTsKKwkJCWJyZWFraW5mb1tpXS5wZXYgPSBOVUxMOworCQkJa2dkYl9hcmNoX2V4aXQoKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQkJcGV2ZW50ID0gcGVyX2NwdV9wdHIoYnJlYWtpbmZvW2ldLnBldiwgY3B1KTsKKwkJCXBldmVudFswXS0+aHcuc2FtcGxlX3BlcmlvZCA9IDE7CisJCQlpZiAocGV2ZW50WzBdLT5kZXN0cm95ICE9IE5VTEwpIHsKKwkJCQlwZXZlbnRbMF0tPmRlc3Ryb3kgPSBOVUxMOworCQkJCXJlbGVhc2VfYnBfc2xvdCgqcGV2ZW50KTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTU1MCw2ICs2NTEsMTMgQEAKICAqLwogdm9pZCBrZ2RiX2FyY2hfZXhpdCh2b2lkKQogeworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKGJyZWFraW5mb1tpXS5wZXYpIHsKKwkJCXVucmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KGJyZWFraW5mb1tpXS5wZXYpOworCQkJYnJlYWtpbmZvW2ldLnBldiA9IE5VTEw7CisJCX0KKwl9CiAJdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtnZGJfbm90aWZpZXIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCA1YjhjNzUwLi41ZGU5ZjRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTMzNyw2ICszMzcsOSBAQAogCiBpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKKwlpZiAoYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQocC0+YWRkciwgcC0+YWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKCFjYW5fcHJvYmUoKHVuc2lnbmVkIGxvbmcpcC0+YWRkcikpCiAJCXJldHVybiAtRUlMU0VROwogCS8qIGluc246IG11c3QgYmUgb24gc3BlY2lhbCBleGVjdXRhYmxlIHBhZ2Ugb24geDg2LiAqLwpAQCAtNDI5LDcgKzQzMiw3IEBACiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0dXBfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkgICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKLSNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgZGVmaW5lZChDT05GSUdfRlJFRVpFUikKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKIAlpZiAocC0+YWluc24uYm9vc3RhYmxlID09IDEgJiYgIXAtPnBvc3RfaGFuZGxlcikgewogCQkvKiBCb29zdCB1cCAtLSB3ZSBjYW4gZXhlY3V0ZSBjb3BpZWQgaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5ICovCiAJCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKaW5kZXggZWJkMTkzZS4uODVhMzQzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCSAgICAgICBjcHVfbnVtLCBtY19pbnRlbC0+aGRyLnJldik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHJfaW5mbygiQ1BVJWQgdXBkYXRlZCB0byByZXZpc2lvbiAweCV4LCBkYXRlID0gJTA0eC0lMDJ4LSUwMnggXG4iLAorCXByX2luZm8oIkNQVSVkIHVwZGF0ZWQgdG8gcmV2aXNpb24gMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4XG4iLAogCQljcHVfbnVtLCB2YWxbMV0sCiAJCW1jX2ludGVsLT5oZHIuZGF0ZSAmIDB4ZmZmZiwKIAkJbWNfaW50ZWwtPmhkci5kYXRlID4+IDI0LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKaW5kZXggNDBiNTRjZS4uYTJjMWVkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0zNTksMTMgKzM1OSw2IEBACiAJCXg4Nl9pbml0Lm1wcGFyc2UubXBjX3JlY29yZCgxKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfWDg2X0JJR1NNUAotCWdlbmVyaWNfYmlnc21wX3Byb2JlKCk7Ci0jZW5kaWYKLQotCWlmIChhcGljLT5zZXR1cF9hcGljX3JvdXRpbmcpCi0JCWFwaWMtPnNldHVwX2FwaWNfcm91dGluZygpOwotCiAJaWYgKCFudW1fcHJvY2Vzc29ycykKIAkJcHJpbnRrKEtFUk5fRVJSICJNUFRBQkxFOiBubyBwcm9jZXNzb3JzIHJlZ2lzdGVyZWQhXG4iKTsKIAlyZXR1cm4gbnVtX3Byb2Nlc3NvcnM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCBjOWIzNTIyLi4wMmQ2NzgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTkyLDYgKzkyLDEzIEBACiAJfQogfQogCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzaG93X3JlZ2lzdGVycyhyZWdzKTsKKwlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICh1bnNpZ25lZCBsb25nICopa2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyksCisJCSAgIHJlZ3MtPmJwKTsKK30KKwogdm9pZCBzaG93X3JlZ3NfY29tbW9uKHZvaWQpCiB7CiAJY29uc3QgY2hhciAqYm9hcmQsICpwcm9kdWN0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggMzdhZDFlMC4uZjZjNjI2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0xNzQsMTIgKzE3NCw2IEBACiAJCQlkNiwgZDcpOwogfQogCi12b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzaG93X3JlZ2lzdGVycyhyZWdzKTsKLQlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICZyZWdzLT5zcCwgcmVncy0+YnApOwotfQotCiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKQogewogCUJVR19PTihkZWFkX3Rhc2stPm1tKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IDQxYTI2YTguLmRjOTY5MGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMjExLDEyICsyMTEsNiBAQAogCXByaW50ayhLRVJOX0RFRkFVTFQgIkRSMzogJTAxNmx4IERSNjogJTAxNmx4IERSNzogJTAxNmx4XG4iLCBkMywgZDYsIGQ3KTsKIH0KIAotdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc2hvd19yZWdpc3RlcnMocmVncyk7Ci0Jc2hvd190cmFjZShOVUxMLCByZWdzLCAodm9pZCAqKShyZWdzICsgMSksIHJlZ3MtPmJwKTsKLX0KLQogdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKIHsKIAlpZiAoZGVhZF90YXNrLT5tbSkgewpAQCAtNTI3LDYgKzUyMSw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdG8gYmUgaW4gMzJiaXQgbW9kZSAqLwogCXNldF90aHJlYWRfZmxhZyhUSUZfSUEzMik7CisJY3VycmVudC0+cGVyc29uYWxpdHkgfD0gZm9yY2VfcGVyc29uYWxpdHkzMjsKIAogCS8qIFByZXBhcmUgdGhlIGZpcnN0ICJyZXR1cm4iIHRvIHVzZXIgc3BhY2UgKi8KIAljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19DT01QQVQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMDE3ZDkzNy4uZDAzMTQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtMTQwLDMwICsxNDAsNiBAQAogI2VuZGlmCiB9OwogCi0vKioKLSAqIHJlZ3NfZ2V0X2FyZ3VtZW50X250aCgpIC0gZ2V0IE50aCBhcmd1bWVudCBhdCBmdW5jdGlvbiBjYWxsCi0gKiBAcmVnczoJcHRfcmVncyB3aGljaCBjb250YWlucyByZWdpc3RlcnMgYXQgZnVuY3Rpb24gZW50cnkuCi0gKiBAbjoJCWFyZ3VtZW50IG51bWJlci4KLSAqCi0gKiByZWdzX2dldF9hcmd1bWVudF9udGgoKSByZXR1cm5zIEBuIHRoIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gY2FsbC4KLSAqIFNpbmNlIHVzdWFsbHkgdGhlIGtlcm5lbCBzdGFjayB3aWxsIGJlIGNoYW5nZWQgcmlnaHQgYWZ0ZXIgZnVuY3Rpb24gZW50cnksCi0gKiB5b3UgbXVzdCB1c2UgdGhpcyBhdCBmdW5jdGlvbiBlbnRyeS4gSWYgdGhlIEBuIHRoIGVudHJ5IGlzIE5PVCBpbiB0aGUKLSAqIGtlcm5lbCBzdGFjayBvciBwdF9yZWdzLCB0aGlzIHJldHVybnMgMC4KLSAqLwotdW5zaWduZWQgbG9uZyByZWdzX2dldF9hcmd1bWVudF9udGgoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBuKQotewotCWlmIChuIDwgQVJSQVlfU0laRShhcmdfb2Zmc190YWJsZSkpCi0JCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikoKGNoYXIgKilyZWdzICsgYXJnX29mZnNfdGFibGVbbl0pOwotCWVsc2UgewotCQkvKgotCQkgKiBUaGUgdHlwaWNhbCBjYXNlOiBhcmcgbiBpcyBvbiB0aGUgc3RhY2suCi0JCSAqIChOb3RlOiBzdGFja1swXSA9IHJldHVybiBhZGRyZXNzLCBzbyBza2lwIGl0KQotCQkgKi8KLQkJbiAtPSBBUlJBWV9TSVpFKGFyZ19vZmZzX3RhYmxlKTsKLQkJcmV0dXJuIHJlZ3NfZ2V0X2tlcm5lbF9zdGFja19udGgocmVncywgMSArIG4pOwotCX0KLX0KLQogLyoKICAqIGRvZXMgbm90IHlldCBjYXRjaCBzaWduYWxzIHNlbnQgd2hlbiB0aGUgY2hpbGQgZGllcy4KICAqIGluIGV4aXQuYyBvciBpbiBzaWduYWwuYy4KQEAgLTcwMiw3ICs2NzgsNyBAQAogCX0gZWxzZSBpZiAobiA9PSA2KSB7CiAJCXZhbCA9IHRocmVhZC0+ZGVidWdyZWc2OwogCSB9IGVsc2UgaWYgKG4gPT0gNykgewotCQl2YWwgPSBwdHJhY2VfZ2V0X2RyNyh0aHJlYWQtPnB0cmFjZV9icHMpOworCQl2YWwgPSB0aHJlYWQtPnB0cmFjZV9kcjc7CiAJfQogCXJldHVybiB2YWw7CiB9CkBAIC03NzgsOCArNzU0LDExIEBACiAJCQlyZXR1cm4gcmM7CiAJfQogCS8qIEFsbCB0aGF0J3MgbGVmdCBpcyBEUjcgKi8KLQlpZiAobiA9PSA3KQorCWlmIChuID09IDcpIHsKIAkJcmMgPSBwdHJhY2Vfd3JpdGVfZHI3KHRzaywgdmFsKTsKKwkJaWYgKCFyYykKKwkJCXRocmVhZC0+cHRyYWNlX2RyNyA9IHZhbDsKKwl9CiAKIHJldF9wYXRoOgogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCAxNTQ1YmMwLi43MDRiZGRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC0yMDMsNiArMjAzLDE1IEBACiAJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIwVDY1NkYiKSwKIAkJfSwKIAl9LAorCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIERlbGwgT3B0aVBsZXggNzYwIHdpdGggMEc5MTlHKi8KKwkJLmNhbGxiYWNrID0gc2V0X2Jpb3NfcmVib290LAorCQkuaWRlbnQgPSAiRGVsbCBPcHRpUGxleCA3NjAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJPcHRpUGxleCA3NjAiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjBHOTE5RyIpLAorCQl9LAorCX0sCiAJewkvKiBIYW5kbGUgcHJvYmxlbXMgd2l0aCByZWJvb3Rpbmcgb24gRGVsbCAyNDAwJ3MgKi8KIAkJLmNhbGxiYWNrID0gc2V0X2Jpb3NfcmVib290LAogCQkuaWRlbnQgPSAiRGVsbCBQb3dlckVkZ2UgMjQwMCIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGY3YjhiOTguLmNiNDIxMDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMjEsNyArMTIxLDkgQEAKIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm5fbWFwcGVkOwogdW5zaWduZWQgbG9uZyBtYXhfcGZuX21hcHBlZDsKIAorI2lmZGVmIENPTkZJR19ETUkKIFJFU0VSVkVfQlJLKGRtaV9hbGxvYywgNjU1MzYpOworI2VuZGlmCiAKIHVuc2lnbmVkIGludCBib290X2NwdV9pZCBfX3JlYWRfbW9zdGx5OwogCkBAIC02NDIsMjMgKzY0NCw0OCBAQAogCQkJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIlBob2VuaXgvTVNDIiksCiAJCX0sCiAJfSwKLQl7CiAJLyoKLQkgKiBBTUkgQklPUyB3aXRoIGxvdyBtZW1vcnkgY29ycnVwdGlvbiB3YXMgZm91bmQgb24gSW50ZWwgREc0NUlEIGJvYXJkLgotCSAqIEl0IGhhc2UgZGlmZmVyZW50IERNSV9CSU9TX1ZFTkRPUiA9ICJJbnRlbCBDb3JwLiIsIGZvciBub3cgd2Ugd2lsbAorCSAqIEFNSSBCSU9TIHdpdGggbG93IG1lbW9yeSBjb3JydXB0aW9uIHdhcyBmb3VuZCBvbiBJbnRlbCBERzQ1SUQgYW5kCisJICogREc0NUZDIGJvYXJkcy4KKwkgKiBJdCBoYXMgYSBkaWZmZXJlbnQgRE1JX0JJT1NfVkVORE9SID0gIkludGVsIENvcnAuIiwgZm9yIG5vdyB3ZSB3aWxsCiAJICogbWF0Y2ggb25seSBETUlfQk9BUkRfTkFNRSBhbmQgc2VlIGlmIHRoZXJlIGlzIG1vcmUgYmFkIHByb2R1Y3RzCiAJICogd2l0aCB0aGlzIHZlbmRvci4KIAkgKi8KKwl7CiAJCS5jYWxsYmFjayA9IGRtaV9sb3dfbWVtb3J5X2NvcnJ1cHRpb24sCiAJCS5pZGVudCA9ICJBTUkgQklPUyIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiREc0NUlEIiksCiAJCX0sCiAJfSwKKwl7CisJCS5jYWxsYmFjayA9IGRtaV9sb3dfbWVtb3J5X2NvcnJ1cHRpb24sCisJCS5pZGVudCA9ICJBTUkgQklPUyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiREc0NUZDIiksCisJCX0sCisJfSwKICNlbmRpZgogCXt9CiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgdHJpbV9iaW9zX3JhbmdlKHZvaWQpCit7CisJLyoKKwkgKiBBIHNwZWNpYWwgY2FzZSBpcyB0aGUgZmlyc3QgNEtiIG9mIG1lbW9yeTsKKwkgKiBUaGlzIGlzIGEgQklPUyBvd25lZCBhcmVhLCBub3Qga2VybmVsIHJhbSwgYnV0IGdlbmVyYWxseQorCSAqIG5vdCBsaXN0ZWQgYXMgc3VjaCBpbiB0aGUgRTgyMCB0YWJsZS4KKwkgKi8KKwllODIwX3VwZGF0ZV9yYW5nZSgwLCBQQUdFX1NJWkUsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKKwkvKgorCSAqIHNwZWNpYWwgY2FzZTogU29tZSBCSU9TZW4gcmVwb3J0IHRoZSBQQyBCSU9TCisJICogYXJlYSAoNjQwLT4xTWIpIGFzIHJhbSBldmVuIHRob3VnaCBpdCBpcyBub3QuCisJICogdGFrZSB0aGVtIG91dC4KKwkgKi8KKwllODIwX3JlbW92ZV9yYW5nZShCSU9TX0JFR0lOLCBCSU9TX0VORCAtIEJJT1NfQkVHSU4sIEU4MjBfUkFNLCAxKTsKKwlzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZlODIwLm5yX21hcCk7Cit9CisKIC8qCiAgKiBEZXRlcm1pbmUgaWYgd2Ugd2VyZSBsb2FkZWQgYnkgYW4gRUZJIGxvYWRlci4gIElmIHNvLCB0aGVuIHdlIGhhdmUgYWxzbyBiZWVuCiAgKiBwYXNzZWQgdGhlIGVmaSBtZW1tYXAsIHN5c3RhYiwgZXRjLiwgc28gd2Ugc2hvdWxkIHVzZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMKQEAgLTgyMiw3ICs4NDksNyBAQAogCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkYXRhX3Jlc291cmNlKTsKIAlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmYnNzX3Jlc291cmNlKTsKIAotCisJdHJpbV9iaW9zX3JhbmdlKCk7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmIChwcHJvX3dpdGhfcmFtX2J1ZygpKSB7CiAJCWU4MjBfdXBkYXRlX3JhbmdlKDB4NzAwMDAwMDBVTEwsIDB4NDAwMDBVTEwsIEU4MjBfUkFNLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggODM4YTExOC4uOWI0NDAxMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0xMDg0LDkgKzEwODQsNyBAQAogCXNldF9jcHVfc2libGluZ19tYXAoMCk7CiAKIAllbmFibGVfSVJfeDJhcGljKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKCk7Ci0jZW5kaWYKIAogCWlmIChzbXBfc2FuaXR5X2NoZWNrKG1heF9jcHVzKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU01QIGRpc2FibGVkXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggMzMzOTkxNy4uMTE2OGU0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTUzNCw2ICs1MzQsOSBAQAogCiAJZ2V0X2RlYnVncmVnKGRyNiwgNik7CiAKKwkvKiBGaWx0ZXIgb3V0IGFsbCB0aGUgcmVzZXJ2ZWQgYml0cyB3aGljaCBhcmUgcHJlc2V0IHRvIDEgKi8KKwlkcjYgJj0gfkRSNl9SRVNFUlZFRDsKKwogCS8qIENhdGNoIGttZW1jaGVjayBjb25kaXRpb25zIGZpcnN0IG9mIGFsbCEgKi8KIAlpZiAoKGRyNiAmIERSX1NURVApICYmIGttZW1jaGVja190cmFwKHJlZ3MpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggNTk3NjgzYS4uMjMwNjZlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtODA2LDcgKzgwNiw3IEBACiAJdW5zaWduZWQgbG9uZyByZXNfbG93LCByZXNfaGlnaDsKIAogCXJkbXNyX3NhZmUoTVNSX0dFT0RFX0JVU0NPTlRfQ09ORjAsICZyZXNfbG93LCAmcmVzX2hpZ2gpOwotCS8qIEdlb2RlX0xYIC0gdGhlIE9MUEMgQ1BVIGhhcyBhIHBvc3NpYmx5IGEgdmVyeSByZWxpYWJsZSBUU0MgKi8KKwkvKiBHZW9kZV9MWCAtIHRoZSBPTFBDIENQVSBoYXMgYSB2ZXJ5IHJlbGlhYmxlIFRTQyAqLwogCWlmIChyZXNfbG93ICYgUlRTQ19TVVNQKQogCQl0c2NfY2xvY2tzb3VyY2VfcmVsaWFibGUgPSAxOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYyBiL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jCmluZGV4IDM2YWZiOTguLjMwOWM3MGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jCkBAIC01NCwxOSArNTQsMTkgQEAKIAlpZiAoIXNnaV91dl9rb2JqKQogCQlzZ2lfdXZfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInNnaV91diIsIGZpcm13YXJlX2tvYmopOwogCWlmICghc2dpX3V2X2tvYmopIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAia29iamVjdF9jcmVhdGVfYW5kX2FkZCBzZ2lfdXYgZmFpbGVkIFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImtvYmplY3RfY3JlYXRlX2FuZF9hZGQgc2dpX3V2IGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKHNnaV91dl9rb2JqLCAmcGFydGl0aW9uX2lkX2F0dHIuYXR0cik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBwYXJ0aXRpb25faWQgZmFpbGVkIFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2ZzX2NyZWF0ZV9maWxlIHBhcnRpdGlvbl9pZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKHNnaV91dl9rb2JqLCAmY29oZXJlbmNlX2lkX2F0dHIuYXR0cik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBjb2hlcmVuY2VfaWQgZmFpbGVkIFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2ZzX2NyZWF0ZV9maWxlIGNvaGVyZW5jZV9pZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3V2X3RpbWUuYyBiL2FyY2gveDg2L2tlcm5lbC91dl90aW1lLmMKaW5kZXggM2M4NGFhMC4uMmI3NWVmNjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC91dl90aW1lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3V2X3RpbWUuYwpAQCAtMjgyLDEwICsyODIsMjEgQEAKIAogLyoKICAqIFJlYWQgdGhlIFJUQy4KKyAqCisgKiBTdGFydGluZyB3aXRoIEhVQiByZXYgMi4wLCB0aGUgVVYgUlRDIHJlZ2lzdGVyIGlzIHJlcGxpY2F0ZWQgYWNyb3NzIGFsbAorICogY2FjaGVsaW5lcyBvZiBpdCdzIG93biBwYWdlLiAgVGhpcyBhbGxvd3MgZmFzdGVyIHNpbXVsdGFuZW91cyByZWFkcworICogZnJvbSBhIGdpdmVuIHNvY2tldC4KICAqLwogc3RhdGljIGN5Y2xlX3QgdXZfcmVhZF9ydGMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKLQlyZXR1cm4gKGN5Y2xlX3QpdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JUQyk7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisKKwlpZiAodXZfZ2V0X21pbl9odWJfcmV2aXNpb25faWQoKSA9PSAxKQorCQlvZmZzZXQgPSAwOworCWVsc2UKKwkJb2Zmc2V0ID0gKHV2X2JsYWRlX3Byb2Nlc3Nvcl9pZCgpICogTDFfQ0FDSEVfQllURVMpICUgUEFHRV9TSVpFOworCisJcmV0dXJuIChjeWNsZV90KXV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SVEMgfCBvZmZzZXQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwppbmRleCA2MTlmN2Y4Li42OTM5MjBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwpAQCAtMjYsNyArMjYsOCBAQAogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzQpOwogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzgpOwogCi1FWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljKTsKK0VYUE9SVF9TWU1CT0woY29weV91c2VyX2dlbmVyaWNfc3RyaW5nKTsKK0VYUE9SVF9TWU1CT0woY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQpOwogRVhQT1JUX1NZTUJPTChfX2NvcHlfdXNlcl9ub2NhY2hlKTsKIEVYUE9SVF9TWU1CT0woX2NvcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0woX2NvcHlfdG9fdXNlcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IDI5NmFiYTQuLjE1NTc4ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCkBAIC00NjcsNiArNDY3LDkgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJYWRkciAmPSBLVk1fUElUX0NIQU5ORUxfTUFTSzsKKwlpZiAoYWRkciA9PSAzKQorCQlyZXR1cm4gMDsKKwogCXMgPSAmcGl0X3N0YXRlLT5jaGFubmVsc1thZGRyXTsKIAogCW11dGV4X2xvY2soJnBpdF9zdGF0ZS0+bG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggMWRkY2FkNC4uYTFlMWJjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNjcwLDcgKzY3MCw3IEBACiB7CiAJc3RhdGljIGludCB2ZXJzaW9uOwogCXN0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgd2M7Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdywgc3lzLCBib290OworCXN0cnVjdCB0aW1lc3BlYyBib290OwogCiAJaWYgKCF3YWxsX2Nsb2NrKQogCQlyZXR1cm47CkBAIC02ODUsOSArNjg1LDcgQEAKIAkgKiB3YWxsIGNsb2NrIHNwZWNpZmllZCBoZXJlLiAgZ3Vlc3Qgc3lzdGVtIHRpbWUgZXF1YWxzIGhvc3QKIAkgKiBzeXN0ZW0gdGltZSBmb3IgdXMsIHRodXMgd2UgbXVzdCBmaWxsIGluIGhvc3QgYm9vdCB0aW1lIGhlcmUuCiAJICovCi0Jbm93ID0gY3VycmVudF9rZXJuZWxfdGltZSgpOwotCWt0aW1lX2dldF90cygmc3lzKTsKLQlib290ID0gbnNfdG9fdGltZXNwZWModGltZXNwZWNfdG9fbnMoJm5vdykgLSB0aW1lc3BlY190b19ucygmc3lzKSk7CisJZ2V0Ym9vdHRpbWUoJmJvb3QpOwogCiAJd2Muc2VjID0gYm9vdC50dl9zZWM7CiAJd2MubnNlYyA9IGJvb3QudHZfbnNlYzsKQEAgLTc2Miw2ICs3NjAsNyBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlrdm1fZ2V0X21zcih2LCBNU1JfSUEzMl9UU0MsICZ2Y3B1LT5odl9jbG9jay50c2NfdGltZXN0YW1wKTsKIAlrdGltZV9nZXRfdHMoJnRzKTsKKwltb25vdG9uaWNfdG9fYm9vdGJhc2VkKCZ0cyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogV2l0aCBhbGwgdGhlIGluZm8gd2UgZ290LCBmaWxsIGluIHRoZSB2YWx1ZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZSBiL2FyY2gveDg2L2xpYi9NYWtlZmlsZQppbmRleCBjZmZkNzU0Li40MTkzODZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAKIGNsZWFuLWZpbGVzIDo9IGluYXQtdGFibGVzLmMKIAotb2JqLSQoQ09ORklHX1NNUCkgKz0gbXNyLXNtcC5vCitvYmotJChDT05GSUdfU01QKSArPSBtc3Itc21wLm8gY2FjaGUtc21wLm8KIAogbGliLXkgOj0gZGVsYXkubwogbGliLXkgKz0gdGh1bmtfJChCSVRTKS5vCkBAIC0zNCw5ICszNCwxMCBAQAogZW5kaWYKICAgICAgICAgbGliLSQoQ09ORklHX1g4Nl9VU0VfM0ROT1cpICs9IG1teF8zMi5vCiBlbHNlCi0gICAgICAgIG9iai15ICs9IGlvXzY0Lm8gaW9tYXBfY29weV82NC5vCisgICAgICAgIG9iai15ICs9IGlvbWFwX2NvcHlfNjQubwogICAgICAgICBsaWIteSArPSBjc3VtLXBhcnRpYWxfNjQubyBjc3VtLWNvcHlfNjQubyBjc3VtLXdyYXBwZXJzXzY0Lm8KICAgICAgICAgbGliLXkgKz0gdGh1bmtfNjQubyBjbGVhcl9wYWdlXzY0Lm8gY29weV9wYWdlXzY0Lm8KICAgICAgICAgbGliLXkgKz0gbWVtbW92ZV82NC5vIG1lbXNldF82NC5vCiAgICAgICAgIGxpYi15ICs9IGNvcHlfdXNlcl82NC5vIHJ3bG9ja182NC5vIGNvcHlfdXNlcl9ub2NhY2hlXzY0Lm8KKwlsaWItJChDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0pICs9IHJ3c2VtXzY0Lm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvY2FjaGUtc21wLmMgYi9hcmNoL3g4Ni9saWIvY2FjaGUtc21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjNjY4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9jYWNoZS1zbXAuYwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3N0YXRpYyB2b2lkIF9fd2JpbnZkKHZvaWQgKmR1bW15KQoreworCXdiaW52ZCgpOworfQorCit2b2lkIHdiaW52ZF9vbl9jcHUoaW50IGNwdSkKK3sKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3diaW52ZCwgTlVMTCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHdiaW52ZF9vbl9jcHUpOworCitpbnQgd2JpbnZkX29uX2FsbF9jcHVzKHZvaWQpCit7CisJcmV0dXJuIG9uX2VhY2hfY3B1KF9fd2JpbnZkLCBOVUxMLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wod2JpbnZkX29uX2FsbF9jcHVzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUyBiL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUwppbmRleCBjZjg4OWQ0Li43MTEwMGM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKKysrIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCkBAIC05MCwxMiArOTAsNiBAQAogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKF9jb3B5X2Zyb21fdXNlcikKIAotRU5UUlkoY29weV91c2VyX2dlbmVyaWMpCi0JQ0ZJX1NUQVJUUFJPQwotCUFMVEVSTkFUSVZFX0pVTVAgWDg2X0ZFQVRVUkVfUkVQX0dPT0QsY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQsY29weV91c2VyX2dlbmVyaWNfc3RyaW5nCi0JQ0ZJX0VORFBST0MKLUVORFBST0MoY29weV91c2VyX2dlbmVyaWMpCi0KIAkuc2VjdGlvbiAuZml4dXAsImF4IgogCS8qIG11c3QgemVybyBkZXN0ICovCiBFTlRSWShiYWRfZnJvbV91c2VyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2lvXzY0LmMgYi9hcmNoL3g4Ni9saWIvaW9fNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YxZWI1OS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9saWIvaW9fNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotdm9pZCBfX21lbWNweV90b2lvKHVuc2lnbmVkIGxvbmcgZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxlbikKLXsKLQlfX2lubGluZV9tZW1jcHkoKHZvaWQgKilkc3QsIHNyYywgbGVuKTsKLX0KLUVYUE9SVF9TWU1CT0woX19tZW1jcHlfdG9pbyk7Ci0KLXZvaWQgX19tZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBzcmMsIHVuc2lnbmVkIGxlbikKLXsKLQlfX2lubGluZV9tZW1jcHkoZHN0LCAoY29uc3Qgdm9pZCAqKXNyYywgbGVuKTsKLX0KLUVYUE9SVF9TWU1CT0woX19tZW1jcHlfZnJvbWlvKTsKLQotdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphLCBpbnQgYiwgc2l6ZV90IGMpCi17Ci0JLyoKLQkgKiBUT0RPOiBtZW1zZXQgY2FuIG1hbmdsZSB0aGUgSU8gcGF0dGVybnMgcXVpdGUgYSBiaXQuCi0JICogcGVyaGFwcyBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIGEgZHVtYiBvbmU6Ci0JICovCi0JbWVtc2V0KCh2b2lkICopYSwgYiwgYyk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbXNldF9pbyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKaW5kZXggYWQ1NDQxZS4uZjgyZTg4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL21lbWNweV82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUwpAQCAtMjAsMTIgKzIwLDExIEBACiAvKgogICogbWVtY3B5X2MoKSAtIGZhc3Qgc3RyaW5nIG9wcyAoUkVQIE1PVlNRKSBiYXNlZCB2YXJpYW50LgogICoKLSAqIENhbGxzIHRvIHRoaXMgZ2V0IHBhdGNoZWQgaW50byB0aGUga2VybmVsIGltYWdlIHZpYSB0aGUKKyAqIFRoaXMgZ2V0cyBwYXRjaGVkIG92ZXIgdGhlIHVucm9sbGVkIHZhcmlhbnQgKGJlbG93KSB2aWEgdGhlCiAgKiBhbHRlcm5hdGl2ZSBpbnN0cnVjdGlvbnMgZnJhbWV3b3JrOgogICovCi0JQUxJR04KLW1lbWNweV9jOgotCUNGSV9TVEFSVFBST0MKKwkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIsIEBwcm9nYml0cworLkxtZW1jcHlfYzoKIAltb3ZxICVyZGksICVyYXgKIAogCW1vdmwgJWVkeCwgJWVjeApAQCAtMzUsOCArMzQsOCBAQAogCW1vdmwgJWVkeCwgJWVjeAogCXJlcCBtb3ZzYgogCXJldAotCUNGSV9FTkRQUk9DCi1FTkRQUk9DKG1lbWNweV9jKQorLkxtZW1jcHlfZToKKwkucHJldmlvdXMKIAogRU5UUlkoX19tZW1jcHkpCiBFTlRSWShtZW1jcHkpCkBAIC0xMjgsMTYgKzEyNywxMCBAQAogCSAqIEl0IGlzIGFsc28gYSBsb3Qgc2ltcGxlci4gVXNlIHRoaXMgd2hlbiBwb3NzaWJsZToKIAkgKi8KIAotCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IgotMToJLmJ5dGUgMHhlYgkJCQkvKiBqbXAgPGRpc3A4PiAqLwotCS5ieXRlIChtZW1jcHlfYyAtIG1lbWNweSkgLSAoMmYgLSAxYikJLyogb2Zmc2V0ICovCi0yOgotCS5wcmV2aW91cwotCiAJLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywgImEiCiAJLmFsaWduIDgKIAkucXVhZCBtZW1jcHkKLQkucXVhZCAxYgorCS5xdWFkIC5MbWVtY3B5X2MKIAkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAogCiAJLyoKQEAgLTE0NSw2ICsxMzgsNiBAQAogCSAqIHNvIGl0IGlzIHNpbGx5IHRvIG92ZXJ3cml0ZSBpdHNlbGYgd2l0aCBub3BzIC0gcmVib290IGlzIHRoZQogCSAqIG9ubHkgb3V0Y29tZS4uLgogCSAqLwotCS5ieXRlIDJiIC0gMWIKLQkuYnl0ZSAyYiAtIDFiCisJLmJ5dGUgLkxtZW1jcHlfZSAtIC5MbWVtY3B5X2MKKwkuYnl0ZSAuTG1lbWNweV9lIC0gLkxtZW1jcHlfYwogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbXNldF82NC5TIGIvYXJjaC94ODYvbGliL21lbXNldF82NC5TCmluZGV4IDJjNTk0ODEuLmU4OGQzYjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKQEAgLTEyLDkgKzEyLDggQEAKICAqIAogICogcmF4ICAgb3JpZ2luYWwgZGVzdGluYXRpb24KICAqLwkKLQlBTElHTgotbWVtc2V0X2M6Ci0JQ0ZJX1NUQVJUUFJPQworCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IiwgQHByb2diaXRzCisuTG1lbXNldF9jOgogCW1vdnEgJXJkaSwlcjkKIAltb3ZsICVlZHgsJXI4ZAogCWFuZGwgJDcsJXI4ZApAQCAtMjksOCArMjgsOCBAQAogCXJlcCBzdG9zYgogCW1vdnEgJXI5LCVyYXgKIAlyZXQKLQlDRklfRU5EUFJPQwotRU5EUFJPQyhtZW1zZXRfYykKKy5MbWVtc2V0X2U6CisJLnByZXZpb3VzCiAKIEVOVFJZKG1lbXNldCkKIEVOVFJZKF9fbWVtc2V0KQpAQCAtMTE4LDE2ICsxMTcsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKLQkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsImF4IgotMToJLmJ5dGUgMHhlYgkJCQkvKiBqbXAgPGRpc3A4PiAqLwotCS5ieXRlIChtZW1zZXRfYyAtIG1lbXNldCkgLSAoMmYgLSAxYikJLyogb2Zmc2V0ICovCi0yOgotCS5wcmV2aW91cwogCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsImEiCiAJLmFsaWduIDgKIAkucXVhZCBtZW1zZXQKLQkucXVhZCAxYgorCS5xdWFkIC5MbWVtc2V0X2MKIAkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAogCS5ieXRlIC5MZmluYWwgLSBtZW1zZXQKLQkuYnl0ZSAyYiAtIDFiCisJLmJ5dGUgLkxtZW1zZXRfZSAtIC5MbWVtc2V0X2MKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9yd3NlbV82NC5TIGIvYXJjaC94ODYvbGliL3J3c2VtXzY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhY2VjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9yd3NlbV82NC5TCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiB4ODYtNjQgcndzZW0gd3JhcHBlcnMKKyAqCisgKiBUaGlzIGludGVyZmFjZXMgdGhlIGlubGluZSBhc20gY29kZSB0byB0aGUgc2xvdy1wYXRoCisgKiBDIHJvdXRpbmVzLiBXZSBuZWVkIHRvIHNhdmUgdGhlIGNhbGwtY2xvYmJlcmVkIHJlZ3MKKyAqIHRoYXQgdGhlIGFzbSBkb2VzIG5vdCBtYXJrIGFzIGNsb2JiZXJlZCwgYW5kIG1vdmUgdGhlCisgKiBhcmd1bWVudCBmcm9tICVyYXggdG8gJXJkaS4KKyAqCisgKiBOT1RFISBXZSBkb24ndCBuZWVkIHRvIHNhdmUgJXJheCwgYmVjYXVzZSB0aGUgZnVuY3Rpb25zCisgKiB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIHNlbWFwaG9yZSBwb2ludGVyIGluICVyYXggKHdoaWNoCisgKiBpcyBhbHNvIHRoZSBpbnB1dCBhcmd1bWVudCB0byB0aGVzZSBoZWxwZXJzKQorICoKKyAqIFRoZSBmb2xsb3dpbmcgY2FuIGNsb2JiZXIgJXJkeCBiZWNhdXNlIHRoZSBhc20gY2xvYmJlcnMgaXQ6CisgKiAgIGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQKKyAqICAgY2FsbF9yd3NlbV93YWtlCisgKiBidXQgJXJkaSwgJXJzaSwgJXJjeCwgJXI4LXIxMSBhbHdheXMgbmVlZCBzYXZpbmcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vcndsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgorI2luY2x1ZGUgPGFzbS9mcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworI2RlZmluZSBzYXZlX2NvbW1vbl9yZWdzIFwKKwlwdXNocSAlcmRpOyBcCisJcHVzaHEgJXJzaTsgXAorCXB1c2hxICVyY3g7IFwKKwlwdXNocSAlcjg7IFwKKwlwdXNocSAlcjk7IFwKKwlwdXNocSAlcjEwOyBcCisJcHVzaHEgJXIxMQorCisjZGVmaW5lIHJlc3RvcmVfY29tbW9uX3JlZ3MgXAorCXBvcHEgJXIxMTsgXAorCXBvcHEgJXIxMDsgXAorCXBvcHEgJXI5OyBcCisJcG9wcSAlcjg7IFwKKwlwb3BxICVyY3g7IFwKKwlwb3BxICVyc2k7IFwKKwlwb3BxICVyZGkKKworLyogRml4IHVwIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9ucyAqLworRU5UUlkoY2FsbF9yd3NlbV9kb3duX3JlYWRfZmFpbGVkKQorCXNhdmVfY29tbW9uX3JlZ3MKKwlwdXNocSAlcmR4CisJbW92cSAlcmF4LCVyZGkKKwljYWxsIHJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQKKwlwb3BxICVyZHgKKwlyZXN0b3JlX2NvbW1vbl9yZWdzCisJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWQpCisKK0VOVFJZKGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQpCisJc2F2ZV9jb21tb25fcmVncworCW1vdnEgJXJheCwlcmRpCisJY2FsbCByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZAorCXJlc3RvcmVfY29tbW9uX3JlZ3MKKwlyZXQKKwlFTkRQUk9DKGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQpCisKK0VOVFJZKGNhbGxfcndzZW1fd2FrZSkKKwlkZWN3ICVkeCAgICAvKiBkbyBub3RoaW5nIGlmIHN0aWxsIG91dHN0YW5kaW5nIGFjdGl2ZSByZWFkZXJzICovCisJam56IDFmCisJc2F2ZV9jb21tb25fcmVncworCW1vdnEgJXJheCwlcmRpCisJY2FsbCByd3NlbV93YWtlCisJcmVzdG9yZV9jb21tb25fcmVncworMToJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX3dha2UpCisKKy8qIEZpeCB1cCBzcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbnMgKi8KK0VOVFJZKGNhbGxfcndzZW1fZG93bmdyYWRlX3dha2UpCisJc2F2ZV9jb21tb25fcmVncworCXB1c2hxICVyZHgKKwltb3ZxICVyYXgsJXJkaQorCWNhbGwgcndzZW1fZG93bmdyYWRlX3dha2UKKwlwb3BxICVyZHgKKwlyZXN0b3JlX2NvbW1vbl9yZWdzCisJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX2Rvd25ncmFkZV93YWtlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZ3VwLmMgYi9hcmNoL3g4Ni9tbS9ndXAuYwppbmRleCA3MWRhMWJjLi43MzhlNjU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9ndXAuYworKysgYi9hcmNoL3g4Ni9tbS9ndXAuYwpAQCAtMTgsNyArMTgsNyBAQAogI2Vsc2UKIAkvKgogCSAqIFdpdGggZ2V0X3VzZXJfcGFnZXNfZmFzdCwgd2Ugd2FsayBkb3duIHRoZSBwYWdldGFibGVzIHdpdGhvdXQgdGFraW5nCi0JICogYW55IGxvY2tzLiAgRm9yIHRoaXMgd2Ugd291bGQgbGlrZSB0byBsb2FkIHRoZSBwb2ludGVycyBhdG9pbWNhbGx5LAorCSAqIGFueSBsb2Nrcy4gIEZvciB0aGlzIHdlIHdvdWxkIGxpa2UgdG8gbG9hZCB0aGUgcG9pbnRlcnMgYXRvbWljYWxseSwKIAkgKiBidXQgdGhhdCBpcyBub3QgcG9zc2libGUgKHdpdGhvdXQgZXhwZW5zaXZlIGNtcHhjaGc4Yikgb24gUEFFLiAgV2hhdAogCSAqIHdlIGRvIGhhdmUgaXMgdGhlIGd1YXJhbnRlZSB0aGF0IGEgcHRlIHdpbGwgb25seSBlaXRoZXIgZ28gZnJvbSBub3QKIAkgKiBwcmVzZW50IHRvIHByZXNlbnQsIG9yIHByZXNlbnQgdG8gbm90IHByZXNlbnQgb3IgYm90aCAtLSBpdCB3aWxsIG5vdApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGQ0MDZjNTIuLmU3MWM1Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTI2NiwxNiArMjY2LDkgQEAKIAlpZiAoIWFmdGVyX2Jvb3RtZW0pCiAJCWZpbmRfZWFybHlfdGFibGVfc3BhY2UoZW5kLCB1c2VfcHNlLCB1c2VfZ2JwYWdlcyk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQobXJbaV0uc3RhcnQsIG1yW2ldLmVuZCwKLQkJCQkJICAgICBtcltpXS5wYWdlX3NpemVfbWFzayk7Ci0JcmV0ID0gZW5kOwotI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQogCQlyZXQgPSBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KG1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCiAJCQkJCQkgICBtcltpXS5wYWdlX3NpemVfbWFzayk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIAllYXJseV9pb3JlbWFwX3BhZ2VfdGFibGVfcmFuZ2VfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCmluZGV4IDlhMGMyNTguLjIyMjZmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKQEAgLTI0MSw2ICsyNDEsNyBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZV9tYXNrKQogewogCWludCB1c2VfcHNlID0gcGFnZV9zaXplX21hc2sgPT0gKDE8PFBHX0xFVkVMXzJNKTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHIgPSBlbmQ7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CiAJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJaW50IHBnZF9pZHgsIHBtZF9pZHgsIHB0ZV9vZnM7CkBAIC0zNDEsOSArMzQyLDEwIEBACiAJCQkJCXByb3QgPSBQQUdFX0tFUk5FTF9FWEVDOwogCiAJCQkJcGFnZXNfNGsrKzsKLQkJCQlpZiAobWFwcGluZ19pdGVyID09IDEpCisJCQkJaWYgKG1hcHBpbmdfaXRlciA9PSAxKSB7CiAJCQkJCXNldF9wdGUocHRlLCBwZm5fcHRlKHBmbiwgaW5pdF9wcm90KSk7Ci0JCQkJZWxzZQorCQkJCQlsYXN0X21hcF9hZGRyID0gKHBmbiA8PCBQQUdFX1NISUZUKSArIFBBR0VfU0laRTsKKwkJCQl9IGVsc2UKIAkJCQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7CiAJCQl9CiAJCX0KQEAgLTM2OCw3ICszNzAsNyBAQAogCQltYXBwaW5nX2l0ZXIgPSAyOwogCQlnb3RvIHJlcGVhdDsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGxhc3RfbWFwX2FkZHI7CiB9CiAKIHB0ZV90ICprbWFwX3B0ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCA1MTk4YjliLi42OWRkZmJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkbWFfcmVzZXJ2ZSBfX2luaXRkYXRhOwogCkBAIC02MTYsNiArNjE3LDIxIEBACiAgKi8KICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIC8qCisgKiBBZnRlciBtZW1vcnkgaG90cGx1ZyB0aGUgdmFyaWFibGVzIG1heF9wZm4sIG1heF9sb3dfcGZuIGFuZCBoaWdoX21lbW9yeSBuZWVkCisgKiB1cGRhdGluZy4KKyAqLworc3RhdGljIHZvaWQgIHVwZGF0ZV9lbmRfb2ZfbWVtb3J5X3ZhcnModTY0IHN0YXJ0LCB1NjQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBQRk5fVVAoc3RhcnQgKyBzaXplKTsKKworCWlmIChlbmRfcGZuID4gbWF4X3BmbikgeworCQltYXhfcGZuID0gZW5kX3BmbjsKKwkJbWF4X2xvd19wZm4gPSBlbmRfcGZuOworCQloaWdoX21lbW9yeSA9ICh2b2lkICopX192YShtYXhfcGZuICogUEFHRV9TSVpFIC0gMSkgKyAxOworCX0KK30KKworLyoKICAqIE1lbW9yeSBpcyBhZGRlZCBhbHdheXMgdG8gTk9STUFMIHpvbmUuIFRoaXMgbWVhbnMgeW91IHdpbGwgbmV2ZXIgZ2V0CiAgKiBhZGRpdGlvbmFsIERNQS9ETUEzMiBtZW1vcnkuCiAgKi8KQEAgLTYzNCw2ICs2NTAsOSBAQAogCXJldCA9IF9fYWRkX3BhZ2VzKG5pZCwgem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CiAJV0FSTl9PTl9PTkNFKHJldCk7CiAKKwkvKiB1cGRhdGUgbWF4X3BmbiwgbWF4X2xvd19wZm4gYW5kIGhpZ2hfbWVtb3J5ICovCisJdXBkYXRlX2VuZF9vZl9tZW1vcnlfdmFycyhzdGFydCwgc2l6ZSk7CisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJjaF9hZGRfbWVtb3J5KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCBjMjQ2ZDI1Li41ZWIxYmE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yNCw0MyArMjQsNiBAQAogCiAjaW5jbHVkZSAicGh5c2FkZHIuaCIKIAotaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQotewotCXJlc291cmNlX3NpemVfdCBhZGRyLCBlbmQ7Ci0JaW50IGk7Ci0KLQkvKgotCSAqIEEgc3BlY2lhbCBjYXNlIGlzIHRoZSBmaXJzdCA0S2Igb2YgbWVtb3J5OwotCSAqIFRoaXMgaXMgYSBCSU9TIG93bmVkIGFyZWEsIG5vdCBrZXJuZWwgcmFtLCBidXQgZ2VuZXJhbGx5Ci0JICogbm90IGxpc3RlZCBhcyBzdWNoIGluIHRoZSBFODIwIHRhYmxlLgotCSAqLwotCWlmIChwYWdlbnIgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFNlY29uZCBzcGVjaWFsIGNhc2U6IFNvbWUgQklPU2VuIHJlcG9ydCB0aGUgUEMgQklPUwotCSAqIGFyZWEgKDY0MC0+MU1iKSBhcyByYW0gZXZlbiB0aG91Z2ggaXQgaXMgbm90LgotCSAqLwotCWlmIChwYWdlbnIgPj0gKEJJT1NfQkVHSU4gPj4gUEFHRV9TSElGVCkgJiYKLQkJICAgIHBhZ2VuciA8IChCSU9TX0VORCA+PiBQQUdFX1NISUZUKSkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewotCQkvKgotCQkgKiBOb3QgdXNhYmxlIG1lbW9yeToKLQkJICovCi0JCWlmIChlODIwLm1hcFtpXS50eXBlICE9IEU4MjBfUkFNKQotCQkJY29udGludWU7Ci0JCWFkZHIgPSAoZTgyMC5tYXBbaV0uYWRkciArIFBBR0VfU0laRS0xKSA+PiBQQUdFX1NISUZUOwotCQllbmQgPSAoZTgyMC5tYXBbaV0uYWRkciArIGU4MjAubWFwW2ldLnNpemUpID4+IFBBR0VfU0hJRlQ7Ci0KLQotCQlpZiAoKHBhZ2VuciA+PSBhZGRyKSAmJiAocGFnZW5yIDwgZW5kKSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIEZpeCB1cCB0aGUgbGluZWFyIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBrZXJuZWwgdG8gYXZvaWQgY2FjaGUgYXR0cmlidXRlCiAgKiBjb25mbGljdHMuCkBAIC00MjIsNiArMzg1LDEwIEBACiAJICogVGhlIGJvb3QtaW9yZW1hcCByYW5nZSBzcGFucyBtdWx0aXBsZSBwbWRzLCBmb3Igd2hpY2gKIAkgKiB3ZSBhcmUgbm90IHByZXBhcmVkOgogCSAqLworI2RlZmluZSBfX0ZJWEFERFJfVE9QICgtUEFHRV9TSVpFKQorCUJVSUxEX0JVR19PTigoX19maXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pID4+IFBNRF9TSElGVCkKKwkJICAgICAhPSAoX19maXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSA+PiBQTURfU0hJRlQpKTsKKyN1bmRlZiBfX0ZJWEFERFJfVE9QCiAJaWYgKHBtZCAhPSBlYXJseV9pb3JlbWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSkpIHsKIAkJV0FSTl9PTigxKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicG1kICVwICE9ICVwXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jCmluZGV4IDhjYzE4MzMuLmIzYjUzMWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYworKysgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCWlmICghc2hhZG93KQogCQlyZXR1cm4gdHJ1ZTsKIAotCXN0YXR1cyA9IGttZW1jaGVja19zaGFkb3dfdGVzdChzaGFkb3csIHNpemUpOworCXN0YXR1cyA9IGttZW1jaGVja19zaGFkb3dfdGVzdF9hbGwoc2hhZG93LCBzaXplKTsKIAogCXJldHVybiBzdGF0dXMgPT0gS01FTUNIRUNLX1NIQURPV19JTklUSUFMSVpFRDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYwppbmRleCAzZjY2YjgyLi5hZWMxMjQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMKKysrIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jCkBAIC0xMjUsMTIgKzEyNSwxMiBAQAogCiBlbnVtIGttZW1jaGVja19zaGFkb3cga21lbWNoZWNrX3NoYWRvd190ZXN0KHZvaWQgKnNoYWRvdywgdW5zaWduZWQgaW50IHNpemUpCiB7CisjaWZkZWYgQ09ORklHX0tNRU1DSEVDS19QQVJUSUFMX09LCiAJdWludDhfdCAqeDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXggPSBzaGFkb3c7CiAKLSNpZmRlZiBDT05GSUdfS01FTUNIRUNLX1BBUlRJQUxfT0sKIAkvKgogCSAqIE1ha2Ugc3VyZSBfc29tZV8gYnl0ZXMgYXJlIGluaXRpYWxpemVkLiBHY2MgZnJlcXVlbnRseSBnZW5lcmF0ZXMKIAkgKiBjb2RlIHRvIGFjY2VzcyBuZWlnaGJvcmluZyBieXRlcy4KQEAgLTEzOSwxMyArMTM5LDI1IEBACiAJCWlmICh4W2ldID09IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQpCiAJCQlyZXR1cm4geFtpXTsKIAl9CisKKwlyZXR1cm4geFswXTsKICNlbHNlCisJcmV0dXJuIGttZW1jaGVja19zaGFkb3dfdGVzdF9hbGwoc2hhZG93LCBzaXplKTsKKyNlbmRpZgorfQorCitlbnVtIGttZW1jaGVja19zaGFkb3cga21lbWNoZWNrX3NoYWRvd190ZXN0X2FsbCh2b2lkICpzaGFkb3csIHVuc2lnbmVkIGludCBzaXplKQoreworCXVpbnQ4X3QgKng7CisJdW5zaWduZWQgaW50IGk7CisKKwl4ID0gc2hhZG93OworCiAJLyogQWxsIGJ5dGVzIG11c3QgYmUgaW5pdGlhbGl6ZWQuICovCiAJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkgewogCQlpZiAoeFtpXSAhPSBLTUVNQ0hFQ0tfU0hBRE9XX0lOSVRJQUxJWkVEKQogCQkJcmV0dXJuIHhbaV07CiAJfQotI2VuZGlmCiAKIAlyZXR1cm4geFswXTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuaCBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuaAppbmRleCBhZjQ2ZDlhLi5mZjBiMmY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmgKKysrIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5oCkBAIC0xMSw2ICsxMSw4IEBACiB2b2lkICprbWVtY2hlY2tfc2hhZG93X2xvb2t1cCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogCiBlbnVtIGttZW1jaGVja19zaGFkb3cga21lbWNoZWNrX3NoYWRvd190ZXN0KHZvaWQgKnNoYWRvdywgdW5zaWduZWQgaW50IHNpemUpOworZW51bSBrbWVtY2hlY2tfc2hhZG93IGttZW1jaGVja19zaGFkb3dfdGVzdF9hbGwodm9pZCAqc2hhZG93LAorCQkJCQkJdW5zaWduZWQgaW50IHNpemUpOwogdm9pZCBrbWVtY2hlY2tfc2hhZG93X3NldCh2b2lkICpzaGFkb3csIHVuc2lnbmVkIGludCBzaXplKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tbWFwLmMgYi9hcmNoL3g4Ni9tbS9tbWFwLmMKaW5kZXggYzgxOTFkZS4uMWRhYjUxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbW1hcC5jCisrKyBiL2FyY2gveDg2L21tL21tYXAuYwpAQCAtNzEsNyArNzEsNyBAQAogCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAmIEFERFJfQ09NUEFUX0xBWU9VVCkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKKwlpZiAocmxpbWl0KFJMSU1JVF9TVEFDSykgPT0gUkxJTV9JTkZJTklUWSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQ7CkBAIC05Niw3ICs5Niw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1tYXBfYmFzZSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZ2FwID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXI7CisJdW5zaWduZWQgbG9uZyBnYXAgPSBybGltaXQoUkxJTUlUX1NUQUNLKTsKIAogCWlmIChnYXAgPCBNSU5fR0FQKQogCQlnYXAgPSBNSU5fR0FQOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IDgzYmJjNzAuLjMzMDdlYTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJpZyBub2RlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgYXMgYSByZXN1bHQKIAkgKiBvZiBjb25zb2xpZGF0aW5nIHRoZSByZW1haW5kZXIuCiAJICovCi0JYmlnID0gKChzaXplICYgfkZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLKSAmIG5yX25vZGVzKSAvCisJYmlnID0gKChzaXplICYgfkZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLKSAqIG5yX25vZGVzKSAvCiAJCUZBS0VfTk9ERV9NSU5fU0laRTsKIAogCXNpemUgJj0gRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7CkBAIC01MDIsNzcgKzUwMiw5OSBAQAogfQogCiAvKgotICogU3BsaXRzIG51bV9ub2RlcyBub2RlcyB1cCBlcXVhbGx5IHN0YXJ0aW5nIGF0IG5vZGVfc3RhcnQuICBUaGUgcmV0dXJuIHZhbHVlCi0gKiBpcyB0aGUgbnVtYmVyIG9mIG5vZGVzIHNwbGl0IHVwIGFuZCBhZGRyIGlzIGFkanVzdGVkIHRvIGJlIGF0IHRoZSBlbmQgb2YgdGhlCi0gKiBsYXN0IG5vZGUgYWxsb2NhdGVkLgorICogUmV0dXJucyB0aGUgZW5kIGFkZHJlc3Mgb2YgYSBub2RlIHNvIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3QgYHNpemUnIGFtb3VudCBvZgorICogbm9uLXJlc2VydmVkIG1lbW9yeSBvciBgbWF4X2FkZHInIGlzIHJlYWNoZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNwbGl0X25vZGVzX2VxdWFsbHkodTY0ICphZGRyLCB1NjQgbWF4X2FkZHIsIGludCBub2RlX3N0YXJ0LAotCQkJCSAgICAgIGludCBudW1fbm9kZXMpCitzdGF0aWMgdTY0IF9faW5pdCBmaW5kX2VuZF9vZl9ub2RlKHU2NCBzdGFydCwgdTY0IG1heF9hZGRyLCB1NjQgc2l6ZSkKIHsKLQl1bnNpZ25lZCBpbnQgYmlnOwotCXU2NCBzaXplOwotCWludCBpOworCXU2NCBlbmQgPSBzdGFydCArIHNpemU7CiAKLQlpZiAobnVtX25vZGVzIDw9IDApCi0JCXJldHVybiAtMTsKLQlpZiAobnVtX25vZGVzID4gTUFYX05VTU5PREVTKQotCQludW1fbm9kZXMgPSBNQVhfTlVNTk9ERVM7Ci0Jc2l6ZSA9IChtYXhfYWRkciAtICphZGRyIC0gZTgyMF9ob2xlX3NpemUoKmFkZHIsIG1heF9hZGRyKSkgLwotCSAgICAgICBudW1fbm9kZXM7Ci0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBiaWcgbm9kZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkIGFzIGEgcmVzdWx0Ci0JICogb2YgY29uc29saWRhdGluZyB0aGUgbGVmdG92ZXJzLgotCSAqLwotCWJpZyA9ICgoc2l6ZSAmIH5GQUtFX05PREVfTUlOX0hBU0hfTUFTSykgKiBudW1fbm9kZXMpIC8KLQkgICAgICBGQUtFX05PREVfTUlOX1NJWkU7Ci0KLQkvKiBSb3VuZCBkb3duIHRvIG5lYXJlc3QgRkFLRV9OT0RFX01JTl9TSVpFLiAqLwotCXNpemUgJj0gRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7Ci0JaWYgKCFzaXplKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm90IGVub3VnaCBtZW1vcnkgZm9yIGVhY2ggbm9kZS4gICIKLQkJICAgICAgICJOVU1BIGVtdWxhdGlvbiBkaXNhYmxlZC5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZm9yIChpID0gbm9kZV9zdGFydDsgaSA8IG51bV9ub2RlcyArIG5vZGVfc3RhcnQ7IGkrKykgewotCQl1NjQgZW5kID0gKmFkZHIgKyBzaXplOwotCi0JCWlmIChpIDwgYmlnKQotCQkJZW5kICs9IEZBS0VfTk9ERV9NSU5fU0laRTsKLQkJLyoKLQkJICogVGhlIGZpbmFsIG5vZGUgY2FuIGhhdmUgdGhlIHJlbWFpbmluZyBzeXN0ZW0gUkFNLiAgT3RoZXIKLQkJICogbm9kZXMgcmVjZWl2ZSByb3VnaGx5IHRoZSBzYW1lIGFtb3VudCBvZiBhdmFpbGFibGUgcGFnZXMuCi0JCSAqLwotCQlpZiAoaSA9PSBudW1fbm9kZXMgKyBub2RlX3N0YXJ0IC0gMSkKKwl3aGlsZSAoZW5kIC0gc3RhcnQgLSBlODIwX2hvbGVfc2l6ZShzdGFydCwgZW5kKSA8IHNpemUpIHsKKwkJZW5kICs9IEZBS0VfTk9ERV9NSU5fU0laRTsKKwkJaWYgKGVuZCA+IG1heF9hZGRyKSB7CiAJCQllbmQgPSBtYXhfYWRkcjsKLQkJZWxzZQotCQkJd2hpbGUgKGVuZCAtICphZGRyIC0gZTgyMF9ob2xlX3NpemUoKmFkZHIsIGVuZCkgPAotCQkJICAgICAgIHNpemUpIHsKLQkJCQllbmQgKz0gRkFLRV9OT0RFX01JTl9TSVpFOwotCQkJCWlmIChlbmQgPiBtYXhfYWRkcikgewotCQkJCQllbmQgPSBtYXhfYWRkcjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQlpZiAoc2V0dXBfbm9kZV9yYW5nZShpLCBhZGRyLCBlbmQgLSAqYWRkciwgbWF4X2FkZHIpIDwgMCkKIAkJCWJyZWFrOworCQl9CiAJfQotCXJldHVybiBpIC0gbm9kZV9zdGFydCArIDE7CisJcmV0dXJuIGVuZDsKIH0KIAogLyoKLSAqIFNwbGl0cyB0aGUgcmVtYWluaW5nIHN5c3RlbSBSQU0gaW50byBjaHVua3Mgb2Ygc2l6ZS4gIFRoZSByZW1haW5pbmcgbWVtb3J5IGlzCi0gKiBhbHdheXMgYXNzaWduZWQgdG8gYSBmaW5hbCBub2RlIGFuZCBjYW4gYmUgYXN5bW1ldHJpYy4gIFJldHVybnMgdGhlIG51bWJlciBvZgotICogbm9kZXMgc3BsaXQuCisgKiBTZXRzIHVwIGZha2Ugbm9kZXMgb2YgYHNpemUnIGludGVybGVhdmVkIG92ZXIgcGh5c2ljYWwgbm9kZXMgcmFuZ2luZyBmcm9tCisgKiBgYWRkcicgdG8gYG1heF9hZGRyJy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBub2RlcyBhbGxvY2F0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNwbGl0X25vZGVzX2J5X3NpemUodTY0ICphZGRyLCB1NjQgbWF4X2FkZHIsIGludCBub2RlX3N0YXJ0LAotCQkJCSAgICAgIHU2NCBzaXplKQorc3RhdGljIGludCBfX2luaXQgc3BsaXRfbm9kZXNfc2l6ZV9pbnRlcmxlYXZlKHU2NCBhZGRyLCB1NjQgbWF4X2FkZHIsIHU2NCBzaXplKQogewotCWludCBpID0gbm9kZV9zdGFydDsKLQlzaXplID0gKHNpemUgPDwgMjApICYgRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7Ci0Jd2hpbGUgKCFzZXR1cF9ub2RlX3JhbmdlKGkrKywgYWRkciwgc2l6ZSwgbWF4X2FkZHIpKQotCQk7Ci0JcmV0dXJuIGkgLSBub2RlX3N0YXJ0OworCW5vZGVtYXNrX3QgcGh5c25vZGVfbWFzayA9IE5PREVfTUFTS19OT05FOworCXU2NCBtaW5fc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWlmICghc2l6ZSkKKwkJcmV0dXJuIC0xOworCS8qCisJICogVGhlIGxpbWl0IG9uIGVtdWxhdGVkIG5vZGVzIGlzIE1BWF9OVU1OT0RFUywgc28gdGhlIHNpemUgcGVyIG5vZGUgaXMKKwkgKiBpbmNyZWFzZWQgYWNjb3JkaW5nbHkgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzIHRvbyBzbWFsbC4gIFRoaXMKKwkgKiBjcmVhdGVzIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gb2Ygbm9kZSBzaXplcyBhY3Jvc3MgdGhlIGVudGlyZQorCSAqIG1hY2hpbmUgKGJ1dCBub3QgbmVjZXNzYXJpbHkgb3ZlciBwaHlzaWNhbCBub2RlcykuCisJICovCisJbWluX3NpemUgPSAobWF4X2FkZHIgLSBhZGRyIC0gZTgyMF9ob2xlX3NpemUoYWRkciwgbWF4X2FkZHIpKSAvCisJCQkJCQlNQVhfTlVNTk9ERVM7CisJbWluX3NpemUgPSBtYXgobWluX3NpemUsIEZBS0VfTk9ERV9NSU5fU0laRSk7CisJaWYgKChtaW5fc2l6ZSAmIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLKSA8IG1pbl9zaXplKQorCQltaW5fc2l6ZSA9IChtaW5fc2l6ZSArIEZBS0VfTk9ERV9NSU5fU0laRSkgJgorCQkJCQkJRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7CisJaWYgKHNpemUgPCBtaW5fc2l6ZSkgeworCQlwcl9lcnIoIkZha2Ugbm9kZSBzaXplICVMdU1CIHRvbyBzbWFsbCwgaW5jcmVhc2luZyB0byAlTHVNQlxuIiwKKwkJCXNpemUgPj4gMjAsIG1pbl9zaXplID4+IDIwKTsKKwkJc2l6ZSA9IG1pbl9zaXplOworCX0KKwlzaXplICY9IEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKQorCQlpZiAocGh5c25vZGVzW2ldLnN0YXJ0ICE9IHBoeXNub2Rlc1tpXS5lbmQpCisJCQlub2RlX3NldChpLCBwaHlzbm9kZV9tYXNrKTsKKwkvKgorCSAqIEZpbGwgcGh5c2ljYWwgbm9kZXMgd2l0aCBmYWtlIG5vZGVzIG9mIHNpemUgdW50aWwgdGhlcmUgaXMgbm8gbWVtb3J5CisJICogbGVmdCBvbiBhbnkgb2YgdGhlbS4KKwkgKi8KKwl3aGlsZSAobm9kZXNfd2VpZ2h0KHBoeXNub2RlX21hc2spKSB7CisJCWZvcl9lYWNoX25vZGVfbWFzayhpLCBwaHlzbm9kZV9tYXNrKSB7CisJCQl1NjQgZG1hMzJfZW5kID0gTUFYX0RNQTMyX1BGTiA8PCBQQUdFX1NISUZUOworCQkJdTY0IGVuZDsKKworCQkJZW5kID0gZmluZF9lbmRfb2Zfbm9kZShwaHlzbm9kZXNbaV0uc3RhcnQsCisJCQkJCQlwaHlzbm9kZXNbaV0uZW5kLCBzaXplKTsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSB3b24ndCBiZSBhdCBsZWFzdCBGQUtFX05PREVfTUlOX1NJWkUgb2YKKwkJCSAqIG5vbi1yZXNlcnZlZCBtZW1vcnkgaW4gWk9ORV9ETUEzMiBmb3IgdGhlIG5leHQgbm9kZSwKKwkJCSAqIHRoaXMgb25lIG11c3QgZXh0ZW5kIHRvIHRoZSBib3VuZGFyeS4KKwkJCSAqLworCQkJaWYgKGVuZCA8IGRtYTMyX2VuZCAmJiBkbWEzMl9lbmQgLSBlbmQgLQorCQkJICAgIGU4MjBfaG9sZV9zaXplKGVuZCwgZG1hMzJfZW5kKSA8IEZBS0VfTk9ERV9NSU5fU0laRSkKKwkJCQllbmQgPSBkbWEzMl9lbmQ7CisKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSB3b24ndCBiZSBlbm91Z2ggbm9uLXJlc2VydmVkIG1lbW9yeSBmb3IgdGhlCisJCQkgKiBuZXh0IG5vZGUsIHRoaXMgb25lIG11c3QgZXh0ZW5kIHRvIHRoZSBlbmQgb2YgdGhlCisJCQkgKiBwaHlzaWNhbCBub2RlLgorCQkJICovCisJCQlpZiAocGh5c25vZGVzW2ldLmVuZCAtIGVuZCAtCisJCQkgICAgZTgyMF9ob2xlX3NpemUoZW5kLCBwaHlzbm9kZXNbaV0uZW5kKSA8IHNpemUpCisJCQkJZW5kID0gcGh5c25vZGVzW2ldLmVuZDsKKworCQkJLyoKKwkJCSAqIFNldHVwIHRoZSBmYWtlIG5vZGUgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZCBhcyBib290bWVtCisJCQkgKiBsYXRlci4gIElmIHNldHVwX25vZGVfcmFuZ2UoKSByZXR1cm5zIG5vbi16ZXJvLCB0aGVyZQorCQkJICogaXMgbm8gbW9yZSBtZW1vcnkgYXZhaWxhYmxlIG9uIHRoaXMgcGh5c2ljYWwgbm9kZS4KKwkJCSAqLworCQkJaWYgKHNldHVwX25vZGVfcmFuZ2UocmV0KyssICZwaHlzbm9kZXNbaV0uc3RhcnQsCisJCQkJCQllbmQgLSBwaHlzbm9kZXNbaV0uc3RhcnQsCisJCQkJCQlwaHlzbm9kZXNbaV0uZW5kKSA8IDApCisJCQkJbm9kZV9jbGVhcihpLCBwaHlzbm9kZV9tYXNrKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtNTgyLDg3ICs2MDQsMzIgQEAKIHN0YXRpYyBpbnQgX19pbml0IG51bWFfZW11bGF0aW9uKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJdW5zaWduZWQgbG9uZyBsYXN0X3BmbiwgaW50IGFjcGksIGludCBrOCkKIHsKLQl1NjQgc2l6ZSwgYWRkciA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOworCXU2NCBhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAJdTY0IG1heF9hZGRyID0gbGFzdF9wZm4gPDwgUEFHRV9TSElGVDsKLQlpbnQgbnVtX25vZGVzID0gMCwgbnVtID0gMCwgY29lZmZfZmxhZywgY29lZmYgPSAtMSwgaTsKIAlpbnQgbnVtX3BoeXNfbm9kZXM7CisJaW50IG51bV9ub2RlczsKKwlpbnQgaTsKIAogCW51bV9waHlzX25vZGVzID0gc2V0dXBfcGh5c25vZGVzKGFkZHIsIG1heF9hZGRyLCBhY3BpLCBrOCk7CiAJLyoKLQkgKiBJZiB0aGUgbnVtYT1mYWtlIGNvbW1hbmQtbGluZSBpcyBqdXN0IGEgc2luZ2xlIG51bWJlciBOLCBzcGxpdCB0aGUKLQkgKiBzeXN0ZW0gUkFNIGludG8gTiBmYWtlIG5vZGVzLgorCSAqIElmIHRoZSBudW1hPWZha2UgY29tbWFuZC1saW5lIGNvbnRhaW5zIGEgJ00nIG9yICdHJywgaXQgcmVwcmVzZW50cworCSAqIHRoZSBmaXhlZCBub2RlIHNpemUuICBPdGhlcndpc2UsIGlmIGl0IGlzIGp1c3QgYSBzaW5nbGUgbnVtYmVyIE4sCisJICogc3BsaXQgdGhlIHN5c3RlbSBSQU0gaW50byBOIGZha2Ugbm9kZXMuCiAJICovCi0JaWYgKCFzdHJjaHIoY21kbGluZSwgJyonKSAmJiAhc3RyY2hyKGNtZGxpbmUsICcsJykpIHsKLQkJbG9uZyBuID0gc2ltcGxlX3N0cnRvbChjbWRsaW5lLCBOVUxMLCAwKTsKKwlpZiAoc3RyY2hyKGNtZGxpbmUsICdNJykgfHwgc3RyY2hyKGNtZGxpbmUsICdHJykpIHsKKwkJdTY0IHNpemU7CiAKLQkJbnVtX25vZGVzID0gc3BsaXRfbm9kZXNfaW50ZXJsZWF2ZShhZGRyLCBtYXhfYWRkciwKLQkJCQkJCQludW1fcGh5c19ub2Rlcywgbik7Ci0JCWlmIChudW1fbm9kZXMgPCAwKQotCQkJcmV0dXJuIG51bV9ub2RlczsKLQkJZ290byBvdXQ7CisJCXNpemUgPSBtZW1wYXJzZShjbWRsaW5lLCAmY21kbGluZSk7CisJCW51bV9ub2RlcyA9IHNwbGl0X25vZGVzX3NpemVfaW50ZXJsZWF2ZShhZGRyLCBtYXhfYWRkciwgc2l6ZSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBuOworCisJCW4gPSBzaW1wbGVfc3RydG91bChjbWRsaW5lLCBOVUxMLCAwKTsKKwkJbnVtX25vZGVzID0gc3BsaXRfbm9kZXNfaW50ZXJsZWF2ZShhZGRyLCBtYXhfYWRkciwgbnVtX3BoeXNfbm9kZXMsIG4pOwogCX0KIAotCS8qIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUuICovCi0JZm9yIChjb2VmZl9mbGFnID0gMDsgOyBjbWRsaW5lKyspIHsKLQkJaWYgKCpjbWRsaW5lICYmIGlzZGlnaXQoKmNtZGxpbmUpKSB7Ci0JCQludW0gPSBudW0gKiAxMCArICpjbWRsaW5lIC0gJzAnOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCpjbWRsaW5lID09ICcqJykgewotCQkJaWYgKG51bSA+IDApCi0JCQkJY29lZmYgPSBudW07Ci0JCQljb2VmZl9mbGFnID0gMTsKLQkJfQotCQlpZiAoISpjbWRsaW5lIHx8ICpjbWRsaW5lID09ICcsJykgewotCQkJaWYgKCFjb2VmZl9mbGFnKQotCQkJCWNvZWZmID0gMTsKLQkJCS8qCi0JCQkgKiBSb3VuZCBkb3duIHRvIHRoZSBuZWFyZXN0IEZBS0VfTk9ERV9NSU5fU0laRS4KLQkJCSAqIENvbW1hbmQtbGluZSBjb2VmZmljaWVudHMgYXJlIGluIG1lZ2FieXRlcy4KLQkJCSAqLwotCQkJc2l6ZSA9ICgodTY0KW51bSA8PCAyMCkgJiBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKLQkJCWlmIChzaXplKQotCQkJCWZvciAoaSA9IDA7IGkgPCBjb2VmZjsgaSsrLCBudW1fbm9kZXMrKykKLQkJCQkJaWYgKHNldHVwX25vZGVfcmFuZ2UobnVtX25vZGVzLCAmYWRkciwKLQkJCQkJCXNpemUsIG1heF9hZGRyKSA8IDApCi0JCQkJCQlnb3RvIGRvbmU7Ci0JCQlpZiAoISpjbWRsaW5lKQotCQkJCWJyZWFrOwotCQkJY29lZmZfZmxhZyA9IDA7Ci0JCQljb2VmZiA9IC0xOwotCQl9Ci0JCW51bSA9IDA7Ci0JfQotZG9uZToKLQlpZiAoIW51bV9ub2RlcykKLQkJcmV0dXJuIC0xOwotCS8qIEZpbGwgcmVtYWluZGVyIG9mIHN5c3RlbSBSQU0sIGlmIGFwcHJvcHJpYXRlLiAqLwotCWlmIChhZGRyIDwgbWF4X2FkZHIpIHsKLQkJaWYgKGNvZWZmX2ZsYWcgJiYgY29lZmYgPCAwKSB7Ci0JCQkvKiBTcGxpdCByZW1haW5pbmcgbm9kZXMgaW50byBudW0tc2l6ZWQgY2h1bmtzICovCi0JCQludW1fbm9kZXMgKz0gc3BsaXRfbm9kZXNfYnlfc2l6ZSgmYWRkciwgbWF4X2FkZHIsCi0JCQkJCQkJIG51bV9ub2RlcywgbnVtKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXN3aXRjaCAoKihjbWRsaW5lIC0gMSkpIHsKLQkJY2FzZSAnKic6Ci0JCQkvKiBTcGxpdCByZW1haW5pbmcgbm9kZXMgaW50byBjb2VmZiBjaHVua3MgKi8KLQkJCWlmIChjb2VmZiA8PSAwKQotCQkJCWJyZWFrOwotCQkJbnVtX25vZGVzICs9IHNwbGl0X25vZGVzX2VxdWFsbHkoJmFkZHIsIG1heF9hZGRyLAotCQkJCQkJCSBudW1fbm9kZXMsIGNvZWZmKTsKLQkJCWJyZWFrOwotCQljYXNlICcsJzoKLQkJCS8qIERvIG5vdCBhbGxvY2F0ZSByZW1haW5pbmcgc3lzdGVtIFJBTSAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBHaXZlIG9uZSBmaW5hbCBub2RlICovCi0JCQlzZXR1cF9ub2RlX3JhbmdlKG51bV9ub2RlcywgJmFkZHIsIG1heF9hZGRyIC0gYWRkciwKLQkJCQkJIG1heF9hZGRyKTsKLQkJCW51bV9ub2RlcysrOwotCQl9Ci0JfQotb3V0OgorCWlmIChudW1fbm9kZXMgPCAwKQorCQlyZXR1cm4gbnVtX25vZGVzOwogCW1lbW5vZGVfc2hpZnQgPSBjb21wdXRlX2hhc2hfc2hpZnQobm9kZXMsIG51bV9ub2RlcywgTlVMTCk7CiAJaWYgKG1lbW5vZGVfc2hpZnQgPCAwKSB7CiAJCW1lbW5vZGVfc2hpZnQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCmluZGV4IGVkMzRmNWUuLmM5YmE5ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuYworKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKQEAgLTYsNiArNiwxNCBAQAogCiAjZGVmaW5lIFBHQUxMT0NfR0ZQIEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTwogCisjaWZkZWYgQ09ORklHX0hJR0hQVEUKKyNkZWZpbmUgUEdBTExPQ19VU0VSX0dGUCBfX0dGUF9ISUdITUVNCisjZWxzZQorI2RlZmluZSBQR0FMTE9DX1VTRVJfR0ZQIDAKKyNlbmRpZgorCitnZnBfdCBfX3VzZXJwdGVfYWxsb2NfZ2ZwID0gUEdBTExPQ19HRlAgfCBQR0FMTE9DX1VTRVJfR0ZQOworCiBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKFBHQUxMT0NfR0ZQKTsKQEAgLTE1LDE2ICsyMywyOSBAQAogewogCXN0cnVjdCBwYWdlICpwdGU7CiAKLSNpZmRlZiBDT05GSUdfSElHSFBURQotCXB0ZSA9IGFsbG9jX3BhZ2VzKFBHQUxMT0NfR0ZQIHwgX19HRlBfSElHSE1FTSwgMCk7Ci0jZWxzZQotCXB0ZSA9IGFsbG9jX3BhZ2VzKFBHQUxMT0NfR0ZQLCAwKTsKLSNlbmRpZgorCXB0ZSA9IGFsbG9jX3BhZ2VzKF9fdXNlcnB0ZV9hbGxvY19nZnAsIDApOwogCWlmIChwdGUpCiAJCXBndGFibGVfcGFnZV9jdG9yKHB0ZSk7CiAJcmV0dXJuIHB0ZTsKIH0KIAorc3RhdGljIGludCBfX2luaXQgc2V0dXBfdXNlcnB0ZShjaGFyICphcmcpCit7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiAidXNlcnB0ZT1ub2hpZ2giIGRpc2FibGVzIGFsbG9jYXRpb24gb2YgdXNlciBwYWdldGFibGVzIGluCisJICogaGlnaCBtZW1vcnkuCisJICovCisJaWYgKHN0cmNtcChhcmcsICJub2hpZ2giKSA9PSAwKQorCQlfX3VzZXJwdGVfYWxsb2NfZ2ZwICY9IH5fX0dGUF9ISUdITUVNOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgidXNlcnB0ZSIsIHNldHVwX3VzZXJwdGUpOworCiB2b2lkIF9fX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcHRlKQogewogCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90bGIuYyBiL2FyY2gveDg2L21tL3RsYi5jCmluZGV4IDY1YjU4ZTQuLjQyNmYzYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3RsYi5jCisrKyBiL2FyY2gveDg2L21tL3RsYi5jCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IHsKIAkJc3RydWN0IG1tX3N0cnVjdCAqZmx1c2hfbW07CiAJCXVuc2lnbmVkIGxvbmcgZmx1c2hfdmE7Ci0JCXNwaW5sb2NrX3QgdGxic3RhdGVfbG9jazsKKwkJcmF3X3NwaW5sb2NrX3QgdGxic3RhdGVfbG9jazsKIAkJREVDTEFSRV9CSVRNQVAoZmx1c2hfY3B1bWFzaywgTlJfQ1BVUyk7CiAJfTsKIAljaGFyIHBhZFtJTlRFUk5PREVfQ0FDSEVfQllURVNdOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJICogbnVtX29ubGluZV9jcHVzKCkgPD0gTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMsIGJ1dCBpdCBpcwogCSAqIHByb2JhYmx5IG5vdCB3b3J0aCBjaGVja2luZyB0aGlzIGZvciBhIGNhY2hlLWhvdCBsb2NrLgogCSAqLwotCXNwaW5fbG9jaygmZi0+dGxic3RhdGVfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmZi0+dGxic3RhdGVfbG9jayk7CiAKIAlmLT5mbHVzaF9tbSA9IG1tOwogCWYtPmZsdXNoX3ZhID0gdmE7CkBAIC0xOTksNyArMTk5LDcgQEAKIAogCWYtPmZsdXNoX21tID0gTlVMTDsKIAlmLT5mbHVzaF92YSA9IDA7Ci0Jc3Bpbl91bmxvY2soJmYtPnRsYnN0YXRlX2xvY2spOworCXJhd19zcGluX3VubG9jaygmZi0+dGxic3RhdGVfbG9jayk7CiB9CiAKIHZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCkBAIC0yMjMsNyArMjIzLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZsdXNoX3N0YXRlKTsgaSsrKQotCQlzcGluX2xvY2tfaW5pdCgmZmx1c2hfc3RhdGVbaV0udGxic3RhdGVfbG9jayk7CisJCXJhd19zcGluX2xvY2tfaW5pdCgmZmx1c2hfc3RhdGVbaV0udGxic3RhdGVfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwppbmRleCBjYjg4YjFhLi4yYzUwNWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXBlcl9jcHUoY3B1X21zcnMsIGkpLm11bHRpcGxleCA9Ci0JCQlrbWFsbG9jKG11bHRpcGxleF9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWt6YWxsb2MobXVsdGlwbGV4X3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXBlcl9jcHUoY3B1X21zcnMsIGkpLm11bHRpcGxleCkKIAkJCXJldHVybiAwOwogCX0KQEAgLTE3OSw3ICsxNzksNiBAQAogCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCkgewogCQkJbXVsdGlwbGV4W2ldLnNhdmVkID0gLSh1NjQpY291bnRlcl9jb25maWdbaV0uY291bnQ7CiAJCX0gZWxzZSB7Ci0JCQltdWx0aXBsZXhbaV0uYWRkciAgPSAwOwogCQkJbXVsdGlwbGV4W2ldLnNhdmVkID0gMDsKIAkJfQogCX0KQEAgLTE4OSwyNSArMTg4LDI3IEBACiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfc2F2ZV9tcHhfcmVnaXN0ZXJzKHN0cnVjdCBvcF9tc3JzICptc3JzKQogeworCXN0cnVjdCBvcF9tc3IgKmNvdW50ZXJzID0gbXNycy0+Y291bnRlcnM7CiAJc3RydWN0IG9wX21zciAqbXVsdGlwbGV4ID0gbXNycy0+bXVsdGlwbGV4OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY291bnRlcnM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7Ci0JCWlmIChtdWx0aXBsZXhbdmlydF0uYWRkcikKLQkJCXJkbXNybChtdWx0aXBsZXhbdmlydF0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKKwkJaWYgKGNvdW50ZXJzW2ldLmFkZHIpCisJCQlyZG1zcmwoY291bnRlcnNbaV0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfcmVzdG9yZV9tcHhfcmVnaXN0ZXJzKHN0cnVjdCBvcF9tc3JzICptc3JzKQogeworCXN0cnVjdCBvcF9tc3IgKmNvdW50ZXJzID0gbXNycy0+Y291bnRlcnM7CiAJc3RydWN0IG9wX21zciAqbXVsdGlwbGV4ID0gbXNycy0+bXVsdGlwbGV4OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY291bnRlcnM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7Ci0JCWlmIChtdWx0aXBsZXhbdmlydF0uYWRkcikKLQkJCXdybXNybChtdWx0aXBsZXhbdmlydF0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKKwkJaWYgKGNvdW50ZXJzW2ldLmFkZHIpCisJCQl3cm1zcmwoY291bnRlcnNbaV0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKIAl9CiB9CiAKQEAgLTIyMiw3ICsyMjMsNyBAQAogCiAJLyogbW92ZSB0byBuZXh0IHNldCAqLwogCXNpICs9IG1vZGVsLT5udW1fY291bnRlcnM7Ci0JaWYgKChzaSA+IG1vZGVsLT5udW1fdmlydF9jb3VudGVycykgfHwgKGNvdW50ZXJfY29uZmlnW3NpXS5jb3VudCA9PSAwKSkKKwlpZiAoKHNpID49IG1vZGVsLT5udW1fdmlydF9jb3VudGVycykgfHwgKGNvdW50ZXJfY29uZmlnW3NpXS5jb3VudCA9PSAwKSkKIAkJcGVyX2NwdShzd2l0Y2hfaW5kZXgsIGNwdSkgPSAwOwogCWVsc2UKIAkJcGVyX2NwdShzd2l0Y2hfaW5kZXgsIGNwdSkgPSBzaTsKQEAgLTMwMywxMSArMzA0LDExIEBACiAKIAlpbnQgaTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyA9IGttYWxsb2MoY291bnRlcnNfc2l6ZSwKKwkJcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMgPSBremFsbG9jKGNvdW50ZXJzX3NpemUsCiAJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMpCiAJCQlyZXR1cm4gMDsKLQkJcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMgPSBrbWFsbG9jKGNvbnRyb2xzX3NpemUsCisJCXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzID0ga3phbGxvYyhjb250cm9sc19zaXplLAogCQkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzKQogCQkJcmV0dXJuIDA7CkBAIC01OTgsNiArNTk5LDcgQEAKIAljYXNlIDE1OiBjYXNlIDIzOgogCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlXzIiOwogCQlicmVhazsKKwljYXNlIDB4MmU6CiAJY2FzZSAyNjoKIAkJc3BlYyA9ICZvcF9hcmNoX3BlcmZtb25fc3BlYzsKIAkJKmNwdV90eXBlID0gImkzODYvY29yZV9pNyI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IDM5Njg2YzIuLjZhNTgyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC0yMiw2ICsyMiw5IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KIAogI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKQEAgLTQzLDE1ICs0NiwxMyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNldF92YWx1ZVtOVU1fVklSVF9DT1VOVEVSU107CiAKLSNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCi0KIC8qIElic0ZldGNoQ3RsIGJpdHMvbWFza3MgKi8KICNkZWZpbmUgSUJTX0ZFVENIX1JBTkRfRU4JCSgxVUxMPDw1NykKICNkZWZpbmUgSUJTX0ZFVENIX1ZBTAkJCSgxVUxMPDw0OSkKICNkZWZpbmUgSUJTX0ZFVENIX0VOQUJMRQkJKDFVTEw8PDQ4KQogI2RlZmluZSBJQlNfRkVUQ0hfQ05UX01BU0sJCTB4RkZGRjAwMDBVTEwKIAotLypJYnNPcEN0bCBiaXRzICovCisvKiBJYnNPcEN0bCBiaXRzICovCiAjZGVmaW5lIElCU19PUF9DTlRfQ1RMCQkJKDFVTEw8PDE5KQogI2RlZmluZSBJQlNfT1BfVkFMCQkJKDFVTEw8PDE4KQogI2RlZmluZSBJQlNfT1BfRU5BQkxFCQkJKDFVTEw8PDE3KQpAQCAtNTksNyArNjAsNyBAQAogI2RlZmluZSBJQlNfRkVUQ0hfU0laRQkJCTYKICNkZWZpbmUgSUJTX09QX1NJWkUJCQkxMgogCi1zdGF0aWMgaW50IGhhc19pYnM7CS8qIEFNRCBGYW1pbHkxMGggYW5kIGxhdGVyICovCitzdGF0aWMgdTMyIGlic19jYXBzOwogCiBzdHJ1Y3Qgb3BfaWJzX2NvbmZpZyB7CiAJdW5zaWduZWQgbG9uZyBvcF9lbmFibGVkOwpAQCAtNzEsMjQgKzcyLDUyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9wX2lic19jb25maWcgaWJzX2NvbmZpZzsKK3N0YXRpYyB1NjQgaWJzX29wX2N0bDsKIAotI2VuZGlmCisvKgorICogSUJTIGNwdWlkIGZlYXR1cmUgZGV0ZWN0aW9uCisgKi8KKworI2RlZmluZSBJQlNfQ1BVSURfRkVBVFVSRVMgICAgICAweDgwMDAwMDFiCisKKy8qCisgKiBTYW1lIGJpdCBtYXNrIGFzIGZvciBJQlMgY3B1aWQgZmVhdHVyZSBmbGFncyAoRm44MDAwXzAwMUJfRUFYKSwgYnV0CisgKiBiaXQgMCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBleGlzdGVuY2Ugb2YgSUJTLgorICovCisjZGVmaW5lIElCU19DQVBTX0FWQUlMCQkJKDFMTDw8MCkKKyNkZWZpbmUgSUJTX0NBUFNfUkRXUk9QQ05UCQkoMUxMPDwzKQorI2RlZmluZSBJQlNfQ0FQU19PUENOVAkJCSgxTEw8PDQpCisKKy8qCisgKiBJQlMgcmFuZG9taXphdGlvbiBtYWNyb3MKKyAqLworI2RlZmluZSBJQlNfUkFORE9NX0JJVFMJCQkxMgorI2RlZmluZSBJQlNfUkFORE9NX01BU0sJCQkoKDFVTEwgPDwgSUJTX1JBTkRPTV9CSVRTKSAtIDEpCisjZGVmaW5lIElCU19SQU5ET01fTUFYQ05UX09GRlNFVAkoMVVMTCA8PCAoSUJTX1JBTkRPTV9CSVRTIC0gNSkpCisKK3N0YXRpYyB1MzIgZ2V0X2lic19jYXBzKHZvaWQpCit7CisJdTMyIGlic19jYXBzOworCXVuc2lnbmVkIGludCBtYXhfbGV2ZWw7CisKKwlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlMpKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIElCUyBjcHVpZCBmZWF0dXJlIGZsYWdzICovCisJbWF4X2xldmVsID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOworCWlmIChtYXhfbGV2ZWwgPCBJQlNfQ1BVSURfRkVBVFVSRVMpCisJCXJldHVybiBJQlNfQ0FQU19BVkFJTDsKKworCWlic19jYXBzID0gY3B1aWRfZWF4KElCU19DUFVJRF9GRUFUVVJFUyk7CisJaWYgKCEoaWJzX2NhcHMgJiBJQlNfQ0FQU19BVkFJTCkpCisJCS8qIGNwdWlkIGZsYWdzIG5vdCB2YWxpZCAqLworCQlyZXR1cm4gSUJTX0NBUFNfQVZBSUw7CisKKwlyZXR1cm4gaWJzX2NhcHM7Cit9CiAKICNpZmRlZiBDT05GSUdfT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCiAKLXN0YXRpYyB2b2lkIG9wX211eF9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1ZJUlRfQ09VTlRFUlM7IGkrKykgewotCQlpbnQgaHdfY291bnRlciA9IG9wX3g4Nl92aXJ0X3RvX3BoeXMoaSk7Ci0JCWlmIChyZXNlcnZlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpKQotCQkJbXNycy0+bXVsdGlwbGV4W2ldLmFkZHIgPSBNU1JfSzdfUEVSRkNUUjAgKyBod19jb3VudGVyOwotCQllbHNlCi0JCQltc3JzLT5tdWx0aXBsZXhbaV0uYWRkciA9IDA7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBvcF9tdXhfc3dpdGNoX2N0cmwoc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICptb2RlbCwKIAkJCSAgICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CkBAIC05OCw3ICsxMjcsNyBAQAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKIAkJaW50IHZpcnQgPSBvcF94ODZfcGh5c190b192aXJ0KGkpOwotCQlpZiAoIWNvdW50ZXJfY29uZmlnW3ZpcnRdLmVuYWJsZWQpCisJCWlmICghcmVzZXRfdmFsdWVbdmlydF0pCiAJCQljb250aW51ZTsKIAkJcmRtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CiAJCXZhbCAmPSBtb2RlbC0+cmVzZXJ2ZWQ7CkBAIC0xMDcsMTAgKzEzNiw2IEBACiAJfQogfQogCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykgeyB9Ci0KICNlbmRpZgogCiAvKiBmdW5jdGlvbnMgZm9yIG9wX2FtZF9zcGVjICovCkBAIC0xMjIsMTggKzE0NywxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7IGkrKykgewogCQlpZiAocmVzZXJ2ZV9wZXJmY3RyX25taShNU1JfSzdfUEVSRkNUUjAgKyBpKSkKIAkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSBNU1JfSzdfUEVSRkNUUjAgKyBpOwotCQllbHNlCi0JCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gMDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xTOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfZXZudHNlbF9ubWkoTVNSX0s3X0VWTlRTRUwwICsgaSkpCiAJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX0s3X0VWTlRTRUwwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IDA7CiAJfQotCi0Jb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKG1zcnMpOwogfQogCiBzdGF0aWMgdm9pZCBvcF9hbWRfc2V0dXBfY3RycyhzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLApAQCAtMTQ0LDcgKzE2Myw4IEBACiAKIAkvKiBzZXR1cCByZXNldF92YWx1ZSAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVklSVF9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKQorCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZAorCQkgICAgJiYgbXNycy0+Y291bnRlcnNbb3BfeDg2X3ZpcnRfdG9fcGh5cyhpKV0uYWRkcikKIAkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CiAJCWVsc2UKIAkJCXJlc2V0X3ZhbHVlW2ldID0gMDsKQEAgLTE1Miw5ICsxNzIsMTggQEAKIAogCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTFM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKQorCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKSB7CisJCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCAmJiAhc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCS8qCisJCQkJICogY291bnRlciBpcyByZXNlcnZlZCwgdGhpcyBpcyBvbiBhbGwKKwkJCQkgKiBjcHVzLCBzbyByZXBvcnQgb25seSBmb3IgY3B1ICMwCisJCQkJICovCisJCQkJb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaSk7CiAJCQljb250aW51ZTsKKwkJfQogCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJaWYgKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKQorCQkJb3BfeDg2X3dhcm5faW5fdXNlKGkpOwogCQl2YWwgJj0gbW9kZWwtPnJlc2VydmVkOwogCQl3cm1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAl9CkBAIC0xNjksOSArMTk4LDcgQEAKIAkvKiBlbmFibGUgYWN0aXZlIGNvdW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CiAJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKLQkJaWYgKCFjb3VudGVyX2NvbmZpZ1t2aXJ0XS5lbmFibGVkKQotCQkJY29udGludWU7Ci0JCWlmICghbXNycy0+Y291bnRlcnNbaV0uYWRkcikKKwkJaWYgKCFyZXNldF92YWx1ZVt2aXJ0XSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIHNldHVwIGNvdW50ZXIgcmVnaXN0ZXJzICovCkBAIC0xODUsNyArMjEyLDYwIEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUworLyoKKyAqIDE2LWJpdCBMaW5lYXIgRmVlZGJhY2sgU2hpZnQgUmVnaXN0ZXIgKExGU1IpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgIDE2ICAgMTQgICAxMyAgICAxMQorICogRmVlZGJhY2sgcG9seW5vbWlhbCA9IFggICsgWCAgKyBYICArICBYICArIDEKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBsZnNyX3JhbmRvbSh2b2lkKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgbGZzcl92YWx1ZSA9IDB4RjAwRDsKKwl1bnNpZ25lZCBpbnQgYml0OworCisJLyogQ29tcHV0ZSBuZXh0IGJpdCB0byBzaGlmdCBpbiAqLworCWJpdCA9ICgobGZzcl92YWx1ZSA+PiAwKSBeCisJICAgICAgIChsZnNyX3ZhbHVlID4+IDIpIF4KKwkgICAgICAgKGxmc3JfdmFsdWUgPj4gMykgXgorCSAgICAgICAobGZzcl92YWx1ZSA+PiA1KSkgJiAweDAwMDE7CisKKwkvKiBBZHZhbmNlIHRvIG5leHQgcmVnaXN0ZXIgdmFsdWUgKi8KKwlsZnNyX3ZhbHVlID0gKGxmc3JfdmFsdWUgPj4gMSkgfCAoYml0IDw8IDE1KTsKKworCXJldHVybiBsZnNyX3ZhbHVlOworfQorCisvKgorICogSUJTIHNvZnR3YXJlIHJhbmRvbWl6YXRpb24KKyAqCisgKiBUaGUgSUJTIHBlcmlvZGljIG9wIGNvdW50ZXIgaXMgcmFuZG9taXplZCBpbiBzb2Z0d2FyZS4gVGhlIGxvd2VyIDEyCisgKiBiaXRzIG9mIHRoZSAyMCBiaXQgY291bnRlciBhcmUgcmFuZG9taXplZC4gSWJzT3BDdXJDbnQgaXMKKyAqIGluaXRpYWxpemVkIHdpdGggYSAxMiBiaXQgcmFuZG9tIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHU2NCBvcF9hbWRfcmFuZG9taXplX2lic19vcCh1NjQgdmFsKQoreworCXVuc2lnbmVkIGludCByYW5kb20gPSBsZnNyX3JhbmRvbSgpOworCisJaWYgKCEoaWJzX2NhcHMgJiBJQlNfQ0FQU19SRFdST1BDTlQpKQorCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBpZiB0aGUgaHcgY2FuIG5vdCB3cml0ZSB0byBJYnNPcEN1ckNudAorCQkgKgorCQkgKiBSYW5kb21pemUgdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgMTYgYml0CisJCSAqIElic09wTWF4Q250IFsxNTowXSB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgLTEyOCB0bworCQkgKiArMTI3IGJ5IGFkZGluZy9zdWJ0cmFjdGluZyBhbiBvZmZzZXQgdG8gdGhlCisJCSAqIG1heGltdW0gY291bnQgKElic09wTWF4Q250KS4KKwkJICoKKwkJICogVG8gYXZvaWQgb3ZlciBvciB1bmRlcmZsb3dzIGFuZCBwcm90ZWN0IHVwcGVyIGJpdHMKKwkJICogc3RhcnRpbmcgYXQgYml0IDE2LCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IKKwkJICogSWJzT3BNYXhDbnQgbXVzdCBmaXQgaW4gdGhlIHJhbmdlIGZyb20gMHgwMDgxIHRvCisJCSAqIDB4ZmY4MC4KKwkJICovCisJCXZhbCArPSAoczgpKHJhbmRvbSA+PiA0KTsKKwllbHNlCisJCXZhbCB8PSAodTY0KShyYW5kb20gJiBJQlNfUkFORE9NX01BU0spIDw8IDMyOworCisJcmV0dXJuIHZhbDsKK30KIAogc3RhdGljIGlubGluZSB2b2lkCiBvcF9hbWRfaGFuZGxlX2licyhzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCkBAIC0xOTQsNyArMjc0LDcgQEAKIAl1NjQgdmFsLCBjdGw7CiAJc3RydWN0IG9wX2VudHJ5IGVudHJ5OwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybjsKIAogCWlmIChpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKQEAgLTIzNiw4ICszMTYsNyBAQAogCQkJb3Byb2ZpbGVfd3JpdGVfY29tbWl0KCZlbnRyeSk7CiAKIAkJCS8qIHJlZW5hYmxlIHRoZSBJUlEgKi8KLQkJCWN0bCAmPSB+SUJTX09QX1ZBTCAmIDB4RkZGRkZGRkY7Ci0JCQljdGwgfD0gSUJTX09QX0VOQUJMRTsKKwkJCWN0bCA9IG9wX2FtZF9yYW5kb21pemVfaWJzX29wKGlic19vcF9jdGwpOwogCQkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgY3RsKTsKIAkJfQogCX0KQEAgLTI0Niw0MSArMzI1LDU3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb3BfYW1kX3N0YXJ0X2licyh2b2lkKQogewogCXU2NCB2YWw7Ci0JaWYgKGhhc19pYnMgJiYgaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKSB7CisKKwlpZiAoIWlic19jYXBzKQorCQlyZXR1cm47CisKKwlpZiAoaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKSB7CiAJCXZhbCA9IChpYnNfY29uZmlnLm1heF9jbnRfZmV0Y2ggPj4gNCkgJiAweEZGRkY7CiAJCXZhbCB8PSBpYnNfY29uZmlnLnJhbmRfZW4gPyBJQlNfRkVUQ0hfUkFORF9FTiA6IDA7CiAJCXZhbCB8PSBJQlNfRkVUQ0hfRU5BQkxFOwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCB2YWwpOwogCX0KIAotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcub3BfZW5hYmxlZCkgewotCQl2YWwgPSAoaWJzX2NvbmZpZy5tYXhfY250X29wID4+IDQpICYgMHhGRkZGOwotCQl2YWwgfD0gaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyA/IElCU19PUF9DTlRfQ1RMIDogMDsKLQkJdmFsIHw9IElCU19PUF9FTkFCTEU7CisJaWYgKGlic19jb25maWcub3BfZW5hYmxlZCkgeworCQlpYnNfb3BfY3RsID0gaWJzX2NvbmZpZy5tYXhfY250X29wID4+IDQ7CisJCWlmICghKGlic19jYXBzICYgSUJTX0NBUFNfUkRXUk9QQ05UKSkgeworCQkJLyoKKwkJCSAqIElic09wQ3VyQ250IG5vdCBzdXBwb3J0ZWQuICBTZWUKKwkJCSAqIG9wX2FtZF9yYW5kb21pemVfaWJzX29wKCkgZm9yIGRldGFpbHMuCisJCQkgKi8KKwkJCWlic19vcF9jdGwgPSBjbGFtcChpYnNfb3BfY3RsLCAweDAwODFVTEwsIDB4RkY4MFVMTCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhlIHN0YXJ0IHZhbHVlIGlzIHJhbmRvbWl6ZWQgd2l0aCBhCisJCQkgKiBwb3NpdGl2ZSBvZmZzZXQsIHdlIG5lZWQgdG8gY29tcGVuc2F0ZSBpdAorCQkJICogd2l0aCB0aGUgaGFsZiBvZiB0aGUgcmFuZG9taXplZCByYW5nZS4gQWxzbworCQkJICogYXZvaWQgdW5kZXJmbG93cy4KKwkJCSAqLworCQkJaWJzX29wX2N0bCA9IG1pbihpYnNfb3BfY3RsICsgSUJTX1JBTkRPTV9NQVhDTlRfT0ZGU0VULAorCQkJCQkgMHhGRkZGVUxMKTsKKwkJfQorCQlpZiAoaWJzX2NhcHMgJiBJQlNfQ0FQU19PUENOVCAmJiBpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzKQorCQkJaWJzX29wX2N0bCB8PSBJQlNfT1BfQ05UX0NUTDsKKwkJaWJzX29wX2N0bCB8PSBJQlNfT1BfRU5BQkxFOworCQl2YWwgPSBvcF9hbWRfcmFuZG9taXplX2lic19vcChpYnNfb3BfY3RsKTsKIAkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgdmFsKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIG9wX2FtZF9zdG9wX2licyh2b2lkKQogewotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkKKwlpZiAoIWlic19jYXBzKQorCQlyZXR1cm47CisKKwlpZiAoaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKQogCQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCAwKTsKIAotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcub3BfZW5hYmxlZCkKKwlpZiAoaWJzX2NvbmZpZy5vcF9lbmFibGVkKQogCQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU09QQ1RMLCAwKTsKIH0KIAotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9oYW5kbGVfaWJzKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKLQkJCQkgICAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcF9hbWRfc3RhcnRfaWJzKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9zdG9wX2licyh2b2lkKSB7IH0KLQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgb3BfYW1kX2NoZWNrX2N0cnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAogCQkJICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CkBAIC0zNTUsOCArNDUwLDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCi0KIHN0YXRpYyB1OCBpYnNfZWlsdnRfb2ZmOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbml0X2lic19ubWlfcGVyX2NwdSh2b2lkICphcmcpCkBAIC00MDUsNDUgKzQ5OCwzNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTlVNQQotCS8qIFNhbml0eSBjaGVjayAqLwotCS8qIFdvcmtzIG9ubHkgZm9yIDY0Yml0IHdpdGggcHJvcGVyIG51bWEgaW1wbGVtZW50YXRpb24uICovCi0JaWYgKG5vZGVzICE9IG51bV9wb3NzaWJsZV9ub2RlcygpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gc2V0dXAgQ1BVIG5vZGUocykgZm9yIElCUywgIgotCQkJImZvdW5kOiAlZCwgZXhwZWN0ZWQgJWQiLAotCQkJbm9kZXMsIG51bV9wb3NzaWJsZV9ub2RlcygpKTsKLQkJcmV0dXJuIDE7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKIC8qIHVuaW5pdGlhbGl6ZSB0aGUgQVBJQyBmb3IgdGhlIElCUyBpbnRlcnJ1cHRzIGlmIG5lZWRlZCAqLwogc3RhdGljIHZvaWQgY2xlYXJfaWJzX25taSh2b2lkKQogewotCWlmIChoYXNfaWJzKQorCWlmIChpYnNfY2FwcykKIAkJb25fZWFjaF9jcHUoYXBpY19jbGVhcl9pYnNfbm1pX3Blcl9jcHUsIE5VTEwsIDEpOwogfQogCiAvKiBpbml0aWFsaXplIHRoZSBBUElDIGZvciB0aGUgSUJTIGludGVycnVwdHMgaWYgYXZhaWxhYmxlICovCiBzdGF0aWMgdm9pZCBpYnNfaW5pdCh2b2lkKQogewotCWhhc19pYnMgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJTKTsKKwlpYnNfY2FwcyA9IGdldF9pYnNfY2FwcygpOwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybjsKIAogCWlmIChpbml0X2lic19ubWkoKSkgewotCQloYXNfaWJzID0gMDsKKwkJaWJzX2NhcHMgPSAwOwogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAib3Byb2ZpbGU6IEFNRCBJQlMgZGV0ZWN0ZWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBBTUQgSUJTIGRldGVjdGVkICgweCUwOHgpXG4iLAorCSAgICAgICAodW5zaWduZWQpaWJzX2NhcHMpOwogfQogCiBzdGF0aWMgdm9pZCBpYnNfZXhpdCh2b2lkKQogewotCWlmICghaGFzX2licykKKwlpZiAoIWlic19jYXBzKQogCQlyZXR1cm47CiAKIAljbGVhcl9pYnNfbm1pKCk7CkBAIC00NjMsNyArNTQ3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBtb2RlbCBzcGVjaWZpYyBmaWxlcyAqLwpAQCAtNDczLDcgKzU1Nyw3IEBACiAJaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkID0gMDsKIAlpYnNfY29uZmlnLm1heF9jbnRfb3AgPSAyNTAwMDA7CiAJaWJzX2NvbmZpZy5vcF9lbmFibGVkID0gMDsKLQlpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzID0gMTsKKwlpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzID0gMDsKIAogCWRpciA9IG9wcm9maWxlZnNfbWtkaXIoc2IsIHJvb3QsICJpYnNfZmV0Y2giKTsKIAlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZW5hYmxlIiwKQEAgLTQ4OCw4ICs1NzIsOSBAQAogCQkJCSZpYnNfY29uZmlnLm9wX2VuYWJsZWQpOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJtYXhfY291bnQiLAogCQkJCSZpYnNfY29uZmlnLm1heF9jbnRfb3ApOwotCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJkaXNwYXRjaGVkX29wcyIsCi0JCQkJJmlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMpOworCWlmIChpYnNfY2FwcyAmIElCU19DQVBTX09QQ05UKQorCQlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZGlzcGF0Y2hlZF9vcHMiLAorCQkJCQkmaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNywxOSArNTkyLDYgQEAKIAlpYnNfZXhpdCgpOwogfQogCi0jZWxzZQotCi0vKiBubyBJQlMgc3VwcG9ydCAqLwotCi1zdGF0aWMgaW50IG9wX2FtZF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG9wX2FtZF9leGl0KHZvaWQpIHt9Ci0KLSNlbmRpZiAvKiBDT05GSUdfT1BST0ZJTEVfSUJTICovCi0KIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9hbWRfc3BlYyA9IHsKIAkubnVtX2NvdW50ZXJzCQk9IE5VTV9DT1VOVEVSUywKIAkubnVtX2NvbnRyb2xzCQk9IE5VTV9DT05UUk9MUywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCmluZGV4IGFjNmIzNTQuLmU2YTE2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwpAQCAtMzk0LDEyICszOTQsNiBAQAogCXNldHVwX251bV9jb3VudGVycygpOwogCXN0YWcgPSBnZXRfc3RhZ2dlcigpOwogCi0JLyogaW5pdGlhbGl6ZSBzb21lIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkKLQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jb250cm9sczsgKytpKQotCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gMDsKLQogCS8qIHRoZSBjb3VudGVyICYgY2NjciByZWdpc3RlcnMgd2UgcGF5IGF0dGVudGlvbiB0byAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlhZGRyID0gcDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywgaSldLmNvdW50ZXJfYWRkcmVzczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwppbmRleCA4ZWIwNTg3Li41ZDE3MjdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCkBAIC0zNywxNSArMzcsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX1A2X1BFUkZDVFIwICsgaSkpCiAJCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gTVNSX1A2X1BFUkZDVFIwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgaSsrKSB7CiAJCWlmIChyZXNlcnZlX2V2bnRzZWxfbm1pKE1TUl9QNl9FVk5UU0VMMCArIGkpKQogCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IE1TUl9QNl9FVk5UU0VMMCArIGk7Ci0JCWVsc2UKLQkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSAwOwogCX0KIH0KIApAQCAtNTcsNyArNTMsNyBAQAogCWludCBpOwogCiAJaWYgKCFyZXNldF92YWx1ZSkgewotCQlyZXNldF92YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKHJlc2V0X3ZhbHVlWzBdKSAqIG51bV9jb3VudGVycywKKwkJcmVzZXRfdmFsdWUgPSBremFsbG9jKHNpemVvZihyZXNldF92YWx1ZVswXSkgKiBudW1fY291bnRlcnMsCiAJCQkJCUdGUF9BVE9NSUMpOwogCQlpZiAoIXJlc2V0X3ZhbHVlKQogCQkJcmV0dXJuOwpAQCAtODIsOSArNzgsMTggQEAKIAogCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKQorCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKSB7CisJCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCAmJiAhc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCS8qCisJCQkJICogY291bnRlciBpcyByZXNlcnZlZCwgdGhpcyBpcyBvbiBhbGwKKwkJCQkgKiBjcHVzLCBzbyByZXBvcnQgb25seSBmb3IgY3B1ICMwCisJCQkJICovCisJCQkJb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaSk7CiAJCQljb250aW51ZTsKKwkJfQogCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJaWYgKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKQorCQkJb3BfeDg2X3dhcm5faW5fdXNlKGkpOwogCQl2YWwgJj0gbW9kZWwtPnJlc2VydmVkOwogCQl3cm1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaCBiL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCmluZGV4IDdiOGU3NWQuLmZmODJhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCkBAIC01Nyw2ICs1NywyNiBAQAogCiBzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWc7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcF94ODZfd2Fybl9pbl91c2UoaW50IGNvdW50ZXIpCit7CisJLyoKKwkgKiBUaGUgd2FybmluZyBpbmRpY2F0ZXMgYW4gYWxyZWFkeSBydW5uaW5nIGNvdW50ZXIuIElmCisJICogb3Byb2ZpbGUgZG9lc24ndCBjb2xsZWN0IGRhdGEsIHRoZW4gdHJ5IHVzaW5nIGEgZGlmZmVyZW50CisJICogcGVyZm9ybWFuY2UgY291bnRlciBvbiB5b3VyIHBsYXRmb3JtIHRvIG1vbml0b3IgdGhlIGRlc2lyZWQKKwkgKiBldmVudC4gRGVsZXRlIGNvdW50ZXIgIyVkIGZyb20gdGhlIGRlc2lyZWQgZXZlbnQgYnkgZWRpdGluZworCSAqIHRoZSAvdXNyL3NoYXJlL29wcm9maWxlLyVzLzxjcHU+L2V2ZW50cyBmaWxlLiBJZiB0aGUgZXZlbnQKKwkgKiBjYW5ub3QgYmUgbW9uaXRvcmVkIGJ5IGFueSBvdGhlciBjb3VudGVyLCBjb250YWN0IHlvdXIKKwkgKiBoYXJkd2FyZSBvciBCSU9TIHZlbmRvci4KKwkgKi8KKwlwcl93YXJuaW5nKCJvcHJvZmlsZTogY291bnRlciAjJWQgb24gY3B1ICMlZCBtYXkgYWxyZWFkeSBiZSB1c2VkXG4iLAorCQkgICBjb3VudGVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaW50IGNvdW50ZXIpCit7CisJcHJfd2FybmluZygib3Byb2ZpbGU6IGNvdW50ZXIgIyVkIGlzIGFscmVhZHkgcmVzZXJ2ZWRcbiIsIGNvdW50ZXIpOworfQorCiBleHRlcm4gdTY0IG9wX3g4Nl9nZXRfY3RybChzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLAogCQkJICAgc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjb3VudGVyX2NvbmZpZyk7CiBleHRlcm4gaW50IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaW50IHBoeXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2FjcGkuYyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKaW5kZXggOTU5ZTU0OC4uNWYxMWZmNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2FjcGkuYworKysgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCkBAIC0xNSw2ICsxNSw1MSBAQAogCWludCBidXNudW07CiB9OwogCitzdGF0aWMgYm9vbCBwY2lfdXNlX2NycyA9IHRydWU7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldF91c2VfY3JzKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlwY2lfdXNlX2NycyA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBwY2lfdXNlX2Nyc190YWJsZVtdIF9faW5pdGNvbnN0ID0geworCS8qIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4MyAqLworCXsKKwkJLmNhbGxiYWNrID0gc2V0X3VzZV9jcnMsCisJCS5pZGVudCA9ICJJQk0gU3lzdGVtIHgzODAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJJQk0iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAieDM4MDAiKSwKKwkJfSwKKwl9LAorCXt9Cit9OworCit2b2lkIF9faW5pdCBwY2lfYWNwaV9jcnNfcXVpcmtzKHZvaWQpCit7CisJaW50IHllYXI7CisKKwlpZiAoZG1pX2dldF9kYXRlKERNSV9CSU9TX0RBVEUsICZ5ZWFyLCBOVUxMLCBOVUxMKSAmJiB5ZWFyIDwgMjAwOCkKKwkJcGNpX3VzZV9jcnMgPSBmYWxzZTsKKworCWRtaV9jaGVja19zeXN0ZW0ocGNpX3VzZV9jcnNfdGFibGUpOworCisJLyoKKwkgKiBJZiB0aGUgdXNlciBzcGVjaWZpZXMgInBjaT11c2VfY3JzIiBvciAicGNpPW5vY3JzIiBleHBsaWNpdGx5LCB0aGF0CisJICogdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFueXRoaW5nIHdlIGZpZ3VyZWQgb3V0IGFib3ZlLgorCSAqLworCWlmIChwY2lfcHJvYmUgJiBQQ0lfUk9PVF9OT19DUlMpCisJCXBjaV91c2VfY3JzID0gZmFsc2U7CisJZWxzZSBpZiAocGNpX3Byb2JlICYgUENJX1VTRV9fQ1JTKQorCQlwY2lfdXNlX2NycyA9IHRydWU7CisKKwlwcmludGsoS0VSTl9JTkZPICJQQ0k6ICVzIGhvc3QgYnJpZGdlIHdpbmRvd3MgZnJvbSBBQ1BJOyAiCisJICAgICAgICJpZiBuZWNlc3NhcnksIHVzZSBcInBjaT0lc1wiIGFuZCByZXBvcnQgYSBidWdcbiIsCisJICAgICAgIHBjaV91c2VfY3JzID8gIlVzaW5nIiA6ICJJZ25vcmluZyIsCisJICAgICAgIHBjaV91c2VfY3JzID8gIm5vY3JzIiA6ICJ1c2VfY3JzIik7Cit9CisKIHN0YXRpYyBhY3BpX3N0YXR1cwogcmVzb3VyY2VfdG9fYWRkcihzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsCiAJCQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQgKmFkZHIpCkBAIC00NSwyMCArOTAsNiBAQAogCXJldHVybiBBRV9PSzsKIH0KIAotc3RhdGljIGludAotYnVzX2hhc190cmFuc3BhcmVudF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7Ci0JCXUxNiBjbGFzcyA9IGRldi0+Y2xhc3MgPj4gODsKLQotCQlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX0JSSURHRV9QQ0kgJiYgZGV2LT50cmFuc3BhcmVudCkKLQkJCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lkCiBhbGlnbl9yZXNvdXJjZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmJyaWRnZSwgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CkBAIC05MiwxMiArMTIzLDggQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJvb3Q7Ci0JaW50IG1heF9yb290X2J1c19yZXNvdXJjZXMgPSBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7CiAJdTY0IHN0YXJ0LCBlbmQ7CiAKLQlpZiAoYnVzX2hhc190cmFuc3BhcmVudF9icmlkZ2UoaW5mby0+YnVzKSkKLQkJbWF4X3Jvb3RfYnVzX3Jlc291cmNlcyAtPSAzOwotCiAJc3RhdHVzID0gcmVzb3VyY2VfdG9fYWRkcihhY3BpX3JlcywgJmFkZHIpOwogCWlmICghQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCXJldHVybiBBRV9PSzsKQEAgLTExNSwxNSArMTQyLDYgQEAKIAogCXN0YXJ0ID0gYWRkci5taW5pbXVtICsgYWRkci50cmFuc2xhdGlvbl9vZmZzZXQ7CiAJZW5kID0gc3RhcnQgKyBhZGRyLmFkZHJlc3NfbGVuZ3RoIC0gMTsKLQlpZiAoaW5mby0+cmVzX251bSA+PSBtYXhfcm9vdF9idXNfcmVzb3VyY2VzKSB7Ci0JCWlmIChwY2lfcHJvYmUgJiBQQ0lfVVNFX19DUlMpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0k6IEZhaWxlZCB0byBhbGxvY2F0ZSAiCi0JCQkgICAgICAgIjB4JWx4LTB4JWx4IGZyb20gJXMgZm9yICVzIGR1ZSB0byBfQ1JTICIKLQkJCSAgICAgICAicmV0dXJuaW5nIG1vcmUgdGhhbiAlZCByZXNvdXJjZSBkZXNjcmlwdG9yc1xuIiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgc3RhcnQsICh1bnNpZ25lZCBsb25nKSBlbmQsCi0JCQkgICAgICAgcm9vdC0+bmFtZSwgaW5mby0+bmFtZSwgbWF4X3Jvb3RfYnVzX3Jlc291cmNlcyk7Ci0JCXJldHVybiBBRV9PSzsKLQl9CiAKIAlyZXMgPSAmaW5mby0+cmVzW2luZm8tPnJlc19udW1dOwogCXJlcy0+bmFtZSA9IGluZm8tPm5hbWU7CkBAIC0xMzMsNyArMTUxLDcgQEAKIAlyZXMtPmNoaWxkID0gTlVMTDsKIAlhbGlnbl9yZXNvdXJjZShpbmZvLT5icmlkZ2UsIHJlcyk7CiAKLQlpZiAoIShwY2lfcHJvYmUgJiBQQ0lfVVNFX19DUlMpKSB7CisJaWYgKCFwY2lfdXNlX2NycykgewogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZpbmZvLT5icmlkZ2UtPmRldiwKIAkJCSAgICJob3N0IGJyaWRnZSB3aW5kb3cgJXBSIChpZ25vcmVkKVxuIiwgcmVzKTsKIAkJcmV0dXJuIEFFX09LOwpAQCAtMTQzLDcgKzE2MSw3IEBACiAJCWRldl9lcnIoJmluZm8tPmJyaWRnZS0+ZGV2LAogCQkJImNhbid0IGFsbG9jYXRlIGhvc3QgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CiAJfSBlbHNlIHsKLQkJaW5mby0+YnVzLT5yZXNvdXJjZVtpbmZvLT5yZXNfbnVtXSA9IHJlczsKKwkJcGNpX2J1c19hZGRfcmVzb3VyY2UoaW5mby0+YnVzLCByZXMsIDApOwogCQlpbmZvLT5yZXNfbnVtKys7CiAJCWlmIChhZGRyLnRyYW5zbGF0aW9uX29mZnNldCkKIAkJCWRldl9pbmZvKCZpbmZvLT5icmlkZ2UtPmRldiwgImhvc3QgYnJpZGdlIHdpbmRvdyAlcFIgIgpAQCAtMTY0LDEwICsxODIsOCBAQAogCXN0cnVjdCBwY2lfcm9vdF9pbmZvIGluZm87CiAJc2l6ZV90IHNpemU7CiAKLQlpZiAoIShwY2lfcHJvYmUgJiBQQ0lfVVNFX19DUlMpKQotCQlkZXZfaW5mbygmZGV2aWNlLT5kZXYsCi0JCQkgImlnbm9yaW5nIGhvc3QgYnJpZGdlIHdpbmRvd3MgZnJvbSBBQ1BJOyAiCi0JCQkgImJvb3Qgd2l0aCBcInBjaT11c2VfY3JzXCIgdG8gdXNlIHRoZW1cbiIpOworCWlmIChwY2lfdXNlX2NycykKKwkJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGJ1cyk7CiAKIAlpbmZvLmJyaWRnZSA9IGRldmljZTsKIAlpbmZvLmJ1cyA9IGJ1czsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKaW5kZXggZjkzOWQ2MC4uMTJkNTRmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKKysrIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKQEAgLTM2LDEzICszNiwxNCBAQAogCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHBlZXIgcm9vdCBidXMgJTAyeCByZXMgdXBkYXRlZCBmcm9tIHBjaSBjb25mXG4iLAogCQkJYi0+bnVtYmVyKTsKIAorCXBjaV9idXNfcmVtb3ZlX3Jlc291cmNlcyhiKTsKIAlpbmZvID0gJnBjaV9yb290X2luZm9baV07CiAJZm9yIChqID0gMDsgaiA8IGluZm8tPnJlc19udW07IGorKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAkJc3RydWN0IHJlc291cmNlICpyb290OwogCiAJCXJlcyA9ICZpbmZvLT5yZXNbal07Ci0JCWItPnJlc291cmNlW2pdID0gcmVzOworCQlwY2lfYnVzX2FkZF9yZXNvdXJjZShiLCByZXMsIDApOwogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCQlyb290ID0gJmlvcG9ydF9yZXNvdXJjZTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmggYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaAppbmRleCBhZGJjMjNmLi43MzFiNjRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaAorKysgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaApAQCAtMiw4ICsyLDcgQEAKIAogLyoKICAqIHN1YiBidXMgKHRyYW5zcGFyZW50KSB3aWxsIHVzZSBlbnRyZXMgZnJvbSAzIHRvIHN0b3JlIGV4dHJhIGZyb20KLSAqIHJvb3QsIHNvIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHNsb3QgdGhlcmUsIFNob3VsZCB3ZQotICogaW5jcmVhc2UgUENJX0JVU19OVU1fUkVTT1VSQ0VTPworICogcm9vdCwgc28gbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc2xvdCB0aGVyZS4KICAqLwogI2RlZmluZSBSRVNfTlVNIDE2CiBzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKaW5kZXggZDI1NTJjNi4uMzczNjE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwpAQCAtNTIwLDYgKzUyMCw5IEBACiAJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgInVzZV9jcnMiKSkgewogCQlwY2lfcHJvYmUgfD0gUENJX1VTRV9fQ1JTOwogCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9jcnMiKSkgeworCQlwY2lfcHJvYmUgfD0gUENJX1JPT1RfTk9fQ1JTOworCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiZWFybHlkdW1wIikpIHsKIAkJcGNpX2Vhcmx5X2R1bXBfcmVncyA9IDE7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2kzODYuYyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKaW5kZXggNWRjOWU4Yy4uNWE4ZmJmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC02MCwyMiArNjAsMjAgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogCQlpZiAoc2tpcF9pc2FfaW9yZXNvdXJjZV9hbGlnbihkZXYpKQotCQkJcmV0dXJuOwotCQlpZiAoc3RhcnQgJiAweDMwMCkgeworCQkJcmV0dXJuIHN0YXJ0OworCQlpZiAoc3RhcnQgJiAweDMwMCkKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9CiAJfQorCXJldHVybiBzdGFydDsKIH0KIEVYUE9SVF9TWU1CT0wocGNpYmlvc19hbGlnbl9yZXNvdXJjZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pcnEuYyBiL2FyY2gveDg2L3BjaS9pcnEuYwppbmRleCAwNjk2ZDUwLi5iMDJmNmQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC94ODYvcGNpL2lycS5jCkBAIC01OTAsNiArNTkwLDggQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMjoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfQ1BUX0xQQzE6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMyOgogCQlyLT5uYW1lID0gIlBJSVgvSUNIIjsKIAkJci0+Z2V0ID0gcGlycV9waWl4X2dldDsKIAkJci0+c2V0ID0gcGlycV9waWl4X3NldDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwppbmRleCBiMTlkMWU1Li44ZjNmOWE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKKysrIGIvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCkBAIC0zMDMsMjIgKzMwMywxNyBAQAogewogCXN0cnVjdCBwY2lfbW1jZmdfcmVnaW9uICpjZmcsICpjZmd4OwogCi0JLyogbGFzdCBvbmUqLwotCWNmZyA9IGxpc3RfZW50cnkocGNpX21tY2ZnX2xpc3QucHJldiwgdHlwZW9mKCpjZmcpLCBsaXN0KTsKLQlpZiAoY2ZnKQotCQlpZiAoY2ZnLT5lbmRfYnVzIDwgY2ZnLT5zdGFydF9idXMpCi0JCQljZmctPmVuZF9idXMgPSAyNTU7Ci0KLQlpZiAobGlzdF9pc19zaW5ndWxhcigmcGNpX21tY2ZnX2xpc3QpKQotCQlyZXR1cm47Ci0KLQkvKiBkb24ndCBvdmVybGFwIHBsZWFzZSAqLworCS8qIEZpeHVwIG92ZXJsYXBzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjZmcsICZwY2lfbW1jZmdfbGlzdCwgbGlzdCkgewogCQlpZiAoY2ZnLT5lbmRfYnVzIDwgY2ZnLT5zdGFydF9idXMpCiAJCQljZmctPmVuZF9idXMgPSAyNTU7CiAKKwkJLyogRG9uJ3QgYWNjZXNzIHRoZSBsaXN0IGhlYWQgISAqLworCQlpZiAoY2ZnLT5saXN0Lm5leHQgPT0gJnBjaV9tbWNmZ19saXN0KQorCQkJYnJlYWs7CisKIAkJY2ZneCA9IGxpc3RfZW50cnkoY2ZnLT5saXN0Lm5leHQsIHR5cGVvZigqY2ZnKSwgbGlzdCk7Ci0JCWlmIChjZmcgIT0gY2ZneCAmJiBjZmctPmVuZF9idXMgPj0gY2ZneC0+c3RhcnRfYnVzKQorCQlpZiAoY2ZnLT5lbmRfYnVzID49IGNmZ3gtPnN0YXJ0X2J1cykKIAkJCWNmZy0+ZW5kX2J1cyA9IGNmZ3gtPnN0YXJ0X2J1cyAtIDE7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL251bWFxXzMyLmMgYi9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYwppbmRleCA4ZWIyOTVlLi44ODg0YTFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYworKysgYi9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYwpAQCAtOCw5ICs4LDcgQEAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgotCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19CQVNFIDB4ZmU0MDAwMDAKLSNkZWZpbmUgWFFVQURfUE9SVElPX1FVQUQgMHg0MDAwMCAgLyogMjU2ayBwZXIgcXVhZC4gKi8KKyNpbmNsdWRlIDxhc20vbnVtYXEuaD4KIAogI2RlZmluZSBCVVMyUVVBRChnbG9iYWwpIChtcF9idXNfaWRfdG9fbm9kZVtnbG9iYWxdKQogCkBAIC0xOCw4ICsxNiw2IEBACiAKICNkZWZpbmUgUVVBRExPQ0FMMkJVUyhxdWFkLGxvY2FsKSAocXVhZF9sb2NhbF90b19tcF9idXNfaWRbcXVhZF1bbG9jYWxdKQogCi0jZGVmaW5lIFhRVUFEX1BPUlRfQUREUihwb3J0LCBxdWFkKSAoeHF1YWRfcG9ydGlvICsgKFhRVUFEX1BPUlRJT19RVUFEKnF1YWQpICsgcG9ydCkKLQogI2RlZmluZSBQQ0lfQ09ORjFfTVFfQUREUkVTUyhidXMsIGRldmZuLCByZWcpIFwKIAkoMHg4MDAwMDAwMCB8IChCVVMyTE9DQUwoYnVzKSA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAocmVnICYgfjMpKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYyBiL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCmluZGV4IGJlZThkNmEuLjEzNDAzZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCisrKyBiL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCkBAIC00Myw3ICs0Myw3IEBACiBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IG9iamR1bXAgLWQgYS5vdXQgfCBhd2sgLWYgZGlzdGlsbC5hd2sgfCIKLQkJIiAlcyBbLXl8LW5dIFstdl0gXG4iLCBwcm9nKTsKKwkJIiAlcyBbLXl8LW5dIFstdl1cbiIsIHByb2cpOwogCWZwcmludGYoc3RkZXJyLCAiXHQteQk2NGJpdCBtb2RlXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LW4JMzJiaXQgbW9kZVxuIik7CiAJZnByaW50ZihzdGRlcnIsICJcdC12CXZlcmJvc2UgbW9kZVxuIik7CkBAIC02OSw3ICs2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGR1bXBfaW5zbihGSUxFICpmcCwgc3RydWN0IGluc24gKmluc24pCiB7Ci0JZnByaW50ZihmcCwgIkluc3RydWN0aW9uID0geyBcbiIpOworCWZwcmludGYoZnAsICJJbnN0cnVjdGlvbiA9IHtcbiIpOwogCWR1bXBfZmllbGQoZnAsICJwcmVmaXhlcyIsICJcdCIsCSZpbnNuLT5wcmVmaXhlcyk7CiAJZHVtcF9maWVsZChmcCwgInJleF9wcmVmaXgiLCAiXHQiLAkmaW5zbi0+cmV4X3ByZWZpeCk7CiAJZHVtcF9maWVsZChmcCwgInZleF9wcmVmaXgiLCAiXHQiLAkmaW5zbi0+dmV4X3ByZWZpeCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMKaW5kZXggYjdjMDczNC4uY2QxMDI2OSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wY2kuYwpAQCAtNjksMjYgKzY5LDI1IEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKLSAgICAJCSAgICAgICByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogCQlpZiAoc2l6ZSA+IDB4MTAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogSS9PIFJlZ2lvbiAlcy8lZCB0b28gbGFyZ2UiCiAJCQkgICAgICAgIiAoJWxkIGJ5dGVzKVxuIiwgcGNpX25hbWUoZGV2KSwKIAkJCSAgICAgICBkZXYtPnJlc291cmNlIC0gcmVzLCBzaXplKTsKIAkJfQogCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7CisJCWlmIChzdGFydCAmIDB4MzAwKQogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KIAl9CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IDFmYTI2NTQuLmU3ZGJiYWYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYworKysgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTE0NywxNiArMTQ3LDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJYmxrY2cgPSBjZ3JvdXBfdG9fYmxraW9fY2dyb3VwKGNncm91cCk7CisJc3Bpbl9sb2NrKCZibGtpb19saXN0X2xvY2spOwogCXNwaW5fbG9ja19pcnEoJmJsa2NnLT5sb2NrKTsKIAlibGtjZy0+d2VpZ2h0ID0gKHVuc2lnbmVkIGludCl2YWw7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgbiwgJmJsa2NnLT5ibGtnX2xpc3QsIGJsa2NnX25vZGUpIHsKLQkJc3Bpbl9sb2NrKCZibGtpb19saXN0X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2lvcCwgJmJsa2lvX2xpc3QsIGxpc3QpCiAJCQlibGtpb3AtPm9wcy5ibGtpb191cGRhdGVfZ3JvdXBfd2VpZ2h0X2ZuKGJsa2csCiAJCQkJCWJsa2NnLT53ZWlnaHQpOwotCQlzcGluX3VubG9jaygmYmxraW9fbGlzdF9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZibGtjZy0+bG9jayk7CisJc3Bpbl91bmxvY2soJmJsa2lvX2xpc3RfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDcxODg5N2U2Li5kMWE5YTBhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTExNDcsNyArMTE0Nyw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBxdWV1ZV9zaG91bGRfcGx1ZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlyZXR1cm4gIShibGtfcXVldWVfbm9ucm90KHEpICYmIGJsa19xdWV1ZV9xdWV1aW5nKHEpKTsKKwlyZXR1cm4gIShibGtfcXVldWVfbm9ucm90KHEpICYmIGJsa19xdWV1ZV90YWdnZWQocSkpOwogfQogCiBzdGF0aWMgaW50IF9fbWFrZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCkBAIC0xODU5LDE1ICsxODU5LDggQEAKIAkgKiBhbmQgdG8gaXQgaXMgZnJlZWQgaXMgYWNjb3VudGVkIGFzIGlvIHRoYXQgaXMgaW4gcHJvZ3Jlc3MgYXQKIAkgKiB0aGUgZHJpdmVyIHNpZGUuCiAJICovCi0JaWYgKGJsa19hY2NvdW50X3JxKHJxKSkgeworCWlmIChibGtfYWNjb3VudF9ycShycSkpCiAJCXEtPmluX2ZsaWdodFtycV9pc19zeW5jKHJxKV0rKzsKLQkJLyoKLQkJICogTWFyayB0aGlzIGRldmljZSBhcyBzdXBwb3J0aW5nIGhhcmR3YXJlIHF1ZXVpbmcsIGlmCi0JCSAqIHdlIGhhdmUgbW9yZSBJT3MgaW4gZmxpZ2h0IHRoYW4gNC4KLQkJICovCi0JCWlmICghYmxrX3F1ZXVlX3F1ZXVpbmcocSkgJiYgcXVldWVfaW5fZmxpZ2h0KHEpID4gNCkKLQkJCXNldF9iaXQoUVVFVUVfRkxBR19DUSwgJnEtPnF1ZXVlX2ZsYWdzKTsKLQl9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggZWUxMzBmMS4uMDIzZjRlNiAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC00MiwxNiArNDIsMTMgQEAKICAqLwogI2RlZmluZSBDRlFfTUlOX1RUCQkoMikKIAotLyoKLSAqIEFsbG93IG1lcmdlZCBjZnFxcyB0byBwZXJmb3JtIHRoaXMgYW1vdW50IG9mIHNlZWt5IEkvTyBiZWZvcmUKLSAqIGRlY2lkaW5nIHRvIGJyZWFrIHRoZSBxdWV1ZXMgdXAgYWdhaW4uCi0gKi8KLSNkZWZpbmUgQ0ZRUV9DT09QX1RPVVQJCShIWikKLQogI2RlZmluZSBDRlFfU0xJQ0VfU0NBTEUJCSg1KQogI2RlZmluZSBDRlFfSFdfUVVFVUVfTUlOCSg1KQogI2RlZmluZSBDRlFfU0VSVklDRV9TSElGVCAgICAgICAxMgogCisjZGVmaW5lIENGUVFfU0VFS19USFIJCTggKiAxMDI0CisjZGVmaW5lIENGUVFfU0VFS1koY2ZxcSkJKChjZnFxKS0+c2Vla19tZWFuID4gQ0ZRUV9TRUVLX1RIUikKKwogI2RlZmluZSBSUV9DSUMocnEpCQlcCiAJKChzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKikgKHJxKS0+ZWxldmF0b3JfcHJpdmF0ZSkKICNkZWZpbmUgUlFfQ0ZRUShycSkJCShzdHJ1Y3QgY2ZxX3F1ZXVlICopICgocnEpLT5lbGV2YXRvcl9wcml2YXRlMikKQEAgLTEzNyw3ICsxMzQsNiBAQAogCXU2NCBzZWVrX3RvdGFsOwogCXNlY3Rvcl90IHNlZWtfbWVhbjsKIAlzZWN0b3JfdCBsYXN0X3JlcXVlc3RfcG9zOwotCXVuc2lnbmVkIGxvbmcgc2Vla3lfc3RhcnQ7CiAKIAlwaWRfdCBwaWQ7CiAKQEAgLTMxNCw2ICszMTAsNyBAQAogCUNGUV9DRlFRX0ZMQUdfc2xpY2VfbmV3LAkvKiBubyByZXF1ZXN0cyBkaXNwYXRjaGVkIGluIHNsaWNlICovCiAJQ0ZRX0NGUVFfRkxBR19zeW5jLAkJLyogc3luY2hyb25vdXMgcXVldWUgKi8KIAlDRlFfQ0ZRUV9GTEFHX2Nvb3AsCQkvKiBjZnFxIGlzIHNoYXJlZCAqLworCUNGUV9DRlFRX0ZMQUdfc3BsaXRfY29vcCwJLyogc2hhcmVkIGNmcXEgd2lsbCBiZSBzcGxpdHRlZCAqLwogCUNGUV9DRlFRX0ZMQUdfZGVlcCwJCS8qIHN5bmMgY2ZxcSBleHBlcmllbmNlZCBsYXJnZSBkZXB0aCAqLwogCUNGUV9DRlFRX0ZMQUdfd2FpdF9idXN5LAkvKiBXYWl0aW5nIGZvciBuZXh0IHJlcXVlc3QgKi8KIH07CkBAIC0zNDIsNiArMzM5LDcgQEAKIENGUV9DRlFRX0ZOUyhzbGljZV9uZXcpOwogQ0ZRX0NGUVFfRk5TKHN5bmMpOwogQ0ZRX0NGUVFfRk5TKGNvb3ApOworQ0ZRX0NGUVFfRk5TKHNwbGl0X2Nvb3ApOwogQ0ZRX0NGUVFfRk5TKGRlZXApOwogQ0ZRX0NGUVFfRk5TKHdhaXRfYnVzeSk7CiAjdW5kZWYgQ0ZRX0NGUVFfRk5TCkBAIC0xNTY2LDYgKzE1NjQsMTUgQEAKIAljZnFfY2xlYXJfY2ZxcV93YWl0X2J1c3koY2ZxcSk7CiAKIAkvKgorCSAqIElmIHRoaXMgY2ZxcSBpcyBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBwcm9jZXNzZXMsIGNoZWNrIHRvCisJICogbWFrZSBzdXJlIHRoYXQgdGhvc2UgcHJvY2Vzc2VzIGFyZSBzdGlsbCBpc3N1aW5nIEkvT3Mgd2l0aGluCisJICogdGhlIG1lYW4gc2VlayBkaXN0YW5jZS4gIElmIG5vdCwgaXQgbWF5IGJlIHRpbWUgdG8gYnJlYWsgdGhlCisJICogcXVldWVzIGFwYXJ0IGFnYWluLgorCSAqLworCWlmIChjZnFfY2ZxcV9jb29wKGNmcXEpICYmIENGUVFfU0VFS1koY2ZxcSkpCisJCWNmcV9tYXJrX2NmcXFfc3BsaXRfY29vcChjZnFxKTsKKworCS8qCiAJICogc3RvcmUgd2hhdCB3YXMgbGVmdCBvZiB0aGlzIHNsaWNlLCBpZiB0aGUgcXVldWUgaWRsZWQvdGltZWQgb3V0CiAJICovCiAJaWYgKHRpbWVkX291dCAmJiAhY2ZxX2NmcXFfc2xpY2VfbmV3KGNmcXEpKSB7CkBAIC0xNjYzLDkgKzE2NzAsNiBAQAogCQlyZXR1cm4gY2ZxZC0+bGFzdF9wb3NpdGlvbiAtIGJsa19ycV9wb3MocnEpOwogfQogCi0jZGVmaW5lIENGUVFfU0VFS19USFIJCTggKiAxMDI0Ci0jZGVmaW5lIENGUVFfU0VFS1koY2ZxcSkJKChjZnFxKS0+c2Vla19tZWFuID4gQ0ZRUV9TRUVLX1RIUikKLQogc3RhdGljIGlubGluZSBpbnQgY2ZxX3JxX2Nsb3NlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwKIAkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJvb2wgZm9yX3ByZWVtcHQpCiB7CkBAIC0xODAzLDcgKzE4MDcsNyBAQAogCSAqIE90aGVyd2lzZSwgd2UgZG8gb25seSBpZiB0aGV5IGFyZSB0aGUgbGFzdCBvbmVzCiAJICogaW4gdGhlaXIgc2VydmljZSB0cmVlLgogCSAqLwotCXJldHVybiBzZXJ2aWNlX3RyZWUtPmNvdW50ID09IDE7CisJcmV0dXJuIHNlcnZpY2VfdHJlZS0+Y291bnQgPT0gMSAmJiBjZnFfY2ZxcV9zeW5jKGNmcXEpOwogfQogCiBzdGF0aWMgdm9pZCBjZnFfYXJtX3NsaWNlX3RpbWVyKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCkKQEAgLTMwMDAsMTkgKzMwMDQsNiBAQAogCXRvdGFsID0gY2ZxcS0+c2Vla190b3RhbCArIChjZnFxLT5zZWVrX3NhbXBsZXMvMik7CiAJZG9fZGl2KHRvdGFsLCBjZnFxLT5zZWVrX3NhbXBsZXMpOwogCWNmcXEtPnNlZWtfbWVhbiA9IChzZWN0b3JfdCl0b3RhbDsKLQotCS8qCi0JICogSWYgdGhpcyBjZnFxIGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHByb2Nlc3NlcywgY2hlY2sgdG8KLQkgKiBtYWtlIHN1cmUgdGhhdCB0aG9zZSBwcm9jZXNzZXMgYXJlIHN0aWxsIGlzc3VpbmcgSS9PcyB3aXRoaW4KLQkgKiB0aGUgbWVhbiBzZWVrIGRpc3RhbmNlLiAgSWYgbm90LCBpdCBtYXkgYmUgdGltZSB0byBicmVhayB0aGUKLQkgKiBxdWV1ZXMgYXBhcnQgYWdhaW4uCi0JICovCi0JaWYgKGNmcV9jZnFxX2Nvb3AoY2ZxcSkpIHsKLQkJaWYgKENGUVFfU0VFS1koY2ZxcSkgJiYgIWNmcXEtPnNlZWt5X3N0YXJ0KQotCQkJY2ZxcS0+c2Vla3lfc3RhcnQgPSBqaWZmaWVzOwotCQllbHNlIGlmICghQ0ZRUV9TRUVLWShjZnFxKSkKLQkJCWNmcXEtPnNlZWt5X3N0YXJ0ID0gMDsKLQl9CiB9CiAKIC8qCkBAIC0zNDUzLDE0ICszNDQ0LDYgQEAKIAlyZXR1cm4gY2ljX3RvX2NmcXEoY2ljLCAxKTsKIH0KIAotc3RhdGljIGludCBzaG91bGRfc3BsaXRfY2ZxcShzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQotewotCWlmIChjZnFxLT5zZWVreV9zdGFydCAmJgotCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGNmcXEtPnNlZWt5X3N0YXJ0ICsgQ0ZRUV9DT09QX1RPVVQpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFJldHVybnMgTlVMTCBpZiBhIG5ldyBjZnFxIHNob3VsZCBiZSBhbGxvY2F0ZWQsIG9yIHRoZSBvbGQgY2ZxcSBpZiB0aGlzCiAgKiB3YXMgdGhlIGxhc3QgcHJvY2VzcyByZWZlcnJpbmcgdG8gc2FpZCBjZnFxLgpAQCAtMzQ2OSw5ICszNDUyLDkgQEAKIHNwbGl0X2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJaWYgKGNmcXFfcHJvY2Vzc19yZWZzKGNmcXEpID09IDEpIHsKLQkJY2ZxcS0+c2Vla3lfc3RhcnQgPSAwOwogCQljZnFxLT5waWQgPSBjdXJyZW50LT5waWQ7CiAJCWNmcV9jbGVhcl9jZnFxX2Nvb3AoY2ZxcSk7CisJCWNmcV9jbGVhcl9jZnFxX3NwbGl0X2Nvb3AoY2ZxcSk7CiAJCXJldHVybiBjZnFxOwogCX0KIApAQCAtMzUxMCw3ICszNDkzLDcgQEAKIAkJLyoKIAkJICogSWYgdGhlIHF1ZXVlIHdhcyBzZWVreSBmb3IgdG9vIGxvbmcsIGJyZWFrIGl0IGFwYXJ0LgogCQkgKi8KLQkJaWYgKGNmcV9jZnFxX2Nvb3AoY2ZxcSkgJiYgc2hvdWxkX3NwbGl0X2NmcXEoY2ZxcSkpIHsKKwkJaWYgKGNmcV9jZnFxX2Nvb3AoY2ZxcSkgJiYgY2ZxX2NmcXFfc3BsaXRfY29vcChjZnFxKSkgewogCQkJY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJicmVha2luZyBhcGFydCBjZnFxIik7CiAJCQljZnFxID0gc3BsaXRfY2ZxcShjaWMsIGNmcXEpOwogCQkJaWYgKCFjZnFxKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCA4MWMxODVhLi42YTJlMjk1IDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtMTE0LDYgKzExNCwxNiBAQAogCWhlbHAKIAkgIFRoZXNlIGFyZSAnTnVsbCcgYWxnb3JpdGhtcywgdXNlZCBieSBJUHNlYywgd2hpY2ggZG8gbm90aGluZy4KIAorY29uZmlnIENSWVBUT19QQ1JZUFQKKwl0cmlzdGF0ZSAiUGFyYWxsZWwgY3J5cHRvIGVuZ2luZSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFNNUCAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgUEFEQVRBCisJc2VsZWN0IENSWVBUT19NQU5BR0VSCisJc2VsZWN0IENSWVBUT19BRUFECisJaGVscAorCSAgVGhpcyBjb252ZXJ0cyBhbiBhcmJpdHJhcnkgY3J5cHRvIGFsZ29yaXRobSBpbnRvIGEgcGFyYWxsZWwKKwkgIGFsZ29yaXRobSB0aGF0IGV4ZWN1dGVzIGluIGtlcm5lbCB0aHJlYWRzLgorCiBjb25maWcgQ1JZUFRPX1dPUktRVUVVRQogICAgICAgIHRyaXN0YXRlCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQppbmRleCA5ZThmNjE5Li5kN2U2NDQxIDEwMDY0NAotLS0gYS9jcnlwdG8vTWFrZWZpbGUKKysrIGIvY3J5cHRvL01ha2VmaWxlCkBAIC01Niw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0NUUikgKz0gY3RyLm8KIG9iai0kKENPTkZJR19DUllQVE9fR0NNKSArPSBnY20ubwogb2JqLSQoQ09ORklHX0NSWVBUT19DQ00pICs9IGNjbS5vCitvYmotJChDT05GSUdfQ1JZUFRPX1BDUllQVCkgKz0gcGNyeXB0Lm8KIG9iai0kKENPTkZJR19DUllQVE9fQ1JZUFREKSArPSBjcnlwdGQubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVMpICs9IGRlc19nZW5lcmljLm8KIG9iai0kKENPTkZJR19DUllQVE9fRkNSWVBUKSArPSBmY3J5cHQubwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FibGtjaXBoZXIuYyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKaW5kZXggZjZmMDgzMy4uZmU5ODBkYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FibGtjaXBoZXIuYworKysgYi9jcnlwdG8vYWJsa2NpcGhlci5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIEFzeW5jaHJvbm91cyBibG9jayBjaGFpbmluZyBjaXBoZXIgb3BlcmF0aW9ucy4KLSAqIAorICoKICAqIFRoaXMgaXMgdGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIGJsa2NpcGhlci5jIGluZGljYXRpbmcgY29tcGxldGlvbgogICogdmlhIGEgY2FsbGJhY2suCiAgKgpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9hZWFkLmMgYi9jcnlwdG8vYWVhZC5jCmluZGV4IDBhNTVkYTcuLjY3MjllOGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZWFkLmMKKysrIGIvY3J5cHRvL2FlYWQuYwpAQCAtMSwxMyArMSwxMyBAQAogLyoKICAqIEFFQUQ6IEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotICogCisgKgogICogVGhpcyBmaWxlIHByb3ZpZGVzIEFQSSBzdXBwb3J0IGZvciBBRUFEIGFsZ29yaXRobXMuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA3IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9hZXNfZ2VuZXJpYy5jIGIvY3J5cHRvL2Flc19nZW5lcmljLmMKaW5kZXggZTc4YjdlZS4uYTY4YzczZCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Flc19nZW5lcmljLmMKKysrIGIvY3J5cHRvL2Flc19nZW5lcmljLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBBRVMgQ2lwaGVyIEFsZ29yaXRobS4KQEAgLTExMjcsNyArMTEyNyw3IEBACiAKICNkZWZpbmUgc3Rhcl94KHgpICgoKHgpICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXiAoKCgoeCkgJiAweDgwODA4MDgwKSA+PiA3KSAqIDB4MWIpCiAKLSNkZWZpbmUgaW1peF9jb2woeSx4KQlkbyB7CQlcCisjZGVmaW5lIGltaXhfY29sKHksIHgpCWRvIHsJCVwKIAl1CT0gc3Rhcl94KHgpOwkJXAogCXYJPSBzdGFyX3godSk7CQlcCiAJdwk9IHN0YXJfeCh2KTsJCVwKZGlmZiAtLWdpdCBhL2NyeXB0by9hbGdhcGkuYyBiL2NyeXB0by9hbGdhcGkuYwppbmRleCBmMTQ5YjFjLi4zZTQ1MjRlIDEwMDY0NAotLS0gYS9jcnlwdG8vYWxnYXBpLmMKKysrIGIvY3J5cHRvL2FsZ2FwaS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAlsaXN0X2FkZCgmYWxnLT5jcmFfbGlzdCwgJmNyeXB0b19hbGdfbGlzdCk7CiAJbGlzdF9hZGQoJmxhcnZhbC0+YWxnLmNyYV9saXN0LCAmY3J5cHRvX2FsZ19saXN0KTsKIAotb3V0OgkKK291dDoKIAlyZXR1cm4gbGFydmFsOwogCiBmcmVlX2xhcnZhbDoKQEAgLTM4OCw3ICszODgsNyBAQAogewogCWludCByZXQ7CiAJTElTVF9IRUFEKGxpc3QpOwotCQorCiAJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOwogCXJldCA9IGNyeXB0b19yZW1vdmVfYWxnKGFsZywgJmxpc3QpOwogCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYW51YmlzLmMgYi9jcnlwdG8vYW51YmlzLmMKaW5kZXggZTQyYzNhOC4uNzc1MzBkNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FudWJpcy5jCisrKyBiL2NyeXB0by9hbnViaXMuYwpAQCAtNDY5LDE0ICs0NjksMTMgQEAKIAl1MzIga2FwcGFbQU5VQklTX01BWF9OXTsKIAl1MzIgaW50ZXJbQU5VQklTX01BWF9OXTsKIAotCXN3aXRjaCAoa2V5X2xlbikKLQl7CisJc3dpdGNoIChrZXlfbGVuKSB7CiAJCWNhc2UgMTY6IGNhc2UgMjA6IGNhc2UgMjQ6IGNhc2UgMjg6CiAJCWNhc2UgMzI6IGNhc2UgMzY6IGNhc2UgNDA6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKLQkJCXJldHVybiAtIEVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWN0eC0+a2V5X2xlbiA9IGtleV9sZW4gKiA4OwpAQCAtNTMwLDIzICs1MjksMjQgQEAKIAkJLyoKIAkJICogY29tcHV0ZSBrYXBwYV57cisxfSBmcm9tIGthcHBhXnI6CiAJCSAqLwotCQlpZiAociA9PSBSKSB7CisJCWlmIChyID09IFIpCiAJCQlicmVhazsKLQkJfQogCQlmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAJCQlpbnQgaiA9IGk7CiAJCQlpbnRlcltpXSAgPSBUMFsoa2FwcGFbai0tXSA+PiAyNCkgICAgICAgXTsKLQkJCWlmIChqIDwgMCkgaiA9IE4gLSAxOworCQkJaWYgKGogPCAwKQorCQkJCWogPSBOIC0gMTsKIAkJCWludGVyW2ldIF49IFQxWyhrYXBwYVtqLS1dID4+IDE2KSAmIDB4ZmZdOwotCQkJaWYgKGogPCAwKSBqID0gTiAtIDE7CisJCQlpZiAoaiA8IDApCisJCQkJaiA9IE4gLSAxOwogCQkJaW50ZXJbaV0gXj0gVDJbKGthcHBhW2otLV0gPj4gIDgpICYgMHhmZl07Ci0JCQlpZiAoaiA8IDApIGogPSBOIC0gMTsKKwkJCWlmIChqIDwgMCkKKwkJCQlqID0gTiAtIDE7CiAJCQlpbnRlcltpXSBePSBUM1soa2FwcGFbaiAgXSAgICAgICkgJiAweGZmXTsKIAkJfQogCQlrYXBwYVswXSA9IGludGVyWzBdIF4gcmNbcl07Ci0JCWZvciAoaSA9IDE7IGkgPCBOOyBpKyspIHsKKwkJZm9yIChpID0gMTsgaSA8IE47IGkrKykKIAkJCWthcHBhW2ldID0gaW50ZXJbaV07Ci0JCX0KIAl9CiAKIAkvKgpAQCAtNjkwLDcgKzY5MCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhbnViaXNfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQkKKwogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFudWJpc19hbGcpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXBpLmMgYi9jcnlwdG8vYXBpLmMKaW5kZXggNzk4NTI2ZC4uMDMzYTcxNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FwaS5jCisrKyBiL2NyeXB0by9hcGkuYwpAQCAtMTAsNyArMTAsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwpAQCAtMjg4LDExICsyODgsMTEgQEAKIAogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTOgogCQlyZXR1cm4gY3J5cHRvX2luaXRfY29tcHJlc3Nfb3BzKHRmbSk7Ci0JCisKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JCisKIAlCVUcoKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTMxNSwxMCArMzE1LDkgQEAKIAljYXNlIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzoKIAkJY3J5cHRvX2V4aXRfY29tcHJlc3Nfb3BzKHRmbSk7CiAJCWJyZWFrOwotCQorCiAJZGVmYXVsdDoKIAkJQlVHKCk7Ci0JCQogCX0KIH0KIApAQCAtNTkzLDEyICs1OTIsMTIgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnID0gY3J5cHRvX2FsZ19tb2RfbG9va3VwKG5hbWUsIHR5cGUsIG1hc2spOwotCQorCiAJaWYgKCFJU19FUlIoYWxnKSkgewogCQljcnlwdG9fbW9kX3B1dChhbGcpOwogCQlyZXQgPSAxOwogCX0KLQkKKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9faGFzX2FsZyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXV0aGVuYy5jIGIvY3J5cHRvL2F1dGhlbmMuYwppbmRleCA0ZDZmNDlhLi4xODg3MDkwIDEwMDY0NAotLS0gYS9jcnlwdG8vYXV0aGVuYy5jCisrKyBiL2NyeXB0by9hdXRoZW5jLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShpaGFzaCwgYXJlcV9jdHgtPnNnLCBhcmVxX2N0eC0+Y3J5cHRsZW4sCiAJCQkJIGF1dGhzaXplLCAwKTsKIAotCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0c6IDA7CisJZXJyID0gbWVtY21wKGloYXNoLCBhaHJlcS0+cmVzdWx0LCBhdXRoc2l6ZSkgPyAtRUJBRE1TRyA6IDA7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTIzMSw3ICsyMzEsNyBAQAogCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShpaGFzaCwgYXJlcV9jdHgtPnNnLCBhcmVxX2N0eC0+Y3J5cHRsZW4sCiAJCQkJIGF1dGhzaXplLCAwKTsKIAotCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0c6IDA7CisJZXJyID0gbWVtY21wKGloYXNoLCBhaHJlcS0+cmVzdWx0LCBhdXRoc2l6ZSkgPyAtRUJBRE1TRyA6IDA7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCWloYXNoID0gb2hhc2ggKyBhdXRoc2l6ZTsKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7Ci0JcmV0dXJuIG1lbWNtcChpaGFzaCwgb2hhc2gsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCXJldHVybiBtZW1jbXAoaWhhc2gsIG9oYXNoLCBhdXRoc2l6ZSkgPyAtRUJBRE1TRyA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRvX2F1dGhlbmNfaXZlcmlmeShzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsIHU4ICppdiwKQEAgLTU1NywxMSArNTU3LDExIEBACiAKIAljdHgtPmF1dGggPSBhdXRoOwogCWN0eC0+ZW5jID0gZW5jOwotCQorCiAJdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gbWF4X3QodW5zaWduZWQgaW50LAogCQkJCWNyeXB0b19haGFzaF9yZXFzaXplKGF1dGgpICsgY3R4LT5yZXFvZmYgKwogCQkJCXNpemVvZihzdHJ1Y3QgYXV0aGVuY19yZXF1ZXN0X2N0eCkgKwotCQkJCXNpemVvZihzdHJ1Y3QgYWhhc2hfcmVxdWVzdCksIAorCQkJCXNpemVvZihzdHJ1Y3QgYWhhc2hfcmVxdWVzdCksCiAJCQkJc2l6ZW9mKHN0cnVjdCBza2NpcGhlcl9naXZjcnlwdF9yZXF1ZXN0KSArCiAJCQkJY3J5cHRvX2FibGtjaXBoZXJfcmVxc2l6ZShlbmMpICsKIAkJCQljcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUoZW5jKSk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYmxvd2Zpc2guYyBiL2NyeXB0by9ibG93ZmlzaC5jCmluZGV4IDZmNWI0ODcuLmE2N2Q1MmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibG93ZmlzaC5jCisrKyBiL2NyeXB0by9ibG93ZmlzaC5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogQmxvd2Zpc2ggQ2lwaGVyIEFsZ29yaXRobSwgYnkgQnJ1Y2UgU2NobmVpZXIuCkBAIC0yOTksNyArMjk5LDcgQEAKIAkweGI3NGU2MTMyLCAweGNlNzdlMjViLCAweDU3OGZkZmUzLCAweDNhYzM3MmU2LAogfTsKIAotLyogCisvKgogICogUm91bmQgbG9vcCB1bnJvbGxpbmcgbWFjcm9zLCBTIGlzIGEgcG9pbnRlciB0byBhIFMtQm94IGFycmF5CiAgKiBvcmdhbml6ZWQgaW4gNCB1bnNpZ25lZCBsb25ncyBhdCBhIHJvdy4KICAqLwpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIC8qCiAgKiBUaGUgYmxvd2Zpc2ggZW5jaXBoZXIsIHByb2Nlc3NlcyA2NC1iaXQgYmxvY2tzLgotICogTk9URTogVGhpcyBmdW5jdGlvbiBNVVNUTidUIHJlc3BlY3QgZW5kaWFuZXNzIAorICogTk9URTogVGhpcyBmdW5jdGlvbiBNVVNUTidUIHJlc3BlY3QgZW5kaWFuZXNzCiAgKi8KIHN0YXRpYyB2b2lkIGVuY3J5cHRfYmxvY2soc3RydWN0IGJmX2N0eCAqYmN0eCwgdTMyICpkc3QsIHUzMiAqc3JjKQogewpAQCAtMzk1LDcgKzM5NSw3IEBACiAJb3V0X2Jsa1sxXSA9IGNwdV90b19iZTMyKHlsKTsKIH0KIAotLyogCisvKgogICogQ2FsY3VsYXRlcyB0aGUgYmxvd2Zpc2ggUyBhbmQgUCBib3hlcyBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4KICAqLwogc3RhdGljIGludCBiZl9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKQEAgLTQxNywxMCArNDE3LDEwIEBACiAKIAkvKiBBY3R1YWwgc3Via2V5IGdlbmVyYXRpb24gKi8KIAlmb3IgKGogPSAwLCBpID0gMDsgaSA8IDE2ICsgMjsgaSsrKSB7Ci0JCXRlbXAgPSAoKCh1MzIgKWtleVtqXSA8PCAyNCkgfAotCQkJKCh1MzIgKWtleVsoaiArIDEpICUga2V5bGVuXSA8PCAxNikgfAotCQkJKCh1MzIgKWtleVsoaiArIDIpICUga2V5bGVuXSA8PCA4KSB8Ci0JCQkoKHUzMiApa2V5WyhqICsgMykgJSBrZXlsZW5dKSk7CisJCXRlbXAgPSAoKCh1MzIpa2V5W2pdIDw8IDI0KSB8CisJCQkoKHUzMilrZXlbKGogKyAxKSAlIGtleWxlbl0gPDwgMTYpIHwKKwkJCSgodTMyKWtleVsoaiArIDIpICUga2V5bGVuXSA8PCA4KSB8CisJCQkoKHUzMilrZXlbKGogKyAzKSAlIGtleWxlbl0pKTsKIAogCQlQW2ldID0gUFtpXSBeIHRlbXA7CiAJCWogPSAoaiArIDQpICUga2V5bGVuOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCQlTW2NvdW50ICsgMV0gPSBkYXRhWzFdOwogCQl9CiAJfQotCQorCiAJLyogQnJ1Y2Ugc2F5cyBub3QgdG8gYm90aGVyIHdpdGggdGhlIHdlYWsga2V5IGNoZWNrLiAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NhbWVsbGlhLmMgYi9jcnlwdG8vY2FtZWxsaWEuYwppbmRleCA5NjQ2MzVkLi42NGNmZjQ2IDEwMDY0NAotLS0gYS9jcnlwdG8vY2FtZWxsaWEuYworKysgYi9jcnlwdG8vY2FtZWxsaWEuYwpAQCAtMzksMjcxICszOSwyNzEgQEAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKIHN0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3AxMTEwWzI1Nl0gPSB7Ci0JMHg3MDcwNzAwMCwweDgyODI4MjAwLDB4MmMyYzJjMDAsMHhlY2VjZWMwMCwKLQkweGIzYjNiMzAwLDB4MjcyNzI3MDAsMHhjMGMwYzAwMCwweGU1ZTVlNTAwLAotCTB4ZTRlNGU0MDAsMHg4NTg1ODUwMCwweDU3NTc1NzAwLDB4MzUzNTM1MDAsCi0JMHhlYWVhZWEwMCwweDBjMGMwYzAwLDB4YWVhZWFlMDAsMHg0MTQxNDEwMCwKLQkweDIzMjMyMzAwLDB4ZWZlZmVmMDAsMHg2YjZiNmIwMCwweDkzOTM5MzAwLAotCTB4NDU0NTQ1MDAsMHgxOTE5MTkwMCwweGE1YTVhNTAwLDB4MjEyMTIxMDAsCi0JMHhlZGVkZWQwMCwweDBlMGUwZTAwLDB4NGY0ZjRmMDAsMHg0ZTRlNGUwMCwKLQkweDFkMWQxZDAwLDB4NjU2NTY1MDAsMHg5MjkyOTIwMCwweGJkYmRiZDAwLAotCTB4ODY4Njg2MDAsMHhiOGI4YjgwMCwweGFmYWZhZjAwLDB4OGY4ZjhmMDAsCi0JMHg3YzdjN2MwMCwweGViZWJlYjAwLDB4MWYxZjFmMDAsMHhjZWNlY2UwMCwKLQkweDNlM2UzZTAwLDB4MzAzMDMwMDAsMHhkY2RjZGMwMCwweDVmNWY1ZjAwLAotCTB4NWU1ZTVlMDAsMHhjNWM1YzUwMCwweDBiMGIwYjAwLDB4MWExYTFhMDAsCi0JMHhhNmE2YTYwMCwweGUxZTFlMTAwLDB4MzkzOTM5MDAsMHhjYWNhY2EwMCwKLQkweGQ1ZDVkNTAwLDB4NDc0NzQ3MDAsMHg1ZDVkNWQwMCwweDNkM2QzZDAwLAotCTB4ZDlkOWQ5MDAsMHgwMTAxMDEwMCwweDVhNWE1YTAwLDB4ZDZkNmQ2MDAsCi0JMHg1MTUxNTEwMCwweDU2NTY1NjAwLDB4NmM2YzZjMDAsMHg0ZDRkNGQwMCwKLQkweDhiOGI4YjAwLDB4MGQwZDBkMDAsMHg5YTlhOWEwMCwweDY2NjY2NjAwLAotCTB4ZmJmYmZiMDAsMHhjY2NjY2MwMCwweGIwYjBiMDAwLDB4MmQyZDJkMDAsCi0JMHg3NDc0NzQwMCwweDEyMTIxMjAwLDB4MmIyYjJiMDAsMHgyMDIwMjAwMCwKLQkweGYwZjBmMDAwLDB4YjFiMWIxMDAsMHg4NDg0ODQwMCwweDk5OTk5OTAwLAotCTB4ZGZkZmRmMDAsMHg0YzRjNGMwMCwweGNiY2JjYjAwLDB4YzJjMmMyMDAsCi0JMHgzNDM0MzQwMCwweDdlN2U3ZTAwLDB4NzY3Njc2MDAsMHgwNTA1MDUwMCwKLQkweDZkNmQ2ZDAwLDB4YjdiN2I3MDAsMHhhOWE5YTkwMCwweDMxMzEzMTAwLAotCTB4ZDFkMWQxMDAsMHgxNzE3MTcwMCwweDA0MDQwNDAwLDB4ZDdkN2Q3MDAsCi0JMHgxNDE0MTQwMCwweDU4NTg1ODAwLDB4M2EzYTNhMDAsMHg2MTYxNjEwMCwKLQkweGRlZGVkZTAwLDB4MWIxYjFiMDAsMHgxMTExMTEwMCwweDFjMWMxYzAwLAotCTB4MzIzMjMyMDAsMHgwZjBmMGYwMCwweDljOWM5YzAwLDB4MTYxNjE2MDAsCi0JMHg1MzUzNTMwMCwweDE4MTgxODAwLDB4ZjJmMmYyMDAsMHgyMjIyMjIwMCwKLQkweGZlZmVmZTAwLDB4NDQ0NDQ0MDAsMHhjZmNmY2YwMCwweGIyYjJiMjAwLAotCTB4YzNjM2MzMDAsMHhiNWI1YjUwMCwweDdhN2E3YTAwLDB4OTE5MTkxMDAsCi0JMHgyNDI0MjQwMCwweDA4MDgwODAwLDB4ZThlOGU4MDAsMHhhOGE4YTgwMCwKLQkweDYwNjA2MDAwLDB4ZmNmY2ZjMDAsMHg2OTY5NjkwMCwweDUwNTA1MDAwLAotCTB4YWFhYWFhMDAsMHhkMGQwZDAwMCwweGEwYTBhMDAwLDB4N2Q3ZDdkMDAsCi0JMHhhMWExYTEwMCwweDg5ODk4OTAwLDB4NjI2MjYyMDAsMHg5Nzk3OTcwMCwKLQkweDU0NTQ1NDAwLDB4NWI1YjViMDAsMHgxZTFlMWUwMCwweDk1OTU5NTAwLAotCTB4ZTBlMGUwMDAsMHhmZmZmZmYwMCwweDY0NjQ2NDAwLDB4ZDJkMmQyMDAsCi0JMHgxMDEwMTAwMCwweGM0YzRjNDAwLDB4MDAwMDAwMDAsMHg0ODQ4NDgwMCwKLQkweGEzYTNhMzAwLDB4ZjdmN2Y3MDAsMHg3NTc1NzUwMCwweGRiZGJkYjAwLAotCTB4OGE4YThhMDAsMHgwMzAzMDMwMCwweGU2ZTZlNjAwLDB4ZGFkYWRhMDAsCi0JMHgwOTA5MDkwMCwweDNmM2YzZjAwLDB4ZGRkZGRkMDAsMHg5NDk0OTQwMCwKLQkweDg3ODc4NzAwLDB4NWM1YzVjMDAsMHg4MzgzODMwMCwweDAyMDIwMjAwLAotCTB4Y2RjZGNkMDAsMHg0YTRhNGEwMCwweDkwOTA5MDAwLDB4MzMzMzMzMDAsCi0JMHg3MzczNzMwMCwweDY3Njc2NzAwLDB4ZjZmNmY2MDAsMHhmM2YzZjMwMCwKLQkweDlkOWQ5ZDAwLDB4N2Y3ZjdmMDAsMHhiZmJmYmYwMCwweGUyZTJlMjAwLAotCTB4NTI1MjUyMDAsMHg5YjliOWIwMCwweGQ4ZDhkODAwLDB4MjYyNjI2MDAsCi0JMHhjOGM4YzgwMCwweDM3MzczNzAwLDB4YzZjNmM2MDAsMHgzYjNiM2IwMCwKLQkweDgxODE4MTAwLDB4OTY5Njk2MDAsMHg2ZjZmNmYwMCwweDRiNGI0YjAwLAotCTB4MTMxMzEzMDAsMHhiZWJlYmUwMCwweDYzNjM2MzAwLDB4MmUyZTJlMDAsCi0JMHhlOWU5ZTkwMCwweDc5Nzk3OTAwLDB4YTdhN2E3MDAsMHg4YzhjOGMwMCwKLQkweDlmOWY5ZjAwLDB4NmU2ZTZlMDAsMHhiY2JjYmMwMCwweDhlOGU4ZTAwLAotCTB4MjkyOTI5MDAsMHhmNWY1ZjUwMCwweGY5ZjlmOTAwLDB4YjZiNmI2MDAsCi0JMHgyZjJmMmYwMCwweGZkZmRmZDAwLDB4YjRiNGI0MDAsMHg1OTU5NTkwMCwKLQkweDc4Nzg3ODAwLDB4OTg5ODk4MDAsMHgwNjA2MDYwMCwweDZhNmE2YTAwLAotCTB4ZTdlN2U3MDAsMHg0NjQ2NDYwMCwweDcxNzE3MTAwLDB4YmFiYWJhMDAsCi0JMHhkNGQ0ZDQwMCwweDI1MjUyNTAwLDB4YWJhYmFiMDAsMHg0MjQyNDIwMCwKLQkweDg4ODg4ODAwLDB4YTJhMmEyMDAsMHg4ZDhkOGQwMCwweGZhZmFmYTAwLAotCTB4NzI3MjcyMDAsMHgwNzA3MDcwMCwweGI5YjliOTAwLDB4NTU1NTU1MDAsCi0JMHhmOGY4ZjgwMCwweGVlZWVlZTAwLDB4YWNhY2FjMDAsMHgwYTBhMGEwMCwKLQkweDM2MzYzNjAwLDB4NDk0OTQ5MDAsMHgyYTJhMmEwMCwweDY4Njg2ODAwLAotCTB4M2MzYzNjMDAsMHgzODM4MzgwMCwweGYxZjFmMTAwLDB4YTRhNGE0MDAsCi0JMHg0MDQwNDAwMCwweDI4MjgyODAwLDB4ZDNkM2QzMDAsMHg3YjdiN2IwMCwKLQkweGJiYmJiYjAwLDB4YzljOWM5MDAsMHg0MzQzNDMwMCwweGMxYzFjMTAwLAotCTB4MTUxNTE1MDAsMHhlM2UzZTMwMCwweGFkYWRhZDAwLDB4ZjRmNGY0MDAsCi0JMHg3Nzc3NzcwMCwweGM3YzdjNzAwLDB4ODA4MDgwMDAsMHg5ZTllOWUwMCwKKwkweDcwNzA3MDAwLCAweDgyODI4MjAwLCAweDJjMmMyYzAwLCAweGVjZWNlYzAwLAorCTB4YjNiM2IzMDAsIDB4MjcyNzI3MDAsIDB4YzBjMGMwMDAsIDB4ZTVlNWU1MDAsCisJMHhlNGU0ZTQwMCwgMHg4NTg1ODUwMCwgMHg1NzU3NTcwMCwgMHgzNTM1MzUwMCwKKwkweGVhZWFlYTAwLCAweDBjMGMwYzAwLCAweGFlYWVhZTAwLCAweDQxNDE0MTAwLAorCTB4MjMyMzIzMDAsIDB4ZWZlZmVmMDAsIDB4NmI2YjZiMDAsIDB4OTM5MzkzMDAsCisJMHg0NTQ1NDUwMCwgMHgxOTE5MTkwMCwgMHhhNWE1YTUwMCwgMHgyMTIxMjEwMCwKKwkweGVkZWRlZDAwLCAweDBlMGUwZTAwLCAweDRmNGY0ZjAwLCAweDRlNGU0ZTAwLAorCTB4MWQxZDFkMDAsIDB4NjU2NTY1MDAsIDB4OTI5MjkyMDAsIDB4YmRiZGJkMDAsCisJMHg4Njg2ODYwMCwgMHhiOGI4YjgwMCwgMHhhZmFmYWYwMCwgMHg4ZjhmOGYwMCwKKwkweDdjN2M3YzAwLCAweGViZWJlYjAwLCAweDFmMWYxZjAwLCAweGNlY2VjZTAwLAorCTB4M2UzZTNlMDAsIDB4MzAzMDMwMDAsIDB4ZGNkY2RjMDAsIDB4NWY1ZjVmMDAsCisJMHg1ZTVlNWUwMCwgMHhjNWM1YzUwMCwgMHgwYjBiMGIwMCwgMHgxYTFhMWEwMCwKKwkweGE2YTZhNjAwLCAweGUxZTFlMTAwLCAweDM5MzkzOTAwLCAweGNhY2FjYTAwLAorCTB4ZDVkNWQ1MDAsIDB4NDc0NzQ3MDAsIDB4NWQ1ZDVkMDAsIDB4M2QzZDNkMDAsCisJMHhkOWQ5ZDkwMCwgMHgwMTAxMDEwMCwgMHg1YTVhNWEwMCwgMHhkNmQ2ZDYwMCwKKwkweDUxNTE1MTAwLCAweDU2NTY1NjAwLCAweDZjNmM2YzAwLCAweDRkNGQ0ZDAwLAorCTB4OGI4YjhiMDAsIDB4MGQwZDBkMDAsIDB4OWE5YTlhMDAsIDB4NjY2NjY2MDAsCisJMHhmYmZiZmIwMCwgMHhjY2NjY2MwMCwgMHhiMGIwYjAwMCwgMHgyZDJkMmQwMCwKKwkweDc0NzQ3NDAwLCAweDEyMTIxMjAwLCAweDJiMmIyYjAwLCAweDIwMjAyMDAwLAorCTB4ZjBmMGYwMDAsIDB4YjFiMWIxMDAsIDB4ODQ4NDg0MDAsIDB4OTk5OTk5MDAsCisJMHhkZmRmZGYwMCwgMHg0YzRjNGMwMCwgMHhjYmNiY2IwMCwgMHhjMmMyYzIwMCwKKwkweDM0MzQzNDAwLCAweDdlN2U3ZTAwLCAweDc2NzY3NjAwLCAweDA1MDUwNTAwLAorCTB4NmQ2ZDZkMDAsIDB4YjdiN2I3MDAsIDB4YTlhOWE5MDAsIDB4MzEzMTMxMDAsCisJMHhkMWQxZDEwMCwgMHgxNzE3MTcwMCwgMHgwNDA0MDQwMCwgMHhkN2Q3ZDcwMCwKKwkweDE0MTQxNDAwLCAweDU4NTg1ODAwLCAweDNhM2EzYTAwLCAweDYxNjE2MTAwLAorCTB4ZGVkZWRlMDAsIDB4MWIxYjFiMDAsIDB4MTExMTExMDAsIDB4MWMxYzFjMDAsCisJMHgzMjMyMzIwMCwgMHgwZjBmMGYwMCwgMHg5YzljOWMwMCwgMHgxNjE2MTYwMCwKKwkweDUzNTM1MzAwLCAweDE4MTgxODAwLCAweGYyZjJmMjAwLCAweDIyMjIyMjAwLAorCTB4ZmVmZWZlMDAsIDB4NDQ0NDQ0MDAsIDB4Y2ZjZmNmMDAsIDB4YjJiMmIyMDAsCisJMHhjM2MzYzMwMCwgMHhiNWI1YjUwMCwgMHg3YTdhN2EwMCwgMHg5MTkxOTEwMCwKKwkweDI0MjQyNDAwLCAweDA4MDgwODAwLCAweGU4ZThlODAwLCAweGE4YThhODAwLAorCTB4NjA2MDYwMDAsIDB4ZmNmY2ZjMDAsIDB4Njk2OTY5MDAsIDB4NTA1MDUwMDAsCisJMHhhYWFhYWEwMCwgMHhkMGQwZDAwMCwgMHhhMGEwYTAwMCwgMHg3ZDdkN2QwMCwKKwkweGExYTFhMTAwLCAweDg5ODk4OTAwLCAweDYyNjI2MjAwLCAweDk3OTc5NzAwLAorCTB4NTQ1NDU0MDAsIDB4NWI1YjViMDAsIDB4MWUxZTFlMDAsIDB4OTU5NTk1MDAsCisJMHhlMGUwZTAwMCwgMHhmZmZmZmYwMCwgMHg2NDY0NjQwMCwgMHhkMmQyZDIwMCwKKwkweDEwMTAxMDAwLCAweGM0YzRjNDAwLCAweDAwMDAwMDAwLCAweDQ4NDg0ODAwLAorCTB4YTNhM2EzMDAsIDB4ZjdmN2Y3MDAsIDB4NzU3NTc1MDAsIDB4ZGJkYmRiMDAsCisJMHg4YThhOGEwMCwgMHgwMzAzMDMwMCwgMHhlNmU2ZTYwMCwgMHhkYWRhZGEwMCwKKwkweDA5MDkwOTAwLCAweDNmM2YzZjAwLCAweGRkZGRkZDAwLCAweDk0OTQ5NDAwLAorCTB4ODc4Nzg3MDAsIDB4NWM1YzVjMDAsIDB4ODM4MzgzMDAsIDB4MDIwMjAyMDAsCisJMHhjZGNkY2QwMCwgMHg0YTRhNGEwMCwgMHg5MDkwOTAwMCwgMHgzMzMzMzMwMCwKKwkweDczNzM3MzAwLCAweDY3Njc2NzAwLCAweGY2ZjZmNjAwLCAweGYzZjNmMzAwLAorCTB4OWQ5ZDlkMDAsIDB4N2Y3ZjdmMDAsIDB4YmZiZmJmMDAsIDB4ZTJlMmUyMDAsCisJMHg1MjUyNTIwMCwgMHg5YjliOWIwMCwgMHhkOGQ4ZDgwMCwgMHgyNjI2MjYwMCwKKwkweGM4YzhjODAwLCAweDM3MzczNzAwLCAweGM2YzZjNjAwLCAweDNiM2IzYjAwLAorCTB4ODE4MTgxMDAsIDB4OTY5Njk2MDAsIDB4NmY2ZjZmMDAsIDB4NGI0YjRiMDAsCisJMHgxMzEzMTMwMCwgMHhiZWJlYmUwMCwgMHg2MzYzNjMwMCwgMHgyZTJlMmUwMCwKKwkweGU5ZTllOTAwLCAweDc5Nzk3OTAwLCAweGE3YTdhNzAwLCAweDhjOGM4YzAwLAorCTB4OWY5ZjlmMDAsIDB4NmU2ZTZlMDAsIDB4YmNiY2JjMDAsIDB4OGU4ZThlMDAsCisJMHgyOTI5MjkwMCwgMHhmNWY1ZjUwMCwgMHhmOWY5ZjkwMCwgMHhiNmI2YjYwMCwKKwkweDJmMmYyZjAwLCAweGZkZmRmZDAwLCAweGI0YjRiNDAwLCAweDU5NTk1OTAwLAorCTB4Nzg3ODc4MDAsIDB4OTg5ODk4MDAsIDB4MDYwNjA2MDAsIDB4NmE2YTZhMDAsCisJMHhlN2U3ZTcwMCwgMHg0NjQ2NDYwMCwgMHg3MTcxNzEwMCwgMHhiYWJhYmEwMCwKKwkweGQ0ZDRkNDAwLCAweDI1MjUyNTAwLCAweGFiYWJhYjAwLCAweDQyNDI0MjAwLAorCTB4ODg4ODg4MDAsIDB4YTJhMmEyMDAsIDB4OGQ4ZDhkMDAsIDB4ZmFmYWZhMDAsCisJMHg3MjcyNzIwMCwgMHgwNzA3MDcwMCwgMHhiOWI5YjkwMCwgMHg1NTU1NTUwMCwKKwkweGY4ZjhmODAwLCAweGVlZWVlZTAwLCAweGFjYWNhYzAwLCAweDBhMGEwYTAwLAorCTB4MzYzNjM2MDAsIDB4NDk0OTQ5MDAsIDB4MmEyYTJhMDAsIDB4Njg2ODY4MDAsCisJMHgzYzNjM2MwMCwgMHgzODM4MzgwMCwgMHhmMWYxZjEwMCwgMHhhNGE0YTQwMCwKKwkweDQwNDA0MDAwLCAweDI4MjgyODAwLCAweGQzZDNkMzAwLCAweDdiN2I3YjAwLAorCTB4YmJiYmJiMDAsIDB4YzljOWM5MDAsIDB4NDM0MzQzMDAsIDB4YzFjMWMxMDAsCisJMHgxNTE1MTUwMCwgMHhlM2UzZTMwMCwgMHhhZGFkYWQwMCwgMHhmNGY0ZjQwMCwKKwkweDc3Nzc3NzAwLCAweGM3YzdjNzAwLCAweDgwODA4MDAwLCAweDllOWU5ZTAwLAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDAyMjJbMjU2XSA9IHsKLQkweDAwZTBlMGUwLDB4MDAwNTA1MDUsMHgwMDU4NTg1OCwweDAwZDlkOWQ5LAotCTB4MDA2NzY3NjcsMHgwMDRlNGU0ZSwweDAwODE4MTgxLDB4MDBjYmNiY2IsCi0JMHgwMGM5YzljOSwweDAwMGIwYjBiLDB4MDBhZWFlYWUsMHgwMDZhNmE2YSwKLQkweDAwZDVkNWQ1LDB4MDAxODE4MTgsMHgwMDVkNWQ1ZCwweDAwODI4MjgyLAotCTB4MDA0NjQ2NDYsMHgwMGRmZGZkZiwweDAwZDZkNmQ2LDB4MDAyNzI3MjcsCi0JMHgwMDhhOGE4YSwweDAwMzIzMjMyLDB4MDA0YjRiNGIsMHgwMDQyNDI0MiwKLQkweDAwZGJkYmRiLDB4MDAxYzFjMWMsMHgwMDllOWU5ZSwweDAwOWM5YzljLAotCTB4MDAzYTNhM2EsMHgwMGNhY2FjYSwweDAwMjUyNTI1LDB4MDA3YjdiN2IsCi0JMHgwMDBkMGQwZCwweDAwNzE3MTcxLDB4MDA1ZjVmNWYsMHgwMDFmMWYxZiwKLQkweDAwZjhmOGY4LDB4MDBkN2Q3ZDcsMHgwMDNlM2UzZSwweDAwOWQ5ZDlkLAotCTB4MDA3YzdjN2MsMHgwMDYwNjA2MCwweDAwYjliOWI5LDB4MDBiZWJlYmUsCi0JMHgwMGJjYmNiYywweDAwOGI4YjhiLDB4MDAxNjE2MTYsMHgwMDM0MzQzNCwKLQkweDAwNGQ0ZDRkLDB4MDBjM2MzYzMsMHgwMDcyNzI3MiwweDAwOTU5NTk1LAotCTB4MDBhYmFiYWIsMHgwMDhlOGU4ZSwweDAwYmFiYWJhLDB4MDA3YTdhN2EsCi0JMHgwMGIzYjNiMywweDAwMDIwMjAyLDB4MDBiNGI0YjQsMHgwMGFkYWRhZCwKLQkweDAwYTJhMmEyLDB4MDBhY2FjYWMsMHgwMGQ4ZDhkOCwweDAwOWE5YTlhLAotCTB4MDAxNzE3MTcsMHgwMDFhMWExYSwweDAwMzUzNTM1LDB4MDBjY2NjY2MsCi0JMHgwMGY3ZjdmNywweDAwOTk5OTk5LDB4MDA2MTYxNjEsMHgwMDVhNWE1YSwKLQkweDAwZThlOGU4LDB4MDAyNDI0MjQsMHgwMDU2NTY1NiwweDAwNDA0MDQwLAotCTB4MDBlMWUxZTEsMHgwMDYzNjM2MywweDAwMDkwOTA5LDB4MDAzMzMzMzMsCi0JMHgwMGJmYmZiZiwweDAwOTg5ODk4LDB4MDA5Nzk3OTcsMHgwMDg1ODU4NSwKLQkweDAwNjg2ODY4LDB4MDBmY2ZjZmMsMHgwMGVjZWNlYywweDAwMGEwYTBhLAotCTB4MDBkYWRhZGEsMHgwMDZmNmY2ZiwweDAwNTM1MzUzLDB4MDA2MjYyNjIsCi0JMHgwMGEzYTNhMywweDAwMmUyZTJlLDB4MDAwODA4MDgsMHgwMGFmYWZhZiwKLQkweDAwMjgyODI4LDB4MDBiMGIwYjAsMHgwMDc0NzQ3NCwweDAwYzJjMmMyLAotCTB4MDBiZGJkYmQsMHgwMDM2MzYzNiwweDAwMjIyMjIyLDB4MDAzODM4MzgsCi0JMHgwMDY0NjQ2NCwweDAwMWUxZTFlLDB4MDAzOTM5MzksMHgwMDJjMmMyYywKLQkweDAwYTZhNmE2LDB4MDAzMDMwMzAsMHgwMGU1ZTVlNSwweDAwNDQ0NDQ0LAotCTB4MDBmZGZkZmQsMHgwMDg4ODg4OCwweDAwOWY5ZjlmLDB4MDA2NTY1NjUsCi0JMHgwMDg3ODc4NywweDAwNmI2YjZiLDB4MDBmNGY0ZjQsMHgwMDIzMjMyMywKLQkweDAwNDg0ODQ4LDB4MDAxMDEwMTAsMHgwMGQxZDFkMSwweDAwNTE1MTUxLAotCTB4MDBjMGMwYzAsMHgwMGY5ZjlmOSwweDAwZDJkMmQyLDB4MDBhMGEwYTAsCi0JMHgwMDU1NTU1NSwweDAwYTFhMWExLDB4MDA0MTQxNDEsMHgwMGZhZmFmYSwKLQkweDAwNDM0MzQzLDB4MDAxMzEzMTMsMHgwMGM0YzRjNCwweDAwMmYyZjJmLAotCTB4MDBhOGE4YTgsMHgwMGI2YjZiNiwweDAwM2MzYzNjLDB4MDAyYjJiMmIsCi0JMHgwMGMxYzFjMSwweDAwZmZmZmZmLDB4MDBjOGM4YzgsMHgwMGE1YTVhNSwKLQkweDAwMjAyMDIwLDB4MDA4OTg5ODksMHgwMDAwMDAwMCwweDAwOTA5MDkwLAotCTB4MDA0NzQ3NDcsMHgwMGVmZWZlZiwweDAwZWFlYWVhLDB4MDBiN2I3YjcsCi0JMHgwMDE1MTUxNSwweDAwMDYwNjA2LDB4MDBjZGNkY2QsMHgwMGI1YjViNSwKLQkweDAwMTIxMjEyLDB4MDA3ZTdlN2UsMHgwMGJiYmJiYiwweDAwMjkyOTI5LAotCTB4MDAwZjBmMGYsMHgwMGI4YjhiOCwweDAwMDcwNzA3LDB4MDAwNDA0MDQsCi0JMHgwMDliOWI5YiwweDAwOTQ5NDk0LDB4MDAyMTIxMjEsMHgwMDY2NjY2NiwKLQkweDAwZTZlNmU2LDB4MDBjZWNlY2UsMHgwMGVkZWRlZCwweDAwZTdlN2U3LAotCTB4MDAzYjNiM2IsMHgwMGZlZmVmZSwweDAwN2Y3ZjdmLDB4MDBjNWM1YzUsCi0JMHgwMGE0YTRhNCwweDAwMzczNzM3LDB4MDBiMWIxYjEsMHgwMDRjNGM0YywKLQkweDAwOTE5MTkxLDB4MDA2ZTZlNmUsMHgwMDhkOGQ4ZCwweDAwNzY3Njc2LAotCTB4MDAwMzAzMDMsMHgwMDJkMmQyZCwweDAwZGVkZWRlLDB4MDA5Njk2OTYsCi0JMHgwMDI2MjYyNiwweDAwN2Q3ZDdkLDB4MDBjNmM2YzYsMHgwMDVjNWM1YywKLQkweDAwZDNkM2QzLDB4MDBmMmYyZjIsMHgwMDRmNGY0ZiwweDAwMTkxOTE5LAotCTB4MDAzZjNmM2YsMHgwMGRjZGNkYywweDAwNzk3OTc5LDB4MDAxZDFkMWQsCi0JMHgwMDUyNTI1MiwweDAwZWJlYmViLDB4MDBmM2YzZjMsMHgwMDZkNmQ2ZCwKLQkweDAwNWU1ZTVlLDB4MDBmYmZiZmIsMHgwMDY5Njk2OSwweDAwYjJiMmIyLAotCTB4MDBmMGYwZjAsMHgwMDMxMzEzMSwweDAwMGMwYzBjLDB4MDBkNGQ0ZDQsCi0JMHgwMGNmY2ZjZiwweDAwOGM4YzhjLDB4MDBlMmUyZTIsMHgwMDc1NzU3NSwKLQkweDAwYTlhOWE5LDB4MDA0YTRhNGEsMHgwMDU3NTc1NywweDAwODQ4NDg0LAotCTB4MDAxMTExMTEsMHgwMDQ1NDU0NSwweDAwMWIxYjFiLDB4MDBmNWY1ZjUsCi0JMHgwMGU0ZTRlNCwweDAwMGUwZTBlLDB4MDA3MzczNzMsMHgwMGFhYWFhYSwKLQkweDAwZjFmMWYxLDB4MDBkZGRkZGQsMHgwMDU5NTk1OSwweDAwMTQxNDE0LAotCTB4MDA2YzZjNmMsMHgwMDkyOTI5MiwweDAwNTQ1NDU0LDB4MDBkMGQwZDAsCi0JMHgwMDc4Nzg3OCwweDAwNzA3MDcwLDB4MDBlM2UzZTMsMHgwMDQ5NDk0OSwKLQkweDAwODA4MDgwLDB4MDA1MDUwNTAsMHgwMGE3YTdhNywweDAwZjZmNmY2LAotCTB4MDA3Nzc3NzcsMHgwMDkzOTM5MywweDAwODY4Njg2LDB4MDA4MzgzODMsCi0JMHgwMDJhMmEyYSwweDAwYzdjN2M3LDB4MDA1YjViNWIsMHgwMGU5ZTllOSwKLQkweDAwZWVlZWVlLDB4MDA4ZjhmOGYsMHgwMDAxMDEwMSwweDAwM2QzZDNkLAorCTB4MDBlMGUwZTAsIDB4MDAwNTA1MDUsIDB4MDA1ODU4NTgsIDB4MDBkOWQ5ZDksCisJMHgwMDY3Njc2NywgMHgwMDRlNGU0ZSwgMHgwMDgxODE4MSwgMHgwMGNiY2JjYiwKKwkweDAwYzljOWM5LCAweDAwMGIwYjBiLCAweDAwYWVhZWFlLCAweDAwNmE2YTZhLAorCTB4MDBkNWQ1ZDUsIDB4MDAxODE4MTgsIDB4MDA1ZDVkNWQsIDB4MDA4MjgyODIsCisJMHgwMDQ2NDY0NiwgMHgwMGRmZGZkZiwgMHgwMGQ2ZDZkNiwgMHgwMDI3MjcyNywKKwkweDAwOGE4YThhLCAweDAwMzIzMjMyLCAweDAwNGI0YjRiLCAweDAwNDI0MjQyLAorCTB4MDBkYmRiZGIsIDB4MDAxYzFjMWMsIDB4MDA5ZTllOWUsIDB4MDA5YzljOWMsCisJMHgwMDNhM2EzYSwgMHgwMGNhY2FjYSwgMHgwMDI1MjUyNSwgMHgwMDdiN2I3YiwKKwkweDAwMGQwZDBkLCAweDAwNzE3MTcxLCAweDAwNWY1ZjVmLCAweDAwMWYxZjFmLAorCTB4MDBmOGY4ZjgsIDB4MDBkN2Q3ZDcsIDB4MDAzZTNlM2UsIDB4MDA5ZDlkOWQsCisJMHgwMDdjN2M3YywgMHgwMDYwNjA2MCwgMHgwMGI5YjliOSwgMHgwMGJlYmViZSwKKwkweDAwYmNiY2JjLCAweDAwOGI4YjhiLCAweDAwMTYxNjE2LCAweDAwMzQzNDM0LAorCTB4MDA0ZDRkNGQsIDB4MDBjM2MzYzMsIDB4MDA3MjcyNzIsIDB4MDA5NTk1OTUsCisJMHgwMGFiYWJhYiwgMHgwMDhlOGU4ZSwgMHgwMGJhYmFiYSwgMHgwMDdhN2E3YSwKKwkweDAwYjNiM2IzLCAweDAwMDIwMjAyLCAweDAwYjRiNGI0LCAweDAwYWRhZGFkLAorCTB4MDBhMmEyYTIsIDB4MDBhY2FjYWMsIDB4MDBkOGQ4ZDgsIDB4MDA5YTlhOWEsCisJMHgwMDE3MTcxNywgMHgwMDFhMWExYSwgMHgwMDM1MzUzNSwgMHgwMGNjY2NjYywKKwkweDAwZjdmN2Y3LCAweDAwOTk5OTk5LCAweDAwNjE2MTYxLCAweDAwNWE1YTVhLAorCTB4MDBlOGU4ZTgsIDB4MDAyNDI0MjQsIDB4MDA1NjU2NTYsIDB4MDA0MDQwNDAsCisJMHgwMGUxZTFlMSwgMHgwMDYzNjM2MywgMHgwMDA5MDkwOSwgMHgwMDMzMzMzMywKKwkweDAwYmZiZmJmLCAweDAwOTg5ODk4LCAweDAwOTc5Nzk3LCAweDAwODU4NTg1LAorCTB4MDA2ODY4NjgsIDB4MDBmY2ZjZmMsIDB4MDBlY2VjZWMsIDB4MDAwYTBhMGEsCisJMHgwMGRhZGFkYSwgMHgwMDZmNmY2ZiwgMHgwMDUzNTM1MywgMHgwMDYyNjI2MiwKKwkweDAwYTNhM2EzLCAweDAwMmUyZTJlLCAweDAwMDgwODA4LCAweDAwYWZhZmFmLAorCTB4MDAyODI4MjgsIDB4MDBiMGIwYjAsIDB4MDA3NDc0NzQsIDB4MDBjMmMyYzIsCisJMHgwMGJkYmRiZCwgMHgwMDM2MzYzNiwgMHgwMDIyMjIyMiwgMHgwMDM4MzgzOCwKKwkweDAwNjQ2NDY0LCAweDAwMWUxZTFlLCAweDAwMzkzOTM5LCAweDAwMmMyYzJjLAorCTB4MDBhNmE2YTYsIDB4MDAzMDMwMzAsIDB4MDBlNWU1ZTUsIDB4MDA0NDQ0NDQsCisJMHgwMGZkZmRmZCwgMHgwMDg4ODg4OCwgMHgwMDlmOWY5ZiwgMHgwMDY1NjU2NSwKKwkweDAwODc4Nzg3LCAweDAwNmI2YjZiLCAweDAwZjRmNGY0LCAweDAwMjMyMzIzLAorCTB4MDA0ODQ4NDgsIDB4MDAxMDEwMTAsIDB4MDBkMWQxZDEsIDB4MDA1MTUxNTEsCisJMHgwMGMwYzBjMCwgMHgwMGY5ZjlmOSwgMHgwMGQyZDJkMiwgMHgwMGEwYTBhMCwKKwkweDAwNTU1NTU1LCAweDAwYTFhMWExLCAweDAwNDE0MTQxLCAweDAwZmFmYWZhLAorCTB4MDA0MzQzNDMsIDB4MDAxMzEzMTMsIDB4MDBjNGM0YzQsIDB4MDAyZjJmMmYsCisJMHgwMGE4YThhOCwgMHgwMGI2YjZiNiwgMHgwMDNjM2MzYywgMHgwMDJiMmIyYiwKKwkweDAwYzFjMWMxLCAweDAwZmZmZmZmLCAweDAwYzhjOGM4LCAweDAwYTVhNWE1LAorCTB4MDAyMDIwMjAsIDB4MDA4OTg5ODksIDB4MDAwMDAwMDAsIDB4MDA5MDkwOTAsCisJMHgwMDQ3NDc0NywgMHgwMGVmZWZlZiwgMHgwMGVhZWFlYSwgMHgwMGI3YjdiNywKKwkweDAwMTUxNTE1LCAweDAwMDYwNjA2LCAweDAwY2RjZGNkLCAweDAwYjViNWI1LAorCTB4MDAxMjEyMTIsIDB4MDA3ZTdlN2UsIDB4MDBiYmJiYmIsIDB4MDAyOTI5MjksCisJMHgwMDBmMGYwZiwgMHgwMGI4YjhiOCwgMHgwMDA3MDcwNywgMHgwMDA0MDQwNCwKKwkweDAwOWI5YjliLCAweDAwOTQ5NDk0LCAweDAwMjEyMTIxLCAweDAwNjY2NjY2LAorCTB4MDBlNmU2ZTYsIDB4MDBjZWNlY2UsIDB4MDBlZGVkZWQsIDB4MDBlN2U3ZTcsCisJMHgwMDNiM2IzYiwgMHgwMGZlZmVmZSwgMHgwMDdmN2Y3ZiwgMHgwMGM1YzVjNSwKKwkweDAwYTRhNGE0LCAweDAwMzczNzM3LCAweDAwYjFiMWIxLCAweDAwNGM0YzRjLAorCTB4MDA5MTkxOTEsIDB4MDA2ZTZlNmUsIDB4MDA4ZDhkOGQsIDB4MDA3Njc2NzYsCisJMHgwMDAzMDMwMywgMHgwMDJkMmQyZCwgMHgwMGRlZGVkZSwgMHgwMDk2OTY5NiwKKwkweDAwMjYyNjI2LCAweDAwN2Q3ZDdkLCAweDAwYzZjNmM2LCAweDAwNWM1YzVjLAorCTB4MDBkM2QzZDMsIDB4MDBmMmYyZjIsIDB4MDA0ZjRmNGYsIDB4MDAxOTE5MTksCisJMHgwMDNmM2YzZiwgMHgwMGRjZGNkYywgMHgwMDc5Nzk3OSwgMHgwMDFkMWQxZCwKKwkweDAwNTI1MjUyLCAweDAwZWJlYmViLCAweDAwZjNmM2YzLCAweDAwNmQ2ZDZkLAorCTB4MDA1ZTVlNWUsIDB4MDBmYmZiZmIsIDB4MDA2OTY5NjksIDB4MDBiMmIyYjIsCisJMHgwMGYwZjBmMCwgMHgwMDMxMzEzMSwgMHgwMDBjMGMwYywgMHgwMGQ0ZDRkNCwKKwkweDAwY2ZjZmNmLCAweDAwOGM4YzhjLCAweDAwZTJlMmUyLCAweDAwNzU3NTc1LAorCTB4MDBhOWE5YTksIDB4MDA0YTRhNGEsIDB4MDA1NzU3NTcsIDB4MDA4NDg0ODQsCisJMHgwMDExMTExMSwgMHgwMDQ1NDU0NSwgMHgwMDFiMWIxYiwgMHgwMGY1ZjVmNSwKKwkweDAwZTRlNGU0LCAweDAwMGUwZTBlLCAweDAwNzM3MzczLCAweDAwYWFhYWFhLAorCTB4MDBmMWYxZjEsIDB4MDBkZGRkZGQsIDB4MDA1OTU5NTksIDB4MDAxNDE0MTQsCisJMHgwMDZjNmM2YywgMHgwMDkyOTI5MiwgMHgwMDU0NTQ1NCwgMHgwMGQwZDBkMCwKKwkweDAwNzg3ODc4LCAweDAwNzA3MDcwLCAweDAwZTNlM2UzLCAweDAwNDk0OTQ5LAorCTB4MDA4MDgwODAsIDB4MDA1MDUwNTAsIDB4MDBhN2E3YTcsIDB4MDBmNmY2ZjYsCisJMHgwMDc3Nzc3NywgMHgwMDkzOTM5MywgMHgwMDg2ODY4NiwgMHgwMDgzODM4MywKKwkweDAwMmEyYTJhLCAweDAwYzdjN2M3LCAweDAwNWI1YjViLCAweDAwZTllOWU5LAorCTB4MDBlZWVlZWUsIDB4MDA4ZjhmOGYsIDB4MDAwMTAxMDEsIDB4MDAzZDNkM2QsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwMzAzM1syNTZdID0gewotCTB4MzgwMDM4MzgsMHg0MTAwNDE0MSwweDE2MDAxNjE2LDB4NzYwMDc2NzYsCi0JMHhkOTAwZDlkOSwweDkzMDA5MzkzLDB4NjAwMDYwNjAsMHhmMjAwZjJmMiwKLQkweDcyMDA3MjcyLDB4YzIwMGMyYzIsMHhhYjAwYWJhYiwweDlhMDA5YTlhLAotCTB4NzUwMDc1NzUsMHgwNjAwMDYwNiwweDU3MDA1NzU3LDB4YTAwMGEwYTAsCi0JMHg5MTAwOTE5MSwweGY3MDBmN2Y3LDB4YjUwMGI1YjUsMHhjOTAwYzljOSwKLQkweGEyMDBhMmEyLDB4OGMwMDhjOGMsMHhkMjAwZDJkMiwweDkwMDA5MDkwLAotCTB4ZjYwMGY2ZjYsMHgwNzAwMDcwNywweGE3MDBhN2E3LDB4MjcwMDI3MjcsCi0JMHg4ZTAwOGU4ZSwweGIyMDBiMmIyLDB4NDkwMDQ5NDksMHhkZTAwZGVkZSwKLQkweDQzMDA0MzQzLDB4NWMwMDVjNWMsMHhkNzAwZDdkNywweGM3MDBjN2M3LAotCTB4M2UwMDNlM2UsMHhmNTAwZjVmNSwweDhmMDA4ZjhmLDB4NjcwMDY3NjcsCi0JMHgxZjAwMWYxZiwweDE4MDAxODE4LDB4NmUwMDZlNmUsMHhhZjAwYWZhZiwKLQkweDJmMDAyZjJmLDB4ZTIwMGUyZTIsMHg4NTAwODU4NSwweDBkMDAwZDBkLAotCTB4NTMwMDUzNTMsMHhmMDAwZjBmMCwweDljMDA5YzljLDB4NjUwMDY1NjUsCi0JMHhlYTAwZWFlYSwweGEzMDBhM2EzLDB4YWUwMGFlYWUsMHg5ZTAwOWU5ZSwKLQkweGVjMDBlY2VjLDB4ODAwMDgwODAsMHgyZDAwMmQyZCwweDZiMDA2YjZiLAotCTB4YTgwMGE4YTgsMHgyYjAwMmIyYiwweDM2MDAzNjM2LDB4YTYwMGE2YTYsCi0JMHhjNTAwYzVjNSwweDg2MDA4Njg2LDB4NGQwMDRkNGQsMHgzMzAwMzMzMywKLQkweGZkMDBmZGZkLDB4NjYwMDY2NjYsMHg1ODAwNTg1OCwweDk2MDA5Njk2LAotCTB4M2EwMDNhM2EsMHgwOTAwMDkwOSwweDk1MDA5NTk1LDB4MTAwMDEwMTAsCi0JMHg3ODAwNzg3OCwweGQ4MDBkOGQ4LDB4NDIwMDQyNDIsMHhjYzAwY2NjYywKLQkweGVmMDBlZmVmLDB4MjYwMDI2MjYsMHhlNTAwZTVlNSwweDYxMDA2MTYxLAotCTB4MWEwMDFhMWEsMHgzZjAwM2YzZiwweDNiMDAzYjNiLDB4ODIwMDgyODIsCi0JMHhiNjAwYjZiNiwweGRiMDBkYmRiLDB4ZDQwMGQ0ZDQsMHg5ODAwOTg5OCwKLQkweGU4MDBlOGU4LDB4OGIwMDhiOGIsMHgwMjAwMDIwMiwweGViMDBlYmViLAotCTB4MGEwMDBhMGEsMHgyYzAwMmMyYywweDFkMDAxZDFkLDB4YjAwMGIwYjAsCi0JMHg2ZjAwNmY2ZiwweDhkMDA4ZDhkLDB4ODgwMDg4ODgsMHgwZTAwMGUwZSwKLQkweDE5MDAxOTE5LDB4ODcwMDg3ODcsMHg0ZTAwNGU0ZSwweDBiMDAwYjBiLAotCTB4YTkwMGE5YTksMHgwYzAwMGMwYywweDc5MDA3OTc5LDB4MTEwMDExMTEsCi0JMHg3ZjAwN2Y3ZiwweDIyMDAyMjIyLDB4ZTcwMGU3ZTcsMHg1OTAwNTk1OSwKLQkweGUxMDBlMWUxLDB4ZGEwMGRhZGEsMHgzZDAwM2QzZCwweGM4MDBjOGM4LAotCTB4MTIwMDEyMTIsMHgwNDAwMDQwNCwweDc0MDA3NDc0LDB4NTQwMDU0NTQsCi0JMHgzMDAwMzAzMCwweDdlMDA3ZTdlLDB4YjQwMGI0YjQsMHgyODAwMjgyOCwKLQkweDU1MDA1NTU1LDB4NjgwMDY4NjgsMHg1MDAwNTA1MCwweGJlMDBiZWJlLAotCTB4ZDAwMGQwZDAsMHhjNDAwYzRjNCwweDMxMDAzMTMxLDB4Y2IwMGNiY2IsCi0JMHgyYTAwMmEyYSwweGFkMDBhZGFkLDB4MGYwMDBmMGYsMHhjYTAwY2FjYSwKLQkweDcwMDA3MDcwLDB4ZmYwMGZmZmYsMHgzMjAwMzIzMiwweDY5MDA2OTY5LAotCTB4MDgwMDA4MDgsMHg2MjAwNjI2MiwweDAwMDAwMDAwLDB4MjQwMDI0MjQsCi0JMHhkMTAwZDFkMSwweGZiMDBmYmZiLDB4YmEwMGJhYmEsMHhlZDAwZWRlZCwKLQkweDQ1MDA0NTQ1LDB4ODEwMDgxODEsMHg3MzAwNzM3MywweDZkMDA2ZDZkLAotCTB4ODQwMDg0ODQsMHg5ZjAwOWY5ZiwweGVlMDBlZWVlLDB4NGEwMDRhNGEsCi0JMHhjMzAwYzNjMywweDJlMDAyZTJlLDB4YzEwMGMxYzEsMHgwMTAwMDEwMSwKLQkweGU2MDBlNmU2LDB4MjUwMDI1MjUsMHg0ODAwNDg0OCwweDk5MDA5OTk5LAotCTB4YjkwMGI5YjksMHhiMzAwYjNiMywweDdiMDA3YjdiLDB4ZjkwMGY5ZjksCi0JMHhjZTAwY2VjZSwweGJmMDBiZmJmLDB4ZGYwMGRmZGYsMHg3MTAwNzE3MSwKLQkweDI5MDAyOTI5LDB4Y2QwMGNkY2QsMHg2YzAwNmM2YywweDEzMDAxMzEzLAotCTB4NjQwMDY0NjQsMHg5YjAwOWI5YiwweDYzMDA2MzYzLDB4OWQwMDlkOWQsCi0JMHhjMDAwYzBjMCwweDRiMDA0YjRiLDB4YjcwMGI3YjcsMHhhNTAwYTVhNSwKLQkweDg5MDA4OTg5LDB4NWYwMDVmNWYsMHhiMTAwYjFiMSwweDE3MDAxNzE3LAotCTB4ZjQwMGY0ZjQsMHhiYzAwYmNiYywweGQzMDBkM2QzLDB4NDYwMDQ2NDYsCi0JMHhjZjAwY2ZjZiwweDM3MDAzNzM3LDB4NWUwMDVlNWUsMHg0NzAwNDc0NywKLQkweDk0MDA5NDk0LDB4ZmEwMGZhZmEsMHhmYzAwZmNmYywweDViMDA1YjViLAotCTB4OTcwMDk3OTcsMHhmZTAwZmVmZSwweDVhMDA1YTVhLDB4YWMwMGFjYWMsCi0JMHgzYzAwM2MzYywweDRjMDA0YzRjLDB4MDMwMDAzMDMsMHgzNTAwMzUzNSwKLQkweGYzMDBmM2YzLDB4MjMwMDIzMjMsMHhiODAwYjhiOCwweDVkMDA1ZDVkLAotCTB4NmEwMDZhNmEsMHg5MjAwOTI5MiwweGQ1MDBkNWQ1LDB4MjEwMDIxMjEsCi0JMHg0NDAwNDQ0NCwweDUxMDA1MTUxLDB4YzYwMGM2YzYsMHg3ZDAwN2Q3ZCwKLQkweDM5MDAzOTM5LDB4ODMwMDgzODMsMHhkYzAwZGNkYywweGFhMDBhYWFhLAotCTB4N2MwMDdjN2MsMHg3NzAwNzc3NywweDU2MDA1NjU2LDB4MDUwMDA1MDUsCi0JMHgxYjAwMWIxYiwweGE0MDBhNGE0LDB4MTUwMDE1MTUsMHgzNDAwMzQzNCwKLQkweDFlMDAxZTFlLDB4MWMwMDFjMWMsMHhmODAwZjhmOCwweDUyMDA1MjUyLAotCTB4MjAwMDIwMjAsMHgxNDAwMTQxNCwweGU5MDBlOWU5LDB4YmQwMGJkYmQsCi0JMHhkZDAwZGRkZCwweGU0MDBlNGU0LDB4YTEwMGExYTEsMHhlMDAwZTBlMCwKLQkweDhhMDA4YThhLDB4ZjEwMGYxZjEsMHhkNjAwZDZkNiwweDdhMDA3YTdhLAotCTB4YmIwMGJiYmIsMHhlMzAwZTNlMywweDQwMDA0MDQwLDB4NGYwMDRmNGYsCisJMHgzODAwMzgzOCwgMHg0MTAwNDE0MSwgMHgxNjAwMTYxNiwgMHg3NjAwNzY3NiwKKwkweGQ5MDBkOWQ5LCAweDkzMDA5MzkzLCAweDYwMDA2MDYwLCAweGYyMDBmMmYyLAorCTB4NzIwMDcyNzIsIDB4YzIwMGMyYzIsIDB4YWIwMGFiYWIsIDB4OWEwMDlhOWEsCisJMHg3NTAwNzU3NSwgMHgwNjAwMDYwNiwgMHg1NzAwNTc1NywgMHhhMDAwYTBhMCwKKwkweDkxMDA5MTkxLCAweGY3MDBmN2Y3LCAweGI1MDBiNWI1LCAweGM5MDBjOWM5LAorCTB4YTIwMGEyYTIsIDB4OGMwMDhjOGMsIDB4ZDIwMGQyZDIsIDB4OTAwMDkwOTAsCisJMHhmNjAwZjZmNiwgMHgwNzAwMDcwNywgMHhhNzAwYTdhNywgMHgyNzAwMjcyNywKKwkweDhlMDA4ZThlLCAweGIyMDBiMmIyLCAweDQ5MDA0OTQ5LCAweGRlMDBkZWRlLAorCTB4NDMwMDQzNDMsIDB4NWMwMDVjNWMsIDB4ZDcwMGQ3ZDcsIDB4YzcwMGM3YzcsCisJMHgzZTAwM2UzZSwgMHhmNTAwZjVmNSwgMHg4ZjAwOGY4ZiwgMHg2NzAwNjc2NywKKwkweDFmMDAxZjFmLCAweDE4MDAxODE4LCAweDZlMDA2ZTZlLCAweGFmMDBhZmFmLAorCTB4MmYwMDJmMmYsIDB4ZTIwMGUyZTIsIDB4ODUwMDg1ODUsIDB4MGQwMDBkMGQsCisJMHg1MzAwNTM1MywgMHhmMDAwZjBmMCwgMHg5YzAwOWM5YywgMHg2NTAwNjU2NSwKKwkweGVhMDBlYWVhLCAweGEzMDBhM2EzLCAweGFlMDBhZWFlLCAweDllMDA5ZTllLAorCTB4ZWMwMGVjZWMsIDB4ODAwMDgwODAsIDB4MmQwMDJkMmQsIDB4NmIwMDZiNmIsCisJMHhhODAwYThhOCwgMHgyYjAwMmIyYiwgMHgzNjAwMzYzNiwgMHhhNjAwYTZhNiwKKwkweGM1MDBjNWM1LCAweDg2MDA4Njg2LCAweDRkMDA0ZDRkLCAweDMzMDAzMzMzLAorCTB4ZmQwMGZkZmQsIDB4NjYwMDY2NjYsIDB4NTgwMDU4NTgsIDB4OTYwMDk2OTYsCisJMHgzYTAwM2EzYSwgMHgwOTAwMDkwOSwgMHg5NTAwOTU5NSwgMHgxMDAwMTAxMCwKKwkweDc4MDA3ODc4LCAweGQ4MDBkOGQ4LCAweDQyMDA0MjQyLCAweGNjMDBjY2NjLAorCTB4ZWYwMGVmZWYsIDB4MjYwMDI2MjYsIDB4ZTUwMGU1ZTUsIDB4NjEwMDYxNjEsCisJMHgxYTAwMWExYSwgMHgzZjAwM2YzZiwgMHgzYjAwM2IzYiwgMHg4MjAwODI4MiwKKwkweGI2MDBiNmI2LCAweGRiMDBkYmRiLCAweGQ0MDBkNGQ0LCAweDk4MDA5ODk4LAorCTB4ZTgwMGU4ZTgsIDB4OGIwMDhiOGIsIDB4MDIwMDAyMDIsIDB4ZWIwMGViZWIsCisJMHgwYTAwMGEwYSwgMHgyYzAwMmMyYywgMHgxZDAwMWQxZCwgMHhiMDAwYjBiMCwKKwkweDZmMDA2ZjZmLCAweDhkMDA4ZDhkLCAweDg4MDA4ODg4LCAweDBlMDAwZTBlLAorCTB4MTkwMDE5MTksIDB4ODcwMDg3ODcsIDB4NGUwMDRlNGUsIDB4MGIwMDBiMGIsCisJMHhhOTAwYTlhOSwgMHgwYzAwMGMwYywgMHg3OTAwNzk3OSwgMHgxMTAwMTExMSwKKwkweDdmMDA3ZjdmLCAweDIyMDAyMjIyLCAweGU3MDBlN2U3LCAweDU5MDA1OTU5LAorCTB4ZTEwMGUxZTEsIDB4ZGEwMGRhZGEsIDB4M2QwMDNkM2QsIDB4YzgwMGM4YzgsCisJMHgxMjAwMTIxMiwgMHgwNDAwMDQwNCwgMHg3NDAwNzQ3NCwgMHg1NDAwNTQ1NCwKKwkweDMwMDAzMDMwLCAweDdlMDA3ZTdlLCAweGI0MDBiNGI0LCAweDI4MDAyODI4LAorCTB4NTUwMDU1NTUsIDB4NjgwMDY4NjgsIDB4NTAwMDUwNTAsIDB4YmUwMGJlYmUsCisJMHhkMDAwZDBkMCwgMHhjNDAwYzRjNCwgMHgzMTAwMzEzMSwgMHhjYjAwY2JjYiwKKwkweDJhMDAyYTJhLCAweGFkMDBhZGFkLCAweDBmMDAwZjBmLCAweGNhMDBjYWNhLAorCTB4NzAwMDcwNzAsIDB4ZmYwMGZmZmYsIDB4MzIwMDMyMzIsIDB4NjkwMDY5NjksCisJMHgwODAwMDgwOCwgMHg2MjAwNjI2MiwgMHgwMDAwMDAwMCwgMHgyNDAwMjQyNCwKKwkweGQxMDBkMWQxLCAweGZiMDBmYmZiLCAweGJhMDBiYWJhLCAweGVkMDBlZGVkLAorCTB4NDUwMDQ1NDUsIDB4ODEwMDgxODEsIDB4NzMwMDczNzMsIDB4NmQwMDZkNmQsCisJMHg4NDAwODQ4NCwgMHg5ZjAwOWY5ZiwgMHhlZTAwZWVlZSwgMHg0YTAwNGE0YSwKKwkweGMzMDBjM2MzLCAweDJlMDAyZTJlLCAweGMxMDBjMWMxLCAweDAxMDAwMTAxLAorCTB4ZTYwMGU2ZTYsIDB4MjUwMDI1MjUsIDB4NDgwMDQ4NDgsIDB4OTkwMDk5OTksCisJMHhiOTAwYjliOSwgMHhiMzAwYjNiMywgMHg3YjAwN2I3YiwgMHhmOTAwZjlmOSwKKwkweGNlMDBjZWNlLCAweGJmMDBiZmJmLCAweGRmMDBkZmRmLCAweDcxMDA3MTcxLAorCTB4MjkwMDI5MjksIDB4Y2QwMGNkY2QsIDB4NmMwMDZjNmMsIDB4MTMwMDEzMTMsCisJMHg2NDAwNjQ2NCwgMHg5YjAwOWI5YiwgMHg2MzAwNjM2MywgMHg5ZDAwOWQ5ZCwKKwkweGMwMDBjMGMwLCAweDRiMDA0YjRiLCAweGI3MDBiN2I3LCAweGE1MDBhNWE1LAorCTB4ODkwMDg5ODksIDB4NWYwMDVmNWYsIDB4YjEwMGIxYjEsIDB4MTcwMDE3MTcsCisJMHhmNDAwZjRmNCwgMHhiYzAwYmNiYywgMHhkMzAwZDNkMywgMHg0NjAwNDY0NiwKKwkweGNmMDBjZmNmLCAweDM3MDAzNzM3LCAweDVlMDA1ZTVlLCAweDQ3MDA0NzQ3LAorCTB4OTQwMDk0OTQsIDB4ZmEwMGZhZmEsIDB4ZmMwMGZjZmMsIDB4NWIwMDViNWIsCisJMHg5NzAwOTc5NywgMHhmZTAwZmVmZSwgMHg1YTAwNWE1YSwgMHhhYzAwYWNhYywKKwkweDNjMDAzYzNjLCAweDRjMDA0YzRjLCAweDAzMDAwMzAzLCAweDM1MDAzNTM1LAorCTB4ZjMwMGYzZjMsIDB4MjMwMDIzMjMsIDB4YjgwMGI4YjgsIDB4NWQwMDVkNWQsCisJMHg2YTAwNmE2YSwgMHg5MjAwOTI5MiwgMHhkNTAwZDVkNSwgMHgyMTAwMjEyMSwKKwkweDQ0MDA0NDQ0LCAweDUxMDA1MTUxLCAweGM2MDBjNmM2LCAweDdkMDA3ZDdkLAorCTB4MzkwMDM5MzksIDB4ODMwMDgzODMsIDB4ZGMwMGRjZGMsIDB4YWEwMGFhYWEsCisJMHg3YzAwN2M3YywgMHg3NzAwNzc3NywgMHg1NjAwNTY1NiwgMHgwNTAwMDUwNSwKKwkweDFiMDAxYjFiLCAweGE0MDBhNGE0LCAweDE1MDAxNTE1LCAweDM0MDAzNDM0LAorCTB4MWUwMDFlMWUsIDB4MWMwMDFjMWMsIDB4ZjgwMGY4ZjgsIDB4NTIwMDUyNTIsCisJMHgyMDAwMjAyMCwgMHgxNDAwMTQxNCwgMHhlOTAwZTllOSwgMHhiZDAwYmRiZCwKKwkweGRkMDBkZGRkLCAweGU0MDBlNGU0LCAweGExMDBhMWExLCAweGUwMDBlMGUwLAorCTB4OGEwMDhhOGEsIDB4ZjEwMGYxZjEsIDB4ZDYwMGQ2ZDYsIDB4N2EwMDdhN2EsCisJMHhiYjAwYmJiYiwgMHhlMzAwZTNlMywgMHg0MDAwNDA0MCwgMHg0ZjAwNGY0ZiwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3A0NDA0WzI1Nl0gPSB7Ci0JMHg3MDcwMDA3MCwweDJjMmMwMDJjLDB4YjNiMzAwYjMsMHhjMGMwMDBjMCwKLQkweGU0ZTQwMGU0LDB4NTc1NzAwNTcsMHhlYWVhMDBlYSwweGFlYWUwMGFlLAotCTB4MjMyMzAwMjMsMHg2YjZiMDA2YiwweDQ1NDUwMDQ1LDB4YTVhNTAwYTUsCi0JMHhlZGVkMDBlZCwweDRmNGYwMDRmLDB4MWQxZDAwMWQsMHg5MjkyMDA5MiwKLQkweDg2ODYwMDg2LDB4YWZhZjAwYWYsMHg3YzdjMDA3YywweDFmMWYwMDFmLAotCTB4M2UzZTAwM2UsMHhkY2RjMDBkYywweDVlNWUwMDVlLDB4MGIwYjAwMGIsCi0JMHhhNmE2MDBhNiwweDM5MzkwMDM5LDB4ZDVkNTAwZDUsMHg1ZDVkMDA1ZCwKLQkweGQ5ZDkwMGQ5LDB4NWE1YTAwNWEsMHg1MTUxMDA1MSwweDZjNmMwMDZjLAotCTB4OGI4YjAwOGIsMHg5YTlhMDA5YSwweGZiZmIwMGZiLDB4YjBiMDAwYjAsCi0JMHg3NDc0MDA3NCwweDJiMmIwMDJiLDB4ZjBmMDAwZjAsMHg4NDg0MDA4NCwKLQkweGRmZGYwMGRmLDB4Y2JjYjAwY2IsMHgzNDM0MDAzNCwweDc2NzYwMDc2LAotCTB4NmQ2ZDAwNmQsMHhhOWE5MDBhOSwweGQxZDEwMGQxLDB4MDQwNDAwMDQsCi0JMHgxNDE0MDAxNCwweDNhM2EwMDNhLDB4ZGVkZTAwZGUsMHgxMTExMDAxMSwKLQkweDMyMzIwMDMyLDB4OWM5YzAwOWMsMHg1MzUzMDA1MywweGYyZjIwMGYyLAotCTB4ZmVmZTAwZmUsMHhjZmNmMDBjZiwweGMzYzMwMGMzLDB4N2E3YTAwN2EsCi0JMHgyNDI0MDAyNCwweGU4ZTgwMGU4LDB4NjA2MDAwNjAsMHg2OTY5MDA2OSwKLQkweGFhYWEwMGFhLDB4YTBhMDAwYTAsMHhhMWExMDBhMSwweDYyNjIwMDYyLAotCTB4NTQ1NDAwNTQsMHgxZTFlMDAxZSwweGUwZTAwMGUwLDB4NjQ2NDAwNjQsCi0JMHgxMDEwMDAxMCwweDAwMDAwMDAwLDB4YTNhMzAwYTMsMHg3NTc1MDA3NSwKLQkweDhhOGEwMDhhLDB4ZTZlNjAwZTYsMHgwOTA5MDAwOSwweGRkZGQwMGRkLAotCTB4ODc4NzAwODcsMHg4MzgzMDA4MywweGNkY2QwMGNkLDB4OTA5MDAwOTAsCi0JMHg3MzczMDA3MywweGY2ZjYwMGY2LDB4OWQ5ZDAwOWQsMHhiZmJmMDBiZiwKLQkweDUyNTIwMDUyLDB4ZDhkODAwZDgsMHhjOGM4MDBjOCwweGM2YzYwMGM2LAotCTB4ODE4MTAwODEsMHg2ZjZmMDA2ZiwweDEzMTMwMDEzLDB4NjM2MzAwNjMsCi0JMHhlOWU5MDBlOSwweGE3YTcwMGE3LDB4OWY5ZjAwOWYsMHhiY2JjMDBiYywKLQkweDI5MjkwMDI5LDB4ZjlmOTAwZjksMHgyZjJmMDAyZiwweGI0YjQwMGI0LAotCTB4Nzg3ODAwNzgsMHgwNjA2MDAwNiwweGU3ZTcwMGU3LDB4NzE3MTAwNzEsCi0JMHhkNGQ0MDBkNCwweGFiYWIwMGFiLDB4ODg4ODAwODgsMHg4ZDhkMDA4ZCwKLQkweDcyNzIwMDcyLDB4YjliOTAwYjksMHhmOGY4MDBmOCwweGFjYWMwMGFjLAotCTB4MzYzNjAwMzYsMHgyYTJhMDAyYSwweDNjM2MwMDNjLDB4ZjFmMTAwZjEsCi0JMHg0MDQwMDA0MCwweGQzZDMwMGQzLDB4YmJiYjAwYmIsMHg0MzQzMDA0MywKLQkweDE1MTUwMDE1LDB4YWRhZDAwYWQsMHg3Nzc3MDA3NywweDgwODAwMDgwLAotCTB4ODI4MjAwODIsMHhlY2VjMDBlYywweDI3MjcwMDI3LDB4ZTVlNTAwZTUsCi0JMHg4NTg1MDA4NSwweDM1MzUwMDM1LDB4MGMwYzAwMGMsMHg0MTQxMDA0MSwKLQkweGVmZWYwMGVmLDB4OTM5MzAwOTMsMHgxOTE5MDAxOSwweDIxMjEwMDIxLAotCTB4MGUwZTAwMGUsMHg0ZTRlMDA0ZSwweDY1NjUwMDY1LDB4YmRiZDAwYmQsCi0JMHhiOGI4MDBiOCwweDhmOGYwMDhmLDB4ZWJlYjAwZWIsMHhjZWNlMDBjZSwKLQkweDMwMzAwMDMwLDB4NWY1ZjAwNWYsMHhjNWM1MDBjNSwweDFhMWEwMDFhLAotCTB4ZTFlMTAwZTEsMHhjYWNhMDBjYSwweDQ3NDcwMDQ3LDB4M2QzZDAwM2QsCi0JMHgwMTAxMDAwMSwweGQ2ZDYwMGQ2LDB4NTY1NjAwNTYsMHg0ZDRkMDA0ZCwKLQkweDBkMGQwMDBkLDB4NjY2NjAwNjYsMHhjY2NjMDBjYywweDJkMmQwMDJkLAotCTB4MTIxMjAwMTIsMHgyMDIwMDAyMCwweGIxYjEwMGIxLDB4OTk5OTAwOTksCi0JMHg0YzRjMDA0YywweGMyYzIwMGMyLDB4N2U3ZTAwN2UsMHgwNTA1MDAwNSwKLQkweGI3YjcwMGI3LDB4MzEzMTAwMzEsMHgxNzE3MDAxNywweGQ3ZDcwMGQ3LAotCTB4NTg1ODAwNTgsMHg2MTYxMDA2MSwweDFiMWIwMDFiLDB4MWMxYzAwMWMsCi0JMHgwZjBmMDAwZiwweDE2MTYwMDE2LDB4MTgxODAwMTgsMHgyMjIyMDAyMiwKLQkweDQ0NDQwMDQ0LDB4YjJiMjAwYjIsMHhiNWI1MDBiNSwweDkxOTEwMDkxLAotCTB4MDgwODAwMDgsMHhhOGE4MDBhOCwweGZjZmMwMGZjLDB4NTA1MDAwNTAsCi0JMHhkMGQwMDBkMCwweDdkN2QwMDdkLDB4ODk4OTAwODksMHg5Nzk3MDA5NywKLQkweDViNWIwMDViLDB4OTU5NTAwOTUsMHhmZmZmMDBmZiwweGQyZDIwMGQyLAotCTB4YzRjNDAwYzQsMHg0ODQ4MDA0OCwweGY3ZjcwMGY3LDB4ZGJkYjAwZGIsCi0JMHgwMzAzMDAwMywweGRhZGEwMGRhLDB4M2YzZjAwM2YsMHg5NDk0MDA5NCwKLQkweDVjNWMwMDVjLDB4MDIwMjAwMDIsMHg0YTRhMDA0YSwweDMzMzMwMDMzLAotCTB4Njc2NzAwNjcsMHhmM2YzMDBmMywweDdmN2YwMDdmLDB4ZTJlMjAwZTIsCi0JMHg5YjliMDA5YiwweDI2MjYwMDI2LDB4MzczNzAwMzcsMHgzYjNiMDAzYiwKLQkweDk2OTYwMDk2LDB4NGI0YjAwNGIsMHhiZWJlMDBiZSwweDJlMmUwMDJlLAotCTB4Nzk3OTAwNzksMHg4YzhjMDA4YywweDZlNmUwMDZlLDB4OGU4ZTAwOGUsCi0JMHhmNWY1MDBmNSwweGI2YjYwMGI2LDB4ZmRmZDAwZmQsMHg1OTU5MDA1OSwKLQkweDk4OTgwMDk4LDB4NmE2YTAwNmEsMHg0NjQ2MDA0NiwweGJhYmEwMGJhLAotCTB4MjUyNTAwMjUsMHg0MjQyMDA0MiwweGEyYTIwMGEyLDB4ZmFmYTAwZmEsCi0JMHgwNzA3MDAwNywweDU1NTUwMDU1LDB4ZWVlZTAwZWUsMHgwYTBhMDAwYSwKLQkweDQ5NDkwMDQ5LDB4Njg2ODAwNjgsMHgzODM4MDAzOCwweGE0YTQwMGE0LAotCTB4MjgyODAwMjgsMHg3YjdiMDA3YiwweGM5YzkwMGM5LDB4YzFjMTAwYzEsCi0JMHhlM2UzMDBlMywweGY0ZjQwMGY0LDB4YzdjNzAwYzcsMHg5ZTllMDA5ZSwKKwkweDcwNzAwMDcwLCAweDJjMmMwMDJjLCAweGIzYjMwMGIzLCAweGMwYzAwMGMwLAorCTB4ZTRlNDAwZTQsIDB4NTc1NzAwNTcsIDB4ZWFlYTAwZWEsIDB4YWVhZTAwYWUsCisJMHgyMzIzMDAyMywgMHg2YjZiMDA2YiwgMHg0NTQ1MDA0NSwgMHhhNWE1MDBhNSwKKwkweGVkZWQwMGVkLCAweDRmNGYwMDRmLCAweDFkMWQwMDFkLCAweDkyOTIwMDkyLAorCTB4ODY4NjAwODYsIDB4YWZhZjAwYWYsIDB4N2M3YzAwN2MsIDB4MWYxZjAwMWYsCisJMHgzZTNlMDAzZSwgMHhkY2RjMDBkYywgMHg1ZTVlMDA1ZSwgMHgwYjBiMDAwYiwKKwkweGE2YTYwMGE2LCAweDM5MzkwMDM5LCAweGQ1ZDUwMGQ1LCAweDVkNWQwMDVkLAorCTB4ZDlkOTAwZDksIDB4NWE1YTAwNWEsIDB4NTE1MTAwNTEsIDB4NmM2YzAwNmMsCisJMHg4YjhiMDA4YiwgMHg5YTlhMDA5YSwgMHhmYmZiMDBmYiwgMHhiMGIwMDBiMCwKKwkweDc0NzQwMDc0LCAweDJiMmIwMDJiLCAweGYwZjAwMGYwLCAweDg0ODQwMDg0LAorCTB4ZGZkZjAwZGYsIDB4Y2JjYjAwY2IsIDB4MzQzNDAwMzQsIDB4NzY3NjAwNzYsCisJMHg2ZDZkMDA2ZCwgMHhhOWE5MDBhOSwgMHhkMWQxMDBkMSwgMHgwNDA0MDAwNCwKKwkweDE0MTQwMDE0LCAweDNhM2EwMDNhLCAweGRlZGUwMGRlLCAweDExMTEwMDExLAorCTB4MzIzMjAwMzIsIDB4OWM5YzAwOWMsIDB4NTM1MzAwNTMsIDB4ZjJmMjAwZjIsCisJMHhmZWZlMDBmZSwgMHhjZmNmMDBjZiwgMHhjM2MzMDBjMywgMHg3YTdhMDA3YSwKKwkweDI0MjQwMDI0LCAweGU4ZTgwMGU4LCAweDYwNjAwMDYwLCAweDY5NjkwMDY5LAorCTB4YWFhYTAwYWEsIDB4YTBhMDAwYTAsIDB4YTFhMTAwYTEsIDB4NjI2MjAwNjIsCisJMHg1NDU0MDA1NCwgMHgxZTFlMDAxZSwgMHhlMGUwMDBlMCwgMHg2NDY0MDA2NCwKKwkweDEwMTAwMDEwLCAweDAwMDAwMDAwLCAweGEzYTMwMGEzLCAweDc1NzUwMDc1LAorCTB4OGE4YTAwOGEsIDB4ZTZlNjAwZTYsIDB4MDkwOTAwMDksIDB4ZGRkZDAwZGQsCisJMHg4Nzg3MDA4NywgMHg4MzgzMDA4MywgMHhjZGNkMDBjZCwgMHg5MDkwMDA5MCwKKwkweDczNzMwMDczLCAweGY2ZjYwMGY2LCAweDlkOWQwMDlkLCAweGJmYmYwMGJmLAorCTB4NTI1MjAwNTIsIDB4ZDhkODAwZDgsIDB4YzhjODAwYzgsIDB4YzZjNjAwYzYsCisJMHg4MTgxMDA4MSwgMHg2ZjZmMDA2ZiwgMHgxMzEzMDAxMywgMHg2MzYzMDA2MywKKwkweGU5ZTkwMGU5LCAweGE3YTcwMGE3LCAweDlmOWYwMDlmLCAweGJjYmMwMGJjLAorCTB4MjkyOTAwMjksIDB4ZjlmOTAwZjksIDB4MmYyZjAwMmYsIDB4YjRiNDAwYjQsCisJMHg3ODc4MDA3OCwgMHgwNjA2MDAwNiwgMHhlN2U3MDBlNywgMHg3MTcxMDA3MSwKKwkweGQ0ZDQwMGQ0LCAweGFiYWIwMGFiLCAweDg4ODgwMDg4LCAweDhkOGQwMDhkLAorCTB4NzI3MjAwNzIsIDB4YjliOTAwYjksIDB4ZjhmODAwZjgsIDB4YWNhYzAwYWMsCisJMHgzNjM2MDAzNiwgMHgyYTJhMDAyYSwgMHgzYzNjMDAzYywgMHhmMWYxMDBmMSwKKwkweDQwNDAwMDQwLCAweGQzZDMwMGQzLCAweGJiYmIwMGJiLCAweDQzNDMwMDQzLAorCTB4MTUxNTAwMTUsIDB4YWRhZDAwYWQsIDB4Nzc3NzAwNzcsIDB4ODA4MDAwODAsCisJMHg4MjgyMDA4MiwgMHhlY2VjMDBlYywgMHgyNzI3MDAyNywgMHhlNWU1MDBlNSwKKwkweDg1ODUwMDg1LCAweDM1MzUwMDM1LCAweDBjMGMwMDBjLCAweDQxNDEwMDQxLAorCTB4ZWZlZjAwZWYsIDB4OTM5MzAwOTMsIDB4MTkxOTAwMTksIDB4MjEyMTAwMjEsCisJMHgwZTBlMDAwZSwgMHg0ZTRlMDA0ZSwgMHg2NTY1MDA2NSwgMHhiZGJkMDBiZCwKKwkweGI4YjgwMGI4LCAweDhmOGYwMDhmLCAweGViZWIwMGViLCAweGNlY2UwMGNlLAorCTB4MzAzMDAwMzAsIDB4NWY1ZjAwNWYsIDB4YzVjNTAwYzUsIDB4MWExYTAwMWEsCisJMHhlMWUxMDBlMSwgMHhjYWNhMDBjYSwgMHg0NzQ3MDA0NywgMHgzZDNkMDAzZCwKKwkweDAxMDEwMDAxLCAweGQ2ZDYwMGQ2LCAweDU2NTYwMDU2LCAweDRkNGQwMDRkLAorCTB4MGQwZDAwMGQsIDB4NjY2NjAwNjYsIDB4Y2NjYzAwY2MsIDB4MmQyZDAwMmQsCisJMHgxMjEyMDAxMiwgMHgyMDIwMDAyMCwgMHhiMWIxMDBiMSwgMHg5OTk5MDA5OSwKKwkweDRjNGMwMDRjLCAweGMyYzIwMGMyLCAweDdlN2UwMDdlLCAweDA1MDUwMDA1LAorCTB4YjdiNzAwYjcsIDB4MzEzMTAwMzEsIDB4MTcxNzAwMTcsIDB4ZDdkNzAwZDcsCisJMHg1ODU4MDA1OCwgMHg2MTYxMDA2MSwgMHgxYjFiMDAxYiwgMHgxYzFjMDAxYywKKwkweDBmMGYwMDBmLCAweDE2MTYwMDE2LCAweDE4MTgwMDE4LCAweDIyMjIwMDIyLAorCTB4NDQ0NDAwNDQsIDB4YjJiMjAwYjIsIDB4YjViNTAwYjUsIDB4OTE5MTAwOTEsCisJMHgwODA4MDAwOCwgMHhhOGE4MDBhOCwgMHhmY2ZjMDBmYywgMHg1MDUwMDA1MCwKKwkweGQwZDAwMGQwLCAweDdkN2QwMDdkLCAweDg5ODkwMDg5LCAweDk3OTcwMDk3LAorCTB4NWI1YjAwNWIsIDB4OTU5NTAwOTUsIDB4ZmZmZjAwZmYsIDB4ZDJkMjAwZDIsCisJMHhjNGM0MDBjNCwgMHg0ODQ4MDA0OCwgMHhmN2Y3MDBmNywgMHhkYmRiMDBkYiwKKwkweDAzMDMwMDAzLCAweGRhZGEwMGRhLCAweDNmM2YwMDNmLCAweDk0OTQwMDk0LAorCTB4NWM1YzAwNWMsIDB4MDIwMjAwMDIsIDB4NGE0YTAwNGEsIDB4MzMzMzAwMzMsCisJMHg2NzY3MDA2NywgMHhmM2YzMDBmMywgMHg3ZjdmMDA3ZiwgMHhlMmUyMDBlMiwKKwkweDliOWIwMDliLCAweDI2MjYwMDI2LCAweDM3MzcwMDM3LCAweDNiM2IwMDNiLAorCTB4OTY5NjAwOTYsIDB4NGI0YjAwNGIsIDB4YmViZTAwYmUsIDB4MmUyZTAwMmUsCisJMHg3OTc5MDA3OSwgMHg4YzhjMDA4YywgMHg2ZTZlMDA2ZSwgMHg4ZThlMDA4ZSwKKwkweGY1ZjUwMGY1LCAweGI2YjYwMGI2LCAweGZkZmQwMGZkLCAweDU5NTkwMDU5LAorCTB4OTg5ODAwOTgsIDB4NmE2YTAwNmEsIDB4NDY0NjAwNDYsIDB4YmFiYTAwYmEsCisJMHgyNTI1MDAyNSwgMHg0MjQyMDA0MiwgMHhhMmEyMDBhMiwgMHhmYWZhMDBmYSwKKwkweDA3MDcwMDA3LCAweDU1NTUwMDU1LCAweGVlZWUwMGVlLCAweDBhMGEwMDBhLAorCTB4NDk0OTAwNDksIDB4Njg2ODAwNjgsIDB4MzgzODAwMzgsIDB4YTRhNDAwYTQsCisJMHgyODI4MDAyOCwgMHg3YjdiMDA3YiwgMHhjOWM5MDBjOSwgMHhjMWMxMDBjMSwKKwkweGUzZTMwMGUzLCAweGY0ZjQwMGY0LCAweGM3YzcwMGM3LCAweDllOWUwMDllLAogfTsKIAogCkBAIC0zNDQsNyArMzQ0LDcgQEAKIAlsciA9IChsciA8PCBiaXRzKSArIChybCA+PiAoMzIgLSBiaXRzKSk7CVwKIAlybCA9IChybCA8PCBiaXRzKSArIChyciA+PiAoMzIgLSBiaXRzKSk7CVwKIAlyciA9IChyciA8PCBiaXRzKSArICh3MCA+PiAoMzIgLSBiaXRzKSk7CVwKLSAgICB9IHdoaWxlKDApCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBST0xEUW8zMihsbCwgbHIsIHJsLCByciwgdzAsIHcxLCBiaXRzKQkJXAogICAgIGRvIHsJCQkJCQlcCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlsciA9IChybCA8PCAoYml0cyAtIDMyKSkgKyAocnIgPj4gKDY0IC0gYml0cykpOwlcCiAJcmwgPSAocnIgPDwgKGJpdHMgLSAzMikpICsgKHcwID4+ICg2NCAtIGJpdHMpKTsJXAogCXJyID0gKHcwIDw8IChiaXRzIC0gMzIpKSArICh3MSA+PiAoNjQgLSBiaXRzKSk7CVwKLSAgICB9IHdoaWxlKDApCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBDQU1FTExJQV9GKHhsLCB4ciwga2wsIGtyLCB5bCwgeXIsIGlsLCBpciwgdDAsIHQxKQlcCiAgICAgZG8gewkJCQkJCQlcCkBAIC0zNzMsNyArMzczLDcgQEAKIAl5bCBePSB5cjsJCQkJCQlcCiAJeXIgPSByb3IzMih5ciwgOCk7CQkJCQlcCiAJeXIgXj0geWw7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNVQktFWV9MKElOREVYKSAoc3Via2V5WyhJTkRFWCkqMl0pCiAjZGVmaW5lIFNVQktFWV9SKElOREVYKSAoc3Via2V5WyhJTkRFWCkqMiArIDFdKQpAQCAtODM1LDcgKzgzNSw3IEBACiBzdGF0aWMgdm9pZCBjYW1lbGxpYV9zZXR1cDE5Mihjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHUzMiAqc3Via2V5KQogewogCXVuc2lnbmVkIGNoYXIga2tbMzJdOwotCXUzMiBrcmxsLCBrcmxyLCBrcnJsLGtycnI7CisJdTMyIGtybGwsIGtybHIsIGtycmwsIGtycnI7CiAKIAltZW1jcHkoa2ssIGtleSwgMjQpOwogCW1lbWNweSgodW5zaWduZWQgY2hhciAqKSZrcmxsLCBrZXkrMTYsIDQpOwpAQCAtODY1LDcgKzg2NSw3IEBACiAJdDEgfD0gbHI7CQkJCQkJCVwKIAlsbCBePSB0MTsJCQkJCQkJXAogCXJyIF49IHJvbDMyKHQzLCAxKTsJCQkJCQlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQ0FNRUxMSUFfUk9VTkRTTSh4bCwgeHIsIGtsLCBrciwgeWwsIHlyLCBpbCwgaXIpCQlcCiAgICAgZG8gewkJCQkJCQkJXApAQCAtODgxLDEyICs4ODEsMTIgQEAKIAlpciBePSBpbCBeIGtyOwkJCQkJCQlcCiAJeWwgXj0gaXI7CQkJCQkJCVwKIAl5ciBePSByb3IzMihpbCwgOCkgXiBpcjsJCQkJCQlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKIC8qIG1heCA9IDI0OiAxMjhiaXQgZW5jcnlwdCwgbWF4ID0gMzI6IDI1NmJpdCBlbmNyeXB0ICovCiBzdGF0aWMgdm9pZCBjYW1lbGxpYV9kb19lbmNyeXB0KGNvbnN0IHUzMiAqc3Via2V5LCB1MzIgKmlvLCB1bnNpZ25lZCBtYXgpCiB7Ci0JdTMyIGlsLGlyLHQwLHQxOyAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KKwl1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqLwogCiAJLyogcHJlIHdoaXRlbmluZyBidXQgYWJzb3JiIGt3MiAqLwogCWlvWzBdIF49IFNVQktFWV9MKDApOwpAQCAtODk0LDMwICs4OTQsMzAgQEAKIAogCS8qIG1haW4gaXRlcmF0aW9uICovCiAjZGVmaW5lIFJPVU5EUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDIpLFNVQktFWV9SKGkgKyAyKSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgMyksU1VCS0VZX1IoaSArIDMpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyA0KSxTVUJLRVlfUihpICsgNCksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDUpLFNVQktFWV9SKGkgKyA1KSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgNiksU1VCS0VZX1IoaSArIDYpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyA3KSxTVUJLRVlfUihpICsgNyksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyAyKSwgU1VCS0VZX1IoaSArIDIpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgMyksIFNVQktFWV9SKGkgKyAzKSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDQpLCBTVUJLRVlfUihpICsgNCksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA1KSwgU1VCS0VZX1IoaSArIDUpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgNiksIFNVQktFWV9SKGkgKyA2KSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDcpLCBTVUJLRVlfUihpICsgNyksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAjZGVmaW5lIEZMUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sIFwKLQkJICAgICBTVUJLRVlfTChpICsgMCksU1VCS0VZX1IoaSArIDApLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDEpLFNVQktFWV9SKGkgKyAxKSwgXAotCQkgICAgIHQwLHQxLGlsLGlyKTsgXAorCUNBTUVMTElBX0ZMUyhpb1swXSwgaW9bMV0sIGlvWzJdLCBpb1szXSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAwKSwgU1VCS0VZX1IoaSArIDApLCBcCisJCSAgICAgU1VCS0VZX0woaSArIDEpLCBTVUJLRVlfUihpICsgMSksIFwKKwkJICAgICB0MCwgdDEsIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAKIAlST1VORFMoMCk7CkBAIC05NDEsNyArOTQxLDcgQEAKIAogc3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZGVjcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgaSkKIHsKLQl1MzIgaWwsaXIsdDAsdDE7ICAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqLworCXUzMiBpbCwgaXIsIHQwLCB0MTsgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGVzICovCiAKIAkvKiBwcmUgd2hpdGVuaW5nIGJ1dCBhYnNvcmIga3cyICovCiAJaW9bMF0gXj0gU1VCS0VZX0woaSk7CkBAIC05NDksMzAgKzk0OSwzMCBAQAogCiAJLyogbWFpbiBpdGVyYXRpb24gKi8KICNkZWZpbmUgUk9VTkRTKGkpIGRvIHsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgNyksU1VCS0VZX1IoaSArIDcpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyA2KSxTVUJLRVlfUihpICsgNiksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDUpLFNVQktFWV9SKGkgKyA1KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNCksU1VCS0VZX1IoaSArIDQpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyAzKSxTVUJLRVlfUihpICsgMyksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDIpLFNVQktFWV9SKGkgKyAyKSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDcpLCBTVUJLRVlfUihpICsgNyksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA2KSwgU1VCS0VZX1IoaSArIDYpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgNSksIFNVQktFWV9SKGkgKyA1KSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDQpLCBTVUJLRVlfUihpICsgNCksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyAzKSwgU1VCS0VZX1IoaSArIDMpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgMiksIFNVQktFWV9SKGkgKyAyKSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAogfSB3aGlsZSAoMCkKICNkZWZpbmUgRkxTKGkpIGRvIHsgXAotCUNBTUVMTElBX0ZMUyhpb1swXSxpb1sxXSxpb1syXSxpb1szXSwgXAotCQkgICAgIFNVQktFWV9MKGkgKyAxKSxTVUJLRVlfUihpICsgMSksIFwKLQkJICAgICBTVUJLRVlfTChpICsgMCksU1VCS0VZX1IoaSArIDApLCBcCi0JCSAgICAgdDAsdDEsaWwsaXIpOyBcCisJQ0FNRUxMSUFfRkxTKGlvWzBdLCBpb1sxXSwgaW9bMl0sIGlvWzNdLCBcCisJCSAgICAgU1VCS0VZX0woaSArIDEpLCBTVUJLRVlfUihpICsgMSksIFwKKwkJICAgICBTVUJLRVlfTChpICsgMCksIFNVQktFWV9SKGkgKyAwKSwgXAorCQkgICAgIHQwLCB0MSwgaWwsIGlyKTsgXAogfSB3aGlsZSAoMCkKIAogCWlmIChpID09IDMyKSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vY2FzdDUuYyBiL2NyeXB0by9jYXN0NS5jCmluZGV4IDhjYmUyOGYuLmExZDIyOTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYXN0NS5jCisrKyBiL2NyeXB0by9jYXN0NS5jCkBAIC01NjksMTIgKzU2OSwxMiBAQAogCTB4ZWFlZTY4MDEsIDB4OGRiMmEyODMsIDB4ZWE4YmY1OWUKIH07CiAKLSNkZWZpbmUgRjEoRCxtLHIpICAoICAoSSA9ICgobSkgKyAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gXiBzMlsoST4+MTYpJjB4ZmZdKSAtIHMzWyhJPj44KSYweGZmXSkgKyBzNFtJJjB4ZmZdKSApCi0jZGVmaW5lIEYyKEQsbSxyKSAgKCAgKEkgPSAoKG0pIF4gKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdIC0gczJbKEk+PjE2KSYweGZmXSkgKyBzM1soST4+OCkmMHhmZl0pIF4gczRbSSYweGZmXSkgKQotI2RlZmluZSBGMyhELG0scikgICggIChJID0gKChtKSAtIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSArIHMyWyhJPj4xNikmMHhmZl0pIF4gczNbKEk+PjgpJjB4ZmZdKSAtIHM0W0kmMHhmZl0pICkKKyNkZWZpbmUgRjEoRCwgbSwgcikgICgoSSA9ICgobSkgKyAoRCkpKSwgKEkgPSByb2wzMihJLCAocikpKSwgICBcCisgICAgKCgoczFbSSA+PiAyNF0gXiBzMlsoST4+MTYpJjB4ZmZdKSAtIHMzWyhJPj44KSYweGZmXSkgKyBzNFtJJjB4ZmZdKSkKKyNkZWZpbmUgRjIoRCwgbSwgcikgICgoSSA9ICgobSkgXiAoRCkpKSwgKEkgPSByb2wzMihJLCAocikpKSwgICBcCisgICAgKCgoczFbSSA+PiAyNF0gLSBzMlsoST4+MTYpJjB4ZmZdKSArIHMzWyhJPj44KSYweGZmXSkgXiBzNFtJJjB4ZmZdKSkKKyNkZWZpbmUgRjMoRCwgbSwgcikgICgoSSA9ICgobSkgLSAoRCkpKSwgKEkgPSByb2wzMihJLCAocikpKSwgICBcCisgICAgKCgoczFbSSA+PiAyNF0gKyBzMlsoST4+MTYpJjB4ZmZdKSBeIHMzWyhJPj44KSYweGZmXSkgLSBzNFtJJjB4ZmZdKSkKIAogCiBzdGF0aWMgdm9pZCBjYXN0NV9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXRidWYsIGNvbnN0IHU4ICppbmJ1ZikKQEAgLTY5NCw3ICs2OTQsNyBAQAogCWRzdFsxXSA9IGNwdV90b19iZTMyKGwpOwogfQogCi1zdGF0aWMgdm9pZCBrZXlfc2NoZWR1bGUodTMyICogeCwgdTMyICogeiwgdTMyICogaykKK3N0YXRpYyB2b2lkIGtleV9zY2hlZHVsZSh1MzIgKngsIHUzMiAqeiwgdTMyICprKQogewogCiAjZGVmaW5lIHhpKGkpICAgKCh4WyhpKS80XSA+PiAoOCooMy0oKGkpJTQpKSkpICYgMHhmZikKZGlmZiAtLWdpdCBhL2NyeXB0by9jYXN0Ni5jIGIvY3J5cHRvL2Nhc3Q2LmMKaW5kZXggMDA3ZDAyYi4uZTBjMTVhNiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Nhc3Q2LmMKKysrIGIvY3J5cHRvL2Nhc3Q2LmMKQEAgLTExLDcgKzExLDcgQEAKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKICAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCkBAIC0zNSwxMiArMzUsMTIgQEAKIAl1OCBLclsxMl1bNF07CiB9OwogCi0jZGVmaW5lIEYxKEQscixtKSAgKCAgKEkgPSAoKG0pICsgKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkgKQotI2RlZmluZSBGMihELHIsbSkgICggIChJID0gKChtKSBeIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjMoRCxyLG0pICAoICAoSSA9ICgobSkgLSAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gKyBzMlsoST4+MTYpJjB4ZmZdKSBeIHMzWyhJPj44KSYweGZmXSkgLSBzNFtJJjB4ZmZdKSApCisjZGVmaW5lIEYxKEQsIHIsIG0pICAoKEkgPSAoKG0pICsgKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkpCisjZGVmaW5lIEYyKEQsIHIsIG0pICAoKEkgPSAoKG0pIF4gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIC0gczJbKEk+PjE2KSYweGZmXSkgKyBzM1soST4+OCkmMHhmZl0pIF4gczRbSSYweGZmXSkpCisjZGVmaW5lIEYzKEQsIHIsIG0pICAoKEkgPSAoKG0pIC0gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkpCiAKIHN0YXRpYyBjb25zdCB1MzIgczFbMjU2XSA9IHsKIAkweDMwZmI0MGQ0LCAweDlmYTBmZjBiLCAweDZiZWNjZDJmLCAweDNmMjU4YzdhLCAweDFlMjEzZjJmLApAQCAtMzEyLDcgKzMxMiw3IEBACiAKIHN0YXRpYyBjb25zdCB1MzIgVG1bMjRdWzhdID0gewogCXsgMHg1YTgyNzk5OSwgMHhjOTVjNjUzYSwgMHgzODM2NTBkYiwgMHhhNzEwM2M3YywgMHgxNWVhMjgxZCwKLQkJMHg4NGM0MTNiZSwgMHhmMzlkZmY1ZiwgMHg2Mjc3ZWIwMCB9ICwgCisJCTB4ODRjNDEzYmUsIDB4ZjM5ZGZmNWYsIDB4NjI3N2ViMDAgfSAsCiAJeyAweGQxNTFkNmExLCAweDQwMmJjMjQyLCAweGFmMDVhZGUzLCAweDFkZGY5OTg0LCAweDhjYjk4NTI1LAogCQkweGZiOTM3MGM2LCAweDZhNmQ1YzY3LCAweGQ5NDc0ODA4IH0gLAogCXsgMHg0ODIxMzNhOSwgMHhiNmZiMWY0YSwgMHgyNWQ1MGFlYiwgMHg5NGFlZjY4YywgMHgwMzg4ZTIyZCwKQEAgLTM2OSw3ICszNjksOCBAQAogfTsKIAogLyogZm9yd2FyZCBvY3RhdmUgKi8KLXN0YXRpYyB2b2lkIFcodTMyICprZXksIHVuc2lnbmVkIGludCBpKSB7CitzdGF0aWMgdm9pZCBXKHUzMiAqa2V5LCB1bnNpZ25lZCBpbnQgaSkKK3sKIAl1MzIgSTsKIAlrZXlbNl0gXj0gRjEoa2V5WzddLCBUcltpICUgNF1bMF0sIFRtW2ldWzBdKTsKIAlrZXlbNV0gXj0gRjIoa2V5WzZdLCBUcltpICUgNF1bMV0sIFRtW2ldWzFdKTsKQEAgLTM3Nyw3ICszNzgsNyBAQAogCWtleVszXSBePSBGMShrZXlbNF0sIFRyW2kgJSA0XVszXSwgVG1baV1bM10pOwogCWtleVsyXSBePSBGMihrZXlbM10sIFRyW2kgJSA0XVs0XSwgVG1baV1bNF0pOwogCWtleVsxXSBePSBGMyhrZXlbMl0sIFRyW2kgJSA0XVs1XSwgVG1baV1bNV0pOwotCWtleVswXSBePSBGMShrZXlbMV0sIFRyW2kgJSA0XVs2XSwgVG1baV1bNl0pOwkKKwlrZXlbMF0gXj0gRjEoa2V5WzFdLCBUcltpICUgNF1bNl0sIFRtW2ldWzZdKTsKIAlrZXlbN10gXj0gRjIoa2V5WzBdLCBUcltpICUgNF1bN10sIFRtW2ldWzddKTsKIH0KIApAQCAtMzkzLDExICszOTQsMTEgQEAKIAlpZiAoa2V5X2xlbiAlIDQgIT0gMCkgewogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CiAJCXJldHVybiAtRUlOVkFMOwotCX0JCisJfQogCi0JbWVtc2V0IChwX2tleSwgMCwgMzIpOwotCW1lbWNweSAocF9rZXksIGluX2tleSwga2V5X2xlbik7Ci0JCisJbWVtc2V0KHBfa2V5LCAwLCAzMik7CisJbWVtY3B5KHBfa2V5LCBpbl9rZXksIGtleV9sZW4pOworCiAJa2V5WzBdID0gYmUzMl90b19jcHUocF9rZXlbMF0pOwkJLyogQSAqLwogCWtleVsxXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzFdKTsJCS8qIEIgKi8KIAlrZXlbMl0gPSBiZTMyX3RvX2NwdShwX2tleVsyXSk7CQkvKiBDICovCkBAIC00MDYsMTggKzQwNywxNiBAQAogCWtleVs1XSA9IGJlMzJfdG9fY3B1KHBfa2V5WzVdKTsJCS8qIEYgKi8KIAlrZXlbNl0gPSBiZTMyX3RvX2NwdShwX2tleVs2XSk7CQkvKiBHICovCiAJa2V5WzddID0gYmUzMl90b19jcHUocF9rZXlbN10pOwkJLyogSCAqLwotCQotCiAKIAlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgewotCQlXIChrZXksIDIgKiBpKTsKLQkJVyAoa2V5LCAyICogaSArIDEpOwotCQkKKwkJVyhrZXksIDIgKiBpKTsKKwkJVyhrZXksIDIgKiBpICsgMSk7CisKIAkJYy0+S3JbaV1bMF0gPSBrZXlbMF0gJiAweDFmOwogCQljLT5LcltpXVsxXSA9IGtleVsyXSAmIDB4MWY7CiAJCWMtPktyW2ldWzJdID0ga2V5WzRdICYgMHgxZjsKIAkJYy0+S3JbaV1bM10gPSBrZXlbNl0gJiAweDFmOwotCQkKKwogCQljLT5LbVtpXVswXSA9IGtleVs3XTsKIAkJYy0+S21baV1bMV0gPSBrZXlbNV07CiAJCWMtPkttW2ldWzJdID0ga2V5WzNdOwpAQCAtNDI4LDIxICs0MjcsMjMgQEAKIH0KIAogLypmb3J3YXJkIHF1YWQgcm91bmQqLwotc3RhdGljIHZvaWQgUSAodTMyICogYmxvY2ssIHU4ICogS3IsIHUzMiAqIEttKSB7CitzdGF0aWMgdm9pZCBRKHUzMiAqYmxvY2ssIHU4ICpLciwgdTMyICpLbSkKK3sKIAl1MzIgSTsKIAlibG9ja1syXSBePSBGMShibG9ja1szXSwgS3JbMF0sIEttWzBdKTsKIAlibG9ja1sxXSBePSBGMihibG9ja1syXSwgS3JbMV0sIEttWzFdKTsKIAlibG9ja1swXSBePSBGMyhibG9ja1sxXSwgS3JbMl0sIEttWzJdKTsKLQlibG9ja1szXSBePSBGMShibG9ja1swXSwgS3JbM10sIEttWzNdKTsJCQorCWJsb2NrWzNdIF49IEYxKGJsb2NrWzBdLCBLclszXSwgS21bM10pOwogfQogCiAvKnJldmVyc2UgcXVhZCByb3VuZCovCi1zdGF0aWMgdm9pZCBRQkFSICh1MzIgKiBibG9jaywgdTggKiBLciwgdTMyICogS20pIHsKK3N0YXRpYyB2b2lkIFFCQVIodTMyICpibG9jaywgdTggKktyLCB1MzIgKkttKQorewogCXUzMiBJOwotICAgICAgICBibG9ja1szXSBePSBGMShibG9ja1swXSwgS3JbM10sIEttWzNdKTsKLSAgICAgICAgYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7Ci0gICAgICAgIGJsb2NrWzFdIF49IEYyKGJsb2NrWzJdLCBLclsxXSwgS21bMV0pOwotICAgICAgICBibG9ja1syXSBePSBGMShibG9ja1szXSwgS3JbMF0sIEttWzBdKTsKKwlibG9ja1szXSBePSBGMShibG9ja1swXSwgS3JbM10sIEttWzNdKTsKKwlibG9ja1swXSBePSBGMyhibG9ja1sxXSwgS3JbMl0sIEttWzJdKTsKKwlibG9ja1sxXSBePSBGMihibG9ja1syXSwgS3JbMV0sIEttWzFdKTsKKwlibG9ja1syXSBePSBGMShibG9ja1szXSwgS3JbMF0sIEttWzBdKTsKIH0KIAogc3RhdGljIHZvaWQgY2FzdDZfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCkBAIC00NTEsNjQgKzQ1Miw2NSBAQAogCWNvbnN0IF9fYmUzMiAqc3JjID0gKGNvbnN0IF9fYmUzMiAqKWluYnVmOwogCV9fYmUzMiAqZHN0ID0gKF9fYmUzMiAqKW91dGJ1ZjsKIAl1MzIgYmxvY2tbNF07Ci0JdTMyICogS207IAotCXU4ICogS3I7CisJdTMyICpLbTsKKwl1OCAqS3I7CiAKIAlibG9ja1swXSA9IGJlMzJfdG9fY3B1KHNyY1swXSk7CiAJYmxvY2tbMV0gPSBiZTMyX3RvX2NwdShzcmNbMV0pOwogCWJsb2NrWzJdID0gYmUzMl90b19jcHUoc3JjWzJdKTsKIAlibG9ja1szXSA9IGJlMzJfdG9fY3B1KHNyY1szXSk7CiAKLQlLbSA9IGMtPkttWzBdOyBLciA9IGMtPktyWzBdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzNdOyBLciA9IGMtPktyWzNdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzZdOyBLciA9IGMtPktyWzZdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzldOyBLciA9IGMtPktyWzldOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzEwXTsgS3IgPSBjLT5LclsxMF07IFFCQVIgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVswXTsgS3IgPSBjLT5LclswXTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMl07IEtyID0gYy0+S3JbMl07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVszXTsgS3IgPSBjLT5LclszXTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNV07IEtyID0gYy0+S3JbNV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs2XTsgS3IgPSBjLT5Lcls2XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOF07IEtyID0gYy0+S3JbOF07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs5XTsgS3IgPSBjLT5Lcls5XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzEwXTsgS3IgPSBjLT5LclsxMF07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMV07IEtyID0gYy0+S3JbMTFdOyBRQkFSKGJsb2NrLCBLciwgS20pOwogCiAJZHN0WzBdID0gY3B1X3RvX2JlMzIoYmxvY2tbMF0pOwogCWRzdFsxXSA9IGNwdV90b19iZTMyKGJsb2NrWzFdKTsKIAlkc3RbMl0gPSBjcHVfdG9fYmUzMihibG9ja1syXSk7CiAJZHN0WzNdID0gY3B1X3RvX2JlMzIoYmxvY2tbM10pOwotfQkKK30KIAotc3RhdGljIHZvaWQgY2FzdDZfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpIHsKLQlzdHJ1Y3QgY2FzdDZfY3R4ICogYyA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CitzdGF0aWMgdm9pZCBjYXN0Nl9kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXRidWYsIGNvbnN0IHU4ICppbmJ1ZikKK3sKKwlzdHJ1Y3QgY2FzdDZfY3R4ICpjID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAljb25zdCBfX2JlMzIgKnNyYyA9IChjb25zdCBfX2JlMzIgKilpbmJ1ZjsKIAlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXRidWY7CiAJdTMyIGJsb2NrWzRdOwotCXUzMiAqIEttOyAKLQl1OCAqIEtyOworCXUzMiAqS207CisJdTggKktyOwogCiAJYmxvY2tbMF0gPSBiZTMyX3RvX2NwdShzcmNbMF0pOwogCWJsb2NrWzFdID0gYmUzMl90b19jcHUoc3JjWzFdKTsKIAlibG9ja1syXSA9IGJlMzJfdG9fY3B1KHNyY1syXSk7CiAJYmxvY2tbM10gPSBiZTMyX3RvX2NwdShzcmNbM10pOwogCi0JS20gPSBjLT5LbVsxMV07IEtyID0gYy0+S3JbMTFdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzEwXTsgS3IgPSBjLT5LclsxMF07IFEgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFEgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bOF07IEtyID0gYy0+S3JbOF07IFEgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bN107IEtyID0gYy0+S3JbN107IFEgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFEgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bNV07IEtyID0gYy0+S3JbNV07IFFCQVIgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bNF07IEtyID0gYy0+S3JbNF07IFFCQVIgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFFCQVIgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bMl07IEtyID0gYy0+S3JbMl07IFFCQVIgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bMV07IEtyID0gYy0+S3JbMV07IFFCQVIgKGJsb2NrLCBLciwgS20pOwotCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFFCQVIgKGJsb2NrLCBLciwgS20pOwotCQorCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzEwXTsgS3IgPSBjLT5LclsxMF07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs5XTsgS3IgPSBjLT5Lcls5XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bN107IEtyID0gYy0+S3JbN107IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs2XTsgS3IgPSBjLT5Lcls2XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNF07IEtyID0gYy0+S3JbNF07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVszXTsgS3IgPSBjLT5LclszXTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMV07IEtyID0gYy0+S3JbMV07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVswXTsgS3IgPSBjLT5LclswXTsgUUJBUihibG9jaywgS3IsIEttKTsKKwogCWRzdFswXSA9IGNwdV90b19iZTMyKGJsb2NrWzBdKTsKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihibG9ja1sxXSk7CiAJZHN0WzJdID0gY3B1X3RvX2JlMzIoYmxvY2tbMl0pOwogCWRzdFszXSA9IGNwdV90b19iZTMyKGJsb2NrWzNdKTsKLX0JCit9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7CiAJLmNyYV9uYW1lID0gImNhc3Q2IiwKZGlmZiAtLWdpdCBhL2NyeXB0by9jaXBoZXIuYyBiL2NyeXB0by9jaXBoZXIuYwppbmRleCA5YTFhNzMxLi4zOTU0MWUwIDEwMDY0NAotLS0gYS9jcnlwdG8vY2lwaGVyLmMKKysrIGIvY3J5cHRvL2NpcGhlci5jCkBAIC04LDcgKzgsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NvbXByZXNzLmMgYi9jcnlwdG8vY29tcHJlc3MuYwppbmRleCAxZWUzNTcwLi5jMzNmMDc2IDEwMDY0NAotLS0gYS9jcnlwdG8vY29tcHJlc3MuYworKysgYi9jcnlwdG8vY29tcHJlc3MuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KQEAgLTM5LDcgKzM5LDcgQEAKIAogCW9wcy0+Y290X2NvbXByZXNzID0gY3J5cHRvX2NvbXByZXNzOwogCW9wcy0+Y290X2RlY29tcHJlc3MgPSBjcnlwdG9fZGVjb21wcmVzczsKLQkKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3JjMzJjLmMgYi9jcnlwdG8vY3JjMzJjLmMKaW5kZXggOTczYmMyYy4uZGU5ZTU1YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyYzMyYy5jCisrKyBiL2NyeXB0by9jcmMzMmMuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIENSQzMyQyBjaGtzdW0KQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KQEAgLTE0Miw3ICsxNDIsNyBAQAogfQogCiAvKgotICogU3RlcHMgdGhyb3VnaCBidWZmZXIgb25lIGJ5dGUgYXQgYXQgdGltZSwgY2FsY3VsYXRlcyByZWZsZWN0ZWQgCisgKiBTdGVwcyB0aHJvdWdoIGJ1ZmZlciBvbmUgYnl0ZSBhdCBhdCB0aW1lLCBjYWxjdWxhdGVzIHJlZmxlY3RlZAogICogY3JjIHVzaW5nIHRhYmxlLgogICovCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdG9fbnVsbC5jIGIvY3J5cHRvL2NyeXB0b19udWxsLmMKaW5kZXggY2I3MWM5MS4uMDdhOGE5NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0b19udWxsLmMKKysrIGIvY3J5cHRvL2NyeXB0b19udWxsLmMKQEAgLTEsMTEgKzEsMTEgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIE51bGwgYWxnb3JpdGhtcywgYWthIE11Y2ggQWRvIEFib3V0IE5vdGhpbmcuCiAgKgogICogVGhlc2UgYXJlIG5lZWRlZCBmb3IgSVBzZWMsIGFuZCBtYXkgYmUgdXNlZnVsIGluIGdlbmVyYWwgZm9yCiAgKiB0ZXN0aW5nICYgZGVidWdnaW5nLgotICogCisgKgogICogVGhlIG51bGwgY2lwaGVyIGlzIGNvbXBsaWFudCB3aXRoIFJGQzI0MTAuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgpAQCAtMTYzLDcgKzE2Myw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fbnVsbF9tb2RfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwotCQorCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY2lwaGVyX251bGwpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKQEAgLTE4MCw3ICsxODAsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX2RpZ2VzdDsKIAotb3V0OgkKK291dDoKIAlyZXR1cm4gcmV0OwogCiBvdXRfdW5yZWdpc3Rlcl9kaWdlc3Q6CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVmbGF0ZS5jIGIvY3J5cHRvL2RlZmxhdGUuYwppbmRleCA5MTI4ZGE0Li40NjNkYzg1IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVmbGF0ZS5jCisrKyBiL2NyeXB0by9kZWZsYXRlLmMKQEAgLTEsMTQgKzEsMTQgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIERlZmxhdGUgYWxnb3JpdGhtIChSRkMgMTk1MSksIGltcGxlbWVudGVkIGhlcmUgcHJpbWFyaWx5IGZvciB1c2UKICAqIGJ5IElQQ09NUCAoUkZDIDMxNzMgJiBSRkMgMjM5NCkuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAzIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogRklYTUU6IGRlZmxhdGUgdHJhbnNmb3JtcyB3aWxsIHJlcXVpcmUgdXAgdG8gYSB0b3RhbCBvZiBhYm91dCA0MzZrIG9mIGtlcm5lbApAQCAtNDksNyArNDksNyBAQAogCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKIAogCXN0cmVhbS0+d29ya3NwYWNlID0gdm1hbGxvYyh6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKLQlpZiAoIXN0cmVhbS0+d29ya3NwYWNlICkgeworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjEsNyArNjEsNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF9mcmVlOwogCX0KLW91dDoJCitvdXQ6CiAJcmV0dXJuIHJldDsKIG91dF9mcmVlOgogCXZmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKQEAgLTc0LDcgKzc0LDcgQEAKIAlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+ZGVjb21wX3N0cmVhbTsKIAogCXN0cmVhbS0+d29ya3NwYWNlID0ga3phbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0cmVhbS0+d29ya3NwYWNlICkgeworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTA2LDcgKzEwNiw3IEBACiB7CiAJc3RydWN0IGRlZmxhdGVfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCWludCByZXQ7Ci0JCisKIAlyZXQgPSBkZWZsYXRlX2NvbXBfaW5pdChjdHgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtMTUzLDExICsxNTMsMTEgQEAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQotIAorCiBzdGF0aWMgaW50IGRlZmxhdGVfZGVjb21wcmVzcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqc3JjLAogCQkJICAgICAgdW5zaWduZWQgaW50IHNsZW4sIHU4ICpkc3QsIHVuc2lnbmVkIGludCAqZGxlbikKIHsKLQkKKwogCWludCByZXQgPSAwOwogCXN0cnVjdCBkZWZsYXRlX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJaWYgKHJldCA9PSBaX09LICYmICFzdHJlYW0tPmF2YWlsX2luICYmIHN0cmVhbS0+YXZhaWxfb3V0KSB7CiAJCXU4IHplcm9zdHVmZiA9IDA7CiAJCXN0cmVhbS0+bmV4dF9pbiA9ICZ6ZXJvc3R1ZmY7Ci0JCXN0cmVhbS0+YXZhaWxfaW4gPSAxOyAKKwkJc3RyZWFtLT5hdmFpbF9pbiA9IDE7CiAJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKIAl9CiAJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKZGlmZiAtLWdpdCBhL2NyeXB0by9kZXNfZ2VuZXJpYy5jIGIvY3J5cHRvL2Rlc19nZW5lcmljLmMKaW5kZXggNWJkM2VlMy4uMjQ5ZjkwMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rlc19nZW5lcmljLmMKKysrIGIvY3J5cHRvL2Rlc19nZW5lcmljLmMKQEAgLTg2OSw4ICs4NjksNyBAQAogCiAJaWYgKHVubGlrZWx5KCEoKEtbMF0gXiBLWzJdKSB8IChLWzFdIF4gS1szXSkpIHx8CiAJCSAgICAgISgoS1syXSBeIEtbNF0pIHwgKEtbM10gXiBLWzVdKSkpICYmCi0JCSAgICAgKCpmbGFncyAmIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKSkKLQl7CisJCSAgICAgKCpmbGFncyAmIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKSkgewogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9lY2IuYyBiL2NyeXB0by9lY2IuYwppbmRleCBhNDY4MzhlLi45MzVjZmVmIDEwMDY0NAotLS0gYS9jcnlwdG8vZWNiLmMKKysrIGIvY3J5cHRvL2VjYi5jCkBAIC01NSw3ICs1NSw3IEBACiAKIAkJZG8gewogCQkJZm4oY3J5cHRvX2NpcGhlcl90Zm0odGZtKSwgd2RzdCwgd3NyYyk7Ci0JCisKIAkJCXdzcmMgKz0gYnNpemU7CiAJCQl3ZHN0ICs9IGJzaXplOwogCQl9IHdoaWxlICgobmJ5dGVzIC09IGJzaXplKSA+PSBic2l6ZSk7CmRpZmYgLS1naXQgYS9jcnlwdG8vZmNyeXB0LmMgYi9jcnlwdG8vZmNyeXB0LmMKaW5kZXggYjgyZDYxZi4uYzMzMTA3ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2ZjcnlwdC5jCisrKyBiL2NyeXB0by9mY3J5cHQuYwpAQCAtNjAsMTMgKzYwLDEzIEBACiAJdTMyIHQgPSBsbyAmICgoMSA8PCBuKSAtIDEpOwkJCQlcCiAJbG8gPSAobG8gPj4gbikgfCAoKGhpICYgKCgxIDw8IG4pIC0gMSkpIDw8ICgzMiAtIG4pKTsJXAogCWhpID0gKGhpID4+IG4pIHwgKHQgPDwgKDI0LW4pKTsJCQkJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogLyogUm90YXRlIHJpZ2h0IG9uZSA2NCBiaXQgbnVtYmVyIGFzIGEgNTYgYml0IG51bWJlciAqLwogI2RlZmluZSByb3I1Nl82NChrLCBuKQkJCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlrID0gKGsgPj4gbikgfCAoKGsgJiAoKDEgPDwgbikgLSAxKSkgPDwgKDU2IC0gbikpOwlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiAvKgogICogU2JveGVzIGZvciBGZWlzdGVsIG5ldHdvcmsgZGVyaXZlZCBmcm9tCkBAIC0yMjgsNyArMjI4LDcgQEAKIAl1bmlvbiBsYzQgeyBfX2JlMzIgbDsgdTggY1s0XTsgfSB1OwkJCQlcCiAJdS5sID0gc2NoZWQgXiBSOwkJCQkJCVwKIAlMIF49IHNib3gwW3UuY1swXV0gXiBzYm94MVt1LmNbMV1dIF4gc2JveDJbdS5jWzJdXSBeIHNib3gzW3UuY1szXV07IFwKLX0gd2hpbGUoMCkKK30gd2hpbGUgKDApCiAKIC8qCiAgKiBlbmNyeXB0b3IKZGlmZiAtLWdpdCBhL2NyeXB0by9nY20uYyBiL2NyeXB0by9nY20uYwppbmRleCBjNjU0NzEzLi4yZjVmYmJhIDEwMDY0NAotLS0gYS9jcnlwdG8vZ2NtLmMKKysrIGIvY3J5cHRvL2djbS5jCkBAIC0zNyw2ICszNywxOSBAQAogCXU4IG5vbmNlWzRdOwogfTsKIAorc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCB7CisJc3RydWN0IGNyeXB0b19hZWFkICpjaGlsZDsKKwl1OCBub25jZVs0XTsKK307CisKK3N0cnVjdCBjcnlwdG9fcmZjNDU0M19yZXFfY3R4IHsKKwl1OCBhdXRoX3RhZ1sxNl07CisJc3RydWN0IHNjYXR0ZXJsaXN0IGNpcGhlclsxXTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgcGF5bG9hZFsyXTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgYXNzb2NbMl07CisJc3RydWN0IGFlYWRfcmVxdWVzdCBzdWJyZXE7Cit9OworCiBzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggewogCXVuc2lnbmVkIGludCBjcnlwdGxlbjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYzsKQEAgLTEwNDcsNiArMTA2MCwyNzIgQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fcmZjNDU0M19yZXFfY3R4ICpjcnlwdG9fcmZjNDU0M19yZXFjdHgoCisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSBjcnlwdG9fYWVhZF9hbGlnbm1hc2soY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSkpOworCisJcmV0dXJuICh2b2lkICopUFRSX0FMSUdOKCh1OCAqKWFlYWRfcmVxdWVzdF9jdHgocmVxKSwgYWxpZ24gKyAxKTsKK30KKworc3RhdGljIGludCBjcnlwdG9fcmZjNDU0M19zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsIGNvbnN0IHU4ICprZXksCisJCQkJIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHBhcmVudCk7CisJc3RydWN0IGNyeXB0b19hZWFkICpjaGlsZCA9IGN0eC0+Y2hpbGQ7CisJaW50IGVycjsKKworCWlmIChrZXlsZW4gPCA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtleWxlbiAtPSA0OworCW1lbWNweShjdHgtPm5vbmNlLCBrZXkgKyBrZXlsZW4sIDQpOworCisJY3J5cHRvX2FlYWRfY2xlYXJfZmxhZ3MoY2hpbGQsIENSWVBUT19URk1fUkVRX01BU0spOworCWNyeXB0b19hZWFkX3NldF9mbGFncyhjaGlsZCwgY3J5cHRvX2FlYWRfZ2V0X2ZsYWdzKHBhcmVudCkgJgorCQkJCSAgICAgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisJZXJyID0gY3J5cHRvX2FlYWRfc2V0a2V5KGNoaWxkLCBrZXksIGtleWxlbik7CisJY3J5cHRvX2FlYWRfc2V0X2ZsYWdzKHBhcmVudCwgY3J5cHRvX2FlYWRfZ2V0X2ZsYWdzKGNoaWxkKSAmCisJCQkJICAgICAgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNyeXB0b19yZmM0NTQzX3NldGF1dGhzaXplKHN0cnVjdCBjcnlwdG9fYWVhZCAqcGFyZW50LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBhdXRoc2l6ZSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgocGFyZW50KTsKKworCWlmIChhdXRoc2l6ZSAhPSAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gY3J5cHRvX2FlYWRfc2V0YXV0aHNpemUoY3R4LT5jaGlsZCwgYXV0aHNpemUpOworfQorCisvKiB0aGlzIGlzIHRoZSBzYW1lIGFzIGNyeXB0b19hdXRoZW5jX2NoYWluICovCitzdGF0aWMgdm9pZCBjcnlwdG9fcmZjNDU0M19jaGFpbihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmhlYWQsCisJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBjaGFpbikKK3sKKwlpZiAoY2hhaW4pIHsKKwkJaGVhZC0+bGVuZ3RoICs9IHNnLT5sZW5ndGg7CisJCXNnID0gc2NhdHRlcndhbGtfc2dfbmV4dChzZyk7CisJfQorCisJaWYgKHNnKQorCQlzY2F0dGVyd2Fsa19zZ19jaGFpbihoZWFkLCAyLCBzZyk7CisJZWxzZQorCQlzZ19tYXJrX2VuZChoZWFkKTsKK30KKworc3RhdGljIHN0cnVjdCBhZWFkX3JlcXVlc3QgKmNyeXB0b19yZmM0NTQzX2NyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwKKwkJCQkJCSBpbnQgZW5jKQoreworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCAqcmN0eCA9IGNyeXB0b19yZmM0NTQzX3JlcWN0eChyZXEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnN1YnJlcSA9ICZyY3R4LT5zdWJyZXE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QgPSByZXEtPmRzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmNpcGhlciA9IHJjdHgtPmNpcGhlcjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBheWxvYWQgPSByY3R4LT5wYXlsb2FkOworCXN0cnVjdCBzY2F0dGVybGlzdCAqYXNzb2MgPSByY3R4LT5hc3NvYzsKKwl1bnNpZ25lZCBpbnQgYXV0aHNpemUgPSBjcnlwdG9fYWVhZF9hdXRoc2l6ZShhZWFkKTsKKwl1bnNpZ25lZCBpbnQgYXNzb2NsZW4gPSByZXEtPmFzc29jbGVuOworCXN0cnVjdCBwYWdlICpkc3RwOworCXU4ICp2ZHN0OworCXU4ICppdiA9IFBUUl9BTElHTigodTggKikocmN0eCArIDEpICsgY3J5cHRvX2FlYWRfcmVxc2l6ZShjdHgtPmNoaWxkKSwKKwkJCSAgIGNyeXB0b19hZWFkX2FsaWdubWFzayhjdHgtPmNoaWxkKSArIDEpOworCisJbWVtY3B5KGl2LCBjdHgtPm5vbmNlLCA0KTsKKwltZW1jcHkoaXYgKyA0LCByZXEtPml2LCA4KTsKKworCS8qIGNvbnN0cnVjdCBjaXBoZXIvcGxhaW50ZXh0ICovCisJaWYgKGVuYykKKwkJbWVtc2V0KHJjdHgtPmF1dGhfdGFnLCAwLCBhdXRoc2l6ZSk7CisJZWxzZQorCQlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkocmN0eC0+YXV0aF90YWcsIGRzdCwKKwkJCQkJIHJlcS0+Y3J5cHRsZW4gLSBhdXRoc2l6ZSwKKwkJCQkJIGF1dGhzaXplLCAwKTsKKworCXNnX2luaXRfb25lKGNpcGhlciwgcmN0eC0+YXV0aF90YWcsIGF1dGhzaXplKTsKKworCS8qIGNvbnN0cnVjdCB0aGUgYWFkICovCisJZHN0cCA9IHNnX3BhZ2UoZHN0KTsKKwl2ZHN0ID0gUGFnZUhpZ2hNZW0oZHN0cCkgPyBOVUxMIDogcGFnZV9hZGRyZXNzKGRzdHApICsgZHN0LT5vZmZzZXQ7CisKKwlzZ19pbml0X3RhYmxlKHBheWxvYWQsIDIpOworCXNnX3NldF9idWYocGF5bG9hZCwgcmVxLT5pdiwgOCk7CisJY3J5cHRvX3JmYzQ1NDNfY2hhaW4ocGF5bG9hZCwgZHN0LCB2ZHN0ID09IHJlcS0+aXYgKyA4KTsKKwlhc3NvY2xlbiArPSA4ICsgcmVxLT5jcnlwdGxlbiAtIChlbmMgPyAwIDogYXV0aHNpemUpOworCisJc2dfaW5pdF90YWJsZShhc3NvYywgMik7CisJc2dfc2V0X3BhZ2UoYXNzb2MsIHNnX3BhZ2UocmVxLT5hc3NvYyksIHJlcS0+YXNzb2MtPmxlbmd0aCwKKwkJICAgIHJlcS0+YXNzb2MtPm9mZnNldCk7CisJY3J5cHRvX3JmYzQ1NDNfY2hhaW4oYXNzb2MsIHBheWxvYWQsIDApOworCisJYWVhZF9yZXF1ZXN0X3NldF90Zm0oc3VicmVxLCBjdHgtPmNoaWxkKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHN1YnJlcSwgcmVxLT5iYXNlLmZsYWdzLCByZXEtPmJhc2UuY29tcGxldGUsCisJCQkJICByZXEtPmJhc2UuZGF0YSk7CisJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChzdWJyZXEsIGNpcGhlciwgY2lwaGVyLCBlbmMgPyAwIDogYXV0aHNpemUsIGl2KTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKHN1YnJlcSwgYXNzb2MsIGFzc29jbGVuKTsKKworCXJldHVybiBzdWJyZXE7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfZW5jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX3JlcV9jdHggKnJjdHggPSBjcnlwdG9fcmZjNDU0M19yZXFjdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpzdWJyZXE7CisJaW50IGVycjsKKworCXN1YnJlcSA9IGNyeXB0b19yZmM0NTQzX2NyeXB0KHJlcSwgMSk7CisJZXJyID0gY3J5cHRvX2FlYWRfZW5jcnlwdChzdWJyZXEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkocmN0eC0+YXV0aF90YWcsIHJlcS0+ZHN0LCByZXEtPmNyeXB0bGVuLAorCQkJCSBjcnlwdG9fYWVhZF9hdXRoc2l6ZShhZWFkKSwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcnlwdG9fcmZjNDU0M19kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXEgPSBjcnlwdG9fcmZjNDU0M19jcnlwdChyZXEsIDApOworCisJcmV0dXJuIGNyeXB0b19hZWFkX2RlY3J5cHQocmVxKTsKK30KKworc3RhdGljIGludCBjcnlwdG9fcmZjNDU0M19pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QgPSAodm9pZCAqKXRmbS0+X19jcnRfYWxnOworCXN0cnVjdCBjcnlwdG9fYWVhZF9zcGF3biAqc3Bhd24gPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkOworCXVuc2lnbmVkIGxvbmcgYWxpZ247CisKKwlhZWFkID0gY3J5cHRvX3NwYXduX2FlYWQoc3Bhd24pOworCWlmIChJU19FUlIoYWVhZCkpCisJCXJldHVybiBQVFJfRVJSKGFlYWQpOworCisJY3R4LT5jaGlsZCA9IGFlYWQ7CisKKwlhbGlnbiA9IGNyeXB0b19hZWFkX2FsaWdubWFzayhhZWFkKTsKKwlhbGlnbiAmPSB+KGNyeXB0b190Zm1fY3R4X2FsaWdubWVudCgpIC0gMSk7CisJdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fcmZjNDU0M19yZXFfY3R4KSArCisJCQkJQUxJR04oY3J5cHRvX2FlYWRfcmVxc2l6ZShhZWFkKSwKKwkJCQkgICAgICBjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSkgKworCQkJCWFsaWduICsgMTY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRvX2ZyZWVfYWVhZChjdHgtPmNoaWxkKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0b19yZmM0NTQzX2FsbG9jKHN0cnVjdCBydGF0dHIgKip0YikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCXN0cnVjdCBjcnlwdG9fYWVhZF9zcGF3biAqc3Bhd247CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwljb25zdCBjaGFyICpjY21fbmFtZTsKKwlpbnQgZXJyOworCisJYWxndCA9IGNyeXB0b19nZXRfYXR0cl90eXBlKHRiKTsKKwllcnIgPSBQVFJfRVJSKGFsZ3QpOworCWlmIChJU19FUlIoYWxndCkpCisJCXJldHVybiBFUlJfUFRSKGVycik7CisKKwlpZiAoKGFsZ3QtPnR5cGUgXiBDUllQVE9fQUxHX1RZUEVfQUVBRCkgJiBhbGd0LT5tYXNrKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWNjbV9uYW1lID0gY3J5cHRvX2F0dHJfYWxnX25hbWUodGJbMV0pOworCWVyciA9IFBUUl9FUlIoY2NtX25hbWUpOworCWlmIChJU19FUlIoY2NtX25hbWUpKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJaW5zdCA9IGt6YWxsb2Moc2l6ZW9mKCppbnN0KSArIHNpemVvZigqc3Bhd24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluc3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3Bhd24gPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCWNyeXB0b19zZXRfYWVhZF9zcGF3bihzcGF3biwgaW5zdCk7CisJZXJyID0gY3J5cHRvX2dyYWJfYWVhZChzcGF3biwgY2NtX25hbWUsIDAsCisJCQkgICAgICAgY3J5cHRvX3JlcXVpcmVzX3N5bmMoYWxndC0+dHlwZSwgYWxndC0+bWFzaykpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKKworCWFsZyA9IGNyeXB0b19hZWFkX3NwYXduX2FsZyhzcGF3bik7CisKKwllcnIgPSAtRUlOVkFMOworCisJLyogV2Ugb25seSBzdXBwb3J0IDE2LWJ5dGUgYmxvY2tzLiAqLworCWlmIChhbGctPmNyYV9hZWFkLml2c2l6ZSAhPSAxNikKKwkJZ290byBvdXRfZHJvcF9hbGc7CisKKwkvKiBOb3QgYSBzdHJlYW0gY2lwaGVyPyAqLworCWlmIChhbGctPmNyYV9ibG9ja3NpemUgIT0gMSkKKwkJZ290byBvdXRfZHJvcF9hbGc7CisKKwllcnIgPSAtRU5BTUVUT09MT05HOworCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsCisJCSAgICAgInJmYzQ1NDMoJXMpIiwgYWxnLT5jcmFfbmFtZSkgPj0gQ1JZUFRPX01BWF9BTEdfTkFNRSB8fAorCSAgICBzbnByaW50ZihpbnN0LT5hbGcuY3JhX2RyaXZlcl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJyZmM0NTQzKCVzKSIsIGFsZy0+Y3JhX2RyaXZlcl9uYW1lKSA+PQorCSAgICBDUllQVE9fTUFYX0FMR19OQU1FKQorCQlnb3RvIG91dF9kcm9wX2FsZzsKKworCWluc3QtPmFsZy5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQUVBRDsKKwlpbnN0LT5hbGcuY3JhX2ZsYWdzIHw9IGFsZy0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19BU1lOQzsKKwlpbnN0LT5hbGcuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHk7CisJaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgPSAxOworCWluc3QtPmFsZy5jcmFfYWxpZ25tYXNrID0gYWxnLT5jcmFfYWxpZ25tYXNrOworCWluc3QtPmFsZy5jcmFfdHlwZSA9ICZjcnlwdG9fbml2YWVhZF90eXBlOworCisJaW5zdC0+YWxnLmNyYV9hZWFkLml2c2l6ZSA9IDg7CisJaW5zdC0+YWxnLmNyYV9hZWFkLm1heGF1dGhzaXplID0gMTY7CisKKwlpbnN0LT5hbGcuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCk7CisKKwlpbnN0LT5hbGcuY3JhX2luaXQgPSBjcnlwdG9fcmZjNDU0M19pbml0X3RmbTsKKwlpbnN0LT5hbGcuY3JhX2V4aXQgPSBjcnlwdG9fcmZjNDU0M19leGl0X3RmbTsKKworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRrZXkgPSBjcnlwdG9fcmZjNDU0M19zZXRrZXk7CisJaW5zdC0+YWxnLmNyYV9hZWFkLnNldGF1dGhzaXplID0gY3J5cHRvX3JmYzQ1NDNfc2V0YXV0aHNpemU7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmVuY3J5cHQgPSBjcnlwdG9fcmZjNDU0M19lbmNyeXB0OworCWluc3QtPmFsZy5jcmFfYWVhZC5kZWNyeXB0ID0gY3J5cHRvX3JmYzQ1NDNfZGVjcnlwdDsKKworCWluc3QtPmFsZy5jcmFfYWVhZC5nZW5pdiA9ICJzZXFpdiI7CisKK291dDoKKwlyZXR1cm4gaW5zdDsKKworb3V0X2Ryb3BfYWxnOgorCWNyeXB0b19kcm9wX2FlYWQoc3Bhd24pOworb3V0X2ZyZWVfaW5zdDoKKwlrZnJlZShpbnN0KTsKKwlpbnN0ID0gRVJSX1BUUihlcnIpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgdm9pZCBjcnlwdG9fcmZjNDU0M19mcmVlKHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpCit7CisJY3J5cHRvX2Ryb3Bfc3Bhd24oY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KSk7CisJa2ZyZWUoaW5zdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlIGNyeXB0b19yZmM0NTQzX3RtcGwgPSB7CisJLm5hbWUgPSAicmZjNDU0MyIsCisJLmFsbG9jID0gY3J5cHRvX3JmYzQ1NDNfYWxsb2MsCisJLmZyZWUgPSBjcnlwdG9fcmZjNDU0M19mcmVlLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19nY21fbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtMTA2Nyw4ICsxMzQ2LDE0IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5kb19nY207CiAKKwllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19yZmM0NTQzX3RtcGwpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3VuZG9fcmZjNDEwNjsKKwogCXJldHVybiAwOwogCitvdXRfdW5kb19yZmM0MTA2OgorCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDEwNl90bXBsKTsKIG91dF91bmRvX2djbToKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV90bXBsKTsKIG91dF91bmRvX2Jhc2U6CkBAIC0xMDgxLDYgKzEzNjYsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGNyeXB0b19nY21fbW9kdWxlX2V4aXQodm9pZCkKIHsKIAlrZnJlZShnY21femVyb2VzKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX3JmYzQ1NDNfdG1wbCk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19yZmM0MTA2X3RtcGwpOwogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fZ2NtX3RtcGwpOwogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fZ2NtX2Jhc2VfdG1wbCk7CkBAIC0xMDk0LDMgKzEzODAsNCBAQAogTU9EVUxFX0FVVEhPUigiTWlra28gSGVycmFuZW4gPG1oMUBpa2kuZmk+Iik7CiBNT0RVTEVfQUxJQVMoImdjbV9iYXNlIik7CiBNT0RVTEVfQUxJQVMoInJmYzQxMDYiKTsKK01PRFVMRV9BTElBUygicmZjNDU0MyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21kNS5jIGIvY3J5cHRvL21kNS5jCmluZGV4IDgzZWI1MjkuLjlmZGEyMTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tZDUuYworKysgYi9jcnlwdG8vbWQ1LmMKQEAgLTE2LDE3ICsxNiwxMyBAQAogICoKICAqLwogI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL21kNS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotI2RlZmluZSBNRDVfRElHRVNUX1NJWkUJCTE2Ci0jZGVmaW5lIE1ENV9ITUFDX0JMT0NLX1NJWkUJNjQKLSNkZWZpbmUgTUQ1X0JMT0NLX1dPUkRTCQkxNgotI2RlZmluZSBNRDVfSEFTSF9XT1JEUwkJNAotCiAjZGVmaW5lIEYxKHgsIHksIHopCSh6IF4gKHggJiAoeSBeIHopKSkKICNkZWZpbmUgRjIoeCwgeSwgeikJRjEoeiwgeCwgeSkKICNkZWZpbmUgRjMoeCwgeSwgeikJKHggXiB5IF4geikKQEAgLTM1LDEyICszMSw2IEBACiAjZGVmaW5lIE1ENVNURVAoZiwgdywgeCwgeSwgeiwgaW4sIHMpIFwKIAkodyArPSBmKHgsIHksIHopICsgaW4sIHcgPSAodzw8cyB8IHc+PigzMi1zKSkgKyB4KQogCi1zdHJ1Y3QgbWQ1X2N0eCB7Ci0JdTMyIGhhc2hbTUQ1X0hBU0hfV09SRFNdOwotCXUzMiBibG9ja1tNRDVfQkxPQ0tfV09SRFNdOwotCXU2NCBieXRlX2NvdW50OwotfTsKLQogc3RhdGljIHZvaWQgbWQ1X3RyYW5zZm9ybSh1MzIgKmhhc2gsIHUzMiBjb25zdCAqaW4pCiB7CiAJdTMyIGEsIGIsIGMsIGQ7CkBAIC0xNDEsNyArMTMxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtZDVfdHJhbnNmb3JtX2hlbHBlcihzdHJ1Y3QgbWQ1X2N0eCAqY3R4KQorc3RhdGljIGlubGluZSB2b2lkIG1kNV90cmFuc2Zvcm1faGVscGVyKHN0cnVjdCBtZDVfc3RhdGUgKmN0eCkKIHsKIAlsZTMyX3RvX2NwdV9hcnJheShjdHgtPmJsb2NrLCBzaXplb2YoY3R4LT5ibG9jaykgLyBzaXplb2YodTMyKSk7CiAJbWQ1X3RyYW5zZm9ybShjdHgtPmhhc2gsIGN0eC0+YmxvY2spOwpAQCAtMTQ5LDcgKzEzOSw3IEBACiAKIHN0YXRpYyBpbnQgbWQ1X2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IG1kNV9jdHggKm1jdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3QgbWQ1X3N0YXRlICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAltY3R4LT5oYXNoWzBdID0gMHg2NzQ1MjMwMTsKIAltY3R4LT5oYXNoWzFdID0gMHhlZmNkYWI4OTsKQEAgLTE2Miw3ICsxNTIsNyBAQAogCiBzdGF0aWMgaW50IG1kNV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCWNvbnN0IHUzMiBhdmFpbCA9IHNpemVvZihtY3R4LT5ibG9jaykgLSAobWN0eC0+Ynl0ZV9jb3VudCAmIDB4M2YpOwogCiAJbWN0eC0+Ynl0ZV9jb3VudCArPSBsZW47CkBAIC0xOTQsNyArMTg0LDcgQEAKIAogc3RhdGljIGludCBtZDVfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCiB7Ci0Jc3RydWN0IG1kNV9jdHggKm1jdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3QgbWQ1X3N0YXRlICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAJY29uc3QgdW5zaWduZWQgaW50IG9mZnNldCA9IG1jdHgtPmJ5dGVfY291bnQgJiAweDNmOwogCWNoYXIgKnAgPSAoY2hhciAqKW1jdHgtPmJsb2NrICsgb2Zmc2V0OwogCWludCBwYWRkaW5nID0gNTYgLSAob2Zmc2V0ICsgMSk7CkBAIC0yMjAsMTIgKzIxMCwzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1kNV9leHBvcnQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHZvaWQgKm91dCkKK3sKKwlzdHJ1Y3QgbWQ1X3N0YXRlICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCW1lbWNweShvdXQsIGN0eCwgc2l6ZW9mKCpjdHgpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZDVfaW1wb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB2b2lkICppbikKK3sKKwlzdHJ1Y3QgbWQ1X3N0YXRlICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCW1lbWNweShjdHgsIGluLCBzaXplb2YoKmN0eCkpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBhbGcgPSB7CiAJLmRpZ2VzdHNpemUJPQlNRDVfRElHRVNUX1NJWkUsCiAJLmluaXQJCT0JbWQ1X2luaXQsCiAJLnVwZGF0ZQkJPQltZDVfdXBkYXRlLAogCS5maW5hbAkJPQltZDVfZmluYWwsCi0JLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBtZDVfY3R4KSwKKwkuZXhwb3J0CQk9CW1kNV9leHBvcnQsCisJLmltcG9ydAkJPQltZDVfaW1wb3J0LAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgbWQ1X3N0YXRlKSwKIAkuYmFzZQkJPQl7CiAJCS5jcmFfbmFtZQk9CSJtZDUiLAogCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILApkaWZmIC0tZ2l0IGEvY3J5cHRvL3BjcnlwdC5jIGIvY3J5cHRvL3BjcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMjAxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vcGNyeXB0LmMKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBwY3J5cHQgLSBQYXJhbGxlbCBjcnlwdG8gd3JhcHBlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgc2VjdW5ldCBTZWN1cml0eSBOZXR3b3JrcyBBRworICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZWZmZW4gS2xhc3NlcnQgPHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9hZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxjcnlwdG8vcGNyeXB0Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwY3J5cHRfZW5jX3BhZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwY3J5cHRfZGVjX3BhZGF0YTsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZW5jd3E7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRlY3dxOworCitzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCB7CisJc3RydWN0IGNyeXB0b19zcGF3biBzcGF3bjsKKwl1bnNpZ25lZCBpbnQgdGZtX2NvdW50OworfTsKKworc3RydWN0IHBjcnlwdF9hZWFkX2N0eCB7CisJc3RydWN0IGNyeXB0b19hZWFkICpjaGlsZDsKKwl1bnNpZ25lZCBpbnQgY2JfY3B1OworfTsKKworc3RhdGljIGludCBwY3J5cHRfZG9fcGFyYWxsZWwoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEsIHVuc2lnbmVkIGludCAqY2JfY3B1LAorCQkJICAgICAgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpCit7CisJdW5zaWduZWQgaW50IGNwdV9pbmRleCwgY3B1LCBpOworCisJY3B1ID0gKmNiX2NwdTsKKworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X2FjdGl2ZV9tYXNrKSkKKwkJCWdvdG8gb3V0OworCisJY3B1X2luZGV4ID0gY3B1ICUgY3B1bWFza193ZWlnaHQoY3B1X2FjdGl2ZV9tYXNrKTsKKworCWNwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X2FjdGl2ZV9tYXNrKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3B1X2luZGV4OyBpKyspCisJCWNwdSA9IGNwdW1hc2tfbmV4dChjcHUsIGNwdV9hY3RpdmVfbWFzayk7CisKKwkqY2JfY3B1ID0gY3B1OworCitvdXQ6CisJcmV0dXJuIHBhZGF0YV9kb19wYXJhbGxlbChwaW5zdCwgcGFkYXRhLCBjcHUpOworfQorCitzdGF0aWMgaW50IHBjcnlwdF9hZWFkX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnBhcmVudCwKKwkJCSAgICAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHBhcmVudCk7CisKKwlyZXR1cm4gY3J5cHRvX2FlYWRfc2V0a2V5KGN0eC0+Y2hpbGQsIGtleSwga2V5bGVuKTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9zZXRhdXRoc2l6ZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnBhcmVudCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgYXV0aHNpemUpCit7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHBhcmVudCk7CisKKwlyZXR1cm4gY3J5cHRvX2FlYWRfc2V0YXV0aHNpemUoY3R4LT5jaGlsZCwgYXV0aHNpemUpOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9zZXJpYWwoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gcGNyeXB0X3BhZGF0YV9yZXF1ZXN0KHBhZGF0YSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCisJYWVhZF9yZXF1ZXN0X2NvbXBsZXRlKHJlcS0+YmFzZS5kYXRhLCBwYWRhdGEtPmluZm8pOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9naXZfc2VyaWFsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEtPmFyZXEuYmFzZS5kYXRhLCBwYWRhdGEtPmluZm8pOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSA9IHBjcnlwdF9yZXF1ZXN0X3BhZGF0YShwcmVxKTsKKworCXBhZGF0YS0+aW5mbyA9IGVycjsKKwlyZXEtPmJhc2UuZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKworCXBhZGF0YV9kb19zZXJpYWwocGFkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZW5jKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCXBhZGF0YS0+aW5mbyA9IGNyeXB0b19hZWFkX2VuY3J5cHQocmVxKTsKKworCWlmIChwYWRhdGEtPmluZm8gPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfZW5jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqY3JlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKwlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSA9IHBjcnlwdF9yZXF1ZXN0X3BhZGF0YShwcmVxKTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJdTMyIGZsYWdzID0gYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSk7CisKKwltZW1zZXQocGFkYXRhLCAwLCBzaXplb2Yoc3RydWN0IHBhZGF0YV9wcml2KSk7CisKKwlwYWRhdGEtPnBhcmFsbGVsID0gcGNyeXB0X2FlYWRfZW5jOworCXBhZGF0YS0+c2VyaWFsID0gcGNyeXB0X2FlYWRfc2VyaWFsOworCisJYWVhZF9yZXF1ZXN0X3NldF90Zm0oY3JlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhjcmVxLCBmbGFncyAmIH5DUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAsCisJCQkJICBwY3J5cHRfYWVhZF9kb25lLCByZXEpOworCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoY3JlcSwgcmVxLT5zcmMsIHJlcS0+ZHN0LAorCQkJICAgICAgIHJlcS0+Y3J5cHRsZW4sIHJlcS0+aXYpOworCWFlYWRfcmVxdWVzdF9zZXRfYXNzb2MoY3JlcSwgcmVxLT5hc3NvYywgcmVxLT5hc3NvY2xlbik7CisKKwllcnIgPSBwY3J5cHRfZG9fcGFyYWxsZWwocGFkYXRhLCAmY3R4LT5jYl9jcHUsIHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVsc2UKKwkJZXJyID0gY3J5cHRvX2FlYWRfZW5jcnlwdChjcmVxKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBjcnlwdF9hZWFkX2RlYyhzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBjcnlwdG9fYWVhZF9kZWNyeXB0KHJlcSk7CisKKwlpZiAocGFkYXRhLT5pbmZvID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuOworCisJcGFkYXRhX2RvX3NlcmlhbChwYWRhdGEpOworfQorCitzdGF0aWMgaW50IHBjcnlwdF9hZWFkX2RlY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCWludCBlcnI7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXUzMiBmbGFncyA9IGFlYWRfcmVxdWVzdF9mbGFncyhyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2RlYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX3NlcmlhbDsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGNyZXEsIGN0eC0+Y2hpbGQpOworCWFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgcGNyeXB0X2FlYWRfZG9uZSwgcmVxKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGNyZXEsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCSAgICAgICByZXEtPmNyeXB0bGVuLCByZXEtPml2KTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKGNyZXEsIHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOworCisJZXJyID0gcGNyeXB0X2RvX3BhcmFsbGVsKHBhZGF0YSwgJmN0eC0+Y2JfY3B1LCBwY3J5cHRfZGVjX3BhZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hZWFkX2RlY3J5cHQoY3JlcSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9naXZlbmMoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gcGNyeXB0X3BhZGF0YV9yZXF1ZXN0KHBhZGF0YSk7CisJc3RydWN0IGFlYWRfZ2l2Y3J5cHRfcmVxdWVzdCAqcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCisJcGFkYXRhLT5pbmZvID0gY3J5cHRvX2FlYWRfZ2l2ZW5jcnlwdChyZXEpOworCisJaWYgKHBhZGF0YS0+aW5mbyA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybjsKKworCXBhZGF0YV9kb19zZXJpYWwocGFkYXRhKTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9naXZlbmNyeXB0KHN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmFyZXEgPSAmcmVxLT5hcmVxOworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IGFlYWRfcmVxdWVzdF9jdHgoYXJlcSk7CisJc3RydWN0IGFlYWRfZ2l2Y3J5cHRfcmVxdWVzdCAqY3JlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKwlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSA9IHBjcnlwdF9yZXF1ZXN0X3BhZGF0YShwcmVxKTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBhZWFkX2dpdmNyeXB0X3JlcXRmbShyZXEpOworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwl1MzIgZmxhZ3MgPSBhZWFkX3JlcXVlc3RfZmxhZ3MoYXJlcSk7CisKKwltZW1zZXQocGFkYXRhLCAwLCBzaXplb2Yoc3RydWN0IHBhZGF0YV9wcml2KSk7CisKKwlwYWRhdGEtPnBhcmFsbGVsID0gcGNyeXB0X2FlYWRfZ2l2ZW5jOworCXBhZGF0YS0+c2VyaWFsID0gcGNyeXB0X2FlYWRfZ2l2X3NlcmlhbDsKKworCWFlYWRfZ2l2Y3J5cHRfc2V0X3RmbShjcmVxLCBjdHgtPmNoaWxkKTsKKwlhZWFkX2dpdmNyeXB0X3NldF9jYWxsYmFjayhjcmVxLCBmbGFncyAmIH5DUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAsCisJCQkJICAgcGNyeXB0X2FlYWRfZG9uZSwgYXJlcSk7CisJYWVhZF9naXZjcnlwdF9zZXRfY3J5cHQoY3JlcSwgYXJlcS0+c3JjLCBhcmVxLT5kc3QsCisJCQkJYXJlcS0+Y3J5cHRsZW4sIGFyZXEtPml2KTsKKwlhZWFkX2dpdmNyeXB0X3NldF9hc3NvYyhjcmVxLCBhcmVxLT5hc3NvYywgYXJlcS0+YXNzb2NsZW4pOworCWFlYWRfZ2l2Y3J5cHRfc2V0X2dpdihjcmVxLCByZXEtPmdpdiwgcmVxLT5zZXEpOworCisJZXJyID0gcGNyeXB0X2RvX3BhcmFsbGVsKHBhZGF0YSwgJmN0eC0+Y2JfY3B1LCBwY3J5cHRfZW5jX3BhZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hZWFkX2dpdmVuY3J5cHQoY3JlcSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBjcnlwdF9hZWFkX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJaW50IGNwdSwgY3B1X2luZGV4OworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QgPSBjcnlwdG9fdGZtX2FsZ19pbnN0YW5jZSh0Zm0pOworCXN0cnVjdCBwY3J5cHRfaW5zdGFuY2VfY3R4ICppY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2lwaGVyOworCisJaWN0eC0+dGZtX2NvdW50Kys7CisKKwljcHVfaW5kZXggPSBpY3R4LT50Zm1fY291bnQgJSBjcHVtYXNrX3dlaWdodChjcHVfYWN0aXZlX21hc2spOworCisJY3R4LT5jYl9jcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9hY3RpdmVfbWFzayk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfaW5kZXg7IGNwdSsrKQorCQljdHgtPmNiX2NwdSA9IGNwdW1hc2tfbmV4dChjdHgtPmNiX2NwdSwgY3B1X2FjdGl2ZV9tYXNrKTsKKworCWNpcGhlciA9IGNyeXB0b19zcGF3bl9hZWFkKGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCkpOworCisJaWYgKElTX0VSUihjaXBoZXIpKQorCQlyZXR1cm4gUFRSX0VSUihjaXBoZXIpOworCisJY3R4LT5jaGlsZCA9IGNpcGhlcjsKKwl0Zm0tPmNydF9hZWFkLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IHBjcnlwdF9yZXF1ZXN0KQorCQkrIHNpemVvZihzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0KQorCQkrIGNyeXB0b19hZWFkX3JlcXNpemUoY2lwaGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9leGl0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljcnlwdG9fZnJlZV9hZWFkKGN0eC0+Y2hpbGQpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jX2luc3RhbmNlKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqY3R4OworCWludCBlcnI7CisKKwlpbnN0ID0ga3phbGxvYyhzaXplb2YoKmluc3QpICsgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluc3QpIHsKKwkJaW5zdCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IC1FTkFNRVRPT0xPTkc7CisJaWYgKHNucHJpbnRmKGluc3QtPmFsZy5jcmFfZHJpdmVyX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsCisJCSAgICAgInBjcnlwdCglcykiLCBhbGctPmNyYV9kcml2ZXJfbmFtZSkgPj0gQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJZ290byBvdXRfZnJlZV9pbnN0OworCisJbWVtY3B5KGluc3QtPmFsZy5jcmFfbmFtZSwgYWxnLT5jcmFfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSk7CisKKwljdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCWVyciA9IGNyeXB0b19pbml0X3NwYXduKCZjdHgtPnNwYXduLCBhbGcsIGluc3QsCisJCQkJQ1JZUFRPX0FMR19UWVBFX01BU0spOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKKworCWluc3QtPmFsZy5jcmFfcHJpb3JpdHkgPSBhbGctPmNyYV9wcmlvcml0eSArIDEwMDsKKwlpbnN0LT5hbGcuY3JhX2Jsb2Nrc2l6ZSA9IGFsZy0+Y3JhX2Jsb2Nrc2l6ZTsKKwlpbnN0LT5hbGcuY3JhX2FsaWdubWFzayA9IGFsZy0+Y3JhX2FsaWdubWFzazsKKworb3V0OgorCXJldHVybiBpbnN0OworCitvdXRfZnJlZV9pbnN0OgorCWtmcmVlKGluc3QpOworCWluc3QgPSBFUlJfUFRSKGVycik7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpwY3J5cHRfYWxsb2NfYWVhZChzdHJ1Y3QgcnRhdHRyICoqdGIpCit7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOworCXN0cnVjdCBjcnlwdG9fYXR0cl90eXBlICphbGd0OworCisJYWxndCA9IGNyeXB0b19nZXRfYXR0cl90eXBlKHRiKTsKKworCWFsZyA9IGNyeXB0b19nZXRfYXR0cl9hbGcodGIsIGFsZ3QtPnR5cGUsCisJCQkJICAoYWxndC0+bWFzayAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSk7CisJaWYgKElTX0VSUihhbGcpKQorCQlyZXR1cm4gRVJSX0NBU1QoYWxnKTsKKworCWluc3QgPSBwY3J5cHRfYWxsb2NfaW5zdGFuY2UoYWxnKTsKKwlpZiAoSVNfRVJSKGluc3QpKQorCQlnb3RvIG91dF9wdXRfYWxnOworCisJaW5zdC0+YWxnLmNyYV9mbGFncyA9IENSWVBUT19BTEdfVFlQRV9BRUFEIHwgQ1JZUFRPX0FMR19BU1lOQzsKKwlpbnN0LT5hbGcuY3JhX3R5cGUgPSAmY3J5cHRvX2FlYWRfdHlwZTsKKworCWluc3QtPmFsZy5jcmFfYWVhZC5pdnNpemUgPSBhbGctPmNyYV9hZWFkLml2c2l6ZTsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZ2VuaXYgPSBhbGctPmNyYV9hZWFkLmdlbml2OworCWluc3QtPmFsZy5jcmFfYWVhZC5tYXhhdXRoc2l6ZSA9IGFsZy0+Y3JhX2FlYWQubWF4YXV0aHNpemU7CisKKwlpbnN0LT5hbGcuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHBjcnlwdF9hZWFkX2N0eCk7CisKKwlpbnN0LT5hbGcuY3JhX2luaXQgPSBwY3J5cHRfYWVhZF9pbml0X3RmbTsKKwlpbnN0LT5hbGcuY3JhX2V4aXQgPSBwY3J5cHRfYWVhZF9leGl0X3RmbTsKKworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRrZXkgPSBwY3J5cHRfYWVhZF9zZXRrZXk7CisJaW5zdC0+YWxnLmNyYV9hZWFkLnNldGF1dGhzaXplID0gcGNyeXB0X2FlYWRfc2V0YXV0aHNpemU7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmVuY3J5cHQgPSBwY3J5cHRfYWVhZF9lbmNyeXB0OworCWluc3QtPmFsZy5jcmFfYWVhZC5kZWNyeXB0ID0gcGNyeXB0X2FlYWRfZGVjcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZ2l2ZW5jcnlwdCA9IHBjcnlwdF9hZWFkX2dpdmVuY3J5cHQ7CisKK291dF9wdXRfYWxnOgorCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJcmV0dXJuIGluc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpwY3J5cHRfYWxsb2Moc3RydWN0IHJ0YXR0ciAqKnRiKQoreworCXN0cnVjdCBjcnlwdG9fYXR0cl90eXBlICphbGd0OworCisJYWxndCA9IGNyeXB0b19nZXRfYXR0cl90eXBlKHRiKTsKKwlpZiAoSVNfRVJSKGFsZ3QpKQorCQlyZXR1cm4gRVJSX0NBU1QoYWxndCk7CisKKwlzd2l0Y2ggKGFsZ3QtPnR5cGUgJiBhbGd0LT5tYXNrICYgQ1JZUFRPX0FMR19UWVBFX01BU0spIHsKKwljYXNlIENSWVBUT19BTEdfVFlQRV9BRUFEOgorCQlyZXR1cm4gcGNyeXB0X2FsbG9jX2FlYWQodGIpOworCX0KKworCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfZnJlZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCXN0cnVjdCBwY3J5cHRfaW5zdGFuY2VfY3R4ICpjdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCisJY3J5cHRvX2Ryb3Bfc3Bhd24oJmN0eC0+c3Bhd24pOworCWtmcmVlKGluc3QpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBwY3J5cHRfdG1wbCA9IHsKKwkubmFtZSA9ICJwY3J5cHQiLAorCS5hbGxvYyA9IHBjcnlwdF9hbGxvYywKKwkuZnJlZSA9IHBjcnlwdF9mcmVlLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBjcnlwdF9pbml0KHZvaWQpCit7CisJZW5jd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJwZW5jcnlwdCIpOworCWlmICghZW5jd3EpCisJCWdvdG8gZXJyOworCisJZGVjd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJwZGVjcnlwdCIpOworCWlmICghZGVjd3EpCisJCWdvdG8gZXJyX2Rlc3Ryb3lfZW5jd3E7CisKKworCXBjcnlwdF9lbmNfcGFkYXRhID0gcGFkYXRhX2FsbG9jKGNwdV9wb3NzaWJsZV9tYXNrLCBlbmN3cSk7CisJaWYgKCFwY3J5cHRfZW5jX3BhZGF0YSkKKwkJZ290byBlcnJfZGVzdHJveV9kZWN3cTsKKworCXBjcnlwdF9kZWNfcGFkYXRhID0gcGFkYXRhX2FsbG9jKGNwdV9wb3NzaWJsZV9tYXNrLCBkZWN3cSk7CisJaWYgKCFwY3J5cHRfZGVjX3BhZGF0YSkKKwkJZ290byBlcnJfZnJlZV9wYWRhdGE7CisKKwlwYWRhdGFfc3RhcnQocGNyeXB0X2VuY19wYWRhdGEpOworCXBhZGF0YV9zdGFydChwY3J5cHRfZGVjX3BhZGF0YSk7CisKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZwY3J5cHRfdG1wbCk7CisKK2Vycl9mcmVlX3BhZGF0YToKKwlwYWRhdGFfZnJlZShwY3J5cHRfZW5jX3BhZGF0YSk7CisKK2Vycl9kZXN0cm95X2RlY3dxOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGRlY3dxKTsKKworZXJyX2Rlc3Ryb3lfZW5jd3E6CisJZGVzdHJveV93b3JrcXVldWUoZW5jd3EpOworCitlcnI6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwY3J5cHRfZXhpdCh2b2lkKQoreworCXBhZGF0YV9zdG9wKHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfc3RvcChwY3J5cHRfZGVjX3BhZGF0YSk7CisKKwlkZXN0cm95X3dvcmtxdWV1ZShlbmN3cSk7CisJZGVzdHJveV93b3JrcXVldWUoZGVjd3EpOworCisJcGFkYXRhX2ZyZWUocGNyeXB0X2VuY19wYWRhdGEpOworCXBhZGF0YV9mcmVlKHBjcnlwdF9kZWNfcGFkYXRhKTsKKworCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZwY3J5cHRfdG1wbCk7Cit9CisKK21vZHVsZV9pbml0KHBjcnlwdF9pbml0KTsKK21vZHVsZV9leGl0KHBjcnlwdF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiU3RlZmZlbiBLbGFzc2VydCA8c3RlZmZlbi5rbGFzc2VydEBzZWN1bmV0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUGFyYWxsZWwgY3J5cHRvIHdyYXBwZXIiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmMgYi9jcnlwdG8vdGVzdG1nci5jCmluZGV4IDc2MjBiZmMuLmM0OTRkNzYgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmMKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuYwpAQCAtMTQ3Nyw5ICsxNDc3LDU0IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBhbGdfdGVzdF9udWxsKGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjICpkZXNjLAorCQkJICAgICBjb25zdCBjaGFyICpkcml2ZXIsIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gMDsKK30KKwogLyogUGxlYXNlIGtlZXAgdGhpcyBsaXN0IHNvcnRlZCBieSBhbGdvcml0aG0gbmFtZS4gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyBhbGdfdGVzdF9kZXNjc1tdID0gewogCXsKKwkJLmFsZyA9ICJfX2RyaXZlci1jYmMtYWVzLWFlc25pIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gIl9fZHJpdmVyLWVjYi1hZXMtYWVzbmkiLAorCQkudGVzdCA9IGFsZ190ZXN0X251bGwsCisJCS5zdWl0ZSA9IHsKKwkJCS5jaXBoZXIgPSB7CisJCQkJLmVuYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfSwKKwkJCQkuZGVjID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9CisJCQl9CisJCX0KKwl9LCB7CisJCS5hbGcgPSAiX19naGFzaC1wY2xtdWxxZHFuaSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmhhc2ggPSB7CisJCQkJLnZlY3MgPSBOVUxMLAorCQkJCS5jb3VudCA9IDAKKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJhbnNpX2Nwcm5nIiwKIAkJLnRlc3QgPSBhbGdfdGVzdF9jcHJuZywKIAkJLmZpcHNfYWxsb3dlZCA9IDEsCkBAIC0xNjIzLDYgKzE2NjgsMzAgQEAKIAkJCX0KIAkJfQogCX0sIHsKKwkJLmFsZyA9ICJjcnlwdGQoX19kcml2ZXItZWNiLWFlcy1hZXNuaSkiLAorCQkudGVzdCA9IGFsZ190ZXN0X251bGwsCisJCS5zdWl0ZSA9IHsKKwkJCS5jaXBoZXIgPSB7CisJCQkJLmVuYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfSwKKwkJCQkuZGVjID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9CisJCQl9CisJCX0KKwl9LCB7CisJCS5hbGcgPSAiY3J5cHRkKF9fZ2hhc2gtcGNsbXVscWRxbmkpIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuaGFzaCA9IHsKKwkJCQkudmVjcyA9IE5VTEwsCisJCQkJLmNvdW50ID0gMAorCQkJfQorCQl9CisJfSwgewogCQkuYWxnID0gImN0cihhZXMpIiwKIAkJLnRlc3QgPSBhbGdfdGVzdF9za2NpcGhlciwKIAkJLmZpcHNfYWxsb3dlZCA9IDEsCkBAIC0xNjY5LDYgKzE3MzgsMjEgQEAKIAkJCX0KIAkJfQogCX0sIHsKKwkJLmFsZyA9ICJlY2IoX19hZXMtYWVzbmkpIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgewogCQkuYWxnID0gImVjYihhZXMpIiwKIAkJLnRlc3QgPSBhbGdfdGVzdF9za2NpcGhlciwKIAkJLmZpcHNfYWxsb3dlZCA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmgKaW5kZXggMGJiYTE0OC4uNGNlZDU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaApAQCAtNzYsMTIgKzc2LDkgQEAKICAqIGV2Z3BlIC0gR1BFIGhhbmRsaW5nIGFuZCBkaXNwYXRjaAogICovCiBhY3BpX3N0YXR1cwotYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCi0JCQkJdTggdHlwZSk7CithY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKLWFjcGlfc3RhdHVzCi1hY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLAotCQkgICB1OCB3cml0ZV90b19oYXJkd2FyZSk7CithY3BpX3N0YXR1cyBhY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9ldl9kaXNhYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pOwogCkBAIC0xMjIsOSArMTE5LDYgQEAKIHUzMiBhY3BpX2V2X2dwZV9kZXRlY3Qoc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9saXN0KTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfZXZfc2V0X2dwZV90eXBlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbywgdTggdHlwZSk7Ci0KLWFjcGlfc3RhdHVzCiBhY3BpX2V2X2NoZWNrX2Zvcl93YWtlX29ubHlfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfZXZfZ3BlX2luaXRpYWxpemUodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCmluZGV4IDgxZTY0ZjQuLjEzY2I4MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCkBAIC00MjYsNiArNDI2LDggQEAKIAlzdHJ1Y3QgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbyAqcmVnaXN0ZXJfaW5mbzsJLyogQmFja3BvaW50ZXIgdG8gcmVnaXN0ZXIgaW5mbyAqLwogCXU4IGZsYWdzOwkJLyogTWlzYyBpbmZvIGFib3V0IHRoaXMgR1BFICovCiAJdTggZ3BlX251bWJlcjsJCS8qIFRoaXMgR1BFICovCisJdTggcnVudGltZV9jb3VudDsKKwl1OCB3YWtldXBfY291bnQ7CiB9OwogCiAvKiBJbmZvcm1hdGlvbiBhYm91dCBhIEdQRSByZWdpc3RlciBwYWlyLCBvbmUgcGVyIGVhY2ggc3RhdHVzL2VuYWJsZSBwYWlyIGluIGFuIGFycmF5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKaW5kZXggNjQwNjJiMS4uMDdmNmUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaApAQCAtMjg3LDggKzI4NywxMCBAQAogCiBzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgewogCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CS8qIFBhcmVudCBkZXZpY2UgKi8KKwl1MzIgaGFuZGxlcl90eXBlOwogCWFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlcjsKIAl2b2lkICpjb250ZXh0OworCXN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqbmV4dDsKIH07CiAKIHN0cnVjdCBhY3BpX29iamVjdF9hZGRyX2hhbmRsZXIgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCmluZGV4IGFmYWNmNDQuLjBiNDUzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKQEAgLTU0LDU0ICs1NCw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfZXZfc2V0X2dwZV90eXBlCi0gKgotICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIHNldAotICogICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgIC0gTmV3IHR5cGUKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IFNldHMgdGhlIG5ldyB0eXBlIGZvciB0aGUgR1BFICh3YWtlLCBydW4sIG9yIHdha2UvcnVuKQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWFjcGlfc3RhdHVzCi1hY3BpX2V2X3NldF9ncGVfdHlwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sIHU4IHR5cGUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRShldl9zZXRfZ3BlX3R5cGUpOwotCi0JLyogVmFsaWRhdGUgdHlwZSBhbmQgdXBkYXRlIHJlZ2lzdGVyIGVuYWJsZSBtYXNrcyAqLwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0U6Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOOgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9Ci0KLQkvKiBEaXNhYmxlIHRoZSBHUEUgaWYgY3VycmVudGx5IGVuYWJsZWQgKi8KLQotCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCi0JLyogQ2xlYXIgdGhlIHR5cGUgYml0cyBhbmQgaW5zZXJ0IHRoZSBuZXcgVHlwZSAqLwotCi0JZ3BlX2V2ZW50X2luZm8tPmZsYWdzICY9IH5BQ1BJX0dQRV9UWVBFX01BU0s7Ci0JZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9IHR5cGU7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2V2ZW50X2luZm8gICAgICAgICAgLSBHUEUgdG8gdXBkYXRlCi0gKiAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICAgLSBXaGF0IHRvIGRvOiBBQ1BJX0dQRV9ESVNBQkxFIG9yCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0dQRV9FTkFCTEUKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtMTEwLDggKzY1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbywKLQkJCQl1OCB0eXBlKQorYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pCiB7CiAJc3RydWN0IGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8gKmdwZV9yZWdpc3Rlcl9pbmZvOwogCXU4IHJlZ2lzdGVyX2JpdDsKQEAgLTEyNywzNyArODEsMTQgQEAKIAkgICAgKDEgPDwKIAkgICAgIChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtIGdwZV9yZWdpc3Rlcl9pbmZvLT5iYXNlX2dwZV9udW1iZXIpKTsKIAotCS8qIDEpIERpc2FibGUgY2FzZS4gU2ltcGx5IGNsZWFyIGFsbCBlbmFibGUgYml0cyAqLworCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3dha2UsIHJlZ2lzdGVyX2JpdCk7CisJQUNQSV9DTEVBUl9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3JfcnVuLCByZWdpc3Rlcl9iaXQpOwogCi0JaWYgKHR5cGUgPT0gQUNQSV9HUEVfRElTQUJMRSkgewotCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLAotCQkJICAgICAgIHJlZ2lzdGVyX2JpdCk7Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQl9Ci0KLQkvKiAyKSBFbmFibGUgY2FzZS4gU2V0L0NsZWFyIHRoZSBhcHByb3ByaWF0ZSBlbmFibGUgYml0cyAqLwotCi0Jc3dpdGNoIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spIHsKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRToKLQkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3dha2UsIHJlZ2lzdGVyX2JpdCk7Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfR1BFX1RZUEVfUlVOVElNRToKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwKLQkJCSAgICAgICByZWdpc3Rlcl9iaXQpOworCWlmIChncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkKIAkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJYnJlYWs7CiAKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRV9SVU46CisJaWYgKGdwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQpCiAJCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLCByZWdpc3Rlcl9iaXQpOwotCQlBQ1BJX1NFVF9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3JfcnVuLCByZWdpc3Rlcl9iaXQpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQpAQCAtMTY3LDggKzk4LDYgQEAKICAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X2VuYWJsZV9ncGUKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2V2ZW50X2luZm8gICAgICAgICAgLSBHUEUgdG8gZW5hYmxlCi0gKiAgICAgICAgICAgICAgd3JpdGVfdG9faGFyZHdhcmUgICAgICAgLSBFbmFibGUgbm93LCBvciBqdXN0IG1hcmsgZGF0YSBzdHJ1Y3RzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV0FLRSBHUEVzIHNob3VsZCBiZSBkZWZlcnJlZCkKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpAQCAtMTc2LDkgKzEwNSw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMKLWFjcGlfZXZfZW5hYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCi0JCSAgIHU4IHdyaXRlX3RvX2hhcmR3YXJlKQorYWNwaV9zdGF0dXMgYWNwaV9ldl9lbmFibGVfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKQEAgLTE4Niw0NyArMTEzLDIwIEBACiAKIAkvKiBNYWtlIHN1cmUgSFcgZW5hYmxlIG1hc2tzIGFyZSB1cGRhdGVkICovCiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9FTkFCTEUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCXN0YXR1cyA9IGFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8pOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQogCiAJLyogTWFyayB3YWtlLWVuYWJsZWQgb3IgSFcgZW5hYmxlLCBvciBib3RoICovCiAKLQlzd2l0Y2ggKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfTUFTSykgewotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFOgorCWlmIChncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkgeworCQkvKiBDbGVhciB0aGUgR1BFIChvZiBzdGFsZSBldmVudHMpLCB0aGVuIGVuYWJsZSBpdCAqLworCQlzdGF0dXMgPSBhY3BpX2h3X2NsZWFyX2dwZShncGVfZXZlbnRfaW5mbyk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCi0JCUFDUElfU0VUX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1dBS0VfRU5BQkxFRCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOOgotCi0JCUFDUElfU0VUX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1dBS0VfRU5BQkxFRCk7Ci0KLQkJLypsaW50IC1mYWxsdGhyb3VnaCAqLwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0KLQkJQUNQSV9TRVRfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfUlVOX0VOQUJMRUQpOwotCi0JCWlmICh3cml0ZV90b19oYXJkd2FyZSkgewotCi0JCQkvKiBDbGVhciB0aGUgR1BFIChvZiBzdGFsZSBldmVudHMpLCB0aGVuIGVuYWJsZSBpdCAqLwotCi0JCQlzdGF0dXMgPSBhY3BpX2h3X2NsZWFyX2dwZShncGVfZXZlbnRfaW5mbyk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJCX0KLQotCQkJLyogRW5hYmxlIHRoZSByZXF1ZXN0ZWQgcnVudGltZSBHUEUgKi8KLQotCQkJc3RhdHVzID0gYWNwaV9od193cml0ZV9ncGVfZW5hYmxlX3JlZyhncGVfZXZlbnRfaW5mbyk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJCS8qIEVuYWJsZSB0aGUgcmVxdWVzdGVkIHJ1bnRpbWUgR1BFICovCisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfZ3BlX2VuYWJsZV9yZWcoZ3BlX2V2ZW50X2luZm8pOwogCX0KIAogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CkBAIC0yNTIsMzQgKzE1Miw5IEBACiAKIAkvKiBNYWtlIHN1cmUgSFcgZW5hYmxlIG1hc2tzIGFyZSB1cGRhdGVkICovCiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9ESVNBQkxFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwlzdGF0dXMgPSBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KLQotCS8qIENsZWFyIHRoZSBhcHByb3ByaWF0ZSBlbmFibGVkIGZsYWdzIGZvciB0aGlzIEdQRSAqLwotCi0Jc3dpdGNoIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spIHsKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRToKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTjoKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCi0JCS8qIGZhbGx0aHJvdWdoICovCi0KLQljYXNlIEFDUElfR1BFX1RZUEVfUlVOVElNRToKLQotCQkvKiBEaXNhYmxlIHRoZSByZXF1ZXN0ZWQgcnVudGltZSBHUEUgKi8KLQotCQlBQ1BJX0NMRUFSX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1JVTl9FTkFCTEVEKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CiAKIAkvKgogCSAqIEV2ZW4gaWYgd2UgZG9uJ3Qga25vdyB0aGUgR1BFIHR5cGUsIG1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cwpAQCAtNTIxLDcgKzM5Niw3IEBACiAKIAkvKiBTZXQgdGhlIEdQRSBmbGFncyBmb3IgcmV0dXJuIHRvIGVuYWJsZWQgc3RhdGUgKi8KIAotCSh2b2lkKWFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbywgRkFMU0UpOworCSh2b2lkKWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8pOwogCiAJLyoKIAkgKiBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIEdQRSBpbmZvIGZvciB0aGlzIGxldmVsIC0gd2UgY29weSB0aGUgaW5mbyB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCmluZGV4IDI0NzkyMDkuLjNkNGM0YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKQEAgLTI1OCw3ICsyNTgsNiBAQAogCXUzMiBncGVfbnVtYmVyOwogCWNoYXIgbmFtZVtBQ1BJX05BTUVfU0laRSArIDFdOwogCXU4IHR5cGU7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShldl9zYXZlX21ldGhvZF9pbmZvKTsKIApAQCAtMzI1LDI2ICszMjQsMjAgQEAKIAogCS8qCiAJICogTm93IHdlIGNhbiBhZGQgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgZ3BlX2V2ZW50X2luZm8gYmxvY2sgZm9yIHVzZQotCSAqIGR1cmluZyBkaXNwYXRjaCBvZiB0aGlzIEdQRS4gRGVmYXVsdCB0eXBlIGlzIFJVTlRJTUUsIGFsdGhvdWdoIHRoaXMgbWF5Ci0JICogY2hhbmdlIHdoZW4gdGhlIF9QUlcgbWV0aG9kcyBhcmUgZXhlY3V0ZWQgbGF0ZXIuCisJICogZHVyaW5nIGRpc3BhdGNoIG9mIHRoaXMgR1BFLgogCSAqLwogCWdwZV9ldmVudF9pbmZvID0KIAkgICAgJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1tncGVfbnVtYmVyIC0gZ3BlX2Jsb2NrLT5ibG9ja19iYXNlX251bWJlcl07CiAKLQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgPSAodTgpCi0JICAgICh0eXBlIHwgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EIHwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgPSAodTgpICh0eXBlIHwgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EKTsKIAogCWdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5tZXRob2Rfbm9kZSA9CiAJICAgIChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKW9ial9oYW5kbGU7CiAKLQkvKiBVcGRhdGUgZW5hYmxlIG1hc2ssIGJ1dCBkb24ndCBlbmFibGUgdGhlIEhXIEdQRSBhcyBvZiB5ZXQgKi8KLQotCXN0YXR1cyA9IGFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbywgRkFMU0UpOwotCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9MT0FELAogCQkJICAiUmVnaXN0ZXJlZCBHUEUgbWV0aG9kICVzIGFzIEdQRSBudW1iZXIgMHglLjJYXG4iLAogCQkJICBuYW1lLCBncGVfbnVtYmVyKSk7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ1NCwyMCArNDQ3LDcgQEAKIAkJCQkJCQlncGVfYmxvY2stPgogCQkJCQkJCWJsb2NrX2Jhc2VfbnVtYmVyXTsKIAotCQkvKiBNYXJrIEdQRSBmb3IgV0FLRS1PTkxZIGJ1dCBXQUtFX0RJU0FCTEVEICovCi0KLQkJZ3BlX2V2ZW50X2luZm8tPmZsYWdzICY9Ci0JCSAgICB+KEFDUElfR1BFX1dBS0VfRU5BQkxFRCB8IEFDUElfR1BFX1JVTl9FTkFCTEVEKTsKLQotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9ldl9zZXRfZ3BlX3R5cGUoZ3BlX2V2ZW50X2luZm8sIEFDUElfR1BFX1RZUEVfV0FLRSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8sCi0JCQkJCQkgICAgQUNQSV9HUEVfRElTQUJMRSk7CisJCWdwZV9ldmVudF9pbmZvLT5mbGFncyB8PSBBQ1BJX0dQRV9DQU5fV0FLRTsKIAl9CiAKICAgICAgIGNsZWFudXA6CkBAIC05ODksNyArOTY5LDYgQEAKIGFjcGlfZXZfaW5pdGlhbGl6ZV9ncGVfYmxvY2soc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmdwZV9kZXZpY2UsCiAJCQkgICAgIHN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICpncGVfYmxvY2spCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbzsKIAlzdHJ1Y3QgYWNwaV9ncGVfd2Fsa19pbmZvIGdwZV9pbmZvOwogCXUzMiB3YWtlX2dwZV9jb3VudDsKQEAgLTEwMTksNDIgKzk5OCw1MCBAQAogCQlncGVfaW5mby5ncGVfYmxvY2sgPSBncGVfYmxvY2s7CiAJCWdwZV9pbmZvLmdwZV9kZXZpY2UgPSBncGVfZGV2aWNlOwogCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX25zX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCisJCWFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKIAkJCQkJICAgQUNQSV9VSU5UMzJfTUFYLCBBQ1BJX05TX1dBTEtfVU5MT0NLLAogCQkJCQkgICBhY3BpX2V2X21hdGNoX3Byd19hbmRfZ3BlLCBOVUxMLAogCQkJCQkgICAmZ3BlX2luZm8sIE5VTEwpOwogCX0KIAogCS8qCi0JICogRW5hYmxlIGFsbCBHUEVzIGluIHRoaXMgYmxvY2sgdGhhdCBoYXZlIHRoZXNlIGF0dHJpYnV0ZXM6Ci0JICogMSkgYXJlICJydW50aW1lIiBvciAicnVuL3dha2UiIEdQRXMsIGFuZAotCSAqIDIpIGhhdmUgYSBjb3JyZXNwb25kaW5nIF9MeHggb3IgX0V4eCBtZXRob2QKLQkgKgotCSAqIEFueSBvdGhlciBHUEVzIHdpdGhpbiB0aGlzIGJsb2NrIG11c3QgYmUgZW5hYmxlZCB2aWEgdGhlCi0JICogYWNwaV9lbmFibGVfZ3BlKCkgZXh0ZXJuYWwgaW50ZXJmYWNlLgorCSAqIEVuYWJsZSBhbGwgR1BFcyB0aGF0IGhhdmUgYSBjb3JyZXNwb25kaW5nIG1ldGhvZCBhbmQgYXJlbid0CisJICogY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHdha2V1cHMuIEFueSBvdGhlciBHUEVzIHdpdGhpbiB0aGlzIGJsb2NrCisJICogbXVzdCBiZSBlbmFibGVkIHZpYSB0aGUgYWNwaV9lbmFibGVfZ3BlKCkgaW50ZXJmYWNlLgogCSAqLwogCXdha2VfZ3BlX2NvdW50ID0gMDsKIAlncGVfZW5hYmxlZF9jb3VudCA9IDA7CisJaWYgKGdwZV9kZXZpY2UgPT0gYWNwaV9nYmxfZmFkdF9ncGVfZGV2aWNlKQorCQlncGVfZGV2aWNlID0gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQlmb3IgKGogPSAwOyBqIDwgQUNQSV9HUEVfUkVHSVNURVJfV0lEVEg7IGorKykgeworCQkJYWNwaV9zdGF0dXMgc3RhdHVzOworCQkJYWNwaV9zaXplIGdwZV9pbmRleDsKKwkJCWludCBncGVfbnVtYmVyOwogCiAJCQkvKiBHZXQgdGhlIGluZm8gYmxvY2sgZm9yIHRoaXMgcGFydGljdWxhciBHUEUgKi8KKwkJCWdwZV9pbmRleCA9IChhY3BpX3NpemUpaSAqIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIICsgajsKKwkJCWdwZV9ldmVudF9pbmZvID0gJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1tncGVfaW5kZXhdOwogCi0JCQlncGVfZXZlbnRfaW5mbyA9ICZncGVfYmxvY2stPmV2ZW50X2luZm9bKChhY3BpX3NpemUpIGkgKgotCQkJCQkJCQkgQUNQSV9HUEVfUkVHSVNURVJfV0lEVEgpCi0JCQkJCQkJCSsgal07Ci0KLQkJCWlmICgoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09Ci0JCQkgICAgIEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCkgJiYKLQkJCSAgICAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSkgewotCQkJCWdwZV9lbmFibGVkX2NvdW50Kys7Ci0JCQl9Ci0KLQkJCWlmIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX1dBS0UpIHsKKwkJCWlmIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9DQU5fV0FLRSkgewogCQkJCXdha2VfZ3BlX2NvdW50Kys7CisJCQkJaWYgKGFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZCkKKwkJCQkJY29udGludWU7CiAJCQl9CisKKwkJCWlmICghKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCkpCisJCQkJY29udGludWU7CisKKwkJCWdwZV9udW1iZXIgPSBncGVfaW5kZXggKyBncGVfYmxvY2stPmJsb2NrX2Jhc2VfbnVtYmVyOworCQkJc3RhdHVzID0gYWNwaV9lbmFibGVfZ3BlKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIsCisJCQkJCQlBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkJCQkiRmFpbGVkIHRvIGVuYWJsZSBHUEUgJTAyWFxuIiwKKwkJCQkJCWdwZV9udW1iZXIpKTsKKwkJCWVsc2UKKwkJCQlncGVfZW5hYmxlZF9jb3VudCsrOwogCQl9CiAJfQogCkBAIC0xMDYyLDE1ICsxMDQ5LDcgQEAKIAkJCSAgIkZvdW5kICV1IFdha2UsIEVuYWJsZWQgJXUgUnVudGltZSBHUEVzIGluIHRoaXMgYmxvY2tcbiIsCiAJCQkgIHdha2VfZ3BlX2NvdW50LCBncGVfZW5hYmxlZF9jb3VudCkpOwogCi0JLyogRW5hYmxlIGFsbCB2YWxpZCBydW50aW1lIEdQRXMgZm91bmQgYWJvdmUgKi8KLQotCXN0YXR1cyA9IGFjcGlfaHdfZW5hYmxlX3J1bnRpbWVfZ3BlX2Jsb2NrKE5VTEwsIGdwZV9ibG9jaywgTlVMTCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgZW5hYmxlIEdQRXMgaW4gR3BlQmxvY2sgJXAiLAotCQkJICAgIGdwZV9ibG9jaykpOwotCX0KLQotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYwppbmRleCBjZTIyNGUxLi44ZjBmYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKQEAgLTI1OSw5ICsyNTksMTUgQEAKIAogCWhhbmRsZXJfb2JqID0gbm90aWZ5X2luZm8tPm5vdGlmeS5oYW5kbGVyX29iajsKIAlpZiAoaGFuZGxlcl9vYmopIHsKLQkJaGFuZGxlcl9vYmotPm5vdGlmeS5oYW5kbGVyKG5vdGlmeV9pbmZvLT5ub3RpZnkubm9kZSwKLQkJCQkJICAgIG5vdGlmeV9pbmZvLT5ub3RpZnkudmFsdWUsCi0JCQkJCSAgICBoYW5kbGVyX29iai0+bm90aWZ5LmNvbnRleHQpOworCQlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5vdGlmaWVyOworCisJCW5vdGlmaWVyID0gJmhhbmRsZXJfb2JqLT5ub3RpZnk7CisJCXdoaWxlIChub3RpZmllcikgeworCQkJbm90aWZpZXItPmhhbmRsZXIobm90aWZ5X2luZm8tPm5vdGlmeS5ub2RlLAorCQkJCQkgIG5vdGlmeV9pbmZvLT5ub3RpZnkudmFsdWUsCisJCQkJCSAgbm90aWZpZXItPmNvbnRleHQpOworCQkJbm90aWZpZXIgPSBub3RpZmllci0+bmV4dDsKKwkJfQogCX0KIAogCS8qIEFsbCBkb25lIHdpdGggdGhlIGluZm8gb2JqZWN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCmluZGV4IDJmZTA4MDkuLjQ3NGUyY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCkBAIC0yMTgsNiArMjE4LDcyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3QKKyAqCisgKiBQQVJBTUVURVJTOiAgaGFuZGxlcl9vYmogICAgICAgIC0gSGFuZGxlciBvYmplY3QgdG8gcG9wdWxhdGUKKyAqICAgICAgICAgICAgICBoYW5kbGVyX3R5cGUgICAgICAgLSBUaGUgdHlwZSBvZiBoYW5kbGVyOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9TWVNURU1fTk9USUZZOiBzeXN0ZW1faGFuZGxlciAoMDAtN2YpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0RFVklDRV9OT1RJRlk6IGRyaXZlcl9oYW5kbGVyICg4MC1mZikKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfQUxMX05PVElGWTogIGJvdGggc3lzdGVtIGFuZCBkZXZpY2UKKyAqICAgICAgICAgICAgICBoYW5kbGVyICAgICAgICAgICAgLSBBZGRyZXNzIG9mIHRoZSBoYW5kbGVyCisgKiAgICAgICAgICAgICAgY29udGV4dCAgICAgICAgICAgIC0gVmFsdWUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIG9uIGVhY2ggR1BFCisgKiAgICAgICAgICAgICAgbmV4dCAgICAgICAgICAgICAgIC0gQWRkcmVzcyBvZiBhIGhhbmRsZXIgb2JqZWN0IHRvIGxpbmsgdG8KKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZQorICoKKyAqIERFU0NSSVBUSU9OOiBQb3B1bGF0ZSBhIGhhbmRsZXIgb2JqZWN0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorYWNwaV9wb3B1bGF0ZV9oYW5kbGVyX29iamVjdChzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKmhhbmRsZXJfb2JqLAorCQkJICAgICB1MzIgaGFuZGxlcl90eXBlLAorCQkJICAgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNvbnRleHQsCisJCQkgICAgIHN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqbmV4dCkKK3sKKwloYW5kbGVyX29iai0+aGFuZGxlcl90eXBlID0gaGFuZGxlcl90eXBlOworCWhhbmRsZXJfb2JqLT5oYW5kbGVyID0gaGFuZGxlcjsKKwloYW5kbGVyX29iai0+Y29udGV4dCA9IGNvbnRleHQ7CisJaGFuZGxlcl9vYmotPm5leHQgPSBuZXh0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2FkZF9oYW5kbGVyX29iamVjdAorICoKKyAqIFBBUkFNRVRFUlM6ICBwYXJlbnRfb2JqICAgICAgICAgLSBQYXJlbnQgb2YgdGhlIG5ldyBvYmplY3QKKyAqICAgICAgICAgICAgICBoYW5kbGVyICAgICAgICAgICAgLSBBZGRyZXNzIG9mIHRoZSBoYW5kbGVyCisgKiAgICAgICAgICAgICAgY29udGV4dCAgICAgICAgICAgIC0gVmFsdWUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIG9uIGVhY2ggR1BFCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBDcmVhdGUgYSBuZXcgaGFuZGxlciBvYmplY3QgYW5kIHBvcHVsYXRlIGl0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfYWRkX2hhbmRsZXJfb2JqZWN0KHN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqcGFyZW50X29iaiwKKwkJCWFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlciwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKmhhbmRsZXJfb2JqOworCisJLyogVGhlIHBhcmVudCBtdXN0IG5vdCBiZSBhIGRlZmljZSBub3RpZnkgaGFuZGxlciBvYmplY3QuICovCisJaWYgKHBhcmVudF9vYmotPmhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CisKKwloYW5kbGVyX29iaiA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZigqaGFuZGxlcl9vYmopKTsKKwlpZiAoIWhhbmRsZXJfb2JqKQorCQlyZXR1cm4gQUVfTk9fTUVNT1JZOworCisJYWNwaV9wb3B1bGF0ZV9oYW5kbGVyX29iamVjdChoYW5kbGVyX29iaiwKKwkJCQkJQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQloYW5kbGVyLCBjb250ZXh0LAorCQkJCQlwYXJlbnRfb2JqLT5uZXh0KTsKKwlwYXJlbnRfb2JqLT5uZXh0ID0gaGFuZGxlcl9vYmo7CisKKwlyZXR1cm4gQUVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcgogICoKICAqIFBBUkFNRVRFUlM6ICBEZXZpY2UgICAgICAgICAgLSBUaGUgZGV2aWNlIGZvciB3aGljaCBub3RpZmllcyB3aWxsIGJlIGhhbmRsZWQKQEAgLTMxNiwxNSArMzgyLDMyIEBACiAJCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCQlpZiAob2JqX2Rlc2MpIHsKIAotCQkJLyogT2JqZWN0IGV4aXN0cyAtIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIGhhbmRsZXIgKi8KKwkJCS8qIE9iamVjdCBleGlzdHMuICovCiAKLQkJCWlmICgoKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgJiYKLQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSkgfHwKLQkJCSAgICAoKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgJiYKLQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuZGV2aWNlX25vdGlmeSkpIHsKKwkJCS8qIEZvciBhIGRldmljZSBub3RpZnksIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIGhhbmRsZXIuICovCisJCQlpZiAoKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgJiYKKwkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuZGV2aWNlX25vdGlmeSkgewogCQkJCXN0YXR1cyA9IEFFX0FMUkVBRFlfRVhJU1RTOwogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQorCisJCQkvKiBTeXN0ZW0gbm90aWZpZXMgbWF5IGhhdmUgbW9yZSBoYW5kbGVycyBpbnN0YWxsZWQuICovCisJCQlub3RpZnlfb2JqID0gb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeTsKKworCQkJaWYgKChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpICYmIG5vdGlmeV9vYmopIHsKKwkJCQlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKnBhcmVudF9vYmo7CisKKwkJCQlpZiAoaGFuZGxlcl90eXBlICYgQUNQSV9ERVZJQ0VfTk9USUZZKSB7CisJCQkJCXN0YXR1cyA9IEFFX0FMUkVBRFlfRVhJU1RTOworCQkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCQl9CisKKwkJCQlwYXJlbnRfb2JqID0gJm5vdGlmeV9vYmotPm5vdGlmeTsKKwkJCQlzdGF0dXMgPSBhY3BpX2FkZF9oYW5kbGVyX29iamVjdChwYXJlbnRfb2JqLAorCQkJCQkJCQkgaGFuZGxlciwKKwkJCQkJCQkJIGNvbnRleHQpOworCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQkJfQogCQl9IGVsc2UgewogCQkJLyogQ3JlYXRlIGEgbmV3IG9iamVjdCAqLwogCkBAIC0zNTYsOSArNDM5LDEwIEBACiAJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJfQogCi0JCW5vdGlmeV9vYmotPm5vdGlmeS5ub2RlID0gbm9kZTsKLQkJbm90aWZ5X29iai0+bm90aWZ5LmhhbmRsZXIgPSBoYW5kbGVyOwotCQlub3RpZnlfb2JqLT5ub3RpZnkuY29udGV4dCA9IGNvbnRleHQ7CisJCWFjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3QoJm5vdGlmeV9vYmotPm5vdGlmeSwKKwkJCQkJCWhhbmRsZXJfdHlwZSwKKwkJCQkJCWhhbmRsZXIsIGNvbnRleHQsCisJCQkJCQlOVUxMKTsKIAogCQlpZiAoaGFuZGxlcl90eXBlICYgQUNQSV9TWVNURU1fTk9USUZZKSB7CiAJCQlvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5zeXN0ZW1fbm90aWZ5ID0gbm90aWZ5X29iajsKQEAgLTQxOCw2ICs1MDIsMTAgQEAKIAkJZ290byBleGl0OwogCX0KIAorCisJLyogTWFrZSBzdXJlIGFsbCBkZWZlcnJlZCB0YXNrcyBhcmUgY29tcGxldGVkICovCisJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKKwogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlnb3RvIGV4aXQ7CkBAIC00NDUsMTUgKzUzMyw2IEBACiAJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJfQogCi0JCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwotCi0JCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwotCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQogCQlpZiAoaGFuZGxlcl90eXBlICYgQUNQSV9TWVNURU1fTk9USUZZKSB7CiAJCQlhY3BpX2dibF9zeXN0ZW1fbm90aWZ5Lm5vZGUgPSBOVUxMOwogCQkJYWNwaV9nYmxfc3lzdGVtX25vdGlmeS5oYW5kbGVyID0gTlVMTDsKQEAgLTQ4OCwyOCArNTY3LDYwIEBACiAJCS8qIE9iamVjdCBleGlzdHMgLSBtYWtlIHN1cmUgdGhlcmUncyBhbiBleGlzdGluZyBoYW5kbGVyICovCiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgeworCQkJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpoYW5kbGVyX29iajsKKwkJCXN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqcGFyZW50X29iajsKKwogCQkJbm90aWZ5X29iaiA9IG9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnk7CiAJCQlpZiAoIW5vdGlmeV9vYmopIHsKIAkJCQlzdGF0dXMgPSBBRV9OT1RfRVhJU1Q7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CiAKLQkJCWlmIChub3RpZnlfb2JqLT5ub3RpZnkuaGFuZGxlciAhPSBoYW5kbGVyKSB7CisJCQloYW5kbGVyX29iaiA9ICZub3RpZnlfb2JqLT5ub3RpZnk7CisJCQlwYXJlbnRfb2JqID0gTlVMTDsKKwkJCXdoaWxlIChoYW5kbGVyX29iai0+aGFuZGxlciAhPSBoYW5kbGVyKSB7CisJCQkJaWYgKGhhbmRsZXJfb2JqLT5uZXh0KSB7CisJCQkJCXBhcmVudF9vYmogPSBoYW5kbGVyX29iajsKKwkJCQkJaGFuZGxlcl9vYmogPSBoYW5kbGVyX29iai0+bmV4dDsKKwkJCQl9IGVsc2UgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChoYW5kbGVyX29iai0+aGFuZGxlciAhPSBoYW5kbGVyKSB7CiAJCQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KLQkJCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwogCi0JCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7Ci0JCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCWdvdG8gZXhpdDsKKwkJCS8qCisJCQkgKiBSZW1vdmUgdGhlIGhhbmRsZXIuICBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgY2FzZXMuCisJCQkgKiBGaXJzdCwgd2UgbWF5IG5lZWQgdG8gcmVtb3ZlIGEgbm9uLWVtYmVkZGVkIG9iamVjdC4KKwkJCSAqIFNlY29uZCwgd2UgbWF5IG5lZWQgdG8gcmVtb3ZlIHRoZSBlbWJlZGRlZCBvYmplY3QncworCQkJICogaGFuZGxlciBkYXRhLCB3aGlsZSBub24tZW1iZWRkZWQgb2JqZWN0cyBleGlzdC4KKwkJCSAqIEZpbmFsbHksIHdlIG1heSBuZWVkIHRvIHJlbW92ZSB0aGUgZW1iZWRkZWQgb2JqZWN0CisJCQkgKiBlbnRpcmVseSBhbG9uZyB3aXRoIGl0cyBjb250YWluZXIuCisJCQkgKi8KKwkJCWlmIChwYXJlbnRfb2JqKSB7CisJCQkJLyogTm9uLWVtYmVkZGVkIG9iamVjdCBpcyBiZWluZyByZW1vdmVkLiAqLworCQkJCXBhcmVudF9vYmotPm5leHQgPSBoYW5kbGVyX29iai0+bmV4dDsKKwkJCQlBQ1BJX0ZSRUUoaGFuZGxlcl9vYmopOworCQkJfSBlbHNlIGlmIChub3RpZnlfb2JqLT5ub3RpZnkubmV4dCkgeworCQkJCS8qCisJCQkJICogVGhlIGhhbmRsZXIgbWF0Y2hlcyB0aGUgZW1iZWRkZWQgb2JqZWN0LCBidXQKKwkJCQkgKiB0aGVyZSBhcmUgbW9yZSBoYW5kbGVyIG9iamVjdHMgaW4gdGhlIGxpc3QuCisJCQkJICogUmVwbGFjZSB0aGUgZW1iZWRkZWQgb2JqZWN0J3MgZGF0YSB3aXRoIHRoZQorCQkJCSAqIGZpcnN0IG5leHQgb2JqZWN0J3MgZGF0YSBhbmQgcmVtb3ZlIHRoYXQKKwkJCQkgKiBvYmplY3QuCisJCQkJICovCisJCQkJcGFyZW50X29iaiA9ICZub3RpZnlfb2JqLT5ub3RpZnk7CisJCQkJaGFuZGxlcl9vYmogPSBub3RpZnlfb2JqLT5ub3RpZnkubmV4dDsKKwkJCQkqcGFyZW50X29iaiA9ICpoYW5kbGVyX29iajsKKwkJCQlBQ1BJX0ZSRUUoaGFuZGxlcl9vYmopOworCQkJfSBlbHNlIHsKKwkJCQkvKiBObyBtb3JlIGhhbmRsZXIgb2JqZWN0cyBpbiB0aGUgbGlzdC4gKi8KKwkJCQlvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5zeXN0ZW1fbm90aWZ5ID0gTlVMTDsKKwkJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uobm90aWZ5X29iaik7CiAJCQl9Ci0KLQkJCS8qIFJlbW92ZSB0aGUgaGFuZGxlciAqLwotCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSA9IE5VTEw7Ci0JCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uobm90aWZ5X29iaik7CiAJCX0KIAogCQlpZiAoaGFuZGxlcl90eXBlICYgQUNQSV9ERVZJQ0VfTk9USUZZKSB7CkBAIC01MjMsMTQgKzYzNCw2IEBACiAJCQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KLQkJCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwotCi0JCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7Ci0JCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCWdvdG8gZXhpdDsKLQkJCX0KIAogCQkJLyogUmVtb3ZlIHRoZSBoYW5kbGVyICovCiAJCQlvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5kZXZpY2Vfbm90aWZ5ID0gTlVMTDsKQEAgLTYxNywxMyArNzIwLDYgQEAKIAloYW5kbGVyLT5jb250ZXh0ID0gY29udGV4dDsKIAloYW5kbGVyLT5tZXRob2Rfbm9kZSA9IGdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5tZXRob2Rfbm9kZTsKIAotCS8qIERpc2FibGUgdGhlIEdQRSBiZWZvcmUgaW5zdGFsbGluZyB0aGUgaGFuZGxlciAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OwotCX0KLQogCS8qIEluc3RhbGwgdGhlIGhhbmRsZXIgKi8KIAogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwpAQCAtNzA3LDEzICs4MDMsNiBAQAogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKLQkvKiBEaXNhYmxlIHRoZSBHUEUgYmVmb3JlIHJlbW92aW5nIHRoZSBoYW5kbGVyICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JfQotCiAJLyogTWFrZSBzdXJlIGFsbCBkZWZlcnJlZCB0YXNrcyBhcmUgY29tcGxldGVkICovCiAKIAkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwppbmRleCBlZWQ3YTM4Li4xMjRjMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCkBAIC0yMDEsNjcgKzIwMSwyNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3NldF9ncGVfdHlwZQorICogRlVOQ1RJT046ICAgIGFjcGlfc2V0X2dwZQogICoKICAqIFBBUkFNRVRFUlM6ICBncGVfZGV2aWNlICAgICAgLSBQYXJlbnQgR1BFIERldmljZQogICogICAgICAgICAgICAgIGdwZV9udW1iZXIgICAgICAtIEdQRSBsZXZlbCB3aXRoaW4gdGhlIEdQRSBibG9jawotICogICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAtIE5ldyBHUEUgdHlwZQotICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKLSAqCi0gKiBERVNDUklQVElPTjogU2V0IHRoZSB0eXBlIG9mIGFuIGluZGl2aWR1YWwgR1BFCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfc2V0X2dwZV90eXBlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKQotewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbzsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9zZXRfZ3BlX3R5cGUpOwotCi0JLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KLQotCWdwZV9ldmVudF9pbmZvID0gYWNwaV9ldl9nZXRfZ3BlX2V2ZW50X2luZm8oZ3BlX2RldmljZSwgZ3BlX251bWJlcik7Ci0JaWYgKCFncGVfZXZlbnRfaW5mbykgewotCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwotCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKLQl9Ci0KLQlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfTUFTSykgPT0gdHlwZSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCX0KLQotCS8qIFNldCB0aGUgbmV3IHR5cGUgKHdpbGwgZGlzYWJsZSBHUEUgaWYgY3VycmVudGx5IGVuYWJsZWQpICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X3NldF9ncGVfdHlwZShncGVfZXZlbnRfaW5mbywgdHlwZSk7Ci0KLSAgICAgIHVubG9ja19hbmRfZXhpdDoKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLX0KLQotQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2dwZV90eXBlKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2VuYWJsZV9ncGUKLSAqCi0gKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKLSAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgLSBKdXN0IGVuYWJsZSwgb3IgYWxzbyB3YWtlIGVuYWJsZT8KKyAqICAgICAgICAgICAgICBhY3Rpb24gICAgICAgICAgLSBFbmFibGUgb3IgZGlzYWJsZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBmcm9tIElTUiBvciBub3QKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IEVuYWJsZSBhbiBBQ1BJIGV2ZW50IChnZW5lcmFsIHB1cnBvc2UpCisgKiBERVNDUklQVElPTjogRW5hYmxlIG9yIGRpc2FibGUgYW4gQUNQSSBldmVudCAoZ2VuZXJhbCBwdXJwb3NlKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpCithY3BpX3N0YXR1cyBhY3BpX3NldF9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IGFjdGlvbikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlhY3BpX2NwdV9mbGFncyBmbGFnczsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW5hYmxlX2dwZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3NldF9ncGUpOwogCiAJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CiAKQEAgLTI3MywxNSArMjMxLDkwIEBACiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAotCS8qIFBlcmZvcm0gdGhlIGVuYWJsZSAqLworCS8qIFBlcmZvcm0gdGhlIGFjdGlvbiAqLwogCi0Jc3RhdHVzID0gYWNwaV9ldl9lbmFibGVfZ3BlKGdwZV9ldmVudF9pbmZvLCBUUlVFKTsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQUNQSV9HUEVfRU5BQkxFOgorCQlzdGF0dXMgPSBhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOworCQlicmVhazsKKworCWNhc2UgQUNQSV9HUEVfRElTQUJMRToKKwkJc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgYWN0aW9uXG4iKSk7CisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWJyZWFrOworCX0KIAogICAgICAgdW5sb2NrX2FuZF9leGl0OgogCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9ncGUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfZW5hYmxlX2dwZQorICoKKyAqIFBBUkFNRVRFUlM6ICBncGVfZGV2aWNlICAgICAgLSBQYXJlbnQgR1BFIERldmljZQorICogICAgICAgICAgICAgIGdwZV9udW1iZXIgICAgICAtIEdQRSBsZXZlbCB3aXRoaW4gdGhlIEdQRSBibG9jaworICogICAgICAgICAgICAgIHR5cGUgICAgICAgICAgICAtIFB1cnBvc2UgdGhlIEdQRSB3aWxsIGJlIHVzZWQgZm9yCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBUYWtlIGEgcmVmZXJlbmNlIHRvIGEgR1BFIGFuZCBlbmFibGUgaXQgaWYgbmVjZXNzYXJ5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2FjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKwlhY3BpX2NwdV9mbGFncyBmbGFnczsKKwlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW5hYmxlX2dwZSk7CisKKwlpZiAodHlwZSAmIH5BQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKQorCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisKKwlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKKworCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyICovCisKKwlncGVfZXZlbnRfaW5mbyA9IGFjcGlfZXZfZ2V0X2dwZV9ldmVudF9pbmZvKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOworCWlmICghZ3BlX2V2ZW50X2luZm8pIHsKKwkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKwkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJfQorCisJaWYgKHR5cGUgJiBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpIHsKKwkJaWYgKCsrZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQgPT0gMSkgeworCQkJc3RhdHVzID0gYWNwaV9ldl9lbmFibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCQlncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudC0tOworCQl9CisJfQorCisJaWYgKHR5cGUgJiBBQ1BJX0dQRV9UWVBFX1dBS0UpIHsKKwkJaWYgKCEoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfQ0FOX1dBS0UpKSB7CisJCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOworCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCX0KKworCQkvKgorCQkgKiBXYWtlLXVwIEdQRXMgYXJlIG9ubHkgZW5hYmxlZCByaWdodCBwcmlvciB0byBwdXR0aW5nIHRoZQorCQkgKiBzeXN0ZW0gaW50byBhIHNsZWVwIHN0YXRlLgorCQkgKi8KKwkJaWYgKCsrZ3BlX2V2ZW50X2luZm8tPndha2V1cF9jb3VudCA9PSAxKQorCQkJYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJfQorCit1bmxvY2tfYW5kX2V4aXQ6CisJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKK30KIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2VuYWJsZV9ncGUpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yOTAsMTUgKzMyMywxNCBAQAogICoKICAqIFBBUkFNRVRFUlM6ICBncGVfZGV2aWNlICAgICAgLSBQYXJlbnQgR1BFIERldmljZQogICogICAgICAgICAgICAgIGdwZV9udW1iZXIgICAgICAtIEdQRSBsZXZlbCB3aXRoaW4gdGhlIEdQRSBibG9jawotICogICAgICAgICAgICAgIEZsYWdzICAgICAgICAgICAtIEp1c3QgZGlzYWJsZSwgb3IgYWxzbyB3YWtlIGRpc2FibGU/Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIGZyb20gSVNSIG9yIG5vdAorICogICAgICAgICAgICAgIHR5cGUgICAgICAgICAgICAtIFB1cnBvc2UgdGhlIEdQRSB3b24ndCBiZSB1c2VkIGZvciBhbnkgbW9yZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogRGlzYWJsZSBhbiBBQ1BJIGV2ZW50IChnZW5lcmFsIHB1cnBvc2UpCisgKiBERVNDUklQVElPTjogUmVsZWFzZSBhIHJlZmVyZW5jZSB0byBhIEdQRSBhbmQgZGlzYWJsZSBpdCBpZiBuZWNlc3NhcnkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlcikKK2FjcGlfc3RhdHVzIGFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CkBAIC0zMDYsNiArMzM4LDkgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9kaXNhYmxlX2dwZSk7CiAKKwlpZiAodHlwZSAmIH5BQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKQorCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisKIAlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKIAkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLwogCkBAIC0zMTUsMTMgKzM1MCwyNCBAQAogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKLQlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKKwlpZiAoKHR5cGUgJiBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpICYmIGdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50KSB7CisJCWlmICgtLWdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50ID09IDApCisJCQlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKKwl9CisKKwlpZiAoKHR5cGUgJiBBQ1BJX0dQRV9UWVBFX1dBS0UpICYmIGdwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQpIHsKKwkJLyoKKwkJICogV2FrZS11cCBHUEVzIGFyZSBub3QgZW5hYmxlZCBhZnRlciBsZWF2aW5nIHN5c3RlbSBzbGVlcAorCQkgKiBzdGF0ZXMsIHNvIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSB0aGVtIGhlcmUuCisJCSAqLworCQlpZiAoLS1ncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50ID09IDApCisJCQlhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKKwl9CiAKIHVubG9ja19hbmRfZXhpdDoKIAlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9ncGVfbG9jaywgZmxhZ3MpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQotCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9kaXNhYmxlX2dwZSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXR0b24uYyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwppbmRleCA4YTk1ZTgzLi5mNTNmYmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC00MjIsMTEgKzQyMiwxMCBAQAogCiAJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnZhbGlkKSB7CiAJCS8qIEJ1dHRvbidzIEdQRSBpcyBydW4td2FrZSBHUEUgKi8KLQkJYWNwaV9zZXRfZ3BlX3R5cGUoZGV2aWNlLT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkgIGRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJICBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKIAkJYWNwaV9lbmFibGVfZ3BlKGRldmljZS0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJZGV2aWNlLT53YWtldXAuZ3BlX251bWJlcik7CisJCQkJZGV2aWNlLT53YWtldXAuZ3BlX251bWJlciwKKwkJCQlBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKKwkJZGV2aWNlLT53YWtldXAucnVuX3dha2VfY291bnQrKzsKIAkJZGV2aWNlLT53YWtldXAuc3RhdGUuZW5hYmxlZCA9IDE7CiAJfQogCkBAIC00NDYsNiArNDQ1LDE0IEBACiB7CiAJc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKKwlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQpIHsKKwkJYWNwaV9kaXNhYmxlX2dwZShkZXZpY2UtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7CisJCWRldmljZS0+d2FrZXVwLnJ1bl93YWtlX2NvdW50LS07CisJCWRldmljZS0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgPSAwOworCX0KKwogCWFjcGlfYnV0dG9uX3JlbW92ZV9mcyhkZXZpY2UpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJ1dHRvbi0+aW5wdXQpOwogCWtmcmVlKGJ1dHRvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCBiYmMyYzEzLi5iMjU4NmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTkzNSw2ICs5MzUsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRkOwogCiAJaWQgPSBkb2NrX3N0YXRpb25fY291bnQ7CisJbWVtc2V0KCZkcywgMCwgc2l6ZW9mKGRzKSk7CiAJZGQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiZG9jayIsIGlkLCAmZHMsIHNpemVvZihkcykpOwogCWlmIChJU19FUlIoZGQpKQogCQlyZXR1cm4gUFRSX0VSUihkZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IGQ2NDcxYmIuLjI3ZTBiOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC0zMDcsNyArMzA3LDExIEBACiAJcHJfZGVidWcoUFJFRklYICJ0cmFuc2FjdGlvbiBzdGFydFxuIik7CiAJLyogZGlzYWJsZSBHUEUgZHVyaW5nIHRyYW5zYWN0aW9uIGlmIHN0b3JtIGlzIGRldGVjdGVkICovCiAJaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9TVE9STSwgJmVjLT5mbGFncykpIHsKLQkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKwkJLyoKKwkJICogSXQgaGFzIHRvIGJlIGRpc2FibGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCByZWdhcmRsZXNzIG9mIHRoZQorCQkgKiBHUEUgcmVmZXJlbmNlIGNvdW50aW5nLCBzbyB0aGF0IGl0IGRvZXNuJ3QgdHJpZ2dlci4KKwkJICovCisJCWFjcGlfc2V0X2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9ESVNBQkxFKTsKIAl9CiAKIAlzdGF0dXMgPSBhY3BpX2VjX3RyYW5zYWN0aW9uX3VubG9ja2VkKGVjLCB0KTsKQEAgLTMxNiw4ICszMjAsMTIgQEAKIAllY19jaGVja19zY2lfc3luYyhlYywgYWNwaV9lY19yZWFkX3N0YXR1cyhlYykpOwogCWlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7CiAJCW1zbGVlcCgxKTsKLQkJLyogaXQgaXMgc2FmZSB0byBlbmFibGUgR1BFIG91dHNpZGUgb2YgdHJhbnNhY3Rpb24gKi8KLQkJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCQkvKgorCQkgKiBJdCBpcyBzYWZlIHRvIGVuYWJsZSB0aGUgR1BFIG91dHNpZGUgb2YgdGhlIHRyYW5zYWN0aW9uLiAgVXNlCisJCSAqIGFjcGlfc2V0X2dwZSgpIGZvciB0aGF0LCBzaW5jZSB3ZSB1c2VkIGl0IHRvIGRpc2FibGUgdGhlIEdQRQorCQkgKiBhYm92ZS4KKwkJICovCisJCWFjcGlfc2V0X2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9FTkFCTEUpOwogCX0gZWxzZSBpZiAodC0+aXJxX2NvdW50ID4gQUNQSV9FQ19TVE9STV9USFJFU0hPTEQpIHsKIAkJcHJfaW5mbyhQUkVGSVggIkdQRSBzdG9ybSBkZXRlY3RlZCwgIgogCQkJInRyYW5zYWN0aW9ucyB3aWxsIHVzZSBwb2xsaW5nIG1vZGVcbiIpOwpAQCAtNzg4LDggKzc5Niw4IEBACiAJCQkJICAmYWNwaV9lY19ncGVfaGFuZGxlciwgZWMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JYWNwaV9zZXRfZ3BlX3R5cGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKLQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisKKwlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKIAlzdGF0dXMgPSBhY3BpX2luc3RhbGxfYWRkcmVzc19zcGFjZV9oYW5kbGVyKGVjLT5oYW5kbGUsCiAJCQkJCQkgICAgQUNQSV9BRFJfU1BBQ0VfRUMsCiAJCQkJCQkgICAgJmFjcGlfZWNfc3BhY2VfaGFuZGxlciwKQEAgLTgwNiw2ICs4MTQsNyBAQAogCQl9IGVsc2UgewogCQkJYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZSwKIAkJCQkmYWNwaV9lY19ncGVfaGFuZGxlcik7CisJCQlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTgxNiw2ICs4MjUsNyBAQAogCiBzdGF0aWMgdm9pZCBlY19yZW1vdmVfaGFuZGxlcnMoc3RydWN0IGFjcGlfZWMgKmVjKQogeworCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKIAlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAogCQkJCUFDUElfQURSX1NQQUNFX0VDLCAmYWNwaV9lY19zcGFjZV9oYW5kbGVyKSkpCiAJCXByX2VycihQUkVGSVggImZhaWxlZCB0byByZW1vdmUgc3BhY2UgaGFuZGxlclxuIik7CkBAIC0xMDU3LDE2ICsxMDY3LDE2IEBACiBzdGF0aWMgaW50IGFjcGlfZWNfc3VzcGVuZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBhY3BpX2VjICplYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQkvKiBTdG9wIHVzaW5nIEdQRSAqLwotCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJLyogU3RvcCB1c2luZyB0aGUgR1BFLCBidXQga2VlcCBpdCByZWZlcmVuY2UgY291bnRlZC4gKi8KKwlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRElTQUJMRSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19yZXN1bWUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCS8qIEVuYWJsZSB1c2Ugb2YgR1BFIGJhY2sgKi8KLQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJLyogRW5hYmxlIHRoZSBHUEUgYWdhaW4sIGJ1dCBkb24ndCByZWZlcmVuY2UgY291bnQgaXQgb25jZSBtb3JlLiAqLworCWFjcGlfc2V0X2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9FTkFCTEUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaCBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCmluZGV4IGNiMjhlMDUuLjljNGM5NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCkBAIC0zNiw4ICszNiw2IEBACiBpbnQgYWNwaV9wb3dlcl9pbml0KHZvaWQpOwogaW50IGFjcGlfZGV2aWNlX3NsZWVwX3dha2Uoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5hYmxlLCBpbnQgc2xlZXBfc3RhdGUsIGludCBkZXZfc3RhdGUpOwotaW50IGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsIGludCBzbGVlcF9zdGF0ZSk7Ci1pbnQgYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpOwogaW50IGFjcGlfcG93ZXJfZ2V0X2luZmVycmVkX3N0YXRlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIGludCBhY3BpX3Bvd2VyX3RyYW5zaXRpb24oc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCBzdGF0ZSk7CiBleHRlcm4gaW50IGFjcGlfcG93ZXJfbm9jaGVjazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jIGIvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKaW5kZXggYTVhNzdiNy4uMmVmMDQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIApAQCAtMzgsNyArNDAsMTMgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCiAJZGV2ID0gYWNwaV9nZXRfcGNpX2RldihkZXZpY2UtPmhhbmRsZSk7Ci0JaWYgKCFkZXYgfHwgIWRldi0+c3Vib3JkaW5hdGUpCisJaWYgKCFkZXYpCisJCWdvdG8gb3V0OworCisJZGV2aWNlX3NldF9ydW5fd2FrZSgmZGV2LT5kZXYsIGZhbHNlKTsKKwlwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIoZGV2aWNlKTsKKworCWlmICghZGV2LT5zdWJvcmRpbmF0ZSkKIAkJZ290byBvdXQ7CiAKIAlhY3BpX3BjaV9pcnFfZGVsX3BydChkZXYtPnN1Ym9yZGluYXRlKTsKQEAgLTYyLDYgKzcwLDEwIEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAwOwogCisJcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyKGRldmljZSwgZGV2KTsKKwlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UpCisJCWRldmljZV9zZXRfcnVuX3dha2UoJmRldi0+ZGV2LCB0cnVlKTsKKwogCS8qCiAJICogSW5zdGFsbCB0aGUgJ2JpbmQnIGZ1bmN0aW9uIHRvIGZhY2lsaXRhdGUgY2FsbGJhY2tzIGZvcgogCSAqIGNoaWxkcmVuIG9mIHRoZSBQMlAgYnJpZGdlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCA2NGY1NWI2Li5kNzI0NzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgpAQCAtNTI4LDYgKzUyOSwxMCBAQAogCWlmIChmbGFncyAhPSBiYXNlX2ZsYWdzKQogCQlhY3BpX3BjaV9vc2Nfc3VwcG9ydChyb290LCBmbGFncyk7CiAKKwlwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyKGRldmljZSwgcm9vdC0+YnVzKTsKKwlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UpCisJCWRldmljZV9zZXRfcnVuX3dha2Uocm9vdC0+YnVzLT5icmlkZ2UsIHRydWUpOworCiAJcmV0dXJuIDA7CiAKIGVuZDoKQEAgLTU0OSw2ICs1NTQsOSBAQAogewogCXN0cnVjdCBhY3BpX3BjaV9yb290ICpyb290ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCisJZGV2aWNlX3NldF9ydW5fd2FrZShyb290LT5idXMtPmJyaWRnZSwgZmFsc2UpOworCXBjaV9hY3BpX3JlbW92ZV9idXNfcG1fbm90aWZpZXIoZGV2aWNlKTsKKwogCWtmcmVlKHJvb3QpOwogCXJldHVybiAwOwogfQpAQCAtNTU4LDYgKzU2Niw3IEBACiAJaWYgKGFjcGlfcGNpX2Rpc2FibGVkKQogCQlyZXR1cm4gMDsKIAorCXBjaV9hY3BpX2Nyc19xdWlya3MoKTsKIAlpZiAoYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BjaV9yb290X2RyaXZlcikgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCA3YzA0NDFmLi5jYzk3OGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtMTEwLDYgKzExMCwxNCBAQAogCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiUGhvZW5peCBUZWNobm9sb2dpZXMgTFREIiksCiAJICBETUlfTUFUQ0goRE1JX0JJT1NfVkVSU0lPTiwiU0hFODQ1TTAuODZDLjAwMTMuRC4wMzAyMTMxMzA3Iil9LAogCSAodm9pZCAqKTJ9LAorCXsgc2V0X21heF9jc3RhdGUsICJQYXZpbGlvbiB6djUwMDAiLCB7CisJICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJQYXZpbGlvbiB6djUwMDAgKERTNTAyQSNBQkEpIil9LAorCSAodm9pZCAqKTF9LAorCXsgc2V0X21heF9jc3RhdGUsICJBc3VzIEw4NDAwQiIsIHsKKwkgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAorCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIkw4NDAwQiBzZXJpZXMgTm90ZWJvb2sgUEMiKX0sCisJICh2b2lkICopMX0sCiAJe30sCiB9OwogCkBAIC04NzIsMTIgKzg4MCwxNCBAQAogCQlyZXR1cm4oYWNwaV9pZGxlX2VudGVyX2MxKGRldiwgc3RhdGUpKTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7Ci0JLyoKLQkgKiBUU19QT0xMSU5HLWNsZWFyZWQgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0Ci0JICogTkVFRF9SRVNDSEVEOgotCSAqLwotCXNtcF9tYigpOworCWlmIChjeC0+ZW50cnlfbWV0aG9kICE9IEFDUElfQ1NUQVRFX0ZGSCkgeworCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKKwkJLyoKKwkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdAorCQkgKiBORUVEX1JFU0NIRUQ6CisJCSAqLworCQlzbXBfbWIoKTsKKwl9CiAKIAlpZiAodW5saWtlbHkobmVlZF9yZXNjaGVkKCkpKSB7CiAJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CkBAIC05NTcsMTIgKzk2NywxNCBAQAogCX0KIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7Ci0JLyoKLQkgKiBUU19QT0xMSU5HLWNsZWFyZWQgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0Ci0JICogTkVFRF9SRVNDSEVEOgotCSAqLwotCXNtcF9tYigpOworCWlmIChjeC0+ZW50cnlfbWV0aG9kICE9IEFDUElfQ1NUQVRFX0ZGSCkgeworCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKKwkJLyoKKwkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdAorCQkgKiBORUVEX1JFU0NIRUQ6CisJCSAqLworCQlzbXBfbWIoKTsKKwl9CiAKIAlpZiAodW5saWtlbHkobmVlZF9yZXNjaGVkKCkpKSB7CiAJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BkYy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZGMuYwppbmRleCA3MjQ3ODE5Li5lMzA2YmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BkYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGRjLmMKQEAgLTEyNSw2ICsxMjUsOCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgZWFybHlfcGRjX2RvbmU7CisKIHZvaWQgYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKm9ial9saXN0OwpAQCAtMTMyLDYgKzEzNCw5IEBACiAJaWYgKGFyY2hfaGFzX2FjcGlfcGRjKCkgPT0gZmFsc2UpCiAJCXJldHVybjsKIAorCWlmIChlYXJseV9wZGNfZG9uZSkKKwkJcmV0dXJuOworCiAJb2JqX2xpc3QgPSBhY3BpX3Byb2Nlc3Nvcl9hbGxvY19wZGMoKTsKIAlpZiAoIW9ial9saXN0KQogCQlyZXR1cm47CkBAIC0xNTEsNiArMTU2LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcGFyYW1fZWFybHlfcGRjX29wdGluKGNoYXIgKnMpCit7CisJZWFybHlfcGRjX29wdGluID0gMTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImFjcGlfZWFybHlfcGRjX2V2YWwiLCBwYXJhbV9lYXJseV9wZGNfb3B0aW4pOworCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19jcHVpbml0ZGF0YSBlYXJseV9wZGNfb3B0aW5fdGFibGVbXSA9IHsKIAl7CiAJc2V0X2Vhcmx5X3BkY19vcHRpbiwgIkhQIEVudnkiLCB7CkBAIC0xOTIsNCArMjA0LDYgQEAKIAlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9QUk9DRVNTT1IsIEFDUElfUk9PVF9PQkpFQ1QsCiAJCQkgICAgQUNQSV9VSU5UMzJfTUFYLAogCQkJICAgIGVhcmx5X2luaXRfcGRjLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCWVhcmx5X3BkY19kb25lID0gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggMmNhYmFkYy4uYTk1OWY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTQxMyw3ICs0MTMsMTEgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIHVwZGF0ZV9iaW9zOwogCi0JcmV0dXJuIDA7CisJLyogV2UgbmVlZCB0byBjYWxsIF9QUEMgb25jZSB3aGVuIGNwdWZyZXEgc3RhcnRzICovCisJaWYgKGlnbm9yZV9wcGMgIT0gMSkKKwkJcmVzdWx0ID0gYWNwaV9wcm9jZXNzb3JfZ2V0X3BsYXRmb3JtX2xpbWl0KHByKTsKKworCXJldHVybiByZXN1bHQ7CiAKIAkvKgogCSAqIEhhdmluZyBfUFBDIGJ1dCBtaXNzaW5nIGZyZXF1ZW5jaWVzIChfUFNTLCBfUENUKSBpcyBhIHZlcnkgZ29vZCBoaW50IHRoYXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IGZmOWY2MjIuLmZiN2ZjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtNzQxLDE5ICs3NDEsNDAgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9idXNfZ2V0X3dha2V1cF9kZXZpY2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBhY3BpX2J1c19zZXRfcnVuX3dha2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlID0gTlVMTDsKLQlpbnQgcHN3X2Vycm9yOwotCiAJc3RydWN0IGFjcGlfZGV2aWNlX2lkIGJ1dHRvbl9kZXZpY2VfaWRzW10gPSB7CiAJCXsiUE5QMEMwRCIsIDB9LAogCQl7IlBOUDBDMEMiLCAwfSwKIAkJeyJQTlAwQzBFIiwgMH0sCiAJCXsiIiwgMH0sCiAJfTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9ldmVudF9zdGF0dXMgZXZlbnRfc3RhdHVzOworCisJZGV2aWNlLT53YWtldXAucnVuX3dha2VfY291bnQgPSAwOworCWRldmljZS0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQgPSAwOworCisJLyogUG93ZXIgYnV0dG9uLCBMaWQgc3dpdGNoIGFsd2F5cyBlbmFibGUgd2FrZXVwICovCisJaWYgKCFhY3BpX21hdGNoX2RldmljZV9pZHMoZGV2aWNlLCBidXR0b25fZGV2aWNlX2lkcykpIHsKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPSAxOworCQlkZXZpY2UtPndha2V1cC5mbGFncy5hbHdheXNfZW5hYmxlZCA9IDE7CisJCXJldHVybjsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2dldF9ncGVfc3RhdHVzKE5VTEwsIGRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJCUFDUElfTk9UX0lTUiwgJmV2ZW50X3N0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSBBRV9PSykKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPQorCQkJCSEhKGV2ZW50X3N0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19IQU5ETEUpOworfQorCitzdGF0aWMgaW50IGFjcGlfYnVzX2dldF93YWtldXBfZGV2aWNlX2ZsYWdzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZSA9IE5VTEw7CisJaW50IHBzd19lcnJvcjsKIAogCS8qIF9QUlcgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIl9QUlciLCBOVUxMLCAmYnVmZmVyKTsKQEAgLTc3Myw2ICs3OTQsNyBAQAogCiAJZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQgPSAxOwogCWRldmljZS0+d2FrZXVwLnByZXBhcmVfY291bnQgPSAwOworCWFjcGlfYnVzX3NldF9ydW5fd2FrZV9mbGFncyhkZXZpY2UpOwogCS8qIENhbGwgX1BTVy9fRFNXIG9iamVjdCB0byBkaXNhYmxlIGl0cyBhYmlsaXR5IHRvIHdha2UgdGhlIHNsZWVwaW5nCiAJICogc3lzdGVtIGZvciB0aGUgQUNQSSBkZXZpY2Ugd2l0aCB0aGUgX1BSVyBvYmplY3QuCiAJICogVGhlIF9QU1cgb2JqZWN0IGlzIGRlcHJlY2lhdGVkIGluIEFDUEkgMy4wIGFuZCBpcyByZXBsYWNlZCBieSBfRFNXLgpAQCAtNzg0LDEwICs4MDYsNiBAQAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJImVycm9yIGluIF9EU1cgb3IgX1BTVyBldmFsdWF0aW9uXG4iKSk7CiAKLQkvKiBQb3dlciBidXR0b24sIExpZCBzd2l0Y2ggYWx3YXlzIGVuYWJsZSB3YWtldXAgKi8KLQlpZiAoIWFjcGlfbWF0Y2hfZGV2aWNlX2lkcyhkZXZpY2UsIGJ1dHRvbl9kZXZpY2VfaWRzKSkKLQkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPSAxOwotCiBlbmQ6CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlkZXZpY2UtPmZsYWdzLndha2VfY2FwYWJsZSA9IDA7CkBAIC0xMzM2LDkgKzEzNTQsMjUgQEAKIAogCWlmIChjaGlsZCkKIAkJKmNoaWxkID0gZGV2aWNlOwotCXJldHVybiAwOworCisJaWYgKGRldmljZSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKIH0KIAorLyoKKyAqIGFjcGlfYnVzX2FkZCBhbmQgYWNwaV9idXNfc3RhcnQKKyAqCisgKiBzY2FuIGEgZ2l2ZW4gQUNQSSB0cmVlIGFuZCAocHJvYmFibHkgcmVjZW50bHkgaG90LXBsdWdnZWQpCisgKiBjcmVhdGUgYW5kIGFkZCBvciBzdGFydHMgZm91bmQgZGV2aWNlcy4KKyAqCisgKiBJZiBubyBkZXZpY2VzIHdlcmUgZm91bmQgLUVOT0RFViBpcyByZXR1cm5lZCB3aGljaCBkb2VzIG5vdAorICogbWVhbiB0aGF0IHRoaXMgaXMgYSByZWFsIGVycm9yLCB0aGVyZSBqdXN0IGhhdmUgYmVlbiBubyBzdWl0YWJsZQorICogQUNQSSBvYmplY3RzIGluIHRoZSB0YWJsZSB0cnVuayBmcm9tIHdoaWNoIHRoZSBrZXJuZWwgY291bGQgY3JlYXRlCisgKiBhIGRldmljZSBhbmQgYWRkL3N0YXJ0IGFuIGFwcHJvcHJpYXRlIGRyaXZlci4KKyAqLworCiBpbnQKIGFjcGlfYnVzX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCwKIAkgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlKQpAQCAtMTM0OCw4ICsxMzgyLDcgQEAKIAltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOwogCW9wcy5hY3BpX29wX2FkZCA9IDE7CiAKLQlhY3BpX2J1c19zY2FuKGhhbmRsZSwgJm9wcywgY2hpbGQpOwotCXJldHVybiAwOworCXJldHVybiBhY3BpX2J1c19zY2FuKGhhbmRsZSwgJm9wcywgY2hpbGQpOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19hZGQpOwogCkBAIC0xMzU3LDExICsxMzkwLDEzIEBACiB7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOwogCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKIAotCWFjcGlfYnVzX3NjYW4oZGV2aWNlLT5oYW5kbGUsICZvcHMsIE5VTEwpOwotCXJldHVybiAwOworCXJldHVybiBhY3BpX2J1c19zY2FuKGRldmljZS0+aGFuZGxlLCAmb3BzLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfc3RhcnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDc5ZDMzZDkuLjNiZGU1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC03NDUsOSArNzQ1LDE4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWVycm9yID0gZW5hYmxlID8KLQkJYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2LCBhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSkgOgotCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2KTsKKwlpZiAoZW5hYmxlKSB7CisJCWVycm9yID0gYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2LAorCQkJCQkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUpOworCQlpZiAoIWVycm9yKQorCQkJYWNwaV9lbmFibGVfZ3BlKGFkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlhZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkJQUNQSV9HUEVfVFlQRV9XQUtFKTsKKwl9IGVsc2UgeworCQlhY3BpX2Rpc2FibGVfZ3BlKGFkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBhZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOworCQllcnJvciA9IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYpOworCX0KIAlpZiAoIWVycm9yKQogCQlkZXZfaW5mbyhkZXYsICJ3YWtlLXVwIGNhcGFiaWxpdHkgJXMgYnkgQUNQSVxuIiwKIAkJCQllbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwppbmRleCBkMTEyODI5Li5hMjA2YTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCkBAIC0zODcsMTAgKzM4NywxMCBAQAogCWlmIChpbmRleCA8IG51bV9ncGVzKSB7CiAJCWlmICghc3RyY21wKGJ1ZiwgImRpc2FibGVcbiIpICYmCiAJCQkJKHN0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19FTkFCTEVEKSkKLQkJCXJlc3VsdCA9IGFjcGlfZGlzYWJsZV9ncGUoaGFuZGxlLCBpbmRleCk7CisJCQlyZXN1bHQgPSBhY3BpX3NldF9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9HUEVfRElTQUJMRSk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZW5hYmxlXG4iKSAmJgogCQkJCSEoc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX0VOQUJMRUQpKQotCQkJcmVzdWx0ID0gYWNwaV9lbmFibGVfZ3BlKGhhbmRsZSwgaW5kZXgpOworCQkJcmVzdWx0ID0gYWNwaV9zZXRfZ3BlKGhhbmRsZSwgaW5kZXgsIEFDUElfR1BFX0VOQUJMRSk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiY2xlYXJcbiIpICYmCiAJCQkJKHN0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19TRVQpKQogCQkJcmVzdWx0ID0gYWNwaV9jbGVhcl9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9OT1RfSVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwppbmRleCBmMzM2YmNhNy4uOGEwZWQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJdW5zaWduZWQgbG9uZyB0YWJsZV9lbmQ7CiAJYWNwaV9zaXplIHRibF9zaXplOwogCi0JaWYgKGFjcGlfZGlzYWJsZWQpCisJaWYgKGFjcGlfZGlzYWJsZWQgJiYgIWFjcGlfaHQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFoYW5kbGVyKQpAQCAtMjgwLDcgKzI4MCw3IEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CiAJYWNwaV9zaXplIHRibF9zaXplOwogCi0JaWYgKGFjcGlfZGlzYWJsZWQpCisJaWYgKGFjcGlfZGlzYWJsZWQgJiYgIWFjcGlfaHQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFoYW5kbGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3dha2V1cC5jIGIvZHJpdmVycy9hY3BpL3dha2V1cC5jCmluZGV4IGUwZWUwYzAuLjRiOWQzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS93YWtldXAuYworKysgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKQEAgLTIxLDEyICsyMSwxMiBAQAogQUNQSV9NT0RVTEVfTkFNRSgid2FrZXVwX2RldmljZXMiKQogCiAvKioKLSAqIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCAtIHByZXBhcmUgd2FrZXVwIGRldmljZXMKLSAqCUBzbGVlcF9zdGF0ZToJQUNQSSBzdGF0ZQotICogRW5hYmxlIGFsbCB3YWt1cCBkZXZpY2VzIHBvd2VyIGlmIHRoZSBkZXZpY2VzJyB3YWtldXAgbGV2ZWwKLSAqIGlzIGhpZ2hlciB0aGFuIHJlcXVlc3RlZCBzbGVlcCBsZXZlbAorICogYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wcmVwIC0gUHJlcGFyZSB3YWtlLXVwIGRldmljZXMuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIEVuYWJsZSBhbGwgd2FrZS11cCBkZXZpY2VzJyBwb3dlciwgdW5sZXNzIHRoZSByZXF1ZXN0ZWQgc3lzdGVtIHNsZWVwIHN0YXRlIGlzCisgKiB0b28gZGVlcC4KICAqLwotCiB2b2lkIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCh1OCBzbGVlcF9zdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKQEAgLTM2LDkgKzM2LDggQEAKIAkJCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UsCiAJCQkJCQkgICAgICAgd2FrZXVwX2xpc3QpOwogCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwKLQkJICAgICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkIHx8Ci0JCSAgICAoc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkpCisJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwgIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQKKwkJICAgIHx8IChzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSkKIAkJCWNvbnRpbnVlOwogCiAJCWFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2LCBzbGVlcF9zdGF0ZSk7CkBAIC00Niw5ICs0NSwxMiBAQAogfQogCiAvKioKLSAqIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2UgLSBlbmFibGUgd2FrZXVwIGRldmljZXMKLSAqCUBzbGVlcF9zdGF0ZToJQUNQSSBzdGF0ZQotICogRW5hYmxlIGFsbCB3YWt1cCBkZXZpY2VzJ3MgR1BFCisgKiBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlIC0gRW5hYmxlIHdha2UtdXAgZGV2aWNlIEdQRXMuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIEVuYWJsZSBhbGwgd2FrZS11cCBkZXZpY2VzJyBHUEVzLCB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQKKyAqIGFjcGlfZGlzYWJsZV9hbGxfZ3BlcygpIHdhcyBleGVjdXRlZCBiZWZvcmUsIHNvIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBhbnkKKyAqIEdQRXMgaGVyZS4KICAqLwogdm9pZCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlKHU4IHNsZWVwX3N0YXRlKQogewpAQCAtNjUsMjkgKzY3LDIyIEBACiAJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQpCiAJCQljb250aW51ZTsKIAotCQkvKiBJZiB1c2VycyB3YW50IHRvIGRpc2FibGUgcnVuLXdha2UgR1BFLAotCQkgKiB3ZSBvbmx5IGRpc2FibGUgaXQgZm9yIHdha2UgYW5kIGxlYXZlIGl0IGZvciBydW50aW1lCi0JCSAqLwogCQlpZiAoKCFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkICYmICFkZXYtPndha2V1cC5wcmVwYXJlX2NvdW50KQotCQkgICAgfHwgc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkgewotCQkJaWYgKGRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKSB7Ci0JCQkJLyogc2V0X2dwZV90eXBlIHdpbGwgZGlzYWJsZSBHUEUsIGxlYXZlIGl0IGxpa2UgdGhhdCAqLwotCQkJCWFjcGlfc2V0X2dwZV90eXBlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCQkgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJCQkgIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7Ci0JCQl9CisJCSAgICB8fCBzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKQogCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkKLQkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKKworCQkvKiBUaGUgd2FrZS11cCBwb3dlciBzaG91bGQgaGF2ZSBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gKi8KKwkJYWNwaV9zZXRfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfRU5BQkxFKTsKIAl9CiB9CiAKIC8qKgotICogYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UgLSBkaXNhYmxlIGRldmljZXMnIHdha2V1cCBjYXBhYmlsaXR5Ci0gKglAc2xlZXBfc3RhdGU6CUFDUEkgc3RhdGUKLSAqIERpc2FibGUgYWxsIHdha3VwIGRldmljZXMncyBHUEUgYW5kIHdha2V1cCBjYXBhYmlsaXR5CisgKiBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZSAtIERpc2FibGUgZGV2aWNlcycgd2FrZXVwIGNhcGFiaWxpdHkuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gb25seSBhZmZlY3RzIGRldmljZXMgd2l0aCB3YWtldXAuc3RhdGUuZW5hYmxlZCBzZXQsIHdoaWNoIG1lYW5zCisgKiB0aGF0IGl0IHJldmVyc2VzIHRoZSBjaGFuZ2VzIG1hZGUgYnkgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wcmVwKCkuCiAgKi8KIHZvaWQgYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UodTggc2xlZXBfc3RhdGUpCiB7CkBAIC05NywzMCArOTIsMTEgQEAKIAkJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPQogCQkJY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBhY3BpX2RldmljZSwgd2FrZXVwX2xpc3QpOwogCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQpCisJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwgIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQKKwkJICAgIHx8IChzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgoIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgJiYgIWRldi0+d2FrZXVwLnByZXBhcmVfY291bnQpCi0JCSAgICB8fCBzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSB7Ci0JCQlpZiAoZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UpIHsKLQkJCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkJICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCQkJICBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKLQkJCQkvKiBSZS1lbmFibGUgaXQsIHNpbmNlIHNldF9ncGVfdHlwZSB3aWxsIGRpc2FibGUgaXQgKi8KLQkJCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJCWRldi0+d2FrZXVwLmdwZV9udW1iZXIpOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQogCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihkZXYpOwotCQkvKiBOZXZlciBkaXNhYmxlIHJ1bi13YWtlIEdQRSAqLwotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKSB7Ci0JCQlhY3BpX2Rpc2FibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCSBkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKLQkJCWFjcGlfY2xlYXJfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJICAgICAgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsIEFDUElfTk9UX0lTUik7Ci0JCX0KIAl9CiB9CiAKQEAgLTEzNCwxMyArMTEwLDExIEBACiAJCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlLAogCQkJCQkJICAgICAgIHdha2V1cF9saXN0KTsKIAkJLyogSW4gY2FzZSB1c2VyIGRvZXNuJ3QgbG9hZCBidXR0b24gZHJpdmVyICovCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UgfHwgZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCkKKwkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5hbHdheXNfZW5hYmxlZCB8fAorCQkgICAgZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCkKIAkJCWNvbnRpbnVlOwotCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCSAgZGV2LT53YWtldXAuZ3BlX251bWJlciwKLQkJCQkgIEFDUElfR1BFX1RZUEVfV0FLRV9SVU4pOwotCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKKyAJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorIAkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOwogCQlkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkID0gMTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCBiOGJlYTEwLi5hNmE3MzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0yODY4LDYgKzI4NjgsMjEgQEAKIAkJCX0sCiAJCQkuZHJpdmVyX2RhdGEgPSAiRi4yMyIsCS8qIGN1dG9mZiBCSU9TIHZlcnNpb24gKi8KIAkJfSwKKwkJLyoKKwkJICogQWNlciBlTWFjaGluZXMgRzcyNSBoYXMgdGhlIHNhbWUgcHJvYmxlbS4gIEJJT1MKKwkJICogVjEuMDMgaXMga25vd24gdG8gYmUgYnJva2VuLiAgVjMuMDQgaXMga25vd24gdG8KKwkJICogd29yay4gIEluYmV0d2VlbiwgdGhlcmUgYXJlIFYxLjA2LCBWMi4wNiBhbmQgVjMuMDMKKwkJICogdGhhdCB3ZSBkb24ndCBoYXZlIG11Y2ggaWRlYSBhYm91dC4gIEZvciBub3csCisJCSAqIGJsYWNrbGlzdCBhbnl0aGluZyBvbGRlciB0aGFuIFYzLjA0LgorCQkgKi8KKwkJeworCQkJLmlkZW50ID0gIkc3MjUiLAorCQkJLm1hdGNoZXMgPSB7CisJCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiZU1hY2hpbmVzIiksCisJCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJlTWFjaGluZXMgRzcyNSIpLAorCQkJfSwKKwkJCS5kcml2ZXJfZGF0YSA9ICJWMy4wNCIsCS8qIGN1dG9mZiBCSU9TIHZlcnNpb24gKi8KKwkJfSwKIAkJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiAJfTsKIAljb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pID0gZG1pX2ZpcnN0X21hdGNoKHN5c2lkcyk7CkBAIC0zMDY3LDggKzMwODIsMTYgQEAKIAlhaGNpX3NhdmVfaW5pdGlhbF9jb25maWcocGRldiwgaHByaXYpOwogCiAJLyogcHJlcGFyZSBob3N0ICovCi0JaWYgKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9OQ1EpCi0JCXBpLmZsYWdzIHw9IEFUQV9GTEFHX05DUSB8IEFUQV9GTEFHX0ZQRE1BX0FBOworCWlmIChocHJpdi0+Y2FwICYgSE9TVF9DQVBfTkNRKSB7CisJCXBpLmZsYWdzIHw9IEFUQV9GTEFHX05DUTsKKwkJLyogQXV0by1hY3RpdmF0ZSBvcHRpbWl6YXRpb24gaXMgc3VwcG9zZWQgdG8gYmUgc3VwcG9ydGVkIG9uCisJCSAgIGFsbCBBSENJIGNvbnRyb2xsZXJzIGluZGljYXRpbmcgTkNRIHN1cHBvcnQsIGJ1dCBpdCBzZWVtcworCQkgICB0byBiZSBicm9rZW4gYXQgbGVhc3Qgb24gc29tZSBOVklESUEgTUNQNzkgY2hpcHNldHMuCisJCSAgIFVudGlsIHdlIGdldCBpbmZvIG9uIHdoaWNoIE5WSURJQSBjaGlwc2V0cyBkb24ndCBoYXZlIHRoaXMKKwkJICAgaXNzdWUsIGlmIGFueSwgZGlzYWJsZSBBQSBvbiBhbGwgTlZJRElBIEFIQ0lzLiAqLworCQlpZiAocGRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfTlZJRElBKQorCQkJcGkuZmxhZ3MgfD0gQVRBX0ZMQUdfRlBETUFfQUE7CisJfQogCiAJaWYgKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9QTVApCiAJCXBpLmZsYWdzIHw9IEFUQV9GTEFHX1BNUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IGY0ZWE1YTguLmQwOTZmYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMjg3NSw3ICsyODc1LDcgQEAKIAkgKiB3cml0ZSBpbmRpY2F0aW9uICh1c2VkIGZvciBQSU8vRE1BIHNldHVwKSwgcmVzdWx0IFRGIGlzCiAJICogY29waWVkIGJhY2sgYW5kIHdlIGRvbid0IHdoaW5lIHRvbyBtdWNoIGFib3V0IGl0cyBmYWlsdXJlLgogCSAqLwotCXRmLT5mbGFncyA9IEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfREVWSUNFOworCXRmLT5mbGFncyB8PSBBVEFfVEZMQUdfSVNBRERSIHwgQVRBX1RGTEFHX0RFVklDRTsKIAlpZiAoc2NtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKIAkJdGYtPmZsYWdzIHw9IEFUQV9URkxBR19XUklURTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IDc0MTA2NWMuLjczMGVmM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTg5Myw2ICs4OTMsOSBAQAogCQkJCSAgICAgICBkb193cml0ZSk7CiAJfQogCisJaWYgKCFkb193cml0ZSkKKwkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisKIAlxYy0+Y3VyYnl0ZXMgKz0gcWMtPnNlY3Rfc2l6ZTsKIAlxYy0+Y3Vyc2dfb2ZzICs9IHFjLT5zZWN0X3NpemU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKaW5kZXggMTYxNzQ2ZC4uNmUyYzNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKQEAgLTU5LDYgKzU5LDggQEAKIAllbHNlCiAJCXByX2RlYnVnKCJjbGFzcyAnJXMnIGRvZXMgbm90IGhhdmUgYSByZWxlYXNlKCkgZnVuY3Rpb24sICIKIAkJCSAiYmUgY2FyZWZ1bFxuIiwgY2xhc3MtPm5hbWUpOworCisJa2ZyZWUoY3ApOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBjbGFzc19zeXNmc19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCBhNTE0MmJkLi4wZTI2YTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZXN1bWUtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+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+cG93ZXIucnVudGltZV9hdXRvID8gY3RybF9hdXRvIDogY3RybF9vbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbnRyb2xfc3RvcmUoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBuKQoreworCWNoYXIgKmNwOworCWludCBsZW4gPSBuOworCisJY3AgPSBtZW1jaHIoYnVmLCAnXG4nLCBuKTsKKwlpZiAoY3ApCisJCWxlbiA9IGNwIC0gYnVmOworCWlmIChsZW4gPT0gc2l6ZW9mIGN0cmxfYXV0byAtIDEgJiYgc3RybmNtcChidWYsIGN0cmxfYXV0bywgbGVuKSA9PSAwKQorCQlwbV9ydW50aW1lX2FsbG93KGRldik7CisJZWxzZSBpZiAobGVuID09IHNpemVvZiBjdHJsX29uIC0gMSAmJiBzdHJuY21wKGJ1ZiwgY3RybF9vbiwgbGVuKSA9PSAwKQorCQlwbV9ydW50aW1lX2ZvcmJpZChkZXYpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjb250cm9sLCAwNjQ0LCBjb250cm9sX3Nob3csIGNvbnRyb2xfc3RvcmUpOworI2VuZGlmCisKIHN0YXRpYyBzc2l6ZV90CiB3YWtlX3Nob3coc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCiB7CkBAIC03Nyw5ICsxNDMsNDMgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHdha2V1cCwgMDY0NCwgd2FrZV9zaG93LCB3YWtlX3N0b3JlKTsKIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRworc3RhdGljIHNzaXplX3QgYXN5bmNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsCisJCQlkZXZpY2VfYXN5bmNfc3VzcGVuZF9lbmFibGVkKGRldikgPyBlbmFibGVkIDogZGlzYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBhc3luY19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwljaGFyICpjcDsKKwlpbnQgbGVuID0gbjsKKworCWNwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgbik7CisJaWYgKGNwKQorCQlsZW4gPSBjcCAtIGJ1ZjsKKwlpZiAobGVuID09IHNpemVvZiBlbmFibGVkIC0gMSAmJiBzdHJuY21wKGJ1ZiwgZW5hYmxlZCwgbGVuKSA9PSAwKQorCQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoZGV2KTsKKwllbHNlIGlmIChsZW4gPT0gc2l6ZW9mIGRpc2FibGVkIC0gMSAmJiBzdHJuY21wKGJ1ZiwgZGlzYWJsZWQsIGxlbikgPT0gMCkKKwkJZGV2aWNlX2Rpc2FibGVfYXN5bmNfc3VzcGVuZChkZXYpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihhc3luYywgMDY0NCwgYXN5bmNfc2hvdywgYXN5bmNfc3RvcmUpOworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRyAqLwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHBvd2VyX2F0dHJzW10gPSB7CisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKwkmZGV2X2F0dHJfY29udHJvbC5hdHRyLAorI2VuZGlmCiAJJmRldl9hdHRyX3dha2V1cC5hdHRyLAorI2lmZGVmIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRworCSZkZXZfYXR0cl9hc3luYy5hdHRyLAorI2VuZGlmCiAJTlVMTCwKIH07CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwbV9hdHRyX2dyb3VwID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMgYi9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYwppbmRleCBhNWFmMWQ2Li5lMzVjZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYwpAQCAtMTQ3MCw4ICsxNDcwLDYgQEAKIAogdm9pZCBkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICogcSkKIHsKLSAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCURQUklOVCgoImRvX2ZkX3JlcXVlc3QgZm9yIHBpZCAlZFxuIixjdXJyZW50LT5waWQpKTsKIAl3aGlsZSggZmRjX2J1c3kgKSBzbGVlcF9vbiggJmZkY193YWl0ICk7CiAJZmRjX2J1c3kgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDg3M2U1OTQuLjkyOTE2MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTMzNyw2ICszMzcsOSBAQAogCWlmICgqcG9zID4gaC0+aGlnaGVzdF9sdW4pCiAJCXJldHVybiAwOwogCisJaWYgKGRydiA9PSBOVUxMKSAvKiBpdCdzIHBvc3NpYmxlIGZvciBoLT5kcnZbXSB0byBoYXZlIGhvbGVzLiAqLworCQlyZXR1cm4gMDsKKwogCWlmIChkcnYtPmhlYWRzID09IDApCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMKaW5kZXggZTg5OGFkOS4uYWI4NzFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYwpAQCAtMjk3Myw3ICsyOTczLDYgQEAKIAkJZ290byBvdXRfbm9fcTsKIAltZGV2LT5ycV9xdWV1ZSA9IHE7CiAJcS0+cXVldWVkYXRhICAgPSBtZGV2OwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIERSQkRfTUFYX1NFR01FTlRfU0laRSk7CiAKIAlkaXNrID0gYWxsb2NfZGlzaygxKTsKIAlpZiAoIWRpc2spCkBAIC0yOTk3LDYgKzI5OTYsNyBAQAogCXEtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZGV2OwogCiAJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChxLCBkcmJkX21ha2VfcmVxdWVzdF8yNik7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgRFJCRF9NQVhfU0VHTUVOVF9TSVpFKTsKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KHEsIEJMS19CT1VOQ0VfQU5ZKTsKIAlibGtfcXVldWVfbWVyZ2VfYnZlYyhxLCBkcmJkX21lcmdlX2J2ZWMpOwogCXEtPnF1ZXVlX2xvY2sgPSAmbWRldi0+cmVxX2xvY2s7IC8qIG5lZWRlZCBzaW5jZSB3ZSB1c2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCmluZGV4IGYyMmE1MjguLmQwNjVjNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYwpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKIAllcG9jaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcmJkX2Vwb2NoKSwgR0ZQX05PSU8pOwogCWlmICghZXBvY2gpIHsKIAkJZGV2X3dhcm4oREVWLCAiQWxsb2NhdGlvbiBvZiBhbiBlcG9jaCBmYWlsZWQsIHNsb3dpbmcgZG93blxuIik7Ci0JCWlzc3VlX2ZsdXNoID0gIXRlc3RfYW5kX3NldF9iaXQoREVfQkFSUklFUl9JTl9ORVhUX0VQT0NIX0lTU1VFRCwgJmVwb2NoLT5mbGFncyk7CisJCWlzc3VlX2ZsdXNoID0gIXRlc3RfYW5kX3NldF9iaXQoREVfQkFSUklFUl9JTl9ORVhUX0VQT0NIX0lTU1VFRCwgJm1kZXYtPmN1cnJlbnRfZXBvY2gtPmZsYWdzKTsKIAkJZHJiZF93YWl0X2VlX2xpc3RfZW1wdHkobWRldiwgJm1kZXYtPmFjdGl2ZV9lZSk7CiAJCWlmIChpc3N1ZV9mbHVzaCkgewogCQkJcnYgPSBkcmJkX2ZsdXNoX2FmdGVyX2Vwb2NoKG1kZXYsIG1kZXYtPmN1cnJlbnRfZXBvY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCAyZGRmMDNhLi42OGI1OTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJcGt0X2tvYmpfcmVtb3ZlKHBkLT5rb2JqX3N0YXQpOwogCXBrdF9rb2JqX3JlbW92ZShwZC0+a29ial93cXVldWUpOwogCWlmIChjbGFzc19wa3RjZHZkKQotCQlkZXZpY2VfZGVzdHJveShjbGFzc19wa3RjZHZkLCBwZC0+cGt0X2Rldik7CisJCWRldmljZV91bnJlZ2lzdGVyKHBkLT5kZXYpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbS5jIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKaW5kZXggOGY1NjllMy4uODIxYzI4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltLmMKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKQEAgLTg2NCw3ICs4NjQsNyBAQAogCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZDsKIAlpbnQgcmV0OwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwpAQCAtOTQyLDcgKzk0Miw3IEBACiAKIAlpb3VubWFwKHN3ZC0+YmFzZSk7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcykKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggYThjOGI1Ni4uMWIzZGVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTI4LDYgKzI4LDkgQEAKICAqIEFsbCBkaXNrIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBieSBzZW5kaW5nIG1lc3NhZ2VzIGJhY2sgYW5kIGZvcnRoIHRvCiAgKiB0aGUgT1MvNDAwIHBhcnRpdGlvbi4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJ2aW9kOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjMsOSArNjYsNiBAQAogCiAjZGVmaW5lIFZJT0RfVkVSUwkJIjEuNjQiCiAKLSNkZWZpbmUgVklPRF9LRVJOX1dBUk5JTkcJS0VSTl9XQVJOSU5HICJ2aW9kOiAiCi0jZGVmaW5lIFZJT0RfS0VSTl9JTkZPCQlLRVJOX0lORk8gInZpb2Q6ICIKLQogZW51bSB7CiAJUEFSVElUSU9OX1NISUZUID0gMywKIAlNQVhfRElTS05PID0gSFZNQVhBUkNISVRFQ1RFRFZJUlRVQUxESVNLUywKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJKCh1NjQpREVWSUNFX05PKGQpIDw8IDQ4KSB8ICgodTY0KWZsYWdzIDw8IDMyKSwKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJIViBvcGVuIGZhaWxlZCAlZFxuIiwgKGludClodnJjKTsKKwkJcHJfd2FybmluZygiSFYgb3BlbiBmYWlsZWQgJWRcbiIsIChpbnQpaHZyYyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTY3LDkgKzE2Nyw4IEBACiAJCWNvbnN0IHN0cnVjdCB2aW9fZXJyb3JfZW50cnkgKmVyciA9CiAJCQl2aW9fbG9va3VwX3JjKHZpb2Rhc2RfZXJyX3RhYmxlLCB3ZS5zdWJfcmVzdWx0KTsKIAotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCQkiYmFkIHJjIG9wZW5pbmcgZGlzazogJWQ6MHglMDR4ICglcylcbiIsCi0JCQkJKGludCl3ZS5yYywgd2Uuc3ViX3Jlc3VsdCwgZXJyLT5tc2cpOworCQlwcl93YXJuaW5nKCJiYWQgcmMgb3BlbmluZyBkaXNrOiAlZDoweCUwNHggKCVzKVxuIiwKKwkJCSAgIChpbnQpd2UucmMsIHdlLnN1Yl9yZXN1bHQsIGVyci0+bXNnKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xOTUsOCArMTk0LDcgQEAKIAkJCSgodTY0KURFVklDRV9OTyhkKSA8PCA0OCkgLyogfCAoKHU2NClmbGFncyA8PCAzMikgKi8sCiAJCQkwLCAwLCAwKTsKIAlpZiAoaHZyYyAhPSAwKQotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgIkhWIGNsb3NlIGNhbGwgZmFpbGVkICVkXG4iLAotCQkJCShpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoIkhWIGNsb3NlIGNhbGwgZmFpbGVkICVkXG4iLCAoaW50KWh2cmMpOwogCXJldHVybiAwOwogfQogCkBAIC0yODgsOCArMjg2LDcgQEAKIAkJYmV2ZW50ID0gKHN0cnVjdCB2aW9ibG9ja2xwZXZlbnQgKikKIAkJCXZpb19nZXRfZXZlbnRfYnVmZmVyKHZpb21ham9yc3VidHlwZV9ibG9ja2lvKTsKIAkJaWYgKGJldmVudCA9PSBOVUxMKSB7Ci0JCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiZXJyb3IgYWxsb2NhdGluZyBkaXNrIGV2ZW50IGJ1ZmZlclxuIik7CisJCQlwcl93YXJuaW5nKCJlcnJvciBhbGxvY2F0aW5nIGRpc2sgZXZlbnQgYnVmZmVyXG4iKTsKIAkJCWdvdG8gZXJyb3JfcmV0OwogCQl9CiAKQEAgLTMzMyw5ICszMzAsOCBAQAogCX0KIAogCWlmIChodnJjICE9IEh2THBFdmVudF9SY19Hb29kKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkgICAgICAgImVycm9yIHNlbmRpbmcgZGlzayBldmVudCB0byBPUy80MDAgKHJjICVkKVxuIiwKLQkJICAgICAgIChpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoImVycm9yIHNlbmRpbmcgZGlzayBldmVudCB0byBPUy80MDAgKHJjICVkKVxuIiwKKwkJCSAgIChpbnQpaHZyYyk7CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW9kYXNkX3NwaW5sb2NrLCBmbGFncyk7CkBAIC00MDIsNyArMzk4LDcgQEAKIAkJCSgodTY0KWRldl9ubyA8PCA0OCkgfCAoKHU2NClmbGFnczw8IDMyKSwKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJiYWQgcmMgb24gSFYgb3BlbiAlZFxuIiwgKGludClodnJjKTsKKwkJcHJfd2FybmluZygiYmFkIHJjIG9uIEhWIG9wZW4gJWRcbiIsIChpbnQpaHZyYyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDE2LDkgKzQxMiw4IEBACiAJCWdvdG8gcmV0cnk7CiAJfQogCWlmICh3ZS5tYXhfZGlzayA+IChNQVhfRElTS05PIC0gMSkpIHsKLQkJcHJpbnRrX29uY2UoVklPRF9LRVJOX0lORk8KLQkJCSJPbmx5IGV4YW1pbmluZyB0aGUgZmlyc3QgJWQgb2YgJWQgZGlza3MgY29ubmVjdGVkXG4iLAotCQkJTUFYX0RJU0tOTywgd2UubWF4X2Rpc2sgKyAxKTsKKwkJcHJpbnRrX29uY2UoS0VSTl9JTkZPIHByX2ZtdCgiT25seSBleGFtaW5pbmcgdGhlIGZpcnN0ICVkIG9mICVkIGRpc2tzIGNvbm5lY3RlZFxuIiksCisJCQkgICAgTUFYX0RJU0tOTywgd2UubWF4X2Rpc2sgKyAxKTsKIAl9CiAKIAkvKiBTZW5kIHRoZSBjbG9zZSBldmVudCB0byBPUy80MDAuICBXZSBET04nVCBleHBlY3QgYSByZXNwb25zZSAqLwpAQCAtNDMyLDE3ICs0MjcsMTUgQEAKIAkJCSgodTY0KWRldl9ubyA8PCA0OCkgfCAoKHU2NClmbGFncyA8PCAzMiksCiAJCQkwLCAwLCAwKTsKIAlpZiAoaHZyYyAhPSAwKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkgICAgICAgImJhZCByYyBzZW5kaW5nIGV2ZW50IHRvIE9TLzQwMCAlZFxuIiwgKGludClodnJjKTsKKwkJcHJfd2FybmluZygiYmFkIHJjIHNlbmRpbmcgZXZlbnQgdG8gT1MvNDAwICVkXG4iLCAoaW50KWh2cmMpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoZC0+ZGV2ID09IE5VTEwpIHsKIAkJLyogdGhpcyBpcyB3aGVuIHdlIHJlcHJvYmUgZm9yIG5ldyBkaXNrcyAqLwogCQlpZiAodmlvX2NyZWF0ZV92aW9kYXNkKGRldl9ubykgPT0gTlVMTCkgewotCQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCQkJImNhbm5vdCBhbGxvY2F0ZSB2aXJ0dWFsIGRldmljZSBmb3IgZGlzayAlZFxuIiwKLQkJCQlkZXZfbm8pOworCQkJcHJfd2FybmluZygiY2Fubm90IGFsbG9jYXRlIHZpcnR1YWwgZGV2aWNlIGZvciBkaXNrICVkXG4iLAorCQkJCSAgIGRldl9ubyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQkvKgpAQCAtNDU3LDE1ICs0NTAsMTMgQEAKIAlzcGluX2xvY2tfaW5pdCgmZC0+cV9sb2NrKTsKIAlxID0gYmxrX2luaXRfcXVldWUoZG9fdmlvZGFzZF9yZXF1ZXN0LCAmZC0+cV9sb2NrKTsKIAlpZiAocSA9PSBOVUxMKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiY2Fubm90IGFsbG9jYXRlIHF1ZXVlIGZvciBkaXNrICVkXG4iLAotCQkJCWRldl9ubyk7CisJCXByX3dhcm5pbmcoImNhbm5vdCBhbGxvY2F0ZSBxdWV1ZSBmb3IgZGlzayAlZFxuIiwgZGV2X25vKTsKIAkJcmV0dXJuIDA7CiAJfQogCWcgPSBhbGxvY19kaXNrKDEgPDwgUEFSVElUSU9OX1NISUZUKTsKIAlpZiAoZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkJCSJjYW5ub3QgYWxsb2NhdGUgZGlzayBzdHJ1Y3R1cmUgZm9yIGRpc2sgJWRcbiIsCi0JCQkJZGV2X25vKTsKKwkJcHJfd2FybmluZygiY2Fubm90IGFsbG9jYXRlIGRpc2sgc3RydWN0dXJlIGZvciBkaXNrICVkXG4iLAorCQkJICAgZGV2X25vKTsKIAkJYmxrX2NsZWFudXBfcXVldWUocSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTQ4OSwxMyArNDgwLDEyIEBACiAJZy0+ZHJpdmVyZnNfZGV2ID0gZC0+ZGV2OwogCXNldF9jYXBhY2l0eShnLCBkLT5zaXplID4+IDkpOwogCi0JcHJpbnRrKFZJT0RfS0VSTl9JTkZPICJkaXNrICVkOiAlbHUgc2VjdG9ycyAoJWx1IE1CKSAiCi0JCQkiQ0hTPSVkLyVkLyVkIHNlY3RvciBzaXplICVkJXNcbiIsCi0JCQlkZXZfbm8sICh1bnNpZ25lZCBsb25nKShkLT5zaXplID4+IDkpLAotCQkJKHVuc2lnbmVkIGxvbmcpKGQtPnNpemUgPj4gMjApLAotCQkJKGludClkLT5jeWxpbmRlcnMsIChpbnQpZC0+dHJhY2tzLAotCQkJKGludClkLT5zZWN0b3JzLCAoaW50KWQtPmJ5dGVzX3Blcl9zZWN0b3IsCi0JCQlkLT5yZWFkX29ubHkgPyAiIChSTykiIDogIiIpOworCXByX2luZm8oImRpc2sgJWQ6ICVsdSBzZWN0b3JzICglbHUgTUIpIENIUz0lZC8lZC8lZCBzZWN0b3Igc2l6ZSAlZCVzXG4iLAorCQlkZXZfbm8sICh1bnNpZ25lZCBsb25nKShkLT5zaXplID4+IDkpLAorCQkodW5zaWduZWQgbG9uZykoZC0+c2l6ZSA+PiAyMCksCisJCShpbnQpZC0+Y3lsaW5kZXJzLCAoaW50KWQtPnRyYWNrcywKKwkJKGludClkLT5zZWN0b3JzLCAoaW50KWQtPmJ5dGVzX3Blcl9zZWN0b3IsCisJCWQtPnJlYWRfb25seSA/ICIgKFJPKSIgOiAiIik7CiAKIAkvKiByZWdpc3RlciB1cyBpbiB0aGUgZ2xvYmFsIGxpc3QgKi8KIAlhZGRfZGlzayhnKTsKQEAgLTU4MCw4ICs1NzAsOCBAQAogCWlmIChlcnJvcikgewogCQljb25zdCBzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5ICplcnI7CiAJCWVyciA9IHZpb19sb29rdXBfcmModmlvZGFzZF9lcnJfdGFibGUsIGJldmVudC0+c3ViX3Jlc3VsdCk7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAicmVhZC93cml0ZSBlcnJvciAlZDoweCUwNHggKCVzKVxuIiwKLQkJCQlldmVudC0+eFJjLCBiZXZlbnQtPnN1Yl9yZXN1bHQsIGVyci0+bXNnKTsKKwkJcHJfd2FybmluZygicmVhZC93cml0ZSBlcnJvciAlZDoweCUwNHggKCVzKVxuIiwKKwkJCSAgIGV2ZW50LT54UmMsIGJldmVudC0+c3ViX3Jlc3VsdCwgZXJyLT5tc2cpOwogCQludW1fc2VjdCA9IGJsa19ycV9zZWN0b3JzKHJlcSk7CiAJfQogCXFsb2NrID0gcmVxLT5xLT5xdWV1ZV9sb2NrOwpAQCAtNjA2LDggKzU5Niw3IEBACiAJCXJldHVybjsKIAkvKiBGaXJzdCwgd2Ugc2hvdWxkIE5FVkVSIGdldCBhbiBpbnQgaGVyZS4uLm9ubHkgYWNrcyAqLwogCWlmIChodmxwZXZlbnRfaXNfaW50KGV2ZW50KSkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJICAgICAgICJZaWtlcyEgZ290IGFuIGludCBpbiB2aW9kYXNkIGV2ZW50IGhhbmRsZXIhXG4iKTsKKwkJcHJfd2FybmluZygiWWlrZXMhIGdvdCBhbiBpbnQgaW4gdmlvZGFzZCBldmVudCBoYW5kbGVyIVxuIik7CiAJCWlmIChodmxwZXZlbnRfbmVlZF9hY2soZXZlbnQpKSB7CiAJCQlldmVudC0+eFJjID0gSHZMcEV2ZW50X1JjX0ludmFsaWRTdWJ0eXBlOwogCQkJSHZDYWxsRXZlbnRfYWNrTHBFdmVudChldmVudCk7CkBAIC02NTAsNyArNjM5LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgImludmFsaWQgc3VidHlwZSEiKTsKKwkJcHJfd2FybmluZygiaW52YWxpZCBzdWJ0eXBlISIpOwogCQlpZiAoaHZscGV2ZW50X25lZWRfYWNrKGV2ZW50KSkgewogCQkJZXZlbnQtPnhSYyA9IEh2THBFdmVudF9SY19JbnZhbGlkU3VidHlwZTsKIAkJCUh2Q2FsbEV2ZW50X2Fja0xwRXZlbnQoZXZlbnQpOwpAQCAtNzM5LDI5ICs3MjgsMjYgQEAKIAkJdmlvX3NldF9ob3N0bHAoKTsKIAogCWlmICh2aW9wYXRoX2hvc3RMcCA9PSBIdkxwSW5kZXhJbnZhbGlkKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiaW52YWxpZCBob3N0aW5nIHBhcnRpdGlvblxuIik7CisJCXByX3dhcm5pbmcoImludmFsaWQgaG9zdGluZyBwYXJ0aXRpb25cbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZWFybHlfZmFpbDsKIAl9CiAKLQlwcmludGsoVklPRF9LRVJOX0lORk8gInZlcnMgIiBWSU9EX1ZFUlMgIiwgaG9zdGluZyBwYXJ0aXRpb24gJWRcbiIsCi0JCQl2aW9wYXRoX2hvc3RMcCk7CisJcHJfaW5mbygidmVycyAiIFZJT0RfVkVSUyAiLCBob3N0aW5nIHBhcnRpdGlvbiAlZFxuIiwgdmlvcGF0aF9ob3N0THApOwogCiAgICAgICAgIC8qIHJlZ2lzdGVyIHRoZSBibG9jayBkZXZpY2UgKi8KIAlyYyA9ICByZWdpc3Rlcl9ibGtkZXYoVklPREFTRF9NQUpPUiwgVklPRF9HRU5IRF9OQU1FKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCQkJIlVuYWJsZSB0byBnZXQgbWFqb3IgbnVtYmVyICVkIGZvciAlc1xuIiwKLQkJCQlWSU9EQVNEX01BSk9SLCBWSU9EX0dFTkhEX05BTUUpOworCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZ2V0IG1ham9yIG51bWJlciAlZCBmb3IgJXNcbiIsCisJCQkgICBWSU9EQVNEX01BSk9SLCBWSU9EX0dFTkhEX05BTUUpOwogCQlnb3RvIGVhcmx5X2ZhaWw7CiAJfQogCS8qIEFjdHVhbGx5IG9wZW4gdGhlIHBhdGggdG8gdGhlIGhvc3RpbmcgcGFydGl0aW9uICovCiAJcmMgPSB2aW9wYXRoX29wZW4odmlvcGF0aF9ob3N0THAsIHZpb21ham9yc3VidHlwZV9ibG9ja2lvLAogCQkJCVZJT01BWFJFUSArIDIpOwogCWlmIChyYykgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJICAgICAgICJlcnJvciBvcGVuaW5nIHBhdGggdG8gaG9zdCBwYXJ0aXRpb24gJWRcbiIsCi0JCSAgICAgICB2aW9wYXRoX2hvc3RMcCk7CisJCXByX3dhcm5pbmcoImVycm9yIG9wZW5pbmcgcGF0aCB0byBob3N0IHBhcnRpdGlvbiAlZFxuIiwKKwkJCSAgIHZpb3BhdGhfaG9zdExwKTsKIAkJZ290byB1bnJlZ2lzdGVyX2JsazsKIAl9CiAKQEAgLTc3MCw3ICs3NTYsNyBAQAogCiAJcmMgPSB2aW9fcmVnaXN0ZXJfZHJpdmVyKCZ2aW9kYXNkX2RyaXZlcik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAidmlvX3JlZ2lzdGVyX2RyaXZlciBmYWlsZWRcbiIpOworCQlwcl93YXJuaW5nKCJ2aW9fcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZFxuIik7CiAJCWdvdG8gdW5zZXRfaGFuZGxlcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggNTEwNDJmMGJhNy4uN2VmZjgyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTI0MywxMCArMjQzLDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOwogCWludCBlcnI7CiAJdTY0IGNhcDsKLQl1MzIgdjsKLQl1MzIgYmxrX3NpemUsIHNnX2VsZW1zOworCXUzMiB2LCBibGtfc2l6ZSwgc2dfZWxlbXMsIG9wdF9pb19zaXplOworCXUxNiBtaW5faW9fc2l6ZTsKKwl1OCBwaHlzaWNhbF9ibG9ja19leHAsIGFsaWdubWVudF9vZmZzZXQ7CiAKIAlpZiAoaW5kZXhfdG9fbWlub3IoaW5kZXgpID49IDEgPDwgTUlOT1JCSVRTKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTI5MywxMyArMjk1LDEzIEBACiAJCWdvdG8gb3V0X21lbXBvb2w7CiAJfQogCi0JdmJsay0+ZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb192aXJ0YmxrX3JlcXVlc3QsICZ2YmxrLT5sb2NrKTsKLQlpZiAoIXZibGstPmRpc2stPnF1ZXVlKSB7CisJcSA9IHZibGstPmRpc2stPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoZG9fdmlydGJsa19yZXF1ZXN0LCAmdmJsay0+bG9jayk7CisJaWYgKCFxKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3B1dF9kaXNrOwogCX0KIAotCXZibGstPmRpc2stPnF1ZXVlLT5xdWV1ZWRhdGEgPSB2YmxrOworCXEtPnF1ZXVlZGF0YSA9IHZibGs7CiAKIAlpZiAoaW5kZXggPCAyNikgewogCQlzcHJpbnRmKHZibGstPmRpc2stPmRpc2tfbmFtZSwgInZkJWMiLCAnYScgKyBpbmRleCAlIDI2KTsKQEAgLTMyMywxMCArMzI1LDEwIEBACiAKIAkvKiBJZiBiYXJyaWVycyBhcmUgc3VwcG9ydGVkLCB0ZWxsIGJsb2NrIGxheWVyIHRoYXQgcXVldWUgaXMgb3JkZXJlZCAqLwogCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JMS19GX0ZMVVNIKSkKLQkJYmxrX3F1ZXVlX29yZGVyZWQodmJsay0+ZGlzay0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0gsCisJCWJsa19xdWV1ZV9vcmRlcmVkKHEsIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0gsCiAJCQkJICB2aXJ0YmxrX3ByZXBhcmVfZmx1c2gpOwogCWVsc2UgaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfQkFSUklFUikpCi0JCWJsa19xdWV1ZV9vcmRlcmVkKHZibGstPmRpc2stPnF1ZXVlLCBRVUVVRV9PUkRFUkVEX1RBRywgTlVMTCk7CisJCWJsa19xdWV1ZV9vcmRlcmVkKHEsIFFVRVVFX09SREVSRURfVEFHLCBOVUxMKTsKIAogCS8qIElmIGRpc2sgaXMgcmVhZC1vbmx5IGluIHRoZSBob3N0LCB0aGUgZ3Vlc3Qgc2hvdWxkIG9iZXkgKi8KIAlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9STykpCkBAIC0zNDUsMTQgKzM0NywxNCBAQAogCXNldF9jYXBhY2l0eSh2YmxrLT5kaXNrLCBjYXApOwogCiAJLyogV2UgY2FuIGhhbmRsZSB3aGF0ZXZlciB0aGUgaG9zdCB0b2xkIHVzIHRvIGhhbmRsZS4gKi8KLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHModmJsay0+ZGlzay0+cXVldWUsIHZibGstPnNnX2VsZW1zLTIpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHModmJsay0+ZGlzay0+cXVldWUsIHZibGstPnNnX2VsZW1zLTIpOworCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCB2YmxrLT5zZ19lbGVtcy0yKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIHZibGstPnNnX2VsZW1zLTIpOwogCiAJLyogTm8gbmVlZCB0byBib3VuY2UgYW55IHJlcXVlc3RzICovCi0JYmxrX3F1ZXVlX2JvdW5jZV9saW1pdCh2YmxrLT5kaXNrLT5xdWV1ZSwgQkxLX0JPVU5DRV9BTlkpOworCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocSwgQkxLX0JPVU5DRV9BTlkpOwogCiAJLyogTm8gcmVhbCBzZWN0b3IgbGltaXQuICovCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHZibGstPmRpc2stPnF1ZXVlLCAtMVUpOworCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCAtMVUpOwogCiAJLyogSG9zdCBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IG1heGltdW0gc2VnbWVudCBzaXplIGFuZCBudW1iZXIgb2YKIAkgKiBzZWdtZW50cy4gKi8KQEAgLTM2MCwxNiArMzYyLDQ1IEBACiAJCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBzaXplX21heCksCiAJCQkJJnYpOwogCWlmICghZXJyKQotCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZSh2YmxrLT5kaXNrLT5xdWV1ZSwgdik7CisJCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIHYpOwogCWVsc2UKLQkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUodmJsay0+ZGlzay0+cXVldWUsIC0xVSk7CisJCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIC0xVSk7CiAKIAkvKiBIb3N0IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGRldmljZSAqLwogCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9CTEtfU0laRSwKIAkJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIGJsa19zaXplKSwKIAkJCQkmYmxrX3NpemUpOwogCWlmICghZXJyKQotCQlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHZibGstPmRpc2stPnF1ZXVlLCBibGtfc2l6ZSk7CisJCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSwgYmxrX3NpemUpOworCWVsc2UKKwkJYmxrX3NpemUgPSBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSk7CisKKwkvKiBVc2UgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlICovCisJZXJyID0gdmlydGlvX2NvbmZpZ192YWwodmRldiwgVklSVElPX0JMS19GX1RPUE9MT0dZLAorCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBwaHlzaWNhbF9ibG9ja19leHApLAorCQkJJnBoeXNpY2FsX2Jsb2NrX2V4cCk7CisJaWYgKCFlcnIgJiYgcGh5c2ljYWxfYmxvY2tfZXhwKQorCQlibGtfcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShxLAorCQkJCWJsa19zaXplICogKDEgPDwgcGh5c2ljYWxfYmxvY2tfZXhwKSk7CisKKwllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksCisJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIGFsaWdubWVudF9vZmZzZXQpLAorCQkJJmFsaWdubWVudF9vZmZzZXQpOworCWlmICghZXJyICYmIGFsaWdubWVudF9vZmZzZXQpCisJCWJsa19xdWV1ZV9hbGlnbm1lbnRfb2Zmc2V0KHEsIGJsa19zaXplICogYWxpZ25tZW50X29mZnNldCk7CisKKwllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksCisJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIG1pbl9pb19zaXplKSwKKwkJCSZtaW5faW9fc2l6ZSk7CisJaWYgKCFlcnIgJiYgbWluX2lvX3NpemUpCisJCWJsa19xdWV1ZV9pb19taW4ocSwgYmxrX3NpemUgKiBtaW5faW9fc2l6ZSk7CisKKwllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksCisJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIG9wdF9pb19zaXplKSwKKwkJCSZvcHRfaW9fc2l6ZSk7CisJaWYgKCFlcnIgJiYgb3B0X2lvX3NpemUpCisJCWJsa19xdWV1ZV9pb19vcHQocSwgYmxrX3NpemUgKiBvcHRfaW9fc2l6ZSk7CisKIAogCWFkZF9kaXNrKHZibGstPmRpc2spOwogCXJldHVybiAwOwpAQCAtNDEyLDcgKzQ0Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0JMS19GX0JBUlJJRVIsIFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsCiAJVklSVElPX0JMS19GX0dFT01FVFJZLCBWSVJUSU9fQkxLX0ZfUk8sIFZJUlRJT19CTEtfRl9CTEtfU0laRSwKLQlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0ZMVVNICisJVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9GTFVTSCwgVklSVElPX0JMS19GX1RPUE9MT0dZCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKaW5kZXggNjUyMzY3YS4uMDU4ZmJjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZworKysgYi9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCkBAIC0xOTUsNSArMTk1LDE2IEBACiAJICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgTWFydmVsbCBCVC1vdmVyLVNESU8gZHJpdmVyCiAJICBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUuCiAKLWVuZG1lbnUKK2NvbmZpZyBCVF9BVEgzSworCXRyaXN0YXRlICJBdGhlcm9zIGZpcm13YXJlIGRvd25sb2FkIGRyaXZlciIKKwlkZXBlbmRzIG9uIEJUX0hDSUJUVVNCCisJc2VsZWN0IEZXX0xPQURFUgorCWhlbHAKKwkgIEJsdWV0b290aCBmaXJtd2FyZSBkb3dubG9hZCBkcml2ZXIuCisJICBUaGlzIGRyaXZlciBsb2FkcyB0aGUgZmlybXdhcmUgaW50byB0aGUgQXRoZXJvcyBCbHVldG9vdGgKKwkgIGNoaXBzZXQuCiAKKwkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciAiQXRoZXJvcyBmaXJtd2FyZSBkb3dubG9hZCBkcml2ZXIiCisJICBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUgKGF0aDNrKS4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGUgYi9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZQppbmRleCBiM2Y1N2QyLi43ZTVhZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQAogb2JqLSQoQ09ORklHX0JUX0hDSUJUVVNCKQkrPSBidHVzYi5vCiBvYmotJChDT05GSUdfQlRfSENJQlRTRElPKQkrPSBidHNkaW8ubwogCitvYmotJChDT05GSUdfQlRfQVRIM0spCQkrPSBhdGgzay5vCiBvYmotJChDT05GSUdfQlRfTVJWTCkJCSs9IGJ0bXJ2bC5vCiBvYmotJChDT05GSUdfQlRfTVJWTF9TRElPKQkrPSBidG1ydmxfc2Rpby5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZDk0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KKworI2RlZmluZSBWRVJTSU9OICIxLjAiCisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGF0aDNrX3RhYmxlW10gPSB7CisJLyogQXRoZXJvcyBBUjMwMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQ0YzLCAweDMwMDApIH0sCisJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXRoM2tfdGFibGUpOworCisjZGVmaW5lIFVTQl9SRVFfREZVX0ROTE9BRAkxCisjZGVmaW5lIEJVTEtfU0laRQkJNDA5NgorCitzdHJ1Y3QgYXRoM2tfZGF0YSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJdTggKmZ3X2RhdGE7CisJdTMyIGZ3X3NpemU7CisJdTMyIGZ3X3NlbnQ7Cit9OworCitzdGF0aWMgaW50IGF0aDNrX2xvYWRfZmlybXdhcmUoc3RydWN0IGF0aDNrX2RhdGEgKmRhdGEsCisJCQkJdW5zaWduZWQgY2hhciAqZmlybXdhcmUsCisJCQkJaW50IGNvdW50KQoreworCXU4ICpzZW5kX2J1ZjsKKwlpbnQgZXJyLCBwaXBlLCBsZW4sIHNpemUsIHNlbnQgPSAwOworCisJQlRfREJHKCJhdGgzayAlcCB1ZGV2ICVwIiwgZGF0YSwgZGF0YS0+dWRldik7CisKKwlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGRhdGEtPnVkZXYsIDApOworCisJaWYgKCh1c2JfY29udHJvbF9tc2coZGF0YS0+dWRldiwgcGlwZSwKKwkJCQlVU0JfUkVRX0RGVV9ETkxPQUQsCisJCQkJVVNCX1RZUEVfVkVORE9SLCAwLCAwLAorCQkJCWZpcm13YXJlLCAyMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpKSA8IDApIHsKKwkJQlRfRVJSKCJDYW4ndCBjaGFuZ2UgdG8gbG9hZGluZyBjb25maWd1cmF0aW9uIGVyciIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlzZW50ICs9IDIwOworCWNvdW50IC09IDIwOworCisJc2VuZF9idWYgPSBrbWFsbG9jKEJVTEtfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzZW5kX2J1ZikgeworCQlCVF9FUlIoIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBjaHVuayBmb3IgZmlybXdhcmUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJd2hpbGUgKGNvdW50KSB7CisJCXNpemUgPSBtaW5fdCh1aW50LCBjb3VudCwgQlVMS19TSVpFKTsKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkYXRhLT51ZGV2LCAweDAyKTsKKwkJbWVtY3B5KHNlbmRfYnVmLCBmaXJtd2FyZSArIHNlbnQsIHNpemUpOworCisJCWVyciA9IHVzYl9idWxrX21zZyhkYXRhLT51ZGV2LCBwaXBlLCBzZW5kX2J1Ziwgc2l6ZSwKKwkJCQkJJmxlbiwgMzAwMCk7CisKKwkJaWYgKGVyciB8fCAobGVuICE9IHNpemUpKSB7CisJCQlCVF9FUlIoIkVycm9yIGluIGZpcm13YXJlIGxvYWRpbmcgZXJyID0gJWQsIgorCQkJCSJsZW4gPSAlZCwgc2l6ZSA9ICVkIiwgZXJyLCBsZW4sIHNpemUpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXNlbnQgICs9IHNpemU7CisJCWNvdW50IC09IHNpemU7CisJfQorCisJa2ZyZWUoc2VuZF9idWYpOworCXJldHVybiAwOworCitlcnJvcjoKKwlrZnJlZShzZW5kX2J1Zik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhdGgza19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YTsKKwlpbnQgc2l6ZTsKKworCUJUX0RCRygiaW50ZiAlcCBpZCAlcCIsIGludGYsIGlkKTsKKworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPnVkZXYgPSB1ZGV2OworCisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCAiYXRoM2stMS5mdyIsICZ1ZGV2LT5kZXYpIDwgMCkgeworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc2l6ZSA9IG1heF90KHVpbnQsIGZpcm13YXJlLT5zaXplLCA0MDk2KTsKKwlkYXRhLT5md19kYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEtPmZ3X2RhdGEpIHsKKwkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkoZGF0YS0+ZndfZGF0YSwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKKwlkYXRhLT5md19zaXplID0gZmlybXdhcmUtPnNpemU7CisJZGF0YS0+Zndfc2VudCA9IDA7CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRhdGEpOworCWlmIChhdGgza19sb2FkX2Zpcm13YXJlKGRhdGEsIGRhdGEtPmZ3X2RhdGEsIGRhdGEtPmZ3X3NpemUpKSB7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGgza19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBhdGgza19kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCUJUX0RCRygiYXRoM2tfZGlzY29ubmVjdCBpbnRmICVwIiwgaW50Zik7CisKKwlrZnJlZShkYXRhLT5md19kYXRhKTsKKwlrZnJlZShkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0aDNrX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiYXRoM2siLAorCS5wcm9iZQkJPSBhdGgza19wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGF0aDNrX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gYXRoM2tfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdGgza19pbml0KHZvaWQpCit7CisJQlRfSU5GTygiQXRoZXJvcyBBUjMweHggZmlybXdhcmUgZHJpdmVyIHZlciAlcyIsIFZFUlNJT04pOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmF0aDNrX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdGgza19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmF0aDNrX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF0aDNrX2luaXQpOworbW9kdWxlX2V4aXQoYXRoM2tfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkF0aGVyb3MgQ29tbXVuaWNhdGlvbnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXRoZXJvcyBBUjMweHggZmlybXdhcmUgZHJpdmVyIik7CitNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRSgiYXRoM2stMS5mdyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKaW5kZXggMmFjZGM2MC4uYzJjZjgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCkBAIC01MDMsNyArNTAzLDkgQEAKIAl1bnNpZ25lZCBpbnQgaW9iYXNlOwogCXVuc2lnbmVkIGNoYXIgcmVnOwogCi0JQlVHX09OKCFpbmZvLT5oZGV2KTsKKwlpZiAoIWluZm8gfHwgIWluZm8tPmhkZXYpCisJCS8qIG91ciBpcnEgaGFuZGxlciBpcyBzaGFyZWQgKi8KKwkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKCF0ZXN0X2JpdChDQVJEX1JFQURZLCAmKGluZm8tPmh3X3N0YXRlKSkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwppbmRleCBkODE0YTI3Li45ZjU5MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCkBAIC0zNDUsNyArMzQ1LDkgQEAKIAlpbnQgaWlyOwogCWlycXJldHVybl90IHIgPSBJUlFfTk9ORTsKIAotCUJVR19PTighaW5mby0+aGRldik7CisJaWYgKCFpbmZvIHx8ICFpbmZvLT5oZGV2KQorCQkvKiBvdXIgaXJxIGhhbmRsZXIgaXMgc2hhcmVkICovCisJCXJldHVybiBJUlFfTk9ORTsKIAogCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCmluZGV4IGYzNmRlZmEuLjU3ZDk2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYwpAQCAtODA4LDYgKzgwOCw3IEBACiAKIGV4aXQ6CiAJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CisJa2ZyZWUodG1wYnVmKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCmluZGV4IGQzMzk0NjQuLjkxYzUyMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCkBAIC0yOTUsNyArMjk1LDkgQEAKIAlpbnQgaWlyLCBsc3I7CiAJaXJxcmV0dXJuX3QgciA9IElSUV9OT05FOwogCi0JQlVHX09OKCFpbmZvLT5oZGV2KTsKKwlpZiAoIWluZm8gfHwgIWluZm8tPmhkZXYpCisJCS8qIG91ciBpcnEgaGFuZGxlciBpcyBzaGFyZWQgKi8KKwkJcmV0dXJuIElSUV9OT05FOwogCiAJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCmluZGV4IDRmMDJhNmYuLjY5NzU5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKQEAgLTI5OSw3ICsyOTksOSBAQAogCWludCBpaXIsIGxzcjsKIAlpcnFyZXR1cm5fdCByID0gSVJRX05PTkU7CiAKLQlCVUdfT04oIWluZm8tPmhkZXYpOworCWlmICghaW5mbyB8fCAhaW5mby0+aGRldikKKwkJLyogb3VyIGlycSBoYW5kbGVyIGlzIHNoYXJlZCAqLworCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IGUwMjM2ODIuLjMxNDFkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC02NjYsNiArNjY2LDE0IEBACiAJaGVscAogCSAgVmlydGlvIGNvbnNvbGUgZm9yIHVzZSB3aXRoIGxndWVzdCBhbmQgb3RoZXIgaHlwZXJ2aXNvcnMuCiAKKwkgIEFsc28gc2VydmVzIGFzIGEgZ2VuZXJhbC1wdXJwb3NlIHNlcmlhbCBkZXZpY2UgZm9yIGRhdGEKKwkgIHRyYW5zZmVyIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCBob3N0LiAgQ2hhcmFjdGVyIGRldmljZXMgYXQKKwkgIC9kZXYvdnBvcnROcG4gd2lsbCBiZSBjcmVhdGVkIHdoZW4gY29ycmVzcG9uZGluZyBwb3J0cyBhcmUKKwkgIGZvdW5kLCB3aGVyZSBOIGlzIHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBuIGlzIHRoZSBwb3J0IG51bWJlcgorCSAgd2l0aGluIHRoYXQgZGV2aWNlLiAgSWYgc3BlY2lmaWVkIGJ5IHRoZSBob3N0LCBhIHN5c2ZzCisJICBhdHRyaWJ1dGUgY2FsbGVkICduYW1lJyB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgbmFtZSBmb3IKKwkgIHRoZSBwb3J0IHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHVkZXYgc2NyaXB0cyB0byBjcmVhdGUgYQorCSAgc3ltbGluayB0byB0aGUgZGV2aWNlLgogCiBjb25maWcgSFZDUwogCXRyaXN0YXRlICJJQk0gSHlwZXJ2aXNvciBWaXJ0dWFsIENvbnNvbGUgU2VydmVyIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAxYWZiODk2Li5mZDUwZWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTcyOSw5ICs3MjksNiBAQAogCWlmIChhZ3Bfb2ZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChnYXJ0X2lvbW11X2FwZXJ0dXJlKQotCQlyZXR1cm4gYWdwX2JyaWRnZXNfZm91bmQgPyAwIDogLUVOT0RFVjsKLQogCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFncF9hbWQ2NF9wY2lfZHJpdmVyKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTc2OCwxNiArNzY1LDI3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBfX2luaXQgYWdwX2FtZDY0X21vZF9pbml0KHZvaWQpCit7CisjaWZuZGVmIE1PRFVMRQorCWlmIChnYXJ0X2lvbW11X2FwZXJ0dXJlKQorCQlyZXR1cm4gYWdwX2JyaWRnZXNfZm91bmQgPyAwIDogLUVOT0RFVjsKKyNlbmRpZgorCXJldHVybiBhZ3BfYW1kNjRfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWdwX2FtZDY0X2NsZWFudXAodm9pZCkKIHsKKyNpZm5kZWYgTU9EVUxFCiAJaWYgKGdhcnRfaW9tbXVfYXBlcnR1cmUpCiAJCXJldHVybjsKKyNlbmRpZgogCWlmIChhcGVydHVyZV9yZXNvdXJjZSkKIAkJcmVsZWFzZV9yZXNvdXJjZShhcGVydHVyZV9yZXNvdXJjZSk7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9pbml0KGFncF9hbWQ2NF9pbml0KTsKK21vZHVsZV9pbml0KGFncF9hbWQ2NF9tb2RfaW5pdCk7CiBtb2R1bGVfZXhpdChhZ3BfYW1kNjRfY2xlYW51cCk7CiAKIE1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBBbmRpIEtsZWVuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCAzOTk5YTVmLi44YTcxM2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgImFncC5oIgogCiAvKgpAQCAtODE1LDEyICs4MTYsNiBAQAogCQlpbnRlbF9pODMwX2ZpbmlfZmx1c2goKTsKIH0KIAotc3RhdGljIHZvaWQKLWRvX3diaW52ZCh2b2lkICpudWxsKQotewotCXdiaW52ZCgpOwotfQotCiAvKiBUaGUgY2hpcHNldF9mbHVzaCBpbnRlcmZhY2UgbmVlZHMgdG8gZ2V0IGRhdGEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCiAgKiBmbHVzaGVkIG91dCBvZiB0aGUgQ1BVIGFsbCB0aGUgd2F5IG91dCB0byBtYWluIG1lbW9yeSwgYmVjYXVzZSB0aGUgR1BVCiAgKiBkb2Vzbid0IHNub29wIHRob3NlIGJ1ZmZlcnMuCkBAIC04MzcsMTIgKzgzMiwxMCBAQAogCiAJbWVtc2V0KHBnLCAwLCAxMDI0KTsKIAotCWlmIChjcHVfaGFzX2NsZmx1c2gpIHsKKwlpZiAoY3B1X2hhc19jbGZsdXNoKQogCQljbGZsdXNoX2NhY2hlX3JhbmdlKHBnLCAxMDI0KTsKLQl9IGVsc2UgewotCQlpZiAob25fZWFjaF9jcHUoZG9fd2JpbnZkLCBOVUxMLCAxKSAhPSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgY2FjaGUgZmx1c2guXG4iKTsKLQl9CisJZWxzZSBpZiAod2JpbnZkX29uX2FsbF9jcHVzKCkgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgY2FjaGUgZmx1c2guXG4iKTsKIH0KIAogLyogVGhlIGludGVsIGk4MzAgYXV0b21hdGljYWxseSBpbml0aWFsaXplcyB0aGUgYWdwIGFwZXJ0dXJlIGR1cmluZyBQT1NULgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYwppbmRleCAwYWZjOGI4Li41ZmU0NjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYwpAQCAtODQsNyArODQsNyBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19iZWF0X2dldF9wdXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX2JlYXRfZ2V0X3B1dF9vcHMgPSB7CiAJLmdldF9jaGFycyA9IGh2Y19iZWF0X2dldF9jaGFycywKIAkucHV0X2NoYXJzID0gaHZjX2JlYXRfcHV0X2NoYXJzLAogfTsKQEAgLTk5LDcgKzk5LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaHZjX2JlYXRfY29uc29sZV9pbml0KHZvaWQpCiB7Ci0JaWYgKGh2Y19iZWF0X3VzZWl0ICYmIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQmVhdCIpKSB7CisJaWYgKGh2Y19iZWF0X3VzZWl0ICYmIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQmVhdCIpKSB7CiAJCWh2Y19pbnN0YW50aWF0ZSgwLCAwLCAmaHZjX2JlYXRfZ2V0X3B1dF9vcHMpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggNDE2ZDM0Mi4uNGMzYjU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogICogY29uc29sZSBpbnRlcmZhY2VzIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCBhcyBhIHR0eSBkZXZpY2UuICBUaGlzIGhhcyB0byBiZQogICogc3RhdGljIGJlY2F1c2Uga21hbGxvYyB3aWxsIG5vdCB3b3JrIGR1cmluZyBlYXJseSBjb25zb2xlIGluaXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzICpjb25zX29wc1tNQVhfTlJfSFZDX0NPTlNPTEVTXTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzICpjb25zX29wc1tNQVhfTlJfSFZDX0NPTlNPTEVTXTsKIHN0YXRpYyB1aW50MzJfdCB2dGVybW5vc1tNQVhfTlJfSFZDX0NPTlNPTEVTXSA9CiAJe1swIC4uLiBNQVhfTlJfSFZDX0NPTlNPTEVTIC0gMV0gPSAtMX07CiAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICogdnR5IGFkYXB0ZXJzIGRvIE5PVCBnZXQgYW4gaHZjX2luc3RhbnRpYXRlKCkgY2FsbGJhY2sgc2luY2UgdGhleQogICogYXBwZWFyIGFmdGVyIGVhcmx5IGNvbnNvbGUgaW5pdC4KICAqLwotaW50IGh2Y19pbnN0YW50aWF0ZSh1aW50MzJfdCB2dGVybW5vLCBpbnQgaW5kZXgsIHN0cnVjdCBodl9vcHMgKm9wcykKK2ludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHMpCiB7CiAJc3RydWN0IGh2Y19zdHJ1Y3QgKmhwOwogCkBAIC03NDgsOCArNzQ4LDkgQEAKIAkuY2hhcnNfaW5fYnVmZmVyID0gaHZjX2NoYXJzX2luX2J1ZmZlciwKIH07CiAKLXN0cnVjdCBodmNfc3RydWN0IF9fZGV2aW5pdCAqaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBkYXRhLAotCQkJCQlzdHJ1Y3QgaHZfb3BzICpvcHMsIGludCBvdXRidWZfc2l6ZSkKK3N0cnVjdCBodmNfc3RydWN0ICpodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGRhdGEsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBodl9vcHMgKm9wcywKKwkJCSAgICAgaW50IG91dGJ1Zl9zaXplKQogewogCXN0cnVjdCBodmNfc3RydWN0ICpocDsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmgKaW5kZXggMTA5NTBjYS4uNTQzODFlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCkBAIC01NSw3ICs1NSw3IEBACiAJaW50IG91dGJ1Zl9zaXplOwogCWludCBuX291dGJ1ZjsKIAl1aW50MzJfdCB2dGVybW5vOwotCXN0cnVjdCBodl9vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHM7CiAJaW50IGlycV9yZXF1ZXN0ZWQ7CiAJaW50IGRhdGE7CiAJc3RydWN0IHdpbnNpemUgd3M7CkBAIC03NiwxMSArNzYsMTIgQEAKIH07CiAKIC8qIFJlZ2lzdGVyIGEgdnRlcm0gYW5kIGEgc2xvdCBpbmRleCBmb3IgdXNlIGFzIGEgY29uc29sZSAoY29uc29sZV9pbml0KSAqLwotZXh0ZXJuIGludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LCBzdHJ1Y3QgaHZfb3BzICpvcHMpOworZXh0ZXJuIGludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LAorCQkJICAgY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzKTsKIAogLyogcmVnaXN0ZXIgYSB2dGVybSBmb3IgaHZjIHR0eSBvcGVyYXRpb24gKG1vZHVsZV9pbml0IG9yIGhvdHBsdWcgYWRkKSAqLwotZXh0ZXJuIHN0cnVjdCBodmNfc3RydWN0ICogX19kZXZpbml0IGh2Y19hbGxvYyh1aW50MzJfdCB2dGVybW5vLCBpbnQgZGF0YSwKLQkJCQlzdHJ1Y3QgaHZfb3BzICpvcHMsIGludCBvdXRidWZfc2l6ZSk7CitleHRlcm4gc3RydWN0IGh2Y19zdHJ1Y3QgKiBodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGRhdGEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHMsIGludCBvdXRidWZfc2l6ZSk7CiAvKiByZW1vdmUgYSB2dGVybSBmcm9tIGh2YyB0dHkgb3BlcmF0aW9uIChtb2R1bGVfZXhpdCBvciBob3RwbHVnIHJlbW92ZSkgKi8KIGV4dGVybiBpbnQgaHZjX3JlbW92ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYyBiL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jCmluZGV4IDkzNmQwNWIuLmZkMDI0MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlyZXR1cm4gc2VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX2dldF9wdXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX2dldF9wdXRfb3BzID0gewogCS5nZXRfY2hhcnMgPSBnZXRfY2hhcnMsCiAJLnB1dF9jaGFycyA9IHB1dF9jaGFycywKIAkubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKaW5kZXggZmU2MmJkMC4uMjE2ODFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogCiAKIC8qIEhWQyBvcGVyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfaXVjdl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfaXVjdl9vcHMgPSB7CiAJLmdldF9jaGFycyA9IGh2Y19pdWN2X2dldF9jaGFycywKIAkucHV0X2NoYXJzID0gaHZjX2l1Y3ZfcHV0X2NoYXJzLAogCS5ub3RpZmllcl9hZGQgPSBodmNfaXVjdl9ub3RpZmllcl9hZGQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYyBiL2RyaXZlcnMvY2hhci9odmNfcnRhcy5jCmluZGV4IDg4NTkwZDAuLjYxYzRhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfcnRhcy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfcnRhcy5jCkBAIC03MSw3ICs3MSw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19ydGFzX2dldF9wdXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX3J0YXNfZ2V0X3B1dF9vcHMgPSB7CiAJLmdldF9jaGFycyA9IGh2Y19ydGFzX3JlYWRfY29uc29sZSwKIAkucHV0X2NoYXJzID0gaHZjX3J0YXNfd3JpdGVfY29uc29sZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3VkYmcuYyBiL2RyaXZlcnMvY2hhci9odmNfdWRiZy5jCmluZGV4IGJkNjNiYTguLmIwOTU3ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfdWRiZy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfdWRiZy5jCkBAIC01OCw3ICs1OCw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y191ZGJnX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y191ZGJnX29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gaHZjX3VkYmdfZ2V0LAogCS5wdXRfY2hhcnMgPSBodmNfdWRiZ19wdXQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y192aW8uYyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKaW5kZXggMTBiZTM0My4uMjczNzBlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y192aW8uYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJcmV0dXJuIGdvdDsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX2dldF9wdXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX2dldF9wdXRfb3BzID0gewogCS5nZXRfY2hhcnMgPSBmaWx0ZXJlZF9nZXRfY2hhcnMsCiAJLnB1dF9jaGFycyA9IGh2Y19wdXRfY2hhcnMsCiAJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF9pcnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwppbmRleCBiMWE3MTYzLi42MDQ0NmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXJldHVybiByZWN2OwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gcmVhZF9jb25zb2xlLAogCS5wdXRfY2hhcnMgPSB3cml0ZV9jb25zb2xlLAogCS5ub3RpZmllcl9hZGQgPSBub3RpZmllcl9hZGRfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IDg3MDYwMjYuLjZlYTEwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTE4NiwzICsxODYsMTUgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBteGMtcm5nYS4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIEhXX1JBTkRPTV9OT01BRElLCisJdHJpc3RhdGUgIlNULUVyaWNzc29uIE5vbWFkaWsgUmFuZG9tIE51bWJlciBHZW5lcmF0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhXX1JBTkRPTSAmJiBQTEFUX05PTUFESUsKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwtc2lkZSBzdXBwb3J0IGZvciB0aGUgUmFuZG9tIE51bWJlcgorCSAgR2VuZXJhdG9yIGhhcmR3YXJlIGZvdW5kIG9uIFNULUVyaWNzc29uIFNvQ3MgKDg4MTUgYW5kIDg1MDApLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBub21hZGlrLXJuZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCmluZGV4IDVlZWIxMzAuLjQyNzMzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQpAQCAtMTgsMyArMTgsNCBAQAogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9UWDQ5MzkpICs9IHR4NDkzOS1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9NWENfUk5HQSkgKz0gbXhjLXJuZ2Eubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9PQ1RFT04pICs9IG9jdGVvbi1ybmcubworb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9OT01BRElLKSArPSBub21hZGlrLXJuZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL25vbWFkaWstcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL25vbWFkaWstcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiNGM0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vbm9tYWRpay1ybmcuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIE5vbWFkaWsgUk5HIHN1cHBvcnQKKyAqICBDb3B5cmlnaHQgMjAwOSBBbGVzc2FuZHJvIFJ1YmluaQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9od19yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCitzdGF0aWMgaW50IG5ta19ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdm9pZCAqZGF0YSwgc2l6ZV90IG1heCwgYm9vbCB3YWl0KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilybmctPnByaXY7CisKKwkvKgorCSAqIFRoZSByZWdpc3RlciBpcyAzMiBiaXRzIGFuZCBnaXZlcyAxNiByYW5kb20gYml0cyAobG93IGhhbGYpLgorCSAqIEEgc3Vic2VxdWVudCByZWFkIHdpbGwgZGVsYXkgdGhlIGNvcmUgZm9yIDQwMG5zLCBzbyB3ZSBqdXN0IHJlYWQKKwkgKiBvbmNlIGFuZCBhY2NlcHQgdGhlIHZlcnkgdW5saWtlbHkgdmVyeSBzbWFsbCBkZWxheSwgZXZlbiBpZiB3YWl0PT0wLgorCSAqLworCSoodTE2ICopZGF0YSA9IF9fcmF3X3JlYWRsKGJhc2UgKyA4KSAmIDB4ZmZmZjsKKwlyZXR1cm4gMjsKK30KKworLyogd2UgaGF2ZSBhdCBtb3N0IG9uZSBSTkcgcGVyIG1hY2hpbmUsIGdyYW50ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgaHdybmcgbm1rX3JuZyA9IHsKKwkubmFtZQkJPSAibm9tYWRpayIsCisJLnJlYWQJCT0gbm1rX3JuZ19yZWFkLAorfTsKKworc3RhdGljIGludCBubWtfcm5nX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYW1iYV9pZCAqaWQpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCByZXQ7CisKKwlyZXQgPSBhbWJhX3JlcXVlc3RfcmVnaW9ucyhkZXYsIGRldi0+ZGV2LmluaXRfbmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSAtRU5PTUVNOworCWJhc2UgPSBpb3JlbWFwKGRldi0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZkZXYtPnJlcykpOworCWlmICghYmFzZSkKKwkJZ290byBvdXRfcmVsZWFzZTsKKwlubWtfcm5nLnByaXYgPSAodW5zaWduZWQgbG9uZyliYXNlOworCXJldCA9IGh3cm5nX3JlZ2lzdGVyKCZubWtfcm5nKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bm1hcDsKKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCWlvdW5tYXAoYmFzZSk7CitvdXRfcmVsZWFzZToKKwlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbm1rX3JuZ19yZW1vdmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKW5ta19ybmcucHJpdjsKKwlod3JuZ191bnJlZ2lzdGVyKCZubWtfcm5nKTsKKwlpb3VubWFwKGJhc2UpOworCWFtYmFfcmVsZWFzZV9yZWdpb25zKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBubWtfcm5nX2lkc1tdID0geworCXsKKwkJLmlkCT0gMHgwMDA4MDVlMSwKKwkJLm1hc2sJPSAweDAwMGZmZmZmLCAvKiB0b3AgYml0cyBhcmUgcmV2IGFuZCBjZmc6IGFjY2VwdCBhbGwgKi8KKwl9LAorCXswLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kcml2ZXIgbm1rX3JuZ19kcml2ZXIgPSB7CisJLmRydiA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gInJuZyIsCisJCX0sCisJLnByb2JlID0gbm1rX3JuZ19wcm9iZSwKKwkucmVtb3ZlID0gbm1rX3JuZ19yZW1vdmUsCisJLmlkX3RhYmxlID0gbm1rX3JuZ19pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBubWtfcm5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gYW1iYV9kcml2ZXJfcmVnaXN0ZXIoJm5ta19ybmdfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG5ta19ybmdfZXhpdCh2b2lkKQoreworCWFtYmFfZHJpdmVyX3VucmVnaXN0ZXIoJm5ta19ybmdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobm1rX3JuZ19pbml0KTsKK21vZHVsZV9leGl0KG5ta19ybmdfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uYwppbmRleCBiZTgzMmI2Li40ODc4OGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL21lbS5jCkBAIC0zOTUsNiArMzk1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKIAlzc2l6ZV90IGxvd19jb3VudCwgcmVhZCwgc3o7CiAJY2hhciAqIGtidWY7IC8qIGstYWRkciBiZWNhdXNlIHZyZWFkKCkgdGFrZXMgdm1saXN0X2xvY2sgcndsb2NrICovCisJaW50IGVyciA9IDA7CiAKIAlyZWFkID0gMDsKIAlpZiAocCA8ICh1bnNpZ25lZCBsb25nKSBoaWdoX21lbW9yeSkgewpAQCAtNDQxLDEyICs0NDIsMTYgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl3aGlsZSAoY291bnQgPiAwKSB7CiAJCQlzeiA9IHNpemVfaW5zaWRlX3BhZ2UocCwgY291bnQpOworCQkJaWYgKCFpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKCh2b2lkICopcCkpIHsKKwkJCQllcnIgPSAtRU5YSU87CisJCQkJYnJlYWs7CisJCQl9CiAJCQlzeiA9IHZyZWFkKGtidWYsIChjaGFyICopcCwgc3opOwogCQkJaWYgKCFzeikKIAkJCQlicmVhazsKIAkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBrYnVmLCBzeikpIHsKLQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2J1Zik7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJZXJyID0gLUVGQVVMVDsKKwkJCQlicmVhazsKIAkJCX0KIAkJCWNvdW50IC09IHN6OwogCQkJYnVmICs9IHN6OwpAQCAtNDU1LDggKzQ2MCw4IEBACiAJCX0KIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOwogCX0KLSAJKnBwb3MgPSBwOwotIAlyZXR1cm4gcmVhZDsKKwkqcHBvcyA9IHA7CisJcmV0dXJuIHJlYWQgPyByZWFkIDogZXJyOwogfQogCiAKQEAgLTUyMCw2ICs1MjUsNyBAQAogCXNzaXplX3Qgd3JvdGUgPSAwOwogCXNzaXplX3QgdmlydHIgPSAwOwogCWNoYXIgKiBrYnVmOyAvKiBrLWFkZHIgYmVjYXVzZSB2d3JpdGUoKSB0YWtlcyB2bWxpc3RfbG9jayByd2xvY2sgKi8KKwlpbnQgZXJyID0gMDsKIAogCWlmIChwIDwgKHVuc2lnbmVkIGxvbmcpIGhpZ2hfbWVtb3J5KSB7CiAJCXVuc2lnbmVkIGxvbmcgdG9fd3JpdGUgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwKQEAgLTU0MCwxNCArNTQ2LDE2IEBACiAJCQl1bnNpZ25lZCBsb25nIHN6ID0gc2l6ZV9pbnNpZGVfcGFnZShwLCBjb3VudCk7CiAJCQl1bnNpZ25lZCBsb25nIG47CiAKKwkJCWlmICghaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcigodm9pZCAqKXApKSB7CisJCQkJZXJyID0gLUVOWElPOworCQkJCWJyZWFrOworCQkJfQogCQkJbiA9IGNvcHlfZnJvbV91c2VyKGtidWYsIGJ1Ziwgc3opOwogCQkJaWYgKG4pIHsKLQkJCQlpZiAod3JvdGUgKyB2aXJ0cikKLQkJCQkJYnJlYWs7Ci0JCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOwotCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWVyciA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlzeiA9IHZ3cml0ZShrYnVmLCAoY2hhciAqKXAsIHN6KTsKKwkJCXZ3cml0ZShrYnVmLCAoY2hhciAqKXAsIHN6KTsKIAkJCWNvdW50IC09IHN6OwogCQkJYnVmICs9IHN6OwogCQkJdmlydHIgKz0gc3o7CkBAIC01NTYsOCArNTY0LDggQEAKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOwogCX0KIAotIAkqcHBvcyA9IHA7Ci0gCXJldHVybiB2aXJ0ciArIHdyb3RlOworCSpwcG9zID0gcDsKKwlyZXR1cm4gdmlydHIgKyB3cm90ZSA/IDogZXJyOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IDJkYjRjMGEuLmM5YmM4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGNtbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gKHN0cnVjdCBjbTQwMDBfZGV2ICopIGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJdW5zaWduZWQgc2hvcnQgczsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA4MjU4OTgyLi4yODQ5NzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC0xMDUxLDEyICsxMDUxLDYgQEAKIAkJCQkvKiBsaWtlIGEgbmFtZWQgcGlwZSAqLwogCX0KIAotCS8qCi0JICogSWYgd2UgZ2F2ZSB0aGUgdXNlciBzb21lIGJ5dGVzLCB1cGRhdGUgdGhlIGFjY2VzcyB0aW1lLgotCSAqLwotCWlmIChjb3VudCkKLQkJZmlsZV9hY2Nlc3NlZChmaWxlKTsKLQogCXJldHVybiAoY291bnQgPyBjb3VudCA6IHJldHZhbCk7CiB9CiAKQEAgLTExMDcsNyArMTEwMSw2IEBACiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc2l6ZV90IHJldDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCXJldCA9IHdyaXRlX3Bvb2woJmJsb2NraW5nX3Bvb2wsIGJ1ZmZlciwgY291bnQpOwogCWlmIChyZXQpCkBAIC0xMTE2LDggKzExMDksNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpbm9kZS0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJcmV0dXJuIChzc2l6ZV90KWNvdW50OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYwppbmRleCBlY2JhNDk0Li5mNTg0NDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMKQEAgLTM5LDEyICszOSwxMiBAQAogc3RydWN0IHRwbV9pbmZfZGV2IHsKIAlpbnQgaW90eXBlOwogCi0Jdm9pZCBfX2lvbWVtICptZW1fYmFzZTsJCS8qIE1NSU8gaW9yZW1hcCdkIGFkZHIgKi8KLQl1bnNpZ25lZCBsb25nIG1hcF9iYXNlOwkJLyogcGh5cyBNTUlPIGJhc2UgKi8KLQl1bnNpZ25lZCBsb25nIG1hcF9zaXplOwkJLyogTU1JTyByZWdpb24gc2l6ZSAqLwotCXVuc2lnbmVkIGludCBpbmRleF9vZmY7CQkvKiBpbmRleCByZWdpc3RlciBvZmZzZXQgKi8KKwl2b2lkIF9faW9tZW0gKm1lbV9iYXNlOwkvKiBNTUlPIGlvcmVtYXAnZCBhZGRyICovCisJdW5zaWduZWQgbG9uZyBtYXBfYmFzZTsJLyogcGh5cyBNTUlPIGJhc2UgKi8KKwl1bnNpZ25lZCBsb25nIG1hcF9zaXplOwkvKiBNTUlPIHJlZ2lvbiBzaXplICovCisJdW5zaWduZWQgaW50IGluZGV4X29mZjsJLyogaW5kZXggcmVnaXN0ZXIgb2Zmc2V0ICovCiAKLQl1bnNpZ25lZCBpbnQgZGF0YV9yZWdzOwkJLyogRGF0YSByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBpbnQgZGF0YV9yZWdzOwkvKiBEYXRhIHJlZ2lzdGVycyAqLwogCXVuc2lnbmVkIGludCBkYXRhX3NpemU7CiAKIAl1bnNpZ25lZCBpbnQgY29uZmlnX3BvcnQ7CS8qIElPIFBvcnQgY29uZmlnIGluZGV4IHJlZyAqLwpAQCAtNDA2LDE0ICs0MDYsMTQgQEAKIAkubWlzY2RldiA9IHsuZm9wcyA9ICZpbmZfb3BzLH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgdHBtX3BucF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCB0cG1faW5mX3BucF90YmxbXSA9IHsKIAkvKiBJbmZpbmVvbiBUUE1zICovCiAJeyJJRlgwMTAxIiwgMH0sCiAJeyJJRlgwMTAyIiwgMH0sCiAJeyIiLCAwfQogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHRwbV9wbnBfdGJsKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCB0cG1faW5mX3BucF90YmwpOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0cG1faW5mX3BucF9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqZGV2LAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQpAQCAtNDMwLDcgKzQzMCw3IEBACiAJaWYgKHBucF9wb3J0X3ZhbGlkKGRldiwgMCkgJiYgcG5wX3BvcnRfdmFsaWQoZGV2LCAxKSAmJgogCSAgICAhKHBucF9wb3J0X2ZsYWdzKGRldiwgMCkgJiBJT1JFU09VUkNFX0RJU0FCTEVEKSkgewogCi0JICAgIAl0cG1fZGV2LmlvdHlwZSA9IFRQTV9JTkZfSU9fUE9SVDsKKwkJdHBtX2Rldi5pb3R5cGUgPSBUUE1fSU5GX0lPX1BPUlQ7CiAKIAkJdHBtX2Rldi5jb25maWdfcG9ydCA9IHBucF9wb3J0X3N0YXJ0KGRldiwgMCk7CiAJCXRwbV9kZXYuY29uZmlnX3NpemUgPSBwbnBfcG9ydF9sZW4oZGV2LCAwKTsKQEAgLTQ1OSw5ICs0NTksOSBAQAogCQkJZ290byBlcnJfbGFzdDsKIAkJfQogCX0gZWxzZSBpZiAocG5wX21lbV92YWxpZChkZXYsIDApICYmCi0JICAgICAgICAgICAhKHBucF9tZW1fZmxhZ3MoZGV2LCAwKSAmIElPUkVTT1VSQ0VfRElTQUJMRUQpKSB7CisJCSAgICEocG5wX21lbV9mbGFncyhkZXYsIDApICYgSU9SRVNPVVJDRV9ESVNBQkxFRCkpIHsKIAotCSAgICAJdHBtX2Rldi5pb3R5cGUgPSBUUE1fSU5GX0lPX01FTTsKKwkJdHBtX2Rldi5pb3R5cGUgPSBUUE1fSU5GX0lPX01FTTsKIAogCQl0cG1fZGV2Lm1hcF9iYXNlID0gcG5wX21lbV9zdGFydChkZXYsIDApOwogCQl0cG1fZGV2Lm1hcF9zaXplID0gcG5wX21lbV9sZW4oZGV2LCAwKTsKQEAgLTU2MywxMSArNTYzLDExIEBACiAJCQkgInByb2R1Y3QgaWQgMHglMDJ4JTAyeCIKIAkJCSAiJXNcbiIsCiAJCQkgdHBtX2Rldi5pb3R5cGUgPT0gVFBNX0lORl9JT19QT1JUID8KLQkJCQl0cG1fZGV2LmNvbmZpZ19wb3J0IDoKLQkJCQl0cG1fZGV2Lm1hcF9iYXNlICsgdHBtX2Rldi5pbmRleF9vZmYsCisJCQkgdHBtX2Rldi5jb25maWdfcG9ydCA6CisJCQkgdHBtX2Rldi5tYXBfYmFzZSArIHRwbV9kZXYuaW5kZXhfb2ZmLAogCQkJIHRwbV9kZXYuaW90eXBlID09IFRQTV9JTkZfSU9fUE9SVCA/Ci0JCQkJdHBtX2Rldi5kYXRhX3JlZ3MgOgotCQkJCXRwbV9kZXYubWFwX2Jhc2UgKyB0cG1fZGV2LmRhdGFfcmVncywKKwkJCSB0cG1fZGV2LmRhdGFfcmVncyA6CisJCQkgdHBtX2Rldi5tYXBfYmFzZSArIHRwbV9kZXYuZGF0YV9yZWdzLAogCQkJIHZlcnNpb25bMF0sIHZlcnNpb25bMV0sCiAJCQkgdmVuZG9yaWRbMF0sIHZlbmRvcmlkWzFdLAogCQkJIHByb2R1Y3RpZFswXSwgcHJvZHVjdGlkWzFdLCBjaGlwbmFtZSk7CkBAIC02MDcsMjAgKzYwNyw1NSBAQAogCQkJaW91bm1hcCh0cG1fZGV2Lm1lbV9iYXNlKTsKIAkJCXJlbGVhc2VfbWVtX3JlZ2lvbih0cG1fZGV2Lm1hcF9iYXNlLCB0cG1fZGV2Lm1hcF9zaXplKTsKIAkJfQorCQl0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKGNoaXApOwogCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CiAJfQogfQogCitzdGF0aWMgaW50IHRwbV9pbmZfcG5wX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHBtX3N0YXRlKQoreworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IHBucF9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByYzsKKwlpZiAoY2hpcCkgeworCQl1OCBzYXZlc3RhdGVbXSA9IHsKKwkJCTAsIDE5MywJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLworCQkJMCwgMCwgMCwgMTAsCS8qIGJsb2IgbGVuZ3RoIChpbiBieXRlcykgKi8KKwkJCTAsIDAsIDAsIDE1MgkvKiBUUE1fT1JEX1NhdmVTdGF0ZSAqLworCQl9OworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJzYXZpbmcgVFBNIHN0YXRlXG4iKTsKKwkJcmMgPSB0cG1faW5mX3NlbmQoY2hpcCwgc2F2ZXN0YXRlLCBzaXplb2Yoc2F2ZXN0YXRlKSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiZXJyb3Igd2hpbGUgc2F2aW5nIFRQTSBzdGF0ZVxuIik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHBtX2luZl9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJLyogUmUtY29uZmlndXJlIFRQTSBhZnRlciBzdXNwZW5kaW5nICovCisJdHBtX2NvbmZpZ19vdXQoRU5BQkxFX1JFR0lTVEVSX1BBSVIsIFRQTV9JTkZfQUREUik7CisJdHBtX2NvbmZpZ19vdXQoSU9MSU1ILCBUUE1fSU5GX0FERFIpOworCXRwbV9jb25maWdfb3V0KCh0cG1fZGV2LmRhdGFfcmVncyA+PiA4KSAmIDB4ZmYsIFRQTV9JTkZfREFUQSk7CisJdHBtX2NvbmZpZ19vdXQoSU9MSU1MLCBUUE1fSU5GX0FERFIpOworCXRwbV9jb25maWdfb3V0KCh0cG1fZGV2LmRhdGFfcmVncyAmIDB4ZmYpLCBUUE1fSU5GX0RBVEEpOworCS8qIGFjdGl2YXRlIHJlZ2lzdGVyICovCisJdHBtX2NvbmZpZ19vdXQoVFBNX0RBUiwgVFBNX0lORl9BRERSKTsKKwl0cG1fY29uZmlnX291dCgweDAxLCBUUE1fSU5GX0RBVEEpOworCXRwbV9jb25maWdfb3V0KERJU0FCTEVfUkVHSVNURVJfUEFJUiwgVFBNX0lORl9BRERSKTsKKwkvKiBkaXNhYmxlIFJFU0VULCBMUCBhbmQgSVJRQyAqLworCXRwbV9kYXRhX291dChSRVNFVF9MUF9JUlFDX0RJU0FCTEUsIENNRCk7CisJcmV0dXJuIHRwbV9wbV9yZXN1bWUoJmRldi0+ZGV2KTsKK30KKwogc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIHRwbV9pbmZfcG5wX2RyaXZlciA9IHsKIAkubmFtZSA9ICJ0cG1faW5mX3BucCIsCi0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5zdXNwZW5kID0gdHBtX3BtX3N1c3BlbmQsCi0JCS5yZXN1bWUgPSB0cG1fcG1fcmVzdW1lLAotCX0sCi0JLmlkX3RhYmxlID0gdHBtX3BucF90YmwsCisJLmlkX3RhYmxlID0gdHBtX2luZl9wbnBfdGJsLAogCS5wcm9iZSA9IHRwbV9pbmZfcG5wX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0cG1faW5mX3BucF9yZW1vdmUpLAorCS5zdXNwZW5kID0gdHBtX2luZl9wbnBfc3VzcGVuZCwKKwkucmVzdW1lID0gdHBtX2luZl9wbnBfcmVzdW1lLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0cG1faW5mX3BucF9yZW1vdmUpCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2luZih2b2lkKQpAQCAtNjM4LDUgKzY3Myw1IEBACiAKIE1PRFVMRV9BVVRIT1IoIk1hcmNlbCBTZWxob3JzdCA8bS5zZWxob3JzdEBzaXJyaXguY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEluZmluZW9uIFRQTSBTTEQgOTYzMCBUVCAxLjEgLyBTTEIgOTYzNSBUVCAxLjIiKTsKLU1PRFVMRV9WRVJTSU9OKCIxLjkiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjkuMiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IGM2ZjNiNDguLmRjYjkwODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTE5NTEsOCArMTk1MSwxMCBAQAogCQkJcGlkID0gdGFza19waWQoY3VycmVudCk7CiAJCQl0eXBlID0gUElEVFlQRV9QSUQ7CiAJCX0KLQkJcmV0dmFsID0gX19mX3NldG93bihmaWxwLCBwaWQsIHR5cGUsIDApOworCQlnZXRfcGlkKHBpZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+Y3RybF9sb2NrLCBmbGFncyk7CisJCXJldHZhbCA9IF9fZl9zZXRvd24oZmlscCwgcGlkLCB0eXBlLCAwKTsKKwkJcHV0X3BpZChwaWQpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci91dl9tbXRpbWVyLmMgYi9kcml2ZXJzL2NoYXIvdXZfbW10aW1lci5jCmluZGV4IDg2N2I2N2IuLmM3MDcyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci91dl9tbXRpbWVyLmMKKysrIGIvZHJpdmVycy9jaGFyL3V2X21tdGltZXIuYwpAQCAtODksMTMgKzg5LDE3IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIE1NVElNRVJfR0VUT0ZGU0VUOgkvKiBvZmZzZXQgb2YgdGhlIGNvdW50ZXIgKi8KIAkJLyoKLQkJICogVVYgUlRDIHJlZ2lzdGVyIGlzIG9uIGl0cyBvd24gcGFnZQorCQkgKiBTdGFydGluZyB3aXRoIEhVQiByZXYgMi4wLCB0aGUgVVYgUlRDIHJlZ2lzdGVyIGlzCisJCSAqIHJlcGxpY2F0ZWQgYWNyb3NzIGFsbCBjYWNoZWxpbmVzIG9mIGl0J3Mgb3duIHBhZ2UuCisJCSAqIFRoaXMgYWxsb3dzIGZhc3RlciBzaW11bHRhbmVvdXMgcmVhZHMgZnJvbSBhIGdpdmVuIHNvY2tldC4KKwkJICoKKwkJICogVGhlIG9mZnNldCByZXR1cm5lZCBpcyBpbiA2NCBiaXQgdW5pdHMuCiAJCSAqLwotCQlpZiAoUEFHRV9TSVpFIDw9ICgxIDw8IDE2KSkKLQkJCXJldCA9ICgoVVZfTE9DQUxfTU1SX0JBU0UgfCBVVkhfUlRDKSAmIChQQUdFX1NJWkUtMSkpCi0JCQkJLyA4OworCQlpZiAodXZfZ2V0X21pbl9odWJfcmV2aXNpb25faWQoKSA9PSAxKQorCQkJcmV0ID0gMDsKIAkJZWxzZQotCQkJcmV0ID0gLUVOT1NZUzsKKwkJCXJldCA9ICgodXZfYmxhZGVfcHJvY2Vzc29yX2lkKCkgKiBMMV9DQUNIRV9CWVRFUykgJQorCQkJCQlQQUdFX1NJWkUpIC8gODsKIAkJYnJlYWs7CiAKIAljYXNlIE1NVElNRVJfR0VUUkVTOiAvKiByZXNvbHV0aW9uIG9mIHRoZSBjbG9jayBpbiAxMF4tMTUgcyAqLwpAQCAtMTE1LDggKzExOSw4IEBACiAJCXJldCA9IGh3ZWlnaHQ2NChVVkhfUlRDX1JFQUxfVElNRV9DTE9DS19NQVNLKTsKIAkJYnJlYWs7CiAKLQljYXNlIE1NVElNRVJfTU1BUEFWQUlMOiAvKiBjYW4gd2UgbW1hcCB0aGUgY2xvY2sgaW50byB1c2Vyc3BhY2U/ICovCi0JCXJldCA9IChQQUdFX1NJWkUgPD0gKDEgPDwgMTYpKSA/IDEgOiAwOworCWNhc2UgTU1USU1FUl9NTUFQQVZBSUw6CisJCXJldCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBNTVRJTUVSX0dFVENPVU5URVI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IGEwMzVhZTMuLjIxMzM3M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0xLDE4ICsxLDYgQEAKLS8qRDozMDAKLSAqIFRoZSBHdWVzdCBjb25zb2xlIGRyaXZlcgotICoKLSAqIFdyaXRpbmcgY29uc29sZSBkcml2ZXJzIGlzIG9uZSBvZiB0aGUgZmV3IHJlbWFpbmluZyBEYXJrIEFydHMgaW4gTGludXguCi0gKiBGb3J0dW5hdGVseSBmb3IgdXMsIHRoZSBwYXRoIG9mIHZpcnR1YWwgY29uc29sZXMgaGFzIGJlZW4gd2VsbC10cm9kZGVuIGJ5Ci0gKiB0aGUgUG93ZXJQQyBmb2xrcywgd2hvIHdyb3RlICJodmNfY29uc29sZS5jIiB0byBnZW5lcmljYWxseSBzdXBwb3J0IGFueQotICogdmlydHVhbCBjb25zb2xlLiAgV2UgdXNlIHRoYXQgaW5mcmFzdHJ1Y3R1cmUgd2hpY2ggb25seSByZXF1aXJlcyB1cyB0byB3cml0ZQotICogdGhlIGJhc2ljIHB1dF9jaGFycyBhbmQgZ2V0X2NoYXJzIGZ1bmN0aW9ucyBhbmQgY2FsbCB0aGUgcmlnaHQgcmVnaXN0ZXIKLSAqIGZ1bmN0aW9ucy4KLSA6Ki8KLQotLypNOjAwMiBUaGUgY29uc29sZSBjYW4gYmUgZmxvb2RlZDogd2hpbGUgdGhlIEd1ZXN0IGlzIHByb2Nlc3NpbmcgaW5wdXQgdGhlCi0gKiBIb3N0IGNhbiBzZW5kIG1vcmUuICBCdWZmZXJpbmcgaW4gdGhlIEhvc3QgY291bGQgYWxsZXZpYXRlIHRoaXMsIGJ1dCBpdCBpcyBhCi0gKiBkaWZmaWN1bHQgcHJvYmxlbSBpbiBnZW5lcmFsLiA6Ki8KLS8qIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBSdXN0eSBSdXNzZWxsLCBJQk0gQ29ycG9yYXRpb24KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUnVzdHkgUnVzc2VsbCwgSUJNIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjgsMTQyICsxNiw2OTQgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCiAKLS8qRDozNDAgVGhlc2UgcmVwcmVzZW50IG91ciBpbnB1dCBhbmQgb3V0cHV0IGNvbnNvbGUgcXVldWVzLCBhbmQgdGhlIHZpcnRpbwotICogb3BlcmF0aW9ucyBmb3IgdGhlbS4gKi8KLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICppbl92cSwgKm91dF92cTsKLXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKLQotLyogVGhpcyBpcyBvdXIgaW5wdXQgYnVmZmVyLCBhbmQgaG93IG11Y2ggZGF0YSBpcyBsZWZ0IGluIGl0LiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbl9sZW47Ci1zdGF0aWMgY2hhciAqaW4sICppbmJ1ZjsKLQotLyogVGhlIG9wZXJhdGlvbnMgZm9yIG91ciBjb25zb2xlLiAqLwotc3RhdGljIHN0cnVjdCBodl9vcHMgdmlydGlvX2NvbnM7Ci0KLS8qIFRoZSBodmMgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IGh2Y19zdHJ1Y3QgKmh2YzsKLQotLypEOjMxMCBUaGUgcHV0X2NoYXJzKCkgY2FsbGJhY2sgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KKy8qCisgKiBUaGlzIGlzIGEgZ2xvYmFsIHN0cnVjdCBmb3Igc3RvcmluZyBjb21tb24gZGF0YSBmb3IgYWxsIHRoZSBkZXZpY2VzCisgKiB0aGlzIGRyaXZlciBoYW5kbGVzLgogICoKLSAqIFdlIHR1cm4gdGhlIGNoYXJhY3RlcnMgaW50byBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsIGFkZCBpdCB0byB0aGUgb3V0cHV0Ci0gKiBxdWV1ZSBhbmQgdGhlbiBraWNrIHRoZSBIb3N0LiAgVGhlbiB3ZSBzaXQgaGVyZSB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2g6Ci0gKiBpbmVmZmljaWVudCBpbiB0aGVvcnksIGJ1dCBpbiBwcmFjdGljZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBkbyBpdAotICogaW1tZWRpYXRlbHkgKGxndWVzdCdzIExhdW5jaGVyIGRvZXMpLiAqLwotc3RhdGljIGludCBwdXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorICogTWFpbmx5LCBpdCBoYXMgYSBsaW5rZWQgbGlzdCBmb3IgYWxsIHRoZSBjb25zb2xlcyBpbiBvbmUgcGxhY2Ugc28KKyAqIHRoYXQgY2FsbGJhY2tzIGZyb20gaHZjIGZvciBnZXRfY2hhcnMoKSwgcHV0X2NoYXJzKCkgd29yayBwcm9wZXJseQorICogYWNyb3NzIG11bHRpcGxlIGRldmljZXMgYW5kIG11bHRpcGxlIHBvcnRzIHBlciBkZXZpY2UuCisgKi8KK3N0cnVjdCBwb3J0c19kcml2ZXJfZGF0YSB7CisJLyogVXNlZCBmb3IgcmVnaXN0ZXJpbmcgY2hhcmRldnMgKi8KKwlzdHJ1Y3QgY2xhc3MgKmNsYXNzOworCisJLyogVXNlZCBmb3IgZXhwb3J0aW5nIHBlci1wb3J0IGluZm9ybWF0aW9uIHRvIGRlYnVnZnMgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjsKKworCS8qIE51bWJlciBvZiBkZXZpY2VzIHRoaXMgZHJpdmVyIGlzIGhhbmRsaW5nICovCisJdW5zaWduZWQgaW50IGluZGV4OworCisJLyoKKwkgKiBUaGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGh2YyBjb25zb2xlcworCSAqIHNwYXduZWQgYnkgdGhpcyBkcml2ZXIuICBUaGlzIG51bWJlciBpcyBnaXZlbiBhcyB0aGUgZmlyc3QKKwkgKiBhcmd1bWVudCB0byBodmNfYWxsb2MoKS4gIFRvIGNvcnJlY3RseSBtYXAgYW4gaW5pdGlhbAorCSAqIGNvbnNvbGUgc3Bhd25lZCB2aWEgaHZjX2luc3RhbnRpYXRlIHRvIHRoZSBjb25zb2xlIGJlaW5nCisJICogaG9va2VkIHVwIHZpYSBodmNfYWxsb2MsIHdlIG5lZWQgdG8gcGFzcyB0aGUgc2FtZSB2dGVybW5vLgorCSAqCisJICogV2UgYWxzbyBqdXN0IGFzc3VtZSB0aGUgZmlyc3QgY29uc29sZSBiZWluZyBpbml0aWFsaXNlZCB3YXMKKwkgKiB0aGUgZmlyc3Qgb25lIHRoYXQgZ290IHVzZWQgYXMgdGhlIGluaXRpYWwgY29uc29sZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbmV4dF92dGVybW5vOworCisJLyogQWxsIHRoZSBjb25zb2xlIGRldmljZXMgaGFuZGxlZCBieSB0aGlzIGRyaXZlciAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29uc29sZXM7Cit9Oworc3RhdGljIHN0cnVjdCBwb3J0c19kcml2ZXJfZGF0YSBwZHJ2ZGF0YTsKKworREVGSU5FX1NQSU5MT0NLKHBkcnZkYXRhX2xvY2spOworCisvKiBUaGlzIHN0cnVjdCBob2xkcyBpbmZvcm1hdGlvbiB0aGF0J3MgcmVsZXZhbnQgb25seSBmb3IgY29uc29sZSBwb3J0cyAqLworc3RydWN0IGNvbnNvbGUgeworCS8qIFdlJ2xsIHBsYWNlIGFsbCBjb25zb2xlcyBpbiBhIGxpc3QgaW4gdGhlIHBkcnZkYXRhIHN0cnVjdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFRoZSBodmMgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnNvbGUgcG9ydCAqLworCXN0cnVjdCBodmNfc3RydWN0ICpodmM7CisKKwkvKgorCSAqIFRoaXMgbnVtYmVyIGlkZW50aWZpZXMgdGhlIG51bWJlciB0aGF0IHdlIHVzZWQgdG8gcmVnaXN0ZXIKKwkgKiB3aXRoIGh2YyBpbiBodmNfaW5zdGFudGlhdGUoKSBhbmQgaHZjX2FsbG9jKCk7IHRoaXMgaXMgdGhlCisJICogbnVtYmVyIHBhc3NlZCBvbiBieSB0aGUgaHZjIGNhbGxiYWNrcyB0byB1cyB0bworCSAqIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgb3RoZXIgY29uc29sZSBwb3J0cyBoYW5kbGVkIGJ5CisJICogdGhpcyBkcml2ZXIKKwkgKi8KKwl1MzIgdnRlcm1ubzsKK307CisKK3N0cnVjdCBwb3J0X2J1ZmZlciB7CisJY2hhciAqYnVmOworCisJLyogc2l6ZSBvZiB0aGUgYnVmZmVyIGluICpidWYgYWJvdmUgKi8KKwlzaXplX3Qgc2l6ZTsKKworCS8qIHVzZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIgKi8KKwlzaXplX3QgbGVuOworCS8qIG9mZnNldCBpbiB0aGUgYnVmIGZyb20gd2hpY2ggdG8gY29uc3VtZSBkYXRhICovCisJc2l6ZV90IG9mZnNldDsKK307CisKKy8qCisgKiBUaGlzIGlzIGEgcGVyLWRldmljZSBzdHJ1Y3QgdGhhdCBzdG9yZXMgZGF0YSBjb21tb24gdG8gYWxsIHRoZQorICogcG9ydHMgZm9yIHRoYXQgZGV2aWNlICh2ZGV2LT5wcml2KS4KKyAqLworc3RydWN0IHBvcnRzX2RldmljZSB7CisJLyoKKwkgKiBXb3JrcXVldWUgaGFuZGxlcnMgd2hlcmUgd2UgcHJvY2VzcyBkZWZlcnJlZCB3b3JrIGFmdGVyCisJICogbm90aWZpY2F0aW9uCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IGNvbnRyb2xfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX3dvcms7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzOworCisJLyogVG8gcHJvdGVjdCB0aGUgbGlzdCBvZiBwb3J0cyAqLworCXNwaW5sb2NrX3QgcG9ydHNfbG9jazsKKworCS8qIFRvIHByb3RlY3QgdGhlIHZxIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KKwlzcGlubG9ja190IGN2cV9sb2NrOworCisJLyogVGhlIGN1cnJlbnQgY29uZmlnIHNwYWNlIGlzIHN0b3JlZCBoZXJlICovCisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZyBjb25maWc7CisKKwkvKiBUaGUgdmlydGlvIGRldmljZSB3ZSdyZSBhc3NvY2lhdGVkIHdpdGggKi8KKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKKworCS8qCisJICogQSBjb3VwbGUgb2YgdmlydHF1ZXVlcyBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbDogb25lIGZvcgorCSAqIGd1ZXN0LT5ob3N0IHRyYW5zZmVycywgb25lIGZvciBob3N0LT5ndWVzdCB0cmFuc2ZlcnMKKwkgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICpjX2l2cSwgKmNfb3ZxOworCisJLyogQXJyYXkgb2YgcGVyLXBvcnQgSU8gdmlydHF1ZXVlcyAqLworCXN0cnVjdCB2aXJ0cXVldWUgKippbl92cXMsICoqb3V0X3ZxczsKKworCS8qIFVzZWQgZm9yIG51bWJlcmluZyBkZXZpY2VzIGZvciBzeXNmcyBhbmQgZGVidWdmcyAqLworCXVuc2lnbmVkIGludCBkcnZfaW5kZXg7CisKKwkvKiBNYWpvciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlLiAgUG9ydHMgd2lsbCBiZSBjcmVhdGVkIGFzIG1pbm9ycy4gKi8KKwlpbnQgY2hyX21ham9yOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIHBlci1wb3J0IGRhdGEgKi8KK3N0cnVjdCBwb3J0IHsKKwkvKiBOZXh0IHBvcnQgaW4gdGhlIGxpc3QsIGhlYWQgaXMgaW4gdGhlIHBvcnRzX2RldmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFBvaW50ZXIgdG8gdGhlIHBhcmVudCB2aXJ0aW9fY29uc29sZSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2OworCisJLyogVGhlIGN1cnJlbnQgYnVmZmVyIGZyb20gd2hpY2ggZGF0YSBoYXMgdG8gYmUgZmVkIHRvIHJlYWRlcnMgKi8KKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmluYnVmOworCisJLyoKKwkgKiBUbyBwcm90ZWN0IHRoZSBvcGVyYXRpb25zIG9uIHRoZSBpbl92cSBhc3NvY2lhdGVkIHdpdGggdGhpcworCSAqIHBvcnQuICBIYXMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIGl0IGNhbiBiZSBjYWxsZWQgZnJvbQorCSAqIGludGVycnVwdCBjb250ZXh0IChnZXRfY2hhcigpKS4KKwkgKi8KKwlzcGlubG9ja190IGluYnVmX2xvY2s7CisKKwkvKiBUaGUgSU8gdnFzIGZvciB0aGlzIHBvcnQgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICppbl92cSwgKm91dF92cTsKKworCS8qIEZpbGUgaW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5IHRoYXQgZXhwb3NlcyB0aGlzIHBvcnQncyBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZmlsZTsKKworCS8qCisJICogVGhlIGVudHJpZXMgaW4gdGhpcyBzdHJ1Y3Qgd2lsbCBiZSB2YWxpZCBpZiB0aGlzIHBvcnQgaXMKKwkgKiBob29rZWQgdXAgdG8gYW4gaHZjIGNvbnNvbGUKKwkgKi8KKwlzdHJ1Y3QgY29uc29sZSBjb25zOworCisJLyogRWFjaCBwb3J0IGFzc29jaWF0ZXMgd2l0aCBhIHNlcGFyYXRlIGNoYXIgZGV2aWNlICovCisJc3RydWN0IGNkZXYgY2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwkvKiBBIHdhaXRxdWV1ZSBmb3IgcG9sbCgpIG9yIGJsb2NraW5nIHJlYWQgb3BlcmF0aW9ucyAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxdWV1ZTsKKworCS8qIFRoZSAnbmFtZScgb2YgdGhlIHBvcnQgdGhhdCB3ZSBleHBvc2UgdmlhIHN5c2ZzIHByb3BlcnRpZXMgKi8KKwljaGFyICpuYW1lOworCisJLyogVGhlICdpZCcgdG8gaWRlbnRpZnkgdGhlIHBvcnQgd2l0aCB0aGUgSG9zdCAqLworCXUzMiBpZDsKKworCS8qIElzIHRoZSBob3N0IGRldmljZSBvcGVuICovCisJYm9vbCBob3N0X2Nvbm5lY3RlZDsKKworCS8qIFdlIHNob3VsZCBhbGxvdyBvbmx5IG9uZSBwcm9jZXNzIHRvIG9wZW4gYSBwb3J0ICovCisJYm9vbCBndWVzdF9jb25uZWN0ZWQ7Cit9OworCisvKiBUaGlzIGlzIHRoZSB2ZXJ5IGVhcmx5IGFyY2gtc3BlY2lmaWVkIHB1dCBjaGFycyBmdW5jdGlvbi4gKi8KK3N0YXRpYyBpbnQgKCplYXJseV9wdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpOworCitzdGF0aWMgc3RydWN0IHBvcnQgKmZpbmRfcG9ydF9ieV92dGVybW5vKHUzMiB2dGVybW5vKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgY29uc29sZSAqY29uczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkcnZkYXRhX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbnMsICZwZHJ2ZGF0YS5jb25zb2xlcywgbGlzdCkgeworCQlpZiAoY29ucy0+dnRlcm1ubyA9PSB2dGVybW5vKSB7CisJCQlwb3J0ID0gY29udGFpbmVyX29mKGNvbnMsIHN0cnVjdCBwb3J0LCBjb25zKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXBvcnQgPSBOVUxMOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkcnZkYXRhX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0ICpmaW5kX3BvcnRfYnlfaWQoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldiwgdTMyIGlkKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRldi0+cG9ydHNfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJnBvcnRkZXYtPnBvcnRzLCBsaXN0KQorCQlpZiAocG9ydC0+aWQgPT0gaWQpCisJCQlnb3RvIG91dDsKKwlwb3J0ID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0ICpmaW5kX3BvcnRfYnlfdnEoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldiwKKwkJCQkgICAgc3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmcG9ydGRldi0+cG9ydHMsIGxpc3QpCisJCWlmIChwb3J0LT5pbl92cSA9PSB2cSB8fCBwb3J0LT5vdXRfdnEgPT0gdnEpCisJCQlnb3RvIG91dDsKKwlwb3J0ID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHBvcnQ7Cit9CisKK3N0YXRpYyBib29sIGlzX2NvbnNvbGVfcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+Y29ucy5odmMpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHVzZV9tdWx0aXBvcnQoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldikKK3sKKwkvKgorCSAqIFRoaXMgY29uZGl0aW9uIGNhbiBiZSB0cnVlIHdoZW4gcHV0X2NoYXJzIGlzIGNhbGxlZCBmcm9tCisJICogZWFybHlfaW5pdAorCSAqLworCWlmICghcG9ydGRldi0+dmRldikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBvcnRkZXYtPnZkZXYtPmZlYXR1cmVzWzBdICYgKDEgPDwgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1ZihzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZikKK3sKKwlrZnJlZShidWYtPmJ1Zik7CisJa2ZyZWUoYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0X2J1ZmZlciAqYWxsb2NfYnVmKHNpemVfdCBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBmYWlsOworCWJ1Zi0+YnVmID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPmJ1ZikKKwkJZ290byBmcmVlX2J1ZjsKKwlidWYtPmxlbiA9IDA7CisJYnVmLT5vZmZzZXQgPSAwOworCWJ1Zi0+c2l6ZSA9IGJ1Zl9zaXplOworCXJldHVybiBidWY7CisKK2ZyZWVfYnVmOgorCWtmcmVlKGJ1Zik7CitmYWlsOgorCXJldHVybiBOVUxMOworfQorCisvKiBDYWxsZXJzIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGxvY2tzICovCitzdGF0aWMgdm9pZCAqZ2V0X2luYnVmKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQkvKiBUaGlzIGlzIGEgY29udmVuaWVudCByb3V0aW5lIHRvIGluaXRpYWxpemUgYSBzaW5nbGUtZWxlbSBzZyBsaXN0ICovCi0Jc2dfaW5pdF9vbmUoc2csIGJ1ZiwgY291bnQpOwotCi0JLyogYWRkX2J1ZiB3YW50cyBhIHRva2VuIHRvIGlkZW50aWZ5IHRoaXMgYnVmZmVyOiB3ZSBoYW5kIGl0IGFueQotCSAqIG5vbi1OVUxMIHBvaW50ZXIsIHNpbmNlIHRoZXJlJ3Mgb25seSBldmVyIG9uZSBidWZmZXIuICovCi0JaWYgKG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsICh2b2lkICopMSkgPj0gMCkgewotCQkvKiBUZWxsIEhvc3QgdG8gZ28hICovCi0JCW91dF92cS0+dnFfb3BzLT5raWNrKG91dF92cSk7Ci0JCS8qIENoaWxsIG91dCB1bnRpbCBpdCdzIGRvbmUgd2l0aCB0aGUgYnVmZmVyLiAqLwotCQl3aGlsZSAoIW91dF92cS0+dnFfb3BzLT5nZXRfYnVmKG91dF92cSwgJmxlbikpCi0JCQljcHVfcmVsYXgoKTsKKwl2cSA9IHBvcnQtPmluX3ZxOworCWJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCWlmIChidWYpIHsKKwkJYnVmLT5sZW4gPSBsZW47CisJCWJ1Zi0+b2Zmc2V0ID0gMDsKIAl9Ci0KLQkvKiBXZSdyZSBleHBlY3RlZCB0byByZXR1cm4gdGhlIGFtb3VudCBvZiBkYXRhIHdlIHdyb3RlOiBhbGwgb2YgaXQuICovCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBidWY7CiB9CiAKLS8qIENyZWF0ZSBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QgcmVwcmVzZW50aW5nIG91ciBpbnB1dCBidWZmZXIgYW5kIHB1dCBpdCBpbiB0aGUKLSAqIHF1ZXVlLiAqLwotc3RhdGljIHZvaWQgYWRkX2luYnVmKHZvaWQpCisvKgorICogQ3JlYXRlIGEgc2NhdHRlci1nYXRoZXIgbGlzdCByZXByZXNlbnRpbmcgb3VyIGlucHV0IGJ1ZmZlciBhbmQgcHV0CisgKiBpdCBpbiB0aGUgcXVldWUuCisgKgorICogQ2FsbGVycyBzaG91bGQgdGFrZSBhcHByb3ByaWF0ZSBsb2Nrcy4KKyAqLworc3RhdGljIGludCBhZGRfaW5idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKLQlzZ19pbml0X29uZShzZywgaW5idWYsIFBBR0VfU0laRSk7CisJaW50IHJldDsKIAotCS8qIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhZGQgb25lIGJ1ZmZlciB0byBhbiBlbXB0eSBxdWV1ZS4gKi8KLQlpZiAoaW5fdnEtPnZxX29wcy0+YWRkX2J1Zihpbl92cSwgc2csIDAsIDEsIGluYnVmKSA8IDApCi0JCUJVRygpOwotCWluX3ZxLT52cV9vcHMtPmtpY2soaW5fdnEpOworCXNnX2luaXRfb25lKHNnLCBidWYtPmJ1ZiwgYnVmLT5zaXplKTsKKworCXJldCA9IHZxLT52cV9vcHMtPmFkZF9idWYodnEsIHNnLCAwLCAxLCBidWYpOworCXZxLT52cV9vcHMtPmtpY2sodnEpOworCXJldHVybiByZXQ7CiB9CiAKLS8qRDozNTAgZ2V0X2NoYXJzKCkgaXMgdGhlIGNhbGxiYWNrIGZyb20gdGhlIGh2Y19jb25zb2xlIGluZnJhc3RydWN0dXJlIHdoZW4KLSAqIGFuIGludGVycnVwdCBpcyByZWNlaXZlZC4KKy8qIERpc2NhcmQgYW55IHVucmVhZCBkYXRhIHRoaXMgcG9ydCBoYXMuIENhbGxlcnMgbG9ja2Vycy4gKi8KK3N0YXRpYyB2b2lkIGRpc2NhcmRfcG9ydF9kYXRhKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHJldDsKKworCXZxID0gcG9ydC0+aW5fdnE7CisJaWYgKHBvcnQtPmluYnVmKQorCQlidWYgPSBwb3J0LT5pbmJ1ZjsKKwllbHNlCisJCWJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCisJcmV0ID0gMDsKKwl3aGlsZSAoYnVmKSB7CisJCWlmIChhZGRfaW5idWYodnEsIGJ1ZikgPCAwKSB7CisJCQlyZXQrKzsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCX0KKwkJYnVmID0gdnEtPnZxX29wcy0+Z2V0X2J1Zih2cSwgJmxlbik7CisJfQorCXBvcnQtPmluYnVmID0gTlVMTDsKKwlpZiAocmV0KQorCQlkZXZfd2Fybihwb3J0LT5kZXYsICJFcnJvcnMgYWRkaW5nICVkIGJ1ZmZlcnMgYmFjayB0byB2cVxuIiwKKwkJCSByZXQpOworfQorCitzdGF0aWMgYm9vbCBwb3J0X2hhc19kYXRhKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCWlmIChwb3J0LT5pbmJ1ZikgeworCQlyZXQgPSB0cnVlOworCQlnb3RvIG91dDsKKwl9CisJcG9ydC0+aW5idWYgPSBnZXRfaW5idWYocG9ydCk7CisJaWYgKHBvcnQtPmluYnVmKSB7CisJCXJldCA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBmYWxzZTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5pbmJ1Zl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGV2ZW50LAorCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgY3BrdDsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKwlpbnQgbGVuOworCisJaWYgKCF1c2VfbXVsdGlwb3J0KHBvcnQtPnBvcnRkZXYpKQorCQlyZXR1cm4gMDsKKworCWNwa3QuaWQgPSBwb3J0LT5pZDsKKwljcGt0LmV2ZW50ID0gZXZlbnQ7CisJY3BrdC52YWx1ZSA9IHZhbHVlOworCisJdnEgPSBwb3J0LT5wb3J0ZGV2LT5jX292cTsKKworCXNnX2luaXRfb25lKHNnLCAmY3BrdCwgc2l6ZW9mKGNwa3QpKTsKKwlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgc2csIDEsIDAsICZjcGt0KSA+PSAwKSB7CisJCXZxLT52cV9vcHMtPmtpY2sodnEpOworCQl3aGlsZSAoIXZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pKQorCQkJY3B1X3JlbGF4KCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzZW5kX2J1ZihzdHJ1Y3QgcG9ydCAqcG9ydCwgdm9pZCAqaW5fYnVmLCBzaXplX3QgaW5fY291bnQpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCXN0cnVjdCB2aXJ0cXVldWUgKm91dF92cTsKKwlzc2l6ZV90IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJb3V0X3ZxID0gcG9ydC0+b3V0X3ZxOworCisJc2dfaW5pdF9vbmUoc2csIGluX2J1ZiwgaW5fY291bnQpOworCXJldCA9IG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsIGluX2J1Zik7CisKKwkvKiBUZWxsIEhvc3QgdG8gZ28hICovCisJb3V0X3ZxLT52cV9vcHMtPmtpY2sob3V0X3ZxKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWxlbiA9IDA7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKgorCSAqIFdhaXQgdGlsbCB0aGUgaG9zdCBhY2tub3dsZWRnZXMgaXQgcHVzaGVkIG91dCB0aGUgZGF0YSB3ZQorCSAqIHNlbnQuIEFsc28gZW5zdXJlIHdlIHJldHVybiB0byB1c2Vyc3BhY2UgdGhlIG51bWJlciBvZgorCSAqIGJ5dGVzIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgY29uc3VtZWQgYnkgdGhlIGhvc3QuCisJICovCisJd2hpbGUgKCFvdXRfdnEtPnZxX29wcy0+Z2V0X2J1ZihvdXRfdnEsICZsZW4pKQorCQljcHVfcmVsYXgoKTsKK2ZhaWw6CisJLyogV2UncmUgZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSB3cm90ZSAqLworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBHaXZlIG91dCB0aGUgZGF0YSB0aGF0J3MgcmVxdWVzdGVkIGZyb20gdGhlIGJ1ZmZlciB0aGF0IHdlIGhhdmUKKyAqIHF1ZXVlZCB1cC4KKyAqLworc3RhdGljIHNzaXplX3QgZmlsbF9yZWFkYnVmKHN0cnVjdCBwb3J0ICpwb3J0LCBjaGFyICpvdXRfYnVmLCBzaXplX3Qgb3V0X2NvdW50LAorCQkJICAgIGJvb2wgdG9fdXNlcikKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFvdXRfY291bnQgfHwgIXBvcnRfaGFzX2RhdGEocG9ydCkpCisJCXJldHVybiAwOworCisJYnVmID0gcG9ydC0+aW5idWY7CisJb3V0X2NvdW50ID0gbWluKG91dF9jb3VudCwgYnVmLT5sZW4gLSBidWYtPm9mZnNldCk7CisKKwlpZiAodG9fdXNlcikgeworCQlzc2l6ZV90IHJldDsKKworCQlyZXQgPSBjb3B5X3RvX3VzZXIob3V0X2J1ZiwgYnVmLT5idWYgKyBidWYtPm9mZnNldCwgb3V0X2NvdW50KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCW1lbWNweShvdXRfYnVmLCBidWYtPmJ1ZiArIGJ1Zi0+b2Zmc2V0LCBvdXRfY291bnQpOworCX0KKworCWJ1Zi0+b2Zmc2V0ICs9IG91dF9jb3VudDsKKworCWlmIChidWYtPm9mZnNldCA9PSBidWYtPmxlbikgeworCQkvKgorCQkgKiBXZSdyZSBkb25lIHVzaW5nIGFsbCB0aGUgZGF0YSBpbiB0aGlzIGJ1ZmZlci4KKwkJICogUmUtcXVldWUgc28gdGhhdCB0aGUgSG9zdCBjYW4gc2VuZCB1cyBtb3JlIGRhdGEuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCQlwb3J0LT5pbmJ1ZiA9IE5VTEw7CisKKwkJaWYgKGFkZF9pbmJ1Zihwb3J0LT5pbl92cSwgYnVmKSA8IDApCisJCQlkZXZfd2Fybihwb3J0LT5kZXYsICJmYWlsZWQgYWRkX2J1ZlxuIik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCX0KKwkvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBjb3BpZWQgKi8KKwlyZXR1cm4gb3V0X2NvdW50OworfQorCisvKiBUaGUgY29uZGl0aW9uIHRoYXQgbXVzdCBiZSB0cnVlIGZvciBwb2xsaW5nIHRvIGVuZCAqLworc3RhdGljIGJvb2wgd2FpdF9pc19vdmVyKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXJldHVybiBwb3J0X2hhc19kYXRhKHBvcnQpIHx8ICFwb3J0LT5ob3N0X2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHNzaXplX3QgcG9ydF9mb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJc3NpemVfdCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFwb3J0X2hhc19kYXRhKHBvcnQpKSB7CisJCS8qCisJCSAqIElmIG5vdGhpbmcncyBjb25uZWN0ZWQgb24gdGhlIGhvc3QganVzdCByZXR1cm4gMCBpbgorCQkgKiBjYXNlIG9mIGxpc3RfZW1wdHk7IHRoaXMgdGVsbHMgdGhlIHVzZXJzcGFjZSBhcHAKKwkJICogdGhhdCB0aGVyZSdzIG5vIGNvbm5lY3Rpb24KKwkJICovCisJCWlmICghcG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvcnQtPndhaXRxdWV1ZSwKKwkJCQkJICAgICAgIHdhaXRfaXNfb3Zlcihwb3J0KSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJLyoKKwkgKiBXZSBjb3VsZCd2ZSByZWNlaXZlZCBhIGRpc2Nvbm5lY3Rpb24gbWVzc2FnZSB3aGlsZSB3ZSB3ZXJlCisJICogd2FpdGluZyBmb3IgbW9yZSBkYXRhLgorCSAqCisJICogVGhpcyBjaGVjayBpcyBub3QgY2x1YmJlZCBpbiB0aGUgaWYoKSBzdGF0ZW1lbnQgYWJvdmUgYXMgd2UKKwkgKiBtaWdodCByZWNlaXZlIHNvbWUgZGF0YSBhcyB3ZWxsIGFzIHRoZSBob3N0IGNvdWxkIGdldAorCSAqIGRpc2Nvbm5lY3RlZCBhZnRlciB3ZSBnb3Qgd29rZW4gdXAgZnJvbSBvdXIgd2FpdC4gIFNvIHdlCisJICogcmVhbGx5IHdhbnQgdG8gZ2l2ZSBvZmYgd2hhdGV2ZXIgZGF0YSB3ZSBoYXZlIGFuZCBvbmx5IHRoZW4KKwkgKiBjaGVjayBmb3IgaG9zdF9jb25uZWN0ZWQuCisJICovCisJaWYgKCFwb3J0X2hhc19kYXRhKHBvcnQpICYmICFwb3J0LT5ob3N0X2Nvbm5lY3RlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZmlsbF9yZWFkYnVmKHBvcnQsIHVidWYsIGNvdW50LCB0cnVlKTsKK30KKworc3RhdGljIHNzaXplX3QgcG9ydF9mb3BzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwljaGFyICpidWY7CisJc3NpemVfdCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJY291bnQgPSBtaW4oKHNpemVfdCkoMzIgKiAxMDI0KSwgY291bnQpOworCisJYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBjb3VudCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfYnVmOworCX0KKworCXJldCA9IHNlbmRfYnVmKHBvcnQsIGJ1ZiwgY291bnQpOworZnJlZV9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBvcnRfZm9wc19wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXBvbGxfd2FpdChmaWxwLCAmcG9ydC0+d2FpdHF1ZXVlLCB3YWl0KTsKKworCXJldCA9IDA7CisJaWYgKHBvcnQtPmluYnVmKQorCQlyZXQgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwlpZiAocG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCXJldCB8PSBQT0xMT1VUOworCWlmICghcG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCXJldCB8PSBQT0xMSFVQOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3J0X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIGNsb3NlZCAqLworCXNlbmRfY29udHJvbF9tc2cocG9ydCwgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOLCAwKTsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCXBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCA9IGZhbHNlOworCisJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9ydF9mb3BzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNkZXYgKmNkZXYgPSBpbm9kZS0+aV9jZGV2OworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgcG9ydCwgY2Rldik7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcG9ydDsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgb3BlbmluZyBvZiBjb25zb2xlIHBvcnQgZGV2aWNlcyAtLSB0aGF0J3MgZG9uZQorCSAqIHZpYSAvZGV2L2h2YworCSAqLworCWlmIChpc19jb25zb2xlX3BvcnQocG9ydCkpCisJCXJldHVybiAtRU5YSU87CisKKwkvKiBBbGxvdyBvbmx5IG9uZSBwcm9jZXNzIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIHBvcnQgYXQgYSB0aW1lICovCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisJaWYgKHBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCkgeworCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCQlyZXR1cm4gLUVNRklMRTsKKwl9CisKKwlwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIG9wZW5lZCAqLworCXNlbmRfY29udHJvbF9tc2coZmlscC0+cHJpdmF0ZV9kYXRhLCBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU4sIDEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgZmlsZSBvcGVyYXRpb25zIHRoYXQgd2Ugc3VwcG9ydDogcHJvZ3JhbXMgaW4gdGhlIGd1ZXN0IGNhbiBvcGVuCisgKiBhIGNvbnNvbGUgZGV2aWNlLCByZWFkIGZyb20gaXQsIHdyaXRlIHRvIGl0LCBwb2xsIGZvciBkYXRhIGFuZAorICogY2xvc2UgaXQuICBUaGUgZGV2aWNlcyBhcmUgYXQKKyAqICAgL2Rldi92cG9ydDxkZXZpY2UgbnVtYmVyPnA8cG9ydCBudW1iZXI+CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgPSBwb3J0X2ZvcHNfb3BlbiwKKwkucmVhZCAgPSBwb3J0X2ZvcHNfcmVhZCwKKwkud3JpdGUgPSBwb3J0X2ZvcHNfd3JpdGUsCisJLnBvbGwgID0gcG9ydF9mb3BzX3BvbGwsCisJLnJlbGVhc2UgPSBwb3J0X2ZvcHNfcmVsZWFzZSwKK307CisKKy8qCisgKiBUaGUgcHV0X2NoYXJzKCkgY2FsbGJhY2sgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KICAqCi0gKiBNb3N0IG9mIHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUgaHZjX2NvbnNvbGUoKSBpbmZyYXN0cnVjdHVyZQotICogb25seSBhc2tzIHVzIGZvciAxNiBieXRlcyBhdCBhIHRpbWUuICBXZSBrZWVwIGluX29mZnNldCBhbmQgaW5fdXNlZCBmaWVsZHMKLSAqIGZvciBwYXJ0aWFsbHktZmlsbGVkIGJ1ZmZlcnMuICovCisgKiBXZSB0dXJuIHRoZSBjaGFyYWN0ZXJzIGludG8gYSBzY2F0dGVyLWdhdGhlciBsaXN0LCBhZGQgaXQgdG8gdGhlCisgKiBvdXRwdXQgcXVldWUgYW5kIHRoZW4ga2ljayB0aGUgSG9zdC4gIFRoZW4gd2Ugc2l0IGhlcmUgd2FpdGluZyBmb3IKKyAqIGl0IHRvIGZpbmlzaDogaW5lZmZpY2llbnQgaW4gdGhlb3J5LCBidXQgaW4gcHJhY3RpY2UKKyAqIGltcGxlbWVudGF0aW9ucyB3aWxsIGRvIGl0IGltbWVkaWF0ZWx5IChsZ3Vlc3QncyBMYXVuY2hlciBkb2VzKS4KKyAqLworc3RhdGljIGludCBwdXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92dGVybW5vKHZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoZWFybHlfcHV0X2NoYXJzKSkKKwkJcmV0dXJuIGVhcmx5X3B1dF9jaGFycyh2dGVybW5vLCBidWYsIGNvdW50KTsKKworCXJldHVybiBzZW5kX2J1Zihwb3J0LCAodm9pZCAqKWJ1ZiwgY291bnQpOworfQorCisvKgorICogZ2V0X2NoYXJzKCkgaXMgdGhlIGNhbGxiYWNrIGZyb20gdGhlIGh2Y19jb25zb2xlIGluZnJhc3RydWN0dXJlCisgKiB3aGVuIGFuIGludGVycnVwdCBpcyByZWNlaXZlZC4KKyAqCisgKiBXZSBjYWxsIG91dCB0byBmaWxsX3JlYWRidWYgdGhhdCBnZXRzIHVzIHRoZSByZXF1aXJlZCBkYXRhIGZyb20gdGhlCisgKiBidWZmZXJzIHRoYXQgYXJlIHF1ZXVlZCB1cC4KKyAqLwogc3RhdGljIGludCBnZXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogeworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92dGVybW5vKHZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKIAkvKiBJZiB3ZSBkb24ndCBoYXZlIGFuIGlucHV0IHF1ZXVlIHlldCwgd2UgY2FuJ3QgZ2V0IGlucHV0LiAqLwotCUJVR19PTighaW5fdnEpOworCUJVR19PTighcG9ydC0+aW5fdnEpOwogCi0JLyogTm8gYnVmZmVyPyAgVHJ5IHRvIGdldCBvbmUuICovCi0JaWYgKCFpbl9sZW4pIHsKLQkJaW4gPSBpbl92cS0+dnFfb3BzLT5nZXRfYnVmKGluX3ZxLCAmaW5fbGVuKTsKLQkJaWYgKCFpbikKLQkJCXJldHVybiAwOwotCX0KLQotCS8qIFlvdSB3YW50IG1vcmUgdGhhbiB3ZSBoYXZlIHRvIGdpdmU/ICBXZWxsLCB0cnkgd2FudGluZyBsZXNzISAqLwotCWlmIChpbl9sZW4gPCBjb3VudCkKLQkJY291bnQgPSBpbl9sZW47Ci0KLQkvKiBDb3B5IGFjcm9zcyB0byB0aGVpciBidWZmZXIgYW5kIGluY3JlbWVudCBvZmZzZXQuICovCi0JbWVtY3B5KGJ1ZiwgaW4sIGNvdW50KTsKLQlpbiArPSBjb3VudDsKLQlpbl9sZW4gLT0gY291bnQ7Ci0KLQkvKiBGaW5pc2hlZD8gIFJlLXJlZ2lzdGVyIGJ1ZmZlciBzbyBIb3N0IHdpbGwgdXNlIGl0IGFnYWluLiAqLwotCWlmIChpbl9sZW4gPT0gMCkKLQkJYWRkX2luYnVmKCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0vKjoqLwotCi0vKkQ6MzIwIENvbnNvbGUgZHJpdmVycyBhcmUgaW5pdGlhbGl6ZWQgdmVyeSBlYXJseSBzbyBib290IG1lc3NhZ2VzIGNhbiBnbyBvdXQsCi0gKiBzbyB3ZSBkbyB0aGluZ3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgZ2VuZXJpYyB2aXJ0aW8gaW5pdGlhbGl6YXRpb24KLSAqIG9mIHRoZSBuZXQgYW5kIGJsb2NrIGRyaXZlcnMuCi0gKgotICogQXQgdGhpcyBzdGFnZSwgdGhlIGNvbnNvbGUgaXMgb3V0cHV0LW9ubHkuICBJdCdzIHRvbyBlYXJseSB0byBzZXQgdXAgYQotICogdmlydHF1ZXVlLCBzbyB3ZSBsZXQgdGhlIGRyaXZlcnMgZG8gc29tZSBib3V0aXF1ZSBlYXJseS1vdXRwdXQgdGhpbmcuICovCi1pbnQgX19pbml0IHZpcnRpb19jb25zX2Vhcmx5X2luaXQoaW50ICgqcHV0X2NoYXJzKSh1MzIsIGNvbnN0IGNoYXIgKiwgaW50KSkKLXsKLQl2aXJ0aW9fY29ucy5wdXRfY2hhcnMgPSBwdXRfY2hhcnM7Ci0JcmV0dXJuIGh2Y19pbnN0YW50aWF0ZSgwLCAwLCAmdmlydGlvX2NvbnMpOworCXJldHVybiBmaWxsX3JlYWRidWYocG9ydCwgYnVmLCBjb3VudCwgZmFsc2UpOwogfQogCi0vKgotICogdmlydGlvIGNvbnNvbGUgY29uZmlndXJhdGlvbi4gVGhpcyBzdXBwb3J0czoKLSAqIC0gY29uc29sZSByZXNpemUKLSAqLwotc3RhdGljIHZvaWQgdmlydGNvbnNfYXBwbHlfY29uZmlnKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCByZXNpemVfY29uc29sZShzdHJ1Y3QgcG9ydCAqcG9ydCkKIHsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3Qgd2luc2l6ZSB3czsKIAotCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fQ09OU09MRV9GX1NJWkUpKSB7Ci0JCWRldi0+Y29uZmlnLT5nZXQoZGV2LAotCQkJCSBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLCBjb2xzKSwKLQkJCQkgJndzLndzX2NvbCwgc2l6ZW9mKHUxNikpOwotCQlkZXYtPmNvbmZpZy0+Z2V0KGRldiwKLQkJCQkgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgcm93cyksCi0JCQkJICZ3cy53c19yb3csIHNpemVvZih1MTYpKTsKLQkJaHZjX3Jlc2l6ZShodmMsIHdzKTsKKwl2ZGV2ID0gcG9ydC0+cG9ydGRldi0+dmRldjsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfU0laRSkpIHsKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKKwkJCQkgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsIGNvbHMpLAorCQkJCSAgJndzLndzX2NvbCwgc2l6ZW9mKHUxNikpOworCQl2ZGV2LT5jb25maWctPmdldCh2ZGV2LAorCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgcm93cyksCisJCQkJICAmd3Mud3Nfcm93LCBzaXplb2YodTE2KSk7CisJCWh2Y19yZXNpemUocG9ydC0+Y29ucy5odmMsIHdzKTsKIAl9CiB9CiAKLS8qCi0gKiB3ZSBzdXBwb3J0IG9ubHkgb25lIGNvbnNvbGUsIHRoZSBodmMgc3RydWN0IGlzIGEgZ2xvYmFsIHZhcgotICogV2Ugc2V0IHRoZSBjb25maWd1cmF0aW9uIGF0IHRoaXMgcG9pbnQsIHNpbmNlIHdlIG5vdyBoYXZlIGEgdHR5Ci0gKi8KKy8qIFdlIHNldCB0aGUgY29uZmlndXJhdGlvbiBhdCB0aGlzIHBvaW50LCBzaW5jZSB3ZSBub3cgaGF2ZSBhIHR0eSAqLwogc3RhdGljIGludCBub3RpZmllcl9hZGRfdmlvKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpCiB7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X3Z0ZXJtbm8oaHAtPnZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDE7Ci0JdmlydGNvbnNfYXBwbHlfY29uZmlnKHZkZXYpOworCXJlc2l6ZV9jb25zb2xlKHBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzMsNzkgKzcxMyw3OTcgQEAKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGh2Y19oYW5kbGVfaW5wdXQoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCisvKiBUaGUgb3BlcmF0aW9ucyBmb3IgY29uc29sZSBwb3J0cy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2X29wcyA9IHsKKwkuZ2V0X2NoYXJzID0gZ2V0X2NoYXJzLAorCS5wdXRfY2hhcnMgPSBwdXRfY2hhcnMsCisJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF92aW8sCisJLm5vdGlmaWVyX2RlbCA9IG5vdGlmaWVyX2RlbF92aW8sCisJLm5vdGlmaWVyX2hhbmd1cCA9IG5vdGlmaWVyX2RlbF92aW8sCit9OworCisvKgorICogQ29uc29sZSBkcml2ZXJzIGFyZSBpbml0aWFsaXplZCB2ZXJ5IGVhcmx5IHNvIGJvb3QgbWVzc2FnZXMgY2FuIGdvCisgKiBvdXQsIHNvIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBnZW5lcmljIHZpcnRpbworICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldCBhbmQgYmxvY2sgZHJpdmVycy4KKyAqCisgKiBBdCB0aGlzIHN0YWdlLCB0aGUgY29uc29sZSBpcyBvdXRwdXQtb25seS4gIEl0J3MgdG9vIGVhcmx5IHRvIHNldAorICogdXAgYSB2aXJ0cXVldWUsIHNvIHdlIGxldCB0aGUgZHJpdmVycyBkbyBzb21lIGJvdXRpcXVlIGVhcmx5LW91dHB1dAorICogdGhpbmcuCisgKi8KK2ludCBfX2luaXQgdmlydGlvX2NvbnNfZWFybHlfaW5pdChpbnQgKCpwdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpKQogewotCWlmIChodmNfcG9sbChodmMpKQorCWVhcmx5X3B1dF9jaGFycyA9IHB1dF9jaGFyczsKKwlyZXR1cm4gaHZjX2luc3RhbnRpYXRlKDAsIDAsICZodl9vcHMpOworfQorCitpbnQgaW5pdF9wb3J0X2NvbnNvbGUoc3RydWN0IHBvcnQgKnBvcnQpCit7CisJaW50IHJldDsKKworCS8qCisJICogVGhlIEhvc3QncyB0ZWxsaW5nIHVzIHRoaXMgcG9ydCBpcyBhIGNvbnNvbGUgcG9ydC4gIEhvb2sgaXQKKwkgKiB1cCB3aXRoIGFuIGh2YyBjb25zb2xlLgorCSAqCisJICogVG8gc2V0IHVwIGFuZCBtYW5hZ2Ugb3VyIHZpcnR1YWwgY29uc29sZSwgd2UgY2FsbAorCSAqIGh2Y19hbGxvYygpLgorCSAqCisJICogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGh2Y19hbGxvYygpIGlzIHRoZSB2aXJ0dWFsIGNvbnNvbGUKKwkgKiBudW1iZXIuICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXJhbWV0ZXIgZm9yIHRoZQorCSAqIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gKGxpa2UgaXJxIG51bWJlcikuICBXZSBjdXJyZW50bHkKKwkgKiBsZWF2ZSB0aGlzIGFzIHplcm8sIHZpcnRxdWV1ZXMgaGF2ZSBpbXBsaWNpdCBub3RpZmljYXRpb25zLgorCSAqCisJICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgInN0cnVjdCBodl9vcHMiIGNvbnRhaW5pbmcgdGhlCisJICogcHV0X2NoYXJzKCkgZ2V0X2NoYXJzKCksIG5vdGlmaWVyX2FkZCgpIGFuZCBub3RpZmllcl9kZWwoKQorCSAqIHBvaW50ZXJzLiAgVGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSBvdXRwdXQgYnVmZmVyIHNpemU6IHdlCisJICogY2FuIGRvIGFueSBzaXplLCBzbyB3ZSBwdXQgUEFHRV9TSVpFIGhlcmUuCisJICovCisJcG9ydC0+Y29ucy52dGVybW5vID0gcGRydmRhdGEubmV4dF92dGVybW5vOworCisJcG9ydC0+Y29ucy5odmMgPSBodmNfYWxsb2MocG9ydC0+Y29ucy52dGVybW5vLCAwLCAmaHZfb3BzLCBQQUdFX1NJWkUpOworCWlmIChJU19FUlIocG9ydC0+Y29ucy5odmMpKSB7CisJCXJldCA9IFBUUl9FUlIocG9ydC0+Y29ucy5odmMpOworCQlkZXZfZXJyKHBvcnQtPmRldiwKKwkJCSJlcnJvciAlZCBhbGxvY2F0aW5nIGh2YyBmb3IgcG9ydFxuIiwgcmV0KTsKKwkJcG9ydC0+Y29ucy5odmMgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKwlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwZHJ2ZGF0YS5uZXh0X3Z0ZXJtbm8rKzsKKwlsaXN0X2FkZF90YWlsKCZwb3J0LT5jb25zLmxpc3QsICZwZHJ2ZGF0YS5jb25zb2xlcyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSB0cnVlOworCisJLyogTm90aWZ5IGhvc3Qgb2YgcG9ydCBiZWluZyBvcGVuZWQgKi8KKwlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwb3J0LT5uYW1lKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfcG9ydF9uYW1lLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBvcnRfc3lzZnNfZW50cmllc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG9ydF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkJLyogcHV0IGluIGRldmljZSBkaXJlY3RvcnkgKi8KKwkuYXR0cnMgPSBwb3J0X3N5c2ZzX2VudHJpZXMsCit9OworCitzdGF0aWMgaW50IGRlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCWNoYXIgKmJ1ZjsKKwlzc2l6ZV90IHJldCwgb3V0X29mZnNldCwgb3V0X2NvdW50OworCisJb3V0X2NvdW50ID0gMTAyNDsKKwlidWYgPSBrbWFsbG9jKG91dF9jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcG9ydCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlvdXRfb2Zmc2V0ID0gMDsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCwKKwkJCSAgICAgICAibmFtZTogJXNcbiIsIHBvcnQtPm5hbWUgPyBwb3J0LT5uYW1lIDogIiIpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiZ3Vlc3RfY29ubmVjdGVkOiAlZFxuIiwgcG9ydC0+Z3Vlc3RfY29ubmVjdGVkKTsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCAtIG91dF9vZmZzZXQsCisJCQkgICAgICAgImhvc3RfY29ubmVjdGVkOiAlZFxuIiwgcG9ydC0+aG9zdF9jb25uZWN0ZWQpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiaXNfY29uc29sZTogJXNcbiIsCisJCQkgICAgICAgaXNfY29uc29sZV9wb3J0KHBvcnQpID8gInllcyIgOiAibm8iKTsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCAtIG91dF9vZmZzZXQsCisJCQkgICAgICAgImNvbnNvbGVfdnRlcm1ubzogJXVcbiIsIHBvcnQtPmNvbnMudnRlcm1ubyk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgb2ZmcCwgYnVmLCBvdXRfb2Zmc2V0KTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZGVidWdmc19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gID0gZGVidWdmc19vcGVuLAorCS5yZWFkICA9IGRlYnVnZnNfcmVhZCwKK307CisKKy8qIFJlbW92ZSBhbGwgcG9ydC1zcGVjaWZpYyBkYXRhLiAqLworc3RhdGljIGludCByZW1vdmVfcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnRkZXYtPnBvcnRzX2xvY2spOworCWxpc3RfZGVsKCZwb3J0LT5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnRkZXYtPnBvcnRzX2xvY2spOworCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkgeworCQlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwkJbGlzdF9kZWwoJnBvcnQtPmNvbnMubGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisJCWh2Y19yZW1vdmUocG9ydC0+Y29ucy5odmMpOworCX0KKwlpZiAocG9ydC0+Z3Vlc3RfY29ubmVjdGVkKQorCQlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMCk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvcnQtPmRldi0+a29iaiwgJnBvcnRfYXR0cmlidXRlX2dyb3VwKTsKKwlkZXZpY2VfZGVzdHJveShwZHJ2ZGF0YS5jbGFzcywgcG9ydC0+ZGV2LT5kZXZ0KTsKKwljZGV2X2RlbCgmcG9ydC0+Y2Rldik7CisKKwkvKiBSZW1vdmUgdW51c2VkIGRhdGEgdGhpcyBwb3J0IG1pZ2h0IGhhdmUgcmVjZWl2ZWQuICovCisJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwkvKiBSZW1vdmUgYnVmZmVycyB3ZSBxdWV1ZWQgdXAgZm9yIHRoZSBIb3N0IHRvIHNlbmQgdXMgZGF0YSBpbi4gKi8KKwl3aGlsZSAoKGJ1ZiA9IHBvcnQtPmluX3ZxLT52cV9vcHMtPmRldGFjaF91bnVzZWRfYnVmKHBvcnQtPmluX3ZxKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwlrZnJlZShwb3J0LT5uYW1lKTsKKworCWRlYnVnZnNfcmVtb3ZlKHBvcnQtPmRlYnVnZnNfZmlsZSk7CisKKwlrZnJlZShwb3J0KTsKKwlyZXR1cm4gMDsKK30KKworLyogQW55IHByaXZhdGUgbWVzc2FnZXMgdGhhdCB0aGUgSG9zdCBhbmQgR3Vlc3Qgd2FudCB0byBzaGFyZSAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NvbnRyb2xfbWVzc2FnZShzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LAorCQkJCSAgIHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb250cm9sICpjcGt0OworCXN0cnVjdCBwb3J0ICpwb3J0OworCXNpemVfdCBuYW1lX3NpemU7CisJaW50IGVycjsKKworCWNwa3QgPSAoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgKikoYnVmLT5idWYgKyBidWYtPm9mZnNldCk7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIGNwa3QtPmlkKTsKKwlpZiAoIXBvcnQpIHsKKwkJLyogTm8gdmFsaWQgaGVhZGVyIGF0IHN0YXJ0IG9mIGJ1ZmZlci4gIERyb3AgaXQuICovCisJCWRldl9kYmcoJnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCSJJbnZhbGlkIGluZGV4ICV1IGluIGNvbnRyb2wgcGFja2V0XG4iLCBjcGt0LT5pZCk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGNwa3QtPmV2ZW50KSB7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9DT05TT0xFX1BPUlQ6CisJCWlmICghY3BrdC0+dmFsdWUpCisJCQlicmVhazsKKwkJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkKKwkJCWJyZWFrOworCisJCWluaXRfcG9ydF9jb25zb2xlKHBvcnQpOworCQkvKgorCQkgKiBDb3VsZCByZW1vdmUgdGhlIHBvcnQgaGVyZSBpbiBjYXNlIGluaXQgZmFpbHMgLSBidXQKKwkJICogaGF2ZSB0byBub3RpZnkgdGhlIGhvc3QgZmlyc3QuCisJCSAqLworCQlicmVhazsKKwljYXNlIFZJUlRJT19DT05TT0xFX1JFU0laRToKKwkJaWYgKCFpc19jb25zb2xlX3BvcnQocG9ydCkpCisJCQlicmVhazsKKwkJcG9ydC0+Y29ucy5odmMtPmlycV9yZXF1ZXN0ZWQgPSAxOworCQlyZXNpemVfY29uc29sZShwb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU46CisJCXBvcnQtPmhvc3RfY29ubmVjdGVkID0gY3BrdC0+dmFsdWU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+d2FpdHF1ZXVlKTsKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX05BTUU6CisJCS8qCisJCSAqIFNraXAgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBhbmQgdGhlIGNwa3QgdG8gZ2V0IHRoZSBzaXplCisJCSAqIG9mIHRoZSBuYW1lIHRoYXQgd2FzIHNlbnQKKwkJICovCisJCW5hbWVfc2l6ZSA9IGJ1Zi0+bGVuIC0gYnVmLT5vZmZzZXQgLSBzaXplb2YoKmNwa3QpICsgMTsKKworCQlwb3J0LT5uYW1lID0ga21hbGxvYyhuYW1lX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPm5hbWUpIHsKKwkJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJCSJOb3QgZW5vdWdoIHNwYWNlIHRvIHN0b3JlIHBvcnQgbmFtZVxuIik7CisJCQlicmVhazsKKwkJfQorCQlzdHJuY3B5KHBvcnQtPm5hbWUsIGJ1Zi0+YnVmICsgYnVmLT5vZmZzZXQgKyBzaXplb2YoKmNwa3QpLAorCQkJbmFtZV9zaXplIC0gMSk7CisJCXBvcnQtPm5hbWVbbmFtZV9zaXplIC0gMV0gPSAwOworCisJCS8qCisJCSAqIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgc3lzZnMgYXR0cmlidXRlLCAnbmFtZScsCisJCSAqIGNyZWF0ZSBpdCBvbmx5IGlmIHdlIGhhdmUgYSBuYW1lIGZvciB0aGUgcG9ydC4KKwkJICovCisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+ZGV2LT5rb2JqLAorCQkJCQkgJnBvcnRfYXR0cmlidXRlX2dyb3VwKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJCSJFcnJvciAlZCBjcmVhdGluZyBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIiwKKwkJCQllcnIpOworCisJCWJyZWFrOworCWNhc2UgVklSVElPX0NPTlNPTEVfUE9SVF9SRU1PVkU6CisJCS8qCisJCSAqIEhvdCB1bnBsdWcgdGhlIHBvcnQuICBXZSBkb24ndCBkZWNyZW1lbnQgbnJfcG9ydHMKKwkJICogc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZXh0cmEgY29tcGxleGl0aWVzCisJCSAqIG9mIHVzaW5nIHRoZSBsb3dlc3QtYXZhaWxhYmxlIHBvcnQgaWQ6IFdlIGNhbiBqdXN0CisJCSAqIHBpY2sgdXAgdGhlIG5yX3BvcnRzIG51bWJlciBhcyB0aGUgaWQgYW5kIG5vdCBoYXZlCisJCSAqIHVzZXJzcGFjZSBzZW5kIGl0IHRvIHVzLiAgVGhpcyBoZWxwcyB1cyBpbiB0d28KKwkJICogd2F5czoKKwkJICoKKwkJICogLSBXZSBkb24ndCBuZWVkIHRvIGhhdmUgYSAncG9ydF9pZCcgZmllbGQgaW4gdGhlCisJCSAqICAgY29uZmlnIHNwYWNlIHdoZW4gYSBwb3J0IGlzIGhvdC1hZGRlZC4gIFRoaXMgaXMgYQorCQkgKiAgIGdvb2QgdGhpbmcgYXMgd2UgbWlnaHQgcXVldWUgdXAgbXVsdGlwbGUgaG90cGx1ZworCQkgKiAgIHJlcXVlc3RzIGlzc3VlZCBpbiBvdXIgd29ya3F1ZXVlLgorCQkgKgorCQkgKiAtIEFub3RoZXIgd2F5IHRvIGRlYWwgd2l0aCB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0bworCQkgKiAgIHVzZSBhIGJpdG1hcCBvZiB0aGUgYWN0aXZlIHBvcnRzIGFuZCBzZWxlY3QgdGhlCisJCSAqICAgbG93ZXN0IG5vbi1hY3RpdmUgcG9ydCBmcm9tIHRoYXQgbWFwLiAgVGhhdAorCQkgKiAgIGJsb2F0cyB0aGUgYWxyZWFkeSB0aWdodCBjb25maWcgc3BhY2UgYW5kIHdlCisJCSAqICAgd291bGQgZW5kIHVwIGFydGlmaWNpYWxseSBsaW1pdGluZyB0aGUKKwkJICogICBtYXguIG51bWJlciBvZiBwb3J0cyB0byBzaXplb2YoYml0bWFwKS4gIFJpZ2h0CisJCSAqICAgbm93IHdlIGNhbiBzdXBwb3J0IDJeMzIgcG9ydHMgKGFzIHRoZSBwb3J0IGlkIGlzCisJCSAqICAgc3RvcmVkIGluIGEgdTMyIHR5cGUpLgorCQkgKgorCQkgKi8KKwkJcmVtb3ZlX3BvcnQocG9ydCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY29udHJvbF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7CisJdW5zaWduZWQgaW50IGxlbjsKKworCXBvcnRkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvcnRzX2RldmljZSwgY29udHJvbF93b3JrKTsKKwl2cSA9IHBvcnRkZXYtPmNfaXZxOworCisJc3Bpbl9sb2NrKCZwb3J0ZGV2LT5jdnFfbG9jayk7CisJd2hpbGUgKChidWYgPSB2cS0+dnFfb3BzLT5nZXRfYnVmKHZxLCAmbGVuKSkpIHsKKwkJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKworCQlidWYtPmxlbiA9IGxlbjsKKwkJYnVmLT5vZmZzZXQgPSAwOworCisJCWhhbmRsZV9jb250cm9sX21lc3NhZ2UocG9ydGRldiwgYnVmKTsKKworCQlzcGluX2xvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKwkJaWYgKGFkZF9pbmJ1Zihwb3J0ZGV2LT5jX2l2cSwgYnVmKSA8IDApIHsKKwkJCWRldl93YXJuKCZwb3J0ZGV2LT52ZGV2LT5kZXYsCisJCQkJICJFcnJvciBhZGRpbmcgYnVmZmVyIHRvIHF1ZXVlXG4iKTsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgaW5faW50cihzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92cSh2cS0+dmRldi0+cHJpdiwgdnEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmluYnVmX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXBvcnQtPmluYnVmKQorCQlwb3J0LT5pbmJ1ZiA9IGdldF9pbmJ1Zihwb3J0KTsKKworCS8qCisJICogRG9uJ3QgcXVldWUgdXAgZGF0YSB3aGVuIHBvcnQgaXMgY2xvc2VkLiAgVGhpcyBjb25kaXRpb24KKwkgKiBjYW4gYmUgcmVhY2hlZCB3aGVuIGEgY29uc29sZSBwb3J0IGlzIG5vdCB5ZXQgY29ubmVjdGVkIChubworCSAqIHR0eSBpcyBzcGF3bmVkKSBhbmQgdGhlIGhvc3Qgc2VuZHMgb3V0IGRhdGEgdG8gY29uc29sZQorCSAqIHBvcnRzLiAgRm9yIGdlbmVyaWMgc2VyaWFsIHBvcnRzLCB0aGUgaG9zdCB3b24ndAorCSAqIChzaG91bGRuJ3QpIHNlbmQgZGF0YSB0aWxsIHRoZSBndWVzdCBpcyBjb25uZWN0ZWQuCisJICovCisJaWYgKCFwb3J0LT5ndWVzdF9jb25uZWN0ZWQpCisJCWRpc2NhcmRfcG9ydF9kYXRhKHBvcnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSAmJiBodmNfcG9sbChwb3J0LT5jb25zLmh2YykpCiAJCWh2Y19raWNrKCk7CiB9CiAKLS8qRDozNzAgT25jZSB3ZSdyZSBmdXJ0aGVyIGluIGJvb3QsIHdlIGdldCBwcm9iZWQgbGlrZSBhbnkgb3RoZXIgdmlydGlvIGRldmljZS4KLSAqIEF0IHRoaXMgc3RhZ2Ugd2Ugc2V0IHVwIHRoZSBvdXRwdXQgdmlydHF1ZXVlLgotICoKLSAqIFRvIHNldCB1cCBhbmQgbWFuYWdlIG91ciB2aXJ0dWFsIGNvbnNvbGUsIHdlIGNhbGwgaHZjX2FsbG9jKCkuICBTaW5jZSB3ZQotICogbmV2ZXIgcmVtb3ZlIHRoZSBjb25zb2xlIGRldmljZSB3ZSBuZXZlciBuZWVkIHRoaXMgcG9pbnRlciBhZ2Fpbi4KLSAqCi0gKiBGaW5hbGx5IHdlIHB1dCBvdXIgaW5wdXQgYnVmZmVyIGluIHRoZSBpbnB1dCBxdWV1ZSwgcmVhZHkgdG8gcmVjZWl2ZS4gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRjb25zX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBjb250cm9sX2ludHIoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiB7Ci0JdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGh2Y19oYW5kbGVfaW5wdXQsIE5VTEx9OwotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbnB1dCIsICJvdXRwdXQiIH07Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqdnFzWzJdOworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisKKwlwb3J0ZGV2ID0gdnEtPnZkZXYtPnByaXY7CisJc2NoZWR1bGVfd29yaygmcG9ydGRldi0+Y29udHJvbF93b3JrKTsKK30KKworc3RhdGljIHZvaWQgY29uZmlnX2ludHIoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKworCXBvcnRkZXYgPSB2ZGV2LT5wcml2OworCWlmICh1c2VfbXVsdGlwb3J0KHBvcnRkZXYpKSB7CisJCS8qIEhhbmRsZSBwb3J0IGhvdC1hZGQgKi8KKwkJc2NoZWR1bGVfd29yaygmcG9ydGRldi0+Y29uZmlnX3dvcmspOworCX0KKwkvKgorCSAqIFdlJ2xsIHVzZSB0aGlzIHdheSBvZiByZXNpemluZyBvbmx5IGZvciBsZWdhY3kgc3VwcG9ydC4KKwkgKiBGb3IgbmV3ZXIgdXNlcnNwYWNlIChWSVJUSU9fQ09OU09MRV9GX01VTFRQT1JUKyksIHVzZQorCSAqIGNvbnRyb2wgbWVzc2FnZXMgdG8gaW5kaWNhdGUgY29uc29sZSBzaXplIGNoYW5nZXMgc28gdGhhdAorCSAqIGl0IGNhbiBiZSBkb25lIHBlci1wb3J0CisJICovCisJcmVzaXplX2NvbnNvbGUoZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIDApKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBmaWxsX3F1ZXVlKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCBzcGlubG9ja190ICpsb2NrKQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGludCByZXQ7CiAJaW50IGVycjsKIAotCXZkZXYgPSBkZXY7CisJcmV0ID0gMDsKKwlkbyB7CisJCWJ1ZiA9IGFsbG9jX2J1ZihQQUdFX1NJWkUpOworCQlpZiAoIWJ1ZikKKwkJCWJyZWFrOwogCi0JLyogVGhpcyBpcyB0aGUgc2NyYXRjaCBwYWdlIHdlIHVzZSB0byByZWNlaXZlIGNvbnNvbGUgaW5wdXQgKi8KLQlpbmJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluYnVmKSB7CisJCXNwaW5fbG9ja19pcnEobG9jayk7CisJCWVyciA9IGFkZF9pbmJ1Zih2cSwgYnVmKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycShsb2NrKTsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCQlyZXQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworCX0gd2hpbGUgKGVyciA+IDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpCit7CisJY2hhciBkZWJ1Z2ZzX25hbWVbMTZdOworCXN0cnVjdCBwb3J0ICpwb3J0OworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCWRldl90IGRldnQ7CisJaW50IGVycjsKKworCXBvcnQgPSBrbWFsbG9jKHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghcG9ydCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JLyogRmluZCB0aGUgcXVldWVzLiAqLwotCS8qIEZJWE1FOiBUaGlzIGlzIHdoeSB3ZSB3YW50IHRvIHdlYW4gb2ZmIGh2Yzogd2UgZG8gbm90aGluZwotCSAqIHdoZW4gaW5wdXQgY29tZXMgaW4uICovCi0JZXJyID0gdmRldi0+Y29uZmlnLT5maW5kX3Zxcyh2ZGV2LCAyLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZTsKKwlwb3J0LT5wb3J0ZGV2ID0gcG9ydGRldjsKKwlwb3J0LT5pZCA9IGlkOwogCi0JaW5fdnEgPSB2cXNbMF07Ci0Jb3V0X3ZxID0gdnFzWzFdOworCXBvcnQtPm5hbWUgPSBOVUxMOworCXBvcnQtPmluYnVmID0gTlVMTDsKKwlwb3J0LT5jb25zLmh2YyA9IE5VTEw7CiAKLQkvKiBTdGFydCB1c2luZyB0aGUgbmV3IGNvbnNvbGUgb3V0cHV0LiAqLwotCXZpcnRpb19jb25zLmdldF9jaGFycyA9IGdldF9jaGFyczsKLQl2aXJ0aW9fY29ucy5wdXRfY2hhcnMgPSBwdXRfY2hhcnM7Ci0JdmlydGlvX2NvbnMubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX3ZpbzsKLQl2aXJ0aW9fY29ucy5ub3RpZmllcl9kZWwgPSBub3RpZmllcl9kZWxfdmlvOwotCXZpcnRpb19jb25zLm5vdGlmaWVyX2hhbmd1cCA9IG5vdGlmaWVyX2RlbF92aW87CisJcG9ydC0+aG9zdF9jb25uZWN0ZWQgPSBwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSBmYWxzZTsKIAotCS8qIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBodmNfYWxsb2MoKSBpcyB0aGUgdmlydHVhbCBjb25zb2xlIG51bWJlciwgc28KLQkgKiB3ZSB1c2UgemVyby4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlCi0JICogbm90aWZpY2F0aW9uIG1lY2hhbmlzbSAobGlrZSBpcnEgbnVtYmVyKS4gV2UgY3VycmVudGx5IGxlYXZlIHRoaXMKLQkgKiBhcyB6ZXJvLCB2aXJ0cXVldWVzIGhhdmUgaW1wbGljaXQgbm90aWZpY2F0aW9ucy4KLQkgKgotCSAqIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhICJzdHJ1Y3QgaHZfb3BzIiBjb250YWluaW5nIHRoZSBwdXRfY2hhcnMoKQotCSAqIGdldF9jaGFycygpLCBub3RpZmllcl9hZGQoKSBhbmQgbm90aWZpZXJfZGVsKCkgcG9pbnRlcnMuCi0JICogVGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSBvdXRwdXQgYnVmZmVyIHNpemU6IHdlIGNhbiBkbyBhbnkgc2l6ZSwKLQkgKiBzbyB3ZSBwdXQgUEFHRV9TSVpFIGhlcmUuICovCi0JaHZjID0gaHZjX2FsbG9jKDAsIDAsICZ2aXJ0aW9fY29ucywgUEFHRV9TSVpFKTsKLQlpZiAoSVNfRVJSKGh2YykpIHsKLQkJZXJyID0gUFRSX0VSUihodmMpOwotCQlnb3RvIGZyZWVfdnFzOworCXBvcnQtPmluX3ZxID0gcG9ydGRldi0+aW5fdnFzW3BvcnQtPmlkXTsKKwlwb3J0LT5vdXRfdnEgPSBwb3J0ZGV2LT5vdXRfdnFzW3BvcnQtPmlkXTsKKworCWNkZXZfaW5pdCgmcG9ydC0+Y2RldiwgJnBvcnRfZm9wcyk7CisKKwlkZXZ0ID0gTUtERVYocG9ydGRldi0+Y2hyX21ham9yLCBpZCk7CisJZXJyID0gY2Rldl9hZGQoJnBvcnQtPmNkZXYsIGRldnQsIDEpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnBvcnQtPnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCSJFcnJvciAlZCBhZGRpbmcgY2RldiBmb3IgcG9ydCAldVxuIiwgZXJyLCBpZCk7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKwlwb3J0LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBkcnZkYXRhLmNsYXNzLCAmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJCSAgZGV2dCwgcG9ydCwgInZwb3J0JXVwJXUiLAorCQkJCSAgcG9ydC0+cG9ydGRldi0+ZHJ2X2luZGV4LCBpZCk7CisJaWYgKElTX0VSUihwb3J0LT5kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIocG9ydC0+ZGV2KTsKKwkJZGV2X2VycigmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJIkVycm9yICVkIGNyZWF0aW5nIGRldmljZSBmb3IgcG9ydCAldVxuIiwKKwkJCWVyciwgaWQpOworCQlnb3RvIGZyZWVfY2RldjsKIAl9CiAKLQkvKiBSZWdpc3RlciB0aGUgaW5wdXQgYnVmZmVyIHRoZSBmaXJzdCB0aW1lLiAqLwotCWFkZF9pbmJ1ZigpOworCXNwaW5fbG9ja19pbml0KCZwb3J0LT5pbmJ1Zl9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT53YWl0cXVldWUpOworCisJLyogRmlsbCB0aGUgaW5fdnEgd2l0aCBidWZmZXJzIHNvIHRoZSBob3N0IGNhbiBzZW5kIHVzIGRhdGEuICovCisJZXJyID0gZmlsbF9xdWV1ZShwb3J0LT5pbl92cSwgJnBvcnQtPmluYnVmX2xvY2spOworCWlmICghZXJyKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBpbmJ1ZnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfZGV2aWNlOworCX0KKworCS8qCisJICogSWYgd2UncmUgbm90IHVzaW5nIG11bHRpcG9ydCBzdXBwb3J0LCB0aGlzIGhhcyB0byBiZSBhIGNvbnNvbGUgcG9ydAorCSAqLworCWlmICghdXNlX211bHRpcG9ydChwb3J0LT5wb3J0ZGV2KSkgeworCQllcnIgPSBpbml0X3BvcnRfY29uc29sZShwb3J0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9pbmJ1ZnM7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmcG9ydGRldi0+cG9ydHNfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcG9ydC0+bGlzdCwgJnBvcnQtPnBvcnRkZXYtPnBvcnRzKTsKKwlzcGluX3VubG9ja19pcnEoJnBvcnRkZXYtPnBvcnRzX2xvY2spOworCisJLyoKKwkgKiBUZWxsIHRoZSBIb3N0IHdlJ3JlIHNldCBzbyB0aGF0IGl0IGNhbiBzZW5kIHVzIHZhcmlvdXMKKwkgKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoaXMgcG9ydCAoZWcsIHBvcnQgbmFtZSwKKwkgKiBjYWNoaW5nLCB3aGV0aGVyIHRoaXMgaXMgYSBjb25zb2xlIHBvcnQsIGV0Yy4pCisJICovCisJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZLCAxKTsKKworCWlmIChwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikgeworCQkvKgorCQkgKiBGaW5hbGx5LCBjcmVhdGUgdGhlIGRlYnVnZnMgZmlsZSB0aGF0IHdlIGNhbiB1c2UgdG8KKwkJICogaW5zcGVjdCBhIHBvcnQncyBzdGF0ZSBhdCBhbnkgdGltZQorCQkgKi8KKwkJc3ByaW50ZihkZWJ1Z2ZzX25hbWUsICJ2cG9ydCV1cCV1IiwKKwkJCXBvcnQtPnBvcnRkZXYtPmRydl9pbmRleCwgaWQpOworCQlwb3J0LT5kZWJ1Z2ZzX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRlYnVnZnNfbmFtZSwgMDQ0NCwKKwkJCQkJCQkgcGRydmRhdGEuZGVidWdmc19kaXIsCisJCQkJCQkJIHBvcnQsCisJCQkJCQkJICZwb3J0X2RlYnVnZnNfb3BzKTsKKwl9CisJcmV0dXJuIDA7CisKK2ZyZWVfaW5idWZzOgorCXdoaWxlICgoYnVmID0gcG9ydC0+aW5fdnEtPnZxX29wcy0+ZGV0YWNoX3VudXNlZF9idWYocG9ydC0+aW5fdnEpKSkKKwkJZnJlZV9idWYoYnVmKTsKK2ZyZWVfZGV2aWNlOgorCWRldmljZV9kZXN0cm95KHBkcnZkYXRhLmNsYXNzLCBwb3J0LT5kZXYtPmRldnQpOworZnJlZV9jZGV2OgorCWNkZXZfZGVsKCZwb3J0LT5jZGV2KTsKK2ZyZWVfcG9ydDoKKwlrZnJlZShwb3J0KTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSB3b3JraGFuZGxlciBmb3IgY29uZmlnLXNwYWNlIHVwZGF0ZXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiBwb3J0cyBhcmUgaG90LWFkZGVkLgorICovCitzdGF0aWMgdm9pZCBjb25maWdfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnIHZpcnRjb25jb25mOworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7CisJaW50IGVycjsKKworCXBvcnRkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvcnRzX2RldmljZSwgY29uZmlnX3dvcmspOworCisJdmRldiA9IHBvcnRkZXYtPnZkZXY7CisJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKKwkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgbnJfcG9ydHMpLAorCQkJICAmdmlydGNvbmNvbmYubnJfcG9ydHMsCisJCQkgIHNpemVvZih2aXJ0Y29uY29uZi5ucl9wb3J0cykpOworCisJaWYgKHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyA9PSB2aXJ0Y29uY29uZi5ucl9wb3J0cykgeworCQkvKgorCQkgKiBQb3J0IDAgZ290IGhvdC1hZGRlZC4gIFNpbmNlIHdlIGFscmVhZHkgZGlkIGFsbCB0aGUKKwkJICogb3RoZXIgaW5pdGlhbGlzYXRpb24gZm9yIGl0LCBqdXN0IHRlbGwgdGhlIEhvc3QKKwkJICogdGhhdCB0aGUgcG9ydCBpcyByZWFkeSBpZiB3ZSBmaW5kIHRoZSBwb3J0LiAgSW4KKwkJICogY2FzZSB0aGUgcG9ydCB3YXMgaG90LXJlbW92ZWQgZWFybGllciwgd2UgY2FsbAorCQkgKiBhZGRfcG9ydCB0byBhZGQgdGhlIHBvcnQuCisJCSAqLworCQlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCQlwb3J0ID0gZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIDApOworCQlpZiAoIXBvcnQpCisJCQlhZGRfcG9ydChwb3J0ZGV2LCAwKTsKKwkJZWxzZQorCQkJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZLCAxKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodmlydGNvbmNvbmYubnJfcG9ydHMgPiBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKSB7CisJCWRldl93YXJuKCZ2ZGV2LT5kZXYsCisJCQkgIk1vcmUgcG9ydHMgc3BlY2lmaWVkICgldSkgdGhhbiBhbGxvd2VkICgldSkiLAorCQkJIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyArIDEsCisJCQkgcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cyk7CisJCXJldHVybjsKKwl9CisJaWYgKHZpcnRjb25jb25mLm5yX3BvcnRzIDwgcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKQorCQlyZXR1cm47CisKKwkvKiBIb3QtYWRkIHBvcnRzICovCisJd2hpbGUgKHZpcnRjb25jb25mLm5yX3BvcnRzIC0gcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKSB7CisJCWVyciA9IGFkZF9wb3J0KHBvcnRkZXYsIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKys7CisJfQorfQorCitzdGF0aWMgaW50IGluaXRfdnFzKHN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXYpCit7CisJdnFfY2FsbGJhY2tfdCAqKmlvX2NhbGxiYWNrczsKKwljaGFyICoqaW9fbmFtZXM7CisJc3RydWN0IHZpcnRxdWV1ZSAqKnZxczsKKwl1MzIgaSwgaiwgbnJfcG9ydHMsIG5yX3F1ZXVlczsKKwlpbnQgZXJyOworCisJbnJfcG9ydHMgPSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzOworCW5yX3F1ZXVlcyA9IHVzZV9tdWx0aXBvcnQocG9ydGRldikgPyAobnJfcG9ydHMgKyAxKSAqIDIgOiAyOworCisJdnFzID0ga21hbGxvYyhucl9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IHZpcnRxdWV1ZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlpb19jYWxsYmFja3MgPSBrbWFsbG9jKG5yX3F1ZXVlcyAqIHNpemVvZih2cV9jYWxsYmFja190ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvX2NhbGxiYWNrcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfdnFzOworCX0KKwlpb19uYW1lcyA9IGttYWxsb2MobnJfcXVldWVzICogc2l6ZW9mKGNoYXIgKiksIEdGUF9LRVJORUwpOworCWlmICghaW9fbmFtZXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2NhbGxiYWNrczsKKwl9CisJcG9ydGRldi0+aW5fdnFzID0ga21hbGxvYyhucl9wb3J0cyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0ZGV2LT5pbl92cXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25hbWVzOworCX0KKwlwb3J0ZGV2LT5vdXRfdnFzID0ga21hbGxvYyhucl9wb3J0cyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcG9ydGRldi0+b3V0X3ZxcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfaW52cXM7CisJfQorCisJLyoKKwkgKiBGb3IgYmFja3dhcmQgY29tcGF0IChuZXdlciBob3N0IGJ1dCBvbGRlciBndWVzdCksIHRoZSBob3N0CisJICogc3Bhd25zIGEgY29uc29sZSBwb3J0IGZpcnN0IGFuZCBhbHNvIGluaXRzIHRoZSB2cXMgZm9yIHBvcnQKKwkgKiAwIGJlZm9yZSBvdGhlcnMuCisJICovCisJaiA9IDA7CisJaW9fY2FsbGJhY2tzW2pdID0gaW5faW50cjsKKwlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwlpb19uYW1lc1tqXSA9ICJpbnB1dCI7CisJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CisJaiArPSAyOworCisJaWYgKHVzZV9tdWx0aXBvcnQocG9ydGRldikpIHsKKwkJaW9fY2FsbGJhY2tzW2pdID0gY29udHJvbF9pbnRyOworCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJaW9fbmFtZXNbal0gPSAiY29udHJvbC1pIjsKKwkJaW9fbmFtZXNbaiArIDFdID0gImNvbnRyb2wtbyI7CisKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKKwkJCWogKz0gMjsKKwkJCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7CisJCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJCWlvX25hbWVzW2pdID0gImlucHV0IjsKKwkJCWlvX25hbWVzW2ogKyAxXSA9ICJvdXRwdXQiOworCQl9CisJfQorCS8qIEZpbmQgdGhlIHF1ZXVlcy4gKi8KKwllcnIgPSBwb3J0ZGV2LT52ZGV2LT5jb25maWctPmZpbmRfdnFzKHBvcnRkZXYtPnZkZXYsIG5yX3F1ZXVlcywgdnFzLAorCQkJCQkgICAgICBpb19jYWxsYmFja3MsCisJCQkJCSAgICAgIChjb25zdCBjaGFyICoqKWlvX25hbWVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfb3V0dnFzOworCisJaiA9IDA7CisJcG9ydGRldi0+aW5fdnFzWzBdID0gdnFzWzBdOworCXBvcnRkZXYtPm91dF92cXNbMF0gPSB2cXNbMV07CisJaiArPSAyOworCWlmICh1c2VfbXVsdGlwb3J0KHBvcnRkZXYpKSB7CisJCXBvcnRkZXYtPmNfaXZxID0gdnFzW2pdOworCQlwb3J0ZGV2LT5jX292cSA9IHZxc1tqICsgMV07CisKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKKwkJCWogKz0gMjsKKwkJCXBvcnRkZXYtPmluX3Zxc1tpXSA9IHZxc1tqXTsKKwkJCXBvcnRkZXYtPm91dF92cXNbaV0gPSB2cXNbaiArIDFdOworCQl9CisJfQorCWtmcmVlKGlvX2NhbGxiYWNrcyk7CisJa2ZyZWUoaW9fbmFtZXMpOworCWtmcmVlKHZxcyk7CisKKwlyZXR1cm4gMDsKKworZnJlZV9uYW1lczoKKwlrZnJlZShpb19uYW1lcyk7CitmcmVlX2NhbGxiYWNrczoKKwlrZnJlZShpb19jYWxsYmFja3MpOworZnJlZV9vdXR2cXM6CisJa2ZyZWUocG9ydGRldi0+b3V0X3Zxcyk7CitmcmVlX2ludnFzOgorCWtmcmVlKHBvcnRkZXYtPmluX3Zxcyk7CitmcmVlX3ZxczoKKwlrZnJlZSh2cXMpOworZmFpbDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb3J0ZGV2X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCisvKgorICogT25jZSB3ZSdyZSBmdXJ0aGVyIGluIGJvb3QsIHdlIGdldCBwcm9iZWQgbGlrZSBhbnkgb3RoZXIgdmlydGlvCisgKiBkZXZpY2UuCisgKgorICogSWYgdGhlIGhvc3QgYWxzbyBzdXBwb3J0cyBtdWx0aXBsZSBjb25zb2xlIHBvcnRzLCB3ZSBjaGVjayB0aGUKKyAqIGNvbmZpZyBzcGFjZSB0byBzZWUgaG93IG1hbnkgcG9ydHMgdGhlIGhvc3QgaGFzIHNwYXduZWQuICBXZQorICogaW5pdGlhbGl6ZSBlYWNoIHBvcnQgZm91bmQuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRjb25zX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJdTMyIGk7CisJaW50IGVycjsKKwlib29sIG11bHRpcG9ydDsKKworCXBvcnRkZXYgPSBrbWFsbG9jKHNpemVvZigqcG9ydGRldiksIEdGUF9LRVJORUwpOworCWlmICghcG9ydGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogQXR0YWNoIHRoaXMgcG9ydGRldiB0byB0aGlzIHZpcnRpb19kZXZpY2UsIGFuZCB2aWNlLXZlcnNhLiAqLworCXBvcnRkZXYtPnZkZXYgPSB2ZGV2OworCXZkZXYtPnByaXYgPSBwb3J0ZGV2OworCisJc3Bpbl9sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisJcG9ydGRldi0+ZHJ2X2luZGV4ID0gcGRydmRhdGEuaW5kZXgrKzsKKwlzcGluX3VubG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOworCisJcG9ydGRldi0+Y2hyX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJ2aXJ0aW8tcG9ydHNkZXYiLAorCQkJCQkgICAgICZwb3J0ZGV2X2ZvcHMpOworCWlmIChwb3J0ZGV2LT5jaHJfbWFqb3IgPCAwKSB7CisJCWRldl9lcnIoJnZkZXYtPmRldiwKKwkJCSJFcnJvciAlZCByZWdpc3RlcmluZyBjaHJkZXYgZm9yIGRldmljZSAldVxuIiwKKwkJCXBvcnRkZXYtPmNocl9tYWpvciwgcG9ydGRldi0+ZHJ2X2luZGV4KTsKKwkJZXJyID0gcG9ydGRldi0+Y2hyX21ham9yOworCQlnb3RvIGZyZWU7CisJfQorCisJbXVsdGlwb3J0ID0gZmFsc2U7CisJcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID0gMTsKKwlwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzID0gMTsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUKSkgeworCQltdWx0aXBvcnQgPSB0cnVlOworCQl2ZGV2LT5mZWF0dXJlc1swXSB8PSAxIDw8IFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUOworCisJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsCisJCQkJCQkgbnJfcG9ydHMpLAorCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cywKKwkJCQkgIHNpemVvZihwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMpKTsKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywKKwkJCQkJCSBtYXhfbnJfcG9ydHMpLAorCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCisJCQkJICBzaXplb2YocG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykpOworCQlpZiAocG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID4gcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykgeworCQkJZGV2X3dhcm4oJnZkZXYtPmRldiwKKwkJCQkgIk1vcmUgcG9ydHMgKCV1KSBzcGVjaWZpZWQgdGhhbiBhbGxvd2VkICgldSkuIFdpbGwgaW5pdCAldSBwb3J0cy4iLAorCQkJCSBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMpOworCisJCQlwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMgPSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzOworCQl9CisJfQorCisJLyogTGV0IHRoZSBIb3N0IGtub3cgd2Ugc3VwcG9ydCBtdWx0aXBsZSBwb3J0cy4qLworCXZkZXYtPmNvbmZpZy0+ZmluYWxpemVfZmVhdHVyZXModmRldik7CisKKwllcnIgPSBpbml0X3Zxcyhwb3J0ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJFcnJvciAlZCBpbml0aWFsaXppbmcgdnFzXG4iLCBlcnIpOworCQlnb3RvIGZyZWVfY2hyZGV2OworCX0KKworCXNwaW5fbG9ja19pbml0KCZwb3J0ZGV2LT5wb3J0c19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcG9ydGRldi0+cG9ydHMpOworCisJaWYgKG11bHRpcG9ydCkgeworCQlzcGluX2xvY2tfaW5pdCgmcG9ydGRldi0+Y3ZxX2xvY2spOworCQlJTklUX1dPUksoJnBvcnRkZXYtPmNvbnRyb2xfd29yaywgJmNvbnRyb2xfd29ya19oYW5kbGVyKTsKKwkJSU5JVF9XT1JLKCZwb3J0ZGV2LT5jb25maWdfd29yaywgJmNvbmZpZ193b3JrX2hhbmRsZXIpOworCisJCWVyciA9IGZpbGxfcXVldWUocG9ydGRldi0+Y19pdnEsICZwb3J0ZGV2LT5jdnFfbG9jayk7CisJCWlmICghZXJyKSB7CisJCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsCisJCQkJIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVycyBmb3IgY29udHJvbCBxdWV1ZVxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX3ZxczsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHM7IGkrKykKKwkJYWRkX3BvcnQocG9ydGRldiwgaSk7CisKKwkvKiBTdGFydCB1c2luZyB0aGUgbmV3IGNvbnNvbGUgb3V0cHV0LiAqLworCWVhcmx5X3B1dF9jaGFycyA9IE5VTEw7CiAJcmV0dXJuIDA7CiAKIGZyZWVfdnFzOgogCXZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2ZGV2KTsKKwlrZnJlZShwb3J0ZGV2LT5pbl92cXMpOworCWtmcmVlKHBvcnRkZXYtPm91dF92cXMpOworZnJlZV9jaHJkZXY6CisJdW5yZWdpc3Rlcl9jaHJkZXYocG9ydGRldi0+Y2hyX21ham9yLCAidmlydGlvLXBvcnRzZGV2Iik7CiBmcmVlOgotCWtmcmVlKGluYnVmKTsKKwlrZnJlZShwb3J0ZGV2KTsKIGZhaWw6CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdmlydGNvbnNfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHBvcnQgKnBvcnQsICpwb3J0MjsKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJcG9ydGRldiA9IHZkZXYtPnByaXY7CisKKwljYW5jZWxfd29ya19zeW5jKCZwb3J0ZGV2LT5jb250cm9sX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnBvcnRkZXYtPmNvbmZpZ193b3JrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwb3J0MiwgJnBvcnRkZXYtPnBvcnRzLCBsaXN0KQorCQlyZW1vdmVfcG9ydChwb3J0KTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KHBvcnRkZXYtPmNocl9tYWpvciwgInZpcnRpby1wb3J0c2RldiIpOworCisJd2hpbGUgKChidWYgPSBwb3J0ZGV2LT5jX2l2cS0+dnFfb3BzLT5nZXRfYnVmKHBvcnRkZXYtPmNfaXZxLCAmbGVuKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwl3aGlsZSAoKGJ1ZiA9IHBvcnRkZXYtPmNfaXZxLT52cV9vcHMtPmRldGFjaF91bnVzZWRfYnVmKHBvcnRkZXYtPmNfaXZxKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwl2ZGV2LT5jb25maWctPmRlbF92cXModmRldik7CisJa2ZyZWUocG9ydGRldi0+aW5fdnFzKTsKKwlrZnJlZShwb3J0ZGV2LT5vdXRfdnFzKTsKKworCWtmcmVlKHBvcnRkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFZJUlRJT19JRF9DT05TT0xFLCBWSVJUSU9fREVWX0FOWV9JRCB9LAogCXsgMCB9LApAQCAtMjUzLDYgKzE1MTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0NPTlNPTEVfRl9TSVpFLAorCVZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JULAogfTsKIAogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19jb25zb2xlID0gewpAQCAtMjYyLDE0ICsxNTIxLDQxIEBACiAJLmRyaXZlci5vd25lciA9CVRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5wcm9iZSA9CXZpcnRjb25zX3Byb2JlLAotCS5jb25maWdfY2hhbmdlZCA9IHZpcnRjb25zX2FwcGx5X2NvbmZpZywKKwkucmVtb3ZlID0JdmlydGNvbnNfcmVtb3ZlLAorCS5jb25maWdfY2hhbmdlZCA9IGNvbmZpZ19pbnRyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKKwlwZHJ2ZGF0YS5jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZpcnRpby1wb3J0cyIpOworCWlmIChJU19FUlIocGRydmRhdGEuY2xhc3MpKSB7CisJCWVyciA9IFBUUl9FUlIocGRydmRhdGEuY2xhc3MpOworCQlwcl9lcnIoIkVycm9yICVkIGNyZWF0aW5nIHZpcnRpby1wb3J0cyBjbGFzc1xuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidmlydGlvLXBvcnRzIiwgTlVMTCk7CisJaWYgKCFwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikgeworCQlwcl93YXJuaW5nKCJFcnJvciAlbGQgY3JlYXRpbmcgZGVidWdmcyBkaXIgZm9yIHZpcnRpby1wb3J0c1xuIiwKKwkJCSAgIFBUUl9FUlIocGRydmRhdGEuZGVidWdmc19kaXIpKTsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJnBkcnZkYXRhLmNvbnNvbGVzKTsKKwogCXJldHVybiByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fY29uc29sZSk7CiB9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJdW5yZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fY29uc29sZSk7CisKKwljbGFzc19kZXN0cm95KHBkcnZkYXRhLmNsYXNzKTsKKwlpZiAocGRydmRhdGEuZGVidWdmc19kaXIpCisJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwZHJ2ZGF0YS5kZWJ1Z2ZzX2Rpcik7Cit9CiBtb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHZpcnRpbywgaWRfdGFibGUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJWaXJ0aW8gY29uc29sZSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCmluZGV4IDk5NGUxYTUuLjhiMjQ3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgKiB2bWVfc2NjX2luaXQoKSBhbmQgc3VwcG9ydCBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBzY2NfaW5pdF9kcml2ZXJzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzY2NfaW5pdF9kcml2ZXJzKHZvaWQpCiB7CiAJaW50IGVycm9yOwogCkBAIC0xNzIsNyArMTcyLDcgQEAKIC8qIHBvcnRzW10gYXJyYXkgaXMgaW5kZXhlZCBieSBsaW5lIG5vIChpLmUuIFswXSBmb3IgdHR5UzAsIFsxXSBmb3IgdHR5UzEpLgogICovCiAKLXN0YXRpYyB2b2lkIHNjY19pbml0X3BvcnRzdHJ1Y3RzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc2NjX2luaXRfcG9ydHN0cnVjdHModm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX01WTUUxNDdfU0NDCi1zdGF0aWMgaW50IG12bWUxNDdfc2NjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG12bWUxNDdfc2NjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGVycm9yOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIAogI2lmZGVmIENPTkZJR19NVk1FMTYyX1NDQwotc3RhdGljIGludCBtdm1lMTYyX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtdm1lMTYyX3NjY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHNjY19wb3J0ICpwb3J0OwogCWludCBlcnJvcjsKQEAgLTQwNCw3ICs0MDQsNyBAQAogCiAKICNpZmRlZiBDT05GSUdfQlZNRTYwMDBfU0NDCi1zdGF0aWMgaW50IGJ2bWU2MDAwX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidm1lNjAwMF9zY2NfaW5pdCh2b2lkKQogewogCXN0cnVjdCBzY2NfcG9ydCAqcG9ydDsKIAlpbnQgZXJyb3I7CkBAIC01MDMsNyArNTAzLDcgQEAKICNlbmRpZgogCiAKLXN0YXRpYyBpbnQgdm1lX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB2bWVfc2NjX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzID0gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9jczU1MzUtY2xvY2tldnQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3M1NTM1LWNsb2NrZXZ0LmMKaW5kZXggMjdkMjBmYS4uYjMxNGE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9jczU1MzUtY2xvY2tldnQuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2NzNTUzNS1jbG9ja2V2dC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUgImNzNTUzNS1jbG9ja2V2dCIKIAotc3RhdGljIGludCB0aW1lcl9pcnEgPSBDT05GSUdfQ1M1NTM1X01GR1BUX0RFRkFVTFRfSVJROworc3RhdGljIGludCB0aW1lcl9pcnE7CiBtb2R1bGVfcGFyYW1fbmFtZWQoaXJxLCB0aW1lcl9pcnEsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIldoaWNoIElSUSB0byB1c2UgZm9yIHRoZSBjbG9jayBzb3VyY2UgTUZHUFQgdGlja3MuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCmluZGV4IDZiM2UwYzIuLjZmZTRmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpAQCAtNjAzLDE4ICs2MDMsMTMgQEAKIAlwLT5pcnFhY3Rpb24uaGFuZGxlciA9IHNoX2NtdF9pbnRlcnJ1cHQ7CiAJcC0+aXJxYWN0aW9uLmRldl9pZCA9IHA7CiAJcC0+aXJxYWN0aW9uLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEw7Ci0JcmV0ID0gc2V0dXBfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoInNoX2NtdDogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOwotCQlnb3RvIGVycjE7Ci0JfQogCiAJLyogZ2V0IGhvbGQgb2YgY2xvY2sgKi8KIAlwLT5jbGsgPSBjbGtfZ2V0KCZwLT5wZGV2LT5kZXYsIGNmZy0+Y2xrKTsKIAlpZiAoSVNfRVJSKHAtPmNsaykpIHsKIAkJcHJfZXJyKCJzaF9jbXQ6IGNhbm5vdCBnZXQgY2xvY2sgXCIlc1wiXG4iLCBjZmctPmNsayk7CiAJCXJldCA9IFBUUl9FUlIocC0+Y2xrKTsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjE7CiAJfQogCiAJaWYgKHJlc291cmNlX3NpemUocmVzKSA9PSA2KSB7CkBAIC02MjcsMTQgKzYyMiwyNSBAQAogCQlwLT5jbGVhcl9iaXRzID0gfjB4YzAwMDsKIAl9CiAKLQlyZXR1cm4gc2hfY210X3JlZ2lzdGVyKHAsIGNmZy0+bmFtZSwKLQkJCSAgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nLAotCQkJICAgICAgIGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKTsKLSBlcnIyOgotCXJlbW92ZV9pcnEoaXJxLCAmcC0+aXJxYWN0aW9uKTsKLSBlcnIxOgorCXJldCA9IHNoX2NtdF9yZWdpc3RlcihwLCBjZmctPm5hbWUsCisJCQkgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nLAorCQkJICAgICAgY2ZnLT5jbG9ja3NvdXJjZV9yYXRpbmcpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycjE7CisJfQorCisJcmV0ID0gc2V0dXBfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInNoX2NtdDogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOworCQlnb3RvIGVycjE7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjE6CiAJaW91bm1hcChwLT5tYXBiYXNlKTsKLSBlcnIwOgorZXJyMDoKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX210dTIuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfbXR1Mi5jCmluZGV4IDk3M2U3MTQuLjRjOGE3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfbXR1Mi5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfbXR1Mi5jCkBAIC0yMjEsMTUgKzIyMSwxNSBAQAogCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAJY2VkLT5zZXRfbW9kZSA9IHNoX210dTJfY2xvY2tfZXZlbnRfbW9kZTsKIAorCXByX2luZm8oInNoX210dTI6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKKwogCXJldCA9IHNldHVwX2lycShwLT5pcnFhY3Rpb24uaXJxLCAmcC0+aXJxYWN0aW9uKTsKIAlpZiAocmV0KSB7CiAJCXByX2Vycigic2hfbXR1MjogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAogCQkgICAgICAgcC0+aXJxYWN0aW9uLmlycSk7CiAJCXJldHVybjsKIAl9Ci0KLQlwcl9pbmZvKCJzaF9tdHUyOiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7Ci0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfbXR1Ml9yZWdpc3RlcihzdHJ1Y3Qgc2hfbXR1Ml9wcml2ICpwLCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKaW5kZXggOTNjMjMyMi4uOTYxZjViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCkBAIC0zMjMsMTUgKzMyMywxNSBAQAogCWNlZC0+c2V0X25leHRfZXZlbnQgPSBzaF90bXVfY2xvY2tfZXZlbnRfbmV4dDsKIAljZWQtPnNldF9tb2RlID0gc2hfdG11X2Nsb2NrX2V2ZW50X21vZGU7CiAKKwlwcl9pbmZvKCJzaF90bXU6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKKwogCXJldCA9IHNldHVwX2lycShwLT5pcnFhY3Rpb24uaXJxLCAmcC0+aXJxYWN0aW9uKTsKIAlpZiAocmV0KSB7CiAJCXByX2Vycigic2hfdG11OiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsCiAJCSAgICAgICBwLT5pcnFhY3Rpb24uaXJxKTsKIAkJcmV0dXJuOwogCX0KLQotCXByX2luZm8oInNoX3RtdTogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOwotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOwogfQogCiBzdGF0aWMgaW50IHNoX3RtdV9yZWdpc3RlcihzdHJ1Y3Qgc2hfdG11X3ByaXYgKnAsIGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCmluZGV4IGYwNjAyNDYuLjUzN2MyOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCkBAIC0zNiwxNyArMzYsNiBAQAogTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgY29ubmVjdG9yLiIpOwogCi1zdGF0aWMgdTMyIGNuX2lkeCA9IENOX0lEWF9DT05ORUNUT1I7Ci1zdGF0aWMgdTMyIGNuX3ZhbCA9IENOX1ZBTF9DT05ORUNUT1I7Ci0KLW1vZHVsZV9wYXJhbShjbl9pZHgsIHVpbnQsIDApOwotbW9kdWxlX3BhcmFtKGNuX3ZhbCwgdWludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNuX2lkeCwgIkNvbm5lY3RvcidzIG1haW4gZGV2aWNlIGlkeC4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoY25fdmFsLCAiQ29ubmVjdG9yJ3MgbWFpbiBkZXZpY2UgdmFsLiIpOwotCi1zdGF0aWMgREVGSU5FX01VVEVYKG5vdGlmeV9sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQobm90aWZ5X2xpc3QpOwotCiBzdGF0aWMgc3RydWN0IGNuX2RldiBjZGV2OwogCiBzdGF0aWMgaW50IGNuX2FscmVhZHlfaW5pdGlhbGl6ZWQ7CkBAIC0yMTAsNTQgKzE5OSw2IEBACiB9CiAKIC8qCi0gKiBOb3RpZmljYXRpb24gcm91dGluZy4KLSAqCi0gKiBHZXRzIGlkIGFuZCBjaGVja3MgaWYgdGhlcmUgYXJlIG5vdGlmaWNhdGlvbiByZXF1ZXN0IGZvciBpdCdzIGlkeAotICogYW5kIHZhbC4gIElmIHRoZXJlIGFyZSBzdWNoIHJlcXVlc3RzIG5vdGlmeSB0aGUgbGlzdGVuZXJzIHdpdGggdGhlCi0gKiBnaXZlbiBub3RpZnkgZXZlbnQuCi0gKgotICovCi1zdGF0aWMgdm9pZCBjbl9ub3RpZnkoc3RydWN0IGNiX2lkICppZCwgdTMyIG5vdGlmeV9ldmVudCkKLXsKLQlzdHJ1Y3QgY25fY3RsX2VudHJ5ICplbnQ7Ci0KLQltdXRleF9sb2NrKCZub3RpZnlfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsICZub3RpZnlfbGlzdCwgbm90aWZ5X2VudHJ5KSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqcmVxOwotCQlzdHJ1Y3QgY25fY3RsX21zZyAqY3RsID0gZW50LT5tc2c7Ci0JCWludCBpZHhfZm91bmQsIHZhbF9mb3VuZDsKLQotCQlpZHhfZm91bmQgPSB2YWxfZm91bmQgPSAwOwotCi0JCXJlcSA9IChzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqKWN0bC0+ZGF0YTsKLQkJZm9yIChpID0gMDsgaSA8IGN0bC0+aWR4X25vdGlmeV9udW07ICsraSwgKytyZXEpIHsKLQkJCWlmIChpZC0+aWR4ID49IHJlcS0+Zmlyc3QgJiYKLQkJCQkJaWQtPmlkeCA8IHJlcS0+Zmlyc3QgKyByZXEtPnJhbmdlKSB7Ci0JCQkJaWR4X2ZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCBjdGwtPnZhbF9ub3RpZnlfbnVtOyArK2ksICsrcmVxKSB7Ci0JCQlpZiAoaWQtPnZhbCA+PSByZXEtPmZpcnN0ICYmCi0JCQkJCWlkLT52YWwgPCByZXEtPmZpcnN0ICsgcmVxLT5yYW5nZSkgewotCQkJCXZhbF9mb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoaWR4X2ZvdW5kICYmIHZhbF9mb3VuZCkgewotCQkJc3RydWN0IGNuX21zZyBtID0geyAuYWNrID0gbm90aWZ5X2V2ZW50LCB9OwotCi0JCQltZW1jcHkoJm0uaWQsIGlkLCBzaXplb2YobS5pZCkpOwotCQkJY25fbmV0bGlua19zZW5kKCZtLCBjdGwtPmdyb3VwLCBHRlBfS0VSTkVMKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJm5vdGlmeV9sb2NrKTsKLX0KLQotLyoKICAqIENhbGxiYWNrIGFkZCByb3V0aW5nIC0gYWRkcyBjYWxsYmFjayB3aXRoIGdpdmVuIElEIGFuZCBuYW1lLgogICogSWYgdGhlcmUgaXMgcmVnaXN0ZXJlZCBjYWxsYmFjayB3aXRoIHRoZSBzYW1lIElEIGl0IHdpbGwgbm90IGJlIGFkZGVkLgogICoKQEAgLTI3Niw4ICsyMTcsNiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQljbl9ub3RpZnkoaWQsIDApOwotCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjbl9hZGRfY2FsbGJhY2spOwpAQCAtMjk1LDExMSArMjM0LDkgQEAKIAlzdHJ1Y3QgY25fZGV2ICpkZXYgPSAmY2RldjsKIAogCWNuX3F1ZXVlX2RlbF9jYWxsYmFjayhkZXYtPmNiZGV2LCBpZCk7Ci0JY25fbm90aWZ5KGlkLCAxKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNuX2RlbF9jYWxsYmFjayk7CiAKLS8qCi0gKiBDaGVja3MgdHdvIGNvbm5lY3RvcidzIGNvbnRyb2wgbWVzc2FnZXMgdG8gYmUgdGhlIHNhbWUuCi0gKiBSZXR1cm5zIDEgaWYgdGhleSBhcmUgdGhlIHNhbWUgb3IgaWYgdGhlIGZpcnN0IG9uZSBpcyBjb3JydXB0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgY25fY3RsX21zZ19lcXVhbHMoc3RydWN0IGNuX2N0bF9tc2cgKm0xLCBzdHJ1Y3QgY25fY3RsX21zZyAqbTIpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGNuX25vdGlmeV9yZXEgKnJlcTEsICpyZXEyOwotCi0JaWYgKG0xLT5pZHhfbm90aWZ5X251bSAhPSBtMi0+aWR4X25vdGlmeV9udW0pCi0JCXJldHVybiAwOwotCi0JaWYgKG0xLT52YWxfbm90aWZ5X251bSAhPSBtMi0+dmFsX25vdGlmeV9udW0pCi0JCXJldHVybiAwOwotCi0JaWYgKG0xLT5sZW4gIT0gbTItPmxlbikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoKG0xLT5pZHhfbm90aWZ5X251bSArIG0xLT52YWxfbm90aWZ5X251bSkgKiBzaXplb2YoKnJlcTEpICE9Ci0JICAgIG0xLT5sZW4pCi0JCXJldHVybiAxOwotCi0JcmVxMSA9IChzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqKW0xLT5kYXRhOwotCXJlcTIgPSAoc3RydWN0IGNuX25vdGlmeV9yZXEgKiltMi0+ZGF0YTsKLQotCWZvciAoaSA9IDA7IGkgPCBtMS0+aWR4X25vdGlmeV9udW07ICsraSkgewotCQlpZiAocmVxMS0+Zmlyc3QgIT0gcmVxMi0+Zmlyc3QgfHwgcmVxMS0+cmFuZ2UgIT0gcmVxMi0+cmFuZ2UpCi0JCQlyZXR1cm4gMDsKLQkJcmVxMSsrOwotCQlyZXEyKys7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG0xLT52YWxfbm90aWZ5X251bTsgKytpKSB7Ci0JCWlmIChyZXExLT5maXJzdCAhPSByZXEyLT5maXJzdCB8fCByZXExLT5yYW5nZSAhPSByZXEyLT5yYW5nZSkKLQkJCXJldHVybiAwOwotCQlyZXExKys7Ci0JCXJlcTIrKzsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIE1haW4gY29ubmVjdG9yIGRldmljZSdzIGNhbGxiYWNrLgotICoKLSAqIFVzZWQgZm9yIG5vdGlmaWNhdGlvbiBvZiBhIHJlcXVlc3QncyBwcm9jZXNzaW5nLgotICovCi1zdGF0aWMgdm9pZCBjbl9jYWxsYmFjayhzdHJ1Y3QgY25fbXNnICptc2csIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqbnNwKQotewotCXN0cnVjdCBjbl9jdGxfbXNnICpjdGw7Ci0Jc3RydWN0IGNuX2N0bF9lbnRyeSAqZW50OwotCXUzMiBzaXplOwotCi0JaWYgKG1zZy0+bGVuIDwgc2l6ZW9mKCpjdGwpKQotCQlyZXR1cm47Ci0KLQljdGwgPSAoc3RydWN0IGNuX2N0bF9tc2cgKiltc2ctPmRhdGE7Ci0KLQlzaXplID0gKHNpemVvZigqY3RsKSArICgoY3RsLT5pZHhfbm90aWZ5X251bSArCi0JCQkJIGN0bC0+dmFsX25vdGlmeV9udW0pICoKLQkJCQlzaXplb2Yoc3RydWN0IGNuX25vdGlmeV9yZXEpKSk7Ci0KLQlpZiAobXNnLT5sZW4gIT0gc2l6ZSkKLQkJcmV0dXJuOwotCi0JaWYgKGN0bC0+bGVuICsgc2l6ZW9mKCpjdGwpICE9IG1zZy0+bGVuKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFJlbW92ZSBub3RpZmljYXRpb24uCi0JICovCi0JaWYgKGN0bC0+Z3JvdXAgPT0gMCkgewotCQlzdHJ1Y3QgY25fY3RsX2VudHJ5ICpuOwotCi0JCW11dGV4X2xvY2soJm5vdGlmeV9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudCwgbiwgJm5vdGlmeV9saXN0LCBub3RpZnlfZW50cnkpIHsKLQkJCWlmIChjbl9jdGxfbXNnX2VxdWFscyhlbnQtPm1zZywgY3RsKSkgewotCQkJCWxpc3RfZGVsKCZlbnQtPm5vdGlmeV9lbnRyeSk7Ci0JCQkJa2ZyZWUoZW50KTsKLQkJCX0KLQkJfQotCQltdXRleF91bmxvY2soJm5vdGlmeV9sb2NrKTsKLQotCQlyZXR1cm47Ci0JfQotCi0Jc2l6ZSArPSBzaXplb2YoKmVudCk7Ci0KLQllbnQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZW50KQotCQlyZXR1cm47Ci0KLQllbnQtPm1zZyA9IChzdHJ1Y3QgY25fY3RsX21zZyAqKShlbnQgKyAxKTsKLQotCW1lbWNweShlbnQtPm1zZywgY3RsLCBzaXplIC0gc2l6ZW9mKCplbnQpKTsKLQotCW11dGV4X2xvY2soJm5vdGlmeV9sb2NrKTsKLQlsaXN0X2FkZCgmZW50LT5ub3RpZnlfZW50cnksICZub3RpZnlfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZub3RpZnlfbG9jayk7Ci19Ci0KIHN0YXRpYyBpbnQgY25fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYgPSBjZGV2LmNiZGV2OwpAQCAtNDM3LDExICsyNzQsOCBAQAogc3RhdGljIGludCBfX2RldmluaXQgY25faW5pdCh2b2lkKQogewogCXN0cnVjdCBjbl9kZXYgKmRldiA9ICZjZGV2OwotCWludCBlcnI7CiAKIAlkZXYtPmlucHV0ID0gY25fcnhfc2tiOwotCWRldi0+aWQuaWR4ID0gY25faWR4OwotCWRldi0+aWQudmFsID0gY25fdmFsOwogCiAJZGV2LT5ubHMgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoJmluaXRfbmV0LCBORVRMSU5LX0NPTk5FQ1RPUiwKIAkJCQkJIENOX05FVExJTktfVVNFUlMgKyAweGYsCkBAIC00NTcsMTQgKzI5MSw2IEBACiAKIAljbl9hbHJlYWR5X2luaXRpYWxpemVkID0gMTsKIAotCWVyciA9IGNuX2FkZF9jYWxsYmFjaygmZGV2LT5pZCwgImNvbm5lY3RvciIsICZjbl9jYWxsYmFjayk7Ci0JaWYgKGVycikgewotCQljbl9hbHJlYWR5X2luaXRpYWxpemVkID0gMDsKLQkJY25fcXVldWVfZnJlZV9kZXYoZGV2LT5jYmRldik7Ci0JCW5ldGxpbmtfa2VybmVsX3JlbGVhc2UoZGV2LT5ubHMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJjb25uZWN0b3IiLCBTX0lSVUdPLCAmY25fZmlsZV9vcHMpOwogCiAJcmV0dXJuIDA7CkBAIC00NzgsNyArMzA0LDYgQEAKIAogCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJjb25uZWN0b3IiKTsKIAotCWNuX2RlbF9jYWxsYmFjaygmZGV2LT5pZCk7CiAJY25fcXVldWVfZnJlZV9kZXYoZGV2LT5jYmRldik7CiAJbmV0bGlua19rZXJuZWxfcmVsZWFzZShkZXYtPm5scyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCA0YjM0YWRlLi5iZDQ0NGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTU1NCw2ICs1NTQsOSBAQAogCQkJCShkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQgLQogCQkJCSBkYnNfdHVuZXJzX2lucy5kb3duX2RpZmZlcmVudGlhbCk7CiAKKwkJaWYgKGZyZXFfbmV4dCA8IHBvbGljeS0+bWluKQorCQkJZnJlcV9uZXh0ID0gcG9saWN5LT5taW47CisKIAkJaWYgKCFkYnNfdHVuZXJzX2lucy5wb3dlcnNhdmVfYmlhcykgewogCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCBmcmVxX25leHQsCiAJCQkJCUNQVUZSRVFfUkVMQVRJT05fTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKaW5kZXggNDZlODk5YS4uMWMzODQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYwpAQCAtMTI3NCw3ICsxMjc0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgY3J5cHRvNHh4X21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjcnlwdG80eHhfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlICAgICAgPSAiYW1jYyxwcGM0eHgtY3J5cHRvIix9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYyBiL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCmluZGV4IDQ4MDExNjIuLmM3YTVhNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCkBAIC0xMzUsMTMgKzEzNSwxMyBAQAogCS8qCiAJICogVGhlIHJlcXVlc3RlZCBrZXkgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEhXLCBkbyBhIGZhbGxiYWNrCiAJICovCi0Jb3AtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7Ci0Jb3AtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgfD0gKHRmbS0+Y3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisJb3AtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7CisJb3AtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgfD0gKHRmbS0+Y3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CiAKIAlyZXQgPSBjcnlwdG9fY2lwaGVyX3NldGtleShvcC0+ZmFsbGJhY2suY2lwLCBrZXksIGxlbik7CiAJaWYgKHJldCkgewogCQl0Zm0tPmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVNfTUFTSzsKLQkJdGZtLT5jcnRfZmxhZ3MgfD0gKG9wLT5mYWxsYmFjay5ibGstPmJhc2UuY3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisJCXRmbS0+Y3J0X2ZsYWdzIHw9IChvcC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyAmIENSWVBUT19URk1fUkVTX01BU0spOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAlpZiAoSVNfRVJSKG9wLT5mYWxsYmFjay5jaXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgYWxsb2NhdGluZyBmYWxsYmFjayBhbGdvICVzXG4iLCBuYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIob3AtPmZhbGxiYWNrLmJsayk7CisJCXJldHVybiBQVFJfRVJSKG9wLT5mYWxsYmFjay5jaXApOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKaW5kZXggMGFmODA1Ny4uZDNhMjdlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYworKysgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCkBAIC01Nyw2ICs1NywyMyBAQAogCXJldHVybiBjcnlwdG9fc2hhc2hfdXBkYXRlKCZkY3R4LT5mYWxsYmFjaywgZGF0YSwgbGVuZ3RoKTsKIH0KIAorc3RhdGljIGludCBwYWRsb2NrX3NoYV9leHBvcnQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHZvaWQgKm91dCkKK3sKKwlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCisJcmV0dXJuIGNyeXB0b19zaGFzaF9leHBvcnQoJmRjdHgtPmZhbGxiYWNrLCBvdXQpOworfQorCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhX2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqaW4pCit7CisJc3RydWN0IHBhZGxvY2tfc2hhX2Rlc2MgKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3QgcGFkbG9ja19zaGFfY3R4ICpjdHggPSBjcnlwdG9fc2hhc2hfY3R4KGRlc2MtPnRmbSk7CisKKwlkY3R4LT5mYWxsYmFjay50Zm0gPSBjdHgtPmZhbGxiYWNrOworCWRjdHgtPmZhbGxiYWNrLmZsYWdzID0gZGVzYy0+ZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisJcmV0dXJuIGNyeXB0b19zaGFzaF9pbXBvcnQoJmRjdHgtPmZhbGxiYWNrLCBpbik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYWRsb2NrX291dHB1dF9ibG9jayh1aW50MzJfdCAqc3JjLAogCQkgCXVpbnQzMl90ICpkc3QsIHNpemVfdCBjb3VudCkKIHsKQEAgLTIzNSw3ICsyNTIsMTAgQEAKIAkudXBkYXRlIAk9CXBhZGxvY2tfc2hhX3VwZGF0ZSwKIAkuZmludXAgIAk9CXBhZGxvY2tfc2hhMV9maW51cCwKIAkuZmluYWwgIAk9CXBhZGxvY2tfc2hhMV9maW5hbCwKKwkuZXhwb3J0CQk9CXBhZGxvY2tfc2hhX2V4cG9ydCwKKwkuaW1wb3J0CQk9CXBhZGxvY2tfc2hhX2ltcG9ydCwKIAkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHBhZGxvY2tfc2hhX2Rlc2MpLAorCS5zdGF0ZXNpemUJPQlzaXplb2Yoc3RydWN0IHNoYTFfc3RhdGUpLAogCS5iYXNlCQk9CXsKIAkJLmNyYV9uYW1lCQk9CSJzaGExIiwKIAkJLmNyYV9kcml2ZXJfbmFtZQk9CSJzaGExLXBhZGxvY2siLApAQCAtMjU2LDcgKzI3NiwxMCBAQAogCS51cGRhdGUgCT0JcGFkbG9ja19zaGFfdXBkYXRlLAogCS5maW51cCAgCT0JcGFkbG9ja19zaGEyNTZfZmludXAsCiAJLmZpbmFsICAJPQlwYWRsb2NrX3NoYTI1Nl9maW5hbCwKKwkuZXhwb3J0CQk9CXBhZGxvY2tfc2hhX2V4cG9ydCwKKwkuaW1wb3J0CQk9CXBhZGxvY2tfc2hhX2ltcG9ydCwKIAkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHBhZGxvY2tfc2hhX2Rlc2MpLAorCS5zdGF0ZXNpemUJPQlzaXplb2Yoc3RydWN0IHNoYTI1Nl9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJCT0JInNoYTI1NiIsCiAJCS5jcmFfZHJpdmVyX25hbWUJPQkic2hhMjU2LXBhZGxvY2siLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jIGIvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jCmluZGV4IGM0N2ZmZTguLmZkNTI5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYworKysgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKQEAgLTE5NTgsNyArMTk1OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGFsaXRvc19tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGFsaXRvc19tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLHNlYzIuMCIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKaW5kZXggYjVmMmVlMC4uNjRhOTM3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKKysrIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKQEAgLTYxMyw4ICs2MTMsNiBAQAogCWNvaGRfZmluLT5wZW5kaW5nX2lycXMtLTsKIAljb2hjLT5jb21wbGV0ZWQgPSBjb2hkX2Zpbi0+ZGVzYy5jb29raWU7CiAKLQlCVUdfT04oY29oYy0+bmJyX2FjdGl2ZV9kb25lICYmIGNvaGRfZmluID09IE5VTEwpOwotCiAJaWYgKGNvaGMtPm5icl9hY3RpdmVfZG9uZSA9PSAwKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jIGIvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKaW5kZXggNmY1MWEwYS4uZTdhMzIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKKysrIGIvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKQEAgLTgyNiw2ICs4MjYsNyBAQAogCQljaGFuLT5kZXYtPmNoYW4gPSBOVUxMOwogCQltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJmNoYW4tPmRldi0+ZGV2aWNlKTsKKwkJZnJlZV9wZXJjcHUoY2hhbi0+bG9jYWwpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwppbmRleCA4YjkwNTE2Li45NDhkNTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKKysrIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCkBAIC00NjcsNyArNDY3LDcgQEAKIAogCWlmIChpdGVyYXRpb25zID4gMCkKIAkJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdhaXRfZG1hdGVzdF9leGl0KTsKKwkJCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RBQ0sod2FpdF9kbWF0ZXN0X2V4aXQpOwogCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmd2FpdF9kbWF0ZXN0X2V4aXQpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jCmluZGV4IDVmN2E1MDAuLjVjYzM3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJaWYgKGlzX2lvYXRfYWN0aXZlKHN0YXR1cykgfHwgaXNfaW9hdF9pZGxlKHN0YXR1cykpCiAJCWlvYXRfc3VzcGVuZChjaGFuKTsKIAl3aGlsZSAoaXNfaW9hdF9hY3RpdmUoc3RhdHVzKSB8fCBpc19pb2F0X2lkbGUoc3RhdHVzKSkgewotCQlpZiAoZW5kICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgeworCQlpZiAodG1vICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgewogCQkJZXJyID0gLUVUSU1FRE9VVDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKaW5kZXggOWE1YmMxYS4uZTgwYmFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYwpAQCAtNzYxLDEyICs3NjEsMTAgQEAKICAqIEBidWZmZXJfbjoJYnVmZmVyIG51bWJlciB0byB1cGRhdGUuCiAgKgkJMCBvciAxIGFyZSB0aGUgb25seSB2YWxpZCB2YWx1ZXMuCiAgKiBAcGh5YWRkcjoJYnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MuCi0gKiBAcmV0dXJuOglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIFRoaXMKLSAqICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgdGhlIGJ1ZmZlciBpcyBzZXQgdG8gcmVhZHkuCiAgKi8KIC8qIENhbGxlZCB1bmRlciBzcGluX2xvY2soX2lycXNhdmUpKCZpY2hhbi0+bG9jaykgKi8KLXN0YXRpYyBpbnQgaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4sCi0JCQkJICAgICBpbnQgYnVmZmVyX24sIGRtYV9hZGRyX3QgcGh5YWRkcikKK3N0YXRpYyB2b2lkIGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAorCQkJCSAgICAgIGludCBidWZmZXJfbiwgZG1hX2FkZHJfdCBwaHlhZGRyKQogewogCWVudW0gaXB1X2NoYW5uZWwgY2hhbm5lbCA9IGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkOwogCXVpbnQzMl90IHJlZzsKQEAgLTgwNiw4ICs4MDQsNiBAQAogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdV9kYXRhLmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwogfQogCiAvKiBDYWxsZWQgdW5kZXIgc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrKSAqLwpAQCAtODE2LDcgKzgxMiw2IEBACiB7CiAJdW5zaWduZWQgaW50IGNoYW5faWQgPSBpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWNoYW4tPmRtYV9jaGFuLmRldi0+ZGV2aWNlOwotCWludCByZXQ7CiAKIAlpZiAoYXN5bmNfdHhfdGVzdF9hY2soJmRlc2MtPnR4ZCkpCiAJCXJldHVybiAtRUlOVFI7CkBAIC04MjcsMTQgKzgyMiw3IEBACiAJICogY291bGQgbWFrZSBpdCBjb25kaXRpb25hbCBvbiBzdGF0dXMgPj0gSVBVX0NIQU5ORUxfRU5BQkxFRCwgYnV0CiAJICogZG9pbmcgaXQgYWdhaW4gc2hvdWxkbid0IGh1cnQgZWl0aGVyLgogCSAqLwotCXJldCA9IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoaWNoYW4sIGJ1Zl9pZHgsCi0JCQkJCXNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgIlVwZGF0aW5nIHNnICVwIG9uIGNoYW5uZWwgMHgleCBidWZmZXIgJWQgZmFpbGVkIVxuIiwKLQkJCXNnLCBjaGFuX2lkLCBidWZfaWR4KTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihpY2hhbiwgYnVmX2lkeCwgc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAogCWlwdV9zZWxlY3RfYnVmZmVyKGNoYW5faWQsIGJ1Zl9pZHgpOwogCWRldl9kYmcoZGV2LCAiVXBkYXRlZCBzZyAlcCBvbiBjaGFubmVsIDB4JXggYnVmZmVyICVkXG4iLApAQCAtMTM3OSwxMCArMTM2NywxMSBAQAogCiAJaWYgKGxpa2VseShzZ25ldykgJiYKIAkgICAgaXB1X3N1Ym1pdF9idWZmZXIoaWNoYW4sIGRlc2NuZXcsIHNnbmV3LCBpY2hhbi0+YWN0aXZlX2J1ZmZlcikgPCAwKSB7Ci0JCWNhbGxiYWNrID0gZGVzYy0+dHhkLmNhbGxiYWNrOwotCQljYWxsYmFja19wYXJhbSA9IGRlc2MtPnR4ZC5jYWxsYmFja19wYXJhbTsKKwkJY2FsbGJhY2sgPSBkZXNjbmV3LT50eGQuY2FsbGJhY2s7CisJCWNhbGxiYWNrX3BhcmFtID0gZGVzY25ldy0+dHhkLmNhbGxiYWNrX3BhcmFtOwogCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQljYWxsYmFjayhjYWxsYmFja19wYXJhbSk7CisJCWlmIChjYWxsYmFjaykKKwkJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKIAkJc3Bpbl9sb2NrKCZpY2hhbi0+bG9jayk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCBkMTBjYzg5Li5iNzVjZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTQ4LDIzICs0OCwyMCBAQAogICovCiAjZGVmaW5lIFJTX0RFRkFVTFQgIChSU19EVUFMKQogCisvKiBBIGJpdG1hc2sgd2l0aCBiaXRzIGVub3VnaCBmb3IgZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2RtYWVfc2xhdmVfdXNlZFtCSVRTX1RPX0xPTkdTKFNIRE1BX1NMQVZFX05VTUJFUildOworCiBzdGF0aWMgdm9pZCBzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCk7CiAKICNkZWZpbmUgU0hfRE1BQ19DSEFOX0JBU0UoaWQpIChkbWFfYmFzZV9hZGRyW2lkXSkKIHN0YXRpYyB2b2lkIHNoX2RtYWVfd3JpdGVsKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2RjLCB1MzIgZGF0YSwgdTMyIHJlZykKIHsKLQljdHJsX291dGwoZGF0YSwgKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpKTsKKwljdHJsX291dGwoZGF0YSwgU0hfRE1BQ19DSEFOX0JBU0Uoc2hfZGMtPmlkKSArIHJlZyk7CiB9CiAKIHN0YXRpYyB1MzIgc2hfZG1hZV9yZWFkbChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9kYywgdTMyIHJlZykKIHsKLQlyZXR1cm4gY3RybF9pbmwoKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hZV9pbml0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCi17Ci0JdTMyIGNoY3IgPSBSU19ERUZBVUxUOyAvKiBkZWZhdWx0IGlzIERVQUwgbW9kZSAqLwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOworCXJldHVybiBjdHJsX2lubChTSF9ETUFDX0NIQU5fQkFTRShzaF9kYy0+aWQpICsgcmVnKTsKIH0KIAogLyoKQEAgLTk1LDI3ICs5MiwzMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRtYWVfaXNfYnVzeShzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIGJvb2wgZG1hZV9pc19idXN5KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7CiAJdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOwotCWlmIChjaGNyICYgQ0hDUl9ERSkgewotCQlpZiAoIShjaGNyICYgQ0hDUl9URSkpCi0JCQlyZXR1cm4gLUVCVVNZOyAvKiB3b3JraW5nICovCi0JfQotCXJldHVybiAwOyAvKiB3YWl0aW5nICovCisKKwlpZiAoKGNoY3IgJiAoQ0hDUl9ERSB8IENIQ1JfVEUpKSA9PSBDSENSX0RFKQorCQlyZXR1cm4gdHJ1ZTsgLyogd29ya2luZyAqLworCisJcmV0dXJuIGZhbHNlOyAvKiB3YWl0aW5nICovCiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdID0gVFNfU0hJRlQ7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQodTMyIGNoY3IpCiB7Ci0JdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOwotCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSykgPj4gQ0hDUl9UU19TSElGVF07CisJaW50IGNudCA9ICgoY2hjciAmIENIQ1JfVFNfTE9XX01BU0spID4+IENIQ1JfVFNfTE9XX1NISUZUKSB8CisJCSgoY2hjciAmIENIQ1JfVFNfSElHSF9NQVNLKSA+PiBDSENSX1RTX0hJR0hfU0hJRlQpOworCisJcmV0dXJuIHRzX3NoaWZ0W2NudF07CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfc2V0X3JlZyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBzdHJ1Y3Qgc2hfZG1hZV9yZWdzICpodykKIHsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody0+c2FyLCBTQVIpOwogCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LT5kYXIsIERBUik7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiksIFRDUik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBzaF9jaGFuLT54bWl0X3NoaWZ0LCBUQ1IpOwogfQogCiBzdGF0aWMgdm9pZCBkbWFlX3N0YXJ0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCkBAIC0xMjMsNyArMTIzLDcgQEAKIAl1MzIgY2hjciA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUik7CiAKIAljaGNyIHw9IENIQ1JfREUgfCBDSENSX0lFOwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOworCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IgJiB+Q0hDUl9URSwgQ0hDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfaGFsdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQpAQCAtMTM0LDU1ICsxMzQsNTAgQEAKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBjaGNyLCBDSENSKTsKIH0KIAorc3RhdGljIHZvaWQgZG1hZV9pbml0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCit7CisJdTMyIGNoY3IgPSBSU19ERUZBVUxUOyAvKiBkZWZhdWx0IGlzIERVQUwgbW9kZSAqLworCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQoY2hjcik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7Cit9CisKIHN0YXRpYyBpbnQgZG1hZV9zZXRfY2hjcihzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MzIgdmFsKQogewotCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7CiAJLyogV2hlbiBETUEgd2FzIHdvcmtpbmcsIGNhbiBub3Qgc2V0IGRhdGEgdG8gQ0hDUiAqLwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAorCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQodmFsKTsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCB2YWwsIENIQ1IpOworCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgRE1BUlMxX0FERFIJMHgwNAotI2RlZmluZSBETUFSUzJfQUREUgkweDA4Ci0jZGVmaW5lIERNQVJTX1NISUZUIDgKLSNkZWZpbmUgRE1BUlNfQ0hBTl9NU0sgMHgwMQorI2RlZmluZSBETUFSU19TSElGVAk4CisjZGVmaW5lIERNQVJTX0NIQU5fTVNLCTB4MDEKIHN0YXRpYyBpbnQgZG1hZV9zZXRfZG1hcnMoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTE2IHZhbCkKIHsKIAl1MzIgYWRkcjsKIAlpbnQgc2hpZnQgPSAwOwotCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKworCWlmIChkbWFlX2lzX2J1c3koc2hfY2hhbikpCisJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoc2hfY2hhbi0+aWQgJiBETUFSU19DSEFOX01TSykKIAkJc2hpZnQgPSBETUFSU19TSElGVDsKIAotCXN3aXRjaCAoc2hfY2hhbi0+aWQpIHsKLQkvKiBETUFSUzAgKi8KLQljYXNlIDA6Ci0JY2FzZSAxOgotCQlhZGRyID0gU0hfRE1BUlNfQkFTRTsKLQkJYnJlYWs7Ci0JLyogRE1BUlMxICovCi0JY2FzZSAyOgotCWNhc2UgMzoKLQkJYWRkciA9IChTSF9ETUFSU19CQVNFICsgRE1BUlMxX0FERFIpOwotCQlicmVhazsKLQkvKiBETUFSUzIgKi8KLQljYXNlIDQ6Ci0JY2FzZSA1OgotCQlhZGRyID0gKFNIX0RNQVJTX0JBU0UgKyBETUFSUzJfQUREUik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJaWYgKHNoX2NoYW4tPmlkIDwgNikKKwkJLyogRE1BMFJTMCAtIERNQTBSUzIgKi8KKwkJYWRkciA9IFNIX0RNQVJTX0JBU0UwICsgKHNoX2NoYW4tPmlkIC8gMikgKiA0OworI2lmZGVmIFNIX0RNQVJTX0JBU0UxCisJZWxzZSBpZiAoc2hfY2hhbi0+aWQgPCAxMikKKwkJLyogRE1BMVJTMCAtIERNQTFSUzIgKi8KKwkJYWRkciA9IFNIX0RNQVJTX0JBU0UxICsgKChzaF9jaGFuLT5pZCAtIDYpIC8gMikgKiA0OworI2VuZGlmCisJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQljdHJsX291dHcoKHZhbCA8PCBzaGlmdCkgfAotCQkoY3RybF9pbncoYWRkcikgJiAoc2hpZnQgPyAweEZGMDAgOiAweDAwRkYpKSwKLQkJYWRkcik7CisJY3RybF9vdXR3KCh2YWwgPDwgc2hpZnQpIHwgKGN0cmxfaW53KGFkZHIpICYgKDB4RkYwMCA+PiBzaGlmdCkpLCBhZGRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUwLDEwICsyNDUsNTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyAqc2hfZG1hZV9maW5kX3NsYXZlKAorCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIGVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIHNsYXZlX2lkKQoreworCXN0cnVjdCBkbWFfZGV2aWNlICpkbWFfZGV2ID0gc2hfY2hhbi0+Y29tbW9uLmRldmljZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gY29udGFpbmVyX29mKGRtYV9kZXYsCisJCQkJCXN0cnVjdCBzaF9kbWFlX2RldmljZSwgY29tbW9uKTsKKwlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSAmc2hkZXYtPnBkYXRhOworCWludCBpOworCisJaWYgKCh1bnNpZ25lZClzbGF2ZV9pZCA+PSBTSERNQV9TTEFWRV9OVU1CRVIpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5jb25maWdfbnVtOyBpKyspCisJCWlmIChwZGF0YS0+Y29uZmlnW2ldLnNsYXZlX2lkID09IHNsYXZlX2lkKQorCQkJcmV0dXJuIHBkYXRhLT5jb25maWcgKyBpOworCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgc2hfZG1hZV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CiAJc3RydWN0IHNoX2Rlc2MgKmRlc2M7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtID0gY2hhbi0+cHJpdmF0ZTsKKworCS8qCisJICogVGhpcyByZWxpZXMgb24gdGhlIGd1YXJhbnRlZSBmcm9tIGRtYWVuZ2luZSB0aGF0IGFsbG9jX2NoYW5fcmVzb3VyY2VzCisJICogbmV2ZXIgcnVucyBjb25jdXJyZW50bHkgd2l0aCBpdHNlbGYgb3IgZnJlZV9jaGFuX3Jlc291cmNlcy4KKwkgKi8KKwlpZiAocGFyYW0pIHsKKwkJc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnICpjZmc7CisKKwkJY2ZnID0gc2hfZG1hZV9maW5kX3NsYXZlKHNoX2NoYW4sIHBhcmFtLT5zbGF2ZV9pZCk7CisJCWlmICghY2ZnKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQocGFyYW0tPnNsYXZlX2lkLCBzaF9kbWFlX3NsYXZlX3VzZWQpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlwYXJhbS0+Y29uZmlnID0gY2ZnOworCisJCWRtYWVfc2V0X2RtYXJzKHNoX2NoYW4sIGNmZy0+bWlkX3JpZCk7CisJCWRtYWVfc2V0X2NoY3Ioc2hfY2hhbiwgY2ZnLT5jaGNyKTsKKwl9IGVsc2UgeworCQlpZiAoKHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUikgJiAweDcwMCkgIT0gMHg0MDApCisJCQlkbWFlX3NldF9jaGNyKHNoX2NoYW4sIFJTX0RFRkFVTFQpOworCX0KIAogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAl3aGlsZSAoc2hfY2hhbi0+ZGVzY3NfYWxsb2NhdGVkIDwgTlJfREVTQ1NfUEVSX0NIQU5ORUwpIHsKQEAgLTI4NiwxMCArMzI0LDE4IEBACiAJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKIAlMSVNUX0hFQUQobGlzdCk7CiAKKwlkbWFlX2hhbHQoc2hfY2hhbik7CisKIAkvKiBQcmVwYXJlZCBhbmQgbm90IHN1Ym1pdHRlZCBkZXNjcmlwdG9ycyBjYW4gc3RpbGwgYmUgb24gdGhlIHF1ZXVlICovCiAJaWYgKCFsaXN0X2VtcHR5KCZzaF9jaGFuLT5sZF9xdWV1ZSkpCiAJCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogCisJaWYgKGNoYW4tPnByaXZhdGUpIHsKKwkJLyogVGhlIGNhbGxlciBpcyBob2xkaW5nIGRtYV9saXN0X211dGV4ICovCisJCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbSA9IGNoYW4tPnByaXZhdGU7CisJCWNsZWFyX2JpdChwYXJhbS0+c2xhdmVfaWQsIHNoX2RtYWVfc2xhdmVfdXNlZCk7CisJfQorCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCiAJbGlzdF9zcGxpY2VfaW5pdCgmc2hfY2hhbi0+bGRfZnJlZSwgJmxpc3QpOwpAQCAtMzAxLDIzICszNDcsOTcgQEAKIAkJa2ZyZWUoZGVzYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9tZW1jcHkoCi0Jc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCi0Jc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKKy8qKgorICogc2hfZG1hZV9hZGRfZGVzYyAtIGdldCwgc2V0IHVwIGFuZCByZXR1cm4gb25lIHRyYW5zZmVyIGRlc2NyaXB0b3IKKyAqIEBzaF9jaGFuOglETUEgY2hhbm5lbAorICogQGZsYWdzOglETUEgdHJhbnNmZXIgZmxhZ3MKKyAqIEBkZXN0OglkZXN0aW5hdGlvbiBETUEgYWRkcmVzcywgaW5jcmVtZW50ZWQgd2hlbiBkaXJlY3Rpb24gZXF1YWxzCisgKgkJRE1BX0ZST01fREVWSUNFIG9yIERNQV9CSURJUkVDVElPTkFMCisgKiBAc3JjOglzb3VyY2UgRE1BIGFkZHJlc3MsIGluY3JlbWVudGVkIHdoZW4gZGlyZWN0aW9uIGVxdWFscworICoJCURNQV9UT19ERVZJQ0Ugb3IgRE1BX0JJRElSRUNUSU9OQUwKKyAqIEBsZW46CURNQSB0cmFuc2ZlciBsZW5ndGgKKyAqIEBmaXJzdDoJaWYgTlVMTCwgc2V0IHRvIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgYW5kIGNvb2tpZSBzZXQgdG8gLUVCVVNZCisgKiBAZGlyZWN0aW9uOgluZWVkZWQgZm9yIHNsYXZlIERNQSB0byBkZWNpZGUgd2hpY2ggYWRkcmVzcyB0byBrZWVwIGNvbnN0YW50LAorICoJCWVxdWFscyBETUFfQklESVJFQ1RJT05BTCBmb3IgTUVNQ1BZCisgKiBSZXR1cm5zIDAgb3IgYW4gZXJyb3IKKyAqIExvY2tzOiBjYWxsZWQgd2l0aCBkZXNjX2xvY2sgaGVsZAorICovCitzdGF0aWMgc3RydWN0IHNoX2Rlc2MgKnNoX2RtYWVfYWRkX2Rlc2Moc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBkbWFfYWRkcl90ICpkZXN0LCBkbWFfYWRkcl90ICpzcmMsIHNpemVfdCAqbGVuLAorCXN0cnVjdCBzaF9kZXNjICoqZmlyc3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOwotCXN0cnVjdCBzaF9kZXNjICpmaXJzdCA9IE5VTEwsICpwcmV2ID0gTlVMTCwgKm5ldzsKKwlzdHJ1Y3Qgc2hfZGVzYyAqbmV3OwogCXNpemVfdCBjb3B5X3NpemU7CisKKwlpZiAoISpsZW4pCisJCXJldHVybiBOVUxMOworCisJLyogQWxsb2NhdGUgdGhlIGxpbmsgZGVzY3JpcHRvciBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KKwluZXcgPSBzaF9kbWFlX2dldF9kZXNjKHNoX2NoYW4pOworCWlmICghbmV3KSB7CisJCWRldl9lcnIoc2hfY2hhbi0+ZGV2LCAiTm8gZnJlZSBsaW5rIGRlc2NyaXB0b3IgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY29weV9zaXplID0gbWluKCpsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVggKyAxKTsKKworCW5ldy0+aHcuc2FyID0gKnNyYzsKKwluZXctPmh3LmRhciA9ICpkZXN0OworCW5ldy0+aHcudGNyID0gY29weV9zaXplOworCisJaWYgKCEqZmlyc3QpIHsKKwkJLyogRmlyc3QgZGVzYyAqLworCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKKwkJKmZpcnN0ID0gbmV3OworCX0gZWxzZSB7CisJCS8qIE90aGVyIGRlc2MgLSBpbnZpc2libGUgdG8gdGhlIHVzZXIgKi8KKwkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUlOVkFMOworCX0KKworCWRldl9kYmcoc2hfY2hhbi0+ZGV2LAorCQkiY2hhaW5pbmcgKCV1LyV1KUAleCAtPiAleCB3aXRoICVwLCBjb29raWUgJWQsIHNoaWZ0ICVkXG4iLAorCQljb3B5X3NpemUsICpsZW4sICpzcmMsICpkZXN0LCAmbmV3LT5hc3luY190eCwKKwkJbmV3LT5hc3luY190eC5jb29raWUsIHNoX2NoYW4tPnhtaXRfc2hpZnQpOworCisJbmV3LT5tYXJrID0gREVTQ19QUkVQQVJFRDsKKwluZXctPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJbmV3LT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisKKwkqbGVuIC09IGNvcHlfc2l6ZTsKKwlpZiAoZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMIHx8IGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQkqc3JjICs9IGNvcHlfc2l6ZTsKKwlpZiAoZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMIHx8IGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCSpkZXN0ICs9IGNvcHlfc2l6ZTsKKworCXJldHVybiBuZXc7Cit9CisKKy8qCisgKiBzaF9kbWFlX3ByZXBfc2cgLSBwcmVwYXJlIHRyYW5zZmVyIGRlc2NyaXB0b3JzIGZyb20gYW4gU0cgbGlzdAorICoKKyAqIENvbW1vbiByb3V0aW5lIGZvciBwdWJsaWMgKE1FTUNQWSkgYW5kIHNsYXZlIERNQS4gVGhlIE1FTUNQWSBjYXNlIGlzIGFsc28KKyAqIGNvbnZlcnRlZCB0byBzY2F0dGVyLWdhdGhlciB0byBndWFyYW50ZWUgY29uc2lzdGVudCBsb2NraW5nIGFuZCBhIGNvcnJlY3QKKyAqIGxpc3QgbWFuaXB1bGF0aW9uLiBGb3Igc2xhdmUgRE1BIGRpcmVjdGlvbiBjYXJyaWVzIHRoZSB1c3VhbCBtZWFuaW5nLCBhbmQsCisgKiBsb2dpY2FsbHksIHRoZSBTRyBsaXN0IGlzIFJBTSBhbmQgdGhlIGFkZHIgdmFyaWFibGUgY29udGFpbnMgc2xhdmUgYWRkcmVzcywKKyAqIGUuZy4sIHRoZSBGSUZPIEkvTyByZWdpc3Rlci4gRm9yIE1FTUNQWSBkaXJlY3Rpb24gZXF1YWxzIERNQV9CSURJUkVDVElPTkFMCisgKiBhbmQgdGhlIFNHIGxpc3QgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCBhbmQgcG9pbnRzIGF0IHRoZSBzb3VyY2UgYnVmZmVyLgorICovCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpzaF9kbWFlX3ByZXBfc2coc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnX2xlbiwgZG1hX2FkZHJfdCAqYWRkciwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZmlyc3QgPSBOVUxMLCAqbmV3ID0gTlVMTCAvKiBjb21waWxlci4uLiAqLzsKIAlMSVNUX0hFQUQodHhfbGlzdCk7Ci0JaW50IGNodW5rcyA9IChsZW4gKyBTSF9ETUFfVENSX01BWCkgLyAoU0hfRE1BX1RDUl9NQVggKyAxKTsKKwlpbnQgY2h1bmtzID0gMDsKKwlpbnQgaTsKIAotCWlmICghY2hhbikKKwlpZiAoIXNnX2xlbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoIWxlbikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4sIGkpCisJCWNodW5rcyArPSAoc2dfZG1hX2xlbihzZykgKyBTSF9ETUFfVENSX01BWCkgLworCQkJKFNIX0RNQV9UQ1JfTUFYICsgMSk7CiAKIAkvKiBIYXZlIHRvIGxvY2sgdGhlIHdob2xlIGxvb3AgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgcmVsZWFzZSAqLwogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKQEAgLTMzMyw0OSArNDUzLDMyIEBACiAJICoJb25seSBkdXJpbmcgdGhpcyBmdW5jdGlvbiwgdGhlbiB0aGV5IGFyZSBpbW1lZGlhdGVseSBzcGxpY2VkCiAJICoJYmFjayBvbnRvIHRoZSBmcmVlIGxpc3QgaW4gZm9ybSBvZiBhIGNoYWluCiAJICovCi0JZG8gewotCQkvKiBBbGxvY2F0ZSB0aGUgbGluayBkZXNjcmlwdG9yIGZyb20gdGhlIGZyZWUgbGlzdCAqLwotCQluZXcgPSBzaF9kbWFlX2dldF9kZXNjKHNoX2NoYW4pOwotCQlpZiAoIW5ldykgewotCQkJZGV2X2VycihzaF9jaGFuLT5kZXYsCi0JCQkJIk5vIGZyZWUgbWVtb3J5IGZvciBsaW5rIGRlc2NyaXB0b3JcbiIpOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXcsICZ0eF9saXN0LCBub2RlKQotCQkJCW5ldy0+bWFyayA9IERFU0NfSURMRTsKLQkJCWxpc3Rfc3BsaWNlKCZ0eF9saXN0LCAmc2hfY2hhbi0+bGRfZnJlZSk7Ci0JCQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQkJCXJldHVybiBOVUxMOwotCQl9CisJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7CisJCWRtYV9hZGRyX3Qgc2dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJc2l6ZV90IGxlbiA9IHNnX2RtYV9sZW4oc2cpOwogCi0JCWNvcHlfc2l6ZSA9IG1pbihsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVggKyAxKTsKKwkJaWYgKCFsZW4pCisJCQlnb3RvIGVycl9nZXRfZGVzYzsKIAotCQluZXctPmh3LnNhciA9IGRtYV9zcmM7Ci0JCW5ldy0+aHcuZGFyID0gZG1hX2Rlc3Q7Ci0JCW5ldy0+aHcudGNyID0gY29weV9zaXplOwotCQlpZiAoIWZpcnN0KSB7Ci0JCQkvKiBGaXJzdCBkZXNjICovCi0JCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKLQkJCWZpcnN0ID0gbmV3OwotCQl9IGVsc2UgewotCQkJLyogT3RoZXIgZGVzYyAtIGludmlzaWJsZSB0byB0aGUgdXNlciAqLwotCQkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUlOVkFMOwotCQl9CisJCWRvIHsKKwkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAiQWRkIFNHICMlZEAlcFslZF0sIGRtYSAlbGx4XG4iLAorCQkJCWksIHNnLCBsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpc2dfYWRkcik7CiAKLQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsCi0JCQkiY2hhaW5pbmcgJXUgb2YgJXUgd2l0aCAlcCwgZHN0ICV4LCBjb29raWUgJWRcbiIsCi0JCQljb3B5X3NpemUsIGxlbiwgJm5ldy0+YXN5bmNfdHgsIGRtYV9kZXN0LAotCQkJbmV3LT5hc3luY190eC5jb29raWUpOworCQkJaWYgKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCQkJbmV3ID0gc2hfZG1hZV9hZGRfZGVzYyhzaF9jaGFuLCBmbGFncywKKwkJCQkJCSZzZ19hZGRyLCBhZGRyLCAmbGVuLCAmZmlyc3QsCisJCQkJCQlkaXJlY3Rpb24pOworCQkJZWxzZQorCQkJCW5ldyA9IHNoX2RtYWVfYWRkX2Rlc2Moc2hfY2hhbiwgZmxhZ3MsCisJCQkJCQlhZGRyLCAmc2dfYWRkciwgJmxlbiwgJmZpcnN0LAorCQkJCQkJZGlyZWN0aW9uKTsKKwkJCWlmICghbmV3KQorCQkJCWdvdG8gZXJyX2dldF9kZXNjOwogCi0JCW5ldy0+bWFyayA9IERFU0NfUFJFUEFSRUQ7Ci0JCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKLQkJbmV3LT5jaHVua3MgPSBjaHVua3MtLTsKLQotCQlwcmV2ID0gbmV3OwotCQlsZW4gLT0gY29weV9zaXplOwotCQlkbWFfc3JjICs9IGNvcHlfc2l6ZTsKLQkJZG1hX2Rlc3QgKz0gY29weV9zaXplOwotCQkvKiBJbnNlcnQgdGhlIGxpbmsgZGVzY3JpcHRvciB0byB0aGUgTEQgcmluZyAqLwotCQlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZ0eF9saXN0KTsKLQl9IHdoaWxlIChsZW4pOworCQkJbmV3LT5jaHVua3MgPSBjaHVua3MtLTsKKwkJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJnR4X2xpc3QpOworCQl9IHdoaWxlIChsZW4pOworCX0KIAogCWlmIChuZXcgIT0gZmlyc3QpCiAJCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVOT1NQQzsKQEAgLTM4Niw2ICs0ODksNzcgQEAKIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAogCXJldHVybiAmZmlyc3QtPmFzeW5jX3R4OworCitlcnJfZ2V0X2Rlc2M6CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXcsICZ0eF9saXN0LCBub2RlKQorCQluZXctPm1hcmsgPSBERVNDX0lETEU7CisJbGlzdF9zcGxpY2UoJnR4X2xpc3QsICZzaF9jaGFuLT5sZF9mcmVlKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9tZW1jcHkoCisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCisJc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCWlmICghY2hhbiB8fCAhbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCWNoYW4tPnByaXZhdGUgPSBOVUxMOworCisJc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCBwZm5fdG9fcGFnZShQRk5fRE9XTihkbWFfc3JjKSksIGxlbiwKKwkJICAgIG9mZnNldF9pbl9wYWdlKGRtYV9zcmMpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gZG1hX3NyYzsKKwlzZ19kbWFfbGVuKCZzZykgPSBsZW47CisKKwlyZXR1cm4gc2hfZG1hZV9wcmVwX3NnKHNoX2NoYW4sICZzZywgMSwgJmRtYV9kZXN0LCBETUFfQklESVJFQ1RJT05BTCwKKwkJCSAgICAgICBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9zbGF2ZV9zZygKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2dfbGVuLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSAqcGFyYW07CisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbjsKKworCWlmICghY2hhbikKKwkJcmV0dXJuIE5VTEw7CisKKwlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKwlwYXJhbSA9IGNoYW4tPnByaXZhdGU7CisKKwkvKiBTb21lb25lIGNhbGxpbmcgc2xhdmUgRE1BIG9uIGEgcHVibGljIGNoYW5uZWw/ICovCisJaWYgKCFwYXJhbSB8fCAhc2dfbGVuKSB7CisJCWRldl93YXJuKHNoX2NoYW4tPmRldiwgIiVzOiBiYWQgcGFyYW1ldGVyOiAlcCwgJWQsICVkXG4iLAorCQkJIF9fZnVuY19fLCBwYXJhbSwgc2dfbGVuLCBwYXJhbSA/IHBhcmFtLT5zbGF2ZV9pZCA6IC0xKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBpZiAocGFyYW0gIT0gTlVMTCksIHRoaXMgaXMgYSBzdWNjZXNzZnVsbHkgcmVxdWVzdGVkIHNsYXZlIGNoYW5uZWwsCisJICogdGhlcmVmb3JlIHBhcmFtLT5jb25maWcgIT0gTlVMTCB0b28uCisJICovCisJcmV0dXJuIHNoX2RtYWVfcHJlcF9zZyhzaF9jaGFuLCBzZ2wsIHNnX2xlbiwgJnBhcmFtLT5jb25maWctPmFkZHIsCisJCQkgICAgICAgZGlyZWN0aW9uLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2RtYWVfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogfQogCiBzdGF0aWMgZG1hX2FzeW5jX3R4X2NhbGxiYWNrIF9fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCkKQEAgLTQxOSw3ICs1OTMsMTEgQEAKIAkJCWNvb2tpZSA9IHR4LT5jb29raWU7CiAKIAkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQgJiYgZGVzYy0+Y2h1bmtzID09IDEpIHsKLQkJCUJVR19PTihzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICE9IGRlc2MtPmNvb2tpZSAtIDEpOworCQkJaWYgKHNoX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgIT0gZGVzYy0+Y29va2llIC0gMSkKKwkJCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwKKwkJCQkJIkNvbXBsZXRpbmcgY29va2llICVkLCBleHBlY3RlZCAlZFxuIiwKKwkJCQkJZGVzYy0+Y29va2llLAorCQkJCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICsgMSk7CiAJCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0gZGVzYy0+Y29va2llOwogCQl9CiAKQEAgLTQ5Miw3ICs2NzAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogRmluZCB0aGUgZmlyc3QgdW4tdHJhbnNmZXIgZGVzY2lwdG9yICovCisJLyogRmluZCB0aGUgZmlyc3Qgbm90IHRyYW5zZmVycmVkIGRlc2NpcHRvciAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkKIAkJaWYgKHNkLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CiAJCQkvKiBHZXQgdGhlIGxkIHN0YXJ0IGFkZHJlc3MgZnJvbSBsZF9xdWV1ZSAqLwpAQCAtNTU5LDcgKzczNyw3IEBACiAKIAkvKiBJUlEgTXVsdGkgKi8KIAlpZiAoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9NSVhfSVJRKSB7Ci0JCWludCBjbnQgPSAwOworCQlpbnQgX19tYXliZV91bnVzZWQgY250ID0gMDsKIAkJc3dpdGNoIChpcnEpIHsKICNpZiBkZWZpbmVkKERNVEU2X0lSUSkgJiYgZGVmaW5lZChETUFFMV9JUlEpCiAJCWNhc2UgRE1URTZfSVJROgpAQCAtNTk2LDExICs3NzQsMTQgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuID0gKHN0cnVjdCBzaF9kbWFlX2NoYW4gKilkYXRhOwogCXN0cnVjdCBzaF9kZXNjICpkZXNjOwogCXUzMiBzYXJfYnVmID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBTQVIpOworCXUzMiBkYXJfYnVmID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBEQVIpOwogCiAJc3Bpbl9sb2NrKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7Ci0JCWlmICgoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmICYmCi0JCSAgICBkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CisJCWlmIChkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEICYmCisJCSAgICAoKGRlc2MtPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgJiYKKwkJICAgICAgKGRlc2MtPmh3LmRhciArIGRlc2MtPmh3LnRjcikgPT0gZGFyX2J1ZikgfHwKKwkJICAgICAoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmKSkgewogCQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJkb25lICMlZEAlcCBkc3QgJXVcbiIsCiAJCQkJZGVzYy0+YXN5bmNfdHguY29va2llLCAmZGVzYy0+YXN5bmNfdHgsCiAJCQkJZGVzYy0+aHcuZGFyKTsKQEAgLTY3Myw3ICs4NTQsNyBAQAogCX0KIAogCXNucHJpbnRmKG5ld19zaF9jaGFuLT5kZXZfaWQsIHNpemVvZihuZXdfc2hfY2hhbi0+ZGV2X2lkKSwKLQkJCSJzaC1kbWFlJWQiLCBuZXdfc2hfY2hhbi0+aWQpOworCQkgInNoLWRtYWUlZCIsIG5ld19zaF9jaGFuLT5pZCk7CiAKIAkvKiBzZXQgdXAgY2hhbm5lbCBpcnEgKi8KIAllcnIgPSByZXF1ZXN0X2lycShpcnEsICZzaF9kbWFlX2ludGVycnVwdCwgaXJxZmxhZ3MsCkBAIC02ODQsMTEgKzg2NSw2IEBACiAJCWdvdG8gZXJyX25vX2lycTsKIAl9CiAKLQkvKiBDSENSIHJlZ2lzdGVyIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQluZXdfc2hfY2hhbi0+c2V0X2NoY3IgPSBkbWFlX3NldF9jaGNyOwotCS8qIERNQVJTIHJlZ2lzdGVyIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQluZXdfc2hfY2hhbi0+c2V0X2RtYXJzID0gZG1hZV9zZXRfZG1hcnM7Ci0KIAlzaGRldi0+Y2hhbltpZF0gPSBuZXdfc2hfY2hhbjsKIAlyZXR1cm4gMDsKIApAQCAtNzU5LDEyICs5MzUsMTkgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2hkZXYtPmNvbW1vbi5jaGFubmVscyk7CiAKIAlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBzaGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNoZGV2LT5jb21tb24uY2FwX21hc2spOworCiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMKIAkJPSBzaF9kbWFlX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwogCXNoZGV2LT5jb21tb24uZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBzaF9kbWFlX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gc2hfZG1hZV9wcmVwX21lbWNweTsKIAlzaGRldi0+Y29tbW9uLmRldmljZV9pc190eF9jb21wbGV0ZSA9IHNoX2RtYWVfaXNfY29tcGxldGU7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IHNoX2RtYWVfbWVtY3B5X2lzc3VlX3BlbmRpbmc7CisKKwkvKiBDb21wdWxzb3J5IGZvciBETUFfU0xBVkUgZmllbGRzICovCisJc2hkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IHNoX2RtYWVfcHJlcF9zbGF2ZV9zZzsKKwlzaGRldi0+Y29tbW9uLmRldmljZV90ZXJtaW5hdGVfYWxsID0gc2hfZG1hZV90ZXJtaW5hdGVfYWxsOworCiAJc2hkZXYtPmNvbW1vbi5kZXYgPSAmcGRldi0+ZGV2OwogCS8qIERlZmF1bHQgdHJhbnNmZXIgc2l6ZSBvZiAzMiBieXRlcyByZXF1aXJlcyAzMi1ieXRlIGFsaWdubWVudCAqLwogCXNoZGV2LT5jb21tb24uY29weV9hbGlnbiA9IDU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCAxMDhmMWNmLi43ZTIyN2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwogCWRtYV9jb29raWVfdCBjb29raWU7CiAJaW50IGNodW5rczsKIAlpbnQgbWFyazsKQEAgLTQ1LDEzICs0Niw5IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwkJLyogQ2hhbm5lbCBkZXZpY2UgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsJLyogVGFza2xldCAqLwogCWludCBkZXNjc19hbGxvY2F0ZWQ7CQkvKiBkZXNjIGNvdW50ICovCisJaW50IHhtaXRfc2hpZnQ7CQkJLyogbG9nXzIoYnl0ZXNfcGVyX3hmZXIpICovCiAJaW50IGlkOwkJCQkvKiBSYXcgaWQgb2YgdGhpcyBjaGFubmVsICovCiAJY2hhciBkZXZfaWRbMTZdOwkJLyogdW5pcXVlIG5hbWUgcGVyIERNQUMgb2YgY2hhbm5lbCAqLwotCi0JLyogU2V0IGNoY3IgKi8KLQlpbnQgKCpzZXRfY2hjcikoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTMyIHJlZ3MpOwotCS8qIFNldCBETUEgcmVzb3VyY2UgKi8KLQlpbnQgKCpzZXRfZG1hcnMpKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHUxNiByZXMpOwogfTsKIAogc3RydWN0IHNoX2RtYWVfZGV2aWNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IDAwMGRjNjcuLjMzOTFlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMjY1OCwxMCArMjY1OCwxMSBAQAogICogdGhlIG1lbW9yeSBzeXN0ZW0gY29tcGxldGVseS4gQSBjb21tYW5kIGxpbmUgb3B0aW9uIGFsbG93cyB0byBmb3JjZS1lbmFibGUKICAqIGhhcmR3YXJlIEVDQyBsYXRlciBpbiBhbWQ2NF9lbmFibGVfZWNjX2Vycm9yX3JlcG9ydGluZygpLgogICovCi1zdGF0aWMgY29uc3QgY2hhciAqZWNjX3dhcm5pbmcgPQotCSJXQVJOSU5HOiBFQ0MgaXMgZGlzYWJsZWQgYnkgQklPUy4gTW9kdWxlIHdpbGwgTk9UIGJlIGxvYWRlZC5cbiIKLQkiIEVpdGhlciBFbmFibGUgRUNDIGluIHRoZSBCSU9TLCBvciBzZXQgJ2VjY19lbmFibGVfb3ZlcnJpZGUnLlxuIgotCSIgQWxzbywgdXNlIG9mIHRoZSBvdmVycmlkZSBjYW4gY2F1c2UgdW5rbm93biBzaWRlIGVmZmVjdHMuXG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmVjY19tc2cgPQorCSJFQ0MgZGlzYWJsZWQgaW4gdGhlIEJJT1Mgb3Igbm8gRUNDIGNhcGFiaWxpdHksIG1vZHVsZSB3aWxsIG5vdCBsb2FkLlxuIgorCSIgRWl0aGVyIGVuYWJsZSBFQ0MgY2hlY2tpbmcgb3IgZm9yY2UgbW9kdWxlIGxvYWRpbmcgYnkgc2V0dGluZyAiCisJIidlY2NfZW5hYmxlX292ZXJyaWRlJy5cbiIKKwkiIChOb3RlIHRoYXQgdXNlIG9mIHRoZSBvdmVycmlkZSBtYXkgY2F1c2UgdW5rbm93biBzaWRlIGVmZmVjdHMuKVxuIjsKIAogc3RhdGljIGludCBhbWQ2NF9jaGVja19lY2NfZW5hYmxlZChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7CkBAIC0yNjczLDcgKzI2NzQsNyBAQAogCiAJZWNjX2VuYWJsZWQgPSAhISh2YWx1ZSAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpOwogCWlmICghZWNjX2VuYWJsZWQpCi0JCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICJUaGlzIG5vZGUgcmVwb3J0cyB0aGF0IE1lbW9yeSBFQ0MgIgorCQlhbWQ2NF9wcmludGsoS0VSTl9OT1RJQ0UsICJUaGlzIG5vZGUgcmVwb3J0cyB0aGF0IE1lbW9yeSBFQ0MgIgogCQkJICAgICAiaXMgY3VycmVudGx5IGRpc2FibGVkLCBzZXQgRjN4JXhbMjJdICglcykuXG4iLAogCQkJICAgICBLOF9OQkNGRywgcGNpX25hbWUocHZ0LT5taXNjX2YzX2N0bCkpOwogCWVsc2UKQEAgLTI2ODEsMTMgKzI2ODIsMTMgQEAKIAogCW5iX21jZV9lbiA9IGFtZDY0X25iX21jZV9iYW5rX2VuYWJsZWRfb25fbm9kZShwdnQtPm1jX25vZGVfaWQpOwogCWlmICghbmJfbWNlX2VuKQotCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiTkIgTUNFIGJhbmsgZGlzYWJsZWQsIHNldCBNU1IgIgorCQlhbWQ2NF9wcmludGsoS0VSTl9OT1RJQ0UsICJOQiBNQ0UgYmFuayBkaXNhYmxlZCwgc2V0IE1TUiAiCiAJCQkgICAgICIweCUwOHhbNF0gb24gbm9kZSAlZCB0byBlbmFibGUuXG4iLAogCQkJICAgICBNU1JfSUEzMl9NQ0dfQ1RMLCBwdnQtPm1jX25vZGVfaWQpOwogCiAJaWYgKCFlY2NfZW5hYmxlZCB8fCAhbmJfbWNlX2VuKSB7CiAJCWlmICghZWNjX2VuYWJsZV9vdmVycmlkZSkgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgIiVzIiwgZWNjX3dhcm5pbmcpOworCQkJYW1kNjRfcHJpbnRrKEtFUk5fTk9USUNFLCAiJXMiLCBlY2NfbXNnKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWVjY19lbmFibGVfb3ZlcnJpZGUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IGNmMjc0MDIuLmVjZDU5MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTgwNCw4ICs4MDQsOCBAQAogCQllbmQgICA8PD0gKDI0IC0gUEFHRV9TSElGVCk7CiAJCWVuZCAgICB8PSAoMSA8PCAoMjQgLSBQQUdFX1NISUZUKSkgLSAxOwogCi0JCWNzcm93LT5maXJzdF9wYWdlID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQkJY3Nyb3ctPmxhc3RfcGFnZSA9IGVuZCA+PiBQQUdFX1NISUZUOworCQljc3Jvdy0+Zmlyc3RfcGFnZSA9IHN0YXJ0OworCQljc3Jvdy0+bGFzdF9wYWdlID0gZW5kOwogCQljc3Jvdy0+bnJfcGFnZXMgPSBlbmQgKyAxIC0gc3RhcnQ7CiAJCWNzcm93LT5ncmFpbiA9IDg7CiAJCWNzcm93LT5tdHlwZSA9IG10eXBlOwpAQCAtODkyLDEwICs4OTIsNiBAQAogCiAJbXBjODV4eF9pbml0X2Nzcm93cyhtY2kpOwogCi0jaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKLQllZGFjX21jX3JlZ2lzdGVyX21jaWRldl9kZWJ1Zygoc3RydWN0IGF0dHJpYnV0ZSAqKilkZWJ1Z19hdHRyKTsKLSNlbmRpZgotCiAJLyogc3RvcmUgdGhlIG9yaWdpbmFsIGVycm9yIGRpc2FibGUgYml0cyAqLwogCW9yaWdfZGRyX2Vycl9kaXNhYmxlID0KIAkgICAgaW5fYmUzMihwZGF0YS0+bWNfdmJhc2UgKyBNUEM4NVhYX01DX0VSUl9ESVNBQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCmluZGV4IGNiYWY0MjAuLjJkM2RjN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwpAQCAtODkzLDIwICs4OTMsMzEgQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmd25ldF9wYWNrZXRfdGFza19jYWNoZTsKIAorc3RhdGljIHZvaWQgZnduZXRfZnJlZV9wdGFzayhzdHJ1Y3QgZnduZXRfcGFja2V0X3Rhc2sgKnB0YXNrKQoreworCWRldl9rZnJlZV9za2JfYW55KHB0YXNrLT5za2IpOworCWttZW1fY2FjaGVfZnJlZShmd25ldF9wYWNrZXRfdGFza19jYWNoZSwgcHRhc2spOworfQorCiBzdGF0aWMgaW50IGZ3bmV0X3NlbmRfcGFja2V0KHN0cnVjdCBmd25ldF9wYWNrZXRfdGFzayAqcHRhc2spOwogCiBzdGF0aWMgdm9pZCBmd25ldF90cmFuc21pdF9wYWNrZXRfZG9uZShzdHJ1Y3QgZnduZXRfcGFja2V0X3Rhc2sgKnB0YXNrKQogewotCXN0cnVjdCBmd25ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZnduZXRfZGV2aWNlICpkZXYgPSBwdGFzay0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkZXYgPSBwdGFzay0+ZGV2OworCWJvb2wgZnJlZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmcHRhc2stPnB0X2xpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwogCi0JcHRhc2stPm91dHN0YW5kaW5nX3BrdHMtLTsgLyogRklYTUUgYWNjZXNzIGluc2lkZSBsb2NrICovCisJcHRhc2stPm91dHN0YW5kaW5nX3BrdHMtLTsKKworCS8qIENoZWNrIHdoZXRoZXIgd2Ugb3IgdGhlIG5ldHdvcmtpbmcgVFggc29mdC1JUlEgaXMgbGFzdCB1c2VyLiAqLworCWZyZWUgPSAocHRhc2stPm91dHN0YW5kaW5nX3BrdHMgPT0gMCAmJiAhbGlzdF9lbXB0eSgmcHRhc2stPnB0X2xpbmspKTsKKworCWlmIChwdGFzay0+b3V0c3RhbmRpbmdfcGt0cyA9PSAwKQorCQlsaXN0X2RlbCgmcHRhc2stPnB0X2xpbmspOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAocHRhc2stPm91dHN0YW5kaW5nX3BrdHMgPiAwKSB7CiAJCXUxNiBkZ19zaXplOwpAQCAtOTUxLDEwICs5NjIsMTAgQEAKIAkJCXB0YXNrLT5tYXhfcGF5bG9hZCA9IHNrYi0+bGVuICsgUkZDMjM3NF9GUkFHX0hEUl9TSVpFOwogCQl9CiAJCWZ3bmV0X3NlbmRfcGFja2V0KHB0YXNrKTsKLQl9IGVsc2UgewotCQlkZXZfa2ZyZWVfc2tiX2FueShwdGFzay0+c2tiKTsKLQkJa21lbV9jYWNoZV9mcmVlKGZ3bmV0X3BhY2tldF90YXNrX2NhY2hlLCBwdGFzayk7CiAJfQorCisJaWYgKGZyZWUpCisJCWZ3bmV0X2ZyZWVfcHRhc2socHRhc2spOwogfQogCiBzdGF0aWMgdm9pZCBmd25ldF93cml0ZV9jb21wbGV0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLApAQCAtOTc3LDYgKzk4OCw3IEBACiAJdW5zaWduZWQgdHhfbGVuOwogCXN0cnVjdCByZmMyNzM0X2hlYWRlciAqYnVmaGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBmcmVlOwogCiAJZGV2ID0gcHRhc2stPmRldjsKIAl0eF9sZW4gPSBwdGFzay0+bWF4X3BheWxvYWQ7CkBAIC0xMDIyLDEyICsxMDM0LDE2IEBACiAJCQkJZ2VuZXJhdGlvbiwgU0NPREVfMTAwLCAwVUxMLCBwdGFzay0+c2tiLT5kYXRhLAogCQkJCXR4X2xlbiArIDgsIGZ3bmV0X3dyaXRlX2NvbXBsZXRlLCBwdGFzayk7CiAKLQkJLyogRklYTUUgcmFjZT8gKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOwotCQlsaXN0X2FkZF90YWlsKCZwdGFzay0+cHRfbGluaywgJmRldi0+YnJvYWRjYXN0ZWRfbGlzdCk7CisKKwkJLyogSWYgdGhlIEFUIHRhc2tsZXQgYWxyZWFkeSByYW4sIHdlIG1heSBiZSBsYXN0IHVzZXIuICovCisJCWZyZWUgPSAocHRhc2stPm91dHN0YW5kaW5nX3BrdHMgPT0gMCAmJiBsaXN0X2VtcHR5KCZwdGFzay0+cHRfbGluaykpOworCQlpZiAoIWZyZWUpCisJCQlsaXN0X2FkZF90YWlsKCZwdGFzay0+cHRfbGluaywgJmRldi0+YnJvYWRjYXN0ZWRfbGlzdCk7CisKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCX0KIAogCWZ3X3NlbmRfcmVxdWVzdChkZXYtPmNhcmQsICZwdGFzay0+dHJhbnNhY3Rpb24sCkBAIC0xMDM1LDEyICsxMDUxLDE5IEBACiAJCQlwdGFzay0+Z2VuZXJhdGlvbiwgcHRhc2stPnNwZWVkLCBwdGFzay0+Zmlmb19hZGRyLAogCQkJcHRhc2stPnNrYi0+ZGF0YSwgdHhfbGVuLCBmd25ldF93cml0ZV9jb21wbGV0ZSwgcHRhc2spOwogCi0JLyogRklYTUUgcmFjZT8gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcHRhc2stPnB0X2xpbmssICZkZXYtPnNlbnRfbGlzdCk7CisKKwkvKiBJZiB0aGUgQVQgdGFza2xldCBhbHJlYWR5IHJhbiwgd2UgbWF5IGJlIGxhc3QgdXNlci4gKi8KKwlmcmVlID0gKHB0YXNrLT5vdXRzdGFuZGluZ19wa3RzID09IDAgJiYgbGlzdF9lbXB0eSgmcHRhc2stPnB0X2xpbmspKTsKKwlpZiAoIWZyZWUpCisJCWxpc3RfYWRkX3RhaWwoJnB0YXNrLT5wdF9saW5rLCAmZGV2LT5zZW50X2xpc3QpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlkZXYtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworIG91dDoKKwlpZiAoZnJlZSkKKwkJZnduZXRfZnJlZV9wdGFzayhwdGFzayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyOTgsNiArMTMyMSw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlwdGFzay0+bWF4X3BheWxvYWQgPSBtYXhfcGF5bG9hZDsKKwlJTklUX0xJU1RfSEVBRCgmcHRhc2stPnB0X2xpbmspOworCiAJZnduZXRfc2VuZF9wYWNrZXQocHRhc2spOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKaW5kZXggMjM0NWQ0MS4uNDNlYmYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKQEAgLTIxMDEsMTEgKzIxMDEsNiBAQAogCXUzMiBwYXlsb2FkX2luZGV4LCBwYXlsb2FkX2VuZF9pbmRleCwgbmV4dF9wYWdlX2luZGV4OwogCWludCBwYWdlLCBlbmRfcGFnZSwgaSwgbGVuZ3RoLCBvZmZzZXQ7CiAKLQkvKgotCSAqIEZJWE1FOiBDeWNsZSBsb3N0IGJlaGF2aW9yIHNob3VsZCBiZSBjb25maWd1cmFibGU6IGxvc2UKLQkgKiBwYWNrZXQsIHJldHJhbnNtaXQgb3IgdGVybWluYXRlLi4KLQkgKi8KLQogCXAgPSBwYWNrZXQ7CiAJcGF5bG9hZF9pbmRleCA9IHBheWxvYWQ7CiAKQEAgLTIxMzUsNiArMjEzMCwxNCBAQAogCWlmICghcC0+c2tpcCkgewogCQlkWzBdLmNvbnRyb2wgICA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfS0VZX0lNTUVESUFURSk7CiAJCWRbMF0ucmVxX2NvdW50ID0gY3B1X3RvX2xlMTYoOCk7CisJCS8qCisJCSAqIExpbmsgdGhlIHNraXAgYWRkcmVzcyB0byB0aGlzIGRlc2NyaXB0b3IgaXRzZWxmLiAgVGhpcyBjYXVzZXMKKwkJICogYSBjb250ZXh0IHRvIHNraXAgYSBjeWNsZSB3aGVuZXZlciBsb3N0IGN5Y2xlcyBvciBGSUZPCisJCSAqIG92ZXJydW5zIG9jY3VyLCB3aXRob3V0IGRyb3BwaW5nIHRoZSBkYXRhLiAgVGhlIGFwcGxpY2F0aW9uCisJCSAqIHNob3VsZCB0aGVuIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4gZXJyb3IgY29uZGl0aW9uIG9yIG5vdC4KKwkJICogRklYTUU6ICBNYWtlIHRoZSBjb250ZXh0J3MgY3ljbGUtbG9zdCBiZWhhdmlvdXIgY29uZmlndXJhYmxlPworCQkgKi8KKwkJZFswXS5icmFuY2hfYWRkcmVzcyA9IGNwdV90b19sZTMyKGRfYnVzIHwgeik7CiAKIAkJaGVhZGVyID0gKF9fbGUzMiAqKSAmZFsxXTsKIAkJaGVhZGVyWzBdID0gY3B1X3RvX2xlMzIoSVRfSEVBREVSX1NZKHAtPnN5KSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCmluZGV4IDA1MWQxZWIuLmY4MmJjZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAl2b2lkICppYmZ0X2xvYyA9IGVudHJ5LT5oZWFkZXI7CiAJY2hhciAqc3RyID0gYnVmOwogCWNoYXIgKm1hYzsKLQlpbnQgdmFsOworCV9fYmUzMiB2YWw7CiAKIAlpZiAoIW5pYykKIAkJcmV0dXJuIDA7CkBAIC0zOTcsMTAgKzM5Nyw4IEBACiAJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIG5pYy0+aXBfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgaWJmdF9ldGhfc3VibmV0X21hc2s6Ci0JCXZhbCA9IH4oKDEgPDwgKDMyLW5pYy0+c3VibmV0X21hc2tfcHJlZml4KSktMSk7Ci0JCXN0ciArPSBzcHJpbnRmKHN0ciwgTklQUVVBRF9GTVQsCi0JCQkgICAgICAgKHU4KSh2YWwgPj4gMjQpLCAodTgpKHZhbCA+PiAxNiksCi0JCQkgICAgICAgKHU4KSh2YWwgPj4gOCksICh1OCkodmFsKSk7CisJCXZhbCA9IGNwdV90b19iZTMyKH4oKDEgPDwgKDMyLW5pYy0+c3VibmV0X21hc2tfcHJlZml4KSktMSkpOworCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcEk0IiwgJnZhbCk7CiAJCWJyZWFrOwogCWNhc2UgaWJmdF9ldGhfb3JpZ2luOgogCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgbmljLT5vcmlnaW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA5NmVkZGQxLi4zMDVjNTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtNjYsNiArNjYsOCBAQAogCiAJICBJZiBNIGlzIHNlbGVjdGVkLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGVvbi4KIAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWciCisKIGNvbmZpZyBEUk1fSTgxMAogCXRyaXN0YXRlICJJbnRlbCBJODEwIgogCWRlcGVuZHMgb24gRFJNICYmIEFHUCAmJiBBR1BfSU5URUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hdGlfcGNpZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKaW5kZXggYTFmY2U2OC4uMTdiZTA1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAJCWlmIChwY2lfc2V0X2RtYV9tYXNrKGRldi0+cGRldiwgZ2FydF9pbmZvLT50YWJsZV9tYXNrKSkgewogCQkJRFJNX0VSUk9SKCJmYWlsIHRvIHNldCBkbWEgbWFzayB0byAweCVMeFxuIiwKLQkJCQkgIGdhcnRfaW5mby0+dGFibGVfbWFzayk7CisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWdhcnRfaW5mby0+dGFibGVfbWFzayk7CiAJCQlyZXQgPSAxOwogCQkJZ290byBkb25lOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCmluZGV4IGY2NjViMDUuLmFiNmM5NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCkBAIC01OTgsNiArNTk4LDUwIEBACiAJcmV0dXJuIG1vZGU7CiB9CiAKKy8qCisgKiBFRElEIGlzIGRlbGlnaHRmdWxseSBhbWJpZ3VvdXMgYWJvdXQgaG93IGludGVybGFjZWQgbW9kZXMgYXJlIHRvIGJlCisgKiBlbmNvZGVkLiAgT3VyIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzIG9mIGZyYW1lIGhlaWdodCwgYnV0IHNvbWUKKyAqIEhEVFYgZGV0YWlsZWQgdGltaW5ncyBhcmUgZW5jb2RlZCBhcyBmaWVsZCBoZWlnaHQuCisgKgorICogVGhlIGZvcm1hdCBsaXN0IGhlcmUgaXMgZnJvbSBDRUEsIGluIGZyYW1lIHNpemUuICBUZWNobmljYWxseSB3ZQorICogc2hvdWxkIGJlIGNoZWNraW5nIHJlZnJlc2ggcmF0ZSB0b28uICBXaGF0ZXZlci4KKyAqLworc3RhdGljIHZvaWQKK2RybV9tb2RlX2RvX2ludGVybGFjZV9xdWlyayhzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICBzdHJ1Y3QgZGV0YWlsZWRfcGl4ZWxfdGltaW5nICpwdCkKK3sKKwlpbnQgaTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJaW50IHcsIGg7CisJfSBjZWFfaW50ZXJsYWNlZFtdID0geworCQl7IDE5MjAsIDEwODAgfSwKKwkJeyAgNzIwLCAgNDgwIH0sCisJCXsgMTQ0MCwgIDQ4MCB9LAorCQl7IDI4ODAsICA0ODAgfSwKKwkJeyAgNzIwLCAgNTc2IH0sCisJCXsgMTQ0MCwgIDU3NiB9LAorCQl7IDI4ODAsICA1NzYgfSwKKwl9OworCXN0YXRpYyBjb25zdCBpbnQgbl9zaXplcyA9CisJCXNpemVvZihjZWFfaW50ZXJsYWNlZCkvc2l6ZW9mKGNlYV9pbnRlcmxhY2VkWzBdKTsKKworCWlmICghKHB0LT5taXNjICYgRFJNX0VESURfUFRfSU5URVJMQUNFRCkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBuX3NpemVzOyBpKyspIHsKKwkJaWYgKChtb2RlLT5oZGlzcGxheSA9PSBjZWFfaW50ZXJsYWNlZFtpXS53KSAmJgorCQkgICAgKG1vZGUtPnZkaXNwbGF5ID09IGNlYV9pbnRlcmxhY2VkW2ldLmggLyAyKSkgeworCQkJbW9kZS0+dmRpc3BsYXkgKj0gMjsKKwkJCW1vZGUtPnZzeW5jX3N0YXJ0ICo9IDI7CisJCQltb2RlLT52c3luY19lbmQgKj0gMjsKKwkJCW1vZGUtPnZ0b3RhbCAqPSAyOworCQkJbW9kZS0+dnRvdGFsIHw9IDE7CisJCX0KKwl9CisKKwltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKK30KKwogLyoqCiAgKiBkcm1fbW9kZV9kZXRhaWxlZCAtIGNyZWF0ZSBhIG5ldyBtb2RlIGZyb20gYW4gRURJRCBkZXRhaWxlZCB0aW1pbmcgc2VjdGlvbgogICogQGRldjogRFJNIGRldmljZSAobmVlZGVkIHRvIGNyZWF0ZSBuZXcgbW9kZSkKQEAgLTY4MCw4ICs3MjQsNyBAQAogCiAJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CiAKLQlpZiAocHQtPm1pc2MgJiBEUk1fRURJRF9QVF9JTlRFUkxBQ0VEKQotCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKKwlkcm1fbW9kZV9kb19pbnRlcmxhY2VfcXVpcmsobW9kZSwgcHQpOwogCiAJaWYgKHF1aXJrcyAmIEVESURfUVVJUktfREVUQUlMRURfU1lOQ19QUCkgewogCQlwdC0+bWlzYyB8PSBEUk1fRURJRF9QVF9IU1lOQ19QT1NJVElWRSB8IERSTV9FRElEX1BUX1ZTWU5DX1BPU0lUSVZFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCmluZGV4IGNkZWMzMjkuLjJhYzA3NGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCkBAIC00MDUsNyArNDA1LDggQEAKIAkJCQl3YXN0ZWQgKz0gYWxpZ25tZW50IC0gdG1wOwogCQl9CiAKLQkJaWYgKGVudHJ5LT5zaXplID49IHNpemUgKyB3YXN0ZWQpIHsKKwkJaWYgKGVudHJ5LT5zaXplID49IHNpemUgKyB3YXN0ZWQgJiYKKwkJICAgIChlbnRyeS0+c3RhcnQgKyB3YXN0ZWQgKyBzaXplKSA8PSBlbmQpIHsKIAkJCWlmICghYmVzdF9tYXRjaCkKIAkJCQlyZXR1cm4gZW50cnk7CiAJCQlpZiAoZW50cnktPnNpemUgPCBiZXN0X3NpemUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IGU2NjBhYzAuLjIzMDdmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtNzM1LDggKzczNSwxMCBAQAogCWlmIChjbWRidWYtPm51bV9jbGlwcmVjdHMpIHsKIAkJY2xpcHJlY3RzID0ga2NhbGxvYyhjbWRidWYtPm51bV9jbGlwcmVjdHMsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NsaXBfcmVjdCksIEdGUF9LRVJORUwpOwotCQlpZiAoY2xpcHJlY3RzID09IE5VTEwpCisJCWlmIChjbGlwcmVjdHMgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZmFpbF9iYXRjaF9mcmVlOworCQl9CiAKIAkJcmV0ID0gY29weV9mcm9tX3VzZXIoY2xpcHJlY3RzLCBjbWRidWYtPmNsaXByZWN0cywKIAkJCQkgICAgIGNtZGJ1Zi0+bnVtX2NsaXByZWN0cyAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCA0NmQ4ODk2Li5jZjRjYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiBjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX3BpbmV2aWV3X2luZm8gPSB7CiAJLmlzX2czMyA9IDEsIC5pc19waW5ldmlldyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfaTl4eCA9IDEsCi0JLmhhc19waXBlX2N4c3IgPSAxLAorCS5uZWVkX2dmeF9od3MgPSAxLAogCS5oYXNfaG90cGx1ZyA9IDEsCiB9OwogCkBAIC0xNzQsMjYgKzE3NCwyMCBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaWlkbGlzdCk7CiAjZW5kaWYKIAotc3RhdGljIGludCBpOTE1X3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBpOTE1X2RybV9mcmVlemUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKCFkZXYgfHwgIWRldl9wcml2KSB7Ci0JCURSTV9FUlJPUigiZGV2OiAlcCwgZGV2X3ByaXY6ICVwXG4iLCBkZXYsIGRldl9wcml2KTsKLQkJRFJNX0VSUk9SKCJEUk0gbm90IGluaXRpYWxpemVkLCBhYm9ydGluZyBzdXNwZW5kLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQotCQlyZXR1cm4gMDsKLQogCXBjaV9zYXZlX3N0YXRlKGRldi0+cGRldik7CiAKIAkvKiBJZiBLTVMgaXMgYWN0aXZlLCB3ZSBkbyB0aGUgbGVhdmV2dCBzdHVmZiBoZXJlICovCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJaWYgKGk5MTVfZ2VtX2lkbGUoZGV2KSkKKwkJaW50IGVycm9yID0gaTkxNV9nZW1faWRsZShkZXYpOworCQlpZiAoZXJyb3IpIHsKIAkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAotCQkJCSJHRU0gaWRsZSBmYWlsZWQsIHJlc3VtZSBtYXkgZmFpbFxuIik7CisJCQkJIkdFTSBpZGxlIGZhaWxlZCwgcmVzdW1lIG1pZ2h0IGZhaWxcbiIpOworCQkJcmV0dXJuIGVycm9yOworCQl9CiAJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAJfQogCkBAIC0yMDEsMjYgKzE5NSw0MiBAQAogCiAJaW50ZWxfb3ByZWdpb25fZnJlZShkZXYsIDEpOwogCi0JaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKLQkJLyogU2h1dCBkb3duIHRoZSBkZXZpY2UgKi8KLQkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldi0+cGRldik7Ci0JCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDNob3QpOwotCX0KLQogCS8qIE1vZGVzZXQgb24gcmVzdW1lLCBub3QgbGlkIGV2ZW50cyAqLwogCWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpOTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBpOTE1X3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWludCBlcnJvcjsKKworCWlmICghZGV2IHx8ICFkZXYtPmRldl9wcml2YXRlKSB7CisJCURSTV9FUlJPUigiZGV2OiAlcFxuIiwgZGV2KTsKKwkJRFJNX0VSUk9SKCJEUk0gbm90IGluaXRpYWxpemVkLCBhYm9ydGluZyBzdXNwZW5kLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQorCQlyZXR1cm4gMDsKKworCWVycm9yID0gaTkxNV9kcm1fZnJlZXplKGRldik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCQkvKiBTaHV0IGRvd24gdGhlIGRldmljZSAqLworCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2LT5wZGV2KTsKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9kcm1fdGhhdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2LT5wZGV2KSkKLQkJcmV0dXJuIC0xOwotCXBjaV9zZXRfbWFzdGVyKGRldi0+cGRldik7CisJaW50IGVycm9yID0gMDsKIAogCWk5MTVfcmVzdG9yZV9zdGF0ZShkZXYpOwogCkBAIC0yMzEsMjEgKzI0MSwyOCBAQAogCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCWRldl9wcml2LT5tbS5zdXNwZW5kZWQgPSAwOwogCi0JCXJldCA9IGk5MTVfZ2VtX2luaXRfcmluZ2J1ZmZlcihkZXYpOwotCQlpZiAocmV0ICE9IDApCi0JCQlyZXQgPSAtMTsKKwkJZXJyb3IgPSBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAkJZHJtX2lycV9pbnN0YWxsKGRldik7Ci0JfQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisKIAkJLyogUmVzdW1lIHRoZSBtb2Rlc2V0IGZvciBldmVyeSBhY3RpdmF0ZWQgQ1JUQyAqLwogCQlkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKGRldik7CiAJfQogCiAJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGk5MTVfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldi0+cGRldikpCisJCXJldHVybiAtRUlPOworCisJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKKworCXJldHVybiBpOTE1X2RybV90aGF3KGRldik7CiB9CiAKIC8qKgpAQCAtMzg2LDU3ICs0MDMsNjIgQEAKIAlkcm1fcHV0X2RldihkZXYpOwogfQogCi1zdGF0aWMgaW50Ci1pOTE1X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGk5MTVfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgZXJyb3I7CiAKLQlyZXR1cm4gaTkxNV9zdXNwZW5kKGRldiwgc3RhdGUpOwotfQorCWlmICghZHJtX2RldiB8fCAhZHJtX2Rldi0+ZGV2X3ByaXZhdGUpIHsKKwkJZGV2X2VycihkZXYsICJEUk0gbm90IGluaXRpYWxpemVkLCBhYm9ydGluZyBzdXNwZW5kLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotc3RhdGljIGludAotaTkxNV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJZXJyb3IgPSBpOTE1X2RybV9mcmVlemUoZHJtX2Rldik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gaTkxNV9yZXN1bWUoZGV2KTsKLX0KKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCi1zdGF0aWMgaW50Ci1pOTE1X3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBpOTE1X3BjaV9zdXNwZW5kKHRvX3BjaV9kZXYoZGV2KSwgUE1TR19TVVNQRU5EKTsKLX0KLQotc3RhdGljIGludAotaTkxNV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBpOTE1X3BjaV9yZXN1bWUodG9fcGNpX2RldihkZXYpKTsKLX0KLQotc3RhdGljIGludAotaTkxNV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBpOTE1X3BjaV9zdXNwZW5kKHRvX3BjaV9kZXYoZGV2KSwgUE1TR19GUkVFWkUpOwotfQotCi1zdGF0aWMgaW50Ci1pOTE1X3BtX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KQotewotCS8qIHRoYXcgZHVyaW5nIGhpYmVybmF0ZSwgZG8gbm90aGluZyEgKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotaTkxNV9wbV9wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGk5MTVfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gaTkxNV9wY2lfc3VzcGVuZCh0b19wY2lfZGV2KGRldiksIFBNU0dfSElCRVJOQVRFKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBpOTE1X3Jlc3VtZShkcm1fZGV2KTsKIH0KIAotc3RhdGljIGludAotaTkxNV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTkxNV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBpOTE1X3BjaV9yZXN1bWUodG9fcGNpX2RldihkZXYpKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICghZHJtX2RldiB8fCAhZHJtX2Rldi0+ZGV2X3ByaXZhdGUpIHsKKwkJZGV2X2VycihkZXYsICJEUk0gbm90IGluaXRpYWxpemVkLCBhYm9ydGluZyBzdXNwZW5kLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiBpOTE1X2RybV9mcmVlemUoZHJtX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbV90aGF3KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBpOTE1X2RybV90aGF3KGRybV9kZXYpOworfQorCitzdGF0aWMgaW50IGk5MTVfcG1fcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIGk5MTVfZHJtX2ZyZWV6ZShkcm1fZGV2KTsKIH0KIAogY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaTkxNV9wbV9vcHMgPSB7CkBAIC00NDUsNyArNDY3LDcgQEAKICAgICAgLmZyZWV6ZSA9IGk5MTVfcG1fZnJlZXplLAogICAgICAudGhhdyA9IGk5MTVfcG1fdGhhdywKICAgICAgLnBvd2Vyb2ZmID0gaTkxNV9wbV9wb3dlcm9mZiwKLSAgICAgLnJlc3RvcmUgPSBpOTE1X3BtX3Jlc3RvcmUsCisgICAgIC5yZXN0b3JlID0gaTkxNV9wbV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGk5MTVfZ2VtX3ZtX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGFhZjkzNGQuLmI5OWI2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNDkzLDYgKzQ5MywxNSBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkIGZsdXNoaW5nX2xpc3Q7CiAKIAkJLyoqCisJCSAqIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgcGVuZGluZyBhIEdQVSB3cml0ZSBmbHVzaC4KKwkJICoKKwkJICogQWxsIGVsZW1lbnRzIG9uIHRoaXMgbGlzdCB3aWxsIGJlbG9uZyB0byBlaXRoZXIgdGhlCisJCSAqIGFjdGl2ZV9saXN0IG9yIGZsdXNoaW5nX2xpc3QsIGxhc3RfcmVuZGVyaW5nX3NlcW5vIGNhbgorCQkgKiBiZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgdHdvIGVsZW1lbnRzLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBncHVfd3JpdGVfbGlzdDsKKworCQkvKioKIAkJICogTFJVIGxpc3Qgb2Ygb2JqZWN0cyB3aGljaCBhcmUgbm90IGluIHRoZSByaW5nYnVmZmVyIGFuZAogCQkgKiBhcmUgcmVhZHkgdG8gdW5iaW5kLCBidXQgYXJlIHN0aWxsIGluIHRoZSBHVFQuCiAJCSAqCkBAIC01OTIsNiArNjAxLDggQEAKIAogCS8qKiBUaGlzIG9iamVjdCdzIHBsYWNlIG9uIHRoZSBhY3RpdmUvZmx1c2hpbmcvaW5hY3RpdmUgbGlzdHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gR1BVIHdyaXRlIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGdwdV93cml0ZV9saXN0OwogCiAJLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gdGhlIGZlbmNlZCBvYmplY3QgTFJVICovCiAJc3RydWN0IGxpc3RfaGVhZCBmZW5jZV9saXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggZGRhNzg3YS4uZWM4YTBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0xNTUyLDYgKzE1NTIsOCBAQAogCWVsc2UKIAkJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5saXN0LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOwogCisJQlVHX09OKCFsaXN0X2VtcHR5KCZvYmpfcHJpdi0+Z3B1X3dyaXRlX2xpc3QpKTsKKwogCW9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyA9IDA7CiAJaWYgKG9ial9wcml2LT5hY3RpdmUpIHsKIAkJb2JqX3ByaXYtPmFjdGl2ZSA9IDA7CkBAIC0xNjIyLDcgKzE2MjQsOCBAQAogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYsICpuZXh0OwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmpfcHJpdiwgbmV4dCwKLQkJCQkJICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwgbGlzdCkgeworCQkJCQkgJmRldl9wcml2LT5tbS5ncHVfd3JpdGVfbGlzdCwKKwkJCQkJIGdwdV93cml0ZV9saXN0KSB7CiAJCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CiAKIAkJCWlmICgob2JqLT53cml0ZV9kb21haW4gJiBmbHVzaF9kb21haW5zKSA9PQpAQCAtMTYzMCw2ICsxNjMzLDcgQEAKIAkJCQl1aW50MzJfdCBvbGRfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47CiAKIAkJCQlvYmotPndyaXRlX2RvbWFpbiA9IDA7CisJCQkJbGlzdF9kZWxfaW5pdCgmb2JqX3ByaXYtPmdwdV93cml0ZV9saXN0KTsKIAkJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUob2JqLCBzZXFubyk7CiAKIAkJCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCkBAIC0yMDg0LDggKzIwODgsOCBAQAogaTkxNV9nZW1fZXZpY3RfZXZlcnl0aGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IHNlcW5vOwogCWludCByZXQ7CisJdWludDMyX3Qgc2Vxbm87CiAJYm9vbCBsaXN0c19lbXB0eTsKIAogCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwpAQCAtMjEwNyw2ICsyMTExLDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpOworCiAJcmV0ID0gaTkxNV9nZW1fZXZpY3RfZnJvbV9pbmFjdGl2ZV9saXN0KGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTI3MDEsNyArMjcwNyw3IEBACiAJb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOwogCWk5MTVfZ2VtX2ZsdXNoKGRldiwgMCwgb2JqLT53cml0ZV9kb21haW4pOwogCXNlcW5vID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsIE5VTEwsIG9iai0+d3JpdGVfZG9tYWluKTsKLQlvYmotPndyaXRlX2RvbWFpbiA9IDA7CisJQlVHX09OKG9iai0+d3JpdGVfZG9tYWluKTsKIAlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUob2JqLCBzZXFubyk7CiAKIAl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCkBAIC0zNTY0LDYgKzM1NzAsOSBAQAogCXVpbnQzMl90IHJlbG9jX2NvdW50ID0gMCwgaTsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChyZWxvY3MgPT0gTlVMTCkKKwkgICAgcmV0dXJuIDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2NvdW50OyBpKyspIHsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNlcl9yZWxvY3M7CiAJCWludCB1bndyaXR0ZW47CkBAIC0zNjUzLDcgKzM2NjIsNyBAQAogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYmF0Y2hfb2JqOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKIAlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jczsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcyA9IE5VTEw7CiAJaW50IHJldCA9IDAsIHJldDIsIGksIHBpbm5lZCA9IDA7CiAJdWludDY0X3QgZXhlY19vZmZzZXQ7CiAJdWludDMyX3Qgc2Vxbm8sIGZsdXNoX2RvbWFpbnMsIHJlbG9jX2luZGV4OwpAQCAtMzY3OSw4ICszNjg4LDEwIEBACiAJaWYgKGFyZ3MtPm51bV9jbGlwcmVjdHMgIT0gMCkgewogCQljbGlwcmVjdHMgPSBrY2FsbG9jKGFyZ3MtPm51bV9jbGlwcmVjdHMsIHNpemVvZigqY2xpcHJlY3RzKSwKIAkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCWlmIChjbGlwcmVjdHMgPT0gTlVMTCkKKwkJaWYgKGNsaXByZWN0cyA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBwcmVfbXV0ZXhfZXJyOworCQl9CiAKIAkJcmV0ID0gY29weV9mcm9tX3VzZXIoY2xpcHJlY3RzLAogCQkJCSAgICAgKHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqKQpAQCAtMzcyMiw2ICszNzMzLDggQEAKIAkJaWYgKG9iamVjdF9saXN0W2ldID09IE5VTEwpIHsKIAkJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgaGFuZGxlICVkIGF0IGluZGV4ICVkXG4iLAogCQkJCSAgIGV4ZWNfbGlzdFtpXS5oYW5kbGUsIGkpOworCQkJLyogcHJldmVudCBlcnJvciBwYXRoIGZyb20gcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEgKi8KKwkJCWFyZ3MtPmJ1ZmZlcl9jb3VudCA9IGkgKyAxOwogCQkJcmV0ID0gLUVCQURGOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTM3MzAsNiArMzc0Myw4IEBACiAJCWlmIChvYmpfcHJpdi0+aW5fZXhlY2J1ZmZlcikgewogCQkJRFJNX0VSUk9SKCJPYmplY3QgJXAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBvYmplY3QgbGlzdFxuIiwKIAkJCQkgICBvYmplY3RfbGlzdFtpXSk7CisJCQkvKiBwcmV2ZW50IGVycm9yIHBhdGggZnJvbSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSAqLworCQkJYXJncy0+YnVmZmVyX2NvdW50ID0gaSArIDE7CiAJCQlyZXQgPSAtRUJBREY7CiAJCQlnb3RvIGVycjsKIAkJfQpAQCAtMzg0MywxNiArMzg1OCwyMyBAQAogCQlpOTE1X2dlbV9mbHVzaChkZXYsCiAJCQkgICAgICAgZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMsCiAJCQkgICAgICAgZGV2LT5mbHVzaF9kb21haW5zKTsKLQkJaWYgKGRldi0+Zmx1c2hfZG9tYWlucykKKwkJaWYgKGRldi0+Zmx1c2hfZG9tYWlucyAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKQogCQkJKHZvaWQpaTkxNV9hZGRfcmVxdWVzdChkZXYsIGZpbGVfcHJpdiwKIAkJCQkJICAgICAgIGRldi0+Zmx1c2hfZG9tYWlucyk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKIAogCQlvYmotPndyaXRlX2RvbWFpbiA9IG9iai0+cGVuZGluZ193cml0ZV9kb21haW47CisJCWlmIChvYmotPndyaXRlX2RvbWFpbikKKwkJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+Z3B1X3dyaXRlX2xpc3QsCisJCQkJICAgICAgICZkZXZfcHJpdi0+bW0uZ3B1X3dyaXRlX2xpc3QpOworCQllbHNlCisJCQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+Z3B1X3dyaXRlX2xpc3QpOworCiAJCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKIAkJCQkJCSAgICBvYmotPnJlYWRfZG9tYWlucywKIAkJCQkJCSAgICBvbGRfd3JpdGVfZG9tYWluKTsKQEAgLTM5MjYsNiArMzk0OCw3IEBACiAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAorcHJlX211dGV4X2VycjoKIAkvKiBDb3B5IHRoZSB1cGRhdGVkIHJlbG9jYXRpb25zIG91dCByZWdhcmRsZXNzIG9mIGN1cnJlbnQgZXJyb3IKIAkgKiBzdGF0ZS4gIEZhaWx1cmUgdG8gdXBkYXRlIHRoZSByZWxvY3Mgd291bGQgbWVhbiB0aGF0IHRoZSBuZXh0CiAJICogdGltZSB1c2VybGFuZCBjYWxscyBleGVjYnVmLCBpdCB3b3VsZCBkbyBzbyB3aXRoIHByZXN1bWVkIG9mZnNldApAQCAtMzk0MCw3ICszOTYzLDYgQEAKIAkJCXJldCA9IHJldDI7CiAJfQogCi1wcmVfbXV0ZXhfZXJyOgogCWRybV9mcmVlX2xhcmdlKG9iamVjdF9saXN0KTsKIAlrZnJlZShjbGlwcmVjdHMpOwogCkBAIC00MzYzLDYgKzQzODUsNyBAQAogCW9ial9wcml2LT5vYmogPSBvYmo7CiAJb2JqX3ByaXYtPmZlbmNlX3JlZyA9IEk5MTVfRkVOQ0VfUkVHX05PTkU7CiAJSU5JVF9MSVNUX0hFQUQoJm9ial9wcml2LT5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmb2JqX3ByaXYtPmdwdV93cml0ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqX3ByaXYtPmZlbmNlX2xpc3QpOwogCW9ial9wcml2LT5tYWR2ID0gSTkxNV9NQURWX1dJTExORUVEOwogCkBAIC00ODE0LDYgKzQ4MzcsNyBAQAogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmdwdV93cml0ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmZlbmNlX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggODlhMDcxYS4uYTE3ZDZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0zMDksNiArMzA5LDIyIEBACiAJaWYgKGRlX2lpciAmIERFX0dTRSkKIAkJaXJvbmxha2Vfb3ByZWdpb25fZ3NlX2ludHIoZGV2KTsKIAorCWlmIChkZV9paXIgJiBERV9QTEFORUFfRkxJUF9ET05FKSB7CisJCWludGVsX3ByZXBhcmVfcGFnZV9mbGlwKGRldiwgMCk7CisJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXAoZGV2LCAwKTsKKwl9CisKKwlpZiAoZGVfaWlyICYgREVfUExBTkVCX0ZMSVBfRE9ORSkgeworCQlpbnRlbF9wcmVwYXJlX3BhZ2VfZmxpcChkZXYsIDEpOworCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgMSk7CisJfQorCisJaWYgKGRlX2lpciAmIERFX1BJUEVBX1ZCTEFOSykKKwkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKKworCWlmIChkZV9paXIgJiBERV9QSVBFQl9WQkxBTkspCisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CisKIAkvKiBjaGVjayBldmVudCBmcm9tIFBDSCAqLwogCWlmICgoZGVfaWlyICYgREVfUENIX0VWRU5UKSAmJgogCSAgICAocGNoX2lpciAmIFNERV9IT1RQTFVHX01BU0spKSB7CkBAIC04NDQsMTEgKzg2MCwxMSBAQAogCWlmICghKHBpcGVjb25mICYgUElQRUFDT05GX0VOQUJMRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCi0JCXJldHVybiAwOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0lST05MQUtFKGRldikpCisJCWlyb25sYWtlX2VuYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgKHBpcGUgPT0gMCkgPyAKKwkJCQkJICAgIERFX1BJUEVBX1ZCTEFOSzogREVfUElQRUJfVkJMQU5LKTsKKwllbHNlIGlmIChJU19JOTY1RyhkZXYpKQogCQlpOTE1X2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgcGlwZSwKIAkJCQkgICAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwogCWVsc2UKQEAgLTg2NiwxMyArODgyLDE0IEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCi0JCXJldHVybjsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwotCWk5MTVfZGlzYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgcGlwZSwKLQkJCSAgICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJICAgICAgUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJaWYgKElTX0lST05MQUtFKGRldikpCisJCWlyb25sYWtlX2Rpc2FibGVfZGlzcGxheV9pcnEoZGV2X3ByaXYsIChwaXBlID09IDApID8gCisJCQkJCSAgICAgREVfUElQRUFfVkJMQU5LOiBERV9QSVBFQl9WQkxBTkspOworCWVsc2UKKwkJaTkxNV9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCBwaXBlLAorCQkJCSAgICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCSAgICAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CiB9CiAKQEAgLTEwMTUsMTMgKzEwMzIsMTQgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCS8qIGVuYWJsZSBraW5kIG9mIGludGVycnVwdHMgYWx3YXlzIGVuYWJsZWQgKi8KLQl1MzIgZGlzcGxheV9tYXNrID0gREVfTUFTVEVSX0lSUV9DT05UUk9MIHwgREVfR1NFIHwgREVfUENIX0VWRU5UOworCXUzMiBkaXNwbGF5X21hc2sgPSBERV9NQVNURVJfSVJRX0NPTlRST0wgfCBERV9HU0UgfCBERV9QQ0hfRVZFTlQgfAorCQkJICAgREVfUExBTkVBX0ZMSVBfRE9ORSB8IERFX1BMQU5FQl9GTElQX0RPTkU7CiAJdTMyIHJlbmRlcl9tYXNrID0gR1RfVVNFUl9JTlRFUlJVUFQ7CiAJdTMyIGhvdHBsdWdfbWFzayA9IFNERV9DUlRfSE9UUExVRyB8IFNERV9QT1JUQl9IT1RQTFVHIHwKIAkJCSAgIFNERV9QT1JUQ19IT1RQTFVHIHwgU0RFX1BPUlREX0hPVFBMVUc7CiAKIAlkZXZfcHJpdi0+aXJxX21hc2tfcmVnID0gfmRpc3BsYXlfbWFzazsKLQlkZXZfcHJpdi0+ZGVfaXJxX2VuYWJsZV9yZWcgPSBkaXNwbGF5X21hc2s7CisJZGV2X3ByaXYtPmRlX2lycV9lbmFibGVfcmVnID0gZGlzcGxheV9tYXNrIHwgREVfUElQRUFfVkJMQU5LIHwgREVfUElQRUJfVkJMQU5LOwogCiAJLyogc2hvdWxkIGFsd2F5cyBjYW4gZ2VuZXJhdGUgaXJxICovCiAJSTkxNV9XUklURShERUlJUiwgSTkxNV9SRUFEKERFSUlSKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA4NDcwMDZjLi5hYjFiZDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTMzOCw2ICszMzgsNyBAQAogI2RlZmluZSAgIEZCQ19DVExfUEVSSU9ESUMJKDE8PDMwKQogI2RlZmluZSAgIEZCQ19DVExfSU5URVJWQUxfU0hJRlQgKDE2KQogI2RlZmluZSAgIEZCQ19DVExfVU5DT01QUkVTU0lCTEUgKDE8PDE0KQorI2RlZmluZSAgIEZCQ19DM19JRExFCQkoMTw8MTMpCiAjZGVmaW5lICAgRkJDX0NUTF9TVFJJREVfU0hJRlQJKDUpCiAjZGVmaW5lICAgRkJDX0NUTF9GRU5DRU5PCSgxPDwwKQogI2RlZmluZSBGQkNfQ09NTUFORAkJMHgwMzIwYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCBkZGVmYzg3Li43OWRkNDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtMTU3LDYgKzE1Nyw5IEBACiAJYWRwYSA9IEk5MTVfUkVBRChQQ0hfQURQQSk7CiAKIAlhZHBhICY9IH5BRFBBX0NSVF9IT1RQTFVHX01BU0s7CisJLyogZGlzYWJsZSBIUEQgZmlyc3QgKi8KKwlJOTE1X1dSSVRFKFBDSF9BRFBBLCBhZHBhKTsKKwkodm9pZClJOTE1X1JFQUQoUENIX0FEUEEpOwogCiAJYWRwYSB8PSAoQURQQV9DUlRfSE9UUExVR19QRVJJT0RfMTI4IHwKIAkJCUFEUEFfQ1JUX0hPVFBMVUdfV0FSTVVQXzEwTVMgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDQ1ZGE3OGUuLmIyNzIwMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTI0MCwzMyArMjQwLDg2IEBACiAjZGVmaW5lIElST05MQUtFX0RPVF9NQVggICAgICAgICAzNTAwMDAKICNkZWZpbmUgSVJPTkxBS0VfVkNPX01JTiAgICAgICAgIDE3NjAwMDAKICNkZWZpbmUgSVJPTkxBS0VfVkNPX01BWCAgICAgICAgIDM1MTAwMDAKLSNkZWZpbmUgSVJPTkxBS0VfTl9NSU4gICAgICAgICAgIDEKLSNkZWZpbmUgSVJPTkxBS0VfTl9NQVggICAgICAgICAgIDYKLSNkZWZpbmUgSVJPTkxBS0VfTV9NSU4gICAgICAgICAgIDc5Ci0jZGVmaW5lIElST05MQUtFX01fTUFYICAgICAgICAgICAxMjcKICNkZWZpbmUgSVJPTkxBS0VfTTFfTUlOICAgICAgICAgIDEyCiAjZGVmaW5lIElST05MQUtFX00xX01BWCAgICAgICAgICAyMgogI2RlZmluZSBJUk9OTEFLRV9NMl9NSU4gICAgICAgICAgNQogI2RlZmluZSBJUk9OTEFLRV9NMl9NQVggICAgICAgICAgOQotI2RlZmluZSBJUk9OTEFLRV9QX1NEVk9fREFDX01JTiAgNQotI2RlZmluZSBJUk9OTEFLRV9QX1NEVk9fREFDX01BWCAgODAKLSNkZWZpbmUgSVJPTkxBS0VfUF9MVkRTX01JTiAgICAgIDI4Ci0jZGVmaW5lIElST05MQUtFX1BfTFZEU19NQVggICAgICAxMTIKLSNkZWZpbmUgSVJPTkxBS0VfUDFfTUlOICAgICAgICAgIDEKLSNkZWZpbmUgSVJPTkxBS0VfUDFfTUFYICAgICAgICAgIDgKLSNkZWZpbmUgSVJPTkxBS0VfUDJfU0RWT19EQUNfU0xPVyAxMAotI2RlZmluZSBJUk9OTEFLRV9QMl9TRFZPX0RBQ19GQVNUIDUKLSNkZWZpbmUgSVJPTkxBS0VfUDJfTFZEU19TTE9XICAgIDE0IC8qIHNpbmdsZSBjaGFubmVsICovCi0jZGVmaW5lIElST05MQUtFX1AyX0xWRFNfRkFTVCAgICA3ICAvKiBkb3VibGUgY2hhbm5lbCAqLwogI2RlZmluZSBJUk9OTEFLRV9QMl9ET1RfTElNSVQgICAgMjI1MDAwIC8qIDIyNU1oeiAqLwogCi0jZGVmaW5lIElST05MQUtFX1BfRElTUExBWV9QT1JUX01JTgkxMAotI2RlZmluZSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NQVgJMjAKLSNkZWZpbmUgSVJPTkxBS0VfUDJfRElTUExBWV9QT1JUX0ZBU1QJMTAKLSNkZWZpbmUgSVJPTkxBS0VfUDJfRElTUExBWV9QT1JUX1NMT1cJMTAKLSNkZWZpbmUgSVJPTkxBS0VfUDJfRElTUExBWV9QT1JUX0xJTUlUCTAKLSNkZWZpbmUgSVJPTkxBS0VfUDFfRElTUExBWV9QT1JUX01JTgkxCi0jZGVmaW5lIElST05MQUtFX1AxX0RJU1BMQVlfUE9SVF9NQVgJMgorLyogV2UgaGF2ZSBwYXJhbWV0ZXIgcmFuZ2VzIGZvciBkaWZmZXJlbnQgdHlwZSBvZiBvdXRwdXRzLiAqLworCisvKiBEQUMgJiBIRE1JIFJlZmNsayAxMjBNaHogKi8KKyNkZWZpbmUgSVJPTkxBS0VfREFDX05fTUlOCTEKKyNkZWZpbmUgSVJPTkxBS0VfREFDX05fTUFYCTUKKyNkZWZpbmUgSVJPTkxBS0VfREFDX01fTUlOCTc5CisjZGVmaW5lIElST05MQUtFX0RBQ19NX01BWAkxMjcKKyNkZWZpbmUgSVJPTkxBS0VfREFDX1BfTUlOCTUKKyNkZWZpbmUgSVJPTkxBS0VfREFDX1BfTUFYCTgwCisjZGVmaW5lIElST05MQUtFX0RBQ19QMV9NSU4JMQorI2RlZmluZSBJUk9OTEFLRV9EQUNfUDFfTUFYCTgKKyNkZWZpbmUgSVJPTkxBS0VfREFDX1AyX1NMT1cJMTAKKyNkZWZpbmUgSVJPTkxBS0VfREFDX1AyX0ZBU1QJNQorCisvKiBMVkRTIHNpbmdsZS1jaGFubmVsIDEyME1oeiByZWZjbGsgKi8KKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX05fTUlOCTEKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX05fTUFYCTMKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX01fTUlOCTc5CisjZGVmaW5lIElST05MQUtFX0xWRFNfU19NX01BWAkxMTgKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1BfTUlOCTI4CisjZGVmaW5lIElST05MQUtFX0xWRFNfU19QX01BWAkxMTIKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1AxX01JTgkyCisjZGVmaW5lIElST05MQUtFX0xWRFNfU19QMV9NQVgJOAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfUDJfU0xPVwkxNAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfUDJfRkFTVAkxNAorCisvKiBMVkRTIGR1YWwtY2hhbm5lbCAxMjBNaHogcmVmY2xrICovCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9OX01JTgkxCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9OX01BWAkzCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9NX01JTgk3OQorI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfTV9NQVgJMTI3CisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9QX01JTgkxNAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfUF9NQVgJNTYKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1AxX01JTgkyCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9QMV9NQVgJOAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfUDJfU0xPVwk3CisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9QMl9GQVNUCTcKKworLyogTFZEUyBzaW5nbGUtY2hhbm5lbCAxMDBNaHogcmVmY2xrICovCisjZGVmaW5lIElST05MQUtFX0xWRFNfU19TU0NfTl9NSU4JMQorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfU1NDX05fTUFYCTIKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1NTQ19NX01JTgk3OQorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfU1NDX01fTUFYCTEyNgorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfU1NDX1BfTUlOCTI4CisjZGVmaW5lIElST05MQUtFX0xWRFNfU19TU0NfUF9NQVgJMTEyCisjZGVmaW5lIElST05MQUtFX0xWRFNfU19TU0NfUDFfTUlOCTIKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1NTQ19QMV9NQVgJOAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfU1NDX1AyX1NMT1cJMTQKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1NTQ19QMl9GQVNUCTE0CisKKy8qIExWRFMgZHVhbC1jaGFubmVsIDEwME1oeiByZWZjbGsgKi8KKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1NTQ19OX01JTgkxCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9TU0NfTl9NQVgJMworI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfU1NDX01fTUlOCTc5CisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9TU0NfTV9NQVgJMTI2CisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9TU0NfUF9NSU4JMTQKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1NTQ19QX01BWAk0MgorI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfU1NDX1AxX01JTgkyCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9TU0NfUDFfTUFYCTYKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1NTQ19QMl9TTE9XCTcKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1NTQ19QMl9GQVNUCTcKKworLyogRGlzcGxheVBvcnQgKi8KKyNkZWZpbmUgSVJPTkxBS0VfRFBfTl9NSU4JCTEKKyNkZWZpbmUgSVJPTkxBS0VfRFBfTl9NQVgJCTIKKyNkZWZpbmUgSVJPTkxBS0VfRFBfTV9NSU4JCTgxCisjZGVmaW5lIElST05MQUtFX0RQX01fTUFYCQk5MAorI2RlZmluZSBJUk9OTEFLRV9EUF9QX01JTgkJMTAKKyNkZWZpbmUgSVJPTkxBS0VfRFBfUF9NQVgJCTIwCisjZGVmaW5lIElST05MQUtFX0RQX1AyX0ZBU1QJCTEwCisjZGVmaW5lIElST05MQUtFX0RQX1AyX1NMT1cJCTEwCisjZGVmaW5lIElST05MQUtFX0RQX1AyX0xJTUlUCQkwCisjZGVmaW5lIElST05MQUtFX0RQX1AxX01JTgkJMQorI2RlZmluZSBJUk9OTEFLRV9EUF9QMV9NQVgJCTIKIAogc3RhdGljIGJvb2wKIGludGVsX2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKQEAgLTQ3NCwzMyArNTI3LDc4IEBACiAJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKIH07CiAKLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pcm9ubGFrZV9zZHZvID0geworc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2lyb25sYWtlX2RhYyA9IHsKIAkuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKIAkudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVggfSwKLQkubiAgID0geyAubWluID0gSVJPTkxBS0VfTl9NSU4sICAgICAgICAgICAgLm1heCA9IElST05MQUtFX05fTUFYIH0sCi0JLm0gICA9IHsgLm1pbiA9IElST05MQUtFX01fTUlOLCAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NX01BWCB9LAorCS5uICAgPSB7IC5taW4gPSBJUk9OTEFLRV9EQUNfTl9NSU4sICAgICAgICAubWF4ID0gSVJPTkxBS0VfREFDX05fTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IElST05MQUtFX0RBQ19NX01JTiwgICAgICAgIC5tYXggPSBJUk9OTEFLRV9EQUNfTV9NQVggfSwKIAkubTEgID0geyAubWluID0gSVJPTkxBS0VfTTFfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAogCS5tMiAgPSB7IC5taW4gPSBJUk9OTEFLRV9NMl9NSU4sICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCi0JLnAgICA9IHsgLm1pbiA9IElST05MQUtFX1BfU0RWT19EQUNfTUlOLCAgIC5tYXggPSBJUk9OTEFLRV9QX1NEVk9fREFDX01BWCB9LAotCS5wMSAgPSB7IC5taW4gPSBJUk9OTEFLRV9QMV9NSU4sICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfUDFfTUFYIH0sCisJLnAgICA9IHsgLm1pbiA9IElST05MQUtFX0RBQ19QX01JTiwJICAgLm1heCA9IElST05MQUtFX0RBQ19QX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBJUk9OTEFLRV9EQUNfUDFfTUlOLCAgICAgICAubWF4ID0gSVJPTkxBS0VfREFDX1AxX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJUk9OTEFLRV9QMl9ET1RfTElNSVQsCi0JCSAucDJfc2xvdyA9IElST05MQUtFX1AyX1NEVk9fREFDX1NMT1csCi0JCSAucDJfZmFzdCA9IElST05MQUtFX1AyX1NEVk9fREFDX0ZBU1QgfSwKKwkJIC5wMl9zbG93ID0gSVJPTkxBS0VfREFDX1AyX1NMT1csCisJCSAucDJfZmFzdCA9IElST05MQUtFX0RBQ19QMl9GQVNUIH0sCiAJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaXJvbmxha2VfbHZkcyA9IHsKK3N0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pcm9ubGFrZV9zaW5nbGVfbHZkcyA9IHsKIAkuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKIAkudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVggfSwKLQkubiAgID0geyAubWluID0gSVJPTkxBS0VfTl9NSU4sICAgICAgICAgICAgLm1heCA9IElST05MQUtFX05fTUFYIH0sCi0JLm0gICA9IHsgLm1pbiA9IElST05MQUtFX01fTUlOLCAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NX01BWCB9LAorCS5uICAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX1NfTl9NSU4sICAgICAubWF4ID0gSVJPTkxBS0VfTFZEU19TX05fTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfU19NX01JTiwgICAgIC5tYXggPSBJUk9OTEFLRV9MVkRTX1NfTV9NQVggfSwKIAkubTEgID0geyAubWluID0gSVJPTkxBS0VfTTFfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAogCS5tMiAgPSB7IC5taW4gPSBJUk9OTEFLRV9NMl9NSU4sICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCi0JLnAgICA9IHsgLm1pbiA9IElST05MQUtFX1BfTFZEU19NSU4sICAgICAgIC5tYXggPSBJUk9OTEFLRV9QX0xWRFNfTUFYIH0sCi0JLnAxICA9IHsgLm1pbiA9IElST05MQUtFX1AxX01JTiwgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9QMV9NQVggfSwKKwkucCAgID0geyAubWluID0gSVJPTkxBS0VfTFZEU19TX1BfTUlOLCAgICAgLm1heCA9IElST05MQUtFX0xWRFNfU19QX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX1NfUDFfTUlOLCAgICAubWF4ID0gSVJPTkxBS0VfTFZEU19TX1AxX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJUk9OTEFLRV9QMl9ET1RfTElNSVQsCi0JCSAucDJfc2xvdyA9IElST05MQUtFX1AyX0xWRFNfU0xPVywKLQkJIC5wMl9mYXN0ID0gSVJPTkxBS0VfUDJfTFZEU19GQVNUIH0sCisJCSAucDJfc2xvdyA9IElST05MQUtFX0xWRFNfU19QMl9TTE9XLAorCQkgLnAyX2Zhc3QgPSBJUk9OTEFLRV9MVkRTX1NfUDJfRkFTVCB9LAorCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorfTsKKworc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2lyb25sYWtlX2R1YWxfbHZkcyA9IHsKKwkuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKKwkudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVggfSwKKwkubiAgID0geyAubWluID0gSVJPTkxBS0VfTFZEU19EX05fTUlOLCAgICAgLm1heCA9IElST05MQUtFX0xWRFNfRF9OX01BWCB9LAorCS5tICAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX0RfTV9NSU4sICAgICAubWF4ID0gSVJPTkxBS0VfTFZEU19EX01fTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IElST05MQUtFX00xX01JTiwgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NMV9NQVggfSwKKwkubTIgID0geyAubWluID0gSVJPTkxBS0VfTTJfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00yX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX0RfUF9NSU4sICAgICAubWF4ID0gSVJPTkxBS0VfTFZEU19EX1BfTUFYIH0sCisJLnAxICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfRF9QMV9NSU4sICAgIC5tYXggPSBJUk9OTEFLRV9MVkRTX0RfUDFfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IElST05MQUtFX1AyX0RPVF9MSU1JVCwKKwkJIC5wMl9zbG93ID0gSVJPTkxBS0VfTFZEU19EX1AyX1NMT1csCisJCSAucDJfZmFzdCA9IElST05MQUtFX0xWRFNfRF9QMl9GQVNUIH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaXJvbmxha2Vfc2luZ2xlX2x2ZHNfMTAwbSA9IHsKKwkuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKKwkudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVggfSwKKwkubiAgID0geyAubWluID0gSVJPTkxBS0VfTFZEU19TX1NTQ19OX01JTiwgLm1heCA9IElST05MQUtFX0xWRFNfU19TU0NfTl9NQVggfSwKKwkubSAgID0geyAubWluID0gSVJPTkxBS0VfTFZEU19TX1NTQ19NX01JTiwgLm1heCA9IElST05MQUtFX0xWRFNfU19TU0NfTV9NQVggfSwKKwkubTEgID0geyAubWluID0gSVJPTkxBS0VfTTFfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAorCS5tMiAgPSB7IC5taW4gPSBJUk9OTEFLRV9NMl9NSU4sICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCisJLnAgICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfU19TU0NfUF9NSU4sIC5tYXggPSBJUk9OTEFLRV9MVkRTX1NfU1NDX1BfTUFYIH0sCisJLnAxICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfU19TU0NfUDFfTUlOLC5tYXggPSBJUk9OTEFLRV9MVkRTX1NfU1NDX1AxX01BWCB9LAorCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJUk9OTEFLRV9QMl9ET1RfTElNSVQsCisJCSAucDJfc2xvdyA9IElST05MQUtFX0xWRFNfU19TU0NfUDJfU0xPVywKKwkJIC5wMl9mYXN0ID0gSVJPTkxBS0VfTFZEU19TX1NTQ19QMl9GQVNUIH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaXJvbmxha2VfZHVhbF9sdmRzXzEwMG0gPSB7CisJLmRvdCA9IHsgLm1pbiA9IElST05MQUtFX0RPVF9NSU4sICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9ET1RfTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IElST05MQUtFX1ZDT19NSU4sICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9WQ09fTUFYIH0sCisJLm4gICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfRF9TU0NfTl9NSU4sIC5tYXggPSBJUk9OTEFLRV9MVkRTX0RfU1NDX05fTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfRF9TU0NfTV9NSU4sIC5tYXggPSBJUk9OTEFLRV9MVkRTX0RfU1NDX01fTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IElST05MQUtFX00xX01JTiwgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NMV9NQVggfSwKKwkubTIgID0geyAubWluID0gSVJPTkxBS0VfTTJfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00yX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX0RfU1NDX1BfTUlOLCAubWF4ID0gSVJPTkxBS0VfTFZEU19EX1NTQ19QX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX0RfU1NDX1AxX01JTiwubWF4ID0gSVJPTkxBS0VfTFZEU19EX1NTQ19QMV9NQVggfSwKKwkucDIgID0geyAuZG90X2xpbWl0ID0gSVJPTkxBS0VfUDJfRE9UX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBJUk9OTEFLRV9MVkRTX0RfU1NDX1AyX1NMT1csCisJCSAucDJfZmFzdCA9IElST05MQUtFX0xWRFNfRF9TU0NfUDJfRkFTVCB9LAogCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAogfTsKIApAQCAtNTA5LDM0ICs2MDcsNTMgQEAKICAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKICAgICAgICAgLnZjbyA9IHsgLm1pbiA9IElST05MQUtFX1ZDT19NSU4sCiAgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9WQ09fTUFYfSwKLSAgICAgICAgLm4gICA9IHsgLm1pbiA9IElST05MQUtFX05fTUlOLAotICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTl9NQVggfSwKLSAgICAgICAgLm0gICA9IHsgLm1pbiA9IElST05MQUtFX01fTUlOLAotICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTV9NQVggfSwKKyAgICAgICAgLm4gICA9IHsgLm1pbiA9IElST05MQUtFX0RQX05fTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfRFBfTl9NQVggfSwKKyAgICAgICAgLm0gICA9IHsgLm1pbiA9IElST05MQUtFX0RQX01fTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfRFBfTV9NQVggfSwKICAgICAgICAgLm0xICA9IHsgLm1pbiA9IElST05MQUtFX00xX01JTiwKICAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAogICAgICAgICAubTIgID0geyAubWluID0gSVJPTkxBS0VfTTJfTUlOLAogICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCi0gICAgICAgIC5wICAgPSB7IC5taW4gPSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NSU4sCi0gICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NQVggfSwKLSAgICAgICAgLnAxICA9IHsgLm1pbiA9IElST05MQUtFX1AxX0RJU1BMQVlfUE9SVF9NSU4sCi0gICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9QMV9ESVNQTEFZX1BPUlRfTUFYfSwKLSAgICAgICAgLnAyICA9IHsgLmRvdF9saW1pdCA9IElST05MQUtFX1AyX0RJU1BMQVlfUE9SVF9MSU1JVCwKLSAgICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfU0xPVywKLSAgICAgICAgICAgICAgICAgLnAyX2Zhc3QgPSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfRkFTVCB9LAorICAgICAgICAucCAgID0geyAubWluID0gSVJPTkxBS0VfRFBfUF9NSU4sCisgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9EUF9QX01BWCB9LAorICAgICAgICAucDEgID0geyAubWluID0gSVJPTkxBS0VfRFBfUDFfTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfRFBfUDFfTUFYfSwKKyAgICAgICAgLnAyICA9IHsgLmRvdF9saW1pdCA9IElST05MQUtFX0RQX1AyX0xJTUlULAorICAgICAgICAgICAgICAgICAucDJfc2xvdyA9IElST05MQUtFX0RQX1AyX1NMT1csCisgICAgICAgICAgICAgICAgIC5wMl9mYXN0ID0gSVJPTkxBS0VfRFBfUDJfRkFTVCB9LAogICAgICAgICAuZmluZF9wbGwgPSBpbnRlbF9maW5kX3BsbF9pcm9ubGFrZV9kcCwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90ICppbnRlbF9pcm9ubGFrZV9saW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0OwotCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkKLQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2x2ZHM7Ci0JZWxzZSBpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpIHx8CisJaW50IHJlZmNsayA9IDEyMDsKKworCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoZGV2X3ByaXYtPmx2ZHNfdXNlX3NzYyAmJiBkZXZfcHJpdi0+bHZkc19zc2NfZnJlcSA9PSAxMDApCisJCQlyZWZjbGsgPSAxMDA7CisKKwkJaWYgKChJOTE1X1JFQUQoUENIX0xWRFMpICYgTFZEU19DTEtCX1BPV0VSX01BU0spID09CisJCSAgICBMVkRTX0NMS0JfUE9XRVJfVVApIHsKKwkJCS8qIExWRFMgZHVhbCBjaGFubmVsICovCisJCQlpZiAocmVmY2xrID09IDEwMCkKKwkJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaXJvbmxha2VfZHVhbF9sdmRzXzEwMG07CisJCQllbHNlCisJCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2R1YWxfbHZkczsKKwkJfSBlbHNlIHsKKwkJCWlmIChyZWZjbGsgPT0gMTAwKQorCQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9zaW5nbGVfbHZkc18xMDBtOworCQkJZWxzZQorCQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9zaW5nbGVfbHZkczsKKwkJfQorCX0gZWxzZSBpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpIHx8CiAJCQlIQVNfZURQKQogCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaXJvbmxha2VfZGlzcGxheV9wb3J0OwogCWVsc2UKLQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX3Nkdm87CisJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9kYWM7CiAKIAlyZXR1cm4gbGltaXQ7CiB9CkBAIC05MTQsNiArMTAzMSw4IEBACiAKIAkvKiBlbmFibGUgaXQuLi4gKi8KIAlmYmNfY3RsID0gRkJDX0NUTF9FTiB8IEZCQ19DVExfUEVSSU9ESUM7CisJaWYgKElTX0k5NDVHTShkZXYpKQorCQlmYmNfY3RsIHw9IEZCQ19DM19JRExFOyAvKiA5NDUgbmVlZHMgc3BlY2lhbCBTUiBoYW5kbGluZyAqLwogCWZiY19jdGwgfD0gKGRldl9wcml2LT5jZmJfcGl0Y2ggJiAweGZmKSA8PCBGQkNfQ1RMX1NUUklERV9TSElGVDsKIAlmYmNfY3RsIHw9IChpbnRlcnZhbCAmIDB4MmZmZikgPDwgRkJDX0NUTF9JTlRFUlZBTF9TSElGVDsKIAlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpCkBAIC0xNjM4LDYgKzE3NTcsNyBAQAogCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CiAJCURSTV9ERUJVR19LTVMoImNydGMgJWQgZHBtcyBvZmZcbiIsIHBpcGUpOwogCisJCWRybV92Ymxhbmtfb2ZmKGRldiwgcGlwZSk7CiAJCS8qIERpc2FibGUgZGlzcGxheSBwbGFuZSAqLwogCQl0ZW1wID0gSTkxNV9SRUFEKGRzcGNudHJfcmVnKTsKIAkJaWYgKCh0ZW1wICYgRElTUExBWV9QTEFORV9FTkFCTEUpICE9IDApIHsKQEAgLTI1MTksNiArMjYzOSwxMCBAQAogCQlzcl9lbnRyaWVzID0gcm91bmR1cChzcl9lbnRyaWVzIC8gY2FjaGVsaW5lX3NpemUsIDEpOwogCQlEUk1fREVCVUcoInNlbGYtcmVmcmVzaCBlbnRyaWVzOiAlZFxuIiwgc3JfZW50cmllcyk7CiAJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOKTsKKwl9IGVsc2UgeworCQkvKiBUdXJuIG9mZiBzZWxmIHJlZnJlc2ggaWYgYm90aCBwaXBlcyBhcmUgZW5hYmxlZCAqLworCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBJOTE1X1JFQUQoRldfQkxDX1NFTEYpCisJCQkJCSYgfkZXX0JMQ19TRUxGX0VOKTsKIAl9CiAKIAlEUk1fREVCVUcoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogJWQsIEI6ICVkLCBTUiAlZFxuIiwKQEAgLTI1NjIsNiArMjY4NiwxMCBAQAogCQkJc3J3bSA9IDE7CiAJCXNyd20gJj0gMHgzZjsKIAkJSTkxNV9XUklURShGV19CTENfU0VMRiwgRldfQkxDX1NFTEZfRU4pOworCX0gZWxzZSB7CisJCS8qIFR1cm4gb2ZmIHNlbGYgcmVmcmVzaCBpZiBib3RoIHBpcGVzIGFyZSBlbmFibGVkICovCisJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEk5MTVfUkVBRChGV19CTENfU0VMRikKKwkJCQkJJiB+RldfQkxDX1NFTEZfRU4pOwogCX0KIAogCURSTV9ERUJVR19LTVMoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogOCwgQjogOCwgQzogOCwgU1IgJWRcbiIsCkBAIC0yNjMwLDYgKzI3NTgsMTAgQEAKIAkJaWYgKHNyd20gPCAwKQogCQkJc3J3bSA9IDE7CiAJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOIHwgKHNyd20gJiAweDNmKSk7CisJfSBlbHNlIHsKKwkJLyogVHVybiBvZmYgc2VsZiByZWZyZXNoIGlmIGJvdGggcGlwZXMgYXJlIGVuYWJsZWQgKi8KKwkJSTkxNV9XUklURShGV19CTENfU0VMRiwgSTkxNV9SRUFEKEZXX0JMQ19TRUxGKQorCQkJCQkmIH5GV19CTENfU0VMRl9FTik7CiAJfQogCiAJRFJNX0RFQlVHX0tNUygiU2V0dGluZyBGSUZPIHdhdGVybWFya3MgLSBBOiAlZCwgQjogJWQsIEM6ICVkLCBTUiAlZFxuIiwKQEAgLTM5NDksNyArNDA4MSw4IEBACiBzdHJ1Y3QgaW50ZWxfdW5waW5fd29yayB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9sZF9mYl9vYmo7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwZW5kaW5nX2ZsaXBfb2JqOwogCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50OwogCWludCBwZW5kaW5nOwogfTsKQEAgLTM5NjAsOCArNDA5Myw5IEBACiAJCWNvbnRhaW5lcl9vZihfX3dvcmssIHN0cnVjdCBpbnRlbF91bnBpbl93b3JrLCB3b3JrKTsKIAogCW11dGV4X2xvY2soJndvcmstPmRldi0+c3RydWN0X211dGV4KTsKLQlpOTE1X2dlbV9vYmplY3RfdW5waW4od29yay0+b2JqKTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh3b3JrLT5vYmopOworCWk5MTVfZ2VtX29iamVjdF91bnBpbih3b3JrLT5vbGRfZmJfb2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh3b3JrLT5vbGRfZmJfb2JqKTsKIAltdXRleF91bmxvY2soJndvcmstPmRldi0+c3RydWN0X211dGV4KTsKIAlrZnJlZSh3b3JrKTsKIH0KQEAgLTM5ODQsNiArNDExOCwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAl3b3JrID0gaW50ZWxfY3J0Yy0+dW5waW5fd29yazsKIAlpZiAod29yayA9PSBOVUxMIHx8ICF3b3JrLT5wZW5kaW5nKSB7CisJCWlmICh3b3JrICYmICF3b3JrLT5wZW5kaW5nKSB7CisJCQlvYmpfcHJpdiA9IHdvcmstPnBlbmRpbmdfZmxpcF9vYmotPmRyaXZlcl9wcml2YXRlOworCQkJRFJNX0RFQlVHX0RSSVZFUigiZmxpcCBmaW5pc2g6ICVwICglZCkgbm90IHBlbmRpbmc/XG4iLAorCQkJCQkgb2JqX3ByaXYsCisJCQkJCSBhdG9taWNfcmVhZCgmb2JqX3ByaXYtPnBlbmRpbmdfZmxpcCkpOworCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQpAQCAtNDAwNCw4ICs0MTQ0LDExIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAotCW9ial9wcml2ID0gd29yay0+b2JqLT5kcml2ZXJfcHJpdmF0ZTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmb2JqX3ByaXYtPnBlbmRpbmdfZmxpcCkpCisJb2JqX3ByaXYgPSB3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIEluaXRpYWwgc2Nhbm91dCBidWZmZXIgd2lsbCBoYXZlIGEgMCBwZW5kaW5nIGZsaXAgY291bnQgKi8KKwlpZiAoKGF0b21pY19yZWFkKCZvYmpfcHJpdi0+cGVuZGluZ19mbGlwKSA9PSAwKSB8fAorCSAgICBhdG9taWNfZGVjX2FuZF90ZXN0KCZvYmpfcHJpdi0+cGVuZGluZ19mbGlwKSkKIAkJRFJNX1dBS0VVUCgmZGV2X3ByaXYtPnBlbmRpbmdfZmxpcF9xdWV1ZSk7CiAJc2NoZWR1bGVfd29yaygmd29yay0+d29yayk7CiB9CkBAIC00MDE4LDggKzQxNjEsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwotCWlmIChpbnRlbF9jcnRjLT51bnBpbl93b3JrKQorCWlmIChpbnRlbF9jcnRjLT51bnBpbl93b3JrKSB7CiAJCWludGVsX2NydGMtPnVucGluX3dvcmstPnBlbmRpbmcgPSAxOworCX0gZWxzZSB7CisJCURSTV9ERUJVR19EUklWRVIoInByZXBhcmluZyBmbGlwIHdpdGggbm8gdW5waW4gd29yaz9cbiIpOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtNDAzNSw3ICs0MTgxLDggQEAKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJc3RydWN0IGludGVsX3VucGluX3dvcmsgKndvcms7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OworCWludCBwaXBlc3JjX3JlZyA9IChpbnRlbF9jcnRjLT5waXBlID09IDApID8gUElQRUFTUkMgOiBQSVBFQlNSQzsKKwlpbnQgcmV0LCBwaXBlc3JjOwogCVJJTkdfTE9DQUxTOwogCiAJd29yayA9IGt6YWxsb2Moc2l6ZW9mICp3b3JrLCBHRlBfS0VSTkVMKTsKQEAgLTQwNDcsMTIgKzQxOTQsMTMgQEAKIAl3b3JrLT5ldmVudCA9IGV2ZW50OwogCXdvcmstPmRldiA9IGNydGMtPmRldjsKIAlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKLQl3b3JrLT5vYmogPSBpbnRlbF9mYi0+b2JqOworCXdvcmstPm9sZF9mYl9vYmogPSBpbnRlbF9mYi0+b2JqOwogCUlOSVRfV09SSygmd29yay0+d29yaywgaW50ZWxfdW5waW5fd29ya19mbik7CiAKIAkvKiBXZSBib3Jyb3cgdGhlIGV2ZW50IHNwaW4gbG9jayBmb3IgcHJvdGVjdGluZyB1bnBpbl93b3JrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChpbnRlbF9jcnRjLT51bnBpbl93b3JrKSB7CisJCURSTV9ERUJVR19EUklWRVIoImZsaXAgcXVldWU6IGNydGMgYWxyZWFkeSBidXN5XG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAJCWtmcmVlKHdvcmspOwogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKQEAgLTQwNjYsMTkgKzQyMTQsMjQgQEAKIAogCXJldCA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGRldiwgb2JqKTsKIAlpZiAocmV0ICE9IDApIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiZmxpcCBxdWV1ZTogJXAgcGluICYgZmVuY2UgZmFpbGVkXG4iLAorCQkJICBvYmotPmRyaXZlcl9wcml2YXRlKTsKIAkJa2ZyZWUod29yayk7CisJCWludGVsX2NydGMtPnVucGluX3dvcmsgPSBOVUxMOwogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBSZWZlcmVuY2UgdGhlIG9sZCBmYiBvYmplY3QgZm9yIHRoZSBzY2hlZHVsZWQgd29yay4gKi8KLQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uod29yay0+b2JqKTsKKwkvKiBSZWZlcmVuY2UgdGhlIG9iamVjdHMgZm9yIHRoZSBzY2hlZHVsZWQgd29yay4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uod29yay0+b2xkX2ZiX29iaik7CisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CiAKIAljcnRjLT5mYiA9IGZiOwogCWk5MTVfZ2VtX29iamVjdF9mbHVzaF93cml0ZV9kb21haW4ob2JqKTsKIAlkcm1fdmJsYW5rX2dldChkZXYsIGludGVsX2NydGMtPnBpcGUpOwogCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlhdG9taWNfaW5jKCZvYmpfcHJpdi0+cGVuZGluZ19mbGlwKTsKKwl3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqID0gb2JqOwogCiAJQkVHSU5fTFBfUklORyg0KTsKIAlPVVRfUklORyhNSV9ESVNQTEFZX0ZMSVAgfApAQCAtNDA4Niw3ICs0MjM5LDggQEAKIAlPVVRfUklORyhmYi0+cGl0Y2gpOwogCWlmIChJU19JOTY1RyhkZXYpKSB7CiAJCU9VVF9SSU5HKG9ial9wcml2LT5ndHRfb2Zmc2V0IHwgb2JqX3ByaXYtPnRpbGluZ19tb2RlKTsKLQkJT1VUX1JJTkcoKGZiLT53aWR0aCA8PCAxNikgfCBmYi0+aGVpZ2h0KTsKKwkJcGlwZXNyYyA9IEk5MTVfUkVBRChwaXBlc3JjX3JlZyk7IAorCQlPVVRfUklORyhwaXBlc3JjICYgMHgwZmZmMGZmZik7CiAJfSBlbHNlIHsKIAkJT1VUX1JJTkcob2JqX3ByaXYtPmd0dF9vZmZzZXQpOwogCQlPVVRfUklORyhNSV9OT09QKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCmluZGV4IDM3MWQ3NTMuLmFhYWJiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKGZibywgUEFHRV9TSVpFKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKGZibywgNjQqMTAyNCk7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gZmI6ICVkXG4iLCByZXQpOwogCQlnb3RvIG91dF91bnJlZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCBhYTc0ZTU5Li5jMmU4YTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC02MTEsNyArNjExLDcgQEAKIAl7CiAJCS5pZGVudCA9ICJTYW1zdW5nIFNYMjBTIiwKIAkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJQaG9lbml4IFRlY2hub2xvZ2llcyBMVEQiKSwKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNhbXN1bmcgRWxlY3Ryb25pY3MiKSwKIAkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlNYMjBTIiksCiAJCX0sCiAJfSwKQEAgLTYyMywxMiArNjIzLDI2IEBACiAJCX0sCiAJfSwKIAl7CisJCS5pZGVudCA9ICJBc3BpcmUgMTgxMFQiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQXNwaXJlIDE4MTBUIiksCisJCX0sCisJfSwKKwl7CiAJCS5pZGVudCA9ICJQQy04MTAwNSIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUFMQVRBIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBDLTgxMDA1IiksCiAJCX0sCiAJfSwKKwl7CisJCS5pZGVudCA9ICJDbGV2byBNNXgwTiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQ0xFVk8gQ28uIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJNNXgwTiIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCkBAIC02NDMsNyArNjU3LDcgQEAKIHsKIAllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCi0JaWYgKCFhY3BpX2xpZF9vcGVuKCkgJiYgIWRtaV9jaGVja19zeXN0ZW0oYmFkX2xpZF9zdGF0dXMpKQorCWlmICghZG1pX2NoZWNrX3N5c3RlbShiYWRfbGlkX3N0YXR1cykgJiYgIWFjcGlfbGlkX29wZW4oKSkKIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCmluZGV4IGVhYWNmZDAuLjgyNjc4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKQEAgLTIzNDUsNiArMjM0NSwxNCBAQAogCQljb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1ZHQTsKIAkJaW50ZWxfb3V0cHV0LT5jbG9uZV9tYXNrID0gKDEgPDwgSU5URUxfU0RWT19OT05fVFZfQ0xPTkVfQklUKSB8CiAJCQkJCSgxIDw8IElOVEVMX0FOQUxPR19DTE9ORV9CSVQpOworCX0gZWxzZSBpZiAoZmxhZ3MgJiBTRFZPX09VVFBVVF9DVkJTMCkgeworCisJCXNkdm9fcHJpdi0+Y29udHJvbGxlZF9vdXRwdXQgPSBTRFZPX09VVFBVVF9DVkJTMDsKKwkJZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9UVkRBQzsKKwkJY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU87CisJCXNkdm9fcHJpdi0+aXNfdHYgPSB0cnVlOworCQlpbnRlbF9vdXRwdXQtPm5lZWRzX3R2X2Nsb2NrID0gdHJ1ZTsKKwkJaW50ZWxfb3V0cHV0LT5jbG9uZV9tYXNrID0gMSA8PCBJTlRFTF9TRFZPX1RWX0NMT05FX0JJVDsKIAl9IGVsc2UgaWYgKGZsYWdzICYgU0RWT19PVVRQVVRfTFZEUzApIHsKIAogCQlzZHZvX3ByaXYtPmNvbnRyb2xsZWRfb3V0cHV0ID0gU0RWT19PVVRQVVRfTFZEUzA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCmluZGV4IDFjZjQ4ODIuLjQ4MjI3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCkBAIC05MCwyMSArOTAsMjEgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKG5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fQUNUSVZFLCBOT1VWRUFVX0RTTV9BQ1RJVkVfUVVFUlksCisJaWYgKG5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fUE9XRVIsIE5PVVZFQVVfRFNNX1BPV0VSX1NUQVRFLAogCQkJCQkJCQkmcmVzdWx0KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlOVl9JTkZPKGRldiwgIl9EU00gaGFyZHdhcmUgc3RhdHVzIGdhdmUgMHgleFxuIiwgcmVzdWx0KTsKIAotCWlmIChyZXN1bHQgJiAweDEpIHsJLyogU3RhbWluYSBtb2RlIC0gZGlzYWJsZSB0aGUgZXh0ZXJuYWwgR1BVICovCisJaWYgKHJlc3VsdCkgeyAvKiBFbnN1cmUgdGhhdCB0aGUgZXh0ZXJuYWwgR1BVIGlzIGVuYWJsZWQgKi8KKwkJbm91dmVhdV9kc20oZGV2LCBOT1VWRUFVX0RTTV9MRUQsIE5PVVZFQVVfRFNNX0xFRF9TUEVFRCwgTlVMTCk7CisJCW5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fUE9XRVIsIE5PVVZFQVVfRFNNX1BPV0VSX1NQRUVELAorCQkJCQkJCQkJTlVMTCk7CisJfSBlbHNlIHsgLyogU3RhbWluYSBtb2RlIC0gZGlzYWJsZSB0aGUgZXh0ZXJuYWwgR1BVICovCiAJCW5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fTEVELCBOT1VWRUFVX0RTTV9MRURfU1RBTUlOQSwKIAkJCQkJCQkJCU5VTEwpOwogCQlub3V2ZWF1X2RzbShkZXYsIE5PVVZFQVVfRFNNX1BPV0VSLCBOT1VWRUFVX0RTTV9QT1dFUl9TVEFNSU5BLAogCQkJCQkJCQkJTlVMTCk7Ci0JfSBlbHNlIHsJCS8qIEVuc3VyZSB0aGF0IHRoZSBleHRlcm5hbCBHUFUgaXMgZW5hYmxlZCAqLwotCQlub3V2ZWF1X2RzbShkZXYsIE5PVVZFQVVfRFNNX0xFRCwgTk9VVkVBVV9EU01fTEVEX1NQRUVELCBOVUxMKTsKLQkJbm91dmVhdV9kc20oZGV2LCBOT1VWRUFVX0RTTV9QT1dFUiwgTk9VVkVBVV9EU01fUE9XRVJfU1BFRUQsCi0JCQkJCQkJCQlOVUxMKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKaW5kZXggZDdmOGQ4Yi4uMGU5Y2QxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKQEAgLTE4NjUsNyArMTg2NSw3IEBACiAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBiaW9zLT5kZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNDApCiAJCXJldHVybiAxOwogCiAJLyoKQEAgLTM3NjUsNyArMzc2NSw2IEBACiAJICovCiAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBpbml0X2V4ZWMgaWV4ZWMgPSB7dHJ1ZSwgZmFsc2V9OwogCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOwogCXVpbnQ4X3QgKnRhYmxlID0gJmJpb3MtPmRhdGFbYmlvcy0+ZGlzcGxheS5zY3JpcHRfdGFibGVfcHRyXTsKIAl1aW50OF90ICpvdGFibGUgPSBOVUxMOwpAQCAtMzg0NSw4ICszODQ0LDYgQEAKIAkJfQogCX0KIAotCWJpb3MtPmRpc3BsYXkub3V0cHV0ID0gZGNiZW50OwotCiAJaWYgKHB4Y2xrID09IDApIHsKIAkJc2NyaXB0ID0gUk9NMTYob3RhYmxlWzZdKTsKIAkJaWYgKCFzY3JpcHQpIHsKQEAgLTM4NTUsNyArMzg1Miw3IEBACiAJCX0KIAogCQlOVl9UUkFDRShkZXYsICIweCUwNFg6IHBhcnNpbmcgb3V0cHV0IHNjcmlwdCAwXG4iLCBzY3JpcHQpOwotCQlwYXJzZV9pbml0X3RhYmxlKGJpb3MsIHNjcmlwdCwgJmlleGVjKTsKKwkJbm91dmVhdV9iaW9zX3J1bl9pbml0X3RhYmxlKGRldiwgc2NyaXB0LCBkY2JlbnQpOwogCX0gZWxzZQogCWlmIChweGNsayA9PSAtMSkgewogCQlzY3JpcHQgPSBST00xNihvdGFibGVbOF0pOwpAQCAtMzg2NSw3ICszODYyLDcgQEAKIAkJfQogCiAJCU5WX1RSQUNFKGRldiwgIjB4JTA0WDogcGFyc2luZyBvdXRwdXQgc2NyaXB0IDFcbiIsIHNjcmlwdCk7Ci0JCXBhcnNlX2luaXRfdGFibGUoYmlvcywgc2NyaXB0LCAmaWV4ZWMpOworCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBzY3JpcHQsIGRjYmVudCk7CiAJfSBlbHNlCiAJaWYgKHB4Y2xrID09IC0yKSB7CiAJCWlmICh0YWJsZVs0XSA+PSAxMikKQEAgLTM4NzgsNyArMzg3NSw3IEBACiAJCX0KIAogCQlOVl9UUkFDRShkZXYsICIweCUwNFg6IHBhcnNpbmcgb3V0cHV0IHNjcmlwdCAyXG4iLCBzY3JpcHQpOwotCQlwYXJzZV9pbml0X3RhYmxlKGJpb3MsIHNjcmlwdCwgJmlleGVjKTsKKwkJbm91dmVhdV9iaW9zX3J1bl9pbml0X3RhYmxlKGRldiwgc2NyaXB0LCBkY2JlbnQpOwogCX0gZWxzZQogCWlmIChweGNsayA+IDApIHsKIAkJc2NyaXB0ID0gUk9NMTYob3RhYmxlW3RhYmxlWzRdICsgaSo2ICsgMl0pOwpAQCAtMzg5MCw3ICszODg3LDcgQEAKIAkJfQogCiAJCU5WX1RSQUNFKGRldiwgIjB4JTA0WDogcGFyc2luZyBjbG9jayBzY3JpcHQgMFxuIiwgc2NyaXB0KTsKLQkJcGFyc2VfaW5pdF90YWJsZShiaW9zLCBzY3JpcHQsICZpZXhlYyk7CisJCW5vdXZlYXVfYmlvc19ydW5faW5pdF90YWJsZShkZXYsIHNjcmlwdCwgZGNiZW50KTsKIAl9IGVsc2UKIAlpZiAocHhjbGsgPCAwKSB7CiAJCXNjcmlwdCA9IFJPTTE2KG90YWJsZVt0YWJsZVs0XSArIGkqNiArIDRdKTsKQEAgLTM5MDIsNyArMzg5OSw3IEBACiAJCX0KIAogCQlOVl9UUkFDRShkZXYsICIweCUwNFg6IHBhcnNpbmcgY2xvY2sgc2NyaXB0IDFcbiIsIHNjcmlwdCk7Ci0JCXBhcnNlX2luaXRfdGFibGUoYmlvcywgc2NyaXB0LCAmaWV4ZWMpOworCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBzY3JpcHQsIGRjYmVudCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01ODY1LDkgKzU4NjIsMTEgQEAKIAlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKIAlzdHJ1Y3QgaW5pdF9leGVjIGlleGVjID0geyB0cnVlLCBmYWxzZSB9OwogCisJbXV0ZXhfbG9jaygmYmlvcy0+bG9jayk7CiAJYmlvcy0+ZGlzcGxheS5vdXRwdXQgPSBkY2JlbnQ7CiAJcGFyc2VfaW5pdF90YWJsZShiaW9zLCB0YWJsZSwgJmlleGVjKTsKIAliaW9zLT5kaXNwbGF5Lm91dHB1dCA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZiaW9zLT5sb2NrKTsKIH0KIAogc3RhdGljIGJvb2wgTlZJbml0VkJJT1Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTU4NzYsNiArNTg3NSw3IEBACiAJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CiAKIAltZW1zZXQoYmlvcywgMCwgc2l6ZW9mKHN0cnVjdCBudmJpb3MpKTsKKwltdXRleF9pbml0KCZiaW9zLT5sb2NrKTsKIAliaW9zLT5kZXYgPSBkZXY7CiAKIAlpZiAoIU5WU2hhZG93VkJJT1MoZGV2LCBiaW9zLT5kYXRhKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKaW5kZXggMDU4ZTk4Yy4uZmQ5NGJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKQEAgLTIwNSw2ICsyMDUsOCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IG5vdXZlYXVfYmlvc19pbmZvIHB1YjsKIAorCXN0cnVjdCBtdXRleCBsb2NrOworCiAJdWludDhfdCBkYXRhW05WX1BST01fU0laRV07CiAJdW5zaWduZWQgaW50IGxlbmd0aDsKIAlib29sIGV4ZWN1dGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKaW5kZXggZGIwZWQ0Yy4uMDI4NzE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwpAQCAtNjUsOCArNjUsMTAgQEAKIAogCS8qCiAJICogU29tZSBvZiB0aGUgdGlsZV9mbGFncyBoYXZlIGEgcGVyaW9kaWMgc3RydWN0dXJlIG9mIE4qNDA5NiBieXRlcywKLQkgKiBhbGlnbiB0byB0byB0aGF0IGFzIHdlbGwgYXMgdGhlIHBhZ2Ugc2l6ZS4gT3ZlcmFsbG9jYXRlIG1lbW9yeSB0bwotCSAqIGF2b2lkIGNvcnJ1cHRpb24gb2Ygb3RoZXIgYnVmZmVyIG9iamVjdHMuCisJICogYWxpZ24gdG8gdG8gdGhhdCBhcyB3ZWxsIGFzIHRoZSBwYWdlIHNpemUuIEFsaWduIHRoZSBzaXplIHRvIHRoZQorCSAqIGFwcHJvcHJpYXRlIGJvdW5kYXJpZXMuIFRoaXMgZG9lcyBpbXBseSB0aGF0IHNpemVzIGFyZSByb3VuZGVkIHVwCisJICogMy03IHBhZ2VzLCBzbyBiZSBhd2FyZSBvZiB0aGlzIGFuZCBkbyBub3Qgd2FzdGUgbWVtb3J5IGJ5IGFsbG9jYXRpbmcKKwkgKiBtYW55IHNtYWxsIGJ1ZmZlcnMuCiAJICovCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApIHsKIAkJdWludDMyX3QgYmxvY2tfc2l6ZSA9IG5vdXZlYXVfbWVtX2ZiX2Ftb3VudChkZXYpID4+IDE1OwpAQCAtNzcsMjIgKzc5LDIwIEBACiAJCWNhc2UgMHgyODAwOgogCQljYXNlIDB4NDgwMDoKIAkJY2FzZSAweDdhMDA6Ci0JCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIGJsb2NrX3NpemUpOwogCQkJaWYgKGlzX3Bvd2VyX29mXzIoYmxvY2tfc2l6ZSkpIHsKLQkJCQkqc2l6ZSArPSAzICogYmxvY2tfc2l6ZTsKIAkJCQlmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykgewogCQkJCQkqYWxpZ24gPSAxMiAqIGkgKiBibG9ja19zaXplOwogCQkJCQlpZiAoISgqYWxpZ24gJSA2NTUzNikpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCSpzaXplICs9IDYgKiBibG9ja19zaXplOwogCQkJCWZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7CiAJCQkJCSphbGlnbiA9IDggKiBpICogYmxvY2tfc2l6ZTsKIAkJCQkJaWYgKCEoKmFsaWduICUgNjU1MzYpKQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQorCQkJKnNpemUgPSByb3VuZHVwKCpzaXplLCAqYWxpZ24pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKaW5kZXggMzQzZDcxOC4uMjI4MWY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKQEAgLTI3OCwxMiArMjc4LDExIEBACiAJLyogRW5zdXJlIHRoZSBjaGFubmVsIGlzIG5vIGxvbmdlciBhY3RpdmUgb24gdGhlIEdQVSAqLwogCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAotCWlmIChwZ3JhcGgtPmNoYW5uZWwoZGV2KSA9PSBjaGFuKSB7Ci0JCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIGZhbHNlKTsKKwlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKIAkJcGdyYXBoLT51bmxvYWRfY29udGV4dChkZXYpOwotCQlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7Ci0JfQogCXBncmFwaC0+ZGVzdHJveV9jb250ZXh0KGNoYW4pOworCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCB0cnVlKTsKIAogCWlmIChwZmlmby0+Y2hhbm5lbF9pZChkZXYpID09IGNoYW4tPmlkKSB7CiAJCXBmaWZvLT5kaXNhYmxlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYwppbmRleCA3ZTZkNjczLi5kMmY2MzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKQEAgLTg4LDEzICs4OCwxNCBAQAogewogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0KIAkJbm91dmVhdV9jb25uZWN0b3IoZHJtX2Nvbm5lY3Rvcik7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2Nvbm5lY3Rvci0+YmFzZS5kZXY7Ci0KLQlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCiAJaWYgKCFudl9jb25uZWN0b3IpCiAJCXJldHVybjsKIAorCWRldiA9IG52X2Nvbm5lY3Rvci0+YmFzZS5kZXY7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CisKIAlrZnJlZShudl9jb25uZWN0b3ItPmVkaWQpOwogCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGRybV9jb25uZWN0b3IpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChkcm1fY29ubmVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYwppbmRleCBkZDQ5MzcyLi5mOTU0YWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jCkBAIC01MDIsMTIgKzUwMiwxMiBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKChzdGF0ICYgTlY1MF9BVVhDSF9TVEFUX0NPVU5UKSAhPSBkYXRhX25yKSB7Ci0JCXJldCA9IC1FUkVNT1RFSU87Ci0JCWdvdG8gb3V0OwotCX0KLQogCWlmIChjbWQgJiAxKSB7CisJCWlmICgoc3RhdCAmIE5WNTBfQVVYQ0hfU1RBVF9DT1VOVCkgIT0gZGF0YV9ucikgeworCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkJZGF0YTMyW2ldID0gbnZfcmQzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9JTihpbmRleCwgaSkpOwogCQkJTlZfREVCVUdfS01TKGRldiwgInJkICVkOiAweCUwOHhcbiIsIGksIGRhdGEzMltpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwppbmRleCAzNDNhYjdmLi5kYTNiOTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKQEAgLTU2LDcgKzU2LDcgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZCh2cmFtX3B1c2hidWYsIG5vdXZlYXVfdnJhbV9wdXNoYnVmLCBpbnQsIDA0MDApOwogCiBNT0RVTEVfUEFSTV9ERVNDKHZyYW1fbm90aWZ5LCAiRm9yY2UgRE1BIG5vdGlmaWVycyB0byBiZSBpbiBWUkFNIik7Ci1pbnQgbm91dmVhdV92cmFtX25vdGlmeTsKK2ludCBub3V2ZWF1X3ZyYW1fbm90aWZ5ID0gMTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh2cmFtX25vdGlmeSwgbm91dmVhdV92cmFtX25vdGlmeSwgaW50LCAwNDAwKTsKIAogTU9EVUxFX1BBUk1fREVTQyhkdWFsbGluaywgIkFsbG93IGR1YWwtbGluayBUTURTICg+PUdlRm9yY2UgOCkiKTsKQEAgLTc1LDYgKzc1LDE0IEBACiBpbnQgbm91dmVhdV9pZ25vcmVsaWQgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZWxpZCwgbm91dmVhdV9pZ25vcmVsaWQsIGludCwgMDQwMCk7CiAKK01PRFVMRV9QQVJNX0RFU0Mobm9hZ3AsICJEaXNhYmxlIGFsbCBhY2NlbGVyYXRpb24iKTsKK2ludCBub3V2ZWF1X25vYWNjZWwgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKG5vYWNjZWwsIG5vdXZlYXVfbm9hY2NlbCwgaW50LCAwNDAwKTsKKworTU9EVUxFX1BBUk1fREVTQyhub2FncCwgIkRpc2FibGUgZmJjb24gYWNjZWxlcmF0aW9uIik7CitpbnQgbm91dmVhdV9ub2ZiYWNjZWwgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKG5vZmJhY2NlbCwgbm91dmVhdV9ub2ZiYWNjZWwsIGludCwgMDQwMCk7CisKIE1PRFVMRV9QQVJNX0RFU0ModHZfbm9ybSwgIkRlZmF1bHQgVFYgbm9ybS5cbiIKIAkJICJcdFx0U3VwcG9ydGVkOiBQQUwsIFBBTC1NLCBQQUwtTiwgUEFMLU5jLCBOVFNDLU0sIE5UU0MtSixcbiIKIAkJICJcdFx0XHRoZDQ4MGksIGhkNDgwcCwgaGQ1NzZpLCBoZDU3NnAsIGhkNzIwcCwgaGQxMDgwaS5cbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCmluZGV4IDZiOTY5MDQuLjFjMTVlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaApAQCAtNTgzLDYgKzU4Myw3IEBACiAJdWludDY0X3Qgdm1fZW5kOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqdm1fdnJhbV9wdFtOVjUwX1ZNX1ZSQU1fTlJdOwogCWludCB2bV92cmFtX3B0X25yOworCXVpbnQ2NF90IHZyYW1fc3lzX2Jhc2U7CiAKIAkvKiB0aGUgbXRyciBjb3ZlcmluZyB0aGUgRkIgKi8KIAlpbnQgZmJfbXRycjsKQEAgLTY3OCw2ICs2NzksOCBAQAogZXh0ZXJuIGNoYXIgKm5vdXZlYXVfdmJpb3M7CiBleHRlcm4gaW50IG5vdXZlYXVfY3R4Znc7CiBleHRlcm4gaW50IG5vdXZlYXVfaWdub3JlbGlkOworZXh0ZXJuIGludCBub3V2ZWF1X25vZmJhY2NlbDsKK2V4dGVybiBpbnQgbm91dmVhdV9ub2FjY2VsOwogCiAvKiBub3V2ZWF1X3N0YXRlLmMgKi8KIGV4dGVybiB2b2lkIG5vdXZlYXVfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCmluZGV4IDBiMDVjODYuLmVhODc5YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKQEAgLTEwNyw2ICsxMDcsMzQgQEAKIAkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIG52MDRfZmJjb25fb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIgPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnID0gZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcsCisJLmZiX2ZpbGxyZWN0ID0gbnYwNF9mYmNvbl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBudjA0X2ZiY29uX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBudjA0X2ZiY29uX2ltYWdlYmxpdCwKKwkuZmJfc3luYyA9IG5vdXZlYXVfZmJjb25fc3luYywKKwkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAorCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCit9OworCitzdGF0aWMgc3RydWN0IGZiX29wcyBudjUwX2ZiY29uX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyID0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSBkcm1fZmJfaGVscGVyX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZyA9IGRybV9mYl9oZWxwZXJfc2V0Y29scmVnLAorCS5mYl9maWxscmVjdCA9IG52NTBfZmJjb25fZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gbnY1MF9mYmNvbl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gbnY1MF9mYmNvbl9pbWFnZWJsaXQsCisJLmZiX3N5bmMgPSBub3V2ZWF1X2ZiY29uX3N5bmMsCisJLmZiX3Bhbl9kaXNwbGF5ID0gZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsgPSBkcm1fZmJfaGVscGVyX2JsYW5rLAorCS5mYl9zZXRjbWFwID0gZHJtX2ZiX2hlbHBlcl9zZXRjbWFwLAorfTsKKwogc3RhdGljIHZvaWQgbm91dmVhdV9mYmNvbl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkJICAgIHUxNiBibHVlLCBpbnQgcmVnbm8pCiB7CkBAIC0yNjcsOCArMjk1LDEyIEBACiAJZGV2X3ByaXYtPmZiZGV2X2luZm8gPSBpbmZvOwogCiAJc3RyY3B5KGluZm8tPmZpeC5pZCwgIm5vdXZlYXVmYiIpOwotCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8Ci0JCSAgICAgIEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUOworCWlmIChub3V2ZWF1X25vZmJhY2NlbCkKKwkJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOworCWVsc2UKKwkJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwKKwkJCSAgICAgIEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwKKwkJCSAgICAgIEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVDsKIAlpbmZvLT5mYm9wcyA9ICZub3V2ZWF1X2ZiY29uX29wczsKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IGRldi0+bW9kZV9jb25maWcuZmJfYmFzZSArIG52Ym8tPmJvLm9mZnNldCAtCiAJCQkgICAgICAgZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZTsKQEAgLTMxNiwxMyArMzQ4LDE1IEBACiAJcGFyLT5ub3V2ZWF1X2ZiID0gbm91dmVhdV9mYjsKIAlwYXItPmRldiA9IGRldjsKIAotCWlmIChkZXZfcHJpdi0+Y2hhbm5lbCkgeworCWlmIChkZXZfcHJpdi0+Y2hhbm5lbCAmJiAhbm91dmVhdV9ub2ZiYWNjZWwpIHsKIAkJc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7CiAJCWNhc2UgTlZfNTA6CiAJCQludjUwX2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7CisJCQlpbmZvLT5mYm9wcyA9ICZudjUwX2ZiY29uX29wczsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJbnYwNF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOworCQkJaW5mby0+ZmJvcHMgPSAmbnYwNF9mYmNvbl9vcHM7CiAJCQlicmVhazsKIAkJfTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmgKaW5kZXggNDYyZTBiOC4uZjljMzRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uaApAQCAtNDAsNyArNDAsMTMgQEAKIHZvaWQgbm91dmVhdV9mYmNvbl9yZXN0b3JlKHZvaWQpOwogdm9pZCBub3V2ZWF1X2ZiY29uX3pmaWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCit2b2lkIG52MDRfZmJjb25fY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqcmVnaW9uKTsKK3ZvaWQgbnYwNF9mYmNvbl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKK3ZvaWQgbnYwNF9mYmNvbl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOwogaW50IG52MDRfZmJjb25fYWNjZWxfaW5pdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Cit2b2lkIG52NTBfZmJjb25fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7Cit2b2lkIG52NTBfZmJjb25fY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqcmVnaW9uKTsKK3ZvaWQgbnY1MF9mYmNvbl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOwogaW50IG52NTBfZmJjb25fYWNjZWxfaW5pdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKIHZvaWQgbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCmluZGV4IDZhYzgwNGIuLjcwY2MzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwpAQCAtOTI1LDcgKzkyNSw5IEBACiAJfQogCiAJaWYgKHJlcS0+ZmxhZ3MgJiBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT0JMT0NLKSB7CisJCXNwaW5fbG9jaygmbnZiby0+Ym8ubG9jayk7CiAJCXJldCA9IHR0bV9ib193YWl0KCZudmJvLT5ibywgZmFsc2UsIGZhbHNlLCBub193YWl0KTsKKwkJc3Bpbl91bmxvY2soJm52Ym8tPmJvLmxvY2spOwogCX0gZWxzZSB7CiAJCXJldCA9IHR0bV9ib19zeW5jY3B1X3dyaXRlX2dyYWIoJm52Ym8tPmJvLCBub193YWl0KTsKIAkJaWYgKHJldCA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5jCmluZGV4IDQxOWY0YzIuLmM3ZWJlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ3JjdHguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMKQEAgLTk3LDggKzk3LDggQEAKIAkJfQogCiAJCXBncmFwaC0+Y3R4dmFscyA9IGttYWxsb2MoZnctPnNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBncmFwaC0+Y3R4cHJvZykgewotCQkJTlZfRVJST1IoZGV2LCAiT09NIGNvcHlpbmcgY3R4cHJvZ1xuIik7CisJCWlmICghcGdyYXBoLT5jdHh2YWxzKSB7CisJCQlOVl9FUlJPUihkZXYsICJPT00gY29weWluZyBjdHh2YWxzXG4iKTsKIAkJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQkJbm91dmVhdV9ncmN0eF9maW5pKGRldik7CiAJCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lycS5jCmluZGV4IDNiOWJhZDYuLjQ0N2Y5ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pcnEuYwpAQCAtMjExLDYgKzIxMSwyMCBAQAogCQkJCQkJCQlnZXQgKyA0KTsKIAkJfQogCisJCWlmIChzdGF0dXMgJiBOVl9QRklGT19JTlRSX1NFTUFQSE9SRSkgeworCQkJdWludDMyX3Qgc2VtOworCisJCQlzdGF0dXMgJj0gfk5WX1BGSUZPX0lOVFJfU0VNQVBIT1JFOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fSU5UUl8wLAorCQkJCU5WX1BGSUZPX0lOVFJfU0VNQVBIT1JFKTsKKworCQkJc2VtID0gbnZfcmQzMihkZXYsIE5WMTBfUEZJRk9fQ0FDSEUxX1NFTUFQSE9SRSk7CisJCQludl93cjMyKGRldiwgTlYxMF9QRklGT19DQUNIRTFfU0VNQVBIT1JFLCBzZW0gfCAweDEpOworCisJCQludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfR0VULCBnZXQgKyA0KTsKKwkJCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9QVUxMMCwgMSk7CisJCX0KKwogCQlpZiAoc3RhdHVzKSB7CiAJCQlOVl9JTkZPKGRldiwgIlBGSUZPX0lOVFIgMHglMDh4IC0gQ2ggJWRcbiIsCiAJCQkJc3RhdHVzLCBjaGlkKTsKQEAgLTU2Niw4NiArNTgwLDk5IEBACiBzdGF0aWMgdm9pZAogbnY1MF9wZ3JhcGhfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQl1aW50MzJfdCBzdGF0dXMsIG5zb3VyY2U7CisJdWludDMyX3Qgc3RhdHVzOwogCi0Jc3RhdHVzID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIpOwotCW5zb3VyY2UgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfTlNPVVJDRSk7CisJd2hpbGUgKChzdGF0dXMgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfSU5UUikpKSB7CisJCXVpbnQzMl90IG5zb3VyY2UgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfTlNPVVJDRSk7CiAKLQlpZiAoc3RhdHVzICYgMHgwMDAwMDAwMSkgewotCQlub3V2ZWF1X3BncmFwaF9pbnRyX25vdGlmeShkZXYsIG5zb3VyY2UpOwotCQlzdGF0dXMgJj0gfjB4MDAwMDAwMDE7Ci0JCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMDAwMDAxKTsKLQl9CisJCWlmIChzdGF0dXMgJiAweDAwMDAwMDAxKSB7CisJCQlub3V2ZWF1X3BncmFwaF9pbnRyX25vdGlmeShkZXYsIG5zb3VyY2UpOworCQkJc3RhdHVzICY9IH4weDAwMDAwMDAxOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAwMDAwMDEpOworCQl9CiAKLQlpZiAoc3RhdHVzICYgMHgwMDAwMDAxMCkgewotCQlub3V2ZWF1X3BncmFwaF9pbnRyX2Vycm9yKGRldiwgbnNvdXJjZSB8Ci0JCQkJCSAgTlYwM19QR1JBUEhfTlNPVVJDRV9JTExFR0FMX01USEQpOworCQlpZiAoc3RhdHVzICYgMHgwMDAwMDAxMCkgeworCQkJbm91dmVhdV9wZ3JhcGhfaW50cl9lcnJvcihkZXYsIG5zb3VyY2UgfAorCQkJCQlOVjAzX1BHUkFQSF9OU09VUkNFX0lMTEVHQUxfTVRIRCk7CiAKLQkJc3RhdHVzICY9IH4weDAwMDAwMDEwOwotCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgMHgwMDAwMDAxMCk7Ci0JfQorCQkJc3RhdHVzICY9IH4weDAwMDAwMDEwOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAwMDAwMTApOworCQl9CiAKLQlpZiAoc3RhdHVzICYgMHgwMDAwMTAwMCkgewotCQludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMDAwMDApOwotCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgTlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpOwotCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfSU5UUl9FTiwgbnZfcmQzMihkZXYsCi0JCQlOVjQwX1BHUkFQSF9JTlRSX0VOKSAmIH5OVl9QR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSCk7Ci0JCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgMHgwMDAxMDAwMSk7CisJCWlmIChzdGF0dXMgJiAweDAwMDAxMDAwKSB7CisJCQludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMDAwMDApOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsCisJCQkJTlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpOworCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0lOVFJfRU4sIG52X3JkMzIoZGV2LAorCQkJCU5WNDBfUEdSQVBIX0lOVFJfRU4pICYKKwkJCQl+TlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpOworCQkJbnZfd3IzMihkZXYsIDB4NDAwNTAwLCAweDAwMDEwMDAxKTsKIAotCQludjUwX2dyYXBoX2NvbnRleHRfc3dpdGNoKGRldik7CisJCQludjUwX2dyYXBoX2NvbnRleHRfc3dpdGNoKGRldik7CiAKLQkJc3RhdHVzICY9IH5OVl9QR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSDsKLQl9CisJCQlzdGF0dXMgJj0gfk5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIOworCQl9CiAKLQlpZiAoc3RhdHVzICYgMHgwMDEwMDAwMCkgewotCQlub3V2ZWF1X3BncmFwaF9pbnRyX2Vycm9yKGRldiwgbnNvdXJjZSB8Ci0JCQkJCSAgTlYwM19QR1JBUEhfTlNPVVJDRV9EQVRBX0VSUk9SKTsKKwkJaWYgKHN0YXR1cyAmIDB4MDAxMDAwMDApIHsKKwkJCW5vdXZlYXVfcGdyYXBoX2ludHJfZXJyb3IoZGV2LCBuc291cmNlIHwKKwkJCQkJTlYwM19QR1JBUEhfTlNPVVJDRV9EQVRBX0VSUk9SKTsKIAotCQlzdGF0dXMgJj0gfjB4MDAxMDAwMDA7Ci0JCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMTAwMDAwKTsKLQl9CisJCQlzdGF0dXMgJj0gfjB4MDAxMDAwMDA7CisJCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgMHgwMDEwMDAwMCk7CisJCX0KIAotCWlmIChzdGF0dXMgJiAweDAwMjAwMDAwKSB7Ci0JCWludCByOworCQlpZiAoc3RhdHVzICYgMHgwMDIwMDAwMCkgeworCQkJaW50IHI7CiAKLQkJbm91dmVhdV9wZ3JhcGhfaW50cl9lcnJvcihkZXYsIG5zb3VyY2UgfAotCQkJCQkgIE5WMDNfUEdSQVBIX05TT1VSQ0VfUFJPVEVDVElPTl9FUlJPUik7CisJCQlub3V2ZWF1X3BncmFwaF9pbnRyX2Vycm9yKGRldiwgbnNvdXJjZSB8CisJCQkJCU5WMDNfUEdSQVBIX05TT1VSQ0VfUFJPVEVDVElPTl9FUlJPUik7CiAKLQkJTlZfRVJST1IoZGV2LCAibWFnaWMgc2V0IDE6XG4iKTsKLQkJZm9yIChyID0gMHg0MDg5MDA7IHIgPD0gMHg0MDg5MTA7IHIgKz0gNCkKLQkJCU5WX0VSUk9SKGRldiwgIlx0MHglMDh4OiAweCUwOHhcbiIsIHIsIG52X3JkMzIoZGV2LCByKSk7Ci0JCW52X3dyMzIoZGV2LCAweDQwODkwMCwgbnZfcmQzMihkZXYsIDB4NDA4OTA0KSB8IDB4YzAwMDAwMDApOwotCQlmb3IgKHIgPSAweDQwOGUwODsgciA8PSAweDQwOGUyNDsgciArPSA0KQotCQkJTlZfRVJST1IoZGV2LCAiXHQweCUwOHg6IDB4JTA4eFxuIiwgciwgbnZfcmQzMihkZXYsIHIpKTsKLQkJbnZfd3IzMihkZXYsIDB4NDA4ZTA4LCBudl9yZDMyKGRldiwgMHg0MDhlMDgpIHwgMHhjMDAwMDAwMCk7CisJCQlOVl9FUlJPUihkZXYsICJtYWdpYyBzZXQgMTpcbiIpOworCQkJZm9yIChyID0gMHg0MDg5MDA7IHIgPD0gMHg0MDg5MTA7IHIgKz0gNCkKKwkJCQlOVl9FUlJPUihkZXYsICJcdDB4JTA4eDogMHglMDh4XG4iLCByLAorCQkJCQludl9yZDMyKGRldiwgcikpOworCQkJbnZfd3IzMihkZXYsIDB4NDA4OTAwLAorCQkJCW52X3JkMzIoZGV2LCAweDQwODkwNCkgfCAweGMwMDAwMDAwKTsKKwkJCWZvciAociA9IDB4NDA4ZTA4OyByIDw9IDB4NDA4ZTI0OyByICs9IDQpCisJCQkJTlZfRVJST1IoZGV2LCAiXHQweCUwOHg6IDB4JTA4eFxuIiwgciwKKwkJCQkJCQludl9yZDMyKGRldiwgcikpOworCQkJbnZfd3IzMihkZXYsIDB4NDA4ZTA4LAorCQkJCW52X3JkMzIoZGV2LCAweDQwOGUwOCkgfCAweGMwMDAwMDAwKTsKIAotCQlOVl9FUlJPUihkZXYsICJtYWdpYyBzZXQgMjpcbiIpOwotCQlmb3IgKHIgPSAweDQwOTkwMDsgciA8PSAweDQwOTkxMDsgciArPSA0KQotCQkJTlZfRVJST1IoZGV2LCAiXHQweCUwOHg6IDB4JTA4eFxuIiwgciwgbnZfcmQzMihkZXYsIHIpKTsKLQkJbnZfd3IzMihkZXYsIDB4NDA5OTAwLCBudl9yZDMyKGRldiwgMHg0MDk5MDQpIHwgMHhjMDAwMDAwMCk7Ci0JCWZvciAociA9IDB4NDA5ZTA4OyByIDw9IDB4NDA5ZTI0OyByICs9IDQpCi0JCQlOVl9FUlJPUihkZXYsICJcdDB4JTA4eDogMHglMDh4XG4iLCByLCBudl9yZDMyKGRldiwgcikpOwotCQludl93cjMyKGRldiwgMHg0MDllMDgsIG52X3JkMzIoZGV2LCAweDQwOWUwOCkgfCAweGMwMDAwMDAwKTsKKwkJCU5WX0VSUk9SKGRldiwgIm1hZ2ljIHNldCAyOlxuIik7CisJCQlmb3IgKHIgPSAweDQwOTkwMDsgciA8PSAweDQwOTkxMDsgciArPSA0KQorCQkJCU5WX0VSUk9SKGRldiwgIlx0MHglMDh4OiAweCUwOHhcbiIsIHIsCisJCQkJCW52X3JkMzIoZGV2LCByKSk7CisJCQludl93cjMyKGRldiwgMHg0MDk5MDAsCisJCQkJbnZfcmQzMihkZXYsIDB4NDA5OTA0KSB8IDB4YzAwMDAwMDApOworCQkJZm9yIChyID0gMHg0MDllMDg7IHIgPD0gMHg0MDllMjQ7IHIgKz0gNCkKKwkJCQlOVl9FUlJPUihkZXYsICJcdDB4JTA4eDogMHglMDh4XG4iLCByLAorCQkJCQludl9yZDMyKGRldiwgcikpOworCQkJbnZfd3IzMihkZXYsIDB4NDA5ZTA4LAorCQkJCW52X3JkMzIoZGV2LCAweDQwOWUwOCkgfCAweGMwMDAwMDAwKTsKIAotCQlzdGF0dXMgJj0gfjB4MDAyMDAwMDA7Ci0JCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9OU09VUkNFLCBuc291cmNlKTsKLQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAyMDAwMDApOwotCX0KKwkJCXN0YXR1cyAmPSB+MHgwMDIwMDAwMDsKKwkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9OU09VUkNFLCBuc291cmNlKTsKKwkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMjAwMDAwKTsKKwkJfQogCi0JaWYgKHN0YXR1cykgewotCQlOVl9JTkZPKGRldiwgIlVuaGFuZGxlZCBQR1JBUEhfSU5UUiAtIDB4JTA4eFxuIiwgc3RhdHVzKTsKLQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIHN0YXR1cyk7Ci0JfQorCQlpZiAoc3RhdHVzKSB7CisJCQlOVl9JTkZPKGRldiwgIlVuaGFuZGxlZCBQR1JBUEhfSU5UUiAtIDB4JTA4eFxuIiwKKwkJCQlzdGF0dXMpOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIHN0YXR1cyk7CisJCX0KIAotCXsKLQkJY29uc3QgaW50IGlzYiA9ICgxIDw8IDE2KSB8ICgxIDw8IDApOworCQl7CisJCQljb25zdCBpbnQgaXNiID0gKDEgPDwgMTYpIHwgKDEgPDwgMCk7CiAKLQkJaWYgKChudl9yZDMyKGRldiwgMHg0MDA1MDApICYgaXNiKSAhPSBpc2IpCi0JCQludl93cjMyKGRldiwgMHg0MDA1MDAsIG52X3JkMzIoZGV2LCAweDQwMDUwMCkgfCBpc2IpOwotCQludl93cjMyKGRldiwgMHg0MDA4MjQsIG52X3JkMzIoZGV2LCAweDQwMDgyNCkgJiB+KDEgPDwgMzEpKTsKKwkJCWlmICgobnZfcmQzMihkZXYsIDB4NDAwNTAwKSAmIGlzYikgIT0gaXNiKQorCQkJCW52X3dyMzIoZGV2LCAweDQwMDUwMCwKKwkJCQkJbnZfcmQzMihkZXYsIDB4NDAwNTAwKSB8IGlzYik7CisJCX0KIAl9CiAKIAludl93cjMyKGRldiwgTlYwM19QTUNfSU5UUl8wLCBOVl9QTUNfSU5UUl8wX1BHUkFQSF9QRU5ESU5HKTsKKwludl93cjMyKGRldiwgMHg0MDA4MjQsIG52X3JkMzIoZGV2LCAweDQwMDgyNCkgJiB+KDEgPDwgMzEpKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IDhmM2ExMmYuLjJkYzA5ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtMjg1LDUzICsyODUsNTAgQEAKIAkJCXVpbnQzMl90IGZsYWdzLCB1aW50NjRfdCBwaHlzKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqcGd0OwotCXVuc2lnbmVkIHBzeiwgcGZsLCBwYWdlczsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBndDsKKwl1bnNpZ25lZCBibG9jazsKKwlpbnQgaTsKIAotCWlmICh2aXJ0ID49IGRldl9wcml2LT52bV9nYXJ0X2Jhc2UgJiYKLQkgICAgKHZpcnQgKyBzaXplKSA8IChkZXZfcHJpdi0+dm1fZ2FydF9iYXNlICsgZGV2X3ByaXYtPnZtX2dhcnRfc2l6ZSkpIHsKLQkJcHN6ID0gMTI7Ci0JCXBndCA9ICZkZXZfcHJpdi0+Z2FydF9pbmZvLnNnX2N0eGRtYTsKLQkJcGZsID0gMHgyMTsKLQkJdmlydCAtPSBkZXZfcHJpdi0+dm1fZ2FydF9iYXNlOwotCX0gZWxzZQotCWlmICh2aXJ0ID49IGRldl9wcml2LT52bV92cmFtX2Jhc2UgJiYKLQkgICAgKHZpcnQgKyBzaXplKSA8IChkZXZfcHJpdi0+dm1fdnJhbV9iYXNlICsgZGV2X3ByaXYtPnZtX3ZyYW1fc2l6ZSkpIHsKLQkJcHN6ID0gMTY7Ci0JCXBndCA9IGRldl9wcml2LT52bV92cmFtX3B0OwotCQlwZmwgPSAweDAxOwotCQl2aXJ0IC09IGRldl9wcml2LT52bV92cmFtX2Jhc2U7Ci0JfSBlbHNlIHsKLQkJTlZfRVJST1IoZGV2LCAiSW52YWxpZCBhZGRyZXNzOiAweCUxNmxseC0weCUxNmxseFxuIiwKLQkJCSB2aXJ0LCB2aXJ0ICsgc2l6ZSAtIDEpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwl2aXJ0ID0gKCh2aXJ0IC0gZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZSkgPj4gMTYpIDw8IDE7CisJc2l6ZSA9IChzaXplID4+IDE2KSA8PCAxOworCisJcGh5cyB8PSAoKHVpbnQ2NF90KWZsYWdzIDw8IDMyKTsKKwlwaHlzIHw9IDE7CisJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7CisJCXBoeXMgKz0gZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2U7CisJCXBoeXMgfD0gMHgzMDsKIAl9CiAKLQlwYWdlcyA9IHNpemUgPj4gcHN6OwotCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7Ci0JaWYgKGZsYWdzICYgMHg4MDAwMDAwMCkgewotCQl3aGlsZSAocGFnZXMtLSkgewotCQkJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwdCA9IHBndFt2aXJ0ID4+IDI5XTsKLQkJCXVuc2lnbmVkIHB0ZSA9ICgodmlydCAmIDB4MWZmZmZmZmZVTEwpID4+IHBzeikgPDwgMTsKKwl3aGlsZSAoc2l6ZSkgeworCQl1bnNpZ25lZCBvZmZzZXRfaCA9IHVwcGVyXzMyX2JpdHMocGh5cyk7CisJCXVuc2lnbmVkIG9mZnNldF9sID0gbG93ZXJfMzJfYml0cyhwaHlzKTsKKwkJdW5zaWduZWQgcHRlLCBlbmQ7CiAKLQkJCW52X3dvMzIoZGV2LCBwdCwgcHRlKyssIDB4MDAwMDAwMDApOwotCQkJbnZfd28zMihkZXYsIHB0LCBwdGUrKywgMHgwMDAwMDAwMCk7Ci0KLQkJCXZpcnQgKz0gKDEgPDwgcHN6KTsKKwkJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJCWJsb2NrID0gMSA8PCAoaSArIDEpOworCQkJaWYgKHNpemUgPj0gYmxvY2sgJiYgISh2aXJ0ICYgKGJsb2NrIC0gMSkpKQorCQkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKHBhZ2VzLS0pIHsKLQkJCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcHQgPSBwZ3RbdmlydCA+PiAyOV07Ci0JCQl1bnNpZ25lZCBwdGUgPSAoKHZpcnQgJiAweDFmZmZmZmZmVUxMKSA+PiBwc3opIDw8IDE7Ci0JCQl1bnNpZ25lZCBvZmZzZXRfaCA9IHVwcGVyXzMyX2JpdHMocGh5cykgJiAweGZmOwotCQkJdW5zaWduZWQgb2Zmc2V0X2wgPSBsb3dlcl8zMl9iaXRzKHBoeXMpOworCQlvZmZzZXRfbCB8PSAoaSA8PCA3KTsKIAotCQkJbnZfd28zMihkZXYsIHB0LCBwdGUrKywgb2Zmc2V0X2wgfCBwZmwpOwotCQkJbnZfd28zMihkZXYsIHB0LCBwdGUrKywgb2Zmc2V0X2ggfCBmbGFncyk7CisJCXBoeXMgKz0gYmxvY2sgPDwgMTU7CisJCXNpemUgLT0gYmxvY2s7CiAKLQkJCXBoeXMgKz0gKDEgPDwgcHN6KTsKLQkJCXZpcnQgKz0gKDEgPDwgcHN6KTsKKwkJd2hpbGUgKGJsb2NrKSB7CisJCQlwZ3QgPSBkZXZfcHJpdi0+dm1fdnJhbV9wdFt2aXJ0ID4+IDE0XTsKKwkJCXB0ZSA9IHZpcnQgJiAweDNmZmU7CisKKwkJCWVuZCA9IHB0ZSArIGJsb2NrOworCQkJaWYgKGVuZCA+IDE2Mzg0KQorCQkJCWVuZCA9IDE2Mzg0OworCQkJYmxvY2sgLT0gKGVuZCAtIHB0ZSk7CisJCQl2aXJ0ICArPSAoZW5kIC0gcHRlKTsKKworCQkJd2hpbGUgKHB0ZSA8IGVuZCkgeworCQkJCW52X3dvMzIoZGV2LCBwZ3QsIHB0ZSsrLCBvZmZzZXRfbCk7CisJCQkJbnZfd28zMihkZXYsIHBndCwgcHRlKyssIG9mZnNldF9oKTsKKwkJCX0KIAkJfQogCX0KIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwpAQCAtMzU2LDcgKzM1Myw0MSBAQAogdm9pZAogbnY1MF9tZW1fdm1fdW5iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQ2NF90IHZpcnQsIHVpbnQzMl90IHNpemUpCiB7Ci0JbnY1MF9tZW1fdm1fYmluZF9saW5lYXIoZGV2LCB2aXJ0LCBzaXplLCAweDgwMDAwMDAwLCAwKTsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0OworCXVuc2lnbmVkIHBhZ2VzLCBwdGUsIGVuZDsKKworCXZpcnQgLT0gZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZTsKKwlwYWdlcyA9IChzaXplID4+IDE2KSA8PCAxOworCisJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CisJd2hpbGUgKHBhZ2VzKSB7CisJCXBndCA9IGRldl9wcml2LT52bV92cmFtX3B0W3ZpcnQgPj4gMjldOworCQlwdGUgPSAodmlydCAmIDB4MWZmZTAwMDBVTEwpID4+IDE1OworCisJCWVuZCA9IHB0ZSArIHBhZ2VzOworCQlpZiAoZW5kID4gMTYzODQpCisJCQllbmQgPSAxNjM4NDsKKwkJcGFnZXMgLT0gKGVuZCAtIHB0ZSk7CisJCXZpcnQgICs9IChlbmQgLSBwdGUpIDw8IDE1OworCisJCXdoaWxlIChwdGUgPCBlbmQpCisJCQludl93bzMyKGRldiwgcGd0LCBwdGUrKywgMCk7CisJfQorCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CisKKwludl93cjMyKGRldiwgMHgxMDBjODAsIDB4MDAwNTAwMDEpOworCWlmICghbnZfd2FpdCgweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpIHsKKwkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4MTAwYzgwICYgMSkgPT0gMCAoMilcbiIpOworCQlOVl9FUlJPUihkZXYsICIweDEwMGM4MCA9IDB4JTA4eFxuIiwgbnZfcmQzMihkZXYsIDB4MTAwYzgwKSk7CisJCXJldHVybjsKKwl9CisKKwludl93cjMyKGRldiwgMHgxMDBjODAsIDB4MDAwMDAwMDEpOworCWlmICghbnZfd2FpdCgweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpIHsKKwkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4MTAwYzgwICYgMSkgPT0gMCAoMilcbiIpOworCQlOVl9FUlJPUihkZXYsICIweDEwMGM4MCA9IDB4JTA4eFxuIiwgbnZfcmQzMihkZXYsIDB4MTAwYzgwKSk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCmluZGV4IDZjNjZhMzQuLmQ5OWRjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKQEAgLTM0LDE1ICszNCwyMCBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfYm8gKm50ZnkgPSBOVUxMOworCXVpbnQzMl90IGZsYWdzOwogCWludCByZXQ7CiAKLQlyZXQgPSBub3V2ZWF1X2dlbV9uZXcoZGV2LCBOVUxMLCBQQUdFX1NJWkUsIDAsIG5vdXZlYXVfdnJhbV9ub3RpZnkgPwotCQkJICAgICAgVFRNX1BMX0ZMQUdfVlJBTSA6IFRUTV9QTF9GTEFHX1RULAorCWlmIChub3V2ZWF1X3ZyYW1fbm90aWZ5KQorCQlmbGFncyA9IFRUTV9QTF9GTEFHX1ZSQU07CisJZWxzZQorCQlmbGFncyA9IFRUTV9QTF9GTEFHX1RUOworCisJcmV0ID0gbm91dmVhdV9nZW1fbmV3KGRldiwgTlVMTCwgUEFHRV9TSVpFLCAwLCBmbGFncywKIAkJCSAgICAgIDAsIDB4MDAwMCwgZmFsc2UsIHRydWUsICZudGZ5KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gbm91dmVhdV9ib19waW4obnRmeSwgVFRNX1BMX0ZMQUdfVlJBTSk7CisJcmV0ID0gbm91dmVhdV9ib19waW4obnRmeSwgZmxhZ3MpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtMTI4LDYgKzEzMyw4IEBACiAJCQl0YXJnZXQgPSBOVl9ETUFfVEFSR0VUX1BDSTsKIAkJfSBlbHNlIHsKIAkJCXRhcmdldCA9IE5WX0RNQV9UQVJHRVRfQUdQOworCQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCisJCQkJb2Zmc2V0ICs9IGRldl9wcml2LT52bV9nYXJ0X2Jhc2U7CiAJCX0KIAl9IGVsc2UgewogCQlOVl9FUlJPUihkZXYsICJCYWQgRE1BIHRhcmdldCwgbWVtX3R5cGUgJWQhXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKaW5kZXggNmMyY2Y4MTcuLmU3YzEwMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYwpAQCAtODg1LDExICs4ODUsMTIgQEAKIG5vdXZlYXVfZ3B1b2JqX3N3X25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgY2xhc3MsCiAJCSAgICAgIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKmdwdW9ial9yZXQpCiB7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXY7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmo7CiAKIAlpZiAoIWNoYW4gfHwgIWdwdW9ial9yZXQgfHwgKmdwdW9ial9yZXQgIT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CisJZGV2X3ByaXYgPSBjaGFuLT5kZXYtPmRldl9wcml2YXRlOwogCiAJZ3B1b2JqID0ga3phbGxvYyhzaXplb2YoKmdwdW9iaiksIEdGUF9LRVJORUwpOwogCWlmICghZ3B1b2JqKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmVnLmgKaW5kZXggMjUxZjFiMy4uYWE5YjMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JlZy5oCkBAIC05OSw2ICs5OSw3IEBACiAgKiB0aGUgY2FyZCB3aWxsIGhhbmcgZWFybHkgb24gaW4gdGhlIFggaW5pdCBwcm9jZXNzLgogICovCiAjICAgIGRlZmluZSBOVl9QTUNfRU5BQkxFX1VOSzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxPDwxMykKKyNkZWZpbmUgTlY0MF9QTUNfR1JBUEhfVU5JVFMJCQkJICAgMHgwMDAwMTU0MAogI2RlZmluZSBOVjQwX1BNQ19CQUNLTElHSFQJCQkJICAgMHgwMDAwMTVmMAogIwlkZWZpbmUgTlY0MF9QTUNfQkFDS0xJR0hUX01BU0sJCQkgICAweDAwMWYwMDAwCiAjZGVmaW5lIE5WNDBfUE1DXzE3MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE3MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwppbmRleCA0YzdmMWU0Li5lZDE1OTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCkBAIC01NCwxMSArNTQsMTIgQEAKIG5vdXZlYXVfc2dkbWFfY2xlYXIoc3RydWN0IHR0bV9iYWNrZW5kICpiZSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqbnZiZSA9IChzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqKWJlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBudmJlLT5kZXY7Ci0KLQlOVl9ERUJVRyhudmJlLT5kZXYsICJcbiIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAKIAlpZiAobnZiZSAmJiBudmJlLT5wYWdlcykgeworCQlkZXYgPSBudmJlLT5kZXY7CisJCU5WX0RFQlVHKGRldiwgIlxuIik7CisKIAkJaWYgKG52YmUtPmJvdW5kKQogCQkJYmUtPmZ1bmMtPnVuYmluZChiZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwppbmRleCBmMmQwMTg3Li5hNDg1MWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCkBAIC0zMTAsNiArMzEwLDE0IEBACiBzdGF0aWMgdW5zaWduZWQgaW50CiBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKHZvaWQgKnByaXYsIGJvb2wgc3RhdGUpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDQwKQorCQludl93cjMyKGRldiwgMHg4ODA1NCwgc3RhdGUpOworCWVsc2UKKwkJbnZfd3IzMihkZXYsIDB4MTg1NCwgc3RhdGUpOworCiAJaWYgKHN0YXRlKQogCQlyZXR1cm4gVkdBX1JTUkNfTEVHQUNZX0lPIHwgVkdBX1JTUkNfTEVHQUNZX01FTSB8CiAJCSAgICAgICBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOwpAQCAtNDI3LDE1ICs0MzUsMTkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF90aW1lcjsKIAotCS8qIFBHUkFQSCAqLwotCXJldCA9IGVuZ2luZS0+Z3JhcGguaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZiOworCWlmIChub3V2ZWF1X25vYWNjZWwpCisJCWVuZ2luZS0+Z3JhcGguYWNjZWxfYmxvY2tlZCA9IHRydWU7CisJZWxzZSB7CisJCS8qIFBHUkFQSCAqLworCQlyZXQgPSBlbmdpbmUtPmdyYXBoLmluaXQoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2ZiOwogCi0JLyogUEZJRk8gKi8KLQlyZXQgPSBlbmdpbmUtPmZpZm8uaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2dyYXBoOworCQkvKiBQRklGTyAqLworCQlyZXQgPSBlbmdpbmUtPmZpZm8uaW5pdChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZ3JhcGg7CisJfQogCiAJLyogdGhpcyBjYWxsIGlycV9wcmVpbnN0YWxsLCByZWdpc3RlciBpcnEgaGFuZGxlciBhbmQKIAkgKiBjYWxsIGlycV9wb3N0aW5zdGFsbApAQCAtNDc5LDkgKzQ5MSwxMSBAQAogb3V0X2lycToKIAlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwogb3V0X2ZpZm86Ci0JZW5naW5lLT5maWZvLnRha2Vkb3duKGRldik7CisJaWYgKCFub3V2ZWF1X25vYWNjZWwpCisJCWVuZ2luZS0+Zmlmby50YWtlZG93bihkZXYpOwogb3V0X2dyYXBoOgotCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24oZGV2KTsKKwlpZiAoIW5vdXZlYXVfbm9hY2NlbCkKKwkJZW5naW5lLT5ncmFwaC50YWtlZG93bihkZXYpOwogb3V0X2ZiOgogCWVuZ2luZS0+ZmIudGFrZWRvd24oZGV2KTsKIG91dF90aW1lcjoKQEAgLTUxOCw4ICs1MzIsMTAgQEAKIAkJCWRldl9wcml2LT5jaGFubmVsID0gTlVMTDsKIAkJfQogCi0JCWVuZ2luZS0+Zmlmby50YWtlZG93bihkZXYpOwotCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duKGRldik7CisJCWlmICghbm91dmVhdV9ub2FjY2VsKSB7CisJCQllbmdpbmUtPmZpZm8udGFrZWRvd24oZGV2KTsKKwkJCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24oZGV2KTsKKwkJfQogCQllbmdpbmUtPmZiLnRha2Vkb3duKGRldik7CiAJCWVuZ2luZS0+dGltZXIudGFrZWRvd24oZGV2KTsKIAkJZW5naW5lLT5tYy50YWtlZG93bihkZXYpOwpAQCAtODE3LDYgKzgzMywxNSBAQAogCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9WTV9WUkFNX0JBU0U6CiAJCWdldHBhcmFtLT52YWx1ZSA9IGRldl9wcml2LT52bV92cmFtX2Jhc2U7CiAJCWJyZWFrOworCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9HUkFQSF9VTklUUzoKKwkJLyogTlY0MCBhbmQgTlY1MCB2ZXJzaW9ucyBhcmUgcXVpdGUgZGlmZmVyZW50LCBidXQgcmVnaXN0ZXIKKwkJICogYWRkcmVzcyBpcyB0aGUgc2FtZS4gVXNlciBpcyBzdXBwb3NlZCB0byBrbm93IHRoZSBjYXJkCisJCSAqIGZhbWlseSBhbnl3YXkuLi4gKi8KKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4NDApIHsKKwkJCWdldHBhcmFtLT52YWx1ZSA9IG52X3JkMzIoZGV2LCBOVjQwX1BNQ19HUkFQSF9VTklUUyk7CisJCQlicmVhazsKKwkJfQorCQkvKiBGQUxMVEhSVSAqLwogCWRlZmF1bHQ6CiAJCU5WX0VSUk9SKGRldiwgInVua25vd24gcGFyYW1ldGVyICVsbGRcbiIsIGdldHBhcmFtLT5wYXJhbSk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKaW5kZXggZDBlMDM4ZC4uMWQ3M2IxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkJCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7Ci0JdWludDhfdCBzYXZlZF9zZXExLCBzYXZlZF9waSwgc2F2ZWRfcnBjMTsKKwl1aW50OF90IHNhdmVkX3NlcTEsIHNhdmVkX3BpLCBzYXZlZF9ycGMxLCBzYXZlZF9jcl9tb2RlOwogCXVpbnQ4X3Qgc2F2ZWRfcGFsZXR0ZTBbM10sIHNhdmVkX3BhbGV0dGVfbWFzazsKIAl1aW50MzJfdCBzYXZlZF9ydGVzdF9jdHJsLCBzYXZlZF9yZ2VuX2N0cmw7CiAJaW50IGk7CkBAIC0xMzUsNiArMTM1LDkgQEAKIAkJLyogb25seSBpbXBsZW1lbnRlZCBmb3IgaGVhZCBBIGZvciBub3cgKi8KIAkJTlZTZXRPd25lcihkZXYsIDApOwogCisJc2F2ZWRfY3JfbW9kZSA9IE5WUmVhZFZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JfTU9ERV9JTkRFWCk7CisJTlZXcml0ZVZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JfTU9ERV9JTkRFWCwgc2F2ZWRfY3JfbW9kZSB8IDB4ODApOworCiAJc2F2ZWRfc2VxMSA9IE5WUmVhZFZnYVNlcShkZXYsIDAsIE5WX1ZJT19TUl9DTE9DS19JTkRFWCk7CiAJTlZXcml0ZVZnYVNlcShkZXYsIDAsIE5WX1ZJT19TUl9DTE9DS19JTkRFWCwgc2F2ZWRfc2VxMSAmIH4weDIwKTsKIApAQCAtMjAzLDYgKzIwNiw3IEBACiAJTlZXcml0ZVZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JFX1BJWEVMX0lOREVYLCBzYXZlZF9waSk7CiAJTlZXcml0ZVZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JFX1JQQzFfSU5ERVgsIHNhdmVkX3JwYzEpOwogCU5WV3JpdGVWZ2FTZXEoZGV2LCAwLCBOVl9WSU9fU1JfQ0xPQ0tfSU5ERVgsIHNhdmVkX3NlcTEpOworCU5WV3JpdGVWZ2FDcnRjKGRldiwgMCwgTlZfQ0lPX0NSX01PREVfSU5ERVgsIHNhdmVkX2NyX21vZGUpOwogCiAJaWYgKGJsdWUgPT0gMHgxOCkgewogCQlOVl9JTkZPKGRldiwgIkxvYWQgZGV0ZWN0ZWQgb24gaGVhZCBBXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYwppbmRleCBkOTEwODczLi5mZDAxY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAibm91dmVhdV9kbWEuaCIKICNpbmNsdWRlICJub3V2ZWF1X2ZiY29uLmgiCiAKLXN0YXRpYyB2b2lkCit2b2lkCiBudjA0X2ZiY29uX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKnJlZ2lvbikKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmNvbl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTU0LDcgKzU0LDcgQEAKIAlGSVJFX1JJTkcoY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBudjA0X2ZiY29uX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG5vdXZlYXVfZmJjb25fcGFyICpwYXIgPSBpbmZvLT5wYXI7CkBAIC04OCw3ICs4OCw3IEBACiAJRklSRV9SSU5HKGNoYW4pOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogbnYwNF9mYmNvbl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCiB7CiAJc3RydWN0IG5vdXZlYXVfZmJjb25fcGFyICpwYXIgPSBpbmZvLT5wYXI7CkBAIC0zMDcsOSArMzA3LDYgQEAKIAogCUZJUkVfUklORyhjaGFuKTsKIAotCWluZm8tPmZib3BzLT5mYl9maWxscmVjdCA9IG52MDRfZmJjb25fZmlsbHJlY3Q7Ci0JaW5mby0+ZmJvcHMtPmZiX2NvcHlhcmVhID0gbnYwNF9mYmNvbl9jb3B5YXJlYTsKLQlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0ID0gbnYwNF9mYmNvbl9pbWFnZWJsaXQ7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYwppbmRleCA1OGI5MTdjLi4yMWFjNmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCkBAIC01NzksNiArNTc5LDggQEAKIAkJCQlub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPnJlc3RvcmUub3V0cHV0KTsKIAogCW52MTdfdHZfc3RhdGVfbG9hZChkZXYsICZ0b190dl9lbmMoZW5jb2RlciktPnNhdmVkX3N0YXRlKTsKKworCW5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKS0+bGFzdF9kcG1zID0gTlZfRFBNU19DTEVBUkVEOwogfQogCiBzdGF0aWMgaW50IG52MTdfdHZfY3JlYXRlX3Jlc291cmNlcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCmluZGV4IDQwYjczNjAuLmQxYTY1MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCkBAIC0yOTgsMTQgKzI5OCwxNyBAQAogc3RhdGljIHZvaWQKIG52NTBfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBub3V2ZWF1X2NydGMoY3J0Yyk7Ci0KLQlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGM7CiAKIAlpZiAoIWNydGMpCiAJCXJldHVybjsKIAorCWRldiA9IGNydGMtPmRldjsKKwludl9jcnRjID0gbm91dmVhdV9jcnRjKGNydGMpOworCisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CisKIAlkcm1fY3J0Y19jbGVhbnVwKCZudl9jcnRjLT5iYXNlKTsKIAogCW52NTBfY3Vyc29yX2ZpbmkobnZfY3J0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMKaW5kZXggZTRmMjc5ZS4uMGY1N2NkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9mYmNvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYwpAQCAtMyw3ICszLDcgQEAKICNpbmNsdWRlICJub3V2ZWF1X2RtYS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZmJjb24uaCIKIAotc3RhdGljIHZvaWQKK3ZvaWQKIG52NTBfZmJjb25fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmNvbl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlGSVJFX1JJTkcoY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBudjUwX2ZiY29uX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKnJlZ2lvbikKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmNvbl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTgxLDcgKzgxLDcgQEAKIAlGSVJFX1JJTkcoY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBudjUwX2ZiY29uX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmNvbl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTI2Miw5ICsyNjIsNiBAQAogCU9VVF9SSU5HKGNoYW4sIGluZm8tPmZpeC5zbWVtX3N0YXJ0IC0gZGV2X3ByaXYtPmZiX3BoeXMgKwogCQkJIGRldl9wcml2LT52bV92cmFtX2Jhc2UpOwogCi0JaW5mby0+ZmJvcHMtPmZiX2ZpbGxyZWN0ID0gbnY1MF9mYmNvbl9maWxscmVjdDsKLQlpbmZvLT5mYm9wcy0+ZmJfY29weWFyZWEgPSBudjUwX2ZiY29uX2NvcHlhcmVhOwotCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQgPSBudjUwX2ZiY29uX2ltYWdlYmxpdDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYwppbmRleCAzMmIyNDRiLi4yMDRhNzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYwpAQCAtMzE3LDE3ICszMTcsMjAgQEAKIG52NTBfZmlmb19kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9yZWYgKnJhbWZjID0gY2hhbi0+cmFtZmM7CiAKIAlOVl9ERUJVRyhkZXYsICJjaCVkXG4iLCBjaGFuLT5pZCk7CiAKLQlub3V2ZWF1X2dwdW9ial9yZWZfZGVsKGRldiwgJmNoYW4tPnJhbWZjKTsKLQlub3V2ZWF1X2dwdW9ial9yZWZfZGVsKGRldiwgJmNoYW4tPmNhY2hlKTsKLQorCS8qIFRoaXMgd2lsbCBlbnN1cmUgdGhlIGNoYW5uZWwgaXMgc2VlbiBhcyBkaXNhYmxlZC4gKi8KKwljaGFuLT5yYW1mYyA9IE5VTEw7CiAJbnY1MF9maWZvX2NoYW5uZWxfZGlzYWJsZShkZXYsIGNoYW4tPmlkLCBmYWxzZSk7CiAKIAkvKiBEdW1teSBjaGFubmVsLCBhbHNvIHVzZWQgb24gY2ggMTI3ICovCiAJaWYgKGNoYW4tPmlkID09IDApCiAJCW52NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoZGV2LCAxMjcsIGZhbHNlKTsKKworCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmcmFtZmMpOworCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmY2hhbi0+Y2FjaGUpOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCAyMDMxOWU1Li42ZDUwNDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0xNjUsNiArMTY1LDEyIEBACiAJdWludDMyX3QgaW5zdDsKIAlpbnQgaTsKIAorCS8qIEJlIHN1cmUgd2UncmUgbm90IGluIHRoZSBtaWRkbGUgb2YgYSBjb250ZXh0IHN3aXRjaCBvciBiYWQgdGhpbmdzCisJICogd2lsbCBoYXBwZW4sIHN1Y2ggYXMgdW5sb2FkaW5nIHRoZSB3cm9uZyBwZ3JhcGggY29udGV4dC4KKwkgKi8KKwlpZiAoIW52X3dhaXQoMHg0MDAzMDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKQorCQlOVl9FUlJPUihkZXYsICJDdHhwcm9nIGlzIHN0aWxsIHJ1bm5pbmdcbiIpOworCiAJaW5zdCA9IG52X3JkMzIoZGV2LCBOVjUwX1BHUkFQSF9DVFhDVExfQ1VSKTsKIAlpZiAoIShpbnN0ICYgTlY1MF9QR1JBUEhfQ1RYQ1RMX0NVUl9MT0FERUQpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI3NSw3ICsyODEsNyBAQAogaW50CiBudjUwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JdWludDMyX3QgaW5zdCwgZmlmbyA9IG52X3JkMzIoZGV2LCAweDQwMDUwMCk7CisJdWludDMyX3QgaW5zdDsKIAogCWluc3QgID0gbnZfcmQzMihkZXYsIE5WNTBfUEdSQVBIX0NUWENUTF9DVVIpOwogCWlmICghKGluc3QgJiBOVjUwX1BHUkFQSF9DVFhDVExfQ1VSX0xPQURFRCkpCkBAIC0yODMsMTIgKzI4OSwxMCBAQAogCWluc3QgJj0gTlY1MF9QR1JBUEhfQ1RYQ1RMX0NVUl9JTlNUQU5DRTsKIAogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwotCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgZmlmbyAmIH4xKTsKIAludl93cjMyKGRldiwgMHg0MDA3ODQsIGluc3QpOwogCW52X3dyMzIoZGV2LCAweDQwMDgyNCwgbnZfcmQzMihkZXYsIDB4NDAwODI0KSB8IDB4MjApOwogCW52X3dyMzIoZGV2LCAweDQwMDMwNCwgbnZfcmQzMihkZXYsIDB4NDAwMzA0KSB8IDB4MDEpOwogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwotCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgZmlmbyk7CiAKIAludl93cjMyKGRldiwgTlY1MF9QR1JBUEhfQ1RYQ1RMX0NVUiwgaW5zdCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCmluZGV4IDk0NDAwZjcuLmYwZGM0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCkBAIC03Niw2ICs3NiwxMSBAQAogCWZvciAoaSA9IDB4MTcwMDsgaSA8PSAweDE3MTA7IGkgKz0gNCkKIAkJcHJpdi0+c2F2ZTE3MDBbKGktMHgxNzAwKS80XSA9IG52X3JkMzIoZGV2LCBpKTsKIAorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGFhIHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWMpCisJCWRldl9wcml2LT52cmFtX3N5c19iYXNlID0gbnZfcmQzMihkZXYsIDB4MTAwZTEwKSA8PCAxMjsKKwllbHNlCisJCWRldl9wcml2LT52cmFtX3N5c19iYXNlID0gMDsKKwogCS8qIFJlc2VydmUgdGhlIGxhc3QgTWlCIG9mIFZSQU0sIHdlIHNob3VsZCBwcm9iYWJseSB0cnkgdG8gYXZvaWQKIAkgKiBzZXR0aW5nIHVwIHRoZSBiZWxvdyB0YWJsZXMgb3ZlciB0aGUgdG9wIG9mIHRoZSBWQklPUyBpbWFnZSBhdAogCSAqIHNvbWUgcG9pbnQuCkBAIC0xNzIsMTYgKzE3NywyOCBAQAogCSAqIFdlIG1hcCB0aGUgZW50aXJlIGZha2UgY2hhbm5lbCBpbnRvIHRoZSBzdGFydCBvZiB0aGUgUFJBTUlOIEJBUgogCSAqLwogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBwdF9zaXplLCAweDEwMDAsCi0JCQkJCQkJMCwgJnByaXYtPnByYW1pbl9wdCk7CisJCQkJICAgICAwLCAmcHJpdi0+cHJhbWluX3B0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZm9yIChpID0gMCwgdiA9IGNfb2Zmc2V0OyBpIDwgcHRfc2l6ZTsgaSArPSA4LCB2ICs9IDB4MTAwMCkgewotCQlpZiAodiA8IChjX29mZnNldCArIGNfc2l6ZSkpCi0JCQlCQVIwX1dJMzIocHJpdi0+cHJhbWluX3B0LT5ncHVvYmosIGkgKyAwLCB2IHwgMSk7Ci0JCWVsc2UKLQkJCUJBUjBfV0kzMihwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgaSArIDAsIDB4MDAwMDAwMDkpOworCXYgPSBjX29mZnNldCB8IDE7CisJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7CisJCXYgKz0gZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2U7CisJCXYgfD0gMHgzMDsKKwl9CisKKwlpID0gMDsKKwl3aGlsZSAodiA8IGRldl9wcml2LT52cmFtX3N5c19iYXNlICsgY19vZmZzZXQgKyBjX3NpemUpIHsKKwkJQkFSMF9XSTMyKHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCBpICsgMCwgdik7CiAJCUJBUjBfV0kzMihwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgaSArIDQsIDB4MDAwMDAwMDApOworCQl2ICs9IDB4MTAwMDsKKwkJaSArPSA4OworCX0KKworCXdoaWxlIChpIDwgcHRfc2l6ZSkgeworCQlCQVIwX1dJMzIocHJpdi0+cHJhbWluX3B0LT5ncHVvYmosIGkgKyAwLCAweDAwMDAwMDAwKTsKKwkJQkFSMF9XSTMyKHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCBpICsgNCwgMHgwMDAwMDAwMCk7CisJCWkgKz0gODsKIAl9CiAKIAlCQVIwX1dJMzIoY2hhbi0+dm1fcGQsIDB4MDAsIHByaXYtPnByYW1pbl9wdC0+aW5zdGFuY2UgfCAweDYzKTsKQEAgLTQxNiw3ICs0MzMsOSBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG52NTBfaW5zdG1lbV9wcml2ICpwcml2ID0gZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByaXY7Ci0JdWludDMyX3QgcHRlLCBwdGVfZW5kLCB2cmFtOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcHJhbWluX3B0ID0gcHJpdi0+cHJhbWluX3B0LT5ncHVvYmo7CisJdWludDMyX3QgcHRlLCBwdGVfZW5kOworCXVpbnQ2NF90IHZyYW07CiAKIAlpZiAoIWdwdW9iai0+aW1fYmFja2luZyB8fCAhZ3B1b2JqLT5pbV9wcmFtaW4gfHwgZ3B1b2JqLT5pbV9ib3VuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MjQsMjAgKzQ0MywyNCBAQAogCU5WX0RFQlVHKGRldiwgInN0PTB4JTBsbHggc3o9MHglMGxseFxuIiwKIAkJIGdwdW9iai0+aW1fcHJhbWluLT5zdGFydCwgZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemUpOwogCi0JcHRlICAgICA9IChncHVvYmotPmltX3ByYW1pbi0+c3RhcnQgPj4gMTIpIDw8IDM7Ci0JcHRlX2VuZCA9ICgoZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemUgPj4gMTIpIDw8IDMpICsgcHRlOworCXB0ZSAgICAgPSAoZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0ID4+IDEyKSA8PCAxOworCXB0ZV9lbmQgPSAoKGdwdW9iai0+aW1fcHJhbWluLT5zaXplID4+IDEyKSA8PCAxKSArIHB0ZTsKIAl2cmFtICAgID0gZ3B1b2JqLT5pbV9iYWNraW5nX3N0YXJ0OwogCiAJTlZfREVCVUcoZGV2LCAicHJhbWluPTB4JWxseCwgcHRlPSVkLCBwdGVfZW5kPSVkXG4iLAogCQkgZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0LCBwdGUsIHB0ZV9lbmQpOwogCU5WX0RFQlVHKGRldiwgImZpcnN0IHZyYW0gcGFnZTogMHglMDh4XG4iLCBncHVvYmotPmltX2JhY2tpbmdfc3RhcnQpOwogCisJdnJhbSB8PSAxOworCWlmIChkZXZfcHJpdi0+dnJhbV9zeXNfYmFzZSkgeworCQl2cmFtICs9IGRldl9wcml2LT52cmFtX3N5c19iYXNlOworCQl2cmFtIHw9IDB4MzA7CisJfQorCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJd2hpbGUgKHB0ZSA8IHB0ZV9lbmQpIHsKLQkJbnZfd28zMihkZXYsIHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCAocHRlICsgMCkvNCwgdnJhbSB8IDEpOwotCQludl93bzMyKGRldiwgcHJpdi0+cHJhbWluX3B0LT5ncHVvYmosIChwdGUgKyA0KS80LCAweDAwMDAwMDAwKTsKLQotCQlwdGUgKz0gODsKKwkJbnZfd28zMihkZXYsIHByYW1pbl9wdCwgcHRlKyssIGxvd2VyXzMyX2JpdHModnJhbSkpOworCQludl93bzMyKGRldiwgcHJhbWluX3B0LCBwdGUrKywgdXBwZXJfMzJfYml0cyh2cmFtKSk7CiAJCXZyYW0gKz0gTlY1MF9JTlNUTUVNX1BBR0VfU0laRTsKIAl9CiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKQEAgLTQ3MCwxNCArNDkzLDEzIEBACiAJaWYgKGdwdW9iai0+aW1fYm91bmQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwdGUgICAgID0gKGdwdW9iai0+aW1fcHJhbWluLT5zdGFydCA+PiAxMikgPDwgMzsKLQlwdGVfZW5kID0gKChncHVvYmotPmltX3ByYW1pbi0+c2l6ZSA+PiAxMikgPDwgMykgKyBwdGU7CisJcHRlICAgICA9IChncHVvYmotPmltX3ByYW1pbi0+c3RhcnQgPj4gMTIpIDw8IDE7CisJcHRlX2VuZCA9ICgoZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemUgPj4gMTIpIDw8IDEpICsgcHRlOwogCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJd2hpbGUgKHB0ZSA8IHB0ZV9lbmQpIHsKLQkJbnZfd28zMihkZXYsIHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCAocHRlICsgMCkvNCwgMHgwMDAwMDAwOSk7Ci0JCW52X3dvMzIoZGV2LCBwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgKHB0ZSArIDQpLzQsIDB4MDAwMDAwMDApOwotCQlwdGUgKz0gODsKKwkJbnZfd28zMihkZXYsIHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCBwdGUrKywgMHgwMDAwMDAwMCk7CisJCW52X3dvMzIoZGV2LCBwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgcHRlKyssIDB4MDAwMDAwMDApOwogCX0KIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9zb3IuYwppbmRleCBlY2YxOTM2Li5jMmZmZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfc29yLmMKQEAgLTEwMSw2ICsxMDEsNyBAQAogCQlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudmVuYyA9IG5vdXZlYXVfZW5jb2RlcihlbmMpOwogCiAJCWlmIChudmVuYyA9PSBudl9lbmNvZGVyIHx8CisJCSAgICBudmVuYy0+ZGlzY29ubmVjdCAhPSBudjUwX3Nvcl9kaXNjb25uZWN0IHx8CiAJCSAgICBudmVuYy0+ZGNiLT5vciAhPSBudl9lbmNvZGVyLT5kY2ItPm9yKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZwppbmRleCA1OTgyMzIxLi4xYzAyZDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCkBAIC0xLDEwICsxLDE0IEBACiBjb25maWcgRFJNX1JBREVPTl9LTVMKLQlib29sICJFbmFibGUgbW9kZXNldHRpbmcgb24gcmFkZW9uIGJ5IGRlZmF1bHQiCisJYm9vbCAiRW5hYmxlIG1vZGVzZXR0aW5nIG9uIHJhZGVvbiBieSBkZWZhdWx0IC0gTkVXIERSSVZFUiIKIAlkZXBlbmRzIG9uIERSTV9SQURFT04KIAloZWxwCi0JICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQga2VybmVsIG1vZGVzZXR0aW5nIGVuYWJsZWQgYnkgZGVmYXVsdCwKLQkgIGFuZCB5b3UgaGF2ZSBhIG5ldyBlbm91Z2ggdXNlcnNwYWNlIHRvIHN1cHBvcnQgdGhpcy4gUnVubmluZyBvbGQKLQkgIHVzZXJzcGFjZXMgd2l0aCB0aGlzIGVuYWJsZWQgd2lsbCBjYXVzZSBwYWluLgorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGtlcm5lbCBtb2Rlc2V0dGluZyBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKwkgIFRoaXMgaXMgYSBjb21wbGV0ZWx5IG5ldyBkcml2ZXIuIEl0J3Mgb25seSBwYXJ0IG9mIHRoZSBleGlzdGluZyBkcm0KKwkgIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIEl0IHJlcXVpcmVzIGFuIGVudGlyZWx5IGRpZmZlcmVudCBncmFwaGljcworCSAgc3RhY2sgYWJvdmUgaXQgYW5kIHdvcmtzIHZlcnkgZGlmZmVyZW50bHkgZnJvbSB0aGUgb2xkIGRybSBzdGFjay4KKwkgIGkuZS4gZG9uJ3QgZW5hYmxlIHRoaXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpdCBtYXkKKwkgIGNhdXNlIGlzc3VlcyBvciBidWdzIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyB1c2Vyc3BhY2UgZHJpdmVyIHN0YWNrLgogCiAJICBXaGVuIGtlcm5lbCBtb2Rlc2V0dGluZyBpcyBlbmFibGVkIHRoZSBJT0NUTCBvZiByYWRlb24vZHJtCiAJICBkcml2ZXIgYXJlIGNvbnNpZGVyZWQgYXMgaW52YWxpZCBhbmQgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCmluZGV4IGUzYjQ0NTYuLjdmMTUyZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2RlZmluZSBBVE9NX0RFQlVHCiAKQEAgLTIxMiw3ICsyMTMsOSBAQAogCWNhc2UgQVRPTV9BUkdfUFM6CiAJCWlkeCA9IFU4KCpwdHIpOwogCQkoKnB0cikrKzsKLQkJdmFsID0gbGUzMl90b19jcHUoY3R4LT5wc1tpZHhdKTsKKwkJLyogZ2V0X3VuYWxpZ25lZF9sZTMyIGF2b2lkcyB1bmFsaWduZWQgYWNjZXNzZXMgZnJvbSBhdG9tYmlvcworCQkgKiB0YWJsZXMsIG5vdGljZWQgb24gYSBERUMgQWxwaGEuICovCisJCXZhbCA9IGdldF91bmFsaWduZWRfbGUzMigodTMyICopJmN0eC0+cHNbaWR4XSk7CiAJCWlmIChwcmludCkKIAkJCURFQlVHKCJQU1sweCUwMlgsMHglMDRYXSIsIGlkeCwgdmFsKTsKIAkJYnJlYWs7CkBAIC02NDAsNyArNjQzLDcgQEAKIAl1aW50OF90IGNvdW50ID0gVTgoKCpwdHIpKyspOwogCVNERUJVRygiICAgY291bnQ6ICVkXG4iLCBjb3VudCk7CiAJaWYgKGFyZyA9PSBBVE9NX1VOSVRfTUlDUk9TRUMpCi0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHVzZWNzX3RvX2ppZmZpZXMoY291bnQpKTsKKwkJdWRlbGF5KGNvdW50KTsKIAllbHNlCiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoY291bnQpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwppbmRleCAzZWIwY2E1Li45OTkxNWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCkBAIC0zMzIsMTEgKzMzMiwxMyBAQAogCVBST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFByb2Nlc3NBdXhDaGFubmVsVHJhbnNhY3Rpb24pOwogCXVuc2lnbmVkIGNoYXIgKmJhc2U7CisJaW50IHJldHJ5X2NvdW50ID0gMDsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCWJhc2UgPSAodW5zaWduZWQgY2hhciAqKXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQtPnNjcmF0Y2g7CiAKK3JldHJ5OgogCW1lbWNweShiYXNlLCByZXFfYnl0ZXMsIG51bV9ieXRlcyk7CiAKIAlhcmdzLmxwQXV4UmVxdWVzdCA9IDA7CkBAIC0zNDcsMTAgKzM0OSwxMiBAQAogCiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAKLQlpZiAoYXJncy51Y1JlcGx5U3RhdHVzKSB7Ci0JCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBhdXhjaCAlMDJ4JTAyeCAlMDJ4ICUwMnggMHglMDJ4ICUwMnhcbiIsCisJaWYgKGFyZ3MudWNSZXBseVN0YXR1cyAmJiAhYXJncy51Y0RhdGFPdXRMZW4pIHsKKwkJaWYgKGFyZ3MudWNSZXBseVN0YXR1cyA9PSAweDIwICYmIHJldHJ5X2NvdW50KysgPCAxMCkKKwkJCWdvdG8gcmV0cnk7CisJCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBhdXhjaCAlMDJ4JTAyeCAlMDJ4ICUwMnggMHglMDJ4ICUwMnggYWZ0ZXIgJWQgcmV0cmllc1xuIiwKIAkJCSAgcmVxX2J5dGVzWzFdLCByZXFfYnl0ZXNbMF0sIHJlcV9ieXRlc1syXSwgcmVxX2J5dGVzWzNdLAotCQkJICBjaGFuLT5yZWMuaTJjX2lkLCBhcmdzLnVjUmVwbHlTdGF0dXMpOworCQkJICBjaGFuLT5yZWMuaTJjX2lkLCBhcmdzLnVjUmVwbHlTdGF0dXMsIHJldHJ5X2NvdW50KTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtNDY4LDcgKzQ3Miw3IEBACiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7CiAKLQlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB8fAorCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpICYmCiAJICAgIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApKQogCQlyZXR1cm47CiAKQEAgLTU4Myw3ICs1ODcsNyBAQAogCXU4IHRyYWluX3NldFs0XTsKIAlpbnQgaTsKIAotCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpIHx8CisJaWYgKChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgJiYKIAkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkpCiAJCXJldHVybjsKIApAQCAtNTk2LDIxICs2MDAsMTQgQEAKIAkJcmV0dXJuOwogCWRpZ19jb25uZWN0b3IgPSByYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdjsKIAotCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWlmIChkaWctPmRpZ19ibG9jaykKLQkJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19ESUcyX0VOQ09ERVI7Ci0JCWVsc2UKLQkJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19ESUcxX0VOQ09ERVI7Ci0JCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKLQkJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19MSU5LX0I7Ci0JCWVsc2UKLQkJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19MSU5LX0E7Ci0JfSBlbHNlIHsKLQkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQotCQkJZW5jX2lkIHw9IEFUT01fRFBfQ09ORklHX0RJRzJfRU5DT0RFUiB8IEFUT01fRFBfQ09ORklHX0xJTktfQjsKLQkJZWxzZQotCQkJZW5jX2lkIHw9IEFUT01fRFBfQ09ORklHX0RJRzFfRU5DT0RFUiB8IEFUT01fRFBfQ09ORklHX0xJTktfQTsKLQl9CisJaWYgKGRpZy0+ZGlnX2VuY29kZXIpCisJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19ESUcyX0VOQ09ERVI7CisJZWxzZQorCQllbmNfaWQgfD0gQVRPTV9EUF9DT05GSUdfRElHMV9FTkNPREVSOworCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKKwkJZW5jX2lkIHw9IEFUT01fRFBfQ09ORklHX0xJTktfQjsKKwllbHNlCisJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19MSU5LX0E7CiAKIAltZW1zZXQobGlua19jb25maWd1cmF0aW9uLCAwLCBEUF9MSU5LX0NPTkZJR1VSQVRJT05fU0laRSk7CiAJaWYgKGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrID09IDI3MDAwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggMTFjOWEzZi4uYzBkNDY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTM1NCwxMSArMzU0LDE3IEBACiAJCXJldHVybiBSUkVHMzIoUkFERU9OX0NSVEMyX0NSTlRfRlJBTUUpOwogfQogCisvKiBXaG8gZXZlciBjYWxsIHJhZGVvbl9mZW5jZV9lbWl0IHNob3VsZCBjYWxsIHJpbmdfbG9jayBhbmQgYXNrCisgKiBmb3IgZW5vdWdoIHNwYWNlICh0b2RheSBjYWxsZXIgYXJlIGliIHNjaGVkdWxlIGFuZCBidWZmZXIgbW92ZSkgKi8KIHZvaWQgcjEwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewotCS8qIFdobyBldmVyIGNhbGwgcmFkZW9uX2ZlbmNlX2VtaXQgc2hvdWxkIGNhbGwgcmluZ19sb2NrIGFuZCBhc2sKLQkgKiBmb3IgZW5vdWdoIHNwYWNlICh0b2RheSBjYWxsZXIgYXJlIGliIHNjaGVkdWxlIGFuZCBidWZmZXIgbW92ZSkgKi8KKwkvKiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGNhY2hlcyBhcmUgZmx1c2hlZCBiZWZvcmUKKwkgKiBDUFUgbWlnaHQgcmVhZCBzb21ldGhpbmcgZnJvbSBWUkFNLiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1JCM0RfRFNUQ0FDSEVfQ1RMU1RBVCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9SQjNEX0RDX0ZMVVNIX0FMTCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSQURFT05fUkIzRF9aQ0FDSEVfQ1RMU1RBVCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9SQjNEX1pDX0ZMVVNIX0FMTCk7CiAJLyogV2FpdCB1bnRpbCBJRExFICYgQ0xFQU4gKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcyMCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IDE2KSB8ICgxIDw8IDE3KSk7CkBAIC0zMzY5LDcgKzMzNzUsNiBAQAogCiB2b2lkIHIxMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyMTAwX3N1c3BlbmQocmRldik7CiAJcjEwMF9jcF9maW5pKHJkZXYpOwogCXIxMDBfd2JfZmluaShyZGV2KTsKIAlyMTAwX2liX2ZpbmkocmRldik7CkBAIC0zNDgxLDEzICszNDg2LDEyIEBACiAJaWYgKHIpIHsKIAkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLwogCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKLQkJcjEwMF9zdXNwZW5kKHJkZXYpOwogCQlyMTAwX2NwX2ZpbmkocmRldik7CiAJCXIxMDBfd2JfZmluaShyZGV2KTsKIAkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQogCQkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOwotCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwogCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCAwMDUxZDExLi40M2I1NWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtNTA2LDExICs1MDYsMTQgQEAKIAogCS8qIEREUiBmb3IgYWxsIGNhcmQgYWZ0ZXIgUjMwMCAmIElHUCAqLwogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKKwogCXRtcCA9IFJSRUczMihSQURFT05fTUVNX0NOVEwpOwotCWlmICh0bXAgJiBSMzAwX01FTV9OVU1fQ0hBTk5FTFNfTUFTSykgewotCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwotCX0gZWxzZSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSA2NDsKKwl0bXAgJj0gUjMwMF9NRU1fTlVNX0NIQU5ORUxTX01BU0s7CisJc3dpdGNoICh0bXApIHsKKwljYXNlIDA6IHJkZXYtPm1jLnZyYW1fd2lkdGggPSA2NDsgYnJlYWs7CisJY2FzZSAxOiByZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OyBicmVhazsKKwljYXNlIDI6IHJkZXYtPm1jLnZyYW1fd2lkdGggPSAyNTY7IGJyZWFrOworCWRlZmF1bHQ6ICByZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OyBicmVhazsKIAl9CiAKIAlyMTAwX3ZyYW1faW5pdF9zaXplcyhyZGV2KTsKQEAgLTEzMjcsNyArMTMzMCw2IEBACiAKIHZvaWQgcjMwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXIzMDBfc3VzcGVuZChyZGV2KTsKIAlyMTAwX2NwX2ZpbmkocmRldik7CiAJcjEwMF93Yl9maW5pKHJkZXYpOwogCXIxMDBfaWJfZmluaShyZGV2KTsKQEAgLTE0MTgsMTUgKzE0MjAsMTUgQEAKIAlpZiAocikgewogCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCiAJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOwotCQlyMzAwX3N1c3BlbmQocmRldik7CiAJCXIxMDBfY3BfZmluaShyZGV2KTsKIAkJcjEwMF93Yl9maW5pKHJkZXYpOwogCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQogCQkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCiAJCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7Ci0JCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKaW5kZXggNDUyNmZhYS4uZDkzNzMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKQEAgLTM4OSwxNiArMzg5LDE1IEBACiAJaWYgKHIpIHsKIAkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLwogCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKLQkJcjQyMF9zdXNwZW5kKHJkZXYpOwogCQlyMTAwX2NwX2ZpbmkocmRldik7CiAJCXIxMDBfd2JfZmluaShyZGV2KTsKIAkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKIAkJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQogCQkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOwogCQlyYWRlb25fYWdwX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCmluZGV4IDlhMTg5MDcuLmRkZjU3MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCkBAIC0yOTQsMTMgKzI5NCwxMiBAQAogCWlmIChyKSB7CiAJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KIAkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7Ci0JCXJ2NTE1X3N1c3BlbmQocmRldik7CiAJCXIxMDBfY3BfZmluaShyZGV2KTsKIAkJcjEwMF93Yl9maW5pKHJkZXYpOwogCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlyYWRlb25fYWdwX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IGRhOWFhM2MuLjJmZmNmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC0xNjU0LDYgKzE2NTQsMTIgQEAKIAlyZGV2LT5jcC5hbGlnbl9tYXNrID0gMTYgLSAxOwogfQogCit2b2lkIHI2MDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyNjAwX2NwX3N0b3AocmRldik7CisJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKK30KKwogCiAvKgogICogR1BVIHNjcmF0Y2ggcmVnaXN0ZXJzIGhlbHBlcnMgZnVuY3Rpb24uCkBAIC0xNzg4LDIzICsxNzk0LDI0IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUkJfSU5UX1NUQVQpOwogfQogCi1pbnQgcjYwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKLQkJICB1aW50NjRfdCBzcmNfb2Zmc2V0LAotCQkgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCi0JCSAgdW5zaWduZWQgbnVtX3BhZ2VzLAotCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQotewotCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KLQlyZXR1cm4gMDsKLX0KLQogaW50IHI2MDBfY29weV9ibGl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewotCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogUkFERU9OX0dQVV9QQUdFX1NJWkUpOworCWludCByOworCisJbXV0ZXhfbG9jaygmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKKwlyZGV2LT5yNjAwX2JsaXQudmJfaWIgPSBOVUxMOworCXIgPSByNjAwX2JsaXRfcHJlcGFyZV9jb3B5KHJkZXYsIG51bV9wYWdlcyAqIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKKwlpZiAocikgeworCQlpZiAocmRldi0+cjYwMF9ibGl0LnZiX2liKQorCQkJcmFkZW9uX2liX2ZyZWUocmRldiwgJnJkZXYtPnI2MDBfYmxpdC52Yl9pYik7CisJCW11dGV4X3VubG9jaygmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKKwkJcmV0dXJuIHI7CisJfQogCXI2MDBfa21zX2JsaXRfY29weShyZGV2LCBzcmNfb2Zmc2V0LCBkc3Rfb2Zmc2V0LCBudW1fcGFnZXMgKiBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAJcjYwMF9ibGl0X2RvbmVfY29weShyZGV2LCBmZW5jZSk7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5yNjAwX2JsaXQubXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xODYwLDI2ICsxODY3LDI1IEBACiAJCQlyZXR1cm4gcjsKIAl9CiAJcjYwMF9ncHVfaW5pdChyZGV2KTsKLQotCWlmICghcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopIHsKLQkJciA9IHI2MDBfYmxpdF9pbml0KHJkZXYpOworCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlyNjAwX2JsaXRfZmluaShyZGV2KTsKKwkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CisJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCBibGl0dGVyICglZCkgZmFsbGluZyBiYWNrIHRvIG1lbWNweVxuIiwgcik7CisJfQorCS8qIHBpbiBjb3B5IHNoYWRlciBpbnRvIHZyYW0gKi8KKwlpZiAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopIHsKKwkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBmYWxzZSk7CisJCWlmICh1bmxpa2VseShyICE9IDApKQorCQkJcmV0dXJuIHI7CisJCXIgPSByYWRlb25fYm9fcGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLAorCQkJCSZyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyKTsKKwkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CiAJCWlmIChyKSB7Ci0JCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIGJsaXR0ZXIgKCVkKS5cbiIsIHIpOworCQkJZGV2X2VycihyZGV2LT5kZXYsICIoJWQpIHBpbiBibGl0IG9iamVjdCBmYWlsZWRcbiIsIHIpOwogCQkJcmV0dXJuIHI7CiAJCX0KIAl9Ci0KLQlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIGZhbHNlKTsKLQlpZiAodW5saWtlbHkociAhPSAwKSkKLQkJcmV0dXJuIHI7Ci0JciA9IHJhZGVvbl9ib19waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIFJBREVPTl9HRU1fRE9NQUlOX1ZSQU0sCi0JCQkmcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkcik7Ci0JcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7Ci0JaWYgKHIpIHsKLQkJZGV2X2VycihyZGV2LT5kZXYsICIoJWQpIHBpbiBibGl0IG9iamVjdCBmYWlsZWRcbiIsIHIpOwotCQlyZXR1cm4gcjsKLQl9Ci0KIAkvKiBFbmFibGUgSVJRICovCiAJciA9IHI2MDBfaXJxX2luaXQocmRldik7CiAJaWYgKHIpIHsKQEAgLTE5NDQsNiArMTk1MCwxMyBAQAogCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQorCisJciA9IHI2MDBfYXVkaW9faW5pdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogYXVkaW8gcmVzdW1lIGZhaWxlZFxuIik7CisJCXJldHVybiByOworCX0KKwogCXJldHVybiByOwogfQogCkBAIC0xOTUxLDYgKzE5NjQsNyBAQAogewogCWludCByOwogCisJcjYwMF9hdWRpb19maW5pKHJkZXYpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgcmluZyB0byBiZSBlbXB0eSAqLwogCXI2MDBfY3Bfc3RvcChyZGV2KTsKIAlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOwpAQCAtMjA1NSw5ICsyMDY5LDExIEBACiAJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CiAJciA9IHI2MDBfc3RhcnR1cChyZGV2KTsKIAlpZiAocikgewotCQlyNjAwX3N1c3BlbmQocmRldik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyNjAwX2NwX2ZpbmkocmRldik7CiAJCXI2MDBfd2JfZmluaShyZGV2KTsKLQkJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwkJcjYwMF9pcnFfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKIAkJcjYwMF9wY2llX2dhcnRfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KQEAgLTIwODMsMjAgKzIwOTksMTcgQEAKIAogdm9pZCByNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JLyogU3VzcGVuZCBvcGVyYXRpb25zICovCi0JcjYwMF9zdXNwZW5kKHJkZXYpOwotCiAJcjYwMF9hdWRpb19maW5pKHJkZXYpOwogCXI2MDBfYmxpdF9maW5pKHJkZXYpOworCXI2MDBfY3BfZmluaShyZGV2KTsKKwlyNjAwX3diX2ZpbmkocmRldik7CiAJcjYwMF9pcnFfZmluaShyZGV2KTsKIAlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwotCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7Ci0JcjYwMF93Yl9maW5pKHJkZXYpOwogCXI2MDBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2FncF9maW5pKHJkZXYpOwogCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKIAlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CiAJcmFkZW9uX2Nsb2Nrc19maW5pKHJkZXYpOwotCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKIAlyYWRlb25fYm9fZmluaShyZGV2KTsKIAlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKQEAgLTI5MDAsMyArMjkxMywxOCBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisKKy8qKgorICogcjYwMF9pb2N0bF93YWl0X2lkbGUgLSBmbHVzaCBob3N0IHBhdGggY2FjaGUgb24gd2FpdCBpZGxlIGlvY3RsCisgKiByZGV2OiByYWRlb24gZGV2aWNlIHN0cnVjdHVyZQorICogYm86IGJ1ZmZlciBvYmplY3Qgc3RydWN0IHdoaWNoIHVzZXJzcGFjZSBpcyB3YWl0aW5nIGZvciBpZGxlCisgKgorICogU29tZSBSNlhYL1I3WFggZG9lc24ndCBzZWVtcyB0byB0YWtlIGludG8gYWNjb3VudCBIRFAgZmx1c2ggcGVyZm9ybWVkCisgKiB0aHJvdWdoIHJpbmcgYnVmZmVyLCB0aGlzIGxlYWRzIHRvIGNvcnJ1cHRpb24gaW4gcmVuZGVyaW5nLCBzZWUKKyAqIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE4NiB0byBhdm9pZCB0aGlzIHdlCisgKiBkaXJlY3RseSBwZXJmb3JtIEhEUCBmbHVzaCBieSB3cml0aW5nIHJlZ2lzdGVyIHRocm91Z2ggTU1JTy4KKyAqLwordm9pZCByNjAwX2lvY3RsX3dhaXRfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9ibyAqYm8pCit7CisJV1JFRzMyKFJfMDA1NDgwX0hEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDB4MSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCmluZGV4IDk5ZTJjMzguLjBkY2I2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCkBAIC0zNSw3ICszNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZXR1cm4gcmRldi0+ZmFtaWx5ID49IENISVBfUjYwMAorCXJldHVybiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCAmJiByZGV2LT5mYW1pbHkgPCBDSElQX1JWNzEwKQogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzYwMAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzY5MAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MDsKQEAgLTI2MSw3ICsyNjEsNiBAQAogCWlmICghcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChyZGV2KSkKIAkJcmV0dXJuOwogCi0JV1JFRzMyX1AoUjYwMF9BVURJT19FTkFCTEUsIDB4MCwgfjB4ODEwMDAwMDApOwotCiAJZGVsX3RpbWVyKCZyZGV2LT5hdWRpb190aW1lcik7CisJV1JFRzMyX1AoUjYwMF9BVURJT19FTkFCTEUsIDB4MCwgfjB4ODEwMDAwMDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwppbmRleCAyYmVkY2U0Li40NDZiNzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwpAQCAtNDQ5LDYgKzQ0OSw3IEBACiAJdTMyIHBhY2tldDJzWzE2XTsKIAlpbnQgbnVtX3BhY2tldDJzID0gMDsKIAorCW11dGV4X2luaXQoJnJkZXYtPnI2MDBfYmxpdC5tdXRleCk7CiAJcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCA9IDA7CiAKIAlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApCkBAIC01NDIsOSArNTQzLDYgQEAKIHZvaWQgcjYwMF92Yl9pYl9wdXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmFkZW9uX2ZlbmNlX2VtaXQocmRldiwgcmRldi0+cjYwMF9ibGl0LnZiX2liLT5mZW5jZSk7Ci0JbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmcmRldi0+cjYwMF9ibGl0LnZiX2liLT5saXN0LCAmcmRldi0+aWJfcG9vbC5zY2hlZHVsZWRfaWJzKTsKLQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogCXJhZGVvbl9pYl9mcmVlKHJkZXYsICZyZGV2LT5yNjAwX2JsaXQudmJfaWIpOwogfQogCkBAIC01NTcsNyArNTU1LDggQEAKIAlpbnQgZHdvcmRzX3Blcl9sb29wID0gNzYsIG51bV9sb29wczsKIAogCXIgPSByNjAwX3ZiX2liX2dldChyZGV2KTsKLQlXQVJOX09OKHIpOworCWlmIChyKQorCQlyZXR1cm4gcjsKIAogCS8qIHNldF9yZW5kZXJfdGFyZ2V0IGVtaXRzIDIgZXh0cmEgZHdvcmRzIG9uIHJ2Nnh4ICovCiAJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUjYwMCAmJiByZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKQpAQCAtNTgzLDcgKzU4Miw4IEBACiAJcmluZ19zaXplICs9IDU7IC8qIGRvbmUgY29weSAqLwogCXJpbmdfc2l6ZSArPSA3OyAvKiBmZW5jZSBlbWl0IGZvciBkb25lIGNvcHkgKi8KIAlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCByaW5nX3NpemUpOwotCVdBUk5fT04ocik7CisJaWYgKHIpCisJCXJldHVybiByOwogCiAJc2V0X2RlZmF1bHRfc3RhdGUocmRldik7IC8qIDE0ICovCiAJc2V0X3NoYWRlcnMocmRldik7IC8qIDI2ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCmluZGV4IDZkNWE3MTEuLjc1YmNmMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCkBAIC0xNDI4LDkgKzE0MjgsMTIgQEAKIAogCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQU5LX1NXQVBTKDEpOwogCi0JYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMsCi0JCQkJCQkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzLAotCQkJCQkJCSgweGZmIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiAweGZmKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc0MCkKKwkJYmFja2VuZF9tYXAgPSAweDI4OworCWVsc2UKKwkJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMsCisJCQkJCQkJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcywKKwkJCQkJCQkJKDB4ZmYgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzKSAmIDB4ZmYpOwogCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CiAKIAljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggZjdkZjFhNy4uYzAzNTZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC05Niw2ICs5Niw3IEBACiAgKiBzeW1ib2w7CiAgKi8KICNkZWZpbmUgUkFERU9OX01BWF9VU0VDX1RJTUVPVVQJCTEwMDAwMAkvKiAxMDAgbXMgKi8KKy8qIFJBREVPTl9JQl9QT09MX1NJWkUgbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KICNkZWZpbmUgUkFERU9OX0lCX1BPT0xfU0laRQkJMTYKICNkZWZpbmUgUkFERU9OX0RFQlVHRlNfTUFYX05VTV9GSUxFUwkzMgogI2RlZmluZSBSQURFT05GQl9DT05OX0xJTUlUCQk0CkBAIC0zNjMsMTEgKzM2NCwxMiBAQAogICovCiBzdHJ1Y3QgcmFkZW9uX2liIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0JdW5zaWduZWQgbG9uZwkJaWR4OworCXVuc2lnbmVkCQlpZHg7CiAJdWludDY0X3QJCWdwdV9hZGRyOwogCXN0cnVjdCByYWRlb25fZmVuY2UJKmZlbmNlOwotCXVpbnQzMl90CSpwdHI7CisJdWludDMyX3QJCSpwdHI7CiAJdWludDMyX3QJCWxlbmd0aF9kdzsKKwlib29sCQkJZnJlZTsKIH07CiAKIC8qCkBAIC0zNzcsMTAgKzM3OSw5IEBACiBzdHJ1Y3QgcmFkZW9uX2liX3Bvb2wgewogCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiAJc3RydWN0IHJhZGVvbl9ibwkqcm9iajsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXNjaGVkdWxlZF9pYnM7CiAJc3RydWN0IHJhZGVvbl9pYglpYnNbUkFERU9OX0lCX1BPT0xfU0laRV07CiAJYm9vbAkJCXJlYWR5OwotCURFQ0xBUkVfQklUTUFQKGFsbG9jX2JtLCBSQURFT05fSUJfUE9PTF9TSVpFKTsKKwl1bnNpZ25lZAkJaGVhZF9pZDsKIH07CiAKIHN0cnVjdCByYWRlb25fY3AgewpAQCAtNDE2LDYgKzQxNyw3IEBACiB9OwogCiBzdHJ1Y3QgcjYwMF9ibGl0IHsKKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwogCXN0cnVjdCByYWRlb25fYm8JKnNoYWRlcl9vYmo7CiAJdTY0IHNoYWRlcl9ncHVfYWRkcjsKIAl1MzIgdnNfb2Zmc2V0LCBwc19vZmZzZXQ7CkBAIC02NjAsNiArNjYyLDEzIEBACiAJdm9pZCAoKmhwZF9maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJYm9vbCAoKmhwZF9zZW5zZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGVudW0gcmFkZW9uX2hwZF9pZCBocGQpOwogCXZvaWQgKCpocGRfc2V0X3BvbGFyaXR5KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhwZCk7CisJLyogaW9jdGwgaHcgc3BlY2lmaWMgY2FsbGJhY2suIFNvbWUgaHcgbWlnaHQgd2FudCB0byBwZXJmb3JtIHNwZWNpYWwKKwkgKiBvcGVyYXRpb24gb24gc3BlY2lmaWMgaW9jdGwuIEZvciBpbnN0YW5jZSBvbiB3YWl0IGlkbGUgc29tZSBodworCSAqIG1pZ2h0IHdhbnQgdG8gcGVyZm9ybSBhbmQgSERQIGZsdXNoIHRocm91Z2ggTU1JTyBhcyBpdCBzZWVtcyB0aGF0CisJICogc29tZSBSNlhYL1I3WFggaHcgZG9lc24ndCB0YWtlIEhEUCBmbHVzaCBpbnRvIGFjY291bnQgaWYgcHJvZ3JhbW1lZAorCSAqIHRocm91Z2ggcmluZy4KKwkgKi8KKwl2b2lkICgqaW9jdGxfd2FpdF9pZGxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9ibyAqYm8pOwogfTsKIAogLyoKQEAgLTExNDIsNiArMTE1MSw3IEBACiBleHRlcm4gdm9pZCByNjAwX2NwX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF9yaW5nX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CiBleHRlcm4gaW50IHI2MDBfY3BfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfY291bnRfcGlwZV9iaXRzKHVpbnQzMl90IHZhbCk7CiBleHRlcm4gaW50IHI2MDBfZ2FydF9jbGVhcl9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSk7CiBleHRlcm4gaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FncC5jCmluZGV4IGM5YWQ3ZjUuLmMwNjgxYTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYwpAQCAtMTMzLDEzICsxMzMsNiBAQAogCWJvb2wgaXNfdjM7CiAJaW50IHJldDsKIAotCWlmIChyZGV2LT5kZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSA8IDMyKSB7Ci0JCWRldl93YXJuKHJkZXYtPmRldiwgIkFHUCBhcGVydHVyZSB0byBzbWFsbCAoJWRNKSAiCi0JCQkibmVlZCBhdCBsZWFzdCAzMk0sIGRpc2FibGluZyBBR1BcbiIsCi0JCQlyZGV2LT5kZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCS8qIEFjcXVpcmUgQUdQLiAqLwogCWlmICghcmRldi0+ZGRldi0+YWdwLT5hY3F1aXJlZCkgewogCQlyZXQgPSBkcm1fYWdwX2FjcXVpcmUocmRldi0+ZGRldik7CkBAIC0xNTEsOSArMTQ0LDE5IEBACiAKIAlyZXQgPSBkcm1fYWdwX2luZm8ocmRldi0+ZGRldiwgJmluZm8pOwogCWlmIChyZXQpIHsKKwkJZHJtX2FncF9yZWxlYXNlKHJkZXYtPmRkZXYpOwogCQlEUk1fRVJST1IoIlVuYWJsZSB0byBnZXQgQUdQIGluZm86ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KKworCWlmIChyZGV2LT5kZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSA8IDMyKSB7CisJCWRybV9hZ3BfcmVsZWFzZShyZGV2LT5kZGV2KTsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiQUdQIGFwZXJ0dXJlIHRvbyBzbWFsbCAoJXp1TSkgIgorCQkJIm5lZWQgYXQgbGVhc3QgMzJNLCBkaXNhYmxpbmcgQUdQXG4iLAorCQkJcmRldi0+ZGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAltb2RlLm1vZGUgPSBpbmZvLm1vZGU7CiAJYWdwX3N0YXR1cyA9IChSUkVHMzIoUkFERU9OX0FHUF9TVEFUVVMpIHwgUkFERU9OX0FHUHYzX01PREUpICYgbW9kZS5tb2RlOwogCWlzX3YzID0gISEoYWdwX3N0YXR1cyAmIFJBREVPTl9BR1B2M19NT0RFKTsKQEAgLTIyOCw2ICsyMzEsNyBAQAogCXJldCA9IGRybV9hZ3BfZW5hYmxlKHJkZXYtPmRkZXYsIG1vZGUpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZW5hYmxlIEFHUCAobW9kZSA9IDB4JWx4KVxuIiwgbW9kZS5tb2RlKTsKKwkJZHJtX2FncF9yZWxlYXNlKHJkZXYtPmRkZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IGYyZmJkMmUuLjA1ZWUxYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTExNyw2ICsxMTcsNyBAQAogCS5ocGRfZmluaSA9ICZyMTAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcjEwMF9ocGRfc2Vuc2UsCiAJLmhwZF9zZXRfcG9sYXJpdHkgPSAmcjEwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSBOVUxMLAogfTsKIAogCkBAIC0xNzYsNiArMTc3LDcgQEAKIAkuaHBkX2ZpbmkgPSAmcjEwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnIxMDBfaHBkX3NlbnNlLAogCS5ocGRfc2V0X3BvbGFyaXR5ID0gJnIxMDBfaHBkX3NldF9wb2xhcml0eSwKKwkuaW9jdGxfd2FpdF9pZGxlID0gTlVMTCwKIH07CiAKIC8qCkBAIC0yMTksNiArMjIxLDcgQEAKIAkuaHBkX2ZpbmkgPSAmcjEwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnIxMDBfaHBkX3NlbnNlLAogCS5ocGRfc2V0X3BvbGFyaXR5ID0gJnIxMDBfaHBkX3NldF9wb2xhcml0eSwKKwkuaW9jdGxfd2FpdF9pZGxlID0gTlVMTCwKIH07CiAKIApAQCAtMjY3LDYgKzI3MCw3IEBACiAJLmhwZF9maW5pID0gJnIxMDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyMTAwX2hwZF9zZW5zZSwKIAkuaHBkX3NldF9wb2xhcml0eSA9ICZyMTAwX2hwZF9zZXRfcG9sYXJpdHksCisJLmlvY3RsX3dhaXRfaWRsZSA9IE5VTEwsCiB9OwogCiAKQEAgLTMyMyw2ICszMjcsNyBAQAogCS5ocGRfZmluaSA9ICZyczYwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnJzNjAwX2hwZF9zZW5zZSwKIAkuaHBkX3NldF9wb2xhcml0eSA9ICZyczYwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSBOVUxMLAogfTsKIAogCkBAIC0zNzAsNiArMzc1LDcgQEAKIAkuaHBkX2ZpbmkgPSAmcnM2MDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyczYwMF9ocGRfc2Vuc2UsCiAJLmhwZF9zZXRfcG9sYXJpdHkgPSAmcnM2MDBfaHBkX3NldF9wb2xhcml0eSwKKwkuaW9jdGxfd2FpdF9pZGxlID0gTlVMTCwKIH07CiAKIApAQCAtNDIxLDYgKzQyNyw3IEBACiAJLmhwZF9maW5pID0gJnJzNjAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcnM2MDBfaHBkX3NlbnNlLAogCS5ocGRfc2V0X3BvbGFyaXR5ID0gJnJzNjAwX2hwZF9zZXRfcG9sYXJpdHksCisJLmlvY3RsX3dhaXRfaWRsZSA9IE5VTEwsCiB9OwogCiAKQEAgLTQ2Myw2ICs0NzAsNyBAQAogCS5ocGRfZmluaSA9ICZyczYwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnJzNjAwX2hwZF9zZW5zZSwKIAkuaHBkX3NldF9wb2xhcml0eSA9ICZyczYwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSBOVUxMLAogfTsKIAogLyoKQEAgLTUwNCw2ICs1MTIsNyBAQAogYm9vbCByNjAwX2hwZF9zZW5zZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhwZCk7CiB2b2lkIHI2MDBfaHBkX3NldF9wb2xhcml0eShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgIGVudW0gcmFkZW9uX2hwZF9pZCBocGQpOworZXh0ZXJuIHZvaWQgcjYwMF9pb2N0bF93YWl0X2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fYm8gKmJvKTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNjAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjYwMF9pbml0LApAQCAtNTM4LDYgKzU0Nyw3IEBACiAJLmhwZF9maW5pID0gJnI2MDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyNjAwX2hwZF9zZW5zZSwKIAkuaHBkX3NldF9wb2xhcml0eSA9ICZyNjAwX2hwZF9zZXRfcG9sYXJpdHksCisJLmlvY3RsX3dhaXRfaWRsZSA9IHI2MDBfaW9jdGxfd2FpdF9pZGxlLAogfTsKIAogLyoKQEAgLTU4Miw2ICs1OTIsNyBAQAogCS5ocGRfZmluaSA9ICZyNjAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcjYwMF9ocGRfc2Vuc2UsCiAJLmhwZF9zZXRfcG9sYXJpdHkgPSAmcjYwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSByNjAwX2lvY3RsX3dhaXRfaWRsZSwKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggZmE4MmNhNy4uNGQ4ODMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0yMDYsNiArMjA2LDE1IEBACiAJCQkqY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDsKIAl9CiAKKwkvKiBBc3JvY2sgUlM2MDAgYm9hcmQgbGlzdHMgdGhlIERWSSBwb3J0IGFzIEhETUkgKi8KKwlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4Nzk0MSkgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDE4NDkpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHg3OTQxKSkgeworCQlpZiAoKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpICYmCisJCSAgICAoc3VwcG9ydGVkX2RldmljZSA9PSBBVE9NX0RFVklDRV9ERlAzX1NVUFBPUlQpKQorCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7CisJfQorCiAJLyogYS1iaXQgZi1pOTBoZCAtIGNpYXJhbm0gb24gI3JhZGVvbmhkIC0gdGhpcyBib2FyZCBoYXMgbm8gRFZJICovCiAJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDc5NDEpICYmCiAJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxNDdiKSAmJgpAQCAtMjg3LDYgKzI5NiwxNSBAQAogCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7CiAJfQogCisJLyogWEZYIFBpbmUgR3JvdXAgZGV2aWNlIHJ2NzMwIHJlcG9ydHMgbm8gVkdBIEREQyBsaW5lcworCSAqIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHdpcmVkIHVwIHRvIHJlY29yZCAweDkzCisJICovCisJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk0OTgpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxNjgyKSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MjQ1MikpIHsKKwkJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCQkqaTJjX2J1cyA9IHJhZGVvbl9sb29rdXBfaTJjX2dwaW8ocmRldiwgMHg5Myk7CisJfQogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCmluZGV4IDRkZGZkNGIuLjc5MzJkYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCkBAIC02NSwzMSArNjUsNDIgQEAKIAlpZiAocikgewogCQlnb3RvIG91dF9jbGVhbnVwOwogCX0KLQlzdGFydF9qaWZmaWVzID0gamlmZmllczsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXIgPSByYWRlb25fZmVuY2VfY3JlYXRlKHJkZXYsICZmZW5jZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dF9jbGVhbnVwOworCisJLyogcjEwMCBkb2Vzbid0IGhhdmUgZG1hIGVuZ2luZSBzbyBza2lwIHRoZSB0ZXN0ICovCisJaWYgKHJkZXYtPmFzaWMtPmNvcHlfZG1hKSB7CisKKwkJc3RhcnRfamlmZmllcyA9IGppZmZpZXM7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXIgPSByYWRlb25fZmVuY2VfY3JlYXRlKHJkZXYsICZmZW5jZSk7CisJCQlpZiAocikgeworCQkJCWdvdG8gb3V0X2NsZWFudXA7CisJCQl9CisKKwkJCXIgPSByYWRlb25fY29weV9kbWEocmRldiwgc2FkZHIsIGRhZGRyLAorCQkJCQlzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsIGZlbmNlKTsKKworCQkJaWYgKHIpIHsKKwkJCQlnb3RvIG91dF9jbGVhbnVwOworCQkJfQorCQkJciA9IHJhZGVvbl9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7CisJCQlpZiAocikgeworCQkJCWdvdG8gb3V0X2NsZWFudXA7CisJCQl9CisJCQlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dF9jbGVhbnVwOworCQllbmRfamlmZmllcyA9IGppZmZpZXM7CisJCXRpbWUgPSBlbmRfamlmZmllcyAtIHN0YXJ0X2ppZmZpZXM7CisJCXRpbWUgPSBqaWZmaWVzX3RvX21zZWNzKHRpbWUpOworCQlpZiAodGltZSA+IDApIHsKKwkJCWkgPSAoKG4gKiBzaXplKSA+PiAxMCkgLyB0aW1lOworCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFkZW9uOiBkbWEgJXUgYm8gbW92ZXMgb2YgJXVrYiBmcm9tIgorCQkJCQkiICVkIHRvICVkIGluICVsdW1zICgldWtiL21zICV1a2IvcyAldU0vcylcbiIsCisJCQkJCW4sIHNpemUgPj4gMTAsCisJCQkJCXNkb21haW4sIGRkb21haW4sIHRpbWUsCisJCQkJCWksIGkgKiAxMDAwLCAoaSAqIDEwMDApIC8gMTAyNCk7CiAJCX0KLQkJciA9IHJhZGVvbl9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dF9jbGVhbnVwOwotCQl9Ci0JCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwogCX0KLQllbmRfamlmZmllcyA9IGppZmZpZXM7Ci0JdGltZSA9IGVuZF9qaWZmaWVzIC0gc3RhcnRfamlmZmllczsKLQl0aW1lID0gamlmZmllc190b19tc2Vjcyh0aW1lKTsKLQlpZiAodGltZSA+IDApIHsKLQkJaSA9ICgobiAqIHNpemUpID4+IDEwKSAvIHRpbWU7Ci0JCXByaW50ayhLRVJOX0lORk8gInJhZGVvbjogZG1hICV1IGJvIG1vdmVzIG9mICV1a2IgZnJvbSAlZCB0byAlZCIKLQkJICAgICAgICIgaW4gJWx1bXMgKCV1a2IvbXMgJXVrYi9zICV1TS9zKVxuIiwgbiwgc2l6ZSA+PiAxMCwKLQkJICAgICAgIHNkb21haW4sIGRkb21haW4sIHRpbWUsIGksIGkgKiAxMDAwLCAoaSAqIDEwMDApIC8gMTAyNCk7Ci0JfQorCiAJc3RhcnRfamlmZmllcyA9IGppZmZpZXM7CiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlyID0gcmFkZW9uX2ZlbmNlX2NyZWF0ZShyZGV2LCAmZmVuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDU3OWM4OTIuLjIyZDQ3NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTk3MSw4ICs5NzEsNyBAQAogCQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KTsKIAogCQlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgyYyk7Ci0JCWlmIChsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPiAyMDAwIHx8IGx2ZHMtPnBhbmVsX3ZjY19kZWxheSA8IDApCi0JCQlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSAyMDAwOworCQlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSBtaW5fdCh1MTYsIGx2ZHMtPnBhbmVsX3ZjY19kZWxheSwgMjAwMCk7CiAKIAkJbHZkcy0+cGFuZWxfcHdyX2RlbGF5ID0gUkJJT1M4KGxjZF9pbmZvICsgMHgyNCk7CiAJCWx2ZHMtPnBhbmVsX2RpZ29uX2RlbGF5ID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MzgpICYgMHhmOwpAQCAtMTI4MCw0NyArMTI3OSw0NyBAQAogCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSByYWRlb25fY29ubmVjdG9yX3RhYmxlOwogCWlmIChyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID09IENUX05PTkUpIHsKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKLQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikpIHsKKwkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikpIHsKIAkJCS8qIHBvd2VyYm9vayB3aXRoIFZHQSAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19WR0E7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMyw0IikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMyw1IikpIHsKIAkJCS8qIHBvd2VyYm9vayB3aXRoIGludGVybmFsIHRtZHMgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9QT1dFUkJPT0tfSU5URVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDEiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDIiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDMiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDQiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDUiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwxIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwyIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwzIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw0IikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw1IikpIHsKIAkJCS8qIHBvd2VyYm9vayB3aXRoIGV4dGVybmFsIHNpbmdsZSBsaW5rIHRtZHMgKHNpbDE2NCkgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9QT1dFUkJPT0tfRVhURVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDYiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw2IikpIHsKIAkJCS8qIHBvd2VyYm9vayB3aXRoIGV4dGVybmFsIGR1YWwgb3Igc2luZ2xlIGxpbmsgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOCIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDciKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDgiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDkiKSkgewogCQkJLyogUG93ZXJCb29rNiwyID8gKi8KIAkJCS8qIHBvd2VyYm9vayB3aXRoIGV4dGVybmFsIGR1YWwgbGluayB0bWRzIChzaWwxMTc4PykgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9QT1dFUkJPT0tfRVhURVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDIiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDUiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDciKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwyIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwzIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiwzIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiw1IikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiw3IikpIHsKIAkJCS8qIGlib29rICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfSUJPT0s7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsNCIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsNCIpKSB7CiAJCQkvKiBlbWFjICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfRU1BQzsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTAsMSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEwLDEiKSkgewogCQkJLyogbWluaSB3aXRoIGludGVybmFsIHRtZHMgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9NSU5JX0lOVEVSTkFMOwotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMCwyIikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTAsMiIpKSB7CiAJCQkvKiBtaW5pIHdpdGggZXh0ZXJuYWwgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX01JTklfRVhURVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEyLDEiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMiwxIikpIHsKIAkJCS8qIFBvd2VyTWFjOCwxID8gKi8KIAkJCS8qIGltYWMgZzUgaXNpZ2h0ICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfSU1BQ19HNV9JU0lHSFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggNTUyNjY0MS4uNjVmODE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtNTgwLDE2ICs1ODAsMTggQEAKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKLQlib29sIGRyZXQ7CisJYm9vbCBkcmV0ID0gZmFsc2U7CiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAogCWVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOwogCWlmICghZW5jb2RlcikKIAkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKLQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7Ci0JZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7Ci0JcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDApOworCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKKwkJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKKwl9CiAJaWYgKGRyZXQpIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwpAQCAtNzQwLDExICs3NDIsMTMgQEAKIAlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CiAJaW50IGk7CiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQlib29sIGRyZXQ7CisJYm9vbCBkcmV0ID0gZmFsc2U7CiAKLQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7Ci0JZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7Ci0JcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDApOworCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKKwkJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKKwl9CiAJaWYgKGRyZXQpIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwpAQCAtNzc2LDcgKzc4MCw3IEBACiAJCQkgKiBjb25uZWN0ZWQgYW5kIHRoZSBEVkkgcG9ydCBkaXNjb25uZWN0ZWQuICBJZiB0aGUgZWRpZCBkb2Vzbid0CiAJCQkgKiBzYXkgSERNSSwgdmljZSB2ZXJzYS4KIAkJCSAqLwotCQkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgJiYgY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjICYmIChyZXQgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpKSB7CiAJCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwogCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpsaXN0X2Nvbm5lY3RvcjsKIAkJCQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqbGlzdF9yYWRlb25fY29ubmVjdG9yOwpAQCAtMTA1Niw4ICsxMDYwLDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyAmJiBpMmNfYnVzLT52YWxpZCkgewotCQkJaWYgKG1lbWNtcCgmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+cmVjLCBpMmNfYnVzLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYykpID09IDApIHsKKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMuaTJjX2lkID09IGkyY19idXMtPmkyY19pZCkgewogCQkJCXJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgPSB0cnVlOwogCQkJCXNoYXJlZF9kZGMgPSB0cnVlOwogCQkJfQpAQCAtMTM0Myw3ICsxMzQ2LDcgQEAKIAkJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSBmYWxzZTsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAotCQkJCQkJICAgICAgMSk7CisJCQkJCQkgICAgICByYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5LAogCQkJCQkJICAgICAgcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2luZm8ocmRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKaW5kZXggMTQ5NmNiOC4uZTlkMDg1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCkBAIC04Niw3ICs4Niw3IEBACiAJCQkJCQkmcC0+dmFsaWRhdGVkKTsKIAkJfQogCX0KLQlyZXR1cm4gcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoJnAtPnZhbGlkYXRlZCwgcC0+aWItPmZlbmNlKTsKKwlyZXR1cm4gcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoJnAtPnZhbGlkYXRlZCk7CiB9CiAKIGludCByYWRlb25fY3NfcGFyc2VyX2luaXQoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIHZvaWQgKmRhdGEpCkBAIC0xODksMTIgKzE4OSwxMCBAQAogewogCXVuc2lnbmVkIGk7CiAKLQlpZiAoZXJyb3IpIHsKLQkJcmFkZW9uX2JvX2xpc3RfdW52YWxpZGF0ZSgmcGFyc2VyLT52YWxpZGF0ZWQsCi0JCQkJCQlwYXJzZXItPmliLT5mZW5jZSk7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2JvX2xpc3RfdW5yZXNlcnZlKCZwYXJzZXItPnZhbGlkYXRlZCk7CisJaWYgKCFlcnJvciAmJiBwYXJzZXItPmliKSB7CisJCXJhZGVvbl9ib19saXN0X2ZlbmNlKCZwYXJzZXItPnZhbGlkYXRlZCwgcGFyc2VyLT5pYi0+ZmVuY2UpOwogCX0KKwlyYWRlb25fYm9fbGlzdF91bnJlc2VydmUoJnBhcnNlci0+dmFsaWRhdGVkKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5ucmVsb2NzOyBpKyspIHsKIAkJaWYgKHBhcnNlci0+cmVsb2NzW2ldLmdvYmopIHsKIAkJCW11dGV4X2xvY2soJnBhcnNlci0+cmRldi0+ZGRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCA2YTkyZjk5Li43ZTE3YTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJRFJNX0lORk8oIiAgJXNcbiIsIGNvbm5lY3Rvcl9uYW1lc1tjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlXSk7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkICE9IFJBREVPTl9IUERfTk9ORSkKIAkJCURSTV9JTkZPKCIgICVzXG4iLCBocGRfbmFtZXNbcmFkZW9uX2Nvbm5lY3Rvci0+aHBkLmhwZF0pOwotCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpIHsKIAkJCURSTV9JTkZPKCIgIEREQzogMHgleCAweCV4IDB4JXggMHgleCAweCV4IDB4JXggMHgleCAweCV4XG4iLAogCQkJCSByYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMubWFza19jbGtfcmVnLAogCQkJCSByYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMubWFza19kYXRhX3JlZywKQEAgLTI4OCw2ICsyODgsMTUgQEAKIAkJCQkgcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+cmVjLmVuX2RhdGFfcmVnLAogCQkJCSByYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMueV9jbGtfcmVnLAogCQkJCSByYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMueV9kYXRhX3JlZyk7CisJCX0gZWxzZSB7CisJCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBIHx8CisJCQkgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSB8fAorCQkJICAgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQgfHwKKwkJCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBIHx8CisJCQkgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEgfHwKKwkJCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQikKKwkJCQlEUk1fSU5GTygiICBEREM6IG5vIGRkYyBidXMgLSBwb3NzaWJsZSBCSU9TIGJ1ZyAtIHBsZWFzZSByZXBvcnQgdG8geG9yZy1kcml2ZXItYXRpQGxpc3RzLngub3JnXG4iKTsKKwkJfQogCQlEUk1fSU5GTygiICBFbmNvZGVyczpcbiIpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKaW5kZXggZTEzNzg1Mi4uYzU3YWQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKQEAgLTEwNiw5ICsxMDYsMTAgQEAKICAqIDEuMjktIFI1MDAgM0QgY21kIGJ1ZmZlciBzdXBwb3J0CiAgKiAxLjMwLSBBZGQgc3VwcG9ydCBmb3Igb2NjbHVzaW9uIHF1ZXJpZXMKICAqIDEuMzEtIEFkZCBzdXBwb3J0IGZvciBudW0gWiBwaXBlcyBmcm9tIEdFVF9QQVJBTQorICogMS4zMi0gZml4ZXMgZm9yIHJ2NzQwIHNldHVwCiAgKi8KICNkZWZpbmUgRFJJVkVSX01BSk9SCQkxCi0jZGVmaW5lIERSSVZFUl9NSU5PUgkJMzEKKyNkZWZpbmUgRFJJVkVSX01JTk9SCQkzMgogI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkwCiAKIGVudW0gcmFkZW9uX2NwX21pY3JvY29kZV92ZXJzaW9uIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDgyZWI1NTEuLjNjOTE3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMTU2LDYgKzE1NiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCByYWRlb25fZW5jb2Rlcl9pc19kaWdpdGFsKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgeworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZEUzoKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1RNRFMxOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZUTTE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EVk8xOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RWTzE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EREk6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KIHZvaWQKIHJhZGVvbl9saW5rX2VuY29kZXJfY29ubmVjdG9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC0yMDIsNyArMjIyLDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewogCQlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiByYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzKQorCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiByYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzKQogCQkJcmV0dXJuIGNvbm5lY3RvcjsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC02NzYsMzEgKzY5NiwxMSBAQAogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCi0JaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKLQkJaWYgKGRpZy0+ZGlnX2Jsb2NrKQotCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcyRW5jb2RlckNvbnRyb2wpOwotCQllbHNlCi0JCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzFFbmNvZGVyQ29udHJvbCk7Ci0JCW51bSA9IGRpZy0+ZGlnX2Jsb2NrICsgMTsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7Ci0JCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgotCQkJLyogWFhYIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBkaWcgZW5jb2RlciB3ZSBwaWNrIGFzIGxvbmcgYXMgaXQncwotCQkJICogbm90IGFscmVhZHkgaW4gdXNlCi0JCQkgKi8KLQkJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKLQkJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzJFbmNvZGVyQ29udHJvbCk7Ci0JCQllbHNlCi0JCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcxRW5jb2RlckNvbnRyb2wpOwotCQkJbnVtID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9MVlRNQToKLQkJCS8qIE9ubHkgZGlnMiBlbmNvZGVyIGNhbiBkcml2ZSBMVlRNQSAqLwotCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcyRW5jb2RlckNvbnRyb2wpOwotCQkJbnVtID0gMjsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWlmIChkaWctPmRpZ19lbmNvZGVyKQorCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzJFbmNvZGVyQ29udHJvbCk7CisJZWxzZQorCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzFFbmNvZGVyQ29udHJvbCk7CisJbnVtID0gZGlnLT5kaWdfZW5jb2RlciArIDE7CiAKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LCAmY3Jldik7CiAKQEAgLTgyMiw3ICs4MjIsNyBAQAogCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJfQogCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWlmIChkaWctPmRpZ19ibG9jaykKKwkJaWYgKGRpZy0+ZGlnX2VuY29kZXIgPT0gMSkKIAkJCWFyZ3MudjIuYWNDb25maWcudWNFbmNvZGVyU2VsID0gMTsKIAkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQogCQkJYXJncy52Mi5hY0NvbmZpZy51Y0xpbmtTZWwgPSAxOwpAQCAtODQ5LDE3ICs4NDksMTYgQEAKIAkJCQlhcmdzLnYyLmFjQ29uZmlnLmZDb2hlcmVudE1vZGUgPSAxOwogCQl9CiAJfSBlbHNlIHsKKwogCQlhcmdzLnYxLnVjQ29uZmlnID0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ0xLU1JDX1BQTEw7CiAKKwkJaWYgKGRpZy0+ZGlnX2VuY29kZXIpCisJCQlhcmdzLnYxLnVjQ29uZmlnIHw9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0RJRzJfRU5DT0RFUjsKKwkJZWxzZQorCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVI7CisKIAkJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewogCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKLQkJCS8qIFhYWCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hpY2ggZGlnIGVuY29kZXIgd2UgcGljayBhcyBsb25nIGFzIGl0J3MKLQkJCSAqIG5vdCBhbHJlYWR5IGluIHVzZQotCQkJICovCi0JCQlpZiAoZGlnX2Nvbm5lY3Rvci0+bGlua2IpCi0JCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcyX0VOQ09ERVI7Ci0JCQllbHNlCi0JCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVI7CiAJCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkgewogCQkJCQlpZiAoZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyAmIDB4MykKQEAgLTg3OCwxMCArODc3LDYgQEAKIAkJCQl9CiAJCQl9CiAJCQlicmVhazsKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6Ci0JCQkvKiBPbmx5IGRpZzIgZW5jb2RlciBjYW4gZHJpdmUgTFZUTUEgKi8KLQkJCWFyZ3MudjEudWNDb25maWcgfD0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfRElHMl9FTkNPREVSOwotCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrID4gMTY1MDAwKQpAQCAtMTA0Niw2ICsxMDQxLDcgQEAKIAl1bmlvbiBjcnRjX3NvdXJjX3BhcmFtIGFyZ3M7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgU2VsZWN0Q1JUQ19Tb3VyY2UpOwogCXVpbnQ4X3QgZnJldiwgY3JldjsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIApAQCAtMTEwOSw0MCArMTEwNSwxNiBAQAogCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTE6CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6Ci0JCQkJaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKLQkJCQkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkKQotCQkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzJfRU5DT0RFUl9JRDsKLQkJCQkJZWxzZQotCQkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzFfRU5DT0RFUl9JRDsKLQkJCQl9IGVsc2UgewotCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCQkJCQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKLQkJCQkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7Ci0KLQkJCQkJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7Ci0JCQkJCWlmICghY29ubmVjdG9yKQotCQkJCQkJcmV0dXJuOwotCQkJCQlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCQkJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KQotCQkJCQkJcmV0dXJuOwotCQkJCQlkaWdfY29ubmVjdG9yID0gcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXY7Ci0KLQkJCQkJLyogWFhYIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBkaWcgZW5jb2RlciB3ZSBwaWNrIGFzIGxvbmcgYXMgaXQncwotCQkJCQkgKiBub3QgYWxyZWFkeSBpbiB1c2UKLQkJCQkJICovCi0JCQkJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKLQkJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUcyX0VOQ09ERVJfSUQ7Ci0JCQkJCWVsc2UKLQkJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUcxX0VOQ09ERVJfSUQ7Ci0JCQkJfQorCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6CisJCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCWlmIChkaWctPmRpZ19lbmNvZGVyKQorCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfRElHMl9FTkNPREVSX0lEOworCQkJCWVsc2UKKwkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzFfRU5DT0RFUl9JRDsKIAkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RWTzE6CiAJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RWT19FTkNPREVSX0lEOwogCQkJCWJyZWFrOwotCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6Ci0JCQkJLyogT25seSBkaWcyIGVuY29kZXIgY2FuIGRyaXZlIExWVE1BICovCi0JCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzJfRU5DT0RFUl9JRDsKLQkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzE6CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfVFZfRU5DT0RFUl9JRDsKQEAgLTEyMDIsNiArMTE3NCw0NyBAQAogCX0KIH0KIAorc3RhdGljIGludCByYWRlb25fYXRvbV9waWNrX2RpZ19lbmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqdGVzdF9lbmNvZGVyOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOworCXVpbnQzMl90IGRpZ19lbmNfaW5fdXNlID0gMDsKKwkvKiBvbiBEQ0UzMiBhbmQgZW5jb2RlciBjYW4gZHJpdmVyIGFueSBibG9jayBzbyBqdXN0IGNydGMgaWQgKi8KKwlpZiAoQVNJQ19JU19EQ0UzMihyZGV2KSkgeworCQlyZXR1cm4gcmFkZW9uX2NydGMtPmNydGNfaWQ7CisJfQorCisJLyogb24gRENFMyAtIExWVE1BIGNhbiBvbmx5IGJlIGRyaXZlbiBieSBESUdCICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXN0X2VuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl90ZXN0X2VuY29kZXI7CisKKwkJaWYgKGVuY29kZXIgPT0gdGVzdF9lbmNvZGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKCFyYWRlb25fZW5jb2Rlcl9pc19kaWdpdGFsKHRlc3RfZW5jb2RlcikpCisJCQljb250aW51ZTsKKworCQlyYWRlb25fdGVzdF9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIodGVzdF9lbmNvZGVyKTsKKwkJZGlnID0gcmFkZW9uX3Rlc3RfZW5jb2Rlci0+ZW5jX3ByaXY7CisKKwkJaWYgKGRpZy0+ZGlnX2VuY29kZXIgPj0gMCkKKwkJCWRpZ19lbmNfaW5fdXNlIHw9ICgxIDw8IGRpZy0+ZGlnX2VuY29kZXIpOworCX0KKworCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCA9PSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUEpIHsKKwkJaWYgKGRpZ19lbmNfaW5fdXNlICYgMHgyKQorCQkJRFJNX0VSUk9SKCJMVkRTIHJlcXVpcmVkIGRpZ2l0YWwgZW5jb2RlciAyIGJ1dCBpdCB3YXMgaW4gdXNlIC0gc3RlYWxpbmdcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCEoZGlnX2VuY19pbl91c2UgJiAxKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyB2b2lkCiByYWRlb25fYXRvbV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCkBAIC0xMjE0LDEyICsxMjI3LDkgQEAKIAogCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmCiAJICAgIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCB8IEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQlpZiAocmFkZW9uX2VuY29kZXItPmVuY19wcml2KSB7Ci0JCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKLQotCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCQkJZGlnLT5kaWdfYmxvY2sgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQkJfQorCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJaWYgKGRpZykKKwkJCWRpZy0+ZGlnX2VuY29kZXIgPSByYWRlb25fYXRvbV9waWNrX2RpZ19lbmNvZGVyKGVuY29kZXIpOwogCX0KIAlyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPSBhZGp1c3RlZF9tb2RlLT5jbG9jazsKIApAQCAtMTM3OSw3ICsxMzg5LDEzIEBACiBzdGF0aWMgdm9pZCByYWRlb25fYXRvbV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKIAlyYWRlb25fYXRvbV9lbmNvZGVyX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCisJaWYgKHJhZGVvbl9lbmNvZGVyX2lzX2RpZ2l0YWwoZW5jb2RlcikpIHsKKwkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQlkaWctPmRpZ19lbmNvZGVyID0gLTE7CisJfQogCXJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlID0gMDsKIH0KIApAQCAtMTQzNiw2ICsxNDUyLDcgQEAKIAogCS8qIGNvaGVyZW50IG1vZGUgYnkgZGVmYXVsdCAqLwogCWRpZy0+Y29oZXJlbnRfbW9kZSA9IHRydWU7CisJZGlnLT5kaWdfZW5jb2RlciA9IC0xOwogCiAJcmV0dXJuIGRpZzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCmluZGV4IDNiYTIxM2QuLmQ3MWUzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWY7CiAKLQltZW1zZXRfaW8oZmJwdHIsIDB4ZmYsIGFsaWduZWRfc2l6ZSk7CisJbWVtc2V0X2lvKGZicHRyLCAweDAsIGFsaWduZWRfc2l6ZSk7CiAKIAlzdHJjcHkoaW5mby0+Zml4LmlkLCAicmFkZW9uZHJtZmIiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwppbmRleCAwZTEzMjVlLi5kYjhlOWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwpAQCAtMzA4LDYgKzMwOCw5IEBACiAJfQogCXJvYmogPSBnb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlyID0gcmFkZW9uX2JvX3dhaXQocm9iaiwgTlVMTCwgZmFsc2UpOworCS8qIGNhbGxiYWNrIGh3IHNwZWNpZmljIGZ1bmN0aW9ucyBpZiBhbnkgKi8KKwlpZiAocm9iai0+cmRldi0+YXNpYy0+aW9jdGxfd2FpdF9pZGxlKQorCQlyb2JqLT5yZGV2LT5hc2ljLT5pb2N0bF93YWl0X2lkbGUocm9iai0+cmRldiwgcm9iaik7CiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdvYmopOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCmluZGV4IDk2Yjg1MWYuLmU4MWIyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKQEAgLTI5OSw3ICsyOTksNyBAQAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnIHsKIAkvKiBhdG9tIGRpZyAqLwogCWJvb2wgY29oZXJlbnRfbW9kZTsKLQlpbnQgZGlnX2Jsb2NrOworCWludCBkaWdfZW5jb2RlcjsgLyogLTEgZGlzYWJsZWQsIDAgRElHQSwgMSBESUdCICovCiAJLyogYXRvbSBsdmRzICovCiAJdWludDMyX3QgbHZkc19taXNjOwogCXVpbnQxNl90IHBhbmVsX3B3cl9kZWxheTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKaW5kZXggZDcyYTcxYi4uZjFkYTM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKQEAgLTMwNiwxMSArMzA2LDEwIEBACiAJfQogfQogCi1pbnQgcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdm9pZCAqZmVuY2UpCitpbnQgcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2JvX2xpc3QgKmxvYmo7CiAJc3RydWN0IHJhZGVvbl9ibyAqYm87Ci0Jc3RydWN0IHJhZGVvbl9mZW5jZSAqb2xkX2ZlbmNlID0gTlVMTDsKIAlpbnQgcjsKIAogCXIgPSByYWRlb25fYm9fbGlzdF9yZXNlcnZlKGhlYWQpOwpAQCAtMzM0LDMyICszMzMsMjcgQEAKIAkJfQogCQlsb2JqLT5ncHVfb2Zmc2V0ID0gcmFkZW9uX2JvX2dwdV9vZmZzZXQoYm8pOwogCQlsb2JqLT50aWxpbmdfZmxhZ3MgPSBiby0+dGlsaW5nX2ZsYWdzOwotCQlpZiAoZmVuY2UpIHsKLQkJCW9sZF9mZW5jZSA9IChzdHJ1Y3QgcmFkZW9uX2ZlbmNlICopYm8tPnRiby5zeW5jX29iajsKLQkJCWJvLT50Ym8uc3luY19vYmogPSByYWRlb25fZmVuY2VfcmVmKGZlbmNlKTsKLQkJCWJvLT50Ym8uc3luY19vYmpfYXJnID0gTlVMTDsKLQkJfQotCQlpZiAob2xkX2ZlbmNlKSB7Ci0JCQlyYWRlb25fZmVuY2VfdW5yZWYoJm9sZF9mZW5jZSk7Ci0JCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcmFkZW9uX2JvX2xpc3RfdW52YWxpZGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB2b2lkICpmZW5jZSkKK3ZvaWQgcmFkZW9uX2JvX2xpc3RfZmVuY2Uoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdm9pZCAqZmVuY2UpCiB7CiAJc3RydWN0IHJhZGVvbl9ib19saXN0ICpsb2JqOwotCXN0cnVjdCByYWRlb25fZmVuY2UgKm9sZF9mZW5jZTsKKwlzdHJ1Y3QgcmFkZW9uX2JvICpibzsKKwlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpvbGRfZmVuY2UgPSBOVUxMOwogCi0JaWYgKGZlbmNlKQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKLQkJCW9sZF9mZW5jZSA9IHRvX3JhZGVvbl9mZW5jZShsb2JqLT5iby0+dGJvLnN5bmNfb2JqKTsKLQkJCWlmIChvbGRfZmVuY2UgPT0gZmVuY2UpIHsKLQkJCQlsb2JqLT5iby0+dGJvLnN5bmNfb2JqID0gTlVMTDsKLQkJCQlyYWRlb25fZmVuY2VfdW5yZWYoJm9sZF9mZW5jZSk7Ci0JCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CisJCWJvID0gbG9iai0+Ym87CisJCXNwaW5fbG9jaygmYm8tPnRiby5sb2NrKTsKKwkJb2xkX2ZlbmNlID0gKHN0cnVjdCByYWRlb25fZmVuY2UgKiliby0+dGJvLnN5bmNfb2JqOworCQliby0+dGJvLnN5bmNfb2JqID0gcmFkZW9uX2ZlbmNlX3JlZihmZW5jZSk7CisJCWJvLT50Ym8uc3luY19vYmpfYXJnID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJmJvLT50Ym8ubG9jayk7CisJCWlmIChvbGRfZmVuY2UpIHsKKwkJCXJhZGVvbl9mZW5jZV91bnJlZigmb2xkX2ZlbmNlKTsKIAkJfQotCXJhZGVvbl9ib19saXN0X3VucmVzZXJ2ZShoZWFkKTsKKwl9CiB9CiAKIGludCByYWRlb25fYm9fZmJkZXZfbW1hcChzdHJ1Y3QgcmFkZW9uX2JvICpibywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKaW5kZXggYTAyZjE4MC4uN2FiNDNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKQEAgLTE1Niw4ICsxNTYsOCBAQAogCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogZXh0ZXJuIGludCByYWRlb25fYm9fbGlzdF9yZXNlcnZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2JvX2xpc3RfdW5yZXNlcnZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwotZXh0ZXJuIGludCByYWRlb25fYm9fbGlzdF92YWxpZGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB2b2lkICpmZW5jZSk7Ci1leHRlcm4gdm9pZCByYWRlb25fYm9fbGlzdF91bnZhbGlkYXRlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHZvaWQgKmZlbmNlKTsKK2V4dGVybiBpbnQgcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitleHRlcm4gdm9pZCByYWRlb25fYm9fbGlzdF9mZW5jZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB2b2lkICpmZW5jZSk7CiBleHRlcm4gaW50IHJhZGVvbl9ib19mYmRldl9tbWFwKHN0cnVjdCByYWRlb25fYm8gKmJvLAogCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIGV4dGVybiBpbnQgcmFkZW9uX2JvX3NldF90aWxpbmdfZmxhZ3Moc3RydWN0IHJhZGVvbl9ibyAqYm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKaW5kZXggNGQxMmIyZC4uNjU3OWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwpAQCAtNDEsNjggKzQxLDU1IEBACiB7CiAJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2U7CiAJc3RydWN0IHJhZGVvbl9pYiAqbmliOwotCXVuc2lnbmVkIGxvbmcgaTsKLQlpbnQgciA9IDA7CisJaW50IHIgPSAwLCBpLCBjOwogCiAJKmliID0gTlVMTDsKIAlyID0gcmFkZW9uX2ZlbmNlX2NyZWF0ZShyZGV2LCAmZmVuY2UpOwogCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBmZW5jZSBmb3IgbmV3IElCXG4iKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIGZlbmNlIGZvciBuZXcgSUJcbiIpOwogCQlyZXR1cm4gcjsKIAl9CiAJbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JaSA9IGZpbmRfZmlyc3RfemVyb19iaXQocmRldi0+aWJfcG9vbC5hbGxvY19ibSwgUkFERU9OX0lCX1BPT0xfU0laRSk7Ci0JaWYgKGkgPCBSQURFT05fSUJfUE9PTF9TSVpFKSB7Ci0JCXNldF9iaXQoaSwgcmRldi0+aWJfcG9vbC5hbGxvY19ibSk7Ci0JCXJkZXYtPmliX3Bvb2wuaWJzW2ldLmxlbmd0aF9kdyA9IDA7Ci0JCSppYiA9ICZyZGV2LT5pYl9wb29sLmlic1tpXTsKLQkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQkJZ290byBvdXQ7CisJZm9yIChpID0gcmRldi0+aWJfcG9vbC5oZWFkX2lkLCBjID0gMCwgbmliID0gTlVMTDsgYyA8IFJBREVPTl9JQl9QT09MX1NJWkU7IGMrKywgaSsrKSB7CisJCWkgJj0gKFJBREVPTl9JQl9QT09MX1NJWkUgLSAxKTsKKwkJaWYgKHJkZXYtPmliX3Bvb2wuaWJzW2ldLmZyZWUpIHsKKwkJCW5pYiA9ICZyZGV2LT5pYl9wb29sLmlic1tpXTsKKwkJCWJyZWFrOworCQl9CiAJfQotCWlmIChsaXN0X2VtcHR5KCZyZGV2LT5pYl9wb29sLnNjaGVkdWxlZF9pYnMpKSB7Ci0JCS8qIHdlIGdvIGRvIG5vdGhpbmdzIGhlcmUgKi8KKwlpZiAobmliID09IE5VTEwpIHsKKwkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBpdCBtZWFucyB3ZSBhbGxvY2F0ZWQgYWxsCisJCSAqIElCIGFuZCBoYXZlbid0IHNjaGVkdWxlZCBvbmUgeWV0LCByZXR1cm4gRUJVU1kgdG8KKwkJICogdXNlcnNwYWNlIGhvcGluZyB0aGF0IG9uIGlvY3RsIHJlY2FsbCB3ZSBnZXQgYmV0dGVyCisJCSAqIGx1Y2sKKwkJICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAibm8gZnJlZSBpbmRpcmVjdCBidWZmZXIgIVxuIik7CiAJCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JCURSTV9FUlJPUigiYWxsIElCIGFsbG9jYXRlZCBub25lIHNjaGVkdWxlZC5cbiIpOwotCQlyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOworCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvKiBnZXQgdGhlIGZpcnN0IGliIG9uIHRoZSBzY2hlZHVsZWQgbGlzdCAqLwotCW5pYiA9IGxpc3RfZW50cnkocmRldi0+aWJfcG9vbC5zY2hlZHVsZWRfaWJzLm5leHQsCi0JCQkgc3RydWN0IHJhZGVvbl9pYiwgbGlzdCk7Ci0JaWYgKG5pYi0+ZmVuY2UgPT0gTlVMTCkgewotCQkvKiB3ZSBnbyBkbyBub3RoaW5ncyBoZXJlICovCisJcmRldi0+aWJfcG9vbC5oZWFkX2lkID0gKG5pYi0+aWR4ICsgMSkgJiAoUkFERU9OX0lCX1BPT0xfU0laRSAtIDEpOworCW5pYi0+ZnJlZSA9IGZhbHNlOworCWlmIChuaWItPmZlbmNlKSB7CiAJCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JCURSTV9FUlJPUigiSUIgJWx1IHNjaGVkdWxlZCB3aXRob3V0IGEgZmVuY2UuXG4iLCBuaWItPmlkeCk7Ci0JCXIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQotCXIgPSByYWRlb25fZmVuY2Vfd2FpdChuaWItPmZlbmNlLCBmYWxzZSk7Ci0JaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IElCKCVsdToweCUwMTZsWDoldSlcbiIsIG5pYi0+aWR4LAotCQkJICAodW5zaWduZWQgbG9uZyluaWItPmdwdV9hZGRyLCBuaWItPmxlbmd0aF9kdyk7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBHUFUgbG9ja3VwIGRldGVjdGVkLCBmYWlsIHRvIGdldCBhIElCXG4iKTsKLQkJZ290byBvdXQ7CisJCXIgPSByYWRlb25fZmVuY2Vfd2FpdChuaWItPmZlbmNlLCBmYWxzZSk7CisJCWlmIChyKSB7CisJCQlkZXZfZXJyKHJkZXYtPmRldiwgImVycm9yIHdhaXRpbmcgZmVuY2Ugb2YgSUIoJXU6MHglMDE2bFg6JXUpXG4iLAorCQkJCW5pYi0+aWR4LCAodW5zaWduZWQgbG9uZyluaWItPmdwdV9hZGRyLCBuaWItPmxlbmd0aF9kdyk7CisJCQltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwkJCW5pYi0+ZnJlZSA9IHRydWU7CisJCQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCQkJcmFkZW9uX2ZlbmNlX3VucmVmKCZmZW5jZSk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAl9CiAJcmFkZW9uX2ZlbmNlX3VucmVmKCZuaWItPmZlbmNlKTsKLQorCW5pYi0+ZmVuY2UgPSBmZW5jZTsKIAluaWItPmxlbmd0aF9kdyA9IDA7Ci0KLQkvKiBzY2hlZHVsZWQgbGlzdCBpcyBhY2Nlc3NlZCBoZXJlICovCi0JbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JbGlzdF9kZWwoJm5pYi0+bGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm5pYi0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQogCSppYiA9IG5pYjsKLW91dDoKLQlpZiAocikgewotCQlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKLQl9IGVsc2UgewotCQkoKmliKS0+ZmVuY2UgPSBmZW5jZTsKLQl9Ci0JcmV0dXJuIHI7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgcmFkZW9uX2liX2ZyZWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKippYikKQEAgLTExMywxOSArMTAwLDEwIEBACiAJaWYgKHRtcCA9PSBOVUxMKSB7CiAJCXJldHVybjsKIAl9Ci0JbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ0bXAtPmxpc3QpICYmICFyYWRlb25fZmVuY2Vfc2lnbmFsZWQodG1wLT5mZW5jZSkpIHsKLQkJLyogSUIgaXMgc2NoZWR1bGVkICYgbm90IHNpZ25hbGVkIGRvbid0IGRvIGFueXRoaW5ncyAqLwotCQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwotCQlyZXR1cm47Ci0JfQotCWxpc3RfZGVsKCZ0bXAtPmxpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZ0bXAtPmxpc3QpOwotCWlmICh0bXAtPmZlbmNlKQorCWlmICghdG1wLT5mZW5jZS0+ZW1pdGVkKQogCQlyYWRlb25fZmVuY2VfdW5yZWYoJnRtcC0+ZmVuY2UpOwotCi0JdG1wLT5sZW5ndGhfZHcgPSAwOwotCWNsZWFyX2JpdCh0bXAtPmlkeCwgcmRldi0+aWJfcG9vbC5hbGxvY19ibSk7CisJbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CisJdG1wLT5mcmVlID0gdHJ1ZTsKIAltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogfQogCkBAIC0xMzUsNyArMTEzLDcgQEAKIAogCWlmICghaWItPmxlbmd0aF9kdyB8fCAhcmRldi0+Y3AucmVhZHkpIHsKIAkJLyogVE9ETzogTm90aGluZ3MgaW4gdGhlIGliIHdlIHNob3VsZCByZXBvcnQuICovCi0JCURSTV9FUlJPUigicmFkZW9uOiBjb3VsZG4ndCBzY2hlZHVsZSBJQiglbHUpLlxuIiwgaWItPmlkeCk7CisJCURSTV9FUlJPUigicmFkZW9uOiBjb3VsZG4ndCBzY2hlZHVsZSBJQigldSkuXG4iLCBpYi0+aWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNDgsNyArMTI2LDggQEAKIAlyYWRlb25fcmluZ19pYl9leGVjdXRlKHJkZXYsIGliKTsKIAlyYWRlb25fZmVuY2VfZW1pdChyZGV2LCBpYi0+ZmVuY2UpOwogCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwotCWxpc3RfYWRkX3RhaWwoJmliLT5saXN0LCAmcmRldi0+aWJfcG9vbC5zY2hlZHVsZWRfaWJzKTsKKwkvKiBvbmNlIHNjaGVkdWxlZCBJQiBpcyBjb25zaWRlcmVkIGZyZWUgYW5kIHByb3RlY3RlZCBieSB0aGUgZmVuY2UgKi8KKwlpYi0+ZnJlZSA9IHRydWU7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwogCXJldHVybiAwOwpAQCAtMTY0LDcgKzE0Myw2IEBACiAJaWYgKHJkZXYtPmliX3Bvb2wucm9iaikKIAkJcmV0dXJuIDA7CiAJLyogQWxsb2NhdGUgMU0gb2JqZWN0IGJ1ZmZlciAqLwotCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5pYl9wb29sLnNjaGVkdWxlZF9pYnMpOwogCXIgPSByYWRlb25fYm9fY3JlYXRlKHJkZXYsIE5VTEwsICBSQURFT05fSUJfUE9PTF9TSVpFKjY0KjEwMjQsCiAJCQkJdHJ1ZSwgUkFERU9OX0dFTV9ET01BSU5fR1RULAogCQkJCSZyZGV2LT5pYl9wb29sLnJvYmopOwpAQCAtMTk1LDkgKzE3Myw5IEBACiAJCXJkZXYtPmliX3Bvb2wuaWJzW2ldLnB0ciA9IHB0ciArIG9mZnNldDsKIAkJcmRldi0+aWJfcG9vbC5pYnNbaV0uaWR4ID0gaTsKIAkJcmRldi0+aWJfcG9vbC5pYnNbaV0ubGVuZ3RoX2R3ID0gMDsKLQkJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmliX3Bvb2wuaWJzW2ldLmxpc3QpOworCQlyZGV2LT5pYl9wb29sLmlic1tpXS5mcmVlID0gdHJ1ZTsKIAl9Ci0JYml0bWFwX3plcm8ocmRldi0+aWJfcG9vbC5hbGxvY19ibSwgUkFERU9OX0lCX1BPT0xfU0laRSk7CisJcmRldi0+aWJfcG9vbC5oZWFkX2lkID0gMDsKIAlyZGV2LT5pYl9wb29sLnJlYWR5ID0gdHJ1ZTsKIAlEUk1fSU5GTygicmFkZW9uOiBpYiBwb29sIHJlYWR5LlxuIik7CiAJaWYgKHJhZGVvbl9kZWJ1Z2ZzX2liX2luaXQocmRldikpIHsKQEAgLTIxNCw3ICsxOTIsNiBAQAogCQlyZXR1cm47CiAJfQogCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwotCWJpdG1hcF96ZXJvKHJkZXYtPmliX3Bvb2wuYWxsb2NfYm0sIFJBREVPTl9JQl9QT09MX1NJWkUpOwogCWlmIChyZGV2LT5pYl9wb29sLnJvYmopIHsKIAkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPmliX3Bvb2wucm9iaiwgZmFsc2UpOwogCQlpZiAobGlrZWx5KHIgPT0gMCkpIHsKQEAgLTM2Myw3ICszNDAsNyBAQAogCWlmIChpYiA9PSBOVUxMKSB7CiAJCXJldHVybiAwOwogCX0KLQlzZXFfcHJpbnRmKG0sICJJQiAlMDRsdVxuIiwgaWItPmlkeCk7CisJc2VxX3ByaW50ZihtLCAiSUIgJTA0dVxuIiwgaWItPmlkeCk7CiAJc2VxX3ByaW50ZihtLCAiSUIgZmVuY2UgJXBcbiIsIGliLT5mZW5jZSk7CiAJc2VxX3ByaW50ZihtLCAiSUIgc2l6ZSAlMDV1IGR3b3Jkc1xuIiwgaWItPmxlbmd0aF9kdyk7CiAJZm9yIChpID0gMDsgaSA8IGliLT5sZW5ndGhfZHc7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IDlmNTQxODkuLjI4N2ZjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTIyMywxNSArMjIzLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCByczQwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVuc2lnbmVkIGk7CisJdWludDMyX3QgdG1wOworCisJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCS8qIHJlYWQgTUNfU1RBVFVTICovCisJCXRtcCA9IFJSRUczMigweDAxNTApOworCQlpZiAodG1wICYgKDEgPDwgMikpIHsKKwkJCXJldHVybiAwOworCQl9CisJCURSTV9VREVMQVkoMSk7CisJfQorCXJldHVybiAtMTsKK30KKwogdm9pZCByczQwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM0MDAgPyAqLwogCXIxMDBfaGRwX3Jlc2V0KHJkZXYpOwogCS8qIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3QgPyAqLwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOworCWlmIChyczQwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInJzNDAwOiBGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKKwkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uICUwOHhcbiIsIFJSRUczMigweDE1MCkpOwogCX0KIH0KIApAQCAtMzcwLDggKzM4Niw4IEBACiAJcjEwMF9tY19zdG9wKHJkZXYsICZzYXZlKTsKIAogCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQotCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwlpZiAocnM0MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAicnM0MDA6IFdhaXQgTUMgaWRsZSB0aW1lb3V0IGJlZm9yZSB1cGRhdGluZyBNQy5cbiIpOwogCVdSRUczMihSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiwKIAkJU18wMDAxNDhfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAogCQlTXzAwMDE0OF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKQEAgLTQ0OCw3ICs0NjQsNiBAQAogCiB2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcnM0MDBfc3VzcGVuZChyZGV2KTsKIAlyMTAwX2NwX2ZpbmkocmRldik7CiAJcjEwMF93Yl9maW5pKHJkZXYpOwogCXIxMDBfaWJfZmluaShyZGV2KTsKQEAgLTUyNyw3ICs1NDIsNiBAQAogCWlmIChyKSB7CiAJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KIAkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7Ci0JCXJzNDAwX3N1c3BlbmQocmRldik7CiAJCXIxMDBfY3BfZmluaShyZGV2KTsKIAkJcjEwMF93Yl9maW5pKHJkZXYpOwogCQlyMTAwX2liX2ZpbmkocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKaW5kZXggZDUyNTU3NS4uYzM4MTg1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtNjEwLDcgKzYxMCw2IEBACiAKIHZvaWQgcnM2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyczYwMF9zdXNwZW5kKHJkZXYpOwogCXIxMDBfY3BfZmluaShyZGV2KTsKIAlyMTAwX3diX2ZpbmkocmRldik7CiAJcjEwMF9pYl9maW5pKHJkZXYpOwpAQCAtNjg5LDcgKzY4OCw2IEBACiAJaWYgKHIpIHsKIAkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLwogCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKLQkJcnM2MDBfc3VzcGVuZChyZGV2KTsKIAkJcjEwMF9jcF9maW5pKHJkZXYpOwogCQlyMTAwX3diX2ZpbmkocmRldik7CiAJCXIxMDBfaWJfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCBjZDMxZGE5Li4wNmUyNzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC02NzYsNyArNjc2LDYgQEAKIAogdm9pZCByczY5MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJzNjkwX3N1c3BlbmQocmRldik7CiAJcjEwMF9jcF9maW5pKHJkZXYpOwogCXIxMDBfd2JfZmluaShyZGV2KTsKIAlyMTAwX2liX2ZpbmkocmRldik7CkBAIC03NTYsNyArNzU1LDYgQEAKIAlpZiAocikgewogCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCiAJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOwotCQlyczY5MF9zdXNwZW5kKHJkZXYpOwogCQlyMTAwX2NwX2ZpbmkocmRldik7CiAJCXIxMDBfd2JfZmluaShyZGV2KTsKIAkJcjEwMF9pYl9maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCmluZGV4IDYyNzU2NzEuLjBlMWU2YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKQEAgLTUzNyw3ICs1MzcsNiBAQAogCiB2b2lkIHJ2NTE1X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcnY1MTVfc3VzcGVuZChyZGV2KTsKIAlyMTAwX2NwX2ZpbmkocmRldik7CiAJcjEwMF93Yl9maW5pKHJkZXYpOwogCXIxMDBfaWJfZmluaShyZGV2KTsKQEAgLTYxNSwxMyArNjE0LDEyIEBACiAJaWYgKHIpIHsKIAkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLwogCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKLQkJcnY1MTVfc3VzcGVuZChyZGV2KTsKIAkJcjEwMF9jcF9maW5pKHJkZXYpOwogCQlyMTAwX3diX2ZpbmkocmRldik7CiAJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKIAkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKLQkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCA1NWY2ZmZjLi4wMzAyMTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC01NDksOSArNTQ5LDEyIEBACiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEJBTktfU1dBUFMoMSk7CiAKLQliYWNrZW5kX21hcCA9IHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChyZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXMsCi0JCQkJCQkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcywKLQkJCQkJCQkoMHhmZiA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzKSAmIDB4ZmYpOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc0MCkKKwkJYmFja2VuZF9tYXAgPSAweDI4OworCWVsc2UKKwkJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAocmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzLAorCQkJCQkJCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzLAorCQkJCQkJCQkoMHhmZiA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzKSAmIDB4ZmYpOwogCWdiX3RpbGluZ19jb25maWcgfD0gQkFDS0VORF9NQVAoYmFja2VuZF9tYXApOwogCiAJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0KQEAgLTg4NywyNiArODkwLDI1IEBACiAJCQlyZXR1cm4gcjsKIAl9CiAJcnY3NzBfZ3B1X2luaXQocmRldik7Ci0KLQlpZiAoIXJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKSB7Ci0JCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKKwlyID0gcjYwMF9ibGl0X2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJcjYwMF9ibGl0X2ZpbmkocmRldik7CisJCXJkZXYtPmFzaWMtPmNvcHkgPSBOVUxMOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgYmxpdHRlciAoJWQpIGZhbGxpbmcgYmFjayB0byBtZW1jcHlcbiIsIHIpOworCX0KKwkvKiBwaW4gY29weSBzaGFkZXIgaW50byB2cmFtICovCisJaWYgKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKSB7CisJCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOworCQlpZiAodW5saWtlbHkociAhPSAwKSkKKwkJCXJldHVybiByOworCQlyID0gcmFkZW9uX2JvX3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKKwkJCQkmcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkcik7CisJCXJhZGVvbl9ib191bnJlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCQlpZiAocikgewotCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCBibGl0dGVyICglZCkuXG4iLCByKTsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBibGl0IG9iamVjdCAlZFxuIiwgcik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KLQotCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOwotCWlmICh1bmxpa2VseShyICE9IDApKQotCQlyZXR1cm4gcjsKLQlyID0gcmFkZW9uX2JvX3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKLQkJCSZyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyKTsKLQlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKLQlpZiAocikgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gYmxpdCBvYmplY3QgJWRcbiIsIHIpOwotCQlyZXR1cm4gcjsKLQl9Ci0KIAkvKiBFbmFibGUgSVJRICovCiAJciA9IHI2MDBfaXJxX2luaXQocmRldik7CiAJaWYgKHIpIHsKQEAgLTEwNjYsOSArMTA2OCwxMSBAQAogCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOwogCXIgPSBydjc3MF9zdGFydHVwKHJkZXYpOwogCWlmIChyKSB7Ci0JCXJ2NzcwX3N1c3BlbmQocmRldik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyNjAwX2NwX2ZpbmkocmRldik7CiAJCXI2MDBfd2JfZmluaShyZGV2KTsKLQkJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwkJcjYwMF9pcnFfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKIAkJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAl9CkBAIC0xMDkwLDEzICsxMDk0LDExIEBACiAKIHZvaWQgcnY3NzBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlydjc3MF9zdXNwZW5kKHJkZXYpOwotCiAJcjYwMF9ibGl0X2ZpbmkocmRldik7CisJcjYwMF9jcF9maW5pKHJkZXYpOworCXI2MDBfd2JfZmluaShyZGV2KTsKIAlyNjAwX2lycV9maW5pKHJkZXYpOwogCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7Ci0JcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKLQlyNjAwX3diX2ZpbmkocmRldik7CiAJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCmluZGV4IDFhM2U5MDkuLmM3MzIwY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwpAQCAtMTAyMCw2ICsxMDIwLDEyIEBACiAJCQkgICAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQogewogCWludCBpOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSA9IG1lbS0+bW1fbm9kZTsKKworCWlmIChub2RlICYmIHBsYWNlbWVudC0+bHBmbiAhPSAwICYmCisJICAgIChub2RlLT5zdGFydCA8IHBsYWNlbWVudC0+ZnBmbiB8fAorCSAgICAgbm9kZS0+c3RhcnQgKyBub2RlLT5zaXplID4gcGxhY2VtZW50LT5scGZuKSkKKwkJcmV0dXJuIC0xOwogCiAJZm9yIChpID0gMDsgaSA8IHBsYWNlbWVudC0+bnVtX3BsYWNlbWVudDsgaSsrKSB7CiAJCWlmICgocGxhY2VtZW50LT5wbGFjZW1lbnRbaV0gJiBtZW0tPnBsYWNlbWVudCAmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMKaW5kZXggMmVjZjdkMC4uNWNhMzdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwpAQCAtNTMsNyArNTMsNiBAQAogewogCXN0cnVjdCB0dG1fdHQgKnR0bSA9IGJvLT50dG07CiAJc3RydWN0IHR0bV9tZW1fcmVnICpvbGRfbWVtID0gJmJvLT5tZW07Ci0JdWludDMyX3Qgc2F2ZV9mbGFncyA9IG9sZF9tZW0tPnBsYWNlbWVudDsKIAlpbnQgcmV0OwogCiAJaWYgKG9sZF9tZW0tPm1lbV90eXBlICE9IFRUTV9QTF9TWVNURU0pIHsKQEAgLTYyLDcgKzYxLDYgQEAKIAkJdHRtX2ZsYWdfbWFza2VkKCZvbGRfbWVtLT5wbGFjZW1lbnQsIFRUTV9QTF9GTEFHX1NZU1RFTSwKIAkJCQlUVE1fUExfTUFTS19NRU0pOwogCQlvbGRfbWVtLT5tZW1fdHlwZSA9IFRUTV9QTF9TWVNURU07Ci0JCXNhdmVfZmxhZ3MgPSBvbGRfbWVtLT5wbGFjZW1lbnQ7CiAJfQogCiAJcmV0ID0gdHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyh0dG0sIG5ld19tZW0tPnBsYWNlbWVudCk7CkBAIC03Nyw3ICs3NSw3IEBACiAKIAkqb2xkX21lbSA9ICpuZXdfbWVtOwogCW5ld19tZW0tPm1tX25vZGUgPSBOVUxMOwotCXR0bV9mbGFnX21hc2tlZCgmc2F2ZV9mbGFncywgbmV3X21lbS0+cGxhY2VtZW50LCBUVE1fUExfTUFTS19NRU1UWVBFKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh0dG1fYm9fbW92ZV90dG0pOwpAQCAtMjE5LDcgKzIxNyw2IEBACiAJdm9pZCAqb2xkX2lvbWFwOwogCXZvaWQgKm5ld19pb21hcDsKIAlpbnQgcmV0OwotCXVpbnQzMl90IHNhdmVfZmxhZ3MgPSBvbGRfbWVtLT5wbGFjZW1lbnQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAl1bnNpZ25lZCBsb25nIGFkZCA9IDA7CkBAIC0yNzAsNyArMjY3LDYgQEAKIAogCSpvbGRfbWVtID0gKm5ld19tZW07CiAJbmV3X21lbS0+bW1fbm9kZSA9IE5VTEw7Ci0JdHRtX2ZsYWdfbWFza2VkKCZzYXZlX2ZsYWdzLCBuZXdfbWVtLT5wbGFjZW1lbnQsIFRUTV9QTF9NQVNLX01FTVRZUEUpOwogCiAJaWYgKChtYW4tPmZsYWdzICYgVFRNX01FTVRZUEVfRkxBR19GSVhFRCkgJiYgKHR0bSAhPSBOVUxMKSkgewogCQl0dG1fdHRfdW5iaW5kKHR0bSk7CkBAIC01MzcsNyArNTMzLDYgQEAKIAlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bbmV3X21lbS0+bWVtX3R5cGVdOwogCXN0cnVjdCB0dG1fbWVtX3JlZyAqb2xkX21lbSA9ICZiby0+bWVtOwogCWludCByZXQ7Ci0JdWludDMyX3Qgc2F2ZV9mbGFncyA9IG9sZF9tZW0tPnBsYWNlbWVudDsKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmdob3N0X29iajsKIAl2b2lkICp0bXBfb2JqID0gTlVMTDsKIApAQCAtNTk4LDcgKzU5Myw3IEBACiAKIAkqb2xkX21lbSA9ICpuZXdfbWVtOwogCW5ld19tZW0tPm1tX25vZGUgPSBOVUxMOwotCXR0bV9mbGFnX21hc2tlZCgmc2F2ZV9mbGFncywgbmV3X21lbS0+cGxhY2VtZW50LCBUVE1fUExfTUFTS19NRU1UWVBFKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh0dG1fYm9fbW92ZV9hY2NlbF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKaW5kZXggMTA5OWFiYS4uNzVlOWQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKQEAgLTEwOSw4ICsxMDksOCBAQAogCXN0cnVjdCBkcm1faGFzaF9pdGVtIGhhc2g7CiAJc3RydWN0IGxpc3RfaGVhZCBoZWFkOwogCXN0cnVjdCBrcmVmIGtyZWY7Ci0Jc3RydWN0IHR0bV9iYXNlX29iamVjdCAqb2JqOwogCWVudW0gdHRtX3JlZl90eXBlIHJlZl90eXBlOworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCmluZGV4IDljMmIxY2MuLjNkNDdhMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwpAQCAtMTk2LDIzICsxOTYsMzQgQEAKIAogI2lmZGVmIENPTkZJR19YODYKIHN0YXRpYyBpbmxpbmUgaW50IHR0bV90dF9zZXRfcGFnZV9jYWNoaW5nKHN0cnVjdCBwYWdlICpwLAotCQkJCQkgIGVudW0gdHRtX2NhY2hpbmdfc3RhdGUgY19zdGF0ZSkKKwkJCQkJICBlbnVtIHR0bV9jYWNoaW5nX3N0YXRlIGNfb2xkLAorCQkJCQkgIGVudW0gdHRtX2NhY2hpbmdfc3RhdGUgY19uZXcpCiB7CisJaW50IHJldCA9IDA7CisKIAlpZiAoUGFnZUhpZ2hNZW0ocCkpCiAJCXJldHVybiAwOwogCi0Jc3dpdGNoIChjX3N0YXRlKSB7Ci0JY2FzZSB0dF9jYWNoZWQ6Ci0JCXJldHVybiBzZXRfcGFnZXNfd2IocCwgMSk7Ci0JY2FzZSB0dF93YzoKLQkgICAgcmV0dXJuIHNldF9tZW1vcnlfd2MoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwKSwgMSk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIHNldF9wYWdlc191YyhwLCAxKTsKKwlpZiAoY19vbGQgIT0gdHRfY2FjaGVkKSB7CisJCS8qIHAgaXNuJ3QgaW4gdGhlIGRlZmF1bHQgY2FjaGluZyBzdGF0ZSwgc2V0IGl0IHRvCisJCSAqIHdyaXRlYmFjayBmaXJzdCB0byBmcmVlIGl0cyBjdXJyZW50IG1lbXR5cGUuICovCisKKwkJcmV0ID0gc2V0X3BhZ2VzX3diKHAsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CisKKwlpZiAoY19uZXcgPT0gdHRfd2MpCisJCXJldCA9IHNldF9tZW1vcnlfd2MoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwKSwgMSk7CisJZWxzZSBpZiAoY19uZXcgPT0gdHRfdW5jYWNoZWQpCisJCXJldCA9IHNldF9wYWdlc191YyhwLCAxKTsKKworCXJldHVybiByZXQ7CiB9CiAjZWxzZSAvKiBDT05GSUdfWDg2ICovCiBzdGF0aWMgaW5saW5lIGludCB0dG1fdHRfc2V0X3BhZ2VfY2FjaGluZyhzdHJ1Y3QgcGFnZSAqcCwKLQkJCQkJICBlbnVtIHR0bV9jYWNoaW5nX3N0YXRlIGNfc3RhdGUpCisJCQkJCSAgZW51bSB0dG1fY2FjaGluZ19zdGF0ZSBjX29sZCwKKwkJCQkJICBlbnVtIHR0bV9jYWNoaW5nX3N0YXRlIGNfbmV3KQogewogCXJldHVybiAwOwogfQpAQCAtMjQ1LDcgKzI1Niw5IEBACiAJZm9yIChpID0gMDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyArK2kpIHsKIAkJY3VyX3BhZ2UgPSB0dG0tPnBhZ2VzW2ldOwogCQlpZiAobGlrZWx5KGN1cl9wYWdlICE9IE5VTEwpKSB7Ci0JCQlyZXQgPSB0dG1fdHRfc2V0X3BhZ2VfY2FjaGluZyhjdXJfcGFnZSwgY19zdGF0ZSk7CisJCQlyZXQgPSB0dG1fdHRfc2V0X3BhZ2VfY2FjaGluZyhjdXJfcGFnZSwKKwkJCQkJCSAgICAgIHR0bS0+Y2FjaGluZ19zdGF0ZSwKKwkJCQkJCSAgICAgIGNfc3RhdGUpOwogCQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJCQlnb3RvIG91dF9lcnI7CiAJCX0KQEAgLTI1OSw3ICsyNzIsNyBAQAogCWZvciAoaiA9IDA7IGogPCBpOyArK2opIHsKIAkJY3VyX3BhZ2UgPSB0dG0tPnBhZ2VzW2pdOwogCQlpZiAobGlrZWx5KGN1cl9wYWdlICE9IE5VTEwpKSB7Ci0JCQkodm9pZCl0dG1fdHRfc2V0X3BhZ2VfY2FjaGluZyhjdXJfcGFnZSwKKwkJCSh2b2lkKXR0bV90dF9zZXRfcGFnZV9jYWNoaW5nKGN1cl9wYWdlLCBjX3N0YXRlLAogCQkJCQkJICAgICAgdHRtLT5jYWNoaW5nX3N0YXRlKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKaW5kZXggZGVkZDEyMS4uMGM5YzA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKQEAgLTIwOSw2ICsyMDksNyBAQAogewogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7CiAJaW50IHJldDsKKwl1aW50MzJfdCBzdmdhX2lkOwogCiAJZGV2X3ByaXYgPSBremFsbG9jKHNpemVvZigqZGV2X3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoZGV2X3ByaXYgPT0gTlVMTCkpIHsKQEAgLTIzOSw2ICsyNDAsMTYgQEAKIAlkZXZfcHJpdi0+bW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDIpOwogCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKworCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSUQsIFNWR0FfSURfMik7CisJc3ZnYV9pZCA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19JRCk7CisJaWYgKHN2Z2FfaWQgIT0gU1ZHQV9JRF8yKSB7CisJCXJldCA9IC1FTk9TWVM7CisJCURSTV9FUlJPUigiVW5zdXBvcnRlZCBTVkdBIElEIDB4JXhcbiIsIHN2Z2FfaWQpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJCWdvdG8gb3V0X2VycjA7CisJfQorCiAJZGV2X3ByaXYtPmNhcGFiaWxpdGllcyA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19DQVBBQklMSVRJRVMpOwogCiAJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9HTVIpIHsKQEAgLTMzNywyNiArMzQ4LDI1IEBACiAJCSAqLwogCiAJCURSTV9JTkZPKCJJdCBhcHBlYXJzIGxpa2UgdmVzYWZiIGlzIGxvYWRlZC4gIgotCQkJICJJZ25vcmUgYWJvdmUgZXJyb3IgaWYgYW55LiBFbnRlcmluZyBzdGVhbHRoIG1vZGUuXG4iKTsKKwkJCSAiSWdub3JlIGFib3ZlIGVycm9yIGlmIGFueS5cbiIpOwogCQlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb24oZGV2LT5wZGV2LCAyLCAidm13Z2Z4IHN0ZWFsdGggcHJvYmUiKTsKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgcmVzZXJ2aW5nIHRoZSBTVkdBIE1NSU8gcmVzb3VyY2UuXG4iKTsKIAkJCWdvdG8gb3V0X25vX2RldmljZTsKIAkJfQotCQl2bXdfa21zX2luaXQoZGV2X3ByaXYpOwotCQl2bXdfb3ZlcmxheV9pbml0KGRldl9wcml2KTsKLQl9IGVsc2UgewotCQlyZXQgPSB2bXdfcmVxdWVzdF9kZXZpY2UoZGV2X3ByaXYpOwotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJZ290byBvdXRfbm9fZGV2aWNlOwotCQl2bXdfa21zX2luaXQoZGV2X3ByaXYpOwotCQl2bXdfb3ZlcmxheV9pbml0KGRldl9wcml2KTsKLQkJdm13X2ZiX2luaXQoZGV2X3ByaXYpOwogCX0KKwlyZXQgPSB2bXdfcmVxdWVzdF9kZXZpY2UoZGV2X3ByaXYpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gb3V0X25vX2RldmljZTsKKwl2bXdfa21zX2luaXQoZGV2X3ByaXYpOworCXZtd19vdmVybGF5X2luaXQoZGV2X3ByaXYpOworCXZtd19mYl9pbml0KGRldl9wcml2KTsKIAogCWRldl9wcml2LT5wbV9uYi5ub3RpZmllcl9jYWxsID0gdm13Z2Z4X3BtX25vdGlmaWVyOwogCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZkZXZfcHJpdi0+cG1fbmIpOwogCisJRFJNX0lORk8oIiVzIiwgdm13X2ZpZm9faGF2ZV8zZChkZXZfcHJpdikgPyAiSGF2ZSAzRFxuIiA6ICJObyAzRFxuIik7CisKIAlyZXR1cm4gMDsKIAogb3V0X25vX2RldmljZToKQEAgLTM5MywxNyArNDAzLDE1IEBACiAKIAl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZkZXZfcHJpdi0+cG1fbmIpOwogCi0JaWYgKCFkZXZfcHJpdi0+c3RlYWx0aCkgewotCQl2bXdfZmJfY2xvc2UoZGV2X3ByaXYpOwotCQl2bXdfa21zX2Nsb3NlKGRldl9wcml2KTsKLQkJdm13X292ZXJsYXlfY2xvc2UoZGV2X3ByaXYpOwotCQl2bXdfcmVsZWFzZV9kZXZpY2UoZGV2X3ByaXYpOwotCQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldi0+cGRldik7Ci0JfSBlbHNlIHsKLQkJdm13X2ttc19jbG9zZShkZXZfcHJpdik7Ci0JCXZtd19vdmVybGF5X2Nsb3NlKGRldl9wcml2KTsKKwl2bXdfZmJfY2xvc2UoZGV2X3ByaXYpOworCXZtd19rbXNfY2xvc2UoZGV2X3ByaXYpOworCXZtd19vdmVybGF5X2Nsb3NlKGRldl9wcml2KTsKKwl2bXdfcmVsZWFzZV9kZXZpY2UoZGV2X3ByaXYpOworCWlmIChkZXZfcHJpdi0+c3RlYWx0aCkKIAkJcGNpX3JlbGVhc2VfcmVnaW9uKGRldi0+cGRldiwgMik7Ci0JfQorCWVsc2UKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYtPnBkZXYpOworCiAJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9JUlFNQVNLKQogCQlkcm1faXJxX3VuaW5zdGFsbChkZXZfcHJpdi0+ZGV2KTsKIAlpZiAoZGV2LT5kZXZuYW1lID09IHZtd19kZXZuYW1lKQpAQCAtNTcyLDExICs1ODAsNiBAQAogCWludCByZXQgPSAwOwogCiAJRFJNX0lORk8oIk1hc3RlciBzZXQuXG4iKTsKLQlpZiAoZGV2X3ByaXYtPnN0ZWFsdGgpIHsKLQkJcmV0ID0gdm13X3JlcXVlc3RfZGV2aWNlKGRldl9wcml2KTsKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJCXJldHVybiByZXQ7Ci0JfQogCiAJaWYgKGFjdGl2ZSkgewogCQlCVUdfT04oYWN0aXZlICE9ICZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyKTsKQEAgLTYzNiwxOCArNjM5LDExIEBACiAKIAl0dG1fbG9ja19zZXRfa2lsbCgmdm1hc3Rlci0+bG9jaywgdHJ1ZSwgU0lHVEVSTSk7CiAKLQlpZiAoZGV2X3ByaXYtPnN0ZWFsdGgpIHsKLQkJcmV0ID0gdHRtX2JvX2V2aWN0X21tKCZkZXZfcHJpdi0+YmRldiwgVFRNX1BMX1ZSQU0pOwotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gY2xlYW4gVlJBTSBvbiBtYXN0ZXIgZHJvcC5cbiIpOwotCQl2bXdfcmVsZWFzZV9kZXZpY2UoZGV2X3ByaXYpOwotCX0KIAlkZXZfcHJpdi0+YWN0aXZlX21hc3RlciA9ICZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyOwogCXR0bV9sb2NrX3NldF9raWxsKCZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyLmxvY2ssIGZhbHNlLCBTSUdURVJNKTsKIAl0dG1fdnRfdW5sb2NrKCZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyLmxvY2spOwogCi0JaWYgKCFkZXZfcHJpdi0+c3RlYWx0aCkKLQkJdm13X2ZiX29uKGRldl9wcml2KTsKKwl2bXdfZmJfb24oZGV2X3ByaXYpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKaW5kZXggNTA1MjlhNy4uMzU2ZGM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKQEAgLTM5LDEwICszOSwxMCBAQAogI2luY2x1ZGUgInR0bS90dG1fZXhlY2J1Zl91dGlsLmgiCiAjaW5jbHVkZSAidHRtL3R0bV9tb2R1bGUuaCIKIAotI2RlZmluZSBWTVdHRlhfRFJJVkVSX0RBVEUgIjIwMDkwNzI0IgotI2RlZmluZSBWTVdHRlhfRFJJVkVSX01BSk9SIDAKLSNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9NSU5PUiAxCi0jZGVmaW5lIFZNV0dGWF9EUklWRVJfUEFUQ0hMRVZFTCAyCisjZGVmaW5lIFZNV0dGWF9EUklWRVJfREFURSAiMjAxMDAyMDkiCisjZGVmaW5lIFZNV0dGWF9EUklWRVJfTUFKT1IgMQorI2RlZmluZSBWTVdHRlhfRFJJVkVSX01JTk9SIDAKKyNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9QQVRDSExFVkVMIDAKICNkZWZpbmUgVk1XR0ZYX0ZJTEVfUEFHRV9PRkZTRVQgMHgwMDEwMDAwMAogI2RlZmluZSBWTVdHRlhfRklGT19TVEFUSUNfU0laRSAoMTAyNCoxMDI0KQogI2RlZmluZSBWTVdHRlhfTUFYX1JFTE9DQVRJT05TIDIwNDgKQEAgLTk2LDYgKzk2LDggQEAKIAlzdHJ1Y3QgZHJtX3Ztd19zaXplICpzaXplczsKIAl1aW50MzJfdCBudW1fc2l6ZXM7CiAKKwlib29sIHNjYW5vdXQ7CisKIAkvKiBUT0RPIHNvIGZhciBqdXN0IGEgZXh0cmEgcG9pbnRlciAqLwogCXN0cnVjdCB2bXdfY3Vyc29yX3Nub29wZXIgc25vb3BlcjsKIH07CkBAIC0xMTEsNiArMTEzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXRpY19idWZmZXJfc2l6ZTsKIAlib29sIHVzaW5nX2JvdW5jZV9idWZmZXI7CiAJdWludDMyX3QgY2FwYWJpbGl0aWVzOworCXN0cnVjdCBtdXRleCBmaWZvX211dGV4OwogCXN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07CiB9OwogCkBAIC0yMTEsNyArMjE0LDcgQEAKIAkgKiBGZW5jaW5nIGFuZCBJUlFzLgogCSAqLwogCi0JdWludDMyX3QgZmVuY2Vfc2VxOworCWF0b21pY190IGZlbmNlX3NlcTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmZW5jZV9xdWV1ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmaWZvX3F1ZXVlOwogCWF0b21pY190IGZlbmNlX3F1ZXVlX3dhaXRlcnM7CkBAIC0zODksNiArMzkyLDcgQEAKIAkJCSAgICAgICB1aW50MzJfdCAqc2VxdWVuY2UpOwogZXh0ZXJuIHZvaWQgdm13X2ZpZm9fcGluZ19ob3N0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IHJlYXNvbik7CiBleHRlcm4gaW50IHZtd19maWZvX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2V4dGVybiBib29sIHZtd19maWZvX2hhdmVfM2Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CiAKIC8qKgogICogVFRNIGdsdWUgLSB2bXdnZnhfdHRtX2dsdWUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCmluZGV4IGQ2OWNhZjkuLjA4OTczNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKQEAgLTE4MiwyNSArMTgyLDE5IEBACiAJcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnNpZCk7CiB9CiAKLXN0YXRpYyBpbnQgdm13X2NtZF9kbWEoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKLQkJICAgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKLQkJICAgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQorc3RhdGljIGludCB2bXdfdHJhbnNsYXRlX2d1ZXN0X3B0cihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkgICBTVkdBR3Vlc3RQdHIgKnB0ciwKKwkJCQkgICBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKip2bXdfYm9fcCkKIHsKLQl1aW50MzJfdCBoYW5kbGU7CiAJc3RydWN0IHZtd19kbWFfYnVmZmVyICp2bXdfYm8gPSBOVUxMOwogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87Ci0Jc3RydWN0IHZtd19zdXJmYWNlICpzcmYgPSBOVUxMOwotCXN0cnVjdCB2bXdfZG1hX2NtZCB7Ci0JCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7Ci0JCVNWR0EzZENtZFN1cmZhY2VETUEgZG1hOwotCX0gKmNtZDsKKwl1aW50MzJfdCBoYW5kbGUgPSBwdHItPmdtcklkOwogCXN0cnVjdCB2bXdfcmVsb2NhdGlvbiAqcmVsb2M7Ci0JaW50IHJldDsKIAl1aW50MzJfdCBjdXJfdmFsaWRhdGVfbm9kZTsKIAlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmFsX2J1ZjsKKwlpbnQgcmV0OwogCi0JY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19kbWFfY21kLCBoZWFkZXIpOwotCWhhbmRsZSA9IGNtZC0+ZG1hLmd1ZXN0LnB0ci5nbXJJZDsKIAlyZXQgPSB2bXdfdXNlcl9kbWFidWZfbG9va3VwKHN3X2NvbnRleHQtPnRmaWxlLCBoYW5kbGUsICZ2bXdfYm8pOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKIAkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBvciB1c2UgR01SIHJlZ2lvbi5cbiIpOwpAQCAtMjA5LDE0ICsyMDMsMTQgQEAKIAlibyA9ICZ2bXdfYm8tPmJhc2U7CiAKIAlpZiAodW5saWtlbHkoc3dfY29udGV4dC0+Y3VyX3JlbG9jID49IFZNV0dGWF9NQVhfUkVMT0NBVElPTlMpKSB7Ci0JCURSTV9FUlJPUigiTWF4IG51bWJlciBvZiBETUEgY29tbWFuZHMgcGVyIHN1Ym1pc3Npb24iCisJCURSTV9FUlJPUigiTWF4IG51bWJlciByZWxvY2F0aW9ucyBwZXIgc3VibWlzc2lvbiIKIAkJCSAgIiBleGNlZWRlZFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X25vX3JlbG9jOwogCX0KIAogCXJlbG9jID0gJnN3X2NvbnRleHQtPnJlbG9jc1tzd19jb250ZXh0LT5jdXJfcmVsb2MrK107Ci0JcmVsb2MtPmxvY2F0aW9uID0gJmNtZC0+ZG1hLmd1ZXN0LnB0cjsKKwlyZWxvYy0+bG9jYXRpb24gPSBwdHI7CiAKIAljdXJfdmFsaWRhdGVfbm9kZSA9IHZtd19kbWFidWZfdmFsaWRhdGVfbm9kZShibywgc3dfY29udGV4dC0+Y3VyX3ZhbF9idWYpOwogCWlmICh1bmxpa2VseShjdXJfdmFsaWRhdGVfbm9kZSA+PSBWTVdHRlhfTUFYX0dNUlMpKSB7CkBAIC0yMzQsNyArMjI4LDg5IEBACiAJCWxpc3RfYWRkX3RhaWwoJnZhbF9idWYtPmhlYWQsICZzd19jb250ZXh0LT52YWxpZGF0ZV9ub2Rlcyk7CiAJCSsrc3dfY29udGV4dC0+Y3VyX3ZhbF9idWY7CiAJfQorCSp2bXdfYm9fcCA9IHZtd19ibzsKKwlyZXR1cm4gMDsKIAorb3V0X25vX3JlbG9jOgorCXZtd19kbWFidWZfdW5yZWZlcmVuY2UoJnZtd19ibyk7CisJdm13X2JvX3AgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9lbmRfcXVlcnkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnZtd19ibzsKKwlzdHJ1Y3Qgdm13X3F1ZXJ5X2NtZCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZEVuZFF1ZXJ5IHE7CisJfSAqY21kOworCWludCByZXQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3F1ZXJ5X2NtZCwgaGVhZGVyKTsKKwlyZXQgPSB2bXdfY21kX2NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgaGVhZGVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdm13X3RyYW5zbGF0ZV9ndWVzdF9wdHIoZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJICAgICAgJmNtZC0+cS5ndWVzdFJlc3VsdCwKKwkJCQkgICAgICAmdm13X2JvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmdm13X2JvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfY21kX3dhaXRfcXVlcnkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCSAgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvOworCXN0cnVjdCB2bXdfcXVlcnlfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kV2FpdEZvclF1ZXJ5IHE7CisJfSAqY21kOworCWludCByZXQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3F1ZXJ5X2NtZCwgaGVhZGVyKTsKKwlyZXQgPSB2bXdfY21kX2NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgaGVhZGVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdm13X3RyYW5zbGF0ZV9ndWVzdF9wdHIoZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJICAgICAgJmNtZC0+cS5ndWVzdFJlc3VsdCwKKwkJCQkgICAgICAmdm13X2JvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmdm13X2JvKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZtd19jbWRfZG1hKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCSAgICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCSAgICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnZtd19ibyA9IE5VTEw7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKKwlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZiA9IE5VTEw7CisJc3RydWN0IHZtd19kbWFfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU3VyZmFjZURNQSBkbWE7CisJfSAqY21kOworCWludCByZXQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X2RtYV9jbWQsIGhlYWRlcik7CisJcmV0ID0gdm13X3RyYW5zbGF0ZV9ndWVzdF9wdHIoZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJICAgICAgJmNtZC0+ZG1hLmd1ZXN0LnB0ciwKKwkJCQkgICAgICAmdm13X2JvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJYm8gPSAmdm13X2JvLT5iYXNlOwogCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShkZXZfcHJpdiwgc3dfY29udGV4dC0+dGZpbGUsCiAJCQkJCSAgICAgY21kLT5kbWEuaG9zdC5zaWQsICZzcmYpOwogCWlmIChyZXQpIHsKQEAgLTM3OSw4ICs0NTUsOCBAQAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RSQVdfUFJJTUlUSVZFUywgJnZtd19jbWRfZHJhdyksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUU0NJU1NPUlJFQ1QsICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfQkVHSU5fUVVFUlksICZ2bXdfY21kX2NpZF9jaGVjayksCi0JVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRU5EX1FVRVJZLCAmdm13X2NtZF9jaWRfY2hlY2spLAotCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1dBSVRfRk9SX1FVRVJZLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0VORF9RVUVSWSwgJnZtd19jbWRfZW5kX3F1ZXJ5KSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9XQUlUX0ZPUl9RVUVSWSwgJnZtd19jbWRfd2FpdF9xdWVyeSksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfUFJFU0VOVF9SRUFEQkFDSywgJnZtd19jbWRfb2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0JMSVRfU1VSRkFDRV9UT19TQ1JFRU4sCiAJCSAgICAmdm13X2NtZF9ibHRfc3VyZl9zY3JlZW5fY2hlY2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYwppbmRleCA0ZjRmNjQzLi5hOTMzNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKQEAgLTU1OSw2ICs1NTksOSBAQAogCWluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gMTsKICNlbmRpZgogCisJaW5mby0+YXBlcnR1cmVfYmFzZSA9IHZtd19wcml2LT52cmFtX3N0YXJ0OworCWluZm8tPmFwZXJ0dXJlX3NpemUgPSB2bXdfcHJpdi0+dnJhbV9zaXplOworCiAJLyoKIAkgKiBEaXJ0eSAmIERlZmVycmVkIElPCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKaW5kZXggZjdkNWY3MC4uMzlkNDNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYwpAQCAtMjksNiArMjksMjUgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKIAorYm9vbCB2bXdfZmlmb19oYXZlXzNkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKKwl1aW50MzJfdCBmaWZvX21pbiwgaHd2ZXJzaW9uOworCisJZmlmb19taW4gPSBpb3JlYWQzMihmaWZvX21lbSAgKyBTVkdBX0ZJRk9fTUlOKTsKKwlpZiAoZmlmb19taW4gPD0gU1ZHQV9GSUZPXzNEX0hXVkVSU0lPTiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlod3ZlcnNpb24gPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT18zRF9IV1ZFUlNJT04pOworCWlmIChod3ZlcnNpb24gPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGh3dmVyc2lvbiA8IFNWR0EzRF9IV1ZFUlNJT05fV1M2NV9CMSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIGludCB2bXdfZmlmb19pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmbykKIHsKIAlfX2xlMzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OwpAQCAtNTUsNiArNzQsNyBAQAogCWZpZm8tPnJlc2VydmVkX3NpemUgPSAwOwogCWZpZm8tPnVzaW5nX2JvdW5jZV9idWZmZXIgPSBmYWxzZTsKIAorCW11dGV4X2luaXQoJmZpZm8tPmZpZm9fbXV0ZXgpOwogCWluaXRfcndzZW0oJmZpZm8tPnJ3c2VtKTsKIAogCS8qCkBAIC05OCw3ICsxMTgsNyBAQAogCQkgKHVuc2lnbmVkIGludCkgbWluLAogCQkgKHVuc2lnbmVkIGludCkgZmlmby0+Y2FwYWJpbGl0aWVzKTsKIAotCWRldl9wcml2LT5mZW5jZV9zZXEgPSBkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcXVlbmNlOworCWF0b21pY19zZXQoJmRldl9wcml2LT5mZW5jZV9zZXEsIGRldl9wcml2LT5sYXN0X3JlYWRfc2VxdWVuY2UpOwogCWlvd3JpdGUzMihkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcXVlbmNlLCBmaWZvX21lbSArIFNWR0FfRklGT19GRU5DRSk7CiAKIAlyZXR1cm4gdm13X2ZpZm9fc2VuZF9mZW5jZShkZXZfcHJpdiwgJmR1bW15KTsKQEAgLTI2NCw3ICsyODQsNyBAQAogCXVpbnQzMl90IHJlc2VydmVhYmxlID0gZmlmb19zdGF0ZS0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9GSUZPX0NBUF9SRVNFUlZFOwogCWludCByZXQ7CiAKLQlkb3duX3dyaXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7CisJbXV0ZXhfbG9jaygmZmlmb19zdGF0ZS0+Zmlmb19tdXRleCk7CiAJbWF4ID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fTUFYKTsKIAltaW4gPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19NSU4pOwogCW5leHRfY21kID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fTkVYVF9DTUQpOwpAQCAtMzMyLDcgKzM1Miw3IEBACiAJfQogb3V0X2VycjoKIAlmaWZvX3N0YXRlLT5yZXNlcnZlZF9zaXplID0gMDsKLQl1cF93cml0ZSgmZmlmb19zdGF0ZS0+cndzZW0pOworCW11dGV4X3VubG9jaygmZmlmb19zdGF0ZS0+Zmlmb19tdXRleCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQwNyw2ICs0MjcsNyBAQAogCiAJfQogCisJZG93bl93cml0ZSgmZmlmb19zdGF0ZS0+cndzZW0pOwogCWlmIChmaWZvX3N0YXRlLT51c2luZ19ib3VuY2VfYnVmZmVyIHx8IHJlc2VydmVhYmxlKSB7CiAJCW5leHRfY21kICs9IGJ5dGVzOwogCQlpZiAobmV4dF9jbWQgPj0gbWF4KQpAQCAtNDE4LDggKzQzOSw5IEBACiAJaWYgKHJlc2VydmVhYmxlKQogCQlpb3dyaXRlMzIoMCwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fUkVTRVJWRUQpOwogCW1iKCk7Ci0Jdm13X2ZpZm9fcGluZ19ob3N0KGRldl9wcml2LCBTVkdBX1NZTkNfR0VORVJJQyk7CiAJdXBfd3JpdGUoJmZpZm9fc3RhdGUtPnJ3c2VtKTsKKwl2bXdfZmlmb19waW5nX2hvc3QoZGV2X3ByaXYsIFNWR0FfU1lOQ19HRU5FUklDKTsKKwltdXRleF91bmxvY2soJmZpZm9fc3RhdGUtPmZpZm9fbXV0ZXgpOwogfQogCiBpbnQgdm13X2ZpZm9fc2VuZF9mZW5jZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCAqc2VxdWVuY2UpCkBAIC00MzIsOSArNDU0LDcgQEAKIAogCWZtID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgYnl0ZXMpOwogCWlmICh1bmxpa2VseShmbSA9PSBOVUxMKSkgewotCQlkb3duX3dyaXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7Ci0JCSpzZXF1ZW5jZSA9IGRldl9wcml2LT5mZW5jZV9zZXE7Ci0JCXVwX3dyaXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7CisJCSpzZXF1ZW5jZSA9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+ZmVuY2Vfc2VxKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJKHZvaWQpdm13X2ZhbGxiYWNrX3dhaXQoZGV2X3ByaXYsIGZhbHNlLCB0cnVlLCAqc2VxdWVuY2UsCiAJCQkJCWZhbHNlLCAzKkhaKTsKQEAgLTQ0Miw3ICs0NjIsNyBAQAogCX0KIAogCWRvIHsKLQkJKnNlcXVlbmNlID0gZGV2X3ByaXYtPmZlbmNlX3NlcSsrOworCQkqc2VxdWVuY2UgPSBhdG9taWNfYWRkX3JldHVybigxLCAmZGV2X3ByaXYtPmZlbmNlX3NlcSk7CiAJfSB3aGlsZSAoKnNlcXVlbmNlID09IDApOwogCiAJaWYgKCEoZmlmb19zdGF0ZS0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9GSUZPX0NBUF9GRU5DRSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCmluZGV4IDVmYTZhNGUuLjFjN2EzMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYwpAQCAtNDMsMTEgKzQzLDE3IEBACiAJCXBhcmFtLT52YWx1ZSA9IHZtd19vdmVybGF5X251bV9mcmVlX292ZXJsYXlzKGRldl9wcml2KTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fVk1XX1BBUkFNXzNEOgotCQlwYXJhbS0+dmFsdWUgPSBkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfM0QgPyAxIDogMDsKKwkJcGFyYW0tPnZhbHVlID0gdm13X2ZpZm9faGF2ZV8zZChkZXZfcHJpdikgPyAxIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fVk1XX1BBUkFNX0ZJRk9fT0ZGU0VUOgogCQlwYXJhbS0+dmFsdWUgPSBkZXZfcHJpdi0+bW1pb19zdGFydDsKIAkJYnJlYWs7CisJY2FzZSBEUk1fVk1XX1BBUkFNX0hXX0NBUFM6CisJCXBhcmFtLT52YWx1ZSA9IGRldl9wcml2LT5jYXBhYmlsaXRpZXM7CisJCWJyZWFrOworCWNhc2UgRFJNX1ZNV19QQVJBTV9GSUZPX0NBUFM6CisJCXBhcmFtLT52YWx1ZSA9IGRldl9wcml2LT5maWZvLmNhcGFiaWxpdGllczsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJJbGxlZ2FsIHZtd2dmeCBnZXQgcGFyYW0gcmVxdWVzdDogJWRcbiIsCiAJCQkgIHBhcmFtLT5wYXJhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCmluZGV4IGQ0MDA4NmYuLjRkN2NiNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCkBAIC04NSwxOSArODUsMTIgQEAKIAkJcmV0dXJuIHRydWU7CiAKIAkvKioKLQkgKiBCZWxvdyBpcyB0byBzaWduYWwgc3RhbGUgZmVuY2VzIHRoYXQgaGF2ZSB3cmFwcGVkLgotCSAqIEZpcnN0LCBibG9jayBmZW5jZSBzdWJtaXNzaW9uLgotCSAqLwotCi0JZG93bl9yZWFkKCZmaWZvX3N0YXRlLT5yd3NlbSk7Ci0KLQkvKioKIAkgKiBUaGVuIGNoZWNrIGlmIHRoZSBzZXF1ZW5jZSBpcyBoaWdoZXIgdGhhbiB3aGF0IHdlJ3ZlIGFjdHVhbGx5CiAJICogZW1pdHRlZC4gVGhlbiB0aGUgZmVuY2UgaXMgc3RhbGUgYW5kIHNpZ25hbGVkLgogCSAqLwogCi0JcmV0ID0gKChkZXZfcHJpdi0+ZmVuY2Vfc2VxIC0gc2VxdWVuY2UpID4gVk1XX0ZFTkNFX1dSQVApOwotCXVwX3JlYWQoJmZpZm9fc3RhdGUtPnJ3c2VtKTsKKwlyZXQgPSAoKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+ZmVuY2Vfc2VxKSAtIHNlcXVlbmNlKQorCSAgICAgICA+IFZNV19GRU5DRV9XUkFQKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMjcsNyArMTIwLDcgQEAKIAogCWlmIChmaWZvX2lkbGUpCiAJCWRvd25fcmVhZCgmZmlmb19zdGF0ZS0+cndzZW0pOwotCXNpZ25hbF9zZXEgPSBkZXZfcHJpdi0+ZmVuY2Vfc2VxOworCXNpZ25hbF9zZXEgPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmZlbmNlX3NlcSk7CiAJcmV0ID0gMDsKIAogCWZvciAoOzspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggNjg2NjkyZC4uMzFmOWFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTcwNyw2ICs3MDcsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gdHJ5X2RtYWJ1ZjsKIAorCWlmICghc3VyZmFjZS0+c2Nhbm91dCkKKwkJZ290byBlcnJfbm90X3NjYW5vdXQ7CisKIAlyZXQgPSB2bXdfa21zX25ld19mcmFtZWJ1ZmZlcl9zdXJmYWNlKGRldl9wcml2LCBzdXJmYWNlLCAmdmZiLAogCQkJCQkgICAgICBtb2RlX2NtZC0+d2lkdGgsIG1vZGVfY21kLT5oZWlnaHQpOwogCkBAIC03NDAsNiArNzQzLDEzIEBACiAJfQogCiAJcmV0dXJuICZ2ZmItPmJhc2U7CisKK2Vycl9ub3Rfc2Nhbm91dDoKKwlEUk1fRVJST1IoInN1cmZhY2Ugbm90IG1hcmtlZCBhcyBzY2Fub3V0XG4iKTsKKwkvKiB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cCB0YWtlcyBvbmUgcmVmICovCisJdm13X3N1cmZhY2VfdW5yZWZlcmVuY2UoJnN1cmZhY2UpOworCisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgdm13X2ttc19mYl9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC03NTksMTAgKzc2OSwxMCBAQAogCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKIAlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJnZtd19rbXNfZnVuY3M7Ci0JZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDA7Ci0JZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gNDgwOwotCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gMjA0ODsKLQlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSAyMDQ4OworCWRldi0+bW9kZV9jb25maWcubWluX3dpZHRoID0gMTsKKwlkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAxOworCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gZGV2X3ByaXYtPmZiX21heF93aWR0aDsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBkZXZfcHJpdi0+ZmJfbWF4X2hlaWdodDsKIAogCXJldCA9IHZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oZGV2X3ByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYwppbmRleCBlMDFkYjEyLi5mOGZiYmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKQEAgLTU3NCw2ICs1NzQsNyBAQAogCiAJc3JmLT5mbGFncyA9IHJlcS0+ZmxhZ3M7CiAJc3JmLT5mb3JtYXQgPSByZXEtPmZvcm1hdDsKKwlzcmYtPnNjYW5vdXQgPSByZXEtPnNjYW5vdXQ7CiAJbWVtY3B5KHNyZi0+bWlwX2xldmVscywgcmVxLT5taXBfbGV2ZWxzLCBzaXplb2Yoc3JmLT5taXBfbGV2ZWxzKSk7CiAJc3JmLT5udW1fc2l6ZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBEUk1fVk1XX01BWF9TVVJGQUNFX0ZBQ0VTOyArK2kpCkBAIC01OTksOCArNjAwLDcgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dF9lcnIxOwogCi0KLQlpZiAoc3JmLT5mbGFncyAmICgxIDw8IDkpICYmCisJaWYgKHNyZi0+c2Nhbm91dCAmJgogCSAgICBzcmYtPm51bV9zaXplcyA9PSAxICYmCiAJICAgIHNyZi0+c2l6ZXNbMF0ud2lkdGggPT0gNjQgJiYKIAkgICAgc3JmLT5zaXplc1swXS5oZWlnaHQgPT0gNjQgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwppbmRleCAzMjVhNTMzLi44ODI3ODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCkBAIC05NjIsNyArOTYyLDcgQEAKIAkJcmVtYWluaW5nIC09IDc7CiAJCXByX2RldmVsKCJjbGllbnQgMHglcCBjYWxsZWQgJ3RhcmdldCdcbiIsIHByaXYpOwogCQkvKiBpZiB0YXJnZXQgaXMgZGVmYXVsdCAqLwotCQlpZiAoIXN0cm5jbXAoYnVmLCAiZGVmYXVsdCIsIDcpKQorCQlpZiAoIXN0cm5jbXAoY3Vycl9wb3MsICJkZWZhdWx0IiwgNykpCiAJCQlwZGV2ID0gcGNpX2Rldl9nZXQodmdhX2RlZmF1bHRfZGV2aWNlKCkpOwogCQllbHNlIHsKIAkJCWlmICghdmdhX3BjaV9zdHJfdG9fdmFycyhjdXJyX3BvcywgcmVtYWluaW5nLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggMjRkOTBlYS4uNzFkNGMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC01NSw2ICs1NSwxMiBAQAogbWVudSAiU3BlY2lhbCBISUQgZHJpdmVycyIKIAlkZXBlbmRzIG9uIEhJRAogCitjb25maWcgSElEXzNNX1BDVAorCXRyaXN0YXRlICIzTSBQQ1QiCisJZGVwZW5kcyBvbiBVU0JfSElECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIDNNIFBDVCB0b3VjaCBzY3JlZW5zLgorCiBjb25maWcgSElEX0E0VEVDSAogCXRyaXN0YXRlICJBNCB0ZWNoIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTgzLDYgKzE4OSwyMyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgTG9naXRlY2gKIAkgIFJ1bWJsZXBhZCAyIGRldmljZXMuCiAKK2NvbmZpZyBMT0dJRzk0MF9GRgorCWJvb2wgIkxvZ2l0ZWNoIEZsaWdodCBTeXN0ZW0gRzk0MCBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IgorCWRlcGVuZHMgb24gSElEX0xPR0lURUNICisJc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBMb2dpdGVjaAorCSAgRmxpZ2h0IFN5c3RlbSBHOTQwIGRldmljZXMuCisKK2NvbmZpZyBISURfTUFHSUNNT1VTRQorCXRyaXN0YXRlICJBcHBsZSBNYWdpY01vdXNlIG11bHRpLXRvdWNoIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCVF9ISURQCisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIHRoZSBBcHBsZSBNYWdpYyBNb3VzZSBtdWx0aS10b3VjaC4KKworCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIG11bHRpLXRvdWNoIGZlYXR1cmVzIG9mIHRoZQorCUFwcGxlIFdpcmVsZXNzICJNYWdpYyIgTW91c2UuCisKIGNvbmZpZyBISURfTUlDUk9TT0ZUCiAJdHJpc3RhdGUgIk1pY3Jvc29mdCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTE5MCw2ICsyMTMsMTIgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgTWljcm9zb2Z0IGRldmljZXMgdGhhdCBhcmUgbm90IGZ1bGx5IGNvbXBsaWFudCB3aXRoIEhJRCBzdGFuZGFyZC4KIAorY29uZmlnIEhJRF9NT1NBUlQKKwl0cmlzdGF0ZSAiTW9zQXJ0IgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBNb3NBcnQgZHVhbC10b3VjaCBwYW5lbHMuCisKIGNvbmZpZyBISURfTU9OVEVSRVkKIAl0cmlzdGF0ZSAiTW9udGVyZXkiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0xOTgsMTEgKzIyNywxNyBAQAogCVN1cHBvcnQgZm9yIE1vbnRlcmV5IEdlbml1cyBLQjI5RS4KIAogY29uZmlnIEhJRF9OVFJJRwotCXRyaXN0YXRlICJOVHJpZyIgaWYgRU1CRURERUQKKwl0cmlzdGF0ZSAiTlRyaWciCisJZGVwZW5kcyBvbiBVU0JfSElECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIE4tVHJpZyB0b3VjaCBzY3JlZW4uCisKK2NvbmZpZyBISURfT1JURUsKKwl0cmlzdGF0ZSAiT3J0ZWsiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECiAJZGVmYXVsdCAhRU1CRURERUQKIAktLS1oZWxwLS0tCi0JU3VwcG9ydCBmb3IgTi1UcmlnIHRvdWNoIHNjcmVlbi4KKwlTdXBwb3J0IGZvciBPcnRlayBXS0ItMjAwMCB3aXJlbGVzcyBrZXlib2FyZCArIG1vdXNlIHRyYWNrcGFkLgogCiBjb25maWcgSElEX1BBTlRIRVJMT1JECiAJdHJpc3RhdGUgIlBhbnRoZXJsb3JkIHN1cHBvcnQiIGlmIEVNQkVEREVECkBAIC0yMjcsNiArMjYyLDEyIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFBldGFseW54IE1heHRlciByZW1vdGUgY29udHJvbC4KIAorY29uZmlnIEhJRF9RVUFOVEEKKwl0cmlzdGF0ZSAiUXVhbnRhIE9wdGljYWwgVG91Y2giCisJZGVwZW5kcyBvbiBVU0JfSElECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFF1YW50YSBPcHRpY2FsIFRvdWNoIGR1YWwtdG91Y2ggcGFuZWxzLgorCiBjb25maWcgSElEX1NBTVNVTkcKIAl0cmlzdGF0ZSAiU2Ftc3VuZyIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTI0MSw2ICsyODIsMTIgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgU29ueSBQUzMgY29udHJvbGxlci4KIAorY29uZmlnIEhJRF9TVEFOVFVNCisJdHJpc3RhdGUgIlN0YW50dW0iCisJZGVwZW5kcyBvbiBVU0JfSElECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFN0YW50dW0gbXVsdGl0b3VjaCBwYW5lbC4KKwogY29uZmlnIEhJRF9TVU5QTFVTCiAJdHJpc3RhdGUgIlN1bnBsdXMiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0zMDUsOSArMzUyLDggQEAKIAkgIFJ1bWJsZSBGb3JjZSBvciBGb3JjZSBGZWVkYmFjayBXaGVlbC4KIAogY29uZmlnIEhJRF9XQUNPTQotCXRyaXN0YXRlICJXYWNvbSBCbHVldG9vdGggZGV2aWNlcyBzdXBwb3J0IiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJXYWNvbSBCbHVldG9vdGggZGV2aWNlcyBzdXBwb3J0IgogCWRlcGVuZHMgb24gQlRfSElEUAotCWRlZmF1bHQgIUVNQkVEREVECiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFdhY29tIEdyYXBoaXJlIEJsdWV0b290aCB0YWJsZXQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKaW5kZXggMGRlMmRmZi4uMGIyNjE4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKQEAgLTE4LDcgKzE4LDExIEBACiBpZmRlZiBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYKIAloaWQtbG9naXRlY2gtb2JqcwkrPSBoaWQtbGcyZmYubwogZW5kaWYKK2lmZGVmIENPTkZJR19MT0dJRzk0MF9GRgorCWhpZC1sb2dpdGVjaC1vYmpzCSs9IGhpZC1sZzNmZi5vCitlbmRpZgogCitvYmotJChDT05GSUdfSElEXzNNX1BDVCkJKz0gaGlkLTNtLXBjdC5vCiBvYmotJChDT05GSUdfSElEX0E0VEVDSCkJKz0gaGlkLWE0dGVjaC5vCiBvYmotJChDT05GSUdfSElEX0FQUExFKQkJKz0gaGlkLWFwcGxlLm8KIG9iai0kKENPTkZJR19ISURfQkVMS0lOKQkrPSBoaWQtYmVsa2luLm8KQEAgLTMxLDE0ICszNSwxOSBAQAogb2JqLSQoQ09ORklHX0hJRF9LRU5TSU5HVE9OKQkrPSBoaWQta2Vuc2luZ3Rvbi5vCiBvYmotJChDT05GSUdfSElEX0tZRSkJCSs9IGhpZC1reWUubwogb2JqLSQoQ09ORklHX0hJRF9MT0dJVEVDSCkJKz0gaGlkLWxvZ2l0ZWNoLm8KK29iai0kKENPTkZJR19ISURfTUFHSUNNT1VTRSkgICAgKz0gaGlkLW1hZ2ljbW91c2Uubwogb2JqLSQoQ09ORklHX0hJRF9NSUNST1NPRlQpCSs9IGhpZC1taWNyb3NvZnQubwogb2JqLSQoQ09ORklHX0hJRF9NT05URVJFWSkJKz0gaGlkLW1vbnRlcmV5Lm8KK29iai0kKENPTkZJR19ISURfTU9TQVJUKQkrPSBoaWQtbW9zYXJ0Lm8KIG9iai0kKENPTkZJR19ISURfTlRSSUcpCQkrPSBoaWQtbnRyaWcubworb2JqLSQoQ09ORklHX0hJRF9PUlRFSykJCSs9IGhpZC1vcnRlay5vCitvYmotJChDT05GSUdfSElEX1FVQU5UQSkJKz0gaGlkLXF1YW50YS5vCiBvYmotJChDT05GSUdfSElEX1BBTlRIRVJMT1JEKQkrPSBoaWQtcGwubwogb2JqLSQoQ09ORklHX0hJRF9QRVRBTFlOWCkJKz0gaGlkLXBldGFseW54Lm8KIG9iai0kKENPTkZJR19ISURfU0FNU1VORykJKz0gaGlkLXNhbXN1bmcubwogb2JqLSQoQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMpCSs9IGhpZC1zam95Lm8KIG9iai0kKENPTkZJR19ISURfU09OWSkJCSs9IGhpZC1zb255Lm8KK29iai0kKENPTkZJR19ISURfU1RBTlRVTSkJKz0gaGlkLXN0YW50dW0ubwogb2JqLSQoQ09ORklHX0hJRF9TVU5QTFVTKQkrPSBoaWQtc3VucGx1cy5vCiBvYmotJChDT05GSUdfSElEX0dSRUVOQVNJQSkJKz0gaGlkLWdhZmYubwogb2JqLSQoQ09ORklHX0hJRF9USFJVU1RNQVNURVIpCSs9IGhpZC10bWZmLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC0zbS1wY3QuYyBiL2RyaXZlcnMvaGlkL2hpZC0zbS1wY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzcwYWVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLTNtLXBjdC5jCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIDNNIFBDVCBtdWx0aXRvdWNoIHBhbmVscworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4KKyAqCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCitNT0RVTEVfQVVUSE9SKCJTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCIzTSBQQ1QgbXVsdGl0b3VjaCBwYW5lbHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RydWN0IG1tbV9maW5nZXIgeworCV9fczMyIHgsIHk7CisJX191OCByYW5rOworCWJvb2wgdG91Y2gsIHZhbGlkOworfTsKKworc3RydWN0IG1tbV9kYXRhIHsKKwlzdHJ1Y3QgbW1tX2ZpbmdlciBmWzEwXTsKKwlfX3U4IGN1cmlkLCBudW07CisJYm9vbCB0b3VjaCwgdmFsaWQ7Cit9OworCitzdGF0aWMgaW50IG1tbV9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgeworCisJY2FzZSBISURfVVBfQlVUVE9OOgorCQlyZXR1cm4gLTE7CisKKwljYXNlIEhJRF9VUF9HRU5ERVNLOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfR0RfWDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1gsCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfR0RfWToKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCS8qIHdlIGRvIG5vdCB3YW50IHRvIG1hcCB0aGVzZTogbm8gaW5wdXQtb3JpZW50ZWQgbWVhbmluZyAqLworCQljYXNlIDB4MTQ6CisJCWNhc2UgMHgyMzoKKwkJY2FzZSBISURfREdfSU5QVVRNT0RFOgorCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgorCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQkJcmV0dXJuIC0xOworCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJLyogbGV0IGhpZC1pbnB1dCBkZWNpZGUgZm9yIHRoZSBvdGhlcnMgKi8KKwkJcmV0dXJuIDA7CisKKwljYXNlIDB4ZmYwMDAwMDA6CisJCS8qIHdlIGRvIG5vdCB3YW50IHRvIG1hcCB0aGVzZTogbm8gaW5wdXQtb3JpZW50ZWQgbWVhbmluZyAqLworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW1tX2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCisJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB3aG9sZSBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZCwKKyAqIHNvIHRoYXQgaXQgY2FuIGRlY2lkZSB3aGF0IHRvIHNlbmQgdG8gdGhlIGlucHV0IGxheWVyLgorICovCitzdGF0aWMgdm9pZCBtbW1fZmlsdGVyX2V2ZW50KHN0cnVjdCBtbW1fZGF0YSAqbWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCBtbW1fZmluZ2VyICpvbGRlc3QgPSAwOworCWJvb2wgcHJlc3NlZCA9IGZhbHNlLCByZWxlYXNlZCA9IGZhbHNlOworCWludCBpOworCisJLyoKKwkgKiB3ZSBuZWVkIHRvIGl0ZXJhdGUgb24gYWxsIGZpbmdlcnMgdG8gZGVjaWRlIGlmIHdlIGhhdmUgYSBwcmVzcworCSAqIG9yIGEgcmVsZWFzZSBldmVudCBpbiBvdXIgdG91Y2hzY3JlZW4gZW11bGF0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgKytpKSB7CisJCXN0cnVjdCBtbW1fZmluZ2VyICpmID0gJm1kLT5mW2ldOworCQlpZiAoIWYtPnZhbGlkKSB7CisJCQkvKiB0aGlzIGZpbmdlciBpcyBqdXN0IHBsYWNlaG9sZGVyIGRhdGEsIGlnbm9yZSAqLworCQl9IGVsc2UgaWYgKGYtPnRvdWNoKSB7CisJCQkvKiB0aGlzIGZpbmdlciBpcyBvbiB0aGUgc2NyZWVuICovCisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIGkpOworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIGYtPngpOworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1ksIGYtPnkpOworCQkJaW5wdXRfbXRfc3luYyhpbnB1dCk7CisJCQkvKgorCQkJICogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBtYWludGFpbiB0aGUgYWdlIHJhbmsKKwkJCSAqIG9mIHRoaXMgZmluZ2VyLCBkZWNpZGUgaWYgd2UgaGF2ZSBhIHByZXNzCisJCQkgKi8KKwkJCWlmIChmLT5yYW5rID09IDApIHsKKwkJCQlmLT5yYW5rID0gKysobWQtPm51bSk7CisJCQkJaWYgKGYtPnJhbmsgPT0gMSkKKwkJCQkJcHJlc3NlZCA9IHRydWU7CisJCQl9CisJCQlpZiAoZi0+cmFuayA9PSAxKQorCQkJCW9sZGVzdCA9IGY7CisJCX0gZWxzZSB7CisJCQkvKiB0aGlzIGZpbmdlciB0b29rIG9mZiB0aGUgc2NyZWVuICovCisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IG1haW50YWluIGFnZSByYW5rIG9mIG90aGVycyAqLworCQkJaW50IGo7CisKKwkJCWZvciAoaiA9IDA7IGogPCAxMDsgKytqKSB7CisJCQkJc3RydWN0IG1tbV9maW5nZXIgKmcgPSAmbWQtPmZbal07CisJCQkJaWYgKGctPnJhbmsgPiBmLT5yYW5rKSB7CisJCQkJCWctPnJhbmstLTsKKwkJCQkJaWYgKGctPnJhbmsgPT0gMSkKKwkJCQkJCW9sZGVzdCA9IGc7CisJCQkJfQorCQkJfQorCQkJZi0+cmFuayA9IDA7CisJCQktLShtZC0+bnVtKTsKKwkJCWlmIChtZC0+bnVtID09IDApCisJCQkJcmVsZWFzZWQgPSB0cnVlOworCQl9CisJCWYtPnZhbGlkID0gMDsKKwl9CisKKwkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwlpZiAob2xkZXN0KSB7CisJCWlmIChwcmVzc2VkKQorCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIG9sZGVzdC0+eCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBvbGRlc3QtPnkpOworCX0gZWxzZSBpZiAocmVsZWFzZWQpIHsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAwKTsKKwl9Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB1cG9uIGFsbCByZXBvcnRzCisgKiBzbyB0aGF0IHdlIGNhbiBhY2N1bXVsYXRlIGNvbnRhY3QgcG9pbnQgaW5mb3JtYXRpb24sCisgKiBhbmQgY2FsbCBpbnB1dF9tdF9zeW5jIGFmdGVyIGVhY2ggcG9pbnQuCisgKi8KK3N0YXRpYyBpbnQgbW1tX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbW1tX2RhdGEgKm1kID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7CisJLyoKKwkgKiBzdHJhbmdlbHksIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBiZWZvcmUKKwkgKiBmaWVsZC0+aGlkaW5wdXQgaXMgaW5pdGlhbGl6ZWQhCisJICovCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJCW1kLT50b3VjaCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCQltZC0+dmFsaWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQlpZiAobWQtPnZhbGlkKSB7CisJCQkJbWQtPmN1cmlkID0gdmFsdWU7CisJCQkJbWQtPmZbdmFsdWVdLnRvdWNoID0gbWQtPnRvdWNoOworCQkJCW1kLT5mW3ZhbHVlXS52YWxpZCA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWDoKKwkJCWlmIChtZC0+dmFsaWQpCisJCQkJbWQtPmZbbWQtPmN1cmlkXS54ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWToKKwkJCWlmIChtZC0+dmFsaWQpCisJCQkJbWQtPmZbbWQtPmN1cmlkXS55ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQkJbW1tX2ZpbHRlcl9ldmVudChtZCwgaW5wdXQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1tbV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IG1tbV9kYXRhICptZDsKKworCW1kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1tbV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgM00gZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwloaWRfc2V0X2RydmRhdGEoaGRldiwgbWQpOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmICghcmV0KQorCQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisKKwlpZiAocmV0KQorCQlrZnJlZShtZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbW1tX3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG1tbV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEXzNNLCBVU0JfREVWSUNFX0lEXzNNMTk2OCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgbW1tX2RldmljZXMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBtbW1fZ3JhYmJlZF91c2FnZXNbXSA9IHsKKwl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbW1tX2RyaXZlciA9IHsKKwkubmFtZSA9ICIzbS1wY3QiLAorCS5pZF90YWJsZSA9IG1tbV9kZXZpY2VzLAorCS5wcm9iZSA9IG1tbV9wcm9iZSwKKwkucmVtb3ZlID0gbW1tX3JlbW92ZSwKKwkuaW5wdXRfbWFwcGluZyA9IG1tbV9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBtbW1faW5wdXRfbWFwcGVkLAorCS51c2FnZV90YWJsZSA9IG1tbV9ncmFiYmVkX3VzYWdlcywKKwkuZXZlbnQgPSBtbW1fZXZlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtbW1faW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtbW1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1tbV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZtbW1fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobW1tX2luaXQpOworbW9kdWxlX2V4aXQobW1tX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCmluZGV4IDViNGQ2NmQuLjc4Mjg2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCkBAIC00MCw2ICs0MCwxMSBAQAogTU9EVUxFX1BBUk1fREVTQyhmbm1vZGUsICJNb2RlIG9mIGZuIGtleSBvbiBBcHBsZSBrZXlib2FyZHMgKDAgPSBkaXNhYmxlZCwgIgogCQkiWzFdID0gZmtleXNsYXN0LCAyID0gZmtleXNmaXJzdCkiKTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBpc29fbGF5b3V0ID0gMTsKK21vZHVsZV9wYXJhbShpc29fbGF5b3V0LCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXNvX2xheW91dCwgIkVuYWJsZS9EaXNhYmxlIGhhcmRjb2RlZCBJU08tbGF5b3V0IG9mIHRoZSBrZXlib2FyZC4gIgorCQkiKDAgPSBkaXNhYmxlZCwgWzFdID0gZW5hYmxlZCkiKTsKKwogc3RydWN0IGFwcGxlX3NjIHsKIAl1bnNpZ25lZCBsb25nIHF1aXJrczsKIAl1bnNpZ25lZCBpbnQgZm5fb247CkBAIC0xOTksMTEgKzIwNCwxMyBAQAogCQl9CiAJfQogCi0JaWYgKGFzYy0+cXVpcmtzICYgQVBQTEVfSVNPX0tFWUJPQVJEKSB7Ci0JCXRyYW5zID0gYXBwbGVfZmluZF90cmFuc2xhdGlvbihhcHBsZV9pc29fa2V5Ym9hcmQsIHVzYWdlLT5jb2RlKTsKLQkJaWYgKHRyYW5zKSB7Ci0JCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHRyYW5zLT50bywgdmFsdWUpOwotCQkJcmV0dXJuIDE7CisgICAgICAgIGlmIChpc29fbGF5b3V0KSB7CisJCWlmIChhc2MtPnF1aXJrcyAmIEFQUExFX0lTT19LRVlCT0FSRCkgeworCQkJdHJhbnMgPSBhcHBsZV9maW5kX3RyYW5zbGF0aW9uKGFwcGxlX2lzb19rZXlib2FyZCwgdXNhZ2UtPmNvZGUpOworCQkJaWYgKHRyYW5zKSB7CisJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB0cmFucy0+dG8sIHZhbHVlKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggZWFiZTVmOC4uMzY4ZmJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC00LDcgKzQsNyBAQAogICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMCBKaXJpIEtvc2luYQogICovCiAKIC8qCkBAIC01MSw3ICs1MSw3IEBACiAgKiBSZWdpc3RlciBhIG5ldyByZXBvcnQgZm9yIGEgZGV2aWNlLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaGlkX3JlcG9ydCAqaGlkX3JlZ2lzdGVyX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBpZCkKK3N0cnVjdCBoaWRfcmVwb3J0ICpoaWRfcmVnaXN0ZXJfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGlkKQogewogCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gZGV2aWNlLT5yZXBvcnRfZW51bSArIHR5cGU7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKQEAgLTc1LDYgKzc1LDcgQEAKIAogCXJldHVybiByZXBvcnQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChoaWRfcmVnaXN0ZXJfcmVwb3J0KTsKIAogLyoKICAqIFJlZ2lzdGVyIGEgbmV3IGZpZWxkIGZvciB0aGlzIHJlcG9ydC4KQEAgLTM4Nyw3ICszODgsOCBAQAogCV9fdTMyIGRhdGE7CiAJdW5zaWduZWQgbjsKIAotCWlmIChpdGVtLT5zaXplID09IDApIHsKKwkvKiBMb2NhbCBkZWxpbWl0ZXIgY291bGQgaGF2ZSB2YWx1ZSAwLCB3aGljaCBhbGxvd3Mgc2l6ZSB0byBiZSAwICovCisJaWYgKGl0ZW0tPnNpemUgPT0gMCAmJiBpdGVtLT50YWcgIT0gSElEX0xPQ0FMX0lURU1fVEFHX0RFTElNSVRFUikgewogCQlkYmdfaGlkKCJpdGVtIGRhdGEgZXhwZWN0ZWQgZm9yIGxvY2FsIGl0ZW1cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTI0OCwxMSArMTI1MCwxMyBAQAogCiAvKiBhIGxpc3Qgb2YgZGV2aWNlcyBmb3Igd2hpY2ggdGhlcmUgaXMgYSBzcGVjaWFsaXplZCBkcml2ZXIgb24gSElEIGJ1cyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGhpZF9ibGFja2xpc3RbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfM00sIFVTQl9ERVZJQ0VfSURfM00xOTY4KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1dDUDMyUFUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfWDVfMDA1RCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQVRWX0lSQ09OVFJPTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UpIH0sCisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01BR0lDTU9VU0UpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX0FOU0kpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX0lTTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0FOU0kpIH0sCkBAIC0xMzI0LDYgKzEzMjgsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0YzRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GRkcgKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRkxJR0hUX1NZU1RFTV9HOTQwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRzI1X1dIRUVMKSB9LApAQCAtMTMzNywxMCArMTM0MiwxNSBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfV0lSRUxFU1NfT1BUSUNBTF9ERVNLVE9QXzNfMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9OVEVSRVksIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU4pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09SVEVLLCBVU0JfREVWSUNFX0lEX09SVEVLX1dLQjIwMDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BFVEFMWU5YLCBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwgVVNCX0RFVklDRV9JRF9RVUFOVEFfT1BUSUNBTF9UT1VDSCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBTlRBLCBVU0JfREVWSUNFX0lEX1BJWEFSVF9JTUFHSU5HX0lOQ19PUFRJQ0FMX1RPVUNIX1NDUkVFTikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU0FNU1VORywgVVNCX0RFVklDRV9JRF9TQU1TVU5HX0lSX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAorCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9WQUlPX1ZHWF9NT1VTRSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1RBTlRVTSwgVVNCX0RFVklDRV9JRF9NVFApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NVTlBMVVMsIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzA0KSB9LApAQCAtMTU0Myw4ICsxNTUzLDkgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yNCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlSQ0FCTEUsIFVTQl9ERVZJQ0VfSURfQUlSQ0FCTEUxKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BTENPUiwgVVNCX0RFVklDRV9JRF9BTENPUl9VU0JSUzIzMikgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX0xDTSl9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNMil9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfVDkxTVQpfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVU1RFSywgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTSl9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTVEVLLCBVU0JfREVWSUNFX0lEX0FTVVNURUtfTENNMil9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVkVSTUVESUEsIFVTQl9ERVZJQ0VfSURfQVZFUl9GTV9NUjgwMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVSS1NISVJFLCBVU0JfREVWSUNFX0lEX0JFUktTSElSRV9QQ1dEKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSURDLCAweDAxMDMpIH0sCkBAIC0xNjYxLDggKzE2NzIsNiBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwNCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEhJTElQUywgVVNCX0RFVklDRV9JRF9QSElMSVBTX0lFRUU4MDIxNTRfRE9OR0xFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QT1dFUkNPTSwgVVNCX0RFVklDRV9JRF9QT1dFUkNPTV9VUFMpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RFTlgsIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkxKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9URU5YLCBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xBQlBSTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0dPVEVNUCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX1NLSVApIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYyBiL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCmluZGV4IDZhYmQwMzYuLmNkNGVjZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCkBAIC04NjQsMTMgKzg2NCwxMyBAQAogCVtFVl9TTkRdID0gc291bmRzLAkJCVtFVl9SRVBdID0gcmVwZWF0cywKIH07CiAKLXZvaWQgaGlkX3Jlc29sdl9ldmVudChfX3U4IHR5cGUsIF9fdTE2IGNvZGUsIHN0cnVjdCBzZXFfZmlsZSAqZikgewotCitzdGF0aWMgdm9pZCBoaWRfcmVzb2x2X2V2ZW50KF9fdTggdHlwZSwgX191MTYgY29kZSwgc3RydWN0IHNlcV9maWxlICpmKQorewogCXNlcV9wcmludGYoZiwgIiVzLiVzIiwgZXZlbnRzW3R5cGVdID8gZXZlbnRzW3R5cGVdIDogIj8iLAogCQluYW1lc1t0eXBlXSA/IChuYW1lc1t0eXBlXVtjb2RlXSA/IG5hbWVzW3R5cGVdW2NvZGVdIDogIj8iKSA6ICI/Iik7CiB9CiAKLXZvaWQgaGlkX2R1bXBfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpCitzdGF0aWMgdm9pZCBoaWRfZHVtcF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBzZXFfZmlsZSAqZikKIHsKIAlpbnQgaSwgaiwgazsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IDAxMDM2OGUuLjcyYzA1ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTE4LDYgKzE4LDkgQEAKICNpZm5kZWYgSElEX0lEU19IX0ZJTEUKICNkZWZpbmUgSElEX0lEU19IX0ZJTEUKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEXzNNCQkweDA1OTYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF8zTTE5NjgJCTB4MDUwMAorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQTRURUNICQkweDA5ZGEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVQkweDAwMDYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BNFRFQ0hfWDVfMDA1RAkweDAwMGEKQEAgLTU2LDYgKzU5LDcgQEAKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0FQUExFCQkweDA1YWMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9NSUdIVFlNT1VTRQkweDAzMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9NQUdJQ01PVVNFCTB4MDMwZAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX0FOU0kJMHgwMjBlCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fSVNPCTB4MDIwZgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJCTB4MDIxNApAQCAtOTYsOSArMTAwLDEyIEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQVRWX0lSQ09OVFJPTAkweDgyNDEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9JUkNPTlRST0w0CTB4ODI0MgogCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQVNVUwkJMHgwYjA1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00JCTB4MTcyNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfTENNMgkJMHgxNzViCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVNVUwkJMHgwNDg2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU19UOTFNVAkweDAxODUKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVNURUsJCTB4MGIwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNURUtfTENNCTB4MTcyNgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNURUtfTENNMgkweDE3NWIKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0FURU4JCTB4MDU1NwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTQkweDIwMDQKQEAgLTE2OSw2ICsxNzYsOSBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VTU0VOVElBTF9SRUFMSVRZCTB4MGQ3ZgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0VTU0VOVElBTF9SRUFMSVRZX1A1IDB4MDEwMAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfRVRVUkJPVE9VQ0gJMHgyMmI5CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRVRVUkJPVE9VQ0gJMHgwMDA2CisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FVFQJCTB4MDY2NAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1RDNVVICQkweDAzMDkKIApAQCAtMzAzLDYgKzMxMyw3IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMl8yCTB4YzIxOQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRjNECTB4YzI4MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZPUkNFM0RfUFJPCTB4YzI4NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZMSUdIVF9TWVNURU1fRzk0MAkweGMyODcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSEVFTAkweGMyOTQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRwkweGMyOTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMCTB4YzI5NQpAQCAtMzY1LDYgKzM3Niw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfT05UUkFLCQkweDBhMDcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwCTB4MDA2NAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfT1JURUsJCTB4MDVhNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX09SVEVLX1dLQjIwMDAJMHgyMDAwCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QQU5KSVQJCTB4MTM0YwogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEFOVEhFUkxPUkQJMHgwODEwCkBAIC0zODIsOSArMzk2LDE2IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfUE9XRVJDT00JCTB4MGQ5ZgogI2RlZmluZSBVU0JfREVWSUNFX0lEX1BPV0VSQ09NX1VQUwkweDAwMDIKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1BST0RJR0UJCTB4MDVhZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BST0RJR0VfQ09SRExFU1MJMHgzMDYyCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TQUlURUsJCTB4MDZhMwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBSVRFS19SVU1CTEVQQUQJMHhmZjE3CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9RVUFOVEEJCTB4MDQwOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQU5UQV9PUFRJQ0FMX1RPVUNICTB4MzAwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJWEFSVF9JTUFHSU5HX0lOQ19PUFRJQ0FMX1RPVUNIX1NDUkVFTgkweDMwMDEKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NBTVNVTkcJCTB4MDQxOQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFCTB4MDAwMQogCkBAIC0zOTYsMTggKzQxNywyMCBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9GSVJTVAkweDAwMzQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTEFTVAkweDAwNDYKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1NUQU5UVU0JCTB4MWY4NworI2RlZmluZSBVU0JfREVWSUNFX0lEX01UUAkJMHgwMDAyCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVU4JCTB4MDQzMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1JBUklUQU5fS1ZNX0RPTkdMRQkweGNkYWIKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTlBMVVMJCTB4MDRmYwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1AJMHgwNWQ4CiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9URU5YCQkweDExMzAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTEJMHgwMDAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkyCTB4MDAwMgotCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSCTB4MDQ0ZgogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfVE9VQ0hQQUNLCQkweDFiZmQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UT1VDSFBBQ0tfUlRTCTB4MTY4OAorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVE9QTUFYCQkweDA2NjMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9UT1BNQVhfQ09CUkFQQUQJMHgwMTAzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKaW5kZXggNTg2MmIwZi4uNzlkOWVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMCBKaXJpIEtvc2luYQogICoKICAqICBISUQgdG8gTGludXggSW5wdXQgbWFwcGluZwogICovCkBAIC0xOTMsMTIgKzE5MywxNyBAQAogCQlicmVhazsKIAogCWNhc2UgSElEX1VQX0JVVFRPTjoKLQkJY29kZSA9ICgodXNhZ2UtPmhpZCAtIDEpICYgMHhmKTsKKwkJY29kZSA9ICgodXNhZ2UtPmhpZCAtIDEpICYgSElEX1VTQUdFKTsKIAogCQlzd2l0Y2ggKGZpZWxkLT5hcHBsaWNhdGlvbikgewogCQljYXNlIEhJRF9HRF9NT1VTRToKIAkJY2FzZSBISURfR0RfUE9JTlRFUjogIGNvZGUgKz0gMHgxMTA7IGJyZWFrOwotCQljYXNlIEhJRF9HRF9KT1lTVElDSzogY29kZSArPSAweDEyMDsgYnJlYWs7CisJCWNhc2UgSElEX0dEX0pPWVNUSUNLOgorCQkJCSAgICAgIGlmIChjb2RlIDw9IDB4ZikKKwkJCQkJICAgICAgY29kZSArPSBCVE5fSk9ZU1RJQ0s7CisJCQkJICAgICAgZWxzZQorCQkJCQkgICAgICBjb2RlICs9IEJUTl9UUklHR0VSX0hBUFBZOworCQkJCSAgICAgIGJyZWFrOwogCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSAweDEzMDsgYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzd2l0Y2ggKGZpZWxkLT5waHlzaWNhbCkgewpAQCAtNDAwLDYgKzQwNSw3IEBACiAJCWNhc2UgMHgxOTI6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTEMpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOTQ6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTEUpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOTY6IG1hcF9rZXlfY2xlYXIoS0VZX1dXVyk7CQlicmVhazsKKwkJY2FzZSAweDE5OTogbWFwX2tleV9jbGVhcihLRVlfQ0hBVCk7CQlicmVhazsKIAkJY2FzZSAweDE5YzogbWFwX2tleV9jbGVhcihLRVlfTE9HT0ZGKTsJCWJyZWFrOwogCQljYXNlIDB4MTllOiBtYXBfa2V5X2NsZWFyKEtFWV9DT0ZGRUUpOwkJYnJlYWs7CiAJCWNhc2UgMHgxYTY6IG1hcF9rZXlfY2xlYXIoS0VZX0hFTFApOwkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGcuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5jCmluZGV4IDlmY2QzZDAuLjM2NzdjOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5jCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5lIExHX0ZGCQkJMHgyMDAKICNkZWZpbmUgTEdfRkYyCQkJMHg0MDAKICNkZWZpbmUgTEdfUkRFU0NfUkVMX0FCUwkweDgwMAorI2RlZmluZSBMR19GRjMJCQkweDEwMDAKIAogLyoKICAqIENlcnRhaW4gTG9naXRlY2gga2V5Ym9hcmRzIHNlbmQgaW4gcmVwb3J0ICMzIGtleXMgd2hpY2ggYXJlIGZhcgpAQCAtMjY2LDcgKzI2Nyw3IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCi0JaWYgKHF1aXJrcyAmIChMR19GRiB8IExHX0ZGMikpCisJaWYgKHF1aXJrcyAmIChMR19GRiB8IExHX0ZGMiB8IExHX0ZGMykpCiAJCWNvbm5lY3RfbWFzayAmPSB+SElEX0NPTk5FQ1RfRkY7CiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgY29ubmVjdF9tYXNrKTsKQEAgLTI3OSw2ICsyODAsOCBAQAogCQlsZ2ZmX2luaXQoaGRldik7CiAJaWYgKHF1aXJrcyAmIExHX0ZGMikKIAkJbGcyZmZfaW5pdChoZGV2KTsKKwlpZiAocXVpcmtzICYgTEdfRkYzKQorCQlsZzNmZl9pbml0KGhkZXYpOwogCiAJcmV0dXJuIDA7CiBlcnJfZnJlZToKQEAgLTMzMSw2ICszMzQsOCBAQAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyKSwKIAkJLmRyaXZlcl9kYXRhID0gTEdfRkYyIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZMSUdIVF9TWVNURU1fRzk0MCksCisJCS5kcml2ZXJfZGF0YSA9IExHX0ZGMyB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TUEFDRU5BVklHQVRPUiksCiAJCS5kcml2ZXJfZGF0YSA9IExHX1JERVNDX1JFTF9BQlMgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfU1BBQ0VUUkFWRUxMRVIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnLmggYi9kcml2ZXJzL2hpZC9oaWQtbGcuaAppbmRleCBiZjMxNTkyLi5jZTJhYzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuaApAQCAtMTMsNCArMTMsMTAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGxnMmZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpIHsgcmV0dXJuIC0xOyB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19MT0dJRzk0MF9GRgoraW50IGxnM2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGxnM2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGczZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZzNmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMDI4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbGczZmYuYwpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBMb2dpdGVjaCBGbGlnaHQgU3lzdGVtIEc5NDAKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IEdhcnkgU3RlaW4gPExvcmRDbmlkYXJpYW5AZ21haWwuY29tPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisjaW5jbHVkZSAiaGlkLWxnLmgiCisKKy8qCisgKiBHOTQwIFRoZW9yeSBvZiBPcGVyYXRpb24gKGZyb20gZXhwZXJpbWVudGF0aW9uKQorICoKKyAqIFRoZXJlIGFyZSA2MyBmaWVsZHMgKG9ubHkgMyBvZiB0aGVtIGN1cnJlbnRseSB1c2VkKQorICogMCAtIHNlZW1zIHRvIGJlIGNvbW1hbmQgZmllbGQKKyAqIDEgLSAzMCBkZWFsIHdpdGggdGhlIHggYXhpcworICogMzEgLTYwIGRlYWwgd2l0aCB0aGUgeSBheGlzCisgKgorICogRmllbGQgMSBpcyB4IGF4aXMgY29uc3RhbnQgZm9yY2UKKyAqIEZpZWxkIDMxIGlzIHkgYXhpcyBjb25zdGFudCBmb3JjZQorICoKKyAqIG90aGVyIGludGVyZXN0aW5nIGZpZWxkcyAxLDIsMyw0IG9uIHggYXhpcworICogKHNhbWUgZm9yIDMxLDMyLDMzLDM0IG9uIHkgYXhpcykKKyAqCisgKiAwIDAgMTI3IDEyNyBtYWtlcyB0aGUgam95c3RpY2sgYXV0b2NlbnRlciBoYXJkCisgKgorICogMTI3IDAgMTI3IDEyNyBtYWtlcyB0aGUgam95c3RpY2sgbG9vc2Ugb24gdGhlIHJpZ2h0LAorICogYnV0IHN0b3BzIGFsbCBtb3ZlbW50IGxlZnQKKyAqCisgKiAtMTI3IDAgLTEyNyAtMTI3IG1ha2VzIHRoZSBqb3lzdGljayBsb29zZSBvbiB0aGUgbGVmdCwKKyAqIGJ1dCBzdG9wcyBhbGwgbW92ZW1lbnQgcmlnaHQKKyAqCisgKiAwIDAgLTEyNyAtMTI3IG1ha2VzIHRoZSBqb3lzdGljayByYXR0bGUgdmVyeSBoYXJkCisgKgorICogSSdtIHN1cmUgdGhlc2UgYXJlIGVmZmVjdHMgdGhhdCBJIGRvbid0IGtub3cgZW5vdWdoIGFib3V0IHRoZW0KKyAqLworCitzdHJ1Y3QgbGczZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworfTsKKworc3RhdGljIGludCBoaWRfbGczZmZfcGxheShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisJaW50IHgsIHk7CisKKy8qCisgKiBNYXh1c2FnZSBzaG91bGQgYWx3YXlzIGJlIDYzIChtYXhpbXVtIGZpZWxkcykKKyAqIGxpa2VseSBhIGJldHRlciB3YXkgdG8gZW5zdXJlIHRoaXMgZGF0YSBpcyBjbGVhbgorICovCisJbWVtc2V0KHJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlLCAwLCBzaXplb2YoX19zMzIpKnJlcG9ydC0+ZmllbGRbMF0tPm1heHVzYWdlKTsKKworCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7CisJY2FzZSBGRl9DT05TVEFOVDoKKy8qCisgKiBBbHJlYWR5IGNsYW1wZWQgaW4gZmZfbWVtbGVzcworICogMCBpcyBjZW50ZXIgKGRpZmZlcmVudCB0aGVuIG90aGVyIGxvZ2l0ZWNoKQorICovCisJCXggPSBlZmZlY3QtPnUucmFtcC5zdGFydF9sZXZlbDsKKwkJeSA9IGVmZmVjdC0+dS5yYW1wLmVuZF9sZXZlbDsKKworCQkvKiBzZW5kIGNvbW1hbmQgYnl0ZSAqLworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NTE7CisKKy8qCisgKiBTaWduIGJhY2t3YXJkcyBmcm9tIG90aGVyIEZvcmNlM2QgcHJvCisgKiB3aGljaCBnZXQgcmVjYXN0IGhlcmUgaW4gdHdvJ3MgY29tcGxlbWVudCA4IGJpdHMKKyAqLworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgteCk7CisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzMxXSA9ICh1bnNpZ25lZCBjaGFyKSgteSk7CisKKwkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgaGlkX2xnM2ZmX3NldF9hdXRvY2VudGVyKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdTE2IG1hZ25pdHVkZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9ICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCisvKgorICogQXV0byBDZW50ZXJpbmcgcHJvYmVkIGZyb20gZGV2aWNlCisgKiBOT1RFOiBkZWFkbWFuJ3Mgc3dpdGNoIG9uIEc5NDAgbXVzdCBiZSBjb3ZlcmVkCisgKiBmb3IgZWZmZWN0cyB0byB3b3JrCisgKi8KKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NTE7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gMHgwMDsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4N0Y7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNF0gPSAweDdGOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzMxXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzJdID0gMHgwMDsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszM10gPSAweDdGOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzM0XSA9IDB4N0Y7CisKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworfQorCisKK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmYzX2pveXN0aWNrX2FjW10gPSB7CisJRkZfQ09OU1RBTlQsCisJRkZfQVVUT0NFTlRFUiwKKwktMQorfTsKKworaW50IGxnM2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gaGlkaW5wdXQtPmlucHV0OworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisJY29uc3Qgc2lnbmVkIHNob3J0ICpmZl9iaXRzID0gZmYzX2pveXN0aWNrX2FjOworCWludCBlcnJvcjsKKwlpbnQgaTsKKworCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KKwlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKKwkJZXJyX2hpZCgiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGxvb2tzIG9rICovCisJcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCWlmICghcmVwb3J0KSB7CisJCWVycl9oaWQoIk5VTEwgb3V0cHV0IHJlcG9ydCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZmllbGQgPSByZXBvcnQtPmZpZWxkWzBdOworCWlmICghZmllbGQpIHsKKwkJZXJyX2hpZCgiTlVMTCBmaWVsZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQXNzdW1lIHNpbmdsZSBmaXhlZCBkZXZpY2UgRzk0MCAqLworCWZvciAoaSA9IDA7IGZmX2JpdHNbaV0gPj0gMDsgaSsrKQorCQlzZXRfYml0KGZmX2JpdHNbaV0sIGRldi0+ZmZiaXQpOworCisJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIE5VTEwsIGhpZF9sZzNmZl9wbGF5KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmICh0ZXN0X2JpdChGRl9BVVRPQ0VOVEVSLCBkZXYtPmZmYml0KSkKKwkJZGV2LT5mZi0+c2V0X2F1dG9jZW50ZXIgPSBoaWRfbGczZmZfc2V0X2F1dG9jZW50ZXI7CisKKwlkZXZfaW5mbygmaGlkLT5kZXYsICJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggRmxpZ2h0IFN5c3RlbSBHOTQwIGJ5ICIKKwkJCSJHYXJ5IFN0ZWluIDxMb3JkQ25pZGFyaWFuQGdtYWlsLmNvbT5cbiIpOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWxnZmYuYwppbmRleCA5ODdhYmViLi42MTE0MmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKQEAgLTY3LDYgKzY3LDcgQEAKIAl7IDB4MDQ2ZCwgMHhjMjE5LCBmZl9ydW1ibGUgfSwKIAl7IDB4MDQ2ZCwgMHhjMjgzLCBmZl9qb3lzdGljayB9LAogCXsgMHgwNDZkLCAweGMyODYsIGZmX2pveXN0aWNrX2FjIH0sCisJeyAweDA0NmQsIDB4YzI4NywgZmZfam95c3RpY2tfYWMgfSwKIAl7IDB4MDQ2ZCwgMHhjMjkzLCBmZl9qb3lzdGljayB9LAogCXsgMHgwNDZkLCAweGMyOTQsIGZmX3doZWVsIH0sCiAJeyAweDA0NmQsIDB4YzI5NSwgZmZfam95c3RpY2sgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2E5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKgorICogICBBcHBsZSAiTWFnaWMiIFdpcmVsZXNzIE1vdXNlIGRyaXZlcgorICoKKyAqICAgQ29weXJpZ2h0IChjKSAyMDEwIE1pY2hhZWwgUG9vbGUgPG1kcG9vbGVAdHJvaWx1cy5vcmc+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdGF0aWMgYm9vbCBlbXVsYXRlXzNidXR0b24gPSB0cnVlOworbW9kdWxlX3BhcmFtKGVtdWxhdGVfM2J1dHRvbiwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVtdWxhdGVfM2J1dHRvbiwgIkVtdWxhdGUgYSBtaWRkbGUgYnV0dG9uIik7CisKK3N0YXRpYyBpbnQgbWlkZGxlX2J1dHRvbl9zdGFydCA9IC0zNTA7CitzdGF0aWMgaW50IG1pZGRsZV9idXR0b25fc3RvcCA9ICszNTA7CisKK3N0YXRpYyBib29sIGVtdWxhdGVfc2Nyb2xsX3doZWVsID0gdHJ1ZTsKK21vZHVsZV9wYXJhbShlbXVsYXRlX3Njcm9sbF93aGVlbCwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVtdWxhdGVfc2Nyb2xsX3doZWVsLCAiRW11bGF0ZSBhIHNjcm9sbCB3aGVlbCIpOworCitzdGF0aWMgYm9vbCByZXBvcnRfdG91Y2hlcyA9IHRydWU7Cittb2R1bGVfcGFyYW0ocmVwb3J0X3RvdWNoZXMsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZXBvcnRfdG91Y2hlcywgIkVtaXQgdG91Y2ggcmVjb3JkcyAob3RoZXJ3aXNlLCBvbmx5IHVzZSB0aGVtIGZvciBlbXVsYXRpb24pIik7CisKK3N0YXRpYyBib29sIHJlcG9ydF91bmRlY2lwaGVyZWQ7Cittb2R1bGVfcGFyYW0ocmVwb3J0X3VuZGVjaXBoZXJlZCwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlcG9ydF91bmRlY2lwaGVyZWQsICJSZXBvcnQgdW5kZWNpcGhlcmVkIG11bHRpLXRvdWNoIHN0YXRlIGZpZWxkIHVzaW5nIGEgTVNDX1JBVyBldmVudCIpOworCisjZGVmaW5lIFRPVUNIX1JFUE9SVF9JRCAgIDB4MjkKKy8qIFRoZXNlIGRlZmluaXRpb25zIGFyZSBub3QgcHJlY2lzZSwgYnV0IHRoZXkncmUgY2xvc2UgZW5vdWdoLiAgKEJpdHMKKyAqIDB4MDMgc2VlbSB0byBpbmRpY2F0ZSB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSB0b3VjaCwgYml0cyAweDcwIHNlZW0KKyAqIHRvIGJlIHNvbWUga2luZCBvZiBiaXQgbWFzayAtLSAweDIwIG1heSBiZSBhIG5lYXItZmllbGQgcmVhZGluZywKKyAqIGFuZCAweDQwIGlzIGFjdHVhbCBjb250YWN0LCBhbmQgMHgxMCBtYXkgYmUgYSBzdGFydC9zdG9wIG9yIGNoYW5nZQorICogaW5kaWNhdGlvbi4pCisgKi8KKyNkZWZpbmUgVE9VQ0hfU1RBVEVfTUFTSyAgMHhmMAorI2RlZmluZSBUT1VDSF9TVEFURV9OT05FICAweDAwCisjZGVmaW5lIFRPVUNIX1NUQVRFX1NUQVJUIDB4MzAKKyNkZWZpbmUgVE9VQ0hfU1RBVEVfRFJBRyAgMHg0MAorCisvKioKKyAqIHN0cnVjdCBtYWdpY21vdXNlX3NjIC0gVHJhY2tzIE1hZ2ljIE1vdXNlLXNwZWNpZmljIGRhdGEuCisgKiBAaW5wdXQ6IElucHV0IGRldmljZSB0aHJvdWdoIHdoaWNoIHdlIHJlcG9ydCBldmVudHMuCisgKiBAcXVpcmtzOiBDdXJyZW50bHkgdW51c2VkLgorICogQGxhc3RfdGltZXN0YW1wOiBUaW1lc3RhbXAgZnJvbSBtb3N0IHJlY2VudCAoMTgtYml0KSB0b3VjaCByZXBvcnQKKyAqICAgICAodW5pdHMgb2YgbWlsbGlzZWNvbmRzIG92ZXIgc2hvcnQgd2luZG93cywgYnV0IHNlZW1zIHRvCisgKiAgICAgaW5jcmVhc2UgZmFzdGVyIHdoZW4gdGhlcmUgYXJlIG5vIHRvdWNoZXMpLgorICogQGRlbHRhX3RpbWU6IDE4LWJpdCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBtb3N0IHJlY2VudCB0b3VjaAorICogICAgIHJlcG9ydHMgZnJvbSB0aGUgbW91c2UuCisgKiBAbnRvdWNoZXM6IE51bWJlciBvZiB0b3VjaGVzIGluIG1vc3QgcmVjZW50IHRvdWNoIHJlcG9ydC4KKyAqIEBzY3JvbGxfYWNjZWw6IE51bWJlciBvZiBjb25zZWN1dGl2ZSBzY3JvbGwgbW90aW9ucy4KKyAqIEBzY3JvbGxfamlmZmllczogVGltZSBvZiBsYXN0IHNjcm9sbCBtb3Rpb24uCisgKiBAdG91Y2hlczogTW9zdCByZWNlbnQgZGF0YSBmb3IgYSB0b3VjaCwgaW5kZXhlZCBieSB0cmFja2luZyBJRC4KKyAqIEB0cmFja2luZ19pZHM6IE1hcHBpbmcgb2YgY3VycmVudCB0b3VjaCBpbnB1dCBkYXRhIHRvIEB0b3VjaGVzLgorICovCitzdHJ1Y3QgbWFnaWNtb3VzZV9zYyB7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJdW5zaWduZWQgbG9uZyBxdWlya3M7CisKKwlpbnQgbGFzdF90aW1lc3RhbXA7CisJaW50IGRlbHRhX3RpbWU7CisJaW50IG50b3VjaGVzOworCWludCBzY3JvbGxfYWNjZWw7CisJdW5zaWduZWQgbG9uZyBzY3JvbGxfamlmZmllczsKKworCXN0cnVjdCB7CisJCXNob3J0IHg7CisJCXNob3J0IHk7CisJCXNob3J0IHNjcm9sbF95OworCQl1OCBzaXplOworCX0gdG91Y2hlc1sxNl07CisJaW50IHRyYWNraW5nX2lkc1sxNl07Cit9OworCitzdGF0aWMgaW50IG1hZ2ljbW91c2VfZmlybV90b3VjaChzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAqbXNjKQoreworCWludCB0b3VjaCA9IC0xOworCWludCBpaTsKKworCS8qIElmIHRoZXJlIGlzIG9ubHkgb25lICJmaXJtIiB0b3VjaCwgc2V0IHRvdWNoIHRvIGl0cworCSAqIHRyYWNraW5nIElELgorCSAqLworCWZvciAoaWkgPSAwOyBpaSA8IG1zYy0+bnRvdWNoZXM7IGlpKyspIHsKKwkJaW50IGlkeCA9IG1zYy0+dHJhY2tpbmdfaWRzW2lpXTsKKwkJaWYgKG1zYy0+dG91Y2hlc1tpZHhdLnNpemUgPCA4KSB7CisJCQkvKiBJZ25vcmUgdGhpcyB0b3VjaC4gKi8KKwkJfSBlbHNlIGlmICh0b3VjaCA+PSAwKSB7CisJCQl0b3VjaCA9IC0xOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQl0b3VjaCA9IGlkeDsKKwkJfQorCX0KKworCXJldHVybiB0b3VjaDsKK30KKworc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9lbWl0X2J1dHRvbnMoc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYywgaW50IHN0YXRlKQoreworCWludCBsYXN0X3N0YXRlID0gdGVzdF9iaXQoQlROX0xFRlQsIG1zYy0+aW5wdXQtPmtleSkgPDwgMCB8CisJCXRlc3RfYml0KEJUTl9SSUdIVCwgbXNjLT5pbnB1dC0+a2V5KSA8PCAxIHwKKwkJdGVzdF9iaXQoQlROX01JRERMRSwgbXNjLT5pbnB1dC0+a2V5KSA8PCAyOworCisJaWYgKGVtdWxhdGVfM2J1dHRvbikgeworCQlpbnQgaWQ7CisKKwkJLyogSWYgc29tZSBidXR0b24gd2FzIHByZXNzZWQgYmVmb3JlLCBrZWVwIGl0IGhlbGQKKwkJICogZG93bi4gIE90aGVyd2lzZSwgaWYgdGhlcmUncyBleGFjdGx5IG9uZSBmaXJtCisJCSAqIHRvdWNoLCB1c2UgdGhhdCB0byBvdmVycmlkZSB0aGUgbW91c2UncyBndWVzcy4KKwkJICovCisJCWlmIChzdGF0ZSA9PSAwKSB7CisJCQkvKiBUaGUgYnV0dG9uIHdhcyByZWxlYXNlZC4gKi8KKwkJfSBlbHNlIGlmIChsYXN0X3N0YXRlICE9IDApIHsKKwkJCXN0YXRlID0gbGFzdF9zdGF0ZTsKKwkJfSBlbHNlIGlmICgoaWQgPSBtYWdpY21vdXNlX2Zpcm1fdG91Y2gobXNjKSkgPj0gMCkgeworCQkJaW50IHggPSBtc2MtPnRvdWNoZXNbaWRdLng7CisJCQlpZiAoeCA8IG1pZGRsZV9idXR0b25fc3RhcnQpCisJCQkJc3RhdGUgPSAxOworCQkJZWxzZSBpZiAoeCA+IG1pZGRsZV9idXR0b25fc3RvcCkKKwkJCQlzdGF0ZSA9IDI7CisJCQllbHNlCisJCQkJc3RhdGUgPSA0OworCQl9IC8qIGVsc2U6IHdlIGtlZXAgdGhlIG1vdXNlJ3MgZ3Vlc3MgKi8KKworCQlpbnB1dF9yZXBvcnRfa2V5KG1zYy0+aW5wdXQsIEJUTl9NSURETEUsIHN0YXRlICYgNCk7CisJfQorCisJaW5wdXRfcmVwb3J0X2tleShtc2MtPmlucHV0LCBCVE5fTEVGVCwgc3RhdGUgJiAxKTsKKwlpbnB1dF9yZXBvcnRfa2V5KG1zYy0+aW5wdXQsIEJUTl9SSUdIVCwgc3RhdGUgJiAyKTsKKworCWlmIChzdGF0ZSAhPSBsYXN0X3N0YXRlKQorCQltc2MtPnNjcm9sbF9hY2NlbCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljbW91c2VfZW1pdF90b3VjaChzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAqbXNjLCBpbnQgcmF3X2lkLCB1OCAqdGRhdGEpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBtc2MtPmlucHV0OworCV9fczMyIHhfeSA9IHRkYXRhWzBdIDw8IDggfCB0ZGF0YVsxXSA8PCAxNiB8IHRkYXRhWzJdIDw8IDI0OworCWludCBtaXNjID0gdGRhdGFbNV0gfCB0ZGF0YVs2XSA8PCA4OworCWludCBpZCA9IChtaXNjID4+IDYpICYgMTU7CisJaW50IHggPSB4X3kgPDwgMTIgPj4gMjA7CisJaW50IHkgPSAtKHhfeSA+PiAyMCk7CisKKwkvKiBTdG9yZSB0cmFja2luZyBJRCBhbmQgb3RoZXIgZmllbGRzLiAqLworCW1zYy0+dHJhY2tpbmdfaWRzW3Jhd19pZF0gPSBpZDsKKwltc2MtPnRvdWNoZXNbaWRdLnggPSB4OworCW1zYy0+dG91Y2hlc1tpZF0ueSA9IHk7CisJbXNjLT50b3VjaGVzW2lkXS5zaXplID0gbWlzYyAmIDYzOworCisJLyogSWYgcmVxdWVzdGVkLCBlbXVsYXRlIGEgc2Nyb2xsIHdoZWVsIGJ5IGRldGVjdGluZyBzbWFsbAorCSAqIHZlcnRpY2FsIHRvdWNoIG1vdGlvbnMgYWxvbmcgdGhlIG1pZGRsZSBvZiB0aGUgbW91c2UuCisJICovCisJaWYgKGVtdWxhdGVfc2Nyb2xsX3doZWVsICYmCisJICAgIG1pZGRsZV9idXR0b25fc3RhcnQgPCB4ICYmIHggPCBtaWRkbGVfYnV0dG9uX3N0b3ApIHsKKwkJc3RhdGljIGNvbnN0IGludCBhY2NlbF9wcm9maWxlW10gPSB7CisJCQkyNTYsIDIyOCwgMTkyLCAxNjAsIDEyOCwgOTYsIDY0LCAzMiwKKwkJfTsKKwkJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCQlpbnQgc3RlcCA9IG1zYy0+dG91Y2hlc1tpZF0uc2Nyb2xsX3kgLSB5OworCisJCS8qIFJlc2V0IGFjY2VsZXJhdGlvbiBhZnRlciBoYWxmIGEgc2Vjb25kLiAqLworCQlpZiAodGltZV9hZnRlcihub3csIG1zYy0+c2Nyb2xsX2ppZmZpZXMgKyBIWiAvIDIpKQorCQkJbXNjLT5zY3JvbGxfYWNjZWwgPSAwOworCisJCS8qIENhbGN1bGF0ZSBhbmQgYXBwbHkgdGhlIHNjcm9sbCBtb3Rpb24uICovCisJCXN3aXRjaCAodGRhdGFbN10gJiBUT1VDSF9TVEFURV9NQVNLKSB7CisJCWNhc2UgVE9VQ0hfU1RBVEVfU1RBUlQ6CisJCQltc2MtPnRvdWNoZXNbaWRdLnNjcm9sbF95ID0geTsKKwkJCW1zYy0+c2Nyb2xsX2FjY2VsID0gbWluX3QoaW50LCBtc2MtPnNjcm9sbF9hY2NlbCArIDEsCisJCQkJCQlBUlJBWV9TSVpFKGFjY2VsX3Byb2ZpbGUpIC0gMSk7CisJCQlicmVhazsKKwkJY2FzZSBUT1VDSF9TVEFURV9EUkFHOgorCQkJc3RlcCA9IHN0ZXAgLyBhY2NlbF9wcm9maWxlW21zYy0+c2Nyb2xsX2FjY2VsXTsKKwkJCWlmIChzdGVwICE9IDApIHsKKwkJCQltc2MtPnRvdWNoZXNbaWRdLnNjcm9sbF95ID0geTsKKwkJCQltc2MtPnNjcm9sbF9qaWZmaWVzID0gbm93OworCQkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9XSEVFTCwgc3RlcCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEdlbmVyYXRlIHRoZSBpbnB1dCBldmVudHMgZm9yIHRoaXMgdG91Y2guICovCisJaWYgKHJlcG9ydF90b3VjaGVzKSB7CisJCWludCBvcmllbnRhdGlvbiA9IChtaXNjID4+IDEwKSAtIDMyOworCisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UUkFDS0lOR19JRCwgaWQpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfVE9VQ0hfTUFKT1IsIHRkYXRhWzNdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RPVUNIX01JTk9SLCB0ZGF0YVs0XSk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9PUklFTlRBVElPTiwgb3JpZW50YXRpb24pOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwgeCk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9ZLCB5KTsKKworCQlpZiAocmVwb3J0X3VuZGVjaXBoZXJlZCkKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19SQVcsIHRkYXRhWzddKTsKKworCQlpbnB1dF9tdF9zeW5jKGlucHV0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWFnaWNtb3VzZV9yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAqbXNjID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gbXNjLT5pbnB1dDsKKwlpbnQgeCwgeSwgdHMsIGlpLCBjbGlja3M7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDB4MTA6CisJCWlmIChzaXplICE9IDYpCisJCQlyZXR1cm4gMDsKKwkJeCA9IChfX3MxNikoZGF0YVsyXSB8IGRhdGFbM10gPDwgOCk7CisJCXkgPSAoX19zMTYpKGRhdGFbNF0gfCBkYXRhWzVdIDw8IDgpOworCQljbGlja3MgPSBkYXRhWzFdOworCQlicmVhazsKKwljYXNlIFRPVUNIX1JFUE9SVF9JRDoKKwkJLyogRXhwZWN0IHNpeCBieXRlcyBvZiBwcmVmaXgsIGFuZCBOKjggYnl0ZXMgb2YgdG91Y2ggZGF0YS4gKi8KKwkJaWYgKHNpemUgPCA2IHx8ICgoc2l6ZSAtIDYpICUgOCkgIT0gMCkKKwkJCXJldHVybiAwOworCQl0cyA9IGRhdGFbM10gPj4gNiB8IGRhdGFbNF0gPDwgMiB8IGRhdGFbNV0gPDwgMTA7CisJCW1zYy0+ZGVsdGFfdGltZSA9ICh0cyAtIG1zYy0+bGFzdF90aW1lc3RhbXApICYgMHgzZmZmZjsKKwkJbXNjLT5sYXN0X3RpbWVzdGFtcCA9IHRzOworCQltc2MtPm50b3VjaGVzID0gKHNpemUgLSA2KSAvIDg7CisJCWZvciAoaWkgPSAwOyBpaSA8IG1zYy0+bnRvdWNoZXM7IGlpKyspCisJCQltYWdpY21vdXNlX2VtaXRfdG91Y2gobXNjLCBpaSwgZGF0YSArIGlpICogOCArIDYpOworCQkvKiBXaGVuIGVtdWxhdGluZyB0aHJlZS1idXR0b24gbW9kZSwgaXQgaXMgaW1wb3J0YW50CisJCSAqIHRvIGhhdmUgdGhlIGN1cnJlbnQgdG91Y2ggaW5mb3JtYXRpb24gYmVmb3JlCisJCSAqIGdlbmVyYXRpbmcgYSBjbGljayBldmVudC4KKwkJICovCisJCXggPSAoc2lnbmVkIGNoYXIpZGF0YVsxXTsKKwkJeSA9IChzaWduZWQgY2hhcilkYXRhWzJdOworCQljbGlja3MgPSBkYXRhWzNdOworCQlicmVhazsKKwljYXNlIDB4MjA6IC8qIFRoZW9yZXRpY2FsbHkgYmF0dGVyeSBzdGF0dXMgKDAtMTAwKSwgYnV0IEkgaGF2ZQorCQkgICAgKiBuZXZlciBzZWVuIGl0IC0tIG1heWJlIGl0IGlzIG9ubHkgdXBvbiByZXF1ZXN0LgorCQkgICAgKi8KKwljYXNlIDB4NjA6IC8qIFVua25vd24sIG1heWJlIGxhc2VyIG9uL29mZi4gKi8KKwljYXNlIDB4NjE6IC8qIExhc2VyIHJlZmxlY3Rpb24gc3RhdHVzIGNoYW5nZS4KKwkJICAgICogZGF0YVsxXTogMCA9IHNwb3R0ZWQsIDEgPSBsb3N0CisJCSAgICAqLworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCW1hZ2ljbW91c2VfZW1pdF9idXR0b25zKG1zYywgY2xpY2tzICYgMyk7CisJaW5wdXRfcmVwb3J0X3JlbChpbnB1dCwgUkVMX1gsIHgpOworCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9ZLCB5KTsKKwlpbnB1dF9zeW5jKGlucHV0KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtYWdpY21vdXNlX2lucHV0X29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIGhpZC0+bGxfZHJpdmVyLT5vcGVuKGhpZCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljbW91c2VfaW5wdXRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJaGlkLT5sbF9kcml2ZXItPmNsb3NlKGhpZCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljbW91c2Vfc2V0dXBfaW5wdXQoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0LCBoZGV2KTsKKwlpbnB1dC0+ZXZlbnQgPSBoZGV2LT5sbF9kcml2ZXItPmhpZGlucHV0X2lucHV0X2V2ZW50OworCWlucHV0LT5vcGVuID0gbWFnaWNtb3VzZV9pbnB1dF9vcGVuOworCWlucHV0LT5jbG9zZSA9IG1hZ2ljbW91c2VfaW5wdXRfY2xvc2U7CisKKwlpbnB1dC0+bmFtZSA9IGhkZXYtPm5hbWU7CisJaW5wdXQtPnBoeXMgPSBoZGV2LT5waHlzOworCWlucHV0LT51bmlxID0gaGRldi0+dW5pcTsKKwlpbnB1dC0+aWQuYnVzdHlwZSA9IGhkZXYtPmJ1czsKKwlpbnB1dC0+aWQudmVuZG9yID0gaGRldi0+dmVuZG9yOworCWlucHV0LT5pZC5wcm9kdWN0ID0gaGRldi0+cHJvZHVjdDsKKwlpbnB1dC0+aWQudmVyc2lvbiA9IGhkZXYtPnZlcnNpb247CisJaW5wdXQtPmRldi5wYXJlbnQgPSBoZGV2LT5kZXYucGFyZW50OworCisJX19zZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKKwlfX3NldF9iaXQoQlROX0xFRlQsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fUklHSFQsIGlucHV0LT5rZXliaXQpOworCWlmIChlbXVsYXRlXzNidXR0b24pCisJCV9fc2V0X2JpdChCVE5fTUlERExFLCBpbnB1dC0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX1RPT0xfRklOR0VSLCBpbnB1dC0+a2V5Yml0KTsKKworCV9fc2V0X2JpdChFVl9SRUwsIGlucHV0LT5ldmJpdCk7CisJX19zZXRfYml0KFJFTF9YLCBpbnB1dC0+cmVsYml0KTsKKwlfX3NldF9iaXQoUkVMX1ksIGlucHV0LT5yZWxiaXQpOworCWlmIChlbXVsYXRlX3Njcm9sbF93aGVlbCkKKwkJX19zZXRfYml0KFJFTF9XSEVFTCwgaW5wdXQtPnJlbGJpdCk7CisKKwlpZiAocmVwb3J0X3RvdWNoZXMpIHsKKwkJX19zZXRfYml0KEVWX0FCUywgaW5wdXQtPmV2Yml0KTsKKworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RSQUNLSU5HX0lELCAwLCAxNSwgMCwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfVE9VQ0hfTUFKT1IsIDAsIDI1NSwgNCwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfVE9VQ0hfTUlOT1IsIDAsIDI1NSwgNCwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sIC0zMiwgMzEsIDEsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1gsIC0xMTAwLCAxMzU4LAorCQkJCTQsIDApOworCQkvKiBOb3RlOiBUb3VjaCBZIHBvc2l0aW9uIGZyb20gdGhlIGRldmljZSBpcyBpbnZlcnRlZCByZWxhdGl2ZQorCQkgKiB0byBob3cgcG9pbnRlciBtb3Rpb24gaXMgcmVwb3J0ZWQgKGFuZCByZWxhdGl2ZSB0byBob3cgVVNCCisJCSAqIEhJRCByZWNvbW1lbmRzIHRoZSBjb29yZGluYXRlcyB3b3JrKS4gIFRoaXMgZHJpdmVyIGtlZXBzCisJCSAqIHRoZSBvcmlnaW4gYXQgdGhlIHNhbWUgcG9zaXRpb24sIGFuZCBqdXN0IHVzZXMgdGhlIGFkZGl0aXZlCisJCSAqIGludmVyc2Ugb2YgdGhlIHJlcG9ydGVkIFkuCisJCSAqLworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksIC0xNTg5LCAyMDQ3LAorCQkJCTQsIDApOworCX0KKworCWlmIChyZXBvcnRfdW5kZWNpcGhlcmVkKSB7CisJCV9fc2V0X2JpdChFVl9NU0MsIGlucHV0LT5ldmJpdCk7CisJCV9fc2V0X2JpdChNU0NfUkFXLCBpbnB1dC0+bXNjYml0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWFnaWNtb3VzZV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwljb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJX191OCBmZWF0dXJlXzFbXSA9IHsgMHhkNywgMHgwMSB9OworCV9fdTggZmVhdHVyZV8yW10gPSB7IDB4ZjgsIDB4MDEsIDB4MzIgfTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAqbXNjOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJaW50IHJldDsKKworCW1zYyA9IGt6YWxsb2Moc2l6ZW9mKCptc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXNjID09IE5VTEwpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgbWFnaWNtb3VzZSBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbXNjLT5xdWlya3MgPSBpZC0+ZHJpdmVyX2RhdGE7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIG1zYyk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJtYWdpY21vdXNlIGhpZCBwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgIm1hZ2ljbW91c2UgaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXBvcnQgPSBoaWRfcmVnaXN0ZXJfcmVwb3J0KGhkZXYsIEhJRF9JTlBVVF9SRVBPUlQsIFRPVUNIX1JFUE9SVF9JRCk7CisJaWYgKCFyZXBvcnQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIHRvdWNoIHJlcG9ydFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3N0b3BfaHc7CisJfQorCXJlcG9ydC0+c2l6ZSA9IDY7CisKKwlyZXQgPSBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgZmVhdHVyZV8xLCBzaXplb2YoZmVhdHVyZV8xKSwKKwkJCUhJRF9GRUFUVVJFX1JFUE9SVCk7CisJaWYgKHJldCAhPSBzaXplb2YoZmVhdHVyZV8xKSkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCB0b3VjaCBkYXRhICgxOiVkKVxuIiwKKwkJCQlyZXQpOworCQlnb3RvIGVycl9zdG9wX2h3OworCX0KKwlyZXQgPSBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgZmVhdHVyZV8yLAorCQkJc2l6ZW9mKGZlYXR1cmVfMiksIEhJRF9GRUFUVVJFX1JFUE9SVCk7CisJaWYgKHJldCAhPSBzaXplb2YoZmVhdHVyZV8yKSkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCB0b3VjaCBkYXRhICgyOiVkKVxuIiwKKwkJCQlyZXQpOworCQlnb3RvIGVycl9zdG9wX2h3OworCX0KKworCWlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbnB1dCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBpbnB1dCBkZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9zdG9wX2h3OworCX0KKwltYWdpY21vdXNlX3NldHVwX2lucHV0KGlucHV0LCBoZGV2KTsKKworCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJpbnB1dCBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2lucHV0OworCX0KKwltc2MtPmlucHV0ID0gaW5wdXQ7CisKKwlyZXR1cm4gMDsKK2Vycl9pbnB1dDoKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7CitlcnJfc3RvcF9odzoKKwloaWRfaHdfc3RvcChoZGV2KTsKK2Vycl9mcmVlOgorCWtmcmVlKG1zYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG1hZ2ljX21pY2VbXSA9IHsKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUFHSUNNT1VTRSksCisJCS5kcml2ZXJfZGF0YSA9IDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgbWFnaWNfbWljZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBtYWdpY21vdXNlX2RyaXZlciA9IHsKKwkubmFtZSA9ICJtYWdpY21vdXNlIiwKKwkuaWRfdGFibGUgPSBtYWdpY19taWNlLAorCS5wcm9iZSA9IG1hZ2ljbW91c2VfcHJvYmUsCisJLnJlbW92ZSA9IG1hZ2ljbW91c2VfcmVtb3ZlLAorCS5yYXdfZXZlbnQgPSBtYWdpY21vdXNlX3Jhd19ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1hZ2ljbW91c2VfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtYWdpY21vdXNlX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWdpc3RlciBtYWdpY21vdXNlIGRyaXZlclxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWFnaWNtb3VzZV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZtYWdpY21vdXNlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1hZ2ljbW91c2VfaW5pdCk7Cittb2R1bGVfZXhpdChtYWdpY21vdXNlX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1vc2FydC5jIGIvZHJpdmVycy9oaWQvaGlkLW1vc2FydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NzE4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgdGhlIG11bHRpdG91Y2ggcGFuZWwgb24gdGhlIEFTVVMgRWVlUEMgVDkxTVQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgVGVlbXUgVHVvbWluZW4gPHRlZW11LnR1b21pbmVuQGN5YmVyY29tLmNvbT4KKyAqCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKworTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTW9zQXJ0IGR1YWwtdG91Y2ggcGFuZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RydWN0IG1vc2FydF9kYXRhIHsKKwlfX3UxNiB4LCB5OworCV9fdTggaWQ7CisJYm9vbCB2YWxpZDsJCS8qIHZhbGlkIGZpbmdlciBkYXRhLCBvciBqdXN0IHBsYWNlaG9sZGVyPyAqLworCWJvb2wgZmlyc3Q7CQkvKiBpcyB0aGlzIHRoZSBmaXJzdCBmaW5nZXIgaW4gdGhpcyBmcmFtZT8gKi8KKwlib29sIGFjdGl2aXR5X25vdzsJLyogYXQgbGVhc3Qgb25lIGFjdGl2ZSBmaW5nZXIgaW4gdGhpcyBmcmFtZT8gKi8KKwlib29sIGFjdGl2aXR5OwkJLyogYXQgbGVhc3Qgb25lIGFjdGl2ZSBmaW5nZXIgcHJldmlvdXNseT8gKi8KK307CisKK3N0YXRpYyBpbnQgbW9zYXJ0X2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CisKKwljYXNlIEhJRF9VUF9HRU5ERVNLOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfR0RfWDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1gsCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfR0RfWToKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJY2FzZSBISURfREdfSU5QVVRNT0RFOgorCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgorCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCWNhc2UgSElEX0RHX0hFSUdIVDoKKwkJCXJldHVybiAtMTsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lEKTsKKwkJCXJldHVybiAxOworCisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIDB4ZmYwMDAwMDA6CisJCS8qIGlnbm9yZSBISUQgZmVhdHVyZXMgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1vc2FydF9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQorCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgZmluZ2VyIGhhcyBiZWVuIHBhcnNlZCwKKyAqIHNvIHRoYXQgaXQgY2FuIGRlY2lkZSB3aGF0IHRvIHNlbmQgdG8gdGhlIGlucHV0IGxheWVyLgorICovCitzdGF0aWMgdm9pZCBtb3NhcnRfZmlsdGVyX2V2ZW50KHN0cnVjdCBtb3NhcnRfZGF0YSAqdGQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXRkLT5maXJzdCA9ICF0ZC0+Zmlyc3Q7IC8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCisJaWYgKCF0ZC0+dmFsaWQpIHsKKwkJLyoKKwkJICogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiBubyBmaW5nZXIgaW4gdGhpcyBmcmFtZSBpcyB2YWxpZAorCQkgKiBhbmQgdGhlcmUgcHJldmlvdXNseSB3YXMgZmluZ2VyIGFjdGl2aXR5LCB0aGlzIGlzIGEgcmVsZWFzZQorCQkgKi8gCisJCWlmICghdGQtPmZpcnN0ICYmICF0ZC0+YWN0aXZpdHlfbm93ICYmIHRkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAwKTsKKwkJCXRkLT5hY3Rpdml0eSA9IGZhbHNlOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIHRkLT5pZCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIHRkLT54KTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgdGQtPnkpOworCisJaW5wdXRfbXRfc3luYyhpbnB1dCk7CisJdGQtPnZhbGlkID0gZmFsc2U7CisKKwkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIGZpcnN0IGFjdGl2ZSBmaW5nZXIgaW4gdGhpcyBmcmFtZS4uLiAqLworCWlmICghdGQtPmFjdGl2aXR5X25vdykgeworCQkvKiBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgYWN0aXZpdHksIGVtaXQgdG91Y2ggZXZlbnQgKi8KKwkJaWYgKCF0ZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7CisJCQl0ZC0+YWN0aXZpdHkgPSB0cnVlOworCQl9CisJCXRkLT5hY3Rpdml0eV9ub3cgPSB0cnVlOworCQkvKiBhbmQgaW4gYW55IGNhc2UgdGhpcyBpcyBvdXIgcHJlZmVycmVkIGZpbmdlciAqLworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgdGQtPngpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgdGQtPnkpOworCX0KK30KKworCitzdGF0aWMgaW50IG1vc2FydF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IG1vc2FydF9kYXRhICp0ZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQl0ZC0+dmFsaWQgPSAhIXZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1g6CisJCQl0ZC0+eCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1k6CisJCQl0ZC0+eSA9IHZhbHVlOworCQkJbW9zYXJ0X2ZpbHRlcl9ldmVudCh0ZCwgaW5wdXQpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCXRkLT5pZCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJCS8qIHRvdWNoIGVtdWxhdGlvbjogdGhpcyBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIGZyYW1lICovCisJCQl0ZC0+Zmlyc3QgPSBmYWxzZTsKKwkJCXRkLT5hY3Rpdml0eV9ub3cgPSBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQkvKiBhdm9pZCBpbnRlcmZlcmVuY2UgZnJvbSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogZmFsbGJhY2sgdG8gdGhlIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtb3NhcnRfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtb3NhcnRfZGF0YSAqdGQ7CisKKworCXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1vc2FydF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgTW9zQXJ0IGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdGQtPnZhbGlkID0gZmFsc2U7CisJdGQtPmFjdGl2aXR5ID0gZmFsc2U7CisJdGQtPmFjdGl2aXR5X25vdyA9IGZhbHNlOworCXRkLT5maXJzdCA9IGZhbHNlOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB0ZCk7CisKKwkvKiBjdXJyZW50bHksIGl0J3MgYmV0dGVyIHRvIGhhdmUgb25lIGV2ZGV2IGRldmljZSBvbmx5ICovCisjaWYgMAorCWhkZXYtPnF1aXJrcyB8PSBISURfUVVJUktfTVVMVElfSU5QVVQ7CisjZW5kaWYKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKworCWlmIChyZXQgPT0gMCkgeworCQlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZSA9IGhkZXYtPnJlcG9ydF9lbnVtCisJCQkJCQkrIEhJRF9GRUFUVVJFX1JFUE9SVDsKKwkJc3RydWN0IGhpZF9yZXBvcnQgKnIgPSByZS0+cmVwb3J0X2lkX2hhc2hbN107CisKKwkJci0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMjsKKwkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGRldiwgciwgVVNCX0RJUl9PVVQpOworCX0gZWxzZSAKKwkJa2ZyZWUodGQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbW9zYXJ0X3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG1vc2FydF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19UOTFNVCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgbW9zYXJ0X2RldmljZXMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBtb3NhcnRfZ3JhYmJlZF91c2FnZXNbXSA9IHsKKwl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbW9zYXJ0X2RyaXZlciA9IHsKKwkubmFtZSA9ICJtb3NhcnQiLAorCS5pZF90YWJsZSA9IG1vc2FydF9kZXZpY2VzLAorCS5wcm9iZSA9IG1vc2FydF9wcm9iZSwKKwkucmVtb3ZlID0gbW9zYXJ0X3JlbW92ZSwKKwkuaW5wdXRfbWFwcGluZyA9IG1vc2FydF9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBtb3NhcnRfaW5wdXRfbWFwcGVkLAorCS51c2FnZV90YWJsZSA9IG1vc2FydF9ncmFiYmVkX3VzYWdlcywKKwkuZXZlbnQgPSBtb3NhcnRfZXZlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtb3NhcnRfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtb3NhcnRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1vc2FydF9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZtb3NhcnRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobW9zYXJ0X2luaXQpOworbW9kdWxlX2V4aXQobW9zYXJ0X2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYyBiL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jCmluZGV4IDQ5Y2U2OWQuLjMyMzRjNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jCkBAIC0yNSwxMSArMjUsMTYgQEAKIAkJCQkJRVZfS0VZLCAoYykpCiAKIHN0cnVjdCBudHJpZ19kYXRhIHsKLQlfX3MzMiB4LCB5LCBpZCwgdywgaDsKLQljaGFyIHJlYWRpbmdfYV9wb2ludCwgZm91bmRfY29udGFjdF9pZDsKLQljaGFyIHBlbl9hY3RpdmU7Ci0JY2hhciBmaW5nZXJfYWN0aXZlOwotCWNoYXIgaW52ZXJ0ZWQ7CisJLyogSW5jb21pbmcgcmF3IHZhbHVlcyBmb3IgYSBzaW5nbGUgY29udGFjdCAqLworCV9fdTE2IHgsIHksIHcsIGg7CisJX191MTYgaWQ7CisJX191OCBjb25maWRlbmNlOworCisJYm9vbCByZWFkaW5nX210OworCV9fdTggZmlyc3RfY29udGFjdF9jb25maWRlbmNlOworCisJX191OCBtdF9mb290ZXJbNF07CisJX191OCBtdF9mb290X2NvdW50OwogfTsKIAogLyoKQEAgLTQyLDggKzQ3LDExIEBACiAJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKIAkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCiB7Ci0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKwkvKiBObyBzcGVjaWFsIG1hcHBpbmdzIG5lZWRlZCBmb3IgdGhlIHBlbiBhbmQgc2luZ2xlIHRvdWNoICovCisJaWYgKGZpZWxkLT5waHlzaWNhbCkKKwkJcmV0dXJuIDA7CiAKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgewogCWNhc2UgSElEX1VQX0dFTkRFU0s6CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQljYXNlIEhJRF9HRF9YOgpAQCAtNjYsMTggKzc0LDEyIEBACiAJY2FzZSBISURfVVBfRElHSVRJWkVSOgogCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKIAkJLyogd2UgZG8gbm90IHdhbnQgdG8gbWFwIHRoZXNlIGZvciBub3cgKi8KLQkJY2FzZSBISURfREdfQ09OVEFDVElEOiAvKiB2YWx1ZSBpcyB1c2VsZXNzICovCisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDogLyogTm90IHRydXN0d29ydGh5LCBzcXVlbGNoIGZvciBub3cgKi8KIAkJY2FzZSBISURfREdfSU5QVVRNT0RFOgogCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKLQkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgogCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgogCQkJcmV0dXJuIC0xOwogCi0JCS8qIG9yaWdpbmFsIG1hcHBpbmcgYnkgUmFmaSBSdWJpbiAqLwotCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgotCQkJbnRfbWFwX2tleV9jbGVhcihCVE5fVE9PTF9ET1VCTEVUQVApOwotCQkJcmV0dXJuIDE7Ci0KIAkJLyogd2lkdGgvaGVpZ2h0IG1hcHBlZCBvbiBUb3VjaE1ham9yL1RvdWNoTWlub3IvT3JpZW50YXRpb24gKi8KIAkJY2FzZSBISURfREdfV0lEVEg6CiAJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCkBAIC0xMDQsNiArMTA2LDEwIEBACiAJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKIAkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCiB7CisJLyogTm8gc3BlY2lhbCBtYXBwaW5ncyBuZWVkZWQgZm9yIHRoZSBwZW4gYW5kIHNpbmdsZSB0b3VjaCAqLworCWlmIChmaWVsZC0+cGh5c2ljYWwpCisJCXJldHVybiAwOworCiAJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9SRUwKIAkJCXx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKIAkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKQEAgLTEyMywzMSArMTI5LDMwIEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OwogCXN0cnVjdCBudHJpZ19kYXRhICpuZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOwogCisJLyogTm8gc3BlY2lhbCBoYW5kbGluZyBuZWVkZWQgZm9yIHRoZSBwZW4gKi8KKwlpZiAoZmllbGQtPmFwcGxpY2F0aW9uID09IEhJRF9ER19QRU4pCisJCXJldHVybiAwOworCiAgICAgICAgIGlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgewogCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKLQotCQljYXNlIEhJRF9ER19JTlJBTkdFOgotCQkJaWYgKGZpZWxkLT5hcHBsaWNhdGlvbiAmIDB4MykKLQkJCQluZC0+cGVuX2FjdGl2ZSA9ICh2YWx1ZSAhPSAwKTsKLQkJCWVsc2UKLQkJCQluZC0+ZmluZ2VyX2FjdGl2ZSA9ICh2YWx1ZSAhPSAwKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0RHX0lOVkVSVDoKLQkJCW5kLT5pbnZlcnRlZCA9IHZhbHVlOwotCQkJcmV0dXJuIDA7Ci0KKwkJY2FzZSAweGZmMDAwMDAxOgorCQkJLyogVGFnIGluZGljYXRpbmcgdGhlIHN0YXJ0IG9mIGEgbXVsdGl0b3VjaCBncm91cCAqLworCQkJbmQtPnJlYWRpbmdfbXQgPSAxOworCQkJbmQtPmZpcnN0X2NvbnRhY3RfY29uZmlkZW5jZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJCW5kLT5jb25maWRlbmNlID0gdmFsdWU7CisJCQlicmVhazsKIAkJY2FzZSBISURfR0RfWDoKIAkJCW5kLT54ID0gdmFsdWU7Ci0JCQluZC0+cmVhZGluZ19hX3BvaW50ID0gMTsKKwkJCS8qIENsZWFyIHRoZSBjb250YWN0IGZvb3RlciAqLworCQkJbmQtPm10X2Zvb3RfY291bnQgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgSElEX0dEX1k6CiAJCQluZC0+eSA9IHZhbHVlOwogCQkJYnJlYWs7CiAJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKIAkJCW5kLT5pZCA9IHZhbHVlOwotCQkJLyogd2UgcmVjZWl2ZSB0aGlzIG9ubHkgd2hlbiBpbiBtdWx0aXRvdWNoIG1vZGUgKi8KLQkJCW5kLT5mb3VuZF9jb250YWN0X2lkID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIEhJRF9ER19XSURUSDoKIAkJCW5kLT53ID0gdmFsdWU7CkBAIC0xNTksMzUgKzE2NCwxMyBAQAogCQkJICogcmVwb3J0IHJlY2VpdmVkIGluIGEgZmluZ2VyIGV2ZW50LiBXZSB3YW50CiAJCQkgKiB0byBlbWl0IGEgbm9ybWFsIChYLCBZKSBwb3NpdGlvbgogCQkJICovCi0JCQlpZiAoIW5kLT5mb3VuZF9jb250YWN0X2lkKSB7Ci0JCQkJaWYgKG5kLT5wZW5fYWN0aXZlICYmIG5kLT5maW5nZXJfYWN0aXZlKSB7Ci0JCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMCk7Ci0JCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMSk7Ci0JCQkJfQorCQkJaWYgKCFuZC0+cmVhZGluZ19tdCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwKKwkJCQkJCSAobmQtPmNvbmZpZGVuY2UgIT0gMCkpOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBuZC0+eCk7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKLQkJCS8qCi0JCQkgKiB3aGVuIGluIHNpbmdsZSB0b3VjaCBtb2RlLCB0aGlzIGlzIHRoZSBsYXN0Ci0JCQkgKiByZXBvcnQgcmVjZWl2ZWQgaW4gYSBwZW4gZXZlbnQuIFdlIHdhbnQKLQkJCSAqIHRvIGVtaXQgYSBub3JtYWwgKFgsIFkpIHBvc2l0aW9uCi0JCQkgKi8KLQkJCWlmICghIG5kLT5mb3VuZF9jb250YWN0X2lkKSB7Ci0JCQkJaWYgKG5kLT5wZW5fYWN0aXZlICYmIG5kLT5maW5nZXJfYWN0aXZlKSB7Ci0JCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCi0JCQkJCQkJbmQtPmludmVydGVkID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOCi0JCQkJCQkJLCAwKTsKLQkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKLQkJCQkJCQluZC0+aW52ZXJ0ZWQgPyBCVE5fVE9PTF9SVUJCRVIgOiBCVE5fVE9PTF9QRU4KLQkJCQkJCQksIDEpOwotCQkJCX0KLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOwotCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBuZC0+eSk7Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1BSRVNTVVJFLCB2YWx1ZSk7Ci0JCQl9Ci0JCQlicmVhazsKIAkJY2FzZSAweGZmMDAwMDAyOgogCQkJLyoKIAkJCSAqIHdlIHJlY2VpdmUgdGhpcyB3aGVuIHRoZSBkZXZpY2UgaXMgaW4gbXVsdGl0b3VjaApAQCAtMTk1LDEwICsxNzgsMzQgQEAKIAkJCSAqIHRoaXMgdXNhZ2UgdGVsbHMgaWYgdGhlIGNvbnRhY3QgcG9pbnQgaXMgcmVhbAogCQkJICogb3IgYSBwbGFjZWhvbGRlcgogCQkJICovCi0JCQlpZiAoIW5kLT5yZWFkaW5nX2FfcG9pbnQgfHwgdmFsdWUgIT0gMSkKKworCQkJLyogU2hvdWxkbid0IGdldCBtb3JlIHRoYW4gNCBmb290ZXIgcGFja2V0cywgc28gc2tpcCAqLworCQkJaWYgKG5kLT5tdF9mb290X2NvdW50ID49IDQpCiAJCQkJYnJlYWs7CisKKwkJCW5kLT5tdF9mb290ZXJbbmQtPm10X2Zvb3RfY291bnQrK10gPSB2YWx1ZTsKKworCQkJLyogaWYgdGhlIGZvb3RlciBpc24ndCBjb21wbGV0ZSBicmVhayAqLworCQkJaWYgKG5kLT5tdF9mb290X2NvdW50ICE9IDQpCisJCQkJYnJlYWs7CisKKwkJCS8qIFBlbiBhY3Rpdml0eSBzaWduYWwsIHRyaWdnZXIgZW5kIG9mIHRvdWNoLiAqLworCQkJaWYgKG5kLT5tdF9mb290ZXJbMl0pIHsKKwkJCQluZC0+Y29uZmlkZW5jZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIElmIHRoZSBjb250YWN0IHdhcyBpbnZhbGlkICovCisJCQlpZiAoIShuZC0+Y29uZmlkZW5jZSAmJiBuZC0+bXRfZm9vdGVyWzBdKQorCQkJCQl8fCBuZC0+dyA8PSAyNTAKKwkJCQkJfHwgbmQtPmggPD0gMTkwKSB7CisJCQkJbmQtPmNvbmZpZGVuY2UgPSAwOworCQkJCWJyZWFrOworCQkJfQorCiAJCQkvKiBlbWl0IGEgbm9ybWFsIChYLCBZKSBmb3IgdGhlIGZpcnN0IHBvaW50IG9ubHkgKi8KIAkJCWlmIChuZC0+aWQgPT0gMCkgeworCQkJCW5kLT5maXJzdF9jb250YWN0X2NvbmZpZGVuY2UgPSBuZC0+Y29uZmlkZW5jZTsKIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBuZC0+eSk7CiAJCQl9CkBAIC0yMjAsOCArMjI3LDM5IEBACiAJCQkJCQlBQlNfTVRfVE9VQ0hfTUlOT1IsIG5kLT53KTsKIAkJCX0KIAkJCWlucHV0X210X3N5bmMoZmllbGQtPmhpZGlucHV0LT5pbnB1dCk7Ci0JCQluZC0+cmVhZGluZ19hX3BvaW50ID0gMDsKLQkJCW5kLT5mb3VuZF9jb250YWN0X2lkID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDogLyogRW5kIG9mIGEgbXVsdGl0b3VjaCBncm91cCAqLworCQkJaWYgKCFuZC0+cmVhZGluZ19tdCkKKwkJCQlicmVhazsKKworCQkJbmQtPnJlYWRpbmdfbXQgPSAwOworCisJCQlpZiAobmQtPmZpcnN0X2NvbnRhY3RfY29uZmlkZW5jZSkgeworCQkJCXN3aXRjaCAodmFsdWUpIHsKKwkJCQljYXNlIDA6CS8qIGZvciBzaW5nbGUgdG91Y2ggZGV2aWNlcyAqLworCQkJCWNhc2UgMToKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCQlCVE5fVE9PTF9ET1VCTEVUQVAsIDEpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJQlROX1RPT0xfVFJJUExFVEFQLCAxKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCWRlZmF1bHQ6CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJQlROX1RPT0xfUVVBRFRBUCwgMSk7CisJCQkJfQorCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMSk7CisJCQl9IGVsc2UgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQlCVE5fVE9PTF9ET1VCTEVUQVAsIDApOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQlCVE5fVE9PTF9UUklQTEVUQVAsIDApOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQlCVE5fVE9PTF9RVUFEVEFQLCAwKTsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0yMzEsOCArMjY5LDggQEAKIAl9CiAKIAkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLwotICAgICAgICBpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKLSAgICAgICAgICAgICAgICBoaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKwlpZiAoKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFVikgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKIAogCXJldHVybiAxOwogfQpAQCAtMjQxLDIzICsyNzksNjcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBudHJpZ19kYXRhICpuZDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKworCWlmIChpZC0+ZHJpdmVyX2RhdGEpCisJCWhkZXYtPnF1aXJrcyB8PSBISURfUVVJUktfTVVMVElfSU5QVVQ7CiAKIAluZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBudHJpZ19kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZCkgewogCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgTi1UcmlnIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbmQtPnJlYWRpbmdfYV9wb2ludCA9IDA7Ci0JbmQtPmZvdW5kX2NvbnRhY3RfaWQgPSAwOworCisJbmQtPnJlYWRpbmdfbXQgPSAwOwogCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBuZCk7CiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQogCi0JaWYgKHJldCkKLQkJa2ZyZWUgKG5kKTsKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KIAorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShoaWRpbnB1dCwgJmhkZXYtPmlucHV0cywgbGlzdCkgeworCQlpbnB1dCA9IGhpZGlucHV0LT5pbnB1dDsKKwkJc3dpdGNoIChoaWRpbnB1dC0+cmVwb3J0LT5maWVsZFswXS0+YXBwbGljYXRpb24pIHsKKwkJY2FzZSBISURfREdfUEVOOgorCQkJaW5wdXQtPm5hbWUgPSAiTi1UcmlnIFBlbiI7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfVE9VQ0hTQ1JFRU46CisJCQlfX2NsZWFyX2JpdChCVE5fVE9PTF9QRU4sIGlucHV0LT5rZXliaXQpOworCQkJLyoKKwkJCSAqIEEgbGl0dGxlIHNvbWV0aGluZyBzcGVjaWFsIHRvIGVuYWJsZQorCQkJICogdHdvIGFuZCB0aHJlZSBmaW5nZXIgdGFwcy4KKwkJCSAqLworCQkJX19zZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgaW5wdXQtPmtleWJpdCk7CisJCQlfX3NldF9iaXQoQlROX1RPT0xfVFJJUExFVEFQLCBpbnB1dC0+a2V5Yml0KTsKKwkJCV9fc2V0X2JpdChCVE5fVE9PTF9RVUFEVEFQLCBpbnB1dC0+a2V5Yml0KTsKKwkJCS8qCisJCQkgKiBUaGUgcGh5c2ljYWwgdG91Y2hzY3JlZW4gKHNpbmdsZSB0b3VjaCkKKwkJCSAqIGlucHV0IGhhcyBhIHZhbHVlIGZvciBwaHlzaWNhbCwgd2hlcmVhcworCQkJICogdGhlIG11bHRpdG91Y2ggb25seSBoYXMgbG9naWNhbCBpbnB1dAorCQkJICogZmllbGRzLgorCQkJICovCisJCQlpbnB1dC0+bmFtZSA9CisJCQkJKGhpZGlucHV0LT5yZXBvcnQtPmZpZWxkWzBdCisJCQkJIC0+cGh5c2ljYWwpID8KKwkJCQkiTi1UcmlnIFRvdWNoc2NyZWVuIiA6CisJCQkJIk4tVHJpZyBNdWx0aVRvdWNoIjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnJfZnJlZToKKwlrZnJlZShuZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjc2LDcgKzM1OCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIG50cmlnX2dyYWJiZWRfdXNhZ2VzW10gPSB7CiAJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCi0JeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSB9CiB9OwogCiBzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbnRyaWdfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMgYi9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTlhOTYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBPcnRlayBXS0ItMjAwMCAod2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZCkuCisgKiAgRml4ZXMgTG9naWNhbE1heGltdW0gZXJyb3IgaW4gVVNCIHJlcG9ydCBkZXNjcmlwdGlvbiwgc2VlCisgKiAgaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzg3CisgKgorICogIENvcHlyaWdodCAoYykgMjAxMCBKb2huYXRob24gSGFycmlzIDxqbWhhcnJpc0BnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdGF0aWMgdm9pZCBvcnRla19yZXBvcnRfZml4dXAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKnJkZXNjLAorCQl1bnNpZ25lZCBpbnQgcnNpemUpCit7CisJaWYgKHJzaXplID49IDU2ICYmIHJkZXNjWzU0XSA9PSAweDI1ICYmIHJkZXNjWzU1XSA9PSAweDAxKSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJGaXhpbmcgdXAgT3J0ZWsgV0tCLTIwMDAgIgorCQkJCSJyZXBvcnQgZGVzY3JpcHRvci5cbiIpOworCQlyZGVzY1s1NV0gPSAweDkyOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG9ydGVrX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT1JURUssIFVTQl9ERVZJQ0VfSURfT1JURUtfV0tCMjAwMCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgb3J0ZWtfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBvcnRla19kcml2ZXIgPSB7CisJLm5hbWUgPSAib3J0ZWsiLAorCS5pZF90YWJsZSA9IG9ydGVrX2RldmljZXMsCisJLnJlcG9ydF9maXh1cCA9IG9ydGVrX3JlcG9ydF9maXh1cAorfTsKKworc3RhdGljIGludCBfX2luaXQgb3J0ZWtfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZvcnRla19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb3J0ZWtfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmb3J0ZWtfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob3J0ZWtfaW5pdCk7Cittb2R1bGVfZXhpdChvcnRla19leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1xdWFudGEuYyBiL2RyaXZlcnMvaGlkL2hpZC1xdWFudGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWRkNTFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXF1YW50YS5jCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIFF1YW50YSBPcHRpY2FsIFRvdWNoIGR1YWwtdG91Y2ggcGFuZWxzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUXVhbnRhIGR1YWwtdG91Y2ggcGFuZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RydWN0IHF1YW50YV9kYXRhIHsKKwlfX3UxNiB4LCB5OworCV9fdTggaWQ7CisJYm9vbCB2YWxpZDsJCS8qIHZhbGlkIGZpbmdlciBkYXRhLCBvciBqdXN0IHBsYWNlaG9sZGVyPyAqLworCWJvb2wgZmlyc3Q7CQkvKiBpcyB0aGlzIHRoZSBmaXJzdCBmaW5nZXIgaW4gdGhpcyBmcmFtZT8gKi8KKwlib29sIGFjdGl2aXR5X25vdzsJLyogYXQgbGVhc3Qgb25lIGFjdGl2ZSBmaW5nZXIgaW4gdGhpcyBmcmFtZT8gKi8KKwlib29sIGFjdGl2aXR5OwkJLyogYXQgbGVhc3Qgb25lIGFjdGl2ZSBmaW5nZXIgcHJldmlvdXNseT8gKi8KK307CisKK3N0YXRpYyBpbnQgcXVhbnRhX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CisKKwljYXNlIEhJRF9VUF9HRU5ERVNLOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfR0RfWDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1gsCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfR0RfWToKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJY2FzZSBISURfREdfSU5QVVRNT0RFOgorCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgorCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCWNhc2UgSElEX0RHX0hFSUdIVDoKKwkJCXJldHVybiAtMTsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgMHhmZjAwMDAwMDoKKwkJLyogaWdub3JlIHZlbmRvci1zcGVjaWZpYyBmZWF0dXJlcyAqLworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXVhbnRhX2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCisJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB3aG9sZSBmaW5nZXIgaGFzIGJlZW4gcGFyc2VkLAorICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHF1YW50YV9maWx0ZXJfZXZlbnQoc3RydWN0IHF1YW50YV9kYXRhICp0ZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJCisJdGQtPmZpcnN0ID0gIXRkLT5maXJzdDsgLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisKKwlpZiAoIXRkLT52YWxpZCkgeworCQkvKgorCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIG5vIGZpbmdlciBpbiB0aGlzIGZyYW1lIGlzIHZhbGlkCisJCSAqIGFuZCB0aGVyZSBwcmV2aW91c2x5IHdhcyBmaW5nZXIgYWN0aXZpdHksIHRoaXMgaXMgYSByZWxlYXNlCisJCSAqLyAKKwkJaWYgKCF0ZC0+Zmlyc3QgJiYgIXRkLT5hY3Rpdml0eV9ub3cgJiYgdGQtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOworCQkJdGQtPmFjdGl2aXR5ID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgdGQtPmlkKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgdGQtPngpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCB0ZC0+eSk7CisKKwlpbnB1dF9tdF9zeW5jKGlucHV0KTsKKwl0ZC0+dmFsaWQgPSBmYWxzZTsKKworCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgZmlyc3QgYWN0aXZlIGZpbmdlciBpbiB0aGlzIGZyYW1lLi4uICovCisJaWYgKCF0ZC0+YWN0aXZpdHlfbm93KSB7CisJCS8qIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBhY3Rpdml0eSwgZW1pdCB0b3VjaCBldmVudCAqLworCQlpZiAoIXRkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKKwkJCXRkLT5hY3Rpdml0eSA9IHRydWU7CisJCX0KKwkJdGQtPmFjdGl2aXR5X25vdyA9IHRydWU7CisJCS8qIGFuZCBpbiBhbnkgY2FzZSB0aGlzIGlzIG91ciBwcmVmZXJyZWQgZmluZ2VyICovCisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCB0ZC0+eCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCB0ZC0+eSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgcXVhbnRhX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcXVhbnRhX2RhdGEgKnRkID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7CisKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKKwkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJdGQtPnZhbGlkID0gISF2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9YOgorCQkJdGQtPnggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9ZOgorCQkJdGQtPnkgPSB2YWx1ZTsKKwkJCXF1YW50YV9maWx0ZXJfZXZlbnQodGQsIGlucHV0KTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQl0ZC0+aWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCQkvKiB0b3VjaCBlbXVsYXRpb246IHRoaXMgaXMgdGhlIGxhc3QgZmllbGQgaW4gYSBmcmFtZSAqLworCQkJdGQtPmZpcnN0ID0gZmFsc2U7CisJCQl0ZC0+YWN0aXZpdHlfbm93ID0gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJLyogYXZvaWQgaW50ZXJmZXJlbmNlIGZyb20gZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIGZhbGxiYWNrIHRvIHRoZSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCisJCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcXVhbnRhX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcXVhbnRhX2RhdGEgKnRkOworCisJdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcXVhbnRhX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRkKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBRdWFudGEgVG91Y2ggZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl0ZC0+dmFsaWQgPSBmYWxzZTsKKwl0ZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwl0ZC0+YWN0aXZpdHlfbm93ID0gZmFsc2U7CisJdGQtPmZpcnN0ID0gZmFsc2U7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHRkKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCkKKwkJa2ZyZWUodGQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcXVhbnRhX3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHF1YW50YV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwKKwkJCVVTQl9ERVZJQ0VfSURfUVVBTlRBX09QVElDQUxfVE9VQ0gpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwKKwkJCVVTQl9ERVZJQ0VfSURfUElYQVJUX0lNQUdJTkdfSU5DX09QVElDQUxfVE9VQ0hfU0NSRUVOKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBxdWFudGFfZGV2aWNlcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIHF1YW50YV9ncmFiYmVkX3VzYWdlc1tdID0geworCXsgSElEX0FOWV9JRCwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCB9LAorCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBxdWFudGFfZHJpdmVyID0geworCS5uYW1lID0gInF1YW50YS10b3VjaCIsCisJLmlkX3RhYmxlID0gcXVhbnRhX2RldmljZXMsCisJLnByb2JlID0gcXVhbnRhX3Byb2JlLAorCS5yZW1vdmUgPSBxdWFudGFfcmVtb3ZlLAorCS5pbnB1dF9tYXBwaW5nID0gcXVhbnRhX2lucHV0X21hcHBpbmcsCisJLmlucHV0X21hcHBlZCA9IHF1YW50YV9pbnB1dF9tYXBwZWQsCisJLnVzYWdlX3RhYmxlID0gcXVhbnRhX2dyYWJiZWRfdXNhZ2VzLAorCS5ldmVudCA9IHF1YW50YV9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHF1YW50YV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnF1YW50YV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcXVhbnRhX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnF1YW50YV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChxdWFudGFfaW5pdCk7Cittb2R1bGVfZXhpdChxdWFudGFfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCmluZGV4IDRlODQ1MDIuLjliZjAwZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpAQCAtNDgsNyArNDgsNyBAQAogICogdG8gIm9wZXJhdGlvbmFsIi4gIFdpdGhvdXQgdGhpcywgdGhlIHBzMyBjb250cm9sbGVyIHdpbGwgbm90IHJlcG9ydCBhbnkKICAqIGV2ZW50cy4KICAqLwotc3RhdGljIGludCBzb255X3NldF9vcGVyYXRpb25hbChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3N0YXRpYyBpbnQgc29ueV9zZXRfb3BlcmF0aW9uYWxfdXNiKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQogewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShoZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKQEAgLTczLDYgKzczLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzb255X3NldF9vcGVyYXRpb25hbF9idChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltdID0geyAweDUzLCAweGY0LCAgMHg0MiwgMHgwMywgMHgwMCwgMHgwMCB9OworCXJldHVybiBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgYnVmLCBzaXplb2YoYnVmKSwgSElEX0ZFQVRVUkVfUkVQT1JUKTsKK30KKwogc3RhdGljIGludCBzb255X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHJldDsKQEAgLTgxLDcgKzg3LDcgQEAKIAogCXNjID0ga3phbGxvYyhzaXplb2YoKnNjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNjID09IE5VTEwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgYXBwbGUgZGVzY3JpcHRvclxuIik7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIHNvbnkgZGVzY3JpcHRvclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTAxLDcgKzEwNywxNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCXJldCA9IHNvbnlfc2V0X29wZXJhdGlvbmFsKGhkZXYpOworCXN3aXRjaCAoaGRldi0+YnVzKSB7CisJY2FzZSBCVVNfVVNCOgorCQlyZXQgPSBzb255X3NldF9vcGVyYXRpb25hbF91c2IoaGRldik7CisJCWJyZWFrOworCWNhc2UgQlVTX0JMVUVUT09USDoKKwkJcmV0ID0gc29ueV9zZXRfb3BlcmF0aW9uYWxfYnQoaGRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IDA7CisJfQorCiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3N0b3A7CiAKQEAgLTEyMSw2ICsxMzcsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgc29ueV9kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfVkFJT19WR1hfTU9VU0UpLAogCQkuZHJpdmVyX2RhdGEgPSBWQUlPX1JERVNDX0NPTlNUQU5UIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc3RhbnR1bS5jIGIvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTU5MmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYwpAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBTdGFudHVtIG11bHRpdG91Y2ggcGFuZWxzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN0YW50dW0gSElEIG11bHRpdG91Y2ggcGFuZWxzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBzdGFudHVtX2RhdGEgeworCV9fczMyIHgsIHksIHosIHcsIGg7CS8qIHgsIHksIHByZXNzdXJlLCB3aWR0aCwgaGVpZ2h0ICovCisJX191MTYgaWQ7CQkvKiB0b3VjaCBpZCAqLworCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KKwlib29sIGZpcnN0OwkJLyogZmlyc3QgZmluZ2VyIGluIHRoZSBISUQgcGFja2V0PyAqLworCWJvb2wgYWN0aXZpdHk7CQkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBzbyBmYXI/ICovCit9OworCitzdGF0aWMgaW50IHN0YW50dW1faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0dFTkRFU0s6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9HRF9YOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWCwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9HRF9ZOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfSU5QVVRNT0RFOgorCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgorCQkJcmV0dXJuIC0xOworCisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIEhJRF9ER19XSURUSDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUFKT1IpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX0hFSUdIVDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUlOT1IpOworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sCisJCQkJCTEsIDEsIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QUkVTU1VSRSk7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lEKTsKKwkJCXJldHVybiAxOworCisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIDB4ZmYwMDAwMDA6CisJCS8qIG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YW50dW1faW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKKwkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIGZpbmdlciBoYXMgYmVlbiBwYXJzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KKyAqLworc3RhdGljIHZvaWQgc3RhbnR1bV9maWx0ZXJfZXZlbnQoc3RydWN0IHN0YW50dW1fZGF0YSAqc2QsCisJCQkJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCWJvb2wgd2lkZTsKKworCWlmICghc2QtPnZhbGlkKSB7CisJCS8qCisJCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgdGhlIGZpcnN0IGZpbmdlciBpcyBub3QgdmFsaWQgYW5kCisJCSAqIHRoZXJlIHByZXZpb3VzbHkgd2FzIGZpbmdlciBhY3Rpdml0eSwgdGhpcyBpcyBhIHJlbGVhc2UKKwkJICovCisJCWlmIChzZC0+Zmlyc3QgJiYgc2QtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOworCQkJc2QtPmFjdGl2aXR5ID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgc2QtPmlkKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgc2QtPngpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBzZC0+eSk7CisKKwl3aWRlID0gKHNkLT53ID4gc2QtPmgpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9PUklFTlRBVElPTiwgd2lkZSk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01BSk9SLCB3aWRlID8gc2QtPncgOiBzZC0+aCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SLCB3aWRlID8gc2QtPmggOiBzZC0+dyk7CisKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUsIHNkLT56KTsKKworCWlucHV0X210X3N5bmMoaW5wdXQpOworCXNkLT52YWxpZCA9IGZhbHNlOworCisJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJaWYgKHNkLT5maXJzdCkgeworCQlpZiAoIXNkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKKwkJCXNkLT5hY3Rpdml0eSA9IHRydWU7CisJCX0KKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIHNkLT54KTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIHNkLT55KTsKKwl9CisJc2QtPmZpcnN0ID0gZmFsc2U7Cit9CisKKworc3RhdGljIGludCBzdGFudHVtX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3RhbnR1bV9kYXRhICpzZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKworCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCS8qIHRoaXMgaXMgdGhlIGxhc3QgZmllbGQgaW4gYSBmaW5nZXIgKi8KKwkJCXN0YW50dW1fZmlsdGVyX2V2ZW50KHNkLCBpbnB1dCk7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCQlzZC0+dyA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0hFSUdIVDoKKwkJCXNkLT5oID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWDoKKwkJCXNkLT54ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWToKKwkJCXNkLT55ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6CisJCQlzZC0+eiA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCXNkLT5pZCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCQlzZC0+dmFsaWQgPSAhIXZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgMHhmZjAwMDAwMjoKKwkJCS8qIHRoaXMgY29tZXMgb25seSBiZWZvcmUgdGhlIGZpcnN0IGZpbmdlciAqLworCQkJc2QtPmZpcnN0ID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBpZ25vcmUgdGhlIG90aGVycyAqLworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHN0YW50dW1fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCQkJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IHN0YW50dW1fZGF0YSAqc2Q7CisKKwlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGFudHVtX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBTdGFudHVtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2QtPnZhbGlkID0gZmFsc2U7CisJc2QtPmZpcnN0ID0gZmFsc2U7CisJc2QtPmFjdGl2aXR5ID0gZmFsc2U7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHNkKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCkKKwkJa2ZyZWUoc2QpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RhbnR1bV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBzdGFudHVtX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1RBTlRVTSwgVVNCX0RFVklDRV9JRF9NVFApIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHN0YW50dW1fZGV2aWNlcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIHN0YW50dW1fZ3JhYmJlZF91c2FnZXNbXSA9IHsKKwl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgc3RhbnR1bV9kcml2ZXIgPSB7CisJLm5hbWUgPSAic3RhbnR1bSIsCisJLmlkX3RhYmxlID0gc3RhbnR1bV9kZXZpY2VzLAorCS5wcm9iZSA9IHN0YW50dW1fcHJvYmUsCisJLnJlbW92ZSA9IHN0YW50dW1fcmVtb3ZlLAorCS5pbnB1dF9tYXBwaW5nID0gc3RhbnR1bV9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBzdGFudHVtX2lucHV0X21hcHBlZCwKKwkudXNhZ2VfdGFibGUgPSBzdGFudHVtX2dyYWJiZWRfdXNhZ2VzLAorCS5ldmVudCA9IHN0YW50dW1fZXZlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzdGFudHVtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmc3RhbnR1bV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3RhbnR1bV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZzdGFudHVtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHN0YW50dW1faW5pdCk7Cittb2R1bGVfZXhpdChzdGFudHVtX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCmluZGV4IDEyZGNkYTUuLjhkM2I0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCkBAIC0xNTYsNyArMTU2LDkgQEAKIAlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAlzdHJ1Y3Qgd2Fjb21fZGF0YSAqd2RhdGE7CisJY2hhciByZXBfZGF0YVsyXTsKIAlpbnQgcmV0OworCWludCBsaW1pdDsKIAogCXdkYXRhID0ga3phbGxvYyhzaXplb2YoKndkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHdkYXRhID09IE5VTEwpIHsKQEAgLTE2Niw2ICsxNjgsNyBAQAogCiAJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHdkYXRhKTsKIAorCS8qIFBhcnNlIHRoZSBISUQgcmVwb3J0IG5vdyAqLwogCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CkBAIC0xNzgsNiArMTgxLDMxIEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCisJLyoKKwkgKiBOb3RlIHRoYXQgaWYgdGhlIHJhdyBxdWVyaWVzIGZhaWwsIGl0J3Mgbm90IGEgaGFyZCBmYWlsdXJlIGFuZCBpdAorCSAqIGlzIHNhZmUgdG8gY29udGludWUKKwkgKi8KKworCS8qIFNldCBXYWNvbSBtb2RlMiAqLworCXJlcF9kYXRhWzBdID0gMHgwMzsgcmVwX2RhdGFbMV0gPSAweDAwOworCWxpbWl0ID0gMzsKKwlkbyB7CisJCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCByZXBfZGF0YSwgMiwKKwkJCQlISURfRkVBVFVSRV9SRVBPUlQpOworCX0gd2hpbGUgKHJldCA8IDAgJiYgbGltaXQtLSA+IDApOworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybigmaGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBva2UgZGV2aWNlICMxLCAlZFxuIiwgcmV0KTsKKworCS8qIDB4MDYgLSBoaWdoIHJlcG9ydGluZyBzcGVlZCwgMHgwNSAtIGxvdyBzcGVlZCAqLworCXJlcF9kYXRhWzBdID0gMHgwNjsgcmVwX2RhdGFbMV0gPSAweDAwOworCWxpbWl0ID0gMzsKKwlkbyB7CisJCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCByZXBfZGF0YSwgMiwKKwkJCQlISURfRkVBVFVSRV9SRVBPUlQpOworCX0gd2hpbGUgKHJldCA8IDAgJiYgbGltaXQtLSA+IDApOworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybigmaGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBva2UgZGV2aWNlICMyLCAlZFxuIiwgcmV0KTsKKwogCWhpZGlucHV0ID0gbGlzdF9lbnRyeShoZGV2LT5pbnB1dHMubmV4dCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CiAJaW5wdXQgPSBoaWRpbnB1dC0+aW5wdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKaW5kZXggY2RkMTM2OS4uZDA0NDc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkcmF3LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChkZXYsIGJ1ZiwgY291bnQpOworCXJldCA9IGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGRldiwgYnVmLCBjb3VudCwgSElEX09VVFBVVF9SRVBPUlQpOwogb3V0OgogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKaW5kZXggZTI5OTdhOC4uNTZkMDZjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKICAqICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBPbGl2ZXIgTmV1a3VtCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMCBKaXJpIEtvc2luYQogICovCiAKIC8qCkBAIC0zMTYsNiArMzE2LDcgQEAKIAkJCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKG91dCkgZmFpbGVkIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KKwkJdXNiaGlkLT5sYXN0X291dCA9IGppZmZpZXM7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogcXVldWUgd29yayB0byB3YWtlIHVwIHRoZSBkZXZpY2UuCkBAIC0zNzcsNiArMzc4LDcgQEAKIAkJCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKGN0cmwpIGZhaWxlZCIpOwogCQkJcmV0dXJuIC0xOwogCQl9CisJCXVzYmhpZC0+bGFzdF9jdHJsID0gamlmZmllczsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBxdWV1ZSB3b3JrIHRvIHdha2UgdXAgdGhlIGRldmljZS4KQEAgLTUxMiw5ICs1MTQsMjAgQEAKIAkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yZXBvcnQgPSByZXBvcnQ7CiAJCXVzYmhpZC0+b3V0aGVhZCA9IGhlYWQ7CiAKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKSB7CiAJCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkKIAkJCQljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiB0aGUgcXVldWUgaXMga25vd24gdG8gcnVuCisJCQkgKiBidXQgYW4gZWFybGllciByZXF1ZXN0IG1heSBiZSBzdHVjaworCQkJICogd2UgbWF5IG5lZWQgdG8gdGltZSBvdXQKKwkJCSAqIG5vIHJhY2UgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCB1bmRlcgorCQkJICogc3BpbmxvY2sKKwkJCSAqLworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdXNiaGlkLT5sYXN0X291dCArIEhaICogNSkpCisJCQkJdXNiX3VubGlua191cmIodXNiaGlkLT51cmJvdXQpOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTUzNSw5ICs1NDgsMjAgQEAKIAl1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0uZGlyID0gZGlyOwogCXVzYmhpZC0+Y3RybGhlYWQgPSBoZWFkOwogCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKQorCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkgewogCQlpZiAoaGlkX3N1Ym1pdF9jdHJsKGhpZCkpCiAJCQljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogdGhlIHF1ZXVlIGlzIGtub3duIHRvIHJ1bgorCQkgKiBidXQgYW4gZWFybGllciByZXF1ZXN0IG1heSBiZSBzdHVjaworCQkgKiB3ZSBtYXkgbmVlZCB0byB0aW1lIG91dAorCQkgKiBubyByYWNlIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgdW5kZXIKKwkJICogc3BpbmxvY2sKKwkJICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHVzYmhpZC0+bGFzdF9jdHJsICsgSFogKiA1KSkKKwkJCXVzYl91bmxpbmtfdXJiKHVzYmhpZC0+dXJiY3RybCk7CisJfQogfQogCiB2b2lkIHVzYmhpZF9zdWJtaXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHVuc2lnbmVkIGNoYXIgZGlyKQpAQCAtNzc0LDcgKzc5OCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIGludCB1c2JoaWRfb3V0cHV0X3Jhd19yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCAqYnVmLCBzaXplX3QgY291bnQsCisJCXVuc2lnbmVkIGNoYXIgcmVwb3J0X3R5cGUpCiB7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGhpZF90b191c2JfZGV2KGhpZCk7CkBAIC03ODUsNyArODEwLDcgQEAKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKIAkJSElEX1JFUV9TRVRfUkVQT1JULAogCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKLQkJKChISURfT1VUUFVUX1JFUE9SVCArIDEpIDw8IDgpIHwgKmJ1ZiwKKwkJKChyZXBvcnRfdHlwZSArIDEpIDw8IDgpIHwgKmJ1ZiwKIAkJaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIGJ1ZiArIDEsIGNvdW50IC0gMSwKIAkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCkBAIC05ODEsOSArMTAwNiw2IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmdXNiaGlkLT5sb2NrKTsKIAotCXVzYmhpZC0+aW50ZiA9IGludGY7Ci0JdXNiaGlkLT5pZm51bSA9IGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCiAJdXNiaGlkLT51cmJjdHJsID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVzYmhpZC0+dXJiY3RybCkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTE1NCw2ICsxMTc2LDggQEAKIAogCWhpZC0+ZHJpdmVyX2RhdGEgPSB1c2JoaWQ7CiAJdXNiaGlkLT5oaWQgPSBoaWQ7CisJdXNiaGlkLT5pbnRmID0gaW50ZjsKKwl1c2JoaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAKIAlyZXQgPSBoaWRfYWRkX2RldmljZShoaWQpOwogCWlmIChyZXQpIHsKQEAgLTEzNDIsNyArMTM2Niw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGhpZF91c2JfaWRzIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGhpZF91c2JfaWRzW10gPSB7CiAJeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUywKIAkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9JTlRFUkZBQ0VfQ0xBU1NfSElEIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IDM4NzczZGMuLjc4NDQyODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtNDMsOCArNDMsMTAgQEAKIAogCXsgVVNCX1ZFTkRPUl9JRF9BRkFURUNILCBVU0JfREVWSUNFX0lEX0FGQVRFQ0hfQUY5MDE2LCBISURfUVVJUktfRlVMTFNQRUVEX0lOVEVSVkFMIH0sCiAKKwl7IFVTQl9WRU5ET1JfSURfRVRVUkJPVE9VQ0gsIFVTQl9ERVZJQ0VfSURfRVRVUkJPVE9VQ0gsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9QQU5USEVSTE9SRCwgVVNCX0RFVklDRV9JRF9QQU5USEVSTE9SRF9UV0lOX1VTQl9KT1lTVElDSywgSElEX1FVSVJLX01VTFRJX0lOUFVUIHwgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMgfSwKIAl7IFVTQl9WRU5ET1JfSURfUExBWURPVENPTSwgVVNCX0RFVklDRV9JRF9QTEFZRE9UQ09NX0VNU19VU0JJSSwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX1RPVUNIUEFDSywgVVNCX0RFVklDRV9JRF9UT1VDSFBBQ0tfUlRTLCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl9DUzEyNFUsIEhJRF9RVUlSS19OT0dFVCB9LApAQCAtNTcsNiArNTksNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9DSCwgVVNCX0RFVklDRV9JRF9DSF8zQVhJU181QlVUVE9OX1NUSUNLLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfRE1JLCBVU0JfREVWSUNFX0lEX0RNSV9FTkMsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9FTE8sIFVTQl9ERVZJQ0VfSURfRUxPX1RTMjcwMCwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX1BST0RJR0UsIFVTQl9ERVZJQ0VfSURfUFJPRElHRV9DT1JETEVTUywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NVTiwgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9UVVJCT1gsIFVTQl9ERVZJQ0VfSURfVFVSQk9YX0tFWUJPQVJELCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVUNMT0dJQywgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9QRjEyMDksIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCmluZGV4IDA4ZjUwNWMuLmVjMjA0MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaAorKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKQEAgLTgwLDEyICs4MCwxNCBAQAogCXVuc2lnbmVkIGNoYXIgY3RybGhlYWQsIGN0cmx0YWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGZpZm8gaGVhZCAmIHRhaWwgKi8KIAljaGFyICpjdHJsYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBidWZmZXIgKi8KIAlkbWFfYWRkcl90IGN0cmxidWZfZG1hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBidWZmZXIgZG1hICovCisJdW5zaWduZWQgbG9uZyBsYXN0X2N0cmw7CQkJCQkJLyogcmVjb3JkIG9mIGxhc3Qgb3V0cHV0IGZvciB0aW1lb3V0cyAqLwogCiAJc3RydWN0IHVyYiAqdXJib3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBVUkIgKi8KIAlzdHJ1Y3QgaGlkX291dHB1dF9maWZvIG91dFtISURfQ09OVFJPTF9GSUZPX1NJWkVdOyAgICAgICAgICAgICAgLyogT3V0cHV0IHBpcGUgZmlmbyAqLwogCXVuc2lnbmVkIGNoYXIgb3V0aGVhZCwgb3V0dGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgcGlwZSBmaWZvIGhlYWQgJiB0YWlsICovCiAJY2hhciAqb3V0YnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgKi8KIAlkbWFfYWRkcl90IG91dGJ1Zl9kbWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlciBkbWEgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfb3V0OwkJCQkJCQkvKiByZWNvcmQgb2YgbGFzdCBvdXRwdXQgZm9yIHRpbWVvdXRzICovCiAKIAlzcGlubG9ja190IGxvY2s7CQkJCQkJLyogZmlmbyBzcGlubG9jayAqLwogCXVuc2lnbmVkIGxvbmcgaW9mbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJL08gZmxhZ3MgKENUUkxfUlVOTklORywgT1VUX1JVTk5JTkcpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkdDc0NjIuYyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ2Mi5jCmluZGV4IGEzMWU3N2MuLmI4MTU2YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWR0NzQ2Mi5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ2Mi5jCkBAIC0xNzksNyArMTc5LDcgQEAKICAqCiAgKiBTb21lLCBidXQgbm90IGFsbCwgb2YgdGhlc2Ugdm9sdGFnZXMgaGF2ZSBsb3cvaGlnaCBsaW1pdHMuCiAgKi8KLSNkZWZpbmUgQURUNzQ2Ml9WT0xUX0NPVU5UCTEyCisjZGVmaW5lIEFEVDc0NjJfVk9MVF9DT1VOVAkxMwogCiAjZGVmaW5lIEFEVDc0NjJfVkVORE9SCQkweDQxCiAjZGVmaW5lIEFEVDc0NjJfREVWSUNFCQkweDYyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwppbmRleCA2YzlhY2UxLi4yYWQ2MmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXJldHVybiAtRU5PREVWOwogfQogCi12b2lkIGFtc19leGl0KHZvaWQpCit2b2lkIGFtc19zZW5zb3JfZGV0YWNoKHZvaWQpCiB7CiAJLyogUmVtb3ZlIGlucHV0IGRldmljZSAqLwogCWFtc19pbnB1dF9leGl0KCk7CkBAIC0yMjEsOSArMjIxLDYgQEAKIAkvKiBSZW1vdmUgYXR0cmlidXRlcyAqLwogCWRldmljZV9yZW1vdmVfZmlsZSgmYW1zX2luZm8ub2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9jdXJyZW50KTsKIAotCS8qIFNodXQgZG93biBpbXBsZW1lbnRhdGlvbiAqLwotCWFtc19pbmZvLmV4aXQoKTsKLQogCS8qIEZsdXNoIGludGVycnVwdCB3b3JrZXIKIAkgKgogCSAqIFdlIGRvIHRoaXMgYWZ0ZXIgYW1zX2luZm8uZXhpdCgpLCBiZWNhdXNlIGFuIGludGVycnVwdCBtaWdodApAQCAtMjM5LDYgKzIzNiwxMiBAQAogCXBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQoJmFtc19mcmVlZmFsbF9jbGllbnQpOwogfQogCitzdGF0aWMgdm9pZCBfX2V4aXQgYW1zX2V4aXQodm9pZCkKK3sKKwkvKiBTaHV0IGRvd24gaW1wbGVtZW50YXRpb24gKi8KKwlhbXNfaW5mby5leGl0KCk7Cit9CisKIE1PRFVMRV9BVVRIT1IoIlN0ZWxpYW4gUG9wLCBNaWNoYWVsIEhhbnNlbG1hbm4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQXBwbGUgTW90aW9uIFNlbnNvciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYwppbmRleCAyY2JmOGE2Li5hYmVlY2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCkBAIC0yMzgsNiArMjM4LDggQEAKIHN0YXRpYyBpbnQgYW1zX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgeworCQlhbXNfc2Vuc29yX2RldGFjaCgpOworCiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCQlhbXNfaTJjX3NldF9pcnEoQU1TX0lSUV9BTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKaW5kZXggZmIxOGIzZC4uNGY2MWIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwpAQCAtMTMzLDYgKzEzMyw4IEBACiAKIHN0YXRpYyB2b2lkIGFtc19wbXVfZXhpdCh2b2lkKQogeworCWFtc19zZW5zb3JfZGV0YWNoKCk7CisKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlhbXNfcG11X3NldF9pcnEoQU1TX0lSUV9BTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaCBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCmluZGV4IDVlZDM4N2IuLmIyOGQ3ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCkBAIC02MSw2ICs2MSw3IEBACiAKIGV4dGVybiB2b2lkIGFtc19zZW5zb3JzKHM4ICp4LCBzOCAqeSwgczggKnopOwogZXh0ZXJuIGludCBhbXNfc2Vuc29yX2F0dGFjaCh2b2lkKTsKK2V4dGVybiB2b2lkIGFtc19zZW5zb3JfZGV0YWNoKHZvaWQpOwogCiBleHRlcm4gaW50IGFtc19wbXVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKIGV4dGVybiBpbnQgYW1zX2kyY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc4LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwppbmRleCBjYWRjYmQ5Li43MmZmMmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzguYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwpAQCAtODUxLDE3ICs4NTEsMTYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGxtNzhfaXNhX2ZvdW5kKHVuc2lnbmVkIHNob3J0IGFkZHJlc3MpCiB7CiAJaW50IHZhbCwgc2F2ZSwgZm91bmQgPSAwOworCWludCBwb3J0OwogCi0JLyogV2UgaGF2ZSB0byByZXF1ZXN0IHRoZSByZWdpb24gaW4gdHdvIHBhcnRzIGJlY2F1c2Ugc29tZQotCSAgIGJvYXJkcyBkZWNsYXJlIGJhc2UrNCB0byBiYXNlKzcgYXMgYSBQTlAgZGV2aWNlICovCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzLCA0LCAibG03OCIpKSB7Ci0JCXByX2RlYnVnKCJsbTc4OiBGYWlsZWQgdG8gcmVxdWVzdCBsb3cgcGFydCBvZiByZWdpb25cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzICsgNCwgNCwgImxtNzgiKSkgewotCQlwcl9kZWJ1ZygibG03ODogRmFpbGVkIHRvIHJlcXVlc3QgaGlnaCBwYXJ0IG9mIHJlZ2lvblxuIik7Ci0JCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIDQpOwotCQlyZXR1cm4gMDsKKwkvKiBTb21lIGJvYXJkcyBkZWNsYXJlIGJhc2UrMCB0byBiYXNlKzcgYXMgYSBQTlAgZGV2aWNlLCBzb21lIGJhc2UrNAorCSAqIHRvIGJhc2UrNyBhbmQgc29tZSBiYXNlKzUgdG8gYmFzZSs2LiBTbyB3ZSBiZXR0ZXIgcmVxdWVzdCBlYWNoIHBvcnQKKwkgKiBpbmRpdmlkdWFsbHkgZm9yIHRoZSBwcm9iaW5nIHBoYXNlLiAqLworCWZvciAocG9ydCA9IGFkZHJlc3M7IHBvcnQgPCBhZGRyZXNzICsgTE03OF9FWFRFTlQ7IHBvcnQrKykgeworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKHBvcnQsIDEsICJsbTc4IikpIHsKKwkJCXByX2RlYnVnKCJsbTc4OiBGYWlsZWQgdG8gcmVxdWVzdCBwb3J0IDB4JXhcbiIsIHBvcnQpOworCQkJZ290byByZWxlYXNlOworCQl9CiAJfQogCiAjZGVmaW5lIFJFQUxMWV9TTE9XX0lPCkBAIC05MjUsOCArOTI0LDggQEAKIAkJCXZhbCAmIDB4ODAgPyAiTE03OSIgOiAiTE03OCIsIChpbnQpYWRkcmVzcyk7CiAKICByZWxlYXNlOgotCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MgKyA0LCA0KTsKLQlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCA0KTsKKwlmb3IgKHBvcnQtLTsgcG9ydCA+PSBhZGRyZXNzOyBwb3J0LS0pCisJCXJlbGVhc2VfcmVnaW9uKHBvcnQsIDEpOwogCXJldHVybiBmb3VuZDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3ODFkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYwppbmRleCAwNWY5MjI1Li4zMmQ0YWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYwpAQCAtMTc5MywxNyArMTc5MywxNyBAQAogdzgzNzgxZF9pc2FfZm91bmQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKIHsKIAlpbnQgdmFsLCBzYXZlLCBmb3VuZCA9IDA7CisJaW50IHBvcnQ7CiAKLQkvKiBXZSBoYXZlIHRvIHJlcXVlc3QgdGhlIHJlZ2lvbiBpbiB0d28gcGFydHMgYmVjYXVzZSBzb21lCi0JICAgYm9hcmRzIGRlY2xhcmUgYmFzZSs0IHRvIGJhc2UrNyBhcyBhIFBOUCBkZXZpY2UgKi8KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsIDQsICJ3ODM3ODFkIikpIHsKLQkJcHJfZGVidWcoInc4Mzc4MWQ6IEZhaWxlZCB0byByZXF1ZXN0IGxvdyBwYXJ0IG9mIHJlZ2lvblxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MgKyA0LCA0LCAidzgzNzgxZCIpKSB7Ci0JCXByX2RlYnVnKCJ3ODM3ODFkOiBGYWlsZWQgdG8gcmVxdWVzdCBoaWdoIHBhcnQgb2YgcmVnaW9uXG4iKTsKLQkJcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgNCk7Ci0JCXJldHVybiAwOworCS8qIFNvbWUgYm9hcmRzIGRlY2xhcmUgYmFzZSswIHRvIGJhc2UrNyBhcyBhIFBOUCBkZXZpY2UsIHNvbWUgYmFzZSs0CisJICogdG8gYmFzZSs3IGFuZCBzb21lIGJhc2UrNSB0byBiYXNlKzYuIFNvIHdlIGJldHRlciByZXF1ZXN0IGVhY2ggcG9ydAorCSAqIGluZGl2aWR1YWxseSBmb3IgdGhlIHByb2JpbmcgcGhhc2UuICovCisJZm9yIChwb3J0ID0gYWRkcmVzczsgcG9ydCA8IGFkZHJlc3MgKyBXODM3ODFEX0VYVEVOVDsgcG9ydCsrKSB7CisJCWlmICghcmVxdWVzdF9yZWdpb24ocG9ydCwgMSwgInc4Mzc4MWQiKSkgeworCQkJcHJfZGVidWcoInc4Mzc4MWQ6IEZhaWxlZCB0byByZXF1ZXN0IHBvcnQgMHgleFxuIiwKKwkJCQkgcG9ydCk7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KIAl9CiAKICNkZWZpbmUgUkVBTExZX1NMT1dfSU8KQEAgLTE4NzcsOCArMTg3Nyw4IEBACiAJCQl2YWwgPT0gMHgzMCA/ICJXODM3ODJEIiA6ICJXODM3ODFEIiwgKGludClhZGRyZXNzKTsKIAogIHJlbGVhc2U6Ci0JcmVsZWFzZV9yZWdpb24oYWRkcmVzcyArIDQsIDQpOwotCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIDQpOworCWZvciAocG9ydC0tOyBwb3J0ID49IGFkZHJlc3M7IHBvcnQtLSkKKwkJcmVsZWFzZV9yZWdpb24ocG9ydCwgMSk7CiAJcmV0dXJuIGZvdW5kOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDVmMzE4Y2UuLjczN2YwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC01NjQsNiArNTY0LDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtdmVyc2F0aWxlLgogCitjb25maWcgSTJDX09DVEVPTgorCXRyaXN0YXRlICJDYXZpdW0gT0NURU9OIEkyQyBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIENQVV9DQVZJVU1fT0NURU9OCisJaGVscAorCSAgU2F5IHllcyBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBJMkMgc2VyaWFsIGJ1cyBvbiBDYXZpdW0KKwkgIE9DVEVPTiBTT0MuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1vY3Rlb24uCisKIGNvbW1lbnQgIkV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMiCiAKIGNvbmZpZyBJMkNfUEFSUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDMwMmM1NTEuLmMyYzRlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTU0LDYgKzU0LDcgQEAKIG9iai0kKENPTkZJR19JMkNfU0lNVEVDKQkrPSBpMmMtc2ltdGVjLm8KIG9iai0kKENPTkZJR19JMkNfU1RVMzAwKQkrPSBpMmMtc3R1MzAwLm8KIG9iai0kKENPTkZJR19JMkNfVkVSU0FUSUxFKQkrPSBpMmMtdmVyc2F0aWxlLm8KK29iai0kKENPTkZJR19JMkNfT0NURU9OKQkrPSBpMmMtb2N0ZW9uLm8KIAogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiBvYmotJChDT05GSUdfSTJDX1BBUlBPUlQpCSs9IGkyYy1wYXJwb3J0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb2N0ZW9uLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzc1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5LTIwMTAKKyAqIE5va2lhIFNpZW1lbnMgTmV0d29ya3MsIG1pY2hhZWwubGF3bmljay5leHRAbnNuLmNvbQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAxMCBDYXZpdW0gTmV0d29ya3MsIEluYy4KKyAqCisgKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgaTJjIGFkYXB0ZXIgaW4gQ2F2aXVtIE5ldHdvcmtzJyBPQ1RFT04gcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+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+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRlciBmb3IgQ2F2aXVtIE9DVEVPTiBwcm9jZXNzb3JzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOworCittb2R1bGVfaW5pdChvY3Rlb25faTJjX2luaXQpOworbW9kdWxlX2V4aXQob2N0ZW9uX2kyY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYwppbmRleCBiMWMwNTBmLi5lMjliNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRpbnktdXNiLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10aW55LXVzYi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBpbmNsdWRlIGludGVyZmFjZXMgdG8gdXNiIGxheWVyICovCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CkBAIC0zMSw4ICszMiw4IEBACiAjZGVmaW5lIENNRF9JMkNfSU9fRU5ECQkoMTw8MSkKIAogLyogaTJjIGJpdCBkZWxheSwgZGVmYXVsdCBpcyAxMHVzIC0+IDEwMGtIeiAqLwotc3RhdGljIGludCBkZWxheSA9IDEwOwotbW9kdWxlX3BhcmFtKGRlbGF5LCBpbnQsIDApOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbGF5ID0gMTA7Cittb2R1bGVfcGFyYW0oZGVsYXksIHVzaG9ydCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlbGF5LCAiYml0IGRlbGF5IGluIG1pY3Jvc2Vjb25kcywgIgogCQkgImUuZy4gMTAgZm9yIDEwMGtIeiAoZGVmYXVsdCBpcyAxMDBrSHopIik7CiAKQEAgLTEwOSw3ICsxMTAsNyBAQAogCiBzdGF0aWMgdTMyIHVzYl9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1MzIgZnVuYzsKKwlfX2xlMzIgZnVuYzsKIAogCS8qIGdldCBmdW5jdGlvbmFsaXR5IGZyb20gYWRhcHRlciAqLwogCWlmICh1c2JfcmVhZChhZGFwdGVyLCBDTURfR0VUX0ZVTkMsIDAsIDAsICZmdW5jLCBzaXplb2YoZnVuYykpICE9CkBAIC0xMTgsNyArMTE5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIGZ1bmM7CisJcmV0dXJuIGxlMzJfdG9fY3B1KGZ1bmMpOwogfQogCiAvKiBUaGlzIGlzIHRoZSBhY3R1YWwgYWxnb3JpdGhtIHdlIGRlZmluZSAqLwpAQCAtMjE2LDggKzIxNyw3IEBACiAJCSAiaTJjLXRpbnktdXNiIGF0IGJ1cyAlMDNkIGRldmljZSAlMDNkIiwKIAkJIGRldi0+dXNiX2Rldi0+YnVzLT5idXNudW0sIGRldi0+dXNiX2Rldi0+ZGV2bnVtKTsKIAotCWlmICh1c2Jfd3JpdGUoJmRldi0+YWRhcHRlciwgQ01EX1NFVF9ERUxBWSwKLQkJICAgICAgY3B1X3RvX2xlMTYoZGVsYXkpLCAwLCBOVUxMLCAwKSAhPSAwKSB7CisJaWYgKHVzYl93cml0ZSgmZGV2LT5hZGFwdGVyLCBDTURfU0VUX0RFTEFZLCBkZWxheSwgMCwgTlVMTCwgMCkgIT0gMCkgewogCQlkZXZfZXJyKCZkZXYtPmFkYXB0ZXIuZGV2LAogCQkJImZhaWx1cmUgc2V0dGluZyBkZWxheSB0byAlZHVzXG4iLCBkZWxheSk7CiAJCXJldHZhbCA9IC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKaW5kZXggODdjZWYwYy4uMzQ5YTY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpAQCAtNTYsOCArNTYsOCBAQAogCWNoYW5fdGFiX3QgKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190ICpkcDsKIAotCWlmKCFwdXRfZGVzdF9mbGFncyhhaHdpZi0+cnhfY2hhbiwgKHZvaWQqKWFkZHIsIGNvdW50IDw8IDEsIAotCQkJICAgRERNQV9GTEFHU19OT0lFKSkgeworCWlmICghYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGFod2lmLT5yeF9jaGFuLCB2aXJ0X3RvX3BoeXMoYWRkciksCisJCQkJICAgY291bnQgPDwgMSwgRERNQV9GTEFHU19OT0lFKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAkJcmV0dXJuOwogCX0KQEAgLTc0LDggKzc0LDggQEAKIAljaGFuX3RhYl90ICpjdHA7CiAJYXUxeF9kZG1hX2Rlc2NfdCAqZHA7CiAKLQlpZighcHV0X3NvdXJjZV9mbGFncyhhaHdpZi0+dHhfY2hhbiwgKHZvaWQqKWFkZHIsCi0JCQkgICAgIGNvdW50IDw8IDEsIERETUFfRkxBR1NfTk9JRSkpIHsKKwlpZiAoIWF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGFod2lmLT50eF9jaGFuLCB2aXJ0X3RvX3BoeXMoYWRkciksCisJCQkJICAgICBjb3VudCA8PCAxLCBERE1BX0ZMQUdTX05PSUUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQpAQCAtMjQ2LDE3ICsyNDYsMTQgQEAKIAkJCQlmbGFncyA9IERETUFfRkxBR1NfTk9JRTsKIAogCQkJaWYgKGlzd3JpdGUpIHsKLQkJCQlpZighcHV0X3NvdXJjZV9mbGFncyhhaHdpZi0+dHhfY2hhbiwgCi0JCQkJCQkgICAgICh2b2lkKikgc2dfdmlydChzZyksCi0JCQkJCQkgICAgIHRjLCBmbGFncykpIHsgCisJCQkJaWYgKCFhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShhaHdpZi0+dHhfY2hhbiwKKwkJCQkJc2dfcGh5cyhzZyksIHRjLCBmbGFncykpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIAogCQkJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCQl9Ci0JCQl9IGVsc2UgCi0JCQl7Ci0JCQkJaWYoIXB1dF9kZXN0X2ZsYWdzKGFod2lmLT5yeF9jaGFuLCAKLQkJCQkJCSAgICh2b2lkKikgc2dfdmlydChzZyksCi0JCQkJCQkgICB0YywgZmxhZ3MpKSB7IAorCQkJfSBlbHNlICB7CisJCQkJaWYgKCFhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoYWh3aWYtPnJ4X2NoYW4sCisJCQkJCXNnX3BoeXMoc2cpLCB0YywgZmxhZ3MpKSB7CiAJCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCAKIAkJCQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwppbmRleCBjYzliNTk0Li44NzVlMzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwpAQCAtMjExNSw5ICsyMTE1LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycjE7CiAKLQlpZiAoY21hX2xvb3BiYWNrX2FkZHIoYWRkcikpIHsKLQkJcmV0ID0gY21hX2JpbmRfbG9vcGJhY2soaWRfcHJpdik7Ci0JfSBlbHNlIGlmICghY21hX3plcm9fYWRkcihhZGRyKSkgeworCWlmICghY21hX2FueV9hZGRyKGFkZHIpKSB7CiAJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKGFkZHIsICZpZC0+cm91dGUuYWRkci5kZXZfYWRkcik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LXBvbGxkZXYuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQtcG9sbGRldi5jCmluZGV4IGFhNjcxM2IuLjI5MWQ5MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQtcG9sbGRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQtcG9sbGRldi5jCkBAIC0xMDAsNiArMTAwLDEyIEBACiAJc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2LT53b3JrKTsKKwkvKgorCSAqIENsZWFuIHVwIHdvcmsgc3RydWN0IHRvIHJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSB3b3JrcXVldWUuCisJICogSXQgbWF5IGJlIGRlc3Ryb3llZCBieSB0aGUgbmV4dCBjYWxsLiBUaGlzIGNhdXNlcyBwcm9ibGVtcworCSAqIGF0IG5leHQgZGV2aWNlIG9wZW4tY2xvc2UgaW4gY2FzZSBvZiBwb2xsX2ludGVydmFsID09IDAuCisJICovCisJSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+d29yaywgZGV2LT53b3JrLndvcmsuZnVuYyk7CiAJaW5wdXRfcG9sbGRldl9zdG9wX3dvcmtxdWV1ZSgpOwogCiAJaWYgKGRldi0+Y2xvc2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA5Nzc0YmRmLi5kOGMwYzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTExNDEsNyArMTE0MSwxNCBAQAogCQlwc21vdXNlX2RlYWN0aXZhdGUocGFyZW50KTsKIAl9CiAKLQlwc21vdXNlX2RlYWN0aXZhdGUocHNtb3VzZSk7CisJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9JTklUSUFMSVpJTkcpOworCisJLyoKKwkgKiBEaXNhYmxlIHN0cmVhbSBtb2RlIHNvIGNsZWFudXAgcm91dGluZSBjYW4gcHJvY2VlZCB1bmRpc3R1cmJlZC4KKwkgKi8KKwlpZiAocHMyX2NvbW1hbmQoJnBzbW91c2UtPnBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfRElTQUJMRSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBzbW91c2UuYzogRmFpbGVkIHRvIGRpc2FibGUgbW91c2Ugb24gJXNcbiIsCisJCQlwc21vdXNlLT5wczJkZXYuc2VyaW8tPnBoeXMpOwogCiAJaWYgKHBzbW91c2UtPmNsZWFudXApCiAJCXBzbW91c2UtPmNsZWFudXAocHNtb3VzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggZDg0YTM2ZS4uYjU0YWVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtMTE2MSw5ICsxMTYxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaTgwNDJfcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaTgwNDJfaW50ZXJydXB0KDAsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpODA0Ml9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBpODA0Ml9wbV9yZXNldCwKIAkucmVzdW1lCQk9IGk4MDQyX3BtX3Jlc3RvcmUsCisJLnRoYXcJCT0gaTgwNDJfcG1fdGhhdywKIAkucG93ZXJvZmYJPSBpODA0Ml9wbV9yZXNldCwKIAkucmVzdG9yZQk9IGk4MDQyX3BtX3Jlc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCmluZGV4IDA5YTVlNzMuLjUyNTYxMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKQEAgLTYxOCw4ICs2MTgsOCBAQAogI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfR0VORVJBTF9UT1VDSAogc3RhdGljIGludCBnZW5lcmFsX3RvdWNoX3JlYWRfZGF0YShzdHJ1Y3QgdXNidG91Y2hfdXNiICpkZXYsIHVuc2lnbmVkIGNoYXIgKnBrdCkKIHsKLQlkZXYtPnggPSAoKHBrdFsyXSAmIDB4MEYpIDw8IDgpIHwgcGt0WzFdIDsKLQlkZXYtPnkgPSAoKHBrdFs0XSAmIDB4MEYpIDw8IDgpIHwgcGt0WzNdIDsKKwlkZXYtPnggPSAocGt0WzJdIDw8IDgpIHwgcGt0WzFdOworCWRldi0+eSA9IChwa3RbNF0gPDwgOCkgfCBwa3RbM107CiAJZGV2LT5wcmVzcyA9IHBrdFs1XSAmIDB4ZmY7CiAJZGV2LT50b3VjaCA9IHBrdFswXSAmIDB4MDE7CiAKQEAgLTgwOSw5ICs4MDksOSBAQAogI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfR0VORVJBTF9UT1VDSAogCVtERVZUWVBFX0dFTkVSQUxfVE9VQ0hdID0gewogCQkubWluX3hjCQk9IDB4MCwKLQkJLm1heF94YwkJPSAweDA1MDAsCisJCS5tYXhfeGMJCT0gMHg3ZmZmLAogCQkubWluX3ljCQk9IDB4MCwKLQkJLm1heF95YwkJPSAweDA1MDAsCisJCS5tYXhfeWMJCT0gMHg3ZmZmLAogCQkucmVwdF9zaXplCT0gNywKIAkJLnJlYWRfZGF0YQk9IGdlbmVyYWxfdG91Y2hfcmVhZF9kYXRhLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCmluZGV4IDM0NjRlYmMuLjQ1MmZkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCkBAIC0xMDksNyArMTA5LDcgQEAKIAogY29uZmlnIEhJU0FYX1RFTEVTUENJCiAJYm9vbCAiVGVsZXMgUENJIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCisJZGVwZW5kcyBvbiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBUZWxlcyBQQ0kuCiAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5IaVNheD4gb24gaG93IHRvIGNvbmZpZ3VyZSBpdC4KQEAgLTIzNyw3ICsyMzcsNyBAQAogCiBjb25maWcgSElTQVhfTkVUSkVUCiAJYm9vbCAiTkVUamV0IGNhcmQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIE5ldEpldCBmcm9tIFRyYXZlcnNlCiAJICBUZWNobm9sb2dpZXMuCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAogY29uZmlnIEhJU0FYX05FVEpFVF9VCiAJYm9vbCAiTkVUc3BpZGVyIFUgY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgTmV0c3BpZGVyIFUgaW50ZXJmYWNlIElTRE4gY2FyZAogCSAgZnJvbSBUcmF2ZXJzZSBUZWNobm9sb2dpZXMuCkBAIC0yODcsNyArMjg3LDcgQEAKIAogY29uZmlnIEhJU0FYX0JLTV9BNFQKIAlib29sICJUZWxla29tIEE0VCBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kKKwlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgVGVsZWtvbSBBNFQgY2FyZC4KIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIGNvbmZpZyBISVNBWF9TQ1RfUVVBRFJPCiAJYm9vbCAiU2NpdGVsIFF1YWRybyBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kKKwlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgU2NpdGVsIFF1YWRybyBjYXJkLgogCkBAIC0zMTYsNyArMzE2LDcgQEAKIAogY29uZmlnIEhJU0FYX0hGQ19QQ0kKIAlib29sICJIRkMgUENJLUJ1cyBjYXJkcyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgSEZDLVMgUENJIDJCRFMwIGJhc2VkIGNhcmRzLgogCkBAIC0zMjUsNyArMzI1LDcgQEAKIAogY29uZmlnIEhJU0FYX1c2NjkyCiAJYm9vbCAiV2luYm9uZCBXNjY5MiBiYXNlZCBjYXJkcyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgV2luYm9uZCBXNjY5MiBiYXNlZCBQQ0kgSVNETiBjYXJkcy4KIApAQCAtMzQxLDcgKzM0MSw3IEBACiAKIGNvbmZpZyBISVNBWF9FTlRFUk5PV19QQ0kKIAlib29sICJGb3JtdWxhLW4gZW50ZXI6bm93IFBDSSBjYXJkIgotCWRlcGVuZHMgb24gSElTQVhfTkVUSkVUICYmIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gSElTQVhfTkVUSkVUICYmIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIEZvcm11bGEtbiBlbnRlcjpub3cgUENJCiAJICBJU0ROIGNhcmQuCkBAIC00MTIsNyArNDEyLDcgQEAKIAogY29uZmlnIEhJU0FYX0ZSSVRaX1BDSVBOUAogCXRyaXN0YXRlICJBVk0gRnJpdHohQ2FyZCBQQ0kvUENJdjIvUG5QIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFBDSSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIEFWTSBGcml0eiFDYXJkIFBDSSwKIAkgIEZyaXR6IUNhcmQgUENJIHYyIGFuZCBGcml0eiFDYXJkIFBuUC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jCmluZGV4IDdjYWJjNWEuLjE0Mjk1YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAKICNlbmRpZiAvKiBfX0lTQVBOUF9fICovCiAKLSNpZm5kZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZm5kZWYgQ09ORklHX1BDSQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdm1fcGNpX3NldHVwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKQEAgLTgzNSw3ICs4MzUsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdm1fcGNpX3NldHVwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKLQlpZiAoKGRldl9hdm0gPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BVk0sCisJaWYgKChkZXZfYXZtID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfQVZNLAogCQlQQ0lfREVWSUNFX0lEX0FWTV9BMSwgZGV2X2F2bSkpKSB7CiAKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9hdm0pKQpAQCAtODY0LDcgKzg2NCw3IEBACiAJcmV0dXJuICgxKTsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBpbnQgX19kZXZpbml0CiBzZXR1cF9hdm1fcGNpcG5wKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jCmluZGV4IDljYTJlZTUuLjlmMjAwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJfSBlbHNlCiAJCXJldHVybiAoMCk7CiAKLQl3aGlsZSAoKGRldl9hNHQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwKKwl3aGlsZSAoKGRldl9hNHQgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwKIAkJUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCwgZGV2X2E0dCkpKSB7CiAJCXJldCA9IGE0dF9wY2lfcHJvYmUoZGV2X2E0dCwgY3MsICZmb3VuZCwgJnBjaV9tZW1hZGRyKTsKIAkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMKaW5kZXggZTFmZjQ3MS4uZTc3NTcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCShzdWJfdmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfQkVSS09NKSkpCiAJCXJldHVybiAoMCk7CiAJaWYgKGNzLT5zdWJ0eXAgPT0gU0NUXzEpIHsKLQkJd2hpbGUgKChkZXZfYTggPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9QTFgsCisJCXdoaWxlICgoZGV2X2E4ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAogCQkJUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgZGV2X2E4KSkpIHsKIAkJCQogCQkJc3ViX3ZlbmRvcl9pZCA9IGRldl9hOC0+c3Vic3lzdGVtX3ZlbmRvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCmluZGV4IDBiMGMyZTUuLjc4MGRhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIAogI2VuZGlmCS8qIElTQVBOUCAqLwogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRldl9kaXZhIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YV91IF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YTIwMSBfX2RldmluaXRkYXRhID0gTlVMTDsKQEAgLTExNTksMjEgKzExNTksMjEgQEAKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBjYXJkLT5jczsKIAogCWNzLT5zdWJ0eXAgPSAwOwotCWlmICgoZGV2X2RpdmEgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwlpZiAoKGRldl9kaXZhID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwLCBkZXZfZGl2YSkpKSB7CiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfZGl2YSkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5zdWJ0eXAgPSBESVZBX1BDSTsKIAkJY3MtPmlycSA9IGRldl9kaXZhLT5pcnE7CiAJCWNzLT5ody5kaXZhLmNmZ19yZWcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmEsIDIpOwotCX0gZWxzZSBpZiAoKGRldl9kaXZhX3UgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YV91ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwX1UsIGRldl9kaXZhX3UpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmFfdSkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5zdWJ0eXAgPSBESVZBX1BDSTsKIAkJY3MtPmlycSA9IGRldl9kaXZhX3UtPmlycTsKIAkJY3MtPmh3LmRpdmEuY2ZnX3JlZyA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZfZGl2YV91LCAyKTsKLQl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMSA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAorCX0gZWxzZSBpZiAoKGRldl9kaXZhMjAxID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMSwgZGV2X2RpdmEyMDEpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmEyMDEpKQogCQkJcmV0dXJuKDApOwpAQCAtMTE4Myw3ICsxMTgzLDcgQEAKIAkJCSh1bG9uZykgaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmEyMDEsIDApLCA0MDk2KTsKIAkJY3MtPmh3LmRpdmEuY2ZnX3JlZyA9CiAJCQkodWxvbmcpIGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldl9kaXZhMjAxLCAxKSwgNDA5Nik7Ci0JfSBlbHNlIGlmICgoZGV2X2RpdmEyMDIgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAogCQlQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDIsIGRldl9kaXZhMjAyKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9kaXZhMjAyKSkKIAkJCXJldHVybigwKTsKQEAgLTEyMjksMTQgKzEyMjksMTQgQEAKIAlyZXR1cm4gKDEpOwkJLyogY2FyZCBmb3VuZCAqLwogfQogCi0jZWxzZQkvKiBpZiAhQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbHNlCS8qIGlmICFDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNldHVwX2RpdmFfcGNpKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKIHsKIAlyZXR1cm4gKC0xKTsJLyogY2FyZCBub3QgZm91bmQ7IGNvbnRpbnVlIHNlYXJjaCAqLwogfQogCi0jZW5kaWYJLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZgkvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX2RpdmEoc3RydWN0IElzZG5DYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKaW5kZXggYWEyOWQxYy4uMjNjNDFmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCSAgICAgICBjcy0+aXJxKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIAlzdHJ1Y3QgcGNpX2RldiAqZGV2X3FzMTAwMCBfX2RldmluaXRkYXRhID0gTlVMTDsKIHN0YXRpYyAJc3RydWN0IHBjaV9kZXYgKmRldl9xczMwMDAgX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKQEAgLTEwMzUsNyArMTAzNSw3IEBACiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gY2FyZC0+Y3M7CiAKIAljcy0+c3VidHlwID0gMDsKLQlpZiAoKGRldl9xczEwMDAgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FTFNBLAorCWlmICgoZGV2X3FzMTAwMCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCiAJCVBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTkssIGRldl9xczEwMDApKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3FzMTAwMCkpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMDQzLDcgKzEwNDMsNyBAQAogCQljcy0+aXJxID0gZGV2X3FzMTAwMC0+aXJxOwogCQljcy0+aHcuZWxzYS5jZmcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X3FzMTAwMCwgMSk7CiAJCWNzLT5ody5lbHNhLmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X3FzMTAwMCwgMyk7Ci0JfSBlbHNlIGlmICgoZGV2X3FzMzAwMCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCisJfSBlbHNlIGlmICgoZGV2X3FzMzAwMCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCiAJCVBDSV9ERVZJQ0VfSURfRUxTQV9RUzMwMDAsIGRldl9xczMwMDApKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3FzMzAwMCkpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMDkzLDcgKzEwOTMsNyBAQAogewogCXJldHVybiAoMSk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBzZXR1cF9lbHNhX2NvbW1vbihzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMKaW5kZXggMzlmNDIxZS4uMjYyNjRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gZW5fcGNpX3Byb2JlKGRldl9uZXRqZXQsIGNzKTsKIAkJCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwppbmRleCAwZWEzYjQ2Li4zNTM5ODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwpAQCAtNTMxLDcgKzUzMSw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfdGVsIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTQ2LDcgKzU0Niw3IEBACiAJZm91bmQgPSAwOwogCXNlZWtjYXJkID0gUENJX0RFVklDRV9JRF9QTFhfUjY4NTsKIAlmb3IgKG5ic2VlayA9IDA7IG5ic2VlayA8IDQ7IG5ic2VlaysrKSB7Ci0JCWlmICgoZGV2X3RlbCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1BMWCwKKwkJaWYgKChkZXZfdGVsID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAogCQkJCQlzZWVrY2FyZCwgZGV2X3RlbCkpKSB7CiAJCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3RlbCkpCiAJCQkJcmV0dXJuIDE7CkBAIC02MjAsNyArNjIwLDcgQEAKIAogCXJldHVybiAoMCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX2dhemVsKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKQEAgLTY0MCw3ICs2NDAsNyBAQAogCQkJcmV0dXJuICgwKTsKIAl9IGVsc2UgewogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiAJCWlmIChzZXR1cF9nYXplbHBjaShjcykpCiAJCQlyZXR1cm4gKDApOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDEwOTE0NzMuLjkxN2NjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtMTY1OCw3ICsxNjU4LDcgQEAKIAogCWkgPSAwOwogCXdoaWxlIChpZF9saXN0W2ldLnZlbmRvcl9pZCkgewotCQl0bXBfaGZjcGNpID0gcGNpX2ZpbmRfZGV2aWNlKGlkX2xpc3RbaV0udmVuZG9yX2lkLAorCQl0bXBfaGZjcGNpID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKGlkX2xpc3RbaV0udmVuZG9yX2lkLAogCQkJCQkgICAgIGlkX2xpc3RbaV0uZGV2aWNlX2lkLAogCQkJCQkgICAgIGRldl9oZmNwY2kpOwogCQlpKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IDA2ODVjMTkuLjgzMmE4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC0xMzIzLDMgKzEzMjMsMjYgQEAKIGNoYXIgKkhpU2F4X2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbik7CiBpbnQgVGVpTmV3KHZvaWQpOwogdm9pZCBUZWlGcmVlKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1BDSQorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qIGFkYXB0YXRpb24gd3JhcHBlciBmb3Igb2xkIHVzYWdlCisgKiBXQVJOSU5HISBUaGlzIGlzIHVuZml0IGZvciB1c2UgaW4gYSBQQ0kgaG90cGx1ZyBlbnZpcm9ubWVudCwKKyAqIGFzIHRoZSByZXR1cm5lZCBQQ0kgZGV2aWNlIGNhbiBkaXNhcHBlYXIgYXQgYW55IG1vbWVudCBpbiB0aW1lLgorICogQ2FsbGVycyBzaG91bGQgYmUgY29udmVydGVkIHRvIHVzZSBwY2lfZ2V0X2RldmljZSgpIGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKmhpc2F4X2ZpbmRfcGNpX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBkZXZpY2UsCisJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlwY2lfZGV2X2dldChmcm9tKTsKKwlwZGV2ID0gcGNpX2dldF9zdWJzeXModmVuZG9yLCBkZXZpY2UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGZyb20pOworCXBjaV9kZXZfcHV0KHBkZXYpOworCXJldHVybiBwZGV2OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKaW5kZXggZWYwMDYzMy4uY2NhYTZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKQEAgLTI5NywxMiArMjk3LDEyIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiAJCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmljY3lfZGV2IF9fZGV2aW5pdGRhdGE7CiAKIAkJdV9pbnQgcGNpX2lvYWRkcjsKIAkJY3MtPnN1YnR5cCA9IDA7Ci0JCWlmICgobmljY3lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfU0FUU0FHRU0sCisJCWlmICgobmljY3lfZGV2ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfU0FUU0FHRU0sCiAJCQkJCQkgUENJX0RFVklDRV9JRF9TQVRTQUdFTV9OSUNDWSwKIAkJCQkJCSBuaWNjeV9kZXYpKSkgewogCQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKG5pY2N5X2RldikpCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTmljY3k6IGlvMCAwIGFuZCBOT19QQ0lfQklPU1xuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5pY2N5OiB1bmFibGUgdG8gY29uZmlnIE5JQ0NZIFBDSVxuIik7CiAJCXJldHVybiAwOwotI2VuZGlmCQkJCS8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYJCQkJLyogQ09ORklHX1BDSSAqLwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJIaVNheDogTklDQ1kgJXMgY29uZmlnIGlycTolZCBkYXRhOjB4JVggYWxlOjB4JVhcbiIsCiAJCShjcy0+c3VidHlwID09IDEpID8gIlBuUCIgOiAiUENJIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCmluZGV4IDhkMzZjY2MuLjIzNDRlN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gbmpzX3BjaV9wcm9iZShkZXZfbmV0amV0LCBjcyk7CiAJCQlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jCmluZGV4IGQzMDZjOTQuLjA5NWU5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gbmp1X3BjaV9wcm9iZShkZXZfbmV0amV0LCBjcyk7CiAJCQlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwppbmRleCA1NTY5YTUyLi42OWRmYzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCkBAIC01OTgsNyArNTk4LDcgQEAKIH0KICNlbmRpZiAvKiBfX0lTQVBOUF9fICovCiAKLSNpZmRlZiBDT05GSUdfUENJX0xFR0FDWQorI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZGV2X3NlZGwgX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC02MDcsNyArNjA3LDcgQEAKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBjYXJkLT5jczsKIAl1MTYgc3ViX3ZlbmRvcl9pZCwgc3ViX2lkOwogCi0JaWYgKChkZXZfc2VkbCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1RJR0VSSkVULAorCWlmICgoZGV2X3NlZGwgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKIAkJCVBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwLCBkZXZfc2VkbCkpKSB7CiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfc2VkbCkpCiAJCQlyZXR1cm4oMCk7CkBAIC02NzMsNyArNjczLDcgQEAKIAlyZXR1cm4gKDEpOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX3NlZGxiYXVlcihzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCmluZGV4IDI4YjA4ZGUuLmI4NWNlYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAlpZiAoY3MtPnR5cCAhPSBJU0ROX0NUWVBFX1RFTEVTUENJKQogCQlyZXR1cm4gKDApOwogCi0JaWYgKChkZXZfdGVsID0gcGNpX2ZpbmRfZGV2aWNlIChQQ0lfVkVORE9SX0lEX1pPUkFOLCBQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MTIwLCBkZXZfdGVsKSkpIHsKKwlpZiAoKGRldl90ZWwgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UgKFBDSV9WRU5ET1JfSURfWk9SQU4sIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYxMjAsIGRldl90ZWwpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3RlbCkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5pcnEgPSBkZXZfdGVsLT5pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCmluZGV4IGM0ZDg2MmMuLjlkNmU4NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCQlyZXR1cm4gKDApOwogCiAJd2hpbGUgKGlkX2xpc3RbaWRfaWR4XS52ZW5kb3JfaWQpIHsKLQkJZGV2X3c2NjkyID0gcGNpX2ZpbmRfZGV2aWNlKGlkX2xpc3RbaWRfaWR4XS52ZW5kb3JfaWQsCisJCWRldl93NjY5MiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShpZF9saXN0W2lkX2lkeF0udmVuZG9yX2lkLAogCQkJCQkgICAgaWRfbGlzdFtpZF9pZHhdLmRldmljZV9pZCwKIAkJCQkJICAgIGRldl93NjY5Mik7CiAJCWlmIChkZXZfdzY2OTIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKaW5kZXggMjM3NDFjZS4uMWM0ZWU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKQEAgLTMxNywxMyArMzE3LDE1IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlpZiAoKGFkYl9jb250cm9sbGVyID09IE5VTEwpIHx8IGFkYl9jb250cm9sbGVyLT5pbml0KCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogbm8gQURCIGludGVyZmFjZSBkZXRlY3RlZFxuIik7CisJaWYgKGFkYl9jb250cm9sbGVyICE9IE5VTEwgJiYgYWRiX2NvbnRyb2xsZXItPmluaXQgJiYKKwkgICAgYWRiX2NvbnRyb2xsZXItPmluaXQoKSkKIAkJYWRiX2NvbnRyb2xsZXIgPSBOVUxMOworCWlmIChhZGJfY29udHJvbGxlciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IG5vIEFEQiBpbnRlcmZhY2UgZGV0ZWN0ZWRcbiIpOwogCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX1BQQwotCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSB8fAotCQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKKwkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKKwkJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAJCQlzbGVlcHlfdHJhY2twYWQgPSAxOwogI2VuZGlmIC8qIENPTkZJR19QUEMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IDVmZjQ3YmEuLmM0MmVlYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTkwLDYgKzkwLDggQEAKIAogc3RhdGljIHZvaWQgd3JpdGVfYm90aF9mYW5fc3BlZWQoc3RydWN0IHRoZXJtb3N0YXQgKnRoLCBpbnQgc3BlZWQpOwogc3RhdGljIHZvaWQgd3JpdGVfZmFuX3NwZWVkKHN0cnVjdCB0aGVybW9zdGF0ICp0aCwgaW50IHNwZWVkLCBpbnQgZmFuKTsKK3N0YXRpYyB2b2lkIHRoZXJtb3N0YXRfY3JlYXRlX2ZpbGVzKHZvaWQpOworc3RhdGljIHZvaWQgdGhlcm1vc3RhdF9yZW1vdmVfZmlsZXModm9pZCk7CiAKIHN0YXRpYyBpbnQKIHdyaXRlX3JlZyhzdHJ1Y3QgdGhlcm1vc3RhdCogdGgsIGludCByZWcsIHU4IGRhdGEpCkBAIC0xNjEsNiArMTYzLDggQEAKIAlzdHJ1Y3QgdGhlcm1vc3RhdCAqdGggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKIAkKKwl0aGVybW9zdGF0X3JlbW92ZV9maWxlcygpOworCiAJaWYgKHRocmVhZF90aGVybSAhPSBOVUxMKSB7CiAJCWt0aHJlYWRfc3RvcCh0aHJlYWRfdGhlcm0pOwogCX0KQEAgLTMxMiw3ICszMTYsNyBAQAogCiAJCQlpZiAodmVyYm9zZSkKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiYWR0NzQ2eDogU2V0dGluZyBmYW5zIHNwZWVkIHRvICVkICIKLQkJCQkJCSAiKGxpbWl0IGV4Y2VlZGVkIGJ5ICVkIG9uICVzKSBcbiIsCisJCQkJCQkgIihsaW1pdCBleGNlZWRlZCBieSAlZCBvbiAlcylcbiIsCiAJCQkJCQluZXdfc3BlZWQsIHZhciwKIAkJCQkJCXNlbnNvcl9sb2NhdGlvbltmYW5fbnVtYmVyKzFdKTsKIAkJCXdyaXRlX2JvdGhfZmFuX3NwZWVkKHRoLCBuZXdfc3BlZWQpOwpAQCAtNDQ5LDYgKzQ1Myw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXRoZXJtb3N0YXRfY3JlYXRlX2ZpbGVzKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTY2LDcgKzU3Miw2IEBACiAJc3RydWN0IGRldmljZV9ub2RlKiBucDsKIAljb25zdCB1MzIgKnByb3A7CiAJaW50IGkgPSAwLCBvZmZzZXQgPSAwOwotCWludCBlcnI7CiAKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJmYW4iKTsKIAlpZiAoIW5wKQpAQCAtNjMzLDYgKzYzOCwxNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKyNpZm5kZWYgQ09ORklHX0kyQ19QT1dFUk1BQworCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKKyNlbmRpZgorCisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0aGVybW9zdGF0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHRoZXJtb3N0YXRfY3JlYXRlX2ZpbGVzKHZvaWQpCit7CisJaW50IGVycjsKKwogCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IxX3RlbXBlcmF0dXJlKTsKIAllcnIgfD0gZGV2aWNlX2NyZWF0ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjJfdGVtcGVyYXR1cmUpOwogCWVyciB8PSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMV9saW1pdCk7CkBAIC02NDcsMTYgKzY2Myw5IEBACiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIkZhaWxlZCB0byBjcmVhdGUgdGVtcGVydGF1cmUgYXR0cmlidXRlIGZpbGUocykuXG4iKTsKLQotI2lmbmRlZiBDT05GSUdfSTJDX1BPV0VSTUFDCi0JcmVxdWVzdF9tb2R1bGUoImkyYy1wb3dlcm1hYyIpOwotI2VuZGlmCi0KLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnRoZXJtb3N0YXRfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0Ci10aGVybW9zdGF0X2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIHRoZXJtb3N0YXRfcmVtb3ZlX2ZpbGVzKHZvaWQpCiB7CiAJaWYgKG9mX2RldikgewogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMV90ZW1wZXJhdHVyZSk7CkBAIC02NzMsOSArNjgyLDE0IEBACiAJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm9mX2Rldi0+ZGV2LAogCQkJCQkgICAmZGV2X2F0dHJfc2Vuc29yMl9mYW5fc3BlZWQpOwogCi0JCW9mX2RldmljZV91bnJlZ2lzdGVyKG9mX2Rldik7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3RoZXJtb3N0YXRfZXhpdCh2b2lkKQorewogCWkyY19kZWxfZHJpdmVyKCZ0aGVybW9zdGF0X2RyaXZlcik7CisJb2ZfZGV2aWNlX3VucmVnaXN0ZXIob2ZfZGV2KTsKIH0KIAogbW9kdWxlX2luaXQodGhlcm1vc3RhdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwppbmRleCA0NTRiYzUwLi41NzM4ZDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCkBAIC0xODk5LDcgKzE4OTksNyBAQAogCSAqLwogCWlmIChyYWNrbWFjKQogCQljcHVfcGlkX3R5cGUgPSBDUFVfUElEX1RZUEVfUkFDS01BQzsKLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikKKwllbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikKIAkgICAgJiYgKGNwdV9jb3VudCA+IDEpCiAJICAgICYmIGZjdV9mYW5zW0NQVUFfUFVNUF9SUE1fSU5ERVhdLmlkICE9IEZDVV9GQU5fQUJTRU5UX0lECiAJICAgICYmIGZjdV9mYW5zW0NQVUJfUFVNUF9SUE1fSU5ERVhdLmlkICE9IEZDVV9GQU5fQUJTRU5UX0lEKSB7CkBAIC0yMjM0LDEwICsyMjM0LDEwIEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAotCXJhY2ttYWMgPSBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKTsKKwlyYWNrbWFjID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIik7CiAKLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpICYmCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSAmJgogCSAgICAhcmFja21hYykKIAkgICAgCXJldHVybiAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKaW5kZXggYmE0OGZkNy4uN2ZiOGI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJaW5mbyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInRoZXJtYWwtaW5mbyIsIE5VTEwpOwogCW9mX25vZGVfcHV0KG5wKTsKIAotCWlmKCAhaW5mbyB8fCAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsNiIpICkKKwlpZiggIWluZm8gfHwgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDYiKSApCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYoIGluZm8tPmlkICE9IDMgKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYwppbmRleCA2MmRkMWZkLi45NzFiYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMKQEAgLTg5LDcgKzg5LDYgQEAKIAogI2lmZGVmIENPTkZJR19BREIKIHN0YXRpYyBpbnQgY3VkYV9wcm9iZSh2b2lkKTsKLXN0YXRpYyBpbnQgY3VkYV9pbml0KHZvaWQpOwogc3RhdGljIGludCBjdWRhX3NlbmRfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpOwogc3RhdGljIGludCBjdWRhX2FkYl9hdXRvcG9sbChpbnQgZGV2cyk7CiBzdGF0aWMgaW50IGN1ZGFfcmVzZXRfYWRiX2J1cyh2b2lkKTsKQEAgLTEwNywxNyArMTA2LDQyIEBACiAKICNpZmRlZiBDT05GSUdfQURCCiBzdHJ1Y3QgYWRiX2RyaXZlciB2aWFfY3VkYV9kcml2ZXIgPSB7Ci0JIkNVREEiLAotCWN1ZGFfcHJvYmUsCi0JY3VkYV9pbml0LAotCWN1ZGFfc2VuZF9yZXF1ZXN0LAotCWN1ZGFfYWRiX2F1dG9wb2xsLAotCWN1ZGFfcG9sbCwKLQljdWRhX3Jlc2V0X2FkYl9idXMKKwkubmFtZSAgICAgICAgID0gIkNVREEiLAorCS5wcm9iZSAgICAgICAgPSBjdWRhX3Byb2JlLAorCS5zZW5kX3JlcXVlc3QgPSBjdWRhX3NlbmRfcmVxdWVzdCwKKwkuYXV0b3BvbGwgICAgID0gY3VkYV9hZGJfYXV0b3BvbGwsCisJLnBvbGwgICAgICAgICA9IGN1ZGFfcG9sbCwKKwkucmVzZXRfYnVzICAgID0gY3VkYV9yZXNldF9hZGJfYnVzLAogfTsKICNlbmRpZiAvKiBDT05GSUdfQURCICovCiAKLSNpZmRlZiBDT05GSUdfUFBDCisjaWZkZWYgQ09ORklHX01BQworaW50IF9faW5pdCBmaW5kX3ZpYV9jdWRhKHZvaWQpCit7CisgICAgc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKKyAgICBpbnQgZXJyOworCisgICAgaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfQ1VEQSkKKwlyZXR1cm4gMDsKKworICAgIHZpYSA9IHZpYTE7CisgICAgY3VkYV9zdGF0ZSA9IGlkbGU7CisKKyAgICBlcnIgPSBjdWRhX2luaXRfdmlhKCk7CisgICAgaWYgKGVycikgeworCXByaW50ayhLRVJOX0VSUiAiY3VkYV9pbml0X3ZpYSgpIGZhaWxlZFxuIik7CisJdmlhID0gTlVMTDsKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBlbmFibGUgYXV0b3BvbGwgKi8KKyAgICBjdWRhX3JlcXVlc3QoJnJlcSwgTlVMTCwgMywgQ1VEQV9QQUNLRVQsIENVREFfQVVUT1BPTEwsIDEpOworICAgIHdoaWxlICghcmVxLmNvbXBsZXRlKQorCWN1ZGFfcG9sbCgpOworCisgICAgcmV0dXJuIDE7Cit9CisjZWxzZQogaW50IF9faW5pdCBmaW5kX3ZpYV9jdWRhKHZvaWQpCiB7CiAgICAgc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKQEAgLTE3NSw3ICsxOTksNyBAQAogICAgIHZpYXMgPSBOVUxMOwogICAgIHJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19QUEMgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBDT05GSUdfTUFDICovCiAKIHN0YXRpYyBpbnQgX19pbml0IHZpYV9jdWRhX3N0YXJ0KHZvaWQpCiB7CkBAIC0xODQsMTQgKzIwOCwxNCBAQAogCiAjaWZkZWYgQ09ORklHX01BQwogICAgIGN1ZGFfaXJxID0gSVJRX01BQ19BREI7Ci0jZWxzZSAvKiBDT05GSUdfTUFDICovCisjZWxzZQogICAgIGN1ZGFfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAodmlhcywgMCk7CiAgICAgaWYgKGN1ZGFfaXJxID09IE5PX0lSUSkgewogCXByaW50ayhLRVJOX0VSUiAidmlhLWN1ZGE6IGNhbid0IG1hcCBpbnRlcnJ1cHRzIGZvciAlc1xuIiwKIAkgICAgICAgdmlhcy0+ZnVsbF9uYW1lKTsKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB9Ci0jZW5kaWYgLyogQ09ORklHX01BQyAqLworI2VuZGlmCiAKICAgICBpZiAocmVxdWVzdF9pcnEoY3VkYV9pcnEsIGN1ZGFfaW50ZXJydXB0LCAwLCAiQURCIiwgY3VkYV9pbnRlcnJ1cHQpKSB7CiAJcHJpbnRrKEtFUk5fRVJSICJ2aWEtY3VkYTogY2FuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsIGN1ZGFfaXJxKTsKQEAgLTIxNiwyOCArMjQwLDEwIEBACiAjZWxzZQogICAgIGlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX0NVREEpCiAJcmV0dXJuIC1FTk9ERVY7Ci0gICAgdmlhID0gdmlhMTsKICNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdAotY3VkYV9pbml0KHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1BQQwogICAgIGlmICh2aWEgPT0gTlVMTCkKIAlyZXR1cm4gLUVOT0RFVjsKICAgICByZXR1cm4gMDsKLSNlbHNlIAotICAgIGludCBlcnIgPSBjdWRhX2luaXRfdmlhKCk7Ci0gICAgaWYgKGVycikgewotCXByaW50ayhLRVJOX0VSUiAiY3VkYV9pbml0X3ZpYSgpIGZhaWxlZFxuIik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQotICAgIG91dF84KCZ2aWFbSUVSXSwgSUVSX1NFVHxTUl9JTlQpOyAvKiBlbmFibGUgaW50ZXJydXB0IGZyb20gU1IgKi8KLQotICAgIHJldHVybiB2aWFfY3VkYV9zdGFydCgpOwotI2VuZGlmCiB9CiAjZW5kaWYgLyogQ09ORklHX0FEQiAqLwogCkBAIC00MzAsOSArNDM2LDExIEBACiAgICAgLyogY3VkYV9pbnRlcnJ1cHQgb25seSB0YWtlcyBhIG5vcm1hbCBsb2NrLCB3ZSBkaXNhYmxlCiAgICAgICogaW50ZXJydXB0cyBoZXJlIHRvIGF2b2lkIHJlLWVudGVyaW5nIGFuZCB0aHVzIGRlYWRsb2NraW5nLgogICAgICAqLwotICAgIGRpc2FibGVfaXJxKGN1ZGFfaXJxKTsKKyAgICBpZiAoY3VkYV9pcnEpCisJZGlzYWJsZV9pcnEoY3VkYV9pcnEpOwogICAgIGN1ZGFfaW50ZXJydXB0KDAsIE5VTEwpOwotICAgIGVuYWJsZV9pcnEoY3VkYV9pcnEpOworICAgIGlmIChjdWRhX2lycSkKKwllbmFibGVfaXJxKGN1ZGFfaXJxKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90CkBAIC00NDYsNyArNDU0LDcgQEAKICAgICAKICAgICBzcGluX2xvY2soJmN1ZGFfbG9jayk7CiAKLSAgICAvKiBPbiBwb3dlcm1hY3MsIHRoaXMgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciB0aGUgVklBIElSUS4gQnV0IGl0IHVzZXMKKyAgICAvKiBPbiBwb3dlcm1hY3MsIHRoaXMgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciB0aGUgVklBIElSUS4gQnV0IHRoZXkgdXNlCiAgICAgICoganVzdCB0aGUgc2hpZnQgcmVnaXN0ZXIgSVJRIC0tIG90aGVyIFZJQSBpbnRlcnJ1cHQgc291cmNlcyBhcmUgZGlzYWJsZWQuCiAgICAgICogT24gbTY4ayBtYWNzLCB0aGUgVklBIElSUSBzb3VyY2VzIGFyZSBkaXNwYXRjaGVkIGluZGl2aWR1YWxseS4gVW5sZXNzCiAgICAgICogd2UgYXJlIHBvbGxpbmcsIHRoZSBzaGlmdCByZWdpc3RlciBJUlEgZmxhZyBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYwppbmRleCBhMzQ4YmIwLi40ZjNjNDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKQEAgLTE1MCwxMyArMTUwLDEzIEBACiAKIAkvKiBTcGVjaWFsIGNhc2UgZm9yIHRoZSBvbGQgUG93ZXJCb29rIHNpbmNlIEkgY2FuJ3QgdGVzdCBvbiBpdCAqLwogCWF1dG9zYXZlID0KLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIik7CisJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpOwogCiAJaWYgKCFhdXRvc2F2ZSAmJgogCSAgICAhcG1hY19oYXNfYmFja2xpZ2h0X3R5cGUoInBtdSIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKQorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSAmJgorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKIAkJcmV0dXJuOwogCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicG11YmwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCBkYjM3OWMzLi40Mjc2NDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC00NjMsOCArNDYzLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BQQzMyCi0gIAlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpIHx8Ci0gIAkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM1MDAiKSkgeworICAJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAorICAJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpIHsKIAkJaW50IG1iID0gcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfR0VUX01CX0lORk8sCiAJCQlOVUxMLCBQTUFDX01CX0lORk9fTU9ERUwsIDApOwogCQlwbXVfYmF0dGVyeV9jb3VudCA9IDE7CkBAIC00NzIsOCArNDcyLDggQEAKIAkJCXBtdV9iYXR0ZXJpZXNbMF0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9DT01FVDsKIAkJZWxzZQogCQkJcG11X2JhdHRlcmllc1swXS5mbGFncyB8PSBQTVVfQkFUVF9UWVBFX0hPT1BFUjsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKSB7CiAJCXBtdV9iYXR0ZXJ5X2NvdW50ID0gMjsKIAkJcG11X2JhdHRlcmllc1swXS5mbGFncyB8PSBQTVVfQkFUVF9UWVBFX1NNQVJUOwogCQlwbXVfYmF0dGVyaWVzWzFdLmZsYWdzIHw9IFBNVV9CQVRUX1RZUEVfU01BUlQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMKaW5kZXggMDc1YjRkOS4uNDM3ZjU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NvcmUuYwpAQCAtNDY4LDkgKzQ2OCw5IEBACiAJREJHKCJ3ZjogY29yZSBsb2FkZWRcbiIpOwogCiAJLyogRG9uJ3QgcmVnaXN0ZXIgb24gb2xkIG1hY2hpbmVzIHRoYXQgdXNlIHRoZXJtX3BtNzIgZm9yIG5vdyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndmX3BsYXRmb3JtX2RldmljZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMKaW5kZXggOTAwYWFkZS4uMWE3N2E3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NwdWZyZXFfY2xhbXAuYwpAQCAtNzYsOSArNzYsOSBAQAogCXN0cnVjdCB3Zl9jb250cm9sICpjbGFtcDsKIAogCS8qIERvbid0IHJlZ2lzdGVyIG9uIG9sZCBtYWNoaW5lcyB0aGF0IHVzZSB0aGVybV9wbTcyIGZvciBub3cgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljbGFtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3Zl9jb250cm9sKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYwppbmRleCBlZDY0MjZhLi5kODI1N2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKQEAgLTIzOSw5ICsyMzksOSBAQAogc3RhdGljIGludCBfX2luaXQgd2ZfbG03NV9zZW5zb3JfaW5pdCh2b2lkKQogewogCS8qIERvbid0IHJlZ2lzdGVyIG9uIG9sZCBtYWNoaW5lcyB0aGF0IHVzZSB0aGVybV9wbTcyIGZvciBub3cgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ3Zl9sbTc1X2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYwppbmRleCBhNjdiMzQ5Li5iNDg2ZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKQEAgLTE4OCw5ICsxODgsOSBAQAogc3RhdGljIGludCBfX2luaXQgd2ZfbWF4NjY5MF9zZW5zb3JfaW5pdCh2b2lkKQogewogCS8qIERvbid0IHJlZ2lzdGVyIG9uIG9sZCBtYWNoaW5lcyB0aGF0IHVzZSB0aGVybV9wbTcyIGZvciBub3cgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ3Zl9tYXg2NjkwX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTExMi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYwppbmRleCA3M2Q2OTVkLi5lMGVlODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTExMi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTEyLmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1OwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTEsMiIpKQorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzExLDIiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIENQVSBjb3JlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMjEuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMKaW5kZXggNjZlYzRmYjEuLjk0N2Q0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMjEuYwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAKIHsKIAlpbnQgcmMgPSAtRU5PREVWOwogCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMiwxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMiwxIikpCiAJCXJjID0gcG0xMjFfaW5pdF9wbSgpOwogCiAJaWYgKHJjID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYwppbmRleCBhYmJlMjA2Li41NjVkNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG04MS5jCkBAIC03NzksOCArNzc5LDggQEAKIHsKIAlpbnQgcmMgPSAtRU5PREVWOwogCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDEiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwyIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDEiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwyIikpCiAJCXJjID0gd2ZfaW5pdF9wbSgpOwogCiAJaWYgKHJjID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtOTEuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtOTEuYwppbmRleCA3NjRjNTI1Li5iZWE5OTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG05MS5jCkBAIC03MTEsNyArNzExLDcgQEAKIHsKIAlpbnQgcmMgPSAtRU5PREVWOwogCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzksMSIpKQogCQlyYyA9IHdmX2luaXRfcG0oKTsKIAogCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYwppbmRleCA5YzU2N2I5Li4zYzE5MzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMKQEAgLTM2Myw5ICszNjMsOSBAQAogCSAqIEkgeWV0IGhhdmUgdG8gZmlndXJlIG91dCB3aGF0J3MgdXAgd2l0aCA4LDIgYW5kIHdpbGwgaGF2ZSB0bwogCSAqIGFkanVzdCBmb3IgbGF0ZXIsIHVubGVzcyB3ZSBjYW4gMTAwJSB0cnVzdCB0aGUgU0RCIHBhcnRpdGlvbi4uLgogCSAqLwotCWlmICgobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8Ci0JICAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwyIikgfHwKLQkgICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkgJiYKKwlpZiAoKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDEiKSB8fAorCSAgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpIHx8CisJICAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpICYmCiAJICAgIGNwdXZjcF92ZXJzaW9uID49IDIpIHsKIAkJcG93LT5xdWFkcmF0aWMgPSAxOwogCQlEQkcoIndpbmRmYXJtOiBDUFUgUG93ZXIgdXNpbmcgcXVhZHJhdGljIHRyYW5zZm9ybVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtdHJhbnNmZXIuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS10cmFuc2Zlci5jCmluZGV4IDU0YWJmOWUuLmYxYzhjYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS10cmFuc2Zlci5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS10cmFuc2Zlci5jCkBAIC0xNzIsMTEgKzE3MiwxNSBAQAogewogCWludCByID0gMDsKIAlzaXplX3QgZHVtbXkgPSAwOwotCWludCBvdmVyaGVhZF9zaXplID0KLQkJc2l6ZW9mKHN0cnVjdCBkbV91bG9nX3JlcXVlc3QgKikgKyBzaXplb2Yoc3RydWN0IGNuX21zZyk7CisJaW50IG92ZXJoZWFkX3NpemUgPSBzaXplb2Yoc3RydWN0IGRtX3Vsb2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGNuX21zZyk7CiAJc3RydWN0IGRtX3Vsb2dfcmVxdWVzdCAqdGZyID0gcHJlYWxsb2NlZF91bG9nX3RmcjsKIAlzdHJ1Y3QgcmVjZWl2aW5nX3BrZyBwa2c7CiAKKwkvKgorCSAqIEdpdmVuIHRoZSBzcGFjZSBuZWVkZWQgdG8gaG9sZCB0aGUgJ3N0cnVjdCBjbl9tc2cnIGFuZAorCSAqICdzdHJ1Y3QgZG1fdWxvZ19yZXF1ZXN0JyAtIGRvIHdlIGhhdmUgZW5vdWdoIHBheWxvYWQKKwkgKiBzcGFjZSByZW1haW5pbmc/CisJICovCiAJaWYgKGRhdGFfc2l6ZSA+IChETV9VTE9HX1BSRUFMTE9DRURfU0laRSAtIG92ZXJoZWFkX3NpemUpKSB7CiAJCURNSU5GTygiU2l6ZSBvZiB0ZnIgZXhjZWVkcyBwcmVhbGxvY2F0ZWQgc2l6ZSIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE5MSw3ICsxOTUsNyBAQAogCSAqLwogCW11dGV4X2xvY2soJmRtX3Vsb2dfbG9jayk7CiAKLQltZW1zZXQodGZyLCAwLCBETV9VTE9HX1BSRUFMTE9DRURfU0laRSAtIG92ZXJoZWFkX3NpemUpOworCW1lbXNldCh0ZnIsIDAsIERNX1VMT0dfUFJFQUxMT0NFRF9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBjbl9tc2cpKTsKIAltZW1jcHkodGZyLT51dWlkLCB1dWlkLCBETV9VVUlEX0xFTik7CiAJdGZyLT5sdWlkID0gbHVpZDsKIAl0ZnItPnNlcSA9IGRtX3Vsb2dfc2VxKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKaW5kZXggYWQ3NzliZC4uNmMxMDQ2ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTcyNCw3ICs3MjQsNyBAQAogCS8qCiAJICogRGlzcGF0Y2ggaW8uCiAJICovCi0JaWYgKHVubGlrZWx5KG1zLT5sb2dfZmFpbHVyZSkpIHsKKwlpZiAodW5saWtlbHkobXMtPmxvZ19mYWlsdXJlKSAmJiBlcnJvcnNfaGFuZGxlZChtcykpIHsKIAkJc3Bpbl9sb2NrX2lycSgmbXMtPmxvY2spOwogCQliaW9fbGlzdF9tZXJnZSgmbXMtPmZhaWx1cmVzLCAmc3luYyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmbXMtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yZWdpb24taGFzaC5jIGIvZHJpdmVycy9tZC9kbS1yZWdpb24taGFzaC5jCmluZGV4IDVmMTljZWIuLjE2OGJkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYworKysgYi9kcml2ZXJzL21kL2RtLXJlZ2lvbi1oYXNoLmMKQEAgLTY2MCwxMCArNjYwLDkgQEAKIAlzcGluX2xvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOwogCWlmIChzdWNjZXNzKQogCQlsaXN0X2FkZCgmcmVnLT5saXN0LCAmcmVnLT5yaC0+cmVjb3ZlcmVkX3JlZ2lvbnMpOwotCWVsc2UgewotCQlyZWctPnN0YXRlID0gRE1fUkhfTk9TWU5DOworCWVsc2UKIAkJbGlzdF9hZGQoJnJlZy0+bGlzdCwgJnJlZy0+cmgtPmZhaWxlZF9yZWNvdmVyZWRfcmVnaW9ucyk7Ci0JfQorCiAJc3Bpbl91bmxvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOwogCiAJcmgtPndha2V1cF93b3JrZXJzKHJoLT5jb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCmluZGV4IDdkMDg4NzkuLmMwOTdkOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJICogSXNzdWUgdGhlIHN5bmNocm9ub3VzIEkvTyBmcm9tIGEgZGlmZmVyZW50IHRocmVhZAogCSAqIHRvIGF2b2lkIGdlbmVyaWNfbWFrZV9yZXF1ZXN0IHJlY3Vyc2lvbi4KIAkgKi8KLQlJTklUX1dPUksoJnJlcS53b3JrLCBkb19tZXRhZGF0YSk7CisJSU5JVF9XT1JLX09OX1NUQUNLKCZyZXEud29yaywgZG9fbWV0YWRhdGEpOwogCXF1ZXVlX3dvcmsocHMtPm1ldGFkYXRhX3dxLCAmcmVxLndvcmspOwogCWZsdXNoX3dvcmtxdWV1ZShwcy0+bWV0YWRhdGFfd3EpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXN0cmlwZS5jIGIvZHJpdmVycy9tZC9kbS1zdHJpcGUuYwppbmRleCBlMGVmYzFhLi5iZDU4NzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCX0KIAogCXN0cmlwZXMgPSBzaW1wbGVfc3RydG91bChhcmd2WzBdLCAmZW5kLCAxMCk7Ci0JaWYgKCplbmQpIHsKKwlpZiAoIXN0cmlwZXMgfHwgKmVuZCkgewogCQl0aS0+ZXJyb3IgPSAiSW52YWxpZCBzdHJpcGUgY291bnQiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXN5c2ZzLmMgYi9kcml2ZXJzL21kL2RtLXN5c2ZzLmMKaW5kZXggZjUzMzkyZC4uZjkxYjQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc3lzZnMuYwpAQCAtODAsMjAgKzgwLDEyIEBACiB9OwogCiAvKgotICogVGhlIHN5c2ZzIHN0cnVjdHVyZSBpcyBlbWJlZGRlZCBpbiBtZCBzdHJ1Y3QsIG5vdGhpbmcgdG8gZG8gaGVyZQotICovCi1zdGF0aWMgdm9pZCBkbV9zeXNmc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQotewotfQotCi0vKgogICogZG0ga29iamVjdCBpcyBlbWJlZGRlZCBpbiBtYXBwZWRfZGV2aWNlIHN0cnVjdHVyZQogICogbm8gbmVlZCB0byBkZWZpbmUgcmVsZWFzZSBmdW5jdGlvbiBoZXJlCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGRtX2t0eXBlID0gewogCS5zeXNmc19vcHMJPSAmZG1fc3lzZnNfb3BzLAogCS5kZWZhdWx0X2F0dHJzCT0gZG1fYXR0cnMsCi0JLnJlbGVhc2UJPSBkbV9zeXNmc19yZWxlYXNlCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDMxNjc0ODAuLmFhNGUyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTE1OTUsMTAgKzE1OTUsMTUgQEAKIAlyZXR1cm4gQkxLUFJFUF9PSzsKIH0KIAotc3RhdGljIHZvaWQgbWFwX3JlcXVlc3Qoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCByZXF1ZXN0ICpjbG9uZSwKLQkJCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKKy8qCisgKiBSZXR1cm5zOgorICogMCAgOiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQgKG5vdCByZXF1ZXVlZCkKKyAqICEwIDogdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVxdWV1ZWQKKyAqLworc3RhdGljIGludCBtYXBfcmVxdWVzdChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IHJlcXVlc3QgKmNsb25lLAorCQkgICAgICAgc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCWludCByOworCWludCByLCByZXF1ZXVlZCA9IDA7CiAJc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvID0gY2xvbmUtPmVuZF9pb19kYXRhOwogCiAJLyoKQEAgLTE2MjUsNiArMTYzMCw3IEBACiAJY2FzZSBETV9NQVBJT19SRVFVRVVFOgogCQkvKiBUaGUgdGFyZ2V0IHdhbnRzIHRvIHJlcXVldWUgdGhlIEkvTyAqLwogCQlkbV9yZXF1ZXVlX3VubWFwcGVkX3JlcXVlc3QoY2xvbmUpOworCQlyZXF1ZXVlZCA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChyID4gMCkgewpAQCAtMTYzNiw2ICsxNjQyLDggQEAKIAkJZG1fa2lsbF91bm1hcHBlZF9yZXF1ZXN0KGNsb25lLCByKTsKIAkJYnJlYWs7CiAJfQorCisJcmV0dXJuIHJlcXVldWVkOwogfQogCiAvKgpAQCAtMTY3NywxMiArMTY4NSwxNyBAQAogCQlhdG9taWNfaW5jKCZtZC0+cGVuZGluZ1tycV9kYXRhX2RpcihjbG9uZSldKTsKIAogCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKLQkJbWFwX3JlcXVlc3QodGksIGNsb25lLCBtZCk7CisJCWlmIChtYXBfcmVxdWVzdCh0aSwgY2xvbmUsIG1kKSkKKwkJCWdvdG8gcmVxdWV1ZWQ7CisKIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAl9CiAKIAlnb3RvIG91dDsKIAorcmVxdWV1ZWQ6CisJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKKwogcGx1Z19hbmRfb3V0OgogCWlmICghZWx2X3F1ZXVlX2VtcHR5KHEpKQogCQkvKiBTb21lIHJlcXVlc3RzIHN0aWxsIHJlbWFpbiwgcmV0cnkgbGF0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBkZDNkZmU0Li5hMjBhNzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC00MDc1LDggKzQwNzUsMTAgQEAKIHsKIAltZGRldl90ICptZGRldiA9IGNvbnRhaW5lcl9vZih3cywgbWRkZXZfdCwgZGVsX3dvcmspOwogCi0JaWYgKG1kZGV2LT5wcml2YXRlID09ICZtZF9yZWR1bmRhbmN5X2dyb3VwKSB7CisJaWYgKG1kZGV2LT5wcml2YXRlKSB7CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWRkZXYtPmtvYmosICZtZF9yZWR1bmRhbmN5X2dyb3VwKTsKKwkJaWYgKG1kZGV2LT5wcml2YXRlICE9ICh2b2lkKikxKQorCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtZGRldi0+a29iaiwgbWRkZXYtPnByaXZhdGUpOwogCQlpZiAobWRkZXYtPnN5c2ZzX2FjdGlvbikKIAkJCXN5c2ZzX3B1dChtZGRldi0+c3lzZnNfYWN0aW9uKTsKIAkJbWRkZXYtPnN5c2ZzX2FjdGlvbiA9IE5VTEw7CkBAIC00Mjg3LDEwICs0Mjg5LDcgQEAKIAkJc3lzZnNfbm90aWZ5X2RpcmVudChyZGV2LT5zeXNmc19zdGF0ZSk7CiAJfQogCi0JbWRfcHJvYmUobWRkZXYtPnVuaXQsIE5VTEwsIE5VTEwpOwogCWRpc2sgPSBtZGRldi0+Z2VuZGlzazsKLQlpZiAoIWRpc2spCi0JCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrKCZwZXJzX2xvY2spOwogCXBlcnMgPSBmaW5kX3BlcnMobWRkZXYtPmxldmVsLCBtZGRldi0+Y2xldmVsKTsKQEAgLTQ1MzAsOCArNDUyOSw4IEBACiAJCQltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IE5VTEw7CiAJCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gTlVMTDsKIAkJCW1vZHVsZV9wdXQobWRkZXYtPnBlcnMtPm93bmVyKTsKLQkJCWlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KQotCQkJCW1kZGV2LT5wcml2YXRlID0gJm1kX3JlZHVuZGFuY3lfZ3JvdXA7CisJCQlpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCAmJiBtZGRldi0+cHJpdmF0ZSA9PSBOVUxMKQorCQkJCW1kZGV2LT5wcml2YXRlID0gKHZvaWQqKTE7CiAJCQltZGRldi0+cGVycyA9IE5VTEw7CiAJCQkvKiB0ZWxsIHVzZXJzcGFjZSB0byBoYW5kbGUgJ2luYWN0aXZlJyAqLwogCQkJc3lzZnNfbm90aWZ5X2RpcmVudChtZGRldi0+c3lzZnNfc3RhdGUpOwpAQCAtNDU3OCw5ICs0NTc3LDYgQEAKIAkJfQogCQltZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKIAotCQkvKiBtYWtlIHN1cmUgYWxsIG1kX2RlbGF5ZWRfZGVsZXRlIGNhbGxzIGhhdmUgZmluaXNoZWQgKi8KLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCQlleHBvcnRfYXJyYXkobWRkZXYpOwogCiAJCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBlODQyMDRlLi5jZWIyNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC01MTM2LDkgKzUxMzYsOCBAQAogCW1kZGV2LT50aHJlYWQgPSBOVUxMOwogCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSBOVUxMOwogCWJsa19zeW5jX3F1ZXVlKG1kZGV2LT5xdWV1ZSk7IC8qIHRoZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWRkZXYtPmtvYmosICZyYWlkNV9hdHRyc19ncm91cCk7CiAJZnJlZV9jb25mKGNvbmYpOwotCW1kZGV2LT5wcml2YXRlID0gTlVMTDsKKwltZGRldi0+cHJpdmF0ZSA9ICZyYWlkNV9hdHRyc19ncm91cDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQ2NCwxMSArNTQ2MywxMSBAQAogCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CiAJCQkJY2hhciBubVsyMF07Ci0JCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQorCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykgewogCQkJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCQkJZWxzZQorCQkJCQlhZGRlZF9kZXZpY2VzKys7CisJCQkJfSBlbHNlCiAJCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7Ci0JCQkJYWRkZWRfZGV2aWNlcysrOwogCQkJCXNwcmludGYobm0sICJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKIAkJCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLAogCQkJCQkJICAgICAgJnJkZXYtPmtvYmosIG5tKSkKQEAgLTU0ODAsOSArNTQ3OSwxMiBAQAogCQkJCWJyZWFrOwogCQl9CiAKKwkvKiBXaGVuIGEgcmVzaGFwZSBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgZGV2aWNlcywgLT5kZWdyYWRlZAorCSAqIGlzIG1lYXN1cmVkIGFnYWluc3QgdGhlIGxhcmdlIG9mIHRoZSBwcmUgYW5kIHBvc3QgbnVtYmVyIG9mCisJICogZGV2aWNlcy4qLwogCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPiAwKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQltZGRldi0+ZGVncmFkZWQgPSAoY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCW1kZGV2LT5kZWdyYWRlZCArPSAoY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCiAJCQktIGFkZGVkX2RldmljZXM7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUKaW5kZXggZGY1ZGRiNC4uMTcxODkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogaXItY29tbW9uLW9ianMgIDo9IGlyLWZ1bmN0aW9ucy5vIGlyLWtleW1hcHMubwotaXItY29yZS1vYmpzCTo9IGlyLWtleXRhYmxlLm8KK2lyLWNvcmUtb2Jqcwk6PSBpci1rZXl0YWJsZS5vIGlyLXN5c2ZzLm8KIAogb2JqLSQoQ09ORklHX0lSX0NPUkUpICs9IGlyLWNvcmUubwogb2JqLSQoQ09ORklHX1ZJREVPX0lSKSArPSBpci1jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItZnVuY3Rpb25zLmMKaW5kZXggNzc2YTEzNi4uYWIwNjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWZ1bmN0aW9ucy5jCkBAIC01Miw3ICs1Miw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgIGludCBpcl90eXBlKQorCQkgIGNvbnN0IHU2NCBpcl90eXBlKQogewogCWlyLT5pcl90eXBlID0gaXJfdHlwZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXltYXBzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYwppbmRleCA5YmJlNmIxLi4wZWZkZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYwpAQCAtMzM5MywzICszMzkzLDEwMiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25lY190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlKTsKIAorCisvKiBMZWFkdGVrIFdpbmZhc3QgVFYgVVNCIElJIERlbHV4ZSByZW1vdGUKKyAgIE1hZ251cyBBbG0gPG1hZ251cy5hbG1AZ21haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlW10gPSB7CisJeyAweDYyLCBLRVlfMH0sCisJeyAweDc1LCBLRVlfMX0sCisJeyAweDc2LCBLRVlfMn0sCisJeyAweDc3LCBLRVlfM30sCisJeyAweDc5LCBLRVlfNH0sCisJeyAweDdhLCBLRVlfNX0sCisJeyAweDdiLCBLRVlfNn0sCisJeyAweDdkLCBLRVlfN30sCisJeyAweDdlLCBLRVlfOH0sCisJeyAweDdmLCBLRVlfOX0sCisKKwl7IDB4MzgsIEtFWV9DQU1FUkF9LAkJLyogU05BUFNIT1QgKi8KKwl7IDB4MzcsIEtFWV9SRUNPUkR9LAkJLyogUkVDT1JEICovCisJeyAweDM1LCBLRVlfVElNRX0sCQkvKiBUSU1FU0hJRlQgKi8KKworCXsgMHg3NCwgS0VZX1ZPTFVNRVVQfSwJCS8qIFZPTFVNRVVQICovCisJeyAweDc4LCBLRVlfVk9MVU1FRE9XTn0sCS8qIFZPTFVNRURPV04gKi8KKwl7IDB4NjQsIEtFWV9NVVRFfSwJCS8qIE1VVEUgKi8KKworCXsgMHgyMSwgS0VZX0NIQU5ORUx9LAkJLyogU1VSRiAqLworCXsgMHg3YywgS0VZX0NIQU5ORUxVUH0sCQkvKiBDSEFOTkVMVVAgKi8KKwl7IDB4NjAsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIENIQU5ORUxET1dOICovCisJeyAweDYxLCBLRVlfTEFTVH0sCQkvKiBMQVNUIENIQU5ORUwgKFJFQ0FMTCkgKi8KKworCXsgMHg3MiwgS0VZX1ZJREVPfSwgCQkvKiBJTlBVVCBNT0RFUyAoVFYvRk0pICovCisKKwl7IDB4NzAsIEtFWV9QT1dFUjJ9LAkJLyogVFYgT04vT0ZGICovCisKKwl7IDB4MzksIEtFWV9DWUNMRVdJTkRPV1N9LAkvKiBNSU5JTUlaRSAoQk9TUykgKi8KKwl7IDB4M2EsIEtFWV9ORVd9LAkJLyogUElQICovCisJeyAweDczLCBLRVlfWk9PTX0sCQkvKiBGVUxMU0VDUkVFTiAqLworCisJeyAweDY2LCBLRVlfSU5GT30sCQkvKiBPU0QgKERJU1BMQVkpICovCisKKwl7IDB4MzEsIEtFWV9ET1R9LAkJLyogJy4nICovCisJeyAweDYzLCBLRVlfRU5URVJ9LAkJLyogRU5URVIgKi8KKworfTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVfdGFibGUpOworCisvKiBLd29ybGQgMzE1VQorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2t3b3JsZF8zMTV1W10gPSB7CisJeyAweDYxNDMsIEtFWV9QT1dFUiB9LAorCXsgMHg2MTAxLCBLRVlfVFVORVIgfSwJCS8qIHNvdXJjZSAqLworCXsgMHg2MTBiLCBLRVlfWk9PTSB9LAorCXsgMHg2MTAzLCBLRVlfUE9XRVIyIH0sCQkvKiBzaHV0ZG93biAqLworCisJeyAweDYxMDQsIEtFWV8xIH0sCisJeyAweDYxMDgsIEtFWV8yIH0sCisJeyAweDYxMDIsIEtFWV8zIH0sCisJeyAweDYxMDksIEtFWV9DSEFOTkVMVVAgfSwKKworCXsgMHg2MTBmLCBLRVlfNCB9LAorCXsgMHg2MTA1LCBLRVlfNSB9LAorCXsgMHg2MTA2LCBLRVlfNiB9LAorCXsgMHg2MTA3LCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHg2MTBjLCBLRVlfNyB9LAorCXsgMHg2MTBkLCBLRVlfOCB9LAorCXsgMHg2MTBhLCBLRVlfOSB9LAorCXsgMHg2MTBlLCBLRVlfVk9MVU1FVVAgfSwKKworCXsgMHg2MTEwLCBLRVlfTEFTVCB9LAorCXsgMHg2MTExLCBLRVlfMCB9LAorCXsgMHg2MTEyLCBLRVlfRU5URVIgfSwKKwl7IDB4NjExMywgS0VZX1ZPTFVNRURPV04gfSwKKworCXsgMHg2MTE0LCBLRVlfUkVDT1JEIH0sCisJeyAweDYxMTUsIEtFWV9TVE9QIH0sCisJeyAweDYxMTYsIEtFWV9QTEFZIH0sCisJeyAweDYxMTcsIEtFWV9NVVRFIH0sCisKKwl7IDB4NjExOCwgS0VZX1VQIH0sCisJeyAweDYxMTksIEtFWV9ET1dOIH0sCisJeyAweDYxMWEsIEtFWV9MRUZUIH0sCisJeyAweDYxMWIsIEtFWV9SSUdIVCB9LAorCisJeyAweDYxMWMsIEtFWV9SRUQgfSwKKwl7IDB4NjExZCwgS0VZX0dSRUVOIH0sCisJeyAweDYxMWUsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NjExZiwgS0VZX0JMVUUgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2t3b3JsZF8zMTV1LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19rd29ybGRfMzE1dSksCisJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKaW5kZXggYjUyMWVkOS4uMDkwM2Y1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYwpAQCAtNjUsNyArNjUsNyBAQAogICogSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBxdWFudGl0eSBvZiB0YWJsZSByZXNpemVzLCBpdCBoYXMgYSBtaW5pbXVtCiAgKiB0YWJsZSBzaXplIG9mIElSX1RBQl9NSU5fU0laRS4KICAqLwotaW50IGlyX3JvdW5kdXBfdGFibGVzaXplKGludCBuX2VsZW1zKQorc3RhdGljIGludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcykKIHsKIAlzaXplX3Qgc2l6ZTsKIApAQCAtODEsNyArODEsNiBAQAogCiAJcmV0dXJuIG5fZWxlbXM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9yb3VuZHVwX3RhYmxlc2l6ZSk7CiAKIC8qKgogICogaXJfY29weV90YWJsZSgpIC0gY29waWVzIGEga2V5dGFibGUsIGRpc2NhcmRpbmcgdGhlIHVudXNlZCBlbnRyaWVzCkBAIC04OSw5ICs4OCwxMSBAQAogICogQG9yaWdpbjoJb3JpZ2luIHRhYmxlCiAgKgogICogQ29waWVzIGFsbCBlbnRyaWVzIHdoZXJlIHRoZSBrZXljb2RlIGlzIG5vdCBLRVlfVU5LTk9XTi9LRVlfUkVTRVJWRUQKKyAqIEFsc28gY29waWVzIHRhYmxlIHNpemUgYW5kIHRhYmxlIHByb3RvY29sLgorICogTk9URTogSXQgc2hvdWxkbid0IGNvcHkgdGhlIGxvY2sgZmllbGQKICAqLwogCi1pbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKK3N0YXRpYyBpbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKIAkJIGNvbnN0IHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqb3JpZ2luKQogewogCWludCBpLCBqID0gMDsKQEAgLTEwNSwxMiArMTA2LDEyIEBACiAJCWorKzsKIAl9CiAJZGVzdGluLT5zaXplID0gajsKKwlkZXN0aW4tPmlyX3R5cGUgPSBvcmlnaW4tPmlyX3R5cGU7CiAKIAlJUl9kcHJpbnRrKDEsICJDb3BpZWQgJWQgc2NhbmNvZGVzIHRvIHRoZSBuZXcga2V5Y29kZSB0YWJsZVxuIiwgZGVzdGluLT5zaXplKTsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29weV90YWJsZSk7CiAKIC8qKgogICogaXJfZ2V0a2V5Y29kZSgpIC0gZ2V0IGEga2V5Y29kZSBhdCB0aGUgZXZkZXYgc2NhbmNvZGUgLT5rZXljb2RlIHRhYmxlCkBAIC0xODQsMTggKzE4NSwxNCBAQAogCWludCBuZXdzaXplID0gcmNfdGFiLT5zaXplIC0gMTsKIAlpbnQgcmVzaXplID0gaXJfaXNfcmVzaXplX25lZWRlZChyY190YWIsIG5ld3NpemUpOwogCXN0cnVjdCBpcl9zY2FuY29kZSAqb2xka2V5bWFwID0gcmNfdGFiLT5zY2FuOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwOworCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwID0gTlVMTDsKIAotCWlmIChyZXNpemUpIHsKKwlpZiAocmVzaXplKQogCQluZXdrZXltYXAgPSBremFsbG9jKGlyX3JvdW5kdXBfdGFibGVzaXplKG5ld3NpemUpICoKIAkJCQkgICAgc2l6ZW9mKCpuZXdrZXltYXApLCBHRlBfQVRPTUlDKTsKIAotCQkvKiBUaGVyZSdzIG5vIG1lbW9yeSBmb3IgcmVzaXplLiBLZWVwIHRoZSBvbGQgdGFibGUgKi8KLQkJaWYgKCFuZXdrZXltYXApCi0JCQlyZXNpemUgPSAwOwotCX0KLQotCWlmICghcmVzaXplKSB7CisJLyogVGhlcmUncyBubyBtZW1vcnkgZm9yIHJlc2l6ZS4gS2VlcCB0aGUgb2xkIHRhYmxlICovCisJaWYgKCFyZXNpemUgfHwgIW5ld2tleW1hcCkgewogCQluZXdrZXltYXAgPSBvbGRrZXltYXA7CiAKIAkJLyogV2UnbGwgbW9kaWZ5IHRoZSBsaXZlIHRhYmxlLiBMb2NrIGl0ICovCkBAIC0zOTksMTIgKzM5NiwxNCBAQAogICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCiAgKiBAcmNfdGFiOgl0aGUgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIHRhYmxlIG9mIHNjYW5jb2RlL2tleW1hcAogICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGlucHV0IGluZnJhc3RydWN0dXJlIHRvIHdvcmsgd2l0aAotICogYW4gSVIuCi0gKiBJdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgSVIgZGV2aWNlLgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgaW5mcmFzdHJ1Y3R1cmUKKyAqIHRvIHdvcmsgd2l0aCBhbiBJUi4KKyAqIEl0IHdpbGwgcmVnaXN0ZXIgdGhlIGlucHV0L2V2ZGV2IGludGVyZmFjZSBmb3IgdGhlIGRldmljZSBhbmQKKyAqIHJlZ2lzdGVyIHRoZSBzeWZzIGNvZGUgZm9yIElSIGNsYXNzCiAgKi8KIGludCBpcl9pbnB1dF9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCi0JCSAgICAgIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiKQorCQkgICAgICBjb25zdCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMpCiB7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2OwogCXN0cnVjdCBpcl9zY2FuY29kZSAgKmtleW1hcCAgICA9IHJjX3RhYi0+c2NhbjsKQEAgLTQxNywxOSArNDE2LDIyIEBACiAJaWYgKCFpcl9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnJjX3RhYi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlyX2Rldi0+cmNfdGFiLmxvY2spOwogCiAJaXJfZGV2LT5yY190YWIuc2l6ZSA9IGlyX3JvdW5kdXBfdGFibGVzaXplKHJjX3RhYi0+c2l6ZSk7CiAJaXJfZGV2LT5yY190YWIuc2NhbiA9IGt6YWxsb2MoaXJfZGV2LT5yY190YWIuc2l6ZSAqCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXJfc2NhbmNvZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlyX2Rldi0+cmNfdGFiLnNjYW4pCisJaWYgKCFpcl9kZXYtPnJjX3RhYi5zY2FuKSB7CisJCWtmcmVlKGlyX2Rldik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCUlSX2RwcmludGsoMSwgIkFsbG9jYXRlZCBzcGFjZSBmb3IgJWQga2V5Y29kZSBlbnRyaWVzICglemQgYnl0ZXMpXG4iLAogCQlpcl9kZXYtPnJjX3RhYi5zaXplLAogCQlpcl9kZXYtPnJjX3RhYi5zaXplICogc2l6ZW9mKGlyX2Rldi0+cmNfdGFiLnNjYW4pKTsKIAogCWlyX2NvcHlfdGFibGUoJmlyX2Rldi0+cmNfdGFiLCByY190YWIpOworCWlyX2Rldi0+cHJvcHMgPSBwcm9wczsKIAogCS8qIHNldCB0aGUgYml0cyBmb3IgdGhlIGtleXMgKi8KIAlJUl9kcHJpbnRrKDEsICJrZXkgbWFwIHNpemU6ICVkXG4iLCByY190YWItPnNpemUpOwpAQCAtNDQ3LDE2ICs0NDksMzEgQEAKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGlyX2Rldik7CiAKIAlyYyA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCisJcmMgPSBpcl9yZWdpc3Rlcl9jbGFzcyhpbnB1dF9kZXYpOwogCWlmIChyYyA8IDApIHsKLQkJa2ZyZWUocmNfdGFiLT5zY2FuKTsKLQkJa2ZyZWUoaXJfZGV2KTsKLQkJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJZ290byBlcnI7CiAJfQogCisJcmV0dXJuIDA7CisKK2VycjoKKwlrZnJlZShyY190YWItPnNjYW4pOworCWtmcmVlKGlyX2Rldik7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9yZWdpc3Rlcik7CiAKKy8qKgorICogaXJfaW5wdXRfdW5yZWdpc3RlcigpIC0gdW5yZWdpc3RlcnMgSVIgYW5kIGZyZWVzIHJlc291cmNlcworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGZyZWUgbWVtb3J5IGFuZCBkZS1yZWdpc3RlciBpbnRlcmZhY2VzLgorICovCiB2b2lkIGlyX2lucHV0X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CkBAIC00NzIsNiArNDg5LDggQEAKIAlrZnJlZShyY190YWItPnNjYW4pOwogCXJjX3RhYi0+c2NhbiA9IE5VTEw7CiAKKwlpcl91bnJlZ2lzdGVyX2NsYXNzKGRldik7CisKIAlrZnJlZShpcl9kZXYpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZmJjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYwpAQCAtMCwwICsxLDIxMSBAQAorLyogaXItcmVnaXN0ZXIuYyAtIGhhbmRsZSBJUiBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKworI2RlZmluZSBJUlJDVl9OVU1fREVWSUNFUwkyNTYKKworLyogYml0IGFycmF5IHRvIHJlcHJlc2VudCBJUiBzeXNmcyBkZXZpY2UgbnVtYmVyICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcl9jb3JlX2Rldl9udW1iZXI7CisKKy8qIGNsYXNzIGZvciAvc3lzL2NsYXNzL2lycmN2ICovCitzdGF0aWMgc3RydWN0IGNsYXNzICppcl9pbnB1dF9jbGFzczsKKworLyoqCisgKiBzaG93X3Byb3RvY29sKCkgLSBzaG93cyB0aGUgY3VycmVudCBJUiBwcm90b2NvbAorICogQGQ6CQl0aGUgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBtYXR0cjoJdGhlIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0ICh1bnVzZWQpCisgKiBAYnVmOglhIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBjYWxsYmFjayByb3V0aW5lIGZvciBpbnB1dCByZWFkIHRoZSBJUiBwcm90b2NvbCB0eXBlLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/L2N1cnJlbnRfcHJvdG9jb2wuCisgKiBJdCByZXR1cm5zIHRoZSBwcm90b2NvbCBuYW1lLCBhcyB1bmRlcnN0b29kIGJ5IHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfcHJvdG9jb2woc3RydWN0IGRldmljZSAqZCwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCit7CisJY2hhciAqczsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTY0IGlyX3R5cGUgPSBpcl9kZXYtPnJjX3RhYi5pcl90eXBlOworCisJSVJfZHByaW50aygxLCAiQ3VycmVudCBwcm90b2NvbCBpcyAlbGxkXG4iLCAobG9uZyBsb25nKWlyX3R5cGUpOworCisJLyogRklYTUU6IGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBwcm90b2NvbHMgYXQgdGhlIHNhbWUgdGltZSAqLworCWlmIChpcl90eXBlID09IElSX1RZUEVfVU5LTk9XTikKKwkJcyA9ICJVbmtub3duIjsKKwllbHNlIGlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KQorCQlzID0gIlJDLTUiOworCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9QRCkKKwkJcyA9ICJQdWxzZS9kaXN0YW5jZSI7CisJZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykKKwkJcyA9ICJORUMiOworCWVsc2UKKwkJcyA9ICJPdGhlciI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcyk7Cit9CisKKy8qKgorICogc3RvcmVfcHJvdG9jb2woKSAtIHNob3dzIHRoZSBjdXJyZW50IElSIHByb3RvY29sCisgKiBAZDoJCXRoZSBkZXZpY2UgZGVzY3JpcHRvcgorICogQG1hdHRyOgl0aGUgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3QgKHVudXNlZCkKKyAqIEBidWY6CWEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBAbGVuOglsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlcgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBhIGNhbGxiYWNrIHJvdXRpbmUgZm9yIGNoYW5naW5nIHRoZSBJUiBwcm90b2NvbCB0eXBlLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/L2N1cnJlbnRfcHJvdG9jb2wuCisgKiBJdCBjaGFuZ2VzIHRoZSBJUiB0aGUgcHJvdG9jb2wgbmFtZSwgaWYgdGhlIElSIHR5cGUgaXMgcmVjb2duaXplZAorICogYnkgdGhlIGRyaXZlci4KKyAqIElmIGFuIHVua25vd24gcHJvdG9jb2wgbmFtZSBpcyB1c2VkLCByZXR1cm5zIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3Byb3RvY29sKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpkYXRhLAorCQkJICAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV047CisJaW50IHJjID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKmJ1ZjsKKworCWJ1ZiA9IHN0cnNlcCgoY2hhciAqKikgJmRhdGEsICJcbiIpOworCisJaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInJjLTUiKSkKKwkJaXJfdHlwZSA9IElSX1RZUEVfUkM1OworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInBkIikpCisJCWlyX3R5cGUgPSBJUl9UWVBFX1BEOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1ZiwgIm5lYyIpKQorCQlpcl90eXBlID0gSVJfVFlQRV9ORUM7CisKKwlpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1VOS05PV04pIHsKKwkJSVJfZHByaW50aygxLCAiRXJyb3Igc2V0dGluZyBwcm90b2NvbCB0byAlbGxkXG4iLAorCQkJICAgKGxvbmcgbG9uZylpcl90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+Y2hhbmdlX3Byb3RvY29sKQorCQlyYyA9IGlyX2Rldi0+cHJvcHMtPmNoYW5nZV9wcm90b2NvbChpcl9kZXYtPnByb3BzLT5wcml2LAorCQkJCQkJICAgIGlyX3R5cGUpOworCisJaWYgKHJjIDwgMCkgeworCQlJUl9kcHJpbnRrKDEsICJFcnJvciBzZXR0aW5nIHByb3RvY29sIHRvICVsbGRcbiIsCisJCQkgICAobG9uZyBsb25nKWlyX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOworCWlyX2Rldi0+cmNfdGFiLmlyX3R5cGUgPSBpcl90eXBlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyX2Rldi0+cmNfdGFiLmxvY2ssIGZsYWdzKTsKKworCUlSX2RwcmludGsoMSwgIkN1cnJlbnQgcHJvdG9jb2wgaXMgJWxsZFxuIiwKKwkJICAgKGxvbmcgbG9uZylpcl90eXBlKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBTdGF0aWMgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3Qgd2l0aCB0aGUgc3lzZnMgYXR0cmlidXRlcyBmb3IgSVIncworICovCitzdGF0aWMgREVWSUNFX0FUVFIoY3VycmVudF9wcm90b2NvbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfcHJvdG9jb2wsIHN0b3JlX3Byb3RvY29sKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlyX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9jdXJyZW50X3Byb3RvY29sLmF0dHIsCisJTlVMTCwKK307CisKKy8qKgorICogaXJfcmVnaXN0ZXJfY2xhc3MoKSAtIGNyZWF0ZXMgdGhlIHN5c2ZzIGZvciAvc3lzL2NsYXNzL2lycmN2L2lycmN2PworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIHN5ZnMgY29kZSBmb3IgSVIgY2xhc3MKKyAqLworaW50IGlyX3JlZ2lzdGVyX2NsYXNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKK3sKKwlpbnQgcmM7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOworCWludCBkZXZubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmlyX2NvcmVfZGV2X251bWJlciwKKwkJCQkJSVJSQ1ZfTlVNX0RFVklDRVMpOworCisJaWYgKHVubGlrZWx5KGRldm5vIDwgMCkpCisJCXJldHVybiBkZXZubzsKKworCWlyX2Rldi0+YXR0ci5hdHRycyA9IGlyX2Rldl9hdHRyczsKKwlpcl9kZXYtPmNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoaXJfaW5wdXRfY2xhc3MsIE5VTEwsCisJCQkJCSAgaW5wdXRfZGV2LT5kZXYuZGV2dCwgaXJfZGV2LAorCQkJCQkgICJpcnJjdiVkIiwgZGV2bm8pOworCWtvYmogPSAmaXJfZGV2LT5jbGFzc19kZXYtPmtvYmo7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJDcmVhdGluZyBJUiBkZXZpY2UgJXNcbiIsIGtvYmplY3RfbmFtZShrb2JqKSk7CisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoa29iaiwgJmlyX2Rldi0+YXR0cik7CisJaWYgKHVubGlrZWx5KHJjIDwgMCkpIHsKKwkJZGV2aWNlX2Rlc3Ryb3koaXJfaW5wdXRfY2xhc3MsIGlucHV0X2Rldi0+ZGV2LmRldnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpcl9kZXYtPmRldm5vID0gZGV2bm87CisJc2V0X2JpdChkZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7CisKKwlyZXR1cm4gMDsKK307CisKKy8qKgorICogaXJfdW5yZWdpc3Rlcl9jbGFzcygpIC0gcmVtb3ZlcyB0aGUgc3lzZnMgZm9yIHN5c2ZzIGZvcgorICoJCQkgICAvc3lzL2NsYXNzL2lycmN2L2lycmN2PworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gdW5yZWdpc3RlciB0aGUgc3lmcyBjb2RlIGZvciBJUiBjbGFzcworICovCit2b2lkIGlyX3VucmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwljbGVhcl9iaXQoaXJfZGV2LT5kZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7CisKKwlrb2JqID0gJmlyX2Rldi0+Y2xhc3NfZGV2LT5rb2JqOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKGtvYmosICZpcl9kZXYtPmF0dHIpOworCWRldmljZV9kZXN0cm95KGlyX2lucHV0X2NsYXNzLCBpbnB1dF9kZXYtPmRldi5kZXZ0KTsKKworCWtmcmVlKGlyX2Rldi0+YXR0ci5uYW1lKTsKK30KKworLyoKKyAqIEluaXQvZXhpdCBjb2RlIGZvciB0aGUgbW9kdWxlLiBCYXNpY2FsbHksIGNyZWF0ZXMvcmVtb3ZlcyAvc3lzL2NsYXNzL2lycmN2CisgKi8KKworc3RhdGljIGludCBfX2luaXQgaXJfY29yZV9pbml0KHZvaWQpCit7CisJaXJfaW5wdXRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJpcnJjdiIpOworCWlmIChJU19FUlIoaXJfaW5wdXRfY2xhc3MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaXJfY29yZTogdW5hYmxlIHRvIHJlZ2lzdGVyIGlycmN2IGNsYXNzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaXJfaW5wdXRfY2xhc3MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJfY29yZV9leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveShpcl9pbnB1dF9jbGFzcyk7Cit9CisKK21vZHVsZV9pbml0KGlyX2NvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9jb3JlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwppbmRleCA3MzY0Yjk2Li5mZDhlMWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwpAQCAtNDIzLDE0ICs0MjMsMTUgQEAKIAl9CiB9CiAKK2ludCBzYWE3MTQ2X3Z2X2RldmluaXQoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYpCit7CisJcmV0dXJuIHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT52NGwyX2Rldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTQ2X3Z2X2RldmluaXQpOworCiBpbnQgc2FhNzE0Nl92dl9pbml0KHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgKmV4dF92dikKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnY7Ci0JaW50IGVycjsKLQotCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT52NGwyX2Rldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKIAogCXZ2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxNDZfdnYpLCBHRlBfS0VSTkVMKTsKIAlpZiAodnYgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCmluZGV4IGJlY2JhYWQuLjVlZDc1MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKQEAgLTEzMzMsOSArMTMzMyw5IEBACiAKIAlERUJfQ0FQKCgidmJ1ZjolcFxuIix2YikpOwogCi0JcmVsZWFzZV9hbGxfcGFnZXRhYmxlcyhkZXYsIGJ1Zik7Ci0KIAlzYWE3MTQ2X2RtYV9mcmVlKGRldixxLGJ1Zik7CisKKwlyZWxlYXNlX2FsbF9wYWdldGFibGVzKGRldiwgYnVmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgdmlkZW9fcW9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKaW5kZXggMmI4NzZmMy4uZDlhYWFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKQEAgLTEzMzcsNiArMTMzNywyMiBAQAogCX0sCiB9OwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRVTkVSX1NPTllfQlRGX1BYTjAxWiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9zb255X2J0Zl9weG4wMXpfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDEzNy4yNSAvKk1IeiovLCAweDhlLCAweDAxLCB9LAorCXsgMTYgKiAzNjcuMjUgLypNSHoqLywgMHg4ZSwgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9zb255X2J0Zl9weG4wMXpfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfc29ueV9idGZfcHhuMDF6X3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfc29ueV9idGZfcHhuMDF6X3JhbmdlcyksCisJfSwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgdHVuZXJ0eXBlIHR1bmVyc1tdID0gewpAQCAtMTgwNSw2ICsxODIxLDExIEBACiAJCS5uYW1lICAgPSAiTlhQIFREQTE4MjcxIiwKIAkJLyogc2VlIHRkYTE4MjcxLWZlLmMgZm9yIGRldGFpbHMgKi8KIAl9LAorCVtUVU5FUl9TT05ZX0JURl9QWE4wMVpdID0geworCQkubmFtZSAgID0gIlNvbnkgQlRGLVB4bjAxWiIsCisJCS5wYXJhbXMgPSB0dW5lcl9zb255X2J0Zl9weG4wMXpfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9zb255X2J0Zl9weG4wMXpfcGFyYW1zKSwKKwl9LAogfTsKIEVYUE9SVF9TWU1CT0wodHVuZXJzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCmluZGV4IGYyNzBlNjAuLmJlNTFjMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKQEAgLTkxNywzMCArOTE3LDY4IEBACiAJICogdGhhdCB4YzIwMjggd2lsbCBiZSBpbiBhIHNhZmUgc3RhdGUuCiAJICogTWF5YmUgdGhpcyBtaWdodCBhbHNvIGJlIG5lZWRlZCBmb3IgRFRWLgogCSAqLwotCWlmIChuZXdfbW9kZSA9PSBUX0FOQUxPR19UVikKKwlpZiAobmV3X21vZGUgPT0gVF9BTkFMT0dfVFYpIHsKIAkJcmMgPSBzZW5kX3NlcShwcml2LCB7MHgwMCwgMHgwMH0pOwogCi0JLyoKLQkgKiBEaWdpdGFsIG1vZGVzIHJlcXVpcmUgYW4gb2Zmc2V0IHRvIGFkanVzdCB0byB0aGUKLQkgKiBwcm9wZXIgZnJlcXVlbmN5LgotCSAqIEFuYWxvZyBtb2RlcyByZXF1aXJlIG9mZnNldCA9IDAKLQkgKi8KLQlpZiAobmV3X21vZGUgPT0gVF9ESUdJVEFMX1RWKSB7Ci0JCS8qIFNldHMgdGhlIG9mZnNldCBhY2NvcmRpbmcgd2l0aCBmaXJtd2FyZSAqLworCQkvKiBBbmFsb2cgbW9kZXMgcmVxdWlyZSBvZmZzZXQgPSAwICovCisJfSBlbHNlIHsKKwkJLyoKKwkJICogRGlnaXRhbCBtb2RlcyByZXF1aXJlIGFuIG9mZnNldCB0byBhZGp1c3QgdG8gdGhlCisJCSAqIHByb3BlciBmcmVxdWVuY3kuIFRoZSBvZmZzZXQgZGVwZW5kcyBvbiB3aGF0CisJCSAqIGZpcm13YXJlIHZlcnNpb24gaXMgdXNlZC4KKwkJICovCisKKwkJLyoKKwkJICogQWRqdXN0IHRvIHRoZSBjZW50ZXIgZnJlcXVlbmN5LiBUaGlzIGlzIGNhbGN1bGF0ZWQgYnkgdGhlCisJCSAqIGZvcm11bGE6IG9mZnNldCA9IDEuMjVNSHogLSBCVy8yCisJCSAqIEZvciBEVFYgNy84LCB0aGUgZmlybXdhcmUgdXNlcyBCVyA9IDgwMDAsIHNvIGl0IG5lZWRzIGEKKwkJICogZnVydGhlciBhZGp1c3RtZW50IHRvIGdldCB0aGUgZnJlcXVlbmN5IGNlbnRlciBvbiBWSEYKKwkJICovCiAJCWlmIChwcml2LT5jdXJfZncudHlwZSAmIERUVjYpCiAJCQlvZmZzZXQgPSAxNzUwMDAwOwogCQllbHNlIGlmIChwcml2LT5jdXJfZncudHlwZSAmIERUVjcpCiAJCQlvZmZzZXQgPSAyMjUwMDAwOwogCQllbHNlCS8qIERUVjggb3IgRFRWNzggKi8KIAkJCW9mZnNldCA9IDI3NTAwMDA7Ci0KLQkJLyoKLQkJICogV2UgbXVzdCBhZGp1c3QgdGhlIG9mZnNldCBieSA1MDBrSHogIHdoZW4KLQkJICogdHVuaW5nIGEgN01IeiBWSEYgY2hhbm5lbCB3aXRoIERUVjc4IGZpcm13YXJlCi0JCSAqICh1c2VkIGluIEF1c3RyYWxpYSwgSXRhbHkgYW5kIEdlcm1hbnkpCi0JCSAqLwogCQlpZiAoKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNzgpICYmIGZyZXEgPCA0NzAwMDAwMDApCiAJCQlvZmZzZXQgLT0gNTAwMDAwOworCisJCS8qCisJCSAqIHhjMzAyOCBhZGRpdGlvbmFsICJtYWdpYyIKKwkJICogRGVwZW5kaW5nIG9uIHRoZSBmaXJtd2FyZSB2ZXJzaW9uLCBpdCBuZWVkcyBzb21lIGFkanVzdG1lbnRzCisJCSAqIHRvIHByb3Blcmx5IGNlbnRyYWxpemUgdGhlIGZyZXF1ZW5jeS4gVGhpcyBzZWVtcyB0byBiZQorCQkgKiBuZWVkZWQgdG8gY29tcGVuc2F0ZSB0aGUgU0NPREUgdGFibGUgYWRqdXN0bWVudHMgbWFkZSBieQorCQkgKiBuZXdlciBmaXJtd2FyZXMKKwkJICovCisKKyNpZiAxCisJCS8qCisJCSAqIFRoZSBwcm9wZXIgYWRqdXN0bWVudCB3b3VsZCBiZSB0byBkbyBpdCBhdCBzLWNvZGUgdGFibGUuCisJCSAqIEhvd2V2ZXIsIHRoaXMgZGlkbid0IHdvcmssIGFzIHJlcG9ydGVkIGJ5CisJCSAqIFJvYmVydCBMb3dlcnkgPHJnbG93ZXJ5QGV4ZW1haWwuY29tLmF1PgorCQkgKi8KKworCQlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3KQorCQkJb2Zmc2V0ICs9IDUwMDAwMDsKKworI2Vsc2UKKwkJLyoKKwkJICogU3RpbGwgbmVlZCB0ZXN0cyBmb3IgWEMzMDI4TCAoZmlybXdhcmUgMy4yIG9yIHVwcGVyKQorCQkgKiBTbywgZm9yIG5vdywgbGV0J3MganVzdCBjb21tZW50IHRoZSBwZXItZmlybXdhcmUKKwkJICogdmVyc2lvbiBvZiB0aGlzIGNoYW5nZS4gUmVwb3J0cyB3aXRoIHhjMzAyOGwgd29ya2luZworCQkgKiB3aXRoIGFuZCB3aXRob3V0IHRoZSBsaW5lcyBiZWxsb3cgYXJlIHdlbGNvbWUKKwkJICovCisKKwkJaWYgKHByaXYtPmZpcm1fdmVyc2lvbiA8IDB4MDMwMikgeworCQkJaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNykKKwkJCQlvZmZzZXQgKz0gNTAwMDAwOworCQl9IGVsc2UgeworCQkJaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNykKKwkJCQlvZmZzZXQgLT0gMzAwMDAwOworCQkJZWxzZSBpZiAodHlwZSAhPSBBVFNDKSAvKiBEVkIgQDZNSHosIERUViA4IGFuZCBEVFYgNy84ICovCisJCQkJb2Zmc2V0ICs9IDIwMDAwMDsKKwkJfQorI2VuZGlmCiAJfQogCiAJZGl2ID0gKGZyZXEgLSBvZmZzZXQgKyBESVYgLyAyKSAvIERJVjsKQEAgLTEwOTcsMTcgKzExMzUsMjQgQEAKIAogCS8qIEFsbCBTLWNvZGUgdGFibGVzIG5lZWQgYSAyMDBrSHogc2hpZnQgKi8KIAlpZiAocHJpdi0+Y3RybC5kZW1vZCkgewotCQlkZW1vZCA9IHByaXYtPmN0cmwuZGVtb2QgKyAyMDA7CisJCWRlbW9kID0gcHJpdi0+Y3RybC5kZW1vZDsKKworCQkvKgorCQkgKiBOZXdlciBmaXJtd2FyZXMgcmVxdWlyZSBhIDIwMCBrSHogb2Zmc2V0IG9ubHkgZm9yIEFUU0MKKwkJICovCisJCWlmICh0eXBlID09IEFUU0MgfHwgcHJpdi0+ZmlybV92ZXJzaW9uIDwgMHgwMzAyKQorCQkJZGVtb2QgKz0gMjAwOwogCQkvKgogCQkgKiBUaGUgRFRWNyBTLWNvZGUgdGFibGUgbmVlZHMgYSA3MDAga0h6IHNoaWZ0LgotCQkgKiBUaGFua3MgdG8gVGVycnkgV3UgPHRlcnJ5d3UyMDA5QGdtYWlsLmNvbT4gZm9yIHJlcG9ydGluZyB0aGlzCiAJCSAqCiAJCSAqIERUVjcgaXMgb25seSB1c2VkIGluIEF1c3RyYWxpYS4gIEdlcm1hbnkgb3IgSXRhbHkgbWF5IGFsc28KIAkJICogdXNlIHRoaXMgZmlybXdhcmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGJ1dCBhIHR1bmUgdG8gYSBVSEYKIAkJICogY2hhbm5lbCBzaG91bGQgdGhlbiBjYXVzZSBEVFY3OCB0byBiZSB1c2VkLgorCQkgKgorCQkgKiBVbmZvcnR1bmF0ZWx5LCBvbiByZWFsLWZpZWxkIHRlc3RzLCB0aGUgcy1jb2RlIG9mZnNldAorCQkgKiBkaWRuJ3Qgd29yayBhcyBleHBlY3RlZCwgYXMgcmVwb3J0ZWQgYnkKKwkJICogUm9iZXJ0IExvd2VyeSA8cmdsb3dlcnlAZXhlbWFpbC5jb20uYXU+CiAJCSAqLwotCQlpZiAodHlwZSAmIERUVjcpCi0JCQlkZW1vZCArPSA1MDA7CiAJfQogCiAJcmV0dXJuIGdlbmVyaWNfc2V0X2ZyZXEoZmUsIHAtPmZyZXF1ZW5jeSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCmluZGV4IGNmOGY2NWYuLjE2MWNjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwpAQCAtNzYsNiArNzYsMTAgQEAKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKIAlzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9LY29uZmlnIgogCitjb21tZW50ICJTdXBwb3J0ZWQgbkdlbmUgQWRhcHRlcnMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCisJc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnIgorCiBjb21tZW50ICJTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQppbmRleCBjMTI5MjJjLi5hMWEwODc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQAogCQlzaWFuby8JCVwKIAkJZG0xMTA1LwkJXAogCQlwdDEvCQlcCi0JCW1hbnRpcy8KKwkJbWFudGlzLwkJXAorCQluZ2VuZS8KIAogb2JqLSQoQ09ORklHX0RWQl9GSVJFRFRWKQkrPSBmaXJld2lyZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCmluZGV4IGEyNGMxMjUuLjk5ZDYyMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYwpAQCAtNTc2LDQzICs1NzYsMzAgQEAKICAgICAgIC5yZW1vdmUJPSBfX2RldmV4aXRfcChidDg3OF9yZW1vdmUpLAogfTsKIAotc3RhdGljIGludCBidDg3OF9wY2lfZHJpdmVyX3JlZ2lzdGVyZWQ7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogTW9kdWxlIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBidDg3OF9pbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYnQ4NzhfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlidDg3OF9udW0gPSAwOwotCWJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCA9IDA7CiAKIAlwcmludGsoS0VSTl9JTkZPICJidDg3ODogQVVESU8gZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAogCSAgICAgICAoQlQ4NzhfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCiAJICAgICAgIChCVDg3OF9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLAogCSAgICAgICBCVDg3OF9WRVJTSU9OX0NPREUgJiAweGZmKTsKLS8qCi0JYnQ4NzhfY2hlY2tfY2hpcHNldCgpOwotKi8KLQkvKiBsYXRlciB3ZSByZWdpc3RlciBpbnNpZGUgb2YgYnQ4NzhfZmluZF9hdWRpb19kbWEoKQotCSAqIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8gaWdub3JlIGNlcnRhaW4gY2FyZHMgKi8KLQlidDg3OF9wY2lfZHJpdmVyX3JlZ2lzdGVyZWQgPSAxOworCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJ0ODc4X3BjaV9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBidDg3OF9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGJ0ODc4X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0JaWYgKGJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCkgewotCQlidDg3OF9wY2lfZHJpdmVyX3JlZ2lzdGVyZWQgPSAwOwotCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJ0ODc4X3BjaV9kcml2ZXIpOwotCX0KLQlyZXR1cm47CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZidDg3OF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYnQ4NzhfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoYnQ4NzhfY2xlYW51cF9tb2R1bGUpOwogCi0vL01PRFVMRV9BVVRIT1IoIlhYWCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCA5MTM1M2E2Li44YjBjZGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtMTM1Miw4ICsxMzUyLDcgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJaWYgKChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19WTEYpICYmCi0JCSEoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX0NBQkxFKSAmJgotCQkhKHN0YXRlLT5kc3RfdHlwZSA9PSBEU1RfVFlQRV9JU19BVFNDKSkgeworCSAgICEoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX0FUU0MpKSB7CiAKIAkJaWYgKHN0YXRlLT5yeF90dW5hWzldICE9IGRzdF9jaGVja19zdW0oJnN0YXRlLT5yeF90dW5hWzBdLCA5KSkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgImNoZWNrc3VtIGZhaWx1cmUgPyAiKTsKQEAgLTE4MjAsOCArMTgxOSwxMyBAQAogCQkuZnJlcXVlbmN5X21heCA9IDg1ODAwMDAwMCwKIAkJLnN5bWJvbF9yYXRlX21pbiA9IDEwMDAwMDAsCiAJCS5zeW1ib2xfcmF0ZV9tYXggPSA0NTAwMDAwMCwKLQkvKiAgICAgLiBzeW1ib2xfcmF0ZV90b2xlcmFuY2UJPQk/Pz8sKi8KLQkJLmNhcHMgPSBGRV9DQU5fRkVDX0FVVE8gfCBGRV9DQU5fUUFNX0FVVE8KKwkJLmNhcHMgPSBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FBTV9BVVRPIHwKKwkJCUZFX0NBTl9RQU1fMTYJfAorCQkJRkVfQ0FOX1FBTV8zMgl8CisJCQlGRV9DQU5fUUFNXzY0CXwKKwkJCUZFX0NBTl9RQU1fMTI4CXwKKwkJCUZFX0NBTl9RQU1fMjU2CiAJfSwKIAogCS5yZWxlYXNlID0gZHN0X3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCmluZGV4IGRlM2VlYjAuLjY5NTIzOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCkBAIC04LDYgKzgsNyBAQAogCXNlbGVjdCBEVkJfU1RCNjAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfQ1gyNDExNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU0kyMVhYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9EUzMwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgVklERU9fSVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgU0RNQyBETTExMDUgUENJIGNoaXAgbGlrZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCmluZGV4IGYwZjQ4M2EuLjM4M2NjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJzaTIxeHguaCIKICNpbmNsdWRlICJjeDI0MTE2LmgiCiAjaW5jbHVkZSAiejAxOTRhLmgiCisjaW5jbHVkZSAiZHMzMDAwLmgiCiAKICNkZWZpbmUgVU5TRVQgKC0xVSkKIApAQCAtMjY5LDcgKzI3MCw3IEBACiAJdTMyCQkJaXJfY29tbWFuZDsKIH07CiAKLXN0cnVjdCBkbTExMDVkdmIgeworc3RydWN0IGRtMTEwNV9kZXYgewogCS8qIHBjaSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXU4IF9faW9tZW0gKmlvX21lbTsKQEAgLTMwOCwzMSArMzA5LDQ3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotI2RlZmluZSBkbV9pb19tZW0ocmVnKQkoKHVuc2lnbmVkIGxvbmcpKCZkbTExMDVkdmItPmlvX21lbVtyZWddKSkKKyNkZWZpbmUgZG1faW9fbWVtKHJlZykJKCh1bnNpZ25lZCBsb25nKSgmZGV2LT5pb19tZW1bcmVnXSkpCisKKyNkZWZpbmUgZG1fcmVhZGIocmVnKQkJaW5iKGRtX2lvX21lbShyZWcpKQorI2RlZmluZSBkbV93cml0ZWIocmVnLCB2YWx1ZSkJb3V0YigodmFsdWUpLCAoZG1faW9fbWVtKHJlZykpKQorCisjZGVmaW5lIGRtX3JlYWR3KHJlZykJCWludyhkbV9pb19tZW0ocmVnKSkKKyNkZWZpbmUgZG1fd3JpdGV3KHJlZywgdmFsdWUpCW91dHcoKHZhbHVlKSwgKGRtX2lvX21lbShyZWcpKSkKKworI2RlZmluZSBkbV9yZWFkbChyZWcpCQlpbmwoZG1faW9fbWVtKHJlZykpCisjZGVmaW5lIGRtX3dyaXRlbChyZWcsIHZhbHVlKQlvdXRsKCh2YWx1ZSksIChkbV9pb19tZW0ocmVnKSkpCisKKyNkZWZpbmUgZG1fYW5kb3JsKHJlZywgbWFzaywgdmFsdWUpIFwKKwlvdXRsKChpbmwoZG1faW9fbWVtKHJlZykpICYgfihtYXNrKSkgfFwKKwkJKCh2YWx1ZSkgJiAobWFzaykpLCAoZG1faW9fbWVtKHJlZykpKQorCisjZGVmaW5lIGRtX3NldGwocmVnLCBiaXQpCWRtX2FuZG9ybCgocmVnKSwgKGJpdCksIChiaXQpKQorI2RlZmluZSBkbV9jbGVhcmwocmVnLCBiaXQpCWRtX2FuZG9ybCgocmVnKSwgKGJpdCksIDApCiAKIHN0YXRpYyBpbnQgZG0xMTA1X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCiAJCQkgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiIDsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2IDsKIAogCWludCBhZGRyLCByYywgaSwgaiwgaywgbGVuLCBieXRlLCBkYXRhOwogCXU4IHN0YXR1czsKIAotCWRtMTEwNWR2YiA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisJZGV2ID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJb3V0YigweDAwLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOworCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHgwMCk7CiAJCWlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKIAkJCS8qIHJlYWQgYnl0ZXMgKi8KIAkJCWFkZHIgID0gbXNnc1tpXS5hZGRyIDw8IDE7CiAJCQlhZGRyIHw9IDE7Ci0JCQlvdXRiKGFkZHIsIGRtX2lvX21lbShETTExMDVfSTJDREFUKSk7CisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCwgYWRkcik7CiAJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykKLQkJCQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSTJDREFUICsgYnl0ZSArIDEpKTsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxLCAwKTsKIAotCQkJb3V0YigweDgxICsgbXNnc1tpXS5sZW4sIGRtX2lvX21lbShETTExMDVfSTJDQ1RSKSk7CisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHg4MSArIG1zZ3NbaV0ubGVuKTsKIAkJCWZvciAoaiA9IDA7IGogPCA1NTsgaisrKSB7CiAJCQkJbWRlbGF5KDEwKTsKLQkJCQlzdGF0dXMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNTVFMpKTsKKwkJCQlzdGF0dXMgPSBkbV9yZWFkYihETTExMDVfSTJDU1RTKTsKIAkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCiAJCQkJCWJyZWFrOwogCQkJfQpAQCAtMzQwLDU2ICszNTcsNTQgQEAKIAkJCQlyZXR1cm4gLTE7CiAKIAkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7Ci0JCQkJcmMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQkJCXJjID0gZG1fcmVhZGIoRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKTsKIAkJCQlpZiAocmMgPCAwKQogCQkJCQlnb3RvIGVycjsKIAkJCQltc2dzW2ldLmJ1ZltieXRlXSA9IHJjOwogCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKChtc2dzW2ldLmJ1ZlswXSA9PSAweGY3KSAmJiAobXNnc1tpXS5hZGRyID09IDB4NTUpKSB7Ci0JCQkJLyogcHJlcGFpcmVkIGZvciBjeDI0MTE2IGZpcm13YXJlICovCi0JCQkJLyogV3JpdGUgaW4gc21hbGwgYmxvY2tzICovCi0JCQkJbGVuID0gbXNnc1tpXS5sZW4gLSAxOwotCQkJCWsgPSAxOwotCQkJCWRvIHsKLQkJCQkJb3V0Yihtc2dzW2ldLmFkZHIgPDwgMSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKLQkJCQkJb3V0YigweGY3LCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIDEpKTsKLQkJCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IChsZW4gPiA0OCA/IDQ4IDogbGVuKTsgYnl0ZSsrKSB7Ci0JCQkJCQlkYXRhID0gbXNnc1tpXS5idWZbaytieXRlXTsKLQkJCQkJCW91dGIoZGF0YSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMikpOwotCQkJCQl9Ci0JCQkJCW91dGIoMHg4MiArIChsZW4gPiA0OCA/IDQ4IDogbGVuKSwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKLQkJCQkJZm9yIChqID0gMDsgaiA8IDI1OyBqKyspIHsKLQkJCQkJCW1kZWxheSgxMCk7Ci0JCQkJCQlzdGF0dXMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNTVFMpKTsKLQkJCQkJCWlmICgoc3RhdHVzICYgMHhjMCkgPT0gMHg0MCkKLQkJCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCWlmIChqID49IDI1KQotCQkJCQkJcmV0dXJuIC0xOwotCi0JCQkJCWsgKz0gNDg7Ci0JCQkJCWxlbiAtPSA0ODsKLQkJCQl9IHdoaWxlIChsZW4gPiAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogd3JpdGUgYnl0ZXMgKi8KLQkJCQlvdXRiKG1zZ3NbaV0uYWRkcjw8MSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKLQkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykgewotCQkJCQlkYXRhID0gbXNnc1tpXS5idWZbYnl0ZV07Ci0JCQkJCW91dGIoZGF0YSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQl9IGVsc2UgaWYgKChtc2dzW2ldLmJ1ZlswXSA9PSAweGY3KSAmJiAobXNnc1tpXS5hZGRyID09IDB4NTUpKSB7CisJCQkvKiBwcmVwYWlyZWQgZm9yIGN4MjQxMTYgZmlybXdhcmUgKi8KKwkJCS8qIFdyaXRlIGluIHNtYWxsIGJsb2NrcyAqLworCQkJbGVuID0gbXNnc1tpXS5sZW4gLSAxOworCQkJayA9IDE7CisJCQlkbyB7CisJCQkJZG1fd3JpdGViKERNMTEwNV9JMkNEQVQsIG1zZ3NbaV0uYWRkciA8PCAxKTsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCArIDEsIDB4ZjcpOworCQkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCAobGVuID4gNDggPyA0OCA6IGxlbik7IGJ5dGUrKykgeworCQkJCQlkYXRhID0gbXNnc1tpXS5idWZbayArIGJ5dGVdOworCQkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAyLCBkYXRhKTsKIAkJCQl9Ci0JCQkJb3V0YigweDgxICsgbXNnc1tpXS5sZW4sIGRtX2lvX21lbShETTExMDVfSTJDQ1RSKSk7CisJCQkJZG1fd3JpdGViKERNMTEwNV9JMkNDVFIsIDB4ODIgKyAobGVuID4gNDggPyA0OCA6IGxlbikpOwogCQkJCWZvciAoaiA9IDA7IGogPCAyNTsgaisrKSB7CiAJCQkJCW1kZWxheSgxMCk7Ci0JCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOworCQkJCQlzdGF0dXMgPSBkbV9yZWFkYihETTExMDVfSTJDU1RTKTsKIAkJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCiAJCQkJaWYgKGogPj0gMjUpCiAJCQkJCXJldHVybiAtMTsKKworCQkJCWsgKz0gNDg7CisJCQkJbGVuIC09IDQ4OworCQkJfSB3aGlsZSAobGVuID4gMCk7CisJCX0gZWxzZSB7CisJCQkvKiB3cml0ZSBieXRlcyAqLworCQkJZG1fd3JpdGViKERNMTEwNV9JMkNEQVQsIG1zZ3NbaV0uYWRkciA8PCAxKTsKKwkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7CisJCQkJZGF0YSA9IG1zZ3NbaV0uYnVmW2J5dGVdOworCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgYnl0ZSArIDEsIGRhdGEpOwogCQkJfQorCQkJZG1fd3JpdGViKERNMTEwNV9JMkNDVFIsIDB4ODEgKyBtc2dzW2ldLmxlbik7CisJCQlmb3IgKGogPSAwOyBqIDwgMjU7IGorKykgeworCQkJCW1kZWxheSgxMCk7CisJCQkJc3RhdHVzID0gZG1fcmVhZGIoRE0xMTA1X0kyQ1NUUyk7CisJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGogPj0gMjUpCisJCQkJcmV0dXJuIC0xOwogCQl9CiAJfQogCXJldHVybiBudW07CkBAIC00MDcsMjIgKzQyMiwyMiBAQAogCS5mdW5jdGlvbmFsaXR5ID0gZnVuY3Rpb25hbGl0eSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRtMTEwNWR2YiAqZmVlZF90b19kbTExMDVkdmIoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1X2RldiAqZmVlZF90b19kbTExMDVfZGV2KHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKIHsKLQlyZXR1cm4gY29udGFpbmVyX29mKGZlZWQtPmRlbXV4LCBzdHJ1Y3QgZG0xMTA1ZHZiLCBkZW11eCk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZWVkLT5kZW11eCwgc3RydWN0IGRtMTEwNV9kZXYsIGRlbXV4KTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1ZHZiICpmcm9udGVuZF90b19kbTExMDVkdmIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVfZGV2ICpmcm9udGVuZF90b19kbTExMDVfZGV2KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXJldHVybiBjb250YWluZXJfb2YoZmUtPmR2Yiwgc3RydWN0IGRtMTEwNWR2YiwgZHZiX2FkYXB0ZXIpOworCXJldHVybiBjb250YWluZXJfb2YoZmUtPmR2Yiwgc3RydWN0IGRtMTEwNV9kZXYsIGR2Yl9hZGFwdGVyKTsKIH0KIAotc3RhdGljIGludCBkbTExMDVkdmJfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQgZG0xMTA1X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZnJvbnRlbmRfdG9fZG0xMTA1ZHZiKGZlKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gZnJvbnRlbmRfdG9fZG0xMTA1X2RldihmZSk7CiAJdTMyIGxuYl9tYXNrLCBsbmJfMTN2LCBsbmJfMTh2LCBsbmJfb2ZmOwogCi0Jc3dpdGNoIChkbTExMDVkdmItPmJvYXJkbnIpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmRucikgewogCWNhc2UgRE0xMTA1X0JPQVJEX0FYRVNTX0RNMDU6CiAJCWxuYl9tYXNrID0gRE0wNV9MTkJfTUFTSzsKIAkJbG5iX29mZiA9IERNMDVfTE5CX09GRjsKQEAgLTQzOCw2MiArNDUzLDY3IEBACiAJCWxuYl8xOHYgPSBETTExMDVfTE5CXzE4VjsKIAl9CiAKLQlvdXRsKGxuYl9tYXNrLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9DVFIpKTsKKwlkbV93cml0ZWwoRE0xMTA1X0dQSU9DVFIsIGxuYl9tYXNrKTsKIAlpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCkKLQkJb3V0bChsbmJfMTh2ICwgZG1faW9fbWVtKERNMTEwNV9HUElPVkFMKSk7CisJCWRtX3dyaXRlbChETTExMDVfR1BJT1ZBTCwgbG5iXzE4dik7CiAJZWxzZSBpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMykKLQkJb3V0bChsbmJfMTN2LCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJZG1fd3JpdGVsKERNMTEwNV9HUElPVkFMLCBsbmJfMTN2KTsKIAllbHNlCi0JCW91dGwobG5iX29mZiwgZG1faW9fbWVtKERNMTEwNV9HUElPVkFMKSk7CisJCWRtX3dyaXRlbChETTExMDVfR1BJT1ZBTCwgbG5iX29mZik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX3NldF9kbWFfYWRkcihzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfc2V0X2RtYV9hZGRyKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0Jb3V0bChjcHVfdG9fbGUzMihkbTExMDVkdmItPmRtYV9hZGRyKSwgZG1faW9fbWVtKERNMTEwNV9TVEFEUikpOworCWRtX3dyaXRlbChETTExMDVfU1RBRFIsIGNwdV90b19sZTMyKGRldi0+ZG1hX2FkZHIpKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1ZHZiX2RtYV9tYXAoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1X2RtYV9tYXAoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlkbTExMDVkdmItPnRzX2J1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRtMTEwNWR2Yi0+cGRldiwgNipETTExMDVfRE1BX0JZVEVTLCAmZG0xMTA1ZHZiLT5kbWFfYWRkcik7CisJZGV2LT50c19idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBkZXYsCisJCQkJCTYgKiBETTExMDVfRE1BX0JZVEVTLAorCQkJCQkmZGV2LT5kbWFfYWRkcik7CiAKLQlyZXR1cm4gIWRtMTEwNWR2Yi0+dHNfYnVmOworCXJldHVybiAhZGV2LT50c19idWY7CiB9CiAKLXN0YXRpYyB2b2lkIGRtMTEwNWR2Yl9kbWFfdW5tYXAoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIHZvaWQgZG0xMTA1X2RtYV91bm1hcChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZG0xMTA1ZHZiLT5wZGV2LCA2KkRNMTEwNV9ETUFfQllURVMsIGRtMTEwNWR2Yi0+dHNfYnVmLCBkbTExMDVkdmItPmRtYV9hZGRyKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGRldiwKKwkJCTYgKiBETTExMDVfRE1BX0JZVEVTLAorCQkJZGV2LT50c19idWYsCisJCQlkZXYtPmRtYV9hZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2VuYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9lbmFibGVfaXJxcyhzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCW91dGIoSU5UTUFLX0FMTE1BU0ssIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7Ci0Jb3V0YigxLCBkbV9pb19tZW0oRE0xMTA1X0NSKSk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRNQUssIElOVE1BS19BTExNQVNLKTsKKwlkbV93cml0ZWIoRE0xMTA1X0NSLCAxKTsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfZGlzYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0Jb3V0YihJTlRNQUtfSVJNLCBkbV9pb19tZW0oRE0xMTA1X0lOVE1BSykpOwotCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9DUikpOworCWRtX3dyaXRlYihETTExMDVfSU5UTUFLLCBJTlRNQUtfSVJNKTsKKwlkbV93cml0ZWIoRE0xMTA1X0NSLCAwKTsKIH0KIAotc3RhdGljIGludCBkbTExMDVkdmJfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmYpCitzdGF0aWMgaW50IGRtMTEwNV9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmZWVkX3RvX2RtMTEwNWR2YihmKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gZmVlZF90b19kbTExMDVfZGV2KGYpOwogCi0JaWYgKGRtMTEwNWR2Yi0+ZnVsbF90c191c2VycysrID09IDApCi0JCWRtMTEwNWR2Yl9lbmFibGVfaXJxcyhkbTExMDVkdmIpOworCWlmIChkZXYtPmZ1bGxfdHNfdXNlcnMrKyA9PSAwKQorCQlkbTExMDVfZW5hYmxlX2lycXMoZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRtMTEwNWR2Yl9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQorc3RhdGljIGludCBkbTExMDVfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmZWVkX3RvX2RtMTEwNWR2YihmKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gZmVlZF90b19kbTExMDVfZGV2KGYpOwogCi0JaWYgKC0tZG0xMTA1ZHZiLT5mdWxsX3RzX3VzZXJzID09IDApCi0JCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKwlpZiAoLS1kZXYtPmZ1bGxfdHNfdXNlcnMgPT0gMCkKKwkJZG0xMTA1X2Rpc2FibGVfaXJxcyhkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTcsNjggKzUzNyw2NCBAQAogLyogd29yayBoYW5kbGVyICovCiBzdGF0aWMgdm9pZCBkbTExMDVfZG14X2J1ZmZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0KLQkJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtMTEwNWR2Yiwgd29yayk7CisJc3RydWN0IGRtMTEwNV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG0xMTA1X2Rldiwgd29yayk7CiAJdW5zaWduZWQgaW50IG5icGFja2V0czsKLQl1MzIgb2xkd3JwID0gZG0xMTA1ZHZiLT53cnA7Ci0JdTMyIG5leHR3cnAgPSBkbTExMDVkdmItPm5leHR3cnA7CisJdTMyIG9sZHdycCA9IGRldi0+d3JwOworCXUzMiBuZXh0d3JwID0gZGV2LT5uZXh0d3JwOwogCi0JaWYgKCEoKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKLQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCi0JCQkoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwICsgMTg4ICogMl0gPT0gMHg0NykpKSB7Ci0JCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCsrOworCWlmICghKChkZXYtPnRzX2J1ZltvbGR3cnBdID09IDB4NDcpICYmCisJCQkoZGV2LT50c19idWZbb2xkd3JwICsgMTg4XSA9PSAweDQ3KSAmJgorCQkJKGRldi0+dHNfYnVmW29sZHdycCArIDE4OCAqIDJdID09IDB4NDcpKSkgeworCQlkZXYtPlBhY2tldEVycm9yQ291bnQrKzsKIAkJLyogYmFkIHBhY2tldCBmb3VuZCAqLwotCQlpZiAoKGRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgotCQkJCShkbTExMDVkdmItPmRtYXJzdCA9PSAwKSkgewotCQkJb3V0YigxLCBkbV9pb19tZW0oRE0xMTA1X1JTVCkpOwotCQkJZG0xMTA1ZHZiLT53cnAgPSAwOwotCQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID0gMDsKLQkJCWRtMTEwNWR2Yi0+ZG1hcnN0ID0gMDsKKwkJaWYgKChkZXYtPlBhY2tldEVycm9yQ291bnQgPj0gMikgJiYKKwkJCQkoZGV2LT5kbWFyc3QgPT0gMCkpIHsKKwkJCWRtX3dyaXRlYihETTExMDVfUlNULCAxKTsKKwkJCWRldi0+d3JwID0gMDsKKwkJCWRldi0+UGFja2V0RXJyb3JDb3VudCA9IDA7CisJCQlkZXYtPmRtYXJzdCA9IDA7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAlpZiAobmV4dHdycCA8IG9sZHdycCkgewotCQltZW1jcHkoZG0xMTA1ZHZiLT50c19idWYgKyBkbTExMDVkdmItPmJ1ZmZlcl9zaXplLAotCQkJCQkJZG0xMTA1ZHZiLT50c19idWYsIG5leHR3cnApOwotCQluYnBhY2tldHMgPSAoKGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUgLSBvbGR3cnApICsgbmV4dHdycCkgLyAxODg7CisJCW1lbWNweShkZXYtPnRzX2J1ZiArIGRldi0+YnVmZmVyX3NpemUsIGRldi0+dHNfYnVmLCBuZXh0d3JwKTsKKwkJbmJwYWNrZXRzID0gKChkZXYtPmJ1ZmZlcl9zaXplIC0gb2xkd3JwKSArIG5leHR3cnApIC8gMTg4OwogCX0gZWxzZQogCQluYnBhY2tldHMgPSAobmV4dHdycCAtIG9sZHdycCkgLyAxODg7CiAKLQlkbTExMDVkdmItPndycCA9IG5leHR3cnA7Ci0JZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZkbTExMDVkdmItPmRlbXV4LAotCQkJCQkmZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSwgbmJwYWNrZXRzKTsKKwlkZXYtPndycCA9IG5leHR3cnA7CisJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZkZXYtPmRlbXV4LCAmZGV2LT50c19idWZbb2xkd3JwXSwgbmJwYWNrZXRzKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGRtMTEwNWR2Yl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IGRtMTEwNV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGRldl9pZDsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gZGV2X2lkOwogCiAJLyogUmVhZC1Xcml0ZSBJTlNUUyBBY2sncyBJbnRlcnJ1cHQgZm9yIERNMTEwNSBjaGlwIDE2LjAzLjIwMDggKi8KLQl1bnNpZ25lZCBpbnQgaW50c3RzID0gaW5iKGRtX2lvX21lbShETTExMDVfSU5UU1RTKSk7Ci0Jb3V0YihpbnRzdHMsIGRtX2lvX21lbShETTExMDVfSU5UU1RTKSk7CisJdW5zaWduZWQgaW50IGludHN0cyA9IGRtX3JlYWRiKERNMTEwNV9JTlRTVFMpOworCWRtX3dyaXRlYihETTExMDVfSU5UU1RTLCBpbnRzdHMpOwogCiAJc3dpdGNoIChpbnRzdHMpIHsKIAljYXNlIElOVFNUU19UU0lSUToKIAljYXNlIChJTlRTVFNfVFNJUlEgfCBJTlRTVFNfSVIpOgotCQlkbTExMDVkdmItPm5leHR3cnAgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9XUlApKSAtCi0JCQkJCWlubChkbV9pb19tZW0oRE0xMTA1X1NUQURSKSk7Ci0JCXF1ZXVlX3dvcmsoZG0xMTA1ZHZiLT53cSwgJmRtMTEwNWR2Yi0+d29yayk7CisJCWRldi0+bmV4dHdycCA9IGRtX3JlYWRsKERNMTEwNV9XUlApIC0gZG1fcmVhZGwoRE0xMTA1X1NUQURSKTsKKwkJcXVldWVfd29yayhkZXYtPndxLCAmZGV2LT53b3JrKTsKIAkJYnJlYWs7CiAJY2FzZSBJTlRTVFNfSVI6Ci0JCWRtMTEwNWR2Yi0+aXIuaXJfY29tbWFuZCA9IGlubChkbV9pb19tZW0oRE0xMTA1X0lSQ09ERSkpOwotCQlzY2hlZHVsZV93b3JrKCZkbTExMDVkdmItPmlyLndvcmspOworCQlkZXYtPmlyLmlyX2NvbW1hbmQgPSBkbV9yZWFkbChETTExMDVfSVJDT0RFKTsKKwkJc2NoZWR1bGVfd29yaygmZGV2LT5pci53b3JrKTsKIAkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgX19kZXZpbml0IGRtMTEwNV9pcl9pbml0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNSkKK2ludCBfX2RldmluaXQgZG0xMTA1X2lyX2luaXQoc3RydWN0IGRtMTEwNV9kZXYgKmRtMTEwNSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcyA9ICZpcl9jb2Rlc19kbTExMDVfbmVjX3RhYmxlOwotCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKQEAgLTYxMSw1MSArNjI3LDUxIEBACiAKIAlJTklUX1dPUksoJmRtMTEwNS0+aXIud29yaywgZG0xMTA1X2VtaXRfa2V5KTsKIAotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMsIE5VTEwpOwogCiAJcmV0dXJuIGVycjsKIH0KIAotdm9pZCBfX2RldmV4aXQgZG0xMTA1X2lyX2V4aXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQordm9pZCBfX2RldmV4aXQgZG0xMTA1X2lyX2V4aXQoc3RydWN0IGRtMTEwNV9kZXYgKmRtMTEwNSkKIHsKIAlpcl9pbnB1dF91bnJlZ2lzdGVyKGRtMTEwNS0+aXIuaW5wdXRfZGV2KTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1ZHZiX2h3X2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1X2h3X2luaXQoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlkbTExMDVkdmJfZGlzYWJsZV9pcnFzKGRtMTEwNWR2Yik7CisJZG0xMTA1X2Rpc2FibGVfaXJxcyhkZXYpOwogCi0Jb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0hPU1RfQ1RSKSk7CisJZG1fd3JpdGViKERNMTEwNV9IT1NUX0NUUiwgMCk7CiAKIAkvKkRBVEFMRU4gMTg4LCovCi0Jb3V0YigxODgsIGRtX2lvX21lbShETTExMDVfRFRBTEVOVEgpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0RUQUxFTlRILCAxODgpOwogCS8qVFNfU1RSVCBUU19WQUxQIE1TQkZJUlNUIFRTX01PREUgQUxQQVMgVFNQRVMqLwotCW91dHcoMHhjMTBhLCBkbV9pb19tZW0oRE0xMTA1X1RTQ1RSKSk7CisJZG1fd3JpdGV3KERNMTEwNV9UU0NUUiwgMHhjMTBhKTsKIAogCS8qIG1hcCBETUEgYW5kIHNldCBhZGRyZXNzICovCi0JZG0xMTA1ZHZiX2RtYV9tYXAoZG0xMTA1ZHZiKTsKLQlkbTExMDVkdmJfc2V0X2RtYV9hZGRyKGRtMTEwNWR2Yik7CisJZG0xMTA1X2RtYV9tYXAoZGV2KTsKKwlkbTExMDVfc2V0X2RtYV9hZGRyKGRldik7CiAJLyogYmlnIGJ1ZmZlciAqLwotCW91dGwoNSpETTExMDVfRE1BX0JZVEVTLCBkbV9pb19tZW0oRE0xMTA1X1JMRU4pKTsKLQlvdXRiKDQ3LCBkbV9pb19tZW0oRE0xMTA1X0lOVENOVCkpOworCWRtX3dyaXRlbChETTExMDVfUkxFTiwgNSAqIERNMTEwNV9ETUFfQllURVMpOworCWRtX3dyaXRlYihETTExMDVfSU5UQ05ULCA0Nyk7CiAKIAkvKiBJUiBORUMgbW9kZSBlbmFibGUgKi8KLQlvdXRiKChETTExMDVfSVJfRU4gfCBETTExMDVfU1lTX0NISyksIGRtX2lvX21lbShETTExMDVfSVJDVFIpKTsKLQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSVJNT0RFKSk7Ci0Jb3V0dygwLCBkbV9pb19tZW0oRE0xMTA1X1NZU1RFTUNPREUpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lSQ1RSLCAoRE0xMTA1X0lSX0VOIHwgRE0xMTA1X1NZU19DSEspKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lSTU9ERSwgMCk7CisJZG1fd3JpdGV3KERNMTEwNV9TWVNURU1DT0RFLCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfaHdfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfaHdfZXhpdChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZGlzYWJsZV9pcnFzKGRldik7CiAKIAkvKiBJUiBkaXNhYmxlICovCi0Jb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0lSQ1RSKSk7Ci0Jb3V0YihJTlRNQUtfTk9ORU1BU0ssIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7CisJZG1fd3JpdGViKERNMTEwNV9JUkNUUiwgMCk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRNQUssIElOVE1BS19OT05FTUFTSyk7CiAKLQlkbTExMDVkdmJfZG1hX3VubWFwKGRtMTEwNWR2Yik7CisJZG0xMTA1X2RtYV91bm1hcChkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7CkBAIC02ODUsNzAgKzcwMSw3OSBAQAogCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGZyb250ZW5kX2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIHN0cnVjdCBkczMwMDBfY29uZmlnIGR2YndvcmxkX2RzMzAwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewogCWludCByZXQ7CiAKLQlzd2l0Y2ggKGRtMTEwNWR2Yi0+Ym9hcmRucikgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBETTExMDVfQk9BUkRfRFZCV09STERfMjAwNDoKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJY3gyNDExNl9hdHRhY2gsICZzZXJpdF9zcDI2MzNfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkKLQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNWR2Yl9zZXRfdm9sdGFnZTsKKwkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZmUpIHsKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGV2LT5mZSA9IGR2Yl9hdHRhY2goCisJCQlkczMwMDBfYXR0YWNoLCAmZHZid29ybGRfZHMzMDAwX2NvbmZpZywKKwkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZmUpCisJCQlkZXYtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkbTExMDVfc2V0X3ZvbHRhZ2U7CiAKIAkJYnJlYWs7CiAJY2FzZSBETTExMDVfQk9BUkRfRFZCV09STERfMjAwMjoKIAljYXNlIERNMTEwNV9CT0FSRF9BWEVTU19ETTA1OgogCWRlZmF1bHQ6Ci0JCWRtMTEwNWR2Yi0+ZmUgPSBkdmJfYXR0YWNoKAorCQlkZXYtPmZlID0gZHZiX2F0dGFjaCgKIAkJCXN0djAyOTlfYXR0YWNoLCAmc2hhcnBfejAxOTRhX2NvbmZpZywKLQkJCSZkbTExMDVkdmItPmkyY19hZGFwKTsKLQkJaWYgKGRtMTEwNWR2Yi0+ZmUpIHsKLQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9Ci0JCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOwotCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZG0xMTA1ZHZiLT5mZSwgMHg2MCwKLQkJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIERWQl9QTExfT1BFUkExKTsKKwkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZmUpIHsKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKKwkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZmUsIDB4NjAsCisJCQkJCSZkZXYtPmkyY19hZGFwLCBEVkJfUExMX09QRVJBMSk7CiAJCQlicmVhazsKIAkJfQogCi0JCWRtMTEwNWR2Yi0+ZmUgPSBkdmJfYXR0YWNoKAorCQlkZXYtPmZlID0gZHZiX2F0dGFjaCgKIAkJCXN0djAyODhfYXR0YWNoLCAmZWFyZGFfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkgewotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0KLQkJCQkJCWRtMTEwNWR2Yl9zZXRfdm9sdGFnZTsKLQkJCWR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGRtMTEwNWR2Yi0+ZmUsIDB4NjEsCi0JCQkJCSZkbTExMDVkdmItPmkyY19hZGFwKTsKKwkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZmUpIHsKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKKwkJCWR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGRldi0+ZmUsIDB4NjEsCisJCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJc2kyMXh4X2F0dGFjaCwgJnNlcml0X2NvbmZpZywKLQkJCSZkbTExMDVkdmItPmkyY19hZGFwKTsKLQkJaWYgKGRtMTEwNWR2Yi0+ZmUpCi0JCQlkbTExMDVkdmItPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPQotCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKIAogCX0KIAotCWlmICghZG0xMTA1ZHZiLT5mZSkgewotCQlkZXZfZXJyKCZkbTExMDVkdmItPnBkZXYtPmRldiwgImNvdWxkIG5vdCBhdHRhY2ggZnJvbnRlbmRcbiIpOworCWlmICghZGV2LT5mZSkgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBhdHRhY2ggZnJvbnRlbmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXQgPSBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXIsIGRtMTEwNWR2Yi0+ZmUpOworCXJldCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZGV2LT5kdmJfYWRhcHRlciwgZGV2LT5mZSk7CiAJaWYgKHJldCA8IDApIHsKLQkJaWYgKGRtMTEwNWR2Yi0+ZmUtPm9wcy5yZWxlYXNlKQotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnJlbGVhc2UoZG0xMTA1ZHZiLT5mZSk7Ci0JCWRtMTEwNWR2Yi0+ZmUgPSBOVUxMOworCQlpZiAoZGV2LT5mZS0+b3BzLnJlbGVhc2UpCisJCQlkZXYtPmZlLT5vcHMucmVsZWFzZShkZXYtPmZlKTsKKwkJZGV2LT5mZSA9IE5VTEw7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbTExMDVkdmJfcmVhZF9tYWMoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiLCB1OCAqbWFjKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGRtMTEwNV9yZWFkX21hYyhzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2LCB1OCAqbWFjKQogewogCXN0YXRpYyB1OCBjb21tYW5kWzFdID0geyAweDI4IH07CiAKQEAgLTc2Niw0NyArNzkxLDQ3IEBACiAJCX0sCiAJfTsKIAotCWRtMTEwNV9pMmNfeGZlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgbXNnICwgMik7Ci0JZGV2X2luZm8oJmRtMTEwNWR2Yi0+cGRldi0+ZGV2LCAiTUFDICVwTVxuIiwgbWFjKTsKKwlkbTExMDVfaTJjX3hmZXIoJmRldi0+aTJjX2FkYXAsIG1zZyAsIDIpOworCWRldl9pbmZvKCZkZXYtPnBkZXYtPmRldiwgIk1BQyAlcE1cbiIsIG1hYyk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGRtMTEwNV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXY7CiAJc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcjsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eDsKIAlzdHJ1Y3QgZG14X2RlbXV4ICpkbXg7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJaW50IGk7CiAKLQlkbTExMDVkdmIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG0xMTA1ZHZiKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkbTExMDVkdmIpCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtMTEwNV9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBib2FyZCBjb25maWcgKi8KLQlkbTExMDVkdmItPm5yID0gZG0xMTA1X2RldmNvdW50OwotCWRtMTEwNWR2Yi0+Ym9hcmRuciA9IFVOU0VUOwotCWlmIChjYXJkW2RtMTEwNWR2Yi0+bnJdIDwgQVJSQVlfU0laRShkbTExMDVfYm9hcmRzKSkKLQkJZG0xMTA1ZHZiLT5ib2FyZG5yID0gY2FyZFtkbTExMDVkdmItPm5yXTsKLQlmb3IgKGkgPSAwOyBVTlNFVCA9PSBkbTExMDVkdmItPmJvYXJkbnIgJiYKKwlkZXYtPm5yID0gZG0xMTA1X2RldmNvdW50OworCWRldi0+Ym9hcmRuciA9IFVOU0VUOworCWlmIChjYXJkW2Rldi0+bnJdIDwgQVJSQVlfU0laRShkbTExMDVfYm9hcmRzKSkKKwkJZGV2LT5ib2FyZG5yID0gY2FyZFtkZXYtPm5yXTsKKwlmb3IgKGkgPSAwOyBVTlNFVCA9PSBkZXYtPmJvYXJkbnIgJiYKIAkJCQlpIDwgQVJSQVlfU0laRShkbTExMDVfc3ViaWRzKTsgaSsrKQogCQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PQogCQkJZG0xMTA1X3N1Ymlkc1tpXS5zdWJ2ZW5kb3IgJiYKIAkJCQlwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09CiAJCQkJCWRtMTEwNV9zdWJpZHNbaV0uc3ViZGV2aWNlKQotCQkJZG0xMTA1ZHZiLT5ib2FyZG5yID0gZG0xMTA1X3N1Ymlkc1tpXS5jYXJkOworCQkJZGV2LT5ib2FyZG5yID0gZG0xMTA1X3N1Ymlkc1tpXS5jYXJkOwogCi0JaWYgKFVOU0VUID09IGRtMTEwNWR2Yi0+Ym9hcmRucikgewotCQlkbTExMDVkdmItPmJvYXJkbnIgPSBETTExMDVfQk9BUkRfVU5LTk9XTjsKKwlpZiAoVU5TRVQgPT0gZGV2LT5ib2FyZG5yKSB7CisJCWRldi0+Ym9hcmRuciA9IERNMTEwNV9CT0FSRF9VTktOT1dOOwogCQlkbTExMDVfY2FyZF9saXN0KHBkZXYpOwogCX0KIAogCWRtMTEwNV9kZXZjb3VudCsrOwotCWRtMTEwNWR2Yi0+cGRldiA9IHBkZXY7Ci0JZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSA9IDUgKiBETTExMDVfRE1BX0JZVEVTOwotCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA9IDA7Ci0JZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOworCWRldi0+cGRldiA9IHBkZXY7CisJZGV2LT5idWZmZXJfc2l6ZSA9IDUgKiBETTExMDVfRE1BX0JZVEVTOworCWRldi0+UGFja2V0RXJyb3JDb3VudCA9IDA7CisJZGV2LT5kbWFyc3QgPSAwOwogCiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJldCA8IDApCkBAIC04MjIsNDcgKzg0Nyw0NyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7CiAKLQlkbTExMDVkdmItPmlvX21lbSA9IHBjaV9pb21hcChwZGV2LCAwLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQlpZiAoIWRtMTEwNWR2Yi0+aW9fbWVtKSB7CisJZGV2LT5pb19tZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKCFkZXYtPmlvX21lbSkgewogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZkbTExMDVkdmItPmxvY2spOwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkbTExMDVkdmIpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCi0JcmV0ID0gZG0xMTA1ZHZiX2h3X2luaXQoZG0xMTA1ZHZiKTsKKwlyZXQgPSBkbTExMDVfaHdfaW5pdChkZXYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKIAogCS8qIGkyYyAqLwotCWkyY19zZXRfYWRhcGRhdGEoJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIGRtMTEwNWR2Yik7Ci0Jc3RyY3B5KGRtMTEwNWR2Yi0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUpOwotCWRtMTEwNWR2Yi0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKLQlkbTExMDVkdmItPmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7Ci0JZG0xMTA1ZHZiLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKLQlkbTExMDVkdmItPmkyY19hZGFwLmFsZ28gPSAmZG0xMTA1X2FsZ287Ci0JZG0xMTA1ZHZiLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkbTExMDVkdmI7Ci0JcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZkbTExMDVkdmItPmkyY19hZGFwKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmkyY19hZGFwLCBkZXYpOworCXN0cmNweShkZXYtPmkyY19hZGFwLm5hbWUsIERSSVZFUl9OQU1FKTsKKwlkZXYtPmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJZGV2LT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMOworCWRldi0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJZGV2LT5pMmNfYWRhcC5hbGdvID0gJmRtMTEwNV9hbGdvOworCWRldi0+aTJjX2FkYXAuYWxnb19kYXRhID0gZGV2OworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CiAKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZG0xMTA1ZHZiX2h3X2V4aXQ7CisJCWdvdG8gZXJyX2RtMTEwNV9od19leGl0OwogCiAJLyogZHZiICovCi0JcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXIsIERSSVZFUl9OQU1FLAorCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZkZXYtPmR2Yl9hZGFwdGVyLCBEUklWRVJfTkFNRSwKIAkJCQkJVEhJU19NT0RVTEUsICZwZGV2LT5kZXYsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9pMmNfZGVsX2FkYXB0ZXI7CiAKLQlkdmJfYWRhcHRlciA9ICZkbTExMDVkdmItPmR2Yl9hZGFwdGVyOworCWR2Yl9hZGFwdGVyID0gJmRldi0+ZHZiX2FkYXB0ZXI7CiAKLQlkbTExMDVkdmJfcmVhZF9tYWMoZG0xMTA1ZHZiLCBkdmJfYWRhcHRlci0+cHJvcG9zZWRfbWFjKTsKKwlkbTExMDVfcmVhZF9tYWMoZGV2LCBkdmJfYWRhcHRlci0+cHJvcG9zZWRfbWFjKTsKIAotCWR2YmRlbXV4ID0gJmRtMTEwNWR2Yi0+ZGVtdXg7CisJZHZiZGVtdXggPSAmZGV2LT5kZW11eDsKIAlkdmJkZW11eC0+ZmlsdGVybnVtID0gMjU2OwogCWR2YmRlbXV4LT5mZWVkbnVtID0gMjU2OwotCWR2YmRlbXV4LT5zdGFydF9mZWVkID0gZG0xMTA1ZHZiX3N0YXJ0X2ZlZWQ7Ci0JZHZiZGVtdXgtPnN0b3BfZmVlZCA9IGRtMTEwNWR2Yl9zdG9wX2ZlZWQ7CisJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBkbTExMDVfc3RhcnRfZmVlZDsKKwlkdmJkZW11eC0+c3RvcF9mZWVkID0gZG0xMTA1X3N0b3BfZmVlZDsKIAlkdmJkZW11eC0+ZG14LmNhcGFiaWxpdGllcyA9IChETVhfVFNfRklMVEVSSU5HIHwKIAkJCURNWF9TRUNUSU9OX0ZJTFRFUklORyB8IERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKIAlyZXQgPSBkdmJfZG14X2luaXQoZHZiZGVtdXgpOwpAQCAtODcwLDExMyArODk1LDExMyBAQAogCQlnb3RvIGVycl9kdmJfdW5yZWdpc3Rlcl9hZGFwdGVyOwogCiAJZG14ID0gJmR2YmRlbXV4LT5kbXg7Ci0JZG0xMTA1ZHZiLT5kbXhkZXYuZmlsdGVybnVtID0gMjU2OwotCWRtMTEwNWR2Yi0+ZG14ZGV2LmRlbXV4ID0gZG14OwotCWRtMTEwNWR2Yi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CisJZGV2LT5kbXhkZXYuZmlsdGVybnVtID0gMjU2OworCWRldi0+ZG14ZGV2LmRlbXV4ID0gZG14OworCWRldi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CiAKLQlyZXQgPSBkdmJfZG14ZGV2X2luaXQoJmRtMTEwNWR2Yi0+ZG14ZGV2LCBkdmJfYWRhcHRlcik7CisJcmV0ID0gZHZiX2RteGRldl9pbml0KCZkZXYtPmRteGRldiwgZHZiX2FkYXB0ZXIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9kdmJfZG14X3JlbGVhc2U7CiAKLQlkbTExMDVkdmItPmh3X2Zyb250ZW5kLnNvdXJjZSA9IERNWF9GUk9OVEVORF8wOworCWRldi0+aHdfZnJvbnRlbmQuc291cmNlID0gRE1YX0ZST05URU5EXzA7CiAKLQlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPmh3X2Zyb250ZW5kKTsKKwlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkZXYtPmh3X2Zyb250ZW5kKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfZHZiX2RteGRldl9yZWxlYXNlOwogCi0JZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQuc291cmNlID0gRE1YX01FTU9SWV9GRTsKKwlkZXYtPm1lbV9mcm9udGVuZC5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOwogCi0JcmV0ID0gZG14LT5hZGRfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOworCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRldi0+bWVtX2Zyb250ZW5kKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfcmVtb3ZlX2h3X2Zyb250ZW5kOwogCi0JcmV0ID0gZG14LT5jb25uZWN0X2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCXJldCA9IGRteC0+Y29ubmVjdF9mcm9udGVuZChkbXgsICZkZXYtPmh3X2Zyb250ZW5kKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfcmVtb3ZlX21lbV9mcm9udGVuZDsKIAotCXJldCA9IGZyb250ZW5kX2luaXQoZG0xMTA1ZHZiKTsKKwlyZXQgPSBmcm9udGVuZF9pbml0KGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2Rpc2Nvbm5lY3RfZnJvbnRlbmQ7CiAKLQlkdmJfbmV0X2luaXQoZHZiX2FkYXB0ZXIsICZkbTExMDVkdmItPmR2Ym5ldCwgZG14KTsKLQlkbTExMDVfaXJfaW5pdChkbTExMDVkdmIpOworCWR2Yl9uZXRfaW5pdChkdmJfYWRhcHRlciwgJmRldi0+ZHZibmV0LCBkbXgpOworCWRtMTEwNV9pcl9pbml0KGRldik7CiAKLQlJTklUX1dPUksoJmRtMTEwNWR2Yi0+d29yaywgZG0xMTA1X2RteF9idWZmZXIpOwotCXNwcmludGYoZG0xMTA1ZHZiLT53cW4sICIlcy8lZCIsIGR2Yl9hZGFwdGVyLT5uYW1lLCBkdmJfYWRhcHRlci0+bnVtKTsKLQlkbTExMDVkdmItPndxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZG0xMTA1ZHZiLT53cW4pOwotCWlmICghZG0xMTA1ZHZiLT53cSkKKwlJTklUX1dPUksoJmRldi0+d29yaywgZG0xMTA1X2RteF9idWZmZXIpOworCXNwcmludGYoZGV2LT53cW4sICIlcy8lZCIsIGR2Yl9hZGFwdGVyLT5uYW1lLCBkdmJfYWRhcHRlci0+bnVtKTsKKwlkZXYtPndxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZGV2LT53cW4pOworCWlmICghZGV2LT53cSkKIAkJZ290byBlcnJfZHZiX25ldDsKIAotCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG0xMTA1ZHZiX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJCQlEUklWRVJfTkFNRSwgZG0xMTA1ZHZiKTsKKwlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRtMTEwNV9pcnEsIElSUUZfU0hBUkVELAorCQkJCQkJRFJJVkVSX05BTUUsIGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3dvcmtxdWV1ZTsKIAogCXJldHVybiAwOwogCiBlcnJfd29ya3F1ZXVlOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGRtMTEwNWR2Yi0+d3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+d3EpOwogZXJyX2R2Yl9uZXQ6Ci0JZHZiX25ldF9yZWxlYXNlKCZkbTExMDVkdmItPmR2Ym5ldCk7CisJZHZiX25ldF9yZWxlYXNlKCZkZXYtPmR2Ym5ldCk7CiBlcnJfZGlzY29ubmVjdF9mcm9udGVuZDoKIAlkbXgtPmRpc2Nvbm5lY3RfZnJvbnRlbmQoZG14KTsKIGVycl9yZW1vdmVfbWVtX2Zyb250ZW5kOgotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+bWVtX2Zyb250ZW5kKTsKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkZXYtPm1lbV9mcm9udGVuZCk7CiBlcnJfcmVtb3ZlX2h3X2Zyb250ZW5kOgotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRldi0+aHdfZnJvbnRlbmQpOwogZXJyX2R2Yl9kbXhkZXZfcmVsZWFzZToKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZG14ZGV2KTsKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJmRldi0+ZG14ZGV2KTsKIGVycl9kdmJfZG14X3JlbGVhc2U6CiAJZHZiX2RteF9yZWxlYXNlKGR2YmRlbXV4KTsKIGVycl9kdmJfdW5yZWdpc3Rlcl9hZGFwdGVyOgogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOwogZXJyX2kyY19kZWxfYWRhcHRlcjoKLQlpMmNfZGVsX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotZXJyX2RtMTEwNWR2Yl9od19leGl0OgotCWRtMTEwNWR2Yl9od19leGl0KGRtMTEwNWR2Yik7CisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKK2Vycl9kbTExMDVfaHdfZXhpdDoKKwlkbTExMDVfaHdfZXhpdChkZXYpOwogZXJyX3BjaV9pb3VubWFwOgotCXBjaV9pb3VubWFwKHBkZXYsIGRtMTEwNWR2Yi0+aW9fbWVtKTsKKwlwY2lfaW91bm1hcChwZGV2LCBkZXYtPmlvX21lbSk7CiBlcnJfcGNpX3JlbGVhc2VfcmVnaW9uczoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogZXJyX3BjaV9kaXNhYmxlX2RldmljZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBlcnJfa2ZyZWU6CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWtmcmVlKGRtMTEwNWR2Yik7CisJa2ZyZWUoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgZG0xMTA1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlciA9ICZkbTExMDVkdmItPmR2Yl9hZGFwdGVyOwotCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4ID0gJmRtMTEwNWR2Yi0+ZGVtdXg7CisJc3RydWN0IGRtMTEwNV9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyID0gJmRldi0+ZHZiX2FkYXB0ZXI7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmZGV2LT5kZW11eDsKIAlzdHJ1Y3QgZG14X2RlbXV4ICpkbXggPSAmZHZiZGVtdXgtPmRteDsKIAotCWRtMTEwNV9pcl9leGl0KGRtMTEwNWR2Yik7CisJZG0xMTA1X2lyX2V4aXQoZGV2KTsKIAlkbXgtPmNsb3NlKGRteCk7Ci0JZHZiX25ldF9yZWxlYXNlKCZkbTExMDVkdmItPmR2Ym5ldCk7Ci0JaWYgKGRtMTEwNWR2Yi0+ZmUpCi0JCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGRtMTEwNWR2Yi0+ZmUpOworCWR2Yl9uZXRfcmVsZWFzZSgmZGV2LT5kdmJuZXQpOworCWlmIChkZXYtPmZlKQorCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChkZXYtPmZlKTsKIAogCWRteC0+ZGlzY29ubmVjdF9mcm9udGVuZChkbXgpOwotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+bWVtX2Zyb250ZW5kKTsKLQlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPmh3X2Zyb250ZW5kKTsKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZG14ZGV2KTsKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkZXYtPm1lbV9mcm9udGVuZCk7CisJZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZGV2LT5od19mcm9udGVuZCk7CisJZHZiX2RteGRldl9yZWxlYXNlKCZkZXYtPmRteGRldik7CiAJZHZiX2RteF9yZWxlYXNlKGR2YmRlbXV4KTsKIAlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKGR2Yl9hZGFwdGVyKTsKLQlpZiAoJmRtMTEwNWR2Yi0+aTJjX2FkYXApCi0JCWkyY19kZWxfYWRhcHRlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CisJaWYgKCZkZXYtPmkyY19hZGFwKQorCQlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOwogCi0JZG0xMTA1ZHZiX2h3X2V4aXQoZG0xMTA1ZHZiKTsKKwlkbTExMDVfaHdfZXhpdChkZXYpOwogCXN5bmNocm9uaXplX2lycShwZGV2LT5pcnEpOwotCWZyZWVfaXJxKHBkZXYtPmlycSwgZG0xMTA1ZHZiKTsKLQlwY2lfaW91bm1hcChwZGV2LCBkbTExMDVkdmItPmlvX21lbSk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCXBjaV9pb3VubWFwKHBkZXYsIGRldi0+aW9fbWVtKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZG0xMTA1X2RldmNvdW50LS07Ci0Ja2ZyZWUoZG0xMTA1ZHZiKTsKKwlrZnJlZShkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZG0xMTA1X2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKaW5kZXggYzM3NzkwYS4uOWRkYzU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKQEAgLTc2MSw3ICs3NjEsNiBAQAogCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRteGRldmZpbHRlci0+YnVmZmVyLCBOVUxMLCA4MTkyKTsKIAlkbXhkZXZmaWx0ZXItPnR5cGUgPSBETVhERVZfVFlQRV9OT05FOwogCWR2Yl9kbXhkZXZfZmlsdGVyX3N0YXRlX3NldChkbXhkZXZmaWx0ZXIsIERNWERFVl9TVEFURV9BTExPQ0FURUQpOwotCUlOSVRfTElTVF9IRUFEKCZkbXhkZXZmaWx0ZXItPmZlZWQudHMpOwogCWluaXRfdGltZXIoJmRteGRldmZpbHRlci0+dGltZXIpOwogCiAJZHZiZGV2LT51c2VycysrOwpAQCAtODg3LDYgKzg4Niw3IEBACiAJZG14ZGV2ZmlsdGVyLT50eXBlID0gRE1YREVWX1RZUEVfUEVTOwogCW1lbWNweSgmZG14ZGV2ZmlsdGVyLT5wYXJhbXMsIHBhcmFtcywKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMpKTsKKwlJTklUX0xJU1RfSEVBRCgmZG14ZGV2ZmlsdGVyLT5mZWVkLnRzKTsKIAogCWR2Yl9kbXhkZXZfZmlsdGVyX3N0YXRlX3NldChkbXhkZXZmaWx0ZXIsIERNWERFVl9TVEFURV9TRVQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCmluZGV4IGI3OGNmYjcuLjY3ZjE4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCkBAIC00MjYsMTYgKzQyNiw3IEBACiAJCX07CiAJfTsKIAotCWlmIChkdmJfZGVtdXhfdHNjaGVjaykgewotCQlpZiAoIWRlbXV4LT5jbnRfc3RvcmFnZSkKLQkJCWRlbXV4LT5jbnRfc3RvcmFnZSA9IHZtYWxsb2MoTUFYX1BJRCArIDEpOwotCi0JCWlmICghZGVtdXgtPmNudF9zdG9yYWdlKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIFRTL1RFSSBjaGVjay4gRGlzYWJsaW5nIGl0XG4iKTsKLQkJCWR2Yl9kZW11eF90c2NoZWNrID0gMDsKLQkJCWdvdG8gbm9fZHZiX2RlbXV4X3RzY2hlY2s7Ci0JCX0KLQorCWlmIChkZW11eC0+Y250X3N0b3JhZ2UpIHsKIAkJLyogY2hlY2sgcGt0IGNvdW50ZXIgKi8KIAkJaWYgKHBpZCA8IE1BWF9QSUQpIHsKIAkJCWlmIChidWZbMV0gJiAweDgwKQpAQCAtNDU0LDcgKzQ0NSw2IEBACiAJCX07CiAJCS8qIGVuZCBjaGVjayAqLwogCX07Ci1ub19kdmJfZGVtdXhfdHNjaGVjazoKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmVlZCwgJmRlbXV4LT5mZWVkX2xpc3QsIGxpc3RfaGVhZCkgewogCQlpZiAoKGZlZWQtPnBpZCAhPSBwaWQpICYmIChmZWVkLT5waWQgIT0gMHgyMDAwKSkKQEAgLTEyNDYsNiArMTIzNiw3IEBACiAJZHZiZGVtdXgtPmZlZWQgPSB2bWFsbG9jKGR2YmRlbXV4LT5mZWVkbnVtICogc2l6ZW9mKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCkpOwogCWlmICghZHZiZGVtdXgtPmZlZWQpIHsKIAkJdmZyZWUoZHZiZGVtdXgtPmZpbHRlcik7CisJCWR2YmRlbXV4LT5maWx0ZXIgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGR2YmRlbXV4LT5maWx0ZXJudW07IGkrKykgewpAQCAtMTI1Nyw2ICsxMjQ4LDEzIEBACiAJCWR2YmRlbXV4LT5mZWVkW2ldLmluZGV4ID0gaTsKIAl9CiAKKwlpZiAoZHZiX2RlbXV4X3RzY2hlY2spIHsKKwkJZHZiZGVtdXgtPmNudF9zdG9yYWdlID0gdm1hbGxvYyhNQVhfUElEICsgMSk7CisKKwkJaWYgKCFkdmJkZW11eC0+Y250X3N0b3JhZ2UpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIFRTL1RFSSBjaGVjay4gRGlzYWJsaW5nIGl0XG4iKTsKKwl9CisKIAlJTklUX0xJU1RfSEVBRCgmZHZiZGVtdXgtPmZyb250ZW5kX2xpc3QpOwogCiAJZm9yIChpID0gMDsgaSA8IERNWF9UU19QRVNfT1RIRVI7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCAwNzQ2MTIyLi41NWVhMjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMTE5OSw4ICsxMTk5LDYgQEAKIHsKIAlpbnQgciA9IDA7CiAKLQlkdHZfcHJvcGVydHlfZHVtcCh0dnApOwotCiAJLyogQWxsb3cgdGhlIGZyb250ZW5kIHRvIHZhbGlkYXRlIGluY29taW5nIHByb3BlcnRpZXMgKi8KIAlpZiAoZmUtPm9wcy5nZXRfcHJvcGVydHkpCiAJCXIgPSBmZS0+b3BzLmdldF9wcm9wZXJ0eShmZSwgdHZwKTsKQEAgLTEzMjMsNiArMTMyMSw4IEBACiAJCXIgPSAtMTsKIAl9CiAKKwlkdHZfcHJvcGVydHlfZHVtcCh0dnApOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKIAlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CiAKLQlkcHJpbnRrICgiJXNcbiIsIF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgX0lPQ19OUihjbWQpKTsKIAogCWlmIChmZXByaXYtPmV4aXQpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTUzNiw4ICsxNTM2LDcgQEAKIAkJaWYgKCh0dnBzLT5udW0gPT0gMCkgfHwgKHR2cHMtPm51bSA+IERUVl9JT0NUTF9NQVhfTVNHUykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQl0dnAgPSAoc3RydWN0IGR0dl9wcm9wZXJ0eSAqKSBrbWFsbG9jKHR2cHMtPm51bSAqCi0JCQlzaXplb2Yoc3RydWN0IGR0dl9wcm9wZXJ0eSksIEdGUF9LRVJORUwpOworCQl0dnAgPSBrbWFsbG9jKHR2cHMtPm51bSAqIHNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdHZwKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CkBAIC0xNTY5LDggKzE1NjgsNyBAQAogCQlpZiAoKHR2cHMtPm51bSA9PSAwKSB8fCAodHZwcy0+bnVtID4gRFRWX0lPQ1RMX01BWF9NU0dTKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXR2cCA9IChzdHJ1Y3QgZHR2X3Byb3BlcnR5ICopIGttYWxsb2ModHZwcy0+bnVtICoKLQkJCXNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CisJCXR2cCA9IGttYWxsb2ModHZwcy0+bnVtICogc2l6ZW9mKHN0cnVjdCBkdHZfcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0dnApIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCA4Yjg1NThmLi5iMTE1MzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCkBAIC01MDQsNiArNTA0LDcgQEAKIAkJCQkgICAgICAgImJ5dGVzIGxlZnQgaW4gVFMuICBSZXN5bmNpbmcuXG4iLCB0c19yZW1haW4pOwogCQkJCXByaXYtPnVsZV9zbmR1X2xlbiA9IDA7CiAJCQkJcHJpdi0+bmVlZF9wdXNpID0gMTsKKwkJCQl0cyArPSBUU19TWjsKIAkJCQljb250aW51ZTsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmMKaW5kZXggNTg0YmJkMS4uYTU3MTJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jCkBAIC04OSw2ICs4OSw3IEBACiAJcmJ1Zi0+cHJlYWQgPSByYnVmLT5wd3JpdGU7CiAJcmJ1Zi0+ZXJyb3IgPSAwOwogfQorRVhQT1JUX1NZTUJPTChkdmJfcmluZ2J1ZmZlcl9mbHVzaCk7CiAKIHZvaWQgZHZiX3JpbmdidWZmZXJfcmVzZXQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDFiMjQ5ODkuLmU1ZjkxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTExMiwxMSArMTEyLDEzIEBACiAJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfRElCNzAwMFAgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX0xHUzhHTDUgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0FUQk04ODMwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MR1M4R1hYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTUFYMjE2NSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBDb25leGFudCBVU0IyLjAgaHlicmlkIHJlZmVyZW5jZSBkZXNpZ24uCiAJICBDdXJyZW50bHksIG9ubHkgRFZCIGFuZCBBVFNDIG1vZGVzIGFyZSBzdXBwb3J0ZWQsIGFuYWxvZyBtb2RlCkBAIC0zMzQsMyArMzM2LDExIEBACiAJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEUzQyBFQzE2OCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIuCisKK2NvbmZpZyBEVkJfVVNCX0FaNjAyNworCXRyaXN0YXRlICJBenVyZXdhdmUgRFZCLVMvUzIgVVNCMi4wIEFaNjAyNyBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFZCX1VTQgorCXNlbGVjdCBEVkJfU1RCMDg5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RCNjEwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQVo2MDI3IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKaW5kZXggNzJjOTJjYi4uMWExOTI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCkBAIC04NSw2ICs4NSw5IEBACiBkdmItdXNiLWVjMTY4LW9ianMgPSBlYzE2OC5vCiBvYmotJChDT05GSUdfRFZCX1VTQl9FQzE2OCkgKz0gZHZiLXVzYi1lYzE2OC5vCiAKK2R2Yi11c2ItYXo2MDI3LW9ianMgPSBhejYwMjcubworb2JqLSQoQ09ORklHX0RWQl9VU0JfQVo2MDI3KSArPSBkdmItdXNiLWF6NjAyNy5vCisKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KICMgZHVlIHRvIHR1bmVyLXhjMzAyOAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwppbmRleCA4YjYwYTYwLi5kNzk3NTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKQEAgLTIxLDYgKzIxLDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKwogI2luY2x1ZGUgImFmOTAxNS5oIgogI2luY2x1ZGUgImFmOTAxMy5oIgogI2luY2x1ZGUgIm10MjA2MC5oIgpAQCAtNTUzLDI2ICs1NTUsNDUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBkdW1wIGVlcHJvbSAqLwotc3RhdGljIGludCBhZjkwMTVfZWVwcm9tX2R1bXAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorLyogaGFzaCAoYW5kIGR1bXApIGVlcHJvbSAqLworc3RhdGljIGludCBhZjkwMTVfZWVwcm9tX2hhc2goc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0JdTggcmVnLCB2YWw7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBlZXByb21fc2l6ZSA9IDI1NjsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCByZXQ7CisJdTggdmFsLCAqZWVwcm9tOworCXN0cnVjdCByZXFfdCByZXEgPSB7UkVBRF9JMkMsIEFGOTAxNV9JMkNfRUVQUk9NLCAwLCAwLCAxLCAxLCAmdmFsfTsKIAotCWZvciAocmVnID0gMDsgOyByZWcrKykgewotCQlpZiAocmVnICUgMTYgPT0gMCkgewotCQkJaWYgKHJlZykKLQkJCQlkZWJfaW5mbyhLRVJOX0NPTlQgIlxuIik7Ci0JCQlkZWJfaW5mbyhLRVJOX0RFQlVHICIlMDJ4OiIsIHJlZyk7Ci0JCX0KLQkJaWYgKGFmOTAxNV9yZWFkX3JlZ19pMmMoZCwgQUY5MDE1X0kyQ19FRVBST00sIHJlZywgJnZhbCkgPT0gMCkKLQkJCWRlYl9pbmZvKEtFUk5fQ09OVCAiICUwMngiLCB2YWwpOwotCQllbHNlCi0JCQlkZWJfaW5mbyhLRVJOX0NPTlQgIiAtLSIpOwotCQlpZiAocmVnID09IDB4ZmYpCi0JCQlicmVhazsKKwllZXByb20gPSBrbWFsbG9jKGVlcHJvbV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoZWVwcm9tID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChyZWcgPSAwOyByZWcgPCBlZXByb21fc2l6ZTsgcmVnKyspIHsKKwkJcmVxLmFkZHIgPSByZWc7CisJCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlOworCQllZXByb21bcmVnXSA9IHZhbDsKIAl9Ci0JZGViX2luZm8oS0VSTl9DT05UICJcbiIpOwotCXJldHVybiAwOworCisJaWYgKGR2Yl91c2JfYWY5MDE1X2RlYnVnICYgMHgwMSkKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgZWVwcm9tLAorCQkJCWVlcHJvbV9zaXplKTsKKworCUJVR19PTihlZXByb21fc2l6ZSAlIDQpOworCisJYWY5MDE1X2NvbmZpZy5lZXByb21fc3VtID0gMDsKKwlmb3IgKHJlZyA9IDA7IHJlZyA8IGVlcHJvbV9zaXplIC8gc2l6ZW9mKHUzMik7IHJlZysrKSB7CisJCWFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSAqPSBHT0xERU5fUkFUSU9fUFJJTUVfMzI7CisJCWFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSArPSBsZTMyX3RvX2NwdSgoKHUzMiAqKWVlcHJvbSlbcmVnXSk7CisJfQorCisJZGViX2luZm8oIiVzOiBlZXByb20gc3VtPSUuOHhcbiIsIF9fZnVuY19fLCBhZjkwMTVfY29uZmlnLmVlcHJvbV9zdW0pOworCisJcmV0ID0gMDsKK2ZyZWU6CisJa2ZyZWUoZWVwcm9tKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFmOTAxNV9kb3dubG9hZF9pcl90YWJsZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCkBAIC03MTEsMTIgKzczMiwxMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgYWY5MDE1X3NldHVwIHsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICpyY19rZXlfbWFwOworCXVuc2lnbmVkIGludCByY19rZXlfbWFwX3NpemU7CisJdTggKmlyX3RhYmxlOworCXVuc2lnbmVkIGludCBpcl90YWJsZV9zaXplOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgKmFmOTAxNV9zZXR1cF9tYXRjaCh1bnNpZ25lZCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgKnRhYmxlKQoreworCWZvciAoOyB0YWJsZS0+cmNfa2V5X21hcDsgdGFibGUrKykKKwkJaWYgKHRhYmxlLT5pZCA9PSBpZCkKKwkJCXJldHVybiB0YWJsZTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgYWY5MDE1X3NldHVwX21vZHBhcmFtW10gPSB7CisJeyBBRjkwMTVfUkVNT1RFX0FfTElOS19EVFVfTSwKKwkJYWY5MDE1X3JjX2tleXNfYV9saW5rLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2FfbGluayksCisJCWFmOTAxNV9pcl90YWJsZV9hX2xpbmssIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2FfbGluaykgfSwKKwl7IEFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMywKKwkJYWY5MDE1X3JjX2tleXNfbXNpLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaSksCisJCWFmOTAxNV9pcl90YWJsZV9tc2ksIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaSkgfSwKKwl7IEFGOTAxNV9SRU1PVEVfTVlHSUNUVl9VNzE4LAorCQlhZjkwMTVfcmNfa2V5c19teWdpY3R2LCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX215Z2ljdHYpLAorCQlhZjkwMTVfaXJfdGFibGVfbXlnaWN0diwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dikgfSwKKwl7IEFGOTAxNV9SRU1PVEVfRElHSVRUUkFERV9EVkJfVCwKKwkJYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGUsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGUpIH0sCisJeyBBRjkwMTVfUkVNT1RFX0FWRVJNRURJQV9LUywKKwkJYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSksCisJCWFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3MsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rcykgfSwKKwl7IH0KK307CisKKy8qIGRvbid0IGFkZCBuZXcgZW50cmllcyBoZXJlIGFueW1vcmUsIHVzZSBoYXNoZXMgaW5zdGVhZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgYWY5MDE1X3NldHVwX3VzYmlkc1tdID0geworCXsgVVNCX1ZJRF9MRUFEVEVLLAorCQlhZjkwMTVfcmNfa2V5c19sZWFkdGVrLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2xlYWR0ZWspLAorCQlhZjkwMTVfaXJfdGFibGVfbGVhZHRlaywgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbGVhZHRlaykgfSwKKwl7IFVTQl9WSURfVklTSU9OUExVUywKKwkJYWY5MDE1X3JjX2tleXNfdHdpbmhhbiwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190d2luaGFuKSwKKwkJYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW4sIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW4pIH0sCisJeyBVU0JfVklEX0tXT1JMRF8yLCAvKiBUT0RPOiB1c2UgY29ycmVjdCByYyBrZXlzICovCisJCWFmOTAxNV9yY19rZXlzX3R3aW5oYW4sIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbiksCisJCWFmOTAxNV9pcl90YWJsZV9rd29ybGQsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2t3b3JsZCkgfSwKKwl7IFVTQl9WSURfQVZFUk1FRElBLAorCQlhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEsIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhKSB9LAorCXsgVVNCX1ZJRF9NU0lfMiwKKwkJYWY5MDE1X3JjX2tleXNfbXNpX2RpZ2l2b3hfaWlpLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaV9kaWdpdm94X2lpaSksCisJCWFmOTAxNV9pcl90YWJsZV9tc2lfZGlnaXZveF9paWksIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaV9kaWdpdm94X2lpaSkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwIGFmOTAxNV9zZXR1cF9oYXNoZXNbXSA9IHsKKwl7IDB4YjhmZWI3MDgsCisJCWFmOTAxNV9yY19rZXlzX21zaSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2kpLAorCQlhZjkwMTVfaXJfdGFibGVfbXNpLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpIH0sCisJeyAweGEzNzAzZDAwLAorCQlhZjkwMTVfcmNfa2V5c19hX2xpbmssIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYV9saW5rKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2FfbGluaywgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYV9saW5rKSB9LAorCXsgMHg5YjdkYzY0ZSwKKwkJYWY5MDE1X3JjX2tleXNfbXlnaWN0diwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19teWdpY3R2KSwKKwkJYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpIH0sCisJeyB9Cit9OworCitzdGF0aWMgdm9pZCBhZjkwMTVfc2V0X3JlbW90ZV9jb25maWcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcykKK3sKKwljb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwICp0YWJsZSA9IE5VTEw7CisKKwlpZiAoZHZiX3VzYl9hZjkwMTVfcmVtb3RlKSB7CisJCS8qIGxvYWQgcmVtb3RlIGRlZmluZWQgYXMgbW9kdWxlIHBhcmFtICovCisJCXRhYmxlID0gYWY5MDE1X3NldHVwX21hdGNoKGR2Yl91c2JfYWY5MDE1X3JlbW90ZSwKKwkJCQlhZjkwMTVfc2V0dXBfbW9kcGFyYW0pOworCX0gZWxzZSB7CisJCXUxNiB2ZW5kb3IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKworCQl0YWJsZSA9IGFmOTAxNV9zZXR1cF9tYXRjaChhZjkwMTVfY29uZmlnLmVlcHJvbV9zdW0sCisJCQkJYWY5MDE1X3NldHVwX2hhc2hlcyk7CisKKwkJaWYgKCF0YWJsZSAmJiB2ZW5kb3IgPT0gVVNCX1ZJRF9BRkFURUNIKSB7CisJCQkvKiBDaGVjayBVU0IgbWFudWZhY3R1cmVyIGFuZCBwcm9kdWN0IHN0cmluZ3MgYW5kIHRyeQorCQkJICAgdG8gZGV0ZXJtaW5lIGNvcnJlY3QgcmVtb3RlIGluIGNhc2Ugb2YgY2hpcCB2ZW5kb3IKKwkJCSAgIHJlZmVyZW5jZSBJRHMgYXJlIHVzZWQuCisJCQkgICBETyBOT1QgQUREIEFOWVRISU5HIE5FVyBIRVJFLiBVc2UgaGFzaGVzIGluc3RlYWQuCisJCQkgKi8KKwkJCWNoYXIgbWFudWZhY3R1cmVyWzEwXTsKKwkJCW1lbXNldChtYW51ZmFjdHVyZXIsIDAsIHNpemVvZihtYW51ZmFjdHVyZXIpKTsKKwkJCXVzYl9zdHJpbmcodWRldiwgdWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAorCQkJCW1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOworCQkJaWYgKCFzdHJjbXAoIk1TSSIsIG1hbnVmYWN0dXJlcikpIHsKKwkJCQkvKiBpTWFudWZhY3R1cmVyIDEgTVNJCisJCQkJICAgaVByb2R1Y3QgICAgICAyIE1TSSBLLVZPWCAqLworCQkJCXRhYmxlID0gYWY5MDE1X3NldHVwX21hdGNoKAorCQkJCQlBRjkwMTVfUkVNT1RFX01TSV9ESUdJVk9YX01JTklfSUlfVjMsCisJCQkJCWFmOTAxNV9zZXR1cF9tb2RwYXJhbSk7CisJCQl9IGVsc2UgaWYgKHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09CisJCQkJY3B1X3RvX2xlMTYoVVNCX1BJRF9UUkVLU1RPUl9EVkJUKSkgeworCQkJCXRhYmxlID0gJihjb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwKXsgMCwKKwkJCQkJYWY5MDE1X3JjX2tleXNfdHJla3N0b3IsCisJCQkJCUFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHJla3N0b3IpLAorCQkJCQlhZjkwMTVfaXJfdGFibGVfdHJla3N0b3IsCisJCQkJCUFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3RyZWtzdG9yKQorCQkJCX07CisJCQl9CisJCX0gZWxzZSBpZiAoIXRhYmxlKQorCQkJdGFibGUgPSBhZjkwMTVfc2V0dXBfbWF0Y2godmVuZG9yLCBhZjkwMTVfc2V0dXBfdXNiaWRzKTsKKwl9CisKKwlpZiAodGFibGUpIHsKKwkJcHJvcHMtPnJjX2tleV9tYXAgPSB0YWJsZS0+cmNfa2V5X21hcDsKKwkJcHJvcHMtPnJjX2tleV9tYXBfc2l6ZSA9IHRhYmxlLT5yY19rZXlfbWFwX3NpemU7CisJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSB0YWJsZS0+aXJfdGFibGU7CisJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9IHRhYmxlLT5pcl90YWJsZV9zaXplOworCX0KK30KKwogc3RhdGljIGludCBhZjkwMTVfcmVhZF9jb25maWcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50IHJldDsKIAl1OCB2YWwsIGksIG9mZnNldCA9IDA7CiAJc3RydWN0IHJlcV90IHJlcSA9IHtSRUFEX0kyQywgQUY5MDE1X0kyQ19FRVBST00sIDAsIDAsIDEsIDEsICZ2YWx9OwotCWNoYXIgbWFudWZhY3R1cmVyWzEwXTsKIAogCS8qIElSIHJlbW90ZSBjb250cm9sbGVyICovCiAJcmVxLmFkZHIgPSBBRjkwMTVfRUVQUk9NX0lSX01PREU7CkBAIC03MjgsMTU4ICs4NjksMTggQEAKIAl9CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcjsKKworCXJldCA9IGFmOTAxNV9lZXByb21faGFzaCh1ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCiAJZGViX2luZm8oIiVzOiBJUiBtb2RlOiVkXG4iLCBfX2Z1bmNfXywgdmFsKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWY5MDE1X3Byb3BlcnRpZXNfY291bnQ7IGkrKykgewogCQlpZiAodmFsID09IEFGOTAxNV9JUl9NT0RFX0RJU0FCTEVEKSB7CiAJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0gTlVMTDsKIAkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSAgPSAwOwotCQl9IGVsc2UgaWYgKGR2Yl91c2JfYWY5MDE1X3JlbW90ZSkgewotCQkJLyogbG9hZCByZW1vdGUgZGVmaW5lZCBhcyBtb2R1bGUgcGFyYW0gKi8KLQkJCXN3aXRjaCAoZHZiX3VzYl9hZjkwMTVfcmVtb3RlKSB7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfQV9MSU5LX0RUVV9NOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfYV9saW5rOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2FfbGluayk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IGFmOTAxNV9pcl90YWJsZV9hX2xpbms7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2FfbGluayk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMzoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX21zaTsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2kpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSBhZjkwMTVfaXJfdGFibGVfbXNpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRjkwMTVfUkVNT1RFX01ZR0lDVFZfVTcxODoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX215Z2ljdHY7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0dik7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfbXlnaWN0djsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfRElHSVRUUkFERV9EVkJfVDoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGU7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfQVZFUk1FRElBX0tTOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3MpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3dpdGNoIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSkgewotCQkJY2FzZSBVU0JfVklEX0xFQURURUs6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19sZWFkdGVrOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2xlYWR0ZWspOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX2xlYWR0ZWs7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2xlYWR0ZWspOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfVklEX1ZJU0lPTlBMVVM6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c190d2luaGFuOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3R3aW5oYW4pOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW47Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW4pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfVklEX0tXT1JMRF8yOgotCQkJCS8qIFRPRE86IHVzZSBjb3JyZWN0IHJjIGtleXMgKi8KLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX3R3aW5oYW47Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbik7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IGFmOTAxNV9pcl90YWJsZV9rd29ybGQ7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2t3b3JsZCk7Ci0JCQkJYnJlYWs7Ci0JCQkvKiBDaGVjayBVU0IgbWFudWZhY3R1cmVyIGFuZCBwcm9kdWN0IHN0cmluZ3MgYW5kIHRyeQotCQkJICAgdG8gZGV0ZXJtaW5lIGNvcnJlY3QgcmVtb3RlIGluIGNhc2Ugb2YgY2hpcCB2ZW5kb3IKLQkJCSAgIHJlZmVyZW5jZSBJRHMgYXJlIHVzZWQuICovCi0JCQljYXNlIFVTQl9WSURfQUZBVEVDSDoKLQkJCQltZW1zZXQobWFudWZhY3R1cmVyLCAwLCBzaXplb2YobWFudWZhY3R1cmVyKSk7Ci0JCQkJdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCi0JCQkJCW1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOwotCQkJCWlmICghc3RyY21wKCJHZW5pYXRlY2giLCBtYW51ZmFjdHVyZXIpKSB7Ci0JCQkJCS8qIGlNYW51ZmFjdHVyZXIgMSBHZW5pYXRlY2gKLQkJCQkJICAgaVByb2R1Y3QgICAgICAyIEFGOTAxNSAqLwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkJICBhZjkwMTVfcmNfa2V5c19teWdpY3R2OwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0dik7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCQkgIGFmOTAxNV9pcl90YWJsZV9teWdpY3R2OwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpOwotCQkJCX0gZWxzZSBpZiAoIXN0cmNtcCgiTVNJIiwgbWFudWZhY3R1cmVyKSkgewotCQkJCQkvKiBpTWFudWZhY3R1cmVyIDEgTVNJCi0JCQkJCSAgIGlQcm9kdWN0ICAgICAgMiBNU0kgSy1WT1ggKi8KLQkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJCSAgYWY5MDE1X3JjX2tleXNfbXNpOwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpKTsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJCSAgYWY5MDE1X2lyX3RhYmxlX21zaTsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpOwotCQkJCX0gZWxzZSBpZiAodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0KLQkJCQkJY3B1X3RvX2xlMTYoVVNCX1BJRF9UUkVLU1RPUl9EVkJUKSkgewotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkJICBhZjkwMTVfcmNfa2V5c190cmVrc3RvcjsKLQkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3RyZWtzdG9yKTsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJCSAgYWY5MDE1X2lyX3RhYmxlX3RyZWtzdG9yOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3RyZWtzdG9yKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9WSURfQVZFUk1FRElBOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfVklEX01TSV8yOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfbXNpX2RpZ2l2b3hfaWlpOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaV9kaWdpdm94X2lpaSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfbXNpX2RpZ2l2b3hfaWlpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2lfZGlnaXZveF9paWkpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJCX0gZWxzZQorCQkJYWY5MDE1X3NldF9yZW1vdGVfY29uZmlnKHVkZXYsICZhZjkwMTVfcHJvcGVydGllc1tpXSk7CiAJfQogCiAJLyogVFMgbW9kZSAtIG9uZSBvciB0d28gcmVjZWl2ZXJzICovCkBAIC0xMDAxLDYgKzEwMDIsOSBAQAogCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0uZ3Bpb1sxXSA9IEFGOTAxM19HUElPX0xPOwogCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0ucmZfc3BlY19pbnYgPSAxOwogCQkJYnJlYWs7CisJCWNhc2UgQUY5MDEzX1RVTkVSX1REQTE4MjE4OgorCQkJd2FybigidHVuZXIgTlhQIFREQTE4MjE4IG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJZGVmYXVsdDoKIAkJCXdhcm4oInR1bmVyIGlkOiVkIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSByZXBvcnQhIiwgdmFsKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtMTEyNSwxMSArMTEyOSw2IEBACiAKIAkJZGViX2luZm8oIiVzOiBpbml0IEkyQ1xuIiwgX19mdW5jX18pOwogCQlyZXQgPSBhZjkwMTVfaTJjX2luaXQoYWRhcC0+ZGV2KTsKLQotCQkvKiBkdW1wIGVlcHJvbSAoZGVidWcpICovCi0JCXJldCA9IGFmOTAxNV9lZXByb21fZHVtcChhZGFwLT5kZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewogCQkvKiBzZWxlY3QgSTJDIGFkYXB0ZXIgKi8KIAkJaTJjX2FkYXAgPSAmc3RhdGUtPmkyY19hZGFwOwpAQCAtMTI5NSw2ICsxMjk0LDggQEAKIC8qIDI1ICove1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEXzM5OVVfMil9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF9QQzE2MF9UKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfU1ZFT05fU1RWMjApfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9USU5ZVFdJTl8yKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9MRUFEVEVLLCAgIFVTQl9QSURfV0lORkFTVF9EVFYyMDAwRFMpfSwKIAl7MH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFmOTAxNV91c2JfdGFibGUpOwpAQCAtMTM4MSw3ICsxMzgyLDggQEAKIAkJCX0sCiAJCQl7CiAJCQkJLm5hbWUgPSAiRGlnaXRhbE5vdyBUaW55VHdpbiBEVkItVCBSZWNlaXZlciIsCi0JCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzVdLCBOVUxMfSwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbNV0sCisJCQkJCSAgICAgJmFmOTAxNV91c2JfdGFibGVbMjhdLCBOVUxMfSwKIAkJCQkud2FybV9pZHMgPSB7TlVMTH0sCiAJCQl9LAogCQkJewpAQCAtMTU2Niw3ICsxNTY4LDcgQEAKIAogCQkuaTJjX2FsZ28gPSAmYWY5MDE1X2kyY19hbGdvLAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gNiwgLyogbWF4IDkgKi8KKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA3LCAvKiBtYXggOSAqLwogCQkuZGV2aWNlcyA9IHsKIAkJCXsKIAkJCQkubmFtZSA9ICJBdmVyTWVkaWEgQVZlclRWIFZvbGFyIEdQUyA4MDUgKEE4MDUpIiwKQEAgLTE2MDAsNiArMTYwMiwxMSBAQAogCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsyN10sIE5VTEx9LAogCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKIAkJCX0sCisJCQl7CisJCQkJLm5hbWUgPSAiTGVhZHRlayBXaW5GYXN0IERUVjIwMDBEUyIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzI5XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKIAkJfQogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKaW5kZXggOTMxYzg1MS4uZWYzNmIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCkBAIC0xMDcsNiArMTA3LDcgQEAKIAl1MTYgbXQyMDYwX2lmMVsyXTsKIAl1MTYgZmlybXdhcmVfc2l6ZTsKIAl1MTYgZmlybXdhcmVfY2hlY2tzdW07CisJdTMyIGVlcHJvbV9zdW07CiAJdTggICppcl90YWJsZTsKIAl1MTYgaXJfdGFibGVfc2l6ZTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzI5MGIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qIERWQiBVU0IgY29tcGxpYW50IExpbnV4IGRyaXZlciBmb3IgdGhlIEFaVVJFV0FWRSBEVkItUy9TMiBVU0IyLjAgKEFaNjAyNykKKyAqIHJlY2VpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBZGFtcy5YdSA8YWRhbXMueHVAYXp3YXZlLmNvbS5jbj4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworI2luY2x1ZGUgImF6NjAyNy5oIgorCisjaW5jbHVkZSAic3RiMDg5OV9kcnYuaCIKKyNpbmNsdWRlICJzdGIwODk5X3JlZy5oIgorI2luY2x1ZGUgInN0YjA4OTlfY2ZnLmgiCisKKyNpbmNsdWRlICJzdGI2MTAwLmgiCisjaW5jbHVkZSAic3RiNjEwMF9jZmcuaCIKKyNpbmNsdWRlICJkdmJfY2FfZW41MDIyMS5oIgorCitpbnQgZHZiX3VzYl9hejYwMjdfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfYXo2MDI3X2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9aW5mbyx4ZmVyPTIscmM9NCAob3ItYWJsZSkpLiIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOworCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgeworCXN0cnVjdCBkdmJfY2FfZW41MDIyMSBjYTsKKwlzdHJ1Y3QgbXV0ZXggY2FfbXV0ZXg7CisJdTggcG93ZXJfc3RhdGU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfczFfcmVnIGF6NjAyN19zdGIwODk5X3MxX2luaXRfMVtdID0geworCisJLyogMHgwMDAwMDAwYiwgU1lTUkVHICovCisJeyBTVEIwODk5X0RFVl9JRAkJLCAweDMwIH0sCisJeyBTVEIwODk5X0RJU0NOVFJMMQkJLCAweDMyIH0sCisJeyBTVEIwODk5X0RJU0NOVFJMMiAgICAgCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9ESVNSWF9TVDAgICAgIAksIDB4MDQgfSwKKwl7IFNUQjA4OTlfRElTUlhfU1QxICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0RJU1BBUklUWSAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ESVNGSUZPICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRElTU1RBVFVTCQksIDB4MjAgfSwKKwl7IFNUQjA4OTlfRElTRjIyICAgICAgICAJLCAweDk5IH0sCisJeyBTVEIwODk5X0RJU0YyMlJYICAgICAgCSwgMHhhOCB9LAorCS8qIFNZU1JFRyA/ICovCisJeyBTVEIwODk5X0FDUlBSRVNDICAgICAgCSwgMHgxMSB9LAorCXsgU1RCMDg5OV9BQ1JESVYxICAgICAgIAksIDB4MGEgfSwKKwl7IFNUQjA4OTlfQUNSRElWMiAgICAgICAJLCAweDA1IH0sCisJeyBTVEIwODk5X0RBQ1IxICAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9EQUNSMiAgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfT1VUQ0ZHICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X01PREVDRkcgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMwkJLCAweGZlIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18yCQksIDB4MDMgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzEJCSwgMHg3YyB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMAkJLCAweGY0IH0sCisJeyBTVEIwODk5X0lSUU1TS18zICAgICAgCSwgMHhmMyB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMiAgICAgIAksIDB4ZmMgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzEgICAgICAJLCAweGZmIH0sCisJeyBTVEIwODk5X0lSUU1TS18wCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfSVJRQ0ZHCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSTJDQ0ZHICAgICAgICAJLCAweDg4IH0sCisJeyBTVEIwODk5X0kyQ1JQVCAgICAgICAgCSwgMHg1OCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTUJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTQJCSwgMHgzMyB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTMJCSwgMHg2ZCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTIJCSwgMHg5MCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTEJCSwgMHg2MCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTAJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9HUElPMDBDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAxQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wMkNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDNDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA0Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wNUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDZDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA3Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wOENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDlDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEwQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xMUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTJDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEzQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xNENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTVDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE2Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xN0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMThDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE5Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8yMENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9TREFUQ0ZHICAgICAgIAksIDB4YjggfSwKKwl7IFNUQjA4OTlfU0NMVENGRyAgICAgICAJLCAweGJhIH0sCisJeyBTVEIwODk5X0FHQ1JGQ0ZHICAgICAgCSwgMHgxYyB9LCAvKiAweDExICovCisJeyBTVEIwODk5X0dQSU8yMiAgICAgICAgCSwgMHg4MiB9LCAvKiBBR0NCQjJDRkcgKi8KKwl7IFNUQjA4OTlfR1BJTzIxICAgICAgICAJLCAweDkxIH0sIC8qIEFHQ0JCMUNGRyAqLworCXsgU1RCMDg5OV9ESVJDTEtDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfQ0xLT1VUMjdDRkcgICAJLCAweDdlIH0sCisJeyBTVEIwODk5X1NUREJZQ0ZHICAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9DUzBDRkcgICAgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfQ1MxQ0ZHICAgICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0RJU0VRQ09DRkcgICAgCSwgMHgyMCB9LAorCXsgU1RCMDg5OV9HUElPMzJDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzNDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzRDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzVDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzZDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzdDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzhDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzlDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9OQ09BUlNFICAgICAgIAksIDB4MTcgfSwgLyogMHgxNSA9IDI3IE1oeiBDbG9jaywgRi8zID0gMTk4TUh6LCBGLzYgPSA5OU1IeiAqLworCXsgU1RCMDg5OV9TWU5UQ1RSTCAgICAgIAksIDB4MDIgfSwgLyogMHgwMCA9IENMSyBmcm9tIENMS0ksIDB4MDIgPSBDTEsgZnJvbSBYVEFMSSAqLworCXsgU1RCMDg5OV9GSUxUQ1RSTCAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lTQ1RSTCAgICAgICAJLCAweDAxIH0sCisJeyBTVEIwODk5X1NUT1BDTEsxICAgICAgCSwgMHgyMCB9LAorCXsgU1RCMDg5OV9TVE9QQ0xLMiAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU5UQlVGU1RBVFVTCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU5UQlVGQ1RSTCAgICAJLCAweDBhIH0sCisJeyAweGZmZmYJCQksIDB4ZmYgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcgYXo2MDI3X3N0YjA4OTlfczFfaW5pdF8zW10gPSB7CisJeyBTVEIwODk5X0RFTU9EICAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9SQ09NUEMgICAgICAgIAksIDB4YzkgfSwKKwl7IFNUQjA4OTlfQUdDMUNOICAgICAgICAJLCAweDAxIH0sCisJeyBTVEIwODk5X0FHQzFSRUYgICAgICAgCSwgMHgxMCB9LAorCXsgU1RCMDg5OV9SVEMJICAgICAgICAJLCAweDIzIH0sCisJeyBTVEIwODk5X1RNR0NGRyAgICAgICAgCSwgMHg0ZSB9LAorCXsgU1RCMDg5OV9BR0MyUkVGICAgICAgIAksIDB4MzQgfSwKKwl7IFNUQjA4OTlfVExTUiAgICAgICAgICAJLCAweDg0IH0sCisJeyBTVEIwODk5X0NGRCAgICAgICAgICAgCSwgMHhmNyB9LAorCXsgU1RCMDg5OV9BQ0xDCSAgICAgICAgCSwgMHg4NyB9LAorCXsgU1RCMDg5OV9CQ0xDICAgICAgICAgIAksIDB4OTQgfSwKKwl7IFNUQjA4OTlfRVFPTiAgICAgICAgICAJLCAweDQxIH0sCisJeyBTVEIwODk5X0xEVCAgICAgICAgICAgCSwgMHhmMSB9LAorCXsgU1RCMDg5OV9MRFQyICAgICAgICAgIAksIDB4ZTMgfSwKKwl7IFNUQjA4OTlfRVFVQUxSRUYgICAgICAJLCAweGI0IH0sCisJeyBTVEIwODk5X1RNR1JBTVAgICAgICAgCSwgMHgxMCB9LAorCXsgU1RCMDg5OV9UTUdUSEQgICAgICAgIAksIDB4MzAgfSwKKwl7IFNUQjA4OTlfSURDQ09NUAkJLCAweGZkIH0sCisJeyBTVEIwODk5X1FEQ0NPTVAJCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9QT1dFUkkJCSwgMHgwYyB9LAorCXsgU1RCMDg5OV9QT1dFUlEJCSwgMHgwZiB9LAorCXsgU1RCMDg5OV9SQ09NUAkJCSwgMHg2YyB9LAorCXsgU1RCMDg5OV9BR0NJUUlOCQksIDB4ODAgfSwKKwl7IFNUQjA4OTlfQUdDMkkxCQksIDB4MDYgfSwKKwl7IFNUQjA4OTlfQUdDMkkyCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVExJUgkJCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9SVEYJCQksIDB4N2YgfSwKKwl7IFNUQjA4OTlfRFNUQVRVUwkJLCAweDAwIH0sCisJeyBTVEIwODk5X0xESQkJCSwgMHhiYyB9LAorCXsgU1RCMDg5OV9DRlJNCQkJLCAweGVhIH0sCisJeyBTVEIwODk5X0NGUkwJCQksIDB4MzEgfSwKKwl7IFNUQjA4OTlfTklSTQkJCSwgMHgyYiB9LAorCXsgU1RCMDg5OV9OSVJMCQkJLCAweDgwIH0sCisJeyBTVEIwODk5X0lTWU1CCQkJLCAweDFkIH0sCisJeyBTVEIwODk5X1FTWU1CCQkJLCAweGE2IH0sCisJeyBTVEIwODk5X1NGUkggICAgICAgICAgCSwgMHgyZiB9LAorCXsgU1RCMDg5OV9TRlJNICAgICAgICAgIAksIDB4NjggfSwKKwl7IFNUQjA4OTlfU0ZSTCAgICAgICAgICAJLCAweDQwIH0sCisJeyBTVEIwODk5X1NGUlVQSCAgICAgICAgCSwgMHgyZiB9LAorCXsgU1RCMDg5OV9TRlJVUE0gICAgICAgIAksIDB4NjggfSwKKwl7IFNUQjA4OTlfU0ZSVVBMICAgICAgICAJLCAweDQwIH0sCisJeyBTVEIwODk5X0VRVUFJMQkJLCAweDAyIH0sCisJeyBTVEIwODk5X0VRVUFRMQkJLCAweGZmIH0sCisJeyBTVEIwODk5X0VRVUFJMgkJLCAweDA0IH0sCisJeyBTVEIwODk5X0VRVUFRMgkJLCAweDA1IH0sCisJeyBTVEIwODk5X0VRVUFJMwkJLCAweDAyIH0sCisJeyBTVEIwODk5X0VRVUFRMwkJLCAweGZkIH0sCisJeyBTVEIwODk5X0VRVUFJNAkJLCAweDAzIH0sCisJeyBTVEIwODk5X0VRVUFRNAkJLCAweDA3IH0sCisJeyBTVEIwODk5X0VRVUFJNQkJLCAweDA4IH0sCisJeyBTVEIwODk5X0VRVUFRNQkJLCAweGY1IH0sCisJeyBTVEIwODk5X0RTVEFUVVMyCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVlNUQVRVUyAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1ZFUlJPUgkJLCAweDg2IH0sCisJeyBTVEIwODk5X0lRU1dBUAkJLCAweDJhIH0sCisJeyBTVEIwODk5X0VDTlQxTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0VDTlQxTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0VDTlQyTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0VDTlQyTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0VDTlQzTQkJLCAweDBhIH0sCisJeyBTVEIwODk5X0VDTlQzTAkJLCAweGFkIH0sCisJeyBTVEIwODk5X0ZFQ0FVVE8xICAgICAgCSwgMHgwNiB9LAorCXsgU1RCMDg5OV9GRUNNCSAgICAgICAgCSwgMHgwMSB9LAorCXsgU1RCMDg5OV9WVEgxMiAgICAgICAgIAksIDB4YjAgfSwKKwl7IFNUQjA4OTlfVlRIMjMgICAgICAgICAJLCAweDdhIH0sCisJeyBTVEIwODk5X1ZUSDM0CSAgICAgICAgCSwgMHg1OCB9LAorCXsgU1RCMDg5OV9WVEg1NiAgICAgICAgIAksIDB4MzggfSwKKwl7IFNUQjA4OTlfVlRINjcgICAgICAgICAJLCAweDM0IH0sCisJeyBTVEIwODk5X1ZUSDc4ICAgICAgICAgCSwgMHgyNCB9LAorCXsgU1RCMDg5OV9QUlZJVCAgICAgICAgIAksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfVklUU1lOQyAgICAgICAJLCAweDE5IH0sCisJeyBTVEIwODk5X1JTVUxDICAgICAgICAgCSwgMHhiMSB9LCAvKiBEVkIgPSAweGIxLCBEU1MgPSAweGExICovCisJeyBTVEIwODk5X1RTVUxDICAgICAgICAgCSwgMHg0MiB9LAorCXsgU1RCMDg5OV9SU0xMQyAgICAgICAgIAksIDB4NDEgfSwKKwl7IFNUQjA4OTlfVFNMUEwJICAgICAgICAJLCAweDEyIH0sCisJeyBTVEIwODk5X1RTQ0ZHSCAgICAgICAgCSwgMHgwYyB9LAorCXsgU1RCMDg5OV9UU0NGR00gICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNDRkdMICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTT1VUCQkJLCAweDY5IH0sIC8qIDB4MGQgZm9yIENBTSAqLworCXsgU1RCMDg5OV9SU1NZTkNERUwgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNJTkhERUxIICAgICAJLCAweDAyIH0sCisJeyBTVEIwODk5X1RTSU5IREVMTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTSU5IREVMTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTTExTVEtNCQksIDB4MWIgfSwKKwl7IFNUQjA4OTlfVFNMTFNUS0wJCSwgMHhiMyB9LAorCXsgU1RCMDg5OV9UU1VMU1RLTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTVUxTVEtMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfUENLTEVOVUwJCSwgMHhiYyB9LAorCXsgU1RCMDg5OV9QQ0tMRU5MTAkJLCAweGNjIH0sCisJeyBTVEIwODk5X1JTUENLTEVOCQksIDB4YmQgfSwKKwl7IFNUQjA4OTlfVFNTVEFUVVMJCSwgMHg5MCB9LAorCXsgU1RCMDg5OV9FUlJDVFJMMSAgICAgIAksIDB4YjYgfSwKKwl7IFNUQjA4OTlfRVJSQ1RSTDIgICAgICAJLCAweDk1IH0sCisJeyBTVEIwODk5X0VSUkNUUkwzICAgICAgCSwgMHg4ZCB9LAorCXsgU1RCMDg5OV9ETU9OTVNLMQkJLCAweDI3IH0sCisJeyBTVEIwODk5X0RNT05NU0swCQksIDB4MDMgfSwKKwl7IFNUQjA4OTlfREVNQVBWSVQgICAgICAJLCAweDVjIH0sCisJeyBTVEIwODk5X1BMUEFSTQkJLCAweDE5IH0sCisJeyBTVEIwODk5X1BERUxDVFJMICAgICAgCSwgMHg0OCB9LAorCXsgU1RCMDg5OV9QREVMQ1RSTDIgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfQkJIQ1RSTDEgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0JCSENUUkwyICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9IWVNUVEhSRVNIICAgIAksIDB4NzcgfSwKKwl7IFNUQjA4OTlfTUFUQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X01BVENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUExDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBMQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0RGTENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ERkxDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ0NTVAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNEQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNEQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lTSV9FTlRSWQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lTSV9CSVRfRU4JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9NQVRTVFJNCQksIDB4ZjAgfSwKKwl7IFNUQjA4OTlfTUFUU1RSTAkJLCAweDAyIH0sCisJeyBTVEIwODk5X1VQTFNUUk0JCSwgMHg0NSB9LAorCXsgU1RCMDg5OV9VUExTVFJMCQksIDB4NjAgfSwKKwl7IFNUQjA4OTlfREZMU1RSTQkJLCAweGUzIH0sCisJeyBTVEIwODk5X0RGTFNUUkwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DU1RSCQksIDB4NDcgfSwKKwl7IFNUQjA4OTlfU1lOQ0RTVFJNCQksIDB4MDUgfSwKKwl7IFNUQjA4OTlfU1lOQ0RTVFJMCQksIDB4MTggfSwKKwl7IFNUQjA4OTlfQ0ZHUERFTFNUQVRVUzEJLCAweDE5IH0sCisJeyBTVEIwODk5X0NGR1BERUxTVEFUVVMyCSwgMHgyYiB9LAorCXsgU1RCMDg5OV9CQkZFUlJPUk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9CQkZFUlJPUkwJCSwgMHgwMSB9LAorCXsgU1RCMDg5OV9VUEtURVJST1JNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBLVEVSUk9STAkJLCAweDAwIH0sCisJeyAweGZmZmYJCQksIDB4ZmYgfSwKK307CisKKworCitzdHJ1Y3Qgc3RiMDg5OV9jb25maWcgYXo2MDI3X3N0YjA4OTlfY29uZmlnID0geworCS5pbml0X2RldgkJPSBhejYwMjdfc3RiMDg5OV9zMV9pbml0XzEsCisJLmluaXRfczJfZGVtb2QJCT0gc3RiMDg5OV9zMl9pbml0XzIsCisJLmluaXRfczFfZGVtb2QJCT0gYXo2MDI3X3N0YjA4OTlfczFfaW5pdF8zLAorCS5pbml0X3MyX2ZlYwkJPSBzdGIwODk5X3MyX2luaXRfNCwKKwkuaW5pdF90c3QJCT0gc3RiMDg5OV9zMV9pbml0XzUsCisKKwkuZGVtb2RfYWRkcmVzcyAJCT0gMHhkMCwgLyogMHg2OCwgMHhkMCA+PiAxICovCisKKwkueHRhbF9mcmVxCQk9IDI3MDAwMDAwLAorCS5pbnZlcnNpb24JCT0gSVFfU1dBUF9PTiwgLyogMSAqLworCisJLmxvX2NsawkJCT0gNzY1MDAwMDAsCisJLmhpX2NsawkJCT0gOTkwMDAwMDAsCisKKwkuZXNub19hdmUJCT0gU1RCMDg5OV9EVkJTMl9FU05PX0FWRSwKKwkuZXNub19xdWFudAkJPSBTVEIwODk5X0RWQlMyX0VTTk9fUVVBTlQsCisJLmF2ZnJhbWVzX2NvYXJzZQk9IFNUQjA4OTlfRFZCUzJfQVZGUkFNRVNfQ09BUlNFLAorCS5hdmZyYW1lc19maW5lCQk9IFNUQjA4OTlfRFZCUzJfQVZGUkFNRVNfRklORSwKKwkubWlzc190aHJlc2hvbGQJCT0gU1RCMDg5OV9EVkJTMl9NSVNTX1RIUkVTSE9MRCwKKwkudXdwX3RocmVzaG9sZF9hY3EJPSBTVEIwODk5X0RWQlMyX1VXUF9USFJFU0hPTERfQUNRLAorCS51d3BfdGhyZXNob2xkX3RyYWNrCT0gU1RCMDg5OV9EVkJTMl9VV1BfVEhSRVNIT0xEX1RSQUNLLAorCS51d3BfdGhyZXNob2xkX3NvZgk9IFNUQjA4OTlfRFZCUzJfVVdQX1RIUkVTSE9MRF9TT0YsCisJLnNvZl9zZWFyY2hfdGltZW91dAk9IFNUQjA4OTlfRFZCUzJfU09GX1NFQVJDSF9USU1FT1VULAorCisJLmJ0cl9uY29fYml0cwkJPSBTVEIwODk5X0RWQlMyX0JUUl9OQ09fQklUUywKKwkuYnRyX2dhaW5fc2hpZnRfb2Zmc2V0CT0gU1RCMDg5OV9EVkJTMl9CVFJfR0FJTl9TSElGVF9PRkZTRVQsCisJLmNybF9uY29fYml0cwkJPSBTVEIwODk5X0RWQlMyX0NSTF9OQ09fQklUUywKKwkubGRwY19tYXhfaXRlcgkJPSBTVEIwODk5X0RWQlMyX0xEUENfTUFYX0lURVIsCisKKwkudHVuZXJfZ2V0X2ZyZXF1ZW5jeQk9IHN0YjYxMDBfZ2V0X2ZyZXF1ZW5jeSwKKwkudHVuZXJfc2V0X2ZyZXF1ZW5jeQk9IHN0YjYxMDBfc2V0X2ZyZXF1ZW5jeSwKKwkudHVuZXJfc2V0X2JhbmR3aWR0aAk9IHN0YjYxMDBfc2V0X2JhbmR3aWR0aCwKKwkudHVuZXJfZ2V0X2JhbmR3aWR0aAk9IHN0YjYxMDBfZ2V0X2JhbmR3aWR0aCwKKwkudHVuZXJfc2V0X3Jmc2lnZ2Fpbgk9IE5VTEwsCit9OworCitzdHJ1Y3Qgc3RiNjEwMF9jb25maWcgYXo2MDI3X3N0YjYxMDBfY29uZmlnID0geworCS50dW5lcl9hZGRyZXNzCT0gMHhjMCwKKwkucmVmY2xvY2sJPSAyNzAwMDAwMCwKK307CisKKworLyogY2hlY2sgZm9yIG11dGV4IEZJWE1FICovCitpbnQgYXo2MDI3X3VzYl9pbl9vcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IHJlcSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHU4ICpiLCBpbnQgYmxlbikKK3sKKwlpbnQgcmV0ID0gLTE7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+dXNiX211dGV4KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkLT51ZGV2LCAwKSwKKwkJCSAgICAgIHJlcSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sCisJCQkgICAgICB2YWx1ZSwKKwkJCSAgICAgIGluZGV4LAorCQkJICAgICAgYiwKKwkJCSAgICAgIGJsZW4sCisJCQkgICAgICAyMDAwKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworCWRlYl94ZmVyKCJpbjogcmVxLiAlMDJ4LCB2YWw6ICUwNHgsIGluZDogJTA0eCwgYnVmZmVyOiAiLCByZXEsIHZhbHVlLCBpbmRleCk7CisJZGVidWdfZHVtcChiLCBibGVuLCBkZWJfeGZlcik7CisKKwltdXRleF91bmxvY2soJmQtPnVzYl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfdXNiX291dF9vcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsCisJCQkgICAgIHU4IHJlcSwKKwkJCSAgICAgdTE2IHZhbHVlLAorCQkJICAgICB1MTYgaW5kZXgsCisJCQkgICAgIHU4ICpiLAorCQkJICAgICBpbnQgYmxlbikKK3sKKwlpbnQgcmV0OworCisJZGViX3hmZXIoIm91dDogcmVxLiAlMDJ4LCB2YWw6ICUwNHgsIGluZDogJTA0eCwgYnVmZmVyOiAiLCByZXEsIHZhbHVlLCBpbmRleCk7CisJZGVidWdfZHVtcChiLCBibGVuLCBkZWJfeGZlcik7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT51c2JfbXV0ZXgpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsIDApLAorCQkJICAgICAgcmVxLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsCisJCQkgICAgICB2YWx1ZSwKKwkJCSAgICAgIGluZGV4LAorCQkJICAgICAgYiwKKwkJCSAgICAgIGJsZW4sCisJCQkgICAgICAyMDAwKTsKKworCWlmIChyZXQgIT0gYmxlbikgeworCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQltdXRleF91bmxvY2soJmQtPnVzYl9tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0gZWxzZXsKKwkJbXV0ZXhfdW5sb2NrKCZkLT51c2JfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJZGViX2luZm8oIiVzICVkIiwgX19mdW5jX18sIG9ub2ZmKTsKKworCXJlcSA9IDB4QkM7CisJdmFsdWUgPSBvbm9mZjsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBrZXlzIGZvciB0aGUgZW5jbG9zZWQgcmVtb3RlIGNvbnRyb2wgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYXo2MDI3X3JjX2tleXNbXSA9IHsKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorfTsKKworLyogcmVtb3RlIGNvbnRyb2wgc3R1ZmYgKGRvZXMgbm90IHdvcmsgd2l0aCBteSBib3gpICovCitzdGF0aWMgaW50IGF6NjAyN19yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCitpbnQgYXo2MDI3X3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCit7CisJdTggdiA9IG9ub2ZmOworCXJldHVybiBhejYwMjdfdXNiX291dF9vcChkLDB4QkMsdiwzLE5VTEwsMSk7Cit9CisqLworCitzdGF0aWMgaW50IGF6NjAyN19jaV9yZWFkX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwKKwkJCQkJaW50IHNsb3QsCisJCQkJCWludCBhZGRyZXNzKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKwl1OCBiWzEyXTsKKworCWlmIChzbG90ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKworCXJlcSA9IDB4QzE7CisJdmFsdWUgPSBhZGRyZXNzOworCWluZGV4ID0gMDsKKwlibGVuID0gMTsKKworCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGIsIGJsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXQgPSBiWzBdOworCX0KKworCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV93cml0ZV9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsCisJCQkJCSBpbnQgc2xvdCwKKwkJCQkJIGludCBhZGRyZXNzLAorCQkJCQkgdTggdmFsdWUpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWUxOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCWRlYl9pbmZvKCIlcyAlZCIsIF9fZnVuY19fLCBzbG90KTsKKwlpZiAoc2xvdCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmVxID0gMHhDMjsKKwl2YWx1ZTEgPSBhZGRyZXNzOworCWluZGV4ID0gdmFsdWU7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlMSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKworCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9yZWFkX2NhbV9jb250cm9sKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsCisJCQkJICAgICAgaW50IHNsb3QsCisJCQkJICAgICAgdTggYWRkcmVzcykKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisJdTggYlsxMl07CisKKwlpZiAoc2xvdCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisKKwlyZXEgPSAweEMzOworCXZhbHVlID0gYWRkcmVzczsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDI7CisKKwlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBiLCBibGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJaWYgKGJbMF0gPT0gMCkKKwkJCXdhcm4oIlJlYWQgQ0kgSU8gZXJyb3IiKTsKKworCQlyZXQgPSBiWzFdOworCQlkZWJfaW5mbygicmVhZCBjYW0gZGF0YSA9ICV4IGZyb20gMHgleCIsIGJbMV0sIHZhbHVlKTsKKwl9CisKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfd3JpdGVfY2FtX2NvbnRyb2woc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwKKwkJCQkgICAgICAgaW50IHNsb3QsCisJCQkJICAgICAgIHU4IGFkZHJlc3MsCisJCQkJICAgICAgIHU4IHZhbHVlKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlMTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlpZiAoc2xvdCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmVxID0gMHhDNDsKKwl2YWx1ZTEgPSBhZGRyZXNzOworCWluZGV4ID0gdmFsdWU7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlMSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkgeworCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKK2ZhaWxlZDoKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBDSV9DYW1SZWFkeShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCXU4IGJbMTJdOworCisJcmVxID0gMHhDODsKKwl2YWx1ZSA9IDA7CisJaW5kZXggPSAwOworCWJsZW4gPSAxOworCisJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgYiwgYmxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0gZWxzZXsKKwkJcmV0ID0gYlswXTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfc2xvdF9yZXNldChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQsIGk7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCisJcmVxID0gMHhDNjsKKwl2YWx1ZSA9IDE7CisJaW5kZXggPSAwOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkgeworCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwltc2xlZXAoNTAwKTsKKwlyZXEgPSAweEM2OworCXZhbHVlID0gMDsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAxNTsgaSsrKSB7CisJCW1zbGVlcCgxMDApOworCisJCWlmIChDSV9DYW1SZWFkeShjYSwgc2xvdCkpIHsKKwkJCWRlYl9pbmZvKCJDQU0gUmVhZHkiKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW1zbGVlcCg1MDAwKTsKKworZmFpbGVkOgorCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9zbG90X3NodXRkb3duKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9zbG90X3RzX2VuYWJsZShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlkZWJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7CisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXEgPSAweEM3OworCXZhbHVlID0gMTsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworZmFpbGVkOgorCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9wb2xsX3Nsb3Rfc3RhdHVzKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90LCBpbnQgb3BlbikKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCXU4IGJbMTJdOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKworCXJlcSA9IDB4QzU7CisJdmFsdWUgPSAwOworCWluZGV4ID0gMDsKKwlibGVuID0gMTsKKworCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGIsIGJsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworCWlmIChiWzBdID09IDApIHsKKwkJcmV0ID0gMDsKKworCX0gZWxzZSBpZiAoYlswXSA9PSAxKSB7CisJCXJldCA9IERWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1BSRVNFTlQgfAorCQkgICAgICBEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9SRUFEWTsKKwl9CisKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgdm9pZCBhejYwMjdfY2lfdW5pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGU7CisKKwlkZWJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoTlVMTCA9PSBkKQorCQlyZXR1cm47CisKKwlzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisJaWYgKE5VTEwgPT0gc3RhdGUpCisJCXJldHVybjsKKworCWlmIChOVUxMID09IHN0YXRlLT5jYS5kYXRhKQorCQlyZXR1cm47CisKKwlkdmJfY2FfZW41MDIyMV9yZWxlYXNlKCZzdGF0ZS0+Y2EpOworCisJbWVtc2V0KCZzdGF0ZS0+Y2EsIDAsIHNpemVvZihzdGF0ZS0+Y2EpKTsKK30KKworCitzdGF0aWMgaW50IGF6NjAyN19jaV9pbml0KHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmEpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gYS0+ZGV2OworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisJaW50IHJldDsKKworCWRlYl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2luaXQoJnN0YXRlLT5jYV9tdXRleCk7CisKKwlzdGF0ZS0+Y2Eub3duZXIJCQk9IFRISVNfTU9EVUxFOworCXN0YXRlLT5jYS5yZWFkX2F0dHJpYnV0ZV9tZW0JPSBhejYwMjdfY2lfcmVhZF9hdHRyaWJ1dGVfbWVtOworCXN0YXRlLT5jYS53cml0ZV9hdHRyaWJ1dGVfbWVtCT0gYXo2MDI3X2NpX3dyaXRlX2F0dHJpYnV0ZV9tZW07CisJc3RhdGUtPmNhLnJlYWRfY2FtX2NvbnRyb2wJPSBhejYwMjdfY2lfcmVhZF9jYW1fY29udHJvbDsKKwlzdGF0ZS0+Y2Eud3JpdGVfY2FtX2NvbnRyb2wJPSBhejYwMjdfY2lfd3JpdGVfY2FtX2NvbnRyb2w7CisJc3RhdGUtPmNhLnNsb3RfcmVzZXQJCT0gYXo2MDI3X2NpX3Nsb3RfcmVzZXQ7CisJc3RhdGUtPmNhLnNsb3Rfc2h1dGRvd24JCT0gYXo2MDI3X2NpX3Nsb3Rfc2h1dGRvd247CisJc3RhdGUtPmNhLnNsb3RfdHNfZW5hYmxlCT0gYXo2MDI3X2NpX3Nsb3RfdHNfZW5hYmxlOworCXN0YXRlLT5jYS5wb2xsX3Nsb3Rfc3RhdHVzCT0gYXo2MDI3X2NpX3BvbGxfc2xvdF9zdGF0dXM7CisJc3RhdGUtPmNhLmRhdGEJCQk9IGQ7CisKKwlyZXQgPSBkdmJfY2FfZW41MDIyMV9pbml0KCZhLT5kdmJfYWRhcCwKKwkJCQkgICZzdGF0ZS0+Y2EsCisJCQkJICAwLCAvKiBmbGFncyAqLworCQkJCSAgMSk7Lyogbl9zbG90cyAqLworCWlmIChyZXQgIT0gMCkgeworCQllcnIoIkNhbm5vdCBpbml0aWFsaXplIENJOiBFcnJvciAlZC4iLCByZXQpOworCQltZW1zZXQoJnN0YXRlLT5jYSwgMCwgc2l6ZW9mKHN0YXRlLT5jYSkpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRlYl9pbmZvKCJDSSBpbml0aWFsaXplZC4iKTsKKworCXJldHVybiAwOworfQorCisvKgorc3RhdGljIGludCBhejYwMjdfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IG1hY1s2XSkKK3sKKwlhejYwMjdfdXNiX2luX29wKGQsIDB4YjcsIDYsIDAsICZtYWNbMF0sIDYpOworCXJldHVybiAwOworfQorKi8KKworc3RhdGljIGludCBhejYwMjdfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKworCXU4IGJ1ZjsKKwlpbnQgcmV0OworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OworCisJc3RydWN0IGkyY19tc2cgaTJjX21zZyA9IHsKKwkJLmFkZHIJPSAweDk5LAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gJmJ1ZiwKKwkJLmxlbgk9IDEKKwl9OworCisJLyoKKwkgKiAyICAgLS0xOHYKKwkgKiAxICAgLS0xM3YKKwkgKiAwICAgLS1vZmYKKwkgKi8KKwlzd2l0Y2ggKHZvbHRhZ2UpIHsKKwljYXNlIFNFQ19WT0xUQUdFXzEzOgorCQlidWYgPSAxOworCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZpMmNfbXNnLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFNFQ19WT0xUQUdFXzE4OgorCQlidWYgPSAyOworCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZpMmNfbXNnLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFNFQ19WT0xUQUdFX09GRjoKKwkJYnVmID0gMDsKKwkJcmV0ID0gaTJjX3RyYW5zZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmaTJjX21zZywgMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgYXo2MDI3X2Zyb250ZW5kX3Bvd2Vyb24oc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJcmVxID0gMHhCQzsKKwl2YWx1ZSA9IDE7IC8qIHBvd2VyIG9uICovCisJaW5kZXggPSAzOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoYWRhcC0+ZGV2LCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorc3RhdGljIGludCBhejYwMjdfZnJvbnRlbmRfcmVzZXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJLyogcmVzZXQgZGVtb2R1bGF0b3IgKi8KKwlyZXEgPSAweEMwOworCXZhbHVlID0gMTsgLyogaGlnaCAqLworCWluZGV4ID0gMzsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXEgPSAweEMwOworCXZhbHVlID0gMDsgLyogbG93ICovCisJaW5kZXggPSAzOworCWJsZW4gPSAwOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwMCk7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKworCXJlcSA9IDB4QzA7CisJdmFsdWUgPSAxOyAvKmhpZ2ggKi8KKwlpbmRleCA9IDM7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhejYwMjdfZnJvbnRlbmRfdHNieXBhc3Moc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwkvKiBUUyBwYXNzdGhyb3VnaCAqLworCXJlcSA9IDB4Qzc7CisJdmFsdWUgPSBvbm9mZjsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCisJYXo2MDI3X2Zyb250ZW5kX3Bvd2Vyb24oYWRhcCk7CisJYXo2MDI3X2Zyb250ZW5kX3Jlc2V0KGFkYXApOworCisJZGViX2luZm8oImFkYXAgPSAlcCwgZGV2ID0gJXBcbiIsIGFkYXAsIGFkYXAtPmRldik7CisJYWRhcC0+ZmUgPSBzdGIwODk5X2F0dGFjaCgmYXo2MDI3X3N0YjA4OTlfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisKKwlpZiAoYWRhcC0+ZmUpIHsKKwkJZGViX2luZm8oImZvdW5kIFNUQjA4OTkgRFZCLVMvRFZCLVMyIGZyb250ZW5kIEAweCUwMngiLCBhejYwMjdfc3RiMDg5OV9jb25maWcuZGVtb2RfYWRkcmVzcyk7CisJCWlmIChzdGI2MTAwX2F0dGFjaChhZGFwLT5mZSwgJmF6NjAyN19zdGI2MTAwX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSB7CisJCQlkZWJfaW5mbygiZm91bmQgU1RCNjEwMCBEVkItUy9EVkItUzIgZnJvbnRlbmQgQDB4JTAyeCIsIGF6NjAyN19zdGI2MTAwX2NvbmZpZy50dW5lcl9hZGRyZXNzKTsKKwkJCWFkYXAtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBhejYwMjdfc2V0X3ZvbHRhZ2U7CisJCQlhejYwMjdfY2lfaW5pdChhZGFwKTsKKwkJfSBlbHNlIHsKKwkJCWFkYXAtPmZlID0gTlVMTDsKKwkJfQorCX0gZWxzZQorCQl3YXJuKCJubyBmcm9udC1lbmQgYXR0YWNoZWRcbiIpOworCisJYXo2MDI3X2Zyb250ZW5kX3RzYnlwYXNzKGFkYXAsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhejYwMjdfcHJvcGVydGllczsKKworc3RhdGljIHZvaWQgYXo2MDI3X3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJYXo2MDI3X2NpX3VuaW5pdChkKTsKKwlkdmJfdXNiX2RldmljZV9leGl0KGludGYpOworfQorCisKK3N0YXRpYyBpbnQgYXo2MDI3X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwKKwkJCQkgICAmYXo2MDI3X3Byb3BlcnRpZXMsCisJCQkJICAgVEhJU19NT0RVTEUsCisJCQkJICAgTlVMTCwKKwkJCQkgICBhZGFwdGVyX25yKTsKK30KKworLyogSTJDICovCitzdGF0aWMgaW50IGF6NjAyN19pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IGkgPSAwLCBqID0gMCwgbGVuID0gMDsKKwlpbnQgcmV0OworCXUxNiBpbmRleDsKKwl1MTYgdmFsdWU7CisJaW50IGxlbmd0aDsKKwl1OCByZXE7CisJdTggZGF0YVsyNTZdOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKG51bSA+IDIpCisJCXdhcm4oIm1vcmUgdGhhbiAyIGkyYyBtZXNzYWdlcyBhdCBhIHRpbWUgaXMgbm90IGhhbmRsZWQgeWV0LiBUT0RPLiIpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisKKwkJaWYgKG1zZ1tpXS5hZGRyID09IDB4OTkpIHsKKwkJCXJlcSA9IDB4QkU7CisJCQlpbmRleCA9IDA7CisJCQl2YWx1ZSA9IG1zZ1tpXS5idWZbMF0gJiAweDAwZmY7CisJCQlsZW5ndGggPSAxOworCQkJYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIGxlbmd0aCk7CisJCX0KKworCQlpZiAobXNnW2ldLmFkZHIgPT0gMHhkMCkgeworCQkJLyogd3JpdGUvcmVhZCByZXF1ZXN0ICovCisJCQlpZiAoaSArIDEgPCBudW0gJiYgKG1zZ1tpICsgMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJCQlyZXEgPSAweEI5OworCQkJCWluZGV4ID0gKCgobXNnW2ldLmJ1ZlswXSA8PCA4KSAmIDB4ZmYwMCkgfCAobXNnW2ldLmJ1ZlsxXSAmIDB4MDBmZikpOworCQkJCXZhbHVlID0gbXNnW2ldLmFkZHIgKyAobXNnW2ldLmxlbiA8PCA4KTsKKwkJCQlsZW5ndGggPSBtc2dbaSArIDFdLmxlbiArIDY7CisJCQkJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgZGF0YSwgbGVuZ3RoKTsKKwkJCQlsZW4gPSBtc2dbaSArIDFdLmxlbjsKKwkJCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQkJCW1zZ1tpICsgMV0uYnVmW2pdID0gZGF0YVtqICsgNV07CisKKwkJCQlpKys7CisJCQl9IGVsc2UgeworCisJCQkJaWYgKG1zZ1tpXS5hZGRyID09IDB4ZDApIHsKKwkJCQkJLyogZGVtb2QgMTZiaXQgYWRkciAqLworCQkJCQlyZXEgPSAweEJEOworCQkJCQlpbmRleCA9ICgoKG1zZ1tpXS5idWZbMF0gPDwgOCkgJiAweGZmMDApIHwgKG1zZ1tpXS5idWZbMV0gJiAweDAwZmYpKTsKKwkJCQkJdmFsdWUgPSBtc2dbaV0uYWRkciArICgyIDw8IDgpOworCQkJCQlsZW5ndGggPSBtc2dbaV0ubGVuIC0gMjsKKwkJCQkJbGVuID0gbXNnW2ldLmxlbiAtIDI7CisJCQkJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCQkJCWRhdGFbal0gPSBtc2dbaV0uYnVmW2ogKyAyXTsKKworCQkJCX0KKwkJCQlhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgZGF0YSwgbGVuZ3RoKTsKKwkJCX0KKwkJfQorCisJCWlmIChtc2dbaV0uYWRkciA9PSAweGMwKSB7CisJCQlpZiAobXNnW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKworCQkJCXJlcSA9IDB4Qjk7CisJCQkJaW5kZXggPSAweDA7CisJCQkJdmFsdWUgPSBtc2dbaV0uYWRkcjsKKwkJCQlsZW5ndGggPSBtc2dbaV0ubGVuICsgNjsKKwkJCQlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQkJCWxlbiA9IG1zZ1tpXS5sZW47CisJCQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQkJCQltc2dbaV0uYnVmW2pdID0gZGF0YVtqICsgNV07CisKKwkJCX0gZWxzZSB7CisKKwkJCQlyZXEgPSAweEJEOworCQkJCWluZGV4ID0gbXNnW2ldLmJ1ZlswXSAmIDB4MDBGRjsKKwkJCQl2YWx1ZSA9IG1zZ1tpXS5hZGRyICsgKDEgPDwgOCk7CisJCQkJbGVuZ3RoID0gbXNnW2ldLmxlbiAtIDE7CisJCQkJbGVuID0gbXNnW2ldLmxlbiAtIDE7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQkJCWRhdGFbal0gPSBtc2dbaV0uYnVmW2ogKyAxXTsKKworCQkJCWF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKworCXJldHVybiBpOworfQorCisKK3N0YXRpYyB1MzIgYXo2MDI3X2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gYXo2MDI3X2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciAgID0gYXo2MDI3X2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gYXo2MDI3X2kyY19mdW5jLAorfTsKKworaW50IGF6NjAyN19pZGVudGlmeV9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCSAgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzLAorCQkJICBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLAorCQkJICBpbnQgKmNvbGQpCit7CisJdTggYlsxNl07CisJczE2IHJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJCSAgMHhiNywKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sCisJCQkJICA2LAorCQkJCSAgMCwKKwkJCQkgIGIsCisJCQkJICA2LAorCQkJCSAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCisJKmNvbGQgPSByZXQgPD0gMDsKKworCWRlYl9pbmZvKCJjb2xkOiAlZFxuIiwgKmNvbGQpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhejYwMjdfdXNiX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WSURfQVpVUkVXQVZFLCBVU0JfUElEX0FaVVJFV0FWRV9BWjYwMjcpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsICBVU0JfUElEX1RFUlJBVEVDX0RWQlMyQ0kpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVDSE5JU0FULCBVU0JfUElEX1RFQ0hOSVNBVF9VU0IyX0hEQ0kpIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGF6NjAyN191c2JfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgYXo2MDI3X3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAorCS5maXJtd2FyZSAgICAgICAgICAgID0gImR2Yi11c2ItYXo2MDI3LTAzLmZ3IiwKKwkubm9fcmVjb25uZWN0ICAgICAgICA9IDEsCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSksCisJLmlkZW50aWZ5X3N0YXRlCQk9IGF6NjAyN19pZGVudGlmeV9zdGF0ZSwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLnN0cmVhbWluZ19jdHJsICAgPSBhejYwMjdfc3RyZWFtaW5nX2N0cmwsCisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGF6NjAyN19mcm9udGVuZF9hdHRhY2gsCisKKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkuY291bnQgPSAxMCwKKwkJCQkuZW5kcG9pbnQgPSAweDAyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0KKwl9LAorLyoKKwkucG93ZXJfY3RybCAgICAgICA9IGF6NjAyN19wb3dlcl9jdHJsLAorCS5yZWFkX21hY19hZGRyZXNzID0gYXo2MDI3X3JlYWRfbWFjX2FkZHIsCisgKi8KKwkucmNfa2V5X21hcCAgICAgICA9IGF6NjAyN19yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShhejYwMjdfcmNfa2V5cyksCisJLnJjX2ludGVydmFsICAgICAgPSA0MDAsCisJLnJjX3F1ZXJ5ICAgICAgICAgPSBhejYwMjdfcmNfcXVlcnksCisJLmkyY19hbGdvICAgICAgICAgPSAmYXo2MDI3X2kyY19hbGdvLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7CisJCQkubmFtZSA9ICJBWlVSRVdBVkUgRFZCLVMvUzIgVVNCMi4wIChBWjYwMjcpIiwKKwkJCS5jb2xkX2lkcyA9IHsgJmF6NjAyN191c2JfdGFibGVbMF0sIE5VTEwgfSwKKwkJCS53YXJtX2lkcyA9IHsgTlVMTCB9LAorCQl9LAorCQl7IE5VTEwgfSwKKwl9Cit9OworCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXo2MDI3X3VzYl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImR2Yl91c2JfYXo2MDI3IiwKKwkucHJvYmUgCQk9IGF6NjAyN191c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgCT0gYXo2MDI3X3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSAJPSBhejYwMjdfdXNiX3RhYmxlLAorfTsKKworLyogbW9kdWxlIHN0dWZmICovCitzdGF0aWMgaW50IF9faW5pdCBhejYwMjdfdXNiX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYXo2MDI3X3VzYl9kcml2ZXIpOworCWlmIChyZXN1bHQpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiAoJWQpIiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF6NjAyN191c2JfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmYXo2MDI3X3VzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhejYwMjdfdXNiX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGF6NjAyN191c2JfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBZGFtcyBYdSA8QWRhbXMueHVAYXp3YXZlLmNvbS5jbj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBWlVSRVdBVkUgRFZCLVMvUzIgVVNCMi4wIChBWjYwMjcpIik7CitNT0RVTEVfVkVSU0lPTigiMS4wIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2FmZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9EVkJfVVNCX1ZQNjAyN19IXworI2RlZmluZSBfRFZCX1VTQl9WUDYwMjdfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImF6NjAyNyIKKyNpbmNsdWRlICJkdmItdXNiLmgiCisKKworZXh0ZXJuIGludCBkdmJfdXNiX2F6NjAyN19kZWJ1ZzsKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2F6NjAyN19kZWJ1ZywgMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2F6NjAyN19kZWJ1ZywgMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2F6NjAyN19kZWJ1ZywgMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX2ZlKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2F6NjAyN19kZWJ1ZywgMHgwOCwgYXJncykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKaW5kZXggMDVmYjI4ZTkuLmE3Yjg0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKQEAgLTExODQsNiArMTE4NCw5IEBACiAJLm9zY19jbGtfZnJlcSA9IDMwNDAwLCAvKiBpbiBrSHogKi8KIAkuaWZfZnJlcSA9IDAsIC8qIHplcm8gSUYgKi8KIAkuemlmX3N3YXBfaXEgPSAxLAorCS5hZ2NfbWluID0gMHgyRSwKKwkuYWdjX21heCA9IDB4OTAsCisJLmFnY19ob2xkX2xvb3AgPSAwLAogfTsKIAogc3RhdGljIGludCBjeHVzYl9teWdpY2FfZDY4OV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKaW5kZXggNDk1YTkwNS4uODNmYzI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKQEAgLTQyLDcgKzQyLDYgQEAKIAl1MTYgbXQyMDYwX2lmMVsyXTsKIAl1OCByY190b2dnbGU7CiAJdTggcmNfY291bnRlcjsKLQl1OCByY19mdW5jX3ZlcnNpb247CiAJdTggaXNfZGliNzAwMHBjOwogCXU4IGZ3X3VzZV9uZXdfaTJjX2FwaTsKIAl1OCBkaXNhYmxlX3N0cmVhbWluZ19tYXN0ZXJfbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCmluZGV4IDBkM2M5YTkuLjRmOTYxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwpAQCAtNDcxLDE0ICs0NzEsMjA5IEBACiAJcmV0dXJuIGRpYjA3MDBfY3RybF93cihhZGFwLT5kZXYsIGIsIDQpOwogfQogCisvKiBOdW1iZXIgb2Yga2V5cHJlc3NlcyB0byBpZ25vcmUgYmVmb3JlIHN0YXJ0IHJlcGVhdGluZyAqLworI2RlZmluZSBSQ19SRVBFQVRfREVMQVlfVjFfMjAgMTAKKworLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBSQyByZXNwb25zZSBwYWNrZXQgc3RhcnRpbmcgaW4gZmlybXdhcmUgMS4yMCAqLworc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgeworCXU4IHJlcG9ydF9pZDsKKwl1OCBkYXRhX3N0YXRlOworCXUxNiBzeXN0ZW07CisJdTggZGF0YTsKKwl1OCBub3RfZGF0YTsKK307CisjZGVmaW5lIFJDX01TR19TSVpFX1YxXzIwIDYKKworc3RhdGljIHZvaWQgZGliMDcwMF9yY191cmJfY29tcGxldGlvbihzdHJ1Y3QgdXJiICpwdXJiKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IHB1cmItPmNvbnRleHQ7CisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXA7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0OworCXN0cnVjdCBkaWIwNzAwX3JjX3Jlc3BvbnNlIHBvbGxfcmVwbHk7CisJdTggKmJ1ZjsKKwlpbnQgZm91bmQgPSAwOworCXUzMiBldmVudDsKKwlpbnQgc3RhdGU7CisJaW50IGk7CisKKwlkZWJfaW5mbygiJXMoKVxuIiwgX19mdW5jX18pOworCWlmIChkID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChkLT5yY19pbnB1dF9kZXYgPT0gTlVMTCkgeworCQkvKiBUaGlzIHdpbGwgb2NjdXIgaWYgZGlzYWJsZV9yY19wb2xsaW5nPTEgKi8KKwkJdXNiX2ZyZWVfdXJiKHB1cmIpOworCQlyZXR1cm47CisJfQorCisJa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKKwlzdCA9IGQtPnByaXY7CisJYnVmID0gKHU4ICopcHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJaWYgKHB1cmItPnN0YXR1cyA8IDApIHsKKwkJZGViX2luZm8oImRpc2NvbnRpbnVpbmcgcG9sbGluZ1xuIik7CisJCXVzYl9mcmVlX3VyYihwdXJiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwdXJiLT5hY3R1YWxfbGVuZ3RoICE9IFJDX01TR19TSVpFX1YxXzIwKSB7CisJCWRlYl9pbmZvKCJtYWxmb3JtZWQgcmMgbXNnIHNpemU9JWRcbiIsIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlnb3RvIHJlc3VibWl0OworCX0KKworCS8qIFNldCBpbml0aWFsIHJlc3VsdHMgaW4gY2FzZSB3ZSBleGl0IHRoZSBmdW5jdGlvbiBlYXJseSAqLworCWV2ZW50ID0gMDsKKwlzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKworCWRlYl9kYXRhKCJJUiByYXcgJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggKGxlbiAlZClcbiIsIGJ1ZlswXSwKKwkJIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwgYnVmWzVdLCBwdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCXN3aXRjaCAoZHZiX3VzYl9kaWIwNzAwX2lyX3Byb3RvKSB7CisJY2FzZSAwOgorCQkvKiBORUMgUHJvdG9jb2wgKi8KKwkJcG9sbF9yZXBseS5yZXBvcnRfaWQgID0gMDsKKwkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gMTsKKwkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gYnVmWzJdOworCQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07CisJCXBvbGxfcmVwbHkubm90X2RhdGEgICA9IGJ1Zls1XTsKKworCQkvKiBORUMgcHJvdG9jb2wgc2VuZHMgcmVwZWF0IGNvZGUgYXMgMCAwIDAgRkYgKi8KKwkJaWYgKChwb2xsX3JlcGx5LnN5c3RlbSA9PSAweDAwKSAmJiAocG9sbF9yZXBseS5kYXRhID09IDB4MDApCisJCSAgICAmJiAocG9sbF9yZXBseS5ub3RfZGF0YSA9PSAweGZmKSkgeworCQkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gMjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFJDNSBQcm90b2NvbCAqLworCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSBidWZbMF07CisJCXBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9IGJ1ZlsxXTsKKwkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXTsKKwkJcG9sbF9yZXBseS5kYXRhICAgICAgID0gYnVmWzRdOworCQlwb2xsX3JlcGx5Lm5vdF9kYXRhICAgPSBidWZbNV07CisJCWJyZWFrOworCX0KKworCWlmICgocG9sbF9yZXBseS5kYXRhICsgcG9sbF9yZXBseS5ub3RfZGF0YSkgIT0gMHhmZikgeworCQkvKiBLZXkgZmFpbGVkIGludGVncml0eSBjaGVjayAqLworCQllcnIoImtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrOiAlMDR4ICUwMnggJTAyeCIsCisJCSAgICBwb2xsX3JlcGx5LnN5c3RlbSwKKwkJICAgIHBvbGxfcmVwbHkuZGF0YSwgcG9sbF9yZXBseS5ub3RfZGF0YSk7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJZGViX2RhdGEoInJpZD0lMDJ4IGRzPSUwMnggc209JTA0eCBkPSUwMnggbmQ9JTAyeFxuIiwKKwkJIHBvbGxfcmVwbHkucmVwb3J0X2lkLCBwb2xsX3JlcGx5LmRhdGFfc3RhdGUsCisJCSBwb2xsX3JlcGx5LnN5c3RlbSwgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKworCS8qIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwICovCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IChwb2xsX3JlcGx5LnN5c3RlbSAmIDB4ZmYpICYmCisJCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBwb2xsX3JlcGx5LmRhdGEpIHsKKwkJCWV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZm91bmQgPT0gMCkgeworCQllcnIoIlVua25vd24gcmVtb3RlIGNvbnRyb2xsZXIga2V5OiAlMDR4ICUwMnggJTAyeCIsCisJCSAgICBwb2xsX3JlcGx5LnN5c3RlbSwgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKwkJZC0+bGFzdF9ldmVudCA9IDA7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJaWYgKHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9PSAxKSB7CisJCS8qIE5ldyBrZXkgaGl0ICovCisJCXN0LT5yY19jb3VudGVyID0gMDsKKwkJZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCXN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOworCQlkLT5sYXN0X2V2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCX0gZWxzZSBpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDIpIHsKKwkJLyogS2V5IHJlcGVhdGVkICovCisJCXN0LT5yY19jb3VudGVyKys7CisKKwkJLyogcHJldmVudHMgdW53YW50ZWQgZG91YmxlIGhpdHMgKi8KKwkJaWYgKHN0LT5yY19jb3VudGVyID4gUkNfUkVQRUFUX0RFTEFZX1YxXzIwKSB7CisJCQlldmVudCA9IGQtPmxhc3RfZXZlbnQ7CisJCQlzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKKwkJCXN0LT5yY19jb3VudGVyID0gUkNfUkVQRUFUX0RFTEFZX1YxXzIwOworCQl9CisJfSBlbHNlIHsKKwkJZXJyKCJVbmtub3duIGRhdGEgc3RhdGUgWyVkXSIsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSk7CisJfQorCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUkVNT1RFX05PX0tFWV9QUkVTU0VEOgorCQlicmVhazsKKwljYXNlIFJFTU9URV9LRVlfUFJFU1NFRDoKKwkJZGViX2luZm8oImtleSBwcmVzc2VkXG4iKTsKKwkJZC0+bGFzdF9ldmVudCA9IGV2ZW50OworCWNhc2UgUkVNT1RFX0tFWV9SRVBFQVQ6CisJCWRlYl9pbmZvKCJrZXkgcmVwZWF0ZWRcbiIpOworCQlpbnB1dF9ldmVudChkLT5yY19pbnB1dF9kZXYsIEVWX0tFWSwgZXZlbnQsIDEpOworCQlpbnB1dF9zeW5jKGQtPnJjX2lucHV0X2Rldik7CisJCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBkLT5sYXN0X2V2ZW50LCAwKTsKKwkJaW5wdXRfc3luYyhkLT5yY19pbnB1dF9kZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK3Jlc3VibWl0OgorCS8qIENsZWFuIHRoZSBidWZmZXIgYmVmb3JlIHdlIHJlcXVldWUgKi8KKwltZW1zZXQocHVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCBSQ19NU0dfU0laRV9WMV8yMCk7CisKKwkvKiBSZXF1ZXVlIFVSQiAqLworCXVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworfQorCiBpbnQgZGliMDcwMF9yY19zZXR1cChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKIAl1OCByY19zZXR1cFszXSA9IHtSRVFVRVNUX1NFVF9SQywgZHZiX3VzYl9kaWIwNzAwX2lyX3Byb3RvLCAwfTsKLQlpbnQgaSA9IGRpYjA3MDBfY3RybF93cihkLCByY19zZXR1cCwgMyk7CisJc3RydWN0IHVyYiAqcHVyYjsKKwlpbnQgcmV0OworCWludCBpOworCisJaWYgKGQtPnByb3BzLnJjX2tleV9tYXAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBTZXQgdGhlIElSIG1vZGUgKi8KKwlpID0gZGliMDcwMF9jdHJsX3dyKGQsIHJjX3NldHVwLCAzKTsKIAlpZiAoaTwwKSB7CiAJCWVycigiaXIgcHJvdG9jb2wgc2V0dXAgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAl9CisKKwlpZiAoc3QtPmZ3X3ZlcnNpb24gPCAweDEwMjAwKQorCQlyZXR1cm4gMDsKKworCS8qIFN0YXJ0aW5nIGluIGZpcm13YXJlIDEuMjAsIHRoZSBSQyBpbmZvIGlzIHByb3ZpZGVkIG9uIGEgYnVsayBwaXBlICovCisJcHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHB1cmIgPT0gTlVMTCkgeworCQllcnIoInJjIHVzYiBhbGxvYyB1cmIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2MoUkNfTVNHX1NJWkVfVjFfMjAsIEdGUF9LRVJORUwpOworCWlmIChwdXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQllcnIoInJjIGt6YWxsb2MgZmFpbGVkXG4iKTsKKwkJdXNiX2ZyZWVfdXJiKHB1cmIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCXVzYl9maWxsX2J1bGtfdXJiKHB1cmIsIGQtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LCAxKSwKKwkJCSAgcHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBSQ19NU0dfU0laRV9WMV8yMCwKKwkJCSAgZGliMDcwMF9yY191cmJfY29tcGxldGlvbiwgZCk7CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZXJyKCJyYyBzdWJtaXQgdXJiIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggNDQ5NzJkMC4uMzRlYWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC00NzIsMjAgKzQ3MiwyNSBAQAogCiAvKiBOdW1iZXIgb2Yga2V5cHJlc3NlcyB0byBpZ25vcmUgYmVmb3JlIHN0YXJ0IHJlcGVhdGluZyAqLwogI2RlZmluZSBSQ19SRVBFQVRfREVMQVkgNgotI2RlZmluZSBSQ19SRVBFQVRfREVMQVlfVjFfMjAgMTAKIAotCi0KLS8qIFVzZWQgYnkgZmlybXdhcmUgdmVyc2lvbnMgPCAxLjIwIChkZXByZWNhdGVkKSAqLwotc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5X2xlZ2FjeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsCi0JCQkJICAgaW50ICpzdGF0ZSkKK3N0YXRpYyBpbnQgZGliMDcwMF9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCiB7CiAJdTgga2V5WzRdOwogCWludCBpOwogCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKIAlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OworCiAJKmV2ZW50ID0gMDsKIAkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7CisKKwlpZiAoc3QtPmZ3X3ZlcnNpb24gPj0gMHgxMDIwMCkgeworCQkvKiBGb3IgMS4yMCBmaXJtd2FyZSAsIFdlIG5lZWQgdG8ga2VlcCB0aGUgUkMgcG9sbGluZworCQkgICBjYWxsYmFjayBzbyB3ZSBjYW4gcmV1c2UgdGhlIGlucHV0IGRldmljZSBzZXR1cCBpbgorCQkgICBkdmItdXNiLXJlbW90ZS5jLiAgSG93ZXZlciwgdGhlIGFjdHVhbCB3b3JrIGlzIGJlaW5nIGRvbmUKKwkJICAgaW4gdGhlIGJ1bGsgVVJCIGNvbXBsZXRpb24gaGFuZGxlci4gKi8KKwkJcmV0dXJuIDA7CisJfQorCiAJaT1kaWIwNzAwX2N0cmxfcmQoZCxyY19yZXF1ZXN0LDIsa2V5LDQpOwogCWlmIChpPD0wKSB7CiAJCWVycigiUkMgUXVlcnkgRmFpbGVkIik7CkBAIC01NTcsMTQ5ICs1NjIsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFJDIHJlc3BvbnNlIHBhY2tldCBzdGFydGluZyBpbiBmaXJtd2FyZSAxLjIwICovCi1zdHJ1Y3QgZGliMDcwMF9yY19yZXNwb25zZSB7Ci0JdTggcmVwb3J0X2lkOwotCXU4IGRhdGFfc3RhdGU7Ci0JdTE2IHN5c3RlbTsKLQl1OCBkYXRhOwotCXU4IG5vdF9kYXRhOwotfTsKLQotLyogVGhpcyBzdXBwb3J0cyB0aGUgbmV3IElSIHJlc3BvbnNlIGZvcm1hdCBmb3IgZmlybXdhcmUgdjEuMjAgKi8KLXN0YXRpYyBpbnQgZGliMDcwMF9yY19xdWVyeV92MV8yMChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsCi0JCQkJICBpbnQgKnN0YXRlKQotewotCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKLQlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OwotCXN0cnVjdCBkaWIwNzAwX3JjX3Jlc3BvbnNlIHBvbGxfcmVwbHk7Ci0JdTggYnVmWzZdOwotCWludCBpOwotCWludCBzdGF0dXM7Ci0JaW50IGFjdGxlbjsKLQlpbnQgZm91bmQgPSAwOwotCi0JLyogU2V0IGluaXRpYWwgcmVzdWx0cyBpbiBjYXNlIHdlIGV4aXQgdGhlIGZ1bmN0aW9uIGVhcmx5ICovCi0JKmV2ZW50ID0gMDsKLQkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7Ci0KLQkvKiBGaXJtd2FyZSB2MS4yMCBwcm92aWRlcyBSQyBkYXRhIHZpYSBidWxrIGVuZHBvaW50IDEgKi8KLQlzdGF0dXMgPSB1c2JfYnVsa19tc2coZC0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsIDEpLCBidWYsCi0JCQkgICAgICBzaXplb2YoYnVmKSwgJmFjdGxlbiwgNTApOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCS8qIE5vIGRhdGEgYXZhaWxhYmxlIChtZWFuaW5nIG5vIGtleSBwcmVzcykgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0KLQlzd2l0Y2ggKGR2Yl91c2JfZGliMDcwMF9pcl9wcm90bykgewotCWNhc2UgMDoKLQkJcG9sbF9yZXBseS5yZXBvcnRfaWQgID0gMDsKLQkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gMTsKLQkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gYnVmWzJdOwotCQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07Ci0JCXBvbGxfcmVwbHkubm90X2RhdGEgICA9IGJ1Zls1XTsKLQotCQkvKiBORUMgcHJvdG9jb2wgc2VuZHMgcmVwZWF0IGNvZGUgYXMgMCAwIDAgRkYgKi8KLQkJaWYgKChwb2xsX3JlcGx5LnN5c3RlbSA9PSAweDAwKSAmJiAocG9sbF9yZXBseS5kYXRhID09IDB4MDApCi0JCSAgICAmJiAocG9sbF9yZXBseS5ub3RfZGF0YSA9PSAweGZmKSkgewotCQkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gMjsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JaWYgKGFjdGxlbiAhPSBzaXplb2YoYnVmKSkgewotCQkvKiBXZSBkaWRuJ3QgZ2V0IGJhY2sgdGhlIDYgYnl0ZSBtZXNzYWdlIHdlIGV4cGVjdGVkICovCi0JCWVycigiVW5leHBlY3RlZCBSQyByZXNwb25zZSBzaXplIFslZF0iLCBhY3RsZW4pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcG9sbF9yZXBseS5yZXBvcnRfaWQgID0gYnVmWzBdOwotCXBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9IGJ1ZlsxXTsKLQkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXTsKLQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07Ci0JcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOwotCi0JCWJyZWFrOwotCX0KLQotCWlmICgocG9sbF9yZXBseS5kYXRhICsgcG9sbF9yZXBseS5ub3RfZGF0YSkgIT0gMHhmZikgewotCQkvKiBLZXkgZmFpbGVkIGludGVncml0eSBjaGVjayAqLwotCQllcnIoImtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrOiAlMDR4ICUwMnggJTAyeCIsCi0JCSAgICBwb2xsX3JlcGx5LnN5c3RlbSwKLQkJICAgIHBvbGxfcmVwbHkuZGF0YSwgcG9sbF9yZXBseS5ub3RfZGF0YSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQotCS8qIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwICovCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7Ci0JCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IChwb2xsX3JlcGx5LnN5c3RlbSAmIDB4ZmYpICYmCi0JCQlyYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBwb2xsX3JlcGx5LmRhdGEpIHsKLQkJCSpldmVudCA9IGtleW1hcFtpXS5ldmVudDsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGZvdW5kID09IDApIHsKLQkJZXJyKCJVbmtub3duIHJlbW90ZSBjb250cm9sbGVyIGtleTogJTA0eCAlMDJ4ICUwMngiLAotCQkJcG9sbF9yZXBseS5zeXN0ZW0sCi0JCQlwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOwotCQlkLT5sYXN0X2V2ZW50ID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9PSAxKSB7Ci0JCS8qIE5ldyBrZXkgaGl0ICovCi0JCXN0LT5yY19jb3VudGVyID0gMDsKLQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwotCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCWQtPmxhc3RfZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7Ci0JfSBlbHNlIGlmIChwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPT0gMikgewotCQkvKiBLZXkgcmVwZWF0ZWQgKi8KLQkJc3QtPnJjX2NvdW50ZXIrKzsKLQotCQkvKiBwcmV2ZW50cyB1bndhbnRlZCBkb3VibGUgaGl0cyAqLwotCQlpZiAoc3QtPnJjX2NvdW50ZXIgPiBSQ19SRVBFQVRfREVMQVlfVjFfMjApIHsKLQkJCSpldmVudCA9IGQtPmxhc3RfZXZlbnQ7Ci0JCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQlzdC0+cmNfY291bnRlciA9IFJDX1JFUEVBVF9ERUxBWV9WMV8yMDsKLQkJfQotCX0gZWxzZSB7Ci0JCWVycigiVW5rbm93biBkYXRhIHN0YXRlIFslZF0iLCBwb2xsX3JlcGx5LmRhdGFfc3RhdGUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRpYjA3MDBfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQotewotCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7Ci0KLQkvKiBCZWNhdXNlIHNvbWUgcGVvcGxlIG1heSBoYXZlIGltcHJvcGVybHkgbmFtZWQgZmlybXdhcmUgZmlsZXMsCi0JICAgbGV0J3MgZmlndXJlIG91dCB3aGV0aGVyIHRvIHVzZSB0aGUgbmV3IGZpcm13YXJlIGNhbGwgb3IgdGhlIGxlZ2FjeQotCSAgIGNhbGwgYmFzZWQgb24gdGhlIGZpcm13YXJlIHZlcnNpb24gZW1iZWRkZWQgaW4gdGhlIGZpbGUgKi8KLQlpZiAoc3QtPnJjX2Z1bmNfdmVyc2lvbiA9PSAwKSB7Ci0JCXUzMiBod3Zlciwgcm9tdmVyLCByYW12ZXIsIGZ3dHlwZTsKLQkJaW50IHJldCA9IGRpYjA3MDBfZ2V0X3ZlcnNpb24oZCwgJmh3dmVyLCAmcm9tdmVyLCAmcmFtdmVyLAotCQkJCQkgICAgICAmZnd0eXBlKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWVycigiQ291bGQgbm90IGRldGVybWluZSB2ZXJzaW9uIGluZm8iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlpZiAocmFtdmVyIDwgMHgxMDIwMCkKLQkJCXN0LT5yY19mdW5jX3ZlcnNpb24gPSAxOwotCQllbHNlCi0JCQlzdC0+cmNfZnVuY192ZXJzaW9uID0gMjsKLQl9Ci0KLQlpZiAoc3QtPnJjX2Z1bmNfdmVyc2lvbiA9PSAyKQotCQlyZXR1cm4gZGliMDcwMF9yY19xdWVyeV92MV8yMChkLCBldmVudCwgc3RhdGUpOwotCWVsc2UKLQkJcmV0dXJuIGRpYjA3MDBfcmNfcXVlcnlfbGVnYWN5KGQsIGV2ZW50LCBzdGF0ZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgZGliMDcwMF9yY19rZXlzW10gPSB7CiAJLyogS2V5IGNvZGVzIGZvciB0aGUgdGlueSBQaW5uYWNsZSByZW1vdGUqLwogCXsgMHgwNzAwLCBLRVlfTVVURSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IGJjMzU4MWQuLmFlOGI1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTY0LDYgKzY0LDggQEAKICNkZWZpbmUgVVNCX1ZJRF9IVU1BWF9DT0VYCQkJMHgxMGI5CiAjZGVmaW5lIFVTQl9WSURfNzc0CQkJCTB4N2E2OQogI2RlZmluZSBVU0JfVklEX0VWT0xVVEVQQwkJCTB4MWU1OQorI2RlZmluZSBVU0JfVklEX0FaVVJFV0FWRQkJCTB4MTNkMworI2RlZmluZSBVU0JfVklEX1RFQ0hOSVNBVAkJCTB4MTRmNwogCiAvKiBQcm9kdWN0IElEcyAqLwogI2RlZmluZSBVU0JfUElEX0FEU1RFQ0hfVVNCMl9DT0xECQkJMHhhMzMzCkBAIC0xMzgsNiArMTQwLDcgQEAKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMV9DT0xECQkJMHgzMjA3CiAjZGVmaW5lIFVTQl9QSURfVFdJTkhBTl9WUDcwMjFfV0FSTQkJCTB4MzIwOAogI2RlZmluZSBVU0JfUElEX1RJTllUV0lOCQkJCTB4MzIyNgorI2RlZmluZSBVU0JfUElEX1RJTllUV0lOXzIJCQkJMHhlNDAyCiAjZGVmaW5lIFVTQl9QSURfRE5UVl9USU5ZVVNCMl9DT0xECQkJMHgzMjIzCiAjZGVmaW5lIFVTQl9QSURfRE5UVl9USU5ZVVNCMl9XQVJNCQkJMHgzMjI0CiAjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX0NPTEQJCQkweDgxMDUKQEAgLTIwOSw2ICsyMTIsNyBAQAogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3MUUJCQkweDAyMmIKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzJFCQkJMHgwMjM2CiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczRQkJCTB4MDIzNworI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFYzMTBFCQkJMHgzMjExCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjgwMUUJCQkweDAyM2EKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRV9TRQkJCTB4MDIzYgogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0EJCQkweDAyNDMKQEAgLTI0OCw2ICsyNTIsNyBAQAogI2RlZmluZSBVU0JfUElEX0RJR0lWT1hfTUlOSV9TTF9XQVJNCQkJMHhlMzYxCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0IyX0NPTEQJCQkweDBiYzYKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQjJfV0FSTQkJCTB4MGJjNworI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWMjAwMERTCQkJMHg2YTA0CiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX0NPTEQJCQkweDYwMjUKICNkZWZpbmUgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfV0FSTQkJCTB4NjAyNgogI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9TVEs3NzAwUAkJMHg2ZjAwCkBAIC0yOTAsNSArMjk1LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9GUklJT19XSElURQkJCQkweDAwMDEKICNkZWZpbmUgVVNCX1BJRF9UVldBWV9QTFVTCQkJCTB4MDAwMgogI2RlZmluZSBVU0JfUElEX1NWRU9OX1NUVjIwCQkJCTB4ZTM5ZAotCisjZGVmaW5lIFVTQl9QSURfQVpVUkVXQVZFX0FaNjAyNwkJCTB4MzI3NQorI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0RWQlMyQ0kJCQkweDMyNzUKKyNkZWZpbmUgVVNCX1BJRF9URUNITklTQVRfVVNCMl9IRENJCQkJMHgwMDAyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCmluZGV4IGUzMzFkYjguLjVkOTFmNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UpLEdGUF9LRVJORUwpOwogCWlmIChkID09IE5VTEwpIHsKIAkJZXJyKCJubyBtZW1vcnkgZm9yICdzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UnIik7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWQtPnVkZXYgPSB1ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCmluZGV4IDZiNWRlZDkuLmEwM2VmN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCQljYXNlIFJFTU9URV9LRVlfUkVQRUFUOgogCQkJZGViX3JjKCJrZXkgcmVwZWF0ZWRcbiIpOwogCQkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGV2ZW50LCAxKTsKKwkJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKIAkJCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBkLT5sYXN0X2V2ZW50LCAwKTsKIAkJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKaW5kZXggNjQxMzJjMC4uYWNjYzY1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCkBAIC0xLDYgKzEsNyBAQAogLyogRFZCIFVTQiBmcmFtZXdvcmsgY29tcGxpYW50IExpbnV4IGRyaXZlciBmb3IgdGhlCiAqCURWQldvcmxkIERWQi1TIDIxMDEsIDIxMDIsIERWQi1TMiAyMTA0LCBEVkItQyAzMTAxLAotKglUZVZpaSBTNjAwLCBTNjMwLCBTNjUwIENhcmRzCisqCVRlVmlpIFM2MDAsIFM2MzAsIFM2NTAsCisqCVByb2YgMTEwMCwgNzUwMCBDYXJkcwogKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSBJZ29yIE0uIExpcGxpYW5pbiAobGlwbGlhbmluQG1lLmJ5KQogKgogKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtNDY5LDExICs0NzAsMTMgQEAKIAkJCQkJCQkJaW50IG51bSkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCWludCByZXQgPSAwOwogCWludCBsZW4sIGksIGo7CiAKIAlpZiAoIWQpCiAJCXJldHVybiAtRU5PREVWOworCXVkZXYgPSBkLT51ZGV2OwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQogCQlyZXR1cm4gLUVBR0FJTjsKIApAQCAtNDg4LDggKzQ5MSwxMyBAQAogCQl9CiAJCWNhc2UgKERXMjEwMl9WT0xUQUdFX0NUUkwpOiB7CiAJCQl1OCBvYnVmWzJdOworCisJCQlvYnVmWzBdID0gMTsKKwkJCW9idWZbMV0gPSBtc2dbal0uYnVmWzFdOy8qIG9mZi1vbiAqLworCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OGEsIDAsIDAsCisJCQkJCW9idWYsIDIsIERXMjEwWF9XUklURV9NU0cpOwogCQkJb2J1ZlswXSA9IDM7Ci0JCQlvYnVmWzFdID0gbXNnW2pdLmJ1ZlswXTsKKwkJCW9idWZbMV0gPSBtc2dbal0uYnVmWzBdOy8qIDEzdi0xOHYgKi8KIAkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweDhhLCAwLCAwLAogCQkJCQlvYnVmLCAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKIAkJCWJyZWFrOwpAQCAtNTI3LDYgKzUzNSwxNyBAQAogCQkJCQlpICs9IDE2OwogCQkJCQlsZW4gLT0gMTY7CiAJCQkJfSB3aGlsZSAobGVuID4gMCk7CisJCQl9IGVsc2UgaWYgKCh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSAweDc1MDApCisJCQkJCSYmIChqIDwgKG51bSAtIDEpKSkgeworCQkJCS8qIHdyaXRlIHJlZ2lzdGVyIGFkZHIgYmVmb3JlIHJlYWQgKi8KKwkJCQl1OCBvYnVmW21zZ1tqXS5sZW4gKyAyXTsKKwkJCQlvYnVmWzBdID0gbXNnW2ogKyAxXS5sZW47CisJCQkJb2J1ZlsxXSA9IChtc2dbal0uYWRkciA8PCAxKTsKKwkJCQltZW1jcHkob2J1ZiArIDIsIG1zZ1tqXS5idWYsIG1zZ1tqXS5sZW4pOworCQkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweDkyLCAwLCAwLAorCQkJCQkJb2J1ZiwgbXNnW2pdLmxlbiArIDIsCisJCQkJCQlEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJLyogd3JpdGUgcmVnaXN0ZXJzICovCiAJCQkJdTggb2J1Zlttc2dbal0ubGVuICsgMl07CkBAIC02NTEsMTggKzY3MCwyNSBAQAogCiBzdGF0aWMgaW50IGR3MjEweF9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewotCXN0YXRpYyB1OCBjb21tYW5kXzEzdlsxXSA9IHsweDAwfTsKLQlzdGF0aWMgdTggY29tbWFuZF8xOHZbMV0gPSB7MHgwMX07Ci0Jc3RydWN0IGkyY19tc2cgbXNnW10gPSB7Ci0JCXsuYWRkciA9IERXMjEwMl9WT0xUQUdFX0NUUkwsIC5mbGFncyA9IDAsCi0JCQkuYnVmID0gY29tbWFuZF8xM3YsIC5sZW4gPSAxfSwKKwlzdGF0aWMgdTggY29tbWFuZF8xM3ZbXSA9IHsweDAwLCAweDAxfTsKKwlzdGF0aWMgdTggY29tbWFuZF8xOHZbXSA9IHsweDAxLCAweDAxfTsKKwlzdGF0aWMgdTggY29tbWFuZF9vZmZbXSA9IHsweDAwLCAweDAwfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gRFcyMTAyX1ZPTFRBR0VfQ1RSTCwKKwkJLmZsYWdzID0gMCwKKwkJLmJ1ZiA9IGNvbW1hbmRfb2ZmLAorCQkubGVuID0gMiwKIAl9OwogCiAJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqdWRldl9hZGFwID0KIAkJKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKikoZmUtPmR2Yi0+cHJpdik7CiAJaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTgpCi0JCW1zZ1swXS5idWYgPSBjb21tYW5kXzE4djsKLQlpMmNfdHJhbnNmZXIoJnVkZXZfYWRhcC0+ZGV2LT5pMmNfYWRhcCwgbXNnLCAxKTsKKwkJbXNnLmJ1ZiA9IGNvbW1hbmRfMTh2OworCWVsc2UgaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTMpCisJCW1zZy5idWYgPSBjb21tYW5kXzEzdjsKKworCWkyY190cmFuc2ZlcigmdWRldl9hZGFwLT5kZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC03MzUsNiArNzYxLDE4IEBACiAJLmNsa19kaXYgPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBzdHYwOTAwX2NvbmZpZyBwcm9mXzc1MDBfc3R2MDkwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDZhLAorCS5kZW1vZF9tb2RlID0gMCwKKwkueHRhbCA9IDI3MDAwMDAwLAorCS5jbGttb2RlID0gMywvKiAwLUNMS0ksIDItWFRBTEksIGVsc2UgQVVUTyAqLworCS5kaXNlcWNfbW9kZSA9IDIsLyogMi8zIFBXTSAqLworCS50dW4xX21hZGRyZXNzID0gMCwvKiAweDYwICovCisJLnR1bjFfYWRjID0gMCwvKiAyIFZwcCAqLworCS5wYXRoMV9tb2RlID0gMywKKwkudHVuMV90eXBlID0gMywKK307CisKIHN0YXRpYyBpbnQgZHcyMTA0X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICpkKQogewogCXN0cnVjdCBkdmJfdHVuZXJfb3BzICp0dW5lcl9vcHMgPSBOVUxMOwpAQCAtODgyLDYgKzkyMCwxOSBAQAogCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgaW50IHByb2ZfNzUwMF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqZCkKK3sKKwlkLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDkwMF9hdHRhY2gsICZwcm9mXzc1MDBfc3R2MDkwMF9jb25maWcsCisJCQkJCSZkLT5kZXYtPmkyY19hZGFwLCAwKTsKKwlpZiAoZC0+ZmUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisJZC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGR3MjEweF9zZXRfdm9sdGFnZTsKKworCWluZm8oIkF0dGFjaGVkIFNUVjA5MDArU1RCNjEwMEEhXG4iKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGR3MjEwMl90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBhZGFwLT5mZSwgMHg2MCwKQEAgLTEwNzMsNiArMTEyNCw3IEBACiAJe1VTQl9ERVZJQ0UoMHg5MDIyLCBVU0JfUElEX1RFVklJX1M2MzApfSwKIAl7VVNCX0RFVklDRSgweDMwMTEsIFVTQl9QSURfUFJPRl8xMTAwKX0sCiAJe1VTQl9ERVZJQ0UoMHg5MDIyLCBVU0JfUElEX1RFVklJX1M2NjApfSwKKwl7VVNCX0RFVklDRSgweDMwMzQsIDB4NzUwMCl9LAogCXsgfQogfTsKIApAQCAtMTM4Nyw5ICsxNDM5LDMwIEBACiAJfQogfTsKIAorc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnA3NTAwOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiBkNzUwMCA9IHsKKwkiUHJvZiA3NTAwIFVTQiBEVkItUzIiLAorCXsmZHcyMTAyX3RhYmxlWzldLCBOVUxMfSwKKwl7TlVMTH0sCit9OworCiBzdGF0aWMgaW50IGR3MjEwMl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCisJcDc1MDAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyksIEdGUF9LRVJORUwpOworCWlmICghcDc1MDApCisJCXJldHVybiAtRU5PTUVNOworCS8qIGNvcHkgZGVmYXVsdCBzdHJ1Y3R1cmUgKi8KKwltZW1jcHkocDc1MDAsICZzNngwX3Byb3BlcnRpZXMsCisJCQlzaXplb2Yoc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMpKTsKKwkvKiBmaWxsIG9ubHkgZGlmZmVyZW50IGZpZWxkcyAqLworCXA3NTAwLT5maXJtd2FyZSA9ICJkdmItdXNiLXA3NTAwLmZ3IjsKKwlwNzUwMC0+ZGV2aWNlc1swXSA9IGQ3NTAwOworCXA3NTAwLT5yY19rZXlfbWFwID0gdGJzX3JjX2tleXM7CisJcDc1MDAtPnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUodGJzX3JjX2tleXMpOworCXA3NTAwLT5hZGFwdGVyLT5mcm9udGVuZF9hdHRhY2ggPSBwcm9mXzc1MDBfZnJvbnRlbmRfYXR0YWNoOworCiAJaWYgKDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZHcyMTAyX3Byb3BlcnRpZXMsCiAJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKIAkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzIxMDRfcHJvcGVydGllcywKQEAgLTEzOTcsNiArMTQ3MCw4IEBACiAJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZHczMTAxX3Byb3BlcnRpZXMsCiAJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKIAkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZzNngwX3Byb3BlcnRpZXMsCisJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKKwkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsIHA3NTAwLAogCQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpKQogCQlyZXR1cm4gMDsKIApAQCAtMTQzMSw2ICsxNTA2LDYgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEVkJXb3JsZCBEVkItUyAyMTAxLCAyMTAyLCBEVkItUzIgMjEwNCwiCiAJCQkJIiBEVkItQyAzMTAxIFVTQjIuMCwiCiAJCQkJIiBUZVZpaSBTNjAwLCBTNjMwLCBTNjUwLCBTNjYwIFVTQjIuMCwiCi0JCQkJIiBQcm9mIDExMDAgVVNCMi4wIGRldmljZXMiKTsKKwkJCQkiIFByb2YgMTEwMCwgNzUwMCBVU0IyLjAgZGV2aWNlcyIpOwogTU9EVUxFX1ZFUlNJT04oIjAuMSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jCmluZGV4IGViYjdiOWYuLmQxNGJkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMKQEAgLTM2Niw3ICszNjYsNyBAQAogCXsweDc2LCAweDBDfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBpbnQgaW5pdF9jb2RlX2xlbiA9IHNpemVvZihpbml0X2NvZGUpIC8gc2l6ZW9mKHU4WzJdKTsKK3N0YXRpYyBjb25zdCBpbnQgaW5pdF9jb2RlX2xlbiA9IHNpemVvZihpbml0X2NvZGUpIC8gc2l6ZW9mKHU4WzJdKTsKIAogc3RhdGljIGludCBqZHZidDkwNTAyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKaW5kZXggZWY5YjdiZS4uNzM3ZmZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwpAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgInF0MTAxMC5oIgogI2luY2x1ZGUgInRkYTEwMDR4LmgiCiAjaW5jbHVkZSAidGRhODI3eC5oIgorCisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlICJ0dW5lci1zaW1wbGUuaCIKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKIC8qIGRlYnVnICovCkBAIC0xNTgsMTEgKzE2MSwxNCBAQAogCiAJCQljYXNlIDB4OTM6CiAJCQljYXNlIDB4OTI6CisJCQljYXNlIDB4ODM6IC8qIHBpbm5hY2xlIFBDVFYzMTBlICovCisJCQljYXNlIDB4ODI6CiAJCQkJbS0+cmVwX2NvdW50ID0gMDsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAJCQkJZ290byB1bmxvY2s7CiAKIAkJCWNhc2UgMHg5MToKKwkJCWNhc2UgMHg4MTogLyogcGlubmFjbGUgUENUVjMxMGUgKi8KIAkJCQkvKiBwcmV2ZW50IGltbWVkaWF0ZSBhdXRvLXJlcGVhdCAqLwogCQkJCWlmICgrK20tPnJlcF9jb3VudCA+IDIpCiAJCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUkVQRUFUOwpAQCAtNTQ2LDYgKzU1MiwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG05MjB4X2ZtZDEyMTZtZV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGFkYXAtPmZlLAorCQkgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg2MSwKKwkJICAgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKTsKKwlyZXR1cm4gMDsKK30KKwogLyogZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCiBzdGF0aWMgc3RydWN0IG05MjB4X2luaXRzIG1lZ2Fza3lfcmNfaW5pdCBbXSA9IHsKIAl7IE05MjA2X1JDX0lOSVQyLCAweGE4IH0sCkBAIC01NjIsNiArNTc2LDE4IEBACiAJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCitzdGF0aWMgc3RydWN0IG05MjB4X2luaXRzIHBpbm5hY2xlMzEwZV9pbml0W10gPSB7CisJLyogd2l0aG91dCB0aGVzZSB0aGUgdHVuZXIgZG9uJ3Qgd29yayAqLworCXsgMHhmZjIwLCAgICAgICAgIDB4OWIgfSwKKwl7IDB4ZmYyMiwgICAgICAgICAweDcwIH0sCisKKwkvKiByYyBzZXR0aW5ncyAqLworCXsgMHhmZjUwLCAgICAgICAgIDB4ODAgfSwKKwl7IE05MjA2X1JDX0lOSVQxLCAweDAwIH0sCisJeyBNOTIwNl9SQ19JTklUMiwgMHhmZiB9LAorCXsgfSAvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKwogLyogaXIga2V5bWFwcyAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBtZWdhc2t5X3JjX2tleXMgW10gPSB7CiAJeyAweDAwMTIsIEtFWV9QT1dFUiB9LApAQCAtNjAyLDExICs2MjgsNjggQEAKIAl7IDB4MDAxZSwgS0VZX1ZPTFVNRVVQIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IHBpbm5hY2xlMzEwZV9yY19rZXlzW10gPSB7CisJeyAweDE2LCBLRVlfUE9XRVIgfSwKKwl7IDB4MTcsIEtFWV9GQVZPUklURVMgfSwKKwl7IDB4MGYsIEtFWV9URVhUIH0sCisJeyAweDQ4LCBLRVlfTUVESUEgfSwJCS8qIHByZXZpZXcgKi8KKwl7IDB4MWMsIEtFWV9FUEcgfSwKKwl7IDB4MDQsIEtFWV9MSVNUIH0sCQkJLyogcmVjb3JkIGxpc3QgKi8KKwl7IDB4MDMsIEtFWV8xIH0sCisJeyAweDAxLCBLRVlfMiB9LAorCXsgMHgwNiwgS0VZXzMgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDFkLCBLRVlfNSB9LAorCXsgMHgxZiwgS0VZXzYgfSwKKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDE5LCBLRVlfOCB9LAorCXsgMHgxYiwgS0VZXzkgfSwKKwl7IDB4MTUsIEtFWV8wIH0sCisJeyAweDBjLCBLRVlfQ0FOQ0VMIH0sCisJeyAweDRhLCBLRVlfQ0xFQVIgfSwKKwl7IDB4MTMsIEtFWV9CQUNLIH0sCisJeyAweDAwLCBLRVlfVEFCIH0sCisJeyAweDRiLCBLRVlfVVAgfSwKKwl7IDB4NGUsIEtFWV9MRUZUIH0sCisJeyAweDUyLCBLRVlfUklHSFQgfSwKKwl7IDB4NTEsIEtFWV9ET1dOIH0sCisJeyAweDRmLCBLRVlfRU5URVIgfSwJCS8qIGNvdWxkIGFsc28gYmUgS0VZX09LICovCisJeyAweDFlLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA1LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MTEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTQsIEtFWV9QTEFZIH0sCisJeyAweDRjLCBLRVlfUEFVU0UgfSwKKwl7IDB4MWEsIEtFWV9TVE9QIH0sCisJeyAweDQwLCBLRVlfUkVXSU5EIH0sCisJeyAweDEyLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4NDEsIEtFWV9QUkVWSU9VU1NPTkcgfSwJLyogUmVwbGF5ICovCisJeyAweDQyLCBLRVlfTkVYVFNPTkcgfSwJCS8qIFNraXAgKi8KKwl7IDB4NTQsIEtFWV9DQU1FUkEgfSwJCS8qIENhcHR1cmUgKi8KKy8qCXsgMHg1MCwgS0VZX1NBUCB9LAkqLwkJLyogU2FwICovCisJeyAweDQ3LCBLRVlfQ1lDTEVXSU5ET1dTIH0sCS8qIFBpcCAqLworCXsgMHg0ZCwgS0VZX1NDUkVFTiB9LAkJLyogRnVsbFNjcmVlbiAqLworCXsgMHgwOCwgS0VZX1NVQlRJVExFIH0sCisJeyAweDBlLCBLRVlfTVVURSB9LAorLyoJeyAweDQ5LCBLRVlfTFIgfSwJKi8JCS8qIEwvUiAqLworCXsgMHgwNywgS0VZX1NMRUVQIH0sCQkvKiBIaWJlcm5hdGUgKi8KKwl7IDB4MDgsIEtFWV9NRURJQSB9LAkJLyogQS9WICovCisJeyAweDBlLCBLRVlfTUVOVSB9LAkJCS8qIFJlY2FsbCAqLworCXsgMHg0NSwgS0VZX1pPT01JTiB9LAorCXsgMHg0NiwgS0VZX1pPT01PVVQgfSwKKwl7IDB4MTgsIEtFWV9UViB9LAkJCS8qIFJlZCAqLworCXsgMHg1MywgS0VZX1ZDUiB9LAkJCS8qIEdyZWVuICovCisJeyAweDVlLCBLRVlfU0FUIH0sCQkJLyogWWVsbG93ICovCisJeyAweDVmLCBLRVlfUExBWUVSIH0sCQkvKiBCbHVlICovCit9OworCiAvKiBEVkIgVVNCIERyaXZlciBzdHVmZiAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIG1lZ2Fza3lfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkaWdpdm94X21pbmlfaWlfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyB0dndhbGtlcnR3aW5fcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkcG9zaF9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHBpbm5hY2xlX3BjdHYzMTBlX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgbTkyMHhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC02NTIsNiArNzM1LDEzIEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAKKwkJcmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmcGlubmFjbGVfcGN0djMxMGVfcHJvcGVydGllcywKKwkJCQkJICBUSElTX01PRFVMRSwgJmQsIGFkYXB0ZXJfbnIpOworCQlpZiAocmV0ID09IDApIHsKKwkJCXJjX2luaXRfc2VxID0gcGlubmFjbGUzMTBlX2luaXQ7CisJCQlnb3RvIGZvdW5kOworCQl9CisKIAkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewogCQkvKiBBbm90aGVyIGludGVyZmFjZSBvbiBhIG11bHRpLXR1bmVyIGRldmljZSAqLwpAQCAtNjgyLDYgKzc3Miw3IEBACiAJCQkgICAgIFVTQl9QSURfTElGRVZJRVdfVFZfV0FMS0VSX1RXSU5fV0FSTSkgfSwKIAkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFBPU0gsIFVTQl9QSURfRFBPU0hfTTkyMDZfQ09MRCkgfSwKIAkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFBPU0gsIFVTQl9QSURfRFBPU0hfTTkyMDZfV0FSTSkgfSwKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfVklTSU9OUExVUywgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWMzEwRSkgfSwKIAkJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbTkyMHhfdGFibGUpOwpAQCAtODk1LDYgKzk4Niw1NiBAQAogCSB9CiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgcGlubmFjbGVfcGN0djMxMGVfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCisJLmRvd25sb2FkX2Zpcm13YXJlID0gTlVMTCwKKworCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCS5yY19rZXlfbWFwICAgICAgID0gcGlubmFjbGUzMTBlX3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKHBpbm5hY2xlMzEwZV9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgICA9IG05MjB4X3JjX3F1ZXJ5LAorCisJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IG05MjB4X3N0YXRlKSwKKworCS5pZGVudGlmeV9zdGF0ZSAgID0gbTkyMHhfaWRlbnRpZnlfc3RhdGUsCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7eworCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8CisJCQlEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKworCQkucGlkX2ZpbHRlcl9jb3VudCA9IDgsCisJCS5waWRfZmlsdGVyICAgICAgID0gbTkyMHhfcGlkX2ZpbHRlciwKKwkJLnBpZF9maWx0ZXJfY3RybCAgPSBtOTIweF9waWRfZmlsdGVyX2N0cmwsCisKKwkJLmZyb250ZW5kX2F0dGFjaCAgPSBtOTIweF9tdDM1Ml9mcm9udGVuZF9hdHRhY2gsCisJCS50dW5lcl9hdHRhY2ggICAgID0gbTkyMHhfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaCwKKworCQkuc3RyZWFtID0geworCQkJLnR5cGUgPSBVU0JfSVNPQywKKwkJCS5jb3VudCA9IDUsCisJCQkuZW5kcG9pbnQgPSAweDg0LAorCQkJLnUgPSB7CisJCQkJLmlzb2MgPSB7CisJCQkJCS5mcmFtZXNwZXJ1cmIgPSAxMjgsCisJCQkJCS5mcmFtZXNpemUgPSA1NjQsCisJCQkJCS5pbnRlcnZhbCA9IDEsCisJCQkJfQorCQkJfQorCQl9LAorCX0gfSwKKwkuaTJjX2FsZ28gICAgICAgICA9ICZtOTIweF9pMmNfYWxnbywKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeyAgICJQaW5uYWNsZSBQQ1RWIDMxMGUiLAorCQkJeyAmbTkyMHhfdGFibGVbNl0sIE5VTEwgfSwKKwkJCXsgTlVMTCB9LAorCQl9CisJfQorfTsKKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG05MjB4X2RyaXZlciA9IHsKIAkubmFtZQkJPSAiZHZiX3VzYl9tOTIweCIsCiAJLnByb2JlCQk9IG05MjB4X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oCmluZGV4IDM3NTMyODkuLjNjMDYxNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmgKQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgTTkyMDZfRlcJMHgzMAogCiAjZGVmaW5lIE05MjA2X01BWF9GSUxURVJTIDgKLSNkZWZpbmUgTTkyMDZfTUFYX0FEQVBURVJTIDIKKyNkZWZpbmUgTTkyMDZfTUFYX0FEQVBURVJTIDQKIAogLyoKIHNlcXVlbmNlcyBmb3VuZCBpbiBsb2dzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKaW5kZXggZDRlMjMwOS4uODMwNTU3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJCQkJCShtc2dbaV0uYWRkcjw8MSl8KG1zZ1tpXS5mbGFncyZJMkNfTV9SRD8weDAxOjApLAogCQkJCQltc2dbaV0uYnVmLAogCQkJCQltc2dbaV0ubGVuCi0JCQkJCSkhPSBtc2dbaV0ubGVuKSkgeworCQkJCQkpKSAhPSBtc2dbaV0ubGVuKSB7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoZHZiX3VzYl9vcGVyYTFfZGVidWcgJiAweDEwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di0xMzk0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYwppbmRleCA3YzU0NTljMi4uYzNlMGVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di0xMzk0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di0xMzk0LmMKQEAgLTkwLDEzICs5MCwxNCBAQAogCXJldHVybiBjb250YWluZXJfb2YoZmR0di0+ZGV2aWNlLCBzdHJ1Y3QgdW5pdF9kaXJlY3RvcnksIGRldmljZSktPm5lOwogfQogCi1zdGF0aWMgaW50IG5vZGVfbG9jayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIF9fYmUzMiBkYXRhW10pCitzdGF0aWMgaW50IG5vZGVfbG9jayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEpCiB7CisJcXVhZGxldF90ICpkID0gZGF0YTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gaHBzYl9ub2RlX2xvY2sobm9kZV9vZihmZHR2KSwgYWRkciwgRVhUQ09ERV9DT01QQVJFX1NXQVAsCi0JCShfX2ZvcmNlIHF1YWRsZXRfdCAqKSZkYXRhWzFdLCAoX19mb3JjZSBxdWFkbGV0X3QpZGF0YVswXSk7Ci0JZGF0YVswXSA9IGRhdGFbMV07CisJcmV0ID0gaHBzYl9ub2RlX2xvY2sobm9kZV9vZihmZHR2KSwgYWRkciwKKwkJCSAgICAgRVhUQ09ERV9DT01QQVJFX1NXQVAsICZkWzFdLCBkWzBdKTsKKwlkWzBdID0gZFsxXTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xOTIsOSArMTkzLDEzIEBACiAJaW50IGt2X2xlbiwgZXJyOwogCXZvaWQgKmt2X3N0cjsKIAotCWt2X2xlbiA9ICh1ZC0+bW9kZWxfbmFtZV9rdi0+dmFsdWUubGVhZi5sZW4gLSAyKSAqIHNpemVvZihxdWFkbGV0X3QpOwotCWt2X3N0ciA9IENTUjEyMTJfVEVYVFVBTF9ERVNDUklQVE9SX0xFQUZfREFUQSh1ZC0+bW9kZWxfbmFtZV9rdik7Ci0KKwlpZiAodWQtPm1vZGVsX25hbWVfa3YpIHsKKwkJa3ZfbGVuID0gKHVkLT5tb2RlbF9uYW1lX2t2LT52YWx1ZS5sZWFmLmxlbiAtIDIpICogNDsKKwkJa3Zfc3RyID0gQ1NSMTIxMl9URVhUVUFMX0RFU0NSSVBUT1JfTEVBRl9EQVRBKHVkLT5tb2RlbF9uYW1lX2t2KTsKKwl9IGVsc2UgeworCQlrdl9sZW4gPSAwOworCQlrdl9zdHIgPSBOVUxMOworCX0KIAlmZHR2ID0gZmR0dl9hbGxvYyhkZXYsICZmZHR2XzEzOTRfYmFja2VuZCwga3Zfc3RyLCBrdl9sZW4pOwogCWlmICghZmR0dikKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwppbmRleCA1MGM0MmE0Li4xYjMxYmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKQEAgLTc0LDcgKzc0LDYgQEAKICNkZWZpbmUgRU41MDIyMV9UQUdfQ0FfSU5GTwkJMHg5ZjgwMzEKIAogc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lIHsKLQlpbnQgbGVuZ3RoOwogCXU4IGN0eXBlOwogCXU4IHN1YnVuaXQ7CiAJdTggb3Bjb2RlOwpAQCAtODIsMTMgKzgxLDI3IEBACiB9OwogCiBzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lIHsKLQlpbnQgbGVuZ3RoOwogCXU4IHJlc3BvbnNlOwogCXU4IHN1YnVuaXQ7CiAJdTggb3Bjb2RlOwogCXU4IG9wZXJhbmRbNTA5XTsKIH07CiAKKyNkZWZpbmUgTEFTVF9PUEVSQU5EICg1MDkgLSAxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfb3BlcmFuZHMoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjLCBpbnQgZnJvbSwgaW50IHRvKQoreworCW1lbXNldCgmYy0+b3BlcmFuZFtmcm9tXSwgMCwgdG8gLSBmcm9tICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhZF9vcGVyYW5kcyhzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMsIGludCBmcm9tKQoreworCWludCB0byA9IEFMSUdOKGZyb20sIDQpOworCisJaWYgKGZyb20gPD0gdG8gJiYgdG8gPD0gTEFTVF9PUEVSQU5EKQorCQljbGVhcl9vcGVyYW5kcyhjLCBmcm9tLCB0byk7Cit9CisKICNkZWZpbmUgQVZDX0RFQlVHX1JFQURfREVTQ1JJUFRPUiAgICAgICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIEFWQ19ERUJVR19EU0lUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgogI2RlZmluZSBBVkNfREVCVUdfRFNEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKQEAgLTIwMiw3OCArMjE1LDY1IEBACiAJCSAgICAgICAxNiwgMSwgbXNnLCBsZW5ndGgsIGZhbHNlKTsKIH0KIAotc3RhdGljIGludCBfX2F2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJY29uc3Qgc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjLCBzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyKQorc3RhdGljIGludCBhdmNfd3JpdGUoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7CiAJaW50IGVyciwgcmV0cnk7CiAKLQlpZiAocikKLQkJZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gZmFsc2U7CisJZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gZmFsc2U7CiAKIAlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCA2OyByZXRyeSsrKSB7CiAJCWlmICh1bmxpa2VseShhdmNfZGVidWcpKQotCQkJZGVidWdfZmNwKCZjLT5jdHlwZSwgYy0+bGVuZ3RoKTsKKwkJCWRlYnVnX2ZjcChmZHR2LT5hdmNfZGF0YSwgZmR0di0+YXZjX2RhdGFfbGVuZ3RoKTsKIAogCQllcnIgPSBmZHR2LT5iYWNrZW5kLT53cml0ZShmZHR2LCBGQ1BfQ09NTUFORF9SRUdJU1RFUiwKLQkJCQkJICAgKHZvaWQgKikmYy0+Y3R5cGUsIGMtPmxlbmd0aCk7CisJCQkJZmR0di0+YXZjX2RhdGEsIGZkdHYtPmF2Y19kYXRhX2xlbmd0aCk7CiAJCWlmIChlcnIpIHsKLQkJCWZkdHYtPmF2Y19yZXBseV9yZWNlaXZlZCA9IHRydWU7CiAJCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkZDUCBjb21tYW5kIHdyaXRlIGZhaWxlZFxuIik7CisKIAkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlpZiAoIXIpCi0JCQlyZXR1cm4gMDsKLQogCQkvKgogCQkgKiBBVi9DIHNwZWNzIHNheSB0aGF0IGFuc3dlcnMgc2hvdWxkIGJlIHNlbnQgd2l0aGluIDE1MCBtcy4KIAkJICogVGltZSBvdXQgYWZ0ZXIgMjAwIG1zLgogCQkgKi8KIAkJaWYgKHdhaXRfZXZlbnRfdGltZW91dChmZHR2LT5hdmNfd2FpdCwKIAkJCQkgICAgICAgZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkLAotCQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKDIwMCkpICE9IDApIHsKLQkJCXItPmxlbmd0aCA9IGZkdHYtPnJlc3BvbnNlX2xlbmd0aDsKLQkJCW1lbWNweSgmci0+cmVzcG9uc2UsIGZkdHYtPnJlc3BvbnNlLCByLT5sZW5ndGgpOwotCisJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSkgIT0gMCkKIAkJCXJldHVybiAwOwotCQl9CiAJfQogCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiRkNQIHJlc3BvbnNlIHRpbWVkIG91dFxuIik7CisKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KIAotc3RhdGljIGludCBhdmNfd3JpdGUoc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCWNvbnN0IHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYywgc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqcikKK3N0YXRpYyBib29sIGlzX3JlZ2lzdGVyX3JjKHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIpCiB7Ci0JaW50IHJldDsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZkdHYtPmF2Y19tdXRleCkpCi0JCXJldHVybiAtRUlOVFI7Ci0KLQlyZXQgPSBfX2F2Y193cml0ZShmZHR2LCBjLCByKTsKLQotCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiByLT5vcGNvZGUgICAgID09IEFWQ19PUENPREVfVkVORE9SICYmCisJICAgICAgIHItPm9wZXJhbmRbMF0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMCAmJgorCSAgICAgICByLT5vcGVyYW5kWzFdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzEgJiYKKwkgICAgICAgci0+b3BlcmFuZFsyXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yICYmCisJICAgICAgIHItPm9wZXJhbmRbM10gPT0gU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0w7CiB9CiAKIGludCBhdmNfcmVjdihzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0KLQkJCWRhdGEgLSBvZmZzZXRvZihzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lLCByZXNwb25zZSk7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9IGRhdGE7CiAKIAlpZiAodW5saWtlbHkoYXZjX2RlYnVnKSkKIAkJZGVidWdfZmNwKGRhdGEsIGxlbmd0aCk7CiAKLQlpZiAobGVuZ3RoID49IDggJiYKLQkgICAgci0+b3BlcmFuZFswXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wICYmCi0JICAgIHItPm9wZXJhbmRbMV0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMSAmJgotCSAgICByLT5vcGVyYW5kWzJdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzIgJiYKLQkgICAgci0+b3BlcmFuZFszXSA9PSBTRkVfVkVORE9SX09QQ09ERV9SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTCkgewotCQlpZiAoci0+cmVzcG9uc2UgPT0gQVZDX1JFU1BPTlNFX0NIQU5HRUQpIHsKLQkJCWZkdHZfaGFuZGxlX3JjKGZkdHYsCi0JCQkgICAgci0+b3BlcmFuZFs0XSA8PCA4IHwgci0+b3BlcmFuZFs1XSk7CisJaWYgKGxlbmd0aCA+PSA4ICYmIGlzX3JlZ2lzdGVyX3JjKHIpKSB7CisJCXN3aXRjaCAoci0+cmVzcG9uc2UpIHsKKwkJY2FzZSBBVkNfUkVTUE9OU0VfQ0hBTkdFRDoKKwkJCWZkdHZfaGFuZGxlX3JjKGZkdHYsIHItPm9wZXJhbmRbNF0gPDwgOCB8IHItPm9wZXJhbmRbNV0pOwogCQkJc2NoZWR1bGVfd29yaygmZmR0di0+cmVtb3RlX2N0cmxfd29yayk7Ci0JCX0gZWxzZSBpZiAoci0+cmVzcG9uc2UgIT0gQVZDX1JFU1BPTlNFX0lOVEVSSU0pIHsKKwkJCWJyZWFrOworCQljYXNlIEFWQ19SRVNQT05TRV9JTlRFUklNOgorCQkJaWYgKGlzX3JlZ2lzdGVyX3JjKCh2b2lkICopZmR0di0+YXZjX2RhdGEpKQorCQkJCWdvdG8gd2FrZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgogCQkJZGV2X2luZm8oZmR0di0+ZGV2aWNlLAogCQkJCSAicmVtb3RlIGNvbnRyb2wgcmVzdWx0ID0gJWRcbiIsIHItPnJlc3BvbnNlKTsKIAkJfQpAQCAtMjg1LDkgKzI4NSw5IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCW1lbWNweShmZHR2LT5yZXNwb25zZSwgZGF0YSwgbGVuZ3RoKTsKLQlmZHR2LT5yZXNwb25zZV9sZW5ndGggPSBsZW5ndGg7Ci0KKwltZW1jcHkoZmR0di0+YXZjX2RhdGEsIGRhdGEsIGxlbmd0aCk7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gbGVuZ3RoOword2FrZToKIAlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSB0cnVlOwogCXdha2VfdXAoJmZkdHYtPmF2Y193YWl0KTsKIApAQCAtMzE4LDEwICszMTgsMTEgQEAKICAqIHR1bmluZyBjb21tYW5kIGZvciBzZXR0aW5nIHRoZSByZWxhdGl2ZSBMTkIgZnJlcXVlbmN5CiAgKiAobm90IHN1cHBvcnRlZCBieSB0aGUgQVZDIHN0YW5kYXJkKQogICovCi1zdGF0aWMgdm9pZCBhdmNfdHVuZXJfdHVuZXFwc2soc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCi0JCQkgICAgICAgc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjKQorc3RhdGljIGludCBhdmNfdHVuZXJfdHVuZXFwc2soc3RydWN0IGZpcmVkdHYgKmZkdHYsCisJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCiAJYy0+b3Bjb2RlID0gQVZDX09QQ09ERV9WRU5ET1I7CiAKIAljLT5vcGVyYW5kWzBdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMDsKQEAgLTM3MCwxNiArMzcxLDE4IEBACiAJCWMtPm9wZXJhbmRbMTNdID0gMHgxOwogCQljLT5vcGVyYW5kWzE0XSA9IDB4ZmY7CiAJCWMtPm9wZXJhbmRbMTVdID0gMHhmZjsKLQkJYy0+bGVuZ3RoID0gMjA7CisKKwkJcmV0dXJuIDE2OwogCX0gZWxzZSB7Ci0JCWMtPmxlbmd0aCA9IDE2OworCQlyZXR1cm4gMTM7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdmNfdHVuZXJfZHNkX2R2Yl9jKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAotCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAotCQkJCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYykKK3N0YXRpYyBpbnQgYXZjX3R1bmVyX2RzZF9kdmJfYyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCiAJYy0+b3Bjb2RlID0gQVZDX09QQ09ERV9EU0Q7CiAKIAljLT5vcGVyYW5kWzBdID0gMDsgICAgLyogc291cmNlIHBsdWcgKi8KQEAgLTQ0MCwxNSArNDQzLDE0IEBACiAJYy0+b3BlcmFuZFsyMF0gPSAweDAwOwogCWMtPm9wZXJhbmRbMjFdID0gMHgwMDsKIAotCS8qIEFkZCBQSURzIHRvIGZpbHRlciAqLwotCWMtPmxlbmd0aCA9IEFMSUdOKDIyICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMjJdKSArIDMsIDQpOworCXJldHVybiAyMiArIGFkZF9waWRfZmlsdGVyKGZkdHYsICZjLT5vcGVyYW5kWzIyXSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF2Y190dW5lcl9kc2RfZHZiX3Qoc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCi0JCQkJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjKQorc3RhdGljIGludCBhdmNfdHVuZXJfZHNkX2R2Yl90KHN0cnVjdCBmaXJlZHR2ICpmZHR2LAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpvZmRtID0gJnBhcmFtcy0+dS5vZmRtOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CiAKIAljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX0RTRDsKIApAQCAtNTQzLDU1ICs1NDUsNTggQEAKIAljLT5vcGVyYW5kWzE1XSA9IDB4MDA7IC8qIG5ldHdvcmtfSURbMF0gKi8KIAljLT5vcGVyYW5kWzE2XSA9IDB4MDA7IC8qIG5ldHdvcmtfSURbMV0gKi8KIAotCS8qIEFkZCBQSURzIHRvIGZpbHRlciAqLwotCWMtPmxlbmd0aCA9IEFMSUdOKDE3ICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMTddKSArIDMsIDQpOworCXJldHVybiAxNyArIGFkZF9waWRfZmlsdGVyKGZkdHYsICZjLT5vcGVyYW5kWzE3XSk7CiB9CiAKIGludCBhdmNfdHVuZXJfZHNkKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAogCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKIAogCXN3aXRjaCAoZmR0di0+dHlwZSkgewogCWNhc2UgRklSRURUVl9EVkJfUzoKLQljYXNlIEZJUkVEVFZfRFZCX1MyOiBhdmNfdHVuZXJfdHVuZXFwc2soZmR0diwgcGFyYW1zLCBjKTsgYnJlYWs7Ci0JY2FzZSBGSVJFRFRWX0RWQl9DOiBhdmNfdHVuZXJfZHNkX2R2Yl9jKGZkdHYsIHBhcmFtcywgYyk7IGJyZWFrOwotCWNhc2UgRklSRURUVl9EVkJfVDogYXZjX3R1bmVyX2RzZF9kdmJfdChmZHR2LCBwYXJhbXMsIGMpOyBicmVhazsKKwljYXNlIEZJUkVEVFZfRFZCX1MyOiBwb3MgPSBhdmNfdHVuZXJfdHVuZXFwc2soZmR0diwgcGFyYW1zKTsgYnJlYWs7CisJY2FzZSBGSVJFRFRWX0RWQl9DOiBwb3MgPSBhdmNfdHVuZXJfZHNkX2R2Yl9jKGZkdHYsIHBhcmFtcyk7IGJyZWFrOworCWNhc2UgRklSRURUVl9EVkJfVDogcG9zID0gYXZjX3R1bmVyX2RzZF9kdmJfdChmZHR2LCBwYXJhbXMpOyBicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CisJcGFkX29wZXJhbmRzKGMsIHBvcyk7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQltc2xlZXAoNTAwKTsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBBTElHTigzICsgcG9zLCA0KTsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAjaWYgMAotCS8qIEZJWE1FOiAqLwotCS8qIHU4ICpzdGF0dXMgd2FzIGFuIG91dC1wYXJhbWV0ZXIgb2YgYXZjX3R1bmVyX2RzZCwgdW51c2VkIGJ5IGNhbGxlciAqLworCS8qCisJICogRklYTUU6CisJICogdTggKnN0YXR1cyB3YXMgYW4gb3V0LXBhcmFtZXRlciBvZiBhdmNfdHVuZXJfZHNkLCB1bnVzZWQgYnkgY2FsbGVyLgorCSAqIENoZWNrIGZvciBBVkNfUkVTUE9OU0VfQUNDRVBURUQgaGVyZSBpbnN0ZWFkPworCSAqLwogCWlmIChzdGF0dXMpCiAJCSpzdGF0dXMgPSByLT5vcGVyYW5kWzJdOwogI2VuZGlmCi0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQltc2xlZXAoNTAwKTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfdHVuZXJfc2V0X3BpZHMoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHVuc2lnbmVkIGNoYXIgcGlkYywgdTE2IHBpZFtdKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KLQlpbnQgcG9zLCBrOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldCwgcG9zLCBrOwogCiAJaWYgKHBpZGMgPiAxNiAmJiBwaWRjICE9IDB4ZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNjE0LDI0ICs2MTksMjcgQEAKIAkJCWMtPm9wZXJhbmRbcG9zKytdID0gMHgwMDsgLyogdGFibGVJRCAqLwogCQkJYy0+b3BlcmFuZFtwb3MrK10gPSAweDAwOyAvKiBmaWx0ZXJfbGVuZ3RoICovCiAJCX0KKwlwYWRfb3BlcmFuZHMoYywgcG9zKTsKIAotCWMtPmxlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCW1zbGVlcCg1MCk7Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQltc2xlZXAoNTApOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y190dW5lcl9nZXRfdHMoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLwotCWludCBzbDsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQsIHNsOwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNjQ2LDI2ICs2NTQsMzMgQEAKIAljLT5vcGVyYW5kWzRdID0gMHgwMDsJLyogYW50ZW5uYSBudW1iZXIgKi8KIAljLT5vcGVyYW5kWzVdID0gMHgwOyAJLyogc3lzdGVtX3NwZWNpZmljX3NlYXJjaF9mbGFncyAqLwogCWMtPm9wZXJhbmRbNl0gPSBzbDsJLyogc3lzdGVtX3NwZWNpZmljX211bHRpcGxleCBzZWxlY3Rpb25fbGVuZ3RoICovCi0JYy0+b3BlcmFuZFs3XSA9IDB4MDA7CS8qIHZhbGlkX2ZsYWdzIFswXSAqLwotCWMtPm9wZXJhbmRbOF0gPSAweDAwOwkvKiB2YWxpZF9mbGFncyBbMV0gKi8KLQljLT5vcGVyYW5kWzcgKyBzbF0gPSAweDAwOyAvKiBucl9vZl9kc2l0X3NlbF9zcGVjcyAoYWx3YXlzIDApICovCisJLyoKKwkgKiBvcGVyYW5kWzddOiB2YWxpZF9mbGFnc1swXQorCSAqIG9wZXJhbmRbOF06IHZhbGlkX2ZsYWdzWzFdCisJICogb3BlcmFuZFs3ICsgc2xdOiBucl9vZl9kc2l0X3NlbF9zcGVjcyAoYWx3YXlzIDApCisJICovCisJY2xlYXJfb3BlcmFuZHMoYywgNywgMjQpOwogCi0JYy0+bGVuZ3RoID0gZmR0di0+dHlwZSA9PSBGSVJFRFRWX0RWQl9UID8gMjQgOiAyODsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBmZHR2LT50eXBlID09IEZJUkVEVFZfRFZCX1QgPyAyNCA6IDI4OworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCW1zbGVlcCgyNTApOwotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCWlmIChyZXQgPT0gMCkKKwkJbXNsZWVwKDI1MCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2lkZW50aWZ5X3N1YnVuaXQoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC02NzgsMzEgKzY5MywzNCBAQAogCWMtPm9wZXJhbmRbNF0gPSAweDA4OyAvKiBsZW5ndGggbG93Ynl0ZSAgKi8KIAljLT5vcGVyYW5kWzVdID0gMHgwMDsgLyogb2Zmc2V0IGhpZ2hieXRlICovCiAJYy0+b3BlcmFuZFs2XSA9IDB4MGQ7IC8qIG9mZnNldCBsb3dieXRlICAqLworCWNsZWFyX29wZXJhbmRzKGMsIDcsIDgpOyAvKiBwYWRkaW5nICovCiAKLQljLT5sZW5ndGggPSAxMjsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfU1RBQkxFICYmCiAJICAgICByLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHx8CiAJICAgIChyLT5vcGVyYW5kWzNdIDw8IDgpICsgci0+b3BlcmFuZFs0XSAhPSA4KSB7CiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiY2Fubm90IHJlYWQgc3VidW5pdCBpZGVudGlmaWVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CiAJfQotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKICNkZWZpbmUgU0laRU9GX0FOVEVOTkFfSU5QVVRfSU5GTyAyMgogCiBpbnQgYXZjX3R1bmVyX3N0YXR1cyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgc3RydWN0IGZpcmVkdHZfdHVuZXJfc3RhdHVzICpzdGF0KQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7Ci0JaW50IGxlbmd0aDsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBsZW5ndGgsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTcxMCwyNyArNzI4LDMwIEBACiAKIAljLT5vcGVyYW5kWzBdID0gREVTQ1JJUFRPUl9UVU5FUl9TVEFUVVM7CiAJYy0+b3BlcmFuZFsxXSA9IDB4ZmY7CS8qIHJlYWRfcmVzdWx0X3N0YXR1cyAqLwotCWMtPm9wZXJhbmRbMl0gPSAweDAwOwkvKiByZXNlcnZlZCAqLwotCWMtPm9wZXJhbmRbM10gPSAwOwkvKiBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPID4+IDg7ICovCi0JYy0+b3BlcmFuZFs0XSA9IDA7CS8qIFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gJiAweGZmOyAqLwotCWMtPm9wZXJhbmRbNV0gPSAweDAwOwotCWMtPm9wZXJhbmRbNl0gPSAweDAwOworCS8qCisJICogb3BlcmFuZFsyXTogcmVzZXJ2ZWQKKwkgKiBvcGVyYW5kWzNdOiBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPID4+IDgKKwkgKiBvcGVyYW5kWzRdOiBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPICYgMHhmZgorCSAqLworCWNsZWFyX29wZXJhbmRzKGMsIDIsIDMxKTsKIAotCWMtPmxlbmd0aCA9IDEyOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoci0+cmVzcG9uc2UgIT0gQVZDX1JFU1BPTlNFX1NUQUJMRSAmJgogCSAgICByLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJjYW5ub3QgcmVhZCB0dW5lciBzdGF0dXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJbGVuZ3RoID0gci0+b3BlcmFuZFs5XTsKIAlpZiAoci0+b3BlcmFuZFsxXSAhPSAweDEwIHx8IGxlbmd0aCAhPSBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPKSB7CiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiZ290IGludmFsaWQgdHVuZXIgc3RhdHVzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCXN0YXQtPmFjdGl2ZV9zeXN0ZW0JCT0gci0+b3BlcmFuZFsxMF07CkBAIC03NjYsMjAgKzc4NywyMSBAQAogCXN0YXQtPmNhX2R2Yl9mbGFnCQk9IHItPm9wZXJhbmRbMzFdID4+IDMgJiAxOwogCXN0YXQtPmNhX2Vycm9yX2ZsYWcJCT0gci0+b3BlcmFuZFszMV0gPj4gMiAmIDE7CiAJc3RhdC0+Y2FfaW5pdGlhbGl6YXRpb25fc3RhdHVzCT0gci0+b3BlcmFuZFszMV0gPj4gMSAmIDE7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19sbmJfY29udHJvbChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciB2b2x0YWdlLCBjaGFyIGJ1cnN0LAogCQkgICAgY2hhciBjb250dG9uZSwgY2hhciBucmRpc2VxLAogCQkgICAgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqZGlzZXFjbWQpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKLQlpbnQgaSwgaiwgazsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIGosIGssIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTc4OSw0MSArODExLDQxIEBACiAJYy0+b3BlcmFuZFsxXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzE7CiAJYy0+b3BlcmFuZFsyXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzI7CiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0xOQl9DT05UUk9MOwotCiAJYy0+b3BlcmFuZFs0XSA9IHZvbHRhZ2U7CiAJYy0+b3BlcmFuZFs1XSA9IG5yZGlzZXE7CiAKLQlpID0gNjsKLQorCXBvcyA9IDY7CiAJZm9yIChqID0gMDsgaiA8IG5yZGlzZXE7IGorKykgewotCQljLT5vcGVyYW5kW2krK10gPSBkaXNlcWNtZFtqXS5tc2dfbGVuOworCQljLT5vcGVyYW5kW3BvcysrXSA9IGRpc2VxY21kW2pdLm1zZ19sZW47CiAKIAkJZm9yIChrID0gMDsgayA8IGRpc2VxY21kW2pdLm1zZ19sZW47IGsrKykKLQkJCWMtPm9wZXJhbmRbaSsrXSA9IGRpc2VxY21kW2pdLm1zZ1trXTsKKwkJCWMtPm9wZXJhbmRbcG9zKytdID0gZGlzZXFjbWRbal0ubXNnW2tdOwogCX0KKwljLT5vcGVyYW5kW3BvcysrXSA9IGJ1cnN0OworCWMtPm9wZXJhbmRbcG9zKytdID0gY29udHRvbmU7CisJcGFkX29wZXJhbmRzKGMsIHBvcyk7CiAKLQljLT5vcGVyYW5kW2krK10gPSBidXJzdDsKLQljLT5vcGVyYW5kW2krK10gPSBjb250dG9uZTsKLQotCWMtPmxlbmd0aCA9IEFMSUdOKDMgKyBpLCA0KTsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBBTElHTigzICsgcG9zLCA0KTsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgewogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkxOQiBjb250cm9sIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOwogCX0KK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX3JlZ2lzdGVyX3JlbW90ZV9jb250cm9sKHN0cnVjdCBmaXJlZHR2ICpmZHR2KQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfTk9USUZZOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1VOSVQgfCA3OwpAQCAtODMzLDEwICs4NTUsMTYgQEAKIAljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKIAljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0w7CisJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHBhZGRpbmcgKi8KIAotCWMtPmxlbmd0aCA9IDg7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gODsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAKLQlyZXR1cm4gYXZjX3dyaXRlKGZkdHYsIGMsIE5VTEwpOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLworCisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBhdmNfcmVtb3RlX2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC04NTEsMTEgKzg3OSwxMCBAQAogI2lmIDAgLyogRklYTUU6IHVudXNlZCAqLwogaW50IGF2Y190dW5lcl9ob3N0MmNhKHN0cnVjdCBmaXJlZHR2ICpmZHR2KQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC04NjcsMTUgKzg5NCwxNiBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX0FQUExJQ0FUSU9OX0lORk87IC8qIGNhIHRhZyAqLwotCWMtPm9wZXJhbmRbNl0gPSAwOyAvKiBtb3JlL2xhc3QgKi8KLQljLT5vcGVyYW5kWzddID0gMDsgLyogbGVuZ3RoICovCisJY2xlYXJfb3BlcmFuZHMoYywgNiwgOCk7CiAKLQljLT5sZW5ndGggPSAxMjsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGU/ICovCiAKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmCiAKQEAgLTkwNiwxMiArOTM0LDExIEBACiAKIGludCBhdmNfY2FfYXBwX2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgKmFwcF9pbmZvLCB1bnNpZ25lZCBpbnQgKmxlbikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOwotCWludCBwb3M7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcG9zLCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfU1RBVFVTOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTkyMywxMSArOTUwLDEyIEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0NBMkhPU1Q7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfQVBQTElDQVRJT05fSU5GTzsgLyogY2EgdGFnICovCisJY2xlYXJfb3BlcmFuZHMoYywgNiwgTEFTVF9PUEVSQU5EKTsKIAotCWMtPmxlbmd0aCA9IDEyOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZSBhbmQgdmFsaWRhdGUgcmVzcG9uc2UgZGF0YSAqLwogCkBAIC05MzksMTggKzk2NywxOSBAQAogCWFwcF9pbmZvWzRdID0gMHgwMTsKIAltZW1jcHkoJmFwcF9pbmZvWzVdLCAmci0+b3BlcmFuZFtwb3NdLCA1ICsgci0+b3BlcmFuZFtwb3MgKyA0XSk7CiAJKmxlbiA9IGFwcF9pbmZvWzNdICsgNDsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgKmFwcF9pbmZvLCB1bnNpZ25lZCBpbnQgKmxlbikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOwotCWludCBwb3M7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcG9zLCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfU1RBVFVTOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTk2MiwxMSArOTkxLDE0IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0NBMkhPU1Q7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfQVBQTElDQVRJT05fSU5GTzsgLyogY2EgdGFnICovCisJY2xlYXJfb3BlcmFuZHMoYywgNiwgTEFTVF9PUEVSQU5EKTsKIAotCWMtPmxlbmd0aCA9IDEyOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KIAogCXBvcyA9IGdldF9jYV9vYmplY3RfcG9zKHIpOwogCWFwcF9pbmZvWzBdID0gKEVONTAyMjFfVEFHX0NBX0lORk8gPj4gMTYpICYgMHhmZjsKQEAgLTk3NiwxNyArMTAwOCwxOCBAQAogCWFwcF9pbmZvWzRdID0gci0+b3BlcmFuZFtwb3MgKyAwXTsKIAlhcHBfaW5mb1s1XSA9IHItPm9wZXJhbmRbcG9zICsgMV07CiAJKmxlbiA9IGFwcF9pbmZvWzNdICsgNDsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX3Jlc2V0KHN0cnVjdCBmaXJlZHR2ICpmZHR2KQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMDAyLDE5ICsxMDM1LDIwIEBACiAJYy0+b3BlcmFuZFs3XSA9IDE7IC8qIGxlbmd0aCAqLwogCWMtPm9wZXJhbmRbOF0gPSAwOyAvKiBmb3JjZSBoYXJkd2FyZSByZXNldCAqLwogCi0JYy0+bGVuZ3RoID0gMTI7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19jYV9wbXQoc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgKm1zZywgaW50IGxlbmd0aCkKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CiAJaW50IGxpc3RfbWFuYWdlbWVudDsKIAlpbnQgcHJvZ3JhbV9pbmZvX2xlbmd0aDsKIAlpbnQgcG10X2NtZF9pZDsKQEAgLTEwMjIsMTEgKzEwNTYsMTIgQEAKIAlpbnQgd3JpdGVfcG9zOwogCWludCBlc19pbmZvX2xlbmd0aDsKIAlpbnQgY3JjMzJfY3N1bTsKKwlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19BUFBMSUNBVElPTl9QTVQpKQogCQlkZWJ1Z19wbXQobXNnLCBsZW5ndGgpOwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTA1OCw3ICsxMDkzLDcgQEAKIAogCWMtPm9wZXJhbmRbMTJdID0gMHgwMjsgLyogVGFibGUgaWQ9MiAqLwogCWMtPm9wZXJhbmRbMTNdID0gMHg4MDsgLyogU2VjdGlvbiBzeW50YXggKyBsZW5ndGggKi8KLQkvKiBjLT5vcGVyYW5kWzE0XSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxMjsgKi8KKwogCWMtPm9wZXJhbmRbMTVdID0gbXNnWzFdOyAvKiBQcm9ncmFtIG51bWJlciAqLwogCWMtPm9wZXJhbmRbMTZdID0gbXNnWzJdOwogCWMtPm9wZXJhbmRbMTddID0gMHgwMTsgLyogVmVyc2lvbiBudW1iZXI9MCArIGN1cnJlbnQvbmV4dD0xICovCkBAIC0xMTA2LDEyICsxMTQxLDcgQEAKIAkJCXdyaXRlX3BvcyArPSBlc19pbmZvX2xlbmd0aDsKIAkJfQogCX0KLQotCS8qIENSQyAqLwotCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKLQljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7Ci0JYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwotCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKKwl3cml0ZV9wb3MgKz0gNDsgLyogQ1JDICovCiAKIAljLT5vcGVyYW5kWzddID0gMHg4MjsKIAljLT5vcGVyYW5kWzhdID0gKHdyaXRlX3BvcyAtIDEwKSA+PiA4OwpAQCAtMTEyMywyOCArMTE1MywzMSBAQAogCWMtPm9wZXJhbmRbd3JpdGVfcG9zIC0gM10gPSAoY3JjMzJfY3N1bSA+PiAxNikgJiAweGZmOwogCWMtPm9wZXJhbmRbd3JpdGVfcG9zIC0gMl0gPSAoY3JjMzJfY3N1bSA+PiAgOCkgJiAweGZmOwogCWMtPm9wZXJhbmRbd3JpdGVfcG9zIC0gMV0gPSAoY3JjMzJfY3N1bSA+PiAgMCkgJiAweGZmOworCXBhZF9vcGVyYW5kcyhjLCB3cml0ZV9wb3MpOwogCi0JYy0+bGVuZ3RoID0gQUxJR04oMyArIHdyaXRlX3BvcywgNCk7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gQUxJR04oMyArIHdyaXRlX3BvcywgNCk7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsCiAJCQkiQ0EgUE1UIGZhaWxlZCB3aXRoIHJlc3BvbnNlIDB4JXhcbiIsIHItPnJlc3BvbnNlKTsKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IC1FRkFVTFQ7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfZ2V0X3RpbWVfZGF0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgaW50ICppbnRlcnZhbCkKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTE1NiwyOCArMTE4OSwyOCBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX0RBVEVfVElNRTsgLyogY2EgdGFnICovCi0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlIGFuZCB2YWxpZGF0ZSByZXNwb25zZSBkYXRhICovCiAKIAkqaW50ZXJ2YWwgPSByLT5vcGVyYW5kW2dldF9jYV9vYmplY3RfcG9zKHIpXTsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX2VudGVyX21lbnUoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTE4OSwyNCArMTIyMiwyNSBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX0VOVEVSX01FTlU7Ci0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCA4KTsKIAotCWMtPmxlbmd0aCA9IDEyOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfZ2V0X21taShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqbW1pX29iamVjdCwgdW5zaWduZWQgaW50ICpsZW4pCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfU1RBVFVTOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTEyMTgsMjAgKzEyNTIsMjEgQEAKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9NTUk7Ci0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlIGFuZCB2YWxpZGF0ZSByZXNwb25zZSBkYXRhICovCiAKIAkqbGVuID0gZ2V0X2NhX29iamVjdF9sZW5ndGgocik7CiAJbWVtY3B5KG1taV9vYmplY3QsICZyLT5vcGVyYW5kW2dldF9jYV9vYmplY3RfcG9zKHIpXSwgKmxlbik7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBDTVBfT1VUUFVUX1BMVUdfQ09OVFJPTF9SRUdfMAkweGZmZmZmMDAwMDkwNFVMTApAQCAtMTI0MCwxNCArMTI3NSwxNCBAQAogewogCWludCByZXQ7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmZHR2LT5hdmNfbXV0ZXgpKQotCQlyZXR1cm4gLUVJTlRSOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAlyZXQgPSBmZHR2LT5iYWNrZW5kLT5yZWFkKGZkdHYsIGFkZHIsIGRhdGEpOwogCWlmIChyZXQgPCAwKQogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkNNUDogcmVhZCBJL08gZXJyb3JcbiIpOwogCiAJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTI1NSwxNCArMTI5MCwxOSBAQAogewogCWludCByZXQ7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmZHR2LT5hdmNfbXV0ZXgpKQotCQlyZXR1cm4gLUVJTlRSOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXQgPSBmZHR2LT5iYWNrZW5kLT5sb2NrKGZkdHYsIGFkZHIsIGRhdGEpOworCS8qIGRhdGFbXSBpcyBzdGFjay1hbGxvY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgRE1BLW1hcHBlZC4gKi8KKwltZW1jcHkoZmR0di0+YXZjX2RhdGEsIGRhdGEsIDgpOworCisJcmV0ID0gZmR0di0+YmFja2VuZC0+bG9jayhmZHR2LCBhZGRyLCBmZHR2LT5hdmNfZGF0YSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiQ01QOiBsb2NrIEkvTyBlcnJvclxuIik7CisJZWxzZQorCQltZW1jcHkoZGF0YSwgZmR0di0+YXZjX2RhdGEsIDgpOwogCiAJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZHZiLmMKaW5kZXggZmM5OTk2Yy4uMDc5ZThjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jCkBAIC0yNzcsNyArMjc3LDYgQEAKIAogCW11dGV4X2luaXQoJmZkdHYtPmF2Y19tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZmR0di0+YXZjX3dhaXQpOwotCWZkdHYtPmF2Y19yZXBseV9yZWNlaXZlZCA9IHRydWU7CiAJbXV0ZXhfaW5pdCgmZmR0di0+ZGVtdXhfbXV0ZXgpOwogCUlOSVRfV09SSygmZmR0di0+cmVtb3RlX2N0cmxfd29yaywgYXZjX3JlbW90ZV9jdHJsX3dvcmspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKaW5kZXggNjIyM2JmMC4uN2EzZGUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYwpAQCAtNDEsNyArNDEsNyBAQAogCXJldHVybiByY29kZSAhPSBSQ09ERV9DT01QTEVURSA/IC1FSU8gOiAwOwogfQogCi1zdGF0aWMgaW50IG5vZGVfbG9jayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIF9fYmUzMiBkYXRhW10pCitzdGF0aWMgaW50IG5vZGVfbG9jayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIG5vZGVfcmVxKGZkdHYsIGFkZHIsIGRhdGEsIDgsIFRDT0RFX0xPQ0tfQ09NUEFSRV9TV0FQKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaAppbmRleCAzNTA4MGRiLi43OGNjMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di5oCkBAIC03Myw3ICs3Myw3IEBACiBzdHJ1Y3QgZmlyZWR0djsKIAogc3RydWN0IGZpcmVkdHZfYmFja2VuZCB7Ci0JaW50ICgqbG9jaykoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCBfX2JlMzIgZGF0YVtdKTsKKwlpbnQgKCpsb2NrKShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEpOwogCWludCAoKnJlYWQpKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSk7CiAJaW50ICgqd3JpdGUpKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiAJaW50ICgqc3RhcnRfaXNvKShzdHJ1Y3QgZmlyZWR0diAqZmR0dik7CkBAIC0xMTQsOCArMTE0LDggQEAKIAl1bnNpZ25lZCBsb25nCQljaGFubmVsX2FjdGl2ZTsKIAl1MTYJCQljaGFubmVsX3BpZFsxNl07CiAKLQlzaXplX3QJCQlyZXNwb25zZV9sZW5ndGg7Ci0JdTgJCQlyZXNwb25zZVs1MTJdOworCWludAkJCWF2Y19kYXRhX2xlbmd0aDsKKwl1OAkJCWF2Y19kYXRhWzUxMl07CiB9OwogCiAvKiBmaXJlZHR2LTEzOTQuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oCmluZGV4IDI4YjkwYzkuLmU5MGZhOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAlBRjkwMTNfVFVORVJfTVQyMDYwXzIgICA9IDE0NywgLyogTWljcm90dW5lICovCiAJQUY5MDEzX1RVTkVSX1REQTE4MjcxICAgPSAxNTYsIC8qIE5YUCAqLwogCUFGOTAxM19UVU5FUl9RVDEwMTBBICAgID0gMTYyLCAvKiBRdWFudGVrICovCisJQUY5MDEzX1RVTkVSX1REQTE4MjE4ICAgPSAxNzksIC8qIE5YUCAqLwogfTsKIAogLyogQUY5MDEzLzUgR1BJT3MgKG1vc3RseSBndWVzc2VkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F0Ym04ODMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYwppbmRleCA1OTg4MWE1Li40M2FhYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYwpAQCAtMTcwLDYgKzE3MCwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNldF9hZ2NfY29uZmlnKHN0cnVjdCBhdGJtX3N0YXRlICpwcml2LAorCXU4IG1pbiwgdTggbWF4LCB1OCBob2xkX2xvb3ApCit7CisJLyogbm8gZWZmZWN0IGlmIGJvdGggbWluIGFuZCBtYXggYXJlIHplcm8gKi8KKwlpZiAoIW1pbiAmJiAhbWF4KQorCSAgICByZXR1cm4gMDsKKworCWF0Ym04ODMwX3dyaXRlX3JlZyhwcml2LCBSRUdfQUdDX01JTiwgbWluKTsKKwlhdGJtODgzMF93cml0ZV9yZWcocHJpdiwgUkVHX0FHQ19NQVgsIG1heCk7CisJYXRibTg4MzBfd3JpdGVfcmVnKHByaXYsIFJFR19BR0NfSE9MRF9MT09QLCBob2xkX2xvb3ApOworCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgc2V0X3N0YXRpY19jaGFubmVsX21vZGUoc3RydWN0IGF0Ym1fc3RhdGUgKnByaXYpCiB7CkBAIC0yMjcsNiArMjQwLDkgQEAKIAkvKlNldCBJRiBmcmVxdWVuY3kqLwogCXNldF9pZl9mcmVxKHByaXYsIGNmZy0+aWZfZnJlcSk7CiAKKwkvKlNldCBBR0MgQ29uZmlnKi8KKwlzZXRfYWdjX2NvbmZpZyhwcml2LCBjZmctPmFnY19taW4sIGNmZy0+YWdjX21heCwKKwkJY2ZnLT5hZ2NfaG9sZF9sb29wKTsKIAogCS8qU2V0IHN0YXRpYyBjaGFubmVsIG1vZGUqLwogCXNldF9zdGF0aWNfY2hhbm5lbF9tb2RlKHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDkwLmMKaW5kZXggNjE0NTUyNy4uN2VhYzE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIHZvaWQgZGliMDA5MF9kY2NfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggZmFzdCkKK3ZvaWQgZGliMDA5MF9kY2NfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggZmFzdCkKIHsKIAlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKIAlpZiAoZmFzdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5jCmluZGV4IDZmNmZhMjkuLjJhYTk3ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYwpAQCAtMTk5OSw2ICsxOTk5LDggQEAKIAlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgdGltZSwgcmV0OwogCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfSVNEQlQ7CisKIAlkaWI4MDAwX3NldF9vdXRwdXRfbW9kZShzdGF0ZSwgT1VUTU9ERV9ISUdIX1opOwogCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCmluZGV4IGU2ZjNkNzMuLjk4MGUwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIEVYUE9SVF9TWU1CT0woZGlieDAwMF9leGl0X2kyY19tYXN0ZXIpOwogCiAKLXUzMiBzeXN0aW1lKCkKK3UzMiBzeXN0aW1lKHZvaWQpCiB7CiAgICAgc3RydWN0IHRpbWVzcGVjIHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sNjQ3ODEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sNjQ3ODEuYwppbmRleCAzMDUxYjY0Li40NDVmYTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbDY0NzgxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2w2NDc4MS5jCkBAIC0xOTIsOCArMTkyLDggQEAKIAlzcGlfYmlhcyAqPSBxYW1fdGFiW3AtPmNvbnN0ZWxsYXRpb25dOwogCXNwaV9iaWFzIC89IHAtPmNvZGVfcmF0ZV9IUCArIDE7CiAJc3BpX2JpYXMgLz0gKGd1YXJkX3RhYltwLT5ndWFyZF9pbnRlcnZhbF0gKyAzMik7Ci0Jc3BpX2JpYXMgKj0gMTAwMFVMTDsKLQlzcGlfYmlhcyAvPSAxMDAwVUxMICsgcHBtLzEwMDA7CisJc3BpX2JpYXMgKj0gMTAwMDsKKwlzcGlfYmlhcyAvPSAxMDAwICsgcHBtLzEwMDA7CiAJc3BpX2JpYXMgKj0gcC0+Y29kZV9yYXRlX0hQOwogCiAJdmFsMHgwNCA9IChwLT50cmFuc21pc3Npb25fbW9kZSA8PCAyKSB8IHAtPmd1YXJkX2ludGVydmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCmluZGV4IGIxODFiZjAuLjEzNDM3MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMKQEAgLTE1OCw3ICsxNTgsOCBAQAogCS8qIG92ZXJyaWRlIGZyb250ZW5kIG9wcyAqLwogCWZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBsbmJwMjFfc2V0X3ZvbHRhZ2U7CiAJZmUtPm9wcy5lbmFibGVfaGlnaF9sbmJfdm9sdGFnZSA9IGxuYnAyMV9lbmFibGVfaGlnaF9sbmJfdm9sdGFnZTsKLQlmZS0+b3BzLnNldF90b25lID0gbG5icDIxX3NldF90b25lOworCWlmICghKG92ZXJyaWRlX2NsZWFyICYgTE5CSDI0X1RFTikpIC8qMjJrSHogbG9naWMgY29udHJvbGxlZCBieSBkZW1vZCovCisJCWZlLT5vcHMuc2V0X3RvbmUgPSBsbmJwMjFfc2V0X3RvbmU7CiAJcHJpbnRrKEtFUk5fSU5GTyAiTE5CeDJ4IGF0dGFjaGVkIG9uIGFkZHI9JXhcbiIsIGxuYnAyMS0+aTJjX2FkZHIpOwogCiAJcmV0dXJuIGZlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jCmluZGV4IDk1NTJhMjIuLmQyMWEzMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMKQEAgLTk3LDggKzk3LDYgQEAKICNkZWZpbmUJTE5CX1NVUFBMWV9DVFJMX1JFR180CQkweGNlCiAjZGVmaW5lCUxOQl9TVVBQTFlfU1RBVFVTX1JFRwkJMHhjZgogCi0jZGVmaW5lIEZBTFNFCTAKLSNkZWZpbmUgVFJVRQkxCiAjZGVmaW5lIEZBSUwJLTEKICNkZWZpbmUgUEFTUwkwCiAKQEAgLTcxOCw3ICs3MTYsNyBAQAogCWludCBmaW5lX3R1bmVfZnJlcTsKIAl1bnNpZ25lZCBjaGFyIHNhbXBsZV9yYXRlID0gMDsKIAkvKiBib29sZWFuICovCi0JdW5zaWduZWQgaW50IGluYmFuZF9pbnRlcmZlcmVyX2luZDsKKwlib29sIGluYmFuZF9pbnRlcmZlcmVyX2luZDsKIAogCS8qIElOVEVSTUVESUFURSBWQUxVRVMgKi8KIAlpbnQgaWNvYXJzZV90dW5lX2ZyZXE7IC8qIE1IeiAqLwpAQCAtNzI4LDE1ICs3MjYsOCBAQAogCXVuc2lnbmVkIGludCB4MTsKIAl1bnNpZ25lZCBpbnQgeDI7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbQUxMT1dBQkxFX0ZTX0NPVU5UXSA9IHsKLQkJCUZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwKLQkJCUZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRQotCX07Ci0JdW5zaWduZWQgaW50IGluYmFuZF9pbnRlcmZlcmVyX2RpdjRbQUxMT1dBQkxFX0ZTX0NPVU5UXSA9IHsKLQkJCUZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwKLQkJCUZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRQotCX07Ci0KKwlib29sIGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbQUxMT1dBQkxFX0ZTX0NPVU5UXTsKKwlib29sIGluYmFuZF9pbnRlcmZlcmVyX2RpdjRbQUxMT1dBQkxFX0ZTX0NPVU5UXTsKIAlpbnQgc3RhdHVzOwogCiAJLyogYWxsb3dhYmxlIHNhbXBsZSByYXRlcyBmb3IgQURDIGluIE1IeiAqLwpAQCAtNzYyLDcgKzc1Myw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKQotCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID0gaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSA9IEZBTFNFOworCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID0gaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSA9IGZhbHNlOwogCiAJaWZfbGltaXRfaGlnaCA9IC03MDAwMDA7CiAJaWZfbGltaXRfbG93ID0gLTEwMDAwMDsKQEAgLTc5OCw3ICs3ODksNyBAQAogCiAJCWlmICgoKGJhbmRfbG93IDwgeDEpICYmICh4MSA8IGJhbmRfaGlnaCkpIHx8CiAJCQkJCSgoYmFuZF9sb3cgPCB4MikgJiYgKHgyIDwgYmFuZF9oaWdoKSkpCi0JCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0gPSBUUlVFOworCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldID0gdHJ1ZTsKIAogCX0KIApAQCAtODExLDI1ICs4MDIsMjggQEAKIAogCQlpZiAoKChiYW5kX2xvdyA8IHgxKSAmJiAoeDEgPCBiYW5kX2hpZ2gpKSB8fAogCQkJCQkoKGJhbmRfbG93IDwgeDIpICYmICh4MiA8IGJhbmRfaGlnaCkpKQotCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID0gVFJVRTsKKwkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSA9IHRydWU7CiAJfQogCi0JaW5iYW5kX2ludGVyZmVyZXJfaW5kID0gVFJVRTsKLQlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpCi0JCWluYmFuZF9pbnRlcmZlcmVyX2luZCAmPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldIHwKLQkJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV07CisJaW5iYW5kX2ludGVyZmVyZXJfaW5kID0gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpIHsKKwkJaWYgKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfHwgaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSkgeworCQkJaW5iYW5kX2ludGVyZmVyZXJfaW5kID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KIAogCWlmIChpbmJhbmRfaW50ZXJmZXJlcl9pbmQpIHsKIAkJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7Ci0JCQlpZiAoaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSA9PSBGQUxTRSkgeworCQkJaWYgKCFpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldKSB7CiAJCQkJc2FtcGxlX3JhdGUgPSAodTgpIGFmc1tpXTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkgewotCQkJaWYgKChpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldIHwKLQkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSkgPT0gRkFMU0UpIHsKKwkJCWlmICgoaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSB8fAorCQkJICAgICAhaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSkpIHsKIAkJCQlzYW1wbGVfcmF0ZSA9ICh1OCkgYWZzW2ldOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwLmgKaW5kZXggMjljM2ZhOC4uZTNlMzVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oCkBAIC00OSw2ICs0OSw4IEBACiAJdTggdHVuMl9tYWRkcmVzczsKIAl1OCB0dW4xX2FkYzsvKiAxIGZvciBzdHY2MTEwLCAyIGZvciBzdGI2MTAwICovCiAJdTggdHVuMl9hZGM7CisJdTggdHVuMV90eXBlOy8qIGZvciBub3cgMyBmb3Igc3RiNjEwMCBhdXRvLCBlbHNlIC0gc29mdHdhcmUgKi8KKwl1OCB0dW4yX3R5cGU7CiAJLyogU2V0IGRldmljZSBwYXJhbSB0byBzdGFydCBkbWEgKi8KIAlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGlzX3B1bmN0dXJlZCk7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCmluZGV4IDg3NjJjODYuLjAxZjhmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJldHVybiBidWY7CiB9CiAKLXZvaWQgZXh0cmFjdF9tYXNrX3Bvcyh1MzIgbGFiZWwsIHU4ICptYXNrLCB1OCAqcG9zKQorc3RhdGljIHZvaWQgZXh0cmFjdF9tYXNrX3Bvcyh1MzIgbGFiZWwsIHU4ICptYXNrLCB1OCAqcG9zKQogewogCXU4IHBvc2l0aW9uID0gMCwgaSA9IDA7CiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXJldHVybiB2YWw7CiB9CiAKLWVudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX2luaXRpYWxpemUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHApCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfaW5pdGlhbGl6ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCkKIHsKIAlzMzIgaTsKIApAQCAtMjgyLDcgKzI4Miw3IEBACiAJcmV0dXJuIFNUVjA5MDBfTk9fRVJST1I7CiB9CiAKLXUzMiBzdHYwOTAwX2dldF9tY2xrX2ZyZXEoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBleHRfY2xrKQorc3RhdGljIHUzMiBzdHYwOTAwX2dldF9tY2xrX2ZyZXEoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBleHRfY2xrKQogewogCXUzMiBtY2xrID0gOTAwMDAwMDAsIGRpdiA9IDAsIGFkX2RpdiA9IDA7CiAKQEAgLTI5Niw3ICsyOTYsNyBAQAogCXJldHVybiBtY2xrOwogfQogCi1lbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9zZXRfbWNsayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIG1jbGspCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfc2V0X21jbGsoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBtY2xrKQogewogCXUzMiBtX2RpdiwgY2xrX3NlbDsKIApAQCAtMzM0LDcgKzMzNCw3IEBACiAJcmV0dXJuIFNUVjA5MDBfTk9fRVJST1I7CiB9CiAKLXUzMiBzdHYwOTAwX2dldF9lcnJfY291bnQoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIGludCBjbnRyLAorc3RhdGljIHUzMiBzdHYwOTAwX2dldF9lcnJfY291bnQoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIGludCBjbnRyLAogCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQogewogCXUzMiBsc2IsIG1zYiwgaHNiLCBlcnJfdmFsOwpAQCAtNTY3LDYgKzU2Nyw0NiBAQAogCX0KIH0KIAordTMyIHN0djA5MDBfZ2V0X2ZyZXFfYXV0byhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGRlbW9kKQoreworCXUzMiBmcmVxLCByb3VuZDsKKwkvKglGb3JtdWxhdCA6CisJVHVuZXJfRnJlcXVlbmN5KE1IeikJPSBSZWdzIC8gNjQKKwlUdW5lcl9ncmFudWxhcml0eShNSHopCT0gUmVncyAvIDIwNDgKKwlyZWFsX1R1bmVyX0ZyZXF1ZW5jeQk9IFR1bmVyX0ZyZXF1ZW5jeShNSHopIC0gVHVuZXJfZ3JhbnVsYXJpdHkoTUh6KQorCSovCisJZnJlcSA9IChzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRkZSRVEyKSA8PCAxMCkgKworCQkoc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBUVU5fUkZGUkVRMSkgPDwgMikgKworCQlzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRkZSRVEwKTsKKworCWZyZXEgPSAoZnJlcSAqIDEwMDApIC8gNjQ7CisKKwlyb3VuZCA9IChzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRlJFU1RFMSkgPj4gMikgKworCQlzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRlJFU1RFMCk7CisKKwlyb3VuZCA9IChyb3VuZCAqIDEwMDApIC8gMjA0ODsKKworCXJldHVybiBmcmVxICsgcm91bmQ7Cit9CisKK3ZvaWQgc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIEZyZXF1ZW5jeSwKKwkJCQkJCXUzMiBCYW5kd2lkdGgsIGludCBkZW1vZCkKK3sKKwl1MzIgdHVuZXJGcmVxdWVuY3k7CisJLyogRm9ybXVsYXQ6CisJVHVuZXJfZnJlcXVlbmN5X3JlZz0gRnJlcXVlbmN5KE1IeikqNjQKKwkqLworCXR1bmVyRnJlcXVlbmN5ID0gKEZyZXF1ZW5jeSAqIDY0KSAvIDEwMDA7CisKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgVFVOX1JGRlJFUTIsICh0dW5lckZyZXF1ZW5jeSA+PiAxMCkpOworCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBUVU5fUkZGUkVRMSwgKHR1bmVyRnJlcXVlbmN5ID4+IDIpICYgMHhmZik7CisJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIFRVTl9SRkZSRVEwLCAodHVuZXJGcmVxdWVuY3kgJiAweDAzKSk7CisJLyogTG93IFBhc3MgRmlsdGVyID0gQlcgLzIgKE1IeikqLworCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBUVU5fQlcsIEJhbmR3aWR0aCAvIDIwMDAwMDApOworCS8qIFR1bmVyIFdyaXRlIHRyaWcgKi8KKwlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBUTlJMRCwgMSk7Cit9CisKIHN0YXRpYyBzMzIgc3R2MDkwMF9nZXRfcmZfbGV2ZWwoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsCiAJCQkJY29uc3Qgc3RydWN0IHN0djA5MDBfdGFibGUgKmxvb2t1cCwKIAkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQpAQCAtMTMyOSw3ICsxMzY5LDYgQEAKIAllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOwogCWVudW0gZmVfc3R2MDkwMF9lcnJvciBkZW1vZEVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKIAlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCA9IE5VTEw7Ci0KIAlpbnQgc2Vsb3NjaSwgaTsKIAogCXN0cnVjdCBzdHYwOTAwX2lub2RlICp0ZW1wX2ludCA9IGZpbmRfaW5vZGUoc3RhdGUtPmkyY19hZGFwLApAQCAtMTM0NSw3ICsxMzg0LDE0IEBACiAJfSBlbHNlIHsKIAkJc3RhdGUtPmludGVybmFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwpLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbCA9PSBOVUxMKQorCQkJcmV0dXJuIFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CiAJCXRlbXBfaW50ID0gYXBwZW5kX2ludGVybmFsKHN0YXRlLT5pbnRlcm5hbCk7CisJCWlmICh0ZW1wX2ludCA9PSBOVUxMKSB7CisJCQlrZnJlZShzdGF0ZS0+aW50ZXJuYWwpOworCQkJc3RhdGUtPmludGVybmFsID0gTlVMTDsKKwkJCXJldHVybiBTVFYwOTAwX0lOVkFMSURfSEFORExFOworCQl9CiAJCXN0YXRlLT5pbnRlcm5hbC0+ZG1kc191c2VkID0gMTsKIAkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRhcCA9IHN0YXRlLT5pMmNfYWRhcDsKIAkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CkBAIC0xMzcxLDExICsxNDE3LDYgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlmIChzdGF0ZS0+aW50ZXJuYWwgPT0gTlVMTCkgewotCQllcnJvciA9IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KIAlpbnRwID0gc3RhdGUtPmludGVybmFsOwogCiAJaW50cC0+ZGVtb2RfbW9kZSA9IHBfaW5pdC0+ZGVtb2RfbW9kZTsKQEAgLTE0MDQsNiArMTQ0NSwyNyBAQAogCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfUlNUX0hXQVJFLCAwKTsKIAl9CiAKKwlpbnRwLT50dW5lcl90eXBlWzBdID0gcF9pbml0LT50dW5lcjFfdHlwZTsKKwlpbnRwLT50dW5lcl90eXBlWzFdID0gcF9pbml0LT50dW5lcjJfdHlwZTsKKwkvKiB0dW5lciBpbml0ICovCisJc3dpdGNoIChwX2luaXQtPnR1bmVyMV90eXBlKSB7CisJY2FzZSAzOiAvKkZFX0FVVE9fU1RCNjEwMDoqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDRkcsIDB4M2MpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDRkcyLCAweDg2KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SQ0ZHMywgMHgxOCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUlhUQUwsIDI3KTsgLyogMjdNSHogKi8KKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SU1RFUFMsIDB4MDUpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJHQUlOLCAweDE3KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SQURKLCAweDFmKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SQ1RMMiwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AxX1RVTl9UWVBFLCAzKTsKKwkJYnJlYWs7CisJLyogY2FzZSBGRV9TV19UVU5FUjogKi8KKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX1RZUEUsIDYpOworCQlicmVhazsKKwl9CisKIAlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX01BRERSRVNTLCBwX2luaXQtPnR1bjFfbWFkZHJlc3MpOwogCXN3aXRjaCAocF9pbml0LT50dW5lcjFfYWRjKSB7CiAJY2FzZSAxOgpAQCAtMTQxMyw2ICsxNDc1LDI3IEBACiAJCWJyZWFrOwogCX0KIAorCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkxELCAxKTsgLyogaHcgdHVuZXIgKi8KKworCS8qIHR1bmVyIGluaXQgKi8KKwlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIyX3R5cGUpIHsKKwljYXNlIDM6IC8qRkVfQVVUT19TVEI2MTAwOiovCisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNGRywgMHgzYyk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNGRzIsIDB4ODYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJDRkczLCAweDE4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SWFRBTCwgMjcpOyAvKiAyN01IeiAqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJTVEVQUywgMHgwNSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkdBSU4sIDB4MTcpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJBREosIDB4MWYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJDVEwyLCAweDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDJfVFVOX1RZUEUsIDMpOworCQlicmVhazsKKwkvKiBjYXNlIEZFX1NXX1RVTkVSOiAqLworCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMl9UVU5fVFlQRSwgNik7CisJCWJyZWFrOworCX0KKwogCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMl9UVU5fTUFERFJFU1MsIHBfaW5pdC0+dHVuMl9tYWRkcmVzcyk7CiAJc3dpdGNoIChwX2luaXQtPnR1bmVyMl9hZGMpIHsKIAljYXNlIDE6CkBAIC0xNDIyLDYgKzE1MDUsOCBAQAogCQlicmVhazsKIAl9CiAKKwlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJMRCwgMSk7IC8qIGh3IHR1bmVyICovCisKIAlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX0lRU1dBUCwgcF9pbml0LT50dW4xX2lxX2ludik7CiAJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AyX1RVTl9JUVNXQVAsIHBfaW5pdC0+dHVuMl9pcV9pbnYpOwogCXN0djA5MDBfc2V0X21jbGsoaW50cCwgMTM1MDAwMDAwKTsKQEAgLTE4MjQsMTAgKzE5MDksMTIgQEAKIAkJaW5pdF9wYXJhbXMudHVuMV9tYWRkcmVzcwk9IGNvbmZpZy0+dHVuMV9tYWRkcmVzczsKIAkJaW5pdF9wYXJhbXMudHVuMV9pcV9pbnYJCT0gU1RWMDkwMF9JUV9OT1JNQUw7CiAJCWluaXRfcGFyYW1zLnR1bmVyMV9hZGMJCT0gY29uZmlnLT50dW4xX2FkYzsKKwkJaW5pdF9wYXJhbXMudHVuZXIxX3R5cGUJCT0gY29uZmlnLT50dW4xX3R5cGU7CiAJCWluaXRfcGFyYW1zLnBhdGgyX3RzX2Nsb2NrCT0gY29uZmlnLT5wYXRoMl9tb2RlOwogCQlpbml0X3BhcmFtcy50c19jb25maWcJCT0gY29uZmlnLT50c19jb25maWdfcmVnczsKIAkJaW5pdF9wYXJhbXMudHVuMl9tYWRkcmVzcwk9IGNvbmZpZy0+dHVuMl9tYWRkcmVzczsKIAkJaW5pdF9wYXJhbXMudHVuZXIyX2FkYwkJPSBjb25maWctPnR1bjJfYWRjOworCQlpbml0X3BhcmFtcy50dW5lcjJfdHlwZQkJPSBjb25maWctPnR1bjJfdHlwZTsKIAkJaW5pdF9wYXJhbXMudHVuMl9pcV9pbnYJCT0gU1RWMDkwMF9JUV9TV0FQUEVEOwogCiAJCWVycl9zdHYwOTAwID0gc3R2MDkwMF9pbml0X2ludGVybmFsKCZzdGF0ZS0+ZnJvbnRlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKaW5kZXggZDhiYThhOS4uYjYyYjBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaApAQCAtMjQ3LDYgKzI0Nyw3IEBACiAKIAl1OAl0dW4xX21hZGRyZXNzOwogCWludAl0dW5lcjFfYWRjOworCWludCAJdHVuZXIxX3R5cGU7CiAKIAkvKiBJUSBmcm9tIHRoZSB0dW5lcjEgdG8gdGhlIGRlbW9kICovCiAJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgl0dW4xX2lxX2ludjsKQEAgLTI1NCw2ICsyNTUsNyBAQAogCiAJdTgJdHVuMl9tYWRkcmVzczsKIAlpbnQJdHVuZXIyX2FkYzsKKwlpbnQJdHVuZXIyX3R5cGU7CiAKIAkvKiBJUSBmcm9tIHRoZSB0dW5lcjIgdG8gdGhlIGRlbW9kICovCiAJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgl0dW4yX2lxX2ludjsKQEAgLTMwOSw2ICszMTEsOCBAQAogCXMzMglid1syXTsKIAlzMzIJc3ltYm9sX3JhdGVbMl07CiAJczMyCXNyY2hfcmFuZ2VbMl07CisJLyogZm9yIHNvZnR3YXJlL2F1dG8gdHVuZXIgKi8KKwlpbnQJdHVuZXJfdHlwZVsyXTsKIAogCS8qIGFsZ29yaXRobSBmb3Igc2VhcmNoIEJsaW5kLCBDb2xkIG9yIFdhcm0qLwogCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbwlzcmNoX2FsZ29bMl07CkBAIC0zOTQsNCArMzk4LDExIEBACiBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIHN0djA5MDBfZ2V0X3N0YW5kYXJkKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOwogCitleHRlcm4gdTMyCitzdHYwOTAwX2dldF9mcmVxX2F1dG8oc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIGludCBkZW1vZCk7CisKK2V4dGVybiB2b2lkCitzdHYwOTAwX3NldF90dW5lcl9hdXRvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCB1MzIgRnJlcXVlbmN5LAorCQkJCQkJdTMyIEJhbmR3aWR0aCwgaW50IGRlbW9kKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9yZWcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oCmluZGV4IDdiOGVkZjEuLjczMWFmZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oCkBAIC0zMTc0LDE3ICszMTc0LDIxIEBACiAjZGVmaW5lIFIwOTAwX1AxX1ROUlJGMSAweGY0ZTkKICNkZWZpbmUgVE5SUkYxIFJFR3goUjA5MDBfUDFfVE5SUkYxKQogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZGUkVRMiAweGY0ZTkwMGZmCisjZGVmaW5lIFRVTl9SRkZSRVEyIEZMRHgoRjA5MDBfUDFfVFVOX1JGRlJFUTIpCiAKIC8qUDFfVE5SUkYwKi8KICNkZWZpbmUgUjA5MDBfUDFfVE5SUkYwIDB4ZjRlYQogI2RlZmluZSBUTlJSRjAgUkVHeChSMDkwMF9QMV9UTlJSRjApCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVExIDB4ZjRlYTAwZmYKKyNkZWZpbmUgVFVOX1JGRlJFUTEgRkxEeChGMDkwMF9QMV9UVU5fUkZGUkVRMSkKIAogLypQMV9UTlJCVyovCiAjZGVmaW5lIFIwOTAwX1AxX1ROUkJXIDB4ZjRlYgogI2RlZmluZSBUTlJCVyBSRUd4KFIwOTAwX1AxX1ROUkJXKQogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZGUkVRMCAweGY0ZWIwMGMwCisjZGVmaW5lIFRVTl9SRkZSRVEwIEZMRHgoRjA5MDBfUDFfVFVOX1JGRlJFUTApCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9CVyAweGY0ZWIwMDNmCisjZGVmaW5lIFRVTl9CVyBGTER4KEYwOTAwX1AxX1RVTl9CVykKIAogLypQMV9UTlJBREoqLwogI2RlZmluZSBSMDkwMF9QMV9UTlJBREogMHhmNGVjCkBAIC0zMjM0LDExICszMjM4LDEzIEBACiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9JMkNMT0NLRUQgMHhmNGY2MDAxMAogI2RlZmluZSBGMDkwMF9QMV9UVU5fUFJPR0RPTkUgMHhmNGY2MDAwYwogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZSRVNURTEgMHhmNGY2MDAwMworI2RlZmluZSBUVU5fUkZSRVNURTEgRkxEeChGMDkwMF9QMV9UVU5fUkZSRVNURTEpCiAKIC8qUDFfVE5SUkVTVEUqLwogI2RlZmluZSBSMDkwMF9QMV9UTlJSRVNURSAweGY0ZjcKICNkZWZpbmUgVE5SUkVTVEUgUkVHeChSMDkwMF9QMV9UTlJSRVNURSkKICNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGUkVTVEUwIDB4ZjRmNzAwZmYKKyNkZWZpbmUgVFVOX1JGUkVTVEUwIEZMRHgoRjA5MDBfUDFfVFVOX1JGUkVTVEUwKQogCiAvKlAxX1NNQVBDT0VGNyovCiAjZGVmaW5lIFIwOTAwX1AxX1NNQVBDT0VGNyAweGY1MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCmluZGV4IGI4ZGE4N2YuLmJhMDcwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJcmV0dXJuIGxvY2s7CiB9CiAKLWludCBzdHYwOTAwX3N3X2FsZ28oc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsCitzdGF0aWMgaW50IHN0djA5MDBfc3dfYWxnbyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKIAkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQogewogCWludAlsb2NrID0gRkFMU0UsCkBAIC02MDYsNyArNjA2LDEyIEBACiAJCQl0dW5lcl9mcmVxIC09IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOwogCiAJCWlmIChpbnRwLT5jaGlwX2lkIDw9IDB4MjApIHsKLQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpbnRwLT5id1tkXSk7CisJCQlpZiAoaW50cC0+dHVuZXJfdHlwZVtkXSA9PSAzKQorCQkJCXN0djA5MDBfc2V0X3R1bmVyX2F1dG8oaW50cCwgdHVuZXJfZnJlcSwKKwkJCQkJCWludHAtPmJ3W2RdLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGludHAtPmJ3W2RdKTsKKwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgRE1ESVNUQVRFLCAweDFjKTsKIAkJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIENGUklOSVQxLCAwKTsKIAkJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIENGUklOSVQwLCAwKTsKQEAgLTc5MCw3ICs3OTUsNyBAQAogCXJldHVybiBwcmF0ZTsKIH0KIAotdm9pZCBzdHYwOTAwX3NldF9kdmJzMV90cmFja19jYXJfbG9vcChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X2R2YnMxX3RyYWNrX2Nhcl9sb29wKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLAogCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kLAogCQkJCQl1MzIgc3JhdGUpCiB7CkBAIC05NzYsOCArOTgxLDE2IEBACiAJCQkJCWludHAtPnJvbGxvZmYpICsgMTAwMDAwMDA7CiAKIAkJaWYgKChpbnRwLT5jaGlwX2lkID49IDB4MjApIHx8IChibGluZF90dW5fc3cgPT0gMSkpIHsKLQkJCWlmIChpbnRwLT5zcmNoX2FsZ29bZGVtb2RdICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkKLQkJCQlzdHYwOTAwX3NldF9iYW5kd2lkdGgoZmUsIGludHAtPmJ3W2RlbW9kXSk7CisJCQlpZiAoaW50cC0+c3JjaF9hbGdvW2RlbW9kXSAhPSBTVFYwOTAwX1dBUk1fU1RBUlQpIHsKKwkJCQlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJCQkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLAorCQkJCQkJCWludHAtPmZyZXFbZGVtb2RdLAorCQkJCQkJCWludHAtPmJ3W2RlbW9kXSwKKwkJCQkJCQlkZW1vZCk7CisJCQkJZWxzZQorCQkJCQlzdHYwOTAwX3NldF9iYW5kd2lkdGgoZmUsCisJCQkJCQkJaW50cC0+YndbZGVtb2RdKTsKKwkJCX0KIAkJfQogCiAJCWlmICgoaW50cC0+c3JjaF9hbGdvW2RlbW9kXSA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwKQEAgLTEyMDIsNyArMTIxNSwxMSBAQAogCX0KIAogCXJlc3VsdC0+c3RhbmRhcmQgPSBzdHYwOTAwX2dldF9zdGFuZGFyZChmZSwgZCk7Ci0JcmVzdWx0LT5mcmVxdWVuY3kgPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJcmVzdWx0LT5mcmVxdWVuY3kgPSBzdHYwOTAwX2dldF9mcmVxX2F1dG8oaW50cCwgZCk7CisJZWxzZQorCQlyZXN1bHQtPmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCiAJb2Zmc2V0RnJlcSA9IHN0djA5MDBfZ2V0X2NhcnJfZnJlcShpbnRwLCBpbnRwLT5tY2xrLCBkKSAvIDEwMDA7CiAJcmVzdWx0LT5mcmVxdWVuY3kgKz0gb2Zmc2V0RnJlcTsKIAlyZXN1bHQtPnN5bWJvbF9yYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaW50cCwgaW50cC0+bWNsaywgZCk7CkBAIC0xMjEzLDYgKzEyMzAsOSBAQAogCXJlc3VsdC0+cGlsb3QgPSBzdHYwOTAwX2dldF9iaXRzKGludHAsIERFTU9EX1RZUEUpICYgMHgwMTsKIAlyZXN1bHQtPmZyYW1lX2xlbiA9ICgodTMyKXN0djA5MDBfZ2V0X2JpdHMoaW50cCwgREVNT0RfVFlQRSkpID4+IDE7CiAJcmVzdWx0LT5yb2xsb2ZmID0gc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBST0xMT0ZGX1NUQVRVUyk7CisKKwlkcHJpbnRrKCIlczogbW9kY29kZT0weCV4IFxuIiwgX19mdW5jX18sIHJlc3VsdC0+bW9kY29kZSk7CisKIAlzd2l0Y2ggKHJlc3VsdC0+c3RhbmRhcmQpIHsKIAljYXNlIFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQ6CiAJCXJlc3VsdC0+c3BlY3RydW0gPSBzdHYwOTAwX2dldF9iaXRzKGludHAsIFNQRUNJTlZfREVNT0QpOwpAQCAtMTIzOSw3ICsxMjU5LDExIEBACiAJaWYgKChpbnRwLT5zcmNoX2FsZ29bZF0gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8CiAJCQkJKGludHAtPnN5bWJvbF9yYXRlW2RdIDwgMTAwMDAwMDApKSB7CiAJCW9mZnNldEZyZXEgPSByZXN1bHQtPmZyZXF1ZW5jeSAtIGludHAtPmZyZXFbZF07Ci0JCWludHAtPmZyZXFbZF0gPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwkJaWYgKGludHAtPnR1bmVyX3R5cGVbZGVtb2RdID09IDMpCisJCQlpbnRwLT5mcmVxW2RdID0gc3R2MDkwMF9nZXRfZnJlcV9hdXRvKGludHAsIGQpOworCQllbHNlCisJCQlpbnRwLT5mcmVxW2RdID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisKIAkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoKGludHAtPnNyY2hfcmFuZ2VbZF0gLyAyMDAwKSArIDUwMCkpCiAJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKIAkJZWxzZSBpZiAoQUJTKG9mZnNldEZyZXEpIDw9CkBAIC0xNDgxLDcgKzE1MDUsMTIgQEAKIAkJCWVsc2UKIAkJCQl0dW5lcl9mcmVxIC09IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOwogCi0JCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaW50cC0+YndbZGVtb2RdKTsKKwkJCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQkJCXN0djA5MDBfc2V0X3R1bmVyX2F1dG8oaW50cCwgdHVuZXJfZnJlcSwKKwkJCQkJCWludHAtPmJ3W2RlbW9kXSwgZGVtb2QpOworCQkJZWxzZQorCQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLAorCQkJCQkJaW50cC0+YndbZGVtb2RdKTsKIAkJfQogCX0KIApAQCAtMTYwOCw3ICsxNjM3LDggQEAKIAogCWFnYzJfaW50ID0gc3R2MDkwMF9ibGluZF9jaGVja19hZ2MyX21pbl9sZXZlbChpbnRwLCBkZW1vZCk7CiAKLQlpZiAoYWdjMl9pbnQgPiBTVFYwOTAwX0JMSU5EX1NFQVJDSF9BR0MyX1RIKQorCWRwcmludGsoIiVzIGFnYzJfaW50PSVkIGFnYzJfdGg9JWQgXG4iLCBfX2Z1bmNfXywgYWdjMl9pbnQsIGFnYzJfdGgpOworCWlmIChhZ2MyX2ludCA+IGFnYzJfdGgpCiAJCXJldHVybiBGQUxTRTsKIAogCWlmIChpbnRwLT5jaGlwX2lkID09IDB4MTApCkBAIC0xODc1LDcgKzE5MDUsMTEgQEAKIAogCX0KIAotCXN0djA5MDBfc2V0X3R1bmVyKGZlLCBpbnRwLT5mcmVxW2RlbW9kXSwgaW50cC0+YndbZGVtb2RdKTsKKwlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLCBpbnRwLT5mcmVxW2RlbW9kXSwKKwkJCQlpbnRwLT5id1tkZW1vZF0sIGRlbW9kKTsKKwllbHNlCisJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCBpbnRwLT5mcmVxW2RlbW9kXSwgaW50cC0+YndbZGVtb2RdKTsKIAogCWFnYzFfcG93ZXIgPSBNQUtFV09SRChzdHYwOTAwX2dldF9iaXRzKGludHAsIEFHQ0lRX1ZBTFVFMSksCiAJCQkJc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBBR0NJUV9WQUxVRTApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCmluZGV4IDE1NzM0NjYuLmM1MmMzMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYwpAQCAtMzcsNyArMzcsODIgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmVyYm9zZTsKIG1vZHVsZV9wYXJhbSh2ZXJib3NlLCBpbnQsIDA2NDQpOwogCi1zdHJ1Y3QgbXV0ZXggZGVtb2RfbG9jazsKKy8qIGludGVybmFsIHBhcmFtcyBub2RlICovCitzdHJ1Y3Qgc3R2MDkweF9kZXYgeworCS8qIHBvaW50ZXIgZm9yIGludGVybmFsIHBhcmFtcywgb25lIGZvciBlYWNoIHBhaXIgb2YgZGVtb2RzICovCisJc3RydWN0IHN0djA5MHhfaW50ZXJuYWwJCSppbnRlcm5hbDsKKwlzdHJ1Y3Qgc3R2MDkweF9kZXYJCSpuZXh0X2RldjsKK307CisKKy8qIGZpcnN0IGludGVybmFsIHBhcmFtcyAqLworc3RhdGljIHN0cnVjdCBzdHYwOTB4X2RldiAqc3R2MDkweF9maXJzdF9kZXY7CisKKy8qIGZpbmQgY2hpcCBieSBpMmMgYWRhcHRlciBhbmQgaTJjIGFkZHJlc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkweF9kZXYgKmZpbmRfZGV2KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJCXU4IGkyY19hZGRyKQoreworCXN0cnVjdCBzdHYwOTB4X2RldiAqdGVtcF9kZXYgPSBzdHYwOTB4X2ZpcnN0X2RldjsKKworCS8qCisJIFNlYXJjaCBvZiB0aGUgbGFzdCBzdHYwOTAwIGNoaXAgb3IKKwkgZmluZCBpdCBieSBpMmMgYWRhcHRlciBhbmQgaTJjIGFkZHJlc3MgKi8KKwl3aGlsZSAoKHRlbXBfZGV2ICE9IE5VTEwpICYmCisJCSgodGVtcF9kZXYtPmludGVybmFsLT5pMmNfYWRhcCAhPSBpMmNfYWRhcCkgfHwKKwkJKHRlbXBfZGV2LT5pbnRlcm5hbC0+aTJjX2FkZHIgIT0gaTJjX2FkZHIpKSkgeworCisJCXRlbXBfZGV2ID0gdGVtcF9kZXYtPm5leHRfZGV2OworCX0KKworCXJldHVybiB0ZW1wX2RldjsKK30KKworLyogZGVhbGxvY2F0aW5nIGNoaXAgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9kZXYoc3RydWN0IHN0djA5MHhfaW50ZXJuYWwgKmludGVybmFsKQoreworCXN0cnVjdCBzdHYwOTB4X2RldiAqcHJldl9kZXYgPSBzdHYwOTB4X2ZpcnN0X2RldjsKKwlzdHJ1Y3Qgc3R2MDkweF9kZXYgKmRlbF9kZXYgPSBmaW5kX2RldihpbnRlcm5hbC0+aTJjX2FkYXAsCisJCQkJCQlpbnRlcm5hbC0+aTJjX2FkZHIpOworCisJaWYgKGRlbF9kZXYgIT0gTlVMTCkgeworCQlpZiAoZGVsX2RldiA9PSBzdHYwOTB4X2ZpcnN0X2RldikgeworCQkJc3R2MDkweF9maXJzdF9kZXYgPSBkZWxfZGV2LT5uZXh0X2RldjsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlIChwcmV2X2Rldi0+bmV4dF9kZXYgIT0gZGVsX2RldikKKwkJCQlwcmV2X2RldiA9IHByZXZfZGV2LT5uZXh0X2RldjsKKworCQkJcHJldl9kZXYtPm5leHRfZGV2ID0gZGVsX2Rldi0+bmV4dF9kZXY7CisJCX0KKworCQlrZnJlZShkZWxfZGV2KTsKKwl9Cit9CisKKy8qIGFsbG9jYXRpbmcgbmV3IGNoaXAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkweF9kZXYgKmFwcGVuZF9pbnRlcm5hbChzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbCAqaW50ZXJuYWwpCit7CisJc3RydWN0IHN0djA5MHhfZGV2ICpuZXdfZGV2OworCXN0cnVjdCBzdHYwOTB4X2RldiAqdGVtcF9kZXY7CisKKwluZXdfZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MHhfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5ld19kZXYgIT0gTlVMTCkgeworCQluZXdfZGV2LT5pbnRlcm5hbCA9IGludGVybmFsOworCQluZXdfZGV2LT5uZXh0X2RldiA9IE5VTEw7CisKKwkJLyogYXBwZW5kIHRvIGxpc3QgKi8KKwkJaWYgKHN0djA5MHhfZmlyc3RfZGV2ID09IE5VTEwpIHsKKwkJCXN0djA5MHhfZmlyc3RfZGV2ID0gbmV3X2RldjsKKwkJfSBlbHNlIHsKKwkJCXRlbXBfZGV2ID0gc3R2MDkweF9maXJzdF9kZXY7CisJCQl3aGlsZSAodGVtcF9kZXYtPm5leHRfZGV2ICE9IE5VTEwpCisJCQkJdGVtcF9kZXYgPSB0ZW1wX2Rldi0+bmV4dF9kZXY7CisKKwkJCXRlbXBfZGV2LT5uZXh0X2RldiA9IG5ld19kZXY7CisJCX0KKwl9CisKKwlyZXR1cm4gbmV3X2RldjsKK30KKwogCiAvKiBEVkJTMSBhbmQgRFNTIEMvTiBMb29rdXAgdGFibGUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkweF90YWIgc3R2MDkweF9zMWNuX3RhYltdID0gewpAQCAtNjgzLDYgKzc1OCw5IEBACiAJc3RydWN0IHN0djA5MHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTMyIHJlZzsKIAorCWlmIChlbmFibGUpCisJCW11dGV4X2xvY2soJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CisKIAlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIEkyQ1JQVCk7CiAJaWYgKGVuYWJsZSkgewogCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiRW5hYmxlIEdhdGUiKTsKQEAgLTY5Niw5ICs3NzQsMTQgQEAKIAkJaWYgKChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBJMkNSUFQsIHJlZykpIDwgMCkKIAkJCWdvdG8gZXJyOwogCX0KKworCWlmICghZW5hYmxlKQorCQltdXRleF91bmxvY2soJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CisKIAlyZXR1cm4gMDsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPnR1bmVyX2xvY2spOwogCXJldHVybiAtMTsKIH0KIApAQCAtNzU1LDEzICs4MzgsMTMgQEAKIAogCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNCk7IC8qIFNSICogMl4xNiAvIG1hc3Rlcl9jbGsgKi8KLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMik7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEyKTsKIAl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDYpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEwKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTApOwogCX0gZWxzZSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgOSk7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gNyk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDcpOwogCX0KIAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJJTklUMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkgLyogTVNCICovCkBAIC03ODIsMTMgKzg2NSwxMyBAQAogCXNyYXRlID0gMTA1ICogKHNyYXRlIC8gMTAwKTsKIAlpZiAoc3JhdGUgPiA2MDAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDQpOyAvKiBTUiAqIDJeMTYgLyBtYXN0ZXJfY2xrICovCi0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gMTIpOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiAxMik7CiAJfSBlbHNlIGlmIChzcmF0ZSA+IDYwMDAwMDApIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA2KTsKLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMCk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEwKTsKIAl9IGVsc2UgewogCQlzeW0gID0gKHNyYXRlIDw8IDkpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDcpOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiA3KTsKIAl9CiAKIAlpZiAoc3ltIDwgMHg3ZmZmKSB7CkBAIC04MTYsMTMgKzg5OSwxMyBAQAogCXNyYXRlID0gOTUgKiAoc3JhdGUgLyAxMDApOwogCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNCk7IC8qIFNSICogMl4xNiAvIG1hc3Rlcl9jbGsgKi8KLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMik7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEyKTsKIAl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDYpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEwKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTApOwogCX0gZWxzZSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgOSk7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gNyk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDcpOwogCX0KIAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cxLCAoKHN5bSA+PiA4KSAmIDB4N2YpKSA8IDApIC8qIE1TQiAqLwpAQCAtMTEwMywyMSArMTE4NiwyMSBAQAogCiAJc3dpdGNoIChzdGF0ZS0+ZGVtb2QpIHsKIAljYXNlIFNUVjA5MHhfREVNT0RVTEFUT1JfMDoKLQkJbXV0ZXhfbG9jaygmZGVtb2RfbG9jayk7CisJCW11dGV4X2xvY2soJnN0YXRlLT5pbnRlcm5hbC0+ZGVtb2RfbG9jayk7CiAJCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfU1RPUENMSzIpOwogCQlTVFYwOTB4X1NFVEZJRUxEKHJlZywgU1RPUF9DTEtWSVQxX0ZJRUxELCBlbmFibGUpOwogCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1RPUENMSzIsIHJlZykgPCAwKQogCQkJZ290byBlcnI7Ci0JCW11dGV4X3VubG9jaygmZGVtb2RfbG9jayk7CisJCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNUVjA5MHhfREVNT0RVTEFUT1JfMToKLQkJbXV0ZXhfbG9jaygmZGVtb2RfbG9jayk7CisJCW11dGV4X2xvY2soJnN0YXRlLT5pbnRlcm5hbC0+ZGVtb2RfbG9jayk7CiAJCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfU1RPUENMSzIpOwogCQlTVFYwOTB4X1NFVEZJRUxEKHJlZywgU1RPUF9DTEtWSVQyX0ZJRUxELCBlbmFibGUpOwogCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1RPUENMSzIsIHJlZykgPCAwKQogCQkJZ290byBlcnI7Ci0JCW11dGV4X3VubG9jaygmZGVtb2RfbG9jayk7CisJCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTEyNiwxNCArMTIwOSwxNCBAQAogCX0KIAlyZXR1cm4gMDsKIGVycjoKLQltdXRleF91bmxvY2soJmRlbW9kX2xvY2spOworCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IHN0djA5MHhfZHZic190cmFja19jcmwoc3RydWN0IHN0djA5MHhfc3RhdGUgKnN0YXRlKQogewotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDMwKSB7CiAJCS8qIFNldCBBQ0xDIEJDTEMgb3B0aW1pc2VkIHZhbHVlIHZzIFNSICovCiAJCWlmIChzdGF0ZS0+c3JhdGUgPj0gMTUwMDAwMDApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBQ0xDLCAweDJiKSA8IDApCkBAIC0xMjE1LDcgKzEyOTgsNyBAQAogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQkNMQywgMHgwOSkgPCAwKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA8PSAweDIwKSB7CiAJCQkvKiBlbmFibGUgUzIgY2FycmllciBsb29wICovCiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSMkNGRywgMHgyNikgPCAwKQogCQkJCWdvdG8gZXJyOwpAQCAtMTI0Niw2ICsxMzI5LDEwIEBACiAJZGVmYXVsdDoKIAkJLyogZW5hYmxlIERWQi1TMiBhbmQgRFZCLVMyIGluIEF1dG8gTU9ERSAqLwogCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERNRENGR01EKTsKKwkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIERWQlMxX0VOQUJMRV9GSUVMRCwgMCk7CisJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBEVkJTMl9FTkFCTEVfRklFTEQsIDApOworCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRE1EQ0ZHTUQsIHJlZykgPCAwKQorCQkJZ290byBlcnI7CiAJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBEVkJTMV9FTkFCTEVfRklFTEQsIDEpOwogCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRFZCUzJfRU5BQkxFX0ZJRUxELCAxKTsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRENGR01ELCByZWcpIDwgMCkKQEAgLTEyNTcsNyArMTM0NCw3IEBACiAJCWlmIChzdHYwOTB4X2R2YnNfdHJhY2tfY3JsKHN0YXRlKSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCS8qIGVuYWJsZSBTMiBjYXJyaWVyIGxvb3AgKi8KIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVIyQ0ZHLCAweDI2KSA8IDApCiAJCQkJZ290byBlcnI7CkBAIC0xMzA0LDcgKzEzOTEsNyBAQAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBETURJU1RBVEUsIHJlZykgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA8PSAweDIwKSB7CiAJCWlmIChzdGF0ZS0+c3JhdGUgPD0gNTAwMDAwMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkNGRywgMHg0NCkgPCAwKQogCQkJCWdvdG8gZXJyOwpAQCAtMTM0OCw3ICsxNDM1LDcgQEAKIAkJCSAqIENGUiBtYXggPSArMU1IegogCQkJICovCiAJCQlmcmVxX2FicyAgPSAxMDAwIDw8IDE2OwotCQkJZnJlcV9hYnMgLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlmcmVxX2FicyAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlmcmVxICAgICAgPSAoczE2KSBmcmVxX2FiczsKIAkJfSBlbHNlIHsKIAkJCS8qIENPTEQgU3RhcnQKQEAgLTEzNTgsNyArMTQ0NSw3IEBACiAJCQkgKi8KIAkJCWZyZXFfYWJzICA9IChzdGF0ZS0+c2VhcmNoX3JhbmdlIC8gMjAwMCkgKyA2MDA7CiAJCQlmcmVxX2FicyAgPSBmcmVxX2FicyA8PCAxNjsKLQkJCWZyZXFfYWJzIC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCQkJZnJlcV9hYnMgLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCQkJZnJlcSAgICAgID0gKHMxNikgZnJlcV9hYnM7CiAJCX0KIApAQCAtMTM4MSw3ICsxNDY4LDcgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0ZSSU5JVDAsIDApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRVFVQUxDRkcsIDB4NDEpIDwgMCkKIAkJCWdvdG8gZXJyOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRkZFQ0ZHLCAweDQxKSA8IDApCkBAIC0xNDE4LDEwICsxNTA1LDEwIEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFJUQywgMHg4OCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCS8qRnJlcXVlbmN5IG9mZnNldCBkZXRlY3RvciBzZXR0aW5nKi8KIAkJaWYgKHN0YXRlLT5zcmF0ZSA8IDIwMDAwMDApIHsKLQkJCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCQkvKiBDdXQgMiAqLwogCQkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDM5KSA8IDApCiAJCQkJCWdvdG8gZXJyOwpAQCAtMTUxMiw3ICsxNTk5LDcgQEAKIAkJc3RlcHMgPSAxOwogCiAJZGlyID0gMTsKLQlmcmVxX3N0ZXAgPSAoMTAwMDAwMCAqIDI1NikgLyAoc3RhdGUtPm1jbGsgLyAyNTYpOworCWZyZXFfc3RlcCA9ICgxMDAwMDAwICogMjU2KSAvIChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAyNTYpOwogCWZyZXFfaW5pdCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3RlcHM7IGkrKykgewpAQCAtMTU4Myw3ICsxNjcwLDcgQEAKIAl1MzIgc3JhdGVfY29hcnNlID0gMCwgYWdjMiA9IDAsIGNhcl9zdGVwID0gMTIwMCwgcmVnOwogCXUzMiBhZ2MydGg7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgzMCkKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApCiAJCWFnYzJ0aCA9IDB4MmUwMDsKIAllbHNlCiAJCWFnYzJ0aCA9IDB4MWYwMDsKQEAgLTE2MTksMTMgKzE3MDYsMTMgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQUdDMlJFRiwgMHg1MCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDMwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDk5KSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlNURVAsIDB4OTgpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JfSBlbHNlIGlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJfSBlbHNlIGlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHg2YSkgPCAwKQogCQkJZ290byBlcnI7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJTVEVQLCAweDk1KSA8IDApCkBAIC0xNjc3LDcgKzE3NjQsNyBAQAogCQkJCVNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQUdDMkkwKTsKIAkJfQogCQlhZ2MyIC89IDEwOwotCQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPmludGVybmFsLT5tY2xrKTsKIAkJY3VyX3N0ZXArKzsKIAkJZGlyICo9IC0xOwogCQlpZiAoKHRtZ19jcHQgPj0gNSkgJiYgKGFnYzIgPCBhZ2MydGgpICYmCkBAIC0xNjk1LDEyICsxNzgyLDEyIEBACiAKIAkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfZnJlcXVlbmN5KSB7CiAJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koZmUsIGZyZXEpIDwgMCkKLQkJCQkJZ290byBlcnI7CisJCQkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJCQl9CiAKIAkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKSB7CiAJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgoZmUsIHN0YXRlLT50dW5lcl9idykgPCAwKQotCQkJCQlnb3RvIGVycjsKKwkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCX0KIAogCQkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMTcxMyw3ICsxODAwLDcgQEAKIAogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMpIHsKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cyhmZSwgJnJlZykgPCAwKQotCQkJCQlnb3RvIGVycjsKKwkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCX0KIAogCQkJaWYgKHJlZykKQEAgLTE3MjksOSArMTgxNiwxMiBAQAogCWlmICghdG1nX2xvY2spCiAJCXNyYXRlX2NvYXJzZSA9IDA7CiAJZWxzZQotCQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPmludGVybmFsLT5tY2xrKTsKIAogCXJldHVybiBzcmF0ZV9jb2Fyc2U7CisKK2Vycl9nYXRlb2ZmOgorCXN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCk7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwogCXJldHVybiAtMTsKQEAgLTE3NDEsNyArMTgzMSw3IEBACiB7CiAJdTMyIHNyYXRlX2NvYXJzZSwgZnJlcV9jb2Fyc2UsIHN5bSwgcmVnOwogCi0Jc3JhdGVfY29hcnNlID0gc3R2MDkweF9nZXRfc3JhdGUoc3RhdGUsIHN0YXRlLT5tY2xrKTsKKwlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPmludGVybmFsLT5tY2xrKTsKIAlmcmVxX2NvYXJzZSAgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENGUjIpIDw8IDg7CiAJZnJlcV9jb2Fyc2UgfD0gU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBDRlIxKTsKIAlzeW0gPSAxMyAqIChzcmF0ZV9jb2Fyc2UgLyAxMCk7IC8qIFNGUlVQID0gU0ZSICsgMzAlICovCkBAIC0xNzY3LDEwICsxODU3LDEwIEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBR0MyUkVGLCAweDM4KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgzMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDc5KSA8IDApCiAJCQkJZ290byBlcnI7Ci0JCX0gZWxzZSBpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQl9IGVsc2UgaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHg0OSkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9CkBAIC0xNzc4LDIwICsxODY4LDIwIEBACiAJCWlmIChzcmF0ZV9jb2Fyc2UgPiAzMDAwMDAwKSB7CiAJCQlzeW0gID0gMTMgKiAoc3JhdGVfY29hcnNlIC8gMTApOyAvKiBTRlJVUCA9IFNGUiArIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDEsIChzeW0gPj4gOCkgJiAweDdmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSVVAwLCBzeW0gJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlzeW0gID0gMTAgKiAoc3JhdGVfY29hcnNlIC8gMTMpOyAvKiBTRlJMT1cgPSBTRlIgLSAzMCUgKi8KIAkJCXN5bSAgPSAoc3ltIC8gMTAwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSTE9XMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cwLCBzeW0gJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlzeW0gID0gKHNyYXRlX2NvYXJzZSAvIDEwMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQxLCAoc3ltID4+IDgpICYgMHhmZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQwLCBzeW0gJiAweGZmKSA8IDApCkBAIC0xNzk5LDIwICsxODg5LDIwIEBACiAJCX0gZWxzZSB7CiAJCQlzeW0gID0gMTMgKiAoc3JhdGVfY29hcnNlIC8gMTApOyAvKiBTRlJVUCA9IFNGUiArIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDEsIChzeW0gPj4gOCkgJiAweDdmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSVVAwLCBzeW0gJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlzeW0gID0gMTAgKiAoc3JhdGVfY29hcnNlIC8gMTQpOyAvKiBTRlJMT1cgPSBTRlIgLSAzMCUgKi8KIAkJCXN5bSAgPSAoc3ltIC8gMTAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSTE9XMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cwLCBzeW0gJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlzeW0gID0gKHNyYXRlX2NvYXJzZSAvIDEwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQxLCAoc3ltID4+IDgpICYgMHhmZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQwLCBzeW0gJiAweGZmKSA8IDApCkBAIC0xODc0LDE4ICsxOTY0LDE5IEBACiAJdTMyIGFnYzIsIHJlZywgc3JhdGVfY29hcnNlOwogCXMzMiBjcHRfZmFpbCwgYWdjMl9vdmZsdywgaTsKIAl1OCBrX3JlZiwga19tYXgsIGtfbWluOwotCWludCBjb2Fyc2VfZmFpbCwgbG9jazsKKwlpbnQgY29hcnNlX2ZhaWwgPSAwOworCWludCBsb2NrOwogCiAJa19tYXggPSAxMTA7CiAJa19taW4gPSAxMDsKIAogCWFnYzIgPSBzdHYwOTB4X2dldF9hZ2MyX21pbl9sZXZlbChzdGF0ZSk7CiAKLQlpZiAoYWdjMiA+IFNUVjA5MHhfU0VBUkNIX0FHQzJfVEgoc3RhdGUtPmRldl92ZXIpKSB7CisJaWYgKGFnYzIgPiBTVFYwOTB4X1NFQVJDSF9BR0MyX1RIKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlcikpIHsKIAkJbG9jayA9IDA7CiAJfSBlbHNlIHsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJDRkcsIDB4YzQpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJfSBlbHNlIHsKQEAgLTE4OTcsNyArMTk4OCw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBSVENTMiwgMHg0NCkgPCAwKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRVFVQUxDRkcsIDB4NDEpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGRkVDRkcsIDB4NDEpIDwgMCkKQEAgLTE5NTYsNyArMjA0Nyw3IEBACiAJdTMyIHJlZzsKIAlzMzIgdG1nX2NwdCA9IDAsIGk7CiAJdTggZnJlcSwgdG1nX3RoaCwgdG1nX3RobDsKLQlpbnQgdG1nX2xvY2s7CisJaW50IHRtZ19sb2NrID0gMDsKIAogCWZyZXEgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENBUkZSRVEpOwogCXRtZ190aGggPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIFRNR1RIUklTRSk7CkBAIC0yMDgwLDEyICsyMTcxLDEyIEBACiAKIAkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3kpIHsKIAkJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfZnJlcXVlbmN5KGZlLCBmcmVxKSA8IDApCi0JCQkJCQkJZ290byBlcnI7CisJCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQkJfQogCiAJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKSB7CiAJCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQkJCQkJZ290byBlcnI7CisJCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQkJfQogCiAJCQkJCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKQEAgLTIwOTgsNyArMjE4OSw3IEBACiAKIAkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMpIHsKIAkJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfc3RhdHVzKGZlLCAmcmVnKSA8IDApCi0JCQkJCQkJZ290byBlcnI7CisJCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQkJfQogCiAJCQkJCWlmIChyZWcpCkBAIC0yMTI5LDYgKzIyMjAsOCBAQAogCiAJcmV0dXJuIGxvY2s7CiAKK2Vycl9nYXRlb2ZmOgorCXN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCk7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwogCXJldHVybiAtMTsKQEAgLTIxNDIsMTMgKzIyMzUsMTMgQEAKIAljYXJfbWF4ID0gc3RhdGUtPnNlYXJjaF9yYW5nZSAvIDEwMDA7CiAJY2FyX21heCArPSBjYXJfbWF4IC8gMTA7CiAJY2FyX21heCAgPSA2NTUzNiAqIChjYXJfbWF4IC8gMik7Ci0JY2FyX21heCAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwljYXJfbWF4IC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAogCWlmIChjYXJfbWF4ID4gMHg0MDAwKQogCQljYXJfbWF4ID0gMHg0MDAwIDsgLyogbWF4Y2FycmllciBzaG91bGQgYmU8PSArLTEvNCBNY2xrICovCiAKIAlpbmMgID0gc3JhdGU7Ci0JaW5jIC89IHN0YXRlLT5tY2xrIC8gMTAwMDsKKwlpbmMgLz0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMDsKIAlpbmMgKj0gMjU2OwogCWluYyAqPSAyNTY7CiAJaW5jIC89IDEwMDA7CkBAIC0yMjA5LDcgKzIzMDIsNyBAQAogCiAJY2FyX21heCArPSAoY2FyX21heCAvIDEwKTsgLyogMTAlIG1hcmdpbiAqLwogCWNhcl9tYXggID0gKDY1NTM2ICogY2FyX21heCAvIDIpOwotCWNhcl9tYXggLz0gc3RhdGUtPm1jbGsgLyAxMDAwOworCWNhcl9tYXggLz0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMDsKIAogCWlmIChjYXJfbWF4ID4gMHg0MDAwKQogCQljYXJfbWF4ID0gMHg0MDAwOwpAQCAtMjIzNCw3ICsyMzI3LDcgQEAKIAljYXJfbWF4ICA9IHN0YXRlLT5zZWFyY2hfcmFuZ2UgLyAxMDAwOwogCWNhcl9tYXggKz0gKGNhcl9tYXggLyAxMCk7CiAJY2FyX21heCAgPSAoNjU1MzYgKiBjYXJfbWF4IC8gMik7Ci0JY2FyX21heCAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwljYXJfbWF4IC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAlpZiAoY2FyX21heCA+IDB4NDAwMCkKIAkJY2FyX21heCA9IDB4NDAwMDsKIApAQCAtMjMwNCw3ICsyMzk3LDcgQEAKIAljYXNlIFNUVjA5MHhfU0VBUkNIX0RWQlMxOgogCWNhc2UgU1RWMDkweF9TRUFSQ0hfRFNTOgogCQkvKiBhY2NlbGVyYXRlIHRoZSBmcmVxdWVuY3kgZGV0ZWN0b3IgKi8KLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHgzQikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9CkBAIC0yMzE1LDcgKzI0MDgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU1RWMDkweF9TRUFSQ0hfRFZCUzI6Ci0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg3OSkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9CkBAIC0yMzI4LDcgKzI0MjEsNyBAQAogCWNhc2UgU1RWMDkweF9TRUFSQ0hfQVVUTzoKIAlkZWZhdWx0OgogCQkvKiBhY2NlbGVyYXRlIHRoZSBmcmVxdWVuY3kgZGV0ZWN0b3IgKi8KLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHgzYikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg3OSkgPCAwKQpAQCAtMjM1MCw3ICsyNDQzLDcgQEAKIAkJLypydW4gdGhlIFNXIHNlYXJjaCAyIHRpbWVzIG1heGltdW0qLwogCQlpZiAobG9jayB8fCBub19zaWduYWwgfHwgKHRyaWFscyA9PSAyKSkgewogCQkJLypDaGVjayBpZiB0aGUgZGVtb2QgaXMgbm90IGxvc2luZyBsb2NrIGluIERWQlMyKi8KLQkJCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSRlJFUSwgMHg0OSkgPCAwKQogCQkJCQlnb3RvIGVycjsKIAkJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDllKSA8IDApCkBAIC0yMzcyLDcgKzI0NjUsNyBAQAogCQkJCQkvKkZBTFNFIGxvY2ssIFRoZSBkZW1vZCBpcyBsb29zaW5nIGxvY2sgKi8KIAkJCQkJbG9jayA9IDA7CiAJCQkJCWlmICh0cmlhbHMgPCAyKSB7Ci0JCQkJCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQkJCQkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQkJCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg3OSkgPCAwKQogCQkJCQkJCQlnb3RvIGVycjsKIAkJCQkJCX0KQEAgLTI0MjIsMTEgKzI1MTUsMTEgQEAKIAlkZXJvdCB8PSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENGUjApOwogCiAJZGVyb3QgPSBjb21wMihkZXJvdCwgMjQpOwotCWludF8xID0gc3RhdGUtPm1jbGsgPj4gMTI7CisJaW50XzEgPSBtY2xrID4+IDEyOwogCWludF8yID0gZGVyb3QgPj4gMTI7CiAKIAkvKiBjYXJyaWVyX2ZyZXF1ZW5jeSA9IE1hc3RlckNsb2NrICogUmVnIC8gMl4yNCAqLwotCXRtcF8xID0gc3RhdGUtPm1jbGsgJSAweDEwMDA7CisJdG1wXzEgPSBtY2xrICUgMHgxMDAwOwogCXRtcF8yID0gZGVyb3QgJSAweDEwMDA7CiAKIAlkZXJvdCA9IChpbnRfMSAqIGludF8yKSArCkBAIC0yNTAyLDEzICsyNTk1LDEzIEBACiAKIAlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeSkgewogCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeShmZSwgJnN0YXRlLT5mcmVxdWVuY3kpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCiAJCWdvdG8gZXJyOwogCi0Jb2Zmc3RfZnJlcSA9IHN0djA5MHhfZ2V0X2Nhcl9mcmVxKHN0YXRlLCBzdGF0ZS0+bWNsaykgLyAxMDAwOworCW9mZnN0X2ZyZXEgPSBzdHYwOTB4X2dldF9jYXJfZnJlcShzdGF0ZSwgc3RhdGUtPmludGVybmFsLT5tY2xrKSAvIDEwMDA7CiAJc3RhdGUtPmZyZXF1ZW5jeSArPSBvZmZzdF9mcmVxOwogCiAJaWYgKHN0djA5MHhfZ2V0X3ZpdGVyYmkoc3RhdGUpIDwgMCkKQEAgLTI1MzAsNyArMjYyMyw3IEBACiAKIAkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9mcmVxdWVuY3kpIHsKIAkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KGZlLCAmc3RhdGUtPmZyZXF1ZW5jeSkgPCAwKQotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJCX0KIAogCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC0yNTUwLDYgKzI2NDMsOSBAQAogCX0KIAogCXJldHVybiBTVFYwOTB4X09VVE9GUkFOR0U7CisKK2Vycl9nYXRlb2ZmOgorCXN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCk7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwogCXJldHVybiAtMTsKQEAgLTI1NzksNyArMjY3NSw3IEBACiAJczMyIGk7CiAJc3RydWN0IHN0djA5MHhfbG9uZ19mcmFtZV9jcmxvb3AgKmNhcl9sb29wLCAqY2FyX2xvb3BfcXBza19sb3csICpjYXJfbG9vcF9hcHNrX2xvdzsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA9PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA9PSAweDIwKSB7CiAJCWNhcl9sb29wCQk9IHN0djA5MHhfczJfY3JsX2N1dDIwOwogCQljYXJfbG9vcF9xcHNrX2xvdwk9IHN0djA5MHhfczJfbG93cXBza19jcmxfY3V0MjA7CiAJCWNhcl9sb29wX2Fwc2tfbG93CT0gc3R2MDkweF9zMl9hcHNrX2NybF9jdXQyMDsKQEAgLTI3MDAsNyArMjc5Niw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDMwKSB7CiAJCS8qIEN1dCAzLjAgYW5kIHVwICovCiAJCXNob3J0X2NybCA9IHN0djA5MHhfczJfc2hvcnRfY3JsX2N1dDMwOwogCX0gZWxzZSB7CkBAIC0yNzMyLDcgKzI4MjgsNyBAQAogCXMzMiBzcmF0ZSwgcGlsb3RzLCBhY2xjLCBmXzEsIGZfMCwgaSA9IDAsIGJsaW5kX3R1bmUgPSAwOwogCXUzMiByZWc7CiAKLQlzcmF0ZSAgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCXNyYXRlICA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCXNyYXRlICs9IHN0djA5MHhfZ2V0X3RtZ29mZnN0KHN0YXRlLCBzcmF0ZSk7CiAKIAlzd2l0Y2ggKHN0YXRlLT5kZWxzeXMpIHsKQEAgLTI3NTEsNyArMjg0Nyw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBERU1PRCwgcmVnKSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgzMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJCWlmIChzdHYwOTB4X2dldF92aXRlcmJpKHN0YXRlKSA8IDApCiAJCQkJZ290byBlcnI7CiAKQEAgLTI4NjgsNyArMjk2NCw3IEBACiAJCQlnb3RvIGVycjsKIAl9CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9EVkJTMSkJfHwKIAkJICAgIChzdGF0ZS0+c2VhcmNoX21vZGUgPT0gU1RWMDkweF9TRUFSQ0hfRFNTKQkJfHwKIAkJICAgIChzdGF0ZS0+c2VhcmNoX21vZGUgPT0gU1RWMDkweF9TRUFSQ0hfQVVUTykpIHsKQEAgLTI4OTAsNyArMjk4Niw4IEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzEsIDB4ODApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlpZiAoKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpIHx8IChzdGF0ZS0+c3JhdGUgPCAxMDAwMDAwMCkpIHsKKwlpZiAoKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB8fCAoYmxpbmRfdHVuZSA9PSAxKSB8fAorCSAgICAoc3RhdGUtPnNyYXRlIDwgMTAwMDAwMDApKSB7CiAJCS8qIHVwZGF0ZSBpbml0aWFsIGNhcnJpZXIgZnJlcSB3aXRoIHRoZSBmb3VuZCBmcmVxIG9mZnNldCAqLwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0ZSSU5JVDEsIGZfMSkgPCAwKQogCQkJZ290byBlcnI7CkBAIC0yODk4LDcgKzI5OTUsNyBAQAogCQkJZ290byBlcnI7CiAJCXN0YXRlLT50dW5lcl9idyA9IHN0djA5MHhfY2FyX3dpZHRoKHNyYXRlLCBzdGF0ZS0+cm9sbG9mZikgKyAxMDAwMDAwMDsKIAotCQlpZiAoKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpKSB7CisJCWlmICgoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpKSB7CiAKIAkJCWlmIChzdGF0ZS0+YWxnbyAhPSBTVFYwOTB4X1dBUk1fU0VBUkNIKSB7CiAKQEAgLTI5MDcsNyArMzAwNCw3IEBACiAKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aCkgewogCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQkJCQlnb3RvIGVycjsKKwkJCQkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJCQkJfQogCiAJCQkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMjk1MCw3ICszMDQ3LDcgQEAKIAogCX0KIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDQ5KSA8IDApCiAJCQlnb3RvIGVycjsKIAl9CkBAIC0yOTU5LDYgKzMwNTYsOSBAQAogCQlzdHYwOTB4X3NldF92aXRfdGh0cmFjcShzdGF0ZSk7CiAKIAlyZXR1cm4gMDsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMzAyNiw3ICszMTI2LDcgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJLyogcm9sbG9mZiB0byBhdXRvIG1vZGUgaWYgRFZCUzIgKi8KIAkJcmVnID0gU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBERU1PRCk7CiAJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBNQU5VQUxfU1hST0xMT0ZGX0ZJRUxELCAweDAwKTsKQEAgLTMwNjIsNyArMzE2Miw3IEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRElTVEFURSwgMHg1YykgPCAwKSAvKiBEZW1vZCBzdG9wICovCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJaWYgKHN0YXRlLT5zcmF0ZSA+IDUwMDAwMDApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDT1JSRUxBQlMsIDB4OWUpIDwgMCkKIAkJCQlnb3RvIGVycjsKQEAgLTMxMDIsNyArMzIwMiw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBR0MyUkVGLCAweDM4KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBLUkVGVE1HLCAweDVhKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoc3RhdGUtPmFsZ28gPT0gU1RWMDkweF9DT0xEX1NFQVJDSCkKQEAgLTMxMjAsOSArMzIyMCwxMSBAQAogCQlpZiAoc3R2MDkweF9zZXRfc3JhdGUoc3RhdGUsIHN0YXRlLT5zcmF0ZSkgPCAwKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKHN0djA5MHhfc2V0X21heF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGssIHN0YXRlLT5zcmF0ZSkgPCAwKQorCQlpZiAoc3R2MDkweF9zZXRfbWF4X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGssCisJCQkJCSAgc3RhdGUtPnNyYXRlKSA8IDApCiAJCQlnb3RvIGVycjsKLQkJaWYgKHN0djA5MHhfc2V0X21pbl9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGssIHN0YXRlLT5zcmF0ZSkgPCAwKQorCQlpZiAoc3R2MDkweF9zZXRfbWluX3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGssCisJCQkJCSAgc3RhdGUtPnNyYXRlKSA8IDApCiAJCQlnb3RvIGVycjsKIAogCQlpZiAoc3RhdGUtPnNyYXRlID49IDEwMDAwMDAwKQpAQCAtMzEzNiwxOCArMzIzOCwyMSBAQAogCQlnb3RvIGVycjsKIAogCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmJnYWluKSB7Ci0JCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmJnYWluKGZlLCAxMCkgPCAwKSAvKiAxMGRCICovCi0JCQlnb3RvIGVycjsKKwkJcmVnID0gc3RhdGUtPmNvbmZpZy0+dHVuZXJfYmJnYWluOworCQlpZiAocmVnID09IDApCisJCQlyZWcgPSAxMDsgLyogZGVmYXVsdDogMTBkQiAqLworCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JiZ2FpbihmZSwgcmVnKSA8IDApCisJCQlnb3RvIGVycl9nYXRlb2ZmOwogCX0KIAogCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfZnJlcXVlbmN5KSB7CiAJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfZnJlcXVlbmN5KGZlLCBzdGF0ZS0+ZnJlcXVlbmN5KSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgpIHsKIAkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgoZmUsIHN0YXRlLT50dW5lcl9idykgPCAwKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9nYXRlb2ZmOwogCX0KIAogCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKQEAgLTMxNTUsMjIgKzMyNjAsMjIgQEAKIAogCW1zbGVlcCg1MCk7CiAKLQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAxKSA8IDApCi0JCWdvdG8gZXJyOwotCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMpIHsKLQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMoZmUsICZyZWcpIDwgMCkKKwkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMSkgPCAwKQogCQkJZ290byBlcnI7CisJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfc3RhdHVzKGZlLCAmcmVnKSA8IDApCisJCQlnb3RvIGVycl9nYXRlb2ZmOworCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCisJCQlnb3RvIGVycjsKKworCQlpZiAocmVnKQorCQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHBoYXNlIGxvY2tlZCIpOworCQllbHNlIHsKKwkJCWRwcmludGsoRkVfREVCVUcsIDEsICJUdW5lciB1bmxvY2tlZCIpOworCQkJcmV0dXJuIFNUVjA5MHhfTk9DQVJSSUVSOworCQl9CiAJfQogCi0JaWYgKHJlZykKLQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHBoYXNlIGxvY2tlZCIpOwotCWVsc2UKLQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHVubG9ja2VkIik7Ci0KLQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCi0JCWdvdG8gZXJyOwotCiAJbXNsZWVwKDEwKTsKIAlhZ2MxX3Bvd2VyID0gTUFLRVdPUkQxNihTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIEFHQ0lRSU4xKSwKIAkJCQlTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIEFHQ0lRSU4wKSk7CkBAIC0zMTk0LDcgKzMyOTksNyBAQAogCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERFTU9EKTsKIAkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIFNQRUNJTlZfQ09OVFJPTF9GSUVMRCwgc3RhdGUtPmludmVyc2lvbik7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA8PSAweDIwKSB7CiAJCQkvKiByb2xsb2ZmIHRvIGF1dG8gbW9kZSBpZiBEVkJTMiAqLwogCQkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIE1BTlVBTF9TWFJPTExPRkZfRklFTEQsIDEpOwogCQl9IGVsc2UgewpAQCAtMzIzOCw3ICszMzQzLDcgQEAKIAlpZiAoKGxvY2spICYmIChzaWduYWxfc3RhdGUgPT0gU1RWMDkweF9SQU5HRU9LKSkgeyAvKiBzaWduYWwgd2l0aGluIFJhbmdlICovCiAJCXN0djA5MHhfb3B0aW1pemVfdHJhY2soc3RhdGUpOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJLyogPj0gQ3V0IDIuMCA6cmVsZWFzZSBUUyByZXNldCBhZnRlcgogCQkJICogZGVtb2QgbG9jayBhbmQgb3B0aW1pemVkIFRyYWNraW5nCiAJCQkgKi8KQEAgLTMyOTMsNiArMzM5OCw4IEBACiAJfQogCXJldHVybiBzaWduYWxfc3RhdGU7CiAKK2Vycl9nYXRlb2ZmOgorCXN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCk7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwogCXJldHVybiAtMTsKQEAgLTMzMDMsNiArMzQxMCw5IEBACiAJc3RydWN0IHN0djA5MHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpwcm9wcyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCisJaWYgKHAtPmZyZXF1ZW5jeSA9PSAwKQorCQlyZXR1cm4gRFZCRkVfQUxHT19TRUFSQ0hfSU5WQUxJRDsKKwogCXN0YXRlLT5kZWxzeXMgPSBwcm9wcy0+ZGVsaXZlcnlfc3lzdGVtOwogCXN0YXRlLT5mcmVxdWVuY3kgPSBwLT5mcmVxdWVuY3k7CiAJc3RhdGUtPnNyYXRlID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlOwpAQCAtMzM1Myw3ICszNDYzLDggQEAKIAkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgUEtUREVMSU5fTE9DS19GSUVMRCkpIHsKIAkJCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIFRTU1RBVFVTKTsKIAkJCQlpZiAoU1RWMDkweF9HRVRGSUVMRF9QeChyZWcsIFRTRklGT19MSU5FT0tfRklFTEQpKSB7Ci0JCQkJCSpzdGF0dXMgPSBGRV9IQVNfQ0FSUklFUiB8CisJCQkJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwKKwkJCQkJCSAgRkVfSEFTX0NBUlJJRVIgfAogCQkJCQkJICBGRV9IQVNfVklURVJCSSB8CiAJCQkJCQkgIEZFX0hBU19TWU5DIHwKIAkJCQkJCSAgRkVfSEFTX0xPQ0s7CkBAIC0zMzcwLDcgKzM0ODEsMTEgQEAKIAkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgTE9DS0VEVklUX0ZJRUxEKSkgewogCQkJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgVFNTVEFUVVMpOwogCQkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgVFNGSUZPX0xJTkVPS19GSUVMRCkpIHsKLQkJCQkJKnN0YXR1cyA9IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1ZJVEVSQkkgfCBGRV9IQVNfU1lOQyB8IEZFX0hBU19MT0NLOworCQkJCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8CisJCQkJCQkgIEZFX0hBU19DQVJSSUVSIHwKKwkJCQkJCSAgRkVfSEFTX1ZJVEVSQkkgfAorCQkJCQkJICBGRV9IQVNfU1lOQyB8CisJCQkJCQkgIEZFX0hBU19MT0NLOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMzc3MCw2ICszODg1LDE1IEBACiB7CiAJc3RydWN0IHN0djA5MHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKKwlzdGF0ZS0+aW50ZXJuYWwtPm51bV91c2VkLS07CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+bnVtX3VzZWQgPD0gMCkgeworCisJCWRwcmludGsoRkVfRVJST1IsIDEsICJBY3R1YWxseSByZW1vdmluZyIpOworCisJCXJlbW92ZV9kZXYoc3RhdGUtPmludGVybmFsKTsKKwkJa2ZyZWUoc3RhdGUtPmludGVybmFsKTsKKwl9CisKIAlrZnJlZShzdGF0ZSk7CiB9CiAKQEAgLTM5MDEsMTAgKzQwMjUsMTAgQEAKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfTkNPQVJTRSwgcmVnKSA8IDApCiAJCWdvdG8gZXJyOwogCi0Jc3RhdGUtPm1jbGsgPSBzdHYwOTB4X2dldF9tY2xrKHN0YXRlKTsKKwlzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPSBzdHYwOTB4X2dldF9tY2xrKHN0YXRlKTsKIAogCS8qU2V0IHRoZSBEaXNlcUMgZnJlcXVlbmN5IHRvIDIyS0h6ICovCi0JZGl2ID0gc3RhdGUtPm1jbGsgLyA3MDQwMDA7CisJZGl2ID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8gNzA0MDAwOwogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGMjJUWCwgZGl2KSA8IDApCiAJCWdvdG8gZXJyOwogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGMjJSWCwgZGl2KSA8IDApCkBAIC0zOTIwLDcgKzQwNDQsNyBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnRzMV9tb2RlKSB7CiAJCWNhc2UgU1RWMDkweF9UU01PREVfUEFSQUxMRUxfUFVOQ1RVUkVEOgogCQljYXNlIFNUVjA5MHhfVFNNT0RFX0RWQkNJOgpAQCAtNDA5Miw2ICs0MjE2LDcxIEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCisJaWYgKHN0YXRlLT5jb25maWctPnRzMV9jbGsgPiAwKSB7CisJCXUzMiBzcGVlZDsKKworCQlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnRzMV9tb2RlKSB7CisJCWNhc2UgU1RWMDkweF9UU01PREVfUEFSQUxMRUxfUFVOQ1RVUkVEOgorCQljYXNlIFNUVjA5MHhfVFNNT0RFX0RWQkNJOgorCQlkZWZhdWx0OgorCQkJc3BlZWQgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLworCQkJCShzdGF0ZS0+Y29uZmlnLT50czFfY2xrIC8gNCk7CisJCQlpZiAoc3BlZWQgPCAweDA4KQorCQkJCXNwZWVkID0gMHgwODsKKwkJCWlmIChzcGVlZCA+IDB4RkYpCisJCQkJc3BlZWQgPSAweEZGOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRDoKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfQ09OVElOVU9VUzoKKwkJCXNwZWVkID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8KKwkJCQkoc3RhdGUtPmNvbmZpZy0+dHMxX2NsayAvIDMyKTsKKwkJCWlmIChzcGVlZCA8IDB4MjApCisJCQkJc3BlZWQgPSAweDIwOworCQkJaWYgKHNwZWVkID4gMHhGRikKKwkJCQlzcGVlZCA9IDB4RkY7CisJCQlicmVhazsKKwkJfQorCQlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX1RTQ0ZHTSk7CisJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBUU0ZJRk9fTUFOU1BFRURfRklFTEQsIDMpOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfVFNDRkdNLCByZWcpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfVFNTUEVFRCwgc3BlZWQpIDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChzdGF0ZS0+Y29uZmlnLT50czJfY2xrID4gMCkgeworCQl1MzIgc3BlZWQ7CisKKwkJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLT50czJfbW9kZSkgeworCQljYXNlIFNUVjA5MHhfVFNNT0RFX1BBUkFMTEVMX1BVTkNUVVJFRDoKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9EVkJDSToKKwkJZGVmYXVsdDoKKwkJCXNwZWVkID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8KKwkJCQkoc3RhdGUtPmNvbmZpZy0+dHMyX2NsayAvIDQpOworCQkJaWYgKHNwZWVkIDwgMHgwOCkKKwkJCQlzcGVlZCA9IDB4MDg7CisJCQlpZiAoc3BlZWQgPiAweEZGKQorCQkJCXNwZWVkID0gMHhGRjsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MHhfVFNNT0RFX1NFUklBTF9QVU5DVFVSRUQ6CisJCWNhc2UgU1RWMDkweF9UU01PREVfU0VSSUFMX0NPTlRJTlVPVVM6CisJCQlzcGVlZCA9IHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvCisJCQkJKHN0YXRlLT5jb25maWctPnRzMl9jbGsgLyAzMik7CisJCQlpZiAoc3BlZWQgPCAweDIwKQorCQkJCXNwZWVkID0gMHgyMDsKKwkJCWlmIChzcGVlZCA+IDB4RkYpCisJCQkJc3BlZWQgPSAweEZGOworCQkJYnJlYWs7CisJCX0KKwkJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9QMl9UU0NGR00pOworCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgVFNGSUZPX01BTlNQRUVEX0ZJRUxELCAzKTsKKwkJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHTSwgcmVnKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTU1BFRUQsIHNwZWVkKSA8IDApCisJCQlnb3RvIGVycjsKKwl9CisKIAlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHSCk7CiAJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIFJTVF9IV0FSRV9GSUVMRCwgMHgwMSk7CiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHSCwgcmVnKSA8IDApCkBAIC00MTIwLDYgKzQzMDksMTUgQEAKIAljb25zdCBzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKmNvbmZpZyA9IHN0YXRlLT5jb25maWc7CiAJdTMyIHJlZzsKIAorCWlmIChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPT0gMCkgeworCQlzdHYwOTB4X3NldF9tY2xrKHN0YXRlLCAxMzUwMDAwMDAsIGNvbmZpZy0+eHRhbCk7IC8qIDEzNSBNaHogKi8KKwkJbXNsZWVwKDUpOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1lOVENUUkwsCisJCQkJICAgICAgMHgyMCB8IGNvbmZpZy0+Y2xrX21vZGUpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlzdHYwOTB4X2dldF9tY2xrKHN0YXRlKTsKKwl9CisKIAlpZiAoc3R2MDkweF93YWtldXAoZmUpIDwgMCkgewogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiRXJyb3Igd2FraW5nIGRldmljZSIpOwogCQlnb3RvIGVycjsKQEAgLTQxNDIsMTIgKzQzNDAsMTIgQEAKIAogCWlmIChjb25maWctPnR1bmVyX3NldF9tb2RlKSB7CiAJCWlmIChjb25maWctPnR1bmVyX3NldF9tb2RlKGZlLCBUVU5FUl9XQUtFKSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKGNvbmZpZy0+dHVuZXJfaW5pdCkgewogCQlpZiAoY29uZmlnLT50dW5lcl9pbml0KGZlKSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtNDE1Nyw2ICs0MzU1LDkgQEAKIAkJZ290byBlcnI7CiAKIAlyZXR1cm4gMDsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtNDE4OCwxNiArNDM4OSwyNiBAQAogCX0KIAogCS8qIFNUVjA5MHggaW5pdCAqLwotCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBETURJU1RBVEUsIDB4NWMpIDwgMCkgLyogU3RvcCBEZW1vZCAqLworCisJLyogU3RvcCBEZW1vZCAqLworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9ETURJU1RBVEUsIDB4NWMpIDwgMCkKKwkJZ290byBlcnI7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX0RNRElTVEFURSwgMHg1YykgPCAwKQogCQlnb3RvIGVycjsKIAogCW1zbGVlcCg1KTsKIAotCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBUTlJDRkcsIDB4NmMpIDwgMCkgLyogY2hlY2sgcmVnaXN0ZXIgISAoTm8gVHVuZXIgTW9kZSkgKi8KKwkvKiBTZXQgTm8gVHVuZXIgTW9kZSAqLworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9UTlJDRkcsIDB4NmMpIDwgMCkKKwkJZ290byBlcnI7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1ROUkNGRywgMHg2YykgPCAwKQogCQlnb3RvIGVycjsKIAorCS8qIEkyQyByZXBlYXRlciBPRkYgKi8KIAlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRU5BUlBUX0xFVkVMX0ZJRUxELCBjb25maWctPnJlcGVhdGVyX2xldmVsKTsKLQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgSTJDUlBULCByZWcpIDwgMCkgLyogcmVwZWF0ZXIgT0ZGICovCisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX0kyQ1JQVCwgcmVnKSA8IDApCisJCWdvdG8gZXJyOworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMl9JMkNSUFQsIHJlZykgPCAwKQogCQlnb3RvIGVycjsKIAogCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9OQ09BUlNFLCAweDEzKSA8IDApIC8qIHNldCBQTEwgZGl2aWRlciAqLwpAQCAtNDIxNiw4ICs0NDI3LDggQEAKIAkJCWdvdG8gZXJyOwogCX0KIAotCXN0YXRlLT5kZXZfdmVyID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9NSUQpOwotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9NSUQpOworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNHRU5FUkFMLCAweDBjKSA8IDApCiAJCQlnb3RvIGVycjsKIApAQCAtNDIyOCwyOCArNDQzOSwzNiBAQAogCQkJCWdvdG8gZXJyOwogCQl9CiAKLQl9IGVsc2UgaWYgKHN0YXRlLT5kZXZfdmVyIDwgMHgyMCkgeworCX0gZWxzZSBpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDwgMHgyMCkgewogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiRVJST1I6IFVuc3VwcG9ydGVkIEN1dDogMHglMDJ4ISIsCi0JCQlzdGF0ZS0+ZGV2X3Zlcik7CisJCQlzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIpOwogCiAJCWdvdG8gZXJyOwotCX0gZWxzZSBpZiAoc3RhdGUtPmRldl92ZXIgPiAweDMwKSB7CisJfSBlbHNlIGlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPiAweDMwKSB7CiAJCS8qIHdlIHNob3VsZG4ndCBiYWlsIG91dCBmcm9tIGhlcmUgKi8KIAkJZHByaW50ayhGRV9FUlJPUiwgMSwgIklORk86IEN1dDogMHglMDJ4IHByb2JhYmx5IGluY29tcGxldGUgc3VwcG9ydCEiLAotCQkJc3RhdGUtPmRldl92ZXIpOworCQkJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKTsKIAl9CiAKKwkvKiBBREMxIHJhbmdlICovCisJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9UU1RUTlIxKTsKKwlTVFYwOTB4X1NFVEZJRUxEKHJlZywgQURDMV9JTk1PREVfRklFTEQsCisJCShjb25maWctPmFkYzFfcmFuZ2UgPT0gU1RWMDkweF9BRENfMVZwcCkgPyAwIDogMSk7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFROUjEsIHJlZykgPCAwKQorCQlnb3RvIGVycjsKKworCS8qIEFEQzIgcmFuZ2UgKi8KKwlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFROUjMpOworCVNUVjA5MHhfU0VURklFTEQocmVnLCBBREMyX0lOTU9ERV9GSUVMRCwKKwkJKGNvbmZpZy0+YWRjMl9yYW5nZSA9PSBTVFYwOTB4X0FEQ18xVnBwKSA/IDAgOiAxKTsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUVE5SMywgcmVnKSA8IDApCisJCWdvdG8gZXJyOworCiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFJFUzAsIDB4ODApIDwgMCkKIAkJZ290byBlcnI7CiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFJFUzAsIDB4MDApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlzdHYwOTB4X3NldF9tY2xrKHN0YXRlLCAxMzUwMDAwMDAsIGNvbmZpZy0+eHRhbCk7IC8qIDEzNSBNaHogKi8KLQltc2xlZXAoNSk7Ci0JaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1NZTlRDVFJMLCAweDIwIHwgY29uZmlnLT5jbGtfbW9kZSkgPCAwKQotCQlnb3RvIGVycjsKLQlzdHYwOTB4X2dldF9tY2xrKHN0YXRlKTsKLQogCXJldHVybiAwOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKQEAgLTQyOTksNiArNDUxOCw3IEBACiAJCQkJICAgIGVudW0gc3R2MDkweF9kZW1vZHVsYXRvciBkZW1vZCkKIHsKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCXN0cnVjdCBzdHYwOTB4X2RldiAqdGVtcF9pbnQ7CiAKIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQpAQCAtNDMxNCw4ICs0NTM0LDMyIEBACiAJc3RhdGUtPmRldmljZQkJCQk9IGNvbmZpZy0+ZGV2aWNlOwogCXN0YXRlLT5yb2xsb2ZmCQkJCT0gU1RWMDkweF9ST18zNTsgLyogZGVmYXVsdCAqLwogCi0JaWYgKHN0YXRlLT5kZW1vZCA9PSBTVFYwOTB4X0RFTU9EVUxBVE9SXzApCi0JCW11dGV4X2luaXQoJmRlbW9kX2xvY2spOworCXRlbXBfaW50ID0gZmluZF9kZXYoc3RhdGUtPmkyYywKKwkJCQlzdGF0ZS0+Y29uZmlnLT5hZGRyZXNzKTsKKworCWlmICgodGVtcF9pbnQgIT0gTlVMTCkgJiYgKHN0YXRlLT5kZW1vZF9tb2RlID09IFNUVjA5MHhfRFVBTCkpIHsKKwkJc3RhdGUtPmludGVybmFsID0gdGVtcF9pbnQtPmludGVybmFsOworCQlzdGF0ZS0+aW50ZXJuYWwtPm51bV91c2VkKys7CisJCWRwcmludGsoRkVfSU5GTywgMSwgIkZvdW5kIEludGVybmFsIFN0cnVjdHVyZSEiKTsKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkF0dGFjaGluZyAlcyBkZW1vZHVsYXRvciglZCkgQ3V0PTB4JTAyeCIsCisJCQlzdGF0ZS0+ZGV2aWNlID09IFNUVjA5MDAgPyAiU1RWMDkwMCIgOiAiU1RWMDkwMyIsCisJCQlkZW1vZCwKKwkJCXN0YXRlLT5pbnRlcm5hbC0+ZGV2X3Zlcik7CisJCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworCX0gZWxzZSB7CisJCXN0YXRlLT5pbnRlcm5hbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHYwOTB4X2ludGVybmFsKSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwkJdGVtcF9pbnQgPSBhcHBlbmRfaW50ZXJuYWwoc3RhdGUtPmludGVybmFsKTsKKwkJc3RhdGUtPmludGVybmFsLT5udW1fdXNlZCA9IDE7CisJCXN0YXRlLT5pbnRlcm5hbC0+bWNsayA9IDA7CisJCXN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA9IDA7CisJCXN0YXRlLT5pbnRlcm5hbC0+aTJjX2FkYXAgPSBzdGF0ZS0+aTJjOworCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGRyID0gc3RhdGUtPmNvbmZpZy0+YWRkcmVzczsKKwkJZHByaW50ayhGRV9JTkZPLCAxLCAiQ3JlYXRlIE5ldyBJbnRlcm5hbCBTdHJ1Y3R1cmUhIik7CisJfQorCisJbXV0ZXhfaW5pdCgmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKKwltdXRleF9pbml0KCZzdGF0ZS0+aW50ZXJuYWwtPnR1bmVyX2xvY2spOwogCiAJaWYgKHN0djA5MHhfc2xlZXAoJnN0YXRlLT5mcm9udGVuZCkgPCAwKSB7CiAJCWRwcmludGsoRkVfRVJST1IsIDEsICJFcnJvciBwdXR0aW5nIGRldmljZSB0byBzbGVlcCIpOwpAQCAtNDMzMSwxMCArNDU3NSwxMCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWRwcmludGsoRkVfRVJST1IsIDEsICJBdHRhY2hpbmcgJXMgZGVtb2R1bGF0b3IoJWQpIEN1dD0weCUwMnhcbiIsCisJZHByaW50ayhGRV9FUlJPUiwgMSwgIkF0dGFjaGluZyAlcyBkZW1vZHVsYXRvciglZCkgQ3V0PTB4JTAyeCIsCiAJICAgICAgIHN0YXRlLT5kZXZpY2UgPT0gU1RWMDkwMCA/ICJTVFYwOTAwIiA6ICJTVFYwOTAzIiwKIAkgICAgICAgZGVtb2QsCi0JICAgICAgIHN0YXRlLT5kZXZfdmVyKTsKKwkgICAgICAgc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKTsKIAogCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguaAppbmRleCBiMTMzODA3Li4zMGYwMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmgKQEAgLTYwLDYgKzYwLDExIEBACiAJU1RWMDkweF9SUFRMRVZFTF8yCT0gNywKIH07CiAKK2VudW0gc3R2MDkweF9hZGNfcmFuZ2UgeworCVNUVjA5MHhfQURDXzJWcHAJPSAwLAorCVNUVjA5MHhfQURDXzFWcHAJPSAxCit9OworCiBzdHJ1Y3Qgc3R2MDkweF9jb25maWcgewogCWVudW0gc3R2MDkweF9kZXZpY2UJZGV2aWNlOwogCWVudW0gc3R2MDkweF9tb2RlCWRlbW9kX21vZGU7CkBAIC02OCwxMyArNzMsMTcgQEAKIAl1MzIgeHRhbDsgLyogZGVmYXVsdDogODAwMDAwMCAqLwogCXU4IGFkZHJlc3M7IC8qIGRlZmF1bHQ6IDB4NjggKi8KIAotCXUzMiByZWZfY2xrOyAvKiBkZWZhdWx0OiAxNjAwMDAwMCBGSVhNRSB0byB0dW5lciBjb25maWcgKi8KLQogCXU4IHRzMV9tb2RlOwogCXU4IHRzMl9tb2RlOworCXUzMiB0czFfY2xrOworCXUzMiB0czJfY2xrOwogCiAJZW51bSBzdHYwOTB4X2kyY3JwdAlyZXBlYXRlcl9sZXZlbDsKIAorCXU4CQkJdHVuZXJfYmJnYWluOyAvKiBkZWZhdWx0OiAxMGRiICovCisJZW51bSBzdHYwOTB4X2FkY19yYW5nZQlhZGMxX3JhbmdlOyAvKiBkZWZhdWx0OiAyVnBwICovCisJZW51bSBzdHYwOTB4X2FkY19yYW5nZQlhZGMyX3JhbmdlOyAvKiBkZWZhdWx0OiAyVnBwICovCisKIAlib29sIGRpc2VxY19lbnZlbG9wZV9tb2RlOwogCiAJaW50ICgqdHVuZXJfaW5pdCkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4X3ByaXYuaAppbmRleCA1OTIxYThkLi41Yjc4MGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHhfcHJpdi5oCkBAIC0yMzAsMTEgKzIzMCwyMyBAQAogCXMzMiByZWFkOwogfTsKIAorc3RydWN0IHN0djA5MHhfaW50ZXJuYWwgeworCXN0cnVjdCBpMmNfYWRhcHRlciAJKmkyY19hZGFwOworCXU4CQkJaTJjX2FkZHI7CisKKwlzdHJ1Y3QgbXV0ZXgJCWRlbW9kX2xvY2s7IC8qIExvY2sgYWNjZXNzIHRvIHNoYXJlZCByZWdpc3RlciAqLworCXN0cnVjdCBtdXRleAkJdHVuZXJfbG9jazsgLyogTG9jayBhY2Nlc3MgdG8gdHVuZXJzICovCisJczMyCQkJbWNsazsgLyogTWFzdGVyY2xvY2sgRGl2aWRlciBmYWN0b3IgKi8KKwl1MzIJCQlkZXZfdmVyOworCisJaW50CQkJbnVtX3VzZWQ7Cit9OworCiBzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSB7CiAJZW51bSBzdHYwOTB4X2RldmljZQkJZGV2aWNlOwogCWVudW0gc3R2MDkweF9kZW1vZHVsYXRvcglkZW1vZDsKIAllbnVtIHN0djA5MHhfbW9kZQkJZGVtb2RfbW9kZTsKLQl1MzIJCQkJZGV2X3ZlcjsKKwlzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbAkJKmludGVybmFsOwogCiAJc3RydWN0IGkyY19hZGFwdGVyCQkqaTJjOwogCWNvbnN0IHN0cnVjdCBzdHYwOTB4X2NvbmZpZwkqY29uZmlnOwpAQCAtMjU2LDExICsyNjgsOCBAQAogCXUzMgkJCQlmcmVxdWVuY3k7CiAJdTMyCQkJCXNyYXRlOwogCi0JczMyCQkJCW1jbGs7IC8qIE1hc3RlcmNsb2NrIERpdmlkZXIgZmFjdG9yICovCiAJczMyCQkJCXR1bmVyX2J3OwogCi0JdTMyCQkJCXR1bmVyX3JlZmNsazsKLQogCXMzMgkJCQlzZWFyY2hfcmFuZ2U7CiAKIAlzMzIJCQkJRGVtb2RUaW1lb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYwppbmRleCBiY2ZjYjY1Li5mOTMxZWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYwpAQCAtMzUsOCArMzUsNiBAQAogbW9kdWxlX3BhcmFtKHZlcmJvc2UsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZlcmJvc2UsICJTZXQgVmVyYm9zaXR5IGxldmVsIik7CiAKLXN0YXRpYyB1OCBzdHY2MTEweF9yZWdzW10gPSB7MHgwNywgMHgxMSwgMHhkYywgMHg4NSwgMHgxNywgMHgwMSwgMHhlNiwgMHgxZX07Ci0KIHN0YXRpYyBpbnQgc3R2NjExMHhfcmVhZF9yZWcoc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCwgdTggcmVnLCB1OCAqZGF0YSkKIHsKIAlpbnQgcmV0OwpAQCAtNTgsMTIgKzU2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3R2NjExMHhfd3JpdGVfcmVnKHN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHgsIHU4IHJlZywgdTggZGF0YSkKK3N0YXRpYyBpbnQgc3R2NjExMHhfd3JpdGVfcmVncyhzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4LCBpbnQgc3RhcnQsIHU4IGRhdGFbXSwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBzdHY2MTEweF9jb25maWcgKmNvbmZpZyA9IHN0djYxMTB4LT5jb25maWc7Ci0JdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBjb25maWctPmFkZHIsIC5mbGFncyA9IDAsIC4gYnVmID0gYnVmLCAubGVuID0gMiB9OworCXU4IGJ1ZltsZW4gKyAxXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gY29uZmlnLT5hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLAorCQkubGVuID0gbGVuICsgMQorCX07CisKKwlpZiAoc3RhcnQgKyBsZW4gPiA4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZlswXSA9IHN0YXJ0OworCW1lbWNweSgmYnVmWzFdLCBkYXRhLCBsZW4pOwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0djYxMTB4LT5pMmMsICZtc2csIDEpOwogCWlmIChyZXQgIT0gMSkgewpAQCAtNzQsMTggKzgzLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3R2NjExMHhfd3JpdGVfcmVnKHN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHgsIHU4IHJlZywgdTggZGF0YSkKK3sKKwlyZXR1cm4gc3R2NjExMHhfd3JpdGVfcmVncyhzdHY2MTEweCwgcmVnLCAmZGF0YSwgMSk7Cit9CisKIHN0YXRpYyBpbnQgc3R2NjExMHhfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAJaW50IHJldDsKLQl1OCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3R2NjExMHhfcmVncyk7IGkrKykgewotCQlyZXQgPSBzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIGksIHN0djYxMTB4X3JlZ3NbaV0pOwotCQlpZiAocmV0IDwgMCkgewotCQkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwotCQkJcmV0dXJuIC0xOwotCQl9CisJcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVncyhzdHY2MTEweCwgMCwgc3R2NjExMHgtPnJlZ3MsCisJCQkJICBBUlJBWV9TSVpFKHN0djYxMTB4LT5yZWdzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05OCwyMyArMTEwLDIzIEBACiAJczMyIHBWYWwsIHBDYWxjLCByRGl2T3B0ID0gMCwgcENhbGNPcHQgPSAxMDAwOwogCXU4IGk7CiAKLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfSywgKFJFRkNMT0NLX01IeiAtIDE2KSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9LLCAoUkVGQ0xPQ0tfTUh6IC0gMTYpKTsKIAogCWlmIChmcmVxdWVuY3kgPD0gMTAyMzAwMCkgewotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDEpOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMCk7CiAJCXBWYWwgPSA0MDsKIAl9IGVsc2UgaWYgKGZyZXF1ZW5jeSA8PSAxMzAwMDAwKSB7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMSk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAxKTsKIAkJcFZhbCA9IDQwOwogCX0gZWxzZSBpZiAoZnJlcXVlbmN5IDw9IDIwNDYwMDApIHsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDApOwogCQlwVmFsID0gMjA7CiAJfSBlbHNlIHsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDEpOwogCQlwVmFsID0gMjA7CiAJfQogCkBAIC0xMzAsMjEgKzE0MiwyMSBAQAogCWRpdmlkZXIgPSAoZnJlcXVlbmN5ICogUl9ESVYockRpdk9wdCkgKiBwVmFsKSAvIFJFRkNMT0NLX2tIejsKIAlkaXZpZGVyID0gKGRpdmlkZXIgKyA1KSAvIDEwOwogCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9SX0RJViwgckRpdk9wdCk7Ci0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9OX0RJVl8xMV84LCBNU0IoZGl2aWRlcikpOwotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMF0sIFRORzBfTl9ESVZfN18wLCBMU0IoZGl2aWRlcikpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1JfRElWLCByRGl2T3B0KTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9OX0RJVl8xMV84LCBNU0IoZGl2aWRlcikpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzBdLCBUTkcwX05fRElWXzdfMCwgTFNCKGRpdmlkZXIpKTsKIAogCS8qIFZDTyBBdXRvIGNhbGlicmF0aW9uICovCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFZDT19TVFJULCAxKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFZDT19TVFJULCAxKTsKIAotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDEsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0pOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcwXSk7Ci0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcxLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcwXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKTsKIAogCWZvciAoaSA9IDA7IGkgPCBUUklBTFM7IGkrKykgewotCQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSk7Ci0JCWlmICghU1RWNjExMHhfR0VURklFTEQoU1RBVDFfQ0FMVkNPX1NUUlQsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKSkKKwkJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxWQ09fU1RSVCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKSkKIAkJCQlicmVhazsKIAkJbXNsZWVwKDEpOwogCX0KQEAgLTE1NiwxNCArMTY4LDE0IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0Jc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdKTsKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMCwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMF0pOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcxLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0pOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMF0pOwogCi0JKmZyZXF1ZW5jeSA9IChNQUtFV09SRDE2KFNUVjYxMTB4X0dFVEZJRUxEKFRORzFfTl9ESVZfMTFfOCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSksCi0JCQkJIFNUVjYxMTB4X0dFVEZJRUxEKFRORzBfTl9ESVZfN18wLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzBdKSkpICogUkVGQ0xPQ0tfa0h6OworCSpmcmVxdWVuY3kgPSAoTUFLRVdPUkQxNihTVFY2MTEweF9HRVRGSUVMRChUTkcxX05fRElWXzExXzgsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdKSwKKwkJCQkgU1RWNjExMHhfR0VURklFTEQoVE5HMF9OX0RJVl83XzAsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzBdKSkpICogUkVGQ0xPQ0tfa0h6OwogCi0JKmZyZXF1ZW5jeSAvPSAoMSA8PCAoU1RWNjExMHhfR0VURklFTEQoVE5HMV9SX0RJViwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSkgKwotCQkJICAgICBTVFY2MTEweF9HRVRGSUVMRChUTkcxX0RJVjRTRUwsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0pKSk7CisJKmZyZXF1ZW5jeSAvPSAoMSA8PCAoU1RWNjExMHhfR0VURklFTEQoVE5HMV9SX0RJViwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0pICsKKwkJCSAgICAgU1RWNjExMHhfR0VURklFTEQoVE5HMV9ESVY0U0VMLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSkpKTsKIAogCSpmcmVxdWVuY3kgPj49IDI7CiAKQEAgLTE3OSwyNyArMTkxLDI3IEBACiAJaGFsZmJ3ID0gYmFuZHdpZHRoID4+IDE7CiAKIAlpZiAoaGFsZmJ3ID4gMzYwMDAwMDApCi0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMzEpOyAvKiBMUEYgKi8KKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMzEpOyAvKiBMUEYgKi8KIAllbHNlIGlmIChoYWxmYncgPCA1MDAwMDAwKQotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfQ0YsIDApOyAvKiBMUEYgKi8KKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMCk7IC8qIExQRiAqLwogCWVsc2UKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAoKGhhbGZidyAvIDEwMDAwMDApIC0gNSkpOyAvKiBMUEYgKi8KKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgKChoYWxmYncgLyAxMDAwMDAwKSAtIDUpKTsgLyogTFBGICovCiAKIAotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19SQ0NMS19PRkYsIDB4MCk7IC8qIGNhbC4gY2xrIGFjdGl2YXRlZCAqLwotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdLCBTVEFUMV9DQUxSQ19TVFJULCAweDEpOyAvKiBMUEYgYXV0byBjYWwgKi8KKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgwKTsgLyogY2FsLiBjbGsgYWN0aXZhdGVkICovCisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdLCBTVEFUMV9DQUxSQ19TVFJULCAweDEpOyAvKiBMUEYgYXV0byBjYWwgKi8KIAotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOwogCiAJZm9yIChpID0gMDsgaSA8IFRSSUFMUzsgaSsrKSB7Ci0JCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKLQkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxSQ19TVFJULCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSkpCisJCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CisJCWlmICghU1RWNjExMHhfR0VURklFTEQoU1RBVDFfQ0FMUkNfU1RSVCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKSkKIAkJCWJyZWFrOwogCQltc2xlZXAoMSk7CiAJfQotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19SQ0NMS19PRkYsIDB4MSk7IC8qIGNhbC4gZG9uZSAqLwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgxKTsgLyogY2FsLiBkb25lICovCisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjA4LDggKzIyMCw4IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0Jc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwzLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pOwotCSpiYW5kd2lkdGggPSAoU1RWNjExMHhfR0VURklFTEQoQ1RSTDNfQ0YsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdKSArIDUpICogMjAwMDAwMDsKKwlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10pOworCSpiYW5kd2lkdGggPSAoU1RWNjExMHhfR0VURklFTEQoQ1RSTDNfQ0YsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSkgKyA1KSAqIDIwMDAwMDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMiwyMCArMjM0LDIwIEBACiAJc3dpdGNoIChyZWZjbG9jaykgewogCWRlZmF1bHQ6CiAJY2FzZSAxOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDApOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMSk7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMik7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAyKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgogCWNhc2UgMDoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMyk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAzKTsKIAkJYnJlYWs7CiAJfQotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwyLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQsOCArMjU2LDggQEAKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSk7Ci0JKmdhaW4gPSAyICogU1RWNjExMHhfR0VURklFTEQoQ1RSTDJfQkJHQUlOLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CisJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwyLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwkqZ2FpbiA9IDIgKiBTVFY2MTEweF9HRVRGSUVMRChDVFJMMl9CQkdBSU4sIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1NCw4ICsyNjYsOCBAQAogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9CQkdBSU4sIGdhaW4gLyAyKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwyLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9CQkdBSU4sIGdhaW4gLyAyKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwyLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjcsMTkgKzI3OSwxOSBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBUVU5FUl9TTEVFUDoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1NZTiwgMCk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9SWCwgMCk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9MUFQsIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1NZTiwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfUlgsIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0xQVCwgMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBUVU5FUl9XQUtFOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAxKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1JYLCAxKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0xQVCwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9SWCwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfTFBULCAxKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0pOworCXJldCA9IHN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBFcnJvciIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTI5Nyw5ICszMDksOSBAQAogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAotCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOwogCi0JaWYgKFNUVjYxMTB4X0dFVEZJRUxEKFNUQVQxX0xPQ0ssIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKSkKKwlpZiAoU1RWNjExMHhfR0VURklFTEQoU1RBVDFfTE9DSywgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKSkKIAkJKnN0YXR1cyA9IFRVTkVSX1BIQVNFTE9DS0VEOwogCWVsc2UKIAkJKnN0YXR1cyA9IDA7CkBAIC0zNDksNiArMzYxLDggQEAKIAkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweDsKKwl1OCBkZWZhdWx0X3JlZ3NbXSA9IHsweDA3LCAweDExLCAweGRjLCAweDg1LCAweDE3LCAweDAxLCAweGU2LCAweDFlfTsKKwlpbnQgcmV0OwogCiAJc3R2NjExMHggPSBremFsbG9jKHNpemVvZiAoc3RydWN0IHN0djYxMTB4X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0djYxMTB4ID09IE5VTEwpCkBAIC0zNTcsNiArMzcxLDQ0IEBACiAJc3R2NjExMHgtPmkyYwkJPSBpMmM7CiAJc3R2NjExMHgtPmNvbmZpZwk9IGNvbmZpZzsKIAlzdHY2MTEweC0+ZGV2Y3RsCT0gJnN0djYxMTB4X2N0bDsKKwltZW1jcHkoc3R2NjExMHgtPnJlZ3MsIGRlZmF1bHRfcmVncywgOCk7CisKKwkvKiBzZXR1cCBkaXZpZGVyICovCisJc3dpdGNoIChzdHY2MTEweC0+Y29uZmlnLT5jbGtfZGl2KSB7CisJZGVmYXVsdDoKKwljYXNlIDE6CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDIpOworCQlicmVhazsKKwljYXNlIDg6CisJY2FzZSAwOgorCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMyk7CisJCWJyZWFrOworCX0KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIHsKKwkJcmV0ID0gZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKworCXJldCA9IHN0djYxMTB4X3dyaXRlX3JlZ3Moc3R2NjExMHgsIDAsIHN0djYxMTB4LT5yZWdzLAorCQkJCSAgQVJSQVlfU0laRShzdHY2MTEweC0+cmVncykpOworCWlmIChyZXQgPCAwKSB7CisJCWRwcmludGsoRkVfRVJST1IsIDEsICJJbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSB7CisJCXJldCA9IGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CiAKIAlmZS0+dHVuZXJfcHJpdgkJPSBzdHY2MTEweDsKIAlmZS0+b3BzLnR1bmVyX29wcwk9IHN0djYxMTB4X29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmgKaW5kZXggYTM4MjU3MC4uMjQyOWFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmgKQEAgLTI2LDYgKzI2LDcgQEAKIHN0cnVjdCBzdHY2MTEweF9jb25maWcgewogCXU4CWFkZHI7CiAJdTMyCXJlZmNsazsKKwl1OAljbGtfZGl2OyAvKiBkaXZpc29yIHZhbHVlIGZvciB0aGUgb3V0cHV0IGNsb2NrICovCiB9OwogCiBlbnVtIHR1bmVyX21vZGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweF9wcml2LmgKaW5kZXggNzI2MGRhNi4uMGVjOTM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4X3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHhfcHJpdi5oCkBAIC02OCw2ICs2OCw3IEBACiBzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgewogCXN0cnVjdCBpMmNfYWRhcHRlcgkJKmkyYzsKIAljb25zdCBzdHJ1Y3Qgc3R2NjExMHhfY29uZmlnCSpjb25maWc7CisJdTggCQkJCXJlZ3NbOF07CiAKIAlzdHJ1Y3Qgc3R2NjExMHhfZGV2Y3RsCQkqZGV2Y3RsOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE2NjV4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhNjY1eC5jCmluZGV4IDg3ZDUyNzMuLmM0NGZlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE2NjV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTY2NXguYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJCWZyZXF1ZW5jeSArPSBjb25maWctPnJlZl9kaXZpZGVyID4+IDE7CiAJCWZyZXF1ZW5jeSAvPSBjb25maWctPnJlZl9kaXZpZGVyOwogCi0JCWJ1ZlswXSA9ICh1OCkgKGZyZXF1ZW5jeSAmIDB4N2YwMCkgPj4gODsKKwkJYnVmWzBdID0gKHU4KSAoKGZyZXF1ZW5jeSAmIDB4N2YwMCkgPj4gOCk7CiAJCWJ1ZlsxXSA9ICh1OCkgKGZyZXF1ZW5jeSAmIDB4MDBmZikgPj4gMDsKIAkJYnVmWzJdID0gMHg4MCB8IDB4NDAgfCAweDAyOwogCQlidWZbM10gPSAweDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxLmMKaW5kZXggMzIwYzNjMy4uNjE0YWZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jCkBAIC0zOSw3ICszOSw3IEBACiB7CiAJY29uc3Qgc3RydWN0IHRkYTgyNjFfY29uZmlnICpjb25maWcgPSBzdGF0ZS0+Y29uZmlnOwogCWludCBlcnIgPSAwOwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIJPSBjb25maWctPmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELC5idWYgPSBidWYsICAubGVuID0gMiB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIJPSBjb25maWctPmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELC5idWYgPSBidWYsICAubGVuID0gMSB9OwogCiAJaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpCiAJCXByaW50aygiJXM6IHJlYWQgZXJyb3IsIGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYwppbmRleCA0ZTgxNGZmLi4zNGM1ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCXN0YXRlLT5iZiA9IDB4ZmY7CiAKIAlpZiAoIXN0YXRlLT5jb25maWctPnJmX2xvb3BfZW5hYmxlKQotCQl6bDEwMDM2X2luaXRfdGFiWzFdWzJdIHw9IDB4MDE7CisJCXpsMTAwMzZfaW5pdF90YWJbMV1bMF0gfD0gMHgwMTsKIAogCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzkuYwppbmRleCAxMWIyOWNiLi5jMDg1ZTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMKQEAgLTI4Nyw3ICsyODcsNiBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcHJpbnRrKCJDaGlwIElEPSV4IGRvZXMgbm90IG1hdGNoIGEga25vd24gdHlwZVxuIiwgc3RhdGUtPmlkKTsKLQkJYnJlYWs7CiAJCWdvdG8gZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2hpZi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19oaWYuYwppbmRleCA3NDc3ZGFjLi41NzcyZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2hpZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaGlmLmMKQEAgLTIyLDggKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCi0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgImRteGRldi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jCmluZGV4IDZhOWRmNzcuLjQ2NzVhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXJjLT5pZC52ZXJzaW9uCT0gMTsKIAlyYy0+ZGV2CQk9IG1hbnRpcy0+cGRldi0+ZGV2OwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIocmMsICZpcl9tYW50aXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKHJjLCAmaXJfbWFudGlzLCBOVUxMKTsKIAlpZiAoZXJyKSB7CiAJCWRwcmludGsoTUFOVElTX0VSUk9SLCAxLCAiSVIgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIHJldCA9ICVkIiwgZXJyKTsKIAkJaW5wdXRfZnJlZV9kZXZpY2UocmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19wY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfcGNpLmMKaW5kZXggNmM3NTM0YS4uNTlmZWViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3BjaS5jCkBAIC00MSwxMSArNDEsNiBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImR2Yl9uZXQuaCIKIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCiAjaW5jbHVkZSAibWFudGlzX2NvbW1vbi5oIgogI2luY2x1ZGUgIm1hbnRpc19yZWcuaCIKICNpbmNsdWRlICJtYW50aXNfcGNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWM4ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbmZpZyBEVkJfTkdFTkUKKwl0cmlzdGF0ZSAiTWljcm9uYXMgbkdlbmUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWNjExMHggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjA5MHggaWYgIURWQl9GRV9DVVNUT01JU0UKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBNaWNyb25hcyBQQ0kgZXhwcmVzcyBjYXJkcyB3aXRoIG5HZW5lIGJyaWRnZS4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQzNWNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIG5HZW5lIGRldmljZSBkcml2ZXIKKyMKKworbmdlbmUtb2JqcyA6PSBuZ2VuZS1jb3JlLm8KKworb2JqLSQoQ09ORklHX0RWQl9OR0VORSkgKz0gbmdlbmUubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTBkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKQEAgLTAsMCArMSwyMDI0IEBACisvKgorICogbmdlbmUuYzogbkdlbmUgUENJZSBicmlkZ2UgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgTWljcm9uYXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSYWxwaCBNZXR6bGVyIDxyamttQG1ldHpsZXJicm9zLmRlPgorICogICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpY2F0aW9ucyBmb3IgbmV3IG5HZW5lIGZpcm13YXJlLAorICogICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgRUVQUk9NLWNvcHlpbmcsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBuZXcgZHVhbCBEVkItUzIgY2FyZCBwcm90b3R5cGUKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBvbmx5LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqIE9yLCBwb2ludCB5b3VyIGJyb3dzZXIgdG8gaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAibmdlbmUuaCIKKworI2luY2x1ZGUgInN0djYxMTB4LmgiCisjaW5jbHVkZSAic3R2MDkweC5oIgorI2luY2x1ZGUgImxuYmgyNC5oIgorCitzdGF0aWMgaW50IG9uZV9hZGFwdGVyID0gMTsKK21vZHVsZV9wYXJhbShvbmVfYWRhcHRlciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mob25lX2FkYXB0ZXIsICJVc2Ugb25seSBvbmUgYWRhcHRlci4iKTsKKworCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlByaW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4iKTsKKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKKyNkZWZpbmUgQ09NTUFORF9USU1FT1VUX1dPUktBUk9VTkQKKworI2RlZmluZSBkcHJpbnRrCWlmIChkZWJ1ZykgcHJpbnRrCisKKyNkZWZpbmUgREVWSUNFX05BTUUgIm5nZW5lIgorCisjZGVmaW5lIG5nd3JpdGViKGRhdCwgYWRyKSAgICAgICAgIHdyaXRlYigoZGF0KSwgKGNoYXIgKikoZGV2LT5pb21lbSArIChhZHIpKSkKKyNkZWZpbmUgbmd3cml0ZWwoZGF0LCBhZHIpICAgICAgICAgd3JpdGVsKChkYXQpLCAoY2hhciAqKShkZXYtPmlvbWVtICsgKGFkcikpKQorI2RlZmluZSBuZ3dyaXRlYihkYXQsIGFkcikgICAgICAgICB3cml0ZWIoKGRhdCksIChjaGFyICopKGRldi0+aW9tZW0gKyAoYWRyKSkpCisjZGVmaW5lIG5ncmVhZGwoYWRyKSAgICAgICAgICAgICAgIHJlYWRsKGRldi0+aW9tZW0gKyAoYWRyKSkKKyNkZWZpbmUgbmdyZWFkYihhZHIpICAgICAgICAgICAgICAgcmVhZGIoZGV2LT5pb21lbSArIChhZHIpKQorI2RlZmluZSBuZ2NweXRvKGFkciwgc3JjLCBjb3VudCkgICBtZW1jcHlfdG9pbygoY2hhciAqKSBcCisJCQkJICAgKGRldi0+aW9tZW0gKyAoYWRyKSksIChzcmMpLCAoY291bnQpKQorI2RlZmluZSBuZ2NweWZyb20oZHN0LCBhZHIsIGNvdW50KSBtZW1jcHlfZnJvbWlvKChkc3QpLCAoY2hhciAqKSBcCisJCQkJICAgKGRldi0+aW9tZW0gKyAoYWRyKSksIChjb3VudCkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbkdlbmUgaW50ZXJydXB0IGhhbmRsZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgZXZlbnRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5nZW5lICpkZXYgPSAoc3RydWN0IG5nZW5lICopZGF0YTsKKworCXdoaWxlIChkZXYtPkV2ZW50UXVldWVSZWFkSW5kZXggIT0gZGV2LT5FdmVudFF1ZXVlV3JpdGVJbmRleCkgeworCQlzdHJ1Y3QgRVZFTlRfQlVGRkVSIEV2ZW50ID0KKwkJCWRldi0+RXZlbnRRdWV1ZVtkZXYtPkV2ZW50UXVldWVSZWFkSW5kZXhdOworCQlkZXYtPkV2ZW50UXVldWVSZWFkSW5kZXggPQorCQkJKGRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCArIDEpICYgKEVWRU5UX1FVRVVFX1NJWkUgLSAxKTsKKworCQlpZiAoKEV2ZW50LlVBUlRTdGF0dXMgJiAweDAxKSAmJiAoZGV2LT5UeEV2ZW50Tm90aWZ5KSkKKwkJCWRldi0+VHhFdmVudE5vdGlmeShkZXYsIEV2ZW50LlRpbWVTdGFtcCk7CisJCWlmICgoRXZlbnQuVUFSVFN0YXR1cyAmIDB4MDIpICYmIChkZXYtPlJ4RXZlbnROb3RpZnkpKQorCQkJZGV2LT5SeEV2ZW50Tm90aWZ5KGRldiwgRXZlbnQuVGltZVN0YW1wLAorCQkJCQkgICBFdmVudC5SWENoYXJhY3Rlcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZW11eF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9IChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqKWRhdGE7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciA9IGNoYW4tPm5leHRCdWZmZXI7CisKKwlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKworCXdoaWxlIChDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHg4MCkgeworCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQl1MzIgRmxhZ3MgPSBjaGFuLT5EYXRhRm9ybWF0RmxhZ3M7CisJCQlpZiAoQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmIDB4MjApCisJCQkJRmxhZ3MgfD0gQkVGX09WRVJGTE9XOworCQkJaWYgKGNoYW4tPnBCdWZmZXJFeGNoYW5nZSkgeworCQkJCWlmICghY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKGNoYW4sCisJCQkJCQkJICAgQ3VyLT5CdWZmZXIxLAorCQkJCQkJCSAgIGNoYW4tPkNhcHR1cmUxTGVuZ3RoLAorCQkJCQkJCSAgIEN1ci0+bmdlbmVCdWZmZXIuU1IuCisJCQkJCQkJICAgQ2xvY2ssIEZsYWdzKSkgeworCQkJCQkvKgorCQkJCQkgICBXZSBkaWRuJ3QgZ2V0IGRhdGEKKwkJCQkJICAgQ2xlYXIgaW4gc2VydmljZSBmbGFnIHRvIG1ha2Ugc3VyZSB3ZQorCQkJCQkgICBnZXQgY2FsbGVkIG9uIG5leHQgaW50ZXJydXB0IGFnYWluLgorCQkJCQkgICBsZWF2ZSBmaWxsL2VtcHR5ICgweDgwKSBmbGFnIGFsb25lCisJCQkJCSAgIHRvIGF2b2lkIGhhcmR3YXJlIHJ1bm5pbmcgb3V0IG9mCisJCQkJCSAgIGJ1ZmZlcnMgZHVyaW5nIHN0YXJ0dXAsIHdlIGhvbGQgb25seQorCQkJCQkgICBpbiBydW4gc3RhdGUgKCB0aGUgc291cmNlIG1heSBiZSBsYXRlCisJCQkJCSAgIGRlbGl2ZXJpbmcgZGF0YSApCisJCQkJCSovCisKKwkJCQkJaWYgKGNoYW4tPkhXU3RhdGUgPT0gSFdTVEFURV9SVU4pIHsKKwkJCQkJCUN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJj0KKwkJCQkJCQl+MHg0MDsKKwkJCQkJCWJyZWFrOworCQkJCQkJLyogU3RvcCBwcm9jY2Vzc2luZyBzdHJlYW0gKi8KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFdlIGdvdCBhIHZhbGlkIGJ1ZmZlciwKKwkJCQkJICAgc28gc3dpdGNoIHRvIHJ1biBzdGF0ZSAqLworCQkJCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9SVU47CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogT09QU1xuIik7CisJCQkJaWYgKGNoYW4tPkhXU3RhdGUgPT0gSFdTVEFURV9SVU4pIHsKKwkJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmPSB+MHg0MDsKKwkJCQkJYnJlYWs7CS8qIFN0b3AgcHJvY2Nlc3Npbmcgc3RyZWFtICovCisJCQkJfQorCQkJfQorCQkJaWYgKGNoYW4tPkF1ZGlvRFRPVXBkYXRlZCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJCQkgICAgICAgIjogVXBkYXRlIEF1ZGlvRFRPID0gJWRcbiIsCisJCQkJICAgICAgIGNoYW4tPkF1ZGlvRFRPVmFsdWUpOworCQkJCUN1ci0+bmdlbmVCdWZmZXIuU1IuRFRPVXBkYXRlID0KKwkJCQkJY2hhbi0+QXVkaW9EVE9WYWx1ZTsKKwkJCQljaGFuLT5BdWRpb0RUT1VwZGF0ZWQgPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNoYW4tPkhXU3RhdGUgPT0gSFdTVEFURV9SVU4pIHsKKwkJCQl1MzIgRmxhZ3MgPSAwOworCQkJCWlmIChDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHgwMSkKKwkJCQkJRmxhZ3MgfD0gQkVGX0VWRU5fRklFTEQ7CisJCQkJaWYgKEN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDIwKQorCQkJCQlGbGFncyB8PSBCRUZfT1ZFUkZMT1c7CisJCQkJaWYgKGNoYW4tPnBCdWZmZXJFeGNoYW5nZSkKKwkJCQkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKGNoYW4sCisJCQkJCQkJICAgICAgQ3VyLT5CdWZmZXIxLAorCQkJCQkJCSAgICAgIGNoYW4tPgorCQkJCQkJCSAgICAgIENhcHR1cmUxTGVuZ3RoLAorCQkJCQkJCSAgICAgIEN1ci0+bmdlbmVCdWZmZXIuCisJCQkJCQkJICAgICAgU1IuQ2xvY2ssIEZsYWdzKTsKKwkJCQlpZiAoY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlMikKKwkJCQkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlMihjaGFuLAorCQkJCQkJCSAgICAgICBDdXItPkJ1ZmZlcjIsCisJCQkJCQkJICAgICAgIGNoYW4tPgorCQkJCQkJCSAgICAgICBDYXB0dXJlMkxlbmd0aCwKKwkJCQkJCQkgICAgICAgQ3VyLT5uZ2VuZUJ1ZmZlci4KKwkJCQkJCQkgICAgICAgU1IuQ2xvY2ssIEZsYWdzKTsKKwkJCX0gZWxzZSBpZiAoY2hhbi0+SFdTdGF0ZSAhPSBIV1NUQVRFX1NUT1ApCisJCQkJY2hhbi0+SFdTdGF0ZSA9IEhXU1RBVEVfUlVOOworCQl9CisJCUN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgPSAweDAwOworCQlDdXIgPSBDdXItPk5leHQ7CisJfQorCWNoYW4tPm5leHRCdWZmZXIgPSBDdXI7CisKKwlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZ2VuZSAqZGV2ID0gKHN0cnVjdCBuZ2VuZSAqKWRldl9pZDsKKwl1MzIgaWNvdW50cyA9IDA7CisJaXJxcmV0dXJuX3QgcmMgPSBJUlFfTk9ORTsKKwl1MzIgaSA9IE1BWF9TVFJFQU07CisJdTggKnRtcENtZERvbmVCeXRlOworCisJaWYgKGRldi0+Qm9vdEZpcm13YXJlKSB7CisJCWljb3VudHMgPSBuZ3JlYWRsKE5HRU5FX0lOVF9DT1VOVFMpOworCQlpZiAoaWNvdW50cyAhPSBkZXYtPmljb3VudHMpIHsKKwkJCW5nd3JpdGVsKDAsIEZPUkNFX05NSSk7CisJCQlkZXYtPmNtZF9kb25lID0gMTsKKwkJCXdha2VfdXAoJmRldi0+Y21kX3dxKTsKKwkJCWRldi0+aWNvdW50cyA9IGljb3VudHM7CisJCQlyYyA9IElSUV9IQU5ETEVEOworCQl9CisJCXJldHVybiByYzsKKwl9CisKKwluZ3dyaXRlbCgwLCBGT1JDRV9OTUkpOworCisJc3Bpbl9sb2NrKCZkZXYtPmNtZF9sb2NrKTsKKwl0bXBDbWREb25lQnl0ZSA9IGRldi0+Q21kRG9uZUJ5dGU7CisJaWYgKHRtcENtZERvbmVCeXRlICYmCisJICAgICgqdG1wQ21kRG9uZUJ5dGUgfHwKKwkgICAgKGRldi0+bmdlbmV0b2hvc3RbMF0gPT0gMSAmJiBkZXYtPm5nZW5ldG9ob3N0WzFdICE9IDApKSkgeworCQlkZXYtPkNtZERvbmVCeXRlID0gTlVMTDsKKwkJZGV2LT5jbWRfZG9uZSA9IDE7CisJCXdha2VfdXAoJmRldi0+Y21kX3dxKTsKKwkJcmMgPSBJUlFfSEFORExFRDsKKwl9CisJc3Bpbl91bmxvY2soJmRldi0+Y21kX2xvY2spOworCisJaWYgKGRldi0+RXZlbnRCdWZmZXItPkV2ZW50U3RhdHVzICYgMHg4MCkgeworCQl1OCBuZXh0V3JpdGVJbmRleCA9CisJCQkoZGV2LT5FdmVudFF1ZXVlV3JpdGVJbmRleCArIDEpICYKKwkJCShFVkVOVF9RVUVVRV9TSVpFIC0gMSk7CisJCWlmIChuZXh0V3JpdGVJbmRleCAhPSBkZXYtPkV2ZW50UXVldWVSZWFkSW5kZXgpIHsKKwkJCWRldi0+RXZlbnRRdWV1ZVtkZXYtPkV2ZW50UXVldWVXcml0ZUluZGV4XSA9CisJCQkJKihkZXYtPkV2ZW50QnVmZmVyKTsKKwkJCWRldi0+RXZlbnRRdWV1ZVdyaXRlSW5kZXggPSBuZXh0V3JpdGVJbmRleDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBldmVudCBvdmVyZmxvd1xuIik7CisJCQlkZXYtPkV2ZW50UXVldWVPdmVyZmxvd0NvdW50ICs9IDE7CisJCQlkZXYtPkV2ZW50UXVldWVPdmVyZmxvd0ZsYWcgPSAxOworCQl9CisJCWRldi0+RXZlbnRCdWZmZXItPkV2ZW50U3RhdHVzICY9IH4weDgwOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPmV2ZW50X3Rhc2tsZXQpOworCQlyYyA9IElSUV9IQU5ETEVEOworCX0KKworCXdoaWxlIChpID4gMCkgeworCQlpLS07CisJCXNwaW5fbG9jaygmZGV2LT5jaGFubmVsW2ldLnN0YXRlX2xvY2spOworCQkvKiBpZiAoZGV2LT5jaGFubmVsW2ldLlN0YXRlPj1LU1NUQVRFX1JVTikgeyAqLworCQlpZiAoZGV2LT5jaGFubmVsW2ldLm5leHRCdWZmZXIpIHsKKwkJCWlmICgoZGV2LT5jaGFubmVsW2ldLm5leHRCdWZmZXItPgorCQkJICAgICBuZ2VuZUJ1ZmZlci5TUi5GbGFncyAmIDB4QzApID09IDB4ODApIHsKKwkJCQlkZXYtPmNoYW5uZWxbaV0ubmV4dEJ1ZmZlci0+CisJCQkJCW5nZW5lQnVmZmVyLlNSLkZsYWdzIHw9IDB4NDA7CisJCQkJdGFza2xldF9zY2hlZHVsZSgKKwkJCQkJJmRldi0+Y2hhbm5lbFtpXS5kZW11eF90YXNrbGV0KTsKKwkJCQlyYyA9IElSUV9IQU5ETEVEOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZkZXYtPmNoYW5uZWxbaV0uc3RhdGVfbG9jayk7CisJfQorCisJLyogUmVxdWVzdCBtaWdodCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGJ5IGEgcHJldmlvdXMgY2FsbC4gKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbkdlbmUgY29tbWFuZCBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgZHVtcF9jb21tYW5kX2lvKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCXU4IGJ1Zls4XSwgKmI7CisKKwluZ2NweWZyb20oYnVmLCBIT1NUX1RPX05HRU5FLCA4KTsKKwlwcmludGsoS0VSTl9FUlIgImhvc3RfdG9fbmdlbmUgKCUwNHgpOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCUhPU1RfVE9fTkdFTkUsIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwKKwkJYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSwgYnVmWzddKTsKKworCW5nY3B5ZnJvbShidWYsIE5HRU5FX1RPX0hPU1QsIDgpOworCXByaW50ayhLRVJOX0VSUiAibmdlbmVfdG9faG9zdCAoJTA0eCk6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJTkdFTkVfVE9fSE9TVCwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLAorCQlidWZbNF0sIGJ1Zls1XSwgYnVmWzZdLCBidWZbN10pOworCisJYiA9IGRldi0+aG9zdHRvbmdlbmU7CisJcHJpbnRrKEtFUk5fRVJSICJkZXYtPmhvc3R0b25nZW5lICglcCk6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJYiwgYlswXSwgYlsxXSwgYlsyXSwgYlszXSwgYls0XSwgYls1XSwgYls2XSwgYls3XSk7CisKKwliID0gZGV2LT5uZ2VuZXRvaG9zdDsKKwlwcmludGsoS0VSTl9FUlIgImRldi0+bmdlbmV0b2hvc3QgKCVwKTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQliLCBiWzBdLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdLCBiWzVdLCBiWzZdLCBiWzddKTsKK30KKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX211dGV4KHN0cnVjdCBuZ2VuZSAqZGV2LCBzdHJ1Y3QgbmdlbmVfY29tbWFuZCAqY29tKQoreworCWludCByZXQ7CisJdTggKnRtcENtZERvbmVCeXRlOworCisJZGV2LT5jbWRfZG9uZSA9IDA7CisKKwlpZiAoY29tLT5jbWQuaGRyLk9wY29kZSA9PSBDTURfRldMT0FEX1BSRVBBUkUpIHsKKwkJZGV2LT5Cb290RmlybXdhcmUgPSAxOworCQlkZXYtPmljb3VudHMgPSBuZ3JlYWRsKE5HRU5FX0lOVF9DT1VOVFMpOworCQluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfQ09NTUFORF9ISSk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX1NUQVRVUyk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX1NUQVRVU19ISSk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX0VWRU5UKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfRVZFTlRfSEkpOworCX0gZWxzZSBpZiAoY29tLT5jbWQuaGRyLk9wY29kZSA9PSBDTURfRldMT0FEX0ZJTklTSCkgeworCQl1NjQgZndpbyA9IGRldi0+UEFGV0ludGVyZmFjZUJ1ZmZlcjsKKworCQluZ3dyaXRlbChmd2lvICYgMHhmZmZmZmZmZiwgTkdFTkVfQ09NTUFORCk7CisJCW5nd3JpdGVsKGZ3aW8gPj4gMzIsIE5HRU5FX0NPTU1BTkRfSEkpOworCQluZ3dyaXRlbCgoZndpbyArIDI1NikgJiAweGZmZmZmZmZmLCBOR0VORV9TVEFUVVMpOworCQluZ3dyaXRlbCgoZndpbyArIDI1NikgPj4gMzIsIE5HRU5FX1NUQVRVU19ISSk7CisJCW5nd3JpdGVsKChmd2lvICsgNTEyKSAmIDB4ZmZmZmZmZmYsIE5HRU5FX0VWRU5UKTsKKwkJbmd3cml0ZWwoKGZ3aW8gKyA1MTIpID4+IDMyLCBOR0VORV9FVkVOVF9ISSk7CisJfQorCisJbWVtY3B5KGRldi0+RldJbnRlcmZhY2VCdWZmZXIsIGNvbS0+Y21kLnJhdzgsIGNvbS0+aW5fbGVuICsgMik7CisKKwlpZiAoZGV2LT5Cb290RmlybXdhcmUpCisJCW5nY3B5dG8oSE9TVF9UT19OR0VORSwgY29tLT5jbWQucmF3OCwgY29tLT5pbl9sZW4gKyAyKTsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+Y21kX2xvY2spOworCXRtcENtZERvbmVCeXRlID0gZGV2LT5uZ2VuZXRvaG9zdCArIGNvbS0+b3V0X2xlbjsKKwlpZiAoIWNvbS0+b3V0X2xlbikKKwkJdG1wQ21kRG9uZUJ5dGUrKzsKKwkqdG1wQ21kRG9uZUJ5dGUgPSAwOworCWRldi0+bmdlbmV0b2hvc3RbMF0gPSAwOworCWRldi0+bmdlbmV0b2hvc3RbMV0gPSAwOworCWRldi0+Q21kRG9uZUJ5dGUgPSB0bXBDbWREb25lQnl0ZTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+Y21kX2xvY2spOworCisJLyogTm90aWZ5IDgwNTEuICovCisJbmd3cml0ZWwoMSwgRk9SQ0VfSU5UKTsKKworCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChkZXYtPmNtZF93cSwgZGV2LT5jbWRfZG9uZSA9PSAxLCAyICogSFopOworCWlmICghcmV0KSB7CisJCS8qbmd3cml0ZWwoMCwgRk9SQ0VfTk1JKTsqLworCisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkgICAgICAgIjogQ29tbWFuZCB0aW1lb3V0IGNtZD0lMDJ4IHByZXY9JTAyeFxuIiwKKwkJICAgICAgIGNvbS0+Y21kLmhkci5PcGNvZGUsIGRldi0+cHJldl9jbWQpOworCQlkdW1wX2NvbW1hbmRfaW8oZGV2KTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY29tLT5jbWQuaGRyLk9wY29kZSA9PSBDTURfRldMT0FEX0ZJTklTSCkKKwkJZGV2LT5Cb290RmlybXdhcmUgPSAwOworCisJZGV2LT5wcmV2X2NtZCA9IGNvbS0+Y21kLmhkci5PcGNvZGU7CisKKwlpZiAoIWNvbS0+b3V0X2xlbikKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoY29tLT5jbWQucmF3OCwgZGV2LT5uZ2VuZXRvaG9zdCwgY29tLT5vdXRfbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmQoc3RydWN0IG5nZW5lICpkZXYsIHN0cnVjdCBuZ2VuZV9jb21tYW5kICpjb20pCit7CisJaW50IHJlc3VsdDsKKworCWRvd24oJmRldi0+Y21kX211dGV4KTsKKwlyZXN1bHQgPSBuZ2VuZV9jb21tYW5kX211dGV4KGRldiwgY29tKTsKKwl1cCgmZGV2LT5jbWRfbXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2kyY19yZWFkKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCBhZHIsCisJCQkgICB1OCAqb3V0LCB1OCBvdXRsZW4sIHU4ICppbiwgdTggaW5sZW4sIGludCBmbGFnKQoreworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9JMkNfUkVBRDsKKwljb20uY21kLmhkci5MZW5ndGggPSBvdXRsZW4gKyAzOworCWNvbS5jbWQuSTJDUmVhZC5EZXZpY2UgPSBhZHIgPDwgMTsKKwltZW1jcHkoY29tLmNtZC5JMkNSZWFkLkRhdGEsIG91dCwgb3V0bGVuKTsKKwljb20uY21kLkkyQ1JlYWQuRGF0YVtvdXRsZW5dID0gaW5sZW47CisJY29tLmNtZC5JMkNSZWFkLkRhdGFbb3V0bGVuICsgMV0gPSAwOworCWNvbS5pbl9sZW4gPSBvdXRsZW4gKyAzOworCWNvbS5vdXRfbGVuID0gaW5sZW4gKyAxOworCisJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKChjb20uY21kLnJhdzhbMF0gPj4gMSkgIT0gYWRyKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChmbGFnKQorCQltZW1jcHkoaW4sIGNvbS5jbWQucmF3OCwgaW5sZW4gKyAxKTsKKwllbHNlCisJCW1lbWNweShpbiwgY29tLmNtZC5yYXc4ICsgMSwgaW5sZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfaTJjX3dyaXRlKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCBhZHIsCisJCQkJICAgdTggKm91dCwgdTggb3V0bGVuKQoreworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0kyQ19XUklURTsKKwljb20uY21kLmhkci5MZW5ndGggPSBvdXRsZW4gKyAxOworCWNvbS5jbWQuSTJDUmVhZC5EZXZpY2UgPSBhZHIgPDwgMTsKKwltZW1jcHkoY29tLmNtZC5JMkNSZWFkLkRhdGEsIG91dCwgb3V0bGVuKTsKKwljb20uaW5fbGVuID0gb3V0bGVuICsgMTsKKwljb20ub3V0X2xlbiA9IDE7CisKKwlpZiAobmdlbmVfY29tbWFuZChkZXYsICZjb20pIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoY29tLmNtZC5yYXc4WzBdID09IDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBuZ2VuZSAqZGV2LAorCQkJCSAgICAgICB1OCAqbmdlbmVfZncsIHUzMiBzaXplKQoreworI2RlZmluZSBGSVJTVENIVU5LICgxMDI0KQorCXUzMiBjbGVmdDsKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfRldMT0FEX1BSRVBBUkU7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gMDsKKwljb20uaW5fbGVuID0gMDsKKwljb20ub3V0X2xlbiA9IDA7CisKKwluZ2VuZV9jb21tYW5kKGRldiwgJmNvbSk7CisKKwljbGVmdCA9IChzaXplICsgMykgJiB+MzsKKwlpZiAoY2xlZnQgPiBGSVJTVENIVU5LKSB7CisJCW5nY3B5dG8oUFJPR1JBTV9TUkFNICsgRklSU1RDSFVOSywgbmdlbmVfZncgKyBGSVJTVENIVU5LLAorCQkJY2xlZnQgLSBGSVJTVENIVU5LKTsKKwkJY2xlZnQgPSBGSVJTVENIVU5LOworCX0KKwluZ2NweXRvKERBVEFfRklGT19BUkVBLCBuZ2VuZV9mdywgY2xlZnQpOworCisJbWVtc2V0KCZjb20sIDAsIHNpemVvZihzdHJ1Y3QgbmdlbmVfY29tbWFuZCkpOworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9GV0xPQURfRklOSVNIOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IDQ7CisJY29tLmNtZC5GV0xvYWRGaW5pc2guQWRkcmVzcyA9IERBVEFfRklGT19BUkVBOworCWNvbS5jbWQuRldMb2FkRmluaXNoLkxlbmd0aCA9ICh1bnNpZ25lZCBzaG9ydCljbGVmdDsKKwljb20uaW5fbGVuID0gNDsKKwljb20ub3V0X2xlbiA9IDA7CisKKwlyZXR1cm4gbmdlbmVfY29tbWFuZChkZXYsICZjb20pOworfQorCisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9jb25maWdfYnVmKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCBjb25maWcpCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0NPTkZJR1VSRV9CVUZGRVI7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gMTsKKwljb20uY21kLkNvbmZpZ3VyZUJ1ZmZlcnMuY29uZmlnID0gY29uZmlnOworCWNvbS5pbl9sZW4gPSAxOworCWNvbS5vdXRfbGVuID0gMDsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2NvbmZpZ19mcmVlX2J1ZihzdHJ1Y3QgbmdlbmUgKmRldiwgdTggKmNvbmZpZykKK3sKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfQ09ORklHVVJFX0ZSRUVfQlVGRkVSOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IDY7CisJbWVtY3B5KCZjb20uY21kLkNvbmZpZ3VyZUJ1ZmZlcnMuY29uZmlnLCBjb25maWcsIDYpOworCWNvbS5pbl9sZW4gPSA2OworCWNvbS5vdXRfbGVuID0gMDsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfZ3Bpb19zZXQoc3RydWN0IG5nZW5lICpkZXYsIHU4IHNlbGVjdCwgdTggbGV2ZWwpCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX1NFVF9HUElPX1BJTjsKKwljb20uY21kLmhkci5MZW5ndGggPSAxOworCWNvbS5jbWQuU2V0R3Bpb1Bpbi5zZWxlY3QgPSBzZWxlY3QgfCAobGV2ZWwgPDwgNyk7CisJY29tLmluX2xlbiA9IDE7CisJY29tLm91dF9sZW4gPSAwOworCisJcmV0dXJuIG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKTsKK30KKworCisvKgorIDAyMDAwNjQwIGlzIHNhbXBsZSBvbiByaXNpbmcgZWRnZS4KKyAwMjAwMDc0MCBpcyBzYW1wbGUgb24gZmFsbGluZyBlZGdlLgorIDAyMDAwMDQwIGlzIGlnbm9yZSAidmFsaWQiIHNpZ25hbAorCisgMDogRkRfQ1RMMSBCaXQgNyw2IG11c3QgYmUgMCwxCisgICAgNyAgIGRpc2FibGUoZncgY29udHJvbGxlZCkKKyAgICA2ICAgMC1BVVgsMS1UUworICAgIDUgICAwLXBhciwxLXNlcgorICAgIDQgICAwLWxzYi8xLW1zYgorICAgIDMsMiByZXNlcnZlZAorICAgIDEsMCAwLW5vIHN5bmMsIDEtdXNlIGV4dC4gc3RhcnQsIDItdXNlIDB4NDcsIDMtYm90aAorIDE6IEZEX0NUTDIgaGFzIDMtdmFsaWQgbXVzdCBiZSBoaSwgMi11c2UgdmFsaWQsIDEtZWRnZQorIDI6IEZEX1NUQSBpcyByZWFkLW9ubHkuIDAtc3luYworIDM6IEZEX0lOU1lOQyBpcyBudW1iZXIgb2YgNDdzIHRvIHRyaWdnZXIgImluIHN5bmMiLgorIDQ6IEZEX09VVFNZTkMgaXMgbnVtYmVyIG9mIDQ3cyB0byB0cmlnZ2VyICJvdXQgb2Ygc3luYyIuCisgNTogRkRfTUFYQllURTEgaXMgbG93LW9yZGVyIG9mIGJ5dGVzIHBlciBwYWNrZXQuCisgNjogRkRfTUFYQllURTIgaXMgaGlnaC1vcmRlciBvZiBieXRlcyBwZXIgcGFja2V0LgorIDc6IFRvcCBieXRlIGlzIHVudXNlZC4KKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdTggVFNGZWF0dXJlRGVjb2RlclNldHVwWzggKiA0XSA9IHsKKwkweDQyLCAweDAwLCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCS8qIERSWEggKi8KKwkweDcxLCAweDA3LCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAkvKiBEUlhIc2VyICovCisJMHg3MiwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMiwgMHhiYywgMHgwMCwgMHgwMCwJLyogUzJzZXIgKi8KK307CisKKy8qIFNldCBOR0VORSBJMlMgQ29uZmlnIHRvIDE2IGJpdCBwYWNrZWQgKi8KK3N0YXRpYyB1OCBJMlNDb25maWd1cmF0aW9uW10gPSB7CisJMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDEwLCAweDAwLCAweDAwLAorfTsKKworc3RhdGljIHU4IFNQRElGQ29uZmlndXJhdGlvblsxMF0gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworLyogU2V0IE5HRU5FIEkyUyBDb25maWcgdG8gdHJhbnNwb3J0IHN0cmVhbSBjb21wYXRpYmxlIG1vZGUgKi8KKworc3RhdGljIHU4IFRTX0kyU0NvbmZpZ3VyYXRpb25bNF0gPSB7IDB4M0UsIDB4MUEsIDB4MDAsIDB4MDAgfTsgLyozZSAxOCAwMCAwMCA/Ki8KKworc3RhdGljIHU4IFRTX0kyU091dENvbmZpZ3VyYXRpb25bNF0gPSB7IDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIHU4IElUVURlY29kZXJTZXR1cFs0XVsxNl0gPSB7CisJezB4MWMsIDB4MTMsIDB4MDEsIDB4NjgsIDB4M2QsIDB4OTAsIDB4MTQsIDB4MjAsICAvKiBTRFRWICovCisJIDB4MDAsIDB4MDAsIDB4MDEsIDB4YjAsIDB4OWMsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDljLCAweDAzLCAweDIzLCAweEMwLCAweDYwLCAweDBFLCAweDEzLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg5ZiwgMHgwMCwgMHgyMywgMHhDMCwgMHg2MCwgMHgwRiwgMHgxMywgMHgwMCwgIC8qIEhEVFYgMTA4MGk1MCAqLworCSAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg5YywgMHgwMSwgMHgyMywgMHhDMCwgMHg2MCwgMHgwRSwgMHgxMywgMHgwMCwgIC8qIEhEVFYgMTA4MGk2MCAqLworCSAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDAwLCAweDAwLCAweDAwfSwKK307CisKKy8qCisgKiA1MCA0OCA2MCBnbGVpY2gKKyAqIDI3cDUwIDlmIDAwIDIyIDgwIDQyIDY5IDE4IC4uLgorICogMjdwNjAgOTMgMDAgMjIgODAgODIgNjkgMWMgLi4uCisgKi8KKworLyogTWF4Ynl0ZSB0byAxMTQ0IChmb3IgcmF3IGRhdGEpICovCitzdGF0aWMgdTggSVRVRmVhdHVyZURlY29kZXJTZXR1cFs4XSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA0LCAweDAwCit9OworCitzdGF0aWMgdm9pZCBGaWxsVFNCdWZmZXIodm9pZCAqQnVmZmVyLCBpbnQgTGVuZ3RoLCB1MzIgRmxhZ3MpCit7CisJdTMyICpwdHIgPSBCdWZmZXI7CisKKwltZW1zZXQoQnVmZmVyLCAweGZmLCBMZW5ndGgpOworCXdoaWxlIChMZW5ndGggPiAwKSB7CisJCWlmIChGbGFncyAmIERGX1NXQVAzMikKKwkJCSpwdHIgPSAweDQ3MUZGRjEwOworCQllbHNlCisJCQkqcHRyID0gMHgxMEZGMUY0NzsKKwkJcHRyICs9ICgxODggLyA0KTsKKwkJTGVuZ3RoIC09IDE4ODsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgZmx1c2hfYnVmZmVycyhzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwl1OCB2YWw7CisKKwlkbyB7CisJCW1zbGVlcCgxKTsKKwkJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJCXZhbCA9IGNoYW4tPm5leHRCdWZmZXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHg4MDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwl9IHdoaWxlICh2YWwpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9idWZmZXJzKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIgPSBjaGFuLT5uZXh0QnVmZmVyOworCisJZG8geworCQltZW1zZXQoJkN1ci0+bmdlbmVCdWZmZXIuU1IsIDAsIHNpemVvZihDdXItPm5nZW5lQnVmZmVyLlNSKSk7CisJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpCisJCQlGaWxsVFNCdWZmZXIoQ3VyLT5CdWZmZXIxLAorCQkJCSAgICAgY2hhbi0+Q2FwdHVyZTFMZW5ndGgsCisJCQkJICAgICBjaGFuLT5EYXRhRm9ybWF0RmxhZ3MpOworCQlDdXIgPSBDdXItPk5leHQ7CisJfSB3aGlsZSAoQ3VyICE9IGNoYW4tPm5leHRCdWZmZXIpOworCisJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU09VVCkgeworCQljaGFuLT5uZXh0QnVmZmVyLT5uZ2VuZUJ1ZmZlci5TUi5EVE9VcGRhdGUgPQorCQkJY2hhbi0+QXVkaW9EVE9WYWx1ZTsKKwkJY2hhbi0+QXVkaW9EVE9VcGRhdGVkID0gMDsKKworCQlDdXIgPSBjaGFuLT5UU0lkbGVCdWZmZXIuSGVhZDsKKworCQlkbyB7CisJCQltZW1zZXQoJkN1ci0+bmdlbmVCdWZmZXIuU1IsIDAsCisJCQkgICAgICAgc2l6ZW9mKEN1ci0+bmdlbmVCdWZmZXIuU1IpKTsKKwkJCUZpbGxUU0J1ZmZlcihDdXItPkJ1ZmZlcjEsCisJCQkJICAgICBjaGFuLT5DYXB0dXJlMUxlbmd0aCwKKwkJCQkgICAgIGNoYW4tPkRhdGFGb3JtYXRGbGFncyk7CisJCQlDdXIgPSBDdXItPk5leHQ7CisJCX0gd2hpbGUgKEN1ciAhPSBjaGFuLT5UU0lkbGVCdWZmZXIuSGVhZCk7CisJfQorfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfc3RyZWFtX2NvbnRyb2woc3RydWN0IG5nZW5lICpkZXYsIHU4IHN0cmVhbSwKKwkJCQkJdTggY29udHJvbCwgdTggbW9kZSwgdTggZmxhZ3MpCit7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4gPSAmZGV2LT5jaGFubmVsW3N0cmVhbV07CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCXUxNiBCc1VWSSA9ICgoc3RyZWFtICYgMSkgPyAweDk0MDAgOiAweDkzMDApOworCXUxNiBCc1NESSA9ICgoc3RyZWFtICYgMSkgPyAweDk2MDAgOiAweDk1MDApOworCXUxNiBCc1NQSSA9ICgoc3RyZWFtICYgMSkgPyAweDk4MDAgOiAweDk3MDApOworCXUxNiBCc1NETyA9IDB4OUIwMDsKKworCS8qIGRvd24oJmRldi0+c3RyZWFtX211dGV4KTsgKi8KKwl3aGlsZSAoZG93bl90cnlsb2NrKCZkZXYtPnN0cmVhbV9tdXRleCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBTQyBsb2NrZWRcbiIpOworCQltc2xlZXAoMSk7CisJfQorCW1lbXNldCgmY29tLCAwLCBzaXplb2YoY29tKSk7CisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0NPTlRST0w7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBGV19TVFJFQU1fQ09OVFJPTCkgLSAyOworCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0gPSBzdHJlYW0gfCAoY29udHJvbCA/IDggOiAwKTsKKwlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKQorCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtIHw9IDB4MDc7CisJY29tLmNtZC5TdHJlYW1Db250cm9sLkNvbnRyb2wgPSBjb250cm9sIHwKKwkJKGZsYWdzICYgU0ZMQUdfT1JERVJfTFVNQV9DSFJPTUEpOworCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5Nb2RlID0gbW9kZTsKKwljb20uaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBGV19TVFJFQU1fQ09OVFJPTCk7CisJY29tLm91dF9sZW4gPSAwOworCisJZHByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJIjogU3RyZWFtPSUwMngsIENvbnRyb2w9JTAyeCwgTW9kZT0lMDJ4XG4iLAorCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtLCBjb20uY21kLlN0cmVhbUNvbnRyb2wuQ29udHJvbCwKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLk1vZGUpOworCisJY2hhbi0+TW9kZSA9IG1vZGU7CisKKwlpZiAoIShjb250cm9sICYgMHg4MCkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJCWlmIChjaGFuLT5TdGF0ZSA9PSBLU1NUQVRFX1JVTikgeworCQkJY2hhbi0+U3RhdGUgPSBLU1NUQVRFX0FDUVVJUkU7CisJCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9TVE9QOworCQkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKSB7CisJCQkJdXAoJmRldi0+c3RyZWFtX211dGV4KTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQkvKiBjbGVhcl9idWZmZXJzKGNoYW4pOyAqLworCQkJZmx1c2hfYnVmZmVycyhjaGFuKTsKKwkJCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCQl1cCgmZGV2LT5zdHJlYW1fbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobW9kZSAmIFNNT0RFX0FVRElPX0NBUFRVUkUpIHsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkNhcHR1cmVCbG9ja0NvdW50ID0KKwkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoIC8gQVVESU9fQkxPQ0tfU0laRTsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkJ1ZmZlcl9BZGRyZXNzID0gY2hhbi0+UmluZ0J1ZmZlci5QQUhlYWQ7CisJfSBlbHNlIGlmIChtb2RlICYgU01PREVfVFJBTlNQT1JUX1NUUkVBTSkgeworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQ2FwdHVyZUJsb2NrQ291bnQgPQorCQkJY2hhbi0+Q2FwdHVyZTFMZW5ndGggLyBUU19CTE9DS19TSVpFOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWF4TGluZXNQZXJGaWVsZCA9CisJCQljaGFuLT5DYXB0dXJlMUxlbmd0aCAvIFRTX0JMT0NLX1NJWkU7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CdWZmZXJfQWRkcmVzcyA9CisJCQljaGFuLT5UU1JpbmdCdWZmZXIuUEFIZWFkOworCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnl0ZXNQZXJWQklMaW5lID0KKwkJCQljaGFuLT5DYXB0dXJlMUxlbmd0aCAvIFRTX0JMT0NLX1NJWkU7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtIHw9IDB4MDc7CisJCX0KKwl9IGVsc2UgeworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnl0ZXNQZXJWaWRlb0xpbmUgPSBjaGFuLT5uQnl0ZXNQZXJMaW5lOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWF4TGluZXNQZXJGaWVsZCA9IGNoYW4tPm5MaW5lczsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLk1pbkxpbmVzUGVyRmllbGQgPSAxMDA7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CdWZmZXJfQWRkcmVzcyA9IGNoYW4tPlJpbmdCdWZmZXIuUEFIZWFkOworCisJCWlmIChtb2RlICYgU01PREVfVkJJX0NBUFRVUkUpIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NYXhWQklMaW5lc1BlckZpZWxkID0KKwkJCQljaGFuLT5uVkJJTGluZXM7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWluVkJJTGluZXNQZXJGaWVsZCA9IDA7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnl0ZXNQZXJWQklMaW5lID0KKwkJCQljaGFuLT5uQnl0ZXNQZXJWQklMaW5lOworCQl9CisJCWlmIChmbGFncyAmIFNGTEFHX0NPTE9SQkFSKQorCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlN0cmVhbSB8PSAweDA0OworCX0KKworCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCWlmIChtb2RlICYgU01PREVfQVVESU9fQ0FQVFVSRSkgeworCQljaGFuLT5uZXh0QnVmZmVyID0gY2hhbi0+UmluZ0J1ZmZlci5IZWFkOworCQlpZiAobW9kZSAmIFNNT0RFX0FVRElPX1NQRElGKSB7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0KKwkJCQlzaXplb2YoU1BESUZDb25maWd1cmF0aW9uKTsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNTUEk7CisJCQltZW1jcHkoY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YSwKKwkJCSAgICAgICBTUERJRkNvbmZpZ3VyYXRpb24sIHNpemVvZihTUERJRkNvbmZpZ3VyYXRpb24pKTsKKwkJfSBlbHNlIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPSA0OworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1NESTsKKwkJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkJICAgICAgIEkyU0NvbmZpZ3VyYXRpb24gKworCQkJICAgICAgIDQgKiBkZXYtPmNhcmRfaW5mby0+aTJzW3N0cmVhbV0sIDQpOworCQl9CisJfSBlbHNlIGlmIChtb2RlICYgU01PREVfVFJBTlNQT1JUX1NUUkVBTSkgeworCQljaGFuLT5uZXh0QnVmZmVyID0gY2hhbi0+VFNSaW5nQnVmZmVyLkhlYWQ7CisJCWlmIChzdHJlYW0gPj0gU1RSRUFNX0FVRElPSU4xKSB7CisJCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUxlbiA9CisJCQkJCXNpemVvZihUU19JMlNPdXRDb25maWd1cmF0aW9uKTsKKwkJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhQWRkciA9IEJzU0RPOworCQkJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkJCSAgICAgICBUU19JMlNPdXRDb25maWd1cmF0aW9uLAorCQkJCSAgICAgICBzaXplb2YoVFNfSTJTT3V0Q29uZmlndXJhdGlvbikpOworCQkJfSBlbHNlIHsKKwkJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0KKwkJCQkJc2l6ZW9mKFRTX0kyU0NvbmZpZ3VyYXRpb24pOworCQkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNTREk7CisJCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkJICAgICAgIFRTX0kyU0NvbmZpZ3VyYXRpb24sCisJCQkJICAgICAgIHNpemVvZihUU19JMlNDb25maWd1cmF0aW9uKSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0gODsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNVVkkgKyAweDEwOworCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkgICAgICAgVFNGZWF0dXJlRGVjb2RlclNldHVwICsKKwkJCSAgICAgICA4ICogZGV2LT5jYXJkX2luZm8tPnRzZltzdHJlYW1dLCA4KTsKKwkJfQorCX0gZWxzZSB7CisJCWNoYW4tPm5leHRCdWZmZXIgPSBjaGFuLT5SaW5nQnVmZmVyLkhlYWQ7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPQorCQkJMTYgKyBzaXplb2YoSVRVRmVhdHVyZURlY29kZXJTZXR1cCk7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNVVkk7CisJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkgICAgICAgSVRVRGVjb2RlclNldHVwW2NoYW4tPml0dW1vZGVdLCAxNik7CisJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhICsgMTYsCisJCSAgICAgICBJVFVGZWF0dXJlRGVjb2RlclNldHVwLCBzaXplb2YoSVRVRmVhdHVyZURlY29kZXJTZXR1cCkpOworCX0KKwljbGVhcl9idWZmZXJzKGNoYW4pOworCWNoYW4tPlN0YXRlID0gS1NTVEFURV9SVU47CisJaWYgKG1vZGUgJiBTTU9ERV9UUkFOU1BPUlRfU1RSRUFNKQorCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9SVU47CisJZWxzZQorCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9TVEFSVFVQOworCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisKKwlpZiAobmdlbmVfY29tbWFuZChkZXYsICZjb20pIDwgMCkgeworCQl1cCgmZGV2LT5zdHJlYW1fbXV0ZXgpOworCQlyZXR1cm4gLTE7CisJfQorCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJMkMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBuZ2VuZV9pMmNfc2V0X2J1cyhzdHJ1Y3QgbmdlbmUgKmRldiwgaW50IGJ1cykKK3sKKwlpZiAoIShkZXYtPmNhcmRfaW5mby0+aTJjX2FjY2VzcyAmIDIpKQorCQlyZXR1cm47CisJaWYgKGRldi0+aTJjX2N1cnJlbnRfYnVzID09IGJ1cykKKwkJcmV0dXJuOworCisJc3dpdGNoIChidXMpIHsKKwljYXNlIDA6CisJCW5nZW5lX2NvbW1hbmRfZ3Bpb19zZXQoZGV2LCAzLCAwKTsKKwkJbmdlbmVfY29tbWFuZF9ncGlvX3NldChkZXYsIDIsIDEpOworCQlicmVhazsKKworCWNhc2UgMToKKwkJbmdlbmVfY29tbWFuZF9ncGlvX3NldChkZXYsIDIsIDApOworCQluZ2VuZV9jb21tYW5kX2dwaW9fc2V0KGRldiwgMywgMSk7CisJCWJyZWFrOworCX0KKwlkZXYtPmkyY19jdXJyZW50X2J1cyA9IGJ1czsKK30KKworc3RhdGljIGludCBuZ2VuZV9pMmNfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCSBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9CisJCShzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqKWkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisKKwlkb3duKCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgpOworCW5nZW5lX2kyY19zZXRfYnVzKGRldiwgY2hhbi0+bnVtYmVyKTsKKworCWlmIChudW0gPT0gMiAmJiBtc2dbMV0uZmxhZ3MgJiBJMkNfTV9SRCAmJiAhKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkKKwkJaWYgKCFuZ2VuZV9jb21tYW5kX2kyY19yZWFkKGRldiwgbXNnWzBdLmFkZHIsCisJCQkJCSAgICBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuLAorCQkJCQkgICAgbXNnWzFdLmJ1ZiwgbXNnWzFdLmxlbiwgMCkpCisJCQlnb3RvIGRvbmU7CisKKwlpZiAobnVtID09IDEgJiYgIShtc2dbMF0uZmxhZ3MgJiBJMkNfTV9SRCkpCisJCWlmICghbmdlbmVfY29tbWFuZF9pMmNfd3JpdGUoZGV2LCBtc2dbMF0uYWRkciwKKwkJCQkJICAgICBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKSkKKwkJCWdvdG8gZG9uZTsKKwlpZiAobnVtID09IDEgJiYgKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkKKwkJaWYgKCFuZ2VuZV9jb21tYW5kX2kyY19yZWFkKGRldiwgbXNnWzBdLmFkZHIsIDAsIDAsCisJCQkJCSAgICBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuLCAwKSkKKwkJCWdvdG8gZG9uZTsKKworCXVwKCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgpOworCXJldHVybiAtRUlPOworCitkb25lOgorCXVwKCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgpOworCXJldHVybiBudW07Cit9CisKKworc3RhdGljIHUzMiBuZ2VuZV9pMmNfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBuZ2VuZV9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgPSBuZ2VuZV9pMmNfbWFzdGVyX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBuZ2VuZV9pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBpbnQgbmdlbmVfaTJjX2luaXQoc3RydWN0IG5nZW5lICpkZXYsIGludCBkZXZfbnIpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJihkZXYtPmNoYW5uZWxbZGV2X25yXS5pMmNfYWRhcHRlcik7CisKKwlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsICYoZGV2LT5jaGFubmVsW2Rldl9ucl0pKTsKKwlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMIHwgSTJDX0NMQVNTX1RWX0FOQUxPRzsKKworCXN0cmNweShhZGFwLT5uYW1lLCAibkdlbmUiKTsKKworCWFkYXAtPmFsZ28gPSAmbmdlbmVfaTJjX2FsZ287CisJYWRhcC0+YWxnb19kYXRhID0gKHZvaWQgKikmKGRldi0+Y2hhbm5lbFtkZXZfbnJdKTsKKwlhZGFwLT5kZXYucGFyZW50ID0gJmRldi0+cGNpX2Rldi0+ZGV2OworCisJcmV0dXJuIGkyY19hZGRfYWRhcHRlcihhZGFwKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERWQiBmdW5jdGlvbnMgYW5kIEFQSSBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHN3YXBfYnVmZmVyKHUzMiAqcCwgdTMyIGxlbikKK3sKKwl3aGlsZSAobGVuKSB7CisJCSpwID0gc3dhYjMyKCpwKTsKKwkJcCsrOworCQlsZW4gLT0gNDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgKnRzaW5fZXhjaGFuZ2Uodm9pZCAqcHJpdiwgdm9pZCAqYnVmLCB1MzIgbGVuLCB1MzIgY2xvY2ssIHUzMiBmbGFncykKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9IHByaXY7CisKKworI2lmZGVmIENPTU1BTkRfVElNRU9VVF9XT1JLQVJPVU5ECisJaWYgKGNoYW4tPnVzZXJzID4gMCkKKyNlbmRpZgorCQlkdmJfZG14X3N3ZmlsdGVyKCZjaGFuLT5kZW11eCwgYnVmLCBsZW4pOworCXJldHVybiAwOworfQorCit1OCBmaWxsX3RzWzE4OF0gPSB7IDB4NDcsIDB4MWYsIDB4ZmYsIDB4MTAgfTsKKworc3RhdGljIHZvaWQgKnRzb3V0X2V4Y2hhbmdlKHZvaWQgKnByaXYsIHZvaWQgKmJ1ZiwgdTMyIGxlbiwKKwkJCSAgICB1MzIgY2xvY2ssIHUzMiBmbGFncykKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9IHByaXY7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisJdTMyIGFsZW47CisKKwlhbGVuID0gZHZiX3JpbmdidWZmZXJfYXZhaWwoJmRldi0+dHNvdXRfcmJ1Zik7CisJYWxlbiAtPSBhbGVuICUgMTg4OworCisJaWYgKGFsZW4gPCBsZW4pCisJCUZpbGxUU0J1ZmZlcihidWYgKyBhbGVuLCBsZW4gLSBhbGVuLCBmbGFncyk7CisJZWxzZQorCQlhbGVuID0gbGVuOworCWR2Yl9yaW5nYnVmZmVyX3JlYWQoJmRldi0+dHNvdXRfcmJ1ZiwgYnVmLCBhbGVuKTsKKwlpZiAoZmxhZ3MgJiBERl9TV0FQMzIpCisJCXN3YXBfYnVmZmVyKCh1MzIgKilidWYsIGFsZW4pOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT50c291dF9yYnVmLnF1ZXVlKTsKKwlyZXR1cm4gYnVmOworfQorCisKK3N0YXRpYyB2b2lkIHNldF90cmFuc2ZlcihzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiwgaW50IHN0YXRlKQoreworCXU4IGNvbnRyb2wgPSAwLCBtb2RlID0gMCwgZmxhZ3MgPSAwOworCXN0cnVjdCBuZ2VuZSAqZGV2ID0gY2hhbi0+ZGV2OworCWludCByZXQ7CisKKwkvKgorCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogc3QgJWRcbiIsIHN0YXRlKTsKKwltc2xlZXAoMTAwKTsKKwkqLworCisJaWYgKHN0YXRlKSB7CisJCWlmIChjaGFuLT5ydW5uaW5nKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IGFscmVhZHkgcnVubmluZ1xuIik7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIWNoYW4tPnJ1bm5pbmcpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogYWxyZWFkeSBzdG9wcGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChkZXYtPmNhcmRfaW5mby0+c3dpdGNoX2N0cmwpCisJCWRldi0+Y2FyZF9pbmZvLT5zd2l0Y2hfY3RybChjaGFuLCAxLCBzdGF0ZSBeIDEpOworCisJaWYgKHN0YXRlKSB7CisJCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCisJCS8qIHByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogbG9jaz0lMDh4XG4iLAorCQkJICBuZ3JlYWRsKDB4OTMxMCkpOyAqLworCQlkdmJfcmluZ2J1ZmZlcl9mbHVzaCgmZGV2LT50c291dF9yYnVmKTsKKwkJY29udHJvbCA9IDB4ODA7CisJCWlmIChjaGFuLT5tb2RlICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKwkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoID0gNTEyICogMTg4OworCQkJbW9kZSA9IFNNT0RFX1RSQU5TUE9SVF9TVFJFQU07CisJCX0KKwkJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU09VVCkgeworCQkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlID0gdHNvdXRfZXhjaGFuZ2U7CisJCQkvKiAweDY2NjY2NjY2ID0gNTBNSHogKjJeMzMgLzI1ME1IeiAqLworCQkJY2hhbi0+QXVkaW9EVE9WYWx1ZSA9IDB4NjY2NjY2NjY7CisJCQkvKiBzZXRfZHRvKGNoYW4sIDM4ODEwNzAwKzEwMDApOyAqLworCQkJLyogc2V0X2R0byhjaGFuLCAxOTM5MjY1OCk7ICovCisJCX0KKwkJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU0lOKQorCQkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlID0gdHNpbl9leGNoYW5nZTsKKwkJLyogbmd3cml0ZWwoMCwgMHg5MzEwKTsgKi8KKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwl9IGVsc2UKKwkJOy8qIHByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogbG9jaz0lMDh4XG4iLAorCQkJICAgbmdyZWFkbCgweDkzMTApKTsgKi8KKworCXJldCA9IG5nZW5lX2NvbW1hbmRfc3RyZWFtX2NvbnRyb2woZGV2LCBjaGFuLT5udW1iZXIsCisJCQkJCSAgIGNvbnRyb2wsIG1vZGUsIGZsYWdzKTsKKwlpZiAoIXJldCkKKwkJY2hhbi0+cnVubmluZyA9IHN0YXRlOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IHNldF90cmFuc2ZlciAlZCBmYWlsZWRcbiIsCisJCSAgICAgICBzdGF0ZSk7CisJaWYgKCFzdGF0ZSkgeworCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlID0gMDsKKwkJZHZiX3JpbmdidWZmZXJfZmx1c2goJmRldi0+dHNvdXRfcmJ1Zik7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJfQorfQorCitzdGF0aWMgaW50IG5nZW5lX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gZHZiZG14LT5wcml2OworCisJaWYgKGNoYW4tPnVzZXJzID09IDApIHsKKyNpZmRlZiBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCQlpZiAoIWNoYW4tPnJ1bm5pbmcpCisjZW5kaWYKKwkJCXNldF90cmFuc2ZlcihjaGFuLCAxKTsKKwkJLyogbXNsZWVwKDEwKTsgKi8KKwl9CisKKwlyZXR1cm4gKytjaGFuLT51c2VyczsKK30KKworc3RhdGljIGludCBuZ2VuZV9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gZHZiZG14LT5wcml2OworCisJaWYgKC0tY2hhbi0+dXNlcnMpCisJCXJldHVybiBjaGFuLT51c2VyczsKKworI2lmbmRlZiBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCXNldF90cmFuc2ZlcihjaGFuLCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IG15X2R2Yl9kbXhfdHNfY2FyZF9pbml0KHN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4LCBjaGFyICppZCwKKwkJCQkgICBpbnQgKCpzdGFydF9mZWVkKShzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKiksCisJCQkJICAgaW50ICgqc3RvcF9mZWVkKShzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKiksCisJCQkJICAgdm9pZCAqcHJpdikKK3sKKwlkdmJkZW11eC0+cHJpdiA9IHByaXY7CisKKwlkdmJkZW11eC0+ZmlsdGVybnVtID0gMjU2OworCWR2YmRlbXV4LT5mZWVkbnVtID0gMjU2OworCWR2YmRlbXV4LT5zdGFydF9mZWVkID0gc3RhcnRfZmVlZDsKKwlkdmJkZW11eC0+c3RvcF9mZWVkID0gc3RvcF9mZWVkOworCWR2YmRlbXV4LT53cml0ZV90b19kZWNvZGVyID0gMDsKKwlkdmJkZW11eC0+ZG14LmNhcGFiaWxpdGllcyA9IChETVhfVFNfRklMVEVSSU5HIHwKKwkJCQkgICAgICBETVhfU0VDVElPTl9GSUxURVJJTkcgfAorCQkJCSAgICAgIERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKKwlyZXR1cm4gZHZiX2RteF9pbml0KGR2YmRlbXV4KTsKK30KKworc3RhdGljIGludCBteV9kdmJfZG14ZGV2X3RzX2NhcmRfaW5pdChzdHJ1Y3QgZG14ZGV2ICpkbXhkZXYsCisJCQkJICAgICAgc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXgsCisJCQkJICAgICAgc3RydWN0IGRteF9mcm9udGVuZCAqaHdfZnJvbnRlbmQsCisJCQkJICAgICAgc3RydWN0IGRteF9mcm9udGVuZCAqbWVtX2Zyb250ZW5kLAorCQkJCSAgICAgIHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIpCit7CisJaW50IHJldDsKKworCWRteGRldi0+ZmlsdGVybnVtID0gMjU2OworCWRteGRldi0+ZGVtdXggPSAmZHZiZGVtdXgtPmRteDsKKwlkbXhkZXYtPmNhcGFiaWxpdGllcyA9IDA7CisJcmV0ID0gZHZiX2RteGRldl9pbml0KGRteGRldiwgZHZiX2FkYXB0ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaHdfZnJvbnRlbmQtPnNvdXJjZSA9IERNWF9GUk9OVEVORF8wOworCWR2YmRlbXV4LT5kbXguYWRkX2Zyb250ZW5kKCZkdmJkZW11eC0+ZG14LCBod19mcm9udGVuZCk7CisJbWVtX2Zyb250ZW5kLT5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOworCWR2YmRlbXV4LT5kbXguYWRkX2Zyb250ZW5kKCZkdmJkZW11eC0+ZG14LCBtZW1fZnJvbnRlbmQpOworCXJldHVybiBkdmJkZW11eC0+ZG14LmNvbm5lY3RfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsIGh3X2Zyb250ZW5kKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG5HZW5lIGhhcmR3YXJlIGluaXQgYW5kIHJlbGVhc2UgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGZyZWVfcmluZ2J1ZmZlcihzdHJ1Y3QgbmdlbmUgKmRldiwgc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciAqcmIpCit7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciA9IHJiLT5IZWFkOworCXUzMiBqOworCisJaWYgKCFDdXIpCisJCXJldHVybjsKKworCWZvciAoaiA9IDA7IGogPCByYi0+TnVtQnVmZmVyczsgaisrLCBDdXIgPSBDdXItPk5leHQpIHsKKwkJaWYgKEN1ci0+QnVmZmVyMSkKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCQkgICAgcmItPkJ1ZmZlcjFMZW5ndGgsCisJCQkJCSAgICBDdXItPkJ1ZmZlcjEsCisJCQkJCSAgICBDdXItPnNjTGlzdDEtPkFkZHJlc3MpOworCisJCWlmIChDdXItPkJ1ZmZlcjIpCisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwKKwkJCQkJICAgIHJiLT5CdWZmZXIyTGVuZ3RoLAorCQkJCQkgICAgQ3VyLT5CdWZmZXIyLAorCQkJCQkgICAgQ3VyLT5zY0xpc3QyLT5BZGRyZXNzKTsKKwl9CisKKwlpZiAocmItPlNDTGlzdE1lbSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsIHJiLT5TQ0xpc3RNZW1TaXplLAorCQkJCSAgICByYi0+U0NMaXN0TWVtLCByYi0+UEFTQ0xpc3RNZW0pOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsIHJiLT5NZW1TaXplLCByYi0+SGVhZCwgcmItPlBBSGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfaWRsZWJ1ZmZlcihzdHJ1Y3QgbmdlbmUgKmRldiwKKwkJICAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpyYiwKKwkJICAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICp0YikKK3sKKwlpbnQgajsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gdGItPkhlYWQ7CisKKwlpZiAoIXJiLT5IZWFkKQorCQlyZXR1cm47CisJZnJlZV9yaW5nYnVmZmVyKGRldiwgcmIpOworCWZvciAoaiA9IDA7IGogPCB0Yi0+TnVtQnVmZmVyczsgaisrLCBDdXIgPSBDdXItPk5leHQpIHsKKwkJQ3VyLT5CdWZmZXIyID0gMDsKKwkJQ3VyLT5zY0xpc3QyID0gMDsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5BZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzIgPSAwOworCQlDdXItPm5nZW5lQnVmZmVyLk51bWJlcl9vZl9lbnRyaWVzXzIgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9jb21tb25fYnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwl1MzIgaTsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbjsKKworCWZvciAoaSA9IFNUUkVBTV9WSURFT0lOMTsgaSA8IE1BWF9TVFJFQU07IGkrKykgeworCQljaGFuID0gJmRldi0+Y2hhbm5lbFtpXTsKKwkJZnJlZV9pZGxlYnVmZmVyKGRldiwgJmNoYW4tPlRTSWRsZUJ1ZmZlciwgJmNoYW4tPlRTUmluZ0J1ZmZlcik7CisJCWZyZWVfcmluZ2J1ZmZlcihkZXYsICZjaGFuLT5SaW5nQnVmZmVyKTsKKwkJZnJlZV9yaW5nYnVmZmVyKGRldiwgJmNoYW4tPlRTUmluZ0J1ZmZlcik7CisJfQorCisJaWYgKGRldi0+T3ZlcmZsb3dCdWZmZXIpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCSAgICBPVkVSRkxPV19CVUZGRVJfU0laRSwKKwkJCQkgICAgZGV2LT5PdmVyZmxvd0J1ZmZlciwgZGV2LT5QQU92ZXJmbG93QnVmZmVyKTsKKworCWlmIChkZXYtPkZXSW50ZXJmYWNlQnVmZmVyKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwKKwkJCQkgICAgNDA5NiwKKwkJCQkgICAgZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciwKKwkJCQkgICAgZGV2LT5QQUZXSW50ZXJmYWNlQnVmZmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSaW5nIGJ1ZmZlciBoYW5kbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGNyZWF0ZV9yaW5nX2J1ZmZlcihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJICAgICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKmRlc2NyLCB1MzIgTnVtQnVmZmVycykKK3sKKwlkbWFfYWRkcl90IHRtcDsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqSGVhZDsKKwl1MzIgaTsKKwl1MzIgTWVtU2l6ZSA9IFNJWkVPRl9TQnVmZmVySGVhZGVyICogTnVtQnVmZmVyczsKKwl1NjQgUEFSaW5nQnVmZmVySGVhZDsKKwl1NjQgUEFSaW5nQnVmZmVyQ3VyOworCXU2NCBQQVJpbmdCdWZmZXJOZXh0OworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIsICpOZXh0OworCisJZGVzY3ItPkhlYWQgPSAwOworCWRlc2NyLT5NZW1TaXplID0gMDsKKwlkZXNjci0+UEFIZWFkID0gMDsKKwlkZXNjci0+TnVtQnVmZmVycyA9IDA7CisKKwlpZiAoTWVtU2l6ZSA8IDQwOTYpCisJCU1lbVNpemUgPSA0MDk2OworCisJSGVhZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIE1lbVNpemUsICZ0bXApOworCVBBUmluZ0J1ZmZlckhlYWQgPSB0bXA7CisKKwlpZiAoIUhlYWQpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KEhlYWQsIDAsIE1lbVNpemUpOworCisJUEFSaW5nQnVmZmVyQ3VyID0gUEFSaW5nQnVmZmVySGVhZDsKKwlDdXIgPSBIZWFkOworCisJZm9yIChpID0gMDsgaSA8IE51bUJ1ZmZlcnMgLSAxOyBpKyspIHsKKwkJTmV4dCA9IChzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqKQorCQkJKCgodTggKikgQ3VyKSArIFNJWkVPRl9TQnVmZmVySGVhZGVyKTsKKwkJUEFSaW5nQnVmZmVyTmV4dCA9IFBBUmluZ0J1ZmZlckN1ciArIFNJWkVPRl9TQnVmZmVySGVhZGVyOworCQlDdXItPk5leHQgPSBOZXh0OworCQlDdXItPm5nZW5lQnVmZmVyLk5leHQgPSBQQVJpbmdCdWZmZXJOZXh0OworCQlDdXIgPSBOZXh0OworCQlQQVJpbmdCdWZmZXJDdXIgPSBQQVJpbmdCdWZmZXJOZXh0OworCX0KKwkvKiBMYXN0IEJ1ZmZlciBwb2ludHMgYmFjayB0byBmaXJzdCBvbmUgKi8KKwlDdXItPk5leHQgPSBIZWFkOworCUN1ci0+bmdlbmVCdWZmZXIuTmV4dCA9IFBBUmluZ0J1ZmZlckhlYWQ7CisKKwlkZXNjci0+SGVhZCAgICAgICA9IEhlYWQ7CisJZGVzY3ItPk1lbVNpemUgICAgPSBNZW1TaXplOworCWRlc2NyLT5QQUhlYWQgICAgID0gUEFSaW5nQnVmZmVySGVhZDsKKwlkZXNjci0+TnVtQnVmZmVycyA9IE51bUJ1ZmZlcnM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBBbGxvY2F0ZVJpbmdCdWZmZXJzKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJICAgICAgIGRtYV9hZGRyX3Qgb2YsCisJCQkgICAgICAgc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciAqcFJpbmdCdWZmZXIsCisJCQkgICAgICAgdTMyIEJ1ZmZlcjFMZW5ndGgsIHUzMiBCdWZmZXIyTGVuZ3RoKQoreworCWRtYV9hZGRyX3QgdG1wOworCXUzMiBpLCBqOworCWludCBzdGF0dXMgPSAwOworCXUzMiBTQ0xpc3RNZW1TaXplID0gcFJpbmdCdWZmZXItPk51bUJ1ZmZlcnMKKwkJKiAoKEJ1ZmZlcjJMZW5ndGggIT0gMCkgPyAoTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgKiAyKSA6CisJCSAgICBOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUykKKwkJKiBzaXplb2Yoc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQpOworCisJdTY0IFBBU0NMaXN0TWVtOworCXN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UICpTQ0xpc3RFbnRyeTsKKwl1NjQgUEFTQ0xpc3RFbnRyeTsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyOworCXZvaWQgKlNDTGlzdE1lbTsKKworCWlmIChTQ0xpc3RNZW1TaXplIDwgNDA5NikKKwkJU0NMaXN0TWVtU2l6ZSA9IDQwOTY7CisKKwlTQ0xpc3RNZW0gPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LCBTQ0xpc3RNZW1TaXplLCAmdG1wKTsKKworCVBBU0NMaXN0TWVtID0gdG1wOworCWlmIChTQ0xpc3RNZW0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoU0NMaXN0TWVtLCAwLCBTQ0xpc3RNZW1TaXplKTsKKworCXBSaW5nQnVmZmVyLT5TQ0xpc3RNZW0gPSBTQ0xpc3RNZW07CisJcFJpbmdCdWZmZXItPlBBU0NMaXN0TWVtID0gUEFTQ0xpc3RNZW07CisJcFJpbmdCdWZmZXItPlNDTGlzdE1lbVNpemUgPSBTQ0xpc3RNZW1TaXplOworCXBSaW5nQnVmZmVyLT5CdWZmZXIxTGVuZ3RoID0gQnVmZmVyMUxlbmd0aDsKKwlwUmluZ0J1ZmZlci0+QnVmZmVyMkxlbmd0aCA9IEJ1ZmZlcjJMZW5ndGg7CisKKwlTQ0xpc3RFbnRyeSA9IFNDTGlzdE1lbTsKKwlQQVNDTGlzdEVudHJ5ID0gUEFTQ0xpc3RNZW07CisJQ3VyID0gcFJpbmdCdWZmZXItPkhlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcFJpbmdCdWZmZXItPk51bUJ1ZmZlcnM7IGkgKz0gMSwgQ3VyID0gQ3VyLT5OZXh0KSB7CisJCXU2NCBQQUJ1ZmZlcjsKKworCQl2b2lkICpCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LCBCdWZmZXIxTGVuZ3RoLAorCQkJCQkJICAgICZ0bXApOworCQlQQUJ1ZmZlciA9IHRtcDsKKworCQlpZiAoQnVmZmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlDdXItPkJ1ZmZlcjEgPSBCdWZmZXI7CisKKwkJU0NMaXN0RW50cnktPkFkZHJlc3MgPSBQQUJ1ZmZlcjsKKwkJU0NMaXN0RW50cnktPkxlbmd0aCAgPSBCdWZmZXIxTGVuZ3RoOworCisJCUN1ci0+c2NMaXN0MSA9IFNDTGlzdEVudHJ5OworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMSA9IFBBU0NMaXN0RW50cnk7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMSA9CisJCQlOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUzsKKworCQlTQ0xpc3RFbnRyeSArPSAxOworCQlQQVNDTGlzdEVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisKKyNpZiBOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUyA+IDEKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTIC0gMTsgaiArPSAxKSB7CisJCQlTQ0xpc3RFbnRyeS0+QWRkcmVzcyA9IG9mOworCQkJU0NMaXN0RW50cnktPkxlbmd0aCA9IE9WRVJGTE9XX0JVRkZFUl9TSVpFOworCQkJU0NMaXN0RW50cnkgKz0gMTsKKwkJCVBBU0NMaXN0RW50cnkgKz0KKwkJCQlzaXplb2Yoc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQpOworCQl9CisjZW5kaWYKKworCQlpZiAoIUJ1ZmZlcjJMZW5ndGgpCisJCQljb250aW51ZTsKKworCQlCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LCBCdWZmZXIyTGVuZ3RoLCAmdG1wKTsKKwkJUEFCdWZmZXIgPSB0bXA7CisKKwkJaWYgKEJ1ZmZlciA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJQ3VyLT5CdWZmZXIyID0gQnVmZmVyOworCisJCVNDTGlzdEVudHJ5LT5BZGRyZXNzID0gUEFCdWZmZXI7CisJCVNDTGlzdEVudHJ5LT5MZW5ndGggID0gQnVmZmVyMkxlbmd0aDsKKworCQlDdXItPnNjTGlzdDIgPSBTQ0xpc3RFbnRyeTsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5BZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzIgPSBQQVNDTGlzdEVudHJ5OworCQlDdXItPm5nZW5lQnVmZmVyLk51bWJlcl9vZl9lbnRyaWVzXzIgPQorCQkJTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVM7CisKKwkJU0NMaXN0RW50cnkgICArPSAxOworCQlQQVNDTGlzdEVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisKKyNpZiBOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUyA+IDEKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTIC0gMTsgaisrKSB7CisJCQlTQ0xpc3RFbnRyeS0+QWRkcmVzcyA9IG9mOworCQkJU0NMaXN0RW50cnktPkxlbmd0aCA9IE9WRVJGTE9XX0JVRkZFUl9TSVpFOworCQkJU0NMaXN0RW50cnkgKz0gMTsKKwkJCVBBU0NMaXN0RW50cnkgKz0KKwkJCQlzaXplb2Yoc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQpOworCQl9CisjZW5kaWYKKworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgRmlsbFRTSWRsZUJ1ZmZlcihzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpwSWRsZUJ1ZmZlciwKKwkJCSAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpwUmluZ0J1ZmZlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qIENvcHkgcG9pbnRlciB0byBzY2F0dGVyIGdhdGhlciBsaXN0IGluIFRTUmluZ2J1ZmZlcgorCSAgIHN0cnVjdHVyZSBmb3IgYnVmZmVyIDIKKwkgICBMb2FkIG51bWJlciBvZiBidWZmZXIKKwkqLworCXUzMiBuID0gcFJpbmdCdWZmZXItPk51bUJ1ZmZlcnM7CisKKwkvKiBQb2ludCB0byBmaXJzdCBidWZmZXIgZW50cnkgKi8KKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gcFJpbmdCdWZmZXItPkhlYWQ7CisJaW50IGk7CisJLyogTG9vcCB0aHJ1IGFsbCBidWZmZXIgYW5kIHNldCBCdWZmZXIgMiBwb2ludGVycyB0byBUU0lkbGVidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCUN1ci0+QnVmZmVyMiA9IHBJZGxlQnVmZmVyLT5IZWFkLT5CdWZmZXIxOworCQlDdXItPnNjTGlzdDIgPSBwSWRsZUJ1ZmZlci0+SGVhZC0+c2NMaXN0MTsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5BZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzIgPQorCQkJcElkbGVCdWZmZXItPkhlYWQtPm5nZW5lQnVmZmVyLgorCQkJQWRkcmVzc19vZl9maXJzdF9lbnRyeV8xOworCQlDdXItPm5nZW5lQnVmZmVyLk51bWJlcl9vZl9lbnRyaWVzXzIgPQorCQkJcElkbGVCdWZmZXItPkhlYWQtPm5nZW5lQnVmZmVyLk51bWJlcl9vZl9lbnRyaWVzXzE7CisJCUN1ciA9IEN1ci0+TmV4dDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBSaW5nQnVmZmVyU2l6ZXNbTUFYX1NUUkVBTV0gPSB7CisJUklOR19TSVpFX1ZJREVPLAorCVJJTkdfU0laRV9WSURFTywKKwlSSU5HX1NJWkVfQVVESU8sCisJUklOR19TSVpFX0FVRElPLAorCVJJTkdfU0laRV9BVURJTywKK307CisKK3N0YXRpYyB1MzIgQnVmZmVyMVNpemVzW01BWF9TVFJFQU1dID0geworCU1BWF9WSURFT19CVUZGRVJfU0laRSwKKwlNQVhfVklERU9fQlVGRkVSX1NJWkUsCisJTUFYX0FVRElPX0JVRkZFUl9TSVpFLAorCU1BWF9BVURJT19CVUZGRVJfU0laRSwKKwlNQVhfQVVESU9fQlVGRkVSX1NJWkUKK307CisKK3N0YXRpYyB1MzIgQnVmZmVyMlNpemVzW01BWF9TVFJFQU1dID0geworCU1BWF9WQklfQlVGRkVSX1NJWkUsCisJTUFYX1ZCSV9CVUZGRVJfU0laRSwKKwkwLAorCTAsCisJMAorfTsKKworCitzdGF0aWMgaW50IEFsbG9jQ29tbW9uQnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgc3RhdHVzID0gMCwgaTsKKworCWRldi0+RldJbnRlcmZhY2VCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsIDQwOTYsCisJCQkJCQkgICAgICZkZXYtPlBBRldJbnRlcmZhY2VCdWZmZXIpOworCWlmICghZGV2LT5GV0ludGVyZmFjZUJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2LT5ob3N0dG9uZ2VuZSA9IGRldi0+RldJbnRlcmZhY2VCdWZmZXI7CisJZGV2LT5uZ2VuZXRvaG9zdCA9IGRldi0+RldJbnRlcmZhY2VCdWZmZXIgKyAyNTY7CisJZGV2LT5FdmVudEJ1ZmZlciA9IGRldi0+RldJbnRlcmZhY2VCdWZmZXIgKyA1MTI7CisKKwlkZXYtPk92ZXJmbG93QnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCQkJICAgT1ZFUkZMT1dfQlVGRkVSX1NJWkUsCisJCQkJCQkgICAmZGV2LT5QQU92ZXJmbG93QnVmZmVyKTsKKwlpZiAoIWRldi0+T3ZlcmZsb3dCdWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChkZXYtPk92ZXJmbG93QnVmZmVyLCAwLCBPVkVSRkxPV19CVUZGRVJfU0laRSk7CisKKwlmb3IgKGkgPSBTVFJFQU1fVklERU9JTjE7IGkgPCBNQVhfU1RSRUFNOyBpKyspIHsKKwkJaW50IHR5cGUgPSBkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVtpXTsKKworCQlkZXYtPmNoYW5uZWxbaV0uU3RhdGUgPSBLU1NUQVRFX1NUT1A7CisKKwkJaWYgKHR5cGUgJiAoTkdFTkVfSU9fVFYgfCBOR0VORV9JT19IRFRWIHwgTkdFTkVfSU9fQUlOKSkgeworCQkJc3RhdHVzID0gY3JlYXRlX3JpbmdfYnVmZmVyKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAmZGV2LT5jaGFubmVsW2ldLlJpbmdCdWZmZXIsCisJCQkJCQkgICAgUmluZ0J1ZmZlclNpemVzW2ldKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCisJCQlpZiAodHlwZSAmIChOR0VORV9JT19UViB8IE5HRU5FX0lPX0FJTikpIHsKKwkJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCQkgICAgIGRldi0+CisJCQkJCQkJICAgICBQQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJCSAgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCQkgICAgIFJpbmdCdWZmZXIsCisJCQkJCQkJICAgICBCdWZmZXIxU2l6ZXNbaV0sCisJCQkJCQkJICAgICBCdWZmZXIyU2l6ZXNbaV0pOworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAodHlwZSAmIE5HRU5FX0lPX0hEVFYpIHsKKwkJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCQkgICAgIGRldi0+CisJCQkJCQkJICAgICBQQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJCSAgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCQkgICAgIFJpbmdCdWZmZXIsCisJCQkJCQkJICAgTUFYX0hEVFZfQlVGRkVSX1NJWkUsCisJCQkJCQkJICAgICAwKTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAodHlwZSAmIChOR0VORV9JT19UU0lOIHwgTkdFTkVfSU9fVFNPVVQpKSB7CisKKwkJCXN0YXR1cyA9IGNyZWF0ZV9yaW5nX2J1ZmZlcihkZXYtPnBjaV9kZXYsCisJCQkJCQkgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCSAgICBUU1JpbmdCdWZmZXIsIFJJTkdfU0laRV9UUyk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKworCQkJc3RhdHVzID0gQWxsb2NhdGVSaW5nQnVmZmVycyhkZXYtPnBjaV9kZXYsCisJCQkJCQkgICAgIGRldi0+UEFPdmVyZmxvd0J1ZmZlciwKKwkJCQkJCSAgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCSAgICAgVFNSaW5nQnVmZmVyLAorCQkJCQkJICAgICBNQVhfVFNfQlVGRkVSX1NJWkUsIDApOworCQkJaWYgKHN0YXR1cykKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICh0eXBlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCXN0YXR1cyA9IGNyZWF0ZV9yaW5nX2J1ZmZlcihkZXYtPnBjaV9kZXYsCisJCQkJCQkgICAgJmRldi0+Y2hhbm5lbFtpXS4KKwkJCQkJCSAgICBUU0lkbGVCdWZmZXIsIDEpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAgZGV2LT5QQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgICBUU0lkbGVCdWZmZXIsCisJCQkJCQkgICAgIE1BWF9UU19CVUZGRVJfU0laRSwgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCQkJRmlsbFRTSWRsZUJ1ZmZlcigmZGV2LT5jaGFubmVsW2ldLlRTSWRsZUJ1ZmZlciwKKwkJCQkJICZkZXYtPmNoYW5uZWxbaV0uVFNSaW5nQnVmZmVyKTsKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBuZ2VuZV9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IG5nZW5lICpkZXYpCit7CisJaWYgKGRldi0+aW9tZW0pCisJCWlvdW5tYXAoZGV2LT5pb21lbSk7CisJZnJlZV9jb21tb25fYnVmZmVycyhkZXYpOworCXZmcmVlKGRldi0+dHNvdXRfYnVmKTsKKwl2ZnJlZShkZXYtPmFpbl9idWYpOworCXZmcmVlKGRldi0+dmluX2J1Zik7CisJdmZyZWUoZGV2KTsKK30KKworc3RhdGljIGludCBuZ2VuZV9nZXRfYnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpZiAoQWxsb2NDb21tb25CdWZmZXJzKGRldikpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVs0XSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCWRldi0+dHNvdXRfYnVmID0gdm1hbGxvYyhUU09VVF9CVUZfU0laRSk7CisJCWlmICghZGV2LT50c291dF9idWYpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZHZiX3JpbmdidWZmZXJfaW5pdCgmZGV2LT50c291dF9yYnVmLAorCQkJCSAgICBkZXYtPnRzb3V0X2J1ZiwgVFNPVVRfQlVGX1NJWkUpOworCX0KKwlpZiAoZGV2LT5jYXJkX2luZm8tPmlvX3R5cGVbMl0gJiBOR0VORV9JT19BSU4pIHsKKwkJZGV2LT5haW5fYnVmID0gdm1hbGxvYyhBSU5fQlVGX1NJWkUpOworCQlpZiAoIWRldi0+YWluX2J1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkZXYtPmFpbl9yYnVmLCBkZXYtPmFpbl9idWYsIEFJTl9CVUZfU0laRSk7CisJfQorCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVswXSAmIE5HRU5FX0lPX0hEVFYpIHsKKwkJZGV2LT52aW5fYnVmID0gdm1hbGxvYyhWSU5fQlVGX1NJWkUpOworCQlpZiAoIWRldi0+dmluX2J1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkZXYtPnZpbl9yYnVmLCBkZXYtPnZpbl9idWYsIFZJTl9CVUZfU0laRSk7CisJfQorCWRldi0+aW9tZW0gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaV9kZXYsIDApLAorCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpX2RldiwgMCkpOworCWlmICghZGV2LT5pb21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmdlbmVfaW5pdChzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgaTsKKworCXRhc2tsZXRfaW5pdCgmZGV2LT5ldmVudF90YXNrbGV0LCBldmVudF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylkZXYpOworCisJbWVtc2V0X2lvKGRldi0+aW9tZW0gKyAweGMwMDAsIDB4MDAsIDB4MjIwKTsKKwltZW1zZXRfaW8oZGV2LT5pb21lbSArIDB4YzQwMCwgMHgwMCwgMHgxMDApOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9TVFJFQU07IGkrKykgeworCQlkZXYtPmNoYW5uZWxbaV0uZGV2ID0gZGV2OworCQlkZXYtPmNoYW5uZWxbaV0ubnVtYmVyID0gaTsKKwl9CisKKwlkZXYtPmZ3X2ludGVyZmFjZV92ZXJzaW9uID0gMDsKKworCW5nd3JpdGVsKDAsIE5HRU5FX0lOVF9FTkFCTEUpOworCisJZGV2LT5pY291bnRzID0gbmdyZWFkbChOR0VORV9JTlRfQ09VTlRTKTsKKworCWRldi0+ZGV2aWNlX3ZlcnNpb24gPSBuZ3JlYWRsKERFVl9WRVIpICYgMHgwZjsKKwlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IERldmljZSB2ZXJzaW9uICVkXG4iLAorCSAgICAgICBkZXYtPmRldmljZV92ZXJzaW9uKTsKK30KKworc3RhdGljIGludCBuZ2VuZV9sb2FkX2Zpcm0oc3RydWN0IG5nZW5lICpkZXYpCit7CisJdTMyIHNpemU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJdTggKm5nZW5lX2Z3OworCWNoYXIgKmZ3X25hbWU7CisJaW50IGVyciwgdmVyc2lvbjsKKworCXZlcnNpb24gPSBkZXYtPmNhcmRfaW5mby0+ZndfdmVyc2lvbjsKKworCXN3aXRjaCAodmVyc2lvbikgeworCWRlZmF1bHQ6CisJY2FzZSAxNToKKwkJdmVyc2lvbiA9IDE1OworCQlzaXplID0gMjM0NjY7CisJCWZ3X25hbWUgPSAibmdlbmVfMTUuZnciOworCQlicmVhazsKKwljYXNlIDE2OgorCQlzaXplID0gMjM0OTg7CisJCWZ3X25hbWUgPSAibmdlbmVfMTYuZnciOworCQlicmVhazsKKwljYXNlIDE3OgorCQlzaXplID0gMjQ0NDY7CisJCWZ3X25hbWUgPSAibmdlbmVfMTcuZnciOworCQlicmVhazsKKwl9CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZkZXYtPnBjaV9kZXYtPmRldikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkJIjogQ291bGQgbm90IGxvYWQgZmlybXdhcmUgZmlsZSAlcy5cbiIsIGZ3X25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FCisJCQkiOiBDb3B5ICVzIHRvIHlvdXIgaG90cGx1ZyBkaXJlY3RvcnkhXG4iLCBmd19uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoc2l6ZSAhPSBmdy0+c2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUKKwkJCSI6IEZpcm13YXJlICVzIGhhcyBpbnZhbGlkIHNpemUhIiwgZndfbmFtZSk7CisJCWVyciA9IC0xOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJCSI6IExvYWRpbmcgZmlybXdhcmUgZmlsZSAlcy5cbiIsIGZ3X25hbWUpOworCQluZ2VuZV9mdyA9ICh1OCAqKSBmdy0+ZGF0YTsKKwkJZXJyID0gbmdlbmVfY29tbWFuZF9sb2FkX2Zpcm13YXJlKGRldiwgbmdlbmVfZncsIHNpemUpOworCX0KKworCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbmdlbmVfc3RvcChzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlkb3duKCZkZXYtPmNtZF9tdXRleCk7CisJaTJjX2RlbF9hZGFwdGVyKCYoZGV2LT5jaGFubmVsWzBdLmkyY19hZGFwdGVyKSk7CisJaTJjX2RlbF9hZGFwdGVyKCYoZGV2LT5jaGFubmVsWzFdLmkyY19hZGFwdGVyKSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfSU5UX0VOQUJMRSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfQ09NTUFORCk7CisJbmd3cml0ZWwoMCwgTkdFTkVfQ09NTUFORF9ISSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfU1RBVFVTKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9TVEFUVVNfSEkpOworCW5nd3JpdGVsKDAsIE5HRU5FX0VWRU5UKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9FVkVOVF9ISSk7CisJZnJlZV9pcnEoZGV2LT5wY2lfZGV2LT5pcnEsIGRldik7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfc3RhcnQoc3RydWN0IG5nZW5lICpkZXYpCit7CisJaW50IHN0YXQ7CisJaW50IGk7CisKKwlwY2lfc2V0X21hc3RlcihkZXYtPnBjaV9kZXYpOworCW5nZW5lX2luaXQoZGV2KTsKKworCXN0YXQgPSByZXF1ZXN0X2lycShkZXYtPnBjaV9kZXYtPmlycSwgaXJxX2hhbmRsZXIsCisJCQkgICBJUlFGX1NIQVJFRCwgIm5HZW5lIiwKKwkJCSAgICh2b2lkICopZGV2KTsKKwlpZiAoc3RhdCA8IDApCisJCXJldHVybiBzdGF0OworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5jbWRfd3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dHhfd3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+cnhfd3EpOworCXNlbWFfaW5pdCgmZGV2LT5jbWRfbXV0ZXgsIDEpOworCXNlbWFfaW5pdCgmZGV2LT5zdHJlYW1fbXV0ZXgsIDEpOworCXNlbWFfaW5pdCgmZGV2LT5wbGxfbXV0ZXgsIDEpOworCXNlbWFfaW5pdCgmZGV2LT5pMmNfc3dpdGNoX211dGV4LCAxKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5jbWRfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9TVFJFQU07IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJmRldi0+Y2hhbm5lbFtpXS5zdGF0ZV9sb2NrKTsKKwluZ3dyaXRlbCgxLCBUSU1FU1RBTVBTKTsKKworCW5nd3JpdGVsKDEsIE5HRU5FX0lOVF9FTkFCTEUpOworCisJc3RhdCA9IG5nZW5lX2xvYWRfZmlybShkZXYpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byBmYWlsOworCisJc3RhdCA9IG5nZW5lX2kyY19pbml0KGRldiwgMCk7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ID0gbmdlbmVfaTJjX2luaXQoZGV2LCAxKTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDsKKworCWlmIChkZXYtPmNhcmRfaW5mby0+ZndfdmVyc2lvbiA9PSAxNykgeworCQl1OCB0c2luNF9jb25maWdbNl0gPSB7CisJCQkzMDcyIC8gNjQsIDMwNzIgLyA2NCwgMCwgMzA3MiAvIDY0LCAzMDcyIC8gNjQsIDB9OworCQl1OCBkZWZhdWx0X2NvbmZpZ1s2XSA9IHsKKwkJCTQwOTYgLyA2NCwgNDA5NiAvIDY0LCAwLCAyMDQ4IC8gNjQsIDIwNDggLyA2NCwgMH07CisJCXU4ICpiY29uZiA9IGRlZmF1bHRfY29uZmlnOworCisJCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVszXSA9PSBOR0VORV9JT19UU0lOKQorCQkJYmNvbmYgPSB0c2luNF9jb25maWc7CisJCWRwcmludGsoS0VSTl9ERUJVRyBERVZJQ0VfTkFNRSAiOiBGVyAxNyBidWZmZXIgY29uZmlnXG4iKTsKKwkJc3RhdCA9IG5nZW5lX2NvbW1hbmRfY29uZmlnX2ZyZWVfYnVmKGRldiwgYmNvbmYpOworCX0gZWxzZSB7CisJCWludCBiY29uZiA9IEJVRkZFUl9DT05GSUdfNDQyMjsKKwkJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzNdID09IE5HRU5FX0lPX1RTSU4pCisJCQliY29uZiA9IEJVRkZFUl9DT05GSUdfMzMzMzsKKwkJc3RhdCA9IG5nZW5lX2NvbW1hbmRfY29uZmlnX2J1ZihkZXYsIGJjb25mKTsKKwl9CisJcmV0dXJuIHN0YXQ7CitmYWlsOgorCW5nd3JpdGVsKDAsIE5HRU5FX0lOVF9FTkFCTEUpOworCWZyZWVfaXJxKGRldi0+cGNpX2Rldi0+aXJxLCBkZXYpOworCXJldHVybiBzdGF0OworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTd2l0Y2ggY29udHJvbCAoSTJDIGdhdGVzLCBldGMuKSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVtb2QvdHVuZXIgYXR0YWNobWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB0dW5lcl9hdHRhY2hfc3R2NjExMChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKmZlY29uZiA9IChzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKikKKwkJY2hhbi0+ZGV2LT5jYXJkX2luZm8tPmZlX2NvbmZpZ1tjaGFuLT5udW1iZXJdOworCXN0cnVjdCBzdHY2MTEweF9jb25maWcgKnR1bmVyY29uZiA9IChzdHJ1Y3Qgc3R2NjExMHhfY29uZmlnICopCisJCWNoYW4tPmRldi0+Y2FyZF9pbmZvLT50dW5lcl9jb25maWdbY2hhbi0+bnVtYmVyXTsKKwlzdHJ1Y3Qgc3R2NjExMHhfZGV2Y3RsICpjdGw7CisKKwljdGwgPSBkdmJfYXR0YWNoKHN0djYxMTB4X2F0dGFjaCwgY2hhbi0+ZmUsIHR1bmVyY29uZiwKKwkJCSAmY2hhbi0+aTJjX2FkYXB0ZXIpOworCWlmIChjdGwgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIJREVWSUNFX05BTUUgIjogTm8gU1RWNjExMFggZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZmVjb25mLT50dW5lcl9pbml0ICAgICAgICAgID0gY3RsLT50dW5lcl9pbml0OworCWZlY29uZi0+dHVuZXJfc2V0X21vZGUgICAgICA9IGN0bC0+dHVuZXJfc2V0X21vZGU7CisJZmVjb25mLT50dW5lcl9zZXRfZnJlcXVlbmN5ID0gY3RsLT50dW5lcl9zZXRfZnJlcXVlbmN5OworCWZlY29uZi0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeSA9IGN0bC0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeTsKKwlmZWNvbmYtPnR1bmVyX3NldF9iYW5kd2lkdGggPSBjdGwtPnR1bmVyX3NldF9iYW5kd2lkdGg7CisJZmVjb25mLT50dW5lcl9nZXRfYmFuZHdpZHRoID0gY3RsLT50dW5lcl9nZXRfYmFuZHdpZHRoOworCWZlY29uZi0+dHVuZXJfc2V0X2JiZ2FpbiAgICA9IGN0bC0+dHVuZXJfc2V0X2JiZ2FpbjsKKwlmZWNvbmYtPnR1bmVyX2dldF9iYmdhaW4gICAgPSBjdGwtPnR1bmVyX2dldF9iYmdhaW47CisJZmVjb25mLT50dW5lcl9zZXRfcmVmY2xrICAgID0gY3RsLT50dW5lcl9zZXRfcmVmY2xrOworCWZlY29uZi0+dHVuZXJfZ2V0X3N0YXR1cyAgICA9IGN0bC0+dHVuZXJfZ2V0X3N0YXR1czsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZGVtb2RfYXR0YWNoX3N0djA5MDAoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IHN0djA5MHhfY29uZmlnICpmZWNvbmYgPSAoc3RydWN0IHN0djA5MHhfY29uZmlnICopCisJCWNoYW4tPmRldi0+Y2FyZF9pbmZvLT5mZV9jb25maWdbY2hhbi0+bnVtYmVyXTsKKworCWNoYW4tPmZlID0gZHZiX2F0dGFjaChzdHYwOTB4X2F0dGFjaCwKKwkJCWZlY29uZiwKKwkJCSZjaGFuLT5pMmNfYWRhcHRlciwKKwkJCWNoYW4tPm51bWJlciA9PSAwID8gU1RWMDkweF9ERU1PRFVMQVRPUl8wIDoKKwkJCQkJICAgIFNUVjA5MHhfREVNT0RVTEFUT1JfMSk7CisJaWYgKGNoYW4tPmZlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCURFVklDRV9OQU1FICI6IE5vIFNUVjA5MDAgZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFkdmJfYXR0YWNoKGxuYmgyNF9hdHRhY2gsIGNoYW4tPmZlLCAmY2hhbi0+aTJjX2FkYXB0ZXIsIDAsCisJCQkwLCBjaGFuLT5kZXYtPmNhcmRfaW5mby0+bG5iW2NoYW4tPm51bWJlcl0pKSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBObyBMTkJIMjQgZm91bmQhXG4iKTsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChjaGFuLT5mZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY2hhbm5lbChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZjaGFuLT5kZW11eDsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgbmdlbmVfaW5mbyAqbmkgPSBkZXYtPmNhcmRfaW5mbzsKKwlpbnQgaW8gPSBuaS0+aW9fdHlwZVtjaGFuLT5udW1iZXJdOworCisjaWZkZWYgQ09NTUFORF9USU1FT1VUX1dPUktBUk9VTkQKKwlpZiAoY2hhbi0+cnVubmluZykKKwkJc2V0X3RyYW5zZmVyKGNoYW4sIDApOworI2VuZGlmCisKKwl0YXNrbGV0X2tpbGwoJmNoYW4tPmRlbXV4X3Rhc2tsZXQpOworCisJaWYgKGlvICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKwkJaWYgKGNoYW4tPmZlKSB7CisJCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChjaGFuLT5mZSk7CisJCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGNoYW4tPmZlKTsKKwkJCWNoYW4tPmZlID0gMDsKKwkJfQorCQlkdmJkZW11eC0+ZG14LmNsb3NlKCZkdmJkZW11eC0+ZG14KTsKKwkJZHZiZGVtdXgtPmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsCisJCQkJCSAgICAgICZjaGFuLT5od19mcm9udGVuZCk7CisJCWR2YmRlbXV4LT5kbXgucmVtb3ZlX2Zyb250ZW5kKCZkdmJkZW11eC0+ZG14LAorCQkJCQkgICAgICAmY2hhbi0+bWVtX2Zyb250ZW5kKTsKKwkJZHZiX2RteGRldl9yZWxlYXNlKCZjaGFuLT5kbXhkZXYpOworCQlkdmJfZG14X3JlbGVhc2UoJmNoYW4tPmRlbXV4KTsKKworCQlpZiAoY2hhbi0+bnVtYmVyID09IDAgfHwgIW9uZV9hZGFwdGVyKQorCQkJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZGV2LT5hZGFwdGVyW2NoYW4tPm51bWJlcl0pOworCX0KK30KKworc3RhdGljIGludCBpbml0X2NoYW5uZWwoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4pCit7CisJaW50IHJldCA9IDAsIG5yID0gY2hhbi0+bnVtYmVyOworCXN0cnVjdCBkdmJfYWRhcHRlciAqYWRhcHRlciA9IE5VTEw7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmY2hhbi0+ZGVtdXg7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisJc3RydWN0IG5nZW5lX2luZm8gKm5pID0gZGV2LT5jYXJkX2luZm87CisJaW50IGlvID0gbmktPmlvX3R5cGVbbnJdOworCisJdGFza2xldF9pbml0KCZjaGFuLT5kZW11eF90YXNrbGV0LCBkZW11eF90YXNrbGV0LCAodW5zaWduZWQgbG9uZyljaGFuKTsKKwljaGFuLT51c2VycyA9IDA7CisJY2hhbi0+dHlwZSA9IGlvOworCWNoYW4tPm1vZGUgPSBjaGFuLT50eXBlOwkvKiBmb3Igbm93IG9ubHkgb25lIG1vZGUgKi8KKworCWlmIChpbyAmIChOR0VORV9JT19UU0lOIHwgTkdFTkVfSU9fVFNPVVQpKSB7CisJCWlmIChuciA+PSBTVFJFQU1fQVVESU9JTjEpCisJCQljaGFuLT5EYXRhRm9ybWF0RmxhZ3MgPSBERl9TV0FQMzI7CisJCWlmIChuciA9PSAwIHx8ICFvbmVfYWRhcHRlcikgeworCQkJYWRhcHRlciA9ICZkZXYtPmFkYXB0ZXJbbnJdOworCQkJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoYWRhcHRlciwgIm5HZW5lIiwKKwkJCQkJCSAgIFRISVNfTU9EVUxFLAorCQkJCQkJICAgJmNoYW4tPmRldi0+cGNpX2Rldi0+ZGV2LAorCQkJCQkJICAgYWRhcHRlcl9ucik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgeworCQkJYWRhcHRlciA9ICZkZXYtPmFkYXB0ZXJbMF07CisJCX0KKworCQlyZXQgPSBteV9kdmJfZG14X3RzX2NhcmRfaW5pdChkdmJkZW11eCwgIlNXIGRlbXV4IiwKKwkJCQkJICAgICAgbmdlbmVfc3RhcnRfZmVlZCwKKwkJCQkJICAgICAgbmdlbmVfc3RvcF9mZWVkLCBjaGFuKTsKKwkJcmV0ID0gbXlfZHZiX2RteGRldl90c19jYXJkX2luaXQoJmNoYW4tPmRteGRldiwgJmNoYW4tPmRlbXV4LAorCQkJCQkJICZjaGFuLT5od19mcm9udGVuZCwKKwkJCQkJCSAmY2hhbi0+bWVtX2Zyb250ZW5kLCBhZGFwdGVyKTsKKwl9CisKKwlpZiAoaW8gJiBOR0VORV9JT19UU0lOKSB7CisJCWNoYW4tPmZlID0gTlVMTDsKKwkJaWYgKG5pLT5kZW1vZF9hdHRhY2hbbnJdKQorCQkJbmktPmRlbW9kX2F0dGFjaFtucl0oY2hhbik7CisJCWlmIChjaGFuLT5mZSkgeworCQkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZChhZGFwdGVyLCBjaGFuLT5mZSkgPCAwKSB7CisJCQkJaWYgKGNoYW4tPmZlLT5vcHMucmVsZWFzZSkKKwkJCQkJY2hhbi0+ZmUtPm9wcy5yZWxlYXNlKGNoYW4tPmZlKTsKKwkJCQljaGFuLT5mZSA9IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKGNoYW4tPmZlICYmIG5pLT50dW5lcl9hdHRhY2hbbnJdKQorCQkJaWYgKG5pLT50dW5lcl9hdHRhY2hbbnJdIChjaGFuKSA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUKKwkJCQkgICAgICAgIjogVHVuZXIgYXR0YWNoIGZhaWxlZCBvbiBjaGFubmVsICVkIVxuIiwKKwkJCQkgICAgICAgbnIpOworCQkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluaXRfY2hhbm5lbHMoc3RydWN0IG5nZW5lICpkZXYpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NUUkVBTTsgaSsrKSB7CisJCWlmIChpbml0X2NoYW5uZWwoJmRldi0+Y2hhbm5lbFtpXSkgPCAwKSB7CisJCQlmb3IgKGogPSBpIC0gMTsgaiA+PSAwOyBqLS0pCisJCQkJcmVsZWFzZV9jaGFubmVsKCZkZXYtPmNoYW5uZWxbal0pOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGRldmljZSBwcm9iZS9yZW1vdmUgY2FsbHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBuZ2VuZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5nZW5lICpkZXYgPSAoc3RydWN0IG5nZW5lICopcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOworCisJdGFza2xldF9raWxsKCZkZXYtPmV2ZW50X3Rhc2tsZXQpOworCWZvciAoaSA9IE1BWF9TVFJFQU0gLSAxOyBpID49IDA7IGktLSkKKwkJcmVsZWFzZV9jaGFubmVsKCZkZXYtPmNoYW5uZWxbaV0pOworCW5nZW5lX3N0b3AoZGV2KTsKKwluZ2VuZV9yZWxlYXNlX2J1ZmZlcnMoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgMCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBuZ2VuZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBuZ2VuZSAqZGV2OworCWludCBzdGF0ID0gMDsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IG5nZW5lKSk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXN0YXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwwOworCX0KKwltZW1zZXQoZGV2LCAwLCBzaXplb2Yoc3RydWN0IG5nZW5lKSk7CisKKwlkZXYtPnBjaV9kZXYgPSBwY2lfZGV2OworCWRldi0+Y2FyZF9pbmZvID0gKHN0cnVjdCBuZ2VuZV9pbmZvICopaWQtPmRyaXZlcl9kYXRhOworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogRm91bmQgJXNcbiIsIGRldi0+Y2FyZF9pbmZvLT5uYW1lKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBkZXYpOworCisJLyogQWxsb2MgYnVmZmVycyBhbmQgc3RhcnQgbkdlbmUgKi8KKwlzdGF0ID0gbmdlbmVfZ2V0X2J1ZmZlcnMoZGV2KTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDE7CisJc3RhdCA9IG5nZW5lX3N0YXJ0KGRldik7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIGZhaWwxOworCisJZGV2LT5pMmNfY3VycmVudF9idXMgPSAtMTsKKworCS8qIFJlZ2lzdGVyIERWQiBhZGFwdGVycyBhbmQgZGV2aWNlcyBmb3IgYm90aCBjaGFubmVscyAqLworCWlmIChpbml0X2NoYW5uZWxzKGRldikgPCAwKQorCQlnb3RvIGZhaWwyOworCisJcmV0dXJuIDA7CisKK2ZhaWwyOgorCW5nZW5lX3N0b3AoZGV2KTsKK2ZhaWwxOgorCW5nZW5lX3JlbGVhc2VfYnVmZmVycyhkZXYpOworZmFpbDA6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCAwKTsKKwlyZXR1cm4gc3RhdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDYXJkIGNvbmZpZ3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHN0djA5MHhfY29uZmlnIGZlX2NpbmVTMiA9IHsKKwkuZGV2aWNlICAgICAgICAgPSBTVFYwOTAwLAorCS5kZW1vZF9tb2RlICAgICA9IFNUVjA5MHhfRFVBTCwKKwkuY2xrX21vZGUgICAgICAgPSBTVFYwOTB4X0NMS19FWFQsCisKKwkueHRhbCAgICAgICAgICAgPSAyNzAwMDAwMCwKKwkuYWRkcmVzcyAgICAgICAgPSAweDY4LAorCisJLnRzMV9tb2RlICAgICAgID0gU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRCwKKwkudHMyX21vZGUgICAgICAgPSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVELAorCisJLnJlcGVhdGVyX2xldmVsID0gU1RWMDkweF9SUFRMRVZFTF8xNiwKKworCS5hZGMxX3JhbmdlCT0gU1RWMDkweF9BRENfMVZwcCwKKwkuYWRjMl9yYW5nZQk9IFNUVjA5MHhfQURDXzFWcHAsCisKKwkuZGlzZXFjX2VudmVsb3BlX21vZGUgPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEweF9jb25maWcgdHVuZXJfY2luZVMyXzAgPSB7CisJLmFkZHIJPSAweDYwLAorCS5yZWZjbGsJPSAyNzAwMDAwMCwKKwkuY2xrX2RpdiA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dW5lcl9jaW5lUzJfMSA9IHsKKwkuYWRkcgk9IDB4NjMsCisJLnJlZmNsawk9IDI3MDAwMDAwLAorCS5jbGtfZGl2ID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmdlbmVfaW5mbyBuZ2VuZV9pbmZvX2NpbmVTMiA9IHsKKwkudHlwZQkJPSBOR0VORV9TSURFV0lOREVSLAorCS5uYW1lCQk9ICJMaW51eDRNZWRpYSBjaW5lUzIgRFZCLVMyIFR3aW4gVHVuZXIiLAorCS5pb190eXBlCT0ge05HRU5FX0lPX1RTSU4sIE5HRU5FX0lPX1RTSU59LAorCS5kZW1vZF9hdHRhY2gJPSB7ZGVtb2RfYXR0YWNoX3N0djA5MDAsIGRlbW9kX2F0dGFjaF9zdHYwOTAwfSwKKwkudHVuZXJfYXR0YWNoCT0ge3R1bmVyX2F0dGFjaF9zdHY2MTEwLCB0dW5lcl9hdHRhY2hfc3R2NjExMH0sCisJLmZlX2NvbmZpZwk9IHsmZmVfY2luZVMyLCAmZmVfY2luZVMyfSwKKwkudHVuZXJfY29uZmlnCT0geyZ0dW5lcl9jaW5lUzJfMCwgJnR1bmVyX2NpbmVTMl8xfSwKKwkubG5iCQk9IHsweDBiLCAweDA4fSwKKwkudHNmCQk9IHszLCAzfSwKKwkuZndfdmVyc2lvbgk9IDE1LAorfTsKKworc3RhdGljIHN0cnVjdCBuZ2VuZV9pbmZvIG5nZW5lX2luZm9fc2F0aXhzMiA9IHsKKwkudHlwZQkJPSBOR0VORV9TSURFV0lOREVSLAorCS5uYW1lCQk9ICJNeXN0aXF1ZSBTYVRpWC1TMiBEdWFsIiwKKwkuaW9fdHlwZQk9IHtOR0VORV9JT19UU0lOLCBOR0VORV9JT19UU0lOfSwKKwkuZGVtb2RfYXR0YWNoCT0ge2RlbW9kX2F0dGFjaF9zdHYwOTAwLCBkZW1vZF9hdHRhY2hfc3R2MDkwMH0sCisJLnR1bmVyX2F0dGFjaAk9IHt0dW5lcl9hdHRhY2hfc3R2NjExMCwgdHVuZXJfYXR0YWNoX3N0djYxMTB9LAorCS5mZV9jb25maWcJPSB7JmZlX2NpbmVTMiwgJmZlX2NpbmVTMn0sCisJLnR1bmVyX2NvbmZpZwk9IHsmdHVuZXJfY2luZVMyXzAsICZ0dW5lcl9jaW5lUzJfMX0sCisJLmxuYgkJPSB7MHgwYiwgMHgwOH0sCisJLnRzZgkJPSB7MywgM30sCisJLmZ3X3ZlcnNpb24JPSAxNSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQQ0kgU3Vic3lzdGVtIElEICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE5HRU5FX0lEKF9zdWJ2ZW5kLCBfc3ViZGV2LCBfZHJpdmVyZGF0YSkgeyBcCisJLnZlbmRvciA9IE5HRU5FX1ZJRCwgLmRldmljZSA9IE5HRU5FX1BJRCwgXAorCS5zdWJ2ZW5kb3IgPSBfc3VidmVuZCwgLnN1YmRldmljZSA9IF9zdWJkZXYsIFwKKwkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgJl9kcml2ZXJkYXRhIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2VuZV9pZF90YmxbXSBfX2RldmluaXRkYXRhID0geworCU5HRU5FX0lEKDB4MThjMywgMHhhYmMzLCBuZ2VuZV9pbmZvX2NpbmVTMiksCisJTkdFTkVfSUQoMHgxOGMzLCAweGFiYzQsIG5nZW5lX2luZm9fY2luZVMyKSwKKwlOR0VORV9JRCgweDE4YzMsIDB4ZGIwMSwgbmdlbmVfaW5mb19zYXRpeHMyKSwKKwl7MH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmdlbmVfaWRfdGJsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbml0L0V4aXQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZ2VuZV9lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIGVudW0gcGNpX2NoYW5uZWxfc3RhdGUgc3RhdGUpCit7CisJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IFBDSSBlcnJvclxuIik7CisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX2Zyb3plbikKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZ2VuZV9saW5rX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBsaW5rIHJlc2V0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgbmdlbmVfc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogc2xvdCByZXNldFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5nZW5lX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogcmVzdW1lXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbmdlbmVfZXJyb3JzID0geworCS5lcnJvcl9kZXRlY3RlZCA9IG5nZW5lX2Vycm9yX2RldGVjdGVkLAorCS5saW5rX3Jlc2V0ID0gbmdlbmVfbGlua19yZXNldCwKKwkuc2xvdF9yZXNldCA9IG5nZW5lX3Nsb3RfcmVzZXQsCisJLnJlc3VtZSA9IG5nZW5lX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2VuZV9wY2lfZHJpdmVyID0geworCS5uYW1lICAgICAgICA9ICJuZ2VuZSIsCisJLmlkX3RhYmxlICAgID0gbmdlbmVfaWRfdGJsLAorCS5wcm9iZSAgICAgICA9IG5nZW5lX3Byb2JlLAorCS5yZW1vdmUgICAgICA9IF9fZGV2ZXhpdF9wKG5nZW5lX3JlbW92ZSksCisJLmVycl9oYW5kbGVyID0gJm5nZW5lX2Vycm9ycywKK307CisKK3N0YXRpYyBfX2luaXQgaW50IG1vZHVsZV9pbml0X25nZW5lKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAibkdlbmUgUENJRSBicmlkZ2UgZHJpdmVyLCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBNaWNyb25hc1xuIik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm5nZW5lX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgbW9kdWxlX2V4aXRfbmdlbmUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5nZW5lX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtb2R1bGVfaW5pdF9uZ2VuZSk7Cittb2R1bGVfZXhpdChtb2R1bGVfZXhpdF9uZ2VuZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigibkdlbmUiKTsKK01PRFVMRV9BVVRIT1IoIk1pY3JvbmFzLCBSYWxwaCBNZXR6bGVyLCBNYW5mcmVkIFZvZWxrZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZWIyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS5oCkBAIC0wLDAgKzEsODU5IEBACisvKgorICogbmdlbmUuaDogbkdlbmUgUENJZSBicmlkZ2UgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgTWljcm9uYXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIG9ubHksIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICogT3IsIHBvaW50IHlvdXIgYnJvd3NlciB0byBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaWZuZGVmIF9OR0VORV9IXworI2RlZmluZSBfTkdFTkVfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCisjaW5jbHVkZSAiZG14ZGV2LmgiCisjaW5jbHVkZSAiZHZiZGV2LmgiCisjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiZHZiX3JpbmdidWZmZXIuaCIKKworI2RlZmluZSBOR0VORV9WSUQgICAgICAgMHgxOGMzCisjZGVmaW5lIE5HRU5FX1BJRCAgICAgICAweDA3MjAKKworI2lmbmRlZiBWSURFT19DQVBfVkMxCisjZGVmaW5lIFZJREVPX0NBUF9BVkMgICAxMjgKKyNkZWZpbmUgVklERU9fQ0FQX0gyNjQgIDEyOAorI2RlZmluZSBWSURFT19DQVBfVkMxICAgMjU2CisjZGVmaW5lIFZJREVPX0NBUF9XTVY5ICAyNTYKKyNkZWZpbmUgVklERU9fQ0FQX01QRUc0IDUxMgorI2VuZGlmCisKK2VudW0gU1RSRUFNIHsKKwlTVFJFQU1fVklERU9JTjEgPSAwLCAgICAgICAgLyogSVRVNjU2IG9yIFRTIElucHV0ICovCisJU1RSRUFNX1ZJREVPSU4yLAorCVNUUkVBTV9BVURJT0lOMSwgICAgICAgICAgICAvKiBJMlMgb3IgU1BJIElucHV0ICovCisJU1RSRUFNX0FVRElPSU4yLAorCVNUUkVBTV9BVURJT09VVCwKKwlNQVhfU1RSRUFNCit9OworCitlbnVtIFNNT0RFX0JJVFMgeworCVNNT0RFX0FVRElPX1NQRElGID0gMHgyMCwKKwlTTU9ERV9BVlNZTkMgPSAweDEwLAorCVNNT0RFX1RSQU5TUE9SVF9TVFJFQU0gPSAweDA4LAorCVNNT0RFX0FVRElPX0NBUFRVUkUgPSAweDA0LAorCVNNT0RFX1ZCSV9DQVBUVVJFID0gMHgwMiwKKwlTTU9ERV9WSURFT19DQVBUVVJFID0gMHgwMQorfTsKKworZW51bSBTVFJFQU1fRkxBR19CSVRTIHsKKwlTRkxBR19DSFJPTUFfRk9STUFUXzJDT01QICA9IDB4MDEsIC8qIENocm9tYSBGb3JtYXQgOiAyJ3MgY29tcGxlbWVudCAqLworCVNGTEFHX0NIUk9NQV9GT1JNQVRfT0ZGU0VUID0gMHgwMCwgLyogQ2hyb21hIEZvcm1hdCA6IEJpbmFyeSBvZmZzZXQgKi8KKwlTRkxBR19PUkRFUl9MVU1BX0NIUk9NQSAgICA9IDB4MDIsIC8qIEJ5dGUgb3JkZXI6IFksQ2IsWSxDciAqLworCVNGTEFHX09SREVSX0NIUk9NQV9MVU1BICAgID0gMHgwMCwgLyogQnl0ZSBvcmRlcjogQ2IsWSxDcixZICovCisJU0ZMQUdfQ09MT1JCQVIgICAgICAgICAgICAgPSAweDA0LCAvKiBTZWxlY3QgY29sb3JiYXIgKi8KK307CisKKyNkZWZpbmUgUFJPR1JBTV9ST00gICAgIDB4MDAwMAorI2RlZmluZSBQUk9HUkFNX1NSQU0gICAgMHgxMDAwCisjZGVmaW5lIFBFUklQSEVSQUxTMCAgICAweDgwMDAKKyNkZWZpbmUgUEVSSVBIRVJBTFMxICAgIDB4OTAwMAorI2RlZmluZSBTSEFSRURfQlVGRkVSICAgMHhDMDAwCisKKyNkZWZpbmUgSE9TVF9UT19OR0VORSAgICAoU0hBUkVEX0JVRkZFUisweDAwMDApCisjZGVmaW5lIE5HRU5FX1RPX0hPU1QgICAgKFNIQVJFRF9CVUZGRVIrMHgwMTAwKQorI2RlZmluZSBOR0VORV9DT01NQU5EICAgIChTSEFSRURfQlVGRkVSKzB4MDIwMCkKKyNkZWZpbmUgTkdFTkVfQ09NTUFORF9ISSAoU0hBUkVEX0JVRkZFUisweDAyMDQpCisjZGVmaW5lIE5HRU5FX1NUQVRVUyAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjA4KQorI2RlZmluZSBOR0VORV9TVEFUVVNfSEkgIChTSEFSRURfQlVGRkVSKzB4MDIwQykKKyNkZWZpbmUgTkdFTkVfRVZFTlQgICAgICAoU0hBUkVEX0JVRkZFUisweDAyMTApCisjZGVmaW5lIE5HRU5FX0VWRU5UX0hJICAgKFNIQVJFRF9CVUZGRVIrMHgwMjE0KQorI2RlZmluZSBWQVJJQUJMRVMgICAgICAgIChTSEFSRURfQlVGRkVSKzB4MDIxMCkKKworI2RlZmluZSBOR0VORV9JTlRfQ09VTlRTICAgICAgIChTSEFSRURfQlVGRkVSKzB4MDI2MCkKKyNkZWZpbmUgTkdFTkVfSU5UX0VOQUJMRSAgICAgICAoU0hBUkVEX0JVRkZFUisweDAyNjQpCisjZGVmaW5lIE5HRU5FX1ZCSV9MSU5FX0NPVU5UICAgKFNIQVJFRF9CVUZGRVIrMHgwMjY4KQorCisjZGVmaW5lIEJVRkZFUl9HUF9YTUlUICAoU0hBUkVEX0JVRkZFUisweDA4MDApCisjZGVmaW5lIEJVRkZFUl9HUF9SRUNWICAoU0hBUkVEX0JVRkZFUisweDA5MDApCisjZGVmaW5lIEVFUFJPTV9BUkVBICAgICAoU0hBUkVEX0JVRkZFUisweDBBMDApCisKKyNkZWZpbmUgU0dfVl9JTl8xICAgICAgIChTSEFSRURfQlVGRkVSKzB4MEE4MCkKKyNkZWZpbmUgU0dfVkJJXzEgICAgICAgIChTSEFSRURfQlVGRkVSKzB4MEIwMCkKKyNkZWZpbmUgU0dfQV9JTl8xICAgICAgIChTSEFSRURfQlVGRkVSKzB4MEI4MCkKKyNkZWZpbmUgU0dfVl9JTl8yICAgICAgIChTSEFSRURfQlVGRkVSKzB4MEMwMCkKKyNkZWZpbmUgU0dfVkJJXzIgICAgICAgIChTSEFSRURfQlVGRkVSKzB4MEM4MCkKKyNkZWZpbmUgU0dfQV9JTl8yICAgICAgIChTSEFSRURfQlVGRkVSKzB4MEQwMCkKKyNkZWZpbmUgU0dfVl9PVVQgICAgICAgIChTSEFSRURfQlVGRkVSKzB4MEQ4MCkKKyNkZWZpbmUgU0dfQV9PVVQyICAgICAgIChTSEFSRURfQlVGRkVSKzB4MEUwMCkKKworI2RlZmluZSBEQVRBX0FfSU5fMSAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRTgwKQorI2RlZmluZSBEQVRBX0FfSU5fMiAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRjAwKQorI2RlZmluZSBEQVRBX0FfT1VUICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRjgwKQorI2RlZmluZSBEQVRBX1ZfSU5fMSAgICAgKFNIQVJFRF9CVUZGRVIrMHgxMDAwKQorI2RlZmluZSBEQVRBX1ZfSU5fMiAgICAgKFNIQVJFRF9CVUZGRVIrMHgyMDAwKQorI2RlZmluZSBEQVRBX1ZfT1VUICAgICAgKFNIQVJFRF9CVUZGRVIrMHgzMDAwKQorCisjZGVmaW5lIERBVEFfRklGT19BUkVBICAoU0hBUkVEX0JVRkZFUisweDEwMDApCisKKyNkZWZpbmUgVElNRVNUQU1QUyAgICAgIDB4QTAwMAorI2RlZmluZSBTQ1JBVENIUEFEICAgICAgMHhBMDgwCisjZGVmaW5lIEZPUkNFX0lOVCAgICAgICAweEEwODgKKyNkZWZpbmUgRk9SQ0VfTk1JICAgICAgIDB4QTA5MAorI2RlZmluZSBJTlRfU1RBVFVTICAgICAgMHhBMEEwCisKKyNkZWZpbmUgREVWX1ZFUiAgICAgICAgIDB4OTAwNAorCisjZGVmaW5lIEZXX0RFQlVHX0RFRkFVTFQgKFBST0dSQU1fU1JBTSsweDAwRkYpCisKK3N0cnVjdCBTR19BRERSIHsKKwl1NjQgc3RhcnQ7CisJdTY0IGN1cnI7CisJdTE2IGN1cnJfcHRyOworCXUxNiBlbGVtZW50czsKKwl1MzIgcGFkWzNdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgU0hBUkVEX01FTU9SWSB7CisJLyogQzAwMCAqLworCXUzMiBIb3N0VG9OZ2VuZVs2NF07CisKKwkvKiBDMTAwICovCisJdTMyIE5nZW5lVG9Ib3N0WzY0XTsKKworCS8qIEMyMDAgKi8KKwl1NjQgTmdlbmVDb21tYW5kOworCXU2NCBOZ2VuZVN0YXR1czsKKwl1NjQgTmdlbmVFdmVudDsKKworCS8qIEMyMTAgKi8KKwl1OCBwYWQxWzB4YzI2MCAtIDB4YzIxOF07CisKKwkvKiBDMjYwICovCisJdTMyIEludENvdW50czsKKwl1MzIgSW50RW5hYmxlOworCisJLyogQzI2OCAqLworCXU4IHBhZDJbMHhkMDAwIC0gMHhjMjY4XTsKKworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgQlVGRkVSX1NUUkVBTV9SRVNVTFRTIHsKKwl1MzIgQ2xvY2s7ICAgICAgICAgICAvKiBTdHJlYW0gdGltZSBpbiAxMDBucyB1bml0cyAqLworCXUxNiBSZW1haW5pbmdMaW5lczsgIC8qIFJlbWFpbmluZyBsaW5lcyBpbiB0aGlzIGZpZWxkLgorCQkJCTAgZm9yIGNvbXBsZXRlIGZpZWxkICovCisJdTggIEZpZWxkQ291bnQ7ICAgICAgLyogVmlkZW8gZmllbGQgbnVtYmVyICovCisJdTggIEZsYWdzOyAgICAgICAgICAgLyogQml0IDcgPSBEb25lLCBCaXQgNiA9IHNlZW4sIEJpdCA1ID0gb3ZlcmZsb3csCisJCQkJQml0IDAgPSBGaWVsZElEICovCisJdTE2IEJsb2NrQ291bnQ7ICAgICAgLyogQXVkaW8gYmxvY2sgY291bnQgKHVudXNlZCkgKi8KKwl1OCAgUmVzZXJ2ZWRbMl07CisJdTMyIERUT1VwZGF0ZTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgeworCXU2NCBBZGRyZXNzOworCXUzMiBMZW5ndGg7CisJdTMyIFJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgQlVGRkVSX0hFQURFUiB7CisJdTY0ICAgIE5leHQ7CisJc3RydWN0IEJVRkZFUl9TVFJFQU1fUkVTVUxUUyBTUjsKKworCXUzMiAgICBOdW1iZXJfb2ZfZW50cmllc18xOworCXUzMiAgICBSZXNlcnZlZDU7CisJdTY0ICAgIEFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMTsKKworCXUzMiAgICBOdW1iZXJfb2ZfZW50cmllc18yOworCXUzMiAgICBSZXNlcnZlZDc7CisJdTY0ICAgIEFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMjsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEVWRU5UX0JVRkZFUiB7CisJdTMyICAgIFRpbWVTdGFtcDsKKwl1OCAgICAgR1BJT1N0YXR1czsKKwl1OCAgICAgVUFSVFN0YXR1czsKKwl1OCAgICAgUlhDaGFyYWN0ZXI7CisJdTggICAgIEV2ZW50U3RhdHVzOworCXUzMiAgICBSZXNlcnZlZFsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworLyogRmlybXdhcmUgY29tbWFuZHMuICovCisKK2VudW0gT1BDT0RFUyB7CisJQ01EX05PUCA9IDAsCisJQ01EX0ZXTE9BRF9QUkVQQVJFICA9IDB4MDEsCisJQ01EX0ZXTE9BRF9GSU5JU0ggICA9IDB4MDIsCisJQ01EX0kyQ19SRUFEICAgICAgICA9IDB4MDMsCisJQ01EX0kyQ19XUklURSAgICAgICA9IDB4MDQsCisKKwlDTURfSTJDX1dSSVRFX05PU1RPUCA9IDB4MDUsCisJQ01EX0kyQ19DT05USU5VRV9XUklURSA9IDB4MDYsCisJQ01EX0kyQ19DT05USU5VRV9XUklURV9OT1NUT1AgPSAweDA3LAorCisJQ01EX0RFQlVHX09VVFBVVCAgICA9IDB4MDksCisKKwlDTURfQ09OVFJPTCAgICAgICAgID0gMHgxMCwKKwlDTURfQ09ORklHVVJFX0JVRkZFUiA9IDB4MTEsCisJQ01EX0NPTkZJR1VSRV9GUkVFX0JVRkZFUiA9IDB4MTIsCisKKwlDTURfU1BJX1JFQUQgICAgICAgID0gMHgxMywKKwlDTURfU1BJX1dSSVRFICAgICAgID0gMHgxNCwKKworCUNNRF9NRU1fUkVBRCAgICAgICAgPSAweDIwLAorCUNNRF9NRU1fV1JJVEUJICAgID0gMHgyMSwKKwlDTURfU0ZSX1JFQUQJICAgID0gMHgyMiwKKwlDTURfU0ZSX1dSSVRFCSAgICA9IDB4MjMsCisJQ01EX0lSQU1fUkVBRAkgICAgPSAweDI0LAorCUNNRF9JUkFNX1dSSVRFCSAgICA9IDB4MjUsCisJQ01EX1NFVF9HUElPX1BJTiAgICA9IDB4MjYsCisJQ01EX1NFVF9HUElPX0lOVCAgICA9IDB4MjcsCisJQ01EX0NPTkZJR1VSRV9VQVJUICA9IDB4MjgsCisJQ01EX1dSSVRFX1VBUlQgICAgICA9IDB4MjksCisJTUFYX0NNRAorfTsKKworZW51bSBSRVNQT05TRVMgeworCU9LID0gMCwKKwlFUlJPUiA9IDEKK307CisKK3N0cnVjdCBGV19IRUFERVIgeworCXU4IE9wY29kZTsKKwl1OCBMZW5ndGg7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19JMkNfV1JJVEUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IERldmljZTsKKwl1OCBEYXRhWzI1MF07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19JMkNfQ09OVElOVUVfV1JJVEUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IERhdGFbMjUwXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0kyQ19SRUFEIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBEZXZpY2U7CisJdTggRGF0YVsyNTJdOyAgICAvKiBmb2xsb3dlZCBieSB0d28gYnl0ZXMgb2YgcmVhZCBkYXRhIGNvdW50ICovCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TUElfV1JJVEUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IE1vZGVTZWxlY3Q7CisJdTggRGF0YVsyNTBdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU1BJX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IE1vZGVTZWxlY3Q7CisJdTggRGF0YVsyNTJdOyAgICAvKiBmb2xsb3dlZCBieSB0d28gYnl0ZXMgb2YgcmVhZCBkYXRhIGNvdW50ICovCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19GV0xPQURfUFJFUEFSRSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19GV0xPQURfRklOSVNIIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1MTYgQWRkcmVzczsgICAgIC8qIGFkZHJlc3Mgb2YgZmluYWwgYmxvY2sgKi8KKwl1MTYgTGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisvKgorICogTWVhbmluZyBvZiBGV19TVFJFQU1fQ09OVFJPTDo6TW9kZSBiaXRzOgorICogIEJpdCA3OiBMb29wYmFjayBQRVhpbiB0byBQRVhvdXQgdXNpbmcgVFZPdXQgY2hhbm5lbAorICogIEJpdCA2OiBBVkxPT1AKKyAqICBCaXQgNTogQXVkaW8gc2VsZWN0OyAwPUkyUywgMT1TUERJRgorICogIEJpdCA0OiBBVlNZTkMKKyAqICBCaXQgMzogRW5hYmxlIHRyYW5zcG9ydCBzdHJlYW0KKyAqICBCaXQgMjogRW5hYmxlIGF1ZGlvIGNhcHR1cmUKKyAqICBCaXQgMTogRW5hYmxlIElUVS1WaWRlbyBWQkkgY2FwdHVyZQorICogIEJpdCAwOiBFbmFibGUgSVRVLVZpZGVvIGNhcHR1cmUKKyAqCisgKiBNZWFuaW5nIG9mIEZXX1NUUkVBTV9DT05UUk9MOjpDb250cm9sIGJpdHMgKHNlZSBVVkkxX0NUTCkKKyAqICBCaXQgNzogY29udGludW91cyBjYXB0dXJlCisgKiAgQml0IDY6IGNhcHR1cmUgb25lIGZpZWxkCisgKiAgQml0IDU6IGNhcHR1cmUgb25lIGZyYW1lCisgKiAgQml0IDQ6IHVudXNlZAorICogIEJpdCAzOiBzdGFydGluZyBmaWVsZDsgMD1vZGQsIDE9ZXZlbgorICogIEJpdCAyOiBzYW1wbGUgc2l6ZTsgMD04LWJpdCwgMT0xMC1iaXQKKyAqICBCaXQgMTogZGF0YSBmb3JtYXQ7IDA9VVlWWSwgMT1ZVVkyCisgKiAgQml0IDA6IHJlc2V0cyBidWZmZXIgcG9pbnRlcnMKKyovCisKK2VudW0gRlNDX01PREVfQklUUyB7CisJU01PREVfTE9PUEJBQ0sgICAgICAgICAgPSAweDgwLAorCVNNT0RFX0FWTE9PUCAgICAgICAgICAgID0gMHg0MCwKKwlfU01PREVfQVVESU9fU1BESUYgICAgICA9IDB4MjAsCisJX1NNT0RFX0FWU1lOQyAgICAgICAgICAgPSAweDEwLAorCV9TTU9ERV9UUkFOU1BPUlRfU1RSRUFNID0gMHgwOCwKKwlfU01PREVfQVVESU9fQ0FQVFVSRSAgICA9IDB4MDQsCisJX1NNT0RFX1ZCSV9DQVBUVVJFICAgICAgPSAweDAyLAorCV9TTU9ERV9WSURFT19DQVBUVVJFICAgID0gMHgwMQorfTsKKworCisvKiBNZWFuaW5nIG9mIEZXX1NUUkVBTV9DT05UUk9MOjpTdHJlYW0gYml0czoKKyAqIEJpdCAzOiBBdWRpbyBzYW1wbGUgY291bnQ6ICAwID0gcmVsYXRpdmUsIDEgPSBhYnNvbHV0ZQorICogQml0IDI6IGNvbG9yIGJhciBzZWxlY3Q7IDE9Y29sb3IgYmFycywgMD1DVjMgZGVjb2RlcgorICogQml0cyAxLTA6IHN0cmVhbSBzZWxlY3QsIFVWSTEsIFVWSTIsIFRWT1VUCisgKi8KKworc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgICAgU3RyZWFtOyAgICAgICAgICAgICAvKiBTdHJlYW0gbnVtYmVyIChVVkkxLCBVVkkyLCBUVk9VVCkgKi8KKwl1OCAgICAgQ29udHJvbDsgICAgICAgICAgICAvKiBWYWx1ZSB3cml0dGVuIHRvIFVWSTFfQ1RMICovCisJdTggICAgIE1vZGU7ICAgICAgICAgICAgICAgLyogQ29udHJvbHMgY2xvY2sgc291cmNlICovCisJdTggICAgIFNldHVwRGF0YUxlbjsJICAgLyogTGVuZ3RoIG9mIHNldHVwIGRhdGEsIE1TQj0xIHdyaXRlCisJCQkJICAgICAgYmFja3dhcmRzICovCisJdTE2ICAgIENhcHR1cmVCbG9ja0NvdW50OyAgLyogQmxvY2tzIChhIDI1NiBCeXRlcykgdG8gY2FwdHVyZSBwZXIgYnVmZmVyCisJCQkJICAgICAgZm9yIFRTIGFuZCBBdWRpbyAqLworCXU2NCAgICBCdWZmZXJfQWRkcmVzczsJICAgLyogQWRkcmVzcyBvZiBmaXJzdCBidWZmZXIgaGVhZGVyICovCisJdTE2ICAgIEJ5dGVzUGVyVmlkZW9MaW5lOworCXUxNiAgICBNYXhMaW5lc1BlckZpZWxkOworCXUxNiAgICBNaW5MaW5lc1BlckZpZWxkOworCXUxNiAgICBSZXNlcnZlZF8xOworCXUxNiAgICBCeXRlc1BlclZCSUxpbmU7CisJdTE2ICAgIE1heFZCSUxpbmVzUGVyRmllbGQ7CisJdTE2ICAgIE1pblZCSUxpbmVzUGVyRmllbGQ7CisJdTE2ICAgIFNldHVwRGF0YUFkZHI7ICAgICAgLyogbmdlbmUgcmVsYXRpdmUgYWRkcmVzcyBvZiBzZXR1cCBkYXRhICovCisJdTggICAgIFNldHVwRGF0YVszMl07ICAgICAgLyogc2V0dXAgZGF0YSAqLworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgQVVESU9fQkxPQ0tfU0laRSAgICAyNTYKKyNkZWZpbmUgVFNfQkxPQ0tfU0laRSAgICAgICAyNTYKKworc3RydWN0IEZXX01FTV9SRUFEIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1MTYgICBhZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfTUVNX1dSSVRFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1MTYgICBhZGRyZXNzOworCXU4ICAgIGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRlJfSVJBTV9SRUFEIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgICBhZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU0ZSX0lSQU1fV1JJVEUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgIGFkZHJlc3M7CisJdTggICAgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NFVF9HUElPX1BJTiB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICAgc2VsZWN0OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU0VUX0dQSU9fSU5UIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgICBzZWxlY3Q7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRVRfREVCVUdNT0RFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgIGRlYnVnX2ZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfQ09ORklHVVJFX0JVRkZFUlMgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgY29uZmlnOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitlbnVtIF9CVUZGRVJfQ09ORklHUyB7CisJLyogNGsgVVZJMSwgNGsgVVZJMiwgMmsgQVVEMSwgMmsgQVVEMiAgKHN0YW5kYXJkIHVzYWdlKSAqLworCUJVRkZFUl9DT05GSUdfNDQyMiA9IDAsCisJLyogM2sgVVZJMSwgM2sgVVZJMiwgM2sgQVVEMSwgM2sgQVVEMiAgKDR4IFRTIGlucHV0IHVzYWdlKSAqLworCUJVRkZFUl9DT05GSUdfMzMzMyA9IDEsCisJLyogOGsgVVZJMSwgMGsgVVZJMiwgMmsgQVVEMSwgMmsgSTJTT3V0ICAoSERUViBkZWNvZGVyIHVzYWdlKSAqLworCUJVRkZFUl9DT05GSUdfODAyMiA9IDIsCisJQlVGRkVSX0NPTkZJR19GVzE3ID0gMjU1LCAvKiBVc2UgbmV3IEZXIDE3IGNvbW1hbmQgKi8KK307CisKK3N0cnVjdCBGV19DT05GSUdVUkVfRlJFRV9CVUZGRVJTIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgIFVWSTFfQnVmZmVyTGVuZ3RoOworCXU4ICAgVVZJMl9CdWZmZXJMZW5ndGg7CisJdTggICBUVk9fQnVmZmVyTGVuZ3RoOworCXU4ICAgQVVEMV9CdWZmZXJMZW5ndGg7CisJdTggICBBVUQyX0J1ZmZlckxlbmd0aDsKKwl1OCAgIFRWQV9CdWZmZXJMZW5ndGg7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19DT05GSUdVUkVfVUFSVCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggVWFydENvbnRyb2w7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK2VudW0gX1VBUlRfQ09ORklHIHsKKwlfVUFSVF9CQVVEUkFURV8xOTIwMCA9IDAsCisJX1VBUlRfQkFVRFJBVEVfOTYwMCAgPSAxLAorCV9VQVJUX0JBVURSQVRFXzQ4MDAgID0gMiwKKwlfVUFSVF9CQVVEUkFURV8yNDAwICA9IDMsCisJX1VBUlRfUlhfRU5BQkxFICAgICAgPSAweDQwLAorCV9VQVJUX1RYX0VOQUJMRSAgICAgID0gMHg4MCwKK307CisKK3N0cnVjdCBGV19XUklURV9VQVJUIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBEYXRhWzI1Ml07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKworc3RydWN0IG5nZW5lX2NvbW1hbmQgeworCXUzMiBpbl9sZW47CisJdTMyIG91dF9sZW47CisJdW5pb24geworCQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdbNjRdOworCQl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc4WzI1Nl07CisJCXN0cnVjdCBGV19IRUFERVIgICAgICAgICAgICAgICAgIGhkcjsKKwkJc3RydWN0IEZXX0kyQ19XUklURSAgICAgICAgICAgICAgSTJDV3JpdGU7CisJCXN0cnVjdCBGV19JMkNfQ09OVElOVUVfV1JJVEUgICAgIEkyQ0NvbnRpbnVlV3JpdGU7CisJCXN0cnVjdCBGV19JMkNfUkVBRCAgICAgICAgICAgICAgIEkyQ1JlYWQ7CisJCXN0cnVjdCBGV19TVFJFQU1fQ09OVFJPTCAgICAgICAgIFN0cmVhbUNvbnRyb2w7CisJCXN0cnVjdCBGV19GV0xPQURfUFJFUEFSRSAgICAgICAgIEZXTG9hZFByZXBhcmU7CisJCXN0cnVjdCBGV19GV0xPQURfRklOSVNIICAgICAgICAgIEZXTG9hZEZpbmlzaDsKKwkJc3RydWN0IEZXX01FTV9SRUFECQkgTWVtb3J5UmVhZDsKKwkJc3RydWN0IEZXX01FTV9XUklURQkJIE1lbW9yeVdyaXRlOworCQlzdHJ1Y3QgRldfU0ZSX0lSQU1fUkVBRAkJIFNmcklyYW1SZWFkOworCQlzdHJ1Y3QgRldfU0ZSX0lSQU1fV1JJVEUgICAgICAgICBTZnJJcmFtV3JpdGU7CisJCXN0cnVjdCBGV19TUElfV1JJVEUgICAgICAgICAgICAgIFNQSVdyaXRlOworCQlzdHJ1Y3QgRldfU1BJX1JFQUQgICAgICAgICAgICAgICBTUElSZWFkOworCQlzdHJ1Y3QgRldfU0VUX0dQSU9fUElOICAgICAgICAgICBTZXRHcGlvUGluOworCQlzdHJ1Y3QgRldfU0VUX0dQSU9fSU5UICAgICAgICAgICBTZXRHcGlvSW50OworCQlzdHJ1Y3QgRldfU0VUX0RFQlVHTU9ERSAgICAgICAgICBTZXREZWJ1Z01vZGU7CisJCXN0cnVjdCBGV19DT05GSUdVUkVfQlVGRkVSUyAgICAgIENvbmZpZ3VyZUJ1ZmZlcnM7CisJCXN0cnVjdCBGV19DT05GSUdVUkVfRlJFRV9CVUZGRVJTIENvbmZpZ3VyZUZyZWVCdWZmZXJzOworCQlzdHJ1Y3QgRldfQ09ORklHVVJFX1VBUlQgICAgICAgICBDb25maWd1cmVVYXJ0OworCQlzdHJ1Y3QgRldfV1JJVEVfVUFSVCAgICAgICAgICAgICBXcml0ZVVhcnQ7CisJfSBjbWQ7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgTkdFTkVfSU5URVJGQUNFX1ZFUlNJT04gMHgxMDMKKyNkZWZpbmUgTUFYX1ZJREVPX0JVRkZFUl9TSVpFICAgKDQxNzc5MikgLyogMjg4KjE0NDAgcm91bmRlZCB1cCB0byBuZXh0IHBhZ2UgKi8KKyNkZWZpbmUgTUFYX0FVRElPX0JVRkZFUl9TSVpFICAgICAoODE5MikgLyogR2l2ZXMgcm9vbSBmb3IgYWJvdXQgMjNtc2VjQDQ4S0h6ICovCisjZGVmaW5lIE1BWF9WQklfQlVGRkVSX1NJWkUgICAgICAoMjg2NzIpIC8qIDExNDQqMTggcm91bmRlZCB1cCB0byBuZXh0IHBhZ2UgKi8KKyNkZWZpbmUgTUFYX1RTX0JVRkZFUl9TSVpFICAgICAgICg5ODMwNCkgLyogNTEyKjE4OCByb3VuZGVkIHVwIHRvIG5leHQgcGFnZSAqLworI2RlZmluZSBNQVhfSERUVl9CVUZGRVJfU0laRSAgICgyMDgwNzY4KSAvKiA1NDEqMTkyMCoyIHJvdW5kZWQgdXAgdG8gbmV4dCBwYWdlCisJCQkJCSAgICBNYXg6ICgxOTIweDEwODBpNjApICovCisKKyNkZWZpbmUgT1ZFUkZMT1dfQlVGRkVSX1NJWkUgICAgKDgxOTIpCisKKyNkZWZpbmUgUklOR19TSVpFX1ZJREVPICAgICA0CisjZGVmaW5lIFJJTkdfU0laRV9BVURJTyAgICAgOAorI2RlZmluZSBSSU5HX1NJWkVfVFMgICAgICAgIDgKKworI2RlZmluZSBOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUyAgOAorCisjZGVmaW5lIE1BWF9ETUFfTEVOR1RIICgoKE1BWF9WSURFT19CVUZGRVJfU0laRSArIE1BWF9WQklfQlVGRkVSX1NJWkUpICogXAorCQkJUklOR19TSVpFX1ZJREVPICogMikgKyBcCisJCQkoTUFYX0FVRElPX0JVRkZFUl9TSVpFICogUklOR19TSVpFX0FVRElPICogMikgKyBcCisJCQkoTUFYX1RTX0JVRkZFUl9TSVpFICogUklOR19TSVpFX1RTICogNCkgKyBcCisJCQkoUklOR19TSVpFX1ZJREVPICogUEFHRV9TSVpFICogMikgKyBcCisJCQkoUklOR19TSVpFX0FVRElPICogUEFHRV9TSVpFICogMikgKyBcCisJCQkoUklOR19TSVpFX1RTICAgICogUEFHRV9TSVpFICogNCkgKyBcCisJCQkgOCAqIFBBR0VfU0laRSArIE9WRVJGTE9XX0JVRkZFUl9TSVpFICsgUEFHRV9TSVpFKQorCisjZGVmaW5lIEVWRU5UX1FVRVVFX1NJWkUgICAgMTYKKworLyogR2F0aGVycyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIHNpbmdsZSBjaGFubmVsLiAqLworCitzdHJ1Y3QgU0J1ZmZlckhlYWRlciB7CisJc3RydWN0IEJVRkZFUl9IRUFERVIgICBuZ2VuZUJ1ZmZlcjsgLyogUGh5c2ljYWwgZGVzY3JpcHRvciAqLworCXN0cnVjdCBTQnVmZmVySGVhZGVyICAqTmV4dDsKKwl2b2lkICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjE7CisJc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgKnNjTGlzdDE7CisJdm9pZCAgICAgICAgICAgICAgICAgICpCdWZmZXIyOworCXN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UICpzY0xpc3QyOworfTsKKworLyogU2l6ZW9mIFNCdWZmZXJIZWFkZXIgYWxpZ25lZCB0byBuZXh0IDY0IEJpdCBib3VuZGFyeSAoaHcgcmVzdHJpY3Rpb24pICovCisjZGVmaW5lIFNJWkVPRl9TQnVmZmVySGVhZGVyICgoc2l6ZW9mKHN0cnVjdCBTQnVmZmVySGVhZGVyKSArIDYzKSAmIH42MykKKworZW51bSBIV1NUQVRFIHsKKwlIV1NUQVRFX1NUT1AsCisJSFdTVEFURV9TVEFSVFVQLAorCUhXU1RBVEVfUlVOLAorCUhXU1RBVEVfUEFVU0UsCit9OworCitlbnVtIEtTU1RBVEUgeworCUtTU1RBVEVfU1RPUCwKKwlLU1NUQVRFX0FDUVVJUkUsCisJS1NTVEFURV9QQVVTRSwKKwlLU1NUQVRFX1JVTiwKK307CisKK3N0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgeworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpIZWFkOyAvKiBQb2ludHMgdG8gZmlyc3QgYnVmZmVyIGluIHJpbmcgYnVmZmVyCisJCQkJICAgICAgIHN0cnVjdHVyZSovCisJdTY0ICAgUEFIZWFkOyAgICAgICAgIC8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgZmlyc3QgYnVmZmVyICovCisJdTMyICAgTWVtU2l6ZTsgICAgICAgIC8qIE1lbW9yeSBzaXplIG9mIGFsbG9jYXRlZCByaW5nIGJ1ZmZlcnMKKwkJCQkgKG5lZWRlZCBmb3IgZnJlZWluZykgKi8KKwl1MzIgICBOdW1CdWZmZXJzOyAgICAgLyogTnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHJpbmcgKi8KKwl1MzIgICBCdWZmZXIxTGVuZ3RoOyAgLyogQWxsb2NhdGVkIGxlbmd0aCBvZiBCdWZmZXIgMSAqLworCXUzMiAgIEJ1ZmZlcjJMZW5ndGg7ICAvKiBBbGxvY2F0ZWQgbGVuZ3RoIG9mIEJ1ZmZlciAyICovCisJdm9pZCAqU0NMaXN0TWVtOyAgICAgIC8qIE1lbW9yeSB0byBob2xkIHNjYXR0ZXIgZ2F0aGVyIGxpc3RzIGZvciB0aGlzCisJCQkJIHJpbmcgKi8KKwl1NjQgICBQQVNDTGlzdE1lbTsgICAgLyogUGh5c2ljYWwgYWRkcmVzcyAgLi4gKi8KKwl1MzIgICBTQ0xpc3RNZW1TaXplOyAgLyogU2l6ZSBvZiB0aGlzIG1lbW9yeSAqLworfTsKKworZW51bSBTVFJFQU1NT0RFRkxBR1MgeworCVN0cmVhbU1vZGVfTk9ORSAgID0gMCwgLyogU3RyZWFtIG5vdCB1c2VkICovCisJU3RyZWFtTW9kZV9BTkFMT0cgPSAxLCAvKiBBbmFsb2c6IFN0cmVhbSAwLDEgPSBWaWRlbywgMiwzID0gQXVkaW8gKi8KKwlTdHJlYW1Nb2RlX1RTSU4gICA9IDIsIC8qIFRyYW5zcG9ydCBzdHJlYW0gaW5wdXQgKGFsbCkgKi8KKwlTdHJlYW1Nb2RlX0hEVFYgICA9IDQsIC8qIEhEVFY6IE1heGltdW0gMTkyMHgxMDgwcDMwLDE5MjB4MTA4MGk2MAorCQkJCSAgKG9ubHkgc3RyZWFtIDApICovCisJU3RyZWFtTW9kZV9UU09VVCAgPSA4LCAvKiBUcmFuc3BvcnQgc3RyZWFtIG91dHB1dCAob25seSBzdHJlYW0gMykgKi8KK307CisKKworZW51bSBCdWZmZXJFeGNoYW5nZUZsYWdzIHsKKwlCRUZfRVZFTl9GSUVMRCAgID0gMHgwMDAwMDAwMSwKKwlCRUZfQ09OVElOVUFUSU9OID0gMHgwMDAwMDAwMiwKKwlCRUZfTU9SRV9EQVRBICAgID0gMHgwMDAwMDAwNCwKKwlCRUZfT1ZFUkZMT1cgICAgID0gMHgwMDAwMDAwOCwKKwlERl9TV0FQMzIgICAgICAgID0gMHgwMDAxMDAwMCwKK307CisKK3R5cGVkZWYgdm9pZCAqKElCdWZmZXJFeGNoYW5nZSkodm9pZCAqLCB2b2lkICosIHUzMiwgdTMyLCB1MzIpOworCitzdHJ1Y3QgTUlDSV9TVFJFQU1JTkZPIHsKKwlJQnVmZmVyRXhjaGFuZ2UgICAgKnBFeGNoYW5nZTsKKwlJQnVmZmVyRXhjaGFuZ2UgICAgKnBFeGNoYW5nZVZCSTsgICAgIC8qIFNlY29uZGFyeSAoVkJJLCBhbmNpbGxhcnkpICovCisJdTggIFN0cmVhbTsKKwl1OCAgRmxhZ3M7CisJdTggIE1vZGU7CisJdTggIFJlc2VydmVkOworCXUxNiBuTGluZXNWaWRlbzsKKwl1MTYgbkJ5dGVzUGVyTGluZVZpZGVvOworCXUxNiBuTGluZXNWQkk7CisJdTE2IG5CeXRlc1BlckxpbmVWQkk7CisJdTMyIENhcHR1cmVMZW5ndGg7ICAgIC8qIFVzZWQgZm9yIGF1ZGlvIGFuZCB0cmFuc3BvcnQgc3RyZWFtICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNUUlVDVFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHNvdW5kIGhhcmR3YXJlIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgTUlYRVJfQUREUl9UVlRVTkVSICAgICAgMAorI2RlZmluZSBNSVhFUl9BRERSX0xBU1QgICAgICAgICAwCisKK3N0cnVjdCBuZ2VuZV9jaGFubmVsOworCisvKnN0cnVjdCBzb3VuZCBjaGlwKi8KKworc3RydWN0IG15Y2hpcCB7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBwY2lfZGV2ICpwY2k7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwl1bnNpZ25lZCBsb25nIHBvcnQ7CisJaW50IGlycTsKKwlzcGlubG9ja190IG1peGVyX2xvY2s7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCBtaXhlcl92b2x1bWVbTUlYRVJfQUREUl9MQVNUICsgMV1bMl07CisJaW50IGNhcHR1cmVfc291cmNlW01JWEVSX0FERFJfTEFTVCArIDFdWzJdOworfTsKKworI2lmZGVmIE5HRU5FX1Y0TAorc3RydWN0IG5nZW5lX292ZXJsYXkgeworCWludCAgICAgICAgICAgICAgICAgICAgdHZub3JtOworCXN0cnVjdCB2NGwyX3JlY3QgICAgICAgdzsKKwllbnVtIHY0bDJfZmllbGQgICAgICAgIGZpZWxkOworCXN0cnVjdCB2NGwyX2NsaXAgICAgICAgKmNsaXBzOworCWludCAgICAgICAgICAgICAgICAgICAgbmNsaXBzOworCWludCAgICAgICAgICAgICAgICAgICAgc2V0dXBfb2s7Cit9OworCitzdHJ1Y3QgbmdlbmVfdHZub3JtIHsKKwlpbnQgICB2NGwyX2lkOworCWNoYXIgICpuYW1lOworCXUxNiAgIHN3aWR0aCwgc2hlaWdodDsgLyogc2NhbGVkIHN0YW5kYXJkIHdpZHRoLCBoZWlnaHQgKi8KKwlpbnQgICB0dW5lcl9ub3JtOworCWludCAgIHNvdW5kc3RkOworfTsKKworc3RydWN0IG5nZW5lX3ZvcGVuIHsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAgICAgICpjaDsKKwllbnVtIHY0bDJfcHJpb3JpdHkgICAgICAgICBwcmlvOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aDsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICB2YnVmX3E7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgdmJpOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIGZvdXJjYzsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBwaWN4Y291bnQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOworCWVudW0gdjRsMl9idWZfdHlwZSAgICAgICAgIHR5cGU7CisJY29uc3Qgc3RydWN0IG5nZW5lX2Zvcm1hdCAqZm10OworCisJY29uc3Qgc3RydWN0IG5nZW5lX2Zvcm1hdCAqb3ZmbXQ7CisJc3RydWN0IG5nZW5lX292ZXJsYXkgICAgICAgb3Y7Cit9OworI2VuZGlmCisKK3N0cnVjdCBuZ2VuZV9jaGFubmVsIHsKKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgZGV2aWNlOworCXN0cnVjdCBpMmNfYWRhcHRlciAgICBpMmNfYWRhcHRlcjsKKworCXN0cnVjdCBuZ2VuZSAgICAgICAgICpkZXY7CisJaW50ICAgICAgICAgICAgICAgICAgIG51bWJlcjsKKwlpbnQgICAgICAgICAgICAgICAgICAgdHlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgbW9kZTsKKworCXN0cnVjdCBkdmJfZnJvbnRlbmQgICpmZTsKKwlzdHJ1Y3QgZG14ZGV2ICAgICAgICAgZG14ZGV2OworCXN0cnVjdCBkdmJfZGVtdXggICAgICBkZW11eDsKKwlzdHJ1Y3QgZG14X2Zyb250ZW5kICAgaHdfZnJvbnRlbmQ7CisJc3RydWN0IGRteF9mcm9udGVuZCAgIG1lbV9mcm9udGVuZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgdXNlcnM7CisJc3RydWN0IHZpZGVvX2RldmljZSAgKnY0bF9kZXY7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGRlbXV4X3Rhc2tsZXQ7CisKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqbmV4dEJ1ZmZlcjsKKwllbnVtIEtTU1RBVEUgICAgICAgICAgU3RhdGU7CisJZW51bSBIV1NUQVRFICAgICAgICAgIEhXU3RhdGU7CisJdTggICAgICAgICAgICAgICAgICAgIFN0cmVhbTsKKwl1OCAgICAgICAgICAgICAgICAgICAgRmxhZ3M7CisJdTggICAgICAgICAgICAgICAgICAgIE1vZGU7CisJSUJ1ZmZlckV4Y2hhbmdlICAgICAgKnBCdWZmZXJFeGNoYW5nZTsKKwlJQnVmZmVyRXhjaGFuZ2UgICAgICAqcEJ1ZmZlckV4Y2hhbmdlMjsKKworCXNwaW5sb2NrX3QgICAgICAgICAgICBzdGF0ZV9sb2NrOworCXUxNiAgICAgICAgICAgICAgICAgICBuTGluZXM7CisJdTE2ICAgICAgICAgICAgICAgICAgIG5CeXRlc1BlckxpbmU7CisJdTE2ICAgICAgICAgICAgICAgICAgIG5WQklMaW5lczsKKwl1MTYgICAgICAgICAgICAgICAgICAgbkJ5dGVzUGVyVkJJTGluZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgaXR1bW9kZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgQ2FwdHVyZTFMZW5ndGg7CisJdTMyICAgICAgICAgICAgICAgICAgIENhcHR1cmUyTGVuZ3RoOworCXN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgUmluZ0J1ZmZlcjsKKwlzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yIFRTUmluZ0J1ZmZlcjsKKwlzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yIFRTSWRsZUJ1ZmZlcjsKKworCXUzMiAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0RmxhZ3M7CisKKwlpbnQgICAgICAgICAgICAgICAgICAgQXVkaW9EVE9VcGRhdGVkOworCXUzMiAgICAgICAgICAgICAgICAgICBBdWRpb0RUT1ZhbHVlOworCisJaW50ICgqc2V0X3RvbmUpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgZmVfc2VjX3RvbmVfbW9kZV90KTsKKwl1OCBsbmJoOworCisJLyogc3R1ZmYgZnJvbSBhbmFsb2cgZHJpdmVyICovCisKKwlpbnQgbWlub3I7CisJc3RydWN0IG15Y2hpcCAgICAgICAgKm15Y2hpcDsKKwlzdHJ1Y3Qgc25kX2NhcmQgICAgICAqc291bmRjYXJkOworCXU4ICAgICAgICAgICAgICAgICAgICpldmVuYnVmZmVyOworCXU4ICAgICAgICAgICAgICAgICAgICBkbWFfb247CisJaW50ICAgICAgICAgICAgICAgICAgIHNvdW5kc3RyZWFtb247CisJaW50ICAgICAgICAgICAgICAgICAgIGF1ZGlvbXV0ZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgc291bmRidWZmaXNhbGxvY2F0ZWQ7CisJaW50ICAgICAgICAgICAgICAgICAgIHNuZGJ1ZmZmbGFnOworCWludCAgICAgICAgICAgICAgICAgICB0dW5fcmR5OworCWludCAgICAgICAgICAgICAgICAgICBkZWNfcmR5OworCWludCAgICAgICAgICAgICAgICAgICB0dW5fZGVjX3JkeTsKKwlpbnQgICAgICAgICAgICAgICAgICAgbGFzdGJ1ZmZlcmZsYWc7CisKKwlzdHJ1Y3QgbmdlbmVfdHZub3JtICAqdHZub3JtczsKKwlpbnQgICAgICAgICAgICAgICAgICAgdHZub3JtX251bTsKKwlpbnQgICAgICAgICAgICAgICAgICAgdHZub3JtOworCisjaWZkZWYgTkdFTkVfVjRMCisJaW50ICAgICAgICAgICAgICAgICAgIHZpZGVvdXNlcnM7CisJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOworCXN0cnVjdCBuZ2VuZV92b3BlbiAgICBpbml0OworCWludCAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM7CisJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgZmJ1ZjsKKwlzdHJ1Y3QgbmdlbmVfYnVmZmVyICAqc2NyZWVuOyAgICAgLyogb3ZlcmxheSAgICAgICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICBjYXB0dXJlOyAgICAvKiB2aWRlbyBjYXB0dXJlIHF1ZXVlICovCisJc3BpbmxvY2tfdCBzX2xvY2s7CisJc3RydWN0IHNlbWFwaG9yZSByZXNsb2NrOworI2VuZGlmCisKKwlpbnQgcnVubmluZzsKK307CisKK3N0cnVjdCBuZ2VuZTsKKwordHlwZWRlZiB2b2lkIChyeF9jYl90KShzdHJ1Y3QgbmdlbmUgKiwgdTMyLCB1OCk7Cit0eXBlZGVmIHZvaWQgKHR4X2NiX3QpKHN0cnVjdCBuZ2VuZSAqLCB1MzIpOworCitzdHJ1Y3QgbmdlbmUgeworCWludCAgICAgICAgICAgICAgICAgICBucjsKKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAqcGNpX2RldjsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAqaW9tZW07CisKKwkvKnN0cnVjdCBpMmNfYWRhcHRlciAgaTJjX2FkYXB0ZXI7Ki8KKworCXUzMiAgICAgICAgICAgICAgICAgICBkZXZpY2VfdmVyc2lvbjsKKwl1MzIgICAgICAgICAgICAgICAgICAgZndfaW50ZXJmYWNlX3ZlcnNpb247CisJdTMyICAgICAgICAgICAgICAgICAgIGljb3VudHM7CisKKwl1OCAgICAgICAgICAgICAgICAgICAqQ21kRG9uZUJ5dGU7CisJaW50ICAgICAgICAgICAgICAgICAgIEJvb3RGaXJtd2FyZTsKKwl2b2lkICAgICAgICAgICAgICAgICAqT3ZlcmZsb3dCdWZmZXI7CisJZG1hX2FkZHJfdCAgICAgICAgICAgIFBBT3ZlcmZsb3dCdWZmZXI7CisJdm9pZCAgICAgICAgICAgICAgICAgKkZXSW50ZXJmYWNlQnVmZmVyOworCWRtYV9hZGRyX3QgICAgICAgICAgICBQQUZXSW50ZXJmYWNlQnVmZmVyOworCXU4ICAgICAgICAgICAgICAgICAgICpuZ2VuZXRvaG9zdDsKKwl1OCAgICAgICAgICAgICAgICAgICAqaG9zdHRvbmdlbmU7CisKKwlzdHJ1Y3QgRVZFTlRfQlVGRkVSICAgRXZlbnRRdWV1ZVtFVkVOVF9RVUVVRV9TSVpFXTsKKwlpbnQgICAgICAgICAgICAgICAgICAgRXZlbnRRdWV1ZU92ZXJmbG93Q291bnQ7CisJaW50ICAgICAgICAgICAgICAgICAgIEV2ZW50UXVldWVPdmVyZmxvd0ZsYWc7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGV2ZW50X3Rhc2tsZXQ7CisJc3RydWN0IEVWRU5UX0JVRkZFUiAgKkV2ZW50QnVmZmVyOworCWludCAgICAgICAgICAgICAgICAgICBFdmVudFF1ZXVlV3JpdGVJbmRleDsKKwlpbnQgICAgICAgICAgICAgICAgICAgRXZlbnRRdWV1ZVJlYWRJbmRleDsKKworCXdhaXRfcXVldWVfaGVhZF90ICAgICBjbWRfd3E7CisJaW50ICAgICAgICAgICAgICAgICAgIGNtZF9kb25lOworCXN0cnVjdCBzZW1hcGhvcmUgICAgICBjbWRfbXV0ZXg7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIHN0cmVhbV9tdXRleDsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgcGxsX211dGV4OworCXN0cnVjdCBzZW1hcGhvcmUgICAgICBpMmNfc3dpdGNoX211dGV4OworCWludCAgICAgICAgICAgICAgICAgICBpMmNfY3VycmVudF9jaGFubmVsOworCWludCAgICAgICAgICAgICAgICAgICBpMmNfY3VycmVudF9idXM7CisJc3BpbmxvY2tfdCAgICAgICAgICAgIGNtZF9sb2NrOworCisJc3RydWN0IGR2Yl9hZGFwdGVyICAgIGFkYXB0ZXJbTUFYX1NUUkVBTV07CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgIGNoYW5uZWxbTUFYX1NUUkVBTV07CisKKwlzdHJ1Y3QgbmdlbmVfaW5mbyAgICAqY2FyZF9pbmZvOworCisJdHhfY2JfdCAgICAgICAgICAgICAgKlR4RXZlbnROb3RpZnk7CisJcnhfY2JfdCAgICAgICAgICAgICAgKlJ4RXZlbnROb3RpZnk7CisJaW50ICAgICAgICAgICAgICAgICAgIHR4X2J1c3k7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIHR4X3dxOworCXdhaXRfcXVldWVfaGVhZF90ICAgICByeF93cTsKKyNkZWZpbmUgVUFSVF9SQlVGX0xFTiA0MDk2CisJdTggICAgICAgICAgICAgICAgICAgIHVhcnRfcmJ1ZltVQVJUX1JCVUZfTEVOXTsKKwlpbnQgICAgICAgICAgICAgICAgICAgdWFydF9ycCwgdWFydF93cDsKKworCXU4ICAgICAgICAgICAgICAgICAgICp0c291dF9idWY7CisjZGVmaW5lIFRTT1VUX0JVRl9TSVpFICg1MTIqMTg4KjgpCisJc3RydWN0IGR2Yl9yaW5nYnVmZmVyIHRzb3V0X3JidWY7CisKKwl1OCAgICAgICAgICAgICAgICAgICAqYWluX2J1ZjsKKyNkZWZpbmUgQUlOX0JVRl9TSVpFICgxMjgqMTAyNCkKKwlzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgYWluX3JidWY7CisKKworCXU4ICAgICAgICAgICAgICAgICAgICp2aW5fYnVmOworI2RlZmluZSBWSU5fQlVGX1NJWkUgKDQqMTkyMCoxMDgwKQorCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciB2aW5fcmJ1ZjsKKworCXVuc2lnbmVkIGxvbmcgICAgICAgICBleHBfdmFsOworCWludCBwcmV2X2NtZDsKK307CisKK3N0cnVjdCBuZ2VuZV9pbmZvIHsKKwlpbnQgICB0eXBlOworI2RlZmluZSBOR0VORV9BUFAgICAgICAgIDAKKyNkZWZpbmUgTkdFTkVfVEVSUkFURUMgICAxCisjZGVmaW5lIE5HRU5FX1NJREVXSU5ERVIgMgorI2RlZmluZSBOR0VORV9SQUNFUiAgICAgIDMKKyNkZWZpbmUgTkdFTkVfVklQRVIgICAgICA0CisjZGVmaW5lIE5HRU5FX1BZVEhPTiAgICAgNQorI2RlZmluZSBOR0VORV9WQk9YX1YxCSA2CisjZGVmaW5lIE5HRU5FX1ZCT1hfVjIJIDcKKworCWludCAgIGZ3X3ZlcnNpb247CisJY2hhciAqbmFtZTsKKworCWludCAgIGlvX3R5cGVbTUFYX1NUUkVBTV07CisjZGVmaW5lIE5HRU5FX0lPX05PTkUgICAgMAorI2RlZmluZSBOR0VORV9JT19UViAgICAgIDEKKyNkZWZpbmUgTkdFTkVfSU9fSERUViAgICAyCisjZGVmaW5lIE5HRU5FX0lPX1RTSU4gICAgNAorI2RlZmluZSBOR0VORV9JT19UU09VVCAgIDgKKyNkZWZpbmUgTkdFTkVfSU9fQUlOICAgICAxNgorCisJdm9pZCAqZmVfY29uZmlnWzRdOworCXZvaWQgKnR1bmVyX2NvbmZpZ1s0XTsKKworCWludCAoKmRlbW9kX2F0dGFjaFs0XSkoc3RydWN0IG5nZW5lX2NoYW5uZWwgKik7CisJaW50ICgqdHVuZXJfYXR0YWNoWzRdKShzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqKTsKKworCXU4ICAgIGF2Zls0XTsKKwl1OCAgICBtc3BbNF07CisJdTggICAgZGVtb2RhWzRdOworCXU4ICAgIGxuYls0XTsKKwlpbnQgICBpMmNfYWNjZXNzOworCXU4ICAgIG50c2M7CisJdTggICAgdHNmWzRdOworCXU4ICAgIGkyc1s0XTsKKworCWludCAoKmdhdGVfY3RybCkoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBpbnQpOworCWludCAoKnN3aXRjaF9jdHJsKShzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqLCBpbnQsIGludCk7Cit9OworCisjaWZkZWYgTkdFTkVfVjRMCitzdHJ1Y3QgbmdlbmVfZm9ybWF0eworCWNoYXIgKm5hbWU7CisJaW50ICAgZm91cmNjOyAgICAgICAgICAvKiB2aWRlbzRsaW51eCAyICAgICAgKi8KKwlpbnQgICBidGZvcm1hdDsgICAgICAgIC8qIEJUODQ4X0NPTE9SX0ZNVF8qICAqLworCWludCAgIGZvcm1hdDsKKwlpbnQgICBidHN3YXA7ICAgICAgICAgIC8qIEJUODQ4X0NPTE9SX0NUTF8qICAqLworCWludCAgIGRlcHRoOyAgICAgICAgICAgLyogYml0L3BpeGVsICAgICAgICAgICovCisJaW50ICAgZmxhZ3M7CisJaW50ICAgaHNoaWZ0LCB2c2hpZnQ7ICAvKiBmb3IgcGxhbmFyIG1vZGVzICAgKi8KKwlpbnQgICBwYWxldHRlOworfTsKKworI2RlZmluZSBSRVNPVVJDRV9PVkVSTEFZICAgICAgIDEKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU8gICAgICAgICAyCisjZGVmaW5lIFJFU09VUkNFX1ZCSSAgICAgICAgICAgNAorCitzdHJ1Y3QgbmdlbmVfYnVmZmVyIHsKKwkvKiBjb21tb24gdjRsIGJ1ZmZlciBzdHVmZiAtLSBtdXN0IGJlIGZpcnN0ICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAgICAgdmI7CisKKwkvKiBuZ2VuZSBzcGVjaWZpYyAqLworCWNvbnN0IHN0cnVjdCBuZ2VuZV9mb3JtYXQgKmZtdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICB0dm5vcm07CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnRmb3JtYXQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnRzd2FwOworfTsKKyNlbmRpZgorCisKKyNlbmRpZgorCisvKiAgTG9jYWxXb3JkczogIEVuZGlmCisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKaW5kZXggMTA2N2IyMi4uY2ZmNzdlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKQEAgLTYyLDYgKzYyLDcgQEAKIAlbU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTV0gPSB7CiAJCS5uYW1lCT0gIkhhdXBwYXVnZSBXaW5UViBNaW5pU3RpY2siLAogCQkudHlwZQk9IFNNU19OT1ZBX0IwLAorCQkuZndbREVWSUNFX01PREVfSVNEQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1pc2RidC0wMi5mdyIsCiAJCS5md1tERVZJQ0VfTU9ERV9EVkJUX0JEQV0gPSAic21zMXh4eC1oY3ctNTV4eHgtZHZidC0wMi5mdyIsCiAJCS5ib2FyZF9jZmcubGVkc19wb3dlciA9IDI2LAogCQkuYm9hcmRfY2ZnLmxlZDAgPSAyNywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYwppbmRleCBjYTc1OGJjLi40YmZkMzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCkBAIC0xNDU5LDggKzE0NTksMTAgQEAKIAlpZiAoIShjb3JlZGV2LT5kZXZpY2VfZmxhZ3MgJiBTTVNfREVWSUNFX0ZBTUlMWTIpKSB7CiAJCXBNc2ctPnhNc2dIZWFkZXIubXNnVHlwZSA9IE1TR19TTVNfR1BJT19DT05GSUdfUkVROwogCQlpZiAoR2V0R3Bpb1BpblBhcmFtcyhQaW5OdW0sICZUcmFuc2xhdGVkUGluTnVtLCAmR3JvdXBOdW0sCi0JCQkJJmdyb3VwQ2ZnKSAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJJmdyb3VwQ2ZnKSAhPSAwKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIGZyZWU7CisJCX0KIAogCQlwTXNnLT5tc2dEYXRhWzFdID0gVHJhbnNsYXRlZFBpbk51bTsKIAkJcE1zZy0+bXNnRGF0YVsyXSA9IEdyb3VwTnVtOwpAQCAtMTQ5MCw2ICsxNDkyLDcgQEAKIAkJZWxzZQogCQkJc21zX2Vycigic21zY29yZV9ncGlvX2NvbmZpZ3VyZSBlcnJvciIpOwogCX0KK2ZyZWU6CiAJa2ZyZWUoYnVmZmVyKTsKIAogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAppbmRleCBlZWMxOGFhLi44ZWNhZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCkBAIC0yMTIsNiArMjEyLDggQEAKICNkZWZpbmUgTVNHX1NNU19EQUJfQ0hBTk5FTAkJCQk2MDcKICNkZWZpbmUgTVNHX1NNU19HRVRfUElEX0ZJTFRFUl9MSVNUX1JFUQkJCTYwOAogI2RlZmluZSBNU0dfU01TX0dFVF9QSURfRklMVEVSX0xJU1RfUkVTCQkJNjA5CisjZGVmaW5lIE1TR19TTVNfR0VUX1NUQVRJU1RJQ1NfUkVTCQkJNjE2CisjZGVmaW5lIE1TR19TTVNfR0VUX1NUQVRJU1RJQ1NfUkVRCQkJNjE1CiAjZGVmaW5lIE1TR19TTVNfSE9fUEVSX1NMSUNFU19JTkQJCQk2MzAKICNkZWZpbmUgTVNHX1NNU19TRVRfQU5URU5OQV9DT05GSUdfUkVRCQkJNjUxCiAjZGVmaW5lIE1TR19TTVNfU0VUX0FOVEVOTkFfQ09ORklHX1JFUwkJCTY1MgpAQCAtMzM5LDcgKzM0MSw3IEBACiAKIC8qIFN0YXRpc3RpY3MgaW5mb3JtYXRpb24gcmV0dXJuZWQgYXMgcmVzcG9uc2UgZm9yCiAgKiBTbXNIb3N0QXBpR2V0U3RhdGlzdGljc19SZXEgKi8KLXN0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfUyB7CitzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX1NUIHsKIAl1MzIgUmVzZXJ2ZWQ7CQkvKiBSZXNlcnZlZCAqLwogCiAJLyogQ29tbW9uIHBhcmFtZXRlcnMgKi8KQEAgLTQyNCw2ICs0MjYsNzkgQEAKIAl1MzIgUmVzZXJ2ZWRGaWVsZHNbMTBdOwkvKiBSZXNlcnZlZCAqLwogfTsKIAorc3RydWN0IFNtc01zZ1N0YXRpc3RpY3NJbmZvX1NUIHsKKwl1MzIgUmVxdWVzdFJlc3VsdDsKKworCXN0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfU1QgU3RhdDsKKworCS8qIFNwbGl0IHRoZSBjYWxjIG9mIHRoZSBTTlIgaW4gREFCICovCisJdTMyIFNpZ25hbDsgLyogZEIgKi8KKwl1MzIgTm9pc2U7IC8qIGRCICovCisKK307CisKK3N0cnVjdCBTTVNIT1NUTElCX0lTREJUX0xBWUVSX1NUQVRfU1QgeworCS8qIFBlci1sYXllciBpbmZvcm1hdGlvbiAqLworCXUzMiBDb2RlUmF0ZTsgLyogQ29kZSBSYXRlIGZyb20gU01TSE9TVExJQl9DT0RFX1JBVEVfRVQsCisJCSAgICAgICAqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBDb25zdGVsbGF0aW9uOyAvKiBDb25zdGVsbGF0aW9uIGZyb20gU01TSE9TVExJQl9DT05TVEVMTEFUSU9OX0VULAorCQkJICAgICogMjU1IG1lYW5zIGxheWVyIGRvZXMgbm90IGV4aXN0ICovCisJdTMyIEJFUjsgLyogUG9zdCBWaXRlcmJpIEJFUiBbMUUtNV0sIDB4RkZGRkZGRkYgaW5kaWNhdGUgTi9BICovCisJdTMyIEJFUkVycm9yQ291bnQ7IC8qIFBvc3QgVml0ZXJiaSBFcnJvciBCaXRzIENvdW50ICovCisJdTMyIEJFUkJpdENvdW50OyAvKiBQb3N0IFZpdGVyYmkgVG90YWwgQml0cyBDb3VudCAqLworCXUzMiBQcmVCRVI7IC8qIFByZSBWaXRlcmJpIEJFUiBbMUUtNV0sIDB4RkZGRkZGRkYgaW5kaWNhdGUgTi9BICovCisJdTMyIFRTX1BFUjsgLyogVHJhbnNwb3J0IHN0cmVhbSBQRVIgWyVdLCAweEZGRkZGRkZGIGluZGljYXRlIE4vQSAqLworCXUzMiBFcnJvclRTUGFja2V0czsgLyogTnVtYmVyIG9mIGVycm9uZW91cyB0cmFuc3BvcnQtc3RyZWFtIHBhY2tldHMgKi8KKwl1MzIgVG90YWxUU1BhY2tldHM7IC8qIFRvdGFsIG51bWJlciBvZiB0cmFuc3BvcnQtc3RyZWFtIHBhY2tldHMgKi8KKwl1MzIgVElMZGVwdGhJOyAvKiBUaW1lIGludGVybGVhdmVyIGRlcHRoIEkgcGFyYW1ldGVyLAorCQkJKiAyNTUgbWVhbnMgbGF5ZXIgZG9lcyBub3QgZXhpc3QgKi8KKwl1MzIgTnVtYmVyT2ZTZWdtZW50czsgLyogTnVtYmVyIG9mIHNlZ21lbnRzIGluIGxheWVyIEEsCisJCQkgICAgICAgKiAyNTUgbWVhbnMgbGF5ZXIgZG9lcyBub3QgZXhpc3QgKi8KKwl1MzIgVE1DQ0Vycm9yczsgLyogVE1DQyBlcnJvcnMgKi8KK307CisKK3N0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfSVNEQlRfU1QgeworCXUzMiBTdGF0aXN0aWNzVHlwZTsgLyogRW51bWVyYXRvciBpZGVudGlmeWluZyB0aGUgdHlwZSBvZiB0aGUKKwkJCQkqIHN0cnVjdHVyZS4gIFZhbHVlcyBhcmUgdGhlIHNhbWUgYXMKKwkJCQkqIFNNU0hPU1RMSUJfREVWSUNFX01PREVTX0UKKwkJCQkqCisJCQkJKiBUaGlzIGZpZWxkIE1VU1QgYWx3YXlzIGJlIGZpcnN0IGluIGFueQorCQkJCSogc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KKworCXUzMiBGdWxsU2l6ZTsgLyogVG90YWwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSBtb2RlbS4KKwkJICAgICAgICogSWYgdGhlIHNpemUgcmVxdWVzdGVkIGJ5IHRoZSBob3N0IGlzIHNtYWxsZXIgdGhhbgorCQkgICAgICAgKiBGdWxsU2l6ZSwgdGhlIHN0cnVjdCB3aWxsIGJlIHRydW5jYXRlZCAqLworCisJLyogQ29tbW9uIHBhcmFtZXRlcnMgKi8KKwl1MzIgSXNSZkxvY2tlZDsgLyogMCAtIG5vdCBsb2NrZWQsIDEgLSBsb2NrZWQgKi8KKwl1MzIgSXNEZW1vZExvY2tlZDsgLyogMCAtIG5vdCBsb2NrZWQsIDEgLSBsb2NrZWQgKi8KKwl1MzIgSXNFeHRlcm5hbExOQU9uOyAvKiAwIC0gZXh0ZXJuYWwgTE5BIG9mZiwgMSAtIGV4dGVybmFsIExOQSBvbiAqLworCisJLyogUmVjZXB0aW9uIHF1YWxpdHkgKi8KKwlzMzIgIFNOUjsgLyogZEIgKi8KKwlzMzIgIFJTU0k7IC8qIGRCbSAqLworCXMzMiAgSW5CYW5kUHdyOyAvKiBJbiBiYW5kIHBvd2VyIGluIGRCTSAqLworCXMzMiAgQ2Fycmllck9mZnNldDsgLyogQ2FycmllciBPZmZzZXQgaW4gSHogKi8KKworCS8qIFRyYW5zbWlzc2lvbiBwYXJhbWV0ZXJzICovCisJdTMyIEZyZXF1ZW5jeTsgLyogRnJlcXVlbmN5IGluIEh6ICovCisJdTMyIEJhbmR3aWR0aDsgLyogQmFuZHdpZHRoIGluIE1IeiAqLworCXUzMiBUcmFuc21pc3Npb25Nb2RlOyAvKiBJU0RCLVQgdHJhbnNtaXNzaW9uIG1vZGUgKi8KKwl1MzIgTW9kZW1TdGF0ZTsgLyogMCAtIEFjcXVpc2l0aW9uLCAxIC0gTG9ja2VkICovCisJdTMyIEd1YXJkSW50ZXJ2YWw7IC8qIEd1YXJkIEludGVydmFsLCAxIGRpdmlkZWQgYnkgdmFsdWUgKi8KKwl1MzIgU3lzdGVtVHlwZTsgLyogSVNEQi1UIHN5c3RlbSB0eXBlIChJU0RCLVQgLyBJU0RCLVRzYikgKi8KKwl1MzIgUGFydGlhbFJlY2VwdGlvbjsgLyogVFJVRSAtIHBhcnRpYWwgcmVjZXB0aW9uLCBGQUxTRSBvdGhlcndpc2UgKi8KKwl1MzIgTnVtT2ZMYXllcnM7IC8qIE51bWJlciBvZiBJU0RCLVQgbGF5ZXJzIGluIHRoZSBuZXR3b3JrICovCisKKwkvKiBQZXItbGF5ZXIgaW5mb3JtYXRpb24gKi8KKwkvKiBMYXllcnMgQSwgQiBhbmQgQyAqLworCXN0cnVjdCBTTVNIT1NUTElCX0lTREJUX0xBWUVSX1NUQVRfU1QJTGF5ZXJJbmZvWzNdOworCS8qIFBlci1sYXllciBzdGF0aXN0aWNzLCBzZWUgU01TSE9TVExJQl9JU0RCVF9MQVlFUl9TVEFUX1NUICovCisKKwkvKiBJbnRlcmZhY2UgaW5mb3JtYXRpb24gKi8KKwl1MzIgU21zVG9Ib3N0VHhFcnJvcnM7IC8qIFRvdGFsIG51bWJlciBvZiB0cmFuc21pc3Npb24gZXJyb3JzLiAqLworfTsKKwogc3RydWN0IFBJRF9TVEFUSVNUSUNTX0RBVEFfUyB7CiAJc3RydWN0IFBJRF9CVVJTVF9TIHsKIAkJdTMyIHNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jCmluZGV4IDY4YmY5ZmIuLjVmMzkzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jCkBAIC0xMTYsNiArMTE2LDExOCBAQAogCX0KIH0KIAorCitzdGF0aWMgdm9pZCBzbXNkdmJfdXBkYXRlX2R2Yl9zdGF0cyhzdHJ1Y3QgUkVDRVBUSU9OX1NUQVRJU1RJQ1NfUyAqcFJlY2VwdGlvbkRhdGEsCisJCQkJICAgc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TVCAqcCkKK3sKKwlpZiAoc21zX2RiZyAmIDIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJlc2VydmVkID0gJWQiLCBwLT5SZXNlcnZlZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc1JmTG9ja2VkID0gJWQiLCBwLT5Jc1JmTG9ja2VkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzRGVtb2RMb2NrZWQgPSAlZCIsIHAtPklzRGVtb2RMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNFeHRlcm5hbExOQU9uID0gJWQiLCBwLT5Jc0V4dGVybmFsTE5BT24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiU05SID0gJWQiLCBwLT5TTlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQkVSID0gJWQiLCBwLT5CRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRklCX0NSQyA9ICVkIiwgcC0+RklCX0NSQyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJUU19QRVIgPSAlZCIsIHAtPlRTX1BFUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJNRkVSID0gJWQiLCBwLT5NRkVSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJTU0kgPSAlZCIsIHAtPlJTU0kpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSW5CYW5kUHdyID0gJWQiLCBwLT5JbkJhbmRQd3IpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2Fycmllck9mZnNldCA9ICVkIiwgcC0+Q2Fycmllck9mZnNldCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJGcmVxdWVuY3kgPSAlZCIsIHAtPkZyZXF1ZW5jeSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCYW5kd2lkdGggPSAlZCIsIHAtPkJhbmR3aWR0aCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJUcmFuc21pc3Npb25Nb2RlID0gJWQiLCBwLT5UcmFuc21pc3Npb25Nb2RlKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1vZGVtU3RhdGUgPSAlZCIsIHAtPk1vZGVtU3RhdGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiR3VhcmRJbnRlcnZhbCA9ICVkIiwgcC0+R3VhcmRJbnRlcnZhbCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJDb2RlUmF0ZSA9ICVkIiwgcC0+Q29kZVJhdGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTFBDb2RlUmF0ZSA9ICVkIiwgcC0+TFBDb2RlUmF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJIaWVyYXJjaHkgPSAlZCIsIHAtPkhpZXJhcmNoeSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJDb25zdGVsbGF0aW9uID0gJWQiLCBwLT5Db25zdGVsbGF0aW9uKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJ1cnN0U2l6ZSA9ICVkIiwgcC0+QnVyc3RTaXplKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJ1cnN0RHVyYXRpb24gPSAlZCIsIHAtPkJ1cnN0RHVyYXRpb24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3RDeWNsZVRpbWUgPSAlZCIsIHAtPkJ1cnN0Q3ljbGVUaW1lKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNhbGN1bGF0ZWRCdXJzdEN5Y2xlVGltZSA9ICVkIiwgcC0+Q2FsY3VsYXRlZEJ1cnN0Q3ljbGVUaW1lKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk51bU9mUm93cyA9ICVkIiwgcC0+TnVtT2ZSb3dzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk51bU9mUGFkZENvbHMgPSAlZCIsIHAtPk51bU9mUGFkZENvbHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZQdW5jdENvbHMgPSAlZCIsIHAtPk51bU9mUHVuY3RDb2xzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkVycm9yVFNQYWNrZXRzID0gJWQiLCBwLT5FcnJvclRTUGFja2V0cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJUb3RhbFRTUGFja2V0cyA9ICVkIiwgcC0+VG90YWxUU1BhY2tldHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZWYWxpZE1wZVRsYnMgPSAlZCIsIHAtPk51bU9mVmFsaWRNcGVUbGJzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk51bU9mSW52YWxpZE1wZVRsYnMgPSAlZCIsIHAtPk51bU9mSW52YWxpZE1wZVRsYnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZDb3JyZWN0ZWRNcGVUbGJzID0gJWQiLCBwLT5OdW1PZkNvcnJlY3RlZE1wZVRsYnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQkVSRXJyb3JDb3VudCA9ICVkIiwgcC0+QkVSRXJyb3JDb3VudCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVJCaXRDb3VudCA9ICVkIiwgcC0+QkVSQml0Q291bnQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiU21zVG9Ib3N0VHhFcnJvcnMgPSAlZCIsIHAtPlNtc1RvSG9zdFR4RXJyb3JzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlByZUJFUiA9ICVkIiwgcC0+UHJlQkVSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNlbGxJZCA9ICVkIiwgcC0+Q2VsbElkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkR2YmhTcnZJbmRIUCA9ICVkIiwgcC0+RHZiaFNydkluZEhQKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkR2YmhTcnZJbmRMUCA9ICVkIiwgcC0+RHZiaFNydkluZExQKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk51bU1QRVJlY2VpdmVkID0gJWQiLCBwLT5OdW1NUEVSZWNlaXZlZCk7CisJfQorCisJcFJlY2VwdGlvbkRhdGEtPklzRGVtb2RMb2NrZWQgPSBwLT5Jc0RlbW9kTG9ja2VkOworCisJcFJlY2VwdGlvbkRhdGEtPlNOUiA9IHAtPlNOUjsKKwlwUmVjZXB0aW9uRGF0YS0+QkVSID0gcC0+QkVSOworCXBSZWNlcHRpb25EYXRhLT5CRVJFcnJvckNvdW50ID0gcC0+QkVSRXJyb3JDb3VudDsKKwlwUmVjZXB0aW9uRGF0YS0+SW5CYW5kUHdyID0gcC0+SW5CYW5kUHdyOworCXBSZWNlcHRpb25EYXRhLT5FcnJvclRTUGFja2V0cyA9IHAtPkVycm9yVFNQYWNrZXRzOworfTsKKworCitzdGF0aWMgdm9pZCBzbXNkdmJfdXBkYXRlX2lzZGJ0X3N0YXRzKHN0cnVjdCBSRUNFUFRJT05fU1RBVElTVElDU19TICpwUmVjZXB0aW9uRGF0YSwKKwkJCQkgICAgc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19JU0RCVF9TVCAqcCkKK3sKKwlpbnQgaTsKKworCWlmIChzbXNfZGJnICYgMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNSZkxvY2tlZCA9ICVkIiwgcC0+SXNSZkxvY2tlZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc0RlbW9kTG9ja2VkID0gJWQiLCBwLT5Jc0RlbW9kTG9ja2VkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzRXh0ZXJuYWxMTkFPbiA9ICVkIiwgcC0+SXNFeHRlcm5hbExOQU9uKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlNOUiA9ICVkIiwgcC0+U05SKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJTU0kgPSAlZCIsIHAtPlJTU0kpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSW5CYW5kUHdyID0gJWQiLCBwLT5JbkJhbmRQd3IpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2Fycmllck9mZnNldCA9ICVkIiwgcC0+Q2Fycmllck9mZnNldCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJGcmVxdWVuY3kgPSAlZCIsIHAtPkZyZXF1ZW5jeSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCYW5kd2lkdGggPSAlZCIsIHAtPkJhbmR3aWR0aCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJUcmFuc21pc3Npb25Nb2RlID0gJWQiLCBwLT5UcmFuc21pc3Npb25Nb2RlKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1vZGVtU3RhdGUgPSAlZCIsIHAtPk1vZGVtU3RhdGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiR3VhcmRJbnRlcnZhbCA9ICVkIiwgcC0+R3VhcmRJbnRlcnZhbCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJTeXN0ZW1UeXBlID0gJWQiLCBwLT5TeXN0ZW1UeXBlKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBhcnRpYWxSZWNlcHRpb24gPSAlZCIsIHAtPlBhcnRpYWxSZWNlcHRpb24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZMYXllcnMgPSAlZCIsIHAtPk51bU9mTGF5ZXJzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlNtc1RvSG9zdFR4RXJyb3JzID0gJWQiLCBwLT5TbXNUb0hvc3RUeEVycm9ycyk7CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBDb2RlUmF0ZSA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLkNvZGVSYXRlKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogQ29uc3RlbGxhdGlvbiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLkNvbnN0ZWxsYXRpb24pOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBCRVIgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBCRVJFcnJvckNvdW50ID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQkVSRXJyb3JDb3VudCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUkJpdENvdW50ID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQkVSQml0Q291bnQpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBQcmVCRVIgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5QcmVCRVIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUU19QRVIgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5UU19QRVIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBFcnJvclRTUGFja2V0cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLkVycm9yVFNQYWNrZXRzKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogVG90YWxUU1BhY2tldHMgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5Ub3RhbFRTUGFja2V0cyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFRJTGRlcHRoSSA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRJTGRlcHRoSSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IE51bWJlck9mU2VnbWVudHMgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5OdW1iZXJPZlNlZ21lbnRzKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogVE1DQ0Vycm9ycyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRNQ0NFcnJvcnMpOworCQl9CisJfQorCisJcFJlY2VwdGlvbkRhdGEtPklzRGVtb2RMb2NrZWQgPSBwLT5Jc0RlbW9kTG9ja2VkOworCisJcFJlY2VwdGlvbkRhdGEtPlNOUiA9IHAtPlNOUjsKKwlwUmVjZXB0aW9uRGF0YS0+SW5CYW5kUHdyID0gcC0+SW5CYW5kUHdyOworCisJcFJlY2VwdGlvbkRhdGEtPkVycm9yVFNQYWNrZXRzID0gMDsKKwlwUmVjZXB0aW9uRGF0YS0+QkVSID0gMDsKKwlwUmVjZXB0aW9uRGF0YS0+QkVSRXJyb3JDb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlwUmVjZXB0aW9uRGF0YS0+QkVSICs9IHAtPkxheWVySW5mb1tpXS5CRVI7CisJCXBSZWNlcHRpb25EYXRhLT5CRVJFcnJvckNvdW50ICs9IHAtPkxheWVySW5mb1tpXS5CRVJFcnJvckNvdW50OworCQlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgKz0gcC0+TGF5ZXJJbmZvW2ldLkVycm9yVFNQYWNrZXRzOworCX0KK30KKwogc3RhdGljIGludCBzbXNkdmJfb25yZXNwb25zZSh2b2lkICpjb250ZXh0LCBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IpCiB7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0gKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKikgY29udGV4dDsKQEAgLTEzNCw2ICsyNDYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgTVNHX1NNU19SRl9UVU5FX1JFUzoKKwljYXNlIE1TR19TTVNfSVNEQlRfVFVORV9SRVM6CiAJCWNvbXBsZXRlKCZjbGllbnQtPnR1bmVfZG9uZSk7CiAJCWJyZWFrOwogCkBAIC0yMTcsNiArMzMwLDQwIEBACiAJCWlzX3N0YXR1c191cGRhdGUgPSB0cnVlOwogCQlicmVhazsKIAl9CisJY2FzZSBNU0dfU01TX0dFVF9TVEFUSVNUSUNTX1JFUzogeworCQl1bmlvbiB7CisJCQlzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX0lTREJUX1NUICBpc2RidDsKKwkJCXN0cnVjdCBTbXNNc2dTdGF0aXN0aWNzSW5mb19TVCAgICAgICAgIGR2YjsKKwkJfSAqcCA9ICh2b2lkICopIChwaGRyICsgMSk7CisJCXN0cnVjdCBSRUNFUFRJT05fU1RBVElTVElDU19TICpwUmVjZXB0aW9uRGF0YSA9CisJCQkJJmNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGE7CisKKwkJc21zX2luZm8oIk1TR19TTVNfR0VUX1NUQVRJU1RJQ1NfUkVTIik7CisKKwkJaXNfc3RhdHVzX3VwZGF0ZSA9IHRydWU7CisKKwkJc3dpdGNoIChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShjbGllbnQtPmNvcmVkZXYpKSB7CisJCWNhc2UgREVWSUNFX01PREVfSVNEQlQ6CisJCWNhc2UgREVWSUNFX01PREVfSVNEQlRfQkRBOgorCQkJc21zZHZiX3VwZGF0ZV9pc2RidF9zdGF0cyhwUmVjZXB0aW9uRGF0YSwgJnAtPmlzZGJ0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc21zZHZiX3VwZGF0ZV9kdmJfc3RhdHMocFJlY2VwdGlvbkRhdGEsICZwLT5kdmIuU3RhdCk7CisJCX0KKwkJaWYgKCFwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCkgeworCQkJcFJlY2VwdGlvbkRhdGEtPlNOUiA9IDA7CisJCQlwUmVjZXB0aW9uRGF0YS0+QkVSID0gMDsKKwkJCXBSZWNlcHRpb25EYXRhLT5CRVJFcnJvckNvdW50ID0gMDsKKwkJCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkVycm9yVFNQYWNrZXRzID0gMDsKKwkJfQorCisJCWNvbXBsZXRlKCZjbGllbnQtPnR1bmVfZG9uZSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlzbXNfaW5mbygiVW5oYW5kbGVkIG1lc3NhZ2UgJWQiLCBwaGRyLT5tc2dUeXBlKTsKKwogCX0KIAlzbXNjb3JlX3B1dGJ1ZmZlcihjbGllbnQtPmNvcmVkZXYsIGNiKTsKIApAQCAtMjMzLDEwICszODAsMTAgQEAKIAkJCQkJCURWQjNfRVZFTlRfVU5DX0VSUik7CiAKIAkJfSBlbHNlIHsKLQkJCS8qY2xpZW50LT5mZV9zdGF0dXMgPQotCQkJCShwaGRyLT5tc2dUeXBlID09IE1TR19TTVNfTk9fU0lHTkFMX0lORCkgPwotCQkJCTAgOiBGRV9IQVNfU0lHTkFMOyovCi0JCQljbGllbnQtPmZlX3N0YXR1cyA9IDA7CisJCQlpZiAoY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5Jc1JmTG9ja2VkKQorCQkJCWNsaWVudC0+ZmVfc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSOworCQkJZWxzZQorCQkJCWNsaWVudC0+ZmVfc3RhdHVzID0gMDsKIAkJCXNtc19ib2FyZF9kdmIzX2V2ZW50KGNsaWVudCwgRFZCM19FVkVOVF9GRV9VTkxPQ0spOwogCQl9CiAJfQpAQCAtMzI1LDYgKzQ3MiwyMCBAQAogCQkJCQkJMCA6IC1FVElNRTsKIH0KIAorc3RhdGljIGludCBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3Qoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50KQoreworCWludCByYzsKKwlzdHJ1Y3QgU21zTXNnSGRyX1NUIE1zZyA9IHsgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVEsCisJCQkJICAgIERWQlRfQkRBX0NPTlRST0xfTVNHX0lELAorCQkJCSAgICBISUZfVEFTSywKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBTbXNNc2dIZHJfU1QpLCAwIH07CisKKwlyYyA9IHNtc2R2Yl9zZW5kcmVxdWVzdF9hbmRfd2FpdChjbGllbnQsICZNc2csIHNpemVvZihNc2cpLAorCQkJCQkgICZjbGllbnQtPnR1bmVfZG9uZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGxlZF9mZWVkYmFjayhzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQpCiB7CiAJaWYgKGNsaWVudC0+ZmVfc3RhdHVzICYgRkVfSEFTX0xPQ0spCkBAIC0zMzcsMzMgKzQ5OCw0MyBAQAogCiBzdGF0aWMgaW50IHNtc2R2Yl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXQpCiB7CisJaW50IHJjOwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAkqc3RhdCA9IGNsaWVudC0+ZmVfc3RhdHVzOwogCiAJbGVkX2ZlZWRiYWNrKGNsaWVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSpiZXIgPSBjbGllbnQtPnNtc19zdGF0X2R2Yi5SZWNlcHRpb25EYXRhLkJFUjsKIAogCWxlZF9mZWVkYmFjayhjbGllbnQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHNtc2R2Yl9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKIHsKKwlpbnQgcmM7CisKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQ7CiAJY2xpZW50ID0gY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKKwlyYyA9IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChjbGllbnQpOworCiAJaWYgKGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuSW5CYW5kUHdyIDwgLTk1KQogCQkqc3RyZW5ndGggPSAwOwogCQllbHNlIGlmIChjbGllbnQtPnNtc19zdGF0X2R2Yi5SZWNlcHRpb25EYXRhLkluQmFuZFB3ciA+IC0yOSkKQEAgLTM3NSwzMSArNTQ2LDM3IEBACiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQogeworCWludCByYzsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQ7CiAJY2xpZW50ID0gY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKKwlyYyA9IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChjbGllbnQpOworCiAJKnNuciA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuU05SOwogCiAJbGVkX2ZlZWRiYWNrKGNsaWVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCiB7CisJaW50IHJjOwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAkqdWNibG9ja3MgPSBjbGllbnQtPnNtc19zdGF0X2R2Yi5SZWNlcHRpb25EYXRhLkVycm9yVFNQYWNrZXRzOwogCiAJbGVkX2ZlZWRiYWNrKGNsaWVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgc21zZHZiX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLApAQCAtNDEzLDkgKzU5MCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtc2R2Yl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCi0JCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCitzdGF0aWMgaW50IHNtc2R2Yl9kdmJ0X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogeworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCA9CiAJCWNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCkBAIC00MjksMjQgKzYwNywzMyBAQAogCWNsaWVudC0+ZmVfc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKIAljbGllbnQtPmV2ZW50X2ZlX3N0YXRlID0gLTE7CiAJY2xpZW50LT5ldmVudF91bmNfc3RhdGUgPSAtMTsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19EVkJUOwogCiAJTXNnLk1zZy5tc2dTcmNJZCA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOwogCU1zZy5Nc2cubXNnRHN0SWQgPSBISUZfVEFTSzsKIAlNc2cuTXNnLm1zZ0ZsYWdzID0gMDsKIAlNc2cuTXNnLm1zZ1R5cGUgPSBNU0dfU01TX1JGX1RVTkVfUkVROwogCU1zZy5Nc2cubXNnTGVuZ3RoID0gc2l6ZW9mKE1zZyk7Ci0JTXNnLkRhdGFbMF0gPSBmZXAtPmZyZXF1ZW5jeTsKKwlNc2cuRGF0YVswXSA9IGMtPmZyZXF1ZW5jeTsKIAlNc2cuRGF0YVsyXSA9IDEyMDAwMDAwOwogCi0Jc21zX2RlYnVnKCJmcmVxICVkIGJhbmQgJWQiLAotCQkgIGZlcC0+ZnJlcXVlbmN5LCBmZXAtPnUub2ZkbS5iYW5kd2lkdGgpOworCXNtc19pbmZvKCIlczogZnJlcSAlZCBiYW5kICVkIiwgX19mdW5jX18sIGMtPmZyZXF1ZW5jeSwKKwkJIGMtPmJhbmR3aWR0aF9oeik7CiAKLQlzd2l0Y2ggKGZlcC0+dS5vZmRtLmJhbmR3aWR0aCkgewotCWNhc2UgQkFORFdJRFRIXzhfTUhaOiBNc2cuRGF0YVsxXSA9IEJXXzhfTUhaOyBicmVhazsKLQljYXNlIEJBTkRXSURUSF83X01IWjogTXNnLkRhdGFbMV0gPSBCV183X01IWjsgYnJlYWs7Ci0JY2FzZSBCQU5EV0lEVEhfNl9NSFo6IE1zZy5EYXRhWzFdID0gQldfNl9NSFo7IGJyZWFrOwotCWNhc2UgQkFORFdJRFRIX0FVVE86IHJldHVybiAtRU9QTk9UU1VQUDsKLQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKGMtPmJhbmR3aWR0aF9oeiAvIDEwMDAwMDApIHsKKwljYXNlIDg6CisJCU1zZy5EYXRhWzFdID0gQldfOF9NSFo7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJTXNnLkRhdGFbMV0gPSBCV183X01IWjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlNc2cuRGF0YVsxXSA9IEJXXzZfTUhaOworCQlicmVhazsKKwljYXNlIDA6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogRGlzYWJsZSBMTkEsIGlmIGFueS4gQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgbm8gTE5BIGlzIHByZXNlbnQgKi8KIAlyZXQgPSBzbXNfYm9hcmRfbG5hX2NvbnRyb2woY2xpZW50LT5jb3JlZGV2LCAwKTsKQEAgLTQ3MCw2ICs2NTcsOTAgQEAKIAkJCQkJICAgJmNsaWVudC0+dHVuZV9kb25lKTsKIH0KIAorc3RhdGljIGludCBzbXNkdmJfaXNkYnRfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOworCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCA9CisJCWNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOworCisJc3RydWN0IHsKKwkJc3RydWN0IFNtc01zZ0hkcl9TVAlNc2c7CisJCXUzMgkJRGF0YVs0XTsKKwl9IE1zZzsKKworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX0lTREJUOworCisJTXNnLk1zZy5tc2dTcmNJZCAgPSBEVkJUX0JEQV9DT05UUk9MX01TR19JRDsKKwlNc2cuTXNnLm1zZ0RzdElkICA9IEhJRl9UQVNLOworCU1zZy5Nc2cubXNnRmxhZ3MgID0gMDsKKwlNc2cuTXNnLm1zZ1R5cGUgICA9IE1TR19TTVNfSVNEQlRfVFVORV9SRVE7CisJTXNnLk1zZy5tc2dMZW5ndGggPSBzaXplb2YoTXNnKTsKKworCWlmIChjLT5pc2RidF9zYl9zZWdtZW50X2lkeCA9PSAtMSkKKwkJYy0+aXNkYnRfc2Jfc2VnbWVudF9pZHggPSAwOworCisJc3dpdGNoIChjLT5pc2RidF9zYl9zZWdtZW50X2NvdW50KSB7CisJY2FzZSAzOgorCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzNTRUc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJTXNnLkRhdGFbMV0gPSBCV19JU0RCVF8xU0VHOworCQlicmVhazsKKwljYXNlIDA6CS8qIEFVVE8gKi8KKwkJc3dpdGNoIChjLT5iYW5kd2lkdGhfaHogLyAxMDAwMDAwKSB7CisJCWNhc2UgODoKKwkJY2FzZSA3OgorCQkJYy0+aXNkYnRfc2Jfc2VnbWVudF9jb3VudCA9IDM7CisJCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzNTRUc7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJYy0+aXNkYnRfc2Jfc2VnbWVudF9jb3VudCA9IDE7CisJCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCQlicmVhazsKKwkJZGVmYXVsdDogLyogQXNzdW1lcyA2IE1IWiBidyAqLworCQkJYy0+aXNkYnRfc2Jfc2VnbWVudF9jb3VudCA9IDE7CisJCQljLT5iYW5kd2lkdGhfaHogPSA2MDAwOworCQkJTXNnLkRhdGFbMV0gPSBCV19JU0RCVF8xU0VHOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc21zX2luZm8oIlNlZ21lbnQgY291bnQgJWQgbm90IHN1cHBvcnRlZCIsIGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlNc2cuRGF0YVswXSA9IGMtPmZyZXF1ZW5jeTsKKwlNc2cuRGF0YVsyXSA9IDEyMDAwMDAwOworCU1zZy5EYXRhWzNdID0gYy0+aXNkYnRfc2Jfc2VnbWVudF9pZHg7CisKKwlzbXNfaW5mbygiJXM6IGZyZXEgJWQgc2Vnd2lkdGggJWQgc2VnaW5kZXggJWRcbiIsIF9fZnVuY19fLAorCQkgYy0+ZnJlcXVlbmN5LCBjLT5pc2RidF9zYl9zZWdtZW50X2NvdW50LAorCQkgYy0+aXNkYnRfc2Jfc2VnbWVudF9pZHgpOworCisJcmV0dXJuIHNtc2R2Yl9zZW5kcmVxdWVzdF9hbmRfd2FpdChjbGllbnQsICZNc2csIHNpemVvZihNc2cpLAorCQkJCQkgICAmY2xpZW50LT50dW5lX2RvbmUpOworfQorCitzdGF0aWMgaW50IHNtc2R2Yl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KKwkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CisJc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYgPSBjbGllbnQtPmNvcmVkZXY7CisKKwlzd2l0Y2ggKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKGNvcmVkZXYpKSB7CisJY2FzZSBERVZJQ0VfTU9ERV9EVkJUOgorCWNhc2UgREVWSUNFX01PREVfRFZCVF9CREE6CisJCXJldHVybiBzbXNkdmJfZHZidF9zZXRfZnJvbnRlbmQoZmUsIGZlcCk7CisJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVDoKKwljYXNlIERFVklDRV9NT0RFX0lTREJUX0JEQToKKwkJcmV0dXJuIHNtc2R2Yl9pc2RidF9zZXRfZnJvbnRlbmQoZmUsIGZlcCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCiBzdGF0aWMgaW50IHNtc2R2Yl9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCiB7CkBAIC01NTcsMTMgKzgyOCw2IEBACiAJLyogZGV2aWNlIHJlbW92YWwgaGFuZGxlZCBieSBvbnJlbW92ZSBjYWxsYmFjayAqLwogCWlmICghYXJyaXZhbCkKIAkJcmV0dXJuIDA7Ci0KLQlpZiAoc21zY29yZV9nZXRfZGV2aWNlX21vZGUoY29yZWRldikgIT0gREVWSUNFX01PREVfRFZCVF9CREEpIHsKLQkJc21zX2VycigiU01TIERldmljZSBtb2RlIGlzIG5vdCBzZXQgZm9yICIKLQkJCSJEVkIgb3BlcmF0aW9uLiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc21zZHZiX2NsaWVudF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbGllbnQpIHsKIAkJc21zX2Vycigia21hbGxvYygpIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmMKaW5kZXggZTNkNzc2Zi4uYTU2ZWFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jCkBAIC04NSw5ICs4NSw5IEBACiAJCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotdTMyIGlyX3BvczsKLXUzMglpcl93b3JkOwotdTMyIGlyX3RvZ2dsZTsKK3N0YXRpYyB1MzIgaXJfcG9zOworc3RhdGljIHUzMiBpcl93b3JkOworc3RhdGljIHUzMiBpcl90b2dnbGU7CiAKICNkZWZpbmUgUkM1X1BVU0hfQklUKGRzdCwgYml0LCBwb3MpCVwKIAl7IGRzdCA8PD0gMTsgZHN0IHw9IGJpdDsgcG9zKys7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9pci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMKaW5kZXggMjNhMWM2My4uYjA3MGU4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMKQEAgLTI2OCw4ICsyNjgsOCBAQAogCiAKIC8qIC9wcm9jL2F2NzExMF9pciBpbnRlcmZhY2UgKi8KLXN0YXRpYyBpbnQgYXY3MTEwX2lyX3dyaXRlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBzc2l6ZV90IGF2NzExMF9pcl9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgKnBhZ2U7CiAJdTMyIGlyX2NvbmZpZzsKQEAgLTMwOSw2ICszMDksMTAgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF2NzExMF9pcl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBhdjcxMTBfaXJfcHJvY193cml0ZSwKK307CiAKIC8qIGludGVycnVwdCBoYW5kbGVyICovCiBzdGF0aWMgdm9pZCBpcl9oYW5kbGVyKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTMyIGlyY29tKQpAQCAtMzY4LDExICszNzIsOSBAQAogCWlucHV0X2Rldi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmYXY3MTEwLT5pcjsKIAogCWlmIChhdl9jbnQgPT0gMSkgewotCQllID0gY3JlYXRlX3Byb2NfZW50cnkoImF2NzExMF9pciIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwgTlVMTCk7Ci0JCWlmIChlKSB7Ci0JCQllLT53cml0ZV9wcm9jID0gYXY3MTEwX2lyX3dyaXRlX3Byb2M7CisJCWUgPSBwcm9jX2NyZWF0ZSgiYXY3MTEwX2lyIiwgU19JV1VTUiwgTlVMTCwgJmF2NzExMF9pcl9wcm9jX2ZvcHMpOworCQlpZiAoZSkKIAkJCWUtPnNpemUgPSA0ICsgMjU2ICogc2l6ZW9mKHUxNik7Ci0JCX0KIAl9CiAKIAl0YXNrbGV0X2luaXQoJmF2NzExMC0+aXIuaXJfdGFza2xldCwgYXY3MTEwX2VtaXRfa2V5LCAodW5zaWduZWQgbG9uZykgJmF2NzExMC0+aXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwppbmRleCA5NzgyZTA1Li40OWMyYTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJYnVkZ2V0X2NpLT5pci50aW1lcl9rZXl1cC5mdW5jdGlvbiA9IG1zcDQzMF9pcl9rZXl1cDsKIAlidWRnZXRfY2ktPmlyLnRpbWVyX2tleXVwLmRhdGEgPSAodW5zaWduZWQgbG9uZykgJmJ1ZGdldF9jaS0+aXI7CiAJYnVkZ2V0X2NpLT5pci5sYXN0X3JhdyA9IDB4ZmZmZjsgLyogQW4gaW1wb3NzaWJsZSB2YWx1ZSAqLwotCWVycm9yID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2Rlcyk7CisJZXJyb3IgPSBpcl9pbnB1dF9yZWdpc3RlcihpbnB1dF9kZXYsIGlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidWRnZXRfY2k6IGNvdWxkIG5vdCBpbml0IGRyaXZlciBmb3IgSVIgZGV2aWNlIChjb2RlICVkKVxuIiwgZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCmluZGV4IGU0ODM4MGMuLjlmZGYyNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCkBAIC00MzMsOSArNDMzLDggQEAKIAkuZGVtb2RfbW9kZQkJPSBTVFYwOTB4X1NJTkdMRSwKIAkuY2xrX21vZGUJCT0gU1RWMDkweF9DTEtfRVhULAogCi0JLnh0YWwJCQk9IDI3MDAwMDAwLAorCS54dGFsCQkJPSAxMzUwMDAwMCwKIAkuYWRkcmVzcwkJPSAweDY4LAotCS5yZWZfY2xrCQk9IDI3MDAwMDAwLAogCiAJLnRzMV9tb2RlCQk9IFNUVjA5MHhfVFNNT0RFX0RWQkNJLAogCS50czJfbW9kZQkJPSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfQ09OVElOVU9VUywKQEAgLTQ1Nyw2ICs0NTYsNyBAQAogc3RhdGljIHN0cnVjdCBzdHY2MTEweF9jb25maWcgdHQxNjAwX3N0djYxMTB4X2NvbmZpZyA9IHsKIAkuYWRkcgkJCT0gMHg2MCwKIAkucmVmY2xrCQkJPSAyNzAwMDAwMCwKKwkuY2xrX2RpdgkJPSAyLAogfTsKIAogc3RhdGljIHN0cnVjdCBpc2w2NDIzX2NvbmZpZyB0dDE2MDBfaXNsNjQyM19jb25maWcgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggM2Y0MGYzNy4uODM1NjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtNDE3LDYgKzQxNywxOCBAQAogCSAgU2F5IFkgaGVyZSBpZiBURUE1NzY0IGhhdmUgYSAzMjc2OCBIeiBjcnlzdGFsIGluIGNpcmN1aXQsIHNheSBOCiAJICBoZXJlIGlmIFRFQTU3NjQgcmVmZXJlbmNlIGZyZXF1ZW5jeSBpcyBjb25uZWN0ZWQgaW4gRlJFUUlOLgogCitjb25maWcgUkFESU9fU0FBNzcwNkgKKwl0cmlzdGF0ZSAiU0FBNzcwNkggQ2FyIFJhZGlvIERTUCIKKwlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwyCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFNBQTc3MDZIIENhciByYWRpbyBEaWdpdGFsCisJICBTaWduYWwgUHJvY2Vzc29yLCBmb3VuZCBmb3IgaW5zdGFuY2Ugb24gdGhlIFJ1c3NlbGx2aWxsZSBkZXZlbG9wbWVudAorCSAgYm9hcmQuIE9uIHRoZSBydXNzZWxsdmlsbGUgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gaW50ZXJuYWwKKwkgIHRpbWJlcmRhbGUgSTJDIGJ1cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgU0FBNzcwNkguCisKIGNvbmZpZyBSQURJT19URUY2ODYyCiAJdHJpc3RhdGUgIlRFRjY4NjIgQ2FyIFJhZGlvIEVuaGFuY2VkIFNlbGVjdGl2aXR5IFR1bmVyIgogCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIKQEAgLTQyOSw0ICs0NDEsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIFRFRjY4NjIuCiAKK2NvbmZpZyBSQURJT19USU1CRVJEQUxFCisJdHJpc3RhdGUgIkVuYWJsZSB0aGUgVGltYmVyZGFsZSByYWRpbyBkcml2ZXIiCisJZGVwZW5kcyBvbiBNRkRfVElNQkVSREFMRSAmJiBWSURFT19WNEwyCisJZGVwZW5kcyBvbiBJMkMJIyBmb3IgUkFESU9fU0FBNzcwNkgKKwlzZWxlY3QgUkFESU9fVEVGNjg2MgorCXNlbGVjdCBSQURJT19TQUE3NzA2SAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSBraW5kIG9mIHVtYnJlbGxhIGRyaXZlciBmb3IgdGhlIFJhZGlvIFR1bmVyIGFuZCBEU1AKKwkgIGZvdW5kIGJlaGluZCB0aGUgVGltYmVyZGFsZSBGUEdBIG9uIHRoZSBSdXNzZWxsdmlsbGUgYm9hcmQuCisJICBFbmFibGluZyB0aGlzIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBEU1AgYW5kIHR1bmVyLgorCiBlbmRpZiAjIFJBRElPX0FEQVBURVJTCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQppbmRleCAwMTkyMmFkLi5mNjE1NTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDggQEAKIG9iai0kKENPTkZJR19SQURJT19TSTQ3MFgpICs9IHNpNDcweC8KIG9iai0kKENPTkZJR19VU0JfTVI4MDApICs9IHJhZGlvLW1yODAwLm8KIG9iai0kKENPTkZJR19SQURJT19URUE1NzY0KSArPSByYWRpby10ZWE1NzY0Lm8KK29iai0kKENPTkZJR19SQURJT19TQUE3NzA2SCkgKz0gc2FhNzcwNmgubwogb2JqLSQoQ09ORklHX1JBRElPX1RFRjY4NjIpICs9IHRlZjY4NjIubworb2JqLSQoQ09ORklHX1JBRElPX1RJTUJFUkRBTEUpICs9IHJhZGlvLXRpbWIubwogCiBFWFRSQV9DRkxBR1MgKz0gLUlzb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10aW1iLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGU0NTdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10aW1iLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiByYWRpby10aW1iLmMgVGltYmVyZGFsZSBGUEdBIFJhZGlvIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3RpbWJfcmFkaW8uaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAidGltYi1yYWRpbyIKKworc3RydWN0IHRpbWJyYWRpbyB7CisJc3RydWN0IHRpbWJfcmFkaW9fcGxhdGZvcm1fZGF0YQlwZGF0YTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnNkX3R1bmVyOworCXN0cnVjdCB2NGwyX3N1YmRldgkqc2RfZHNwOworCXN0cnVjdCB2aWRlb19kZXZpY2UJdmlkZW9fZGV2OworCXN0cnVjdCB2NGwyX2RldmljZQl2NGwyX2RldjsKK307CisKKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQoreworCXN0cmxjcHkodi0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIlRpbWJlcmRhbGUgUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOworCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAicGxhdGZvcm06IkRSSVZFUl9OQU1FKTsKKwl2LT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSk7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CisJc3RydWN0IHRpbWJyYWRpbyAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHRyLT5zZF90dW5lciwgdHVuZXIsIGdfdHVuZXIsIHYpOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl90dW5lciAqdikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgc190dW5lciwgdik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCXVuc2lnbmVkIGludCAqaSkKK3sKKwkqaSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCXVuc2lnbmVkIGludCBpKQoreworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHRpbWJyYWRpbyAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHRyLT5zZF90dW5lciwgdHVuZXIsIHNfZnJlcXVlbmN5LCBmKTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgZ19mcmVxdWVuY3ksIGYpOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IHRpbWJyYWRpbyAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHRyLT5zZF9kc3AsIGNvcmUsIHF1ZXJ5Y3RybCwgcWMpOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHRpbWJyYWRpbyAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHRyLT5zZF9kc3AsIGNvcmUsIGdfY3RybCwgY3RybCk7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgc19jdHJsLCBjdHJsKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB0aW1icmFkaW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAJPSB0aW1icmFkaW9fdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ190dW5lcgkJPSB0aW1icmFkaW9fdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyCQk9IHRpbWJyYWRpb192aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5CT0gdGltYnJhZGlvX3ZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5CT0gdGltYnJhZGlvX3ZpZGlvY19zX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX2dfaW5wdXQJCT0gdGltYnJhZGlvX3ZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dAkJPSB0aW1icmFkaW9fdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2F1ZGlvCQk9IHRpbWJyYWRpb192aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8JCT0gdGltYnJhZGlvX3ZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfcXVlcnljdHJsCT0gdGltYnJhZGlvX3ZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwJCT0gdGltYnJhZGlvX3ZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCT0gdGltYnJhZGlvX3ZpZGlvY19zX2N0cmwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdGltYnJhZGlvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0aW1icmFkaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0aW1icmFkaW8gKnRyOworCWludCBlcnI7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBsYXRmb3JtIGRhdGEgbWlzc2luZ1xuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCXRyID0ga3phbGxvYyhzaXplb2YoKnRyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwl0ci0+cGRhdGEgPSAqcGRhdGE7CisKKwlzdHJsY3B5KHRyLT52aWRlb19kZXYubmFtZSwgIlRpbWJlcmRhbGUgUmFkaW8iLAorCQlzaXplb2YodHItPnZpZGVvX2Rldi5uYW1lKSk7CisJdHItPnZpZGVvX2Rldi5mb3BzID0gJnRpbWJyYWRpb19mb3BzOworCXRyLT52aWRlb19kZXYuaW9jdGxfb3BzID0gJnRpbWJyYWRpb19pb2N0bF9vcHM7CisJdHItPnZpZGVvX2Rldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdHItPnZpZGVvX2Rldi5taW5vciA9IC0xOworCisJc3RybGNweSh0ci0+djRsMl9kZXYubmFtZSwgRFJJVkVSX05BTUUsIHNpemVvZih0ci0+djRsMl9kZXYubmFtZSkpOworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZ0ci0+djRsMl9kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3Y0bDJfZGV2OworCisJdHItPnZpZGVvX2Rldi52NGwyX2RldiA9ICZ0ci0+djRsMl9kZXY7CisKKwllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnRyLT52aWRlb19kZXYsIFZGTF9UWVBFX1JBRElPLCAtMSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciByZWcgdmlkZW9cbiIpOworCQlnb3RvIGVycl92aWRlb19yZXE7CisJfQorCisJdmlkZW9fc2V0X2RydmRhdGEoJnRyLT52aWRlb19kZXYsIHRyKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRyKTsKKwlyZXR1cm4gMDsKKworZXJyX3ZpZGVvX3JlcToKKwl2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSgmdHItPnZpZGVvX2Rldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHItPnY0bDJfZGV2KTsKK2Vycl92NGwyX2RldjoKKwlrZnJlZSh0cik7CitlcnI6CisJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlZFxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRpbWJyYWRpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnRyLT52aWRlb19kZXYpOworCXZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5KCZ0ci0+dmlkZW9fZGV2KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnRyLT52NGwyX2Rldik7CisKKwlrZnJlZSh0cik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGltYnJhZGlvX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB0aW1icmFkaW9fcHJvYmUsCisJLnJlbW92ZQkJPSB0aW1icmFkaW9fcmVtb3ZlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWJyYWRpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGltYnJhZGlvX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0aW1icmFkaW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodGltYnJhZGlvX2luaXQpOworbW9kdWxlX2V4aXQodGltYnJhZGlvX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRpbWJlcmRhbGUgUmFkaW8gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIDxpbmZvQG1vY2Vhbi1sYWJzLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IkRSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2FhNzcwNmguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2FhNzcwNmguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGI1NTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogc2FhNzcwNi5jIFBoaWxpcHMgU0FBNzcwNkggQ2FyIFJhZGlvIERTUCBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInNhYTc3MDZoIgorCisvKiB0aGUgSTJDIG1lbW9yeSBtYXAgbG9va3MgbGlrZSB0aGlzCisKKwkkMUMwMCAtICRGRkZGIE5vdCBVc2VkCisJJDIyMDAgLSAkM0ZGRiBSZXNlcnZlZCBZUkFNIChEU1AyKSBzcGFjZQorCSQyMDAwIC0gJDIxRkYgWVJBTSAoRFNQMikKKwkkMUZGMCAtICQxRkZGIEhhcmR3YXJlIFJlZ2lzdGVycworCSQxMjgwIC0gJDFGRUYgUmVzZXJ2ZWQgWFJBTSAoRFNQMikgc3BhY2UKKwkkMTAwMCAtICQxMjdGIFhSQU0gKERTUDIpCisJJDBGRkYgICAgICAgIERTUCBDT05UUk9MCisJJDBBMDAgLSAkMEZGRSBSZXNlcnZlZAorCSQwOTgwIC0gJDA5RkYgUmVzZXJ2ZWQgWVJBTSAoRFNQMSkgc3BhY2UKKwkkMDgwMCAtICQwOTdGIFlSQU0gKERTUDEpCisJJDAyMDAgLSAkMDdGRiBOb3QgVXNlZAorCSQwMTgwIC0gJDAxRkYgUmVzZXJ2ZWQgWFJBTSAoRFNQMSkgc3BhY2UKKwkkMDAwMCAtICQwMTdGIFhSQU0gKERTUDEpCisqLworCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DVFJMCQkweDBmZmYKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9CWVBfUExMCQkweDAwMDEKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QTExfRElWX01BU0sJMHgwMDNlCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfUExMM182Mjk3NU1IWgkweDAwM2UKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9EU1BfVFVSQk8JCTB4MDA0MAorI2RlZmluZSBTQUE3NzA2SF9DVFJMX1BDX1JFU0VUX0RTUDEJMHgwMDgwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMgkweDAxMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9EU1AxX1JPTV9FTl9NQVNLCTB4MDYwMAorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUDFfRlVOQ19QUk9NCTB4MDAwMAorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUDJfUk9NX0VOX01BU0sJMHgxODAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMl9GVU5DX1BST00JMHgwMDAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRElHX1NJTF9JTlRFUlBPTAkweDgwMDAKKworI2RlZmluZSBTQUE3NzA2SF9SRUdfRVZBTFVBVElPTgkJCTB4MWZmMAorI2RlZmluZSBTQUE3NzA2SF9FVkFMX0RJU0FCTEVfQ0hBUkdFX1BVTVAJMHgwMDAwMDEKKyNkZWZpbmUgU0FBNzcwNkhfRVZBTF9EQ1NfQ0xPQ0sJCQkweDAwMDAwMgorI2RlZmluZSBTQUE3NzA2SF9FVkFMX0dORFJDMV9FTkFCTEUJCTB4MDAwMDA0CisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfR05EUkMyX0VOQUJMRQkJMHgwMDAwMDgKKworI2RlZmluZSBTQUE3NzA2SF9SRUdfQ0xfR0VOMQkJCTB4MWZmMworI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4xX01JTl9MT09QR0FJTl9NQVNLCTB4MDAwMDBmCisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjFfTE9PUEdBSU5fTUFTSwkJMHgwMDAwZjAKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMV9DT0FSU0VfUkFUSU9OCQkweGZmZmYwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU4yCQkJMHgxZmY0CisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjJfV1NFREdFX0ZBTExJTkcJCTB4MDAwMDAxCisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjJfU1RPUF9WQ08JCTB4MDAwMDAyCisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjJfRlJFUlVOCQkJMHgwMDAwMDQKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9BREFQVElWRQkJMHgwMDAwMDgKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9GSU5FX1JBVElPX01BU0sJMHgwZmZmZjAKKworI2RlZmluZSBTQUE3NzA2SF9SRUdfQ0xfR0VONAkJMHgxZmY2CisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjRfQllQQVNTX1BMTDEJMHgwMDEwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9QTEwxX0RJVl9NQVNLCTB4MDNlMDAwCisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjRfRFNQMV9UVVJCTwkweDA0MDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19TRUwJMHgxZmY3CisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AyX1NSQ0FfTUFTSwkweDAwMDAwNworI2RlZmluZSBTQUE3NzA2SF9TRUxfRFNQMl9GTVRBX01BU0sJMHgwMDAwMzEKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfU1JDQl9NQVNLCTB4MDAwMWMwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AyX0ZNVEJfTUFTSwkweDAwMGUwMAorI2RlZmluZSBTQUE3NzA2SF9TRUxfRFNQMV9TUkNfTUFTSwkweDAwMzAwMAorI2RlZmluZSBTQUE3NzA2SF9TRUxfRFNQMV9GTVRfTUFTSwkweDAxYzAwMworI2RlZmluZSBTQUE3NzA2SF9TRUxfU1BESUYyCQkweDAyMDAwMAorI2RlZmluZSBTQUE3NzA2SF9TRUxfSE9TVF9JT19GTVRfTUFTSwkweDFjMDAwMAorI2RlZmluZSBTQUE3NzA2SF9TRUxfRU5fSE9TVF9JTwkJMHgyMDAwMDAKKworI2RlZmluZSBTQUE3NzA2SF9SRUdfSUFDCQkweDFmZjgKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NMS19TRVQJCTB4MWZmOQorI2RlZmluZSBTQUE3NzA2SF9SRUdfQ0xLX0NPRUZGCQkweDFmZmEKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0lOUFVUX1NFTlMJCTB4MWZmYgorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX1JEU19WT0xfTUFTSwkweDAwMDNmCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfRk1fVk9MX01BU0sJCTB4MDBmYzAKKyNkZWZpbmUgU0FBNzcwNkhfSU5QVVRfU0VOU19GTV9NUFgJCTB4MDEwMDAKKyNkZWZpbmUgU0FBNzcwNkhfSU5QVVRfU0VOU19PRkZfRklMVEVSX0FfRU4JMHgwMjAwMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX09GRl9GSUxURVJfQl9FTgkweDA0MDAwCisjZGVmaW5lIFNBQTc3MDZIX1JFR19QSE9ORV9OQVZfQVVESU8JMHgxZmZjCisjZGVmaW5lIFNBQTc3MDZIX1JFR19JT19DT05GX0RTUDIJMHgxZmZkCisjZGVmaW5lIFNBQTc3MDZIX1JFR19TVEFUVVNfRFNQMgkweDFmZmUKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1BDX0RTUDIJCTB4MWZmZgorCisjZGVmaW5lIFNBQTc3MDZIX0RTUDFfTU9EMAkweDA4MDAKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9ST01fVkVSCTB4MDk3ZgorI2RlZmluZSBTQUE3NzA2SF9EU1AyX01QVFIwCTB4MTAwMAorCisjZGVmaW5lIFNBQTc3MDZIX0RTUDFfTU9EUE5UUgkweDAwMDAKKworI2RlZmluZSBTQUE3NzA2SF9EU1AyX1hNRU1fQ09OVExMQ1cJMHgxMTNlCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWE1FTV9CVVNBTVAJMHgxMTRhCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWE1FTV9GREFDUE5UUgkweDExZjkKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0lJUzFQTlRSCTB4MTFmYgorCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkdBCQkweDIxMmEKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1BWQVQxCTB4MjEyYgorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1lNRU1fUFZBVAkJMHgyMTJjCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWU1FTV9ST01fVkVSCTB4MjFmZgorCisjZGVmaW5lIFNVUFBPUlRFRF9EU1AxX1JPTV9WRVIJCTB4NjY3CisKK3N0cnVjdCBzYWE3NzA2aF9zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXVuc2lnbmVkIG11dGVkOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTc3MDZoX3N0YXRlLCBzZCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfaTJjX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIGludCBsZW4pCit7CisJaW50IGVyciA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIGxlbik7CisJaWYgKGVyciA9PSBsZW4pCisJCXJldHVybiAwOworCXJldHVybiBlcnIgPiAwID8gLUVJTyA6IGVycjsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9pMmNfdHJhbnNmZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwlzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlpbnQgZXJyID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgbnVtKTsKKwlpZiAoZXJyID09IG51bSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGVyciA+IDAgPyAtRUlPIDogZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3NldF9yZWcyNChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCBidWZbNV07CisJaW50IHBvcyA9IDA7CisKKwlidWZbcG9zKytdID0gcmVnID4+IDg7CisJYnVmW3BvcysrXSA9IHJlZzsKKwlidWZbcG9zKytdID0gdmFsID4+IDE2OworCWJ1Zltwb3MrK10gPSB2YWwgPj4gODsKKwlidWZbcG9zKytdID0gdmFsOworCisJcmV0dXJuIHNhYTc3MDZoX2kyY19zZW5kKGNsaWVudCwgYnVmLCBwb3MpOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTE2IHJlZywgdTMyIHZhbCwKKwlpbnQgKmVycikKK3sKKwlyZXR1cm4gKmVyciA/ICplcnIgOiBzYWE3NzA2aF9zZXRfcmVnMjQoc2QsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zZXRfcmVnMTYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTggYnVmWzRdOworCWludCBwb3MgPSAwOworCisJYnVmW3BvcysrXSA9IHJlZyA+PiA4OworCWJ1Zltwb3MrK10gPSByZWc7CisJYnVmW3BvcysrXSA9IHZhbCA+PiA4OworCWJ1Zltwb3MrK10gPSB2YWw7CisKKwlyZXR1cm4gc2FhNzcwNmhfaTJjX3NlbmQoY2xpZW50LCBidWYsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzE2X2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MTYgdmFsLAorCWludCAqZXJyKQoreworCXJldHVybiAqZXJyID8gKmVyciA6IHNhYTc3MDZoX3NldF9yZWcxNihzZCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX2dldF9yZWcxNihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCBidWZbMl07CisJaW50IGVycjsKKwl1OCByZWdhZGRyW10gPSB7cmVnID4+IDgsIHJlZ307CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7IHtjbGllbnQtPmFkZHIsIDAsIHNpemVvZihyZWdhZGRyKSwgcmVnYWRkcn0sCisJCQkJe2NsaWVudC0+YWRkciwgSTJDX01fUkQsIHNpemVvZihidWYpLCBidWZ9IH07CisKKwllcnIgPSBzYWE3NzA2aF9pMmNfdHJhbnNmZXIoY2xpZW50LCBtc2csIEFSUkFZX1NJWkUobXNnKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBidWZbMF0gPDwgOCB8IGJ1ZlsxXTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF91bm11dGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCWludCBlcnIgPSAwOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzE2X2VycihzZCwgU0FBNzcwNkhfUkVHX0NUUkwsCisJCVNBQTc3MDZIX0NUUkxfUExMM182Mjk3NU1IWiB8IFNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMSB8CisJCVNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMiwgJmVycik7CisKKwkvKiBuZXdlciB2ZXJzaW9ucyBvZiB0aGUgY2hpcCByZXF1aXJlcyBhIHNtYWxsIHNsZWVwIGFmdGVyIHJlc2V0ICovCisJbXNsZWVwKDEpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzE2X2VycihzZCwgU0FBNzcwNkhfUkVHX0NUUkwsCisJCVNBQTc3MDZIX0NUUkxfUExMM182Mjk3NU1IWiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfRVZBTFVBVElPTiwgMCwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VOMSwgMHgwNDAwMjIsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0NMX0dFTjIsCisJCVNBQTc3MDZIX0NMX0dFTjJfV1NFREdFX0ZBTExJTkcsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0NMX0dFTjQsIDB4MDI0MDgwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19TRUwsIDB4MjAwMDgwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19JQUMsIDB4ZjRjYWVkLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTEtfU0VULCAweDEyNDMzNCwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xLX0NPRUZGLCAweDAwNGExYSwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfSU5QVVRfU0VOUywgMHgwMDcxYzcsCisJCSZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX1BIT05FX05BVl9BVURJTywKKwkJMHgwZTIyZmYsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0lPX0NPTkZfRFNQMiwgMHgwMDFmZjgsCisJCSZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX1NUQVRVU19EU1AyLCAweDA4MDAwMywKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfUENfRFNQMiwgMHgwMDAwMDQsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzE2X2VycihzZCwgU0FBNzcwNkhfRFNQMV9NT0QwLCAweDBjNmMsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9NUFRSMCwgMHgwMDBiNGIsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMV9NT0RQTlRSLCAweDAwMDYwMCwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRFBOVFIsIDB4MDAwMGMwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9DT05UTExDVywgMHgwMDA4MTksCisJCSZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDg1YSwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1hNRU1fQlVTQU1QLCAweDdmZmZmZiwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1hNRU1fRkRBQ1BOVFIsIDB4MjAwMGNiLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9JSVMxUE5UUiwgMHgyMDAwY2IsCisJCSZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzE2X2VycihzZCwgU0FBNzcwNkhfRFNQMl9ZTUVNX1BWR0EsIDB4MGY4MCwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1lNRU1fUFZBVDEsIDB4MDgwMCwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1lNRU1fUFZBVCwgMHgwODAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9DT05UTExDVywgMHgwMDA5MDUsCisJCSZlcnIpOworCWlmICghZXJyKQorCQlzdGF0ZS0+bXV0ZWQgPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfbXV0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJaW50IGVycjsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNihzZCwgU0FBNzcwNkhfUkVHX0NUUkwsCisJCVNBQTc3MDZIX0NUUkxfUExMM182Mjk3NU1IWiB8IFNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMSB8CisJCVNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMik7CisJaWYgKCFlcnIpCisJCXN0YXRlLT5tdXRlZCA9IDE7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNhYTc3MDZoX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gc3RhdGUtPm11dGVkOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGN0cmwtPnZhbHVlKQorCQkJcmV0dXJuIHNhYTc3MDZoX211dGUoc2QpOworCQlyZXR1cm4gc2FhNzcwNmhfdW5tdXRlKHNkKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE3NzA2SCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNzcwNmhfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTc3MDZoX2dfY2hpcF9pZGVudCwKKwkucXVlcnljdHJsID0gc2FhNzcwNmhfcXVlcnljdHJsLAorCS5nX2N0cmwgPSBzYWE3NzA2aF9nX2N0cmwsCisJLnNfY3RybCA9IHNhYTc3MDZoX3NfY3RybCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTc3MDZoX29wcyA9IHsKKwkuY29yZSA9ICZzYWE3NzA2aF9jb3JlX29wcywKK307CisKKy8qCisgKiBHZW5lcmljIGkyYyBwcm9iZQorICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJworICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNhYTc3MDZoX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNhYTc3MDZoX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCWludCBlcnI7CisKKwkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRUlPOworCisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JTAyeCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3NzA2aF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZzdGF0ZS0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTc3MDZoX29wcyk7CisKKwkvKiBjaGVjayB0aGUgcm9tIHZlcnNpb25zICovCisJZXJyID0gc2FhNzcwNmhfZ2V0X3JlZzE2KHNkLCBTQUE3NzA2SF9EU1AxX1JPTV9WRVIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycjsKKwlpZiAoZXJyICE9IFNVUFBPUlRFRF9EU1AxX1JPTV9WRVIpCisJCXY0bDJfd2FybihzZCwgIlVua25vd24gRFNQMSBST00gY29kZSB2ZXJzaW9uOiAweCV4XG4iLCBlcnIpOworCisJc3RhdGUtPm11dGVkID0gMTsKKworCS8qIHN0YXJ0dXAgaW4gYSBtdXRlZCBzdGF0ZSAqLworCWVyciA9IHNhYTc3MDZoX211dGUoc2QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKKworCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiBGYWlsZWQgdG8gcHJvYmU6ICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2FhNzcwNmhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc2FhNzcwNmhfbXV0ZShzZCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3NzA2aF9pZFtdID0geworCXtEUklWRVJfTkFNRSwgMH0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzcwNmhfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2FhNzcwNmhfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCX0sCisJLnByb2JlCQk9IHNhYTc3MDZoX3Byb2JlLAorCS5yZW1vdmUJCT0gc2FhNzcwNmhfcmVtb3ZlLAorCS5pZF90YWJsZQk9IHNhYTc3MDZoX2lkLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgc2FhNzcwNmhfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmc2FhNzcwNmhfZHJpdmVyKTsKK30KKworc3RhdGljIF9fZXhpdCB2b2lkIHNhYTc3MDZoX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmc2FhNzcwNmhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2FhNzcwNmhfaW5pdCk7Cittb2R1bGVfZXhpdChzYWE3NzA2aF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTW9jZWFuIExhYm9yYXRvcmllcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jCmluZGV4IDRkYTBmMTUuLjQ3MDc1ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKQEAgLTcyNCw3ICs3MjQsNyBAQAogCQl0dW5lci0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwogCiAJLyogbWluIGlzIHdvcnN0LCBtYXggaXMgYmVzdDsgc2lnbmFsOjAuLjB4ZmZmZjsgcnNzaTogMC4uMHhmZiAqLwotCS8qIG1lYXN1cmVkIGluIHVuaXRzIG9mIGRi7KiJViBpbiAxIGRiIGluY3JlbWVudHMgKG1heCBhdCB+NzUgZGLsqIlWKSAqLworCS8qIG1lYXN1cmVkIGluIHVuaXRzIG9mIGRiwrVWIGluIDEgZGIgaW5jcmVtZW50cyAobWF4IGF0IH43NSBkYsK1VikgKi8KIAl0dW5lci0+c2lnbmFsID0gKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1JTU0kpOwogCS8qIHRoZSBpZGVhbCBmYWN0b3IgaXMgMHhmZmZmLzc1ID0gODczLDggKi8KIAl0dW5lci0+c2lnbmFsID0gKHR1bmVyLT5zaWduYWwgKiA4NzMpICsgKDggKiB0dW5lci0+c2lnbmFsIC8gMTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCmluZGV4IGE5NmUxYjkuLjZmNjA4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC11c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKQEAgLTU5MCw4ICs1OTAsOSBAQAogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKIAkJCWtmcmVlKHJhZGlvLT5pbnRfaW5fYnVmZmVyKTsKIAkJCWtmcmVlKHJhZGlvLT5idWZmZXIpOworCQkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+ZGlzY29ubmVjdF9sb2NrKTsKIAkJCWtmcmVlKHJhZGlvKTsKLQkJCWdvdG8gdW5sb2NrOworCQkJZ290byBkb25lOwogCQl9CiAKIAkJLyogY2FuY2VsIHJlYWQgcHJvY2Vzc2VzICovCkBAIC02MDEsNyArNjAyLDYgQEAKIAkJcmV0dmFsID0gc2k0NzB4X3N0b3AocmFkaW8pOwogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocmFkaW8tPmludGYpOwogCX0KLXVubG9jazoKIAltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogZG9uZToKIAlyZXR1cm4gcmV0dmFsOwpAQCAtODQyLDkgKzg0MiwxMSBAQAogCQlrZnJlZShyYWRpby0+aW50X2luX2J1ZmZlcik7CiAJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7CiAJCWtmcmVlKHJhZGlvLT5idWZmZXIpOworCQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogCQlrZnJlZShyYWRpbyk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+ZGlzY29ubmVjdF9sb2NrKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyYWRpby0+ZGlzY29ubmVjdF9sb2NrKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggMmY4M2JlNy4uZjhmYzg2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMzg4LDYgKzM4OCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHZwNTE1MC4KIAorY29uZmlnIFZJREVPX1RWUDcwMDIKKwl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgVFZQNzAwMiB2aWRlbyBkZWNvZGVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgVFZQNzAwMiB2aWRlbyBkZWNvZGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0dnA3MDAyLgorCiBjb25maWcgVklERU9fVlBYMzIyMAogCXRyaXN0YXRlICJ2cHgzMjIwYSwgdnB4MzIxNmIgJiB2cHgzMjE0YyB2aWRlbyBkZWNvZGVycyIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCkBAIC01NDgsNyArNTU3LDYgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHZwc3Mgc3lzdGVtIG1vZHVsZSBmb3IgdmlkZW8gZHJpdmVyCi0JZGVmYXVsdCB5CiAKIGNvbmZpZyBWSURFT19WUEZFX0NBUFRVUkUKIAl0cmlzdGF0ZSAiVlBGRSBWaWRlbyBDYXB0dXJlIERyaXZlciIKQEAgLTU5Miw2ICs2MDAsMTkgQEAKIAkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS4KIAorY29uZmlnIFZJREVPX0lTSUYKKwl0cmlzdGF0ZSAiSVNJRiBIVyBtb2R1bGUiCisJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE0zNjUgJiYgVklERU9fVlBGRV9DQVBUVVJFCisJc2VsZWN0IFZJREVPX1ZQU1NfU1lTVEVNCisJZGVmYXVsdCB5CisJaGVscAorCSAgIEVuYWJsZXMgSVNJRiBodyBtb2R1bGUuIFRoaXMgaXMgdGhlIGhhcmR3YXJlIG1vZHVsZSBmb3IKKwkgICBjb25maWd1cmluZyBJU0lGIGluIFZQRkUgdG8gY2FwdHVyZSBSYXcgQmF5ZXIgUkdCIGRhdGEgIGZyb20KKwkgICBhIGltYWdlIHNlbnNvciBvciBZVVYgZGF0YSBmcm9tIGEgWVVWIHNvdXJjZS4KKworCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLgorCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZyIKIAogY29uZmlnIFZJREVPX1BNUwpAQCAtNjM4LDkgKzY1OSwxNCBAQAogCSAgaW5mb3JtYXRpb24uCiAKIGNvbmZpZyBWSURFT19DUElBCi0JdHJpc3RhdGUgIkNQaUEgVmlkZW8gRm9yIExpbnV4IgorCXRyaXN0YXRlICJDUGlBIFZpZGVvIEZvciBMaW51eCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwxCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBjcGlhMSBtb2R1bGUKKwkgIGluc3RlYWQuIE5vdGUgdGhhdCB5b3UgbmVlZCBhdGxlYXN0IHZlcnNpb24gMC42LjQgb2YgbGlidjRsIGZvcgorCSAgdGhlIGNwaWExIGdzcGNhIG1vZHVsZS4KKwogCSAgVGhpcyBpcyB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciBjYW1lcmFzIGJhc2VkIG9uIFZpc2lvbidzIENQaUEKIAkgIChDb2xvdXIgUHJvY2Vzc29yIEludGVyZmFjZSBBU0lDKSwgc3VjaCBhcyB0aGUgQ3JlYXRpdmUgTGFicyBWaWRlbwogCSAgQmxhc3RlciBXZWJjYW0gSUkuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBjYW1lcmFzLCBzYXkgWSBoZXJlCkBAIC05NDQsNiArOTcwLDggQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL0tjb25maWciCkBAIC05NTUsNiArOTgzLDcgQEAKIGNvbmZpZyBWSURFT19PVkNBTUNISVAKIAl0cmlzdGF0ZSAiT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwxCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBvdjUxOSBtb2R1bGUKIAkgIGluc3RlYWQuIE5vdGUgdGhhdCBmb3IgdGhlIG92NTExIC8gb3Y1MTggc3VwcG9ydCBvZiB0aGUgZ3NwY2EgbW9kdWxlCkBAIC05NzEsNiArMTAwMCw3IEBACiBjb25maWcgVVNCX1c5OTY4Q0YKIAl0cmlzdGF0ZSAiVVNCIFc5OTZbODddQ0YgSlBFRyBEdWFsIE1vZGUgQ2FtZXJhIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMgJiYgVklERU9fT1ZDQU1DSElQCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBvdjUxOSBtb2R1bGUKIAkgIGluc3RlYWQuIE5vdGUgdGhhdCBmb3IgdGhlIHc5OTY4Y2Ygc3VwcG9ydCBvZiB0aGUgZ3NwY2EgbW9kdWxlCkBAIC05OTIsNiArMTAyMiw3IEBACiBjb25maWcgVVNCX09WNTExCiAJdHJpc3RhdGUgIlVTQiBPVjUxMSBDYW1lcmEgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwxCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBvdjUxOSBtb2R1bGUKIAkgIGluc3RlYWQuIE5vdGUgdGhhdCBmb3IgdGhlIG92NTExIC8gb3Y1MTggc3VwcG9ydCBvZiB0aGUgZ3NwY2EgbW9kdWxlCkBAIC0xMDIwLDYgKzEwNTEsNyBAQAogY29uZmlnIFVTQl9TVFY2ODAKIAl0cmlzdGF0ZSAiVVNCIFNUVjY4MCAoUGVuY2FtKSBDYW1lcmEgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwxCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBzdHYwNjgwIG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgZ3NwY2Egc3R2MDY4MCBtb2R1bGUgeW91IG5lZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IDJhZjY4ZWUuLmI4OGI2MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtNTYsNiArNTYsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1ZJTk8pICs9IGluZHljYW0ubwogb2JqLSQoQ09ORklHX1ZJREVPX1RWUDUxNTApICs9IHR2cDUxNTAubwogb2JqLSQoQ09ORklHX1ZJREVPX1RWUDUxNFgpICs9IHR2cDUxNHgubworb2JqLSQoQ09ORklHX1ZJREVPX1RWUDcwMDIpICs9IHR2cDcwMDIubwogb2JqLSQoQ09ORklHX1ZJREVPX01TUDM0MDApICs9IG1zcDM0MDAubwogb2JqLSQoQ09ORklHX1ZJREVPX0NTNTM0NSkgKz0gY3M1MzQ1Lm8KIG9iai0kKENPTkZJR19WSURFT19DUzUzTDMyQSkgKz0gY3M1M2wzMmEubwpAQCAtOTksNiArMTAwLDcgQEAKIG9iai0kKENPTkZJR19WSURFT19TQUE3MTM0KSArPSBzYWE3MTM0Lwogb2JqLSQoQ09ORklHX1ZJREVPX0NYODgpICs9IGN4ODgvCiBvYmotJChDT05GSUdfVklERU9fRU0yOFhYKSArPSBlbTI4eHgvCitvYmotJChDT05GSUdfVklERU9fVExHMjMwMCkgKz0gdGxnMjMwMC8KIG9iai0kKENPTkZJR19WSURFT19DWDIzMVhYKSArPSBjeDIzMXh4Lwogb2JqLSQoQ09ORklHX1ZJREVPX1VTQlZJU0lPTikgKz0gdXNidmlzaW9uLwogb2JqLSQoQ09ORklHX1ZJREVPX1BWUlVTQjIpICs9IHB2cnVzYjIvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKaW5kZXggNWJiMGY5ZS4uNTQ3ZTFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJCXY0bDJfZXJyKHNkLCAibm8gbm90aWZ5IGZvdW5kIVxuIik7CiAKIAlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgewotCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCAwKTsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgTlVMTCk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAwLCAxKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDEsIDApOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgNSwgMCk7CkBAIC0yNjMsNyArMjYzLDcgQEAKIAkJLyogYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsICA1LCAxKTsgKi8KIAkJdGltaW5nID0gJnRpbWluZ19kYXRhWzFdOwogCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDAsIDEpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMSwgMSk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCA1LCAxKTsKQEAgLTI4OCw3ICsyODgsNyBAQAogCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDgsICh0aW1pbmctPmhzY2FsZSA+PiA4KSAmIDB4ZmYpOwogCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDksIHRpbWluZy0+aHNjYWxlICYgMHhmZik7CiAJZGVjb2Rlci0+bm9ybSA9IHN0ZDsKLQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgMCk7CisJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0hJR0gsIE5VTEwpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDYsNyArMzA2LDcgQEAKIAkJdjRsMl9lcnIoc2QsICJubyBub3RpZnkgZm91bmQhXG4iKTsKIAogCWlmIChkZWNvZGVyLT5pbnB1dCAhPSBpbnB1dCkgewotCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCAwKTsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgTlVMTCk7CiAJCWRlY29kZXItPmlucHV0ID0gaW5wdXQ7CiAJCS8qIHNlbGVjdCBtb2RlICovCiAJCWlmIChkZWNvZGVyLT5pbnB1dCA9PSAwKSB7CkBAIC0zMTYsNyArMzE2LDcgQEAKIAkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCA2LCAxKTsKIAkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDFhLCAxLCAwKTsKIAkJfQotCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgMCk7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCBOVUxMKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggMzE4MmE0MC4uY2I0NmU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtODEsNiArODEsNyBAQAogc3RhdGljIGludCByYWRpb19ucltCVFRWX01BWF0gPSB7IFswIC4uLiAoQlRUVl9NQVgtMSldID0gLTEgfTsKIHN0YXRpYyBpbnQgdmJpX25yW0JUVFZfTUFYXSA9IHsgWzAgLi4uIChCVFRWX01BWC0xKV0gPSAtMSB9Owogc3RhdGljIGludCBkZWJ1Z19sYXRlbmN5Oworc3RhdGljIGludCBkaXNhYmxlX2lyOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZkc3I7CiAKQEAgLTEwNyw2ICsxMDgsNyBAQAogbW9kdWxlX3BhcmFtKGJ0dHZfZGVidWcsICAgICAgICBpbnQsIDA2NDQpOwogbW9kdWxlX3BhcmFtKGlycV9kZWJ1ZywgICAgICAgICBpbnQsIDA2NDQpOwogbW9kdWxlX3BhcmFtKGRlYnVnX2xhdGVuY3ksICAgICBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGRpc2FibGVfaXIsICAgICAgICBpbnQsIDA0NDQpOwogCiBtb2R1bGVfcGFyYW0oZmRzciwgICAgICAgICAgICAgIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oZ2J1ZmZlcnMsICAgICAgICAgIGludCwgMDQ0NCk7CkBAIC0xMzksNiArMTQxLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYnR0dl9ncGlvLCJsb2cgZ3BpbyBjaGFuZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogTU9EVUxFX1BBUk1fREVTQyhidHR2X2RlYnVnLCJkZWJ1ZyBtZXNzYWdlcywgZGVmYXVsdCBpcyAwIChubykiKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxX2RlYnVnLCJpcnEgaGFuZGxlciBkZWJ1ZyBtZXNzYWdlcywgZGVmYXVsdCBpcyAwIChubykiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9pciwgImRpc2FibGUgaW5mcmFyZWQgcmVtb3RlIHN1cHBvcnQiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZ2J1ZmZlcnMsIm51bWJlciBvZiBjYXB0dXJlIGJ1ZmZlcnMuIHJhbmdlIDItMzIsIGRlZmF1bHQgOCIpOwogTU9EVUxFX1BBUk1fREVTQyhnYnVmc2l6ZSwic2l6ZSBvZiB0aGUgY2FwdHVyZSBidWZmZXJzLCBkZWZhdWx0IGlzIDB4MjA4MDAwIik7CiBNT0RVTEVfUEFSTV9ERVNDKHJlc2V0X2Nyb3AsInJlc2V0IGNyb3BwaW5nIHBhcmFtZXRlcnMgYXQgb3BlbigpLCBkZWZhdWx0ICIKQEAgLTQ0NjEsNyArNDQ2NCwxMCBAQAogCQlyZXF1ZXN0X21vZHVsZXMoYnR2KTsKIAl9CiAKLQlidHR2X2lucHV0X2luaXQoYnR2KTsKKwlpZiAoIWRpc2FibGVfaXIpIHsKKwkJaW5pdF9idHR2X2kyY19pcihidHYpOworCQlidHR2X2lucHV0X2luaXQoYnR2KTsKKwl9CiAKIAkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KIAlidHR2X251bSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCmluZGV4IDYzYWEzMWEuLjQwN2ZhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKQEAgLTM4OCw3ICszODgsMTIgQEAKIAlpZiAoMCA9PSBidHYtPmkyY19yYyAmJiBpMmNfc2NhbikKIAkJZG9faTJjX3NjYW4oYnR2LT5jLnY0bDJfZGV2Lm5hbWUsICZidHYtPmkyY19jbGllbnQpOwogCi0JLyogSW5zdGFudGlhdGUgdGhlIElSIHJlY2VpdmVyIGRldmljZSwgaWYgcHJlc2VudCAqLworCXJldHVybiBidHYtPmkyY19yYzsKK30KKworLyogSW5zdGFudGlhdGUgdGhlIEkyQyBJUiByZWNlaXZlciBkZXZpY2UsIGlmIHByZXNlbnQgKi8KK3ZvaWQgX19kZXZpbml0IGluaXRfYnR0dl9pMmNfaXIoc3RydWN0IGJ0dHYgKmJ0dikKK3sKIAlpZiAoMCA9PSBidHYtPmkyY19yYykgewogCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKIAkJLyogVGhlIGV4dGVybmFsIElSIHJlY2VpdmVyIGlzIGF0IGkyYyBhZGRyZXNzIDB4MzQgKDB4MzUgZm9yCkBAIC00MDgsNyArNDEzLDYgQEAKIAkJc3RybGNweShpbmZvLnR5cGUsICJpcl92aWRlbyIsIEkyQ19OQU1FX1NJWkUpOwogCQlpMmNfbmV3X3Byb2JlZF9kZXZpY2UoJmJ0di0+Yy5pMmNfYWRhcCwgJmluZm8sIGFkZHJfbGlzdCk7CiAJfQotCXJldHVybiBidHYtPmkyY19yYzsKIH0KIAogaW50IF9fZGV2ZXhpdCBmaW5pX2J0dHZfaTJjKHN0cnVjdCBidHR2ICpidHYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCmluZGV4IDI3N2EwOTIuLmIzMjBkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlzdHJ1Y3QgY2FyZF9pciAqaXI7CiAJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcyA9IE5VTEw7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpZiAoIWJ0di0+aGFzX3JlbW90ZSkKQEAgLTM4OSw3ICszODksNyBAQAogCWJ0dHZfaXJfc3RhcnQoYnR2LCBpcik7CiAKIAkvKiBhbGwgZG9uZSAqLwotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGJ0di0+cmVtb3RlLT5kZXYsIGlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihidHYtPnJlbW90ZS0+ZGV2LCBpcl9jb2RlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAppbmRleCBhMWQwZTljLi42Y2NjYzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCkBAIC0yNzksNiArMjc5LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgYnR0dl9ncGlvOwogZXh0ZXJuIHZvaWQgYnR0dl9ncGlvX3RyYWNraW5nKHN0cnVjdCBidHR2ICpidHYsIGNoYXIgKmNvbW1lbnQpOwogZXh0ZXJuIGludCBpbml0X2J0dHZfaTJjKHN0cnVjdCBidHR2ICpidHYpOworZXh0ZXJuIHZvaWQgaW5pdF9idHR2X2kyY19pcihzdHJ1Y3QgYnR0diAqYnR2KTsKIGV4dGVybiBpbnQgZmluaV9idHR2X2kyYyhzdHJ1Y3QgYnR0diAqYnR2KTsKIAogI2RlZmluZSBidHR2X3ByaW50ayBpZiAoYnR0dl92ZXJib3NlKSBwcmludGsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDdiYjljMWUuLmNiYmY3ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMTkwNyw3ICsxOTA3LDYgQEAKIAkJZ290byBvdXRfZnJlZTsKIAogCW11dGV4X2luaXQoJmNhbS0+c19tdXRleCk7Ci0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmY2FtLT5kZXZfbG9jayk7CiAJY2FtLT5zdGF0ZSA9IFNfTk9UUkVBRFk7CiAJY2FmZV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDEpOwpAQCAtMTk0Nyw3ICsxOTQ2LDYgQEAKIAkgKiBiZWNhdXNlIHRoZSBzZW5zb3IgY291bGQgYXR0YWNoIGluIHRoaXMgY2FsbCBjaGFpbiwgbGVhZGluZyB0bwogCSAqIHVuc2lnaHRseSBkZWFkbG9ja3MuCiAJICovCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOyAgLyogYXR0YWNoIGNhbiBkZWFkbG9jayAqLwogCXJldCA9IGNhZmVfc21idXNfc2V0dXAoY2FtKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlaXJxOwpAQCAtMTk3Myw3ICsxOTcxLDcgQEAKIAljYW0tPnZkZXYudjRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKIAlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NtYnVzOworCQlnb3RvIG91dF91bmxvY2s7CiAJdmlkZW9fc2V0X2RydmRhdGEoJmNhbS0+dmRldiwgY2FtKTsKIAogCS8qCkBAIC0xOTg4LDYgKzE5ODYsOCBAQAogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlyZXR1cm4gMDsKIAorb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiBvdXRfc21idXM6CiAJY2FmZV9zbWJ1c19zaHV0ZG93bihjYW0pOwogb3V0X2ZyZWVpcnE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCmluZGV4IDU1MWRkZjIuLjkzM2FlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCkBAIC0zNzM3LDkgKzM3MzcsNiBAQAogCWlmIChzaXplID4gRlJBTUVfTlVNKkNQSUFfTUFYX0ZSQU1FX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFjYW0gfHwgIWNhbS0+b3BzKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qIG1ha2UgdGhpcyBfcmVhbGx5XyBzbXAtc2FmZSAqLwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+YnVzeV9sb2NrKSkKIAkJcmV0dXJuIC1FSU5UUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcKaW5kZXggZThhNTBhNi4uYmFmN2U5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcKQEAgLTE5LDMgKzE5LDE0IEBACiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4MTguCisKK2NvbmZpZyBWSURFT19DWDE4X0FMU0EKKwl0cmlzdGF0ZSAiQ29uZXhhbnQgMjM0MTggRE1BIGF1ZGlvIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19DWDE4ICYmIFNORCAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgU05EX1BDTQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIGRpcmVjdCAoRE1BKSBhdWRpbyBvbgorCSAgQ29uZXhhbnQgMjM0MTggYmFzZWQgVFYgY2FyZHMgdXNpbmcgQUxTQS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3gxOC1hbHNhLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L01ha2VmaWxlCmluZGV4IGY3YmYwZWQuLjJmYWRkOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvTWFrZWZpbGUKQEAgLTMsOCArMywxMCBAQAogCWN4MTgtbWFpbGJveC5vIGN4MTgtdmJpLm8gY3gxOC1hdWRpby5vIGN4MTgtdmlkZW8ubyBjeDE4LWlycS5vIFwKIAljeDE4LWF2LWNvcmUubyBjeDE4LWF2LWF1ZGlvLm8gY3gxOC1hdi1maXJtd2FyZS5vIGN4MTgtYXYtdmJpLm8gY3gxOC1zY2IubyBcCiAJY3gxOC1kdmIubyBjeDE4LWlvLm8KK2N4MTgtYWxzYS1vYmpzIDo9IGN4MTgtYWxzYS1tYWluLm8gY3gxOC1hbHNhLXBjbS5vCiAKIG9iai0kKENPTkZJR19WSURFT19DWDE4KSArPSBjeDE4Lm8KK29iai0kKENPTkZJR19WSURFT19DWDE4X0FMU0EpICs9IGN4MTgtYWxzYS5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWFpbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0MWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWFpbi5jCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBQb3J0aW9ucyBvZiB0aGlzIHdvcmsgd2VyZSBzcG9uc29yZWQgYnkgT05FTEFOIExpbWl0ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LXZlcnNpb24uaCIKKyNpbmNsdWRlICJjeDE4LWFsc2EuaCIKKyNpbmNsdWRlICJjeDE4LWFsc2EtbWl4ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWFsc2EtcGNtLmgiCisKK2ludCBjeDE4X2Fsc2FfZGVidWc7CisKKyNkZWZpbmUgQ1gxOF9ERUJVR19BTFNBX0lORk8oZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGN4MThfYWxzYV9kZWJ1ZyAmIDIpIFwKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCwgImN4MTgtYWxzYSIsICMjIGFyZyk7IFwKKwl9IHdoaWxlICgwKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBjeDE4X2Fsc2FfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAorCQkgIkRlYnVnIGxldmVsIChiaXRtYXNrKS4gRGVmYXVsdDogMFxuIgorCQkgIlx0XHRcdCAgMS8weDAwMDE6IHdhcm5pbmdcbiIKKwkJICJcdFx0XHQgIDIvMHgwMDAyOiBpbmZvXG4iKTsKKworTU9EVUxFX0FVVEhPUigiQW5keSBXYWxscyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDWDIzNDE4IEFMU0EgSW50ZXJmYWNlIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQ1gyMzQxOCBNUEVHMiBlbmNvZGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9WRVJTSU9OKENYMThfVkVSU0lPTik7CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBzbmRfY3gxOF9jYXJkICp0b19zbmRfY3gxOF9jYXJkKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIHRvX2N4MTgodjRsMl9kZXYpLT5hbHNhOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqcF90b19zbmRfY3gxOF9jYXJkKHN0cnVjdCB2NGwyX2RldmljZSAqKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBzbmRfY3gxOF9jYXJkLCB2NGwyX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9jeDE4X2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlpZiAoY3hzYyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoY3hzYy0+djRsMl9kZXYgIT0gTlVMTCkKKwkJdG9fY3gxOChjeHNjLT52NGwyX2RldiktPmFsc2EgPSBOVUxMOworCisJLyogRklYTUUgLSB0YWtlIGFueSBvdGhlciBzdG9wcGluZyBhY3Rpb25zIG5lZWRlZCAqLworCisJa2ZyZWUoY3hzYyk7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9jeDE4X2NhcmRfcHJpdmF0ZV9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqc2MpCit7CisJaWYgKHNjID09IE5VTEwpCisJCXJldHVybjsKKwlzbmRfY3gxOF9jYXJkX2ZyZWUoc2MtPnByaXZhdGVfZGF0YSk7CisJc2MtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJc2MtPnByaXZhdGVfZnJlZSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfY2FyZF9jcmVhdGUoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9jYXJkICpzYywKKwkJCQkgICAgICAgc3RydWN0IHNuZF9jeDE4X2NhcmQgKipjeHNjKQoreworCSpjeHNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9jeDE4X2NhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoKmN4c2MgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkoKmN4c2MpLT52NGwyX2RldiA9IHY0bDJfZGV2OworCSgqY3hzYyktPnNjID0gc2M7CisKKwlzYy0+cHJpdmF0ZV9kYXRhID0gKmN4c2M7CisJc2MtPnByaXZhdGVfZnJlZSA9IHNuZF9jeDE4X2NhcmRfcHJpdmF0ZV9mcmVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfY2FyZF9zZXRfbmFtZXMoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisJc3RydWN0IHNuZF9jYXJkICpzYyA9IGN4c2MtPnNjOworCisJLyogc2MtPmRyaXZlciBpcyB1c2VkIGJ5IGFsc2EtbGliJ3MgY29uZmlndXJhdG9yOiBzaW1wbGUsIHVuaXF1ZSAqLworCXN0cmxjcHkoc2MtPmRyaXZlciwgIkNYMjM0MTgiLCBzaXplb2Yoc2MtPmRyaXZlcikpOworCisJLyogc2MtPnNob3J0bmFtZSBpcyBhIHN5bWxpbmsgaW4gL3Byb2MvYXNvdW5kOiBDWDE4LU0gLT4gY2FyZE4gKi8KKwlzbnByaW50ZihzYy0+c2hvcnRuYW1lLCAgc2l6ZW9mKHNjLT5zaG9ydG5hbWUpLCAiQ1gxOC0lZCIsCisJCSBjeC0+aW5zdGFuY2UpOworCisJLyogc2MtPmxvbmduYW1lIGlzIHJlYWQgZnJvbSAvcHJvYy9hc291bmQvY2FyZHMgKi8KKwlzbnByaW50ZihzYy0+bG9uZ25hbWUsIHNpemVvZihzYy0+bG9uZ25hbWUpLAorCQkgIkNYMjM0MTggIyVkICVzIFRWL0ZNIFJhZGlvL0xpbmUtSW4gQ2FwdHVyZSIsCisJCSBjeC0+aW5zdGFuY2UsIGN4LT5jYXJkX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfaW5pdChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCXN0cnVjdCBzbmRfY2FyZCAqc2MgPSBOVUxMOworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjOworCWludCByZXQ7CisKKwkvKiBOdW1icnMgc3RlcHMgZnJvbSAiV3JpdGluZyBhbiBBTFNBIERyaXZlciIgYnkgVGFrYXNoaSBJd2FpICovCisKKwkvKiAoMSkgQ2hlY2sgYW5kIGluY3JlbWVudCB0aGUgZGV2aWNlIGluZGV4ICovCisJLyogVGhpcyBpcyBhIG5vLW9wIGZvciB1cy4gIFdlJ2xsIHVzZSB0aGUgY3gtPmluc3RhbmNlICovCisKKwkvKiAoMikgQ3JlYXRlIGEgY2FyZCBpbnN0YW5jZSAqLworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShTTkRSVl9ERUZBVUxUX0lEWDEsIC8qIHVzZSBmaXJzdCBhdmFpbGFibGUgaWQgKi8KKwkJCSAgICAgIFNORFJWX0RFRkFVTFRfU1RSMSwgLyogeGlkIGZyb20gZW5kIG9mIHNob3J0bmFtZSovCisJCQkgICAgICBUSElTX01PRFVMRSwgMCwgJnNjKTsKKwlpZiAocmV0KSB7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBzbmRfY2FyZF9jcmVhdGUoKSBmYWlsZWQgd2l0aCBlcnIgJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBlcnJfZXhpdDsKKwl9CisKKwkvKiAoMykgQ3JlYXRlIGEgbWFpbiBjb21wb25lbnQgKi8KKwlyZXQgPSBzbmRfY3gxOF9jYXJkX2NyZWF0ZSh2NGwyX2Rldiwgc2MsICZjeHNjKTsKKwlpZiAocmV0KSB7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBzbmRfY3gxOF9jYXJkX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0X2ZyZWU7CisJfQorCisJLyogKDQpIFNldCB0aGUgZHJpdmVyIElEIGFuZCBuYW1lIHN0cmluZ3MgKi8KKwlzbmRfY3gxOF9jYXJkX3NldF9uYW1lcyhjeHNjKTsKKworCisJcmV0ID0gc25kX2N4MThfcGNtX2NyZWF0ZShjeHNjKTsKKwlpZiAocmV0KSB7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBzbmRfY3gxOF9wY21fY3JlYXRlKCkgZmFpbGVkIHdpdGggZXJyICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2V4aXRfZnJlZTsKKwl9CisJLyogRklYTUUgLSBwcm9jIGZpbGVzICovCisKKwkvKiAoNykgU2V0IHRoZSBkcml2ZXIgZGF0YSBhbmQgcmV0dXJuIDAgKi8KKwkvKiBXZSBkbyB0aGlzIG91dCBvZiBub3JtYWwgb3JkZXIgZm9yIFBDSSBkcml2ZXJzIHRvIGF2b2lkIHJhY2VzICovCisJY3gtPmFsc2EgPSBjeHNjOworCisJLyogKDYpIFJlZ2lzdGVyIHRoZSBjYXJkIGluc3RhbmNlICovCisJcmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoc2MpOworCWlmIChyZXQpIHsKKwkJY3gtPmFsc2EgPSBOVUxMOworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2NhcmRfcmVnaXN0ZXIoKSBmYWlsZWQgd2l0aCBlcnIgJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBlcnJfZXhpdF9mcmVlOworCX0KKworCXJldHVybiAwOworCitlcnJfZXhpdF9mcmVlOgorCWlmIChzYyAhPSBOVUxMKQorCQlzbmRfY2FyZF9mcmVlKHNjKTsKK2Vycl9leGl0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCBjeDE4X2Fsc2FfbG9hZChzdHJ1Y3QgY3gxOCAqY3gpCit7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZjeC0+djRsMl9kZXY7CisJc3RydWN0IGN4MThfc3RyZWFtICpzOworCisJaWYgKHY0bDJfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4LWFsc2E6ICVzOiBzdHJ1Y3QgdjRsMl9kZXZpY2UgKiBpcyBOVUxMXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwljeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCWlmIChjeCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3gxOC1hbHNhIGN4IGlzIE5VTExcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1BDTV07CisJaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMKSB7CisJCUNYMThfREVCVUdfQUxTQV9JTkZPKCIlczogUENNIHN0cmVhbSBmb3IgY2FyZCBpcyBkaXNhYmxlZCAtICIKKwkJCQkgICAgICJza2lwcGluZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY3gtPmFsc2EgIT0gTlVMTCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc3RydWN0IHNuZF9jeDE4X2NhcmQgKiBhbHJlYWR5IGV4aXN0c1xuIiwKKwkJCSAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNuZF9jeDE4X2luaXQodjRsMl9kZXYpKSB7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBmYWlsZWQgdG8gY3JlYXRlIHN0cnVjdCBzbmRfY3gxOF9jYXJkXG4iLAorCQkJICAgICAgX19mdW5jX18pOworCX0gZWxzZSB7CisJCUNYMThfREVCVUdfQUxTQV9JTkZPKCIlczogY3JlYXRlZCBjeDE4IEFMU0EgaW50ZXJmYWNlIGluc3RhbmNlICIKKwkJCQkgICAgICJcbiIsIF9fZnVuY19fKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGN4MThfYWxzYV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC1hbHNhOiBtb2R1bGUgbG9hZGluZy4uLlxuIik7CisJY3gxOF9leHRfaW5pdCA9ICZjeDE4X2Fsc2FfbG9hZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNuZF9jeDE4X2V4aXQoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisKKwkvKiBGSVhNRSAtIHBvaW50ZXIgY2hlY2tzICYgc2h1dGRvd24gY3hzYyAqLworCisJc25kX2NhcmRfZnJlZShjeHNjLT5zYyk7CisJY3gtPmFsc2EgPSBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBjeDE4X2Fsc2FfZXhpdF9jYWxsYmFjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjOworCisJaWYgKHY0bDJfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4LWFsc2E6ICVzOiBzdHJ1Y3QgdjRsMl9kZXZpY2UgKiBpcyBOVUxMXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwljeHNjID0gdG9fc25kX2N4MThfY2FyZCh2NGwyX2Rldik7CisJaWYgKGN4c2MgPT0gTlVMTCkgeworCQlDWDE4X0FMU0FfV0FSTigiJXM6IHN0cnVjdCBzbmRfY3gxOF9jYXJkICogaXMgTlVMTFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCXNuZF9jeDE4X2V4aXQoY3hzYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeDE4X2Fsc2FfZXhpdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CisJaW50IHJldDsKKworCXByaW50ayhLRVJOX0lORk8gImN4MTgtYWxzYTogbW9kdWxlIHVubG9hZGluZy4uLlxuIik7CisKKwlkcnYgPSBkcml2ZXJfZmluZCgiY3gxOCIsICZwY2lfYnVzX3R5cGUpOworCXJldCA9IGRyaXZlcl9mb3JfZWFjaF9kZXZpY2UoZHJ2LCBOVUxMLCBOVUxMLCBjeDE4X2Fsc2FfZXhpdF9jYWxsYmFjayk7CisJcHV0X2RyaXZlcihkcnYpOworCisJY3gxOF9leHRfaW5pdCA9IE5VTEw7CisJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC1hbHNhOiBtb2R1bGUgdW5sb2FkIGNvbXBsZXRlXG4iKTsKK30KKworbW9kdWxlX2luaXQoY3gxOF9hbHNhX2luaXQpOworbW9kdWxlX2V4aXQoY3gxOF9hbHNhX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjExMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiAgQUxTQSBtaXhlciBjb250cm9scyBmb3IgdGhlCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJjeDE4LWFsc2EuaCIKKyNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorCisvKgorICogTm90ZSB0aGUgY3gxOC1hdi1jb3JlIHZvbHVtZSBzY2FsZSBpcyBmdW5ueSwgZHVlIHRvIHRoZSBhbGlnbm1lbnQgb2YgdGhlCisgKiBzY2FsZSB3aXRoIGFub3RoZXIgY2hpcCdzIHJhbmdlOgorICoKKyAqIHY0bDJfY29udHJvbCB2YWx1ZQkvNTEyCWluZGljYXRlZCBkQglhY3R1YWwgZEIJcmVnIDB4OGQ0CisgKiAweDAwMDAgLSAweDAxZmYJICAwCS0xMTkJCS05NgkJMjI4CisgKiAweDAyMDAgLSAweDAyZmYJICAxCS0xMTgJCS05NgkJMjI4CisgKiAuLi4KKyAqIDB4MmMwMCAtIDB4MmRmZgkgMjIJIC05NwkJLTk2CQkyMjgKKyAqIDB4MmUwMCAtIDB4MmZmZgkgMjMJIC05NgkJLTk2CQkyMjgKKyAqIDB4MzAwMCAtIDB4MzFmZgkgMjQJIC05NQkJLTk1CQkyMjYKKyAqIC4uLgorICogMHhlZTAwIC0gMHhlZmZmCTExOQkgICAwCQkgIDAJCSAzNgorICogLi4uCisgKiAweGZlMDAgLSAweGZmZmYJMTI3CSAgKzgJCSArOAkJIDIwCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRCX3RvX2N4MThfYXZfdm9sKGludCBkQikKK3sKKwlpZiAoZEIgPCAtOTYpCisJCWRCID0gLTk2OworCWVsc2UgaWYgKGRCID4gOCkKKwkJZEIgPSA4OworCXJldHVybiAoZEIgKyAxMTkpIDw8IDk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGN4MThfYXZfdm9sX3RvX2RCKGludCB2KQoreworCWlmICh2IDwgKDIzIDw8IDkpKQorCQl2ID0gKDIzIDw8IDkpOworCWVsc2UgaWYgKHYgPiAoMTI3IDw8IDkpKQorCQl2ID0gKDEyNyA8PCA5KTsKKwlyZXR1cm4gKHYgPj4gOSkgLSAxMTk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfbWl4ZXJfdHZfdm9sX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCS8qIFdlJ3JlIGFscmVhZHkgdHJhbnNsYXRpbmcgdmFsdWVzLCBqdXN0IGtlZXAgdGhpcyBjb250cm9sIGluIGRCICovCisJdWluZm8tPnZhbHVlLmludGVnZXIubWluICA9IC05NjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggID0gICA4OworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnN0ZXAgPSAgIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfbWl4ZXJfdHZfdm9sX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWN0bCkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdGwpOworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgdmN0cmw7CisJaW50IHJldDsKKworCXZjdHJsLmlkID0gVjRMMl9DSURfQVVESU9fVk9MVU1FOworCXZjdHJsLnZhbHVlID0gZEJfdG9fY3gxOF9hdl92b2wodWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisKKwlzbmRfY3gxOF9sb2NrKGN4c2MpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBnX2N0cmwsICZ2Y3RybCk7CisJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCisJaWYgKCFyZXQpCisJCXVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjeDE4X2F2X3ZvbF90b19kQih2Y3RybC52YWx1ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9taXhlcl90dl92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX2tjb250cm9sX2NoaXAoa2N0bCk7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisJc3RydWN0IHY0bDJfY29udHJvbCB2Y3RybDsKKwlpbnQgcmV0OworCisJdmN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUU7CisJdmN0cmwudmFsdWUgPSBkQl90b19jeDE4X2F2X3ZvbCh1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKworCXNuZF9jeDE4X2xvY2soY3hzYyk7CisKKwkvKiBGZXRjaCBjdXJyZW50IHN0YXRlICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIGNvcmUsIGdfY3RybCwgJnZjdHJsKTsKKworCWlmIChyZXQgfHwKKwkgICAgKGN4MThfYXZfdm9sX3RvX2RCKHZjdHJsLnZhbHVlKSAhPSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSkgeworCisJCS8qIFNldCwgaWYgbmVlZGVkICovCisJCXZjdHJsLnZhbHVlID0gZEJfdG9fY3gxOF9hdl92b2wodWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBzX2N0cmwsICZ2Y3RybCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gMTsgLyogSW5kaWNhdGUgY29udHJvbCB3YXMgY2hhbmdlZCB3L28gZXJyb3IgKi8KKwl9CisJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKiBUaGlzIGlzIGEgYml0IG9mIG92ZXJraWxsLCB0aGUgc2xpZGVyIGlzIGFscmVhZHkgaW4gZEIgaW50ZXJuYWxseSAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKHNuZF9jeDE4X21peGVyX3R2X3ZvbF9kYl9zY2FsZSwgLTk2MDAsIDEwMCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfY3gxOF9taXhlcl90dl92b2wgX19pbml0ZGF0YSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJBbmFsb2cgVFYgQ2FwdHVyZSBWb2x1bWUiLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCisJLmluZm8gPSBzbmRfY3gxOF9taXhlcl90dl92b2x1bWVfaW5mbywKKwkuZ2V0ID0gc25kX2N4MThfbWl4ZXJfdHZfdm9sdW1lX2dldCwKKwkucHV0ID0gc25kX2N4MThfbWl4ZXJfdHZfdm9sdW1lX3B1dCwKKwkudGx2LnAgPSBzbmRfY3gxOF9taXhlcl90dl92b2xfZGJfc2NhbGUKK307CisKKy8qIEZJWE1FIC0gYWRkIG11dGUgc3dpdGNoIGFuZCBiYWxhbmNlLCBiYXNzLCB0cmVibGUgc2xpZGVyczoKKwlWNEwyX0NJRF9BVURJT19NVVRFCisKKwlWNEwyX0NJRF9BVURJT19CQUxBTkNFCisKKwlWNEwyX0NJRF9BVURJT19CQVNTCisJVjRMMl9DSURfQVVESU9fVFJFQkxFCisqLworCisvKiBGSVhNRSAtIGFkZCBzdGVyZW8sIGxhbmcxLCBsYW5nMiwgbW9ubyBtZW51ICovCisvKiBGSVhNRSAtIGFkZCBDUzUzNDUgSTJTIHZvbHVtZSBmb3IgSFZSLTE2MDAgKi8KKworaW50IF9faW5pdCBzbmRfY3gxOF9taXhlcl9jcmVhdGUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGN4c2MtPnY0bDJfZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqc2MgPSBjeHNjLT5zYzsKKwlpbnQgcmV0OworCisJc3RybGNweShzYy0+bWl4ZXJuYW1lLCAiQ1gyMzQxOCBNaXhlciIsIHNpemVvZihzYy0+bWl4ZXJuYW1lKSk7CisKKwlyZXQgPSBzbmRfY3RsX2FkZChzYywgc25kX2N0bF9uZXcxKHNuZF9jeDE4X21peGVyX3R2X3ZvbCwgY3hzYykpOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX1dBUk4oIiVzOiBmYWlsZWQgdG8gYWRkICVzIGNvbnRyb2wsIGVyciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgc25kX2N4MThfbWl4ZXJfdHZfdm9sLm5hbWUsIHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0MThkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogIEFMU0EgbWl4ZXIgY29udHJvbHMgZm9yIHRoZQorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKK2ludCBfX2luaXQgc25kX2N4MThfbWl4ZXJfY3JlYXRlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDMxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogIEFMU0EgUENNIGRldmljZSBmb3IgdGhlCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAa2VybmVsbGFicy5jb20+CisgKgorICogIFBvcnRpb25zIG9mIHRoaXMgd29yayB3ZXJlIHNwb25zb3JlZCBieSBPTkVMQU4gTGltaXRlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCisjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCisjaW5jbHVkZSAiY3gxOC1zdHJlYW1zLmgiCisjaW5jbHVkZSAiY3gxOC1maWxlb3BzLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNtX2RlYnVnOworbW9kdWxlX3BhcmFtKHBjbV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocGNtX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIGZvciBwY20iKTsKKworI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKSBkbyB7CQkJCQlcCisJICAgIGlmIChwY21fZGVidWcpCQkJCQkJXAorCQlwcmludGsoS0VSTl9JTkZPICJjeDE4LWFsc2EtcGNtICVzOiAiIGZtdCwJCVwKKwkJCQkgIF9fZnVuY19fLCAjI2FyZyk7IAkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2N4MThfaHdfY2FwdHVyZSA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUCAgICAgICAgICAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCAgICB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDYyNzIwICogOCwJLyoganVzdCBhYm91dCB0aGUgdmFsdWUgaW4gdXNiYXVkaW8uYyAqLworCS5wZXJpb2RfYnl0ZXNfbWluID0gNjQsCQkvKiAxMjU0NC8yLCAqLworCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTI1NDQsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSA5OCwJCS8qIDEyNTQ0LCAqLworfTsKKwordm9pZCBjeDE4X2Fsc2FfYW5ub3VuY2VfcGNtX2RhdGEoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MsIHU4ICpwY21fZGF0YSwKKwkJCQkgc2l6ZV90IG51bV9ieXRlcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBvbGRwdHI7CisJdW5zaWduZWQgaW50IHN0cmlkZTsKKwlpbnQgcGVyaW9kX2VsYXBzZWQgPSAwOworCWludCBsZW5ndGg7CisKKwlkcHJpbnRrKCJjeDE4IGFsc2EgYW5ub3VuY2UgcHRyPSVwIGRhdGE9JXAgbnVtX2J5dGVzPSV6ZFxuIiwgY3hzYywKKwkJcGNtX2RhdGEsIG51bV9ieXRlcyk7CisKKwlzdWJzdHJlYW0gPSBjeHNjLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW07CisJaWYgKHN1YnN0cmVhbSA9PSBOVUxMKSB7CisJCWRwcmludGsoInN1YnN0cmVhbSB3YXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWlmIChydW50aW1lID09IE5VTEwpIHsKKwkJZHByaW50aygicnVudGltZSB3YXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzdHJpZGUgPSBydW50aW1lLT5mcmFtZV9iaXRzID4+IDM7CisJaWYgKHN0cmlkZSA9PSAwKSB7CisJCWRwcmludGsoInN0cmlkZSBpcyB6ZXJvXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWxlbmd0aCA9IG51bV9ieXRlcyAvIHN0cmlkZTsKKwlpZiAobGVuZ3RoID09IDApIHsKKwkJZHByaW50aygiJXM6IGxlbmd0aCB3YXMgemVyb1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhID09IE5VTEwpIHsKKwkJZHByaW50aygiZG1hIGFyZWEgd2FzIE5VTEwgLSBpZ25vcmluZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlvbGRwdHIgPSBjeHNjLT5od3B0cl9kb25lX2NhcHR1cmU7CisJaWYgKG9sZHB0ciArIGxlbmd0aCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQl1bnNpZ25lZCBpbnQgY250ID0KKwkJCXJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gb2xkcHRyOworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIgKiBzdHJpZGUsIHBjbV9kYXRhLAorCQkgICAgICAgY250ICogc3RyaWRlKTsKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhLCBwY21fZGF0YSArIGNudCAqIHN0cmlkZSwKKwkJICAgICAgIGxlbmd0aCAqIHN0cmlkZSAtIGNudCAqIHN0cmlkZSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBwY21fZGF0YSwKKwkJICAgICAgIGxlbmd0aCAqIHN0cmlkZSk7CisJfQorCXNuZF9wY21fc3RyZWFtX2xvY2soc3Vic3RyZWFtKTsKKworCWN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZSArPSBsZW5ndGg7CisJaWYgKGN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZSA+PQorCSAgICBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlIC09CisJCQlydW50aW1lLT5idWZmZXJfc2l6ZTsKKworCWN4c2MtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSArPSBsZW5ndGg7CisJaWYgKGN4c2MtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSA+PQorCSAgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQljeHNjLT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgLT0KKwkJCXJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQlwZXJpb2RfZWxhcHNlZCA9IDE7CisJfQorCisJc25kX3BjbV9zdHJlYW1fdW5sb2NrKHN1YnN0cmVhbSk7CisKKwlpZiAocGVyaW9kX2VsYXBzZWQpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21fY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGN4c2MtPnY0bDJfZGV2OworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqczsKKwlzdHJ1Y3QgY3gxOF9vcGVuX2lkIGl0ZW07CisJaW50IHJldDsKKworCS8qIEluc3RydWN0IHRoZSBjeDE4IHRvIHN0YXJ0IHNlbmRpbmcgcGFja2V0cyAqLworCXNuZF9jeDE4X2xvY2soY3hzYyk7CisJcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ01dOworCisJaXRlbS5jeCA9IGN4OworCWl0ZW0udHlwZSA9IHMtPnR5cGU7CisJaXRlbS5vcGVuX2lkID0gY3gtPm9wZW5faWQrKzsKKworCS8qIFNlZSBpZiB0aGUgc3RyZWFtIGlzIGF2YWlsYWJsZSAqLworCWlmIChjeDE4X2NsYWltX3N0cmVhbSgmaXRlbSwgaXRlbS50eXBlKSkgeworCQkvKiBObywgaXQncyBhbHJlYWR5IGluIHVzZSAqLworCQlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTU9GRiwgJnMtPnNfZmxhZ3MpIHx8CisJICAgIHRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpIHsKKwkJLyogV2UncmUgYWxyZWFkeSBzdHJlYW1pbmcuICBObyBhZGRpdGlvbmFsIGFjdGlvbiByZXF1aXJlZCAqLworCQlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisJCXJldHVybiAwOworCX0KKworCisJcnVudGltZS0+aHcgPSBzbmRfY3gxOF9od19jYXB0dXJlOworCXNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwljeHNjLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gY3g7CisKKwljeC0+cGNtX2Fubm91bmNlX2NhbGxiYWNrID0gY3gxOF9hbHNhX2Fubm91bmNlX3BjbV9kYXRhOworCisJLyogTm90IGN1cnJlbnRseSBzdHJlYW1pbmcsIHNvIHN0YXJ0IGl0IHVwICovCisJc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKKwlyZXQgPSBjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbShzKTsKKwlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21fY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gY3hzYy0+djRsMl9kZXY7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJc3RydWN0IGN4MThfc3RyZWFtICpzOworCWludCByZXQ7CisKKwkvKiBJbnN0cnVjdCB0aGUgY3gxOCB0byBzdG9wIHNlbmRpbmcgcGFja2V0cyAqLworCXNuZF9jeDE4X2xvY2soY3hzYyk7CisJcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ01dOworCXJldCA9IGN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0ocywgMCk7CisJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOworCisJY3gxOF9yZWxlYXNlX3N0cmVhbShzKTsKKworCWN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2sgPSBOVUxMOworCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2lvY3RsKHN1YnN0cmVhbSwgY21kLCBhcmcpOworfQorCisKK3N0YXRpYyBpbnQgc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCisJCQkJCXNpemVfdCBzaXplKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOworCisJZHByaW50aygiQWxsb2NhdGluZyB2YnVmZmVyXG4iKTsKKwlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+IHNpemUpCisJCQlyZXR1cm4gMDsKKworCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CisJfQorCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXJ1bnRpbWUtPmRtYV9hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKworCXJldCA9IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAorCQkJCQkgICBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3hzYy0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSkgeworCQlkcHJpbnRrKCJmcmVlaW5nIHBjbSBjYXB0dXJlIHJlZ2lvblxuIik7CisJCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOworCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3hzYy0+c2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlID0gMDsKKwljeHNjLT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYworc25kX3BjbV91ZnJhbWVzX3Qgc25kX2N4MThfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzbmRfcGNtX3VmcmFtZXNfdCBod3B0cl9kb25lOworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN4c2MtPnNsb2NrLCBmbGFncyk7CisJaHdwdHJfZG9uZSA9IGN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjeHNjLT5zbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGh3cHRyX2RvbmU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl2b2lkICpwYWdlcHRyID0gc3Vicy0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQ7CisKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jeDE4X3BjbV9jYXB0dXJlX29wcyA9IHsKKwkub3BlbgkJPSBzbmRfY3gxOF9wY21fY2FwdHVyZV9vcGVuLAorCS5jbG9zZQkJPSBzbmRfY3gxOF9wY21fY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX2N4MThfcGNtX2lvY3RsLAorCS5od19wYXJhbXMJPSBzbmRfY3gxOF9wY21faHdfcGFyYW1zLAorCS5od19mcmVlCT0gc25kX2N4MThfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBzbmRfY3gxOF9wY21fcHJlcGFyZSwKKwkudHJpZ2dlcgk9IHNuZF9jeDE4X3BjbV90cmlnZ2VyLAorCS5wb2ludGVyCT0gc25kX2N4MThfcGNtX3BvaW50ZXIsCisJLnBhZ2UJCT0gc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorfTsKKworaW50IHNuZF9jeDE4X3BjbV9jcmVhdGUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IHNuZF9wY20gKnNwOworCXN0cnVjdCBzbmRfY2FyZCAqc2MgPSBjeHNjLT5zYzsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gY3hzYy0+djRsMl9kZXY7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9wY21fbmV3KHNjLCAiQ1gyMzQxOCBQQ00iLAorCQkJICAwLCAvKiBQQ00gZGV2aWNlIDAsIHRoZSBvbmx5IG9uZSBmb3IgdGhpcyBjYXJkICovCisJCQkgIDAsIC8qIDAgcGxheWJhY2sgc3Vic3RyZWFtcyAqLworCQkJICAxLCAvKiAxIGNhcHR1cmUgc3Vic3RyZWFtICovCisJCQkgICZzcCk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2N4MThfcGNtX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0OworCX0KKworCXNwaW5fbG9ja19pbml0KCZjeHNjLT5zbG9jayk7CisKKwlzbmRfcGNtX3NldF9vcHMoc3AsIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCSZzbmRfY3gxOF9wY21fY2FwdHVyZV9vcHMpOworCXNwLT5pbmZvX2ZsYWdzID0gMDsKKwlzcC0+cHJpdmF0ZV9kYXRhID0gY3hzYzsKKwlzdHJsY3B5KHNwLT5uYW1lLCBjeC0+Y2FyZF9uYW1lLCBzaXplb2Yoc3AtPm5hbWUpKTsKKworCXJldHVybiAwOworCitlcnJfZXhpdDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1NjYyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICBBTFNBIFBDTSBkZXZpY2UgZm9yIHRoZQorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKK2ludCBfX2luaXQgc25kX2N4MThfcGNtX2NyZWF0ZShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyk7CisKKy8qIFVzZWQgYnkgY3gxOC1tYWlsYm94IHRvIGFubm91bmNlIHRoZSBQQ00gZGF0YSB0byB0aGUgbW9kdWxlICovCit2b2lkIGN4MThfYWxzYV9hbm5vdW5jZV9wY21fZGF0YShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY2FyZCwgdTggKnBjbV9kYXRhLAorCQkJCSBzaXplX3QgbnVtX2J5dGVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGExY2RlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworc3RydWN0IHNuZF9jYXJkOworCitzdHJ1Y3Qgc25kX2N4MThfY2FyZCB7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjOworCXVuc2lnbmVkIGludCBjYXB0dXJlX3RyYW5zZmVyX2RvbmU7CisJdW5zaWduZWQgaW50IGh3cHRyX2RvbmVfY2FwdHVyZTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKKwlzcGlubG9ja190IHNsb2NrOworfTsKKworZXh0ZXJuIGludCBjeDE4X2Fsc2FfZGVidWc7CisKKy8qCisgKiBGaWxlIG9wZXJhdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBlbmNvZGVyIG9yIHZpZGVvIG9yIGF1ZGlvIHN1YmRldmljZXMKKyAqIG5lZWQgdG8gYmUgc2VyaWFsaXplZC4gIFVzZSB0aGUgc2FtZSBsb2NrIHdlIHVzZSBmb3IgdjRsMiBmaWxlIG9wcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNuZF9jeDE4X2xvY2soc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNuZF9jeDE4X3VubG9jayhzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKwltdXRleF91bmxvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7Cit9CisKKyNkZWZpbmUgQ1gxOF9BTFNBX0RCR0ZMR19XQVJOICAoMSA8PCAwKQorI2RlZmluZSBDWDE4X0FMU0FfREJHRkxHX1dBUk4gICgxIDw8IDApCisjZGVmaW5lIENYMThfQUxTQV9EQkdGTEdfSU5GTyAgKDEgPDwgMSkKKworI2RlZmluZSBDWDE4X0FMU0FfREVCVUcoeCwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmICgoeCkgJiBjeDE4X2Fsc2FfZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzLWFsc2E6ICIgdHlwZSAiOiAiIGZtdCwgXAorCQkJCXY0bDJfZGV2LT5uYW1lICwgIyMgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENYMThfQUxTQV9ERUJVR19XQVJOKGZtdCwgYXJncy4uLikgXAorCUNYMThfQUxTQV9ERUJVRyhDWDE4X0FMU0FfREJHRkxHX1dBUk4sICJ3YXJuaW5nIiwgZm10ICwgIyMgYXJncykKKworI2RlZmluZSBDWDE4X0FMU0FfREVCVUdfSU5GTyhmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0FMU0FfREVCVUcoQ1gxOF9BTFNBX0RCR0ZMR19JTkZPLCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0VSUihmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgIiVzLWFsc2E6ICIgZm10LCB2NGwyX2Rldi0+bmFtZSAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX1dBUk4oZm10LCBhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMtYWxzYTogIiBmbXQsIHY0bDJfZGV2LT5uYW1lICwgIyMgYXJncykKKworI2RlZmluZSBDWDE4X0FMU0FfSU5GTyhmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPICIlcy1hbHNhOiAiIGZtdCwgdjRsMl9kZXYtPm5hbWUgLCAjIyBhcmdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKaW5kZXggZjExZTQ3YS4uZjgwOGZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAkuZ3Bpb19pbml0LmRpcmVjdGlvbiA9IDB4NywKIAkuZ3Bpb19hdWRpb19pbnB1dCA9IHsgLm1hc2sgICA9IDB4NywKIAkJCSAgICAgIC50dW5lciAgPSAweDYsIC5saW5laW4gPSAweDIsIC5yYWRpbyAgPSAweDIgfSwKLQkueGNlaXZlX3BpbiA9IDE1LAorCS54Y2VpdmVfcGluID0gMSwKIAkucGNpX2xpc3QgPSBjeDE4X3BjaV9sZWFkdGVrX3B2cjIxMDAsCiAJLmkyYyA9ICZjeDE4X2kyY19zdGQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwppbmRleCA3ZjY1YTQ3Li5jOTVhODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtNDcsNiArNDcsMTAgQEAKICAgIHNldHRpbmcgdGhpcyB0byAxIHlvdSBlbnN1cmUgdGhhdCByYWRpbzAgaXMgbm93IGFsc28gcmFkaW8xLiAqLwogaW50IGN4MThfZmlyc3RfbWlub3I7CiAKKy8qIENhbGxiYWNrIGZvciByZWdpc3RlcmluZyBleHRlbnNpb25zICovCitpbnQgKCpjeDE4X2V4dF9pbml0KShzdHJ1Y3QgY3gxOCAqKTsKK0VYUE9SVF9TWU1CT0woY3gxOF9leHRfaW5pdCk7CisKIC8qIGFkZCB5b3VyIHJldmlzaW9uIGFuZCB3aGF0bm90IGhlcmUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeDE4X3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX0NYLCBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsCkBAIC05MSw3ICs5NSw3IEBACiAKIHN0YXRpYyBpbnQgZW5jX3RzX2J1ZnMgPSAtMTsKIHN0YXRpYyBpbnQgZW5jX21wZ19idWZzID0gLTE7Ci1zdGF0aWMgaW50IGVuY19pZHhfYnVmcyA9IC0xOworc3RhdGljIGludCBlbmNfaWR4X2J1ZnMgPSBDWDE4X01BWF9GV19NRExTX1BFUl9TVFJFQU07CiBzdGF0aWMgaW50IGVuY195dXZfYnVmcyA9IC0xOwogc3RhdGljIGludCBlbmNfdmJpX2J1ZnMgPSAtMTsKIHN0YXRpYyBpbnQgZW5jX3BjbV9idWZzID0gLTE7CkBAIC0xOTYsMTQgKzIwMCwxNyBAQAogCQkgIk51bWJlciBvZiBlbmNvZGVyIE1QRyBidWZmZXJzXG4iCiAJCSAiXHRcdFx0RGVmYXVsdCBpcyBjb21wdXRlZCBmcm9tIG90aGVyIGVuY19tcGdfKiBwYXJhbWV0ZXJzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY19pZHhfYnVmZmVycywKLQkJICJFbmNvZGVyIElEWCBidWZmZXIgbWVtb3J5IChNQikuIChlbmNfaWR4X2J1ZnMgY2FuIG92ZXJyaWRlKVxuIgotCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX0VOQ19JRFhfQlVGRkVSUykpOworCQkgIihEZXByZWNhdGVkKSBFbmNvZGVyIElEWCBidWZmZXIgbWVtb3J5IChNQilcbiIKKwkJICJcdFx0XHRJZ25vcmVkLCBleGNlcHQgMCBkaXNhYmxlcyBJRFggYnVmZmVyIGFsbG9jYXRpb25zXG4iCisJCSAiXHRcdFx0RGVmYXVsdDogMSBbRW5hYmxlZF0iKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX2lkeF9idWZzaXplLAogCQkgIlNpemUgb2YgYW4gZW5jb2RlciBJRFggYnVmZmVyIChrQilcbiIKLQkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfSURYX0JVRlNJWkUpKTsKKwkJICJcdFx0XHRBbGxvd2VkIHZhbHVlcyBhcmUgbXVsdGlwbGVzIG9mIDEuNSBrQiByb3VuZGVkIHVwXG4iCisJCSAiXHRcdFx0KG11bHRpcGxlcyBvZiBzaXplIHJlcXVpcmVkIGZvciA2NCBpbmRleCBlbnRyaWVzKVxuIgorCQkgIlx0XHRcdERlZmF1bHQ6IDIiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX2lkeF9idWZzLAogCQkgIk51bWJlciBvZiBlbmNvZGVyIElEWCBidWZmZXJzXG4iCi0JCSAiXHRcdFx0RGVmYXVsdCBpcyBjb21wdXRlZCBmcm9tIG90aGVyIGVuY19pZHhfKiBwYXJhbWV0ZXJzIik7CisJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X01BWF9GV19NRExTX1BFUl9TVFJFQU0pKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX3l1dl9idWZmZXJzLAogCQkgIkVuY29kZXIgWVVWIGJ1ZmZlciBtZW1vcnkgKE1CKS4gKGVuY195dXZfYnVmcyBjYW4gb3ZlcnJpZGUpXG4iCiAJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX1lVVl9CVUZGRVJTKSk7CkBAIC0yMzEsNyArMjM4LDggQEAKIAkJICJOdW1iZXIgb2YgZW5jb2RlciBQQ00gYnVmZmVyc1xuIgogCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfcGNtXyogcGFyYW1ldGVycyIpOwogCi1NT0RVTEVfUEFSTV9ERVNDKGN4MThfZmlyc3RfbWlub3IsICJTZXQgZGV2aWNlIG5vZGUgbnVtYmVyIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKK01PRFVMRV9QQVJNX0RFU0MoY3gxOF9maXJzdF9taW5vciwKKwkJICJTZXQgZGV2aWNlIG5vZGUgbnVtYmVyIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKIAogTU9EVUxFX0FVVEhPUigiSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNYMjM0MTggZHJpdmVyIik7CkBAIC0yNDAsNiArMjQ4LDI4IEBACiAKIE1PRFVMRV9WRVJTSU9OKENYMThfVkVSU0lPTik7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSAmJiBkZWZpbmVkKE1PRFVMRSkKK3N0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3gxOCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDE4LCByZXF1ZXN0X21vZHVsZV93ayk7CisKKwkvKiBNYWtlIHN1cmUgY3gxOC1hbHNhIG1vZHVsZSBpcyBsb2FkZWQgKi8KKwlyZXF1ZXN0X21vZHVsZSgiY3gxOC1hbHNhIik7CisKKwkvKiBJbml0aWFsaXplIGN4MTgtYWxzYSBmb3IgdGhpcyBpbnN0YW5jZSBvZiB0aGUgY3gxOCBkZXZpY2UgKi8KKwlpZiAoY3gxOF9leHRfaW5pdCAhPSBOVUxMKQorCQljeDE4X2V4dF9pbml0KGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxlcyhzdHJ1Y3QgY3gxOCAqZGV2KQoreworCUlOSVRfV09SSygmZGV2LT5yZXF1ZXN0X21vZHVsZV93aywgcmVxdWVzdF9tb2R1bGVfYXN5bmMpOworCXNjaGVkdWxlX3dvcmsoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2spOworfQorI2Vsc2UKKyNkZWZpbmUgcmVxdWVzdF9tb2R1bGVzKGRldikKKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLworCiAvKiBHZW5lcmljIHV0aWxpdHkgZnVuY3Rpb25zICovCiBpbnQgY3gxOF9tc2xlZXBfdGltZW91dCh1bnNpZ25lZCBpbnQgbXNlY3MsIGludCBpbnRyKQogewpAQCAtNTAxLDcgKzUzMSwxMiBAQAogCQkvKgogCQkgKiBZVVYgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBuZWVkcyB0byBiZQogCQkgKiBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiAzMy43NSBrQiAoc3RvcmFnZSBmb3IgMzIgc2NyZWVucwotCQkgKiBsaW5lcyB0byBtYWludGFpbiBhbGlnbm1lbnQgaW4gY2FzZSBvZiBsb3N0IGJ1ZmZlcnMKKwkJICogbGluZXMgdG8gbWFpbnRhaW4gYWxpZ25tZW50IGluIGNhc2Ugb2YgbG9zdCBidWZmZXJzKS4KKwkJICoKKwkJICogSURYIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgc2hvdWxkIGJlCisJCSAqIGFuIGludGVncmFsIG11bHRpcGxlIG9mIDEuNSBrQiAoc3RvcmFnZSBmb3IgNjQgaW5kZXggZW50cmllcworCQkgKiB0byBtYWludGFpbiBhbGlnbm1lbnQgaW4gY2FzZSBvZiBsb3N0IGJ1ZmZlcnMpLgorCQkgKgogCQkgKi8KIAkJaWYgKGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CiAJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldICo9IDEwMjQ7CkBAIC01MTEsMTUgKzU0NiwyNCBAQAogCQkJaWYgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPCBDWDE4X1VOSVRfRU5DX1lVVl9CVUZTSVpFKQogCQkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPQogCQkJCQkJQ1gxOF9VTklUX0VOQ19ZVVZfQlVGU0laRTsKKwkJfSBlbHNlIGlmIChpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgeworCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSAqPSAxMDI0OworCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSAtPQorCQkJICAgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gJSBDWDE4X1VOSVRfRU5DX0lEWF9CVUZTSVpFKTsKKworCQkJaWYgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPCBDWDE4X1VOSVRfRU5DX0lEWF9CVUZTSVpFKQorCQkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPQorCQkJCQkJQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRTsKIAkJfQogCQkvKgotCQkgKiBZVVYgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBpcworCQkgKiBZVVYgYW5kIElEWCBhcmUgc3BlY2lhbCBjYXNlcyB3aGVyZSB0aGUgc3RyZWFtX2J1Zl9zaXplIGlzCiAJCSAqIG5vdyBpbiBieXRlcy4KIAkJICogVkJJIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgaXMgZml4ZWQKIAkJICogYW5kIGFscmVhZHkgaW4gYnl0ZXMKIAkJICovCiAJCWlmIChpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSB8fAotCQkgICAgaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKKwkJICAgIGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWIHx8CisJCSAgICBpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgewogCQkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA8IDApIHsKIAkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPQogCQkJCQljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gKiAxMDI0ICogMTAyNApAQCAtMTAzMiw2ICsxMDc2LDEwIEBACiAJfQogCiAJQ1gxOF9JTkZPKCJJbml0aWFsaXplZCBjYXJkOiAlc1xuIiwgY3gtPmNhcmRfbmFtZSk7CisKKwkvKiBMb2FkIGN4MTggc3VibW9kdWxlcyAoY3gxOC1hbHNhKSAqLworCXJlcXVlc3RfbW9kdWxlcyhjeCk7CisKIAlyZXR1cm4gMDsKIAogZnJlZV9zdHJlYW1zOgpAQCAtMTIyMCw2ICsxMjY4LDcgQEAKIAlrZnJlZShjeCk7CiB9CiAKKwogLyogZGVmaW5lIGEgcGNpX2RyaXZlciBmb3IgY2FyZCBkZXRlY3Rpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjeDE4X3BjaV9kcml2ZXIgPSB7CiAgICAgICAubmFtZSA9ICAgICAiY3gxOCIsCkBAIC0xMjMwLDcgKzEyNzksOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtb2R1bGVfc3RhcnQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJjeDE4OiAgU3RhcnQgaW5pdGlhbGl6YXRpb24sIHZlcnNpb24gJXNcbiIsIENYMThfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY3gxODogIFN0YXJ0IGluaXRpYWxpemF0aW9uLCB2ZXJzaW9uICVzXG4iLAorCSAgICAgICBDWDE4X1ZFUlNJT04pOwogCiAJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwogCWlmIChjeDE4X2ZpcnN0X21pbm9yIDwgMCB8fCBjeDE4X2ZpcnN0X21pbm9yID49IENYMThfTUFYX0NBUkRTKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCmluZGV4IGUzZjc5MTEuLjIzYWQ2ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCkBAIC0xMjYsMTAgKzEyNiwyMiBAQAogI2RlZmluZSBDWDE4XzYyNV9MSU5FX0VOQ19ZVVZfQlVGU0laRQkoQ1gxOF9VTklUX0VOQ19ZVVZfQlVGU0laRSAqIDU3Ni8zMikKICNkZWZpbmUgQ1gxOF81MjVfTElORV9FTkNfWVVWX0JVRlNJWkUJKENYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkUgKiA0ODAvMzIpCiAKKy8qIElEWCBidWZmZXIgc2l6ZSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiB0aGUgaW5kZXggZW50cnkgc2l6ZSBmcm9tIHRoZSBjaGlwICovCitzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5IHsKKwlfX2xlMzIgbGVuZ3RoOworCV9fbGUzMiBvZmZzZXRfbG93OworCV9fbGUzMiBvZmZzZXRfaGlnaDsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTMyIHB0c19sb3c7CisJX19sZTMyIHB0c19oaWdoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lIENYMThfVU5JVF9FTkNfSURYX0JVRlNJWkUgXAorCShzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSkgKiBWNEwyX0VOQ19JRFhfRU5UUklFUykKKwogLyogRE1BIGJ1ZmZlciwgZGVmYXVsdCBzaXplIGluIGtCIGFsbG9jYXRlZCAqLwogI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX1RTX0JVRlNJWkUgICAzMgogI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX01QR19CVUZTSVpFICAzMgotI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZTSVpFICAzMgorI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZTSVpFICAoQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRSAqIDEgLyAxMDI0ICsgMSkKICNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19ZVVZfQlVGU0laRSAgKENYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkUgKiAzIC8gMTAyNCArIDEpCiAjZGVmaW5lIENYMThfREVGQVVMVF9FTkNfUENNX0JVRlNJWkUgICA0CiAKQEAgLTIzNCwxNiArMjQ2LDggQEAKICNkZWZpbmUgQ1gxOF9XQVJOX0RFVihkZXYsIGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybihkZXYsIGZtdCAsICMjIGFyZ3MpCiAjZGVmaW5lIENYMThfSU5GT19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pICAgICB2NGwyX2luZm8oZGV2LCBmbXQgLCAjIyBhcmdzKQogCi0vKiBWYWx1ZXMgZm9yIENYMThfQVBJX0RFQ19QTEFZQkFDS19TUEVFRCBtcGVnX2ZyYW1lX3R5cGVfbWFzayBwYXJhbWV0ZXI6ICovCi0jZGVmaW5lIE1QRUdfRlJBTUVfVFlQRV9JRlJBTUUgMQotI2RlZmluZSBNUEVHX0ZSQU1FX1RZUEVfSUZSQU1FX1BGUkFNRSAzCi0jZGVmaW5lIE1QRUdfRlJBTUVfVFlQRV9BTEwgNwotCi0jZGVmaW5lIENYMThfTUFYX1BHTV9JTkRFWCAoNDAwKQotCiBleHRlcm4gaW50IGN4MThfZGVidWc7CiAKLQogc3RydWN0IGN4MThfb3B0aW9ucyB7CiAJaW50IG1lZ2FieXRlc1tDWDE4X01BWF9TVFJFQU1TXTsgLyogU2l6ZSBpbiBtZWdhYnl0ZXMgb2YgZWFjaCBzdHJlYW0gKi8KIAlpbnQgY2FyZHR5cGU7CQkvKiBmb3JjZSBjYXJkIHR5cGUgb24gbG9hZCAqLwpAQCAtMjc2LDYgKzI4MCwxOCBAQAogI2RlZmluZSBDWDE4X1NMSUNFRF9UWVBFX1dTU182MjUgICAgICAgICg1KQogI2RlZmluZSBDWDE4X1NMSUNFRF9UWVBFX1ZQUyAgICAgICAgICAgICg3KQogCisvKioKKyAqIGxpc3RfZW50cnlfaXNfcGFzdF9lbmQgLSBjaGVjayBpZiBhIHByZXZpb3VzIGxvb3AgY3Vyc29yIGlzIG9mZiBsaXN0IGVuZAorICogQHBvczoJdGhlIHR5cGUgKiBwcmV2aW91c2x5IHVzZWQgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIENoZWNrIGlmIHRoZSBlbnRyeSdzIGxpc3RfaGVhZCBpcyB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgdGh1cyBpdCdzIG5vdCBhCisgKiByZWFsIGVudHJ5IGJ1dCB3YXMgdGhlIGxvb3AgY3Vyc29yIHRoYXQgd2Fsa2VkIHBhc3QgdGhlIGVuZAorICovCisjZGVmaW5lIGxpc3RfZW50cnlfaXNfcGFzdF9lbmQocG9zLCBoZWFkLCBtZW1iZXIpIFwKKwkoJnBvcy0+bWVtYmVyID09IChoZWFkKSkKKwogc3RydWN0IGN4MThfYnVmZmVyIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwpAQCAtNTU4LDYgKzU3NCwxMCBAQAogCWludCBzdHJlYW1fYnVmZmVyc1tDWDE4X01BWF9TVFJFQU1TXTsgLyogIyBvZiBidWZmZXJzIGZvciBlYWNoIHN0cmVhbSAqLwogCWludCBzdHJlYW1fYnVmX3NpemVbQ1gxOF9NQVhfU1RSRUFNU107IC8qIFN0cmVhbSBidWZmZXIgc2l6ZSAqLwogCXN0cnVjdCBjeDE4X3N0cmVhbSBzdHJlYW1zW0NYMThfTUFYX1NUUkVBTVNdOyAJLyogU3RyZWFtIGRhdGEgKi8KKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqYWxzYTsgLyogQUxTQSBpbnRlcmZhY2UgZm9yIFBDTSBjYXB0dXJlIHN0cmVhbSAqLworCXZvaWQgKCpwY21fYW5ub3VuY2VfY2FsbGJhY2spKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjYXJkLCB1OCAqcGNtX2RhdGEsCisJCQkJICAgICAgc2l6ZV90IG51bV9ieXRlcyk7CisKIAl1bnNpZ25lZCBsb25nIGlfZmxhZ3M7ICAvKiBnbG9iYWwgY3gxOCBmbGFncyAqLwogCWF0b21pY190IGFuYV9jYXB0dXJpbmc7CS8qIGNvdW50IG51bWJlciBvZiBhY3RpdmUgYW5hbG9nIGNhcHR1cmUgc3RyZWFtcyAqLwogCWF0b21pY190IHRvdF9jYXB0dXJpbmc7CS8qIHRvdGFsIGNvdW50IG51bWJlciBvZiBhY3RpdmUgY2FwdHVyZSBzdHJlYW1zICovCkBAIC01NzUsMTIgKzU5NSw2IEBACiAKIAlzdHJ1Y3QgdmJpX2luZm8gdmJpOwogCi0JdTMyIHBnbV9pbmZvX29mZnNldDsKLQl1MzIgcGdtX2luZm9fbnVtOwotCXUzMiBwZ21faW5mb193cml0ZV9pZHg7Ci0JdTMyIHBnbV9pbmZvX3JlYWRfaWR4OwotCXN0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgcGdtX2luZm9bQ1gxOF9NQVhfUEdNX0lOREVYXTsKLQogCXU2NCBtcGdfZGF0YV9yZWNlaXZlZDsKIAl1NjQgdmJpX2RhdGFfaW5zZXJ0ZWQ7CiAKQEAgLTYyMyw2ICs2MzcsOSBAQAogCXUzMiBhY3RpdmVfaW5wdXQ7CiAJdjRsMl9zdGRfaWQgc3RkOwogCXY0bDJfc3RkX2lkIHR1bmVyX3N0ZDsJLyogVGhlIG5vcm0gb2YgdGhlIHR1bmVyIChmaXhlZCkgKi8KKworCS8qIFVzZWQgZm9yIGN4MTgtYWxzYSBtb2R1bGUgbG9hZGluZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X21vZHVsZV93azsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGN4MTggKnRvX2N4MTgoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKQEAgLTYzMCw2ICs2NDcsOSBAQAogCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDE4LCB2NGwyX2Rldik7CiB9CiAKKy8qIGN4MTggZXh0ZW5zaW9ucyB0byBiZSBsb2FkZWQgKi8KK2V4dGVybiBpbnQgKCpjeDE4X2V4dF9pbml0KShzdHJ1Y3QgY3gxOCAqKTsKKwogLyogR2xvYmFscyAqLwogZXh0ZXJuIGludCBjeDE4X2ZpcnN0X21pbm9yOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCmluZGV4IDcxYWQyZDEuLjBhZTJjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCkBAIC0yMTMsMTAgKzIxMywxNCBAQAogewogCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZmVlZC0+ZGVtdXg7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzdHJlYW0gPSAoc3RydWN0IGN4MThfc3RyZWFtICopIGRlbXV4LT5wcml2OwotCXN0cnVjdCBjeDE4ICpjeCA9IHN0cmVhbS0+Y3g7CisJc3RydWN0IGN4MTggKmN4OwogCWludCByZXQ7CiAJdTMyIHY7CiAKKwlpZiAoIXN0cmVhbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeCA9IHN0cmVhbS0+Y3g7CiAJQ1gxOF9ERUJVR19JTkZPKCJTdGFydCBmZWVkOiBwaWQgPSAweCV4IGluZGV4ID0gJWRcbiIsCiAJCQlmZWVkLT5waWQsIGZlZWQtPmluZGV4KTsKIApAQCAtMjUzLDEyICsyNTcsMTAgQEAKIAlpZiAoIWRlbXV4LT5kbXguZnJvbnRlbmQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFzdHJlYW0pCi0JCXJldHVybiAtRUlOVkFMOwotCiAJbXV0ZXhfbG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwogCWlmIChzdHJlYW0tPmR2Yi5mZWVkaW5nKysgPT0gMCkgewogCQlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0aW5nIFRyYW5zcG9ydCBETUFcbiIpOworCQltdXRleF9sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOwogCQlzZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnN0cmVhbS0+c19mbGFncyk7CiAJCXJldCA9IGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHN0cmVhbSk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC0yNjcsNiArMjY5LDcgQEAKIAkJCWlmIChzdHJlYW0tPmR2Yi5mZWVkaW5nID09IDApCiAJCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnN0cmVhbS0+c19mbGFncyk7CiAJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOwogCX0gZWxzZQogCQlyZXQgPSAwOwogCW11dGV4X3VubG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwpAQCAtMjc5LDE3ICsyODIsMjAgQEAKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqc3RyZWFtID0gKHN0cnVjdCBjeDE4X3N0cmVhbSAqKWRlbXV4LT5wcml2OwotCXN0cnVjdCBjeDE4ICpjeCA9IHN0cmVhbS0+Y3g7CisJc3RydWN0IGN4MTggKmN4OwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JQ1gxOF9ERUJVR19JTkZPKCJTdG9wIGZlZWQ6IHBpZCA9IDB4JXggaW5kZXggPSAlZFxuIiwKLQkJCWZlZWQtPnBpZCwgZmVlZC0+aW5kZXgpOwotCiAJaWYgKHN0cmVhbSkgeworCQljeCA9IHN0cmVhbS0+Y3g7CisJCUNYMThfREVCVUdfSU5GTygiU3RvcCBmZWVkOiBwaWQgPSAweCV4IGluZGV4ID0gJWRcbiIsCisJCQkJZmVlZC0+cGlkLCBmZWVkLT5pbmRleCk7CisKIAkJbXV0ZXhfbG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwogCQlpZiAoLS1zdHJlYW0tPmR2Yi5mZWVkaW5nID09IDApIHsKIAkJCUNYMThfREVCVUdfSU5GTygiU3RvcHBpbmcgVHJhbnNwb3J0IERNQVxuIik7CisJCQltdXRleF9sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOwogCQkJcmV0ID0gY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzdHJlYW0sIDApOworCQkJbXV0ZXhfdW5sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOwogCQl9IGVsc2UKIAkJCXJldCA9IDA7CiAJCW11dGV4X3VubG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCmluZGV4IGMwODg1YzYuLjg2M2NlNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKQEAgLTM3LDE1ICszNywyMSBAQAogCiAvKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGNsYWltIHRoZSBzdHJlYW0gZm9yIGEgc3BlY2lmaWMgZmlsZSBkZXNjcmlwdG9yLgogICAgSWYgbm8gb25lIGVsc2UgaXMgdXNpbmcgdGhpcyBzdHJlYW0gdGhlbiB0aGUgc3RyZWFtIGlzIGNsYWltZWQgYW5kCi0gICBhc3NvY2lhdGVkIFZCSSBzdHJlYW1zIGFyZSBhbHNvIGF1dG9tYXRpY2FsbHkgY2xhaW1lZC4KKyAgIGFzc29jaWF0ZWQgVkJJIGFuZCBJRFggc3RyZWFtcyBhcmUgYWxzbyBhdXRvbWF0aWNhbGx5IGNsYWltZWQuCiAgICBQb3NzaWJsZSBlcnJvciByZXR1cm5zOiAtRUJVU1kgaWYgc29tZW9uZSBlbHNlIGhhcyBjbGFpbWVkCiAgICB0aGUgc3RyZWFtIG9yIDAgb24gc3VjY2Vzcy4gKi8KLXN0YXRpYyBpbnQgY3gxOF9jbGFpbV9zdHJlYW0oc3RydWN0IGN4MThfb3Blbl9pZCAqaWQsIGludCB0eXBlKQoraW50IGN4MThfY2xhaW1fc3RyZWFtKHN0cnVjdCBjeDE4X29wZW5faWQgKmlkLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW3R5cGVdOwotCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192Ymk7Ci0JaW50IHZiaV90eXBlOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19hc3NvYzsKKworCS8qIE5vdGhpbmcgc2hvdWxkIGV2ZXIgdHJ5IHRvIGRpcmVjdGx5IGNsYWltIHRoZSBJRFggc3RyZWFtICovCisJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCUNYMThfV0FSTigiTVBFRyBJbmRleCBzdHJlYW0gY2Fubm90IGJlIGNsYWltZWQgIgorCQkJICAiZGlyZWN0bHksIGJ1dCBzb21ldGhpbmcgdHJpZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnMtPnNfZmxhZ3MpKSB7CiAJCS8qIHNvbWVvbmUgYWxyZWFkeSBjbGFpbWVkIHRoaXMgc3RyZWFtICovCkBAIC02NywzMiArNzMsNDcgQEAKIAl9CiAJcy0+aWQgPSBpZC0+b3Blbl9pZDsKIAotCS8qIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyBuZWVkcyB0byBjbGFpbSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkKLQkgICAocHJvdmlkZWQgVkJJIGluc2VydGlvbiBpcyBvbiBhbmQgc2xpY2VkIFZCSSBpcyBzZWxlY3RlZCksIGZvciBhbGwKLQkgICBvdGhlciBzdHJlYW1zIHdlJ3JlIGRvbmUgKi8KLQlpZiAodHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKLQkgICAgY3gtPnZiaS5pbnNlcnRfbXBlZyAmJiAhY3gxOF9yYXdfdmJpKGN4KSkgewotCQl2YmlfdHlwZSA9IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSTsKLQl9IGVsc2UgeworCS8qCisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHIG5lZWRzIHRvIGNsYWltOgorCSAqIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSwgaWYgVkJJIGluc2VydGlvbiBpcyBvbiBmb3Igc2xpY2VkIFZCSSwgb3IKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgsIGlmIFZCSSBpbnNlcnRpb24gaXMgb2ZmIGZvciBzbGljZWQgVkJJCisJICogKFdlIGRvbid0IHlldCBmaXggdXAgTVBFRyBJbmRleCBlbnRyaWVzIGZvciBvdXIgaW5zZXJ0ZWQgcGFja2V0cykuCisJICoKKwkgKiBGb3IgYWxsIG90aGVyIHN0cmVhbXMgd2UncmUgZG9uZS4KKwkgKi8KKwlpZiAodHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpCiAJCXJldHVybiAwOwotCX0KLQlzX3ZiaSA9ICZjeC0+c3RyZWFtc1t2YmlfdHlwZV07CiAKLQlzZXRfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX3ZiaS0+c19mbGFncyk7CisJc19hc3NvYyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCWlmIChjeC0+dmJpLmluc2VydF9tcGVnICYmICFjeDE4X3Jhd192YmkoY3gpKQorCQlzX2Fzc29jID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07CisJZWxzZSBpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQoc19hc3NvYykpCisJCXJldHVybiAwOworCisJc2V0X2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc19hc3NvYy0+c19mbGFncyk7CiAKIAkvKiBtYXJrIHRoYXQgaXQgaXMgdXNlZCBpbnRlcm5hbGx5ICovCi0Jc2V0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX3ZiaS0+c19mbGFncyk7CisJc2V0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX2Fzc29jLT5zX2ZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woY3gxOF9jbGFpbV9zdHJlYW0pOwogCiAvKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIGEgcHJldmlvdXNseSBjbGFpbWVkIHN0cmVhbS4gSXQgd2lsbCB0YWtlIGludG8KICAgIGFjY291bnQgYXNzb2NpYXRlZCBWQkkgc3RyZWFtcy4gKi8KLXN0YXRpYyB2b2lkIGN4MThfcmVsZWFzZV9zdHJlYW0oc3RydWN0IGN4MThfc3RyZWFtICpzKQordm9pZCBjeDE4X3JlbGVhc2Vfc3RyZWFtKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKLQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfdmJpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19hc3NvYzsKIAogCXMtPmlkID0gLTE7CisJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCS8qCisJCSAqIFRoZSBJRFggc3RyZWFtIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5LCBhbmQgY2FuCisJCSAqIG9ubHkgYmUgaW5kaXJlY3RseSB1bmNsYWltZWQgYnkgdW5jbGFpbWluZyB0aGUgTVBHIHN0cmVhbS4KKwkJICovCisJCXJldHVybjsKKwl9CisKIAlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgJiYKIAkJdGVzdF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmcy0+c19mbGFncykpIHsKIAkJLyogdGhpcyBzdHJlYW0gaXMgc3RpbGwgaW4gdXNlIGludGVybmFsbHkgKi8KQEAgLTEwNSwyNSArMTI2LDM2IEBACiAKIAljeDE4X2ZsdXNoX3F1ZXVlcyhzKTsKIAotCS8qIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyBuZWVkcyB0byByZWxlYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSwKLQkgICBmb3IgYWxsIG90aGVyIHN0cmVhbXMgd2UncmUgZG9uZSAqLwotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykKLQkJc192YmkgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKLQllbHNlCisJLyoKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gcmVsZWFzZSB0aGUKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgYW5kL29yIENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCBzdHJlYW1zLgorCSAqCisJICogRm9yIGFsbCBvdGhlciBzdHJlYW1zIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKHMtPnR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKQogCQlyZXR1cm47CiAKLQkvKiBjbGVhciBpbnRlcm5hbCB1c2UgZmxhZyAqLwotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfdmJpLT5zX2ZsYWdzKSkgewotCQkvKiB3YXMgYWxyZWFkeSBjbGVhcmVkICovCi0JCXJldHVybjsKKwkvKiBVbmNsYWltIHRoZSBhc3NvY2lhdGVkIE1QRUcgSW5kZXggc3RyZWFtICovCisJc19hc3NvYyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc19hc3NvYy0+c19mbGFncykpIHsKKwkJY2xlYXJfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX2Fzc29jLT5zX2ZsYWdzKTsKKwkJY3gxOF9mbHVzaF9xdWV1ZXMoc19hc3NvYyk7CiAJfQotCWlmIChzX3ZiaS0+aWQgIT0gLTEpIHsKLQkJLyogVkJJIHN0cmVhbSBzdGlsbCBjbGFpbWVkIGJ5IGEgZmlsZSBkZXNjcmlwdG9yICovCi0JCXJldHVybjsKKworCS8qIFVuY2xhaW0gdGhlIGFzc29jaWF0ZWQgVkJJIHN0cmVhbSAqLworCXNfYXNzb2MgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfYXNzb2MtPnNfZmxhZ3MpKSB7CisJCWlmIChzX2Fzc29jLT5pZCA9PSAtMSkgeworCQkJLyoKKwkJCSAqIFRoZSBWQkkgc3RyZWFtIGlzIG5vdCBzdGlsbCBjbGFpbWVkIGJ5IGEgZmlsZQorCQkJICogZGVzY3JpcHRvciwgc28gY29tcGxldGVseSB1bmNsYWltIGl0LgorCQkJICovCisJCQljbGVhcl9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnNfYXNzb2MtPnNfZmxhZ3MpOworCQkJY3gxOF9mbHVzaF9xdWV1ZXMoc19hc3NvYyk7CisJCX0KIAl9Ci0JY2xlYXJfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX3ZiaS0+c19mbGFncyk7Ci0JY3gxOF9mbHVzaF9xdWV1ZXMoc192YmkpOwogfQorRVhQT1JUX1NZTUJPTChjeDE4X3JlbGVhc2Vfc3RyZWFtKTsKIAogc3RhdGljIHZvaWQgY3gxOF9kdWFsd2F0Y2goc3RydWN0IGN4MTggKmN4KQogewpAQCAtMTc3LDkgKzIwOSw3IEBACiAJKmVyciA9IDA7CiAJd2hpbGUgKDEpIHsKIAkJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7Ci0JCQkvKiBQcm9jZXNzIHBlbmRpbmcgcHJvZ3JhbSBpbmZvIHVwZGF0ZXMgYW5kIHBlbmRpbmcKLQkJCSAgIFZCSSBkYXRhICovCi0KKwkJCS8qIFByb2Nlc3MgcGVuZGluZyBwcm9ncmFtIHVwZGF0ZXMgYW5kIFZCSSBkYXRhICovCiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBjeC0+ZHVhbHdhdGNoX2ppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkgewogCQkJCWN4LT5kdWFsd2F0Y2hfamlmZmllcyA9IGppZmZpZXM7CiAJCQkJY3gxOF9kdWFsd2F0Y2goY3gpOwpAQCAtMzYyLDE4ICszOTIsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLS8qKgotICogbGlzdF9lbnRyeV9pc19wYXN0X2VuZCAtIGNoZWNrIGlmIGEgcHJldmlvdXMgbG9vcCBjdXJzb3IgaXMgb2ZmIGxpc3QgZW5kCi0gKiBAcG9zOgl0aGUgdHlwZSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhIGxvb3AgY3Vyc29yLgotICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCi0gKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCi0gKgotICogQ2hlY2sgaWYgdGhlIGVudHJ5J3MgbGlzdF9oZWFkIGlzIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCB0aHVzIGl0J3Mgbm90IGEKLSAqIHJlYWwgZW50cnkgYnV0IHdhcyB0aGUgbG9vcCBjdXJzb3IgdGhhdCB3YWxrZWQgcGFzdCB0aGUgZW5kCi0gKi8KLSNkZWZpbmUgbGlzdF9lbnRyeV9pc19wYXN0X2VuZChwb3MsIGhlYWQsIG1lbWJlcikgXAotCSgmcG9zLT5tZW1iZXIgPT0gKGhlYWQpKQotCiBzdGF0aWMgc2l6ZV90IGN4MThfY29weV9tZGxfdG9fdXNlcihzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJCXN0cnVjdCBjeDE4X21kbCAqbWRsLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IHVjb3VudCkKIHsKQEAgLTQ5OCw2ICs1MTYsNyBAQAogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaWQtPnR5cGVdOwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192Ymk7CisJc3RydWN0IGN4MThfc3RyZWFtICpzX2lkeDsKIAogCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1JBRCkgewogCQkvKiB5b3UgY2Fubm90IHJlYWQgZnJvbSB0aGVzZSBzdHJlYW0gdHlwZXMuICovCkBAIC01MTYsMjUgKzUzNSwzMyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBTdGFydCBWQkkgY2FwdHVyZSBpZiByZXF1aXJlZCAqLworCS8qIFN0YXJ0IGFzc29jaWF0ZWQgVkJJIG9yIElEWCBzdHJlYW0gY2FwdHVyZSBpZiByZXF1aXJlZCAqLwogCXNfdmJpID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07Ci0JaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JICAgIHRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfdmJpLT5zX2ZsYWdzKSAmJgotCSAgICAhdGVzdF9hbmRfc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykpIHsKLQkJLyogTm90ZTogdGhlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSBpcyBjbGFpbWVkCi0JCSAgIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgTVBHIHN0cmVhbSBpcyBjbGFpbWVkLgotCQkgICBXZSBvbmx5IG5lZWQgdG8gc3RhcnQgdGhlIFZCSSBjYXB0dXJpbmcuICovCi0JCWlmIChjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSkpIHsKLQkJCUNYMThfREVCVUdfV0FSTigiVkJJIGNhcHR1cmUgc3RhcnQgZmFpbGVkXG4iKTsKLQotCQkJLyogRmFpbHVyZSwgY2xlYW4gdXAgYW5kIHJldHVybiBhbiBlcnJvciAqLwotCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKTsKLQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKLQkJCS8qIGFsc28gcmVsZWFzZXMgdGhlIGFzc29jaWF0ZWQgVkJJIHN0cmVhbSAqLwotCQkJY3gxOF9yZWxlYXNlX3N0cmVhbShzKTsKLQkJCXJldHVybiAtRUlPOworCXNfaWR4ID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCS8qCisJCSAqIFRoZSBWQkkgYW5kIElEWCBzdHJlYW1zIHNob3VsZCBoYXZlIGJlZW4gY2xhaW1lZAorCQkgKiBhdXRvbWF0aWNhbGx5LCBpZiBmb3IgaW50ZXJuYWwgdXNlLCB3aGVuIHRoZSBNUEcgc3RyZWFtIHdhcworCQkgKiBjbGFpbWVkLiAgV2Ugb25seSBuZWVkIHRvIHN0YXJ0IHRoZXNlIHN0cmVhbXMgY2FwdHVyaW5nLgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfaWR4LT5zX2ZsYWdzKSAmJgorCQkgICAgIXRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpKSB7CisJCQlpZiAoY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc19pZHgpKSB7CisJCQkJQ1gxOF9ERUJVR19XQVJOKCJJRFggY2FwdHVyZSBzdGFydCBmYWlsZWRcbiIpOworCQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX2lkeC0+c19mbGFncyk7CisJCQkJZ290byBzdGFydF9mYWlsZWQ7CisJCQl9CisJCQlDWDE4X0RFQlVHX0lORk8oIklEWCBjYXB0dXJlIHN0YXJ0ZWRcbiIpOwogCQl9Ci0JCUNYMThfREVCVUdfSU5GTygiVkJJIGluc2VydGlvbiBzdGFydGVkXG4iKTsKKwkJaWYgKHRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfdmJpLT5zX2ZsYWdzKSAmJgorCQkgICAgIXRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpKSB7CisJCQlpZiAoY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc192YmkpKSB7CisJCQkJQ1gxOF9ERUJVR19XQVJOKCJWQkkgY2FwdHVyZSBzdGFydCBmYWlsZWRcbiIpOworCQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncyk7CisJCQkJZ290byBzdGFydF9mYWlsZWQ7CisJCQl9CisJCQlDWDE4X0RFQlVHX0lORk8oIlZCSSBpbnNlcnRpb24gc3RhcnRlZFxuIik7CisJCX0KIAl9CiAKIAkvKiBUZWxsIHRoZSBjYXJkIHRvIHN0YXJ0IGNhcHR1cmluZyAqLwpAQCAtNTQ3LDE5ICs1NzQsMjkgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogZmFpbHVyZSwgY2xlYW4gdXAgKi8KK3N0YXJ0X2ZhaWxlZDoKIAlDWDE4X0RFQlVHX1dBUk4oIkZhaWxlZCB0byBzdGFydCBjYXB0dXJpbmcgZm9yIHN0cmVhbSAlc1xuIiwgcy0+bmFtZSk7CiAKLQkvKiBOb3RlOiB0aGUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJIGlzIHJlbGVhc2VkCi0JICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSBNUEcgc3RyZWFtIGlzIHJlbGVhc2VkLgotCSAgIFdlIG9ubHkgbmVlZCB0byBzdG9wIHRoZSBWQkkgY2FwdHVyaW5nLiAqLwotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCSAgICB0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykpIHsKLQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSwgMCk7Ci0JCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncyk7CisJLyoKKwkgKiBUaGUgYXNzb2NpYXRlZCBWQkkgYW5kIElEWCBzdHJlYW1zIGZvciBpbnRlcm5hbCB1c2UgYXJlIHJlbGVhc2VkCisJICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBNUEcgc3RyZWFtIGlzIHJlbGVhc2VkLiAgV2Ugb25seSBuZWVkIHRvIHN0b3AKKwkgKiB0aGUgYXNzb2NpYXRlZCBzdHJlYW0uCisJICovCisJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCS8qIFN0b3AgdGhlIElEWCBzdHJlYW0gd2hpY2ggaXMgYWx3YXlzIGZvciBpbnRlcm5hbCB1c2UgKi8KKwkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKSkgeworCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX2lkeCwgMCk7CisJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpOworCQl9CisJCS8qIFN0b3AgdGhlIFZCSSBzdHJlYW0sIGlmIG9ubHkgcnVubmluZyBmb3IgaW50ZXJuYWwgdXNlICovCisJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykgJiYKKwkJICAgICF0ZXN0X2JpdChDWDE4X0ZfU19BUFBMX0lPLCAmc192YmktPnNfZmxhZ3MpKSB7CisJCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpLCAwKTsKKwkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncyk7CisJCX0KIAl9CiAJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOwotCWN4MThfcmVsZWFzZV9zdHJlYW0ocyk7CisJY3gxOF9yZWxlYXNlX3N0cmVhbShzKTsgLyogQWxzbyByZWxlYXNlcyBhc3NvY2lhdGVkIHN0cmVhbXMgKi8KIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNjE4LDYgKzY1NSw4IEBACiB7CiAJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpZC0+dHlwZV07CisJc3RydWN0IGN4MThfc3RyZWFtICpzX3ZiaSA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19pZHggPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKIAogCUNYMThfREVCVUdfSU9DVEwoImNsb3NlKCkgb2YgJXNcbiIsIHMtPm5hbWUpOwogCkBAIC02MjUsMTcgKzY2NCwxOSBAQAogCiAJLyogU3RvcCBjYXB0dXJpbmcgKi8KIAlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpIHsKLQkJc3RydWN0IGN4MThfc3RyZWFtICpzX3ZiaSA9Ci0JCQkmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKLQogCQlDWDE4X0RFQlVHX0lORk8oImNsb3NlIHN0b3BwaW5nIGNhcHR1cmVcbiIpOwotCQkvKiBTcGVjaWFsIGNhc2U6IGEgcnVubmluZyBWQkkgY2FwdHVyZSBmb3IgVkJJIGluc2VydGlvbgotCQkgICBpbiB0aGUgbXBlZyBzdHJlYW0uIE5lZWQgdG8gc3RvcCB0aGF0IHRvby4gKi8KLQkJaWYgKGlkLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCQkgICAgdGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpICYmCi0JCSAgICAhdGVzdF9iaXQoQ1gxOF9GX1NfQVBQTF9JTywgJnNfdmJpLT5zX2ZsYWdzKSkgewotCQkJQ1gxOF9ERUJVR19JTkZPKCJjbG9zZSBzdG9wcGluZyBlbWJlZGRlZCBWQkkgY2FwdHVyZVxuIik7Ci0JCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpLCAwKTsKKwkJaWYgKGlkLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQkJLyogU3RvcCBpbnRlcm5hbCB1c2UgYXNzb2NpYXRlZCBWQkkgYW5kIElEWCBzdHJlYW1zICovCisJCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpICYmCisJCQkgICAgIXRlc3RfYml0KENYMThfRl9TX0FQUExfSU8sICZzX3ZiaS0+c19mbGFncykpIHsKKwkJCQlDWDE4X0RFQlVHX0lORk8oImNsb3NlIHN0b3BwaW5nIGVtYmVkZGVkIFZCSSAiCisJCQkJCQkiY2FwdHVyZVxuIik7CisJCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSwgMCk7CisJCQl9CisJCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpKSB7CisJCQkJQ1gxOF9ERUJVR19JTkZPKCJjbG9zZSBzdG9wcGluZyBJRFggY2FwdHVyZVxuIik7CisJCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX2lkeCwgMCk7CisJCQl9CiAJCX0KIAkJaWYgKGlkLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJgogCQkgICAgdGVzdF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmcy0+c19mbGFncykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmgKaW5kZXggOTJlMmQ1ZC4uNWM4ZmNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuaApAQCAtMzQsMyArMzQsNiBAQAogdm9pZCBjeDE4X211dGUoc3RydWN0IGN4MTggKmN4KTsKIHZvaWQgY3gxOF91bm11dGUoc3RydWN0IGN4MTggKmN4KTsKIAorLyogU2hhcmVkIHdpdGggY3gxOC1hbHNhIG1vZHVsZSAqLworaW50IGN4MThfY2xhaW1fc3RyZWFtKHN0cnVjdCBjeDE4X29wZW5faWQgKmlkLCBpbnQgdHlwZSk7Cit2b2lkIGN4MThfcmVsZWFzZV9zdHJlYW0oc3RydWN0IGN4MThfc3RyZWFtICpzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCmluZGV4IDNlNGZjMTkuLmI4MWRkMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwpAQCAtNzc1LDEwICs3NzUsMTQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX2N4MThfcHJvY2Vzc19pZHhfZGF0YShzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKKwkJCQkgIHN0cnVjdCB2NGwyX2VuY19pZHggKmlkeCkKK3sKKwlpbnQgY29uc3VtZWQsIHJlbWFpbmluZzsKKwlzdHJ1Y3QgdjRsMl9lbmNfaWR4X2VudHJ5ICplX2lkeDsKKwlzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5ICplX2J1ZjsKKworCS8qIEZyYW1lIHR5cGUgbG9va3VwOiAxPUksIDI9UCwgND1CICovCisJY29uc3QgaW50IG1hcHBpbmdbOF0gPSB7CisJCS0xLCBWNEwyX0VOQ19JRFhfRlJBTUVfSSwgVjRMMl9FTkNfSURYX0ZSQU1FX1AsCisJCS0xLCBWNEwyX0VOQ19JRFhfRlJBTUVfQiwgLTEsIC0xLCAtMQorCX07CisKKwkvKgorCSAqIEFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGEgYnVmIGhvbGRzIGFuIGludGVncmFsIG51bWJlciBvZgorCSAqIHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkgb2JqZWN0cyBhbmQgaXMgcHJvcGVybHkgYWxpZ25lZC4KKwkgKiBUaGlzIGlzIGVuZm9yY2VkIGJ5IHRoZSBtb2R1bGUgb3B0aW9ucyBvbiBJRFggYnVmZmVyIHNpemVzLgorCSAqLworCXJlbWFpbmluZyA9IGJ1Zi0+Ynl0ZXN1c2VkIC0gYnVmLT5yZWFkcG9zOworCWNvbnN1bWVkID0gMDsKKwllX2lkeCA9ICZpZHgtPmVudHJ5W2lkeC0+ZW50cmllc107CisJZV9idWYgPSAoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSAqKSAmYnVmLT5idWZbYnVmLT5yZWFkcG9zXTsKKworCXdoaWxlIChyZW1haW5pbmcgPj0gc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpICYmCisJICAgICAgIGlkeC0+ZW50cmllcyA8IFY0TDJfRU5DX0lEWF9FTlRSSUVTKSB7CisKKwkJZV9pZHgtPm9mZnNldCA9ICgoKHU2NCkgbGUzMl90b19jcHUoZV9idWYtPm9mZnNldF9oaWdoKSkgPDwgMzIpCisJCQkJfCBsZTMyX3RvX2NwdShlX2J1Zi0+b2Zmc2V0X2xvdyk7CisKKwkJZV9pZHgtPnB0cyA9ICgoKHU2NCkgKGxlMzJfdG9fY3B1KGVfYnVmLT5wdHNfaGlnaCkgJiAxKSkgPDwgMzIpCisJCQkgICAgIHwgbGUzMl90b19jcHUoZV9idWYtPnB0c19sb3cpOworCisJCWVfaWR4LT5sZW5ndGggPSBsZTMyX3RvX2NwdShlX2J1Zi0+bGVuZ3RoKTsKKworCQllX2lkeC0+ZmxhZ3MgPSBtYXBwaW5nW2xlMzJfdG9fY3B1KGVfYnVmLT5mbGFncykgJiAweDddOworCisJCWVfaWR4LT5yZXNlcnZlZFswXSA9IDA7CisJCWVfaWR4LT5yZXNlcnZlZFsxXSA9IDA7CisKKwkJaWR4LT5lbnRyaWVzKys7CisJCWVfaWR4ID0gJmlkeC0+ZW50cnlbaWR4LT5lbnRyaWVzXTsKKwkJZV9idWYrKzsKKworCQlyZW1haW5pbmcgLT0gc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpOworCQljb25zdW1lZCArPSBzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSk7CisJfQorCisJLyogU3dhbGxvdyBhbnkgcGFydGlhbCBlbnRyaWVzIGF0IHRoZSBlbmQsIGlmIHRoZXJlIGFyZSBhbnkgKi8KKwlpZiAocmVtYWluaW5nID4gMCAmJiByZW1haW5pbmcgPCBzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSkpCisJCWNvbnN1bWVkICs9IHJlbWFpbmluZzsKKworCWJ1Zi0+cmVhZHBvcyArPSBjb25zdW1lZDsKKwlyZXR1cm4gY29uc3VtZWQ7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9wcm9jZXNzX2lkeF9kYXRhKHN0cnVjdCBjeDE4X3N0cmVhbSAqcywgc3RydWN0IGN4MThfbWRsICptZGwsCisJCQkJIHN0cnVjdCB2NGwyX2VuY19pZHggKmlkeCkKK3sKKwlpZiAocy0+dHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1kbC0+Y3Vycl9idWYgPT0gTlVMTCkKKwkJbWRsLT5jdXJyX2J1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJm1kbC0+YnVmX2xpc3QsCisJCQkJCQkgc3RydWN0IGN4MThfYnVmZmVyLCBsaXN0KTsKKworCWlmIChsaXN0X2VudHJ5X2lzX3Bhc3RfZW5kKG1kbC0+Y3Vycl9idWYsICZtZGwtPmJ1Zl9saXN0LCBsaXN0KSkgeworCQkvKgorCQkgKiBGb3Igc29tZSByZWFzb24gd2UndmUgZXhoYXVzdGVkIHRoZSBidWZmZXJzLCBidXQgdGhlIE1ETAorCQkgKiBvYmplY3Qgc3RpbGwgc2FpZCBzb21lIGRhdGEgd2FzIHVucmVhZC4KKwkJICogRml4IHRoYXQgYW5kIGJhaWwgb3V0LgorCQkgKi8KKwkJbWRsLT5yZWFkcG9zID0gbWRsLT5ieXRlc3VzZWQ7CisJCXJldHVybiAwOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShtZGwtPmN1cnJfYnVmLCAmbWRsLT5idWZfbGlzdCwgbGlzdCkgeworCisJCS8qIFNraXAgYW55IGVtcHR5IGJ1ZmZlcnMgaW4gdGhlIE1ETCAqLworCQlpZiAobWRsLT5jdXJyX2J1Zi0+cmVhZHBvcyA+PSBtZGwtPmN1cnJfYnVmLT5ieXRlc3VzZWQpCisJCQljb250aW51ZTsKKworCQltZGwtPnJlYWRwb3MgKz0gX2N4MThfcHJvY2Vzc19pZHhfZGF0YShtZGwtPmN1cnJfYnVmLCBpZHgpOworCisJCS8qIGV4aXQgd2hlbiBNREwgZHJhaW5lZCBvciByZXF1ZXN0IHNhdGlzZmllZCAqLworCQlpZiAoaWR4LT5lbnRyaWVzID49IFY0TDJfRU5DX0lEWF9FTlRSSUVTIHx8CisJCSAgICBtZGwtPmN1cnJfYnVmLT5yZWFkcG9zIDwgbWRsLT5jdXJyX2J1Zi0+Ynl0ZXN1c2VkIHx8CisJCSAgICBtZGwtPnJlYWRwb3MgPj0gbWRsLT5ieXRlc3VzZWQpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3gxOF9nX2VuY19pbmRleChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJc3RydWN0IHY0bDJfZW5jX2lkeCAqaWR4KQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CisJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJczMyIHRtcDsKKwlzdHJ1Y3QgY3gxOF9tZGwgKm1kbDsKKworCWlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkgLyogTW9kdWxlIG9wdGlvbnMgaW5oaWJpdGVkIElEWCBzdHJlYW0gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDb21wdXRlIHRoZSBiZXN0IGNhc2UgbnVtYmVyIG9mIGVudHJpZXMgd2UgY2FuIGJ1ZmZlciAqLworCXRtcCA9IHMtPmJ1ZmZlcnMgLQorCQkJICBzLT5idWZzX3Blcl9tZGwgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhfRldfTURMX01JTjsKKwlpZiAodG1wIDw9IDApCisJCXRtcCA9IDE7CisJdG1wID0gdG1wICogcy0+YnVmX3NpemUgLyBzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSk7CisKKwkvKiBGaWxsIG91dCB0aGUgaGVhZGVyIG9mIHRoZSByZXR1cm4gc3RydWN0dXJlICovCisJaWR4LT5lbnRyaWVzID0gMDsKKwlpZHgtPmVudHJpZXNfY2FwID0gdG1wOworCW1lbXNldChpZHgtPnJlc2VydmVkLCAwLCBzaXplb2YoaWR4LT5yZXNlcnZlZCkpOworCisJLyogUHVsbCBJRFggTURMcyBhbmQgYnVmZmVycyBmcm9tIHFfZnVsbCBhbmQgcG9wdWxhdGUgdGhlIGVudHJpZXMgKi8KKwlkbyB7CisJCW1kbCA9IGN4MThfZGVxdWV1ZShzLCAmcy0+cV9mdWxsKTsKKwkJaWYgKG1kbCA9PSBOVUxMKSAvKiBObyBtb3JlIElEWCBkYXRhIHJpZ2h0IG5vdyAqLworCQkJYnJlYWs7CisKKwkJLyogRXh0cmFjdCB0aGUgSW5kZXggZW50cnkgZGF0YSBmcm9tIHRoZSBNREwgYW5kIGJ1ZmZlcnMgKi8KKwkJY3gxOF9wcm9jZXNzX2lkeF9kYXRhKHMsIG1kbCwgaWR4KTsKKwkJaWYgKG1kbC0+cmVhZHBvcyA8IG1kbC0+Ynl0ZXN1c2VkKSB7CisJCQkvKiBXZSBmaW5pc2hlZCB3aXRoIGRhdGEgcmVtYWluaW5nLCBwdXNoIHRoZSBNREwgYmFjayAqLworCQkJY3gxOF9wdXNoKHMsIG1kbCwgJnMtPnFfZnVsbCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFdlIGRyYWluZWQgdGhpcyBNREwsIHNjaGVkdWxlIGl0IHRvIGdvIHRvIHRoZSBmaXJtd2FyZSAqLworCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mcmVlKTsKKworCX0gd2hpbGUgKGlkeC0+ZW50cmllcyA8IFY0TDJfRU5DX0lEWF9FTlRSSUVTKTsKKworCS8qIFRlbGwgdGhlIHdvcmsgaGFuZGxlciB0byBzZW5kIGZyZWUgSURYIE1ETHMgdG8gdGhlIGZpcm13YXJlICovCisJY3gxOF9zdHJlYW1fbG9hZF9md19xdWV1ZShzKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDE4X2VuY29kZXJfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwppbmRleCBmMjMxZGQwLi42ZGNjZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY3gxOC1tYWlsYm94LmgiCiAjaW5jbHVkZSAiY3gxOC1xdWV1ZS5oIgogI2luY2x1ZGUgImN4MTgtc3RyZWFtcy5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS1wY20uaCIgLyogRklYTUUgbWFrZSBjb25maWd1cmFibGUgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKnJwdV9zdHJbXSA9IHsgIkFQVSIsICJDUFUiLCAiRVBVIiwgIkhQVSIgfTsKIApAQCAtMTU3LDYgKzE1OCwzNCBAQAogCX0KIH0KIAorCitzdGF0aWMgdm9pZCBjeDE4X21kbF9zZW5kX3RvX2Fsc2Eoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCisJCQkJICBzdHJ1Y3QgY3gxOF9tZGwgKm1kbCkKK3sKKwlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKKworCWlmIChtZGwtPmJ5dGVzdXNlZCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBXZSBpZ25vcmUgbWRsIGFuZCBidWYgcmVhZHBvcyBhY2NvdW50aW5nIGhlcmUgLSBpdCBkb2Vzbid0IG1hdHRlciAqLworCisJLyogVGhlIGxpa2VseSBjYXNlICovCisJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm1kbC0+YnVmX2xpc3QpKSB7CisJCWJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJm1kbC0+YnVmX2xpc3QsIHN0cnVjdCBjeDE4X2J1ZmZlciwKKwkJCQkgICAgICAgbGlzdCk7CisJCWlmIChidWYtPmJ5dGVzdXNlZCkKKwkJCWN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2soY3gtPmFsc2EsIGJ1Zi0+YnVmLAorCQkJCQkJICBidWYtPmJ5dGVzdXNlZCk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJm1kbC0+YnVmX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJ1Zi0+Ynl0ZXN1c2VkID09IDApCisJCQlicmVhazsKKwkJY3gtPnBjbV9hbm5vdW5jZV9jYWxsYmFjayhjeC0+YWxzYSwgYnVmLT5idWYsIGJ1Zi0+Ynl0ZXN1c2VkKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGVwdV9kbWFfZG9uZShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X2luX3dvcmtfb3JkZXIgKm9yZGVyKQogewogCXUzMiBoYW5kbGUsIG1kbF9hY2tfY291bnQsIGlkOwpAQCAtMjIzLDExICsyNTIsMjEgQEAKIAkJQ1gxOF9ERUJVR19ISV9ETUEoIiVzIHJlY3YgYnl0ZXN1c2VkID0gJWRcbiIsCiAJCQkJICBzLT5uYW1lLCBtZGwtPmJ5dGVzdXNlZCk7CiAKLQkJaWYgKHMtPnR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFMpCi0JCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mdWxsKTsKLQkJZWxzZSB7CisJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKSB7CiAJCQljeDE4X21kbF9zZW5kX3RvX2R2YihzLCBtZGwpOwogCQkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnJlZSk7CisJCX0gZWxzZSBpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ00pIHsKKwkJCS8qIFBhc3MgdGhlIGRhdGEgdG8gY3gxOC1hbHNhICovCisJCQlpZiAoY3gtPnBjbV9hbm5vdW5jZV9jYWxsYmFjayAhPSBOVUxMKSB7CisJCQkJY3gxOF9tZGxfc2VuZF90b19hbHNhKGN4LCBzLCBtZGwpOworCQkJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2ZyZWUpOworCQkJfSBlbHNlIHsKKwkJCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mdWxsKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2Z1bGwpOworCQkJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKQorCQkJCWN4MThfc3RyZWFtX3JvdGF0ZV9pZHhfbWRscyhjeCk7CiAJCX0KIAl9CiAJLyogUHV0IGFzIG1hbnkgTURMcyBhcyBwb3NzaWJsZSBiYWNrIGludG8gZncgdXNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYwppbmRleCA2MzMwNDgyLi5hZWZjOGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKQEAgLTQxOSw2ICs0MTksOSBAQAogewogCXN0cnVjdCBjeDE4X21kbCAqbWRsOwogCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmOworCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OworCisJQ1gxOF9ERUJVR19JTkZPKCJEZWFsbG9jYXRpbmcgYnVmZmVycyBmb3IgJXMgc3RyZWFtXG4iLCBzLT5uYW1lKTsKIAogCS8qIG1vdmUgYWxsIGJ1ZmZlcnMgdG8gYnVmX3Bvb2wgYW5kIGFsbCBNRExzIHRvIHFfaWRsZSAqLwogCWN4MThfdW5sb2FkX3F1ZXVlcyhzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwppbmRleCA5ODdhOTMwLi4wNTQ0NTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCkBAIC0zMTksMTEgKzMxOSwyNyBAQAogCiAJLyogVGVhcmRvd24gYWxsIHN0cmVhbXMgKi8KIAlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgQ1gxOF9NQVhfU1RSRUFNUzsgdHlwZSsrKSB7Ci0JCWlmIChjeC0+c3RyZWFtc1t0eXBlXS5kdmIuZW5hYmxlZCkgewotCQkJY3gxOF9kdmJfdW5yZWdpc3RlcigmY3gtPnN0cmVhbXNbdHlwZV0pOwotCQkJY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQgPSBmYWxzZTsKKworCQkvKiBObyBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBidXQgY2FuIGhhdmUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KKwkJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFMpIHsKKwkJCWlmIChjeC0+c3RyZWFtc1t0eXBlXS5kdmIuZW5hYmxlZCkgeworCQkJCWN4MThfZHZiX3VucmVnaXN0ZXIoJmN4LT5zdHJlYW1zW3R5cGVdKTsKKwkJCQljeC0+c3RyZWFtc1t0eXBlXS5kdmIuZW5hYmxlZCA9IGZhbHNlOworCQkJCWN4MThfc3RyZWFtX2ZyZWUoJmN4LT5zdHJlYW1zW3R5cGVdKTsKKwkJCX0KKwkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyogTm8gc3RydWN0IHZpZGVvX2RldmljZSwgYnV0IGNhbiBoYXZlIGJ1ZmZlcnMgYWxsb2NhdGVkICovCisJCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgeworCQkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSAhPSAwKSB7CisJCQkJY3gtPnN0cmVhbV9idWZmZXJzW3R5cGVdID0gMDsKKwkJCQljeDE4X3N0cmVhbV9mcmVlKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIElmIHN0cnVjdCB2aWRlb19kZXZpY2UgZXhpc3RzLCBjYW4gaGF2ZSBidWZmZXJzIGFsbG9jYXRlZCAqLwogCQl2ZGV2ID0gY3gtPnN0cmVhbXNbdHlwZV0udmlkZW9fZGV2OwogCiAJCWN4LT5zdHJlYW1zW3R5cGVdLnZpZGVvX2RldiA9IE5VTEw7CkBAIC00NDcsNiArNDYzLDMyIEBACiAJY3gxOF9hcGkoY3gsIENYMThfQ1BVX1NFVF9SQVdfVkJJX1BBUkFNLCA2LCBkYXRhKTsKIH0KIAordm9pZCBjeDE4X3N0cmVhbV9yb3RhdGVfaWR4X21kbHMoc3RydWN0IGN4MTggKmN4KQoreworCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCXN0cnVjdCBjeDE4X21kbCAqbWRsOworCisJaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHMpKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gaWYgdGhlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIGxvdyBvbiBNRExzICovCisJaWYgKChhdG9taWNfcmVhZCgmcy0+cV9mcmVlLmRlcHRoKSArIGF0b21pY19yZWFkKCZzLT5xX2J1c3kuZGVwdGgpKSA+PQorCQkJCQkgICAgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYX0ZXX01ETF9NSU4pCisJCXJldHVybjsKKworCS8qIFJldHVybiBpZiB0aGVyZSBhcmUgbm8gTURMcyB0byByb3RhdGUgYmFjayB0byB0aGUgZmlybXdhcmUgKi8KKwlpZiAoYXRvbWljX3JlYWQoJnMtPnFfZnVsbC5kZXB0aCkgPCAyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRha2UgdGhlIG9sZGVzdCBJRFggTURMIHN0aWxsIGhvbGRpbmcgZGF0YSwgYW5kIGRpc2NhcmQgaXRzIGluZGV4CisJICogZW50cmllcyBieSBzY2hlZHVsaW5nIHRoZSBNREwgdG8gZ28gYmFjayB0byB0aGUgZmlybXdhcmUKKwkgKi8KKwltZGwgPSBjeDE4X2RlcXVldWUocywgJnMtPnFfZnVsbCk7CisJaWYgKG1kbCAhPSBOVUxMKQorCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mcmVlKTsKK30KKwogc3RhdGljCiBzdHJ1Y3QgY3gxOF9xdWV1ZSAqX2N4MThfc3RyZWFtX3B1dF9tZGxfZncoc3RydWN0IGN4MThfc3RyZWFtICpzLAogCQkJCQkgICBzdHJ1Y3QgY3gxOF9tZGwgKm1kbCkKQEAgLTU0Niw4ICs1ODgsOSBAQAogCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwogCWludCBjYXB0eXBlID0gMDsKIAlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHByaXY7CisJc3RydWN0IGN4MThfc3RyZWFtICpzX2lkeDsKIAotCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQorCWlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0IGVuY29kZXIgc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKQEAgLTU2MSw2ICs2MDQsOSBAQAogCQljeC0+c2VhcmNoX3BhY2tfaGVhZGVyID0gMDsKIAkJYnJlYWs7CiAKKwljYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWDoKKwkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX0lOREVYOworCQlicmVhazsKIAljYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX1RTOgogCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVFM7CiAJCWJyZWFrOwpAQCAtNjM1LDExICs2ODEsMTMgQEAKIAkJCWN4MThfdmJpX3NldHVwKHMpOwogCiAJCS8qCi0JCSAqIGFzc2lnbiBwcm9ncmFtIGluZGV4IGluZm8uCi0JCSAqIE1hc2sgNzogc2VsZWN0IEkvUC9CLCBOdW1fcmVxOiA0MDAgbWF4Ci0JCSAqIEZJWE1FIC0gY3VycmVudGx5IHdlIGhhdmUgdGhpcyBoYXJkY29kZWQgYXMgZGlzYWJsZWQKKwkJICogU2VsZWN0IHRvIHJlY2VpdmUgSSwgUCwgYW5kIEIgZnJhbWUgaW5kZXggZW50cmllcywgaWYgdGhlCisJCSAqIGluZGV4IHN0cmVhbSBpcyBlbmFibGVkLiAgT3RoZXJ3aXNlIGRpc2FibGUgaW5kZXggZW50cnkKKwkJICogZ2VuZXJhdGlvbi4KIAkJICovCi0JCWN4MThfdmFwaV9yZXN1bHQoY3gsIGRhdGEsIENYMThfQ1BVX1NFVF9JTkRFWFRBQkxFLCAxLCAwKTsKKwkJc19pZHggPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwkJY3gxOF92YXBpX3Jlc3VsdChjeCwgZGF0YSwgQ1gxOF9DUFVfU0VUX0lOREVYVEFCTEUsIDIsCisJCQkJIHMtPmhhbmRsZSwgY3gxOF9zdHJlYW1fZW5hYmxlZChzX2lkeCkgPyA3IDogMCk7CiAKIAkJLyogQ2FsbCBvdXQgdG8gdGhlIGNvbW1vbiBDWDIzNDF4IEFQSSBzZXR1cCBmb3IgdXNlciBjb250cm9scyAqLwogCQlwcml2LmN4ID0gY3g7CkBAIC02OTcsNiArNzQ1LDcgQEAKIAlhdG9taWNfaW5jKCZjeC0+dG90X2NhcHR1cmluZyk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKTsKIAogdm9pZCBjeDE4X3N0b3BfYWxsX2NhcHR1cmVzKHN0cnVjdCBjeDE4ICpjeCkKIHsKQEAgLTcwNSw3ICs3NTQsNyBAQAogCWZvciAoaSA9IENYMThfTUFYX1NUUkVBTVMgLSAxOyBpID49IDA7IGktLSkgewogCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaV07CiAKLQkJaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJCWlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpCiAJCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHMsIDApOwpAQCAtNzE3LDcgKzc2Niw3IEBACiAJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7CiAJdW5zaWduZWQgbG9uZyB0aGVuOwogCi0JaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHlvdSBhcmUgYWxsb3dlZCB0byBzdG9wIHRoZSBjYXB0dXJlCkBAIC03NjIsNiArODExLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChjeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKTsKIAogdTMyIGN4MThfZmluZF9oYW5kbGUoc3RydWN0IGN4MTggKmN4KQogewpAQCAtNzg5LDcgKzgzOSw3IEBACiAJCXMgPSAmY3gtPnN0cmVhbXNbaV07CiAJCWlmIChzLT5oYW5kbGUgIT0gaGFuZGxlKQogCQkJY29udGludWU7Ci0JCWlmIChzLT52aWRlb19kZXYgfHwgcy0+ZHZiLmVuYWJsZWQpCisJCWlmIChjeDE4X3N0cmVhbV9lbmFibGVkKHMpKQogCQkJcmV0dXJuIHM7CiAJfQogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oCmluZGV4IDRhMDFkYjUuLjBiZmYwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmgKQEAgLTI4LDYgKzI4LDE2IEBACiBpbnQgY3gxOF9zdHJlYW1zX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCk7CiB2b2lkIGN4MThfc3RyZWFtc19jbGVhbnVwKHN0cnVjdCBjeDE4ICpjeCwgaW50IHVucmVnaXN0ZXIpOwogCisjZGVmaW5lIENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF9GV19NRExfTUlOICgzKQordm9pZCBjeDE4X3N0cmVhbV9yb3RhdGVfaWR4X21kbHMoc3RydWN0IGN4MTggKmN4KTsKKworc3RhdGljIGlubGluZSBib29sIGN4MThfc3RyZWFtX2VuYWJsZWQoc3RydWN0IGN4MThfc3RyZWFtICpzKQoreworCXJldHVybiBzLT52aWRlb19kZXYgfHwgcy0+ZHZiLmVuYWJsZWQgfHwKKwkgICAgICAgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYICYmCisJCXMtPmN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdICE9IDApOworfQorCiAvKiBSZWxhdGVkIHRvIHN1Ym1pc3Npb24gb2YgbWRscyB0byBmaXJtd2FyZSAqLwogc3RhdGljIGlubGluZSB2b2lkIGN4MThfc3RyZWFtX2xvYWRfZndfcXVldWUoc3RydWN0IGN4MThfc3RyZWFtICpzKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCmluZGV4IDljMGI1YmIuLjNlMWFlYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2RlZmluZSBDWDE4X0RSSVZFUl9OQU1FICJjeDE4IgogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SIDEKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUiAzCisjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgNAogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMAogCiAjZGVmaW5lIENYMThfVkVSU0lPTiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCmluZGV4IDg2ODgwNmUuLjJjMDA5ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaApAQCAtMTkxLDcgKzE5MSw4IEBACiAjZGVmaW5lIENYMThfQ1BVX1NFVF9NRURJQU5fQ09SSU5HICAgICAgICAgICAJKENQVV9DTURfTUFTS19DQVBUVVJFIHwgMHgwMDBFKQogCiAvKiBEZXNjcmlwdGlvbjogVGhpcyBjb21tYW5kIHNldCB0aGUgcGljdHVyZSB0eXBlIG1hc2sgZm9yIGluZGV4IGZpbGUKLSAgIElOWzBdIC0gCTAgPSBkaXNhYmxlIGluZGV4IGZpbGUgb3V0cHV0CisgICBJTlswXSAtIFRhc2sgaGFuZGxlIChpZ25vcmVkIGJ5IGZpcm13YXJlKQorICAgSU5bMV0gLSAJMCA9IGRpc2FibGUgaW5kZXggZmlsZSBvdXRwdXQKIAkJCTEgPSBvdXRwdXQgSSBwaWN0dXJlCiAJCQkyID0gUCBwaWN0dXJlCiAJCQk0ID0gQiBwaWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCmluZGV4IGM1MDgyYTQuLjY0ZTAyNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCkBAIC00NjQsOSArNDY0LDkgQEAKIAkJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCiAJCWR2Yi0+ZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzF4eF90dW5lcl9jYWxsYmFjazsKIAotCQlpZiAoZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCisJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCiAJCQkgICAgICAgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKLQkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpIDwgMCkgeworCQkJICAgICAgICZjbnh0X3JkZTI1MF90dW5lcmNvbmZpZykpIHsKIAkJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CkBAIC00ODYsOSArNDg2LDkgQEAKIAkJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCiAJCWR2Yi0+ZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzF4eF90dW5lcl9jYWxsYmFjazsKIAotCQlpZiAoZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCisJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCiAJCQkgICAgICAgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKLQkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpIDwgMCkgeworCQkJICAgICAgICZjbnh0X3JkZTI1MF90dW5lcmNvbmZpZykpIHsKIAkJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYwppbmRleCAxNTgyNmY5Li5jNTc3MWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWlucHV0LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCWN4MjMxeHhfaXJfc3RhcnQoaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgZGV2LT5ib2FyZC5pcl9jb2RlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKaW5kZXggODhjMGQyNC4uMmFiOTdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKQEAgLTY4MSw3ICs2ODEsNyBAQAogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX1ZJREVPX0lEOgogCQlyZXR1cm4gICJTRVRfVklERU9fSUQiOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX1BDUl9JRDoKLQkJcmV0dXJuICAiU0VUX1BDUl9QSUQiOworCQlyZXR1cm4gICJTRVRfUENSX0lEIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9GUkFNRV9SQVRFOgogCQlyZXR1cm4gICJTRVRfRlJBTUVfUkFURSI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfRlJBTUVfU0laRToKQEAgLTY5Myw3ICs2OTMsNyBAQAogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0FTUEVDVF9SQVRJTzoKIAkJcmV0dXJuICAiU0VUX0FTUEVDVF9SQVRJTyI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfRE5SX0ZJTFRFUl9NT0RFOgotCQlyZXR1cm4gICJTRVRfRE5SX0ZJTFRFUl9QUk9QUyI7CisJCXJldHVybiAgIlNFVF9ETlJfRklMVEVSX01PREUiOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0ROUl9GSUxURVJfUFJPUFM6CiAJCXJldHVybiAgIlNFVF9ETlJfRklMVEVSX1BST1BTIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9DT1JJTkdfTEVWRUxTOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggMWVjNDgxNi4uZDYzOTE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC0yNzQsNiArMjc0LDMxIEBACiAJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAl9LAorCVtDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJMRUFEVEVLIFdpbkZhc3QgUHhUVjEyMDAiLAorCQkucG9ydGEgICAgICAgICAgPSBDWDIzODg1X0FOQUxPR19WSURFTywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfYWRkciAgICAgPSAweDYxLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IENYMjU4NDBfVklOMl9DSDEgfAorCQkJCSAgQ1gyNTg0MF9WSU41X0NIMiB8CisJCQkJICBDWDI1ODQwX05PTkUwX0NIMywKKwkJfSwgeworCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IENYMjU4NDBfQ09NUE9TSVRFMSwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gQ1gyNTg0MF9TVklERU9fTFVNQTMgfAorCQkJCSAgQ1gyNTg0MF9TVklERU9fQ0hST01BNCwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT05FTlQsCisJCQkudm11eCAgID0gQ1gyNTg0MF9WSU43X0NIMSB8CisJCQkJICBDWDI1ODQwX1ZJTjZfQ0gyIHwKKwkJCQkgIENYMjU4NDBfVklOOF9DSDMgfAorCQkJCSAgQ1gyNTg0MF9DT01QT05FTlRfT04sCisJCX0gfSwKKwl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2Jjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9ib2FyZHMpOwogCkBAIC00MTcsNiArNDQyLDEwIEBACiAJCS5zdWJ2ZW5kb3IgPSAweDE0ZjEsCiAJCS5zdWJkZXZpY2UgPSAweDg1NzgsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODU1OFBSTywKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDEwN2QsCisJCS5zdWJkZXZpY2UgPSAweDZmMjIsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMCwKIAl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2lkY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfc3ViaWRzKTsKQEAgLTYxNyw2ICs2NDYsNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwOgogCQkvKiBUdW5lciBSZXNldCBDb21tYW5kICovCiAJCWJpdG1hc2sgPSAweDA0OwogCQlicmVhazsKQEAgLTc2OSw2ICs3OTksNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwOgogCQkvKiBHUElPLTIgIHhjMzAyOCB0dW5lciByZXNldCAqLwogCiAJCS8qIFRoZSBmb2xsb3dpbmcgR1BJTydzIGFyZSBvbiB0aGUgaW50ZXJuYWwgQVZDb3JlIChjeDI1ODQwKSAqLwpAQCAtMTA3Niw2ICsxMTA3LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTVlHSUNBX1g4NTA2OgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTI6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjkwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDA6CiAJCWRldi0+c2RfY3gyNTg0MCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2J1c1syXS5pMmNfYWRhcCwKIAkJCQkiY3gyNTg0MCIsICJjeDI1ODQwIiwgMHg4OCA+PiAxLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggZTQ1ZDJkZi4uOTM5MDc5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTU0Miw2ICs1NDIsOSBAQAogCS5vc2NfY2xrX2ZyZXEgPSAzMDQwMCwgLyogaW4ga0h6ICovCiAJLmlmX2ZyZXEgPSAwLCAvKiB6ZXJvIElGICovCiAJLnppZl9zd2FwX2lxID0gMSwKKwkuYWdjX21pbiA9IDB4MkUsCisJLmFnY19tYXggPSAweEZGLAorCS5hZ2NfaG9sZF9sb29wID0gMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWF4MjE2NV9jb25maWcgbXlnaWNfeDg1NThwcm9fbWF4MjE2NV9jZmcxID0gewpAQCAtNTU4LDYgKzU2MSw5IEBACiAJLm9zY19jbGtfZnJlcSA9IDMwNDAwLCAvKiBpbiBrSHogKi8KIAkuaWZfZnJlcSA9IDAsIC8qIHplcm8gSUYgKi8KIAkuemlmX3N3YXBfaXEgPSAxLAorCS5hZ2NfbWluID0gMHgyRSwKKwkuYWdjX21heCA9IDB4RkYsCisJLmFnY19ob2xkX2xvb3AgPSAwLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXgyMTY1X2NvbmZpZyBteWdpY194ODU1OHByb19tYXgyMTY1X2NmZzIgPSB7CkBAIC05OTQsMTUgKzEwMDAsOCBAQAogCQluZXR1cF9nZXRfY2FyZF9pbmZvKCZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXAsICZjaW5mbyk7CiAJCW1lbWNweShwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWMsCiAJCQkJY2luZm8ucG9ydFtwb3J0LT5uciAtIDFdLm1hYywgNik7Ci0JCXByaW50ayhLRVJOX0lORk8gIk5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQgcG9ydCVkIE1BQz0iCi0JCQkiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCi0JCQlwb3J0LT5uciwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1swXSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1sxXSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1syXSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1szXSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1s0XSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1s1XSk7CisJCXByaW50ayhLRVJOX0lORk8gIk5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQgcG9ydCVkIE1BQz0lcE1cbiIsCisJCQlwb3J0LT5uciwgcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjKTsKIAogCQluZXR1cF9jaV9pbml0KHBvcnQpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCmluZGV4IDc2OGVlYzkuLjljNjYyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJZGV2LT5pcl9pbnB1dCA9IGlyOwogCWN4MjM4ODVfaW5wdXRfaXJfc3RhcnQoZGV2KTsKIAotCXJldCA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5kZXYsIGlyX2NvZGVzKTsKKwlyZXQgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2RlcywgTlVMTCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IDg5MzRkNjEuLjJkM2FjOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgImN4MjM4ODUtaW9jdGwuaCIKKyNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4iKTsKQEAgLTE1MDUsNiArMTUwNiwxOCBAQAogCQkJdHVuX3NldHVwLnR1bmVyX2NhbGxiYWNrID0gY3gyMzg4NV90dW5lcl9jYWxsYmFjazsKIAogCQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKKworCQkJaWYgKGRldi0+Ym9hcmQgPT0gQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDApIHsKKwkJCQlzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RybCA9IHsKKwkJCQkJLmZuYW1lID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkUsCisJCQkJCS5tYXhfbGVuID0gNjQKKwkJCQl9OworCQkJCXN0cnVjdCB2NGwyX3ByaXZfdHVuX2NvbmZpZyBjZmcgPSB7CisJCQkJCS50dW5lciA9IGRldi0+dHVuZXJfdHlwZSwKKwkJCQkJLnByaXYgPSAmY3RybAorCQkJCX07CisJCQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgdHVuZXIsIHNfY29uZmlnLCAmY2ZnKTsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggMDhiM2Y2Yi4uMGUzYTk4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCkBAIC04MSw2ICs4MSw3IEBACiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FODAwICAgIDI1CiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyOTAgICAgICAgIDI2CiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfTVlHSUNBX1g4NTU4UFJPICAgICAgICAgIDI3CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwIDI4CiAKICNkZWZpbmUgR1BJT18wIDB4MDAwMDAwMDEKICNkZWZpbmUgR1BJT18xIDB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwppbmRleCAzODVlY2Q1Li5mMjQ2MWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCkBAIC03MzQsMTAgKzczNCw4IEBACiAJCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAidmlkX2lucHV0IDB4JXhcbiIsCiAJCQl2aWRfaW5wdXQpOwogCQlyZWcgPSB2aWRfaW5wdXQgJiAweGZmOwotCQlpZiAoKHZpZF9pbnB1dCAmIENYMjU4NDBfU1ZJREVPX09OKSA9PSBDWDI1ODQwX1NWSURFT19PTikKLQkJCWlzX2NvbXBvc2l0ZSA9IDA7Ci0JCWVsc2UgaWYgKCh2aWRfaW5wdXQgJiBDWDI1ODQwX0NPTVBPTkVOVF9PTikgPT0gMCkKLQkJCWlzX2NvbXBvc2l0ZSA9IDE7CisJCWlzX2NvbXBvc2l0ZSA9ICFpc19jb21wb25lbnQgJiYKKwkJCSgodmlkX2lucHV0ICYgQ1gyNTg0MF9TVklERU9fT04pICE9IENYMjU4NDBfU1ZJREVPX09OKTsKIAogCQl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwgIm11eCBjZmcgMHgleCBjb21wPSVkXG4iLAogCQkJcmVnLCBpc19jb21wb3NpdGUpOwpAQCAtMTM0NywzMCArMTM0NSw1OSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgY3gyNTg0MF9zX2F1ZGlvX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTggdjsKKworCWlmIChpc19jeDI1ODN4KHN0YXRlKSB8fCBpc19jeDIzODh4KHN0YXRlKSB8fCBpc19jeDIzMXh4KHN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwgIiVzIGF1ZGlvIG91dHB1dFxuIiwKKwkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKworCWlmIChlbmFibGUpIHsKKwkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE1KSB8IDB4ODA7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNSwgdik7CisJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgfCAweDAzOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsIHYpOworCX0gZWxzZSB7CisJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNSkgJiB+KDB4ODApOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIHYpOworCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTYpICYgfigweDAzKTsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCB2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3gyNTg0MF9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTggdjsKIAotCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiJXMgb3V0cHV0XG4iLAorCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiJXMgdmlkZW8gb3V0cHV0XG4iLAogCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOwogCWlmIChlbmFibGUpIHsKIAkJaWYgKGlzX2N4MjM4OHgoc3RhdGUpIHx8IGlzX2N4MjMxeHgoc3RhdGUpKSB7Ci0JCQl1OCB2ID0gKGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDIxKSB8IDB4MGIpOworCQkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDIxKSB8IDB4MGI7CiAJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MjEsIHYpOwogCQl9IGVsc2UgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LAotCQkJCQlpc19jeDI1ODN4KHN0YXRlKSA/IDB4MGMgOiAweDhjKTsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwKLQkJCQkJaXNfY3gyNTgzeChzdGF0ZSkgPyAweDA0IDogMHgwNyk7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTUpIHwgMHgwYzsKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNSwgdik7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTYpIHwgMHgwNDsKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwgdik7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoaXNfY3gyMzg4eChzdGF0ZSkgfHwgaXNfY3gyMzF4eChzdGF0ZSkpIHsKLQkJCXU4IHYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQyMSkgJiB+KDB4MGIpOworCQkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDIxKSAmIH4oMHgwYik7CiAJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MjEsIHYpOwogCQl9IGVsc2UgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCAweDAwKTsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwgMHgwMCk7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTUpICYgfigweDBjKTsKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNSwgdik7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTYpICYgfigweDA0KTsKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwgdik7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0xNjAxLDYgKzE2MjgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgY3gyNTg0MF9hdWRpb19vcHMgPSB7CiAJLnNfY2xvY2tfZnJlcSA9IGN4MjU4NDBfc19jbG9ja19mcmVxLAogCS5zX3JvdXRpbmcgPSBjeDI1ODQwX3NfYXVkaW9fcm91dGluZywKKwkuc19zdHJlYW0gPSBjeDI1ODQwX3NfYXVkaW9fc3RyZWFtLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgY3gyNTg0MF92aWRlb19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKaW5kZXggNWE2NzQ0NS4uNjRiMzUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwpAQCAtNTgzLDE2ICs1ODMsMTggQEAKIHsKIAlzbmRfY3g4OF9jYXJkX3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZT1jaGlwLT5jb3JlOwotCWludCB2LCBiOworCWludCBsZWZ0LCByaWdodCwgdiwgYjsKIAlpbnQgY2hhbmdlZCA9IDA7CiAJdTMyIG9sZDsKIAotCWIgPSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAtIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCWxlZnQgPSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDB4M2Y7CisJcmlnaHQgPSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAmIDB4M2Y7CisJYiA9IHJpZ2h0IC0gbGVmdDsKIAlpZiAoYiA8IDApIHsKLQkgICAgdiA9IDB4M2YgLSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwkgICAgdiA9IDB4M2YgLSBsZWZ0OwogCSAgICBiID0gKC1iKSB8IDB4NDA7CiAJfSBlbHNlIHsKLQkgICAgdiA9IDB4M2YgLSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXTsKKwkgICAgdiA9IDB4M2YgLSByaWdodDsKIAl9CiAJLyogRG8gd2UgcmVhbGx5IGtub3cgdGhpcyB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBJUlFzIG9uPyAqLwogCXNwaW5fbG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IGQ4NDRmMmEuLmVhZjBlZTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKQEAgLTE0NjYsNiArMTQ2NiwxOCBAQAogCQkJLmF1ZGlvcm91dGUgPSA4LAogCQl9LAogCX0sCisJW0NYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMF0gPSB7CisJCS5uYW1lCQk9ICJTYW1zdW5nIFNNVCA3MDIwIERWQi1TIiwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS5yYWRpb190eXBlCT0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuaW5wdXQJCT0geyB7CisJCQkudHlwZQk9IENYODhfVk1VWF9EVkIsCisJCQkudm11eAk9IDAsCisJCX0gfSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKKwl9LAogCVtDWDg4X0JPQVJEX0FEU1RFQ0hfUFRWXzM5MF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJBRFMgVGVjaCBJbnN0YW50IFZpZGVvIFBDSSIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKQEAgLTIzNTUsNiArMjM2NywxNCBAQAogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHgxNDA0LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCisJCS5zdWJkZXZpY2UgPSAweGRjMDAsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxOGFjLAorCQkuc3ViZGV2aWNlID0gMHhkY2NkLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwLAogCX0sewogCQkuc3VidmVuZG9yID0gMHgxNDYxLAogCQkuc3ViZGV2aWNlID0gMHhjMTExLCAvKiBBdmVyTWVkaWEgTTE1MC1EICovCkBAIC0yNjMzLDYgKzI2NTMsOSBAQAogCWNhc2UgOTg1NTk6IC8qIFdpblRWLUhWUjExMDBMUCAoVmlkZW8gbm8gSVIsIFJldGFpbCAtIExvdyBQcm9maWxlKSAqLwogCQkvKiBrbm93biAqLwogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMDoKKwkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDg5ODlGRik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXdhcm5fcHJpbnRrKGNvcmUsICJ3YXJuaW5nOiB1bmtub3duIGhhdXBwYXVnZSBtb2RlbCAjJWRcbiIsCiAJCQkgICAgdHYubW9kZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBiMTQyOTY5Li45NGFiODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtNjc0LDYgKzY3NCwxOTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorCisKK3N0YXRpYyB1OCBzYW1zdW5nX3NtdF83MDIwX2luaXR0YWJbXSA9IHsKKwkgICAgIDB4MDEsIDB4MTUsCisJICAgICAweDAyLCAweDAwLAorCSAgICAgMHgwMywgMHgwMCwKKwkgICAgIDB4MDQsIDB4N0QsCisJICAgICAweDA1LCAweDBGLAorCSAgICAgMHgwNiwgMHgwMiwKKwkgICAgIDB4MDcsIDB4MDAsCisJICAgICAweDA4LCAweDYwLAorCisJICAgICAweDBBLCAweEMyLAorCSAgICAgMHgwQiwgMHgwMCwKKwkgICAgIDB4MEMsIDB4MDEsCisJICAgICAweDBELCAweDgxLAorCSAgICAgMHgwRSwgMHg0NCwKKwkgICAgIDB4MEYsIDB4MDksCisJICAgICAweDEwLCAweDNDLAorCSAgICAgMHgxMSwgMHg4NCwKKwkgICAgIDB4MTIsIDB4REEsCisJICAgICAweDEzLCAweDk5LAorCSAgICAgMHgxNCwgMHg4RCwKKwkgICAgIDB4MTUsIDB4Q0UsCisJICAgICAweDE2LCAweEU4LAorCSAgICAgMHgxNywgMHg0MywKKwkgICAgIDB4MTgsIDB4MUMsCisJICAgICAweDE5LCAweDFCLAorCSAgICAgMHgxQSwgMHgxRCwKKworCSAgICAgMHgxQywgMHgxMiwKKwkgICAgIDB4MUQsIDB4MDAsCisJICAgICAweDFFLCAweDAwLAorCSAgICAgMHgxRiwgMHgwMCwKKwkgICAgIDB4MjAsIDB4MDAsCisJICAgICAweDIxLCAweDAwLAorCSAgICAgMHgyMiwgMHgwMCwKKwkgICAgIDB4MjMsIDB4MDAsCisKKwkgICAgIDB4MjgsIDB4MDIsCisJICAgICAweDI5LCAweDI4LAorCSAgICAgMHgyQSwgMHgxNCwKKwkgICAgIDB4MkIsIDB4MEYsCisJICAgICAweDJDLCAweDA5LAorCSAgICAgMHgyRCwgMHgwNSwKKworCSAgICAgMHgzMSwgMHgxRiwKKwkgICAgIDB4MzIsIDB4MTksCisJICAgICAweDMzLCAweEZDLAorCSAgICAgMHgzNCwgMHgxMywKKwkgICAgIDB4ZmYsIDB4ZmYsCit9OworCisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zbXRfNzAyMF90dW5lcl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXU4IGJ1Zls0XTsKKwl1MzIgZGl2OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSAweDYxLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLAorCQkubGVuID0gc2l6ZW9mKGJ1ZikgfTsKKworCWRpdiA9IHBhcmFtcy0+ZnJlcXVlbmN5IC8gMTI1OworCisJYnVmWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7CisJYnVmWzFdID0gZGl2ICYgMHhmZjsKKwlidWZbMl0gPSAweDg0OyAgLyogMHhDNCAqLworCWJ1ZlszXSA9IDB4MDA7CisKKwlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPCAxNTAwMDAwKQorCQlidWZbM10gfD0gMHgxMDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlpZiAoaTJjX3RyYW5zZmVyKCZkZXYtPmNvcmUtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdfc210XzcwMjBfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKworCWN4X3NldChNT19HUDBfSU8sIDB4MDgwMCk7CisKKwlzd2l0Y2ggKHRvbmUpIHsKKwljYXNlIFNFQ19UT05FX09OOgorCQljeF9zZXQoTU9fR1AwX0lPLCAweDA4KTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfVE9ORV9PRkY6CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwOCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdfc210XzcwMjBfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CisKKwl1OCBkYXRhOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSA4LAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gJmRhdGEsCisJCS5sZW4gPSBzaXplb2YoZGF0YSkgfTsKKworCWN4X3NldChNT19HUDBfSU8sIDB4ODAwMCk7CisKKwlzd2l0Y2ggKHZvbHRhZ2UpIHsKKwljYXNlIFNFQ19WT0xUQUdFX09GRjoKKwkJYnJlYWs7CisJY2FzZSBTRUNfVk9MVEFHRV8xMzoKKwkJZGF0YSA9IElTTDY0MjFfRU4xIHwgSVNMNjQyMV9MTEMxOworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4ODApOworCQlicmVhazsKKwljYXNlIFNFQ19WT0xUQUdFXzE4OgorCQlkYXRhID0gSVNMNjQyMV9FTjEgfCBJU0w2NDIxX0xMQzEgfCBJU0w2NDIxX1ZTRUwxOworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4ODApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9OworCisJcmV0dXJuIChpMmNfdHJhbnNmZXIoJmRldi0+Y29yZS0+aTJjX2FkYXAsICZtc2csIDEpID09IDEpID8gMCA6IC1FSU87Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zbXRfNzAyMF9zdHYwMjk5X3NldF9zeW1ib2xfcmF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwl1MzIgc3JhdGUsIHUzMiByYXRpbykKK3sKKwl1OCBhY2xrID0gMDsKKwl1OCBiY2xrID0gMDsKKworCWlmIChzcmF0ZSA8IDE1MDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDQ3OworCX0gZWxzZSBpZiAoc3JhdGUgPCAzMDAwMDAwKSB7CisJCWFjbGsgPSAweGI3OworCQliY2xrID0gMHg0YjsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgNzAwMDAwMCkgeworCQlhY2xrID0gMHhiNzsKKwkJYmNsayA9IDB4NGY7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDE0MDAwMDAwKSB7CisJCWFjbGsgPSAweGI3OworCQliY2xrID0gMHg1MzsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgMzAwMDAwMDApIHsKKwkJYWNsayA9IDB4YjY7CisJCWJjbGsgPSAweDUzOworCX0gZWxzZSBpZiAoc3JhdGUgPCA0NTAwMDAwMCkgeworCQlhY2xrID0gMHhiNDsKKwkJYmNsayA9IDB4NTE7CisJfQorCisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgxMywgYWNsayk7CisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgxNCwgYmNsayk7CisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgxZiwgKHJhdGlvID4+IDE2KSAmIDB4ZmYpOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MjAsIChyYXRpbyA+PiAgOCkgJiAweGZmKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDIxLCByYXRpbyAmIDB4ZjApOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBzYW1zdW5nX3N0djAyOTlfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKKwkuaW5pdHRhYiA9IHNhbXN1bmdfc210XzcwMjBfaW5pdHRhYiwKKwkubWNsayA9IDg4MDAwMDAwVUwsCisJLmludmVydCA9IDAsCisJLnNraXBfcmVpbml0ID0gMCwKKwkubG9ja19vdXRwdXQgPSBTVFYwMjk5X0xPQ0tPVVRQVVRfTEssCisJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLnNldF9zeW1ib2xfcmF0ZSA9IHNhbXN1bmdfc210XzcwMjBfc3R2MDI5OV9zZXRfc3ltYm9sX3JhdGUsCit9OworCiBzdGF0aWMgaW50IGR2Yl9yZWdpc3RlcihzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CkBAIC0xMjAzLDYgKzEzOTEsMzIgQEAKIAkJfQogCQlicmVhazsKIAkJfQorCWNhc2UgQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwOgorCQlkZXYtPnRzX2dlbl9jbnRybCA9IDB4MDg7CisKKwkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMTAxKTsKKworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDEpOworCQltZGVsYXkoMTAwKTsKKwkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMSk7CisJCW1kZWxheSgyMDApOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwKKwkJCQkJJnNhbXN1bmdfc3R2MDI5OV9jb25maWcsCisJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0KKwkJCQlzYW1zdW5nX3NtdF83MDIwX3R1bmVyX3NldF9wYXJhbXM7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+dHVuZXJfcHJpdiA9CisJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0KKwkJCQlzYW1zdW5nX3NtdF83MDIwX3NldF92b2x0YWdlOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdG9uZSA9CisJCQkJc2Ftc3VuZ19zbXRfNzAyMF9zZXRfdG9uZTsKKwkJfQorCisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCmluZGV4IGY5ZmRhMTguLmRlMTgwZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJc3RydWN0IGN4ODhfSVIgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gTlVMTDsKLQlpbnQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwogCWludCBlcnIgPSAtRU5PTUVNOwogCiAJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKQEAgLTM4Myw3ICszODMsNyBAQAogCWN4ODhfaXJfc3RhcnQoY29yZSwgaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCmluZGV4IGJiNTEwNDguLjMzOGFmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKQEAgLTExMCw2ICsxMTAsOSBAQAogCQljYXNlIENYODhfQk9BUkRfUENIRFRWX0hENTUwMDoKIAkJCWN4X3dyaXRlKFRTX1NPUF9TVEFULCAxPDwxMyk7CiAJCQlicmVhazsKKwkJY2FzZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjA6CisJCQljeF93cml0ZShUU19TT1BfU1RBVCwgMHgwMCk7CisJCQlicmVhazsKIAkJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU1BMVVNfUzE6CiAJCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNFMl9TMToKIAkJCWN4X3dyaXRlKE1PX1BJTk1VWF9JTywgMHg4OCk7IC8qIEVuYWJsZSBNUEVHIHBhcmFsbGVsIElPIGFuZCB2aWRlbyBzaWduYWwgcGlucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggYjE0OTliZi4uNDhiNmMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC0yMzksNiArMjM5LDcgQEAKICNkZWZpbmUgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjE4MDBIICAgICAgICA4MQogI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMjAwMEhfSiAgICAgIDgyCiAjZGVmaW5lIENYODhfQk9BUkRfUFJPRl83MzAxICAgICAgICAgICAgICAgODMKKyNkZWZpbmUgQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwICAgICAgICA4NAogCiBlbnVtIGN4ODhfaXR5cGUgewogCUNYODhfVk1VWF9DT01QT1NJVEUxID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCmluZGV4IGVlNDM4NzYuLjliNDEzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtOTEzLDYgKzkxMyw4IEBACiBNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CiBNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfRklSTVdBUkUoImRhYnVzYi9maXJtd2FyZS5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJkYWJ1c2IvYml0c3RyZWFtLmJpbiIpOwogCiBtb2R1bGVfcGFyYW0oYnVmZmVycywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MgKGJ1ZmZlcnMsICJOdW1iZXIgb2YgYnVmZmVycyAoZGVmYXVsdD0yNTYpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUKaW5kZXggMWE4YjhmMy4uYTM3OTU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZQpAQCAtMTUsMyArMTUsNCBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1ZQRkVfQ0FQVFVSRSkgKz0gdnBmZV9jYXB0dXJlLm8KIG9iai0kKENPTkZJR19WSURFT19ETTY0NDZfQ0NEQykgKz0gZG02NDR4X2NjZGMubwogb2JqLSQoQ09ORklHX1ZJREVPX0RNMzU1X0NDREMpICs9IGRtMzU1X2NjZGMubworb2JqLSQoQ09ORklHX1ZJREVPX0lTSUYpICs9IGlzaWYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTM1NV9jY2RjLmMKaW5kZXggMzE0MzkwMC4uYzI5YWM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jCkBAIC0zNyw4ICszNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKwogI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oPgogI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBzcy5oPgorCiAjaW5jbHVkZSAiZG0zNTVfY2NkY19yZWdzLmgiCiAjaW5jbHVkZSAiY2NkY19od19kZXZpY2UuaCIKIApAQCAtNDYsNjcgKzUwLDc1IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkNDREMgRHJpdmVyIGZvciBETTM1NSIpOwogTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldjsKLQotLyogT2JqZWN0IGZvciBDQ0RDIHJhdyBtb2RlICovCi1zdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBjY2RjX2h3X3BhcmFtc19yYXcgPSB7Ci0JLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCi0JLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKLQkud2luID0gQ0NEQ19XSU5fVkdBLAotCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuZ2FpbiA9IHsKLQkJLnJfeWUgPSAyNTYsCi0JCS5nYl9nID0gMjU2LAotCQkuZ3JfY3kgPSAyNTYsCi0JCS5iX21nID0gMjU2CitzdGF0aWMgc3RydWN0IGNjZGNfb3Blcl9jb25maWcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwkvKiBDQ0RDIGludGVyZmFjZSB0eXBlICovCisJZW51bSB2cGZlX2h3X2lmX3R5cGUgaWZfdHlwZTsKKwkvKiBSYXcgQmF5ZXIgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgYmF5ZXI7CisJLyogWUNiQ3IgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciB5Y2JjcjsKKwkvKiBNYXN0ZXIgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICptY2xrOworCS8qIHNsYXZlIGNsb2NrICovCisJc3RydWN0IGNsayAqc2NsazsKKwkvKiBjY2RjIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworfSBjY2RjX2NmZyA9IHsKKwkvKiBSYXcgY29uZmlndXJhdGlvbnMgKi8KKwkuYmF5ZXIgPSB7CisJCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXLAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAorCQkud2luID0gQ0NEQ19XSU5fVkdBLAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmdhaW4gPSB7CisJCQkucl95ZSA9IDI1NiwKKwkJCS5nYl9nID0gMjU2LAorCQkJLmdyX2N5ID0gMjU2LAorCQkJLmJfbWcgPSAyNTYKKwkJfSwKKwkJLmNvbmZpZ19wYXJhbXMgPSB7CisJCQkuZGF0YXNmdCA9IDIsCisJCQkubWZpbHQxID0gQ0NEQ19OT19NRURJQU5fRklMVEVSMSwKKwkJCS5tZmlsdDIgPSBDQ0RDX05PX01FRElBTl9GSUxURVIyLAorCQkJLmFsYXcgPSB7CisJCQkJLmdhbWFfd2QgPSAyLAorCQkJfSwKKwkJCS5ibGtfY2xhbXAgPSB7CisJCQkJLnNhbXBsZV9waXhlbCA9IDEsCisJCQkJLmRjX3N1YiA9IDI1CisJCQl9LAorCQkJLmNvbF9wYXRfZmllbGQwID0geworCQkJCS5vbG9wID0gQ0NEQ19HUkVFTl9CTFVFLAorCQkJCS5vbGVwID0gQ0NEQ19CTFVFLAorCQkJCS5lbG9wID0gQ0NEQ19SRUQsCisJCQkJLmVsZXAgPSBDQ0RDX0dSRUVOX1JFRAorCQkJfSwKKwkJCS5jb2xfcGF0X2ZpZWxkMSA9IHsKKwkJCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKKwkJCQkub2xlcCA9IENDRENfQkxVRSwKKwkJCQkuZWxvcCA9IENDRENfUkVELAorCQkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKKwkJCX0sCisJCX0sCiAJfSwKLQkuY29uZmlnX3BhcmFtcyA9IHsKLQkJLmRhdGFzZnQgPSAyLAotCQkuZGF0YV9zeiA9IENDRENfREFUQV8xMEJJVFMsCi0JCS5tZmlsdDEgPSBDQ0RDX05PX01FRElBTl9GSUxURVIxLAotCQkubWZpbHQyID0gQ0NEQ19OT19NRURJQU5fRklMVEVSMiwKLQkJLmFsYXcgPSB7Ci0JCQkuZ2FtYV93ZCA9IDIsCi0JCX0sCi0JCS5ibGtfY2xhbXAgPSB7Ci0JCQkuc2FtcGxlX3BpeGVsID0gMSwKLQkJCS5kY19zdWIgPSAyNQotCQl9LAotCQkuY29sX3BhdF9maWVsZDAgPSB7Ci0JCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKLQkJCS5vbGVwID0gQ0NEQ19CTFVFLAotCQkJLmVsb3AgPSBDQ0RDX1JFRCwKLQkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKLQkJfSwKLQkJLmNvbF9wYXRfZmllbGQxID0gewotCQkJLm9sb3AgPSBDQ0RDX0dSRUVOX0JMVUUsCi0JCQkub2xlcCA9IENDRENfQkxVRSwKLQkJCS5lbG9wID0gQ0NEQ19SRUQsCi0JCQkuZWxlcCA9IENDRENfR1JFRU5fUkVECi0JCX0sCisJLyogWUNiQ3IgY29uZmlndXJhdGlvbiAqLworCS55Y2JjciA9IHsKKwkJLndpbiA9IENDRENfV0lOX1BBTCwKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuYnQ2NTZfZW5hYmxlID0gMSwKKwkJLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAorCQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECiAJfSwKIH07CiAKIAotLyogT2JqZWN0IGZvciBDQ0RDIHljYmNyIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgY2NkY19od19wYXJhbXNfeWNiY3IgPSB7Ci0JLndpbiA9IENDRENfV0lOX1BBTCwKLQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCi0JLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAotCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuYnQ2NTZfZW5hYmxlID0gMSwKLQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCi0JLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRAotfTsKLQotc3RhdGljIGVudW0gdnBmZV9od19pZl90eXBlIGNjZGNfaWZfdHlwZTsKLXN0YXRpYyB2b2lkICpfX2lvbWVtIGNjZGNfYmFzZV9hZGRyOwotc3RhdGljIGludCBjY2RjX2FkZHJfc2l6ZTsKLQogLyogUmF3IEJheWVyIGZvcm1hdHMgKi8KIHN0YXRpYyB1MzIgY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbXSA9CiAJCXtWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX1BJWF9GTVRfU0JHR1IxNn07CkBAIC0xMTgsMTggKzEzMCwxMiBAQAogLyogcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzICovCiBzdGF0aWMgaW5saW5lIHUzMiByZWdyKHUzMiBvZmZzZXQpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoY2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNjZGNfc2V0X2NjZGNfYmFzZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKLXsKLQljY2RjX2Jhc2VfYWRkciA9IGFkZHI7Ci0JY2NkY19hZGRyX3NpemUgPSBzaXplOworCV9fcmF3X3dyaXRlbCh2YWwsIGNjZGNfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfZW5hYmxlKGludCBlbikKQEAgLTE1MywxMiArMTU5LDEyIEBACiBzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19nYWluX29mZnNldCh2b2lkKQogewogCS8qIGNvbmZpZ3VyZSBnYWluICovCi0JcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5yX3llLCBSWUVHQUlOKTsKLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdyX2N5LCBHUkNZR0FJTik7Ci0JcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5nYl9nLCBHQkdHQUlOKTsKLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmJfbWcsIEJNR0dBSU4pOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuZ2Fpbi5yX3llLCBSWUVHQUlOKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmdhaW4uZ3JfY3ksIEdSQ1lHQUlOKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmdhaW4uZ2JfZywgR0JHR0FJTik7CisJcmVndyhjY2RjX2NmZy5iYXllci5nYWluLmJfbWcsIEJNR0dBSU4pOwogCS8qIGNvbmZpZ3VyZSBvZmZzZXQgKi8KLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5jY2RjX29mZnNldCwgT0ZGU0VUKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmNjZGNfb2Zmc2V0LCBPRkZTRVQpOwogfQogCiAvKgpAQCAtMTY5LDcgKzE3NSw3IEBACiB7CiAJaW50IGk7CiAKLQlkZXZfZGJnKGRldiwgIlxuc3RhcnRpbmcgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbnN0YXJ0aW5nIGNjZGNfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOwogCS8qIHNldCBhbGwgcmVnaXN0ZXJzIHRvIHplcm8gKi8KIAlmb3IgKGkgPSAwOyBpIDw9IENDRENfUkVHX0xBU1Q7IGkgKz0gNCkKIAkJcmVndygwLCBpKTsKQEAgLTE4MCwzMCArMTg2LDI5IEBACiAJcmVndyhDVUxIX0RFRkFVTFQsIENVTEgpOwogCXJlZ3coQ1VMVl9ERUZBVUxULCBDVUxWKTsKIAkvKiBTZXQgZGVmYXVsdCBHYWluIGFuZCBPZmZzZXQgKi8KLQljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5yX3llID0gR0FJTl9ERUZBVUxUOwotCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdiX2cgPSBHQUlOX0RFRkFVTFQ7Ci0JY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ3JfY3kgPSBHQUlOX0RFRkFVTFQ7Ci0JY2NkY19od19wYXJhbXNfcmF3LmdhaW4uYl9tZyA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2NmZy5iYXllci5nYWluLnJfeWUgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19jZmcuYmF5ZXIuZ2Fpbi5nYl9nID0gR0FJTl9ERUZBVUxUOworCWNjZGNfY2ZnLmJheWVyLmdhaW4uZ3JfY3kgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19jZmcuYmF5ZXIuZ2Fpbi5iX21nID0gR0FJTl9ERUZBVUxUOwogCWNjZGNfY29uZmlnX2dhaW5fb2Zmc2V0KCk7CiAJcmVndyhPVVRDTElQX0RFRkFVTFQsIE9VVENMSVApOwogCXJlZ3coTFNDQ0ZHMl9ERUZBVUxULCBMU0NDRkcyKTsKIAkvKiBzZWxlY3QgY2NkYyBpbnB1dCAqLwogCWlmICh2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShWUFNTX0NDRENJTikpIHsKLQkJZGV2X2RiZyhkZXYsICJcbmNvdWxkbid0IHNlbGVjdCBjY2RjIGlucHV0IHNvdXJjZSIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuY291bGRuJ3Qgc2VsZWN0IGNjZGMgaW5wdXQgc291cmNlIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAkvKiBzZWxlY3QgY2NkYyBjbG9jayAqLwogCWlmICh2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0NDRENfQ0xPQ0ssIDEpIDwgMCkgewotCQlkZXZfZGJnKGRldiwgIlxuY291bGRuJ3QgZW5hYmxlIGNjZGMgY2xvY2siKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbmNvdWxkbid0IGVuYWJsZSBjY2RjIGNsb2NrIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5FbmQgb2YgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19vcGVuKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQlkZXYgPSBkZXZpY2U7CiAJcmV0dXJuIGNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwogfQogCkBAIC0yMjYsNyArMjMxLDcgQEAKIAlpbnQgdmVydF9zdGFydCwgdmVydF9ucl9saW5lczsKIAlpbnQgbWlkX2ltZyA9IDA7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19zZXR3aW4uLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19zZXR3aW4uLi4iKTsKIAogCS8qCiAJICogcHBjIC0gcGVyIHBpeGVsIGNvdW50LiBpbmRpY2F0ZXMgaG93IG1hbnkgcGl4ZWxzIHBlciBjZWxsCkBAIC0yNjAsNDUgKzI2NSw0NiBAQAogCXJlZ3codmVydF9zdGFydCAmIENDRENfU1RBUlRfVkVSX09ORV9NQVNLLCBTTFYwKTsKIAlyZWd3KHZlcnRfc3RhcnQgJiBDQ0RDX1NUQVJUX1ZFUl9UV09fTUFTSywgU0xWMSk7CiAJcmVndyh2ZXJ0X25yX2xpbmVzICYgQ0NEQ19OVU1fTElORVNfVkVSLCBOTFYpOwotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuRW5kIG9mIGNjZGNfc2V0d2luLi4uIik7CiB9CiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfY2NkY19wYXJhbShzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY2NkY3BhcmFtKQogewogCWlmIChjY2RjcGFyYW0tPmRhdGFzZnQgPCBDQ0RDX0RBVEFfTk9fU0hJRlQgfHwKIAkgICAgY2NkY3BhcmFtLT5kYXRhc2Z0ID4gQ0NEQ19EQVRBX1NISUZUXzZCSVQpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIGRhdGEgc2hpZnRcbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaGlmdFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjY2RjcGFyYW0tPm1maWx0MSA8IENDRENfTk9fTUVESUFOX0ZJTFRFUjEgfHwKIAkgICAgY2NkY3BhcmFtLT5tZmlsdDEgPiBDQ0RDX01FRElBTl9GSUxURVIxKSB7Ci0JCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMVxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjY2RjcGFyYW0tPm1maWx0MiA8IENDRENfTk9fTUVESUFOX0ZJTFRFUjIgfHwKIAkgICAgY2NkY3BhcmFtLT5tZmlsdDIgPiBDQ0RDX01FRElBTl9GSUxURVIyKSB7Ci0JCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMlxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyMlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICgoY2NkY3BhcmFtLT5tZWRfZmlsdF90aHJlcyA8IDApIHx8CiAJICAgKGNjZGNwYXJhbS0+bWVkX2ZpbHRfdGhyZXMgPiBDQ0RDX01FRF9GSUxUX1RIUkVTSCkpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIgdGhyZXNob2xkXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsCisJCQkiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyIHRocmVzb2xkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNjZGNwYXJhbS0+ZGF0YV9zeiA8IENDRENfREFUQV8xNkJJVFMgfHwKIAkgICAgY2NkY3BhcmFtLT5kYXRhX3N6ID4gQ0NEQ19EQVRBXzhCSVRTKSB7Ci0JCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBkYXRhIHNpemVcbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaXplXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNjZGNwYXJhbS0+YWxhdy5lbmFibGUpIHsKIAkJaWYgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgQ0NEQ19HQU1NQV9CSVRTXzEzXzQgfHwKIAkJICAgIGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkID4gQ0NEQ19HQU1NQV9CSVRTXzA5XzApIHsKLQkJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBBTEFXXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBBTEFXXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMzA2LDEyICszMTIsMTQgQEAKIAlpZiAoY2NkY3BhcmFtLT5ibGtfY2xhbXAuYl9jbGFtcF9lbmFibGUpIHsKIAkJaWYgKGNjZGNwYXJhbS0+YmxrX2NsYW1wLnNhbXBsZV9waXhlbCA8IENDRENfU0FNUExFXzFQSVhFTFMgfHwKIAkJICAgIGNjZGNwYXJhbS0+YmxrX2NsYW1wLnNhbXBsZV9waXhlbCA+IENDRENfU0FNUExFXzE2UElYRUxTKSB7Ci0JCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIHBpeGVsXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LAorCQkJCSJJbnZhbGlkIHZhbHVlIG9mIHNhbXBsZSBwaXhlbFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX2xuIDwgQ0NEQ19TQU1QTEVfMUxJTkVTIHx8CiAJCSAgICBjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfbG4gPiBDQ0RDX1NBTVBMRV8xNkxJTkVTKSB7Ci0JCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIGxpbmVzXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LAorCQkJCSJJbnZhbGlkIHZhbHVlIG9mIHNhbXBsZSBsaW5lc1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTMyNSwxOCArMzMzLDE4IEBACiAJaW50IHg7CiAKIAkvKiBvbmx5IHJhdyBtb2R1bGUgcGFyYW1ldGVycyBjYW4gYmUgc2V0IHRocm91Z2ggdGhlIElPQ1RMICovCi0JaWYgKGNjZGNfaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl4ID0gY29weV9mcm9tX3VzZXIoJmNjZGNfcmF3X3BhcmFtcywgcGFyYW1zLCBzaXplb2YoY2NkY19yYXdfcGFyYW1zKSk7CiAJaWYgKHgpIHsKLQkJZGV2X2RiZyhkZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmcgY2NkYyIKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmcgY2NkYyIKIAkJCSJwYXJhbXMsICVkXG4iLCB4KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJaWYgKCF2YWxpZGF0ZV9jY2RjX3BhcmFtKCZjY2RjX3Jhd19wYXJhbXMpKSB7Ci0JCW1lbWNweSgmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMsCisJCW1lbWNweSgmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcywKIAkJCSZjY2RjX3Jhd19wYXJhbXMsCiAJCQlzaXplb2YoY2NkY19yYXdfcGFyYW1zKSk7CiAJCXJldHVybiAwOwpAQCAtMzQ3LDExICszNTUsMTEgQEAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgQ0NEQyBmb3IgWUNiQ3IgdmlkZW8gY2FwdHVyZSAqLwogc3RhdGljIHZvaWQgY2NkY19jb25maWdfeWNiY3Iodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc195Y2JjcjsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2NmZy55Y2JjcjsKIAl1MzIgdGVtcDsKIAogCS8qIGZpcnN0IHNldCB0aGUgQ0NEQyBwb3dlciBvbiBkZWZhdWx0cyB2YWx1ZXMgaW4gYWxsIHJlZ2lzdGVycyAqLwotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ195Y2Jjci4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ195Y2Jjci4uLiIpOwogCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwogCiAJLyogY29uZmlndXJlIHBpeGVsIGZvcm1hdCAmIHZpZGVvIGZyYW1lIGZvcm1hdCAqLwpAQCAtNDAzLDcgKzQxMSw3IEBACiAJCXJlZ3coQ0NEQ19TRE9GU1RfRklFTERfSU5URVJMRUFWRUQsIFNET0ZTVCk7CiAJfQogCi0JZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CiB9CiAKIC8qCkBAIC00ODMsNyArNDkxLDcgQEAKIAkgKi8KIAogCWlmIChjb3VudCkgewotCQlkZXZfZXJyKGRldiwgImRlZmVjdCB0YWJsZSB3cml0ZSB0aW1lb3V0ICEhIVxuIik7CisJCWRldl9lcnIoY2NkY19jZmcuZGV2LCAiZGVmZWN0IHRhYmxlIHdyaXRlIHRpbWVvdXQgISEhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYwNSwxMiArNjEzLDEyIEBACiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIENDREMgZm9yIFJhdyBtb2RlIGltYWdlIGNhcHR1cmUgKi8KIHN0YXRpYyBpbnQgY2NkY19jb25maWdfcmF3KHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmNjZGNfaHdfcGFyYW1zX3JhdzsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19jZmcuYmF5ZXI7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCB2YWw7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfcmF3Li4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3Jhdy4uLiIpOwogCiAJLyogcmVzdG9yZSBwb3dlciBvbiBkZWZhdWx0cyB0byByZWdpc3RlciAqLwogCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwpAQCAtNjU5LDcgKzY2Nyw3IEBACiAJdmFsIHw9IChjb25maWdfcGFyYW1zLT5kYXRhc2Z0ICYgQ0NEQ19EQVRBU0ZUX01BU0spIDw8CiAJCUNDRENfREFUQVNGVF9TSElGVDsKIAlyZWd3KHZhbCAsIE1PREVTRVQpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gTU9ERVNFVC4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIE1PREVTRVQuLi5cbiIsIHZhbCk7CiAKIAkvKiBDb25maWd1cmUgdGhlIE1lZGlhbiBGaWx0ZXIgdGhyZXNob2xkICovCiAJcmVndygoY29uZmlnX3BhcmFtcy0+bWVkX2ZpbHRfdGhyZXMpICYgQ0NEQ19NRURfRklMVF9USFJFU0gsIE1FREZJTFQpOwpAQCAtNjgxLDcgKzY4OSw3IEBACiAJCShjb25maWdfcGFyYW1zLT5tZmlsdDIgPDwgQ0NEQ19NRklMVDJfU0hJRlQpKTsKIAogCXJlZ3codmFsLCBHQU1NQVdEKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEdBTU1BV0QuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBHQU1NQVdELi4uXG4iLCB2YWwpOwogCiAJLyogY29uZmlndXJlIHZpZGVvIHdpbmRvdyAqLwogCWNjZGNfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCAxKTsKQEAgLTcwNiw3ICs3MTQsNyBAQAogCS8qIENvbmZpZ3VyZSB0aGUgR2FpbiAgJiBvZmZzZXQgY29udHJvbCAqLwogCWNjZGNfY29uZmlnX2dhaW5fb2Zmc2V0KCk7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgJXggdG8gQ09MUFROLi4uXG4iLCB2YWwpOwogCiAJLyogQ29uZmlndXJlIERBVEFPRlNUICByZWdpc3RlciAqLwogCXZhbCA9IChjb25maWdfcGFyYW1zLT5kYXRhX29mZnNldC5ob3J6X29mZnNldCAmIENDRENfREFUQU9GU1RfTUFTSykgPDwKQEAgLTcyNiw3ICs3MzQsNyBAQAogCQkJQ0NEQ19IU0laRV9WQUxfTUFTSzsKIAogCQkvKiBhZGp1c3QgdG8gbXVsdGlwbGUgb2YgMzIgKi8KLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKIAkJICAgICAgICgoKHBhcmFtcy0+d2luLndpZHRoKSArIDMxKSA+PiA1KSAmCiAJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLKTsKIAl9IGVsc2UgewpAQCAtNzM0LDcgKzc0Miw3IEBACiAJCXZhbCB8PSAoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpID4+IDUpICYKIAkJCUNDRENfSFNJWkVfVkFMX01BU0s7CiAKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKIAkJICAgICAgICgoKHBhcmFtcy0+d2luLndpZHRoICogMikgKyAzMSkgPj4gNSkgJgogCQkJQ0NEQ19IU0laRV9WQUxfTUFTSyk7CiAJfQpAQCAtNzQ1LDM0ICs3NTMsMzQgQEAKIAkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuYWJsZSkgewogCQkJLyogRm9yIGludGVybGFjZSBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19TRE9GU1RfSU5URVJMQUNFX0lOVkVSU0UsIFNET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCiAJCQkJQ0NEQ19TRE9GU1RfSU5URVJMQUNFX0lOVkVSU0UpOwogCQl9IGVsc2UgewogCQkJLyogRm9yIGludGVybGFjZSBub24gaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfU0RPRlNUX0lOVEVSTEFDRV9OT1JNQUwsIFNET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCiAJCQkJQ0NEQ19TRE9GU1RfSU5URVJMQUNFX05PUk1BTCk7CiAJCX0KIAl9IGVsc2UgaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkgewogCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CiAJCQkvKiBGb3IgcHJvZ2Vzc2l2ZSBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfSU5WRVJTRSwgU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKIAkJCQlDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9JTlZFUlNFKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEZvciBwcm9nZXNzaXZlIG5vbiBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfTk9STUFMLCBTRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAogCQkJCUNDRENfU0RPRlNUX1BST0dSRVNTSVZFX05PUk1BTCk7CiAJCX0KIAl9Ci0JZGV2X2RiZyhkZXYsICJcbmVuZCBvZiBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuZW5kIG9mIGNjZGNfY29uZmlnX3Jhdy4uLiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNjZGNfY29uZmlndXJlKHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKIAkJcmV0dXJuIGNjZGNfY29uZmlnX3JhdygpOwogCWVsc2UKIAkJY2NkY19jb25maWdfeWNiY3IoKTsKQEAgLTc4MSwyMyArNzg5LDIzIEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfYnVmdHlwZShlbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZSkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQljY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIuYnVmX3R5cGUgPSBidWZfdHlwZTsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJCWNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgZW51bSBjY2RjX2J1ZnR5cGUgY2NkY19nZXRfYnVmdHlwZSh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGU7Ci0JcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jZmcuYmF5ZXIuYnVmX3R5cGU7CisJcmV0dXJuIGNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlOwogfQogCiBzdGF0aWMgaW50IGNjZGNfZW51bV9waXgodTMyICpwaXgsIGludCBpKQogewogCWludCByZXQgPSAtRUlOVkFMOwotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewogCQlpZiAoaSA8IEFSUkFZX1NJWkUoY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHMpKSB7CiAJCQkqcGl4ID0gY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbaV07CiAJCQlyZXQgPSAwOwpAQCAtODEzLDIwICs4MjEsMTkgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9waXhlbF9mb3JtYXQodTMyIHBpeGZtdCkKIHsKLQlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcy5hbGF3OworCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0gJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuYWxhdzsKIAotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKLQkJY2NkY19od19wYXJhbXNfcmF3LnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJY2NkY19jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKIAkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KQogCQkJYWxhdy0+ZW5hYmxlID0gMTsKIAkJZWxzZSBpZiAocGl4Zm10ICE9IFY0TDJfUElYX0ZNVF9TQkdHUjE2KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKLQkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOworCQkJY2NkY19jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CiAJCWVsc2UgaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfVVlWWSkKLQkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCQkJY2NkY19jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CiAJCWVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgzNCwxNyArODQxLDE2IEBACiB9CiBzdGF0aWMgdTMyIGNjZGNfZ2V0X3BpeGVsX2Zvcm1hdCh2b2lkKQogewotCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXc7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPSAmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3OwogCXUzMiBwaXhmbXQ7CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQlpZiAoYWxhdy0+ZW5hYmxlKQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKIAkJZWxzZQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CiAJZWxzZSB7Ci0JCWlmIChjY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCisJCWlmIChjY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKIAkJZWxzZQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1VZVlk7CkBAIC04NTMsNTMgKzg1OSw1MyBAQAogfQogc3RhdGljIGludCBjY2RjX3NldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy53aW4gPSAqd2luOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci53aW4gPSAqd2luOwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3Iud2luID0gKndpbjsKKwkJY2NkY19jZmcueWNiY3Iud2luID0gKndpbjsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19nZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQkqd2luID0gY2NkY19od19wYXJhbXNfcmF3LndpbjsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJKndpbiA9IGNjZGNfY2ZnLmJheWVyLndpbjsKIAllbHNlCi0JCSp3aW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW47CisJCSp3aW4gPSBjY2RjX2NmZy55Y2Jjci53aW47CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2NkY19nZXRfbGluZV9sZW5ndGgodm9pZCkKIHsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CiAJCWlmICgoY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpIHx8CiAJCSAgICAoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpKQotCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aDsKKwkJCWxlbiA9IGNjZGNfY2ZnLmJheWVyLndpbi53aWR0aDsKIAkJZWxzZQotCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aCAqIDI7CisJCQlsZW4gPSBjY2RjX2NmZy5iYXllci53aW4ud2lkdGggKiAyOwogCX0gZWxzZQotCQlsZW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW4ud2lkdGggKiAyOworCQlsZW4gPSBjY2RjX2NmZy55Y2Jjci53aW4ud2lkdGggKiAyOwogCXJldHVybiBBTElHTihsZW4sIDMyKTsKIH0KIAogc3RhdGljIGludCBjY2RjX3NldF9mcmFtZV9mb3JtYXQoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10ID0gZnJtX2ZtdDsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIuZnJtX2ZtdCA9IGZybV9mbXQ7CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKKwkJY2NkY19jZmcueWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBlbnVtIGNjZGNfZnJtZm10IGNjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuZnJtX2ZtdDsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfY2ZnLmJheWVyLmZybV9mbXQ7CiAJZWxzZQotCQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdDsKKwkJcmV0dXJuIGNjZGNfY2ZnLnljYmNyLmZybV9mbXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19nZXRmaWQodm9pZCkKQEAgLTkxNiwxNCArOTIyLDE0IEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfaHdfaWZfcGFyYW1zKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbXMpCiB7Ci0JY2NkY19pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOworCWNjZGNfY2ZnLmlmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CiAKIAlzd2l0Y2ggKHBhcmFtcy0+aWZfdHlwZSkgewogCWNhc2UgVlBGRV9CVDY1NjoKIAljYXNlIFZQRkVfWUNCQ1JfU1lOQ18xNjoKIAljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgotCQljY2RjX2h3X3BhcmFtc195Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOwotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOworCQljY2RjX2NmZy55Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOworCQljY2RjX2NmZy55Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBUT0RPIGFkZCBzdXBwb3J0IGZvciByYXcgYmF5ZXIgaGVyZSAqLwpAQCAtOTM4LDcgKzk0NCw2IEBACiAJLmh3X29wcyA9IHsKIAkJLm9wZW4gPSBjY2RjX29wZW4sCiAJCS5jbG9zZSA9IGNjZGNfY2xvc2UsCi0JCS5zZXRfY2NkY19iYXNlID0gY2NkY19zZXRfY2NkY19iYXNlLAogCQkuZW5hYmxlID0gY2NkY19lbmFibGUsCiAJCS5lbmFibGVfb3V0X3RvX3NkcmFtID0gY2NkY19lbmFibGVfb3V0cHV0X3RvX3NkcmFtLAogCQkuc2V0X2h3X2lmX3BhcmFtcyA9IGNjZGNfc2V0X2h3X2lmX3BhcmFtcywKQEAgLTk1OSwxOSArOTY0LDExOCBAQAogCX0sCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBkbTM1NV9jY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCAoKnNldHVwX3Bpbm11eCkodm9pZCk7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJaW50IHN0YXR1cyA9IDA7CisKKwkvKgorCSAqIGZpcnN0IHRyeSB0byByZWdpc3RlciB3aXRoIHZwZmUuIElmIG5vdCBjb3JyZWN0IHBsYXRmb3JtLCB0aGVuIHdlCisJICogZG9uJ3QgaGF2ZSB0byBpb21hcAorCSAqLworCXN0YXR1cyA9IHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX25vcmVzOworCX0KKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGZhaWxfbm9yZXM7CisJfQorCisJY2NkY19jZmcuYmFzZV9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFjY2RjX2NmZy5iYXNlX2FkZHIpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmYWlsX25vbWVtOworCX0KKworCS8qIEdldCBhbmQgZW5hYmxlIE1hc3RlciBjbG9jayAqLworCWNjZGNfY2ZnLm1jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtYXN0ZXIiKTsKKwlpZiAoSVNfRVJSKGNjZGNfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2NkY19jZmcubWNsayk7CisJCWdvdG8gZmFpbF9ub21hcDsKKwl9CisJaWYgKGNsa19lbmFibGUoY2NkY19jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCisJLyogR2V0IGFuZCBlbmFibGUgU2xhdmUgY2xvY2sgKi8KKwljY2RjX2NmZy5zY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2xhdmUiKTsKKwlpZiAoSVNfRVJSKGNjZGNfY2ZnLnNjbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2NkY19jZmcuc2Nsayk7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKwlpZiAoY2xrX2VuYWJsZShjY2RjX2NmZy5zY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfc2NsazsKKwl9CisKKwkvKiBQbGF0Zm9ybSBkYXRhIGhvbGRzIHNldHVwX3Bpbm11eCBmdW5jdGlvbiBwdHIgKi8KKwlpZiAoTlVMTCA9PSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfc2NsazsKKwl9CisJc2V0dXBfcGlubXV4ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJLyoKKwkgKiBzZXR1cCBNdXggY29uZmlndXJhdGlvbiBmb3IgY2NkYyB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZvcgorCSAqIGRpZmZlcmVudCBTb0NzIHVzaW5nIHRoaXMgQ0NEQworCSAqLworCXNldHVwX3Bpbm11eCgpOworCWNjZGNfY2ZnLmRldiA9ICZwZGV2LT5kZXY7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsIGNjZGNfaHdfZGV2Lm5hbWUpOworCXJldHVybiAwOworZmFpbF9zY2xrOgorCWNsa19wdXQoY2NkY19jZmcuc2Nsayk7CitmYWlsX21jbGs6CisJY2xrX3B1dChjY2RjX2NmZy5tY2xrKTsKK2ZhaWxfbm9tYXA6CisJaW91bm1hcChjY2RjX2NmZy5iYXNlX2FkZHIpOworZmFpbF9ub21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWxfbm9yZXM6CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkbTM1NV9jY2RjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCisJY2xrX3B1dChjY2RjX2NmZy5tY2xrKTsKKwljbGtfcHV0KGNjZGNfY2ZnLnNjbGspOworCWlvdW5tYXAoY2NkY19jZmcuYmFzZV9hZGRyKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkbTM1NV9jY2RjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJkbTM1NV9jY2RjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZG0zNTVfY2NkY19yZW1vdmUpLAorCS5wcm9iZSA9IGRtMzU1X2NjZGNfcHJvYmUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkbTM1NV9jY2RjX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9OT1RJQ0UgImRtMzU1X2NjZGNfaW5pdFxuIik7Ci0JaWYgKHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KSA8IDApCi0JCXJldHVybiAtMTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwKLQkJY2NkY19od19kZXYubmFtZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZG0zNTVfY2NkY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZG0zNTVfY2NkY19leGl0KHZvaWQpCiB7Ci0JdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRtMzU1X2NjZGNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZG0zNTVfY2NkY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMKaW5kZXggZDVmYTE5My4uMGMzOTRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMKQEAgLTM3LDggKzM3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCiAjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9kbTY0NHhfY2NkYy5oPgogI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBzcy5oPgorCiAjaW5jbHVkZSAiZG02NDR4X2NjZGNfcmVncy5oIgogI2luY2x1ZGUgImNjZGNfaHdfZGV2aWNlLmgiCiAKQEAgLTQ2LDMyICs1MCw0NCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDQ0RDIERyaXZlciBmb3IgRE02NDQ2Iik7CiBNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZSAqZGV2OwotCi0vKiBPYmplY3QgZm9yIENDREMgcmF3IG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3IGNjZGNfaHdfcGFyYW1zX3JhdyA9IHsKLQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKLQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAotCS53aW4gPSBDQ0RDX1dJTl9WR0EsCi0JLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5jb25maWdfcGFyYW1zID0gewotCQkuZGF0YV9zeiA9IENDRENfREFUQV8xMEJJVFMsCitzdGF0aWMgc3RydWN0IGNjZGNfb3Blcl9jb25maWcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwkvKiBDQ0RDIGludGVyZmFjZSB0eXBlICovCisJZW51bSB2cGZlX2h3X2lmX3R5cGUgaWZfdHlwZTsKKwkvKiBSYXcgQmF5ZXIgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgYmF5ZXI7CisJLyogWUNiQ3IgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciB5Y2JjcjsKKwkvKiBNYXN0ZXIgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICptY2xrOworCS8qIHNsYXZlIGNsb2NrICovCisJc3RydWN0IGNsayAqc2NsazsKKwkvKiBjY2RjIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworfSBjY2RjX2NmZyA9IHsKKwkvKiBSYXcgY29uZmlndXJhdGlvbnMgKi8KKwkuYmF5ZXIgPSB7CisJCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXLAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAorCQkud2luID0gQ0NEQ19XSU5fVkdBLAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmNvbmZpZ19wYXJhbXMgPSB7CisJCQkuZGF0YV9zeiA9IENDRENfREFUQV8xMEJJVFMsCisJCX0sCiAJfSwKLX07Ci0KLS8qIE9iamVjdCBmb3IgQ0NEQyB5Y2JjciBtb2RlICovCi1zdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIGNjZGNfaHdfcGFyYW1zX3ljYmNyID0gewotCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCwKLQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCi0JLndpbiA9IENDRENfV0lOX1BBTCwKLQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmJ0NjU2X2VuYWJsZSA9IDEsCi0JLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAotCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQKKwkueWNiY3IgPSB7CisJCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCwKKwkJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAorCQkud2luID0gQ0NEQ19XSU5fUEFMLAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmJ0NjU2X2VuYWJsZSA9IDEsCisJCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKKwkJLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRAorCX0sCiB9OwogCiAjZGVmaW5lIENDRENfTUFYX1JBV19ZVVZfRk9STUFUUwkyCkBAIC04NCwyNSArMTAwLDE1IEBACiBzdGF0aWMgdTMyIGNjZGNfcmF3X3l1dl9waXhfZm9ybWF0c1tdID0KIAl7VjRMMl9QSVhfRk1UX1VZVlksIFY0TDJfUElYX0ZNVF9ZVVlWfTsKIAotc3RhdGljIHZvaWQgKl9faW9tZW0gY2NkY19iYXNlX2FkZHI7Ci1zdGF0aWMgaW50IGNjZGNfYWRkcl9zaXplOwotc3RhdGljIGVudW0gdnBmZV9od19pZl90eXBlIGNjZGNfaWZfdHlwZTsKLQogLyogcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzICovCiBzdGF0aWMgaW5saW5lIHUzMiByZWdyKHUzMiBvZmZzZXQpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoY2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNjZGNfc2V0X2NjZGNfYmFzZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKLXsKLQljY2RjX2Jhc2VfYWRkciA9IGFkZHI7Ci0JY2NkY19hZGRyX3NpemUgPSBzaXplOworCV9fcmF3X3dyaXRlbCh2YWwsIGNjZGNfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfZW5hYmxlKGludCBmbGFnKQpAQCAtMTMyLDcgKzEzOCw3IEBACiAJaW50IHZlcnRfc3RhcnQsIHZlcnRfbnJfbGluZXM7CiAJaW50IHZhbCA9IDAsIG1pZF9pbWcgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfc2V0d2luLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfc2V0d2luLi4uIik7CiAJLyoKIAkgKiBwcGMgLSBwZXIgcGl4ZWwgY291bnQuIGluZGljYXRlcyBob3cgbWFueSBwaXhlbHMgcGVyIGNlbGwKIAkgKiBvdXRwdXQgdG8gU0RSQU0uIGV4YW1wbGUsIGZvciB5Y2JjciwgaXQgaXMgb25lIHkgYW5kIG9uZSBjLCBzbyAyLgpAQCAtMTcxLDcgKzE3Nyw3IEBACiAJcmVndygodmVydF9zdGFydCA8PCBDQ0RDX1ZFUlRfU1RBUlRfU0xWMF9TSElGVCkgfCB2ZXJ0X3N0YXJ0LAogCSAgICAgQ0NEQ19WRVJUX1NUQVJUKTsKIAlyZWd3KHZlcnRfbnJfbGluZXMsIENDRENfVkVSVF9MSU5FUyk7Ci0JZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX3NldHdpbi4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19yZWFkcmVncyh2b2lkKQpAQCAtMTc5LDM5ICsxODUsMzkgQEAKIAl1bnNpZ25lZCBpbnQgdmFsID0gMDsKIAogCXZhbCA9IHJlZ3IoQ0NEQ19BTEFXKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEFMQVcuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBBTEFXLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19DTEFNUCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBDTEFNUC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIENMQU1QLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19EQ1NVQik7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBEQ1NVQi4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIERDU1VCLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19CTEtDTVApOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQkxLQ01QLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQkxLQ01QLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19GUENfQUREUik7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGUENfQUREUi4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQ19BRERSLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19GUEMpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19GTVRDRkcpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UQ0ZHLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UQ0ZHLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19DT0xQVE4pOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQ09MUFROLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQ09MUFROLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19GTVRfSE9SWik7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRfSE9SWi4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVF9IT1JaLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19GTVRfVkVSVCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRfVkVSVC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVF9WRVJULi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19IU0laRV9PRkYpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gSFNJWkVfT0ZGLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gSFNJWkVfT0ZGLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19TRE9GU1QpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gU0RPRlNULi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gU0RPRlNULi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19WUF9PVVQpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVlBfT1VULi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVlBfT1VULi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19TWU5fTU9ERSk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBTWU5fTU9ERS4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFNZTl9NT0RFLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19IT1JaX0lORk8pOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gSE9SWl9JTkZPLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gSE9SWl9JTkZPLi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19WRVJUX1NUQVJUKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZFUlRfU1RBUlQuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBWRVJUX1NUQVJULi4uXG4iLCB2YWwpOwogCXZhbCA9IHJlZ3IoQ0NEQ19WRVJUX0xJTkVTKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZFUlRfTElORVMuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBWRVJUX0xJTkVTLi4uXG4iLCB2YWwpOwogfQogCiBzdGF0aWMgaW50IHZhbGlkYXRlX2NjZGNfcGFyYW0oc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNjZGNwYXJhbSkKQEAgLTIyMCw3ICsyMjYsNyBAQAogCQlpZiAoKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkID4gQ0NEQ19HQU1NQV9CSVRTXzA5XzApIHx8CiAJCSAgICAoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPCBDQ0RDX0dBTU1BX0JJVFNfMTVfNikgfHwKIAkJICAgIChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA8IGNjZGNwYXJhbS0+ZGF0YV9zeikpIHsKLQkJCWRldl9kYmcoZGV2LCAiXG5JbnZhbGlkIGRhdGEgbGluZSBzZWxlY3QiKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5JbnZhbGlkIGRhdGEgbGluZSBzZWxlY3QiKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0KQEAgLTIzMCw3ICsyMzYsNyBAQAogc3RhdGljIGludCBjY2RjX3VwZGF0ZV9yYXdfcGFyYW1zKHN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpyYXdfcGFyYW1zKQogewogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCAqZnBjX3ZpcnRhZGRyID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgKmZwY19waHlzYWRkciA9IE5VTEw7CiAKQEAgLTI2Niw3ICsyNzIsNyBAQAogCQkJCQkJCSBGUF9OVU1fQllURVMpKTsKIAogCQlpZiAoZnBjX3ZpcnRhZGRyID09IE5VTEwpIHsKLQkJCWRldl9kYmcoZGV2LAorCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsCiAJCQkJIlxuVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgRlBDIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtMjc5LDcgKzI4NSw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKGZwY192aXJ0YWRkciwKIAkJCSh2b2lkIF9fdXNlciAqKXJhd19wYXJhbXMtPmZhdWx0X3B4bC5mcGNfdGFibGVfYWRkciwKIAkJCWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW0gKiBGUF9OVU1fQllURVMpKSB7Ci0JCWRldl9kYmcoZGV2LCAiXG4gY29weV9mcm9tX3VzZXIgZmFpbGVkIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG4gY29weV9mcm9tX3VzZXIgZmFpbGVkIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHIgPSAodW5zaWduZWQgaW50KWZwY19waHlzYWRkcjsKQEAgLTI4OSw3ICsyOTUsNyBAQAogc3RhdGljIGludCBjY2RjX2Nsb3NlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgKmZwY19waHlzYWRkciA9IE5VTEwsICpmcGNfdmlydGFkZHIgPSBOVUxMOwogCiAJZnBjX3BoeXNhZGRyID0gKHVuc2lnbmVkIGludCAqKWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcGNfdGFibGVfYWRkcjsKQEAgLTMyMyw5ICszMjksOCBAQAogCiBzdGF0aWMgaW50IGNjZGNfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7Ci0JZGV2ID0gZGV2aWNlOwogCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCiAJCWNjZGNfZW5hYmxlX3Zwb3J0KDEpOwogCXJldHVybiAwOwogfQpAQCAtMzQxLDEyICszNDYsMTIgQEAKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyBjY2RjX3Jhd19wYXJhbXM7CiAJaW50IHg7CiAKLQlpZiAoY2NkY19pZl90eXBlICE9IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlICE9IFZQRkVfUkFXX0JBWUVSKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXggPSBjb3B5X2Zyb21fdXNlcigmY2NkY19yYXdfcGFyYW1zLCBwYXJhbXMsIHNpemVvZihjY2RjX3Jhd19wYXJhbXMpKTsKIAlpZiAoeCkgewotCQlkZXZfZGJnKGRldiwgImNjZGNfc2V0X3BhcmFtczogZXJyb3IgaW4gY29weWluZyIKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmciCiAJCQkgICAiY2NkYyBwYXJhbXMsICVkXG4iLCB4KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtMzY0LDEwICszNjksMTAgQEAKICAqLwogdm9pZCBjY2RjX2NvbmZpZ195Y2Jjcih2b2lkKQogewotCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciAqcGFyYW1zID0gJmNjZGNfaHdfcGFyYW1zX3ljYmNyOworCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciAqcGFyYW1zID0gJmNjZGNfY2ZnLnljYmNyOwogCXUzMiBzeW5fbW9kZTsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ195Y2Jjci4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ195Y2Jjci4uLiIpOwogCS8qCiAJICogZmlyc3QgcmVzdG9yZSB0aGUgQ0NEQyByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMKIAkgKiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSB3ZSBhc3N1bWUgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgc2V0IGluCkBAIC00MjgsNyArNDMzLDcgQEAKIAkJcmVndyhDQ0RDX1NET0ZTVF9GSUVMRF9JTlRFUkxFQVZFRCwgQ0NEQ19TRE9GU1QpOwogCiAJY2NkY19zYmxfcmVzZXQoKTsKLQlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfY29uZmlnX3ljYmNyLi4uXG4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuRW5kIG9mIGNjZGNfY29uZmlnX3ljYmNyLi4uXG4iKTsKIAljY2RjX3JlYWRyZWdzKCk7CiB9CiAKQEAgLTQ0MCw5ICs0NDUsOSBAQAogCQkvKiBjb25maWd1cmUgRENTdWIgKi8KIAkJdmFsID0gKGJjbGFtcC0+ZGNfc3ViKSAmIENDRENfQkxLX0RDX1NVQl9NQVNLOwogCQlyZWd3KHZhbCwgQ0NEQ19EQ1NVQik7Ci0JCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRENTVUIuLi5cbiIsIHZhbCk7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRENTVUIuLi5cbiIsIHZhbCk7CiAJCXJlZ3coQ0NEQ19DTEFNUF9ERUZBVUxUX1ZBTCwgQ0NEQ19DTEFNUCk7Ci0JCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4MDAwMCB0byBDTEFNUC4uLlxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4MDAwMCB0byBDTEFNUC4uLlxuIik7CiAJCXJldHVybjsKIAl9CiAJLyoKQEAgLTQ1NywxMCArNDYyLDEwIEBACiAJICAgICAgICgoYmNsYW1wLT5zYW1wbGVfcGl4ZWwgJiBDQ0RDX0JMS19TQU1QTEVfTE5fTUFTSykgPDwKIAkJQ0NEQ19CTEtfU0FNUExFX0xOX1NISUZUKSB8IENDRENfQkxLX0NMQU1QX0VOQUJMRSk7CiAJcmVndyh2YWwsIENDRENfQ0xBTVApOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBDTEFNUC4uLlxuIiwgdmFsKTsKIAkvKiBJZiBCbGFjayBjbGFtcGluZyBpcyBlbmFibGUgdGhlbiBtYWtlIGRjc3ViIDAgKi8KIAlyZWd3KENDRENfRENTVUJfREVGQVVMVF9WQUwsIENDRENfRENTVUIpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4MDAwMDAwMDAgdG8gRENTVUIuLi5cbiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4MDAwMDAwMDAgdG8gRENTVUIuLi5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19ibGFja19jb21wZW5zZShzdHJ1Y3QgY2NkY19ibGFja19jb21wZW5zYXRpb24gKmJjb21wKQpAQCAtNDkwLDE3ICs0OTUsMTcgQEAKIAogCS8qIENvbmZpZ3VyZSBGYXVsdCBwaXhlbCBpZiBuZWVkZWQgKi8KIAlyZWd3KGZwYy0+ZnBjX3RhYmxlX2FkZHIsIENDRENfRlBDX0FERFIpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDX0FERFIuLi5cbiIsCisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGUENfQUREUi4uLlxuIiwKIAkJICAgICAgIChmcGMtPmZwY190YWJsZV9hZGRyKSk7CiAJLyogV3JpdGUgdGhlIEZQQyBwYXJhbXMgd2l0aCBGUEMgZGlzYWJsZSAqLwogCXZhbCA9IGZwYy0+ZnBfbnVtICYgQ0NEQ19GUENfRlBDX05VTV9NQVNLOwogCXJlZ3codmFsLCBDQ0RDX0ZQQyk7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKIAkvKiByZWFkIHRoZSBGUEMgcmVnaXN0ZXIgKi8KIAl2YWwgPSByZWdyKENDRENfRlBDKSB8IENDRENfRlBDX0VOQUJMRTsKIAlyZWd3KHZhbCwgQ0NEQ19GUEMpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOwogfQogCiAvKgpAQCAtNTA5LDEzICs1MTQsMTMgQEAKICAqLwogdm9pZCBjY2RjX2NvbmZpZ19yYXcodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfcmF3OworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZjY2RjX2NmZy5iYXllcjsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgc3luX21vZGUgPSAwOwogCXVuc2lnbmVkIGludCB2YWw7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfcmF3Li4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3Jhdy4uLiIpOwogCiAJLyogICAgICBSZXNldCBDQ0RDICovCiAJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CkBAIC01NDUsNyArNTUwLDcgQEAKIAkJdmFsID0gKChjb25maWdfcGFyYW1zLT5hbGF3LmdhbWFfd2QgJgogCQkgICAgICBDQ0RDX0FMQVdfR0FNQV9XRF9NQVNLKSB8IENDRENfQUxBV19FTkFCTEUpOwogCQlyZWd3KHZhbCwgQ0NEQ19BTEFXKTsKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBBTEFXLi4uXG4iLCB2YWwpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEFMQVcuLi5cbiIsIHZhbCk7CiAJfQogCiAJLyogQ29uZmlndXJlIHZpZGVvIHdpbmRvdyAqLwpAQCAtNTgyLDExICs1ODcsMTEgQEAKIAkvKiBXcml0ZSB2YWx1ZSBpbiBGTVRDRkcgKi8KIAlyZWd3KHZhbCwgQ0NEQ19GTVRDRkcpOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRDRkcuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRDRkcuLi5cbiIsIHZhbCk7CiAJLyogQ29uZmlndXJlIHRoZSBjb2xvciBwYXR0ZXJuIGFjY29yZGluZyB0byBtdDl0MDAxIHNlbnNvciAqLwogCXJlZ3coQ0NEQ19DT0xQVE5fVkFMLCBDQ0RDX0NPTFBUTik7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweEJCMTFCQjExIHRvIENPTFBUTi4uLlxuIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHhCQjExQkIxMSB0byBDT0xQVE4uLi5cbiIpOwogCS8qCiAJICogQ29uZmlndXJlIERhdGEgZm9ybWF0dGVyKFZpZGVvIHBvcnQpIHBpeGVsIHNlbGVjdGlvbgogCSAqIChGTVRfSE9SWiwgRk1UX1ZFUlQpCkBAIC01OTYsNyArNjAxLDcgQEAKIAkgICAgICAocGFyYW1zLT53aW4ud2lkdGggJiBDQ0RDX0ZNVF9IT1JaX0ZNVExOSF9NQVNLKTsKIAlyZWd3KHZhbCwgQ0NEQ19GTVRfSE9SWik7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVF9IT1JaLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CiAJdmFsID0gKHBhcmFtcy0+d2luLnRvcCAmIENDRENfRk1UX1ZFUlRfRk1UU0xWX01BU0spCiAJICAgIDw8IENDRENfRk1UX1ZFUlRfRk1UU0xWX1NISUZUOwogCWlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpCkBAIC02MDQsMTMgKzYwOSwxMyBAQAogCWVsc2UKIAkJdmFsIHw9IChwYXJhbXMtPndpbi5oZWlnaHQgPj4gMSkgJiBDQ0RDX0ZNVF9WRVJUX0ZNVExOVl9NQVNLOwogCi0JZGV2X2RiZyhkZXYsICJcbnBhcmFtcy0+d2luLmhlaWdodCAgMHgleCAuLi5cbiIsCisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbnBhcmFtcy0+d2luLmhlaWdodCAgMHgleCAuLi5cbiIsCiAJICAgICAgIHBhcmFtcy0+d2luLmhlaWdodCk7CiAJcmVndyh2YWwsIENDRENfRk1UX1ZFUlQpOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRfVkVSVC4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVF9WRVJULi4uXG4iLCB2YWwpOwogCi0JZGV2X2RiZyhkZXYsICJcbmJlbG93IHJlZ3codmFsLCBGTVRfVkVSVCkuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuYmVsb3cgcmVndyh2YWwsIEZNVF9WRVJUKS4uLiIpOwogCiAJLyoKIAkgKiBDb25maWd1cmUgSG9yaXpvbnRhbCBvZmZzZXQgcmVnaXN0ZXIuIElmIHBhY2sgOCBpcyBlbmFibGVkIHRoZW4KQEAgLTYzMSwxNyArNjM2LDE3IEBACiAJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbmFibGUpIHsKIAkJCS8qIEZvciBpbnRlbGFjZSBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19JTlRFUkxBQ0VEX0lNQUdFX0lOVkVSVCwgQ0NEQ19TRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHg0QjZEIHRvIFNET0ZTVC4uLlxuIik7CisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweDRCNkQgdG8gU0RPRlNULi5cbiIpOwogCQl9CiAKIAkJZWxzZSB7CiAJCQkvKiBGb3IgaW50ZWxhY2Ugbm9uIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX0lOVEVSTEFDRURfTk9fSU1BR0VfSU5WRVJULCBDQ0RDX1NET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAyNDkgdG8gU0RPRlNULi4uXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4MDI0OSB0byBTRE9GU1QuLlxuIik7CiAJCX0KIAl9IGVsc2UgaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkgewogCQlyZWd3KENDRENfUFJPR1JFU1NJVkVfTk9fSU1BR0VfSU5WRVJULCBDQ0RDX1NET0ZTVCk7Ci0JCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4MDAwMCB0byBTRE9GU1QuLi5cbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweDAwMDAgdG8gU0RPRlNULi4uXG4iKTsKIAl9CiAKIAkvKgpAQCAtNjYyLDE4ICs2NjcsMTggQEAKIAl2YWwgfD0gKHBhcmFtcy0+d2luLmxlZnQpICYgQ0NEQ19WUF9PVVRfSE9SWl9TVF9NQVNLOwogCXJlZ3codmFsLCBDQ0RDX1ZQX09VVCk7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIFZQX09VVC4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIFZQX09VVC4uLlxuIiwgdmFsKTsKIAlyZWd3KHN5bl9tb2RlLCBDQ0RDX1NZTl9NT0RFKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIFNZTl9NT0RFLi4uXG4iLCBzeW5fbW9kZSk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBTWU5fTU9ERS4uLlxuIiwgc3luX21vZGUpOwogCiAJY2NkY19zYmxfcmVzZXQoKTsKLQlkZXZfZGJnKGRldiwgIlxuZW5kIG9mIGNjZGNfY29uZmlnX3Jhdy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5lbmQgb2YgY2NkY19jb25maWdfcmF3Li4uIik7CiAJY2NkY19yZWFkcmVncygpOwogfQogCiBzdGF0aWMgaW50IGNjZGNfY29uZmlndXJlKHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKIAkJY2NkY19jb25maWdfcmF3KCk7CiAJZWxzZQogCQljY2RjX2NvbmZpZ195Y2JjcigpOwpAQCAtNjgyLDI0ICs2ODcsMjQgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9idWZ0eXBlKGVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZSA9IGJ1Zl90eXBlOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci5idWZfdHlwZSA9IGJ1Zl90eXBlOwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwkJY2NkY19jZmcueWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGVudW0gY2NkY19idWZ0eXBlIGNjZGNfZ2V0X2J1ZnR5cGUodm9pZCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQlyZXR1cm4gY2NkY19od19wYXJhbXNfcmF3LmJ1Zl90eXBlOwotCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5idWZfdHlwZTsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfY2ZnLmJheWVyLmJ1Zl90eXBlOworCXJldHVybiBjY2RjX2NmZy55Y2Jjci5idWZfdHlwZTsKIH0KIAogc3RhdGljIGludCBjY2RjX2VudW1fcGl4KHUzMiAqcGl4LCBpbnQgaSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKIAkJaWYgKGkgPCBBUlJBWV9TSVpFKGNjZGNfcmF3X2JheWVyX3BpeF9mb3JtYXRzKSkgewogCQkJKnBpeCA9IGNjZGNfcmF3X2JheWVyX3BpeF9mb3JtYXRzW2ldOwogCQkJcmV0ID0gMDsKQEAgLTcxNSwxNyArNzIwLDE3IEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfcGl4ZWxfZm9ybWF0KHUzMiBwaXhmbXQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewotCQljY2RjX2h3X3BhcmFtc19yYXcucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQljY2RjX2NmZy5iYXllci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOwogCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCi0JCQljY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcy5hbGF3LmVuYWJsZSA9IDE7CisJCQljY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmFsYXcuZW5hYmxlID0gMTsKIAkJZWxzZSBpZiAocGl4Zm10ICE9IFY0TDJfUElYX0ZNVF9TQkdHUjE2KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKLQkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOworCQkJY2NkY19jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CiAJCWVsc2UgaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfVVlWWSkKLQkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCQkJY2NkY19jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CiAJCWVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTczNCwxNyArNzM5LDE2IEBACiAKIHN0YXRpYyB1MzIgY2NkY19nZXRfcGl4ZWxfZm9ybWF0KHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdzsKKwlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9ICZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmFsYXc7CiAJdTMyIHBpeGZtdDsKIAotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCiAJCWlmIChhbGF3LT5lbmFibGUpCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OwogCQllbHNlCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKIAllbHNlIHsKLQkJaWYgKGNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKKwkJaWYgKGNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOwogCQllbHNlCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKQEAgLTc1NCw1MyArNzU4LDUzIEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQljY2RjX2h3X3BhcmFtc19yYXcud2luID0gKndpbjsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIud2luID0gKndpbjsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbiA9ICp3aW47CisJCWNjZGNfY2ZnLnljYmNyLndpbiA9ICp3aW47CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfZ2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJKndpbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW47CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCSp3aW4gPSBjY2RjX2NmZy5iYXllci53aW47CiAJZWxzZQotCQkqd2luID0gY2NkY19od19wYXJhbXNfeWNiY3Iud2luOworCQkqd2luID0gY2NkY19jZmcueWNiY3Iud2luOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNjZGNfZ2V0X2xpbmVfbGVuZ3RoKHZvaWQpCiB7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50IGxlbjsKIAotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewogCQlpZiAoKGNvbmZpZ19wYXJhbXMtPmFsYXcuZW5hYmxlKSB8fAogCQkgICAgKGNvbmZpZ19wYXJhbXMtPmRhdGFfc3ogPT0gQ0NEQ19EQVRBXzhCSVRTKSkKLQkJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW4ud2lkdGg7CisJCQlsZW4gPSBjY2RjX2NmZy5iYXllci53aW4ud2lkdGg7CiAJCWVsc2UKLQkJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW4ud2lkdGggKiAyOworCQkJbGVuID0gY2NkY19jZmcuYmF5ZXIud2luLndpZHRoICogMjsKIAl9IGVsc2UKLQkJbGVuID0gY2NkY19od19wYXJhbXNfeWNiY3Iud2luLndpZHRoICogMjsKKwkJbGVuID0gY2NkY19jZmcueWNiY3Iud2luLndpZHRoICogMjsKIAlyZXR1cm4gQUxJR04obGVuLCAzMik7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfZnJhbWVfZm9ybWF0KGVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQljY2RjX2h3X3BhcmFtc19yYXcuZnJtX2ZtdCA9IGZybV9mbXQ7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLmZybV9mbXQgPSBmcm1fZm10OwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CisJCWNjZGNfY2ZnLnljYmNyLmZybV9mbXQgPSBmcm1fZm10OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgZW51bSBjY2RjX2ZybWZtdCBjY2RjX2dldF9mcmFtZV9mb3JtYXQodm9pZCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQlyZXR1cm4gY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQ7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2NmZy5iYXllci5mcm1fZm10OwogCWVsc2UKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3ljYmNyLmZybV9mbXQ7CisJCXJldHVybiBjY2RjX2NmZy55Y2Jjci5mcm1fZm10OwogfQogCiBzdGF0aWMgaW50IGNjZGNfZ2V0ZmlkKHZvaWQpCkBAIC04MTYsMTQgKzgyMCwxNCBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2h3X2lmX3BhcmFtcyhzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSAqcGFyYW1zKQogewotCWNjZGNfaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKKwljY2RjX2NmZy5pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOwogCiAJc3dpdGNoIChwYXJhbXMtPmlmX3R5cGUpIHsKIAljYXNlIFZQRkVfQlQ2NTY6CiAJY2FzZSBWUEZFX1lDQkNSX1NZTkNfMTY6CiAJY2FzZSBWUEZFX1lDQkNSX1NZTkNfODoKLQkJY2NkY19od19wYXJhbXNfeWNiY3IudmRfcG9sID0gcGFyYW1zLT52ZHBvbDsKLQkJY2NkY19od19wYXJhbXNfeWNiY3IuaGRfcG9sID0gcGFyYW1zLT5oZHBvbDsKKwkJY2NkY19jZmcueWNiY3IudmRfcG9sID0gcGFyYW1zLT52ZHBvbDsKKwkJY2NkY19jZmcueWNiY3IuaGRfcG9sID0gcGFyYW1zLT5oZHBvbDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogVE9ETyBhZGQgc3VwcG9ydCBmb3IgcmF3IGJheWVyIGhlcmUgKi8KQEAgLTgzOCw3ICs4NDIsNiBAQAogCS5od19vcHMgPSB7CiAJCS5vcGVuID0gY2NkY19vcGVuLAogCQkuY2xvc2UgPSBjY2RjX2Nsb3NlLAotCQkuc2V0X2NjZGNfYmFzZSA9IGNjZGNfc2V0X2NjZGNfYmFzZSwKIAkJLnJlc2V0ID0gY2NkY19zYmxfcmVzZXQsCiAJCS5lbmFibGUgPSBjY2RjX2VuYWJsZSwKIAkJLnNldF9od19pZl9wYXJhbXMgPSBjY2RjX3NldF9od19pZl9wYXJhbXMsCkBAIC04NTksMTkgKzg2MiwxMDUgQEAKIAl9LAogfTsKIAorc3RhdGljIGludCBfX2luaXQgZG02NDR4X2NjZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qCisJICogZmlyc3QgdHJ5IHRvIHJlZ2lzdGVyIHdpdGggdnBmZS4gSWYgbm90IGNvcnJlY3QgcGxhdGZvcm0sIHRoZW4gd2UKKwkgKiBkb24ndCBoYXZlIHRvIGlvbWFwCisJICovCisJc3RhdHVzID0gdnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbm9yZXM7CisJfQorCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZmFpbF9ub3JlczsKKwl9CisKKwljY2RjX2NmZy5iYXNlX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWNjZGNfY2ZnLmJhc2VfYWRkcikgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbm9tZW07CisJfQorCisJLyogR2V0IGFuZCBlbmFibGUgTWFzdGVyIGNsb2NrICovCisJY2NkY19jZmcubWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1hc3RlciIpOworCWlmIChJU19FUlIoY2NkY19jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gUFRSX0VSUihjY2RjX2NmZy5tY2xrKTsKKwkJZ290byBmYWlsX25vbWFwOworCX0KKwlpZiAoY2xrX2VuYWJsZShjY2RjX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisKKwkvKiBHZXQgYW5kIGVuYWJsZSBTbGF2ZSBjbG9jayAqLworCWNjZGNfY2ZnLnNjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJzbGF2ZSIpOworCWlmIChJU19FUlIoY2NkY19jZmcuc2NsaykpIHsKKwkJc3RhdHVzID0gUFRSX0VSUihjY2RjX2NmZy5zY2xrKTsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCWlmIChjbGtfZW5hYmxlKGNjZGNfY2ZnLnNjbGspKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9zY2xrOworCX0KKwljY2RjX2NmZy5kZXYgPSAmcGRldi0+ZGV2OworCXByaW50ayhLRVJOX05PVElDRSAiJXMgaXMgcmVnaXN0ZXJlZCB3aXRoIHZwZmUuXG4iLCBjY2RjX2h3X2Rldi5uYW1lKTsKKwlyZXR1cm4gMDsKK2ZhaWxfc2NsazoKKwljbGtfcHV0KGNjZGNfY2ZnLnNjbGspOworZmFpbF9tY2xrOgorCWNsa19wdXQoY2NkY19jZmcubWNsayk7CitmYWlsX25vbWFwOgorCWlvdW5tYXAoY2NkY19jZmcuYmFzZV9hZGRyKTsKK2ZhaWxfbm9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitmYWlsX25vcmVzOgorCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZG02NDR4X2NjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisKKwljbGtfcHV0KGNjZGNfY2ZnLm1jbGspOworCWNsa19wdXQoY2NkY19jZmcuc2Nsayk7CisJaW91bm1hcChjY2RjX2NmZy5iYXNlX2FkZHIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRtNjQ0eF9jY2RjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJkbTY0NHhfY2NkYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRtNjQ0eF9jY2RjX3JlbW92ZSksCisJLnByb2JlID0gZG02NDR4X2NjZGNfcHJvYmUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkbTY0NHhfY2NkY19pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJkbTY0NHhfY2NkY19pbml0XG4iKTsKLQlpZiAodnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpIDwgMCkKLQkJcmV0dXJuIC0xOwotCXByaW50ayhLRVJOX05PVElDRSAiJXMgaXMgcmVnaXN0ZXJlZCB3aXRoIHZwZmUuXG4iLAotCQljY2RjX2h3X2Rldi5uYW1lKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkbTY0NHhfY2NkY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZG02NDR4X2NjZGNfZXhpdCh2b2lkKQogewotCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkbTY0NHhfY2NkY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkbTY0NHhfY2NkY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YzI5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZi5jCkBAIC0wLDAgKzEsMTE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlIChJU0lGKSBkcml2ZXIKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBmb3IgY29uZmlndXJpbmcgdGhlIElTSUYgSVAgYXZhaWxhYmxlIG9uIERNMzY1IG9yIGFueSBvdGhlcgorICogVEkgU29Dcy4gVGhpcyBpcyB1c2VkIGZvciBjYXB0dXJpbmcgeXV2IG9yIGJheWVyIHZpZGVvIG9yIGltYWdlIGRhdGEKKyAqIGZyb20gYSBkZWNvZGVyIG9yIHNlbnNvci4gVGhpcyBJUCBpcyBzaW1pbGFyIHRvIHRoZSBDQ0RDIElQIG9uIERNMzU1CisgKiBhbmQgRE02NDQ2LCBidXQgd2l0aCBlbmhhbmNlZCBvciBhZGRpdGlvbmFsIGlwIGJsb2Nrcy4gVGhlIGRyaXZlcgorICogY29uZmlndXJlcyB0aGUgSVNJRiB1cG9uIGNvbW1hbmRzIGZyb20gdGhlIHZwZmUgYnJpZGdlIGRyaXZlciB0aHJvdWdoCisgKiBjY2RjX2h3X2RldmljZSBpbnRlcmZhY2UuCisgKgorICogVE9ETzogMSkgUmF3IGJheWVyIHBhcmFtZXRlciBzZXR0aW5ncyBhbmQgYmF5ZXIgY2FwdHVyZQorICoJIDIpIEFkZCBzdXBwb3J0IGZvciBjb250cm9sIGlvY3RsCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKworI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvaXNpZi5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBzcy5oPgorCisjaW5jbHVkZSAiaXNpZl9yZWdzLmgiCisjaW5jbHVkZSAiY2NkY19od19kZXZpY2UuaCIKKworLyogRGVmYXVsdHMgZm9yIG1vZHVsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgaXNpZl9jb25maWdfcGFyYW1zX3JhdyBpc2lmX2NvbmZpZ19kZWZhdWx0cyA9IHsKKwkubGluZWFyaXplID0geworCQkuZW4gPSAwLAorCQkuY29ycl9zaGZ0ID0gSVNJRl9OT19TSElGVCwKKwkJLnNjYWxlX2ZhY3QgPSB7MSwgMH0sCisJfSwKKwkuZGZfY3NjID0geworCQkuZGZfb3JfY3NjID0gMCwKKwkJLmNzYyA9IHsKKwkJCS5lbiA9IDAsCisJCX0sCisJfSwKKwkuZGZjID0geworCQkuZW4gPSAwLAorCX0sCisJLmJjbGFtcCA9IHsKKwkJLmVuID0gMCwKKwl9LAorCS5nYWluX29mZnNldCA9IHsKKwkJLmdhaW4gPSB7CisJCQkucl95ZSA9IHsxLCAwfSwKKwkJCS5ncl9jeSA9IHsxLCAwfSwKKwkJCS5nYl9nID0gezEsIDB9LAorCQkJLmJfbWcgPSB7MSwgMH0sCisJCX0sCisJfSwKKwkuY3VsbGluZyA9IHsKKwkJLmhjcGF0X29kZCA9IDB4ZmYsCisJCS5oY3BhdF9ldmVuID0gMHhmZiwKKwkJLnZjcGF0ID0gMHhmZiwKKwl9LAorCS5jb21wcmVzcyA9IHsKKwkJLmFsZyA9IElTSUZfQUxBVywKKwl9LAorfTsKKworLyogSVNJRiBvcGVyYXRpb24gY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBpc2lmX29wZXJfY29uZmlnIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJZW51bSB2cGZlX2h3X2lmX3R5cGUgaWZfdHlwZTsKKwlzdHJ1Y3QgaXNpZl95Y2Jjcl9jb25maWcgeWNiY3I7CisJc3RydWN0IGlzaWZfcGFyYW1zX3JhdyBiYXllcjsKKwllbnVtIGlzaWZfZGF0YV9wYWNrIGRhdGFfcGFjazsKKwkvKiBNYXN0ZXIgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICptY2xrOworCS8qIElTSUYgYmFzZSBhZGRyZXNzICovCisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJLyogSVNJRiBMaW5lYXIgVGFibGUgMCAqLworCXZvaWQgX19pb21lbSAqbGluZWFyX3RibDBfYWRkcjsKKwkvKiBJU0lGIExpbmVhciBUYWJsZSAxICovCisJdm9pZCBfX2lvbWVtICpsaW5lYXJfdGJsMV9hZGRyOworfSBpc2lmX2NmZyA9IHsKKwkueWNiY3IgPSB7CisJCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCwKKwkJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAorCQkud2luID0gSVNJRl9XSU5fTlRTQywKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKKwkJLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRCwKKwl9LAorCS5iYXllciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCisJCS53aW4gPSBJU0lGX1dJTl9WR0EsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuZ2FpbiA9IHsKKwkJCS5yX3llID0gezEsIDB9LAorCQkJLmdyX2N5ID0gezEsIDB9LAorCQkJLmdiX2cgPSB7MSwgMH0sCisJCQkuYl9tZyA9IHsxLCAwfSwKKwkJfSwKKwkJLmNmYV9wYXQgPSBJU0lGX0NGQV9QQVRfTU9TQUlDLAorCQkuZGF0YV9tc2IgPSBJU0lGX0JJVF9NU0JfMTEsCisJCS5jb25maWdfcGFyYW1zID0geworCQkJLmRhdGFfc2hpZnQgPSBJU0lGX05PX1NISUZULAorCQkJLmNvbF9wYXRfZmllbGQwID0geworCQkJCS5vbG9wID0gSVNJRl9HUkVFTl9CTFVFLAorCQkJCS5vbGVwID0gSVNJRl9CTFVFLAorCQkJCS5lbG9wID0gSVNJRl9SRUQsCisJCQkJLmVsZXAgPSBJU0lGX0dSRUVOX1JFRCwKKwkJCX0sCisJCQkuY29sX3BhdF9maWVsZDEgPSB7CisJCQkJLm9sb3AgPSBJU0lGX0dSRUVOX0JMVUUsCisJCQkJLm9sZXAgPSBJU0lGX0JMVUUsCisJCQkJLmVsb3AgPSBJU0lGX1JFRCwKKwkJCQkuZWxlcCA9IElTSUZfR1JFRU5fUkVELAorCQkJfSwKKwkJCS50ZXN0X3BhdF9nZW4gPSAwLAorCQl9LAorCX0sCisJLmRhdGFfcGFjayA9IElTSUZfREFUQV9QQUNLOCwKK307CisKKy8qIFJhdyBCYXllciBmb3JtYXRzICovCitzdGF0aWMgY29uc3QgdTMyIGlzaWZfcmF3X2JheWVyX3BpeF9mb3JtYXRzW10gPSB7CisJVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9QSVhfRk1UX1NCR0dSMTZ9OworCisvKiBSYXcgWVVWIGZvcm1hdHMgKi8KK3N0YXRpYyBjb25zdCB1MzIgaXNpZl9yYXdfeXV2X3BpeF9mb3JtYXRzW10gPSB7CisJVjRMMl9QSVhfRk1UX1VZVlksIFY0TDJfUElYX0ZNVF9ZVVlWfTsKKworLyogcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzICovCitzdGF0aWMgaW5saW5lIHUzMiByZWdyKHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGlzaWZfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgaXNpZl9jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworLyogcmVnX21vZGlmeSgpIC0gcmVhZCwgbW9kaWZ5IGFuZCB3cml0ZSByZWdpc3RlciAqLworc3RhdGljIGlubGluZSB1MzIgcmVnX21vZGlmeSh1MzIgbWFzaywgdTMyIHZhbCwgdTMyIG9mZnNldCkKK3sKKwl1MzIgbmV3X3ZhbCA9IChyZWdyKG9mZnNldCkgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisKKwlyZWd3KG5ld192YWwsIG9mZnNldCk7CisJcmV0dXJuIG5ld192YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWd3X2xpbl90YmwodTMyIHZhbCwgdTMyIG9mZnNldCwgaW50IGkpCit7CisJaWYgKCFpKQorCQlfX3Jhd193cml0ZWwodmFsLCBpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyICsgb2Zmc2V0KTsKKwllbHNlCisJCV9fcmF3X3dyaXRlbCh2YWwsIGlzaWZfY2ZnLmxpbmVhcl90YmwxX2FkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2Rpc2FibGVfYWxsX21vZHVsZXModm9pZCkKK3sKKwkvKiBkaXNhYmxlIEJDICovCisJcmVndygwLCBDTEFNUENGRyk7CisJLyogZGlzYWJsZSB2ZGZjICovCisJcmVndygwLCBERkNDVEwpOworCS8qIGRpc2FibGUgQ1NDICovCisJcmVndygwLCBDU0NDVEwpOworCS8qIGRpc2FibGUgbGluZWFyaXphdGlvbiAqLworCXJlZ3coMCwgTElOQ0ZHMCk7CisJLyogZGlzYWJsZSBvdGhlciBtb2R1bGVzIGhlcmUgYXMgdGhleSBhcmUgc3VwcG9ydGVkICovCit9CisKK3N0YXRpYyB2b2lkIGlzaWZfZW5hYmxlKGludCBlbikKK3sKKwlpZiAoIWVuKSB7CisJCS8qIEJlZm9yZSBkaXNhYmxlIGlzaWYsIGRpc2FibGUgYWxsIElTSUYgbW9kdWxlcyAqLworCQlpc2lmX2Rpc2FibGVfYWxsX21vZHVsZXMoKTsKKwkJLyoKKwkJICogd2FpdCBmb3IgbmV4dCBWRC4gQXNzdW1lIGxvd2VzdCBzY2FuIHJhdGUgaXMgMTIgSHouIFNvCisJCSAqIDEwMCBtc2VjIGRlbGF5IGlzIGdvb2QgZW5vdWdoCisJCSAqLworCQltc2xlZXAoMTAwKTsKKwl9CisJcmVnX21vZGlmeShJU0lGX1NZTkNFTl9WREhERU5fTUFTSywgZW4sIFNZTkNFTik7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfZW5hYmxlX291dHB1dF90b19zZHJhbShpbnQgZW4pCit7CisJcmVnX21vZGlmeShJU0lGX1NZTkNFTl9XRU5fTUFTSywgZW4gPDwgSVNJRl9TWU5DRU5fV0VOX1NISUZULCBTWU5DRU4pOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2NvbmZpZ19jdWxsaW5nKHN0cnVjdCBpc2lmX2N1bCAqY3VsKQoreworCXUzMiB2YWw7CisKKwkvKiBIb3Jpem9udGFsIHBhdHRlcm4gKi8KKwl2YWwgPSAoY3VsLT5oY3BhdF9ldmVuIDw8IENVTExfUEFUX0VWRU5fTElORV9TSElGVCkgfCBjdWwtPmhjcGF0X29kZDsKKwlyZWd3KHZhbCwgQ1VMSCk7CisKKwkvKiB2ZXJ0aWNhbCBwYXR0ZXJuICovCisJcmVndyhjdWwtPnZjcGF0LCBDVUxWKTsKKworCS8qIExQRiAqLworCXJlZ19tb2RpZnkoSVNJRl9MUEZfTUFTSyA8PCBJU0lGX0xQRl9TSElGVCwKKwkJICBjdWwtPmVuX2xwZiA8PCBJU0lGX0xQRl9TSElGVCwgTU9ERVNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfY29uZmlnX2dhaW5fb2Zmc2V0KHZvaWQpCit7CisJc3RydWN0IGlzaWZfZ2Fpbl9vZmZzZXRzX2FkaiAqZ2Fpbl9vZmZfcCA9CisJCSZpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmdhaW5fb2Zmc2V0OworCXUzMiB2YWw7CisKKwl2YWwgPSAoISFnYWluX29mZl9wLT5nYWluX3NkcmFtX2VuIDw8IEdBSU5fU0RSQU1fRU5fU0hJRlQpIHwKKwkgICAgICAoISFnYWluX29mZl9wLT5nYWluX2lwaXBlX2VuIDw8IEdBSU5fSVBJUEVfRU5fU0hJRlQpIHwKKwkgICAgICAoISFnYWluX29mZl9wLT5nYWluX2gzYV9lbiA8PCBHQUlOX0gzQV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPm9mZnNldF9zZHJhbV9lbiA8PCBPRlNUX1NEUkFNX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+b2Zmc2V0X2lwaXBlX2VuIDw8IE9GU1RfSVBJUEVfRU5fU0hJRlQpIHwKKwkgICAgICAoISFnYWluX29mZl9wLT5vZmZzZXRfaDNhX2VuIDw8IE9GU1RfSDNBX0VOX1NISUZUKTsKKworCXJlZ19tb2RpZnkoR0FJTl9PRkZTRVRfRU5fTUFTSywgdmFsLCBDR0FNTUFXRCk7CisKKwl2YWwgPSAoZ2Fpbl9vZmZfcC0+Z2Fpbi5yX3llLmludGVnZXIgPDwgR0FJTl9JTlRFR0VSX1NISUZUKSB8CisJICAgICAgIGdhaW5fb2ZmX3AtPmdhaW4ucl95ZS5kZWNpbWFsOworCXJlZ3codmFsLCBDUkdBSU4pOworCisJdmFsID0gKGdhaW5fb2ZmX3AtPmdhaW4uZ3JfY3kuaW50ZWdlciA8PCBHQUlOX0lOVEVHRVJfU0hJRlQpIHwKKwkgICAgICAgZ2Fpbl9vZmZfcC0+Z2Fpbi5ncl9jeS5kZWNpbWFsOworCXJlZ3codmFsLCBDR1JHQUlOKTsKKworCXZhbCA9IChnYWluX29mZl9wLT5nYWluLmdiX2cuaW50ZWdlciA8PCBHQUlOX0lOVEVHRVJfU0hJRlQpIHwKKwkgICAgICAgZ2Fpbl9vZmZfcC0+Z2Fpbi5nYl9nLmRlY2ltYWw7CisJcmVndyh2YWwsIENHQkdBSU4pOworCisJdmFsID0gKGdhaW5fb2ZmX3AtPmdhaW4uYl9tZy5pbnRlZ2VyIDw8IEdBSU5fSU5URUdFUl9TSElGVCkgfAorCSAgICAgICBnYWluX29mZl9wLT5nYWluLmJfbWcuZGVjaW1hbDsKKwlyZWd3KHZhbCwgQ0JHQUlOKTsKKworCXJlZ3coZ2Fpbl9vZmZfcC0+b2Zmc2V0LCBDT0ZTVEEpOworfQorCitzdGF0aWMgdm9pZCBpc2lmX3Jlc3RvcmVfZGVmYXVsdHModm9pZCkKK3sKKwllbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNvdXJjZSA9IFZQU1NfQ0NEQ0lOOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcbnN0YXJ0aW5nIGlzaWZfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOworCWlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMgPSBpc2lmX2NvbmZpZ19kZWZhdWx0czsKKwkvKiBFbmFibGUgY2xvY2sgdG8gSVNJRiwgSVBJUEVJRiBhbmQgQkwgKi8KKwl2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0NDRENfQ0xPQ0ssIDEpOworCXZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfSVBJUEVJRl9DTE9DSywgMSk7CisJdnBzc19lbmFibGVfY2xvY2soVlBTU19CTF9DTE9DSywgMSk7CisJLyogU2V0IGRlZmF1bHQgb2Zmc2V0IGFuZCBnYWluICovCisJaXNpZl9jb25maWdfZ2Fpbl9vZmZzZXQoKTsKKwl2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShzb3VyY2UpOworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5FbmQgb2YgaXNpZl9yZXN0b3JlX2RlZmF1bHRzLi4uIik7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9vcGVuKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlpc2lmX3Jlc3RvcmVfZGVmYXVsdHMoKTsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSB0aGUgd2luZG93IHNpemUgdG8gYmUgY2FwdHVyZSBpbiBJU0lGIHJlZyAqLworc3RhdGljIHZvaWQgaXNpZl9zZXR3aW4oc3RydWN0IHY0bDJfcmVjdCAqaW1hZ2Vfd2luLAorCQkJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10LCBpbnQgcHBjKQoreworCWludCBob3J6X3N0YXJ0LCBob3J6X25yX3BpeGVsczsKKwlpbnQgdmVydF9zdGFydCwgdmVydF9ucl9saW5lczsKKwlpbnQgbWlkX2ltZyA9IDA7CisKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuU3RhcnRpbmcgaXNpZl9zZXR3aW4uLi4iKTsKKwkvKgorCSAqIHBwYyAtIHBlciBwaXhlbCBjb3VudC4gaW5kaWNhdGVzIGhvdyBtYW55IHBpeGVscyBwZXIgY2VsbAorCSAqIG91dHB1dCB0byBTRFJBTS4gZXhhbXBsZSwgZm9yIHljYmNyLCBpdCBpcyBvbmUgeSBhbmQgb25lIGMsIHNvIDIuCisJICogcmF3IGNhcHR1cmUgdGhpcyBpcyAxCisJICovCisJaG9yel9zdGFydCA9IGltYWdlX3dpbi0+bGVmdCA8PCAocHBjIC0gMSk7CisJaG9yel9ucl9waXhlbHMgPSAoKGltYWdlX3dpbi0+d2lkdGgpIDw8IChwcGMgLSAxKSkgLSAxOworCisJLyogV3JpdGluZyB0aGUgaG9yaXpvbnRhbCBpbmZvIGludG8gdGhlIHJlZ2lzdGVycyAqLworCXJlZ3coaG9yel9zdGFydCAmIFNUQVJUX1BYX0hPUl9NQVNLLCBTUEgpOworCXJlZ3coaG9yel9ucl9waXhlbHMgJiBOVU1fUFhfSE9SX01BU0ssIExOSCk7CisJdmVydF9zdGFydCA9IGltYWdlX3dpbi0+dG9wOworCisJaWYgKGZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgeworCQl2ZXJ0X25yX2xpbmVzID0gKGltYWdlX3dpbi0+aGVpZ2h0ID4+IDEpIC0gMTsKKwkJdmVydF9zdGFydCA+Pj0gMTsKKwkJLyogVG8gYWNjb3VudCBmb3IgVkQgc2luY2UgbGluZSAwIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSAqLworCQl2ZXJ0X3N0YXJ0ICs9IDE7CisJfSBlbHNlIHsKKwkJLyogVG8gYWNjb3VudCBmb3IgVkQgc2luY2UgbGluZSAwIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSAqLworCQl2ZXJ0X3N0YXJ0ICs9IDE7CisJCXZlcnRfbnJfbGluZXMgPSBpbWFnZV93aW4tPmhlaWdodCAtIDE7CisJCS8qIGNvbmZpZ3VyZSBWRElOVDAgYW5kIFZESU5UMSAqLworCQltaWRfaW1nID0gdmVydF9zdGFydCArIChpbWFnZV93aW4tPmhlaWdodCAvIDIpOworCQlyZWd3KG1pZF9pbWcsIFZESU5UMSk7CisJfQorCisJcmVndygwLCBWRElOVDApOworCXJlZ3codmVydF9zdGFydCAmIFNUQVJUX1ZFUl9PTkVfTUFTSywgU0xWMCk7CisJcmVndyh2ZXJ0X3N0YXJ0ICYgU1RBUlRfVkVSX1RXT19NQVNLLCBTTFYxKTsKKwlyZWd3KHZlcnRfbnJfbGluZXMgJiBOVU1fTElORVNfVkVSLCBMTlYpOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2NvbmZpZ19iY2xhbXAoc3RydWN0IGlzaWZfYmxhY2tfY2xhbXAgKmJjKQoreworCXUzMiB2YWw7CisKKwkvKgorCSAqIERDIE9mZnNldCBpcyBhbHdheXMgYWRkZWQgdG8gaW1hZ2UgZGF0YSBpcnJlc3BlY3RpdmUgb2YgYmMgZW5hYmxlCisJICogc3RhdHVzCisJICovCisJcmVndyhiYy0+ZGNfb2Zmc2V0LCBDTERDT0ZTVCk7CisKKwlpZiAoYmMtPmVuKSB7CisJCXZhbCA9IGJjLT5iY19tb2RlX2NvbG9yIDw8IElTSUZfQkNfTU9ERV9DT0xPUl9TSElGVDsKKworCQkvKiBFbmFibGUgQkMgYW5kIGhvcml6b250YWwgY2xhbXAgY2FjdWxhdGlvbiBwYXJhbWF0ZXJzICovCisJCXZhbCA9IHZhbCB8IDEgfCAoYmMtPmhvcnoubW9kZSA8PCBJU0lGX0hPUlpfQkNfTU9ERV9TSElGVCk7CisKKwkJcmVndyh2YWwsIENMQU1QQ0ZHKTsKKworCQlpZiAoYmMtPmhvcnoubW9kZSAhPSBJU0lGX0hPUlpfQkNfRElTQUJMRSkgeworCQkJLyoKKwkJCSAqIFdpbmRvdyBjb3VudCBmb3IgY2FsY3VsYXRpb24KKwkJCSAqIEJhc2Ugd2luZG93IHNlbGVjdGlvbgorCQkJICogcGl4ZWwgbGltaXQKKwkJCSAqIEhvcml6b250YWwgc2l6ZSBvZiB3aW5kb3cKKwkJCSAqIHZlcnRpY2FsIHNpemUgb2YgdGhlIHdpbmRvdworCQkJICogSG9yaXpvbnRhbCBzdGFydCBwb3NpdGlvbiBvZiB0aGUgd2luZG93CisJCQkgKiBWZXJ0aWNhbCBzdGFydCBwb3NpdGlvbiBvZiB0aGUgd2luZG93CisJCQkgKi8KKwkJCXZhbCA9IGJjLT5ob3J6Lndpbl9jb3VudF9jYWxjIHwKKwkJCSAgICAgICgoISFiYy0+aG9yei5iYXNlX3dpbl9zZWxfY2FsYykgPDwKKwkJCQlJU0lGX0hPUlpfQkNfV0lOX1NFTF9TSElGVCkgfAorCQkJICAgICAgKCghIWJjLT5ob3J6LmNsYW1wX3BpeF9saW1pdCkgPDwKKwkJCQlJU0lGX0hPUlpfQkNfUElYX0xJTUlUX1NISUZUKSB8CisJCQkgICAgICAoYmMtPmhvcnoud2luX2hfc3pfY2FsYyA8PAorCQkJCUlTSUZfSE9SWl9CQ19XSU5fSF9TSVpFX1NISUZUKSB8CisJCQkgICAgICAoYmMtPmhvcnoud2luX3Zfc3pfY2FsYyA8PAorCQkJCUlTSUZfSE9SWl9CQ19XSU5fVl9TSVpFX1NISUZUKTsKKwkJCXJlZ3codmFsLCBDTEhXSU4wKTsKKworCQkJcmVndyhiYy0+aG9yei53aW5fc3RhcnRfaF9jYWxjLCBDTEhXSU4xKTsKKwkJCXJlZ3coYmMtPmhvcnoud2luX3N0YXJ0X3ZfY2FsYywgQ0xIV0lOMik7CisJCX0KKworCQkvKiB2ZXJ0aWNhbCBjbGFtcCBjYWN1bGF0aW9uIHBhcmFtYXRlcnMgKi8KKworCQkvKiBSZXNldCBjbGFtcCB2YWx1ZSBzZWwgZm9yIHByZXZpb3VzIGxpbmUgKi8KKwkJdmFsIHw9CisJCShiYy0+dmVydC5yZXNldF92YWxfc2VsIDw8IElTSUZfVkVSVF9CQ19SU1RfVkFMX1NFTF9TSElGVCkgfAorCQkoYmMtPnZlcnQubGluZV9hdmVfY29lZiA8PCBJU0lGX1ZFUlRfQkNfTElORV9BVkVfQ09FRl9TSElGVCk7CisJCXJlZ3codmFsLCBDTFZXSU4wKTsKKworCQkvKiBPcHRpY2FsIEJsYWNrIGhvcml6b250YWwgc3RhcnQgcG9zaXRpb24gKi8KKwkJcmVndyhiYy0+dmVydC5vYl9zdGFydF9oLCBDTFZXSU4xKTsKKwkJLyogT3B0aWNhbCBCbGFjayB2ZXJ0aWNhbCBzdGFydCBwb3NpdGlvbiAqLworCQlyZWd3KGJjLT52ZXJ0Lm9iX3N0YXJ0X3YsIENMVldJTjIpOworCQkvKiBPcHRpY2FsIEJsYWNrIHZlcnRpY2FsIHNpemUgZm9yIGNhbGN1bGF0aW9uICovCisJCXJlZ3coYmMtPnZlcnQub2Jfdl9zel9jYWxjLCBDTFZXSU4zKTsKKwkJLyogVmVydGljYWwgc3RhcnQgcG9zaXRpb24gZm9yIEJDIHN1YnRyYWN0aW9uICovCisJCXJlZ3coYmMtPnZlcnRfc3RhcnRfc3ViLCBDTFNWKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfY29uZmlnX2xpbmVhcml6YXRpb24oc3RydWN0IGlzaWZfbGluZWFyaXplICpsaW5lYXJpemUpCit7CisJdTMyIHZhbCwgaTsKKworCWlmICghbGluZWFyaXplLT5lbikgeworCQlyZWd3KDAsIExJTkNGRzApOworCQlyZXR1cm47CisJfQorCisJLyogc2hpZnQgdmFsdWUgZm9yIGNvcnJlY3Rpb24gJiBlbmFibGUgbGluZWFyaXphdGlvbiAoc2V0IGxzYikgKi8KKwl2YWwgPSAobGluZWFyaXplLT5jb3JyX3NoZnQgPDwgSVNJRl9MSU5fQ09SUlNGVF9TSElGVCkgfCAxOworCXJlZ3codmFsLCBMSU5DRkcwKTsKKworCS8qIFNjYWxlIGZhY3RvciAqLworCXZhbCA9ICgoISFsaW5lYXJpemUtPnNjYWxlX2ZhY3QuaW50ZWdlcikgPDwKKwkgICAgICAgSVNJRl9MSU5fU0NBTEVfRkFDVF9JTlRFR19TSElGVCkgfAorCSAgICAgICBsaW5lYXJpemUtPnNjYWxlX2ZhY3QuZGVjaW1hbDsKKwlyZWd3KHZhbCwgTElOQ0ZHMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSVNJRl9MSU5FQVJfVEFCX1NJWkU7IGkrKykgeworCQlpZiAoaSAlIDIpCisJCQlyZWd3X2xpbl90YmwobGluZWFyaXplLT50YWJsZVtpXSwgKChpID4+IDEpIDw8IDIpLCAxKTsKKwkJZWxzZQorCQkJcmVnd19saW5fdGJsKGxpbmVhcml6ZS0+dGFibGVbaV0sICgoaSA+PiAxKSA8PCAyKSwgMCk7CisJfQorfQorCitzdGF0aWMgaW50IGlzaWZfY29uZmlnX2RmYyhzdHJ1Y3QgaXNpZl9kZmMgKnZkZmMpCit7CisJLyogaW5pdGlhbGl6ZSByZXRyaWVzIHRvIGxvb3AgZm9yIG1heCB+IDI1MCB1c2VjICovCisJdTMyIHZhbCwgY291bnQsIHJldHJpZXMgPSBsb29wc19wZXJfamlmZnkgLyAoNDAwMC9IWik7CisJaW50IGk7CisKKwlpZiAoIXZkZmMtPmVuKQorCQlyZXR1cm4gMDsKKworCS8qIENvcnJlY3Rpb24gbW9kZSAqLworCXZhbCA9ICh2ZGZjLT5jb3JyX21vZGUgPDwgSVNJRl9WREZDX0NPUlJfTU9EX1NISUZUKTsKKworCS8qIENvcnJlY3Qgd2hvbGUgbGluZSBvciBwYXJ0aWFsICovCisJaWYgKHZkZmMtPmNvcnJfd2hvbGVfbGluZSkKKwkJdmFsIHw9IDEgPDwgSVNJRl9WREZDX0NPUlJfV0hPTEVfTE5fU0hJRlQ7CisKKwkvKiBsZXZlbCBzaGlmdCB2YWx1ZSAqLworCXZhbCB8PSB2ZGZjLT5kZWZfbGV2ZWxfc2hpZnQgPDwgSVNJRl9WREZDX0xFVkVMX1NIRlRfU0hJRlQ7CisKKwlyZWd3KHZhbCwgREZDQ1RMKTsKKworCS8qIERlZmVjdCBzYXR1cmF0aW9uIGxldmVsICovCisJcmVndyh2ZGZjLT5kZWZfc2F0X2xldmVsLCBWREZTQVRMVik7CisKKwlyZWd3KHZkZmMtPnRhYmxlWzBdLnBvc192ZXJ0LCBERkNNRU0wKTsKKwlyZWd3KHZkZmMtPnRhYmxlWzBdLnBvc19ob3J6LCBERkNNRU0xKTsKKwlpZiAodmRmYy0+Y29ycl9tb2RlID09IElTSUZfVkRGQ19OT1JNQUwgfHwKKwkgICAgdmRmYy0+Y29ycl9tb2RlID09IElTSUZfVkRGQ19IT1JaX0lOVEVSUE9MX0lGX1NBVCkgeworCQlyZWd3KHZkZmMtPnRhYmxlWzBdLmxldmVsX2F0X3BvcywgREZDTUVNMik7CisJCXJlZ3codmRmYy0+dGFibGVbMF0ubGV2ZWxfdXBfcGl4ZWxzLCBERkNNRU0zKTsKKwkJcmVndyh2ZGZjLT50YWJsZVswXS5sZXZlbF9sb3dfcGl4ZWxzLCBERkNNRU00KTsKKwl9CisKKwkvKiBzZXQgREZDTUFSU1QgYW5kIHNldCBERkNNV1IgKi8KKwl2YWwgPSByZWdyKERGQ01FTUNUTCkgfCAoMSA8PCBJU0lGX0RGQ01FTUNUTF9ERkNNQVJTVF9TSElGVCkgfCAxOworCXJlZ3codmFsLCBERkNNRU1DVEwpOworCisJY291bnQgPSByZXRyaWVzOworCXdoaWxlIChjb3VudCAmJiAocmVncihERkNNRU1DVEwpICYgMHgxKSkKKwkJY291bnQtLTsKKworCWlmICghY291bnQpIHsKKwkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJkZWZlY3QgdGFibGUgd3JpdGUgdGltZW91dCAhISFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMTsgaSA8IHZkZmMtPm51bV92ZGVmZWN0czsgaSsrKSB7CisJCXJlZ3codmRmYy0+dGFibGVbaV0ucG9zX3ZlcnQsIERGQ01FTTApOworCQlyZWd3KHZkZmMtPnRhYmxlW2ldLnBvc19ob3J6LCBERkNNRU0xKTsKKwkJaWYgKHZkZmMtPmNvcnJfbW9kZSA9PSBJU0lGX1ZERkNfTk9STUFMIHx8CisJCSAgICB2ZGZjLT5jb3JyX21vZGUgPT0gSVNJRl9WREZDX0hPUlpfSU5URVJQT0xfSUZfU0FUKSB7CisJCQlyZWd3KHZkZmMtPnRhYmxlW2ldLmxldmVsX2F0X3BvcywgREZDTUVNMik7CisJCQlyZWd3KHZkZmMtPnRhYmxlW2ldLmxldmVsX3VwX3BpeGVscywgREZDTUVNMyk7CisJCQlyZWd3KHZkZmMtPnRhYmxlW2ldLmxldmVsX2xvd19waXhlbHMsIERGQ01FTTQpOworCQl9CisJCXZhbCA9IHJlZ3IoREZDTUVNQ1RMKTsKKwkJLyogY2xlYXIgREZDTUFSU1QgYW5kIHNldCBERkNNV1IgKi8KKwkJdmFsICY9IH5CSVQoSVNJRl9ERkNNRU1DVExfREZDTUFSU1RfU0hJRlQpOworCQl2YWwgfD0gMTsKKwkJcmVndyh2YWwsIERGQ01FTUNUTCk7CisKKwkJY291bnQgPSByZXRyaWVzOworCQl3aGlsZSAoY291bnQgJiYgKHJlZ3IoREZDTUVNQ1RMKSAmIDB4MSkpCisJCQljb3VudC0tOworCisJCWlmICghY291bnQpIHsKKwkJCWRldl9lcnIoaXNpZl9jZmcuZGV2LAorCQkJCSJkZWZlY3QgdGFibGUgd3JpdGUgdGltZW91dCAhISFcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCWlmICh2ZGZjLT5udW1fdmRlZmVjdHMgPCBJU0lGX1ZERkNfVEFCTEVfU0laRSkgeworCQkvKiBFeHRyYSBjeWNsZSBuZWVkZWQgKi8KKwkJcmVndygwLCBERkNNRU0wKTsKKwkJcmVndygweDFGRkYsIERGQ01FTTEpOworCQlyZWd3KDEsIERGQ01FTUNUTCk7CisJfQorCisJLyogZW5hYmxlIFZERkMgKi8KKwlyZWdfbW9kaWZ5KCgxIDw8IElTSUZfVkRGQ19FTl9TSElGVCksICgxIDw8IElTSUZfVkRGQ19FTl9TSElGVCksCisJCSAgIERGQ0NUTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfY29uZmlnX2NzYyhzdHJ1Y3QgaXNpZl9kZl9jc2MgKmRmX2NzYykKK3sKKwl1MzIgdmFsMSA9IDAsIHZhbDIgPSAwLCBpOworCisJaWYgKCFkZl9jc2MtPmNzYy5lbikgeworCQlyZWd3KDAsIENTQ0NUTCk7CisJCXJldHVybjsKKwl9CisJZm9yIChpID0gMDsgaSA8IElTSUZfQ1NDX05VTV9DT0VGRjsgaSsrKSB7CisJCWlmICgoaSAlIDIpID09IDApIHsKKwkJCS8qIENTQ00gLSBMU0IgKi8KKwkJCXZhbDEgPSAoZGZfY3NjLT5jc2MuY29lZmZbaV0uaW50ZWdlciA8PAorCQkJCUlTSUZfQ1NDX0NPRUZfSU5URUdfU0hJRlQpIHwKKwkJCQlkZl9jc2MtPmNzYy5jb2VmZltpXS5kZWNpbWFsOworCQl9IGVsc2UgeworCisJCQkvKiBDU0NNIC0gTVNCICovCisJCQl2YWwyID0gKGRmX2NzYy0+Y3NjLmNvZWZmW2ldLmludGVnZXIgPDwKKwkJCQlJU0lGX0NTQ19DT0VGX0lOVEVHX1NISUZUKSB8CisJCQkJZGZfY3NjLT5jc2MuY29lZmZbaV0uZGVjaW1hbDsKKwkJCXZhbDIgPDw9IElTSUZfQ1NDTV9NU0JfU0hJRlQ7CisJCQl2YWwyIHw9IHZhbDE7CisJCQlyZWd3KHZhbDIsIChDU0NNMCArICgoaSAtIDEpIDw8IDEpKSk7CisJCX0KKwl9CisKKwkvKiBwcm9ncmFtIHRoZSBhY3RpdmUgYXJlYSAqLworCXJlZ3coZGZfY3NjLT5zdGFydF9waXgsIEZNVFNQSCk7CisJLyoKKwkgKiBvbmUgZXh0cmEgcGl4ZWwgYXMgcmVxdWlyZWQgZm9yIENTQy4gQWN0dWFsbHkgbnVtYmVyIG9mCisJICogcGl4ZWwgLSAxIHNob3VsZCBiZSBjb25maWd1cmVkIGluIHRoaXMgcmVnaXN0ZXIuIFNvIHdlCisJICogbmVlZCB0byBzdWJ0cmFjdCAxIGJlZm9yZSB3cml0aW5nIHRvIEZNVFNQSCwgYnV0IHdlIHdpbGwKKwkgKiBub3QgZG8gdGhpcyBzaW5jZSBjc2MgcmVxdWlyZXMgb25lIGV4dHJhIHBpeGVsCisJICovCisJcmVndyhkZl9jc2MtPm51bV9waXhlbHMsIEZNVExOSCk7CisJcmVndyhkZl9jc2MtPnN0YXJ0X2xpbmUsIEZNVFNMVik7CisJLyoKKwkgKiBvbmUgZXh0cmEgbGluZSBhcyByZXF1aXJlZCBmb3IgQ1NDLiBTZWUgcmVhc29uIGRvY3VtZW50ZWQgZm9yCisJICogbnVtX3BpeGVscworCSAqLworCXJlZ3coZGZfY3NjLT5udW1fbGluZXMsIEZNVExOVik7CisKKwkvKiBFbmFibGUgQ1NDICovCisJcmVndygxLCBDU0NDVEwpOworfQorCitzdGF0aWMgaW50IGlzaWZfY29uZmlnX3Jhdyh2b2lkKQoreworCXN0cnVjdCBpc2lmX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZpc2lmX2NmZy5iYXllcjsKKwlzdHJ1Y3QgaXNpZl9jb25maWdfcGFyYW1zX3JhdyAqbW9kdWxlX3BhcmFtcyA9CisJCSZpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zOworCXN0cnVjdCB2cHNzX3BnX2ZyYW1lX3NpemUgZnJhbWVfc2l6ZTsKKwlzdHJ1Y3QgdnBzc19zeW5jX3BvbCBzeW5jOworCXUzMiB2YWw7CisKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuU3RhcnRpbmcgaXNpZl9jb25maWdfcmF3Li5cbiIpOworCisJLyoKKwkgKiBDb25maWd1cmUgQ0NEQ0ZHIHJlZ2lzdGVyOi0KKwkgKiBTZXQgQ0NEIE5vdCB0byBzd2FwIGlucHV0IHNpbmNlIGlucHV0IGlzIFJBVyBkYXRhCisJICogU2V0IEZJRCBkZXRlY3Rpb24gZnVuY3Rpb24gdG8gTGF0Y2ggYXQgVi1TeW5jCisJICogU2V0IFdFTkxPRyAtIGlzaWYgdmFsaWQgYXJlYQorCSAqIFNldCBUUkdTRUwKKwkgKiBTZXQgRVhUUkcKKwkgKiBQYWNrZWQgdG8gOCBvciAxNiBiaXRzCisJICovCisKKwl2YWwgPSBJU0lGX1lDSU5TV1BfUkFXIHwgSVNJRl9DQ0RDRkdfRklETURfTEFUQ0hfVlNZTkMgfAorCQlJU0lGX0NDRENGR19XRU5MT0dfQU5EIHwgSVNJRl9DQ0RDRkdfVFJHU0VMX1dFTiB8CisJCUlTSUZfQ0NEQ0ZHX0VYVFJHX0RJU0FCTEUgfCBpc2lmX2NmZy5kYXRhX3BhY2s7CisKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHgleCB0byAuLi5DQ0RDRkcgXG4iLCB2YWwpOworCXJlZ3codmFsLCBDQ0RDRkcpOworCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIHZlcnRpY2FsIHN5bmMgcG9sYXJpdHkoTU9ERVNFVC5WRFBPTCkKKwkgKiBDb25maWd1cmUgdGhlIGhvcml6b250YWwgc3luYyBwb2xhcml0eSAoTU9ERVNFVC5IRFBPTCkKKwkgKiBDb25maWd1cmUgZnJhbWUgaWQgcG9sYXJpdHkgKE1PREVTRVQuRkxEUE9MKQorCSAqIENvbmZpZ3VyZSBkYXRhIHBvbGFyaXR5CisJICogQ29uZmlndXJlIEV4dGVybmFsIFdFTiBTZWxlY3Rpb24KKwkgKiBDb25maWd1cmUgZnJhbWUgZm9ybWF0KHByb2dyZXNzaXZlIG9yIGludGVybGFjZSkKKwkgKiBDb25maWd1cmUgcGl4ZWwgZm9ybWF0IChJbnB1dCBtb2RlKQorCSAqIENvbmZpZ3VyZSB0aGUgZGF0YSBzaGlmdAorCSAqLworCisJdmFsID0gSVNJRl9WREhET1VUX0lOUFVUIHwgKHBhcmFtcy0+dmRfcG9sIDw8IElTSUZfVkRfUE9MX1NISUZUKSB8CisJCShwYXJhbXMtPmhkX3BvbCA8PCBJU0lGX0hEX1BPTF9TSElGVCkgfAorCQkocGFyYW1zLT5maWRfcG9sIDw8IElTSUZfRklEX1BPTF9TSElGVCkgfAorCQkoSVNJRl9EQVRBUE9MX05PUk1BTCA8PCBJU0lGX0RBVEFQT0xfU0hJRlQpIHwKKwkJKElTSUZfRVhXRU5fRElTQUJMRSA8PCBJU0lGX0VYV0VOX1NISUZUKSB8CisJCShwYXJhbXMtPmZybV9mbXQgPDwgSVNJRl9GUk1fRk1UX1NISUZUKSB8CisJCShwYXJhbXMtPnBpeF9mbXQgPDwgSVNJRl9JTlBVVF9TSElGVCkgfAorCQkocGFyYW1zLT5jb25maWdfcGFyYW1zLmRhdGFfc2hpZnQgPDwgSVNJRl9EQVRBU0ZUX1NISUZUKTsKKworCXJlZ3codmFsLCBNT0RFU0VUKTsKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHgleCB0byBNT0RFU0VULi4uXG4iLCB2YWwpOworCisJLyoKKwkgKiBDb25maWd1cmUgR0FNTUFXRCByZWdpc3RlcgorCSAqIENGQSBwYXR0ZXJuIHNldHRpbmcKKwkgKi8KKwl2YWwgPSBwYXJhbXMtPmNmYV9wYXQgPDwgSVNJRl9HQU1NQVdEX0NGQV9TSElGVDsKKworCS8qIEdhbW1hIG1zYiAqLworCWlmIChtb2R1bGVfcGFyYW1zLT5jb21wcmVzcy5hbGcgPT0gSVNJRl9BTEFXKQorCQl2YWwgfD0gSVNJRl9BTEFXX0VOQUJMRTsKKworCXZhbCB8PSAocGFyYW1zLT5kYXRhX21zYiA8PCBJU0lGX0FMQVdfR0FNQV9XRF9TSElGVCk7CisJcmVndyh2YWwsIENHQU1NQVdEKTsKKworCS8qIENvbmZpZ3VyZSBEUENNIGNvbXByZXNzaW9uIHNldHRpbmdzICovCisJaWYgKG1vZHVsZV9wYXJhbXMtPmNvbXByZXNzLmFsZyA9PSBJU0lGX0RQQ00pIHsKKwkJdmFsID0gIEJJVChJU0lGX0RQQ01fRU5fU0hJRlQpIHwKKwkJICAgICAgIChtb2R1bGVfcGFyYW1zLT5jb21wcmVzcy5wcmVkIDw8CisJCSAgICAgICBJU0lGX0RQQ01fUFJFRElDVE9SX1NISUZUKTsKKwl9CisKKwlyZWd3KHZhbCwgTUlTQyk7CisKKwkvKiBDb25maWd1cmUgR2FpbiAmIE9mZnNldCAqLworCWlzaWZfY29uZmlnX2dhaW5fb2Zmc2V0KCk7CisKKwkvKiBDb25maWd1cmUgQ29sb3IgcGF0dGVybiAqLworCXZhbCA9IChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDAub2xvcCkgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDAub2xlcCA8PCAyKSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMC5lbG9wIDw8IDQpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQwLmVsZXAgPDwgNikgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDEub2xvcCA8PCA4KSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMS5vbGVwIDw8IDEwKSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMS5lbG9wIDw8IDEyKSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMS5lbGVwIDw8IDE0KTsKKwlyZWd3KHZhbCwgQ0NPTFApOworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAleCB0byBDQ09MUCAuLi5cbiIsIHZhbCk7CisKKwkvKiBDb25maWd1cmUgSFNJWkUgcmVnaXN0ZXIgICovCisJdmFsID0gKCEhcGFyYW1zLT5ob3J6X2ZsaXBfZW4pIDw8IElTSUZfSFNJWkVfRkxJUF9TSElGVDsKKworCS8qIGNhbGN1bGF0ZSBsaW5lIG9mZnNldCBpbiAzMiBieXRlcyBiYXNlZCBvbiBwYWNrIHZhbHVlICovCisJaWYgKGlzaWZfY2ZnLmRhdGFfcGFjayA9PSBJU0lGX1BBQ0tfOEJJVCkKKwkJdmFsIHw9ICgocGFyYW1zLT53aW4ud2lkdGggKyAzMSkgPj4gNSk7CisJZWxzZSBpZiAoaXNpZl9jZmcuZGF0YV9wYWNrID09IElTSUZfUEFDS18xMkJJVCkKKwkJdmFsIHw9ICgoKHBhcmFtcy0+d2luLndpZHRoICsKKwkJICAgICAgIChwYXJhbXMtPndpbi53aWR0aCA+PiAyKSkgKyAzMSkgPj4gNSk7CisJZWxzZQorCQl2YWwgfD0gKCgocGFyYW1zLT53aW4ud2lkdGggKiAyKSArIDMxKSA+PiA1KTsKKwlyZWd3KHZhbCwgSFNJWkUpOworCisJLyogQ29uZmlndXJlIFNET0ZTVCByZWdpc3RlciAgKi8KKwlpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX0lOVEVSTEFDRUQpIHsKKwkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuKSB7CisJCQkvKiBGb3IgaW50ZXJsYWNlIGludmVyc2UgbW9kZSAqLworCQkJcmVndygweDRCNkQsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHg0QjZEIHRvIFNET0ZTVC4uLlxuIik7CisJCX0gZWxzZSB7CisJCQkvKiBGb3IgaW50ZXJsYWNlIG5vbiBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coMHgwQjZELCBTRE9GU1QpOworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4MEI2RCB0byBTRE9GU1QuLi5cbiIpOworCQl9CisJfSBlbHNlIGlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpIHsKKwkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuKSB7CisJCQkvKiBGb3IgcHJvZ3Jlc3NpdmUgaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KDB4NDAwMCwgU0RPRlNUKTsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweDQwMDAgdG8gU0RPRlNULi4uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEZvciBwcm9ncmVzc2l2ZSBub24gaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KDB4MDAwMCwgU0RPRlNUKTsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweDAwMDAgdG8gU0RPRlNULi4uXG4iKTsKKwkJfQorCX0KKworCS8qIENvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KKwlpc2lmX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMSk7CisKKwkvKiBDb25maWd1cmUgQmxhY2sgQ2xhbXAgKi8KKwlpc2lmX2NvbmZpZ19iY2xhbXAoJm1vZHVsZV9wYXJhbXMtPmJjbGFtcCk7CisKKwkvKiBDb25maWd1cmUgVmVydGljYWwgRGVmZWN0aW9uIFBpeGVsIENvcnJlY3Rpb24gKi8KKwlpZiAoaXNpZl9jb25maWdfZGZjKCZtb2R1bGVfcGFyYW1zLT5kZmMpIDwgMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIW1vZHVsZV9wYXJhbXMtPmRmX2NzYy5kZl9vcl9jc2MpCisJCS8qIENvbmZpZ3VyZSBDb2xvciBTcGFjZSBDb252ZXJzaW9uICovCisJCWlzaWZfY29uZmlnX2NzYygmbW9kdWxlX3BhcmFtcy0+ZGZfY3NjKTsKKworCWlzaWZfY29uZmlnX2xpbmVhcml6YXRpb24oJm1vZHVsZV9wYXJhbXMtPmxpbmVhcml6ZSk7CisKKwkvKiBDb25maWd1cmUgQ3VsbGluZyAqLworCWlzaWZfY29uZmlnX2N1bGxpbmcoJm1vZHVsZV9wYXJhbXMtPmN1bGxpbmcpOworCisJLyogQ29uZmlndXJlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIG9mZnNldHMoREZDLExTQyxHYWluKSAqLworCXJlZ3cobW9kdWxlX3BhcmFtcy0+aG9yel9vZmZzZXQsIERBVEFIT0ZTVCk7CisJcmVndyhtb2R1bGVfcGFyYW1zLT52ZXJ0X29mZnNldCwgREFUQVZPRlNUKTsKKworCS8qIFNldHVwIHRlc3QgcGF0dGVybiBpZiBlbmFibGVkICovCisJaWYgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy50ZXN0X3BhdF9nZW4pIHsKKwkJLyogVXNlIHRoZSBIRC9WRCBwb2wgc2V0dGluZ3MgZnJvbSB1c2VyICovCisJCXN5bmMuY2NkcGdfaGRwb2wgPSBwYXJhbXMtPmhkX3BvbDsKKwkJc3luYy5jY2RwZ192ZHBvbCA9IHBhcmFtcy0+dmRfcG9sOworCQlkbTM2NV92cHNzX3NldF9zeW5jX3BvbChzeW5jKTsKKwkJZnJhbWVfc2l6ZS5obHBmciA9IGlzaWZfY2ZnLmJheWVyLndpbi53aWR0aDsKKwkJZnJhbWVfc2l6ZS5wcGxlbiA9IGlzaWZfY2ZnLmJheWVyLndpbi5oZWlnaHQ7CisJCWRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoZnJhbWVfc2l6ZSk7CisJCXZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKFZQU1NfUEdMUEJLKTsKKwl9CisKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuRW5kIG9mIGlzaWZfY29uZmlnX3ljYmNyLi4uXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc2lmX3NldF9idWZ0eXBlKGVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlpc2lmX2NmZy5iYXllci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCWVsc2UKKwkJaXNpZl9jZmcueWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKKworCXJldHVybiAwOworCit9CitzdGF0aWMgZW51bSBjY2RjX2J1ZnR5cGUgaXNpZl9nZXRfYnVmdHlwZSh2b2lkKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gaXNpZl9jZmcuYmF5ZXIuYnVmX3R5cGU7CisKKwlyZXR1cm4gaXNpZl9jZmcueWNiY3IuYnVmX3R5cGU7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9lbnVtX3BpeCh1MzIgKnBpeCwgaW50IGkpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpZiAoaSA8IEFSUkFZX1NJWkUoaXNpZl9yYXdfYmF5ZXJfcGl4X2Zvcm1hdHMpKSB7CisJCQkqcGl4ID0gaXNpZl9yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbaV07CisJCQlyZXQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGkgPCBBUlJBWV9TSVpFKGlzaWZfcmF3X3l1dl9waXhfZm9ybWF0cykpIHsKKwkJCSpwaXggPSBpc2lmX3Jhd195dXZfcGl4X2Zvcm1hdHNbaV07CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpc2lmX3NldF9waXhlbF9mb3JtYXQodW5zaWduZWQgaW50IHBpeGZtdCkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpIHsKKwkJCWlmICgoaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgIT0KKwkJCSAgICAgSVNJRl9BTEFXKSAmJgorCQkJICAgIChpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmNvbXByZXNzLmFsZyAhPQorCQkJICAgICBJU0lGX0RQQ00pKSB7CisJCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsCisJCQkJCSJFaXRoZXIgY29uZmlndXJlIEEtTGF3IG9yIERQQ01cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaXNpZl9jZmcuZGF0YV9wYWNrID0gSVNJRl9QQUNLXzhCSVQ7CisJCX0gZWxzZSBpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjE2KSB7CisJCQlpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmNvbXByZXNzLmFsZyA9CisJCQkJCUlTSUZfTk9fQ09NUFJFU1NJT047CisJCQlpc2lmX2NmZy5kYXRhX3BhY2sgPSBJU0lGX1BBQ0tfMTZCSVQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlzaWZfY2ZnLmJheWVyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJfSBlbHNlIHsKKwkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKKwkJCWlzaWZfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOworCQllbHNlIGlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1VZVlkpCisJCQlpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlzaWZfY2ZnLmRhdGFfcGFjayA9IElTSUZfUEFDS184QklUOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBpc2lmX2dldF9waXhlbF9mb3JtYXQodm9pZCkKK3sKKwl1MzIgcGl4Zm10OworCisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWlmIChpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmNvbXByZXNzLmFsZyA9PSBJU0lGX0FMQVcgfHwKKwkJICAgIGlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnID09IElTSUZfRFBDTSkKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJCWVsc2UKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjE2OworCWVsc2UgeworCQlpZiAoaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCWVsc2UKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCX0KKwlyZXR1cm4gcGl4Zm10OworfQorCitzdGF0aWMgaW50IGlzaWZfc2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJaXNpZl9jZmcuYmF5ZXIud2luLnRvcCA9IHdpbi0+dG9wOworCQlpc2lmX2NmZy5iYXllci53aW4ubGVmdCA9IHdpbi0+bGVmdDsKKwkJaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoID0gd2luLT53aWR0aDsKKwkJaXNpZl9jZmcuYmF5ZXIud2luLmhlaWdodCA9IHdpbi0+aGVpZ2h0OworCX0gZWxzZSB7CisJCWlzaWZfY2ZnLnljYmNyLndpbi50b3AgPSB3aW4tPnRvcDsKKwkJaXNpZl9jZmcueWNiY3Iud2luLmxlZnQgPSB3aW4tPmxlZnQ7CisJCWlzaWZfY2ZnLnljYmNyLndpbi53aWR0aCA9IHdpbi0+d2lkdGg7CisJCWlzaWZfY2ZnLnljYmNyLndpbi5oZWlnaHQgPSB3aW4tPmhlaWdodDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfZ2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCSp3aW4gPSBpc2lmX2NmZy5iYXllci53aW47CisJZWxzZQorCQkqd2luID0gaXNpZl9jZmcueWNiY3Iud2luOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlzaWZfZ2V0X2xpbmVfbGVuZ3RoKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlmIChpc2lmX2NmZy5kYXRhX3BhY2sgPT0gSVNJRl9QQUNLXzhCSVQpCisJCQlsZW4gPSAoKGlzaWZfY2ZnLmJheWVyLndpbi53aWR0aCkpOworCQllbHNlIGlmIChpc2lmX2NmZy5kYXRhX3BhY2sgPT0gSVNJRl9QQUNLXzEyQklUKQorCQkJbGVuID0gKCgoaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoICogMikgKworCQkJCSAoaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoID4+IDIpKSk7CisJCWVsc2UKKwkJCWxlbiA9ICgoKGlzaWZfY2ZnLmJheWVyLndpbi53aWR0aCAqIDIpKSk7CisJfSBlbHNlCisJCWxlbiA9ICgoKGlzaWZfY2ZnLnljYmNyLndpbi53aWR0aCAqIDIpKSk7CisJcmV0dXJuIEFMSUdOKGxlbiwgMzIpOworfQorCitzdGF0aWMgaW50IGlzaWZfc2V0X2ZyYW1lX2Zvcm1hdChlbnVtIGNjZGNfZnJtZm10IGZybV9mbXQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWlzaWZfY2ZnLmJheWVyLmZybV9mbXQgPSBmcm1fZm10OworCWVsc2UKKwkJaXNpZl9jZmcueWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgZW51bSBjY2RjX2ZybWZtdCBpc2lmX2dldF9mcmFtZV9mb3JtYXQodm9pZCkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGlzaWZfY2ZnLmJheWVyLmZybV9mbXQ7CisJcmV0dXJuIGlzaWZfY2ZnLnljYmNyLmZybV9mbXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9nZXRmaWQodm9pZCkKK3sKKwlyZXR1cm4gKHJlZ3IoTU9ERVNFVCkgPj4gMTUpICYgMHgxOworfQorCisvKiBtaXNjIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGlzaWZfc2V0ZmJhZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZWd3KChhZGRyID4+IDIxKSAmIDB4MDdmZiwgQ0FEVSk7CisJcmVndygoYWRkciA+PiA1KSAmIDB4MGZmZmYsIENBREwpOworfQorCitzdGF0aWMgaW50IGlzaWZfc2V0X2h3X2lmX3BhcmFtcyhzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSAqcGFyYW1zKQoreworCWlzaWZfY2ZnLmlmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CisKKwlzd2l0Y2ggKHBhcmFtcy0+aWZfdHlwZSkgeworCWNhc2UgVlBGRV9CVDY1NjoKKwljYXNlIFZQRkVfQlQ2NTZfMTBCSVQ6CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfODoKKwkJaXNpZl9jZmcueWNiY3IucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQ7CisJCWlzaWZfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCQlicmVhazsKKwljYXNlIFZQRkVfQlQxMTIwOgorCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgorCQlpc2lmX2NmZy55Y2Jjci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfMTZCSVQ7CisJCWlzaWZfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCQlicmVhazsKKwljYXNlIFZQRkVfUkFXX0JBWUVSOgorCQlpc2lmX2NmZy5iYXllci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgaW50ZXJmYWNlIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSBJU0lGIGZvciBZQ2JDciBwYXJhbWV0ZXJzLiAqLworc3RhdGljIGludCBpc2lmX2NvbmZpZ195Y2Jjcih2b2lkKQoreworCXN0cnVjdCBpc2lmX3ljYmNyX2NvbmZpZyAqcGFyYW1zID0gJmlzaWZfY2ZnLnljYmNyOworCXN0cnVjdCB2cHNzX3BnX2ZyYW1lX3NpemUgZnJhbWVfc2l6ZTsKKwl1MzIgbW9kZXNldCA9IDAsIGNjZGNmZyA9IDA7CisJc3RydWN0IHZwc3Nfc3luY19wb2wgc3luYzsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5TdGFydGluZyBpc2lmX2NvbmZpZ195Y2Jjci4uLiIpOworCisJLyogY29uZmlndXJlIHBpeGVsIGZvcm1hdCBvciBpbnB1dCBtb2RlICovCisJbW9kZXNldCA9IG1vZGVzZXQgfCAocGFyYW1zLT5waXhfZm10IDw8IElTSUZfSU5QVVRfU0hJRlQpIHwKKwkJICAocGFyYW1zLT5mcm1fZm10IDw8IElTSUZfRlJNX0ZNVF9TSElGVCkgfAorCQkgIChwYXJhbXMtPmZpZF9wb2wgPDwgSVNJRl9GSURfUE9MX1NISUZUKSB8CisJCSAgKHBhcmFtcy0+aGRfcG9sIDw8IElTSUZfSERfUE9MX1NISUZUKSB8CisJCSAgKHBhcmFtcy0+dmRfcG9sIDw8IElTSUZfVkRfUE9MX1NISUZUKTsKKworCS8qIHBhY2sgdGhlIGRhdGEgdG8gOC1iaXQgSVNJRkNGRyAqLworCXN3aXRjaCAoaXNpZl9jZmcuaWZfdHlwZSkgeworCWNhc2UgVlBGRV9CVDY1NjoKKwkJaWYgKHBhcmFtcy0+cGl4X2ZtdCAhPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklUKSB7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgcGl4X2ZtdChpbnB1dCBtb2RlKVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQltb2Rlc2V0IHw9IChWUEZFX1BJTlBPTF9ORUdBVElWRSA8PCBJU0lGX1ZEX1BPTF9TSElGVCk7CisJCXJlZ3coMywgUkVDNjU2SUYpOworCQljY2RjZmcgPSBjY2RjZmcgfCBJU0lGX0RBVEFfUEFDSzggfCBJU0lGX1lDSU5TV1BfWUNCQ1I7CisJCWJyZWFrOworCWNhc2UgVlBGRV9CVDY1Nl8xMEJJVDoKKwkJaWYgKHBhcmFtcy0+cGl4X2ZtdCAhPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklUKSB7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgcGl4X2ZtdChpbnB1dCBtb2RlKVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBzZXR1cCBCVC42NTYsIGVtYmVkZGVkIHN5bmMgICovCisJCXJlZ3coMywgUkVDNjU2SUYpOworCQkvKiBlbmFibGUgMTAgYml0IG1vZGUgaW4gY2NkY2ZnICovCisJCWNjZGNmZyA9IGNjZGNmZyB8IElTSUZfREFUQV9QQUNLOCB8IElTSUZfWUNJTlNXUF9ZQ0JDUiB8CisJCQlJU0lGX0JXNjU2X0VOQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBWUEZFX0JUMTEyMDoKKwkJaWYgKHBhcmFtcy0+cGl4X2ZtdCAhPSBDQ0RDX1BJWEZNVF9ZQ0JDUl8xNkJJVCkgeworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIHBpeF9mbXQoaW5wdXQgbW9kZSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcmVndygzLCBSRUM2NTZJRik7CisJCWJyZWFrOworCisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfODoKKwkJY2NkY2ZnIHw9IElTSUZfREFUQV9QQUNLODsKKwkJY2NkY2ZnIHw9IElTSUZfWUNJTlNXUF9ZQ0JDUjsKKwkJaWYgKHBhcmFtcy0+cGl4X2ZtdCAhPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklUKSB7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgcGl4X2ZtdChpbnB1dCBtb2RlKVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ18xNjoKKwkJaWYgKHBhcmFtcy0+cGl4X2ZtdCAhPSBDQ0RDX1BJWEZNVF9ZQ0JDUl8xNkJJVCkgeworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIHBpeF9mbXQoaW5wdXQgbW9kZSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSAqLworCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgaW50ZXJmYWNlIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWd3KG1vZGVzZXQsIE1PREVTRVQpOworCisJLyogU2V0IHVwIHBpeCBvcmRlciAqLworCWNjZGNmZyB8PSBwYXJhbXMtPnBpeF9vcmRlciA8PCBJU0lGX1BJWF9PUkRFUl9TSElGVDsKKworCXJlZ3coY2NkY2ZnLCBDQ0RDRkcpOworCisJLyogY29uZmlndXJlIHZpZGVvIHdpbmRvdyAqLworCWlmICgoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX0JUMTEyMCkgfHwKKwkgICAgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9ZQ0JDUl9TWU5DXzE2KSkKKwkJaXNpZl9zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDEpOworCWVsc2UKKwkJaXNpZl9zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDIpOworCisJLyoKKwkgKiBjb25maWd1cmUgdGhlIGhvcml6b250YWwgbGluZSBvZmZzZXQKKwkgKiB0aGlzIGlzIGRvbmUgYnkgcm91bmRpbmcgdXAgd2lkdGggdG8gYSBtdWx0aXBsZSBvZiAxNiBwaXhlbHMKKwkgKiBhbmQgbXVsdGlwbHkgYnkgdHdvIHRvIGFjY291bnQgZm9yIHk6Y2I6Y3IgNDoyOjIgZGF0YQorCSAqLworCXJlZ3coKCgoKHBhcmFtcy0+d2luLndpZHRoICogMikgKyAzMSkgJiAweGZmZmZmZmUwKSA+PiA1KSwgSFNJWkUpOworCisJLyogY29uZmlndXJlIHRoZSBtZW1vcnkgbGluZSBvZmZzZXQgKi8KKwlpZiAoKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSAmJgorCSAgICAocGFyYW1zLT5idWZfdHlwZSA9PSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVEKSkKKwkJLyogdHdvIGZpZWxkcyBhcmUgaW50ZXJsZWF2ZWQgaW4gbWVtb3J5ICovCisJCXJlZ3coMHgwMDAwMDI0OSwgU0RPRlNUKTsKKworCS8qIFNldHVwIHRlc3QgcGF0dGVybiBpZiBlbmFibGVkICovCisJaWYgKGlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMudGVzdF9wYXRfZ2VuKSB7CisJCXN5bmMuY2NkcGdfaGRwb2wgPSBwYXJhbXMtPmhkX3BvbDsKKwkJc3luYy5jY2RwZ192ZHBvbCA9IHBhcmFtcy0+dmRfcG9sOworCQlkbTM2NV92cHNzX3NldF9zeW5jX3BvbChzeW5jKTsKKwkJZG0zNjVfdnBzc19zZXRfcGdfZnJhbWVfc2l6ZShmcmFtZV9zaXplKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9jb25maWd1cmUodm9pZCkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGlzaWZfY29uZmlnX3JhdygpOworCXJldHVybiBpc2lmX2NvbmZpZ195Y2JjcigpOworfQorCitzdGF0aWMgaW50IGlzaWZfY2xvc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCS8qIGNvcHkgZGVmYXVsdHMgdG8gbW9kdWxlIHBhcmFtcyAqLworCWlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMgPSBpc2lmX2NvbmZpZ19kZWZhdWx0czsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjY2RjX2h3X2RldmljZSBpc2lmX2h3X2RldiA9IHsKKwkubmFtZSA9ICJJU0lGIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuaHdfb3BzID0geworCQkub3BlbiA9IGlzaWZfb3BlbiwKKwkJLmNsb3NlID0gaXNpZl9jbG9zZSwKKwkJLmVuYWJsZSA9IGlzaWZfZW5hYmxlLAorCQkuZW5hYmxlX291dF90b19zZHJhbSA9IGlzaWZfZW5hYmxlX291dHB1dF90b19zZHJhbSwKKwkJLnNldF9od19pZl9wYXJhbXMgPSBpc2lmX3NldF9od19pZl9wYXJhbXMsCisJCS5jb25maWd1cmUgPSBpc2lmX2NvbmZpZ3VyZSwKKwkJLnNldF9idWZ0eXBlID0gaXNpZl9zZXRfYnVmdHlwZSwKKwkJLmdldF9idWZ0eXBlID0gaXNpZl9nZXRfYnVmdHlwZSwKKwkJLmVudW1fcGl4ID0gaXNpZl9lbnVtX3BpeCwKKwkJLnNldF9waXhlbF9mb3JtYXQgPSBpc2lmX3NldF9waXhlbF9mb3JtYXQsCisJCS5nZXRfcGl4ZWxfZm9ybWF0ID0gaXNpZl9nZXRfcGl4ZWxfZm9ybWF0LAorCQkuc2V0X2ZyYW1lX2Zvcm1hdCA9IGlzaWZfc2V0X2ZyYW1lX2Zvcm1hdCwKKwkJLmdldF9mcmFtZV9mb3JtYXQgPSBpc2lmX2dldF9mcmFtZV9mb3JtYXQsCisJCS5zZXRfaW1hZ2Vfd2luZG93ID0gaXNpZl9zZXRfaW1hZ2Vfd2luZG93LAorCQkuZ2V0X2ltYWdlX3dpbmRvdyA9IGlzaWZfZ2V0X2ltYWdlX3dpbmRvdywKKwkJLmdldF9saW5lX2xlbmd0aCA9IGlzaWZfZ2V0X2xpbmVfbGVuZ3RoLAorCQkuc2V0ZmJhZGRyID0gaXNpZl9zZXRmYmFkZHIsCisJCS5nZXRmaWQgPSBpc2lmX2dldGZpZCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXNpZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXZvaWQgKCpzZXR1cF9waW5tdXgpKHZvaWQpOworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCXZvaWQgKl9faW9tZW0gYWRkcjsKKwlpbnQgc3RhdHVzID0gMCwgaTsKKworCS8qCisJICogZmlyc3QgdHJ5IHRvIHJlZ2lzdGVyIHdpdGggdnBmZS4gSWYgbm90IGNvcnJlY3QgcGxhdGZvcm0sIHRoZW4gd2UKKwkgKiBkb24ndCBoYXZlIHRvIGlvbWFwCisJICovCisJc3RhdHVzID0gdnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZSgmaXNpZl9od19kZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogR2V0IGFuZCBlbmFibGUgTWFzdGVyIGNsb2NrICovCisJaXNpZl9jZmcubWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1hc3RlciIpOworCWlmIChJU19FUlIoaXNpZl9jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gUFRSX0VSUihpc2lmX2NmZy5tY2xrKTsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCWlmIChjbGtfZW5hYmxlKGlzaWZfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKworCS8qIFBsYXRmb3JtIGRhdGEgaG9sZHMgc2V0dXBfcGlubXV4IGZ1bmN0aW9uIHB0ciAqLworCWlmIChOVUxMID09IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKwlzZXR1cF9waW5tdXggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkvKgorCSAqIHNldHVwIE11eCBjb25maWd1cmF0aW9uIGZvciBjY2RjIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZm9yCisJICogZGlmZmVyZW50IFNvQ3MgdXNpbmcgdGhpcyBDQ0RDCisJICovCisJc2V0dXBfcGlubXV4KCk7CisKKwlpID0gMDsKKwkvKiBHZXQgdGhlIElTSUYgYmFzZSBhZGRyZXNzLCBsaW5lYXJpemF0aW9uIHRhYmxlMCBhbmQgdGFibGUxIGFkZHIuICovCisJd2hpbGUgKGkgPCAzKSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgaSk7CisJCWlmICghcmVzKSB7CisJCQlzdGF0dXMgPSAtRU5PREVWOworCQkJZ290byBmYWlsX25vYmFzZV9yZXM7CisJCX0KKwkJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkJIHJlcy0+bmFtZSk7CisJCWlmICghcmVzKSB7CisJCQlzdGF0dXMgPSAtRUJVU1k7CisJCQlnb3RvIGZhaWxfbm9iYXNlX3JlczsKKwkJfQorCQlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJCWlmICghYWRkcikgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZmFpbF9iYXNlX2lvbWFwOworCQl9CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQkvKiBJU0lGIGJhc2UgYWRkcmVzcyAqLworCQkJaXNpZl9jZmcuYmFzZV9hZGRyID0gYWRkcjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQkvKiBJU0lGIGxpbmVhciB0YmwwIGFkZHJlc3MgKi8KKwkJCWlzaWZfY2ZnLmxpbmVhcl90YmwwX2FkZHIgPSBhZGRyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBJU0lGIGxpbmVhciB0YmwwIGFkZHJlc3MgKi8KKwkJCWlzaWZfY2ZnLmxpbmVhcl90YmwxX2FkZHIgPSBhZGRyOworCQkJYnJlYWs7CisJCX0KKwkJaSsrOworCX0KKwlpc2lmX2NmZy5kZXYgPSAmcGRldi0+ZGV2OworCisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsCisJCWlzaWZfaHdfZGV2Lm5hbWUpOworCXJldHVybiAwOworZmFpbF9iYXNlX2lvbWFwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWktLTsKK2ZhaWxfbm9iYXNlX3JlczoKKwlpZiAoaXNpZl9jZmcuYmFzZV9hZGRyKQorCQlpb3VubWFwKGlzaWZfY2ZnLmJhc2VfYWRkcik7CisJaWYgKGlzaWZfY2ZnLmxpbmVhcl90YmwwX2FkZHIpCisJCWlvdW5tYXAoaXNpZl9jZmcubGluZWFyX3RibDBfYWRkcik7CisKKwl3aGlsZSAoaSA+PSAwKSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgaSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCQlpLS07CisJfQorZmFpbF9tY2xrOgorCWNsa19wdXQoaXNpZl9jZmcubWNsayk7CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZpc2lmX2h3X2Rldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBpc2lmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCWludCBpID0gMDsKKworCWlvdW5tYXAoaXNpZl9jZmcuYmFzZV9hZGRyKTsKKwlpb3VubWFwKGlzaWZfY2ZnLmxpbmVhcl90YmwwX2FkZHIpOworCWlvdW5tYXAoaXNpZl9jZmcubGluZWFyX3RibDFfYWRkcik7CisJd2hpbGUgKGkgPCAzKSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgaSk7CisJCWlmIChyZXMpCisJCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwkJaSsrOworCX0KKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmlzaWZfaHdfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNpZl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiaXNpZiIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGlzaWZfcmVtb3ZlKSwKKwkucHJvYmUgPSBpc2lmX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXNpZl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNpZl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXNpZl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpc2lmX2luaXQpOworbW9kdWxlX2V4aXQoaXNpZl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWZfcmVncy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWZfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3Yjg4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZl9yZWdzLmgKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX0lTSUZfUkVHU19ICisjZGVmaW5lIF9JU0lGX1JFR1NfSAorCisvKiBJU0lGIHJlZ2lzdGVycyByZWxhdGl2ZSBvZmZzZXRzICovCisjZGVmaW5lIFNZTkNFTgkJCQkJMHgwMAorI2RlZmluZSBNT0RFU0VUCQkJCQkweDA0CisjZGVmaW5lIEhEVwkJCQkJMHgwOAorI2RlZmluZSBWRFcJCQkJCTB4MGMKKyNkZWZpbmUgUFBMTgkJCQkJMHgxMAorI2RlZmluZSBMUEZSCQkJCQkweDE0CisjZGVmaW5lIFNQSAkJCQkJMHgxOAorI2RlZmluZSBMTkgJCQkJCTB4MWMKKyNkZWZpbmUgU0xWMAkJCQkJMHgyMAorI2RlZmluZSBTTFYxCQkJCQkweDI0CisjZGVmaW5lIExOVgkJCQkJMHgyOAorI2RlZmluZSBDVUxICQkJCQkweDJjCisjZGVmaW5lIENVTFYJCQkJCTB4MzAKKyNkZWZpbmUgSFNJWkUJCQkJCTB4MzQKKyNkZWZpbmUgU0RPRlNUCQkJCQkweDM4CisjZGVmaW5lIENBRFUJCQkJCTB4M2MKKyNkZWZpbmUgQ0FETAkJCQkJMHg0MAorI2RlZmluZSBMSU5DRkcwCQkJCQkweDQ0CisjZGVmaW5lIExJTkNGRzEJCQkJCTB4NDgKKyNkZWZpbmUgQ0NPTFAJCQkJCTB4NGMKKyNkZWZpbmUgQ1JHQUlOIAkJCQkJMHg1MAorI2RlZmluZSBDR1JHQUlOCQkJCQkweDU0CisjZGVmaW5lIENHQkdBSU4JCQkJCTB4NTgKKyNkZWZpbmUgQ0JHQUlOCQkJCQkweDVjCisjZGVmaW5lIENPRlNUQQkJCQkJMHg2MAorI2RlZmluZSBGTFNIQ0ZHMAkJCQkweDY0CisjZGVmaW5lIEZMU0hDRkcxCQkJCTB4NjgKKyNkZWZpbmUgRkxTSENGRzIJCQkJMHg2YworI2RlZmluZSBWRElOVDAJCQkJCTB4NzAKKyNkZWZpbmUgVkRJTlQxCQkJCQkweDc0CisjZGVmaW5lIFZESU5UMgkJCQkJMHg3OAorI2RlZmluZSBNSVNDIAkJCQkJMHg3YworI2RlZmluZSBDR0FNTUFXRAkJCQkweDgwCisjZGVmaW5lIFJFQzY1NklGCQkJCTB4ODQKKyNkZWZpbmUgQ0NEQ0ZHCQkJCQkweDg4CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGVmZWN0IENvcnJlY3Rpb24gcmVnaXN0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgREZDQ1RMCQkJCQkweDhjCisjZGVmaW5lIFZERlNBVExWCQkJCTB4OTAKKyNkZWZpbmUgREZDTUVNQ1RMCQkJCTB4OTQKKyNkZWZpbmUgREZDTUVNMAkJCQkJMHg5OAorI2RlZmluZSBERkNNRU0xCQkJCQkweDljCisjZGVmaW5lIERGQ01FTTIJCQkJCTB4YTAKKyNkZWZpbmUgREZDTUVNMwkJCQkJMHhhNAorI2RlZmluZSBERkNNRU00CQkJCQkweGE4CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBCbGFjayBDbGFtcCByZWdpc3RlcnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENMQU1QQ0ZHCQkJCTB4YWMKKyNkZWZpbmUgQ0xEQ09GU1QJCQkJMHhiMAorI2RlZmluZSBDTFNWCQkJCQkweGI0CisjZGVmaW5lIENMSFdJTjAJCQkJCTB4YjgKKyNkZWZpbmUgQ0xIV0lOMQkJCQkJMHhiYworI2RlZmluZSBDTEhXSU4yCQkJCQkweGMwCisjZGVmaW5lIENMVlJWCQkJCQkweGM0CisjZGVmaW5lIENMVldJTjAJCQkJCTB4YzgKKyNkZWZpbmUgQ0xWV0lOMQkJCQkJMHhjYworI2RlZmluZSBDTFZXSU4yCQkJCQkweGQwCisjZGVmaW5lIENMVldJTjMJCQkJCTB4ZDQKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIExlbnNlIFNoYWRpbmcgQ29ycmVjdGlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgREFUQUhPRlNUCQkJCTB4ZDgKKyNkZWZpbmUgREFUQVZPRlNUCQkJCTB4ZGMKKyNkZWZpbmUgTFNDSFZBTAkJCQkJMHhlMAorI2RlZmluZSBMU0NWVkFMCQkJCQkweGU0CisjZGVmaW5lIFRXT0RMU0NDRkcJCQkJMHhlOAorI2RlZmluZSBUV09ETFNDT0ZTVAkJCQkweGVjCisjZGVmaW5lIFRXT0RMU0NJTkkJCQkJMHhmMAorI2RlZmluZSBUV09ETFNDR1JCVQkJCQkweGY0CisjZGVmaW5lIFRXT0RMU0NHUkJMCQkJCTB4ZjgKKyNkZWZpbmUgVFdPRExTQ0dST0YJCQkJMHhmYworI2RlZmluZSBUV09ETFNDT1JCVQkJCQkweDEwMAorI2RlZmluZSBUV09ETFNDT1JCTAkJCQkweDEwNAorI2RlZmluZSBUV09ETFNDT1JPRgkJCQkweDEwOAorI2RlZmluZSBUV09ETFNDSVJRRU4JCQkJMHgxMGMKKyNkZWZpbmUgVFdPRExTQ0lSUVNUCQkJCTB4MTEwCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEYXRhIGZvcm1hdHRlcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRk1UQ0ZHCQkJCQkweDExNAorI2RlZmluZSBGTVRQTEVOCQkJCQkweDExOAorI2RlZmluZSBGTVRTUEgJCQkJCTB4MTFjCisjZGVmaW5lIEZNVExOSAkJCQkJMHgxMjAKKyNkZWZpbmUgRk1UU0xWCQkJCQkweDEyNAorI2RlZmluZSBGTVRMTlYJCQkJCTB4MTI4CisjZGVmaW5lIEZNVFJMRU4JCQkJCTB4MTJjCisjZGVmaW5lIEZNVEhDTlQJCQkJCTB4MTMwCisjZGVmaW5lIEZNVEFQVFJfQkFTRQkJCQkweDEzNAorLyogQmVsb3cgbWFjcm8gZm9yIGFkZHJlc3NlcyBGTVRBUFRSMCAtIEZNVEFQVFIxNSAqLworI2RlZmluZSBGTVRBUFRSKGkpCQkJKEZNVEFQVFJfQkFTRSArIChpICogNCkpCisjZGVmaW5lIEZNVFBHTVZGMAkJCQkweDE3NAorI2RlZmluZSBGTVRQR01WRjEJCQkJMHgxNzgKKyNkZWZpbmUgRk1UUEdNQVBVMAkJCQkweDE3YworI2RlZmluZSBGTVRQR01BUFUxCQkJCTB4MTgwCisjZGVmaW5lIEZNVFBHTUFQUzAJCQkJMHgxODQKKyNkZWZpbmUgRk1UUEdNQVBTMQkJCQkweDE4OAorI2RlZmluZSBGTVRQR01BUFMyCQkJCTB4MThjCisjZGVmaW5lIEZNVFBHTUFQUzMJCQkJMHgxOTAKKyNkZWZpbmUgRk1UUEdNQVBTNAkJCQkweDE5NAorI2RlZmluZSBGTVRQR01BUFM1CQkJCTB4MTk4CisjZGVmaW5lIEZNVFBHTUFQUzYJCQkJMHgxOWMKKyNkZWZpbmUgRk1UUEdNQVBTNwkJCQkweDFhMAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb2xvciBTcGFjZSBDb252ZXJ0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ1NDQ1RMCQkJCQkweDFhNAorI2RlZmluZSBDU0NNMAkJCQkJMHgxYTgKKyNkZWZpbmUgQ1NDTTEJCQkJCTB4MWFjCisjZGVmaW5lIENTQ00yCQkJCQkweDFiMAorI2RlZmluZSBDU0NNMwkJCQkJMHgxYjQKKyNkZWZpbmUgQ1NDTTQJCQkJCTB4MWI4CisjZGVmaW5lIENTQ001CQkJCQkweDFiYworI2RlZmluZSBDU0NNNgkJCQkJMHgxYzAKKyNkZWZpbmUgQ1NDTTcJCQkJCTB4MWM0CisjZGVmaW5lIE9CV0lOMAkJCQkJMHgxYzgKKyNkZWZpbmUgT0JXSU4xCQkJCQkweDFjYworI2RlZmluZSBPQldJTjIJCQkJCTB4MWQwCisjZGVmaW5lIE9CV0lOMwkJCQkJMHgxZDQKKyNkZWZpbmUgT0JWQUwwCQkJCQkweDFkOAorI2RlZmluZSBPQlZBTDEJCQkJCTB4MWRjCisjZGVmaW5lIE9CVkFMMgkJCQkJMHgxZTAKKyNkZWZpbmUgT0JWQUwzCQkJCQkweDFlNAorI2RlZmluZSBPQlZBTDQJCQkJCTB4MWU4CisjZGVmaW5lIE9CVkFMNQkJCQkJMHgxZWMKKyNkZWZpbmUgT0JWQUw2CQkJCQkweDFmMAorI2RlZmluZSBPQlZBTDcJCQkJCTB4MWY0CisjZGVmaW5lIENMS0NUTAkJCQkJMHgxZjgKKworLyogTWFza3MgJiBTaGlmdHMgYmVsb3cgKi8KKyNkZWZpbmUgU1RBUlRfUFhfSE9SX01BU0sJCQkweDdGRkYKKyNkZWZpbmUgTlVNX1BYX0hPUl9NQVNLCQkJCTB4N0ZGRgorI2RlZmluZSBTVEFSVF9WRVJfT05FX01BU0sJCQkweDdGRkYKKyNkZWZpbmUgU1RBUlRfVkVSX1RXT19NQVNLCQkJMHg3RkZGCisjZGVmaW5lIE5VTV9MSU5FU19WRVIJCQkJMHg3RkZGCisKKy8qIGdhaW4gLSBvZmZzZXQgbWFza3MgKi8KKyNkZWZpbmUgR0FJTl9JTlRFR0VSX1NISUZUCQkJOQorI2RlZmluZSBPRkZTRVRfTUFTSwkJCSAgCTB4RkZGCisjZGVmaW5lIEdBSU5fU0RSQU1fRU5fU0hJRlQJCQkxMgorI2RlZmluZSBHQUlOX0lQSVBFX0VOX1NISUZUCQkJMTMKKyNkZWZpbmUgR0FJTl9IM0FfRU5fU0hJRlQJCQkxNAorI2RlZmluZSBPRlNUX1NEUkFNX0VOX1NISUZUCQkJOAorI2RlZmluZSBPRlNUX0lQSVBFX0VOX1NISUZUCQkJOQorI2RlZmluZSBPRlNUX0gzQV9FTl9TSElGVAkJCTEwCisjZGVmaW5lIEdBSU5fT0ZGU0VUX0VOX01BU0sJCQkweDc3MDAKKworLyogQ3VsbGluZyAqLworI2RlZmluZSBDVUxMX1BBVF9FVkVOX0xJTkVfU0hJRlQJCTgKKworLyogQ0NEQ0ZHIHJlZ2lzdGVyICovCisjZGVmaW5lIElTSUZfWUNJTlNXUF9SQVcJCQkoMHgwMCA8PCA0KQorI2RlZmluZSBJU0lGX1lDSU5TV1BfWUNCQ1IJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBJU0lGX0NDRENGR19GSURNRF9MQVRDSF9WU1lOQwkJKDB4MDAgPDwgNikKKyNkZWZpbmUgSVNJRl9DQ0RDRkdfV0VOTE9HX0FORAkJCSgweDAwIDw8IDgpCisjZGVmaW5lIElTSUZfQ0NEQ0ZHX1RSR1NFTF9XRU4JCQkoMHgwMCA8PCA5KQorI2RlZmluZSBJU0lGX0NDRENGR19FWFRSR19ESVNBQkxFCQkoMHgwMCA8PCAxMCkKKyNkZWZpbmUgSVNJRl9MQVRDSF9PTl9WU1lOQ19ESVNBQkxFCQkoMHgwMSA8PCAxNSkKKyNkZWZpbmUgSVNJRl9MQVRDSF9PTl9WU1lOQ19FTkFCTEUJCSgweDAwIDw8IDE1KQorI2RlZmluZSBJU0lGX0RBVEFfUEFDS19NQVNLCQkJMworI2RlZmluZSBJU0lGX0RBVEFfUEFDSzE2CQkJMAorI2RlZmluZSBJU0lGX0RBVEFfUEFDSzEyCQkJMQorI2RlZmluZSBJU0lGX0RBVEFfUEFDSzgJCQkJMgorI2RlZmluZSBJU0lGX1BJWF9PUkRFUl9TSElGVAkJCTExCisjZGVmaW5lIElTSUZfQlc2NTZfRU5BQkxFCQkJKDB4MDEgPDwgNSkKKworLyogTU9ERVNFVCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9WREhET1VUX0lOUFVUCQkJKDB4MDAgPDwgMCkKKyNkZWZpbmUgSVNJRl9JTlBVVF9TSElGVAkJCTEyCisjZGVmaW5lIElTSUZfUkFXX0lOUFVUX01PREUJCQkwCisjZGVmaW5lIElTSUZfRklEX1BPTF9TSElGVAkJCTQKKyNkZWZpbmUgSVNJRl9IRF9QT0xfU0hJRlQJCQkzCisjZGVmaW5lIElTSUZfVkRfUE9MX1NISUZUCQkJMgorI2RlZmluZSBJU0lGX0RBVEFQT0xfTk9STUFMCQkJMAorI2RlZmluZSBJU0lGX0RBVEFQT0xfU0hJRlQJCQk2CisjZGVmaW5lIElTSUZfRVhXRU5fRElTQUJMRSAJCQkwCisjZGVmaW5lIElTSUZfRVhXRU5fU0hJRlQJCQk1CisjZGVmaW5lIElTSUZfRlJNX0ZNVF9TSElGVAkJCTcKKyNkZWZpbmUgSVNJRl9EQVRBU0ZUX1NISUZUCQkJOAorI2RlZmluZSBJU0lGX0xQRl9TSElGVAkJCQkxNAorI2RlZmluZSBJU0lGX0xQRl9NQVNLCQkJCTEKKworLyogR0FNTUFXRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9BTEFXX0dBTUFfV0RfTUFTSwkJCTB4RgorI2RlZmluZSBJU0lGX0FMQVdfR0FNQV9XRF9TSElGVAkJCTEKKyNkZWZpbmUgSVNJRl9BTEFXX0VOQUJMRQkJCTEKKyNkZWZpbmUgSVNJRl9HQU1NQVdEX0NGQV9TSElGVAkJCTUKKworLyogSFNJWkUgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfSFNJWkVfRkxJUF9NQVNLCQkJMQorI2RlZmluZSBJU0lGX0hTSVpFX0ZMSVBfU0hJRlQJCQkxMgorCisvKiBNSVNDIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX0RQQ01fRU5fU0hJRlQJCQkxMgorI2RlZmluZSBJU0lGX0RQQ01fUFJFRElDVE9SX1NISUZUCQkxMworCisvKiBCbGFjayBjbGFtcCByZWxhdGVkICovCisjZGVmaW5lIElTSUZfQkNfTU9ERV9DT0xPUl9TSElGVAkJNAorI2RlZmluZSBJU0lGX0hPUlpfQkNfTU9ERV9TSElGVAkJCTEKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1dJTl9TRUxfU0hJRlQJCTUKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1BJWF9MSU1JVF9TSElGVAkJNgorI2RlZmluZSBJU0lGX0hPUlpfQkNfV0lOX0hfU0laRV9TSElGVAkJOAorI2RlZmluZSBJU0lGX0hPUlpfQkNfV0lOX1ZfU0laRV9TSElGVAkJMTIKKyNkZWZpbmUJSVNJRl9WRVJUX0JDX1JTVF9WQUxfU0VMX1NISUZUCQk0CisjZGVmaW5lIElTSUZfVkVSVF9CQ19MSU5FX0FWRV9DT0VGX1NISUZUCTgKKworLyogVkRGQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9WREZDX0VOX1NISUZUCQkJNAorI2RlZmluZSBJU0lGX1ZERkNfQ09SUl9NT0RfU0hJRlQJCTUKKyNkZWZpbmUgSVNJRl9WREZDX0NPUlJfV0hPTEVfTE5fU0hJRlQJCTcKKyNkZWZpbmUgSVNJRl9WREZDX0xFVkVMX1NIRlRfU0hJRlQJCTgKKyNkZWZpbmUgSVNJRl9WREZDX1BPU19NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZDTUVNQ1RMX0RGQ01BUlNUX1NISUZUCQkyCisKKy8qIENTQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9DU0NfQ09FRl9JTlRFR19NQVNLCQk3CisjZGVmaW5lIElTSUZfQ1NDX0NPRUZfREVDSU1BTF9NQVNLCQkweDFmCisjZGVmaW5lIElTSUZfQ1NDX0NPRUZfSU5URUdfU0hJRlQJCTUKKyNkZWZpbmUgSVNJRl9DU0NNX01TQl9TSElGVAkJCTgKKyNkZWZpbmUgSVNJRl9ERl9DU0NfU1BIX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgSVNJRl9ERl9DU0NfTE5IX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgSVNJRl9ERl9DU0NfU0xWX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgSVNJRl9ERl9DU0NfTE5WX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgSVNJRl9ERl9OVU1MSU5FUwkJCTB4N0ZGRgorI2RlZmluZSBJU0lGX0RGX05VTVBJWAkJCQkweDFGRkYKKworLyogT2Zmc2V0cyBmb3IgTFNDL0RGQy9HYWluICovCisjZGVmaW5lIElTSUZfREFUQV9IX09GRlNFVF9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREFUQV9WX09GRlNFVF9NQVNLCQkJMHgxRkZGCisKKy8qIExpbmVhcml6YXRpb24gKi8KKyNkZWZpbmUgSVNJRl9MSU5fQ09SUlNGVF9TSElGVAkJCTQKKyNkZWZpbmUgSVNJRl9MSU5fU0NBTEVfRkFDVF9JTlRFR19TSElGVAkJMTAKKworCisvKiBQYXR0ZXJuIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX1BHX0VOCQkJCSgxIDw8IDMpCisjZGVmaW5lIElTSUZfU0VMX1BHX1NSQwkJCQkoMyA8PCA0KQorI2RlZmluZSBJU0lGX1BHX1ZEX1BPTF9TSElGVAkJCTAKKyNkZWZpbmUgSVNJRl9QR19IRF9QT0xfU0hJRlQJCQkxCisKKy8qcmFuZG9tIG90aGVyIGp1bmsqLworI2RlZmluZSBJU0lGX1NZTkNFTl9WREhERU5fTUFTSwkJCSgxIDw8IDApCisjZGVmaW5lIElTSUZfU1lOQ0VOX1dFTl9NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgSVNJRl9TWU5DRU5fV0VOX1NISUZUCQkJMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYwppbmRleCBkZTIyYmM5Li44ODVjZDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCkBAIC0xMDcsOSArMTA3LDYgQEAKIAlpbnQgdnBmZV9wcm9iZWQ7CiAJLyogbmFtZSBvZiBjY2RjIGRldmljZSAqLwogCWNoYXIgbmFtZVszMl07Ci0JLyogZm9yIHN0b3JpbmcgbWVtIG1hcHMgZm9yIENDREMgKi8KLQlpbnQgY2NkY19hZGRyX3NpemU7Ci0Jdm9pZCAqX19pb21lbSBjY2RjX2FkZHI7CiB9OwogCiAvKiBkYXRhIHN0cnVjdHVyZXMgKi8KQEAgLTIyOSw3ICsyMjYsNiBAQAogCUJVR19PTighZGV2LT5od19vcHMuc2V0X2ltYWdlX3dpbmRvdyk7CiAJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRfaW1hZ2Vfd2luZG93KTsKIAlCVUdfT04oIWRldi0+aHdfb3BzLmdldF9saW5lX2xlbmd0aCk7Ci0JQlVHX09OKCFkZXYtPmh3X29wcy5zZXRmYmFkZHIpOwogCUJVR19PTighZGV2LT5od19vcHMuZ2V0ZmlkKTsKIAogCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CkBAIC0yNDAsMjUgKzIzNiwyMyBAQAogCQkgKiB3YWxrIHRocm91Z2ggaXQgZHVyaW5nIHZwZmUgcHJvYmUKIAkJICovCiAJCXByaW50ayhLRVJOX0VSUiAidnBmZSBjYXB0dXJlIG5vdCBpbml0aWFsaXplZFxuIik7Ci0JCXJldCA9IC0xOworCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIHVubG9jazsKIAl9CiAKIAlpZiAoc3RyY21wKGRldi0+bmFtZSwgY2NkY19jZmctPm5hbWUpKSB7CiAJCS8qIGlnbm9yZSB0aGlzIGNjZGMgKi8KLQkJcmV0ID0gLTE7CisJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrOwogCX0KIAogCWlmIChjY2RjX2RldikgewogCQlwcmludGsoS0VSTl9FUlIgImNjZGMgYWxyZWFkeSByZWdpc3RlcmVkXG4iKTsKLQkJcmV0ID0gLTE7CisJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrOwogCX0KIAogCWNjZGNfZGV2ID0gZGV2OwotCWRldi0+aHdfb3BzLnNldF9jY2RjX2Jhc2UoY2NkY19jZmctPmNjZGNfYWRkciwKLQkJCQkgIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSk7CiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC0xNzg2LDYxICsxNzgwLDYgQEAKIAlyZXR1cm4gdnBmZV9kZXY7CiB9CiAKLXN0YXRpYyB2b2lkIHZwZmVfZGlzYWJsZV9jbG9jayhzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2KQotewotCXN0cnVjdCB2cGZlX2NvbmZpZyAqdnBmZV9jZmcgPSB2cGZlX2Rldi0+Y2ZnOwotCi0JY2xrX2Rpc2FibGUodnBmZV9jZmctPnZwc3NjbGspOwotCWNsa19wdXQodnBmZV9jZmctPnZwc3NjbGspOwotCWNsa19kaXNhYmxlKHZwZmVfY2ZnLT5zbGF2ZWNsayk7Ci0JY2xrX3B1dCh2cGZlX2NmZy0+c2xhdmVjbGspOwotCXY0bDJfaW5mbyh2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAotCQkgInZwZmUgdnBzcyBtYXN0ZXIgJiBzbGF2ZSBjbG9ja3MgZGlzYWJsZWRcbiIpOwotfQotCi1zdGF0aWMgaW50IHZwZmVfZW5hYmxlX2Nsb2NrKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCi17Ci0Jc3RydWN0IHZwZmVfY29uZmlnICp2cGZlX2NmZyA9IHZwZmVfZGV2LT5jZmc7Ci0JaW50IHJldCA9IC1FTk9FTlQ7Ci0KLQl2cGZlX2NmZy0+dnBzc2NsayA9IGNsa19nZXQodnBmZV9kZXYtPnBkZXYsICJ2cHNzX21hc3RlciIpOwotCWlmIChOVUxMID09IHZwZmVfY2ZnLT52cHNzY2xrKSB7Ci0JCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsICJObyBjbG9jayBkZWZpbmVkIGZvciIKLQkJCSAidnBzc19tYXN0ZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChjbGtfZW5hYmxlKHZwZmVfY2ZnLT52cHNzY2xrKSkgewotCQl2NGwyX2Vycih2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAotCQkJInZwZmUgdnBzcyBtYXN0ZXIgY2xvY2sgbm90IGVuYWJsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCSAidnBmZSB2cHNzIG1hc3RlciBjbG9jayBlbmFibGVkXG4iKTsKLQotCXZwZmVfY2ZnLT5zbGF2ZWNsayA9IGNsa19nZXQodnBmZV9kZXYtPnBkZXYsICJ2cHNzX3NsYXZlIik7Ci0JaWYgKE5VTEwgPT0gdnBmZV9jZmctPnNsYXZlY2xrKSB7Ci0JCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCQkiTm8gY2xvY2sgZGVmaW5lZCBmb3IgdnBzcyBzbGF2ZVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChjbGtfZW5hYmxlKHZwZmVfY2ZnLT5zbGF2ZWNsaykpIHsKLQkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJCSAidnBmZSB2cHNzIHNsYXZlIGNsb2NrIG5vdCBlbmFibGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXY0bDJfaW5mbyh2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLCAidnBmZSB2cHNzIHNsYXZlIGNsb2NrIGVuYWJsZWRcbiIpOwotCXJldHVybiAwOwotb3V0OgotCWlmICh2cGZlX2NmZy0+dnBzc2NsaykKLQkJY2xrX3B1dCh2cGZlX2NmZy0+dnBzc2Nsayk7Ci0JaWYgKHZwZmVfY2ZnLT5zbGF2ZWNsaykKLQkJY2xrX3B1dCh2cGZlX2NmZy0+c2xhdmVjbGspOwotCi0JcmV0dXJuIC0xOwotfQotCiAvKgogICogdnBmZV9wcm9iZSA6IFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBkZXZpY2UgZW50cmllcyBieSByZWdpc3RlcgogICogaXRzZWxmIHRvIHRoZSBWNEwyIGRyaXZlciBhbmQgaW5pdGlhbGl6ZXMgZmllbGRzIG9mIGVhY2gKQEAgLTE4NzAsNyArMTgwOSw3IEBACiAKIAlpZiAoTlVMTCA9PSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgewogCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLCAiVW5hYmxlIHRvIGdldCB2cGZlIGNvbmZpZ1xuIik7Ci0JCXJldCA9IC1FTk9FTlQ7CisJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOwogCX0KIApAQCAtMTg4NCwxOCArMTgyMywxMyBAQAogCQlnb3RvIHByb2JlX2ZyZWVfZGV2X21lbTsKIAl9CiAKLQkvKiBlbmFibGUgdnBzcyBjbG9ja3MgKi8KLQlyZXQgPSB2cGZlX2VuYWJsZV9jbG9jayh2cGZlX2Rldik7Ci0JaWYgKHJldCkKLQkJZ290byBwcm9iZV9mcmVlX2Rldl9tZW07Ci0KIAltdXRleF9sb2NrKCZjY2RjX2xvY2spOwogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgY2NkYyBjb25maWd1cmF0aW9uICovCiAJY2NkY19jZmcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2NkY19jb25maWcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoTlVMTCA9PSBjY2RjX2NmZykgewogCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAogCQkJICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIGNjZGNfY2ZnXG4iKTsKLQkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOworCQlnb3RvIHByb2JlX2ZyZWVfZGV2X21lbTsKIAl9CiAKIAlzdHJuY3B5KGNjZGNfY2ZnLT5uYW1lLCB2cGZlX2NmZy0+Y2NkYywgMzIpOwpAQCAtMTkwNCw2MSArMTgzOCwzNCBAQAogCWlmICghcmVzMSkgewogCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAogCQkJICJVbmFibGUgdG8gZ2V0IGludGVycnVwdCBmb3IgVklOVDBcbiIpOwotCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcHJvYmVfZnJlZV9jY2RjX2NmZ19tZW07CiAJfQogCXZwZmVfZGV2LT5jY2RjX2lycTAgPSByZXMxLT5zdGFydDsKIAogCS8qIEdldCBWSU5UMSBpcnEgcmVzb3VyY2UgKi8KLQlyZXMxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsCi0JCQkJSU9SRVNPVVJDRV9JUlEsIDEpOworCXJlczEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDEpOwogCWlmICghcmVzMSkgewogCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAogCQkJICJVbmFibGUgdG8gZ2V0IGludGVycnVwdCBmb3IgVklOVDFcbiIpOwotCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcHJvYmVfZnJlZV9jY2RjX2NmZ19tZW07CiAJfQogCXZwZmVfZGV2LT5jY2RjX2lycTEgPSByZXMxLT5zdGFydDsKIAotCS8qIEdldCBhZGRyZXNzIGJhc2Ugb2YgQ0NEQyAqLwotCXJlczEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghcmVzMSkgewotCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAotCQkJIlVuYWJsZSB0byBnZXQgcmVnaXN0ZXIgYWRkcmVzcyBtYXBcbiIpOwotCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7Ci0JfQotCi0JY2NkY19jZmctPmNjZGNfYWRkcl9zaXplID0gcmVzMS0+ZW5kIC0gcmVzMS0+c3RhcnQgKyAxOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCBjY2RjX2NmZy0+Y2NkY19hZGRyX3NpemUsCi0JCQkJcGRldi0+ZGV2LmRyaXZlci0+bmFtZSkpIHsKLQkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKLQkJCSJGYWlsZWQgcmVxdWVzdF9tZW1fcmVnaW9uIGZvciBjY2RjIGJhc2VcbiIpOwotCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKLQl9Ci0JY2NkY19jZmctPmNjZGNfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMxLT5zdGFydCwKLQkJCQkJICAgICBjY2RjX2NmZy0+Y2NkY19hZGRyX3NpemUpOwotCWlmICghY2NkY19jZmctPmNjZGNfYWRkcikgewotCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLCAiVW5hYmxlIHRvIGlvcmVtYXAgY2NkYyBhZGRyXG4iKTsKLQkJcmV0ID0gLUVOWElPOwotCQlnb3RvIHByb2JlX291dF9yZWxlYXNlX21lbTE7Ci0JfQotCiAJcmV0ID0gcmVxdWVzdF9pcnEodnBmZV9kZXYtPmNjZGNfaXJxMCwgdnBmZV9pc3IsIElSUUZfRElTQUJMRUQsCiAJCQkgICJ2cGZlX2NhcHR1cmUwIiwgdnBmZV9kZXYpOwogCiAJaWYgKDAgIT0gcmV0KSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gcmVxdWVzdCBpbnRlcnJ1cHRcbiIpOwotCQlnb3RvIHByb2JlX291dF91bm1hcDE7CisJCWdvdG8gcHJvYmVfZnJlZV9jY2RjX2NmZ19tZW07CiAJfQogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB2aWRlbyBkZXZpY2UgKi8KIAl2ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoTlVMTCA9PSB2ZmQpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKLQkJCSJVbmFibGUgdG8gYWxsb2MgdmlkZW8gZGV2aWNlXG4iKTsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byBhbGxvYyB2aWRlbyBkZXZpY2VcbiIpOwogCQlnb3RvIHByb2JlX291dF9yZWxlYXNlX2lycTsKIAl9CiAKQEAgLTIwNzMsMTIgKzE5ODAsNyBAQAogCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2cGZlX2Rldi0+dmlkZW9fZGV2KTsKIHByb2JlX291dF9yZWxlYXNlX2lycToKIAlmcmVlX2lycSh2cGZlX2Rldi0+Y2NkY19pcnEwLCB2cGZlX2Rldik7Ci1wcm9iZV9vdXRfdW5tYXAxOgotCWlvdW5tYXAoY2NkY19jZmctPmNjZGNfYWRkcik7Ci1wcm9iZV9vdXRfcmVsZWFzZV9tZW0xOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMxLT5zdGFydCwgcmVzMS0+ZW5kIC0gcmVzMS0+c3RhcnQgKyAxKTsKLXByb2JlX2Rpc2FibGVfY2xvY2s6Ci0JdnBmZV9kaXNhYmxlX2Nsb2NrKHZwZmVfZGV2KTsKK3Byb2JlX2ZyZWVfY2NkY19jZmdfbWVtOgogCW11dGV4X3VubG9jaygmY2NkY19sb2NrKTsKIAlrZnJlZShjY2RjX2NmZyk7CiBwcm9iZV9mcmVlX2Rldl9tZW06CkBAIC0yMDkyLDcgKzE5OTQsNiBAQAogc3RhdGljIGludCBfX2RldmV4aXQgdnBmZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAl2NGwyX2luZm8ocGRldi0+ZGV2LmRyaXZlciwgInZwZmVfcmVtb3ZlXG4iKTsKIApAQCAtMjEwMCwxMiArMjAwMSw2IEBACiAJa2ZyZWUodnBmZV9kZXYtPnNkKTsKIAl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ2cGZlX2Rldi0+djRsMl9kZXYpOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZwZmVfZGV2LT52aWRlb19kZXYpOwotCW11dGV4X2xvY2soJmNjZGNfbG9jayk7Ci0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7Ci0JaW91bm1hcChjY2RjX2NmZy0+Y2NkY19hZGRyKTsKLQltdXRleF91bmxvY2soJmNjZGNfbG9jayk7Ci0JdnBmZV9kaXNhYmxlX2Nsb2NrKHZwZmVfZGV2KTsKIAlrZnJlZSh2cGZlX2Rldik7CiAJa2ZyZWUoY2NkY19jZmcpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKaW5kZXggN2VlNzJlYy4uNzkxODY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKgotICogY29tbW9uIHZwc3MgZHJpdmVyIGZvciBhbGwgdmlkZW8gZHJpdmVycy4KKyAqIGNvbW1vbiB2cHNzIHN5c3RlbSBtb2R1bGUgcGxhdGZvcm0gZHJpdmVyIGZvciBhbGwgdmlkZW8gZHJpdmVycy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0zNSwxMiArMzUsNTIgQEAKIC8qIERNNjQ0eCBkZWZpbmVzICovCiAjZGVmaW5lIERNNjQ0WF9TQkxfUENSX1ZQU1MJCSg0KQogCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9JTlRTRUwJCTB4MTAKKyNkZWZpbmUgRE0zNTVfVlBTU0JMX0VWVFNFTAkJMHgxNAogLyogdnBzcyBCTCByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIERNMzU1X1ZQU1NCTF9DQ0RDTVVYCQkweDFjCiAvKiB2cHNzIENMSyByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIERNMzU1X1ZQU1NDTEtfQ0xLQ1RSTAkJMHgwNAogLyogbWFza3MgYW5kIHNoaWZ0cyAqLwogI2RlZmluZSBWUFNTX0hTU0lTRUxfU0hJRlQJCTQKKy8qCisgKiBWRElOVDAgLSB2cHNzX2ludDAsIFZESU5UMSAtIHZwc3NfaW50MSwgSDNBIC0gdnBzc19pbnQ0LAorICogSVBJUEVfSU5UMV9TRFIgLSB2cHNzX2ludDUKKyAqLworI2RlZmluZSBETTM1NV9WUFNTQkxfSU5UU0VMX0RFRkFVTFQJMHhmZjgzZmYxMAorLyogVkVOQ0lOVCAtIHZwc3NfaW50OCAqLworI2RlZmluZSBETTM1NV9WUFNTQkxfRVZUU0VMX0RFRkFVTFQJMHg0CisKKyNkZWZpbmUgRE0zNjVfSVNQNV9QQ0NSIAkJMHgwNAorI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDEJCTB4MTAKKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwyCQkweDE0CisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMMwkJMHgxOAorI2RlZmluZSBETTM2NV9JU1A1X0NDRENNVVggCQkweDIwCisjZGVmaW5lIERNMzY1X0lTUDVfUEdfRlJBTUVfU0laRSAJMHgyOAorI2RlZmluZSBETTM2NV9WUEJFX0NMS19DVFJMIAkJMHgwMAorLyoKKyAqIHZwc3MgaW50ZXJydXB0cy4gVkRJTlQwIC0gdnBzc19pbnQwLCBWRElOVDEgLSB2cHNzX2ludDEsCisgKiBBRiAtIHZwc3NfaW50MworICovCisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMMV9ERUZBVUxUCTB4MGIxZjAxMDAKKy8qIEFFVyAtIHZwc3NfaW50NiwgUlNaX0lOVF9ETUEgLSB2cHNzX2ludDUgKi8KKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwyX0RFRkFVTFQJMHgxZjBhMGYxZgorLyogVkVOQyAtIHZwc3NfaW50OCAqLworI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDNfREVGQVVMVAkweDAwMDAwMDE1CisKKy8qIG1hc2tzIGFuZCBzaGlmdHMgZm9yIERNMzY1Ki8KKyNkZWZpbmUgRE0zNjVfQ0NEQ19QR19WRF9QT0xfU0hJRlQgCTAKKyNkZWZpbmUgRE0zNjVfQ0NEQ19QR19IRF9QT0xfU0hJRlQgCTEKKworI2RlZmluZSBDQ0RfU1JDX1NFTF9NQVNLCQkoQklUX01BU0soNSkgfCBCSVRfTUFTSyg0KSkKKyNkZWZpbmUgQ0NEX1NSQ19TRUxfU0hJRlQJCTQKKworLyogRGlmZmVyZW50IFNvQyBwbGF0Zm9ybXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCitlbnVtIHZwc3NfcGxhdGZvcm1fdHlwZSB7CisJRE02NDRYLAorCURNMzU1LAorCURNMzY1LAorfTsKIAogLyoKICAqIHZwc3Mgb3BlcmF0aW9ucy4gRGVwZW5kcyBvbiBwbGF0Zm9ybS4gTm90IGFsbCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZQpAQCAtNTksMTMgKzk5LDkgQEAKIAogLyogdnBzcyBjb25maWd1cmF0aW9uICovCiBzdHJ1Y3QgdnBzc19vcGVyX2NvbmZpZyB7Ci0JX19pb21lbSB2b2lkICp2cHNzX2JsX3JlZ3NfYmFzZTsKLQlfX2lvbWVtIHZvaWQgKnZwc3NfcmVnc19iYXNlOwotCXN0cnVjdCByZXNvdXJjZQkJKnIxOwotCXJlc291cmNlX3NpemVfdAkJbGVuMTsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSpyMjsKLQlyZXNvdXJjZV9zaXplX3QJCWxlbjI7Ci0JY2hhciB2cHNzX25hbWVbMzJdOworCV9faW9tZW0gdm9pZCAqdnBzc19yZWdzX2Jhc2UwOworCV9faW9tZW0gdm9pZCAqdnBzc19yZWdzX2Jhc2UxOworCWVudW0gdnBzc19wbGF0Zm9ybV90eXBlIHBsYXRmb3JtOwogCXNwaW5sb2NrX3QgdnBzc19sb2NrOwogCXN0cnVjdCB2cHNzX2h3X29wcyBod19vcHM7CiB9OwpAQCAtNzUsMjIgKzExMSw0NiBAQAogLyogcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzICovCiBzdGF0aWMgaW5saW5lIHUzMiBibF9yZWdyKHUzMiBvZmZzZXQpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlICsgb2Zmc2V0KTsKKwlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJsX3JlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSArIG9mZnNldCk7CisJX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgdnBzc19yZWdyKHUzMiBvZmZzZXQpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlICsgb2Zmc2V0KTsKKwlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UxICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHZwc3NfcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlICsgb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEgKyBvZmZzZXQpOworfQorCisvKiBGb3IgRE0zNjUgb25seSAqLworc3RhdGljIGlubGluZSB1MzIgaXNwNV9yZWFkKHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCArIG9mZnNldCk7Cit9CisKKy8qIEZvciBETTM2NSBvbmx5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXNwNV93cml0ZSh1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRtMzY1X3NlbGVjdF9jY2RjX3NvdXJjZShlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNyY19zZWwpCit7CisJdTMyIHRlbXAgPSBpc3A1X3JlYWQoRE0zNjVfSVNQNV9DQ0RDTVVYKSAmIH5DQ0RfU1JDX1NFTF9NQVNLOworCisJLyogaWYgd2UgYXJlIHVzaW5nIHBhdHRlcm4gZ2VuZXJhdG9yLCBlbmFibGUgaXQgKi8KKwlpZiAoc3JjX3NlbCA9PSBWUFNTX1BHTFBCSyB8fCBzcmNfc2VsID09IFZQU1NfQ0NEQ1BHKQorCQl0ZW1wIHw9IDB4MDg7CisKKwl0ZW1wIHw9IChzcmNfc2VsIDw8IENDRF9TUkNfU0VMX1NISUZUKTsKKwlpc3A1X3dyaXRlKHRlbXAsIERNMzY1X0lTUDVfQ0NEQ01VWCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRtMzU1X3NlbGVjdF9jY2RjX3NvdXJjZShlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNyY19zZWwpCkBAIC0xMDEsOSArMTYxLDkgQEAKIGludCB2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNyY19zZWwpCiB7CiAJaWYgKCFvcGVyX2NmZy5od19vcHMuc2VsZWN0X2NjZGNfc291cmNlKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCi0JZG0zNTVfc2VsZWN0X2NjZGNfc291cmNlKHNyY19zZWwpOworCW9wZXJfY2ZnLmh3X29wcy5zZWxlY3RfY2NkY19zb3VyY2Uoc3JjX3NlbCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKTsKQEAgLTExNCw3ICsxNzQsNyBAQAogCiAJaWYgKHdibF9zZWwgPCBWUFNTX1BDUl9BRVdfV0JMXzAgfHwKIAkgICAgd2JsX3NlbCA+IFZQU1NfUENSX0NDRENfV0JMX08pCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiB3cml0aW5nIGEgMCBjbGVhciB0aGUgb3ZlcmZsb3cgKi8KIAltYXNrID0gfihtYXNrIDw8IHdibF9zZWwpOwpAQCAtMTI2LDcgKzE4Niw3IEBACiBpbnQgdnBzc19jbGVhcl93Ymxfb3ZlcmZsb3coZW51bSB2cHNzX3dibF9zZWwgd2JsX3NlbCkKIHsKIAlpZiAoIW9wZXJfY2ZnLmh3X29wcy5jbGVhcl93Ymxfb3ZlcmZsb3cpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gb3Blcl9jZmcuaHdfb3BzLmNsZWFyX3dibF9vdmVyZmxvdyh3Ymxfc2VsKTsKIH0KQEAgLTE2Niw3ICsyMjYsNyBAQAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiZG0zNTVfZW5hYmxlX2Nsb2NrOiIKIAkJCQkiIEludmFsaWQgc2VsZWN0b3I6ICVkXG4iLCBjbG9ja19zZWwpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKQEAgLTE4MSwxMDAgKzI0MSwyMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkbTM2NV9lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB1dGVtcCwgbWFzayA9IDB4MSwgc2hpZnQgPSAwLCBvZmZzZXQgPSBETTM2NV9JU1A1X1BDQ1I7CisJdTMyICgqcmVhZCkodTMyIG9mZnNldCkgPSBpc3A1X3JlYWQ7CisJdm9pZCgqd3JpdGUpKHUzMiB2YWwsIHUzMiBvZmZzZXQpID0gaXNwNV93cml0ZTsKKworCXN3aXRjaCAoY2xvY2tfc2VsKSB7CisJY2FzZSBWUFNTX0JMX0NMT0NLOgorCQlicmVhazsKKwljYXNlIFZQU1NfQ0NEQ19DTE9DSzoKKwkJc2hpZnQgPSAxOworCQlicmVhazsKKwljYXNlIFZQU1NfSDNBX0NMT0NLOgorCQlzaGlmdCA9IDI7CisJCWJyZWFrOworCWNhc2UgVlBTU19SU1pfQ0xPQ0s6CisJCXNoaWZ0ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0lQSVBFX0NMT0NLOgorCQlzaGlmdCA9IDQ7CisJCWJyZWFrOworCWNhc2UgVlBTU19JUElQRUlGX0NMT0NLOgorCQlzaGlmdCA9IDU7CisJCWJyZWFrOworCWNhc2UgVlBTU19QQ0xLX0lOVEVSTkFMOgorCQlzaGlmdCA9IDY7CisJCWJyZWFrOworCWNhc2UgVlBTU19QU1lOQ19DTE9DS19TRUw6CisJCXNoaWZ0ID0gNzsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1ZQQkVfQ0xPQ0s6CisJCXJlYWQgPSB2cHNzX3JlZ3I7CisJCXdyaXRlID0gdnBzc19yZWd3OworCQlvZmZzZXQgPSBETTM2NV9WUEJFX0NMS19DVFJMOworCQlicmVhazsKKwljYXNlIFZQU1NfVkVOQ19DTE9DS19TRUw6CisJCXNoaWZ0ID0gMjsKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19MRENfQ0xPQ0s6CisJCXNoaWZ0ID0gMzsKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19GRElGX0NMT0NLOgorCQlzaGlmdCA9IDQ7CisJCXJlYWQgPSB2cHNzX3JlZ3I7CisJCXdyaXRlID0gdnBzc19yZWd3OworCQlvZmZzZXQgPSBETTM2NV9WUEJFX0NMS19DVFJMOworCQlicmVhazsKKwljYXNlIFZQU1NfT1NEX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSA2OworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0xEQ19DTE9DS19TRUw6CisJCXNoaWZ0ID0gNzsKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZG0zNjVfZW5hYmxlX2Nsb2NrOiBJbnZhbGlkIHNlbGVjdG9yOiAlZFxuIiwKKwkJICAgICAgIGNsb2NrX3NlbCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3Blcl9jZmcudnBzc19sb2NrLCBmbGFncyk7CisJdXRlbXAgPSByZWFkKG9mZnNldCk7CisJaWYgKCFlbikgeworCQltYXNrID0gfm1hc2s7CisJCXV0ZW1wICY9IChtYXNrIDw8IHNoaWZ0KTsKKwl9IGVsc2UKKwkJdXRlbXAgfD0gKG1hc2sgPDwgc2hpZnQpOworCisJd3JpdGUodXRlbXAsIG9mZnNldCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3Blcl9jZmcudnBzc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHZwc3NfZW5hYmxlX2Nsb2NrKGVudW0gdnBzc19jbG9ja19zZWwgY2xvY2tfc2VsLCBpbnQgZW4pCiB7CiAJaWYgKCFvcGVyX2NmZy5od19vcHMuZW5hYmxlX2Nsb2NrKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIG9wZXJfY2ZnLmh3X29wcy5lbmFibGVfY2xvY2soY2xvY2tfc2VsLCBlbik7CiB9CiBFWFBPUlRfU1lNQk9MKHZwc3NfZW5hYmxlX2Nsb2NrKTsKIAordm9pZCBkbTM2NV92cHNzX3NldF9zeW5jX3BvbChzdHJ1Y3QgdnBzc19zeW5jX3BvbCBzeW5jKQoreworCWludCB2YWwgPSAwOworCXZhbCA9IGlzcDVfcmVhZChETTM2NV9JU1A1X0NDRENNVVgpOworCisJdmFsIHw9IChzeW5jLmNjZHBnX2hkcG9sIDw8IERNMzY1X0NDRENfUEdfSERfUE9MX1NISUZUKTsKKwl2YWwgfD0gKHN5bmMuY2NkcGdfdmRwb2wgPDwgRE0zNjVfQ0NEQ19QR19WRF9QT0xfU0hJRlQpOworCisJaXNwNV93cml0ZSh2YWwsIERNMzY1X0lTUDVfQ0NEQ01VWCk7Cit9CitFWFBPUlRfU1lNQk9MKGRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKTsKKwordm9pZCBkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKHN0cnVjdCB2cHNzX3BnX2ZyYW1lX3NpemUgZnJhbWVfc2l6ZSkKK3sKKwlpbnQgY3VycmVudF9yZWcgPSAoKGZyYW1lX3NpemUuaGxwZnIgPj4gMSkgLSAxKSA8PCAxNjsKKworCWN1cnJlbnRfcmVnIHw9IChmcmFtZV9zaXplLnBwbGVuIC0gMSk7CisJaXNwNV93cml0ZShjdXJyZW50X3JlZywgRE0zNjVfSVNQNV9QR19GUkFNRV9TSVpFKTsKK30KK0VYUE9SVF9TWU1CT0woZG0zNjVfdnBzc19zZXRfcGdfZnJhbWVfc2l6ZSk7CisKIHN0YXRpYyBpbnQgX19pbml0IHZwc3NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpbnQgc3RhdHVzLCBkbTM1NSA9IDA7CisJc3RydWN0IHJlc291cmNlCQkqcjEsICpyMjsKKwljaGFyICpwbGF0Zm9ybV9uYW1lOworCWludCBzdGF0dXM7CiAKIAlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0Jc3RyY3B5KG9wZXJfY2ZnLnZwc3NfbmFtZSwgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOwogCi0JaWYgKCFzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG0zNTVfdnBzcyIpKQotCQlkbTM1NSA9IDE7Ci0JZWxzZSBpZiAoc3RyY21wKG9wZXJfY2ZnLnZwc3NfbmFtZSwgImRtNjQ0eF92cHNzIikpIHsKKwlwbGF0Zm9ybV9uYW1lID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFzdHJjbXAocGxhdGZvcm1fbmFtZSwgImRtMzU1X3Zwc3MiKSkKKwkJb3Blcl9jZmcucGxhdGZvcm0gPSBETTM1NTsKKwllbHNlIGlmICghc3RyY21wKHBsYXRmb3JtX25hbWUsICJkbTM2NV92cHNzIikpCisJCW9wZXJfY2ZnLnBsYXRmb3JtID0gRE0zNjU7CisJZWxzZSBpZiAoIXN0cmNtcChwbGF0Zm9ybV9uYW1lLCAiZG02NDR4X3Zwc3MiKSkKKwkJb3Blcl9jZmcucGxhdGZvcm0gPSBETTY0NFg7CisJZWxzZSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInZwc3MgZHJpdmVyIG5vdCBzdXBwb3J0ZWQgb24iCiAJCQkiIHRoaXMgcGxhdGZvcm1cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZWRcbiIsIG9wZXJfY2ZnLnZwc3NfbmFtZSk7Ci0Jb3Blcl9jZmcucjEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghb3Blcl9jZmcucjEpCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZwc3MgcHJvYmVkXG4iLCBwbGF0Zm9ybV9uYW1lKTsKKwlyMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyMSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlvcGVyX2NmZy5sZW4xID0gb3Blcl9jZmcucjEtPmVuZCAtIG9wZXJfY2ZnLnIxLT5zdGFydCArIDE7Ci0KLQlvcGVyX2NmZy5yMSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMS0+c3RhcnQsIG9wZXJfY2ZnLmxlbjEsCi0JCQkJCSBvcGVyX2NmZy5yMS0+bmFtZSk7Ci0JaWYgKCFvcGVyX2NmZy5yMSkKKwlyMSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyMS0+c3RhcnQsIHJlc291cmNlX3NpemUocjEpLCByMS0+bmFtZSk7CisJaWYgKCFyMSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCW9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlID0gaW9yZW1hcChvcGVyX2NmZy5yMS0+c3RhcnQsIG9wZXJfY2ZnLmxlbjEpOwotCWlmICghb3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UpIHsKKwlvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgPSBpb3JlbWFwKHIxLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMSkpOworCWlmICghb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwKSB7CiAJCXN0YXR1cyA9IC1FQlVTWTsKIAkJZ290byBmYWlsMTsKIAl9CiAKLQlpZiAoZG0zNTUpIHsKLQkJb3Blcl9jZmcucjIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwotCQlpZiAoIW9wZXJfY2ZnLnIyKSB7CisJaWYgKG9wZXJfY2ZnLnBsYXRmb3JtID09IERNMzU1IHx8IG9wZXJfY2ZnLnBsYXRmb3JtID09IERNMzY1KSB7CisJCXIyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwkJaWYgKCFyMikgewogCQkJc3RhdHVzID0gLUVOT0VOVDsKIAkJCWdvdG8gZmFpbDI7CiAJCX0KLQkJb3Blcl9jZmcubGVuMiA9IG9wZXJfY2ZnLnIyLT5lbmQgLSBvcGVyX2NmZy5yMi0+c3RhcnQgKyAxOwotCQlvcGVyX2NmZy5yMiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMi0+c3RhcnQsCi0JCQkJCQkgb3Blcl9jZmcubGVuMiwKLQkJCQkJCSBvcGVyX2NmZy5yMi0+bmFtZSk7Ci0JCWlmICghb3Blcl9jZmcucjIpIHsKKwkJcjIgPSByZXF1ZXN0X21lbV9yZWdpb24ocjItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIyKSwgcjItPm5hbWUpOworCQlpZiAoIXIyKSB7CiAJCQlzdGF0dXMgPSAtRUJVU1k7CiAJCQlnb3RvIGZhaWwyOwogCQl9CiAKLQkJb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgPSBpb3JlbWFwKG9wZXJfY2ZnLnIyLT5zdGFydCwKLQkJCQkJCSAgb3Blcl9jZmcubGVuMik7Ci0JCWlmICghb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UpIHsKKwkJb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UxID0gaW9yZW1hcChyMi0+c3RhcnQsCisJCQkJCQkgICByZXNvdXJjZV9zaXplKHIyKSk7CisJCWlmICghb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UxKSB7CiAJCQlzdGF0dXMgPSAtRUJVU1k7CiAJCQlnb3RvIGZhaWwzOwogCQl9CiAJfQogCi0JaWYgKGRtMzU1KSB7CisJaWYgKG9wZXJfY2ZnLnBsYXRmb3JtID09IERNMzU1KSB7CiAJCW9wZXJfY2ZnLmh3X29wcy5lbmFibGVfY2xvY2sgPSBkbTM1NV9lbmFibGVfY2xvY2s7CiAJCW9wZXJfY2ZnLmh3X29wcy5zZWxlY3RfY2NkY19zb3VyY2UgPSBkbTM1NV9zZWxlY3RfY2NkY19zb3VyY2U7CisJCS8qIFNldHVwIHZwc3MgaW50ZXJydXB0cyAqLworCQlibF9yZWd3KERNMzU1X1ZQU1NCTF9JTlRTRUxfREVGQVVMVCwgRE0zNTVfVlBTU0JMX0lOVFNFTCk7CisJCWJsX3JlZ3coRE0zNTVfVlBTU0JMX0VWVFNFTF9ERUZBVUxULCBETTM1NV9WUFNTQkxfRVZUU0VMKTsKKwl9IGVsc2UgaWYgKG9wZXJfY2ZnLnBsYXRmb3JtID09IERNMzY1KSB7CisJCW9wZXJfY2ZnLmh3X29wcy5lbmFibGVfY2xvY2sgPSBkbTM2NV9lbmFibGVfY2xvY2s7CisJCW9wZXJfY2ZnLmh3X29wcy5zZWxlY3RfY2NkY19zb3VyY2UgPSBkbTM2NV9zZWxlY3RfY2NkY19zb3VyY2U7CisJCS8qIFNldHVwIHZwc3MgaW50ZXJydXB0cyAqLworCQlpc3A1X3dyaXRlKERNMzY1X0lTUDVfSU5UU0VMMV9ERUZBVUxULCBETTM2NV9JU1A1X0lOVFNFTDEpOworCQlpc3A1X3dyaXRlKERNMzY1X0lTUDVfSU5UU0VMMl9ERUZBVUxULCBETTM2NV9JU1A1X0lOVFNFTDIpOworCQlpc3A1X3dyaXRlKERNMzY1X0lTUDVfSU5UU0VMM19ERUZBVUxULCBETTM2NV9JU1A1X0lOVFNFTDMpOwogCX0gZWxzZQogCQlvcGVyX2NmZy5od19vcHMuY2xlYXJfd2JsX292ZXJmbG93ID0gZG02NDR4X2NsZWFyX3dibF9vdmVyZmxvdzsKIAogCXNwaW5fbG9ja19pbml0KCZvcGVyX2NmZy52cHNzX2xvY2spOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyB2cHNzIHByb2JlIHN1Y2Nlc3NcbiIsIG9wZXJfY2ZnLnZwc3NfbmFtZSk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZwc3MgcHJvYmUgc3VjY2Vzc1xuIiwgcGxhdGZvcm1fbmFtZSk7CiAJcmV0dXJuIDA7CiAKIGZhaWwzOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMi0+c3RhcnQsIG9wZXJfY2ZnLmxlbjIpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyMi0+c3RhcnQsIHJlc291cmNlX3NpemUocjIpKTsKIGZhaWwyOgotCWlvdW5tYXAob3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UpOworCWlvdW5tYXAob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwKTsKIGZhaWwxOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMS0+c3RhcnQsIG9wZXJfY2ZnLmxlbjEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyMS0+c3RhcnQsIHJlc291cmNlX3NpemUocjEpKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCB2cHNzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWlvdW5tYXAob3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMS0+c3RhcnQsIG9wZXJfY2ZnLmxlbjEpOwotCWlmICghc3RyY21wKG9wZXJfY2ZnLnZwc3NfbmFtZSwgImRtMzU1X3Zwc3MiKSkgewotCQlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwgb3Blcl9jZmcubGVuMik7CisJc3RydWN0IHJlc291cmNlCQkqcmVzOworCisJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKG9wZXJfY2ZnLnBsYXRmb3JtID09IERNMzU1IHx8IG9wZXJfY2ZnLnBsYXRmb3JtID09IERNMzY1KSB7CisJCWlvdW5tYXAob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UxKTsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCAyNTEwMDAwLi5lY2JjZWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMjMyLDYgKzIzMiwxMiBAQAogCXsJLTEsCQktMSwJLTEsCQktMX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGRpa29tX2RrMzAwX2RpZ2l0YWxbXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAkweDZlLAl+RU1fR1BJT180LAkxMH0sCisJe0VNMjg4MF9SMDRfR1BPLAkweDA4LAkweGZmLAkJMTB9LAorCXsgLTEsCQkJLTEsCS0xLAkJLTF9LAorfTsKKwogCiAvKgogICogIEJvYXJkIGRlZmluaXRpb25zCkBAIC00NjEsMjEgKzQ2NywzMCBAQAogCQkubmFtZSAgICAgICAgID0gIkxlYWR0ZWsgV2luZmFzdCBVU0IgSUkgRGVsdXhlIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCi0JCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5oYXNfaXJfaTJjICAgPSAxLAorCQkudHZhdWRpb19hZGRyID0gMHg1OCwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCB8CisJCQkJVERBOTg4N19QT1JUMl9BQ1RJVkUgfAorCQkJCVREQTk4ODdfUVNTLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5hZGVjb2RlciAgICAgPSBFTTI4WFhfVFZBVURJTywKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMiwKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEU0LAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfQVVYLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEU1LAogCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAogCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSB9LAorCQkJLnJhZGlvCSAgPSB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfUkFESU8sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9BVVgsCisJCQl9CiAJfSwKIAlbRU0yODIwX0JPQVJEX1ZJREVPTE9HWV8yMEsxNFhVU0JdID0gewogCQkubmFtZSAgICAgICAgID0gIlZpZGVvbG9neSAyMEsxNFhVU0IgVVNCMi4wIiwKQEAgLTczMCwxMSArNzQ1LDEyIEBACiAKIAlbRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YU19GUl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgSHlicmlkIFhTIFNlY2FtIiwKLQkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAogCQkuaGFzX21zcDM0eHggID0gMSwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKIAkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaGFzX2R2YiAgICAgID0gMSwKKwkJLmR2Yl9ncGlvICAgICA9IGRlZmF1bHRfZGlnaXRhbCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKQEAgLTEyNjUsNiArMTI4MSw3IEBACiAJCS5kZWNvZGVyCT0gRU0yOFhYX1NBQTcxMVgsCiAJCS5oYXNfZHZiCT0gMSwKIAkJLmR2Yl9ncGlvCT0gZW0yODgyX2t3b3JsZF8zMTV1X2RpZ2l0YWwsCisJCS5pcl9jb2Rlcwk9ICZpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSwKIAkJLnhjbGsJCT0gRU0yOFhYX1hDTEtfRlJFUVVFTkNZXzEyTUhaLAogCQkuaTJjX3NwZWVkCT0gRU0yOFhYX0kyQ19DTEtfV0FJVF9FTkFCTEUsCiAJCS8qIEFuYWxvZyBtb2RlIC0gc3RpbGwgbm90IHJlYWR5ICovCkBAIC0xNDMxLDYgKzE0NDgsMjEgQEAKIAkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSB9LAogCX0sCisJW0VNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiRGlrb20gREszMDAiLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5tdHNfZmlybXdhcmUgPSAxLAorCQkuaGFzX2R2YiAgICAgID0gMSwKKwkJLmR2Yl9ncGlvICAgICA9IGRpa29tX2RrMzAwX2RpZ2l0YWwsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGRlZmF1bHRfYW5hbG9nLAorCQl9IH0sCisJfSwKIAlbRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfMzMwVV0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiS3dvcmxkIFBsdXNUViBIRCBIeWJyaWQgMzMwIiwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKQEAgLTE3NTEsNiArMTc4Myw3IEBACiAJezB4Y2VlNDRhOTksIEVNMjg4Ml9CT0FSRF9FVkdBX0lORFRVQkUsIFRVTkVSX1hDMjAyOH0sCiAJezB4Yjg4NDZiMjAsIEVNMjg4MV9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUFJPLCBUVU5FUl9YQzIwMjh9LAogCXsweDYzZjY1M2JkLCBFTTI4NzBfQk9BUkRfUkVERE9fRFZCX0NfVVNCX0JPWCwgVFVORVJfQUJTRU5UfSwKKwl7MHg0ZTkxMzQ0MiwgRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwLCBUVU5FUl9YQzIwMjh9LAogfTsKIAogLyogSTJDIGRldmljZWxpc3QgaGFzaCB0YWJsZSBmb3IgZGV2aWNlcyB3aXRoIGdlbmVyaWMgVVNCIElEcyAqLwpAQCAtMjEwMyw2ICsyMTM2LDcgQEAKIAkJY3RsLT5kZW1vZCA9IFhDMzAyOF9GRV9ERUZBVUxUOwogCQlicmVhazsKIAljYXNlIEVNMjg4M19CT0FSRF9LV09STERfSFlCUklEXzMzMFU6CisJY2FzZSBFTTI4ODJfQk9BUkRfRElLT01fREszMDA6CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfQ0hJTkE7CiAJCWN0bC0+Zm5hbWUgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRTsKIAkJYnJlYWs7CkBAIC0yMjU5LDkgKzIyOTMsMTIgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB2b2lkIGVtMjh4eF9yZWdpc3Rlcl9pMmNfaXIoc3RydWN0IGVtMjh4eCAqZGV2KQogeworCS8qIExlYWR0ZWsgd2luZmFzdCB0diBVU0JJSSBkZWx1eGUgY2FuIGZpbmQgYSBub24gd29ya2luZyBJUi1kZXZpY2UgKi8KKwkvKiBhdCBhZGRyZXNzIDB4MTgsIHNvIGlmIHRoYXQgYWRkcmVzcyBpcyBuZWVkZWQgZm9yIGFub3RoZXIgYm9hcmQgaW4gKi8KKwkvKiB0aGUgZnV0dXJlLCBwbGVhc2UgcHV0IGl0IGFmdGVyIDB4MWYuICovCiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CiAJY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcl9saXN0W10gPSB7Ci0JCSAweDMwLCAweDQ3LCBJMkNfQ0xJRU5UX0VORAorCQkgMHgxZiwgMHgzMCwgMHg0NywgSTJDX0NMSUVOVF9FTkQKIAl9OwogCiAJaWYgKGRpc2FibGVfaXIpCkBAIC0yMjg4LDYgKzIzMjUsMTAgQEAKIAkJZGV2LT5pbml0X2RhdGEuaXJfY29kZXMgPSAmaXJfY29kZXNfcmM1X2hhdXBwYXVnZV9uZXdfdGFibGU7CiAJCWRldi0+aW5pdF9kYXRhLmdldF9rZXkgPSBlbTI4eHhfZ2V0X2tleV9lbV9oYXVwOwogCQlkZXYtPmluaXRfZGF0YS5uYW1lID0gImkyYyBJUiAoRU0yODQwIEhhdXBwYXVnZSkiOworCWNhc2UgRU0yODIwX0JPQVJEX0xFQURURUtfV0lORkFTVF9VU0JJSV9ERUxVWEU6CisJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gJmlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlX3RhYmxlOzsKKwkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGVtMjh4eF9nZXRfa2V5X3dpbmZhc3RfdXNiaWlfZGVsdXhlOworCQlkZXYtPmluaXRfZGF0YS5uYW1lID0gImkyYyBJUiAoRU0yODIwIFdpbmZhc3QgVFYgVVNCSUkgRGVsdXhlKSI7CiAJCWJyZWFrOwogCX0KIApAQCAtMjM4MSw2ICsyNDIyLDMxIEBACiAJCWVtMjh4eF9ncGlvX3NldChkZXYsIGRldi0+Ym9hcmQudHVuZXJfZ3Bpbyk7CiAJCWVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9BTkFMT0dfTU9ERSk7CiAJCWJyZWFrOworCisvKgorCQkgKiBUaGUgRGlrb20gREszMDAgaXMgZGV0ZWN0ZWQgYXMgYW4gS3dvcmxkIFZTLURWQi1UIDMyM1VSLgorCQkgKgorCQkgKiBUaGlzIG9jY3VycyBiZWNhdXNlIHRoZXkgc2hhcmUgaWRlbnRpY2FsIFVTQiB2ZW5kb3IgYW5kCisJCSAqIHByb2R1Y3QgSURzLgorCQkgKgorCQkgKiBXaGF0IHdlIGRvIGhlcmUgaXMgbG9vayB1cCB0aGUgRUVQUk9NIGhhc2ggb2YgdGhlIERpa29tCisJCSAqIGFuZCBpZiBpdCBpcyBmb3VuZCB0aGVuIHdlIGRlY2lkZSB0aGF0IHdlIGRvIG5vdCBoYXZlCisJCSAqIGEgS3dvcmxkIGFuZCByZXNldCB0aGUgZGV2aWNlIHRvIHRoZSBEaWtvbSBpbnN0ZWFkLgorCQkgKgorCQkgKiBUaGlzIHNvbHV0aW9uIGlzIG9ubHkgdmFsaWQgaWYgdGhleSBkbyBub3Qgc2hhcmUgZWVwcm9tCisJCSAqIGhhc2ggaWRlbnRpdGllcyB3aGljaCBoYXMgbm90IGJlZW4gZGV0ZXJtaW5lZCBhcyB5ZXQuCisJCSAqLworCWNhc2UgRU0yODgyX0JPQVJEX0tXT1JMRF9WU19EVkJUOgorCQlpZiAoIWVtMjh4eF9oaW50X2JvYXJkKGRldikpCisJCQllbTI4eHhfc2V0X21vZGVsKGRldik7CisKKwkJLyogSW4gY2FzZXMgd2hlcmUgd2UgaGFkIHRvIHVzZSBhIGJvYXJkIGhpbnQsIHRoZSBjYWxsIHRvCisJCSAgIGVtMjh4eF9zZXRfbW9kZSgpIGluIGVtMjh4eF9wcmVfY2FyZF9zZXR1cCgpIHdhcyBhIG5vLW9wLAorCQkgICBzbyBtYWtlIHRoZSBjYWxsIG5vdyBzbyB0aGUgYW5hbG9nIEdQSU9zIGFyZSBzZXQgcHJvcGVybHkKKwkJICAgYmVmb3JlIHByb2JpbmcgdGhlIGkyYyBidXMuICovCisJCWVtMjh4eF9ncGlvX3NldChkZXYsIGRldi0+Ym9hcmQudHVuZXJfZ3Bpbyk7CisJCWVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9BTkFMT0dfTU9ERSk7CisJCWJyZWFrOwogCX0KIAogI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKaW5kZXggYjMxMWQ0NS4uNWEzN2VjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCkBAIC02OTEsOSArNjkxLDE1IEBACiAJaWYgKGVtMjh4eF92Ymlfc3VwcG9ydGVkKGRldikgPT0gMSkgewogCQl2aW5jdHJsIHw9IEVNMjhYWF9WSU5DVFJMX1ZCSV9SQVc7CiAJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM0X1ZCSV9TVEFSVF9ILCAweDAwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzVfVkJJX1NUQVJUX1YsIDB4MDkpOwotCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNl9WQklfV0lEVEgsIDB4YjQpOwotCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzN19WQklfSEVJR0hULCAweDBjKTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzZfVkJJX1dJRFRILCBkZXYtPnZiaV93aWR0aC80KTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzdfVkJJX0hFSUdIVCwgZGV2LT52YmlfaGVpZ2h0KTsKKwkJaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzUyNV82MCkgeworCQkJLyogTlRTQyAqLworCQkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzVfVkJJX1NUQVJUX1YsIDB4MDkpOworCQl9IGVsc2UgaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgeworCQkJLyogUEFMICovCisJCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNV9WQklfU1RBUlRfViwgMHgwNyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMTFfVklOQ1RSTCwgdmluY3RybCk7CkBAIC03NjAsNiArNzY2LDEzIEBACiAJd2lkdGggPSBub3JtX21heHcoZGV2KTsKIAloZWlnaHQgPSBub3JtX21heGgoZGV2KTsKIAorCS8qIFByb3Blcmx5IHNldHVwIFZCSSAqLworCWRldi0+dmJpX3dpZHRoID0gNzIwOworCWlmIChkZXYtPm5vcm0gJiBWNEwyX1NURF81MjVfNjApCisJCWRldi0+dmJpX2hlaWdodCA9IDEyOworCWVsc2UKKwkJZGV2LT52YmlfaGVpZ2h0ID0gMTg7CisKIAlpZiAoIWRldi0+cHJvZ3Jlc3NpdmUpCiAJCWhlaWdodCA+Pj0gbm9ybV9tYXhoKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwppbmRleCBjYzA1MDVlLi4xYjk2MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCkBAIC01MDIsNyArNTAyLDkgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFM6CisJY2FzZSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTX0ZSOgogCWNhc2UgRU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk86CisJY2FzZSBFTTI4ODJfQk9BUkRfRElLT01fREszMDA6CiAJCWR2Yi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAmZW0yOHh4X3psMTAzNTNfeGMzMDI4X25vX2kyY19nYXRlLAogCQkJCQkgICAmZGV2LT5pMmNfYWRhcCk7CkBAIC02MDYsNiArNjA4LDcgQEAKIAogCWlmIChkZXYtPmR2YikgewogCQl1bnJlZ2lzdGVyX2R2YihkZXYtPmR2Yik7CisJCWtmcmVlKGRldi0+ZHZiKTsKIAkJZGV2LT5kdmIgPSBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwppbmRleCBhZjBkOTM1Li4xZmI3NTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwpAQCAtNzUsNiArNzUsMTAgQEAKIAl1bnNpZ25lZCBpbnQgcmVwZWF0X2ludGVydmFsOwogCiAJaW50ICAoKmdldF9rZXkpKHN0cnVjdCBlbTI4eHhfSVIgKiwgc3RydWN0IGVtMjh4eF9pcl9wb2xsX3Jlc3VsdCAqKTsKKworCS8qIElSIGRldmljZSBwcm9wZXJ0aWVzICovCisKKwlzdHJ1Y3QgaXJfZGV2X3Byb3BzIHByb3BzOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE4MCw2ICsxODQsMzYgQEAKIAlyZXR1cm4gMTsKIH0KIAoraW50IGVtMjh4eF9nZXRfa2V5X3dpbmZhc3RfdXNiaWlfZGVsdXhlKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBzdWJhZGRyLCBrZXlkZXRlY3QsIGtleTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geyB7IC5hZGRyID0gaXItPmMtPmFkZHIsIC5mbGFncyA9IDAsIC5idWYgPSAmc3ViYWRkciwgLmxlbiA9IDF9LAorCisJCQkJeyAuYWRkciA9IGlyLT5jLT5hZGRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9ICZrZXlkZXRlY3QsIC5sZW4gPSAxfSB9OworCisJc3ViYWRkciA9IDB4MTA7CisJaWYgKDIgIT0gaTJjX3RyYW5zZmVyKGlyLT5jLT5hZGFwdGVyLCBtc2csIDIpKSB7CisJCWkyY2RwcmludGsoInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGtleWRldGVjdCA9PSAweDAwKQorCQlyZXR1cm4gMDsKKworCXN1YmFkZHIgPSAweDAwOworCW1zZ1sxXS5idWYgPSAma2V5OworCWlmICgyICE9IGkyY190cmFuc2Zlcihpci0+Yy0+YWRhcHRlciwgbXNnLCAyKSkgeworCQlpMmNkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGtleSA9PSAweDAwKQorCQlyZXR1cm4gMDsKKworCSppcl9rZXkgPSBrZXk7CisJKmlyX3JhdyA9IGtleTsKKwlyZXR1cm4gMTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICBQb2xsIGJhc2VkIGdldCBrZXljb2RlIGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMzYsMzUgKzM3MCwyOCBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOwogfQogCi1pbnQgZW0yOHh4X2lyX2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KQoraW50IGVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2wodm9pZCAqcHJpdiwgdTY0IGlyX3R5cGUpCiB7Ci0Jc3RydWN0IGVtMjh4eF9JUiAqaXI7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCXU4IGlyX2NvbmZpZzsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWlmIChkZXYtPmJvYXJkLmlyX2NvZGVzID09IE5VTEwpIHsKLQkJLyogTm8gcmVtb3RlIGNvbnRyb2wgc3VwcG9ydCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOwotCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghaXIgfHwgIWlucHV0X2RldikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlpci0+aW5wdXQgPSBpbnB1dF9kZXY7Ci0JaXJfY29uZmlnID0gRU0yODc0X0lSX1JDNTsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gcHJpdjsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBpci0+ZGV2OworCXU4IGlyX2NvbmZpZyA9IEVNMjg3NF9JUl9SQzU7CiAKIAkvKiBBZGp1c3QgeGNsayBiYXNlZCBvIElSIHRhYmxlIGZvciBSQzUvTkVDIHRhYmxlcyAqLwotCWlmIChkZXYtPmJvYXJkLmlyX2NvZGVzLT5pcl90eXBlID09IElSX1RZUEVfUkM1KSB7CisKKwlkZXYtPmJvYXJkLmlyX2NvZGVzLT5pcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwlpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1JDNSkgewogCQlkZXYtPmJvYXJkLnhjbGsgfD0gRU0yOFhYX1hDTEtfSVJfUkM1X01PREU7CiAJCWlyLT5mdWxsX2NvZGUgPSAxOwotCX0gZWxzZSAgaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPT0gSVJfVFlQRV9ORUMpIHsKKwl9IGVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9ORUMpIHsKIAkJZGV2LT5ib2FyZC54Y2xrICY9IH5FTTI4WFhfWENMS19JUl9SQzVfTU9ERTsKIAkJaXJfY29uZmlnID0gRU0yODc0X0lSX05FQzsKIAkJaXItPmZ1bGxfY29kZSA9IDE7Ci0JfQorCX0gZWxzZQorCQlyYyA9IC1FSU5WQUw7CisKKwlkZXYtPmJvYXJkLmlyX2NvZGVzLT5pcl90eXBlID0gaXJfdHlwZTsKKwogCWVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIEVNMjhYWF9SMEZfWENMSywgZGV2LT5ib2FyZC54Y2xrLAogCQkJICAgICAgRU0yOFhYX1hDTEtfSVJfUkM1X01PREUpOwogCkBAIC0zODAsOSArNDA3LDQyIEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50aygiVW5yZWNvZ25pemVkIGVtMjh4eCBjaGlwIGlkOiBJUiBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCXJjID0gLUVJTlZBTDsKIAl9CiAKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBlbTI4eHhfaXJfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJc3RydWN0IGVtMjh4eF9JUiAqaXI7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnIgPSAtRU5PTUVNOworCisJaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMgPT0gTlVMTCkgeworCQkvKiBObyByZW1vdGUgY29udHJvbCBzdXBwb3J0ICovCisJCXJldHVybiAwOworCX0KKworCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpciB8fCAhaW5wdXRfZGV2KQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCS8qIHJlY29yZCBoYW5kbGVzIHRvIG91cnNlbGYgKi8KKwlpci0+ZGV2ID0gZGV2OworCWRldi0+aXIgPSBpcjsKKworCWlyLT5pbnB1dCA9IGlucHV0X2RldjsKKworCS8qCisJICogZW0yODc0IHN1cHBvcnRzIG1vcmUgcHJvdG9jb2xzLiBGb3Igbm93LCBsZXQncyBqdXN0IGFubm91bmNlCisJICogdGhlIHR3byBwcm90b2NvbHMgdGhhdCB3ZXJlIGFscmVhZHkgdGVzdGVkCisJICovCisJaXItPnByb3BzLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfCBJUl9UWVBFX05FQzsKKwlpci0+cHJvcHMucHJpdiA9IGlyOworCWlyLT5wcm9wcy5jaGFuZ2VfcHJvdG9jb2wgPSBlbTI4eHhfaXJfY2hhbmdlX3Byb3RvY29sOworCiAJLyogVGhpcyBpcyBob3cgb2Z0ZW4gd2UgYXNrIHRoZSBjaGlwIGZvciBJUiBpbmZvcm1hdGlvbiAqLwogCWlyLT5wb2xsaW5nID0gMTAwOyAvKiBtcyAqLwogCkBAIC0zOTMsNiArNDUzLDggQEAKIAl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgaXItPnBoeXMsIHNpemVvZihpci0+cGh5cykpOwogCXN0cmxjYXQoaXItPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKGlyLT5waHlzKSk7CiAKKwkvKiBTZXQgSVIgcHJvdG9jb2wgKi8KKwllbTI4eHhfaXJfY2hhbmdlX3Byb3RvY29sKGlyLCBkZXYtPmJvYXJkLmlyX2NvZGVzLT5pcl90eXBlKTsKIAllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgSVJfVFlQRV9PVEhFUik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX291dF9mcmVlOwpAQCAtNDA1LDE0ICs0NjcsMTMgQEAKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKIAogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKLQkvKiByZWNvcmQgaGFuZGxlcyB0byBvdXJzZWxmICovCi0JaXItPmRldiA9IGRldjsKLQlkZXYtPmlyID0gaXI7CisKIAogCWVtMjh4eF9pcl9zdGFydChpcik7CiAKIAkvKiBhbGwgZG9uZSAqLwotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgZGV2LT5ib2FyZC5pcl9jb2Rlcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBkZXYtPmJvYXJkLmlyX2NvZGVzLAorCQkJCSZpci0+cHJvcHMpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKaW5kZXggMDU4YWM4Ny4uOTFlOTA1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaApAQCAtMTczLDggKzE3Myw4IEBACiAvKiBlbTI4NzQgSVIgY29uZmlnIHJlZ2lzdGVyICgweDUwKSAqLwogI2RlZmluZSBFTTI4NzRfSVJfTkVDICAgICAgICAgICAweDAwCiAjZGVmaW5lIEVNMjg3NF9JUl9SQzUgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgRU0yODc0X0lSX1JDNV9NT0RFXzAgICAgMHgwOAotI2RlZmluZSBFTTI4NzRfSVJfUkM1X01PREVfNkEgICAweDBiCisjZGVmaW5lIEVNMjg3NF9JUl9SQzZfTU9ERV8wICAgIDB4MDgKKyNkZWZpbmUgRU0yODc0X0lSX1JDNl9NT0RFXzZBICAgMHgwYgogCiAvKiBlbTI4NzQgVHJhbnNwb3J0IFN0cmVhbSBFbmFibGUgUmVnaXN0ZXIgKDB4NWYpICovCiAjZGVmaW5lIEVNMjg3NF9UUzFfQ0FQVFVSRV9FTkFCTEUgKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYwppbmRleCA5NDk0M2U1Li5jN2RjZTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jCkBAIC03MSw3ICs3MSwxMSBAQAogc3RhdGljIGludAogdmJpX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50ICpjb3VudCwgdW5zaWduZWQgaW50ICpzaXplKQogewotCSpzaXplID0gNzIwICogMTIgKiAyOworCXN0cnVjdCBlbTI4eHhfZmggICAgICpmaCAgPSBxLT5wcml2X2RhdGE7CisJc3RydWN0IGVtMjh4eCAgICAgICAgKmRldiA9IGZoLT5kZXY7CisKKwkqc2l6ZSA9IGRldi0+dmJpX3dpZHRoICogZGV2LT52YmlfaGVpZ2h0ICogMjsKKwogCWlmICgwID09ICpjb3VudCkKIAkJKmNvdW50ID0gdmJpYnVmczsKIAlpZiAoKmNvdW50IDwgMikKQEAgLTg1LDE5ICs4OSwxOCBAQAogdmJpX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKIAkgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogeworCXN0cnVjdCBlbTI4eHhfZmggICAgICpmaCAgPSBxLT5wcml2X2RhdGE7CisJc3RydWN0IGVtMjh4eCAgICAgICAgKmRldiA9IGZoLT5kZXY7CiAJc3RydWN0IGVtMjh4eF9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGVtMjh4eF9idWZmZXIsIHZiKTsKIAlpbnQgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0JdW5zaWduZWQgaW50IHNpemU7CiAKLQlzaXplID0gNzIwICogMTIgKiAyOwotCi0JYnVmLT52Yi5zaXplID0gc2l6ZTsKKwlidWYtPnZiLnNpemUgPSBkZXYtPnZiaV93aWR0aCAqIGRldi0+dmJpX2hlaWdodCAqIDI7CiAKIAlpZiAoMCAhPSBidWYtPnZiLmJhZGRyICAmJiAgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlidWYtPnZiLndpZHRoICA9IDcyMDsKLQlidWYtPnZiLmhlaWdodCA9IDEyOworCWJ1Zi0+dmIud2lkdGggID0gZGV2LT52Ymlfd2lkdGg7CisJYnVmLT52Yi5oZWlnaHQgPSBkZXYtPnZiaV9oZWlnaHQ7CiAJYnVmLT52Yi5maWVsZCAgPSBmaWVsZDsKIAogCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IGJ1Zi0+dmIuc3RhdGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggODQ5YjE4Yy4uYWMyYmQ5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTI4Miw3ICsyODIsNyBAQAogewogCXZvaWQgKnN0YXJ0d3JpdGUsICpzdGFydHJlYWQ7CiAJaW50ICBvZmZzZXQ7Ci0JaW50IGJ5dGVzcGVybGluZSA9IDcyMDsKKwlpbnQgYnl0ZXNwZXJsaW5lID0gZGV2LT52Ymlfd2lkdGg7CiAKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZW0yOHh4X2lzb2NkYmcoImRldiBpcyBudWxsXG4iKTsKQEAgLTMyMyw4ICszMjMsOCBAQAogCiAJLyogTWFrZSBzdXJlIHRoZSBib3R0b20gZmllbGQgcG9wdWxhdGVzIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgZnJhbWUgKi8KIAlpZiAoYnVmLT50b3BfZmllbGQgPT0gMCkgewotCQlzdGFydHdyaXRlICs9IGJ5dGVzcGVybGluZSAqIDB4MGM7Ci0JCW9mZnNldCArPSBieXRlc3BlcmxpbmUgKiAweDBjOworCQlzdGFydHdyaXRlICs9IGJ5dGVzcGVybGluZSAqIGRldi0+dmJpX2hlaWdodDsKKwkJb2Zmc2V0ICs9IGJ5dGVzcGVybGluZSAqIGRldi0+dmJpX2hlaWdodDsKIAl9CiAKIAltZW1jcHkoc3RhcnR3cml0ZSwgc3RhcnRyZWFkLCBsZW4pOwpAQCAtNTc4LDggKzU3OCw3IEBACiAJCQlkZXYtPmN1cl9maWVsZCA9IHBbMl07CiAJCX0KIAotCQkvKiBGSVhNRTogZ2V0IHJpZCBvZiBoYXJkLWNvZGVkIHZhbHVlICovCi0JCXZiaV9zaXplID0gNzIwICogMHgwYzsKKwkJdmJpX3NpemUgPSBkZXYtPnZiaV93aWR0aCAqIGRldi0+dmJpX2hlaWdodDsKIAogCQlpZiAoZGV2LT5jYXB0dXJlX3R5cGUgPT0gMCkgewogCQkJaWYgKGRldi0+dmJpX3JlYWQgPj0gdmJpX3NpemUpIHsKQEAgLTE4NTAsMTggKzE4NDksMjcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQpCiB7Ci0JZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSA3MjA7CisJc3RydWN0IGVtMjh4eF9maCAgICAgICpmaCAgPSBwcml2OworCXN0cnVjdCBlbTI4eHggICAgICAgICAqZGV2ID0gZmgtPmRldjsKKworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gZGV2LT52Ymlfd2lkdGg7CiAJZm9ybWF0LT5mbXQudmJpLnNhbXBsZV9mb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKIAlmb3JtYXQtPmZtdC52Ymkub2Zmc2V0ID0gMDsKIAlmb3JtYXQtPmZtdC52YmkuZmxhZ3MgPSAwOworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGluZ19yYXRlID0gNjc1MDAwMCAqIDQgLyAyOworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IGRldi0+dmJpX2hlaWdodDsKKwlmb3JtYXQtPmZtdC52YmkuY291bnRbMV0gPSBkZXYtPnZiaV9oZWlnaHQ7CiAKIAkvKiBWYXJpZXMgYnkgdmlkZW8gc3RhbmRhcmQgKE5UU0MsIFBBTCwgZXRjLikgKi8KLQkvKiBGSVhNRTogaGFyZC1jb2RlZCBmb3IgTlRTQyBzdXBwb3J0ICovCi0JZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7IC8qIEZJWE1FOiA/Pz8gKi8KLQlmb3JtYXQtPmZtdC52YmkuY291bnRbMF0gPSAxMjsKLQlmb3JtYXQtPmZtdC52YmkuY291bnRbMV0gPSAxMjsKLQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSAxMDsKLQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAyNzM7CisJaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzUyNV82MCkgeworCQkvKiBOVFNDICovCisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOworCQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAyNzM7CisJfSBlbHNlIGlmIChkZXYtPm5vcm0gJiBWNEwyX1NURF82MjVfNTApIHsKKwkJLyogUEFMICovCisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDY7CisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDMxODsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NjksMTggKzE4NzcsMjcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQpCiB7Ci0JZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSA3MjA7CisJc3RydWN0IGVtMjh4eF9maCAgICAgICpmaCAgPSBwcml2OworCXN0cnVjdCBlbTI4eHggICAgICAgICAqZGV2ID0gZmgtPmRldjsKKworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gZGV2LT52Ymlfd2lkdGg7CiAJZm9ybWF0LT5mbXQudmJpLnNhbXBsZV9mb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKIAlmb3JtYXQtPmZtdC52Ymkub2Zmc2V0ID0gMDsKIAlmb3JtYXQtPmZtdC52YmkuZmxhZ3MgPSAwOworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGluZ19yYXRlID0gNjc1MDAwMCAqIDQgLyAyOworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IGRldi0+dmJpX2hlaWdodDsKKwlmb3JtYXQtPmZtdC52YmkuY291bnRbMV0gPSBkZXYtPnZiaV9oZWlnaHQ7CiAKIAkvKiBWYXJpZXMgYnkgdmlkZW8gc3RhbmRhcmQgKE5UU0MsIFBBTCwgZXRjLikgKi8KLQkvKiBGSVhNRTogaGFyZC1jb2RlZCBmb3IgTlRTQyBzdXBwb3J0ICovCi0JZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7IC8qIEZJWE1FOiA/Pz8gKi8KLQlmb3JtYXQtPmZtdC52YmkuY291bnRbMF0gPSAxMjsKLQlmb3JtYXQtPmZtdC52YmkuY291bnRbMV0gPSAxMjsKLQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSAxMDsKLQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAyNzM7CisJaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzUyNV82MCkgeworCQkvKiBOVFNDICovCisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOworCQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAyNzM7CisJfSBlbHNlIGlmIChkZXYtPm5vcm0gJiBWNEwyX1NURF82MjVfNTApIHsKKwkJLyogUEFMICovCisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDY7CisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDMxODsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5MjIsNyArMTkzOSw4IEBACiAJCSAgIEF0IGEgbWluaW11bSwgaXQgY2F1c2VzIGEgY3Jhc2ggaW4genZiaSBzaW5jZSBpdCBkb2VzCiAJCSAgIGEgbWVtY3B5IGJhc2VkIG9uIHRoZSBzb3VyY2UgYnVmZmVyIGxlbmd0aCAqLwogCQlpbnQgcmVzdWx0ID0gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92YmlxLCBiKTsKLQkJYi0+bGVuZ3RoID0gMTcyODA7CisJCWItPmxlbmd0aCA9IGRldi0+dmJpX3dpZHRoICogZGV2LT52YmlfaGVpZ2h0ICogMjsKKwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggODBkOWI0Zi4uYmE2ZmU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTExMSw2ICsxMTEsNyBAQAogI2RlZmluZSBFTTI4NjFfQk9BUkRfR0FETUVJX1VUVjMzMFBMVVMgICAgICAgICAgIDcyCiAjZGVmaW5lIEVNMjg3MF9CT0FSRF9SRURET19EVkJfQ19VU0JfQk9YICAgICAgICAgIDczCiAjZGVmaW5lIEVNMjgwMF9CT0FSRF9WQzIxMUEJCQkgIDc0CisjZGVmaW5lIEVNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMAkJICA3NQogCiAvKiBMaW1pdHMgbWluaW11bSBhbmQgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyAqLwogI2RlZmluZSBFTTI4WFhfTUlOX0JVRiA0CkBAIC01NTIsNyArNTUzLDggQEAKIAlpbnQgY2FwdHVyZV90eXBlOwogCWludCB2YmlfcmVhZDsKIAl1bnNpZ25lZCBjaGFyIGN1cl9maWVsZDsKLQorCXVuc2lnbmVkIGludCB2Ymlfd2lkdGg7CisJdW5zaWduZWQgaW50IHZiaV9oZWlnaHQ7IC8qIGxpbmVzIHBlciBmaWVsZCAqLwogCiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICAgcmVxdWVzdF9tb2R1bGVfd2s7CiAKQEAgLTY5Myw2ICs2OTUsOCBAQAogaW50IGVtMjh4eF9nZXRfa2V5X2VtX2hhdXAoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3Jhdyk7CiBpbnQgZW0yOHh4X2dldF9rZXlfcGlubmFjbGVfdXNiX2dyZXkoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LAogCQkJCSAgICAgdTMyICppcl9yYXcpOworaW50IGVtMjh4eF9nZXRfa2V5X3dpbmZhc3RfdXNiaWlfZGVsdXhlKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwKKwkJCQkgICAgIHUzMiAqaXJfcmF3KTsKIHZvaWQgZW0yOHh4X3JlZ2lzdGVyX3NuYXBzaG90X2J1dHRvbihzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogdm9pZCBlbTI4eHhfZGVyZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oc3RydWN0IGVtMjh4eCAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9LY29uZmlnCmluZGV4IGRjYzFhMDMuLjg3OTgxYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcKQEAgLTEsNyArMSwxMSBAQAogY29uZmlnIFVTQl9FVDYxWDI1MQotCXRyaXN0YXRlICJVU0IgRVQ2MVhbMTJdNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVVNCIEVUNjFYWzEyXTUxIFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMgorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2EgemMzeHggbW9kdWxlCisJICBpbnN0ZWFkLgorCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gRXRvbXMgRVQ2MVgxNTEKIAkgIG9yIEVUNjFYMjUxIFBDIENhbWVyYSBDb250cm9sbGVycy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCmluZGV4IDYwOWQ2NWIuLmUwMDYwYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKQEAgLTIxLDYgKzIxLDE1IEBACiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL0tjb25maWciCiAKK2NvbmZpZyBVU0JfR1NQQ0FfQkVOUQorCXRyaXN0YXRlICJCZW5xIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBCZW5xIERDIEUzMDAgY2FtZXJhLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9iZW5xLgorCiBjb25maWcgVVNCX0dTUENBX0NPTkVYCiAJdHJpc3RhdGUgIkNvbmV4YW50IENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpAQCAtMzAsNiArMzksMTcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2NvbmV4LgogCitjb25maWcgVVNCX0dTUENBX0NQSUExCisJdHJpc3RhdGUgImNwaWEgQ1BpQSAodmVyc2lvbiAxKSBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIFVTQiBjYW1lcmFzIGJhc2VkIG9uIHRoZSBjcGlhCisJICBDUGlBIGNoaXAuIE5vdGUgdGhhdCB5b3UgbmVlZCBhdGxlYXN0IHZlcnNpb24gMC42LjQgb2YgbGlidjRsIGZvcgorCSAgYXBwbGljYXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHZpZGVvZm9ybWF0IGdlbmVyYXRlZCBieSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfY3BpYTEuCisKIGNvbmZpZyBVU0JfR1NQQ0FfRVRPTVMKIAl0cmlzdGF0ZSAiRXRvbXMgVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpAQCAtODYsMTUgKzEwNiwyNSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX292NTE5LgogCiBjb25maWcgVVNCX0dTUENBX09WNTM0Ci0JdHJpc3RhdGUgIk9WNTM0IFVTQiBDYW1lcmEgRHJpdmVyIgorCXRyaXN0YXRlICJPVjUzNCBPVjc3MnggVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgT1Y1MzQgY2hpcC4KLQkgIChlLmcuIFNvbnkgUGxheXN0YXRpb24gRVlFKQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBPVjUzNCBjaGlwCisJICBhbmQgc2Vuc29yIE9WNzcyeCAoZS5nLiBTb255IFBsYXlzdGF0aW9uIEVZRSkKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffb3Y1MzQuCiAKK2NvbmZpZyBVU0JfR1NQQ0FfT1Y1MzRfOQorCXRyaXN0YXRlICJPVjUzNCBPVjk2NXggVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgT1Y1MzQgY2hpcAorCSAgYW5kIHNlbnNvciBPVjk2NXggKGUuZy4gSGVyY3VsZXMgRHVhbHBpeCkKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffb3Y1MzRfOS4KKwogY29uZmlnIFVTQl9HU1BDQV9QQUMyMDcKIAl0cmlzdGF0ZSAiUGl4YXJ0IFBBQzIwNyBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC0xMjIsNiArMTUyLDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9wYWM3MzExLgogCitjb25maWcgVVNCX0dTUENBX1NOOUMyMDI4CisJdHJpc3RhdGUgIlNPTklYIER1YWwtTW9kZSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdHJlYW1pbmcgc3VwcG9ydCBmb3IgU29uaXggU045QzIwMjggY2FtZXJhcy4KKwkgIFRoZXNlIGFyZSBzdXBwb3J0ZWQgYXMgc3RpbGxjYW1zIGluIGxpYmdwaG90bzIvY2FtbGlicy9zb25peC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc245YzIwMjguCisKIGNvbmZpZyBVU0JfR1NQQ0FfU045QzIwWAogCXRyaXN0YXRlICJTTjlDMjBYIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCmluZGV4IGZmMmM3MjcuLjZlNGNmMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpAQCAtMSw1ICsxLDcgQEAKIG9iai0kKENPTkZJR19VU0JfR1NQQ0EpICAgICAgICAgICs9IGdzcGNhX21haW4ubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9CRU5RKSAgICAgKz0gZ3NwY2FfYmVucS5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX0NPTkVYKSAgICArPSBnc3BjYV9jb25leC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0NQSUExKSAgICArPSBnc3BjYV9jcGlhMS5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX0VUT01TKSAgICArPSBnc3BjYV9ldG9tcy5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVgpICArPSBnc3BjYV9maW5lcGl4Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfSkVJTElOSikgICs9IGdzcGNhX2plaWxpbmoubwpAQCAtNyw5ICs5LDExIEBACiBvYmotJChDT05GSUdfVVNCX0dTUENBX01SOTczMTBBKSArPSBnc3BjYV9tcjk3MzEwYS5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTE5KSAgICArPSBnc3BjYV9vdjUxOS5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTM0KSAgICArPSBnc3BjYV9vdjUzNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTM0XzkpICArPSBnc3BjYV9vdjUzNF85Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3KSAgICs9IGdzcGNhX3BhYzIwNy5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzczMDIpICArPSBnc3BjYV9wYWM3MzAyLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSkgICs9IGdzcGNhX3BhYzczMTEubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TTjlDMjAyOCkgKz0gZ3NwY2Ffc245YzIwMjgubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYKSAgKz0gZ3NwY2Ffc245YzIweC5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYQikgICArPSBnc3BjYV9zb25peGIubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEopICAgKz0gZ3NwY2Ffc29uaXhqLm8KQEAgLTMwLDcgKzM0LDkgQEAKIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfWkMzWFgpICAgICs9IGdzcGNhX3pjM3h4Lm8KIAogZ3NwY2FfbWFpbi1vYmpzICAgICA6PSBnc3BjYS5vCitnc3BjYV9iZW5xLW9ianMgICAgIDo9IGJlbnEubwogZ3NwY2FfY29uZXgtb2JqcyAgICA6PSBjb25leC5vCitnc3BjYV9jcGlhMS1vYmpzICAgIDo9IGNwaWExLm8KIGdzcGNhX2V0b21zLW9ianMgICAgOj0gZXRvbXMubwogZ3NwY2FfZmluZXBpeC1vYmpzICA6PSBmaW5lcGl4Lm8KIGdzcGNhX2plaWxpbmotb2JqcyAgOj0gamVpbGluai5vCkBAIC0zOCw5ICs0NCwxMSBAQAogZ3NwY2FfbXI5NzMxMGEtb2JqcyA6PSBtcjk3MzEwYS5vCiBnc3BjYV9vdjUxOS1vYmpzICAgIDo9IG92NTE5Lm8KIGdzcGNhX292NTM0LW9ianMgICAgOj0gb3Y1MzQubworZ3NwY2Ffb3Y1MzRfOS1vYmpzICA6PSBvdjUzNF85Lm8KIGdzcGNhX3BhYzIwNy1vYmpzICAgOj0gcGFjMjA3Lm8KIGdzcGNhX3BhYzczMDItb2JqcyAgOj0gcGFjNzMwMi5vCiBnc3BjYV9wYWM3MzExLW9ianMgIDo9IHBhYzczMTEubworZ3NwY2Ffc245YzIwMjgtb2JqcyA6PSBzbjljMjAyOC5vCiBnc3BjYV9zbjljMjB4LW9ianMgIDo9IHNuOWMyMHgubwogZ3NwY2Ffc29uaXhiLW9ianMgICA6PSBzb25peGIubwogZ3NwY2Ffc29uaXhqLW9ianMgICA6PSBzb25peGoubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9iZW5xLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2JlbnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FjNGFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9iZW5xLmMKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBCZW5xIERDIEUzMDAgc3ViZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEplYW4tRnJhbmNvaXMgTW9pbmUgKGh0dHA6Ly9tb2luZWpmLmZyZWUuZnIpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJiZW5xIgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworTU9EVUxFX0FVVEhPUigiSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQmVucSBEQyBFMzAwIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorfTsKKworc3RhdGljIHZvaWQgc2RfaXNvY19pcnEoc3RydWN0IHVyYiAqdXJiKTsKKworLyogLS0gd3JpdGUgYSByZWdpc3RlciAtLSAqLworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTE2IHZhbHVlLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJMHgwMiwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLAorCQkJaW5kZXgsCisJCQlOVUxMLAorCQkJMCwKKwkJCTUwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3cgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlID0gdmdhX21vZGU7CisJZ3NwY2FfZGV2LT5jYW0ubm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJZ3NwY2FfZGV2LT5jYW0ubm9fdXJiX2NyZWF0ZSA9IDE7CisJZ3NwY2FfZGV2LT5jYW0ucmV2ZXJzZV9hbHRzID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2lzb2NfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLAorCQlnc3BjYV9kZXYtPm5iYWx0IC0gMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJ1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisvKglyZWdfdyhnc3BjYV9kZXYsIDB4MDAwMywgMHgwMDAyKTsgKi8KKwlyZXR1cm4gMDsKK30KKworLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBpLCBuOworCisJLyogY3JlYXRlIDQgVVJCcyAtIDIgb24gZW5kcG9pbnQgMHg4MyBhbmQgMiBvbiAweDA4MiAqLworI2lmIE1BWF9OVVJCUyA8IDQKKyNlcnJvciAiTm90IGVub3VnaCBVUkJzIGluIHRoZSBnc3BjYSB0YWJsZSIKKyNlbmRpZgorI2RlZmluZSBTRF9QS1RfU1ogNjQKKyNkZWZpbmUgU0RfTlBLVCAzMgorCWZvciAobiA9IDA7IG4gPCA0OyBuKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihTRF9OUEtULCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWVycigidXNiX2FsbG9jX3VyYiBmYWlsZWQiKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWdzcGNhX2Rldi0+dXJiW25dID0gdXJiOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCQlTRF9QS1RfU1ogKiBTRF9OUEtULAorCQkJCQkJR0ZQX0tFUk5FTCwKKwkJCQkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CisKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJCWVycigidXNiX2J1ZmZlcl9hbGxvYyBmYWlsZWQiKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXVyYi0+ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJCXVyYi0+Y29udGV4dCA9IGdzcGNhX2RldjsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gU0RfUEtUX1NaICogU0RfTlBLVDsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGdzcGNhX2Rldi0+ZGV2LAorCQkJCQluICYgMSA/IDB4ODIgOiAweDgzKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUAorCQkJCQl8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQl1cmItPmludGVydmFsID0gMTsKKwkJdXJiLT5jb21wbGV0ZSA9IHNkX2lzb2NfaXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU0RfTlBLVDsKKwkJZm9yIChpID0gMDsgaSA8IFNEX05QS1Q7IGkrKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBTRF9QS1RfU1o7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IFNEX1BLVF9TWiAqIGk7CisJCX0KKwl9CisKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwM2MsIDB4MDAwMyk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwM2MsIDB4MDAwNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwM2MsIDB4MDAwNSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwM2MsIDB4MDAwNik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAwM2MsIDB4MDAwNyk7CisJdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIGdzcGNhX2Rldi0+bmJhbHQgLSAxKTsKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJLyogdW51c2VkICovCit9CisKKy8qIHJlY2VwdGlvbiBvZiBhbiBVUkIgKi8KK3N0YXRpYyB2b2lkIHNkX2lzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHVyYiAqdXJiMDsKKwl1OCAqZGF0YTsKKwlpbnQgaSwgc3Q7CisKKwlQREVCVUcoRF9QQUNLLCAic2QgaXNvYyBpcnEiKTsKKwlpZiAoIWdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlyZXR1cm47CisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pCisJCQlyZXR1cm47CQkvKiBkaXNjb25uZWN0aW9uICovCisjaWZkZWYgQ09ORklHX1BNCisJCWlmIChnc3BjYV9kZXYtPmZyb3plbikKKwkJCXJldHVybjsKKyNlbmRpZgorCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXJiIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB0aGlzIGlzIGEgY29udHJvbCBVUk4gKGVwIDB4ODMpLCB3YWl0ICovCisJaWYgKHVyYiA9PSBnc3BjYV9kZXYtPnVyYlswXSB8fCB1cmIgPT0gZ3NwY2FfZGV2LT51cmJbMl0pCisJCXJldHVybjsKKworCS8qIHNjYW4gYm90aCByZWNlaXZlZCBVUkJzICovCisJaWYgKHVyYiA9PSBnc3BjYV9kZXYtPnVyYlsxXSkKKwkJdXJiMCA9IGdzcGNhX2Rldi0+dXJiWzBdOworCWVsc2UKKwkJdXJiMCA9IGdzcGNhX2Rldi0+dXJiWzJdOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKworCQkvKiBjaGVjayB0aGUgcGFja2V0IHN0YXR1cyBhbmQgbGVuZ3RoICovCisJCWlmICh1cmIwLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoICE9IFNEX1BLVF9TWgorCQkgICAgfHwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoICE9IFNEX1BLVF9TWikgeworCQkJUERFQlVHKERfRVJSLCAiSVNPQyBiYWQgbGVuZ3RocyAlZCAvICVkIiwKKwkJCQl1cmIwLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoLAorCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCk7CisJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN0ID0gdXJiMC0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCQlpZiAoc3QgPT0gMCkKKwkJCXN0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCWlmIChzdCkgeworCQkJUERFQlVHKERfRVJSLAorCQkJCSJJU09DIGRhdGEgZXJyb3I6IFslZF0gc3RhdHVzPSVkIiwKKwkJCQlpLCBzdCk7CisJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVGhlIGltYWdlcyBhcmUgcmVjZWl2ZWQgaW4gVVJCcyBvZiBkaWZmZXJlbnQgZW5kcG9pbnRzCisJCSAqICgweDgzIGFuZCAweDgyKS4KKwkJICogSW1hZ2UgcGllY2VzIGluIFVSQnMgb2YgZXAgMHg4MyBhcmUgY29udGludWF0ZWQgaW4gVVJCcyBvZgorCQkgKiBlcCAweDgyIG9mIHRoZSBzYW1lIGluZGV4LgorCQkgKiBUaGUgcGFja2V0cyBpbiB0aGUgVVJCcyBvZiBlbmRwb2ludCAweDgzIHN0YXJ0IHdpdGg6CisJCSAqCS0gODAgYmEvYmIgMDAgMDAgPSBzdGFydCBvZiBpbWFnZSBmb2xsb3dlZCBieSAnZmYgZDgnCisJCSAqCS0gMDQgYmEvYmIgb28gb28gPSBpbWFnZSBwaWVjZQorCQkgKgkJd2hlcmUgJ29vIG9vJyBpcyB0aGUgaW1hZ2Ugb2Zmc2V0CisJCQkJCQkobm90IGNoZWtlZCkKKwkJICoJLSAob3RoZXIgLT4gYmFkIGZyYW1lKQorCQkgKiBUaGUgaW1hZ2VzIGFyZSBKUEVHIGVuY29kZWQgd2l0aCBmdWxsIGhlYWRlciBhbmQKKwkJICogbm9ybWFsIGZmIGVzY2FwZS4KKwkJICogVGhlIGVuZCBvZiBpbWFnZSAoJ2ZmIGQ5JykgbWF5IG9jY3VyIGluIGFueSBVUkIuCisJCSAqIChub3QgY2hla2VkKQorCQkgKi8KKwkJZGF0YSA9ICh1OCAqKSB1cmIwLT50cmFuc2Zlcl9idWZmZXIKKwkJCQkJKyB1cmIwLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCWlmIChkYXRhWzBdID09IDB4ODAgJiYgKGRhdGFbMV0gJiAweGZlKSA9PSAweGJhKSB7CisKKwkJCS8qIG5ldyBpbWFnZSAqLworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCU5VTEwsIDApOworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULAorCQkJCQlkYXRhICsgNCwgU0RfUEtUX1NaIC0gNCk7CisJCX0gZWxzZSBpZiAoZGF0YVswXSA9PSAweDA0ICYmIChkYXRhWzFdICYgMHhmZSkgPT0gMHhiYSkgeworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULAorCQkJCQlkYXRhICsgNCwgU0RfUEtUX1NaIC0gNCk7CisJCX0gZWxzZSB7CisJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRhdGEgPSAodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIKKwkJCQkJKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKKwkJCQkJZGF0YSwgU0RfUEtUX1NaKTsKKwl9CisKKwkvKiByZXN1Ym1pdCB0aGUgVVJCcyAqLworCXN0ID0gdXNiX3N1Ym1pdF91cmIodXJiMCwgR0ZQX0FUT01JQyk7CisJaWYgKHN0IDwgMCkKKwkJUERFQlVHKERfRVJSfERfUEFDSywgInVzYl9zdWJtaXRfdXJiKDApIHJldCAlZCIsIHN0KTsKKwlzdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0IDwgMCkKKwkJUERFQlVHKERfRVJSfERfUEFDSywgInVzYl9zdWJtaXRfdXJiKCkgcmV0ICVkIiwgc3QpOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ID0gc2RfaW5pdCwKKwkuaXNvY19pbml0ID0gc2RfaXNvY19pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0YTUsIDB4MzAzNSl9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaW5mbygicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaW5mbygiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29hcnNlX2V4cG9fYXV0b2dhaW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29hcnNlX2V4cG9fYXV0b2dhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I5ZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQXV0byBnYWluIGFsZ29yaXRobSBmb3IgY2FtZXJhJ3Mgd2l0aCBhIGNvYXJzZSBleHBvc3VyZSBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qIEF1dG9nYWluICsgZXhwb3N1cmUgYWxnb3JpdGhtIGZvciBjYW1lcmFzIHdpdGggYSBjb2Fyc2UgZXhwb3N1cmUgY29udHJvbAorICAgKHVzdWFsbHkgdGhpcyBtZWFucyB3ZSBjYW4gb25seSBjb250cm9sIHRoZSBjbG9ja2RpdiB0byBjaGFuZ2UgZXhwb3N1cmUpCisgICBBcyBjaGFuZ2luZyB0aGUgY2xvY2tkaXYgc28gdGhhdCB0aGUgZnBzIGRyb3BzIGZyb20gMzAgdG8gMTUgZnBzIGZvcgorICAgZXhhbXBsZSwgd2lsbCBsZWFkIHRvIGEgaHVnZSBleHBvc3VyZSBjaGFuZ2UgKGl0IGVmZmVjdGl2ZWx5IGRvdWJsZXMpLAorICAgdGhpcyBhbGdvcml0aG0gbm9ybWFsbHkgdHJpZXMgdG8gb25seSBhZGp1c3QgdGhlIGdhaW4gKGJldHdlZW4gNDAgYW5kCisgICA4MCAlKSBhbmQgaWYgdGhhdCBkb2VzIG5vdCBoZWxwLCBvbmx5IHRoZW4gY2hhbmdlcyBleHBvc3VyZS4gVGhpcyBsZWFkcworICAgdG8gYSBtdWNoIG1vcmUgc3RhYmxlIGltYWdlIHRoZW4gdXNpbmcgdGhlIGtuZWUgYWxnb3JpdGhtIHdoaWNoIGF0CisgICBjZXJ0YWluIHBvaW50cyBvZiB0aGUga25lZSBncmFwaCB3aWxsIG9ubHkgdHJ5IHRvIGFkanVzdCBleHBvc3VyZSwKKyAgIHdoaWNoIGxlYWRzIHRvIG9zY2lsYXRpbmcgYXMgb25lIGV4cG9zdXJlIHN0ZXAgaXMgaHVnZS4KKworICAgTm90ZSB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgc2Qgc3RydWN0IGZvciB0aGUgY2FtIGluIHF1ZXN0aW9uIGhhcworICAgZXhwX3Rvb19oaWdoX2NudCBhbmQgZXhwX3Rvb19oaWdoX2NudCBpbnQgbWVtYmVycyBmb3IgdXNlIGJ5IHRoaXMgZnVuY3Rpb24uCisKKyAgIFJldHVybnMgMCBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZSwgMSBpZiB0aGUgZ2FpbiBhbmQgb3IgZXhwb3N1cmUgc2V0dGluZ3MKKyAgIHdoZXJlIGNoYW5nZWQuICovCitzdGF0aWMgaW50IGdzcGNhX2NvYXJzZV9ncmFpbmVkX2V4cG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCWludCBhdmdfbHVtLCBpbnQgZGVzaXJlZF9hdmdfbHVtLCBpbnQgZGVhZHpvbmUpCit7CisJaW50IGksIHN0ZXBzLCBnYWluLCBvcmlnX2dhaW4sIGV4cG9zdXJlLCBvcmlnX2V4cG9zdXJlOworCWludCBnYWluX2xvdywgZ2Fpbl9oaWdoOworCWNvbnN0IHN0cnVjdCBjdHJsICpnYWluX2N0cmwgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBjdHJsICpleHBvc3VyZV9jdHJsID0gTlVMTDsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldHZhbCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3NwY2FfZGV2LT5zZF9kZXNjLT5uY3RybHM7IGkrKykgeworCQlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IGkpKQorCQkJY29udGludWU7CisJCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0dBSU4pCisJCQlnYWluX2N0cmwgPSAmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXTsKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfRVhQT1NVUkUpCisJCQlleHBvc3VyZV9jdHJsID0gJmdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV07CisJfQorCWlmICghZ2Fpbl9jdHJsIHx8ICFleHBvc3VyZV9jdHJsKSB7CisJCVBERUJVRyhEX0VSUiwgIkVycm9yOiBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluICIKKwkJCSJjYWxsZWQgb24gY2FtIHdpdGhvdXQgZ2FpbiBvciBleHBvc3VyZSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ2Fpbl9jdHJsLT5nZXQoZ3NwY2FfZGV2LCAmZ2FpbikgfHwKKwkgICAgZXhwb3N1cmVfY3RybC0+Z2V0KGdzcGNhX2RldiwgJmV4cG9zdXJlKSkKKwkJcmV0dXJuIDA7CisKKwlvcmlnX2dhaW4gPSBnYWluOworCW9yaWdfZXhwb3N1cmUgPSBleHBvc3VyZTsKKwlnYWluX2xvdyA9CisJCShnYWluX2N0cmwtPnFjdHJsLm1heGltdW0gLSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW0pIC8gNSAqIDI7CisJZ2Fpbl9sb3cgKz0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOworCWdhaW5faGlnaCA9CisJCShnYWluX2N0cmwtPnFjdHJsLm1heGltdW0gLSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW0pIC8gNSAqIDQ7CisJZ2Fpbl9oaWdoICs9IGdhaW5fY3RybC0+cWN0cmwubWluaW11bTsKKworCS8qIElmIHdlIGFyZSBvZiBhIG11bHRpcGxlIG9mIGRlYWR6b25lLCBkbyBtdWx0aXBsZSBzdGVwcyB0byByZWFjaCB0aGUKKwkgICBkZXNpcmVkIGx1bWluYXRpb24gZmFzdCAod2l0aCB0aGUgcmlzYyBvZiBhIHNsaWdodCBvdmVyc2hvb3QpICovCisJc3RlcHMgPSAoZGVzaXJlZF9hdmdfbHVtIC0gYXZnX2x1bSkgLyBkZWFkem9uZTsKKworCVBERUJVRyhEX0ZSQU0sICJhdXRvZ2FpbjogbHVtOiAlZCwgZGVzaXJlZDogJWQsIHN0ZXBzOiAlZCIsCisJCWF2Z19sdW0sIGRlc2lyZWRfYXZnX2x1bSwgc3RlcHMpOworCisJaWYgKChnYWluICsgc3RlcHMpID4gZ2Fpbl9oaWdoICYmCisJICAgIHNkLT5leHBvc3VyZSA8IGV4cG9zdXJlX2N0cmwtPnFjdHJsLm1heGltdW0pIHsKKwkJZ2FpbiA9IGdhaW5faGlnaDsKKwkJc2QtPmV4cF90b29fbG93X2NudCsrOworCX0gZWxzZSBpZiAoKGdhaW4gKyBzdGVwcykgPCBnYWluX2xvdyAmJgorCQkgICBzZC0+ZXhwb3N1cmUgPiBleHBvc3VyZV9jdHJsLT5xY3RybC5taW5pbXVtKSB7CisJCWdhaW4gPSBnYWluX2xvdzsKKwkJc2QtPmV4cF90b29faGlnaF9jbnQrKzsKKwl9IGVsc2UgeworCQlnYWluICs9IHN0ZXBzOworCQlpZiAoZ2FpbiA+IGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSkKKwkJCWdhaW4gPSBnYWluX2N0cmwtPnFjdHJsLm1heGltdW07CisJCWVsc2UgaWYgKGdhaW4gPCBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW0pCisJCQlnYWluID0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOworCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7CisJCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOworCX0KKworCWlmIChzZC0+ZXhwX3Rvb19oaWdoX2NudCA+IDMpIHsKKwkJZXhwb3N1cmUtLTsKKwkJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOworCX0gZWxzZSBpZiAoc2QtPmV4cF90b29fbG93X2NudCA+IDMpIHsKKwkJZXhwb3N1cmUrKzsKKwkJc2QtPmV4cF90b29fbG93X2NudCA9IDA7CisJfQorCisJaWYgKGdhaW4gIT0gb3JpZ19nYWluKSB7CisJCWdhaW5fY3RybC0+c2V0KGdzcGNhX2RldiwgZ2Fpbik7CisJCXJldHZhbCA9IDE7CisJfQorCWlmIChleHBvc3VyZSAhPSBvcmlnX2V4cG9zdXJlKSB7CisJCWV4cG9zdXJlX2N0cmwtPnNldChnc3BjYV9kZXYsIGV4cG9zdXJlKTsKKwkJcmV0dmFsID0gMTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCmluZGV4IGM5OGI1ZDYuLjE5ZmU2YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMTAzMiw3ICsxMDMyLDcgQEAKIH0KIAogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyA9IHNkX2N0cmxzLAogCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY3BpYTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY3BpYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjk0NWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jCkBAIC0wLDAgKzEsMjAyMiBAQAorLyoKKyAqIGNwaWEgQ1BpQSAoMSkgZ3NwY2EgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEhhbnMgZGUgR29lZGUgPGhkZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIG1vZHVsZSBpcyBhZGFwdGVkIGZyb20gdGhlIGluIGtlcm5lbCB2NGwxIGNwaWEgZHJpdmVyIHdoaWNoIGlzIDoKKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMCBQZXRlciBQcmVnbGVyCisgKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMCBTY290dCBKLiBCZXJ0aW4KKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAwIEpvaGFubmVzIEVyZGZlbHQgPGpvaGFubmVzQGVyZGZlbHQuY29tPgorICogKEMpIENvcHlyaWdodCAyMDAwIFNUTWljcm9lbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAiY3BpYTEiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGdvZWRlQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlZpc2lvbiBDUGlBIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIGNvbnN0YW50IHZhbHVlJ3MgKi8KKyNkZWZpbmUgTUFHSUNfMAkJMHgxOQorI2RlZmluZSBNQUdJQ18xCQkweDY4CisjZGVmaW5lIERBVEFfSU4JCTB4QzAKKyNkZWZpbmUgREFUQV9PVVQJMHg0MAorI2RlZmluZSBWSURFT1NJWkVfUUNJRgkwCS8qIDE3NngxNDQgKi8KKyNkZWZpbmUgVklERU9TSVpFX0NJRgkxCS8qIDM1MngyODggKi8KKyNkZWZpbmUgU1VCU0FNUExFXzQyMAkwCisjZGVmaW5lIFNVQlNBTVBMRV80MjIJMQorI2RlZmluZSBZVVZPUkRFUl9ZVVlWCTAKKyNkZWZpbmUgWVVWT1JERVJfVVlWWQkxCisjZGVmaW5lIE5PVF9DT01QUkVTU0VECTAKKyNkZWZpbmUgQ09NUFJFU1NFRAkxCisjZGVmaW5lIE5PX0RFQ0lNQVRJT04JMAorI2RlZmluZSBERUNJTUFUSU9OX0VOQUIJMQorI2RlZmluZSBFT0kJCTB4ZmYJLyogRW5kIE9mIEltYWdlICovCisjZGVmaW5lIEVPTAkJMHhmZAkvKiBFbmQgT2YgTGluZSAqLworI2RlZmluZSBGUkFNRV9IRUFERVJfU0laRQk2NAorCisvKiBJbWFnZSBncmFiIG1vZGVzICovCisjZGVmaW5lIENQSUFfR1JBQl9TSU5HTEUJMAorI2RlZmluZSBDUElBX0dSQUJfQ09OVElORU9VUwkxCisKKy8qIENvbXByZXNzaW9uIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgQ1BJQV9DT01QUkVTU0lPTl9OT05FCTAKKyNkZWZpbmUgQ1BJQV9DT01QUkVTU0lPTl9BVVRPCTEKKyNkZWZpbmUgQ1BJQV9DT01QUkVTU0lPTl9NQU5VQUwJMgorI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9RVUFMSVRZICAgICAgICAgMAorI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9GUkFNRVJBVEUgICAgICAgMQorCisvKiBSZXR1cm4gb2Zmc2V0cyBmb3IgR2V0Q2FtZXJhU3RhdGUgKi8KKyNkZWZpbmUgU1lTVEVNU1RBVEUJMAorI2RlZmluZSBHUkFCU1RBVEUJMQorI2RlZmluZSBTVFJFQU1TVEFURQkyCisjZGVmaW5lIEZBVEFMRVJST1IJMworI2RlZmluZSBDTURFUlJPUgk0CisjZGVmaW5lIERFQlVHRkxBR1MJNQorI2RlZmluZSBWUFNUQVRVUwk2CisjZGVmaW5lIEVSUk9SQ09ERQk3CisKKy8qIFN5c3RlbVN0YXRlICovCisjZGVmaW5lIFVOSU5JVElBTElTRURfU1RBVEUJMAorI2RlZmluZSBQQVNTX1RIUk9VR0hfU1RBVEUJMQorI2RlZmluZSBMT19QT1dFUl9TVEFURQkJMgorI2RlZmluZSBISV9QT1dFUl9TVEFURQkJMworI2RlZmluZSBXQVJNX0JPT1RfU1RBVEUJCTQKKworLyogR3JhYlN0YXRlICovCisjZGVmaW5lIEdSQUJfSURMRQkJMAorI2RlZmluZSBHUkFCX0FDVElWRQkJMQorI2RlZmluZSBHUkFCX0RPTkUJCTIKKworLyogU3RyZWFtU3RhdGUgKi8KKyNkZWZpbmUgU1RSRUFNX05PVF9SRUFEWQkwCisjZGVmaW5lIFNUUkVBTV9SRUFEWQkJMQorI2RlZmluZSBTVFJFQU1fT1BFTgkJMgorI2RlZmluZSBTVFJFQU1fUEFVU0VECQkzCisjZGVmaW5lIFNUUkVBTV9GSU5JU0hFRAkJNAorCisvKiBGYXRhbCBFcnJvciwgQ21kRXJyb3IsIGFuZCBEZWJ1Z0ZsYWdzICovCisjZGVmaW5lIENQSUFfRkxBRwkgIDEKKyNkZWZpbmUgU1lTVEVNX0ZMQUcJICAyCisjZGVmaW5lIElOVF9DVFJMX0ZMQUcJICA0CisjZGVmaW5lIFBST0NFU1NfRkxBRwkgIDgKKyNkZWZpbmUgQ09NX0ZMQUcJIDE2CisjZGVmaW5lIFZQX0NUUkxfRkxBRwkgMzIKKyNkZWZpbmUgQ0FQVFVSRV9GTEFHCSA2NAorI2RlZmluZSBERUJVR19GTEFHCTEyOAorCisvKiBWUFN0YXR1cyAqLworI2RlZmluZSBWUF9TVEFURV9PSwkJCTB4MDAKKworI2RlZmluZSBWUF9TVEFURV9GQUlMRURfVklERU9JTklUCTB4MDEKKyNkZWZpbmUgVlBfU1RBVEVfRkFJTEVEX0FFQ0FDQklOSVQJMHgwMgorI2RlZmluZSBWUF9TVEFURV9BRUNfTUFYCQkweDA0CisjZGVmaW5lIFZQX1NUQVRFX0FDQl9CTUFYCQkweDA4CisKKyNkZWZpbmUgVlBfU1RBVEVfQUNCX1JNSU4JCTB4MTAKKyNkZWZpbmUgVlBfU1RBVEVfQUNCX0dNSU4JCTB4MjAKKyNkZWZpbmUgVlBfU1RBVEVfQUNCX1JNQVgJCTB4NDAKKyNkZWZpbmUgVlBfU1RBVEVfQUNCX0dNQVgJCTB4ODAKKworLyogZGVmYXVsdCAobWluaW11bSkgY29tcGVuc2F0aW9uIHZhbHVlcyAqLworI2RlZmluZSBDT01QX1JFRCAgICAgICAgMjIwCisjZGVmaW5lIENPTVBfR1JFRU4xICAgICAyMTQKKyNkZWZpbmUgQ09NUF9HUkVFTjIgICAgIENPTVBfR1JFRU4xCisjZGVmaW5lIENPTVBfQkxVRSAgICAgICAyMzAKKworLyogZXhwb3N1cmUgc3RhdHVzICovCisjZGVmaW5lIEVYUE9TVVJFX1ZFUllfTElHSFQgMAorI2RlZmluZSBFWFBPU1VSRV9MSUdIVCAgICAgIDEKKyNkZWZpbmUgRVhQT1NVUkVfTk9STUFMICAgICAyCisjZGVmaW5lIEVYUE9TVVJFX0RBUksgICAgICAgMworI2RlZmluZSBFWFBPU1VSRV9WRVJZX0RBUksgIDQKKworI2RlZmluZSBDUElBX01PRFVMRV9DUElBCQkJKDAgPDwgNSkKKyNkZWZpbmUgQ1BJQV9NT0RVTEVfU1lTVEVNCQkJKDEgPDwgNSkKKyNkZWZpbmUgQ1BJQV9NT0RVTEVfVlBfQ1RSTAkJCSg1IDw8IDUpCisjZGVmaW5lIENQSUFfTU9EVUxFX0NBUFRVUkUJCQkoNiA8PCA1KQorI2RlZmluZSBDUElBX01PRFVMRV9ERUJVRwkJCSg3IDw8IDUpCisKKyNkZWZpbmUgSU5QVVQgKERBVEFfSU4gPDwgOCkKKyNkZWZpbmUgT1VUUFVUIChEQVRBX09VVCA8PCA4KQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRDUElBVmVyc2lvbgkoSU5QVVQgfCBDUElBX01PRFVMRV9DUElBIHwgMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldFBuUElECQkoSU5QVVQgfCBDUElBX01PRFVMRV9DUElBIHwgMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cwkoSU5QVVQgfCBDUElBX01PRFVMRV9DUElBIHwgMykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dvdG9IaVBvd2VyCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgNCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dvdG9Mb1Bvd2VyCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dvdG9TdXNwZW5kCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dvdG9QYXNzVGhyb3VnaAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDgpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Nb2RpZnlDYW1lcmFTdGF0dXMJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAxMCkKKworI2RlZmluZSBDUElBX0NPTU1BTkRfUmVhZFZDUmVncwkJKElOUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlVkNSZWcJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHMJKElOUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlTUNQb3J0CShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0QmF1ZFJhdGUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDUpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRFQ1BUaW1pbmcJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDYpCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkSURBVEEJCShJTlBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Xcml0ZUlEQVRBCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dlbmVyaWNDYWxsCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDU3RhcnQJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0kyQ1N0b3AJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0kyQ1dyaXRlCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMTIpCisjZGVmaW5lIENQSUFfQ09NTUFORF9JMkNSZWFkCQkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMykKKworI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfUmVzZXRGcmFtZUNvdW50ZXIJKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDIpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb2xvdXJQYXJhbXMJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0RXhwb3N1cmUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDYpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRTZW5zb3JGUFMJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCA3KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0VlBEZWZhdWx0cwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDgpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRBcGNvcgkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCA5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0RmxpY2tlckN0cmwJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFZMT2Zmc2V0CShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXMJKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDE2KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZQkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZQkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTgpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRTZW5zb3JNYXRyaXgJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxOSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0NvbG91ckJhcnMJCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMjUpCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkVlBSZWdzCQkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMzApCisjZGVmaW5lIENQSUFfQ09NTUFORF9Xcml0ZVZQUmVnCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDMxKQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9HcmFiRnJhbWUJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1VwbG9hZEZyYW1lCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEdyYWJNb2RlCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0luaXRTdHJlYW1DYXAJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfRmluaVN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDUpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TdGFydFN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDYpCisjZGVmaW5lIENQSUFfQ09NTUFORF9FbmRTdHJlYW1DYXAJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA3KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Rm9ybWF0CQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDgpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRST0kJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgOSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTApCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvblRhcmdldCAoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDExKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0WVVWVGhyZXNoCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTIpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvblBhcmFtcyAoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDEzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfRGlzY2FyZEZyYW1lCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HcmFiUmVzZXQJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTUpCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX091dHB1dFJTMjMyCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9BYm9ydFByb2Nlc3MJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgNCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldERyYW1QYWdlCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDUpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TdGFydERyYW1VcGxvYWQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1N0YXJ0RHVtbXlEdHJlYW0JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0Fib3J0U3RyZWFtCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Eb3dubG9hZERSQU0JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgMTApCisjZGVmaW5lIENQSUFfQ09NTUFORF9OdWxsCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCAxMSkKKworI2RlZmluZSBST1VORF9VUF9FWFBfRk9SX0ZMSUNLRVIgMTUKKworLyogQ29uc3RhbnRzIGZvciBhdXRvbWF0aWMgZnJhbWUgcmF0ZSBhZGp1c3RtZW50ICovCisjZGVmaW5lIE1BWF9FWFAgICAgICAgMzAyCisjZGVmaW5lIE1BWF9FWFBfMTAyICAgMjU1CisjZGVmaW5lIExPV19FWFAgICAgICAgMTQwCisjZGVmaW5lIFZFUllfTE9XX0VYUCAgIDcwCisjZGVmaW5lIFRDICAgICAgICAgICAgIDk0CisjZGVmaW5lCUVYUF9BQ0NfREFSSyAgIDUwCisjZGVmaW5lCUVYUF9BQ0NfTElHSFQgIDkwCisjZGVmaW5lIEhJR0hfQ09NUF8xMDIgMTYwCisjZGVmaW5lIE1BWF9DT01QICAgICAgMjM5CisjZGVmaW5lIERBUktfVElNRSAgICAgICAzCisjZGVmaW5lIExJR0hUX1RJTUUgICAgICAzCisKKyNkZWZpbmUgRklSTVdBUkVfVkVSU0lPTih4LCB5KSAoc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9PSAoeCkgJiYgXAorCQkJCXNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uID09ICh5KSkKKworLyogRGV2ZWxvcGVyJ3MgR3VpZGUgVGFibGUgNSBwIDMtMzQKKyAqIGluZGV4ZWQgYnkgW21haW5zXVtzZW5zb3JGcHMuYmFzZXJhdGVdW3NlbnNvckZwcy5kaXZpc29yXSovCitzdGF0aWMgdTggZmxpY2tlcl9qdW1wc1syXVsyXVs0XSA9Cit7IHsgeyA3NiwgMzgsIDE5LCA5IH0sIHsgOTIsIDQ2LCAyMywgMTEgfSB9LAorICB7IHsgNjQsIDMyLCAxNiwgOCB9LCB7IDc2LCAzOCwgMTksIDl9IH0KK307CisKK3N0cnVjdCBjYW1fcGFyYW1zIHsKKwlzdHJ1Y3QgeworCQl1OCBmaXJtd2FyZVZlcnNpb247CisJCXU4IGZpcm13YXJlUmV2aXNpb247CisJCXU4IHZjVmVyc2lvbjsKKwkJdTggdmNSZXZpc2lvbjsKKwl9IHZlcnNpb247CisJc3RydWN0IHsKKwkJdTE2IHZlbmRvcjsKKwkJdTE2IHByb2R1Y3Q7CisJCXUxNiBkZXZpY2VSZXZpc2lvbjsKKwl9IHBucElEOworCXN0cnVjdCB7CisJCXU4IHZwVmVyc2lvbjsKKwkJdTggdnBSZXZpc2lvbjsKKwkJdTE2IGNhbWVyYUhlYWRJRDsKKwl9IHZwVmVyc2lvbjsKKwlzdHJ1Y3QgeworCQl1OCBzeXN0ZW1TdGF0ZTsKKwkJdTggZ3JhYlN0YXRlOworCQl1OCBzdHJlYW1TdGF0ZTsKKwkJdTggZmF0YWxFcnJvcjsKKwkJdTggY21kRXJyb3I7CisJCXU4IGRlYnVnRmxhZ3M7CisJCXU4IHZwU3RhdHVzOworCQl1OCBlcnJvckNvZGU7CisJfSBzdGF0dXM7CisJc3RydWN0IHsKKwkJdTggYnJpZ2h0bmVzczsKKwkJdTggY29udHJhc3Q7CisJCXU4IHNhdHVyYXRpb247CisJfSBjb2xvdXJQYXJhbXM7CisJc3RydWN0IHsKKwkJdTggZ2Fpbk1vZGU7CisJCXU4IGV4cE1vZGU7CisJCXU4IGNvbXBNb2RlOworCQl1OCBjZW50cmVXZWlnaHQ7CisJCXU4IGdhaW47CisJCXU4IGZpbmVFeHA7CisJCXU4IGNvYXJzZUV4cExvOworCQl1OCBjb2Fyc2VFeHBIaTsKKwkJdTggcmVkQ29tcDsKKwkJdTggZ3JlZW4xQ29tcDsKKwkJdTggZ3JlZW4yQ29tcDsKKwkJdTggYmx1ZUNvbXA7CisJfSBleHBvc3VyZTsKKwlzdHJ1Y3QgeworCQl1OCBiYWxhbmNlTW9kZTsKKwkJdTggcmVkR2FpbjsKKwkJdTggZ3JlZW5HYWluOworCQl1OCBibHVlR2FpbjsKKwl9IGNvbG91ckJhbGFuY2U7CisJc3RydWN0IHsKKwkJdTggZGl2aXNvcjsKKwkJdTggYmFzZXJhdGU7CisJfSBzZW5zb3JGcHM7CisJc3RydWN0IHsKKwkJdTggZ2FpbjE7CisJCXU4IGdhaW4yOworCQl1OCBnYWluNDsKKwkJdTggZ2Fpbjg7CisJfSBhcGNvcjsKKwlzdHJ1Y3QgeworCQl1OCBkaXNhYmxlZDsKKwkJdTggZmxpY2tlck1vZGU7CisJCXU4IGNvYXJzZUp1bXA7CisJCXU4IGFsbG93YWJsZU92ZXJFeHBvc3VyZTsKKwl9IGZsaWNrZXJDb250cm9sOworCXN0cnVjdCB7CisJCXU4IGdhaW4xOworCQl1OCBnYWluMjsKKwkJdTggZ2FpbjQ7CisJCXU4IGdhaW44OworCX0gdmxPZmZzZXQ7CisJc3RydWN0IHsKKwkJdTggbW9kZTsKKwkJdTggZGVjaW1hdGlvbjsKKwl9IGNvbXByZXNzaW9uOworCXN0cnVjdCB7CisJCXU4IGZyVGFyZ2V0aW5nOworCQl1OCB0YXJnZXRGUjsKKwkJdTggdGFyZ2V0UTsKKwl9IGNvbXByZXNzaW9uVGFyZ2V0OworCXN0cnVjdCB7CisJCXU4IHlUaHJlc2hvbGQ7CisJCXU4IHV2VGhyZXNob2xkOworCX0geXV2VGhyZXNob2xkOworCXN0cnVjdCB7CisJCXU4IGh5c3RlcmVzaXM7CisJCXU4IHRocmVzaE1heDsKKwkJdTggc21hbGxTdGVwOworCQl1OCBsYXJnZVN0ZXA7CisJCXU4IGRlY2ltYXRpb25IeXN0ZXJlc2lzOworCQl1OCBmckRpZmZTdGVwVGhyZXNoOworCQl1OCBxRGlmZlN0ZXBUaHJlc2g7CisJCXU4IGRlY2ltYXRpb25UaHJlc2hNb2Q7CisJfSBjb21wcmVzc2lvblBhcmFtczsKKwlzdHJ1Y3QgeworCQl1OCB2aWRlb1NpemU7CQkvKiBDSUYvUUNJRiAqLworCQl1OCBzdWJTYW1wbGU7CisJCXU4IHl1dk9yZGVyOworCX0gZm9ybWF0OworCXN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZWwgUVgzIHNwZWNpZmljIGRhdGEgKi8KKwkJdTggcXgzX2RldGVjdGVkOyAgICAgICAgLyogYSBRWDMgaXMgcHJlc2VudCAqLworCQl1OCB0b3BsaWdodDsgICAgICAgICAgICAvKiB0b3AgbGlnaHQgbGl0ICwgUi9XICovCisJCXU4IGJvdHRvbWxpZ2h0OyAgICAgICAgIC8qIGJvdHRvbSBsaWdodCBsaXQsIFIvVyAqLworCQl1OCBidXR0b247ICAgICAgICAgICAgICAvKiBzbmFwc2hvdCBidXR0b24gcHJlc3NlZCAoUi9PKSAqLworCQl1OCBjcmFkbGVkOyAgICAgICAgICAgICAvKiBtaWNyb3Njb3BlIGlzIGluIGNyYWRsZSAoUi9PKSAqLworCX0gcXgzOworCXN0cnVjdCB7CisJCXU4IGNvbFN0YXJ0OwkJLyogc2tpcCBmaXJzdCA4KmNvbFN0YXJ0IHBpeGVscyAqLworCQl1OCBjb2xFbmQ7CQkvKiBmaW5pc2ggYXQgOCpjb2xFbmQgcGl4ZWxzICovCisJCXU4IHJvd1N0YXJ0OwkJLyogc2tpcCBmaXJzdCA0KnJvd1N0YXJ0IGxpbmVzICovCisJCXU4IHJvd0VuZDsJCS8qIGZpbmlzaCBhdCA0KnJvd0VuZCBsaW5lcyAqLworCX0gcm9pOworCXU4IGVjcFRpbWluZzsKKwl1OCBzdHJlYW1TdGFydExpbmU7Cit9OworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJCS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKwlzdHJ1Y3QgY2FtX3BhcmFtcyBwYXJhbXM7CQkvKiBjYW1lcmEgc2V0dGluZ3MgKi8KKworCWF0b21pY190IGNhbV9leHBvc3VyZTsKKwlhdG9taWNfdCBmcHM7CisJaW50IGV4cG9zdXJlX2NvdW50OworCXU4IGV4cG9zdXJlX3N0YXR1czsKKwl1OCBtYWluc0ZyZXE7CQkJCS8qIDAgPSA1MGh6LCAxID0gNjBoeiAqLworCXU4IGZpcnN0X2ZyYW1lOworCXU4IGZyZXE7Cit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2F0dXJhdGlvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHNhdHVyYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29tcHRhcmdldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbXB0YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEwMCwKKwkJLnN0ZXAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiA1MAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAorCQkuZmxhZ3MgPSAwLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSA5NiwKKwkJLnN0ZXAgICAgPSA4LAorI2RlZmluZSBDT05UUkFTVF9ERUYgNDgKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEwMCwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBTQVRVUkFUSU9OX0RFRiA1MAorCQkuZGVmYXVsdF92YWx1ZSA9IFNBVFVSQVRJT05fREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0c2F0dXJhdGlvbiwKKwkgICAgLmdldCA9IHNkX2dldHNhdHVyYXRpb24sCisJfSwKKwl7CisJCXsKKwkJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKKwkJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkJCS5uYW1lICAgID0gIkxpZ2h0IGZyZXF1ZW5jeSBmaWx0ZXIiLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KKwkJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgRlJFUV9ERUYgMQorCQkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKKwkJfSwKKwkJLnNldCA9IHNkX3NldGZyZXEsCisJCS5nZXQgPSBzZF9nZXRmcmVxLAorCX0sCisJeworCQl7CisjZGVmaW5lIFY0TDJfQ0lEX0NPTVBfVEFSR0VUIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRQorCQkJLmlkCSA9IFY0TDJfQ0lEX0NPTVBfVEFSR0VULAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkJLm5hbWUgICAgPSAiQ29tcHJlc3Npb24gVGFyZ2V0IiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMSwKKwkJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09NUF9UQVJHRVRfREVGIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX1FVQUxJVFkKKwkJCS5kZWZhdWx0X3ZhbHVlID0gQ09NUF9UQVJHRVRfREVGLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0Y29tcHRhcmdldCwKKwkJLmdldCA9IHNkX2dldGNvbXB0YXJnZXQsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG1vZGVbXSA9IHsKKwl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9DUElBMSwgVjRMMl9GSUVMRF9OT05FLAorCQkvKiBUaGUgc2l6ZWltYWdlIGlzIHRyaWFsIGFuZCBlcnJvciwgYXMgd2l0aCBsb3cgZnJhbWVyYXRlcworCQkgICB0aGUgY2FtZXJhIHdpbGwgcGFkIG91dCB1c2IgZnJhbWVzLCBtYWtpbmcgdGhlIGltYWdlCisJCSAgIGRhdGEgbGFyZ2VyIHRoZW4gc3RyaWN0bHkgbmVjZXNzYXJ5ICovCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCisJCS5zaXplaW1hZ2UgPSA2NTUzNiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAzfSwKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9DUElBMSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTcyLAorCQkuc2l6ZWltYWdlID0gNjU1MzYsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfQ1BJQTEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDI2MjE0NCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKKwl7MzUyLCAyODgsIFY0TDJfUElYX0ZNVF9DUElBMSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuc2l6ZWltYWdlID0gMjYyMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHZW5lcmFsIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGNwaWFfdXNiX3RyYW5zZmVyQ21kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKmNvbW1hbmQpCit7CisJdTggcmVxdWVzdHR5cGU7CisJdW5zaWduZWQgaW50IHBpcGU7CisJaW50IHJldCwgZGF0YWJ5dGVzID0gY29tbWFuZFs2XSB8IChjb21tYW5kWzddIDw8IDgpOworCS8qIFNvbWV0aW1lcyB3ZSBzZWUgc3B1cmlvdXMgRVBJUEUgZXJyb3JzICovCisJaW50IHJldHJpZXMgPSAzOworCisJaWYgKGNvbW1hbmRbMF0gPT0gREFUQV9JTikgeworCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKKwkJcmVxdWVzdHR5cGUgPSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwl9IGVsc2UgaWYgKGNvbW1hbmRbMF0gPT0gREFUQV9PVVQpIHsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CisJCXJlcXVlc3R0eXBlID0gVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwl9IGVsc2UgeworCQlQREVCVUcoRF9FUlIsICJVbmV4cGVjdGVkIGZpcnN0IGJ5dGUgb2YgY29tbWFuZDogJXgiLAorCQkgICAgICAgY29tbWFuZFswXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworcmV0cnk6CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LCBwaXBlLAorCQkJICAgICAgY29tbWFuZFsxXSwKKwkJCSAgICAgIHJlcXVlc3R0eXBlLAorCQkJICAgICAgY29tbWFuZFsyXSB8IChjb21tYW5kWzNdIDw8IDgpLAorCQkJICAgICAgY29tbWFuZFs0XSB8IChjb21tYW5kWzVdIDw8IDgpLAorCQkJICAgICAgZ3NwY2FfZGV2LT51c2JfYnVmLCBkYXRhYnl0ZXMsIDEwMDApOworCisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUiwgInVzYl9jb250cm9sX21zZyAlMDJ4LCBlcnJvciAlZCIsIGNvbW1hbmRbMV0sCisJCSAgICAgICByZXQpOworCisJaWYgKHJldCA9PSAtRVBJUEUgJiYgcmV0cmllcyA+IDApIHsKKwkJcmV0cmllcy0tOworCQlnb3RvIHJldHJ5OworCX0KKworCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiAwOworfQorCisvKiBzZW5kIGFuIGFyYml0cmFyeSBjb21tYW5kIHRvIHRoZSBjYW1lcmEgKi8KK3N0YXRpYyBpbnQgZG9fY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBjb21tYW5kLAorCQkgICAgICB1OCBhLCB1OCBiLCB1OCBjLCB1OCBkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0LCBkYXRhc2l6ZTsKKwl1OCBjbWRbOF07CisKKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDUElBVmVyc2lvbjoKKwljYXNlIENQSUFfQ09NTUFORF9HZXRQblBJRDoKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXM6CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91clBhcmFtczoKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlOgorCQlkYXRhc2l6ZSA9IDg7CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX1JlYWRNQ1BvcnRzOgorCWNhc2UgQ1BJQV9DT01NQU5EX1JlYWRWQ1JlZ3M6CisJCWRhdGFzaXplID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YXNpemUgPSAwOworCQlicmVhazsKKwl9CisKKwljbWRbMF0gPSBjb21tYW5kID4+IDg7CisJY21kWzFdID0gY29tbWFuZCAmIDB4ZmY7CisJY21kWzJdID0gYTsKKwljbWRbM10gPSBiOworCWNtZFs0XSA9IGM7CisJY21kWzVdID0gZDsKKwljbWRbNl0gPSBkYXRhc2l6ZTsKKwljbWRbN10gPSAwOworCisJcmV0ID0gY3BpYV91c2JfdHJhbnNmZXJDbWQoZ3NwY2FfZGV2LCBjbWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDUElBVmVyc2lvbjoKKwkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMudmVyc2lvbi52Y1ZlcnNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMl07CisJCXNkLT5wYXJhbXMudmVyc2lvbi52Y1JldmlzaW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRQblBJRDoKKwkJc2QtPnBhcmFtcy5wbnBJRC52ZW5kb3IgPQorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdIHwgKGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA8PCA4KTsKKwkJc2QtPnBhcmFtcy5wbnBJRC5wcm9kdWN0ID0KKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSB8IChnc3BjYV9kZXYtPnVzYl9idWZbM10gPDwgOCk7CisJCXNkLT5wYXJhbXMucG5wSUQuZGV2aWNlUmV2aXNpb24gPQorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzRdIHwgKGdzcGNhX2Rldi0+dXNiX2J1Zls1XSA8PCA4KTsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzOgorCQlzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMuZ3JhYlN0YXRlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5zdHJlYW1TdGF0ZSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvciA9IGdzcGNhX2Rldi0+dXNiX2J1ZlszXTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMuY21kRXJyb3IgPSBnc3BjYV9kZXYtPnVzYl9idWZbNF07CisJCXNkLT5wYXJhbXMuc3RhdHVzLmRlYnVnRmxhZ3MgPSBnc3BjYV9kZXYtPnVzYl9idWZbNV07CisJCXNkLT5wYXJhbXMuc3RhdHVzLnZwU3RhdHVzID0gZ3NwY2FfZGV2LT51c2JfYnVmWzZdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5lcnJvckNvZGUgPSBnc3BjYV9kZXYtPnVzYl9idWZbN107CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX0dldFZQVmVyc2lvbjoKKwkJc2QtPnBhcmFtcy52cFZlcnNpb24udnBWZXJzaW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLnZwVmVyc2lvbi52cFJldmlzaW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCQlzZC0+cGFyYW1zLnZwVmVyc2lvbi5jYW1lcmFIZWFkSUQgPQorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzJdIHwgKGdzcGNhX2Rldi0+dXNiX2J1ZlszXSA8PCA4KTsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyUGFyYW1zOgorCQlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdCA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuc2F0dXJhdGlvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZToKKwkJc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4gPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ncmVlbkdhaW4gPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmU6CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5maW5lRXhwID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbNF07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCA9IGdzcGNhX2Rldi0+dXNiX2J1Zls1XTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wID0gZ3NwY2FfZGV2LT51c2JfYnVmWzZdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0gZ3NwY2FfZGV2LT51c2JfYnVmWzddOworCQlicmVhazsKKworCWNhc2UgQ1BJQV9DT01NQU5EX1JlYWRNQ1BvcnRzOgorCQlpZiAoIXNkLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkKKwkJCWJyZWFrOworCQkvKiB0ZXN0IGJ1dHRvbiBwcmVzcyAqLworCQlzZC0+cGFyYW1zLnF4My5idXR0b24gPSAoKGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSAmIDB4MDIpID09IDApOworCQlpZiAoc2QtPnBhcmFtcy5xeDMuYnV0dG9uKSB7CisJCQkvKiBidXR0b24gcHJlc3NlZCAtIHVubG9jayB0aGUgbGF0Y2ggKi8KKwkJCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsCisJCQkJICAgMywgMHhERiwgMHhERiwgMCk7CisJCQlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1dyaXRlTUNQb3J0LAorCQkJCSAgIDMsIDB4RkYsIDB4RkYsIDApOworCQl9CisKKwkJLyogdGVzdCB3aGV0aGVyIG1pY3Jvc2NvcGUgaXMgY3JhZGxlZCAqLworCQlzZC0+cGFyYW1zLnF4My5jcmFkbGVkID0gKChnc3BjYV9kZXYtPnVzYl9idWZbMl0gJiAweDQwKSA9PSAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIHNlbmQgYSBjb21tYW5kIHRvIHRoZSBjYW1lcmEgd2l0aCBhbiBhZGRpdGlvbmFsIGRhdGEgdHJhbnNhY3Rpb24gKi8KK3N0YXRpYyBpbnQgZG9fY29tbWFuZF9leHRlbmRlZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBjb21tYW5kLAorCQkJICAgICAgIHU4IGEsIHU4IGIsIHU4IGMsIHU4IGQsCisJCQkgICAgICAgdTggZSwgdTggZiwgdTggZywgdTggaCwKKwkJCSAgICAgICB1OCBpLCB1OCBqLCB1OCBrLCB1OCBsKQoreworCXU4IGNtZFs4XTsKKworCWNtZFswXSA9IGNvbW1hbmQgPj4gODsKKwljbWRbMV0gPSBjb21tYW5kICYgMHhmZjsKKwljbWRbMl0gPSBhOworCWNtZFszXSA9IGI7CisJY21kWzRdID0gYzsKKwljbWRbNV0gPSBkOworCWNtZFs2XSA9IDg7CisJY21kWzddID0gMDsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSBlOworCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IGY7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzJdID0gZzsKKwlnc3BjYV9kZXYtPnVzYl9idWZbM10gPSBoOworCWdzcGNhX2Rldi0+dXNiX2J1Zls0XSA9IGk7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzVdID0gajsKKwlnc3BjYV9kZXYtPnVzYl9idWZbNl0gPSBrOworCWdzcGNhX2Rldi0+dXNiX2J1Zls3XSA9IGw7CisKKwlyZXR1cm4gY3BpYV91c2JfdHJhbnNmZXJDbWQoZ3NwY2FfZGV2LCBjbWQpOworfQorCisvKiAgZmluZF9vdmVyX2V4cG9zdXJlCisgKiAgRmluZHMgYSBzdWl0YWJsZSB2YWx1ZSBvZiBPdmVyRXhwb3N1cmUgZm9yIHVzZSB3aXRoIFNldEZsaWNrZXJDdHJsCisgKiAgU29tZSBjYWxjdWxhdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIHRoaXMgdmFsdWUgY2hhbmdlcyB3aXRoIHRoZSBicmlnaHRuZXNzCisgKiAgc2V0IHdpdGggU2V0Q29sb3VyUGFyYW1ldGVycworICoKKyAqICBQYXJhbWV0ZXJzOiBCcmlnaHRuZXNzIC0gbGFzdCBicmlnaHRuZXNzIHZhbHVlIHNldCB3aXRoIFNldENvbG91clBhcmFtZXRlcnMKKyAqCisgKiAgUmV0dXJuczogT3ZlckV4cG9zdXJlIHZhbHVlIHRvIHVzZSB3aXRoIFNldEZsaWNrZXJDdHJsCisgKi8KKyNkZWZpbmUgRkxJQ0tFUl9NQVhfRVhQT1NVUkUgICAgICAgICAgICAgICAgICAgIDI1MAorI2RlZmluZSBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFICAgICAgICAgMTQ2CisjZGVmaW5lIEZMSUNLRVJfQlJJR0hUTkVTU19DT05TVEFOVCAgICAgICAgICAgICA1OQorc3RhdGljIGludCBmaW5kX292ZXJfZXhwb3N1cmUoaW50IGJyaWdodG5lc3MpCit7CisJaW50IE1heEFsbG93YWJsZU92ZXJFeHBvc3VyZSwgT3ZlckV4cG9zdXJlOworCisJTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlID0gRkxJQ0tFUl9NQVhfRVhQT1NVUkUgLSBicmlnaHRuZXNzIC0KKwkJCQkgICBGTElDS0VSX0JSSUdIVE5FU1NfQ09OU1RBTlQ7CisKKwlpZiAoTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlIDwgRkxJQ0tFUl9BTExPV0FCTEVfT1ZFUl9FWFBPU1VSRSkKKwkJT3ZlckV4cG9zdXJlID0gTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlOworCWVsc2UKKwkJT3ZlckV4cG9zdXJlID0gRkxJQ0tFUl9BTExPV0FCTEVfT1ZFUl9FWFBPU1VSRTsKKworCXJldHVybiBPdmVyRXhwb3N1cmU7Cit9CisjdW5kZWYgRkxJQ0tFUl9NQVhfRVhQT1NVUkUKKyN1bmRlZiBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFCisjdW5kZWYgRkxJQ0tFUl9CUklHSFRORVNTX0NPTlNUQU5UCisKKy8qIGluaXRpYWxpc2UgY2FtX2RhdGEgc3RydWN0dXJlICAqLworc3RhdGljIHZvaWQgcmVzZXRfY2FtZXJhX3BhcmFtcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCBjYW1fcGFyYW1zICpwYXJhbXMgPSAmc2QtPnBhcmFtczsKKworCS8qIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIHZhbHVlcyBhcmUgdGhlIGRlZmF1bHRzIGZyb20KKwkgKiAiU29mdHdhcmUgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIENQaUEgQ2FtZXJhcyIuICBBbnkgY2hhbmdlcworCSAqIHRvIHRoZSBkZWZhdWx0cyBhcmUgbm90ZWQgaW4gY29tbWVudHMuICovCisJcGFyYW1zLT5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXBhcmFtcy0+Y29sb3VyUGFyYW1zLmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOworCXBhcmFtcy0+Y29sb3VyUGFyYW1zLnNhdHVyYXRpb24gPSBTQVRVUkFUSU9OX0RFRjsKKwlwYXJhbXMtPmV4cG9zdXJlLmdhaW5Nb2RlID0gNDsKKwlwYXJhbXMtPmV4cG9zdXJlLmV4cE1vZGUgPSAyOwkJLyogQUVDICovCisJcGFyYW1zLT5leHBvc3VyZS5jb21wTW9kZSA9IDE7CisJcGFyYW1zLT5leHBvc3VyZS5jZW50cmVXZWlnaHQgPSAxOworCXBhcmFtcy0+ZXhwb3N1cmUuZ2FpbiA9IDA7CisJcGFyYW1zLT5leHBvc3VyZS5maW5lRXhwID0gMDsKKwlwYXJhbXMtPmV4cG9zdXJlLmNvYXJzZUV4cExvID0gMTg1OworCXBhcmFtcy0+ZXhwb3N1cmUuY29hcnNlRXhwSGkgPSAwOworCXBhcmFtcy0+ZXhwb3N1cmUucmVkQ29tcCA9IENPTVBfUkVEOworCXBhcmFtcy0+ZXhwb3N1cmUuZ3JlZW4xQ29tcCA9IENPTVBfR1JFRU4xOworCXBhcmFtcy0+ZXhwb3N1cmUuZ3JlZW4yQ29tcCA9IENPTVBfR1JFRU4yOworCXBhcmFtcy0+ZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QX0JMVUU7CisJcGFyYW1zLT5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID0gMjsJLyogQUNCICovCisJcGFyYW1zLT5jb2xvdXJCYWxhbmNlLnJlZEdhaW4gPSAzMjsKKwlwYXJhbXMtPmNvbG91ckJhbGFuY2UuZ3JlZW5HYWluID0gNjsKKwlwYXJhbXMtPmNvbG91ckJhbGFuY2UuYmx1ZUdhaW4gPSA5MjsKKwlwYXJhbXMtPmFwY29yLmdhaW4xID0gMHgxODsKKwlwYXJhbXMtPmFwY29yLmdhaW4yID0gMHgxNjsKKwlwYXJhbXMtPmFwY29yLmdhaW40ID0gMHgyNDsKKwlwYXJhbXMtPmFwY29yLmdhaW44ID0gMHgzNDsKKwlwYXJhbXMtPmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMDsKKwlwYXJhbXMtPmZsaWNrZXJDb250cm9sLmRpc2FibGVkID0gMTsKKworCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9CisJCWZsaWNrZXJfanVtcHNbc2QtPm1haW5zRnJlcV0KKwkJCSAgICAgW3BhcmFtcy0+c2Vuc29yRnBzLmJhc2VyYXRlXQorCQkJICAgICBbcGFyYW1zLT5zZW5zb3JGcHMuZGl2aXNvcl07CisJcGFyYW1zLT5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUgPQorCQlmaW5kX292ZXJfZXhwb3N1cmUocGFyYW1zLT5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7CisJcGFyYW1zLT52bE9mZnNldC5nYWluMSA9IDIwOworCXBhcmFtcy0+dmxPZmZzZXQuZ2FpbjIgPSAyNDsKKwlwYXJhbXMtPnZsT2Zmc2V0LmdhaW40ID0gMjY7CisJcGFyYW1zLT52bE9mZnNldC5nYWluOCA9IDI2OworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMuaHlzdGVyZXNpcyA9IDM7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy50aHJlc2hNYXggPSAxMTsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLnNtYWxsU3RlcCA9IDE7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5sYXJnZVN0ZXAgPSAzOworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvbkh5c3RlcmVzaXMgPSAyOworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMuZnJEaWZmU3RlcFRocmVzaCA9IDU7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5xRGlmZlN0ZXBUaHJlc2ggPSAzOworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCA9IDI7CisJLyogRW5kIG9mIGRlZmF1bHQgdmFsdWVzIGZyb20gU29mdHdhcmUgRGV2ZWxvcGVyJ3MgR3VpZGUgKi8KKworCS8qIFNldCBTZW5zb3IgRlBTIHRvIDE1ZnBzLiBUaGlzIHNlZW1zIGJldHRlciB0aGFuIDMwZnBzCisJICogZm9yIGluZG9vciBsaWdodGluZy4gKi8KKwlwYXJhbXMtPnNlbnNvckZwcy5kaXZpc29yID0gMTsKKwlwYXJhbXMtPnNlbnNvckZwcy5iYXNlcmF0ZSA9IDE7CisKKwlwYXJhbXMtPnl1dlRocmVzaG9sZC55VGhyZXNob2xkID0gNjsgLyogRnJvbSB3aW5kb3dzIGRyaXZlciAqLworCXBhcmFtcy0+eXV2VGhyZXNob2xkLnV2VGhyZXNob2xkID0gNjsgLyogRnJvbSB3aW5kb3dzIGRyaXZlciAqLworCisJcGFyYW1zLT5mb3JtYXQuc3ViU2FtcGxlID0gU1VCU0FNUExFXzQyMDsKKwlwYXJhbXMtPmZvcm1hdC55dXZPcmRlciA9IFlVVk9SREVSX1lVWVY7CisKKwlwYXJhbXMtPmNvbXByZXNzaW9uLm1vZGUgPSBDUElBX0NPTVBSRVNTSU9OX0FVVE87CisJcGFyYW1zLT5jb21wcmVzc2lvbi5kZWNpbWF0aW9uID0gTk9fREVDSU1BVElPTjsKKworCXBhcmFtcy0+Y29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmcgPSBDT01QX1RBUkdFVF9ERUY7CisJcGFyYW1zLT5jb21wcmVzc2lvblRhcmdldC50YXJnZXRGUiA9IDE1OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisJcGFyYW1zLT5jb21wcmVzc2lvblRhcmdldC50YXJnZXRRID0gNTsgLyogRnJvbSB3aW5kb3dzIGRyaXZlciAqLworCisJcGFyYW1zLT5xeDMucXgzX2RldGVjdGVkID0gMDsKKwlwYXJhbXMtPnF4My50b3BsaWdodCA9IDA7CisJcGFyYW1zLT5xeDMuYm90dG9tbGlnaHQgPSAwOworCXBhcmFtcy0+cXgzLmJ1dHRvbiA9IDA7CisJcGFyYW1zLT5xeDMuY3JhZGxlZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50c3RhdHVzKHN0cnVjdCBjYW1fcGFyYW1zICpwYXJhbXMpCit7CisJUERFQlVHKERfUFJPQkUsICJzdGF0dXM6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJICAgICAgIHBhcmFtcy0+c3RhdHVzLnN5c3RlbVN0YXRlLCBwYXJhbXMtPnN0YXR1cy5ncmFiU3RhdGUsCisJICAgICAgIHBhcmFtcy0+c3RhdHVzLnN0cmVhbVN0YXRlLCBwYXJhbXMtPnN0YXR1cy5mYXRhbEVycm9yLAorCSAgICAgICBwYXJhbXMtPnN0YXR1cy5jbWRFcnJvciwgcGFyYW1zLT5zdGF0dXMuZGVidWdGbGFncywKKwkgICAgICAgcGFyYW1zLT5zdGF0dXMudnBTdGF0dXMsIHBhcmFtcy0+c3RhdHVzLmVycm9yQ29kZSk7Cit9CisKK3N0YXRpYyBpbnQgZ290b19sb3dfcG93ZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Hb3RvTG9Qb3dlciwgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlICE9IExPX1BPV0VSX1NUQVRFKSB7CisJCWlmIChzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSAhPSBXQVJNX0JPT1RfU1RBVEUpIHsKKwkJCVBERUJVRyhEX0VSUiwKKwkJCSAgICAgICAidW5leHBlY3RlZCBzdGF0ZSBhZnRlciBsbyBwb3dlciBjbWQ6ICUwMngiLAorCQkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlKTsKKwkJCXByaW50c3RhdHVzKCZzZC0+cGFyYW1zKTsKKwkJfQorCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlQREVCVUcoRF9DT05GLCAiY2FtZXJhIG5vdyBpbiBMT1cgcG93ZXIgc3RhdGUiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnb3RvX2hpZ2hfcG93ZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Hb3RvSGlQb3dlciwgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDQwKTsJLyogd2luZG93cyBkcml2ZXIgZG9lcyBpdCB0b28gKi8KKworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlICE9IEhJX1BPV0VSX1NUQVRFKSB7CisJCVBERUJVRyhEX0VSUiwgInVuZXhwZWN0ZWQgc3RhdGUgYWZ0ZXIgaGkgcG93ZXIgY21kOiAlMDJ4IiwKKwkJCSAgICAgICBzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSk7CisJCXByaW50c3RhdHVzKCZzZC0+cGFyYW1zKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJUERFQlVHKERfQ09ORiwgImNhbWVyYSBub3cgaW4gSElHSCBwb3dlciBzdGF0ZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF92ZXJzaW9uX2luZm9ybWF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJLyogR2V0Q1BJQVZlcnNpb24gKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogR2V0UG5QSUQgKi8KKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRQblBJRCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2F2ZV9jYW1lcmFfc3RhdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2UsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZSwgMCwgMCwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGZvcm1hdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEZvcm1hdCwKKwkJCSBzZC0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUsCisJCQkgc2QtPnBhcmFtcy5mb3JtYXQuc3ViU2FtcGxlLAorCQkJIHNkLT5wYXJhbXMuZm9ybWF0Lnl1dk9yZGVyLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Uk9JLAorCQkJICBzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCwgc2QtPnBhcmFtcy5yb2kuY29sRW5kLAorCQkJICBzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCwgc2QtPnBhcmFtcy5yb2kucm93RW5kKTsKK30KKworaW50IGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyUGFyYW1zLAorCQkJICBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzLAorCQkJICBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdCwKKwkJCSAgc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuc2F0dXJhdGlvbiwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGFwY29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0QXBjb3IsCisJCQkgIHNkLT5wYXJhbXMuYXBjb3IuZ2FpbjEsCisJCQkgIHNkLT5wYXJhbXMuYXBjb3IuZ2FpbjIsCisJCQkgIHNkLT5wYXJhbXMuYXBjb3IuZ2FpbjQsCisJCQkgIHNkLT5wYXJhbXMuYXBjb3IuZ2FpbjgpOworfQorCitpbnQgY29tbWFuZF9zZXR2bG9mZnNldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldFZMT2Zmc2V0LAorCQkJICBzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4xLAorCQkJICBzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4yLAorCQkJICBzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW40LAorCQkJICBzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW44KTsKK30KKworaW50IGNvbW1hbmRfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gZG9fY29tbWFuZF9leHRlbmRlZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZSwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUsCisJCQkJICAxLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb21wTW9kZSwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuY2VudHJlV2VpZ2h0LAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5maW5lRXhwLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbywKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGksCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSAhPSAxKSB7CisJCXJldCA9IGRvX2NvbW1hbmRfZXh0ZW5kZWQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0RXhwb3N1cmUsCisJCQkJCSAgMCwKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUsCisJCQkJCSAgMCwgMCwKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4sCisJCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5maW5lRXhwLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8sCisJCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSwKKwkJCQkJICAwLCAwLCAwLCAwKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY29tbWFuZF9zZXRjb2xvdXJiYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID09IDEpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJIDEsCisJCQkJIHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5yZWRHYWluLAorCQkJCSBzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuZ3JlZW5HYWluLAorCQkJCSBzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmx1ZUdhaW4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlLAorCQkJCSAgMywgMCwgMCwgMCk7CisJfQorCWlmIChzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPT0gMikgeworCQlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlLAorCQkJCSAgMiwgMCwgMCwgMCk7CisJfQorCWlmIChzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPT0gMykgeworCQlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlLAorCQkJCSAgMywgMCwgMCwgMCk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbXByZXNzaW9udGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvblRhcmdldCwKKwkJCSAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZywKKwkJCSAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC50YXJnZXRGUiwKKwkJCSAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC50YXJnZXRRLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0eXV2dHJlc2goc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldFlVVlRocmVzaCwKKwkJCSAgc2QtPnBhcmFtcy55dXZUaHJlc2hvbGQueVRocmVzaG9sZCwKKwkJCSAgc2QtPnBhcmFtcy55dXZUaHJlc2hvbGQudXZUaHJlc2hvbGQsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRjb21wcmVzc2lvbnBhcmFtcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmRfZXh0ZW5kZWQoZ3NwY2FfZGV2LAorCQkJICAgIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvblBhcmFtcywKKwkJCSAgICAwLCAwLCAwLCAwLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuaHlzdGVyZXNpcywKKwkJCSAgICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnRocmVzaE1heCwKKwkJCSAgICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnNtYWxsU3RlcCwKKwkJCSAgICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmxhcmdlU3RlcCwKKwkJCSAgICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25IeXN0ZXJlc2lzLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZnJEaWZmU3RlcFRocmVzaCwKKwkJCSAgICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCwKKwkJCSAgICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25UaHJlc2hNb2QpOworfQorCitpbnQgY29tbWFuZF9zZXRjb21wcmVzc2lvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb24sCisJCQkgIHNkLT5wYXJhbXMuY29tcHJlc3Npb24ubW9kZSwKKwkJCSAgc2QtPnBhcmFtcy5jb21wcmVzc2lvbi5kZWNpbWF0aW9uLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0c2Vuc29yZnBzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRTZW5zb3JGUFMsCisJCQkgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IsCisJCQkgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEZsaWNrZXJDdHJsLAorCQkJICBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlLAorCQkJICBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAsCisJCQkgIHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlLAorCQkJICAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0ZWNwdGltaW5nKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRFQ1BUaW1pbmcsCisJCQkgIHNkLT5wYXJhbXMuZWNwVGltaW5nLCAwLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfcGF1c2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0VuZFN0cmVhbUNhcCwgMCwgMCwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3Jlc3VtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfSW5pdFN0cmVhbUNhcCwKKwkJCSAgMCwgc2QtPnBhcmFtcy5zdHJlYW1TdGFydExpbmUsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRsaWdodHMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0LCBwMSwgcDI7CisKKwlpZiAoIXNkLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkKKwkJcmV0dXJuIDA7CisKKwlwMSA9IChzZC0+cGFyYW1zLnF4My5ib3R0b21saWdodCA9PSAwKSA8PCAxOworCXAyID0gKHNkLT5wYXJhbXMucXgzLnRvcGxpZ2h0ID09IDApIDw8IDM7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1dyaXRlVkNSZWcsCisJCQkgMHg5MCwgMHg4RiwgMHg1MCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1dyaXRlTUNQb3J0LCAyLCAwLAorCQkJICBwMSB8IHAyIHwgMHhFMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2ZsaWNrZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgb24sIGludCBhcHBseSkKK3sKKwkvKiBFdmVyeXRoaW5nIGluIGhlcmUgaXMgZnJvbSB0aGUgV2luZG93cyBkcml2ZXIgKi8KKy8qIGRlZmluZSBmb3IgY29tcGdhaW4gY2FsY3VsYXRpb24gKi8KKyNpZiAwCisjZGVmaW5lIENPTVBHQUlOKGJhc2UsIGN1cmV4cCwgbmV3ZXhwKSBcCisgICAgKHU4KSAoKCgoZmxvYXQpIGJhc2UgLSAxMjguMCkgKiAoKGZsb2F0KSBjdXJleHAgLyAoZmxvYXQpIG5ld2V4cCkpICsgMTI4LjUpCisjZGVmaW5lIEVYUF9GUk9NX0NPTVAoYmFzZWNvbXAsIGN1cmNvbXAsIGN1cmV4cCkgXAorICAgICh1MTYpKChmbG9hdCljdXJleHAgKiAoZmxvYXQpKHU4KShjdXJjb21wICsgMTI4KSAvIFwKKyAgICAoZmxvYXQpKHU4KShiYXNlY29tcCAtIDEyOCkpCisjZWxzZQorICAvKiBlcXVpdmFsZW50IGZ1bmN0aW9ucyB3aXRob3V0IGZsb2F0aW5nIHBvaW50IG1hdGggKi8KKyNkZWZpbmUgQ09NUEdBSU4oYmFzZSwgY3VyZXhwLCBuZXdleHApIFwKKyAgICAodTgpKDEyOCArICgoKHUzMikoMiooYmFzZS0xMjgpKmN1cmV4cCArIG5ld2V4cCkpIC8gKDIgKiBuZXdleHApKSkKKyNkZWZpbmUgRVhQX0ZST01fQ09NUChiYXNlY29tcCwgY3VyY29tcCwgY3VyZXhwKSBcCisgICAgKHUxNikoKCh1MzIpKGN1cmV4cCAqICh1OCkoY3VyY29tcCArIDEyOCkpIC8gKHU4KShiYXNlY29tcCAtIDEyOCkpKQorI2VuZGlmCisKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGN1cnJlbnRleHAgPSBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvICsKKwkJCSBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpICogMjU2OworCWludCByZXQsIHN0YXJ0ZXhwOworCisJaWYgKG9uKSB7CisJCWludCBjaiA9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9IDE7CisJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAwOworCQlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlICE9IDIpIHsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSA9IDI7CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQl9CisJCWN1cnJlbnRleHAgPSBjdXJyZW50ZXhwIDw8IHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluID0gMDsKKwkJLyogcm91bmQgZG93biBjdXJyZW50IGV4cG9zdXJlIHRvIG5lYXJlc3QgdmFsdWUgKi8KKwkJc3RhcnRleHAgPSAoY3VycmVudGV4cCArIFJPVU5EX1VQX0VYUF9GT1JfRkxJQ0tFUikgLyBjajsKKwkJaWYgKHN0YXJ0ZXhwIDwgMSkKKwkJCXN0YXJ0ZXhwID0gMTsKKwkJc3RhcnRleHAgPSAoc3RhcnRleHAgKiBjaikgLSAxOworCQlpZiAoRklSTVdBUkVfVkVSU0lPTigxLCAyKSkKKwkJCXdoaWxlIChzdGFydGV4cCA+IE1BWF9FWFBfMTAyKQorCQkJCXN0YXJ0ZXhwIC09IGNqOworCQllbHNlCisJCQl3aGlsZSAoc3RhcnRleHAgPiBNQVhfRVhQKQorCQkJCXN0YXJ0ZXhwIC09IGNqOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvID0gc3RhcnRleHAgJiAweGZmOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpID0gc3RhcnRleHAgPj4gODsKKwkJaWYgKGN1cnJlbnRleHAgPiBzdGFydGV4cCkgeworCQkJaWYgKGN1cnJlbnRleHAgPiAoMiAqIHN0YXJ0ZXhwKSkKKwkJCQljdXJyZW50ZXhwID0gMiAqIHN0YXJ0ZXhwOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wID0KKwkJCQlDT01QR0FJTihDT01QX1JFRCwgY3VycmVudGV4cCwgc3RhcnRleHApOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0KKwkJCQlDT01QR0FJTihDT01QX0dSRUVOMSwgY3VycmVudGV4cCwgc3RhcnRleHApOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wID0KKwkJCQlDT01QR0FJTihDT01QX0dSRUVOMiwgY3VycmVudGV4cCwgc3RhcnRleHApOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ibHVlQ29tcCA9CisJCQkJQ09NUEdBSU4oQ09NUF9CTFVFLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCX0gZWxzZSB7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAgPSBDT01QX1JFRDsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCA9IENPTVBfR1JFRU4xOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0gQ09NUF9CTFVFOworCQl9CisJCWlmIChGSVJNV0FSRV9WRVJTSU9OKDEsIDIpKQorCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb21wTW9kZSA9IDA7CisJCWVsc2UKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29tcE1vZGUgPSAxOworCisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjEgPSAweDE4OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW4yID0gMHgxODsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluNCA9IDB4MTY7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjggPSAweDE0OworCX0gZWxzZSB7CisJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPSAwOworCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkID0gMTsKKwkJLyogQXZlcmFnZSBlcXVpdmFsZW50IGNvYXJzZSBmb3IgZWFjaCBjb21wIGNoYW5uZWwgKi8KKwkJc3RhcnRleHAgPSBFWFBfRlJPTV9DT01QKENPTVBfUkVELAorCQkJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCwgY3VycmVudGV4cCk7CisJCXN0YXJ0ZXhwICs9IEVYUF9GUk9NX0NPTVAoQ09NUF9HUkVFTjEsCisJCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wLCBjdXJyZW50ZXhwKTsKKwkJc3RhcnRleHAgKz0gRVhQX0ZST01fQ09NUChDT01QX0dSRUVOMiwKKwkJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAsIGN1cnJlbnRleHApOworCQlzdGFydGV4cCArPSBFWFBfRlJPTV9DT01QKENPTVBfQkxVRSwKKwkJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wLCBjdXJyZW50ZXhwKTsKKwkJc3RhcnRleHAgPSBzdGFydGV4cCA+PiAyOworCQl3aGlsZSAoc3RhcnRleHAgPiBNQVhfRVhQICYmIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA8CisJCSAgICAgICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlIC0gMSkgeworCQkJc3RhcnRleHAgPSBzdGFydGV4cCA+PiAxOworCQkJKytzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW47CisJCX0KKwkJaWYgKEZJUk1XQVJFX1ZFUlNJT04oMSwgMikgJiYgc3RhcnRleHAgPiBNQVhfRVhQXzEwMikKKwkJCXN0YXJ0ZXhwID0gTUFYX0VYUF8xMDI7CisJCWlmIChzdGFydGV4cCA+IE1BWF9FWFApCisJCQlzdGFydGV4cCA9IE1BWF9FWFA7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBzdGFydGV4cCAmIDB4ZmY7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBzdGFydGV4cCA+PiA4OworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAgPSBDT01QX1JFRDsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUF9HUkVFTjE7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCA9IENPTVBfR1JFRU4yOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0gQ09NUF9CTFVFOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluMSA9IDB4MTg7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjIgPSAweDE2OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW40ID0gMHgyNDsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluOCA9IDB4MzQ7CisJfQorCXNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjEgPSAyMDsKKwlzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4yID0gMjQ7CisJc2QtPnBhcmFtcy52bE9mZnNldC5nYWluNCA9IDI2OworCXNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjggPSAyNjsKKworCWlmIChhcHBseSkgeworCQlyZXQgPSBjb21tYW5kX3NldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGNvbW1hbmRfc2V0YXBjb3IoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gY29tbWFuZF9zZXR2bG9mZnNldChnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBjb21tYW5kX3NldGZsaWNrZXJjdHJsKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworI3VuZGVmIEVYUF9GUk9NX0NPTVAKKyN1bmRlZiBDT01QR0FJTgorfQorCisvKiBtb25pdG9yIHRoZSBleHBvc3VyZSBhbmQgYWRqdXN0IHRoZSBzZW5zb3IgZnJhbWUgcmF0ZSBpZiBuZWVkZWQgKi8KK3N0YXRpYyB2b2lkIG1vbml0b3JfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBleHBfYWNjLCBiY29tcCwgZ2FpbiwgY29hcnNlTCwgY21kWzhdOworCWludCByZXQsIGxpZ2h0X2V4cCwgZGFya19leHAsIHZlcnlfZGFya19leHA7CisJaW50IG9sZF9leHBvc3VyZSwgbmV3X2V4cG9zdXJlLCBmcmFtZXJhdGU7CisJaW50IHNldGZwcyA9IDAsIHNldGV4cCA9IDAsIHNldGZsaWNrZXIgPSAwOworCisJLyogZ2V0IG5lY2Vzc2FyeSBzdGF0cyBhbmQgcmVnaXN0ZXIgc2V0dGluZ3MgZnJvbSBjYW1lcmEgKi8KKwkvKiBkb19jb21tYW5kIGNhbid0IGhhbmRsZSB0aGlzLCBzbyBkbyBpdCBvdXJzZWx2ZXMgKi8KKwljbWRbMF0gPSBDUElBX0NPTU1BTkRfUmVhZFZQUmVncyA+PiA4OworCWNtZFsxXSA9IENQSUFfQ09NTUFORF9SZWFkVlBSZWdzICYgMHhmZjsKKwljbWRbMl0gPSAzMDsKKwljbWRbM10gPSA0OworCWNtZFs0XSA9IDk7CisJY21kWzVdID0gODsKKwljbWRbNl0gPSA4OworCWNtZFs3XSA9IDA7CisJcmV0ID0gY3BpYV91c2JfdHJhbnNmZXJDbWQoZ3NwY2FfZGV2LCBjbWQpOworCWlmIChyZXQpIHsKKwkJUERFQlVHKERfRVJSLCAiUmVhZFZQUmVncygzMCw0LDksOCkgLSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKwlleHBfYWNjID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCWJjb21wID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCWdhaW4gPSBnc3BjYV9kZXYtPnVzYl9idWZbMl07CisJY29hcnNlTCA9IGdzcGNhX2Rldi0+dXNiX2J1ZlszXTsKKworCWxpZ2h0X2V4cCA9IHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgKworCQkgICAgVEMgLSA1MCArIEVYUF9BQ0NfTElHSFQ7CisJaWYgKGxpZ2h0X2V4cCA+IDI1NSkKKwkJbGlnaHRfZXhwID0gMjU1OworCWRhcmtfZXhwID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyArCisJCSAgIFRDIC0gNTAgLSBFWFBfQUNDX0RBUks7CisJaWYgKGRhcmtfZXhwIDwgMCkKKwkJZGFya19leHAgPSAwOworCXZlcnlfZGFya19leHAgPSBkYXJrX2V4cCAvIDI7CisKKwlvbGRfZXhwb3N1cmUgPSBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpICogMjU2ICsKKwkJICAgICAgIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG87CisKKwlpZiAoIXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQpIHsKKwkJLyogRmxpY2tlciBjb250cm9sIG9uICovCisJCWludCBtYXhfY29tcCA9IEZJUk1XQVJFX1ZFUlNJT04oMSwgMikgPyBNQVhfQ09NUCA6CisJCQkJCQkJSElHSF9DT01QXzEwMjsKKwkJYmNvbXAgKz0gMTI4OwkvKiBkZWNvZGUgKi8KKwkJaWYgKGJjb21wID49IG1heF9jb21wICYmIGV4cF9hY2MgPCBkYXJrX2V4cCkgeworCQkJLyogZGFyayAqLworCQkJaWYgKGV4cF9hY2MgPCB2ZXJ5X2RhcmtfZXhwKSB7CisJCQkJLyogdmVyeSBkYXJrICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9EQVJLKQorCQkJCQkrK3NkLT5leHBvc3VyZV9jb3VudDsKKwkJCQllbHNlIHsKKwkJCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9CisJCQkJCQlFWFBPU1VSRV9WRVJZX0RBUks7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBqdXN0IGRhcmsgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9EQVJLKQorCQkJCQkrK3NkLT5leHBvc3VyZV9jb3VudDsKKwkJCQllbHNlIHsKKwkJCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX0RBUks7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKG9sZF9leHBvc3VyZSA8PSBMT1dfRVhQIHx8IGV4cF9hY2MgPiBsaWdodF9leHApIHsKKwkJCS8qIGxpZ2h0ICovCisJCQlpZiAob2xkX2V4cG9zdXJlIDw9IFZFUllfTE9XX0VYUCkgeworCQkJCS8qIHZlcnkgbGlnaHQgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0xJR0hUKQorCQkJCQkrK3NkLT5leHBvc3VyZV9jb3VudDsKKwkJCQllbHNlIHsKKwkJCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9CisJCQkJCQlFWFBPU1VSRV9WRVJZX0xJR0hUOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoganVzdCBsaWdodCAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0xJR0hUKQorCQkJCQkrK3NkLT5leHBvc3VyZV9jb3VudDsKKwkJCQllbHNlIHsKKwkJCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX0xJR0hUOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIG5vdCBkYXJrIG9yIGxpZ2h0ICovCisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQl9CisJfSBlbHNlIHsKKwkJLyogRmxpY2tlciBjb250cm9sIG9mZiAqLworCQlpZiAob2xkX2V4cG9zdXJlID49IE1BWF9FWFAgJiYgZXhwX2FjYyA8IGRhcmtfZXhwKSB7CisJCQkvKiBkYXJrICovCisJCQlpZiAoZXhwX2FjYyA8IHZlcnlfZGFya19leHApIHsKKwkJCQkvKiB2ZXJ5IGRhcmsgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUkspCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0KKwkJCQkJCUVYUE9TVVJFX1ZFUllfREFSSzsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGp1c3QgZGFyayAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfREFSSzsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAob2xkX2V4cG9zdXJlIDw9IExPV19FWFAgfHwgZXhwX2FjYyA+IGxpZ2h0X2V4cCkgeworCQkJLyogbGlnaHQgKi8KKwkJCWlmIChvbGRfZXhwb3N1cmUgPD0gVkVSWV9MT1dfRVhQKSB7CisJCQkJLyogdmVyeSBsaWdodCAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQpCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0KKwkJCQkJCUVYUE9TVVJFX1ZFUllfTElHSFQ7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBqdXN0IGxpZ2h0ICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfTElHSFQpCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTElHSFQ7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJLyogbm90IGRhcmsgb3IgbGlnaHQgKi8KKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCX0KKwl9CisKKwlmcmFtZXJhdGUgPSBhdG9taWNfcmVhZCgmc2QtPmZwcyk7CisJaWYgKGZyYW1lcmF0ZSA+IDMwIHx8IGZyYW1lcmF0ZSA8IDEpCisJCWZyYW1lcmF0ZSA9IDE7CisKKwlpZiAoIXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQpIHsKKwkJLyogRmxpY2tlciBjb250cm9sIG9uICovCisJCWlmICgoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUksgfHwKKwkJICAgICBzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspICYmCisJCSAgICBzZC0+ZXhwb3N1cmVfY291bnQgPj0gREFSS19USU1FICogZnJhbWVyYXRlICYmCisJCSAgICBzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yIDwgMykgeworCisJCQkvKiBkYXJrIGZvciB0b28gbG9uZyAqLworCQkJKytzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOworCQkJc2V0ZnBzID0gMTsKKworCQkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJCQlmbGlja2VyX2p1bXBzW3NkLT5tYWluc0ZyZXFdCisJCQkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQorCQkJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKKwkJCXNldGZsaWNrZXIgPSAxOworCisJCQluZXdfZXhwb3N1cmUgPSBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAtMTsKKwkJCXdoaWxlIChuZXdfZXhwb3N1cmUgPCBvbGRfZXhwb3N1cmUgLyAyKQorCQkJCW5ld19leHBvc3VyZSArPQorCQkJCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXA7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvID0gbmV3X2V4cG9zdXJlICYgMHhmZjsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBuZXdfZXhwb3N1cmUgPj4gODsKKwkJCXNldGV4cCA9IDE7CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQkJUERFQlVHKERfQ09ORiwgIkF1dG9tYXRpY2FsbHkgZGVjcmVhc2luZyBzZW5zb3JfZnBzIik7CisKKwkJfSBlbHNlIGlmICgoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0xJR0hUIHx8CisJCQkgICAgc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkgJiYKKwkJCSAgIHNkLT5leHBvc3VyZV9jb3VudCA+PSBMSUdIVF9USU1FICogZnJhbWVyYXRlICYmCisJCQkgICBzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yID4gMCkgeworCisJCQkvKiBsaWdodCBmb3IgdG9vIGxvbmcgKi8KKwkJCWludCBtYXhfZXhwID0gRklSTVdBUkVfVkVSU0lPTigxLCAyKSA/IE1BWF9FWFBfMTAyIDoKKwkJCQkJCQkgICAgICAgTUFYX0VYUDsKKwkJCS0tc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcjsKKwkJCXNldGZwcyA9IDE7CisKKwkJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9CisJCQkJZmxpY2tlcl9qdW1wc1tzZC0+bWFpbnNGcmVxXQorCQkJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZV0KKwkJCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07CisJCQlzZXRmbGlja2VyID0gMTsKKworCQkJbmV3X2V4cG9zdXJlID0gc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wLTE7CisJCQl3aGlsZSAobmV3X2V4cG9zdXJlIDwgMiAqIG9sZF9leHBvc3VyZSAmJgorCQkJICAgICAgIG5ld19leHBvc3VyZSArCisJCQkgICAgICAgc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wIDwgbWF4X2V4cCkKKwkJCQluZXdfZXhwb3N1cmUgKz0KKwkJCQkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IG5ld19leHBvc3VyZSAmIDB4ZmY7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpID0gbmV3X2V4cG9zdXJlID4+IDg7CisJCQlzZXRleHAgPSAxOworCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJCVBERUJVRyhEX0NPTkYsICJBdXRvbWF0aWNhbGx5IGluY3JlYXNpbmcgc2Vuc29yX2ZwcyIpOworCQl9CisJfSBlbHNlIHsKKwkJLyogRmxpY2tlciBjb250cm9sIG9mZiAqLworCQlpZiAoKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9EQVJLIHx8CisJCSAgICAgc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9EQVJLKSAmJgorCQkgICAgc2QtPmV4cG9zdXJlX2NvdW50ID49IERBUktfVElNRSAqIGZyYW1lcmF0ZSAmJgorCQkgICAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA8IDMpIHsKKworCQkJLyogZGFyayBmb3IgdG9vIGxvbmcgKi8KKwkJCSsrc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcjsKKwkJCXNldGZwcyA9IDE7CisKKwkJCWlmIChzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPiAwKSB7CisJCQkJLS1zZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW47CisJCQkJc2V0ZXhwID0gMTsKKwkJCX0KKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCQlQREVCVUcoRF9DT05GLCAiQXV0b21hdGljYWxseSBkZWNyZWFzaW5nIHNlbnNvcl9mcHMiKTsKKworCQl9IGVsc2UgaWYgKChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQgfHwKKwkJCSAgICBzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0xJR0hUKSAmJgorCQkJICAgc2QtPmV4cG9zdXJlX2NvdW50ID49IExJR0hUX1RJTUUgKiBmcmFtZXJhdGUgJiYKKwkJCSAgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPiAwKSB7CisKKwkJCS8qIGxpZ2h0IGZvciB0b28gbG9uZyAqLworCQkJLS1zZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOworCQkJc2V0ZnBzID0gMTsKKworCQkJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA8CisJCQkgICAgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSAtIDEpIHsKKwkJCQkrK3NkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKKwkJCQlzZXRleHAgPSAxOworCQkJfQorCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJCVBERUJVRyhEX0NPTkYsICJBdXRvbWF0aWNhbGx5IGluY3JlYXNpbmcgc2Vuc29yX2ZwcyIpOworCQl9CisJfQorCisJaWYgKHNldGV4cCkKKwkJY29tbWFuZF9zZXRleHBvc3VyZShnc3BjYV9kZXYpOworCisJaWYgKHNldGZwcykKKwkJY29tbWFuZF9zZXRzZW5zb3JmcHMoZ3NwY2FfZGV2KTsKKworCWlmIChzZXRmbGlja2VyKQorCQljb21tYW5kX3NldGZsaWNrZXJjdHJsKGdzcGNhX2Rldik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogaWYgZmxpY2tlciBpcyBzd2l0Y2hlZCBvZmYsIHRoaXMgZnVuY3Rpb24gc3dpdGNoZXMgaXQgYmFjayBvbi5JdCBjaGVja3MsCisgICBob3dldmVyLCB0aGF0IGNvbmRpdGlvbnMgYXJlIHN1aXRhYmxlIGJlZm9yZSByZXN0YXJ0aW5nIGl0LgorICAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGZpcm13YXJlIHZlcnNpb24gMS4yLgorCisgICBJdCBhbHNvIGFkanVzdCB0aGUgY29sb3VyIGJhbGFuY2Ugd2hlbiBhbiBleHBvc3VyZSBzdGVwIGlzIGRldGVjdGVkIC0gYXMKKyAgIGxvbmcgYXMgZmxpY2tlciBpcyBydW5uaW5nCisqLworc3RhdGljIHZvaWQgcmVzdGFydF9mbGlja2VyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGNhbV9leHBvc3VyZSwgb2xkX2V4cDsKKworCWlmICghRklSTVdBUkVfVkVSU0lPTigxLCAyKSkKKwkJcmV0dXJuOworCisJY2FtX2V4cG9zdXJlID0gYXRvbWljX3JlYWQoJnNkLT5jYW1fZXhwb3N1cmUpOworCisJaWYgKHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPT0gMCB8fAorCSAgICBjYW1fZXhwb3N1cmUgPT0gMCkKKwkJcmV0dXJuOworCisJb2xkX2V4cCA9IHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gKworCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkqMjU2OworCS8qCisJICBzZWUgaG93IGZhciBhd2F5IGNhbWVyYSBleHBvc3VyZSBpcyBmcm9tIGEgdmFsaWQKKwkgIGZsaWNrZXIgZXhwb3N1cmUgdmFsdWUKKwkqLworCWNhbV9leHBvc3VyZSAlPSBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXA7CisJaWYgKCFzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkICYmCisJICAgIGNhbV9leHBvc3VyZSA8PSBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgLSAzKSB7CisJCS8qIEZsaWNrZXIgY29udHJvbCBhdXRvLWRpc2FibGVkICovCisJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOworCX0KKworCWlmIChzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkICYmCisJICAgIG9sZF9leHAgPiBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgKworCQkgICAgICBST1VORF9VUF9FWFBfRk9SX0ZMSUNLRVIpIHsKKwkJLyogZXhwb3N1cmUgaXMgbm93IGhpZ2ggZW5vdWdoIHRvIHN3aXRjaAorCQkgICBmbGlja2VyIGNvbnRyb2wgYmFjayBvbiAqLworCQlzZXRfZmxpY2tlcihnc3BjYV9kZXYsIDEsIDEpOworCX0KK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBjYW0gKmNhbTsKKworCXJlc2V0X2NhbWVyYV9wYXJhbXMoZ3NwY2FfZGV2KTsKKworCVBERUJVRyhEX1BST0JFLCAiY3BpYSBDUGlBIGNhbWVyYSBkZXRlY3RlZCAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsCisJICAgICAgIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5jYW1fbW9kZSA9IG1vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG1vZGUpOworCisJc2Rfc2V0ZnJlcShnc3BjYV9kZXYsIEZSRVFfREVGKTsKKworCXJldHVybiAwOworfQorCisvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHByaXYsIHJldDsKKworCS8qIFN0YXJ0IHRoZSBjYW1lcmEgaW4gbG93IHBvd2VyIG1vZGUgKi8KKwlpZiAoZ290b19sb3dfcG93ZXIoZ3NwY2FfZGV2KSkgeworCQlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgIT0gV0FSTV9CT09UX1NUQVRFKSB7CisJCQlQREVCVUcoRF9FUlIsICJ1bmV4cGVjdGVkIHN5c3RlbXN0YXRlOiAlMDJ4IiwKKwkJCSAgICAgICBzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSk7CisJCQlwcmludHN0YXR1cygmc2QtPnBhcmFtcyk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIEZJWE1FOiB0aGlzIGlzIGp1c3QgZGlydHkgdHJpYWwgYW5kIGVycm9yICovCisJCXJldCA9IGdvdG9faGlnaF9wb3dlcihnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0Rpc2NhcmRGcmFtZSwKKwkJCQkgMCwgMCwgMCwgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGdvdG9fbG93X3Bvd2VyKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHByb2NlZHVyZSBkZXNjcmliZWQgaW4gZGV2ZWxvcGVyJ3MgZ3VpZGUgcDMtMjggKi8KKworCS8qIENoZWNrIHRoZSBmaXJtd2FyZSB2ZXJzaW9uLiAqLworCXNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPSAwOworCWdldF92ZXJzaW9uX2luZm9ybWF0aW9uKGdzcGNhX2Rldik7CisJaWYgKHNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gIT0gMSkgeworCQlQREVCVUcoRF9FUlIsICJvbmx5IGZpcm13YXJlIHZlcnNpb24gMSBpcyBzdXBwb3J0ZWQgKGdvdDogJWQpIiwKKwkJICAgICAgIHNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBBIGJ1ZyBpbiBmaXJtd2FyZSAxLTAyIGxpbWl0cyBnYWluTW9kZSB0byAyICovCisJaWYgKHNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uIDw9IDIgJiYKKwkgICAgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSA+IDIpIHsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSA9IDI7CisJfQorCisJLyogc2V0IFFYMyBkZXRlY3RlZCBmbGFnICovCisJc2QtPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkID0gKHNkLT5wYXJhbXMucG5wSUQudmVuZG9yID09IDB4MDgxMyAmJgorCQkJCSAgICAgICBzZC0+cGFyYW1zLnBucElELnByb2R1Y3QgPT0gMHgwMDAxKTsKKworCS8qIFRoZSBmYXRhbCBlcnJvciBjaGVja2luZyBzaG91bGQgYmUgZG9uZSBhZnRlcgorCSAqIHRoZSBjYW1lcmEgcG93ZXJzIHVwIChkZXZlbG9wZXIncyBndWlkZSBwIDMtMzgpICovCisKKwkvKiBTZXQgc3RyZWFtU3RhdGUgYmVmb3JlIHRyYW5zaXRpb24gdG8gaGlnaCBwb3dlciB0byBhdm9pZCBidWcKKwkgKiBpbiBmaXJtd2FyZSAxLTAyICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Nb2RpZnlDYW1lcmFTdGF0dXMsCisJCQkgU1RSRUFNU1RBVEUsIDAsIFNUUkVBTV9OT1RfUkVBRFksIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBHb3RvSGlQb3dlciAqLworCXJldCA9IGdvdG9faGlnaF9wb3dlcihnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBDaGVjayB0aGUgY2FtZXJhIHN0YXR1cyAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNkLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IpIHsKKwkJUERFQlVHKERfRVJSLCAiZmF0YWxfZXJyb3I6ICUwNHgsIHZwX3N0YXR1czogJTA0eCIsCisJCSAgICAgICBzZC0+cGFyYW1zLnN0YXR1cy5mYXRhbEVycm9yLAorCQkgICAgICAgc2QtPnBhcmFtcy5zdGF0dXMudnBTdGF0dXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBWUFZlcnNpb24gY2FuJ3QgYmUgcmV0cmlldmVkIGJlZm9yZSB0aGUgY2FtZXJhIGlzIGluIEhpUG93ZXIsCisJICogc28gZ2V0IGl0IGhlcmUgaW5zdGVhZCBvZiBpbiBnZXRfdmVyc2lvbl9pbmZvcm1hdGlvbi4gKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldFZQVmVyc2lvbiwgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIERldGVybWluZSB2aWRlbyBtb2RlIHNldHRpbmdzICovCisJc2QtPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgPSAxMjA7CisKKwlwcml2ID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJaWYgKHByaXYgJiAweDAxKSB7IC8qIGNyb3AgKi8KKwkJc2QtPnBhcmFtcy5yb2kuY29sU3RhcnQgPSAyOworCQlzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCA9IDY7CisJfSBlbHNlIHsKKwkJc2QtPnBhcmFtcy5yb2kuY29sU3RhcnQgPSAwOworCQlzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCA9IDA7CisJfQorCisJaWYgKHByaXYgJiAweDAyKSB7IC8qIHF1YXJ0ZXIgKi8KKwkJc2QtPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplID0gVklERU9TSVpFX1FDSUY7CisJCXNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0IC89IDI7CisJCXNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0IC89IDI7CisJCXNkLT5wYXJhbXMuc3RyZWFtU3RhcnRMaW5lIC89IDI7CisJfSBlbHNlCisJCXNkLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSA9IFZJREVPU0laRV9DSUY7CisKKwlzZC0+cGFyYW1zLnJvaS5jb2xFbmQgPSBzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCArCisJCQkJKGdzcGNhX2Rldi0+d2lkdGggPj4gMyk7CisJc2QtPnBhcmFtcy5yb2kucm93RW5kID0gc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgKworCQkJCShnc3BjYV9kZXYtPmhlaWdodCA+PiAyKTsKKworCS8qIEFuZCBub3cgc2V0IHRoZSBjYW1lcmEgdG8gYSBrbm93biBzdGF0ZSAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0R3JhYk1vZGUsCisJCQkgQ1BJQV9HUkFCX0NPTlRJTkVPVVMsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyogV2Ugc3RhcnQgd2l0aCBjb21wcmVzc2lvbiBkaXNhYmxlZCwgYXMgd2UgbmVlZCBvbmUgdW5jb21wcmVzc2VkCisJICAgZnJhbWUgdG8gaGFuZGxlIGxhdGVyIGNvbXByZXNzZWQgZnJhbWVzICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvbiwKKwkJCSBDUElBX0NPTVBSRVNTSU9OX05PTkUsCisJCQkgTk9fREVDSU1BVElPTiwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGNvbXByZXNzaW9udGFyZ2V0KGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGNvbG91cnBhcmFtcyhnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRmb3JtYXQoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0eXV2dHJlc2goZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0ZWNwdGltaW5nKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGNvbXByZXNzaW9ucGFyYW1zKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGNvbG91cmJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0c2Vuc29yZnBzKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGFwY29yKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGZsaWNrZXJjdHJsKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldHZsb2Zmc2V0KGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFN0YXJ0IHN0cmVhbSAqLworCXJldCA9IGNvbW1hbmRfcmVzdW1lKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdhaXQgNiBmcmFtZXMgYmVmb3JlIHR1cm5pbmcgY29tcHJlc3Npb24gb24gZm9yIHRoZSBzZW5zb3IgdG8gZ2V0CisJICAgYWxsIHNldHRpbmdzIGFuZCBBRUMvQUNCIHRvIHNldHRsZSAqLworCXNkLT5maXJzdF9mcmFtZSA9IDY7CisJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwlzZC0+ZXhwb3N1cmVfY291bnQgPSAwOworCWF0b21pY19zZXQoJnNkLT5jYW1fZXhwb3N1cmUsIDApOworCWF0b21pY19zZXQoJnNkLT5mcHMsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwljb21tYW5kX3BhdXNlKGdzcGNhX2Rldik7CisKKwkvKiBzYXZlIGNhbWVyYSBzdGF0ZSBmb3IgbGF0ZXIgb3BlbiAoZGV2ZWxvcGVycyBndWlkZSBjaCAzLjUuMykgKi8KKwlzYXZlX2NhbWVyYV9zdGF0ZShnc3BjYV9kZXYpOworCisJLyogR290b0xvUG93ZXIgKi8KKwlnb3RvX2xvd19wb3dlcihnc3BjYV9kZXYpOworCisJLyogVXBkYXRlIHRoZSBjYW1lcmEgc3RhdHVzICovCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwkvKiBTdGFydCAvIFN0b3AgdGhlIGNhbWVyYSB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtpbmcgdG8KKwkgICBhIHN1cHBvcnRlZCBjYW1lcmEsIGFuZCB0byBnZXQgc29tZSBpbmZvcm1hdGlvbiBmcm9tIGl0CisJICAgdG8gcHJpbnQuICovCisJcmV0ID0gc2Rfc3RhcnQoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2Rfc3RvcE4oZ3NwY2FfZGV2KTsKKworCVBERUJVRyhEX1BST0JFLCAiQ1BJQSBWZXJzaW9uOiAgICAgICAgICAgICAlZC4lMDJkICglZC4lZCkiLAorCQkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiwKKwkJCXNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uLAorCQkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjVmVyc2lvbiwKKwkJCXNkLT5wYXJhbXMudmVyc2lvbi52Y1JldmlzaW9uKTsKKwlQREVCVUcoRF9QUk9CRSwgIkNQSUEgUG5QLUlEOiAgICAgICAgICAgICAgJTA0eDolMDR4OiUwNHgiLAorCQkJc2QtPnBhcmFtcy5wbnBJRC52ZW5kb3IsIHNkLT5wYXJhbXMucG5wSUQucHJvZHVjdCwKKwkJCXNkLT5wYXJhbXMucG5wSUQuZGV2aWNlUmV2aXNpb24pOworCVBERUJVRyhEX1BST0JFLCAiVlAtVmVyc2lvbjogICAgICAgICAgICAgICAlZC4lZCAlMDR4IiwKKwkJCXNkLT5wYXJhbXMudnBWZXJzaW9uLnZwVmVyc2lvbiwKKwkJCXNkLT5wYXJhbXMudnBWZXJzaW9uLnZwUmV2aXNpb24sCisJCQlzZC0+cGFyYW1zLnZwVmVyc2lvbi5jYW1lcmFIZWFkSUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAorCQkJaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkvKiBDaGVjayBmb3IgU09GICovCisJaWYgKGxlbiA+PSA2NCAmJgorCSAgICBkYXRhWzBdID09IE1BR0lDXzAgJiYgZGF0YVsxXSA9PSBNQUdJQ18xICYmCisJICAgIGRhdGFbMTZdID09IHNkLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSAmJgorCSAgICBkYXRhWzE3XSA9PSBzZC0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUgJiYKKwkgICAgZGF0YVsxOF0gPT0gc2QtPnBhcmFtcy5mb3JtYXQueXV2T3JkZXIgJiYKKwkgICAgZGF0YVsyNF0gPT0gc2QtPnBhcmFtcy5yb2kuY29sU3RhcnQgJiYKKwkgICAgZGF0YVsyNV0gPT0gc2QtPnBhcmFtcy5yb2kuY29sRW5kICYmCisJICAgIGRhdGFbMjZdID09IHNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0ICYmCisJICAgIGRhdGFbMjddID09IHNkLT5wYXJhbXMucm9pLnJvd0VuZCkgeworCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKworCQlhdG9taWNfc2V0KCZzZC0+Y2FtX2V4cG9zdXJlLCBkYXRhWzM5XSAqIDIpOworCQlhdG9taWNfc2V0KCZzZC0+ZnBzLCBkYXRhWzQxXSk7CisKKwkJaWYgKGZyYW1lID09IE5VTEwpIHsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ2hlY2sgZm9yIHByb3BlciBFT0YgZm9yIGxhc3QgZnJhbWUgKi8KKwkJaWYgKChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSkgPiA0ICYmCisJCSAgICBmcmFtZS0+ZGF0YV9lbmRbLTRdID09IDB4ZmYgJiYKKwkJICAgIGZyYW1lLT5kYXRhX2VuZFstM10gPT0gMHhmZiAmJgorCQkgICAgZnJhbWUtPmRhdGFfZW5kWy0yXSA9PSAweGZmICYmCisJCSAgICBmcmFtZS0+ZGF0YV9lbmRbLTFdID09IDB4ZmYpCisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJCU5VTEwsIDApOworCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZGF0YSwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgc2RfZHFfY2FsbGJhY2soc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIFNldCB0aGUgbm9ybWFsIGNvbXByZXNzaW9uIHNldHRpbmdzIG9uY2Ugd2UgaGF2ZSBjYXB0dXJlZCBhCisJICAgZmV3IHVuY29tcHJlc3NlZCBmcmFtZXMgKGFuZCBBRUMgaGFzIGhvcGVmdWxseSBzZXR0bGVkKSAqLworCWlmIChzZC0+Zmlyc3RfZnJhbWUpIHsKKwkJc2QtPmZpcnN0X2ZyYW1lLS07CisJCWlmIChzZC0+Zmlyc3RfZnJhbWUgPT0gMCkKKwkJCWNvbW1hbmRfc2V0Y29tcHJlc3Npb24oZ3NwY2FfZGV2KTsKKwl9CisKKwkvKiBTd2l0Y2ggZmxpY2tlciBjb250cm9sIGJhY2sgb24gaWYgaXQgZ290IHR1cm5lZCBvZmYgKi8KKwlyZXN0YXJ0X2ZsaWNrZXIoZ3NwY2FfZGV2KTsKKworCS8qIElmIEFFQyBpcyBlbmFibGVkLCBtb25pdG9yIHRoZSBleHBvc3VyZSBhbmQKKwkgICBhZGp1c3QgdGhlIHNlbnNvciBmcmFtZSByYXRlIGlmIG5lZWRlZCAqLworCWlmIChzZC0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgPT0gMikKKwkJbW9uaXRvcl9leHBvc3VyZShnc3BjYV9kZXYpOworCisJLyogVXBkYXRlIG91ciBrbm93bGVkZ2Ugb2YgdGhlIGNhbWVyYSBzdGF0ZSAqLworCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmUsIDAsIDAsIDAsIDApOworCWlmIChzZC0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQpCisJCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHMsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzID0gdmFsOworCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlID0KKwkJZmluZF9vdmVyX2V4cG9zdXJlKHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MpOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlyZXQgPSBjb21tYW5kX3NldGNvbG91cnBhcmFtcyhnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIGNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuY29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlyZXR1cm4gY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuY29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0c2F0dXJhdGlvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuIGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuc2F0dXJhdGlvbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgb247CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCW9uID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQlvbiA9IDE7CisJCXNkLT5tYWluc0ZyZXEgPSAwOworCQlicmVhazsKKwljYXNlIDI6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCisJCW9uID0gMTsKKwkJc2QtPm1haW5zRnJlcSA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNkLT5mcmVxID0gdmFsOworCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9CisJCWZsaWNrZXJfanVtcHNbc2QtPm1haW5zRnJlcV0KKwkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQorCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07CisKKwlyZXR1cm4gc2V0X2ZsaWNrZXIoZ3NwY2FfZGV2LCBvbiwgZ3NwY2FfZGV2LT5zdHJlYW1pbmcpOworfQorCitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+ZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb21wdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmcgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlyZXR1cm4gY29tbWFuZF9zZXRjb21wcmVzc2lvbnRhcmdldChnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29tcHRhcmdldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKK3sKKwlzd2l0Y2ggKG1lbnUtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKKwkJc3dpdGNoIChtZW51LT5pbmRleCkgeworCQljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKKwkJCXJldHVybiAwOworCQljYXNlIDI6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTVBfVEFSR0VUOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfUVVBTElUWToKKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiUXVhbGl0eSIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfRlJBTUVSQVRFOgorCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJGcmFtZXJhdGUiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgPSBzZF9jdHJscywKKwkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkuaW5pdCA9IHNkX2luaXQsCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLmRxX2NhbGxiYWNrID0gc2RfZHFfY2FsbGJhY2ssCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNTUzLCAweDAwMDIpfSwKKwl7VVNCX0RFVklDRSgweDA4MTMsIDB4MDAwMSl9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCmluZGV4IGZkZjRjMGUuLmVjZDRkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTg1MSw3ICs4NTEsNyBAQAogfQogCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCmluZGV4IDQ4NzhjOGYuLjllNDI0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09IHN1ZC1kcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpc2F0aW9uID09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkxMzIwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkxMzIwID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMTMyMCwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX21pMjAyMCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX21pMjAyMCA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19taTIwMjAsCiAJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLApAQCAtMTg3LDcgKzE4Nyw3IEBACiAJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTIwMjBiID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwYiA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19taTIwMjBiLAogCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKQEAgLTIwMCw3ICsyMDAsNyBAQAogCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3YyNjQwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3YyNjQwID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX292MjY0MCwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1NSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1NSA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19vdjk2NTUsCiAJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGJkNjIxNGQuLjIyMmFmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTMsNiArMyw5IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSAoaHR0cDovL21vaW5lamYuZnJlZS5mcikKICAqCisgKiBDYW1lcmEgYnV0dG9uIGlucHV0IGhhbmRsaW5nIGJ5IE3DoXJ0b24gTsOpbWV0aAorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTcOhcnRvbiBOw6ltZXRoIDxubTEyN0BmcmVlbWFpbC5odT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC0zNyw2ICs0MCwxMSBAQAogCiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAorI2lmZGVmIENPTkZJR19JTlBVVAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+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+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfR0FJTikKIAkJCWdhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOwogCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCA1OWM3OTQxLi4wMmM2OTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCkBAIC00OCwyNiArNDgsMjcgQEAKIAogLyogdXNlZCB0byBsaXN0IGZyYW1lcmF0ZXMgc3VwcG9ydGVkIGJ5IGEgY2FtZXJhIG1vZGUgKHJlc29sdXRpb24pICovCiBzdHJ1Y3QgZnJhbWVyYXRlcyB7Ci0JaW50ICpyYXRlczsKKwljb25zdCB1OCAqcmF0ZXM7CiAJaW50IG5yYXRlczsKIH07CiAKIC8qIGRldmljZSBpbmZvcm1hdGlvbiAtIHNldCBhdCBwcm9iZSB0aW1lICovCiBzdHJ1Y3QgY2FtIHsKLQlpbnQgYnVsa19zaXplOwkJLyogYnVmZmVyIHNpemUgd2hlbiBpbWFnZSB0cmFuc2ZlciBieSBidWxrICovCiAJY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqY2FtX21vZGU7CS8qIHNpemUgbm1vZGVzICovCi0JY2hhciBubW9kZXM7CiAJY29uc3Qgc3RydWN0IGZyYW1lcmF0ZXMgKm1vZGVfZnJhbWVyYXRlczsgLyogbXVzdCBoYXZlIHNpemUgbm1vZGUsCiAJCQkJCQkgICAqIGp1c3QgbGlrZSBjYW1fbW9kZSAqLwotCV9fdTggYnVsa19udXJiczsJLyogbnVtYmVyIG9mIFVSQnMgaW4gYnVsayBtb2RlCisJdTMyIGJ1bGtfc2l6ZTsJCS8qIGJ1ZmZlciBzaXplIHdoZW4gaW1hZ2UgdHJhbnNmZXIgYnkgYnVsayAqLworCXUzMiBpbnB1dF9mbGFnczsJLyogdmFsdWUgZm9yIEVOVU1fSU5QVVQgc3RhdHVzIGZsYWdzICovCisJdTggbm1vZGVzOwkJLyogc2l6ZSBvZiBjYW1fbW9kZSAqLworCXU4IG5vX3VyYl9jcmVhdGU7CS8qIGRvbid0IGNyZWF0ZSB0cmFuc2ZlciBVUkJzICovCisJdTggYnVsa19udXJiczsJCS8qIG51bWJlciBvZiBVUkJzIGluIGJ1bGsgbW9kZQogCQkJCSAqIC0gY2Fubm90IGJlID4gTUFYX05VUkJTCiAJCQkJICogLSB3aGVuIDAgYW5kIGJ1bGtfc2l6ZSAhPSAwIG1lYW5zCiAJCQkJICogICAxIFVSQiBhbmQgc3VibWl0IGRvbmUgYnkgc3ViZHJpdmVyICovCiAJdTggYnVsazsJCS8qIGltYWdlIHRyYW5zZmVyIGJ5IDA6aXNvYyAvIDE6YnVsayAqLwogCXU4IG5wa3Q7CQkvKiBudW1iZXIgb2YgcGFja2V0cyBpbiBhbiBJU09DIG1lc3NhZ2UKIAkJCQkgKiAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlOiAzMiBwYWNrZXRzICovCi0JdTMyIGlucHV0X2ZsYWdzOwkvKiB2YWx1ZSBmb3IgRU5VTV9JTlBVVCBzdGF0dXMgZmxhZ3MgKi8KLQljaGFyIHJldmVyc2VfYWx0czsJLyogQWx0IHNldHRpbmdzIGFyZSBpbiBoaWdoIHRvIGxvdyBvcmRlciAqLworCXU4IHJldmVyc2VfYWx0czsJLyogQWx0IHNldHRpbmdzIGFyZSBpbiBoaWdoIHRvIGxvdyBvcmRlciAqLwogfTsKIAogc3RydWN0IGdzcGNhX2RldjsKQEAgLTkwLDYgKzkxLDkgQEAKIHR5cGVkZWYgdm9pZCAoKmNhbV9wa3Rfb3ApIChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQkJdTggKmRhdGEsCiAJCQkJaW50IGxlbik7Cit0eXBlZGVmIGludCAoKmNhbV9pbnRfcGt0X29wKSAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCXU4ICpkYXRhLAorCQkJCWludCBsZW4pOwogCiBzdHJ1Y3QgY3RybCB7CiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOwpAQCAtMTI1LDYgKzEyOSwxMiBAQAogCWNhbV9yZWdfb3AgZ2V0X3JlZ2lzdGVyOwogI2VuZGlmCiAJY2FtX2lkZW50X29wIGdldF9jaGlwX2lkZW50OworI2lmZGVmIENPTkZJR19JTlBVVAorCWNhbV9pbnRfcGt0X29wIGludF9wa3Rfc2NhbjsKKwkvKiBvdGhlcl9pbnB1dCBtYWtlcyB0aGUgZ3NwY2EgY29yZSBjcmVhdGUgZ3NwY2FfZGV2LT5pbnB1dCBldmVuIHdoZW4KKwkgICBpbnRfcGt0X3NjYW4gaXMgTlVMTCwgZm9yIGNhbXMgd2l0aCBub24gaW50ZXJydXB0IGRyaXZlbiBidXR0b25zICovCisJdTggb3RoZXJfaW5wdXQ7CisjZW5kaWYKIH07CiAKIC8qIHBhY2tldCB0eXBlcyB3aGVuIG1vdmluZyBmcm9tIGlzbyBidWYgdG8gZnJhbWUgYnVmICovCkBAIC0xNDcsNiArMTU3LDEwIEBACiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwkJLyogc3ViZHJpdmVyIGhhbmRsaW5nIHRoZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwogCXN0cnVjdCBmaWxlICpjYXB0X2ZpbGU7CQkvKiBmaWxlIGRvaW5nIHZpZGVvIGNhcHR1cmUgKi8KKyNpZmRlZiBDT05GSUdfSU5QVVQKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJY2hhciBwaHlzWzY0XTsJCQkvKiBwaHlzaWNhbCBkZXZpY2UgcGF0aCAqLworI2VuZGlmCiAKIAlzdHJ1Y3QgY2FtIGNhbTsJCQkJLyogZGV2aWNlIGluZm9ybWF0aW9uICovCiAJY29uc3Qgc3RydWN0IHNkX2Rlc2MgKnNkX2Rlc2M7CQkvKiBzdWJkcml2ZXIgZGVzY3JpcHRpb24gKi8KQEAgLTE1Niw2ICsxNzAsOSBAQAogI2RlZmluZSBVU0JfQlVGX1NaIDY0CiAJX191OCAqdXNiX2J1ZjsJCQkJLyogYnVmZmVyIGZvciBVU0IgZXhjaGFuZ2VzICovCiAJc3RydWN0IHVyYiAqdXJiW01BWF9OVVJCU107CisjaWZkZWYgQ09ORklHX0lOUFVUCisJc3RydWN0IHVyYiAqaW50X3VyYjsKKyNlbmRpZgogCiAJX191OCAqZnJidWY7CQkJCS8qIGJ1ZmZlciBmb3IgbmZyYW1lcyAqLwogCXN0cnVjdCBnc3BjYV9mcmFtZSBmcmFtZVtHU1BDQV9NQVhfRlJBTUVTXTsKQEAgLTE4Nyw3ICsyMDQsNiBAQAogCWNoYXIgdXNlcnM7CQkJLyogbnVtYmVyIG9mIG9wZW5zICovCiAJY2hhciBwcmVzZW50OwkJCS8qIGRldmljZSBjb25uZWN0ZWQgKi8KIAljaGFyIG5idWZyZWFkOwkJCS8qIG51bWJlciBvZiBidWZmZXJzIGZvciByZWFkKCkgKi8KLQljaGFyIG51cmJzOwkJCS8qIG51bWJlciBvZiBhbGxvY2F0ZWQgVVJCcyAqLwogCWNoYXIgbWVtb3J5OwkJCS8qIG1lbW9yeSB0eXBlIChWNEwyX01FTU9SWV94eHgpICovCiAJX191OCBpZmFjZTsJCQkvKiBVU0IgaW50ZXJmYWNlIG51bWJlciAqLwogCV9fdTggYWx0OwkJCS8qIFVTQiBhbHRlcm5hdGUgc2V0dGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwppbmRleCA4ZDA3MWRmLi5jMDcyMmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwpAQCAtNDgsNyArNDgsNyBAQAogCX0KIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgY3RybCBtdDltMTExX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgbXQ5bTExMV9jdHJsc1tdID0gewogI2RlZmluZSBWRkxJUF9JRFggMAogCXsKIAkJewpAQCAtMTcxLDcgKzE3MSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgbXQ5bTExMSBzZW5zb3IiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlByb2JpbmcgZm9yIGEgbXQ5bTExMSBzZW5zb3IiKTsKIAogCS8qIERvIHRoZSBwcmVpbml0ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9tdDltMTExKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYwppbmRleCAyYTI4Yjc0Li42MmMxY2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmMKQEAgLTMzLDcgKzMzLDcgQEAKIHN0YXRpYyBpbnQgb3Y3NjYwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBvdjc2NjBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBjdHJsIG92NzY2MF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIG92NzY2MF9jdHJsc1tdID0gewogI2RlZmluZSBHQUlOX0lEWCAxCiAJewogCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaAppbmRleCBmNTU4OGViLi40ZDlkY2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmgKQEAgLTk0LDcgKzk0LDcgQEAKIGludCBvdjc2NjBfc3RvcChzdHJ1Y3Qgc2QgKnNkKTsKIHZvaWQgb3Y3NjYwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgbTU2MDJfc2Vuc29yIG92NzY2MCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbTU2MDJfc2Vuc29yIG92NzY2MCA9IHsKIAkubmFtZSA9ICJvdjc2NjAiLAogCS5pMmNfc2xhdmVfaWQgPSAweDQyLAogCS5pMmNfcmVnVyA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYwppbmRleCA5MjNjZGQ1Li4wNjliYTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhbiBvdjk2NTAgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhbiBvdjk2NTAgc2Vuc29yIik7CiAKIAkvKiBSdW4gdGhlIHByZS1pbml0IGJlZm9yZSBwcm9iaW5nIHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X292OTY1MCkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYwppbmRleCA4ZDc0ZDgwLi45MjViODdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhIHBvMTAzMCBzZW5zb3IiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlByb2JpbmcgZm9yIGEgcG8xMDMwIHNlbnNvciIpOwogCiAJLyogUnVuIHRoZSBwcmUtaW5pdCB0byBhY3R1YWxseSBwcm9iZSB0aGUgdW5pdCAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfcG8xMDMwKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwppbmRleCAxYjUzNmY3ZC4uZGEwYTM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiUHJvYmluZyBmb3IgYSBzNWs0YWEgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhIHM1azRhYSBzZW5zb3IiKTsKIAogCS8qIFByZWluaXQgdGhlIHNlbnNvciAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfczVrNGFhKSAmJiAhZXJyOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCmluZGV4IDZiODlmMzMuLmZiZDkxNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgczVrODNhIHNlbnNvciIpOworCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3IgYSBzNWs4M2Egc2Vuc29yIik7CiAKIAkvKiBQcmVpbml0IHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3M1azgzYSkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCmluZGV4IDljZjhkNjguLjNkOTIyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKaW5kZXggOTE1NDg3MC4uMzM3NDRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtNTcsNiArNTcsMTQgQEAKICNkZWZpbmUgTVI5NzMxMEFfR0FJTl9NQVgJCTMxCiAjZGVmaW5lIE1SOTczMTBBX0dBSU5fREVGQVVMVAkJMjUKIAorI2RlZmluZSBNUjk3MzEwQV9DT05UUkFTVF9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfQ09OVFJBU1RfTUFYCQkzMQorI2RlZmluZSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxUCTIzCisKKyNkZWZpbmUgTVI5NzMxMEFfQ1NfR0FJTl9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfQ1NfR0FJTl9NQVgJCTB4N2ZmCisjZGVmaW5lIE1SOTczMTBBX0NTX0dBSU5fREVGQVVMVAkweDExMAorCiAjZGVmaW5lIE1SOTczMTBBX01JTl9DTE9DS0RJVl9NSU4JMwogI2RlZmluZSBNUjk3MzEwQV9NSU5fQ0xPQ0tESVZfTUFYCTgKICNkZWZpbmUgTVI5NzMxMEFfTUlOX0NMT0NLRElWX0RFRkFVTFQJMwpAQCAtODIsNyArOTAsOCBAQAogCiAJaW50IGJyaWdodG5lc3M7CiAJdTE2IGV4cG9zdXJlOwotCXU4IGdhaW47CisJdTMyIGdhaW47CisJdTggY29udHJhc3Q7CiAJdTggbWluX2Nsb2NrZGl2OwogfTsKIApAQCAtOTgsNiArMTA3LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0bWluX2Nsb2NrZGl2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTEwNSwxMSArMTE2LDEzIEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CiBzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOwogc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIC8qIFNlcGFyYXRlIGJyaWdodG5lc3MgY29udHJvbCBkZXNjcmlwdGlvbiBmb3IgQXJndXMgUXVpY2tDbGl4IGFzIGl0IGhhcwotICAgZGlmZmVyZW50IGxpbWl0cyBmcm9tIHRoZSBvdGhlciBtcjk3MzEwYSBjYW1lcmFzICovCisgKiBkaWZmZXJlbnQgbGltaXRzIGZyb20gdGhlIG90aGVyIG1yOTczMTBhIGNhbWVyYXMsIGFuZCBzZXBhcmF0ZSBnYWluCisgKiBjb250cm9sIGZvciBTYWthciBDeWJlclBpeCBjYW1lcmEuICovCiAJewogI2RlZmluZSBOT1JNX0JSSUdIVE5FU1NfSURYIDAKIAkJewpAQCAtMTcxLDcgKzE4NCwzNyBAQAogCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKIAl9LAogCXsKLSNkZWZpbmUgTUlOX0NMT0NLRElWX0lEWCA0CisjZGVmaW5lIFNBS0FSX0NTX0dBSU5fSURYIDQKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkdhaW4iLAorCQkJLm1pbmltdW0gPSBNUjk3MzEwQV9DU19HQUlOX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQ1NfR0FJTl9NQVgsCisJCQkuc3RlcCA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IE1SOTczMTBBX0NTX0dBSU5fREVGQVVMVCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRnYWluLAorCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKKwl9LAorCXsKKyNkZWZpbmUgQ09OVFJBU1RfSURYIDUKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJDb250cmFzdCIsCisJCQkubWluaW11bSA9IE1SOTczMTBBX0NPTlRSQVNUX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQ09OVFJBU1RfTUFYLAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxULAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCQkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisjZGVmaW5lIE1JTl9DTE9DS0RJVl9JRFggNgogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCiAJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0zMjcsNyArMzcwLDYgQEAKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMSk7CiAJZGF0YVswXSA9IDB4MTk7CiAJZGF0YVsxXSA9IDB4NTE7CiAJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDIpOwpAQCAtNDM3LDYgKzQ3OSw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKKwlpbnQgZ2Fpbl9kZWZhdWx0ID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOwogCWludCBlcnJfY29kZTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKQEAgLTQ2MCwxMiArNTAzLDE0IEBACiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCisJLyogTm93LCB0aGUgcXVlcnkgZm9yIHNlbnNvciB0eXBlLiAqLworCWVycl9jb2RlID0gY2FtX2dldF9yZXNwb25zZTE2KGdzcGNhX2RldiwgMHgwNywgMSk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCiAJaWYgKGlkLT5pZFByb2R1Y3QgPT0gMHgwMTEwIHx8IGlkLT5pZFByb2R1Y3QgPT0gMHgwMTBlKSB7CiAJCXNkLT5jYW1fdHlwZSA9IENBTV9UWVBFX0NJRjsKIAkJY2FtLT5ubW9kZXMtLTsKLQkJZXJyX2NvZGUgPSBjYW1fZ2V0X3Jlc3BvbnNlMTYoZ3NwY2FfZGV2LCAweDA2LCAxKTsKLQkJaWYgKGVycl9jb2RlIDwgMCkKLQkJCXJldHVybiBlcnJfY29kZTsKIAkJLyoKIAkJICogQWxsIGJ1dCBvbmUgb2YgdGhlIGtub3duIENJRiBjYW1lcmFzIHNoYXJlIHRoZSBzYW1lIFVTQiBJRCwKIAkJICogYnV0IHR3byBkaWZmZXJlbnQgaW5pdCByb3V0aW5lcyBhcmUgaW4gdXNlLCBhbmQgdGhlIGNvbnRyb2wKQEAgLTQ3MywxMiArNTE4LDEyIEBACiAJCSAqIG9mIHRoZSB0d28ga25vd24gdmFyaWV0aWVzIGlzIGNvbm5lY3RlZCEKIAkJICoKIAkJICogQSBsaXN0IG9mIGtub3duIENJRiBjYW1lcmFzIGZvbGxvd3MuIFRoZXkgYWxsIHJlcG9ydCBlaXRoZXIKLQkJICogMDAwMiBmb3IgdHlwZSAwIG9yIDAwMDMgZm9yIHR5cGUgMS4KKwkJICogMDIwMCBmb3IgdHlwZSAwIG9yIDAzMDAgZm9yIHR5cGUgMS4KIAkJICogSWYgeW91IGhhdmUgYW5vdGhlciB0byByZXBvcnQsIHBsZWFzZSBkbwogCQkgKgogCQkgKiBOYW1lCQlzZC0+c2Vuc29yX3R5cGUJCXJlcG9ydGVkIGJ5CiAJCSAqCi0JCSAqIFNha2FyIFNweS1zaG90CTAJCVQuIEtpbGdvcmUKKwkJICogU2FrYXIgNTYzNzkgU3B5LXNob3QJMAkJVC4gS2lsZ29yZQogCQkgKiBJbm5vdmFnZQkJMAkJVC4gS2lsZ29yZQogCQkgKiBWaXZpdGFyIE1pbmkJCTAJCUguIERlIEdvZWRlCiAJCSAqIFZpdml0YXIgTWluaQkJMAkJRS4gUm9kcmlndWV6CkBAIC00ODcsNyArNTMyLDcgQEAKIAkJICogUGhpbGlwcyBkaWcuIGtleWNoLgkxCQlULiBLaWxnb3JlCiAJCSAqIFRydXN0IFNweWNAbSAxMDAJMQkJQS4gSmFjb2JzCiAJCSAqLwotCQlzd2l0Y2ggKGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSkgeworCQlzd2l0Y2ggKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSkgewogCQljYXNlIDI6CiAJCQlzZC0+c2Vuc29yX3R5cGUgPSAwOwogCQkJYnJlYWs7CkBAIC01MDQsMjAgKzU0OSwxOSBAQAogCX0gZWxzZSB7CiAJCXNkLT5jYW1fdHlwZSA9IENBTV9UWVBFX1ZHQTsKIAotCQllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYsIDB4MDcsIDEpOwotCQlpZiAoZXJyX2NvZGUgPCAwKQotCQkJcmV0dXJuIGVycl9jb2RlOwotCiAJCS8qCi0JCSAqIEhlcmUgaXMgYSB0YWJsZSBvZiB0aGUgcmVzcG9uc2VzIHRvIHRoZSBwcmV2aW91cyBjb21tYW5kCi0JCSAqIGZyb20gdGhlIGtub3duIE1SOTczMTBBIFZHQSBjYW1lcmFzLgorCQkgKiBIZXJlIGlzIGEgdGFibGUgb2YgdGhlIHJlc3BvbnNlcyB0byB0aGUgcXVlcnkgZm9yIHNlbnNvcgorCQkgKiB0eXBlLCBmcm9tIHRoZSBrbm93biBNUjk3MzEwQSBWR0EgY2FtZXJhcy4gU2l4IGRpZmZlcmVudAorCQkgKiBjYW1lcmFzIG9mIHdoaWNoIGZpdmUgc2hhcmUgdGhlIHNhbWUgVVNCIElELgogCQkgKgogCQkgKiBOYW1lCQkJZ3NwY2FfZGV2LT51c2JfYnVmW10Jc2QtPnNlbnNvcl90eXBlCiAJCSAqCQkJCXNkLT5kb19sY2Rfc3RvcAogCQkgKiBBaXB0ZWsgUGVuY2FtIFZHQSsJMDMwMAkJMAkJMQotCQkgKiBJT04gZGlnaXRhbAkJMDM1MAkJMAkJMQorCQkgKiBJT04gZGlnaXRhbAkJMDMwMAkJMAkJMQogCQkgKiBBcmd1cyBEQy0xNjIwCTA0NTAJCTEJCTAKIAkJICogQXJndXMgUXVpY2tDbGl4CTA0MjAJCTEJCTEKKwkJICogU2FrYXIgNzczNzkgRGlnaXRhbAkwMzUwCQkwCQkxCisJCSAqIFNha2FyIDE2Mzh4IEN5YmVyUGl4CTAxMjAJCTAJCTIKIAkJICoKIAkJICogQmFzZWQgdXBvbiB0aGVzZSByZXN1bHRzLCB3ZSBhc3N1bWUgZGVmYXVsdCBzZXR0aW5ncwogCQkgKiBhbmQgdGhlbiBjb3JyZWN0IGFzIG5lY2Vzc2FyeSwgYXMgZm9sbG93cy4KQEAgLTUyNywxMCArNTcxLDEyIEBACiAJCXNkLT5zZW5zb3JfdHlwZSA9IDE7CiAJCXNkLT5kb19sY2Rfc3RvcCA9IDA7CiAJCXNkLT5hZGpfY29sb3JzID0gMDsKLQkJaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwMykgJiYKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAxKSB7CisJCQlzZC0+c2Vuc29yX3R5cGUgPSAyOworCQl9IGVsc2UgaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwMykgJiYKIAkJCQkJKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAweDA0KSkgewogCQkJUERFQlVHKERfRVJSLCAiVW5rbm93biBWR0EgU2Vuc29yIGlkIEJ5dGUgMDogJTAyeCIsCi0JCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSk7CisJCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CiAJCQlQREVCVUcoRF9FUlIsICJEZWZhdWx0cyBhc3N1bWVkLCBtYXkgbm90IHdvcmsiKTsKIAkJCVBERUJVRyhEX0VSUiwgIlBsZWFzZSByZXBvcnQgdGhpcyIpOwogCQl9CkBAIC01NjAsNyArNjA2LDcgQEAKIAkJUERFQlVHKERfUFJPQkUsICJNUjk3MzEwQSBWR0EgY2FtZXJhIGRldGVjdGVkLCBzZW5zb3I6ICVkIiwKIAkJICAgICAgIHNkLT5zZW5zb3JfdHlwZSk7CiAJfQotCS8qIFN0b3Agc3RyZWFtaW5nIGFzIHdlJ3ZlIHN0YXJ0ZWQgaXQgdG8gcHJvYmUgdGhlIHNlbnNvciB0eXBlLiAqLworCS8qIFN0b3Agc3RyZWFtaW5nIGFzIHdlJ3ZlIHN0YXJ0ZWQgaXQgb25seSB0byBwcm9iZSB0aGUgc2Vuc29yIHR5cGUuICovCiAJc2Rfc3RvcE4oZ3NwY2FfZGV2KTsKIAogCWlmIChmb3JjZV9zZW5zb3JfdHlwZSAhPSAtMSkgewpAQCAtNTc0LDkgKzYyMCwxMyBAQAogCQkvKiBObyBicmlnaHRuZXNzIGZvciBzZW5zb3JfdHlwZSAwICovCiAJCWlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMCkKIAkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8Ci0JCQkJCSAgICAgICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKTsKKwkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IFNBS0FSX0NTX0dBSU5fSURYKTsKIAkJZWxzZQogCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBNSU5fQ0xPQ0tESVZfSURYKTsKIAl9IGVsc2UgewogCQkvKiBBbGwgY29udHJvbHMgbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBWR0Egc2Vuc29yX3R5cGUgaXMgMCAqLwpAQCAtNTg1LDE3ICs2MzUsMzAgQEAKIAkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKIAkJCQkJICAgICAgKDEgPDwgRVhQT1NVUkVfSURYKSB8CiAJCQkJCSAgICAgICgxIDw8IEdBSU5fSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBNSU5fQ0xPQ0tESVZfSURYKTsKLQkJZWxzZSBpZiAoc2QtPmRvX2xjZF9zdG9wKQorCQllbHNlIGlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMikgeworCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IE5PUk1fQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgR0FJTl9JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgTUlOX0NMT0NLRElWX0lEWCk7CisJCQlnYWluX2RlZmF1bHQgPSBNUjk3MzEwQV9DU19HQUlOX0RFRkFVTFQ7CisJCX0gZWxzZSBpZiAoc2QtPmRvX2xjZF9zdG9wKQogCQkJLyogQXJndXMgUXVpY2tDbGl4IGhhcyBkaWZmZXJlbnQgYnJpZ2h0bmVzcyBsaW1pdHMgKi8KLQkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKTsKKwkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCk7CiAJCWVsc2UKLQkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBBUkdVU19RQ19CUklHSFRORVNTX0lEWCk7CisJCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IFNBS0FSX0NTX0dBSU5fSURYKTsKIAl9CiAKIAlzZC0+YnJpZ2h0bmVzcyA9IE1SOTczMTBBX0JSSUdIVE5FU1NfREVGQVVMVDsKIAlzZC0+ZXhwb3N1cmUgPSBNUjk3MzEwQV9FWFBPU1VSRV9ERUZBVUxUOwotCXNkLT5nYWluID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOworCXNkLT5nYWluID0gZ2Fpbl9kZWZhdWx0OworCXNkLT5jb250cmFzdCA9IE1SOTczMTBBX0NPTlRSQVNUX0RFRkFVTFQ7CiAJc2QtPm1pbl9jbG9ja2RpdiA9IE1SOTczMTBBX01JTl9DTE9DS0RJVl9ERUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC02OTcsNiArNzYwLDEyIEBACiAJCQl7MHgxMywgMHgwMCwgezB4MDF9LCAxfSwKIAkJCXswLCAwLCB7MH0sIDB9CiAJCX07CisJCS8qIFdpdGhvdXQgdGhpcyBjb21tYW5kIHRoZSBjYW0gd29uJ3Qgd29yayB3aXRoIFVTQi1VSENJICovCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4MGE7CisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDB4MDA7CisJCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIGNpZl9zZW5zb3IxX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUoY2lmX3NlbnNvcjFfaW5pdF9kYXRhKSk7CiAJfQpAQCAtNzE3LDYgKzc4NiwxMCBAQAogCQlkYXRhWzVdICA9IDB4MDA7CiAJCWRhdGFbMTBdID0gMHg5MTsKIAl9CisJaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCWRhdGFbNV0gID0gMHgwMDsKKwkJZGF0YVsxMF0gPSAweDE4OworCX0KIAogCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgewogCWNhc2UgMTYwOgpAQCAtNzMxLDYgKzgwNCwxMCBAQAogCQlkYXRhWzRdID0gMHg3ODsgIC8qIHJlZyAzLCBWIHNpemUvNCAqLwogCQlkYXRhWzZdID0gMHgwNDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCiAJCWRhdGFbOF0gPSAweDAzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCQlkYXRhWzZdID0gMjsKKwkJCWRhdGFbOF0gPSAxOworCQl9CiAJCWlmIChzZC0+ZG9fbGNkX3N0b3ApCiAJCQlkYXRhWzhdID0gMHgwNDsgIC8qIEJheWVyIHRpbGUgc2hpZnRlZCAqLwogCQlicmVhazsKQEAgLTc1Myw3ICs4MzAsNiBAQAogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlpZiAoIXNkLT5zZW5zb3JfdHlwZSkgewotCQkvKiBUaGUgb25seSBrbm93biBzZW5zb3JfdHlwZSAwIGNhbSBpcyB0aGUgQXJndXMgREMtMTYyMCAqLwogCQljb25zdCBzdHJ1Y3Qgc2Vuc29yX3dfZGF0YSB2Z2Ffc2Vuc29yMF9pbml0X2RhdGFbXSA9IHsKIAkJCXsweDAxLCAweDAwLCB7MHgwYywgMHgwMCwgMHgwNH0sIDN9LAogCQkJezB4MTQsIDB4MDAsIHsweDAxLCAweGU0LCAweDAyLCAweDg0fSwgNH0sCkBAIC03NjQsNyArODQwLDcgQEAKIAkJfTsKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IwX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjBfaW5pdF9kYXRhKSk7Ci0JfSBlbHNlIHsJLyogc2QtPnNlbnNvcl90eXBlID0gMSAqLworCX0gZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDEpIHsKIAkJY29uc3Qgc3RydWN0IHNlbnNvcl93X2RhdGEgY29sb3JfYWRqW10gPSB7CiAJCQl7MHgwMiwgMHgwMCwgezB4MDYsIDB4NTksIDB4MGMsIDB4MTYsIDB4MDAsCiAJCQkJLyogYWRqdXN0ZWQgYmx1ZSwgZ3JlZW4sIHJlZCBnYWluIGNvcnJlY3QKQEAgLTgwMiw2ICs4NzgsNDggQEAKIAogCQllcnJfY29kZSA9IHNlbnNvcl93cml0ZV9yZWdzKGdzcGNhX2RldiwgdmdhX3NlbnNvcjFfaW5pdF9kYXRhLAogCQkJCQkgQVJSQVlfU0laRSh2Z2Ffc2Vuc29yMV9pbml0X2RhdGEpKTsKKwl9IGVsc2UgewkvKiBzZW5zb3IgdHlwZSA9PSAyICovCisJCWNvbnN0IHN0cnVjdCBzZW5zb3Jfd19kYXRhIHZnYV9zZW5zb3IyX2luaXRfZGF0YVtdID0geworCisJCQl7MHgwMSwgMHgwMCwgezB4NDh9LCAxfSwKKwkJCXsweDAyLCAweDAwLCB7MHgyMn0sIDF9LAorCQkJLyogUmVnIDMgbXNiIGFuZCA0IGlzIGxzYiBvZiB0aGUgZXhwb3N1cmUgc2V0dGluZyovCisJCQl7MHgwNSwgMHgwMCwgezB4MTB9LCAxfSwKKwkJCXsweDA2LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MDcsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgwOCwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCXsweDA5LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJLyogVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBpbiB0aGUgZ2FpbiBjb250cm9sCisJCQkgKiB3aGljaCBpcyBCVFcgY29tcGxldGVseSBib3JrZWQgaW4gdGhlIE9FTSBkcml2ZXIKKwkJCSAqIFRoZSB2YWx1ZXMgZm9yIGVhY2ggY29sb3IgZ28gZnJvbSAwIHRvIDB4N2ZmCisJCQkgKnsweDBhLCAweDAwLCB7MHgwMX0sIDF9LCAgZ3JlZW4xIGdhaW4gbXNiCisJCQkgKnsweDBiLCAweDAwLCB7MHgxMH0sIDF9LCAgZ3JlZW4xIGdhaW4gbHNiCisJCQkgKnsweDBjLCAweDAwLCB7MHgwMX0sIDF9LCAgcmVkIGdhaW4gbXNiCisJCQkgKnsweDBkLCAweDAwLCB7MHgxMH0sIDF9LCAgcmVkIGdhaW4gbHNiCisJCQkgKnsweDBlLCAweDAwLCB7MHgwMX0sIDF9LCAgYmx1ZSBnYWluIG1zYgorCQkJICp7MHgwZiwgMHgwMCwgezB4MTB9LCAxfSwgIGJsdWUgZ2FpbiBsc2IKKwkJCSAqezB4MTAsIDB4MDAsIHsweDAxfSwgMX0sIGdyZWVuMiBnYWluIG1zYgorCQkJICp7MHgxMSwgMHgwMCwgezB4MTB9LCAxfSwgZ3JlZW4yIGdhaW4gbHNiCisJCQkgKi8KKwkJCXsweDEyLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTMsIDB4MDAsIHsweDA0fSwgMX0sIC8qIHdlaXJkIGVmZmVjdCBvbiBjb2xvcnMgKi8KKwkJCXsweDE0LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTUsIDB4MDAsIHsweDA2fSwgMX0sCisJCQl7MHgxNiwgMHgwMCwgezB4MDF9LCAxfSwKKwkJCXsweDE3LCAweDAwLCB7MHhlMn0sIDF9LCAvKiB2ZXJ0aWNhbCBhbGlnbm1lbnQgKi8KKwkJCXsweDE4LCAweDAwLCB7MHgwMn0sIDF9LAorCQkJezB4MTksIDB4MDAsIHsweDgyfSwgMX0sIC8qIGRvbid0IG1lc3Mgd2l0aCAqLworCQkJezB4MWEsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgxYiwgMHgwMCwgezB4MjB9LCAxfSwKKwkJCS8qIHsweDFjLCAweDAwLCB7MHgxN30sIDF9LCBjb250cmFzdCBjb250cm9sICovCisJCQl7MHgxZCwgMHgwMCwgezB4ODB9LCAxfSwgLyogbW92aW5nIGNhdXNlcyBhIG1lc3MgKi8KKwkJCXsweDFlLCAweDAwLCB7MHgwOH0sIDF9LCAvKiBtb3ZpbmcgamFtcyB0aGUgY2FtZXJhICovCisJCQl7MHgxZiwgMHgwMCwgezB4MGN9LCAxfSwKKwkJCXsweDIwLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezAsIDAsIHswfSwgMH0KKwkJfTsKKwkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IyX2luaXRfZGF0YSwKKwkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjJfaW5pdF9kYXRhKSk7CiAJfQogCXJldHVybiBlcnJfY29kZTsKIH0KQEAgLTgzNCw2ICs5NTIsNyBAQAogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlzZXRleHBvc3VyZShnc3BjYV9kZXYpOwogCXNldGdhaW4oZ3NwY2FfZGV2KTsKIApAQCAtODkzLDcgKzEwMTIsNyBAQAogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgZXhwb3N1cmU7CisJaW50IGV4cG9zdXJlID0gTVI5NzMxMEFfRVhQT1NVUkVfREVGQVVMVDsKIAl1OCBidWZbMl07CiAKIAlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEVYUE9TVVJFX0lEWCkpCkBAIC05MDUsNiArMTAyNCwxMSBAQAogCQlleHBvc3VyZSA9IChzZC0+ZXhwb3N1cmUgKiA5MjY3KSAvIDEwMDAwICsgMzAwOwogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMywgZXhwb3N1cmUgPj4gNCk7CiAJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCBleHBvc3VyZSAmIDB4MGYpOworCX0gZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDIpIHsKKwkJZXhwb3N1cmUgPSBzZC0+ZXhwb3N1cmU7CisJCWV4cG9zdXJlID4+PSAzOworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMywgZXhwb3N1cmUgPj4gOCk7CisJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCBleHBvc3VyZSAmIDB4ZmYpOwogCX0gZWxzZSB7CiAJCS8qIFdlIGhhdmUgYm90aCBhIGNsb2NrIGRpdmlkZXIgYW5kIGFuIGV4cG9zdXJlIHJlZ2lzdGVyLgogCQkgICBXZSBmaXJzdCBjYWxjdWxhdGUgdGhlIGNsb2NrIGRpdmlkZXIsIGFzIHRoYXQgZGV0ZXJtaW5lcwpAQCAtOTQzLDE3ICsxMDY3LDM0IEBACiBzdGF0aWMgdm9pZCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZ2FpbnJlZzsKIAotCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgR0FJTl9JRFgpKQorCWlmICgoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEdBSU5fSURYKSkgJiYKKwkgICAgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkpKQogCQlyZXR1cm47CiAKLQlpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX0NJRiAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMSkgeworCWlmIChzZC0+Y2FtX3R5cGUgPT0gQ0FNX1RZUEVfQ0lGICYmIHNkLT5zZW5zb3JfdHlwZSA9PSAxKQogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgwZSwgc2QtPmdhaW4pOwotCX0gZWxzZSB7CisJZWxzZSBpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX1ZHQSAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMikKKwkJZm9yIChnYWlucmVnID0gMHgwYTsgZ2FpbnJlZyA8IDB4MTE7IGdhaW5yZWcgKz0gMikgeworCQkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIGdhaW5yZWcsIHNkLT5nYWluID4+IDgpOworCQkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIGdhaW5yZWcgKyAxLCBzZC0+Z2FpbiAmIDB4ZmYpOworCQl9CisJZWxzZQogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4pOwotCX0KIH0KIAorc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQ09OVFJBU1RfSURYKSkKKwkJcmV0dXJuOworCisJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDB4MWMsIHNkLT5jb250cmFzdCk7Cit9CisKKwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEwMDgsNiArMTE0OSwyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9zZXRtaW5fY2xvY2tkaXYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IGI0Zjk2NTcuLmJjNGNlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTM4LDYgKzM4LDcgQEAKICAqLwogI2RlZmluZSBNT0RVTEVfTkFNRSAib3Y1MTkiCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAKIE1PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CkBAIC03MCw2ICs3MSw5IEBACiAJY2hhciBpbnZlcnRfbGVkOwogI2RlZmluZSBCUklER0VfSU5WRVJUX0xFRAk4CiAKKwljaGFyIHNuYXBzaG90X3ByZXNzZWQ7CisJY2hhciBzbmFwc2hvdF9uZWVkc19yZXNldDsKKwogCS8qIERldGVybWluZWQgYnkgc2Vuc29yIHR5cGUgKi8KIAlfX3U4IHNpZjsKIApAQCAtOTksMTAgKzEwMywxMiBAQAogI2RlZmluZSBTRU5fT1Y2NjMwOEFGIDUKICNkZWZpbmUgU0VOX09WNzYxMCA2CiAjZGVmaW5lIFNFTl9PVjc2MjAgNwotI2RlZmluZSBTRU5fT1Y3NjQwIDgKLSNkZWZpbmUgU0VOX09WNzY3MCA5Ci0jZGVmaW5lIFNFTl9PVjc2QkUgMTAKLSNkZWZpbmUgU0VOX09WODYxMCAxMQorI2RlZmluZSBTRU5fT1Y3NjIwQUUgOAorI2RlZmluZSBTRU5fT1Y3NjQwIDkKKyNkZWZpbmUgU0VOX09WNzY0OCAxMAorI2RlZmluZSBTRU5fT1Y3NjcwIDExCisjZGVmaW5lIFNFTl9PVjc2QkUgMTIKKyNkZWZpbmUgU0VOX09WODYxMCAxMwogCiAJdTggc2Vuc29yX2FkZHI7CiAJaW50IHNlbnNvcl93aWR0aDsKQEAgLTEzOSw2ICsxNDUsNyBAQAogc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3Qgc2QgKnNkKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMTUzLDYgKzE2MCw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKIAl9LAorI2RlZmluZSBDT05UUkFTVF9JRFggMQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULApAQCAtMTY3LDYgKzE3NSw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCX0sCisjZGVmaW5lIENPTE9SX0lEWCAyCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKQEAgLTI1NTQsNyArMjU2Myw3IEBACiAJCS8qIEkgZG9uJ3Qga25vdyB3aGF0J3MgZGlmZmVyZW50IGFib3V0IHRoZSA3NkJFIHlldC4gKi8KIAkJaWYgKGkyY19yKHNkLCAweDE1KSAmIDEpIHsKIAkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNzYyMEFFIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOX09WNzYyMDsKKwkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjIwQUU7CiAJCX0gZWxzZSB7CiAJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2QkUiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NkJFOwpAQCAtMjU4OCw3ICsyNTk3LDcgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgMHg0ODoKIAkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2NDgiKTsKLQkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0MDsgLyogRklYTUUgKi8KKwkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0ODsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvcjogMHg3NiV4IiwgbG93KTsKQEAgLTI2ODAsNiArMjY4OSwzNiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2RfcmVzZXRfc25hcHNob3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmICghc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0KQorCQlyZXR1cm47CisKKwkvKiBOb3RlIGl0IGlzIGltcG9ydGFudCB0aGF0IHdlIGNsZWFyIHNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCwKKwkgICBiZWZvcmUgYWN0dWFsbHkgY2xlYXJpbmcgdGhlIHNuYXBzaG90IHN0YXRlIGluIHRoZSBicmlkZ2UKKwkgICBvdGhlcndpc2Ugd2UgbWlnaHQgcmFjZSB3aXRoIHRoZSBwa3Rfc2NhbiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDA7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9PVjUxMToKKwljYXNlIEJSSURHRV9PVjUxMVBMVVM6CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAyKTsKKwkJcmVnX3coc2QsIFI1MXhfU1lTX1NOQVAsIDB4MDApOworCQlicmVhazsKKwljYXNlIEJSSURHRV9PVjUxODoKKwljYXNlIEJSSURHRV9PVjUxOFBMVVM6CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAyKTsgLyogUmVzZXQgKi8KKwkJcmVnX3coc2QsIFI1MXhfU1lTX1NOQVAsIDB4MDEpOyAvKiBFbmFibGUgKi8KKwkJYnJlYWs7CisJY2FzZSBCUklER0VfT1Y1MTk6CisJCXJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHg0MCk7CisJCXJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHgwMCk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBvdjUxeF91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHNkICpzZCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyIHlRdWFuVGFibGU1MTFbXSA9IHsKQEAgLTMxMTUsNyArMzE1NCwxMSBAQAogCQkJCSAgICAgICgxIDw8IE9WNzY3MF9GUkVRX0lEWCk7CiAJfQogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2NzApCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fAorCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDgpCisJCWdzcGNhX2Rldi0+Y3RybF9kaXMgfD0gKDEgPDwgQVVUT0JSSUdIVF9JRFgpIHwKKwkJCQkgICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwKQogCQlnc3BjYV9kZXYtPmN0cmxfZGlzIHw9IDEgPDwgQVVUT0JSSUdIVF9JRFg7CiAJLyogT1Y4NjEwIEZyZXF1ZW5jeSBmaWx0ZXIgY29udHJvbCBzaG91bGQgd29yayBidXQgbmVlZHMgdGVzdGluZyAqLwogCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjg2MTApCkBAIC0zMTY5LDEwICszMjEyLDEyIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzYyMCwgQVJSQVlfU0laRShub3JtXzc2MjApKSkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzY0MCwgQVJSQVlfU0laRShub3JtXzc2NDApKSkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKQEAgLTMyNDYsNyArMzI5MSw5IEBACiAJLyogTm90ZSBvbmNlIHRoZSBGSVhNRSdzIGluIG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncygpIGFyZSBmaXhlZAogCSAgIGZvciBtb3JlIHNlbnNvcnMgd2UgbmVlZCB0byBkbyB0aGlzIGZvciB0aGVtIHRvbyAqLwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCWNhc2UgU0VOX09WNzZCRToKIAkJaWYgKHNkLT5nc3BjYV9kZXYud2lkdGggPT0gMzIwKQogCQkJaW50ZXJsYWNlZCA9IDE7CkBAIC0zMzc3LDcgKzM0MjQsNyBAQAogCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX09WNTE4UExVUykgewogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQkJY2FzZSBTRU5fT1Y3NjIwOgorCQljYXNlIFNFTl9PVjc2MjBBRToKIAkJCWlmIChzZC0+Z3NwY2FfZGV2LndpZHRoID09IDMyMCkgewogCQkJCXJlZ193KHNkLCAweDIwLCAweDAwKTsKIAkJCQlyZWdfdyhzZCwgMHgyMSwgMHgxOSk7CkBAIC0zMzg2LDYgKzM0MzMsMTAgQEAKIAkJCQlyZWdfdyhzZCwgMHgyMSwgMHgxZik7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBTRU5fT1Y3NjIwOgorCQkJcmVnX3coc2QsIDB4MjAsIDB4MDApOworCQkJcmVnX3coc2QsIDB4MjEsIDB4MTkpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZWdfdyhzZCwgMHgyMSwgMHgxOSk7CiAJCX0KQEAgLTM0ODgsNyArMzUzOSw4IEBACiAJCWlmICh3cml0ZV9yZWd2YWxzKHNkLCBtb2RlX2luaXRfNTE5LAogCQkJCSAgQVJSQVlfU0laRShtb2RlX2luaXRfNTE5KSkpCiAJCQlyZXR1cm4gLUVJTzsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCkgeworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQwIHx8CisJCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDgpIHsKIAkJCS8qIFNlbGVjdCA4LWJpdCBpbnB1dCBtb2RlICovCiAJCQlyZWdfd19tYXNrKHNkLCBPVjUxOV9SMjBfREZSLCAweDEwLCAweDEwKTsKIAkJfQpAQCAtMzUwMyw2ICszNTU1LDkgQEAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwICYmCiAJICAgIHNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQogCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwNCk7CisJZWxzZSBpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQ4ICYmCisJICAgIHNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQorCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwMSk7CiAJZWxzZQogCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwMCk7CiAJcmVnX3coc2QsIE9WNTE5X1IxM19YX09GRlNFVEgsCTB4MDApOwpAQCAtMzUyMCw2ICszNTc1LDcgQEAKIAlzZC0+Y2xvY2tkaXYgPSAwOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCXN3aXRjaCAoc2QtPmZyYW1lX3JhdGUpIHsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDMwOiAqLwpAQCAtMzY0OSw2ICszNzA1LDcgQEAKIAkJaTJjX3dfbWFzayhzZCwgMHgxMiwgMHgwNCwgMHgwNik7IC8qIEFXQjogMSBUZXN0IHBhdHRlcm46IDAgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCWNhc2UgU0VOX09WNzZCRToKIAkJaTJjX3dfbWFzayhzZCwgMHgxNCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKIAkJaTJjX3dfbWFzayhzZCwgMHgyOCwgcXZnYSA/IDB4MDAgOiAweDIwLCAweDIwKTsKQEAgLTM2NjMsMTMgKzM3MjAsMTYgQEAKIAkJCWkyY193KHNkLCAweDM1LCBxdmdhID8gMHgxZSA6IDB4OWUpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfd19tYXNrKHNkLCAweDE0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOwogCQlpMmNfd19tYXNrKHNkLCAweDI4LCBxdmdhID8gMHgwMCA6IDB4MjAsIDB4MjApOwotLyoJCWkyY193KHNkLCAweDI0LCBxdmdhID8gMHgyMCA6IDB4M2EpOyAqLwotLyoJCWkyY193KHNkLCAweDI1LCBxdmdhID8gMHgzMCA6IDB4NjApOyAqLwotLyoJCWkyY193X21hc2soc2QsIDB4MmQsIHF2Z2EgPyAweDQwIDogMHgwMCwgMHg0MCk7ICovCi0vKgkJaTJjX3dfbWFzayhzZCwgMHg2NywgcXZnYSA/IDB4ZjAgOiAweDkwLCAweGYwKTsgKi8KLS8qCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOyAqLworCQkvKiBTZXR0aW5nIHRoaXMgdW5kb2N1bWVudGVkIGJpdCBpbiBxdmdhIG1vZGUgcmVtb3ZlcyBhIHZlcnkKKwkJICAgYW5ub3lpbmcgdmVydGljYWwgc2hha2luZyBvZiB0aGUgaW1hZ2UgKi8KKwkJaTJjX3dfbWFzayhzZCwgMHgyZCwgcXZnYSA/IDB4NDAgOiAweDAwLCAweDQwKTsKKwkJLyogVW5rbm93biAqLworCQlpMmNfd19tYXNrKHNkLCAweDY3LCBxdmdhID8gMHhmMCA6IDB4OTAsIDB4ZjApOworCQkvKiBBbGxvdyBoaWdoZXIgYXV0b21hdGljIGdhaW4gKHRvIGFsbG93IGhpZ2hlciBmcmFtZXJhdGVzKSAqLworCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOwogCQlpMmNfd19tYXNrKHNkLCAweDEyLCAweDA0LCAweDA0KTsgLyogQVdCOiAxICovCiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzY3MDoKQEAgLTM3OTUsMTEgKzM4NTUsMTMgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NjIwQUU6CiAJCWh3c2Jhc2UgPSAweDJmOwkJLyogRnJvbSA3NjIwLlNFVCAoc3BlYyBpcyB3cm9uZykgKi8KIAkJaHdlYmFzZSA9IDB4MmY7CiAJCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwNTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjQwOgorCWNhc2UgU0VOX09WNzY0ODoKIAkJaHdzYmFzZSA9IDB4MWE7CiAJCWh3ZWJhc2UgPSAweDFhOwogCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDM7CkBAIC0zODkzLDYgKzM5NTUsMTIgQEAKIAlzZXRhdXRvYnJpZ2h0bmVzcyhzZCk7CiAJc2V0ZnJlcShzZCk7CiAKKwkvKiBGb3JjZSBjbGVhciBzbmFwc2hvdCBzdGF0ZSBpbiBjYXNlIHRoZSBzbmFwc2hvdCBidXR0b24gd2FzCisJICAgcHJlc3NlZCB3aGlsZSB3ZSB3ZXJlbid0IHN0cmVhbWluZyAqLworCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDE7CisJc2RfcmVzZXRfc25hcHNob3QoZ3NwY2FfZGV2KTsKKwlzZC0+c25hcHNob3RfcHJlc3NlZCA9IDA7CisKIAlyZXQgPSBvdjUxeF9yZXN0YXJ0KHNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CkBAIC0zOTE5LDYgKzM5ODcsMzQgQEAKIAkJdzk5NjhjZl9zdG9wMChzZCk7CiB9CiAKK3N0YXRpYyB2b2lkIG92NTF4X2hhbmRsZV9idXR0b24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoc2QtPnNuYXBzaG90X3ByZXNzZWQgIT0gc3RhdGUpIHsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgc3RhdGUpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKyNlbmRpZgorCQlpZiAoc3RhdGUpCisJCQlzZC0+c25hcHNob3RfbmVlZHNfcmVzZXQgPSAxOworCisJCXNkLT5zbmFwc2hvdF9wcmVzc2VkID0gc3RhdGU7CisJfSBlbHNlIHsKKwkJLyogT24gdGhlIG92NTExIC8gb3Y1MTkgd2UgbmVlZCB0byByZXNldCB0aGUgYnV0dG9uIHN0YXRlCisJCSAgIG11bHRpcGxlIHRpbWVzLCBhcyByZXNldHRpbmcgZG9lcyBub3Qgd29yayBhcyBsb25nIGFzIHRoZQorCQkgICBidXR0b24gc3RheXMgcHJlc3NlZCAqLworCQlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwkJY2FzZSBCUklER0VfT1Y1MTE6CisJCWNhc2UgQlJJREdFX09WNTExUExVUzoKKwkJY2FzZSBCUklER0VfT1Y1MTk6CisJCQlpZiAoc3RhdGUpCisJCQkJc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBvdjUxMV9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCAqaW4sCQkJLyogaXNvYyBwYWNrZXQgKi8KIAkJCWludCBsZW4pCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwpAQCAtMzk0MCw2ICs0MDM2LDcgQEAKIAkgKi8KIAlpZiAoIShpblswXSB8IGluWzFdIHwgaW5bMl0gfCBpblszXSB8IGluWzRdIHwgaW5bNV0gfCBpbls2XSB8IGluWzddKSAmJgogCSAgICAoaW5bOF0gJiAweDA4KSkgeworCQlvdjUxeF9oYW5kbGVfYnV0dG9uKGdzcGNhX2RldiwgKGluWzhdID4+IDIpICYgMSk7CiAJCWlmIChpbls4XSAmIDB4ODApIHsKIAkJCS8qIEZyYW1lIGVuZCAqLwogCQkJaWYgKChpbls5XSArIDEpICogOCAhPSBnc3BjYV9kZXYtPndpZHRoIHx8CkBAIC0zOTc3LDYgKzQwNzQsNyBAQAogCS8qIEEgZmFsc2UgcG9zaXRpdmUgaGVyZSBpcyBsaWtlbHksIHVudGlsIE9WVCBnaXZlcyBtZQogCSAqIHRoZSBkZWZpbml0aXZlIFNPRi9FT0YgZm9ybWF0ICovCiAJaWYgKCghKGRhdGFbMF0gfCBkYXRhWzFdIHwgZGF0YVsyXSB8IGRhdGFbM10gfCBkYXRhWzVdKSkgJiYgZGF0YVs2XSkgeworCQlvdjUxeF9oYW5kbGVfYnV0dG9uKGdzcGNhX2RldiwgKGRhdGFbNl0gPj4gMSkgJiAxKTsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlzZC0+cGFja2V0X25yID0gMDsKQEAgLTQwMjQsNiArNDEyMiw5IEBACiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZmYgJiYgZGF0YVsyXSA9PSAweGZmKSB7CiAJCXN3aXRjaCAoZGF0YVszXSkgewogCQljYXNlIDB4NTA6CQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQkJLyogRG9uJ3QgY2hlY2sgdGhlIGJ1dHRvbiBzdGF0ZSBoZXJlLCBhcyB0aGUgc3RhdGUKKwkJCSAgIHVzdWFsbHkgKGFsd2F5cyA/KSBjaGFuZ2VzIGF0IEVPRiBhbmQgY2hlY2tpbmcgaXQKKwkJCSAgIGhlcmUgbGVhZHMgdG8gdW5uZWNlc3Nhcnkgc25hcHNob3Qgc3RhdGUgcmVzZXRzLiAqLwogI2RlZmluZSBIRFJTWiAxNgogCQkJZGF0YSArPSBIRFJTWjsKIAkJCWxlbiAtPSBIRFJTWjsKQEAgLTQwMzUsNiArNDEzNiw3IEBACiAJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCQlyZXR1cm47CiAJCWNhc2UgMHg1MToJCS8qIGVuZCBvZiBmcmFtZSAqLworCQkJb3Y1MXhfaGFuZGxlX2J1dHRvbihnc3BjYV9kZXYsIGRhdGFbMTFdICYgMSk7CiAJCQlpZiAoZGF0YVs5XSAhPSAwKQogCQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwogCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCkBAIC00MTAzLDkgKzQyMDUsMTEgQEAKIAljYXNlIFNFTl9PVjY2MzA6CiAJY2FzZSBTRU5fT1Y2NjMwOEFGOgogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQkvKiA3NjIwIGRvZXNuJ3QgbGlrZSBtYW51YWwgY2hhbmdlcyB3aGVuIGluIGF1dG8gbW9kZSAqLwogCQlpZiAoIXNkLT5hdXRvYnJpZ2h0bmVzcykKIAkJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKQEAgLTQxNDIsNyArNDI0Niw4IEBACiAJCWkyY193KHNkLCAweDY0LCBjdGFiW3ZhbCA+PiA1XSk7CiAJCWJyZWFrOwogCSAgICB9Ci0JY2FzZSBTRU5fT1Y3NjIwOiB7CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOiB7CiAJCXN0YXRpYyBjb25zdCBfX3U4IGN0YWJbXSA9IHsKIAkJCTB4MDEsIDB4MDUsIDB4MDksIDB4MTEsIDB4MTUsIDB4MzUsIDB4MzcsIDB4NTcsCiAJCQkweDViLCAweGE1LCAweGE3LCAweGM3LCAweGM5LCAweGNmLCAweGVmLCAweGZmCkBAIC00MTUyLDEwICs0MjU3LDYgQEAKIAkJaTJjX3coc2QsIDB4NjQsIGN0YWJbdmFsID4+IDRdKTsKIAkJYnJlYWs7CiAJICAgIH0KLQljYXNlIFNFTl9PVjc2NDA6Ci0JCS8qIFVzZSBnYWluIGNvbnRyb2wgaW5zdGVhZC4gKi8KLQkJaTJjX3coc2QsIE9WNzYxMF9SRUdfR0FJTiwgdmFsID4+IDIpOwotCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CiAJCS8qIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBqdXN0IHRoZSBzYW1lIGFzIG92NzYxMCAqLwogCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19DT05UUkFTLCB2YWwgPj4gMSk7CkBAIC00MTc5LDYgKzQyODAsNyBAQAogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAkJLyogVXNlIFVWIGdhbW1hIGNvbnRyb2wgaW5zdGVhZC4gQml0cyAwICYgNyBhcmUgcmVzZXJ2ZWQuICovCiAvKgkJcmMgPSBvdl9pMmNfd3JpdGUoc2QtPmRldiwgMHg2MiwgKHZhbCA+PiA5KSAmIDB4N2UpOwogCQlpZiAocmMgPCAwKQpAQCAtNDE4Niw2ICs0Mjg4LDcgQEAKIAkJaTJjX3coc2QsIE9WNzYxMF9SRUdfU0FULCB2YWwpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCAmIDB4ZjApOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CkBAIC00MTk4LDcgKzQzMDEsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXRhdXRvYnJpZ2h0bmVzcyhzdHJ1Y3Qgc2QgKnNkKQogewotCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwIHx8CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDggfHwKKwkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwIHx8CiAJICAgIHNkLT5zZW5zb3IgPT0gU0VOX09WMjYxMCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjM2MTApCiAJCXJldHVybjsKIApAQCAtNDQ3NSw5ICs0NTc5LDEzIEBACiAJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfcmVzZXRfc25hcHNob3QsCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLm90aGVyX2lucHV0ID0gMSwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC00NDk0LDcgKzQ2MDIsOCBAQAogCSAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfCBCUklER0VfSU5WRVJUX0xFRCB9LAogCXtVU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMjhjKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNTRjLCAweDAxNTQpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKLQl7VVNCX0RFVklDRSgweDA1NGMsIDB4MDE1NSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAorCXtVU0JfREVWSUNFKDB4MDU0YywgMHgwMTU1KSwKKwkgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKIAl7VVNCX0RFVklDRSgweDA1YTksIDB4MDUxMSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxMSB9LAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTE4KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE4IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDA1MTkpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwppbmRleCAwYTZiOGYwLi45NTdlMDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIG92NTM0IGdzcGNhIGRyaXZlcgorICogb3Y1MzQtb3Y3NzJ4IGdzcGNhIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgogICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgpAQCAtNjgsMTIgKzY4LDcgQEAKIAlzOCBzaGFycG5lc3M7CiAJdTggaGZsaXA7CiAJdTggdmZsaXA7Ci0JdTggc2F0dXI7Ci0JdTggbGlnaHRmcmVxOwogCi0JdTggc2Vuc29yOwotI2RlZmluZSBTRU5TT1JfT1Y3NzJYIDAKLSNkZWZpbmUgU0VOU09SX09WOTY1WCAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC0xMDEsMTIgKzk2LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKLXN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292NzcyeFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAgICAgewkJCQkJCQkvKiAwICovCiAJewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMTUsOCArMTA2LDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBCUklHSFRORVNTXzc3X0RFRiAyMAotCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfNzdfREVGLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAyMAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCkBAIC0xMjksOCArMTIwLDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBDT05UUkFTVF83N19ERUYgMzcKLQkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF83N19ERUYsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAzNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCkBAIC0xNTcsOCArMTQ4LDggQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDI1NSwKIAkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPXzc3X0RFRiAxMjAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBFWFBPXzc3X0RFRiwKKyNkZWZpbmUgRVhQT19ERUYgMTIwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT19ERUYsCiAJfSwKIAkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCiAJLmdldCA9IHNkX2dldGV4cG9zdXJlLApAQCAtMjEzLDEzICsyMDQsMTMgQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDEsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fNzdfREVGIDAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl83N19ERUYsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGF1dG9nYWluLAogCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKICAgICB9LAotI2RlZmluZSBBV0JfNzdfSURYIDgKKyNkZWZpbmUgQVdCX0lEWCA4CiAgICAgewkJCQkJCQkvKiA4ICovCiAJewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKQEAgLTI0Miw4ICsyMzMsOCBAQAogCSAgICAubWluaW11bSA9IDAsCiAJICAgIC5tYXhpbXVtID0gNjMsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgU0hBUlBORVNTXzc3X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTXzc3X0RFRiwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCiAJLmdldCA9IHNkX2dldHNoYXJwbmVzcywKQEAgLTI3NywxMDcgKzI2OCw2IEBACiAJLmdldCA9IHNkX2dldHZmbGlwLAogICAgIH0sCiB9Owotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292OTY1eFtdID0gewotICAgIHsJCQkJCQkJLyogMCAqLwotCXsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMTUsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQlJJR0hUTkVTU185Nl9ERUYgNwotCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfOTZfREVGLAotCX0sCi0JLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCi0JLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCi0gICAgfSwKLSAgICB7CQkJCQkJCS8qIDEgKi8KLQl7Ci0JCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCi0JCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMTUsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQ09OVFJBU1RfOTZfREVGIDMKLQkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF85Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCi0JLmdldCA9IHNkX2dldGNvbnRyYXN0LAotICAgIH0sCi0gICAgewkJCQkJCQkvKiAyICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JICAgIC5uYW1lICAgID0gIkF1dG9nYWluIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDEsCi0JICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fOTZfREVGIDEKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl85Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCi0JLmdldCA9IHNkX2dldGF1dG9nYWluLAotICAgIH0sCi0jZGVmaW5lIEVYUE9fOTZfSURYIDMKLSAgICB7CQkJCQkJCS8qIDMgKi8KLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfRVhQT1NVUkUsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiRXhwb3N1cmUiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMywKLQkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPXzk2X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT185Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCi0JLmdldCA9IHNkX2dldGV4cG9zdXJlLAotICAgIH0sCi0gICAgewkJCQkJCQkvKiA0ICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgICAubmFtZSAgICA9ICJTaGFycG5lc3MiLAotCSAgICAubWluaW11bSA9IC0xLAkJLyogLTEgPSBhdXRvICovCi0JICAgIC5tYXhpbXVtID0gNCwKLQkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBTSEFSUE5FU1NfOTZfREVGIC0xCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTXzk2X0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCi0JLmdldCA9IHNkX2dldHNoYXJwbmVzcywKLSAgICB9LAotICAgIHsJCQkJCQkJLyogNSAqLwotCXsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gNCwKLQkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBTQVRVUl9ERUYgMgotCQkuZGVmYXVsdF92YWx1ZSA9IFNBVFVSX0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRzYXR1ciwKLQkuZ2V0ID0gc2RfZ2V0c2F0dXIsCi0gICAgfSwKLSAgICB7Ci0JewotCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCi0JCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKLQkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCi0JCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KLQkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBGUkVRX0RFRiAwCi0JCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0ZnJlcSwKLQkuZ2V0ID0gc2RfZ2V0ZnJlcSwKLSAgICB9LAotfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y3NzJ4X21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCkBAIC0zOTIsMzUgKzI4MiwyMSBAQAogCSAucHJpdiA9IDB9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y5NjV4X21vZGVbXSA9IHsKLQl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JIC5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSA0fSwKLQl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSA2NDAsCi0JIC5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAzfSwKLQl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSA4MDAsCi0JIC5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAyfSwKLQl7MTAyNCwgNzY4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAotCSAuYnl0ZXNwZXJsaW5lID0gMTAyNCwKLQkgLnNpemVpbWFnZSA9IDEwMjQgKiA3NjggKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAxfSwKLQl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKLQkgLmJ5dGVzcGVybGluZSA9IDEyODAsCi0JIC5zaXplaW1hZ2UgPSAxMjgwICogMTAyNCAqIDMgLyA4ICsgNTkwLAotCSAuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCSAucHJpdiA9IDB9LAorc3RhdGljIGNvbnN0IHU4IHF2Z2FfcmF0ZXNbXSA9IHsxMjUsIDEwMCwgNzUsIDYwLCA1MCwgNDAsIDMwfTsKK3N0YXRpYyBjb25zdCB1OCB2Z2FfcmF0ZXNbXSA9IHs2MCwgNTAsIDQwLCAzMCwgMTV9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lcmF0ZXMgb3Y3NzJ4X2ZyYW1lcmF0ZXNbXSA9IHsKKwl7IC8qIDMyMHgyNDAgKi8KKwkJLnJhdGVzID0gcXZnYV9yYXRlcywKKwkJLm5yYXRlcyA9IEFSUkFZX1NJWkUocXZnYV9yYXRlcyksCisJfSwKKwl7IC8qIDY0MHg0ODAgKi8KKwkJLnJhdGVzID0gdmdhX3JhdGVzLAorCQkubnJhdGVzID0gQVJSQVlfU0laRSh2Z2FfcmF0ZXMpLAorCX0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfb3Y3NzJ4W11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRbXVsyXSA9IHsKIAl7IDB4YzIsIDB4MGMgfSwKIAl7IDB4ODgsIDB4ZjggfSwKIAl7IDB4YzMsIDB4NjkgfSwKQEAgLTQ3OCw3ICszNTQsNyBAQAogCXsgMHhjMSwgMHgzYyB9LAogCXsgMHhjMiwgMHgwYyB9LAogfTsKLXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjc3MnhbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdFtdWzJdID0gewogCXsgMHgxMiwgMHg4MCB9LAogCXsgMHgxMSwgMHgwMSB9LAogLypmaXhtZTogYmV0dGVyIGhhdmUgYSBkZWxheT8qLwpAQCAtNTcxLDcgKzQ0Nyw3IEBACiAJeyAweDhlLCAweDAwIH0sCQkvKiBEZS1ub2lzZSB0aHJlc2hvbGQgKi8KIAl7IDB4MGMsIDB4ZDAgfQogfTsKLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF92Z2FbXVsyXSA9IHsKIAl7MHgxYywgMHgwMH0sCiAJezB4MWQsIDB4NDB9LAogCXsweDFkLCAweDAyfSwKQEAgLTU4Miw3ICs0NTgsNyBAQAogCXsweGMwLCAweDUwfSwKIAl7MHhjMSwgMHgzY30sCiB9Owotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X3ZnYVtdWzJdID0gewogCXsweDEyLCAweDAwfSwKIAl7MHgxNywgMHgyNn0sCiAJezB4MTgsIDB4YTB9LApAQCAtNTkyLDcgKzQ2OCw3IEBACiAJezB4MmMsIDB4ZjB9LAogCXsweDY1LCAweDIwfSwKIH07Ci1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292NzcyeF9xdmdhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3F2Z2FbXVsyXSA9IHsKIAl7MHgxYywgMHgwMH0sCiAJezB4MWQsIDB4NDB9LAogCXsweDFkLCAweDAyfSwKQEAgLTYwMyw3ICs0NzksNyBAQAogCXsweGMwLCAweDI4fSwKIAl7MHhjMSwgMHgxZX0sCiB9Owotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjc3MnhfcXZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9xdmdhW11bMl0gPSB7CiAJezB4MTIsIDB4NDB9LAogCXsweDE3LCAweDNmfSwKIAl7MHgxOCwgMHg1MH0sCkBAIC02MTQsNTcxICs0OTAsNiBAQAogCXsweDY1LCAweDJmfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBicmlkZ2VfaW5pdF9vdjk2NXhbXVsyXSA9IHsKLQl7MHg4OCwgMHhmOH0sCi0JezB4ODksIDB4ZmZ9LAotCXsweDc2LCAweDAzfSwKLQl7MHg5MiwgMHgwM30sCi0JezB4OTUsIDB4MTB9LAotCXsweGUyLCAweDAwfSwKLQl7MHhlNywgMHgzZX0sCi0JezB4OGQsIDB4MWN9LAotCXsweDhlLCAweDAwfSwKLQl7MHg4ZiwgMHgwMH0sCi0JezB4MWYsIDB4MDB9LAotCXsweGMzLCAweGY5fSwKLQl7MHg4OSwgMHhmZn0sCi0JezB4ODgsIDB4Zjh9LAotCXsweDc2LCAweDAzfSwKLQl7MHg5MiwgMHgwMX0sCi0JezB4OTMsIDB4MTh9LAotCXsweDFjLCAweDBhfSwKLQl7MHgxZCwgMHg0OH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4MGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4ZTcsIDB4MmV9LAotCXsweDMxLCAweGY5fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDI1LCAweDQyfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y5NjV4W11bMl0gPSB7Ci0JezB4MTIsIDB4ODB9LAkvKiBjb203IC0gU1NDQiByZXNldCAqLwotCXsweDAwLCAweDAwfSwJLyogZ2FpbiAqLwotCXsweDAxLCAweDgwfSwJLyogYmx1ZSAqLwotCXsweDAyLCAweDgwfSwJLyogcmVkICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MDQsIDB4MDN9LAkvKiBjb20xIC0gZXhwb3N1cmUgbG93IGJpdHMgKi8KLQl7MHgwYiwgMHg1N30sCS8qIHZlciAqLwotCXsweDBlLCAweDYxfSwJLyogY29tNSAqLwotCXsweDBmLCAweDQyfSwJLyogY29tNiAqLwotCXsweDExLCAweDAwfSwJLyogY2xrcmMgKi8KLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSAxNWZwcyBWR0EgWVVZViAqLwotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCi0JezB4MTYsIDB4MjR9LAkvKiByZWcxNiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0Ki8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDI0LCAweDNjfSwJLyogYWV3ICovCi0JezB4MjUsIDB4MzZ9LAkvKiBhZWIgKi8KLQl7MHgyNiwgMHg3MX0sCS8qIHZwdCAqLwotCXsweDI3LCAweDA4fSwJLyogYmJpYXMgKi8KLQl7MHgyOCwgMHgwOH0sCS8qIGdiYmlhcyAqLwotCXsweDI5LCAweDE1fSwJLyogZ3IgY29tICovCi0JezB4MmEsIDB4MDB9LAkvKiBleGhjaCAqLwotCXsweDJiLCAweDAwfSwJLyogZXhoY2wgKi8KLQl7MHgyYywgMHgwOH0sCS8qIHJiaWFzICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4MzMsIDB4MDB9LAkvKiBjaGxmICovCi0JezB4MzQsIDB4M2Z9LAkvKiBhcmVmMSAqLwotCXsweDM1LCAweDAwfSwJLyogYXJlZjIgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4MzgsIDB4NzJ9LAkvKiBhZGMyICovCi0JezB4MzksIDB4NTd9LAkvKiBhcmVmNCAqLwotCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KLQl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDNkLCAweDk5fSwJLyogY29tMTMgKi8KLQl7MHgzZiwgMHhjMX0sCS8qIGVkZ2UgKi8KLQl7MHg0MCwgMHhjMH0sCS8qIGNvbTE1ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDQyLCAweGMwfSwJLyogY29tMTcgKi8KLQl7MHg0MywgMHgwYX0sCS8qIHJzdmQgKi8KLQl7MHg0NCwgMHhmMH0sCi0JezB4NDUsIDB4NDZ9LAotCXsweDQ2LCAweDYyfSwKLQl7MHg0NywgMHgyYX0sCi0JezB4NDgsIDB4M2N9LAotCXsweDRhLCAweGZjfSwKLQl7MHg0YiwgMHhmY30sCi0JezB4NGMsIDB4N2Z9LAotCXsweDRkLCAweDdmfSwKLQl7MHg0ZSwgMHg3Zn0sCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwJLyogbWF0cml4IGNvZWYgc2lnbiAqLwotCXsweDU5LCAweDg1fSwJLyogQVdCIGNvbnRyb2wgKi8KLQl7MHg1YSwgMHhhOX0sCi0JezB4NWIsIDB4NjR9LAotCXsweDVjLCAweDg0fSwKLQl7MHg1ZCwgMHg1M30sCi0JezB4NWUsIDB4MGV9LAotCXsweDVmLCAweGYwfSwJLyogQVdCIGJsdWUgbGltaXQgKi8KLQl7MHg2MCwgMHhmMH0sCS8qIEFXQiByZWQgbGltaXQgKi8KLQl7MHg2MSwgMHhmMH0sCS8qIEFXQiBncmVlbiBsaW1pdCAqLwotCXsweDYyLCAweDAwfSwJLyogbGNjMSAqLwotCXsweDYzLCAweDAwfSwJLyogbGNjMiAqLwotCXsweDY0LCAweDAyfSwJLyogbGNjMyAqLwotCXsweDY1LCAweDE2fSwJLyogbGNjNCAqLwotCXsweDY2LCAweDAxfSwJLyogbGNjNSAqLwotCXsweDY5LCAweDAyfSwJLyogaHYgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRidmwgKi8KLQl7MHg2YywgMHgwNH0sCi0JezB4NmQsIDB4NTV9LAotCXsweDZlLCAweDAwfSwKLQl7MHg2ZiwgMHg5ZH0sCi0JezB4NzAsIDB4MjF9LAkvKiBkbnN0aCAqLwotCXsweDcxLCAweDc4fSwKLQl7MHg3MiwgMHgwMH0sCS8qIHBvaWR4ICovCi0JezB4NzMsIDB4MDF9LAkvKiBwY2tkdiAqLwotCXsweDc0LCAweDNhfSwJLyogeGluZHggKi8KLQl7MHg3NSwgMHgzNX0sCS8qIHlpbmR4ICovCi0JezB4NzYsIDB4MDF9LAotCXsweDc3LCAweDAyfSwKLQl7MHg3YSwgMHgxMn0sCS8qIGdhbW1hIGN1cnZlICovCi0JezB4N2IsIDB4MDh9LAotCXsweDdjLCAweDE2fSwKLQl7MHg3ZCwgMHgzMH0sCi0JezB4N2UsIDB4NWV9LAotCXsweDdmLCAweDcyfSwKLQl7MHg4MCwgMHg4Mn0sCi0JezB4ODEsIDB4OGV9LAotCXsweDgyLCAweDlhfSwKLQl7MHg4MywgMHhhNH0sCi0JezB4ODQsIDB4YWN9LAotCXsweDg1LCAweGI4fSwKLQl7MHg4NiwgMHhjM30sCi0JezB4ODcsIDB4ZDZ9LAotCXsweDg4LCAweGU2fSwKLQl7MHg4OSwgMHhmMn0sCi0JezB4OGEsIDB4MDN9LAotCXsweDhjLCAweDg5fSwJLyogY29tMTkgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHg5MCwgMHg3ZH0sCi0JezB4OTEsIDB4N2J9LAotCXsweDlkLCAweDAzfSwJLyogbGNjNiAqLwotCXsweDllLCAweDA0fSwJLyogbGNjNyAqLwotCXsweDlmLCAweDdhfSwKLQl7MHhhMCwgMHg3OX0sCi0JezB4YTEsIDB4NDB9LAkvKiBhZWNobSAqLwotCXsweGE0LCAweDUwfSwJLyogY29tMjEgKi8KLQl7MHhhNSwgMHg2OH0sCS8qIGNvbTI2ICovCi0JezB4YTYsIDB4NGF9LAkvKiBBV0IgZ3JlZW4gKi8KLQl7MHhhOCwgMHhjMX0sCS8qIHJlZmE4ICovCi0JezB4YTksIDB4ZWZ9LAkvKiByZWZhOSAqLwotCXsweGFhLCAweDkyfSwKLQl7MHhhYiwgMHgwNH0sCi0JezB4YWMsIDB4ODB9LAkvKiBibGFjayBsZXZlbCBjb250cm9sICovCi0JezB4YWQsIDB4ODB9LAotCXsweGFlLCAweDgwfSwKLQl7MHhhZiwgMHg4MH0sCi0JezB4YjIsIDB4ZjJ9LAotCXsweGIzLCAweDIwfSwKLQl7MHhiNCwgMHgyMH0sCS8qIGN0cmxiNCAqLwotCXsweGI1LCAweDAwfSwKLQl7MHhiNiwgMHhhZn0sCi0JezB4YmIsIDB4YWV9LAotCXsweGJjLCAweDdmfSwJLyogQURDIGNoYW5uZWwgb2Zmc2V0cyAqLwotCXsweGRiLCAweDdmfSwKLQl7MHhiZSwgMHg3Zn0sCi0JezB4YmYsIDB4N2Z9LAotCXsweGMwLCAweGUyfSwKLQl7MHhjMSwgMHhjMH0sCi0JezB4YzIsIDB4MDF9LAotCXsweGMzLCAweDRlfSwKLQl7MHhjNiwgMHg4NX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweGM5LCAweGUwfSwKLQl7MHhjYSwgMHhlOH0sCi0JezB4Y2IsIDB4ZjB9LAotCXsweGNjLCAweGQ4fSwKLQl7MHhjZCwgMHhmMX0sCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwKLQl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCi0JezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQotCXsweDEyLCAweDYyfSwJLyogY29tNyAtIDMwZnBzIFZHQSBZVVYgKi8KLQl7MHgzNiwgMHhmYX0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MGF9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMH0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAotCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLwotCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4YWF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eF8yW11bMl0gPSB7Ci0JezB4OTQsIDB4YWF9LAotCXsweGYxLCAweDYwfSwKLQl7MHhlNSwgMHgwNH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHg4YywgMHgwMH0sCi0JezB4OGQsIDB4MWN9LAotCXsweDM0LCAweDA1fSwKLQotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHhhMH0sCi0JezB4NTIsIDB4M2N9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4MDB9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4YTB9LAotCXsweDViLCAweDc4fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhfMltdWzJdID0gewotCXsweDNiLCAweGM0fSwKLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwNX0sCi0JezB4YzUsIDB4MDd9LAotCXsweGEyLCAweDRifSwKLQl7MHhhMywgMHgzZX0sCi0JezB4MmQsIDB4MDB9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCi0JezB4MmQsIDB4MDB9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCi0vKiBzaGFycG5lc3MgKi8KLQl7MHgzZiwgMHgwMX0sCi0JezB4ZmYsIDB4NDJ9LAkvKiByZWFkIDQyLCB3cml0ZSBmZiAwMCAqLwotCXsweDQyLCAweGMxfSwJLyogY29tMTcgKi8KLS8qIHNhdHVyYXRpb24gKi8KLQl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLwotCXsweDUwLCAweDk4fSwKLQl7MHg1MSwgMHgwMH0sCi0JezB4NTIsIDB4Mjh9LAotCXsweDUzLCAweDcwfSwKLQl7MHg1NCwgMHg5OH0sCi0JezB4NTgsIDB4MWF9LAotCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0vKiBjb250cmFzdCAqLwotCXsweDU2LCAweDQwfSwKLS8qIGJyaWdodG5lc3MgKi8KLQl7MHg1NSwgMHg4Zn0sCi0vKiBleHBvICovCi0JezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCi0JezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLwotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYVtdWzJdID0gewkvKiBzYW1lIGZvciBxdmdhICovCi0JezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLwotCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCi0JezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAwfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhhYX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSBZVVlWIC0gVkdBIDE1IGZ1bGwgcmVzb2x1dGlvbiAqLwotCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4OGMsIDB4MGR9LAkvKiBjb20yMiAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAxfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhlMn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYVtdWzJdID0gewotCXsweDEyLCAweDAyfSwJLyogY29tNyAqLwotCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAxfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhlMn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N4Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MDJ9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMX0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweDAzLCAweDFifSwJLyogdnJlZiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4ZTJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfcXZnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweDUwfSwKLQl7MHhjMSwgMHgzY30sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0KLQl7MHhjMiwgMHg0Y30sCi0JezB4YzMsIDB4Zjl9LAotCXsweGRhLCAweDAwfSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4YTB9LAotCXsweDUyLCAweDc4fSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDAwfSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDB9LAotCXsweDVhLCAweDUwfSwKLQl7MHg1YiwgMHgzY30sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292OTY1eF92Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHg1MH0sCi0JezB4YzEsIDB4M2N9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHhhMH0sCi0JezB4NTIsIDB4M2N9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4MDB9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4YTB9LAotCXsweDViLCAweDc4fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N2Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHhhMH0sCi0JezB4YzEsIDB4ODB9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDRjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4NTAsIDB4MDB9LAotCXsweDUxLCAweDQwfSwKLQl7MHg1MiwgMHgwMH0sCi0JezB4NTMsIDB4MDB9LAotCXsweDU0LCAweDAwfSwKLQl7MHg1NSwgMHg4OH0sCi0JezB4NTcsIDB4MDB9LAotCXsweDVjLCAweDAwfSwKLQl7MHg1YSwgMHhjOH0sCi0JezB4NWIsIDB4OTZ9LAotCXsweDM1LCAweDAyfSwKLQl7MHhkOSwgMHgxMH0sCi0JezB4ZGEsIDB4MDB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3hnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweGEwfSwKLQl7MHhjMSwgMHg4MH0sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4NGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4NDB9LAotCXsweDUyLCAweDAwfSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDg4fSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDF9LAotCXsweDVhLCAweDAwfSwKLQl7MHg1YiwgMHhjMH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHhkYSwgMHgwMX0sCi0JezB4OTQsIDB4MTF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfc3hnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweGEwfSwKLQl7MHhjMSwgMHg4MH0sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4MGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHhkYSwgMHgwMH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2FbXVsyXSA9IHsKLQl7MHgzYiwgMHhlNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAxfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwMn0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGEyLCAweDk2fSwJLyogYmQ1MCAqLwotCXsweGEzLCAweDdkfSwJLyogYmQ2MCAqLwotCi0JezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLwotCXsweDEzLCAweGU3fSwKLQl7MHgzYSwgMHg4MH0sCS8qIHRzbGIgLSB5dXl2ICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3ZnYVtdWzJdID0gewotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCi0JezB4MDAsIDB4MDB9LAotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTEsIDB4MDN9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDA1fSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwN30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGJ9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4M2V9LAkvKiBiZDYwICovCi0KLQl7MHgyZCwgMHgwMH0sCS8qIGFkdmZsICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgeGdhICovCi0JezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCi0JezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KLQl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCi0JezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCi0JezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KLQl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3hnYVtdWzJdID0gewotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDBjfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwZn0sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGV9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4NDF9LAkvKiBiZDYwICovCi19OwotCiBzdGF0aWMgdm9pZCBvdjUzNF9yZWdfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKQEAgLTEzNjAsMTQgKzY3MSwxNCBAQAogCVBERUJVRyhEX1BST0JFLCAiZnJhbWVfcmF0ZTogJWQiLCByLT5mcHMpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzXzc3KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg5Qiwgc2QtPmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRjb250cmFzdF83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC0xNDAxLDcgKzcxMiw3IEBACiAJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDAwLCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRleHBvc3VyZV83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbDsKQEAgLTE0MzIsNyArNzQzLDcgQEAKIAlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MDEsIHNkLT5odWUpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRhdXRvZ2Fpbl83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC0xNDU3LDcgKzc2OCw3IEBACiAJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg2MywgMHhhYSk7CS8qIEFXQiBvZmYgKi8KIH0KIAotc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzXzc3KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbDsKQEAgLTE0OTEsMTMyICs4MDIsNiBAQAogCQkJCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBjKSAmIDB4N2YpOwogfQogCi0vKiBvdjk2NXggc3BlY2lmaWMgY29udHJvbHMgKi8KLXN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3NfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWw7Ci0KLQl2YWwgPSBzZC0+YnJpZ2h0bmVzczsKLQlpZiAodmFsIDwgOCkKLQkJdmFsID0gMTUgLSB2YWw7CQkvKiBmIC4uIDggKi8KLQllbHNlCi0JCXZhbCA9IHZhbCAtIDg7CQkvKiAwIC4uIDcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTUsCS8qIGJydG4gLSBicmlnaHRuZXNzIGFkanVzdG1lbnQgKi8KLQkJCTB4MGYgfCAodmFsIDw8IDQpKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0Y29udHJhc3RfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1NiwJLyogY25zdDEgLSBjb250cmFzdCAxIGN0cmwgY29lZmYgKi8KLQkJCXNkLT5jb250cmFzdCA8PCA0KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmVfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWw7Ci0Jc3RhdGljIGNvbnN0IHU4IGV4cG9bNF0gPSB7MHgwMCwgMHgyNSwgMHgzOCwgMHg1ZX07Ci0KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTAsCQkJLyogYWVjWzk6Ml0gKi8KLQkJCWV4cG9bc2QtPmV4cG9zdXJlXSk7Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOwotCXZhbCA9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweGExKTsJCS8qIGFlY2ggKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhhMSwgdmFsICYgMHhlMCk7CS8qIGFlY1sxNToxMF0gPSAwICovCi19Ci0KLXN0YXRpYyB2b2lkIHNldHNoYXJwbmVzc185NihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXM4IHZhbDsKLQotCXZhbCA9IHNkLT5zaGFycG5lc3M7Ci0JaWYgKHZhbCA8IDApIHsJCQkJLyogYXV0byAqLwotCQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0Mik7CS8qIGNvbTE3ICovCi0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsIHwgMHg0MCk7Ci0JCQkJLyogRWRnZSBlbmhhbmNlbWVudCBzdHJlbmd0aCBhdXRvIGFkanVzdCAqLwotCQlyZXR1cm47Ci0JfQotCWlmICh2YWwgIT0gMCkKLQkJdmFsID0gMSA8PCAodmFsIC0gMSk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDNmLAkvKiBlZGdlIC0gZWRnZSBlbmhhbmNlLiBmYWN0b3IgKi8KLQkJCXZhbCk7Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4NDIpOwkJLyogY29tMTcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsICYgMHhiZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGF1dG9nYWluXzk2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0vKmZpeG1lOiBzaG91bGQgYWRqdXN0IGFnYy9hd2IvYWVjIGJ5IGRpZmZlcmVudCBjb250cm9scyAqLwotCXZhbCA9IHNkLT5hdXRvZ2FpbjsKLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlpZiAoc2QtPmF1dG9nYWluKQotCQl2YWwgfD0gMHgwNTsJCS8qIGFnYyAmIGFlYyAqLwotCWVsc2UKLQkJdmFsICY9IDB4ZmE7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXU4IHZhbDEsIHZhbDIsIHZhbDM7Ci0Jc3RhdGljIGNvbnN0IHU4IG1hdHJpeFs1XVsyXSA9IHsKLQkJezB4MTQsIDB4Mzh9LAotCQl7MHgxZSwgMHg1NH0sCi0JCXsweDI4LCAweDcwfSwKLQkJezB4MzIsIDB4OGN9LAotCQl7MHg0OCwgMHg5MH0KLQl9OwotCi0JdmFsMSA9IG1hdHJpeFtzZC0+c2F0dXJdWzBdOwotCXZhbDIgPSBtYXRyaXhbc2QtPnNhdHVyXVsxXTsKLQl2YWwzID0gdmFsMSArIHZhbDI7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDRmLCB2YWwzKTsJLyogbWF0cml4IGNvZWZmICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUwLCB2YWwzKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTEsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1MiwgdmFsMSk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUzLCB2YWwyKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTQsIHZhbDMpOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1OCwgMHgxYSk7CS8qIG10eHMgLSBjb2VmZiBzaWducyAqLwotCXZhbDEgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0MSk7CS8qIGNvbTE2ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDEsIHZhbDEpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5saWdodGZyZXEgPT0gMCkgewotCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCAmIDB4ZGYpOwotCQlyZXR1cm47Ci0JfQotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsIHwgMHgyMCk7Ci0KLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5saWdodGZyZXEgPT0gMSkKLQkJdmFsIHw9IDB4MDE7Ci0JZWxzZQotCQl2YWwgJj0gMHhmZTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCk7Ci19Ci0KIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0xNjI0LDc3ICs4MDksNTAgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCi0Jc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKLQogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKLQkJY2FtLT5jYW1fbW9kZSA9IG92NzcyeF9tb2RlOwotCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y3NzJ4X21vZGUpOworCWNhbS0+Y2FtX21vZGUgPSBvdjc3MnhfbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y3NzJ4X21vZGUpOworCWNhbS0+bW9kZV9mcmFtZXJhdGVzID0gb3Y3NzJ4X2ZyYW1lcmF0ZXM7CiAKLQkJY2FtLT5idWxrID0gMTsKLQkJY2FtLT5idWxrX3NpemUgPSAxNjM4NDsKLQkJY2FtLT5idWxrX251cmJzID0gMjsKLQl9IGVsc2UgewkJLyogb3Y5NjV4ICovCi0JCWNhbS0+Y2FtX21vZGUgPSBvdjk2NXhfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1eF9tb2RlKTsKLQl9CisJY2FtLT5idWxrID0gMTsKKwljYW0tPmJ1bGtfc2l6ZSA9IDE2Mzg0OworCWNhbS0+YnVsa19udXJicyA9IDI7CiAKIAlzZC0+ZnJhbWVfcmF0ZSA9IDMwOwogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkgewotCQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfNzdfREVGOwotCQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF83N19ERUY7Ci0JCXNkLT5nYWluID0gR0FJTl9ERUY7Ci0JCXNkLT5leHBvc3VyZSA9IEVYUE9fNzdfREVGOwotCQlzZC0+cmVkYmxjID0gUkVEX0JBTEFOQ0VfREVGOwotCQlzZC0+Ymx1ZWJsYyA9IEJMVUVfQkFMQU5DRV9ERUY7Ci0JCXNkLT5odWUgPSBIVUVfREVGOwotI2lmIEFVVE9HQUlOXzc3X0RFRiAhPSAwCi0JCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOXzc3X0RFRjsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Z2FpbiA9IEdBSU5fREVGOworCXNkLT5leHBvc3VyZSA9IEVYUE9fREVGOworCXNkLT5yZWRibGMgPSBSRURfQkFMQU5DRV9ERUY7CisJc2QtPmJsdWVibGMgPSBCTFVFX0JBTEFOQ0VfREVGOworCXNkLT5odWUgPSBIVUVfREVGOworI2lmIEFVVE9HQUlOX0RFRiAhPSAwCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogI2Vsc2UKLQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCXzc3X0lEWCk7CisJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCX0lEWCk7CiAjZW5kaWYKICNpZiBBV0JfREVGICE9IDAKLQkJc2QtPmF3YiA9IEFXQl9ERUYKKwlzZC0+YXdiID0gQVdCX0RFRgogI2VuZGlmCi0jaWYgU0hBUlBORVNTXzc3X0RFRiAhPSAwCi0JCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfNzdfREVGOworI2lmIFNIQVJQTkVTU19ERUYgIT0gMAorCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwogI2VuZGlmCiAjaWYgSEZMSVBfREVGICE9IDAKLQkJc2QtPmhmbGlwID0gSEZMSVBfREVGOworCXNkLT5oZmxpcCA9IEhGTElQX0RFRjsKICNlbmRpZgogI2lmIFZGTElQX0RFRiAhPSAwCi0JCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CiAjZW5kaWYKLQl9IGVsc2UgewotCQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfOTZfREVGOwotCQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF85Nl9ERUY7Ci0jaWYgQVVUT0dBSU5fOTZfREVGICE9IDAKLQkJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fOTZfREVGOwotCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPXzk2X0lEWCk7Ci0jZW5kaWYKLSNpZiBFWFBPXzk2X0RFRiAhPSAwCi0JCXNkLT5leHBvc3VyZSA9IEVYUE9fOTZfREVGOwotI2VuZGlmCi0jaWYgU0hBUlBORVNTXzk2X0RFRiAhPSAwCi0JCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfOTZfREVGOwotI2VuZGlmCi0JCXNkLT5zYXR1ciA9IFNBVFVSX0RFRjsKLQkJc2QtPmxpZ2h0ZnJlcSA9IEZSRVFfREVGOwotCX0KKwogCXJldHVybiAwOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXUxNiBzZW5zb3JfaWQ7Ci0Jc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9hZGRyWzJdID0gewotCQkweDQyLAkJCS8qIDAgU0VOU09SX09WNzcyWCAqLwotCQkweDYwLAkJCS8qIDEgU0VOU09SX09WOTY1WCAqLwotCX07CiAKIAkvKiByZXNldCBicmlkZ2UgKi8KIAlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU3LCAweDNhKTsKQEAgLTE3MDIsOCArODYwLDcgQEAKIAltc2xlZXAoMTAwKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciBhZGRyZXNzICovCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsCi0JCQkJc2Vuc29yX2FkZHJbc2QtPnNlbnNvcl0pOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19BRERSRVNTLCAweDQyKTsKIAogCS8qIHJlc2V0IHNlbnNvciAqLwogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMiwgMHg4MCk7CkBAIC0xNzE3LDY0ICs4NzQsNDYgQEAKIAlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBJRDogJTA0eCIsIHNlbnNvcl9pZCk7CiAKIAkvKiBpbml0aWFsaXplICovCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfT1Y3NzJYOgotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292NzcyeCwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292NzcyeCkpOwotCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292NzcyeCwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292NzcyeCkpOwotCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKLQkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotCQlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfT1Y5NjVYOiAqLwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292OTY1eCwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eCkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXgsCi0JCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjk2NXgpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXhfMiwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eF8yKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292OTY1eF8yLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4XzIpKTsKLQkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOwotCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOwotCX0KKwlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0LAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdCkpOworCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKwlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdCwKKwkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXQpKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKKwlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3N0YXJ0X292NzcyeChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgbW9kZTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlpZiAobW9kZSAhPSAwKSB7CS8qIDMyMHgyNDAgKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3F2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3F2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292NzcyeF9xdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292NzcyeF9xdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3F2Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfcXZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9xdmdhKSk7CiAJfSBlbHNlIHsJCS8qIDY0MHg0ODAgKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjc3MnhfdmdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292NzcyeF92Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X3ZnYSkpOwogCX0KIAlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwogCi0Jc2V0YXV0b2dhaW5fNzcoZ3NwY2FfZGV2KTsKKwlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXNldGF3Yihnc3BjYV9kZXYpOwogCXNldGdhaW4oZ3NwY2FfZGV2KTsKIAlzZXRyZWRibGMoZ3NwY2FfZGV2KTsKIAlzZXRibHVlYmxjKGdzcGNhX2Rldik7CiAJc2V0aHVlKGdzcGNhX2Rldik7Ci0Jc2V0ZXhwb3N1cmVfNzcoZ3NwY2FfZGV2KTsKLQlzZXRicmlnaHRuZXNzXzc3KGdzcGNhX2Rldik7Ci0Jc2V0Y29udHJhc3RfNzcoZ3NwY2FfZGV2KTsKLQlzZXRzaGFycG5lc3NfNzcoZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwogCXNldHZmbGlwKGdzcGNhX2Rldik7CiAJc2V0aGZsaXAoZ3NwY2FfZGV2KTsKIApAQCAtMTc4Myw4MSArOTIyLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc3RhcnRfb3Y5NjV4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgbW9kZTsKLQotCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKLQlzd2l0Y2ggKG1vZGUpIHsKLQlkZWZhdWx0OgotLyoJY2FzZSA0OgkJCSAqIDMyMHgyNDAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMV92Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfcXZnYSkpOwotCQlicmVhazsKLQljYXNlIDM6CQkJLyogNjQweDQ4MCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfdmdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF92Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMl92Z2EpKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgkJCS8qIDgwMHg2MDAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfc3ZnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfc3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXhfc3ZnYSkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMl9zdmdhKSk7Ci0JCWJyZWFrOwotCWNhc2UgMToJCQkvKiAxMDI0eDc2OCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfeGdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF94Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSkpOwotCQlicmVhazsKLQljYXNlIDA6CQkJLyogMTI4MHgxMDI0ICovCi0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMV9zeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N4Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N4Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3hnYSkpOwotCQlicmVhazsKLQl9Ci0Jc2V0ZnJlcShnc3BjYV9kZXYpOwotCXNldGF1dG9nYWluXzk2KGdzcGNhX2Rldik7Ci0Jc2V0YnJpZ2h0bmVzc185Nihnc3BjYV9kZXYpOwotCXNldGNvbnRyYXN0Xzk2KGdzcGNhX2Rldik7Ci0Jc2V0ZXhwb3N1cmVfOTYoZ3NwY2FfZGV2KTsKLQlzZXRzaGFycG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQlzZXRzYXR1cihnc3BjYV9kZXYpOwotCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZF9zdG9wTl9vdjc3Mngoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDkpOwogCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RvcE5fb3Y5NjV4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKLQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci19Ci0KIC8qIFZhbHVlcyBmb3IgYm1IZWFkZXJJbmZvIChWaWRlbyBhbmQgU3RpbGwgSW1hZ2UgUGF5bG9hZCBIZWFkZXJzLCAyLjQuMy4zKSAqLwogI2RlZmluZSBVVkNfU1RSRUFNX0VPSAkoMSA8PCA3KQogI2RlZmluZSBVVkNfU1RSRUFNX0VSUgkoMSA8PCA2KQpAQCAtMTg3NSwxMSArOTQ1LDkgQEAKIAlfX3UzMiB0aGlzX3B0czsKIAl1MTYgdGhpc19maWQ7CiAJaW50IHJlbWFpbmluZ19sZW4gPSBsZW47Ci0JaW50IHBheWxvYWRfbGVuOwogCi0JcGF5bG9hZF9sZW4gPSBnc3BjYV9kZXYtPmNhbS5idWxrID8gMjA0OCA6IDIwNDA7CiAJZG8gewotCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgcGF5bG9hZF9sZW4pOworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0OCk7CiAKIAkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKIAkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUwpAQCAtMTkxOCw3ICs5ODYsMTcgQEAKIAkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CiAJCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KIAkJfSBlbHNlIGlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FT0YpIHsKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisKIAkJCXNkLT5sYXN0X3B0cyA9IDA7CisJCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisJCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCQlnb3RvIGRpc2NhcmQ7CisJCQlpZiAoZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGEgKyAobGVuIC0gMTIpICE9CisJCQkgICAgZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0ICogMikgeworCQkJCVBERUJVRyhEX1BBQ0ssICJ3cm9uZyBzaXplZCBmcmFtZSIpOworCQkJCWdvdG8gZGlzY2FyZDsKKwkJCX0KIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAogCQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKIAkJfSBlbHNlIHsKQEAgLTE5NjUsMTIgKzEwNDMsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5leHBvc3VyZSA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkKLQkJCXNldGV4cG9zdXJlXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGV4cG9zdXJlXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4NywxMiArMTA2MSw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRicmlnaHRuZXNzXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGJyaWdodG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQl9CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMDksMTIgKzEwNzksOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5jb250cmFzdCA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkKLQkJCXNldGNvbnRyYXN0Xzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGNvbnRyYXN0Xzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAyNiw0MSArMTA5Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPnNhdHVyID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0c2F0dXIoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZF9nZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JKnZhbCA9IHNkLT5zYXR1cjsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+bGlnaHRmcmVxID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0ZnJlcShnc3BjYV9kZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+bGlnaHRmcmVxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNkX3NldHJlZGJsYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0yMTIyLDIyICsxMTUzLDE0IEBACiAJc2QtPmF1dG9nYWluID0gdmFsOwogCiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKIAotCQkJLyogdGhlIGF1dG8gd2hpdGUgYmFsYW5jZSBjb250cm9sIHdvcmtzIG9ubHkKLQkJCSAqIHdoZW4gYXV0byBnYWluIGlzIHNldCAqLwotCQkJaWYgKHZhbCkKLQkJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgQVdCXzc3X0lEWCk7Ci0JCQllbHNlCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCXzc3X0lEWCk7Ci0JCQlzZXRhdXRvZ2Fpbl83Nyhnc3BjYV9kZXYpOwotCQl9IGVsc2UgewotCQkJaWYgKHZhbCkKLQkJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPXzk2X0lEWCk7Ci0JCQllbHNlCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgJj0gfigxIDw8IEVYUE9fOTZfSURYKTsKLQkJCXNldGF1dG9nYWluXzk2KGdzcGNhX2Rldik7Ci0JCX0KKwkJLyogdGhlIGF1dG8gd2hpdGUgYmFsYW5jZSBjb250cm9sIHdvcmtzIG9ubHkKKwkJICogd2hlbiBhdXRvIGdhaW4gaXMgc2V0ICovCisJCWlmICh2YWwpCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgQVdCX0lEWCk7CisJCWVsc2UKKwkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEFXQl9JRFgpOworCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxNzMsMTIgKzExOTYsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5zaGFycG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRzaGFycG5lc3NfNzcoZ3NwY2FfZGV2KTsKLQkJZWxzZQotCQkJc2V0c2hhcnBuZXNzXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNTcsNyArMTI3Niw3IEBACiAKIAkvKiBTZXQgcmVxdWVzdGVkIGZyYW1lcmF0ZSAqLwogCXNkLT5mcmFtZV9yYXRlID0gdHBmLT5kZW5vbWluYXRvciAvIHRwZi0+bnVtZXJhdG9yOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZyAmJiBzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwogCiAJLyogUmV0dXJuIHRoZSBhY3R1YWwgZnJhbWVyYXRlICovCkBAIC0yMjY3LDU3ICsxMjg2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKLXsKLQlzd2l0Y2ggKG1lbnUtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKLQkJc3dpdGNoIChtZW51LT5pbmRleCkgewotCQljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLwotCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KLQkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKLQkJCXJldHVybiAwOwotCQljYXNlIDI6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCi0JCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlicmVhazsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292NzcyeCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lICAgICA9IE1PRFVMRV9OQU1FLAotCS5jdHJscyAgICA9IHNkX2N0cmxzX292NzcyeCwKLQkubmN0cmxzICAgPSBBUlJBWV9TSVpFKHNkX2N0cmxzX292NzcyeCksCisJLmN0cmxzICAgID0gc2RfY3RybHMsCisJLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJscyksCiAJLmNvbmZpZyAgID0gc2RfY29uZmlnLAogCS5pbml0ICAgICA9IHNkX2luaXQsCi0JLnN0YXJ0ICAgID0gc2Rfc3RhcnRfb3Y3NzJ4LAotCS5zdG9wTiAgICA9IHNkX3N0b3BOX292NzcyeCwKKwkuc3RhcnQgICAgPSBzZF9zdGFydCwKKwkuc3RvcE4gICAgPSBzZF9zdG9wTiwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZ2V0X3N0cmVhbXBhcm0gPSBzZF9nZXRfc3RyZWFtcGFybSwKIAkuc2V0X3N0cmVhbXBhcm0gPSBzZF9zZXRfc3RyZWFtcGFybSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1eCA9IHsKLQkubmFtZSAgICAgPSBNT0RVTEVfTkFNRSwKLQkuY3RybHMgICAgPSBzZF9jdHJsc19vdjk2NXgsCi0JLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJsc19vdjk2NXgpLAotCS5jb25maWcgICA9IHNkX2NvbmZpZywKLQkuaW5pdCAgICAgPSBzZF9pbml0LAotCS5zdGFydCAgICA9IHNkX3N0YXJ0X292OTY1eCwKLQkuc3RvcE4gICAgPSBzZF9zdG9wTl9vdjk2NXgsCi0JLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCi0JLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKLX07Ci0KIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7Ci0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfT1Y5NjVYfSwKLQl7VVNCX0RFVklDRSgweDE0MTUsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9PVjc3Mlh9LAorCXtVU0JfREVWSUNFKDB4MTQxNSwgMHgyMDAwKX0sCiAJe30KIH07CiAKQEAgLTIzMjYsMTEgKzEzMTEsNyBAQAogLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KIHN0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLAotCQkJCWlkLT5kcml2ZXJfaW5mbyA9PSBTRU5TT1JfT1Y3NzJYCi0JCQkJCT8gJnNkX2Rlc2Nfb3Y3NzJ4Ci0JCQkJCTogJnNkX2Rlc2Nfb3Y5NjV4LAotCQkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKIAkJCQlUSElTX01PRFVMRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNF85LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlNWEwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jCkBAIC0wLDAgKzEsMTQ3NyBAQAorLyoKKyAqIG92NTM0LW92OTY1eCBnc3BjYSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBKZWFuLUZyYW5jb2lzIE1vaW5lIGh0dHA6Ly9tb2luZWpmLmZyZWUuZnIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgorICoKKyAqIEJhc2VkIG9uIGEgcHJvdG90eXBlIHdyaXR0ZW4gYnkgTWFyayBGZXJyZWxsIDxtYWpvcnRyaXBzQGdtYWlsLmNvbT4KKyAqIFVTQiBwcm90b2NvbCByZXZlcnNlIGVuZ2luZWVyZWQgYnkgSmltIFBhcmlzIDxqaW1AanRhbi5jb20+CisgKiBodHRwczovL2ppbS5zaC9zdm4vamltL2RldmwvcGxheXN0YXRpb24vcHMzL2V5ZS90ZXN0LworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAib3Y1MzRfOSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgT1Y1MzRfUkVHX0FERFJFU1MJMHhmMQkvKiBzZW5zb3IgYWRkcmVzcyAqLworI2RlZmluZSBPVjUzNF9SRUdfU1VCQUREUgkweGYyCisjZGVmaW5lIE9WNTM0X1JFR19XUklURQkJMHhmMworI2RlZmluZSBPVjUzNF9SRUdfUkVBRAkJMHhmNAorI2RlZmluZSBPVjUzNF9SRUdfT1BFUkFUSU9OCTB4ZjUKKyNkZWZpbmUgT1Y1MzRfUkVHX1NUQVRVUwkweGY2CisKKyNkZWZpbmUgT1Y1MzRfT1BfV1JJVEVfMwkweDM3CisjZGVmaW5lIE9WNTM0X09QX1dSSVRFXzIJMHgzMworI2RlZmluZSBPVjUzNF9PUF9SRUFEXzIJCTB4ZjkKKworI2RlZmluZSBDVFJMX1RJTUVPVVQgNTAwCisKK01PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPG1vaW5lamZAZnJlZS5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvT1Y1MzRfOSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCV9fdTMyIGxhc3RfcHRzOworCXU4IGxhc3RfZmlkOworCisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBhdXRvZ2FpbjsKKwl1OCBleHBvc3VyZTsKKwlzOCBzaGFycG5lc3M7CisJdTggc2F0dXI7CisJdTggZnJlcTsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisgICAgewkJCQkJCQkvKiAwICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxNSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiA3CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJfSwKKwkuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKyAgICB9LAorICAgIHsJCQkJCQkJLyogMSAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxNSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDIgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiQXV0b2dhaW4iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRhdXRvZ2FpbiwKKwkuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisgICAgfSwKKyNkZWZpbmUgRVhQT19JRFggMworICAgIHsJCQkJCQkJLyogMyAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJFeHBvc3VyZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAzLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEVYUE9fREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkuZ2V0ID0gc2RfZ2V0ZXhwb3N1cmUsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDQgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0hBUlBORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNoYXJwbmVzcyIsCisJCS5taW5pbXVtID0gLTEsCQkvKiAtMSA9IGF1dG8gKi8KKwkJLm1heGltdW0gPSA0LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgLTEKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCX0sCisJLnNldCA9IHNkX3NldHNoYXJwbmVzcywKKwkuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorICAgIH0sCisgICAgewkJCQkJCQkvKiA1ICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSA0LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNBVFVSX0RFRiAyCisJCS5kZWZhdWx0X3ZhbHVlID0gU0FUVVJfREVGLAorCX0sCisJLnNldCA9IHNkX3NldHNhdHVyLAorCS5nZXQgPSBzZF9nZXRzYXR1ciwKKyAgICB9LAorICAgIHsKKwl7CisJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubmFtZSAgICA9ICJMaWdodCBmcmVxdWVuY3kgZmlsdGVyIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLworCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRmcmVxLAorCS5nZXQgPSBzZF9nZXRmcmVxLAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBvdjk2NXhfbW9kZVtdID0geworI2RlZmluZSBRVkdBX01PREUgMAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKKyNkZWZpbmUgVkdBX01PREUgMQorCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKKyNkZWZpbmUgU1ZHQV9NT0RFIDIKKwl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA4MDAsCisJCS5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFhHQV9NT0RFIDMKKwl7MTAyNCwgNzY4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTAyNCwKKwkJLnNpemVpbWFnZSA9IDEwMjQgKiA3NjggKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFNYR0FfTU9ERSA0CisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRbXVsyXSA9IHsKKwl7MHg4OCwgMHhmOH0sCisJezB4ODksIDB4ZmZ9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwM30sCisJezB4OTUsIDB4MTB9LAorCXsweGUyLCAweDAwfSwKKwl7MHhlNywgMHgzZX0sCisJezB4OGQsIDB4MWN9LAorCXsweDhlLCAweDAwfSwKKwl7MHg4ZiwgMHgwMH0sCisJezB4MWYsIDB4MDB9LAorCXsweGMzLCAweGY5fSwKKwl7MHg4OSwgMHhmZn0sCisJezB4ODgsIDB4Zjh9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwMX0sCisJezB4OTMsIDB4MTh9LAorCXsweDFjLCAweDBhfSwKKwl7MHgxZCwgMHg0OH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHgzNCwgMHgwNX0sCisJezB4ZTcsIDB4MmV9LAorCXsweDMxLCAweGY5fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDI1LCAweDQyfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRbXVsyXSA9IHsKKwl7MHgxMiwgMHg4MH0sCS8qIGNvbTcgLSBTU0NCIHJlc2V0ICovCisJezB4MDAsIDB4MDB9LAkvKiBnYWluICovCisJezB4MDEsIDB4ODB9LAkvKiBibHVlICovCisJezB4MDIsIDB4ODB9LAkvKiByZWQgKi8KKwl7MHgwMywgMHgxYn0sCS8qIHZyZWYgKi8KKwl7MHgwNCwgMHgwM30sCS8qIGNvbTEgLSBleHBvc3VyZSBsb3cgYml0cyAqLworCXsweDBiLCAweDU3fSwJLyogdmVyICovCisJezB4MGUsIDB4NjF9LAkvKiBjb201ICovCisJezB4MGYsIDB4NDJ9LAkvKiBjb202ICovCisJezB4MTEsIDB4MDB9LAkvKiBjbGtyYyAqLworCXsweDEyLCAweDAyfSwJLyogY29tNyAtIDE1ZnBzIFZHQSBZVVlWICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgxNiwgMHgyNH0sCS8qIHJlZzE2ICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQqLworCXsweDE4LCAweGJkfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4ODF9LAkvKiB2c3RvcCovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MjQsIDB4M2N9LAkvKiBhZXcgKi8KKwl7MHgyNSwgMHgzNn0sCS8qIGFlYiAqLworCXsweDI2LCAweDcxfSwJLyogdnB0ICovCisJezB4MjcsIDB4MDh9LAkvKiBiYmlhcyAqLworCXsweDI4LCAweDA4fSwJLyogZ2JiaWFzICovCisJezB4MjksIDB4MTV9LAkvKiBnciBjb20gKi8KKwl7MHgyYSwgMHgwMH0sCS8qIGV4aGNoICovCisJezB4MmIsIDB4MDB9LAkvKiBleGhjbCAqLworCXsweDJjLCAweDA4fSwJLyogcmJpYXMgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHgzMywgMHgwMH0sCS8qIGNobGYgKi8KKwl7MHgzNCwgMHgzZn0sCS8qIGFyZWYxICovCisJezB4MzUsIDB4MDB9LAkvKiBhcmVmMiAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHgzOCwgMHg3Mn0sCS8qIGFkYzIgKi8KKwl7MHgzOSwgMHg1N30sCS8qIGFyZWY0ICovCisJezB4M2EsIDB4ODB9LAkvKiB0c2xiIC0geXV5diAqLworCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4M2QsIDB4OTl9LAkvKiBjb20xMyAqLworCXsweDNmLCAweGMxfSwJLyogZWRnZSAqLworCXsweDQwLCAweGMwfSwJLyogY29tMTUgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NDIsIDB4YzB9LAkvKiBjb20xNyAqLworCXsweDQzLCAweDBhfSwJLyogcnN2ZCAqLworCXsweDQ0LCAweGYwfSwKKwl7MHg0NSwgMHg0Nn0sCisJezB4NDYsIDB4NjJ9LAorCXsweDQ3LCAweDJhfSwKKwl7MHg0OCwgMHgzY30sCisJezB4NGEsIDB4ZmN9LAorCXsweDRiLCAweGZjfSwKKwl7MHg0YywgMHg3Zn0sCisJezB4NGQsIDB4N2Z9LAorCXsweDRlLCAweDdmfSwKKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAkvKiBtYXRyaXggY29lZiBzaWduICovCisJezB4NTksIDB4ODV9LAkvKiBBV0IgY29udHJvbCAqLworCXsweDVhLCAweGE5fSwKKwl7MHg1YiwgMHg2NH0sCisJezB4NWMsIDB4ODR9LAorCXsweDVkLCAweDUzfSwKKwl7MHg1ZSwgMHgwZX0sCisJezB4NWYsIDB4ZjB9LAkvKiBBV0IgYmx1ZSBsaW1pdCAqLworCXsweDYwLCAweGYwfSwJLyogQVdCIHJlZCBsaW1pdCAqLworCXsweDYxLCAweGYwfSwJLyogQVdCIGdyZWVuIGxpbWl0ICovCisJezB4NjIsIDB4MDB9LAkvKiBsY2MxICovCisJezB4NjMsIDB4MDB9LAkvKiBsY2MyICovCisJezB4NjQsIDB4MDJ9LAkvKiBsY2MzICovCisJezB4NjUsIDB4MTZ9LAkvKiBsY2M0ICovCisJezB4NjYsIDB4MDF9LAkvKiBsY2M1ICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDZiLCAweDVhfSwJLyogZGJ2bCAqLworCXsweDZjLCAweDA0fSwKKwl7MHg2ZCwgMHg1NX0sCisJezB4NmUsIDB4MDB9LAorCXsweDZmLCAweDlkfSwKKwl7MHg3MCwgMHgyMX0sCS8qIGRuc3RoICovCisJezB4NzEsIDB4Nzh9LAorCXsweDcyLCAweDAwfSwJLyogcG9pZHggKi8KKwl7MHg3MywgMHgwMX0sCS8qIHBja2R2ICovCisJezB4NzQsIDB4M2F9LAkvKiB4aW5keCAqLworCXsweDc1LCAweDM1fSwJLyogeWluZHggKi8KKwl7MHg3NiwgMHgwMX0sCisJezB4NzcsIDB4MDJ9LAorCXsweDdhLCAweDEyfSwJLyogZ2FtbWEgY3VydmUgKi8KKwl7MHg3YiwgMHgwOH0sCisJezB4N2MsIDB4MTZ9LAorCXsweDdkLCAweDMwfSwKKwl7MHg3ZSwgMHg1ZX0sCisJezB4N2YsIDB4NzJ9LAorCXsweDgwLCAweDgyfSwKKwl7MHg4MSwgMHg4ZX0sCisJezB4ODIsIDB4OWF9LAorCXsweDgzLCAweGE0fSwKKwl7MHg4NCwgMHhhY30sCisJezB4ODUsIDB4Yjh9LAorCXsweDg2LCAweGMzfSwKKwl7MHg4NywgMHhkNn0sCisJezB4ODgsIDB4ZTZ9LAorCXsweDg5LCAweGYyfSwKKwl7MHg4YSwgMHgwM30sCisJezB4OGMsIDB4ODl9LAkvKiBjb20xOSAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDkwLCAweDdkfSwKKwl7MHg5MSwgMHg3Yn0sCisJezB4OWQsIDB4MDN9LAkvKiBsY2M2ICovCisJezB4OWUsIDB4MDR9LAkvKiBsY2M3ICovCisJezB4OWYsIDB4N2F9LAorCXsweGEwLCAweDc5fSwKKwl7MHhhMSwgMHg0MH0sCS8qIGFlY2htICovCisJezB4YTQsIDB4NTB9LAkvKiBjb20yMSAqLworCXsweGE1LCAweDY4fSwJLyogY29tMjYgKi8KKwl7MHhhNiwgMHg0YX0sCS8qIEFXQiBncmVlbiAqLworCXsweGE4LCAweGMxfSwJLyogcmVmYTggKi8KKwl7MHhhOSwgMHhlZn0sCS8qIHJlZmE5ICovCisJezB4YWEsIDB4OTJ9LAorCXsweGFiLCAweDA0fSwKKwl7MHhhYywgMHg4MH0sCS8qIGJsYWNrIGxldmVsIGNvbnRyb2wgKi8KKwl7MHhhZCwgMHg4MH0sCisJezB4YWUsIDB4ODB9LAorCXsweGFmLCAweDgwfSwKKwl7MHhiMiwgMHhmMn0sCisJezB4YjMsIDB4MjB9LAorCXsweGI0LCAweDIwfSwJLyogY3RybGI0ICovCisJezB4YjUsIDB4MDB9LAorCXsweGI2LCAweGFmfSwKKwl7MHhiYiwgMHhhZX0sCisJezB4YmMsIDB4N2Z9LAkvKiBBREMgY2hhbm5lbCBvZmZzZXRzICovCisJezB4ZGIsIDB4N2Z9LAorCXsweGJlLCAweDdmfSwKKwl7MHhiZiwgMHg3Zn0sCisJezB4YzAsIDB4ZTJ9LAorCXsweGMxLCAweGMwfSwKKwl7MHhjMiwgMHgwMX0sCisJezB4YzMsIDB4NGV9LAorCXsweGM2LCAweDg1fSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4YzksIDB4ZTB9LAorCXsweGNhLCAweGU4fSwKKwl7MHhjYiwgMHhmMH0sCisJezB4Y2MsIDB4ZDh9LAorCXsweGNkLCAweGYxfSwKKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisKKwl7MHhjNSwgMHgwM30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4NmEsIDB4MDJ9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCisJezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLworCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwKKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAwfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCisJezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhhYX0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfMltdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweDUwfSwKKwl7MHhjMSwgMHgzY30sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweGRhLCAweDAxfSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDNjfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGEwfSwKKwl7MHg1YiwgMHg3OH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfMltdWzJdID0geworCXsweDNiLCAweGM0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCisJezB4YzUsIDB4MDd9LAorCXsweGEyLCAweDRifSwKKwl7MHhhMywgMHgzZX0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCisvKiBzaGFycG5lc3MgKi8KKwl7MHgzZiwgMHgwMX0sCisJezB4ZmYsIDB4NDJ9LAkvKiByZWFkIDQyLCB3cml0ZSBmZiAwMCAqLworCXsweDQyLCAweGMxfSwJLyogY29tMTcgKi8KKy8qIHNhdHVyYXRpb24gKi8KKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisvKiBjb250cmFzdCAqLworCXsweDU2LCAweDQwfSwKKy8qIGJyaWdodG5lc3MgKi8KKwl7MHg1NSwgMHg4Zn0sCisvKiBleHBvICovCisJezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCisJezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLworCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfdmdhW11bMl0gPSB7CS8qIHNhbWUgZm9yIHF2Z2EgKi8KKwl7MHgxMiwgMHg2Mn0sCS8qIGNvbTcgLSAzMGZwcyBWR0EgWVVWICovCisJezB4MzYsIDB4ZmF9LAkvKiBhcmVmMyAqLworCXsweDY5LCAweDBhfSwJLyogaHYgKi8KKwl7MHg4YywgMHg4OX0sCS8qIGNvbTIyICovCisJezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCisJezB4M2UsIDB4MGN9LAkvKiBjb20xNCAqLworCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg3MiwgMHgwMH0sCisJezB4NzMsIDB4MDB9LAorCXsweDc0LCAweDNhfSwKKwl7MHg3NSwgMHgzNX0sCisJezB4NzYsIDB4MDF9LAorCXsweGM3LCAweDgwfSwJLyogY29tMjQgKi8KKwl7MHgwMywgMHgxMn0sCS8qIHZyZWYgKi8KKwl7MHgxNywgMHgxNn0sCS8qIGhzdGFydCAqLworCXsweDE4LCAweDAyfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4M2R9LAkvKiB2c3RvcCAqLworCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLworCXsweGMwLCAweGFhfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMV9zdmdhW11bMl0gPSB7CisJezB4MTIsIDB4MDJ9LAkvKiBjb203IC0gWVVZViAtIFZHQSAxNSBmdWxsIHJlc29sdXRpb24gKi8KKwl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDhjLCAweDBkfSwJLyogY29tMjIgKi8KKwl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLworCXsweDAzLCAweDFifSwJLyogdnJlZiAqLworCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4YmR9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4ZTJ9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8xX3hnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAxfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhlMn0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfc3hnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAxfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhlMn0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3F2Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMH0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweGEwfSwKKwl7MHg1MiwgMHg3OH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHgwMH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAwfSwKKwl7MHg1YSwgMHg1MH0sCisJezB4NWIsIDB4M2N9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF92Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDF9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHhhMH0sCisJezB4NTIsIDB4M2N9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4MDB9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMH0sCisJezB4NWEsIDB4YTB9LAorCXsweDViLCAweDc4fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfc3ZnYVtdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweGEwfSwKKwl7MHhjMSwgMHg4MH0sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4NDB9LAorCXsweDUyLCAweDAwfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDg4fSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGM4fSwKKwl7MHg1YiwgMHg5Nn0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHhkYSwgMHgwMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF94Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHhhMH0sCisJezB4YzEsIDB4ODB9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDRjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweDQwfSwKKwl7MHg1MiwgMHgwMH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHg4OH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAxfSwKKwl7MHg1YSwgMHgwMH0sCisJezB4NWIsIDB4YzB9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4ZGEsIDB4MDF9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfc3hnYVtdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweGEwfSwKKwl7MHhjMSwgMHg4MH0sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzJfcXZnYVtdWzJdID0geworCXsweDNiLCAweGU0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLworCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLworCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhjNSwgMHgwM30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YTIsIDB4OTZ9LAkvKiBiZDUwICovCisJezB4YTMsIDB4N2R9LAkvKiBiZDYwICovCisKKwl7MHhmZiwgMHgxM30sCS8qIHJlYWQgMTMsIHdyaXRlIGZmIDAwICovCisJezB4MTMsIDB4ZTd9LAorCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl92Z2FbXVsyXSA9IHsKKwl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLworCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLworCXsweDEzLCAweGUwfSwJLyogY29tOCAqLworCXsweDAwLCAweDAwfSwKKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YzUsIDB4MDd9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGEyLCAweDRifSwJLyogYmQ1MCAqLworCXsweGEzLCAweDNlfSwJLyogYmQ2MCAqLworCisJezB4MmQsIDB4MDB9LAkvKiBhZHZmbCAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8yX3N2Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgeGdhICovCisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl9zeGdhW11bMl0gPSB7CisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KK307CisKK3N0YXRpYyB2b2lkIHJlZ193X2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWw7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3cgZmFpbGVkICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KK30KKworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInJlZ193IFslMDR4XSA9ICUwMngiLCByZWcsIHZhbCk7CisJcmVnX3dfaShnc3BjYV9kZXYsIHJlZywgdmFsKTsKK30KKworc3RhdGljIHU4IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlQREVCVUcoRF9VU0JJLCAicmVnX3IgWyUwNHhdIC0+ICUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3IgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1OCBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKKworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSAweDAwOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgMHgwNDoKKwkJCXJldHVybiAwOworCQljYXNlIDB4MDM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBERUJVRyhEX1VTQkl8RF9VU0JPLAorCQkJCSJzY2NiIHN0YXR1cyAweCUwMngsIGF0dGVtcHQgJWQvNSIsCisJCQkJZGF0YSwgaSArIDEpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzY2NiX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInNjY2Jfd3JpdGUgWyUwMnhdID0gJTAyeCIsIHJlZywgdmFsKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJcmVnX3dfaShnc3BjYV9kZXYsIE9WNTM0X1JFR19XUklURSwgdmFsKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CisKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2Jfd3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB1OCBzY2NiX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQoreworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJcmVnX3coZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9XUklURV8yKTsKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVhZCBmYWlsZWQgMSIpOworCisJcmVnX3coZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOworCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKKwkJUERFQlVHKERfRVJSLCAic2NjYl9yZWFkIGZhaWxlZCAyIik7CisKKwlyZXR1cm4gcmVnX3IoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfUkVBRCk7Cit9CisKKy8qIG91dHB1dCBhIGJyaWRnZSBzZXF1ZW5jZSAocmVnIC0gdmFsKSAqLworc3RhdGljIHZvaWQgcmVnX3dfYXJyYXkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3QgdTggKCpkYXRhKVsyXSwgaW50IGxlbikKK3sKKwl3aGlsZSAoLS1sZW4gPj0gMCkgeworCQlyZWdfdyhnc3BjYV9kZXYsICgqZGF0YSlbMF0sICgqZGF0YSlbMV0pOworCQlkYXRhKys7CisJfQorfQorCisvKiBvdXRwdXQgYSBzZW5zb3Igc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHNjY2Jfd19hcnJheShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCB1OCAoKmRhdGEpWzJdLCBpbnQgbGVuKQoreworCXdoaWxlICgtLWxlbiA+PSAwKSB7CisJCWlmICgoKmRhdGEpWzBdICE9IDB4ZmYpIHsKKwkJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAoKmRhdGEpWzBdLCAoKmRhdGEpWzFdKTsKKwkJfSBlbHNlIHsKKwkJCXNjY2JfcmVhZChnc3BjYV9kZXYsICgqZGF0YSlbMV0pOworCQkJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCQl9CisJCWRhdGErKzsKKwl9Cit9CisKKy8qIFR3byBiaXRzIGNvbnRyb2wgTEVEOiAweDIxIGJpdCA3IGFuZCAweDIzIGJpdCA3LgorICogKGRpcmVjdGlvbiBhbmQgb3V0cHV0KT8gKi8KK3N0YXRpYyB2b2lkIHNldF9sZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc3RhdHVzKQoreworCXU4IGRhdGE7CisKKwlQREVCVUcoRF9DT05GLCAibGVkIHN0YXR1czogJWQiLCBzdGF0dXMpOworCisJZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgyMSk7CisJZGF0YSB8PSAweDgwOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKKwlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCAweDIzKTsKKwlpZiAoc3RhdHVzKQorCQlkYXRhIHw9IDB4ODA7CisJZWxzZQorCQlkYXRhICY9IH4weDgwOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDIzLCBkYXRhKTsKKworCWlmICghc3RhdHVzKSB7CisJCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MjEpOworCQlkYXRhICY9IH4weDgwOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IHZhbDsKKworCXZhbCA9IHNkLT5icmlnaHRuZXNzOworCWlmICh2YWwgPCA4KQorCQl2YWwgPSAxNSAtIHZhbDsJCS8qIGYgLi4gOCAqLworCWVsc2UKKwkJdmFsID0gdmFsIC0gODsJCS8qIDAgLi4gNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDU1LAkvKiBicnRuIC0gYnJpZ2h0bmVzcyBhZGp1c3RtZW50ICovCisJCQkweDBmIHwgKHZhbCA8PCA0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NiwJLyogY25zdDEgLSBjb250cmFzdCAxIGN0cmwgY29lZmYgKi8KKwkJCXNkLT5jb250cmFzdCA8PCA0KTsKK30KKworc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCB2YWw7CisKKy8qZml4bWU6IHNob3VsZCBhZGp1c3QgYWdjL2F3Yi9hZWMgYnkgZGlmZmVyZW50IGNvbnRyb2xzICovCisJdmFsID0gc2QtPmF1dG9nYWluOworCXZhbCA9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlpZiAoc2QtPmF1dG9nYWluKQorCQl2YWwgfD0gMHgwNTsJCS8qIGFnYyAmIGFlYyAqLworCWVsc2UKKwkJdmFsICY9IDB4ZmE7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCXN0YXRpYyBjb25zdCB1OCBleHBvWzRdID0gezB4MDAsIDB4MjUsIDB4MzgsIDB4NWV9OworCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTAsCQkJLyogYWVjWzk6Ml0gKi8KKwkJCWV4cG9bc2QtPmV4cG9zdXJlXSk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJCS8qIGNvbTggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweGExKTsJCS8qIGFlY2ggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4YTEsIHZhbCAmIDB4ZTApOwkvKiBhZWNbMTU6MTBdID0gMCAqLworfQorCitzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzOCB2YWw7CisKKwl2YWwgPSBzZC0+c2hhcnBuZXNzOworCWlmICh2YWwgPCAwKSB7CQkJCS8qIGF1dG8gKi8KKwkJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CS8qIGNvbTE3ICovCisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwkJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCB8IDB4NDApOworCQkJCS8qIEVkZ2UgZW5oYW5jZW1lbnQgc3RyZW5ndGggYXV0byBhZGp1c3QgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAodmFsICE9IDApCisJCXZhbCA9IDEgPDwgKHZhbCAtIDEpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDNmLAkvKiBlZGdlIC0gZWRnZSBlbmhhbmNlLiBmYWN0b3IgKi8KKwkJCXZhbCk7CisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsICYgMHhiZik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsMSwgdmFsMiwgdmFsMzsKKwlzdGF0aWMgY29uc3QgdTggbWF0cml4WzVdWzJdID0geworCQl7MHgxNCwgMHgzOH0sCisJCXsweDFlLCAweDU0fSwKKwkJezB4MjgsIDB4NzB9LAorCQl7MHgzMiwgMHg4Y30sCisJCXsweDQ4LCAweDkwfQorCX07CisKKwl2YWwxID0gbWF0cml4W3NkLT5zYXR1cl1bMF07CisJdmFsMiA9IG1hdHJpeFtzZC0+c2F0dXJdWzFdOworCXZhbDMgPSB2YWwxICsgdmFsMjsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0ZiwgdmFsMyk7CS8qIG1hdHJpeCBjb2VmZiAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUwLCB2YWwzKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1MSwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTIsIHZhbDEpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUzLCB2YWwyKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NCwgdmFsMyk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTgsIDB4MWEpOwkvKiBtdHhzIC0gY29lZmYgc2lnbnMgKi8KKworCXZhbDEgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDQxKTsJLyogY29tMTYgKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDEsIHZhbDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCWlmIChzZC0+ZnJlcSA9PSAwKSB7CisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwgJiAweGRmKTsKKwkJcmV0dXJuOworCX0KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsIHwgMHgyMCk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDQyKTsJCS8qIGNvbTE3ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCWlmIChzZC0+ZnJlcSA9PSAxKQorCQl2YWwgfD0gMHgwMTsKKwllbHNlCisJCXZhbCAmPSAweGZlOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDQyLCB2YWwpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwljYW0tPmNhbV9tb2RlID0gb3Y5NjV4X21vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1eF9tb2RlKTsKKworCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOworI2lmIEFVVE9HQUlOX0RFRiAhPSAwCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEVYUE9fSURYKTsKKyNlbmRpZgorI2lmIEVYUE9fREVGICE9IDAKKwlzZC0+ZXhwb3N1cmUgPSBFWFBPX0RFRjsKKyNlbmRpZgorI2lmIFNIQVJQTkVTU19ERUYgIT0gMAorCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOworI2VuZGlmCisJc2QtPnNhdHVyID0gU0FUVVJfREVGOworCXNkLT5mcmVxID0gRlJFUV9ERUY7CisKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXUxNiBzZW5zb3JfaWQ7CisKKwkvKiByZXNldCBicmlkZ2UgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTcsIDB4M2EpOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwOCk7CisJbXNsZWVwKDEwMCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBzZW5zb3IgYWRkcmVzcyAqLworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsIDB4NjApOworCisJLyogcmVzZXQgc2Vuc29yICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTIsIDB4ODApOworCW1zbGVlcCgxMCk7CisKKwkvKiBwcm9iZSB0aGUgc2Vuc29yICovCisJc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYSk7CisJc2Vuc29yX2lkID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKKwlzZW5zb3JfaWQgfD0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgSUQ6ICUwNHgiLCBzZW5zb3JfaWQpOworCisJLyogaW5pdGlhbGl6ZSAqLworCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX2luaXQsCisJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0KSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXQsCisJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0KSk7CisJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF8yLAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF8yKSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXRfMiwKKwkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfMikpOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKKwlzZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN3aXRjaCAoZ3NwY2FfZGV2LT5jdXJyX21vZGUpIHsKKwljYXNlIFFWR0FfTU9ERToJCQkvKiAzMjB4MjQwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9xdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3F2Z2EpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzJfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3F2Z2EpKTsKKwkJYnJlYWs7CisJY2FzZSBWR0FfTU9ERToJCQkvKiA2NDB4NDgwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF92Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfdmdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3ZnYSkpOworCQlicmVhazsKKwljYXNlIFNWR0FfTU9ERToJCQkvKiA4MDB4NjAwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3N2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMV9zdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3N2Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfc3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMl9zdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0XzJfc3ZnYSkpOworCQlicmVhazsKKwljYXNlIFhHQV9NT0RFOgkJCS8qIDEwMjR4NzY4ICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3hnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3hnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF94Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfeGdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3N2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9zdmdhKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNYR0FfTU9ERToJCQkgKiAxMjgweDEwMjQgKi8KKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzFfc3hnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3N4Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfc3hnYSwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9zeGdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3N4Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9zeGdhKSk7CisJCWJyZWFrOworCX0KKwlzZXRmcmVxKGdzcGNhX2Rldik7CisJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCXNldHNhdHVyKGdzcGNhX2Rldik7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJc2V0X2xlZChnc3BjYV9kZXYsIDEpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOworCXNldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworfQorCisvKiBWYWx1ZXMgZm9yIGJtSGVhZGVySW5mbyAoVmlkZW8gYW5kIFN0aWxsIEltYWdlIFBheWxvYWQgSGVhZGVycywgMi40LjMuMykgKi8KKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0gJKDEgPDwgNykKKyNkZWZpbmUgVVZDX1NUUkVBTV9FUlIJKDEgPDwgNikKKyNkZWZpbmUgVVZDX1NUUkVBTV9TVEkJKDEgPDwgNSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9SRVMJKDEgPDwgNCkKKyNkZWZpbmUgVVZDX1NUUkVBTV9TQ1IJKDEgPDwgMykKKyNkZWZpbmUgVVZDX1NUUkVBTV9QVFMJKDEgPDwgMikKKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0YJKDEgPDwgMSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9GSUQJKDEgPDwgMCkKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTMyIHRoaXNfcHRzOworCXU4IHRoaXNfZmlkOworCWludCByZW1haW5pbmdfbGVuID0gbGVuOworCisJZG8geworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0MCk7CisKKwkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKKwkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUworCQkgICBjaGFuZ2VzLiAgQSBmcmFtZSBlbmRzIHdoZW4gRU9GIGlzIHNldCwgYW5kIHdlJ3ZlIHJlY2VpdmVkCisJCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KKworCQkvKiBWZXJpZnkgVVZDIGhlYWRlci4gIEhlYWRlciBsZW5ndGggaXMgYWx3YXlzIDEyICovCisJCWlmIChkYXRhWzBdICE9IDEyIHx8IGxlbiA8IDEyKSB7CisJCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOworCQkJZ290byBkaXNjYXJkOworCQl9CisKKwkJLyogQ2hlY2sgZXJyb3JzICovCisJCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FUlIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJwYXlsb2FkIGVycm9yIik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KKworCQkvKiBFeHRyYWN0IFBUUyBhbmQgRklEICovCisJCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJQVFMgbm90IHByZXNlbnQiKTsKKwkJCWdvdG8gZGlzY2FyZDsKKwkJfQorCQl0aGlzX3B0cyA9IChkYXRhWzVdIDw8IDI0KSB8IChkYXRhWzRdIDw8IDE2KQorCQkJCQkJfCAoZGF0YVszXSA8PCA4KSB8IGRhdGFbMl07CisJCXRoaXNfZmlkID0gZGF0YVsxXSAmIFVWQ19TVFJFQU1fRklEOworCisJCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLworCQlpZiAodGhpc19wdHMgIT0gc2QtPmxhc3RfcHRzIHx8IHRoaXNfZmlkICE9IHNkLT5sYXN0X2ZpZCkgeworCQkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBJTlRFUl9QQUNLRVQpCisJCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCQlOVUxMLCAwKTsKKwkJCXNkLT5sYXN0X3B0cyA9IHRoaXNfcHRzOworCQkJc2QtPmxhc3RfZmlkID0gdGhpc19maWQ7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQkvKiBJZiB0aGlzIHBhY2tldCBpcyBtYXJrZWQgYXMgRU9GLCBlbmQgdGhlIGZyYW1lICovCisJCX0gZWxzZSBpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7CisJCQlzZC0+bGFzdF9wdHMgPSAwOworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQl9IGVsc2UgeworCisJCQkvKiBBZGQgdGhlIGRhdGEgZnJvbSB0aGlzIHBheWxvYWQgKi8KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKKwkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CisJCX0KKworCQkvKiBEb25lIHRoaXMgcGF5bG9hZCAqLworCQlnb3RvIHNjYW5fbmV4dDsKKworZGlzY2FyZDoKKwkJLyogRGlzY2FyZCBkYXRhIHVudGlsIGEgbmV3IGZyYW1lIHN0YXJ0cy4gKi8KKwkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisKK3NjYW5fbmV4dDoKKwkJcmVtYWluaW5nX2xlbiAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCX0gd2hpbGUgKHJlbWFpbmluZ19sZW4gPiAwKTsKK30KKworLyogY29udHJvbHMgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCWlmICh2YWwpCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPX0lEWCk7CisJCWVsc2UKKwkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjICY9IH4oMSA8PCBFWFBPX0lEWCk7CisJCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJfQorCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmV4cG9zdXJlID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmV4cG9zdXJlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+c2hhcnBuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2hhcnBuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zYXR1ciA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNhdHVyKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zYXR1cjsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+ZnJlcSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGZyZXEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+ZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQoreworCXN3aXRjaCAobWVudS0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIk5vRmxpa2VyIik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgICAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzICAgID0gc2RfY3RybHMsCisJLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyAgID0gc2RfY29uZmlnLAorCS5pbml0ICAgICA9IHNkX2luaXQsCisJLnN0YXJ0ICAgID0gc2Rfc3RhcnQsCisJLnN0b3BOICAgID0gc2Rfc3RvcE4sCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICAgID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwppbmRleCA0NzA2YTgyLi4wYzg3YzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAicGFjMjA3IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGdvZWRlQHJlZGhhdC5jb20+Iik7CkBAIC03Nyw3ICs3OCw3IEBACiBzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpAQCAtNDk1LDYgKzQ5NiwyNSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnB1dCBwYWNrZXQgbGVuZ3RoICovCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobGVuID09IDIgJiYgZGF0YVswXSA9PSAweDVhICYmIGRhdGFbMV0gPT0gMHg1YSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAxKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC01MDYsNiArNTI2LDkgQEAKIAkuc3RvcE4gPSBzZF9zdG9wTiwKIAkuZHFfY2FsbGJhY2sgPSBwYWMyMDdfZG9fYXV0b19nYWluLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwppbmRleCBkZTBiNjZjLi4yYTY4MjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwpAQCAtNCw3ICs0LDkgQEAKICAqCiAgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CiAgKgotICogU2VwYXJhdGVkIGZyb20gUGl4YXJ0IFBBQzczMTEgbGlicmFyeSBieSBN4XJ0b24gTultZXRoIDxubTEyN0BmcmVlbWFpbC5odT4KKyAqIFNlcGFyYXRlZCBmcm9tIFBpeGFydCBQQUM3MzExIGxpYnJhcnkgYnkgTcOhcnRvbiBOw6ltZXRoCisgKiBDYW1lcmEgYnV0dG9uIGlucHV0IGhhbmRsaW5nIGJ5IE3DoXJ0b24gTsOpbWV0aCA8bm0xMjdAZnJlZW1haWwuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNw6FydG9uIE7DqW1ldGggPG5tMTI3QGZyZWVtYWlsLmh1PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMzMgKzI0LDI2IEBACiAgKi8KIAogLyogU29tZSBkb2N1bWVudGF0aW9uIGFib3V0IHZhcmlvdXMgcmVnaXN0ZXJzIGFzIGRldGVybWluZWQgYnkgdHJpYWwgYW5kIGVycm9yLgotICAgV2hlbiB0aGUgcmVnaXN0ZXIgYWRkcmVzc2VzIGRpZmZlciBiZXR3ZWVuIHRoZSA3MjAyIGFuZCB0aGUgNzMxMSB0aGUgMgotICAgZGlmZmVyZW50IGFkZHJlc3NlcyBhcmUgd3JpdHRlbiBhcyA3MzAyYWRkci83MzExYWRkciwgd2hlbiBvbmUgb2YgdGhlIDIKLSAgIGFkZHJlc3NlcyBpcyBhIC0gc2lnbiB0aGF0IHJlZ2lzdGVyIGRlc2NyaXB0aW9uIGlzIG5vdCB2YWxpZCBmb3IgdGhlCi0gICBtYXRjaGluZyBJQy4KIAogICAgUmVnaXN0ZXIgcGFnZSAxOgogCiAgICBBZGRyZXNzCURlc2NyaXB0aW9uCi0gICAtLzB4MDgJVW5rbm93biBjb21wcmVzc29yIHJlbGF0ZWQsIG11c3QgYWx3YXlzIGJlIDggZXhjZXB0IHdoZW4gbm90Ci0JCWluIDY0MHg0ODAgcmVzb2x1dGlvbiBhbmQgcGFnZSA0IHJlZyAyIDw9IDMgdGhlbiBzZXQgaXQgdG8gOSAhCi0gICAtLzB4MWIJQXV0byB3aGl0ZSBiYWxhbmNlIHJlbGF0ZWQsIGJpdCAwIGlzIEFXQiBlbmFibGUgKGludmVydGVkKQotCQliaXRzIDM0NSBzZWVtIHRvIHRvZ2dsZSBwZXIgY29sb3IgZ2FpbnMgb24vb2ZmIChpbnZlcnRlZCkKICAgIDB4NzgJCUdsb2JhbCBjb250cm9sLCBiaXQgNiBjb250cm9scyB0aGUgTEVEIChpbnZlcnRlZCkKLSAgIC0vMHg4MAlKUEVHIGNvbXByZXNzaW9uIHJhdGlvID8gQmVzdCBub3QgdG91Y2hlZAogCi0gICBSZWdpc3RlciBwYWdlIDMvNDoKKyAgIFJlZ2lzdGVyIHBhZ2UgMzoKIAogICAgQWRkcmVzcwlEZXNjcmlwdGlvbgotICAgMHgwMgkJQ2xvY2sgZGl2aWRlciAyLTYzLCBmcHMgPX4gNjAgLyB2YWwuIE11c3QgYmUgYSBtdWx0aXBsZSBvZiAzIG9uCisgICAweDAyCQlDbG9jayBkaXZpZGVyIDMtNjMsIGZwcyA9IDkwIC8gdmFsLiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBvbgogCQl0aGUgNzMwMiwgc28gb25lIG9mIDMsIDYsIDksIC4uLiwgZXhjZXB0IHdoZW4gYmV0d2VlbiA2IGFuZCAxMj8KLSAgIC0vMHgwZglNYXN0ZXIgZ2FpbiAxLTI0NSwgbG93IHZhbHVlID0gaGlnaCBnYWluCi0gICAweDEwLy0JTWFzdGVyIGdhaW4gMC0zMQotICAgLS8weDEwCUFub3RoZXIgZ2FpbiAwLTE1LCBsaW1pdGVkIGluZmx1ZW5jZSAoMS0yeCBnYWluIEkgZ3Vlc3MpCisgICAweDAzCQlWYXJpYWJsZSBmcmFtZXJhdGUgY3RybCByZWcyPT0zOiAwIC0+IH4zMCBmcHMsIDI1NSAtPiB+MjJmcHMKKyAgIDB4MDQJCUFub3RoZXIgdmFyIGZyYW1lcmF0ZSBjdHJsIHJlZzI9PTMsIHJlZzM9PTA6IDAgLT4gfjMwIGZwcywKKwkJNjMgLT4gfjI3IGZwcywgdGhlIDIgbXNiJ3MgbXVzdCBhbHdheXMgYmUgMSAhIQorICAgMHgwNQkJQW5vdGhlciB2YXIgZnJhbWVyYXRlIGN0cmwgcmVnMj09MywgcmVnMz09MCwgcmVnND09MHhjMDoKKwkJMSAtPiB+MzAgZnBzLCAyIC0+IH4yMCBmcHMKKyAgIDB4MGUJCUV4cG9zdXJlIGJpdHMgMC03LCAwLTQ0OCwgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUKKyAgIDB4MGYJCUV4cG9zdXJlIGJpdCA4LCAwLTQ0OCwgNDQ4ID0gbm8gZXhwb3N1cmUgYXQgYWxsCisgICAweDEwCQlNYXN0ZXIgZ2FpbiAwLTMxCiAgICAweDIxCQlCaXRmaWVsZDogMC0xIHVudXNlZCwgMi0zIHZmbGlwL2hmbGlwLCA0LTUgdW5rbm93biwgNi03IHVudXNlZAotICAgLS8weDI3CVNlZW1zIHRvIHRvZ2dsZSB2YXJpb3VzIGdhaW5zIG9uIC8gb2ZmLCBTZXR0aW5nIGJpdCA3IHNlZW1zIHRvCi0JCWNvbXBsZXRlbHkgZGlzYWJsZSB0aGUgYW5hbG9nIGFtcGxpZmljYXRpb24gYmxvY2suIFNldCB0byAweDY4Ci0JCWZvciBtYXggZ2FpbiwgMHgxNCBmb3IgbWluaW1hbCBnYWluLgogCiAgICBUaGUgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBpbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIApAQCAtNjgsNiArNjMsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzAyIgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCkBAIC04Niw4ICs4Miw4IEBACiAJdW5zaWduZWQgY2hhciByZWRfYmFsYW5jZTsKIAl1bnNpZ25lZCBjaGFyIGJsdWVfYmFsYW5jZTsKIAl1bnNpZ25lZCBjaGFyIGdhaW47Ci0JdW5zaWduZWQgY2hhciBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOworCXVuc2lnbmVkIHNob3J0IGV4cG9zdXJlOwogCV9fdTggaGZsaXA7CiAJX191OCB2ZmxpcDsKIAl1OCBmbGFnczsKQEAgLTEyNCw4ICsxMjAsNyBAQAogc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewotLyogVGhpcyBjb250cm9sIGlzIHBhYzczMDIgb25seSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTE0MSw3ICsxMzYsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKLS8qIFRoaXMgY29udHJvbCBpcyBmb3IgYm90aCB0aGUgNzMwMiBhbmQgdGhlIDczMTEgKi8KIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTE1Nyw3ICsxNTEsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCiAJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKIAl9LAotLyogVGhpcyBjb250cm9sIGlzIHBhYzczMDIgb25seSAqLwogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCkBAIC0yMTUsNyArMjA4LDYgQEAKIAkgICAgLnNldCA9IHNkX3NldGJsdWViYWxhbmNlLAogCSAgICAuZ2V0ID0gc2RfZ2V0Ymx1ZWJhbGFuY2UsCiAJfSwKLS8qIEFsbCBjb250cm9scyBiZWxvdyBhcmUgZm9yIGJvdGggdGhlIDczMDIgYW5kIHRoZSA3MzExICovCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfR0FJTiwKQEAgLTIzOCwxMSArMjMwLDEwIEBACiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgPSAiRXhwb3N1cmUiLAogCQkubWluaW11bSA9IDAsCi0jZGVmaW5lIEVYUE9TVVJFX01BWCAyNTUKLQkJLm1heGltdW0gPSBFWFBPU1VSRV9NQVgsCisJCS5tYXhpbXVtID0gMTAyMywKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPU1VSRV9ERUYgIDE2IC8qICAzMiBtcyAvIDMwIGZwcyAqLwotI2RlZmluZSBFWFBPU1VSRV9LTkVFIDUwIC8qIDEwMCBtcyAvIDEwIGZwcyAqLworI2RlZmluZSBFWFBPU1VSRV9ERUYgIDY2ICAvKiAgMzMgbXMgLyAzMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfS05FRSAxMzMgLyogIDY2IG1zIC8gMTUgZnBzICovCiAJCS5kZWZhdWx0X3ZhbHVlID0gRVhQT1NVUkVfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCkBAIC0zMDEsNyArMjkyLDYgQEAKIH07CiAKICNkZWZpbmUgTE9BRF9QQUdFMwkJMjU1Ci0jZGVmaW5lIExPQURfUEFHRTQJCTI1NAogI2RlZmluZSBFTkRfT0ZfU0VRVUVOQ0UJCTAKIAogLyogcGFjIDczMDIgKi8KQEAgLTM3OSw3ICszNjksNyBAQAogI2RlZmluZSBTS0lQCQkweGFhCiAvKiBwYWdlIDMgLSB0aGUgdmFsdWUgU0tJUCBzYXlzIHNraXAgdGhlIGluZGV4IC0gc2VlIHJlZ193X3BhZ2UoKSAqLwogc3RhdGljIGNvbnN0IF9fdTggcGFnZTNfNzMwMltdID0gewotCTB4OTAsIDB4NDAsIDB4MDMsIDB4NTAsIDB4YzIsIDB4MDEsIDB4MTQsIDB4MTYsCisJMHg5MCwgMHg0MCwgMHgwMywgMHgwMCwgMHhjMCwgMHgwMSwgMHgxNCwgMHgxNiwKIAkweDE0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDMzLCAweDAwLAogCTB4MGYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwMSwgMHhiMywgMHgwMSwgMHgwMCwKQEAgLTM4OCw3ICszNzgsNyBAQAogCTB4YTQsIDB4YjgsIDB4ZTAsIDB4MmEsIDB4ZjYsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweGZjLCAweDAwLCAweGYyLCAweDFmLCAweDA0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzAsIDB4MTAsIDB4MDAsIDB4MDAsCisJU0tJUCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMCwgMHgxMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4NDAsIDB4ZmYsIDB4MDMsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKQEAgLTQwMSwxMiArMzkxLDE0IEBACiAJMHgwMAogfTsKIAotc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQxNSwyMCArNDA3LDIzIEBACiAJCQkwLAkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAicmVnX3dfYnVmKCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTggaW5kZXgsCiAJCSAgX191OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNDM2LDMyICs0MzEsMzIgQEAKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193KCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCB2YWx1ZSAweCV4LCBlcnJvciAlaSIsCiAJCWluZGV4LCB2YWx1ZSwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCi1zdGF0aWMgaW50IHJlZ193X3NlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBfX3U4ICpzZXEsIGludCBsZW4pCiB7Ci0JaW50IHJldCA9IDA7CiAJd2hpbGUgKC0tbGVuID49IDApIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCBzZXFbMF0sIHNlcVsxXSk7CisJCXJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOwogCQlzZXEgKz0gMjsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogbG9hZCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwotc3RhdGljIGludCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3BhZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqcGFnZSwgaW50IGxlbikKIHsKIAlpbnQgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewogCQlpZiAocGFnZVtpbmRleF0gPT0gU0tJUCkJCS8qIHNraXAgdGhpcyBpbmRleCAqLwogCQkJY29udGludWU7CkBAIC00NzcsNTYgKzQ3Miw0NyBAQAogCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCAiCiAJCQkidmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQkJaW5kZXgsIHBhZ2VbaW5kZXhdLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogb3V0cHV0IGEgdmFyaWFibGUgc2VxdWVuY2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfdmFyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQljb25zdCBfX3U4ICpzZXEsCi0JCQljb25zdCBfX3U4ICpwYWdlMywgdW5zaWduZWQgaW50IHBhZ2UzX2xlbiwKLQkJCWNvbnN0IF9fdTggKnBhZ2U0LCB1bnNpZ25lZCBpbnQgcGFnZTRfbGVuKQorCQkJY29uc3QgX191OCAqcGFnZTMsIHVuc2lnbmVkIGludCBwYWdlM19sZW4pCiB7CiAJaW50IGluZGV4LCBsZW47Ci0JaW50IHJldCA9IDA7CiAKIAlmb3IgKDs7KSB7CiAJCWluZGV4ID0gKnNlcSsrOwogCQlsZW4gPSAqc2VxKys7CiAJCXN3aXRjaCAobGVuKSB7CiAJCWNhc2UgRU5EX09GX1NFUVVFTkNFOgotCQkJcmV0dXJuIHJldDsKLQkJY2FzZSBMT0FEX1BBR0U0OgotCQkJcmV0ID0gcmVnX3dfcGFnZShnc3BjYV9kZXYsIHBhZ2U0LCBwYWdlNF9sZW4pOwotCQkJYnJlYWs7CisJCQlyZXR1cm47CiAJCWNhc2UgTE9BRF9QQUdFMzoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlMywgcGFnZTNfbGVuKTsKKwkJCXJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlMywgcGFnZTNfbGVuKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGxlbiA+IFVTQl9CVUZfU1opIHsKIAkJCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sCiAJCQkJCSJJbmNvcnJlY3QgdmFyaWFibGUgc2VxdWVuY2UiKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCQl3aGlsZSAobGVuID4gMCkgewogCQkJCWlmIChsZW4gPCA4KSB7Ci0JCQkJCXJldCA9IHJlZ193X2J1Zihnc3BjYV9kZXYsCisJCQkJCXJlZ193X2J1Zihnc3BjYV9kZXYsCiAJCQkJCQlpbmRleCwgc2VxLCBsZW4pOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7CiAJCQkJCXNlcSArPSBsZW47CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LCBpbmRleCwgc2VxLCA4KTsKKwkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBpbmRleCwgc2VxLCA4KTsKIAkJCQlzZXEgKz0gODsKIAkJCQlpbmRleCArPSA4OwogCQkJCWxlbiAtPSA4OwogCQkJfQogCQl9Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKIAl9CiAJLyogbm90IHJlYWNoZWQgKi8KIH0KQEAgLTU2MCwxMSArNTQ2LDEwIEBACiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBwYWM3MzAyIG9ubHkgKi8KLXN0YXRpYyBpbnQgc2V0YnJpZ2h0Y29udChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRicmlnaHRjb250KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGksIHY7Ci0JaW50IHJldDsKIAlzdGF0aWMgY29uc3QgX191OCBtYXhbMTBdID0KIAkJezB4MjksIDB4MzMsIDB4NDIsIDB4NWEsIDB4NmUsIDB4ODAsIDB4OWYsIDB4YmIsCiAJCSAweGQ0LCAweGVjfTsKQEAgLTU3Miw3ICs1NTcsNyBAQAogCQl7MHgzNSwgMHgzMywgMHgzMywgMHgyZiwgMHgyYSwgMHgyNSwgMHgxZSwgMHgxNywKIAkJIDB4MTEsIDB4MGJ9OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXYgPSBtYXhbaV07CiAJCXYgKz0gKHNkLT5icmlnaHRuZXNzIC0gQlJJR0hUTkVTU19NQVgpCkBAIC01ODIsMTM2ICs1NjcsMTIxIEBACiAJCQl2ID0gMDsKIAkJZWxzZSBpZiAodiA+IDB4ZmYpCiAJCQl2ID0gMHhmZjsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGEyICsgaSwgdik7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMiArIGksIHYpOwogCX0KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMwMiBvbmx5ICovCi1zdGF0aWMgaW50IHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgdjsKLQlpbnQgcmV0OwogCXN0YXRpYyBjb25zdCBpbnQgYVs5XSA9CiAJCXsyMTcsIC0yMTIsIDAsIC0xMDEsIDE3MCwgLTY3LCAtMzgsIC0zMTUsIDM1NX07CiAJc3RhdGljIGNvbnN0IGludCBiWzldID0KIAkJezE5LCAxMDYsIDAsIDE5LCAxMDYsIDEsIDE5LCAxMDYsIDF9OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJLyogcGFnZSAzICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkJLyogcGFnZSAwICovCiAJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewogCQl2ID0gYVtpXSAqIHNkLT5jb2xvcnMgLyBDT0xPUl9NQVggKyBiW2ldOwotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MGYgKyAyICogaSwgKHYgPj4gOCkgJiAweDA3KTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGkgKyAxLCB2KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGksICh2ID4+IDgpICYgMHgwNyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwZiArIDIgKiBpICsgMSwgdik7CiAJfQotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJjb2xvcjogJWkiLCBzZC0+Y29sb3JzKTsKLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzYsIHNkLT53aGl0ZV9iYWxhbmNlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwkJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGM2LCBzZC0+d2hpdGVfYmFsYW5jZSk7CiAKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAid2hpdGVfYmFsYW5jZTogJWkiLCBzZC0+d2hpdGVfYmFsYW5jZSk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXRyZWRiYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzUsIHNkLT5yZWRfYmFsYW5jZSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhjNSwgc2QtPnJlZF9iYWxhbmNlKTsKIAotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJyZWRfYmFsYW5jZTogJWkiLCBzZC0+cmVkX2JhbGFuY2UpOwotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzcsIHNkLT5ibHVlX2JhbGFuY2UpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGM3LCBzZC0+Ymx1ZV9iYWxhbmNlKTsKIAotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJibHVlX2JhbGFuY2U6ICVpIiwgc2QtPmJsdWVfYmFsYW5jZSk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCS8qIHBhZ2UgMyAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDEwLCBzZC0+Z2FpbiA+PiAzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJCS8qIHBhZ2UgMyAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4gPj4gMyk7CiAKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwotCV9fdTggcmVnOworCV9fdTggY2xvY2tkaXY7CisJX191MTYgZXhwb3N1cmU7CiAKLQkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMvNCBjb250YWlucyB0aGUgY2xvY2sgZGl2aWRlciBjb25maWd1cmluZyB0aGUKLQkgICBubyBmcHMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOiA2MCAvIHJlZy4gc2QtPmV4cG9zdXJlIGlzIHRoZQotCSAgIGRlc2lyZWQgZXhwb3N1cmUgdGltZSBpbiBtcy4gKi8KLQlyZWcgPSAxMjAgKiBzZC0+ZXhwb3N1cmUgLyAxMDAwOwotCWlmIChyZWcgPCAyKQotCQlyZWcgPSAyOwotCWVsc2UgaWYgKHJlZyA+IDYzKQotCQlyZWcgPSA2MzsKKwkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMgY29udGFpbnMgdGhlIGNsb2NrIGRpdmlkZXIgY29uZmlndXJpbmcgdGhlCisJICAgbm8gZnBzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTogOTAgLyByZWcuIHNkLT5leHBvc3VyZSBpcyB0aGUKKwkgICBkZXNpcmVkIGV4cG9zdXJlIHRpbWUgaW4gMC41IG1zLiAqLworCWNsb2NrZGl2ID0gKDkwICogc2QtPmV4cG9zdXJlICsgMTk5OSkgLyAyMDAwOwogCi0JLyogT24gdGhlIHBhYzczMDIgcmVnMiBNVVNUIGJlIGEgbXVsdGlwbGUgb2YgMywgc28gcm91bmQgaXQgdG8KLQkgICB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiAzLCBleGNlcHQgd2hlbiBiZXR3ZWVuIDYgYW5kIDEyPyAqLwotCWlmIChyZWcgPCA2IHx8IHJlZyA+IDEyKQotCQlyZWcgPSAoKHJlZyArIDEpIC8gMykgKiAzOwotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwMiwgcmVnKTsKKwkvKiBOb3RlIGNsb2NrZGl2ID0gMyBhbHNvIHdvcmtzLCBidXQgd2hlbiBydW5uaW5nIGF0IDMwIGZwcywgZGVwZW5kaW5nCisJICAgb24gdGhlIHNjZW5lIGJlaW5nIHJlY29yZGVkLCB0aGUgY2FtZXJhIHN3aXRjaGVzIHRvIGFub3RoZXIKKwkgICBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNlcnRhaW4gSlBFRyBibG9ja3MsIGFuZCB3ZSBkb24ndCBrbm93IGhvdworCSAgIHRvIGRlY29tcHJlc3MgdGhlc2UgYmxvY2tzLiBTbyB3ZSBjYXAgdGhlIGZyYW1lcmF0ZSBhdCAxNSBmcHMgKi8KKwlpZiAoY2xvY2tkaXYgPCA2KQorCQljbG9ja2RpdiA9IDY7CisJZWxzZSBpZiAoY2xvY2tkaXYgPiA2MykKKwkJY2xvY2tkaXYgPSA2MzsKKworCS8qIHJlZzIgTVVTVCBiZSBhIG11bHRpcGxlIG9mIDMsIGV4Y2VwdCB3aGVuIGJldHdlZW4gNiBhbmQgMTI/CisJICAgQWx3YXlzIHJvdW5kIHVwLCBvdGhlcndpc2Ugd2UgY2Fubm90IGdldCB0aGUgZGVzaXJlZCBmcmFtZXRpbWUKKwkgICB1c2luZyB0aGUgcGFydGlhbCBmcmFtZSB0aW1lIGV4cG9zdXJlIGNvbnRyb2wgKi8KKwlpZiAoY2xvY2tkaXYgPCA2IHx8IGNsb2NrZGl2ID4gMTIpCisJCWNsb2NrZGl2ID0gKChjbG9ja2RpdiArIDIpIC8gMykgKiAzOworCisJLyogZnJhbWUgZXhwb3N1cmUgdGltZSBpbiBtcyA9IDEwMDAgKiBjbG9ja2RpdiAvIDkwICAgIC0+CisJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlIC8gMikgKiA0NDggLyAoMTAwMCAqIGNsb2NrZGl2IC8gOTApICovCisJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlICogNDUgKiA0NDgpIC8gKDEwMDAgKiBjbG9ja2Rpdik7CisJLyogMCA9IHVzZSBmdWxsIGZyYW1ldGltZSwgNDQ4ID0gbm8gZXhwb3N1cmUsIHJldmVyc2UgaXQgKi8KKwlleHBvc3VyZSA9IDQ0OCAtIGV4cG9zdXJlOworCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIGNsb2NrZGl2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MGUsIGV4cG9zdXJlICYgMHhmZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBleHBvc3VyZSA+PiA4KTsKIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0aHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAl1OCBkYXRhLCBoZmxpcCwgdmZsaXA7CiAKIAloZmxpcCA9IHNkLT5oZmxpcDsKQEAgLTcyMSw0OCArNjkxLDM3IEBACiAJaWYgKHNkLT5mbGFncyAmIEZMX1ZGTElQKQogCQl2ZmxpcCA9ICF2ZmxpcDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJCS8qIHBhZ2UgMyAqLwogCWRhdGEgPSAoaGZsaXAgPyAweDA4IDogMHgwMCkgfCAodmZsaXAgPyAweDA0IDogMHgwMCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSBmb3IgcGFjNzMwMiAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZXR1cm4gcmVnX3dfc2VxKGdzcGNhX2RldiwgaW5pdF83MzAyLCBzaXplb2YoaW5pdF83MzAyKS8yKTsKKwlyZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMDIsIHNpemVvZihpbml0XzczMDIpLzIpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5zb2ZfcmVhZCA9IDA7CiAKLQlyZXQgPSByZWdfd192YXIoZ3NwY2FfZGV2LCBzdGFydF83MzAyLAotCQlwYWdlM183MzAyLCBzaXplb2YocGFnZTNfNzMwMiksCi0JCU5VTEwsIDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0YnJpZ2h0Y29udChnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Y29sb3JzKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGJsdWViYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRnYWluKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRleHBvc3VyZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0aHZmbGlwKGdzcGNhX2Rldik7CisJcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMwMiwKKwkJcGFnZTNfNzMwMiwgc2l6ZW9mKHBhZ2UzXzczMDIpKTsKKwlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CisJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJc2V0d2hpdGViYWxhbmNlKGdzcGNhX2Rldik7CisJc2V0cmVkYmFsYW5jZShnc3BjYV9kZXYpOworCXNldGJsdWViYWxhbmNlKGdzcGNhX2Rldik7CisJc2V0Z2Fpbihnc3BjYV9kZXYpOworCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJc2V0aHZmbGlwKGdzcGNhX2Rldik7CiAKIAkvKiBvbmx5IHJlc29sdXRpb24gNjQweDQ4MCBpcyBzdXBwb3J0ZWQgZm9yIHBhYzczMDIgKi8KIApAQCAtNzcxLDM0ICs3MzAsMjcgQEAKIAlhdG9taWNfc2V0KCZzZC0+YXZnX2x1bSwgLTEpOwogCiAJLyogc3RhcnQgc3RyZWFtICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMSk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgcmV0OwogCiAJLyogc3RvcCBzdHJlYW0gKi8KLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMCk7CiB9CiAKIC8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgb24gZGlzY29ubmVjdCBmb3IgcGFjNzMwMiAqLwogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCByZXQ7Ci0KIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0dXJuOwotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDApOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQwKTsKIH0KIAogLyogSW5jbHVkZSBwYWMgY29tbW9uIHNvZiBkZXRlY3Rpb24gZnVuY3Rpb25zICovCkBAIC04MDgsMjIgKzc2MCwxMyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgYXZnX2x1bSA9IGF0b21pY19yZWFkKCZzZC0+YXZnX2x1bSk7Ci0JaW50IGRlc2lyZWRfbHVtLCBkZWFkem9uZTsKKwlpbnQgZGVzaXJlZF9sdW07CisJY29uc3QgaW50IGRlYWR6b25lID0gMzA7CiAKIAlpZiAoYXZnX2x1bSA9PSAtMSkKIAkJcmV0dXJuOwogCi0JZGVzaXJlZF9sdW0gPSAyNzAgKyBzZC0+YnJpZ2h0bmVzcyAqIDQ7Ci0JLyogSGFjayBoYWNrLCB3aXRoIHRoZSA3MjAyIHRoZSBmaXJzdCBleHBvc3VyZSBzdGVwIGlzCi0JICAgcHJldHR5IGxhcmdlLCBzbyBpZiB3ZSdyZSBhYm91dCB0byBtYWtlIHRoZSBmaXJzdAotCSAgIGV4cG9zdXJlIGluY3JlYXNlIG1ha2UgdGhlIGRlYWR6b25lIGxhcmdlIHRvIGF2b2lkCi0JICAgb3NjaWxhdGluZyAqLwotCWlmIChkZXNpcmVkX2x1bSA+IGF2Z19sdW0gJiYgc2QtPmdhaW4gPT0gR0FJTl9ERUYgJiYKLQkJCXNkLT5leHBvc3VyZSA+IEVYUE9TVVJFX0RFRiAmJgotCQkJc2QtPmV4cG9zdXJlIDwgNDIpCi0JCWRlYWR6b25lID0gOTA7Ci0JZWxzZQotCQlkZWFkem9uZSA9IDMwOworCWRlc2lyZWRfbHVtID0gMjcwICsgc2QtPmJyaWdodG5lc3M7CiAKIAlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQogCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOwpAQCAtOTQ3LDcgKzg5MCw3IEBACiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk2Niw3ICs5MDksNyBAQAogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtOTg0LDcgKzkyNyw3IEBACiAJc2QtPmNvbG9ycyA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGNvbG9ycyhnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk5OCwxNCArOTQxLDExIEBACiBzdGF0aWMgaW50IHNkX3NldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+d2hpdGVfYmFsYW5jZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXJldCA9IHNldHdoaXRlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMDE5LDE0ICs5NTksMTEgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0cmVkYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+cmVkX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXRyZWRiYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSAwOwotCXJldHVybiByZXQ7CisJCXNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA0MCwxNCArOTc3LDExIEBACiBzdGF0aWMgaW50IHNkX3NldGJsdWViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5ibHVlX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA2NSw3ICs5OTksNyBAQAogCXNkLT5nYWluID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Z2Fpbihnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMDgzLDcgKzEwMTcsNyBAQAogCXNkLT5leHBvc3VyZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTE0LDcgKzEwNDgsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTMyLDcgKzEwNjYsNyBAQAogCXNkLT5oZmxpcCA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGh2ZmxpcChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTE1MCw3ICsxMDg0LDcgQEAKIAlzZC0+dmZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTExNjUsNyArMTA5OSw2IEBACiBzdGF0aWMgaW50IHNkX2RiZ19zX3JlZ2lzdGVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCWludCByZXQgPSAtRUlOVkFMOwogCV9fdTggaW5kZXg7CiAJX191OCB2YWx1ZTsKIApAQCAtMTE4NSwxNCArMTExOCwxMiBAQAogCQkvKiBOb3RlIHRoYXQgdGhlcmUgc2hhbGwgYmUgbm8gYWNjZXNzIHRvIG90aGVyIHBhZ2UKIAkJICAgYnkgYW55IG90aGVyIGZ1bmN0aW9uIGJldHdlZW4gdGhlIHBhZ2Ugc3dpdGggYW5kCiAJCSAgIHRoZSBhY3R1YWwgcmVnaXN0ZXIgd3JpdGUgKi8KLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgaW5kZXgsIHZhbHVlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCQlyZWdfdyhnc3BjYV9kZXYsIGluZGV4LCB2YWx1ZSk7CiAKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2NoaXBfaWRlbnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMTIxMCw4ICsxMTQxLDM5IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJwdXQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCXU4IGRhdGEwLCBkYXRhMTsKKworCWlmIChsZW4gPT0gMikgeworCQlkYXRhMCA9IGRhdGFbMF07CisJCWRhdGExID0gZGF0YVsxXTsKKwkJaWYgKChkYXRhMCA9PSAweDAwICYmIGRhdGExID09IDB4MTEpIHx8CisJCSAgICAoZGF0YTAgPT0gMHgyMiAmJiBkYXRhMSA9PSAweDMzKSB8fAorCQkgICAgKGRhdGEwID09IDB4NDQgJiYgZGF0YTEgPT0gMHg1NSkgfHwKKwkJICAgIChkYXRhMCA9PSAweDY2ICYmIGRhdGExID09IDB4NzcpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg4OCAmJiBkYXRhMSA9PSAweDk5KSB8fAorCQkgICAgKGRhdGEwID09IDB4YWEgJiYgZGF0YTEgPT0gMHhiYikgfHwKKwkJICAgIChkYXRhMCA9PSAweGNjICYmIGRhdGExID09IDB4ZGQpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhlZSAmJiBkYXRhMSA9PSAweGZmKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uIGZvciBwYWM3MzAyICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApAQCAtMTIyNiw2ICsxMTg4LDkgQEAKIAkuc2V0X3JlZ2lzdGVyID0gc2RfZGJnX3NfcmVnaXN0ZXIsCiAJLmdldF9jaGlwX2lkZW50ID0gc2RfY2hpcF9pZGVudCwKICNlbmRpZgorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwppbmRleCA0MmNmY2RmLi40NGZlZDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwpAQCAtNTEsNiArNTEsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzExIgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJUaG9tYXMgS2Fpc2VyIHRob21hc0BrYWlzZXItbGludXgubGkiKTsKQEAgLTg4LDcgKzg5LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogLyogVGhpcyBjb250cm9sIGlzIGZvciBib3RoIHRoZSA3MzAyIGFuZCB0aGUgNzMxMSAqLwogCXsKIAkgICAgewpAQCAtMjAwLDcgKzIwMSw2IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCi0jZGVmaW5lIExPQURfUEFHRTMJCTI1NQogI2RlZmluZSBMT0FEX1BBR0U0CQkyNTQKICNkZWZpbmUgRU5EX09GX1NFUVVFTkNFCQkwCiAKQEAgLTI1OSwxMiArMjU5LDE0IEBACiAJMHgyMywgMHgyOCwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMAogfTsKIAotc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTI3MywyMCArMjc1LDIzIEBACiAJCQkwLAkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAicmVnX3dfYnVmKCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTggaW5kZXgsCiAJCSAgX191OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtMjk0LDMyICsyOTksMzIgQEAKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193KCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCB2YWx1ZSAweCV4LCBlcnJvciAlaSIsCiAJCWluZGV4LCB2YWx1ZSwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCi1zdGF0aWMgaW50IHJlZ193X3NlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBfX3U4ICpzZXEsIGludCBsZW4pCiB7Ci0JaW50IHJldCA9IDA7CiAJd2hpbGUgKC0tbGVuID49IDApIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCBzZXFbMF0sIHNlcVsxXSk7CisJCXJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOwogCQlzZXEgKz0gMjsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogbG9hZCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwotc3RhdGljIGludCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3BhZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqcGFnZSwgaW50IGxlbikKIHsKIAlpbnQgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewogCQlpZiAocGFnZVtpbmRleF0gPT0gU0tJUCkJCS8qIHNraXAgdGhpcyBpbmRleCAqLwogCQkJY29udGludWU7CkBAIC0zMzUsNTYgKzM0MCw0NyBAQAogCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCAiCiAJCQkidmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQkJaW5kZXgsIHBhZ2VbaW5kZXhdLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogb3V0cHV0IGEgdmFyaWFibGUgc2VxdWVuY2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfdmFyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQljb25zdCBfX3U4ICpzZXEsCi0JCQljb25zdCBfX3U4ICpwYWdlMywgdW5zaWduZWQgaW50IHBhZ2UzX2xlbiwKIAkJCWNvbnN0IF9fdTggKnBhZ2U0LCB1bnNpZ25lZCBpbnQgcGFnZTRfbGVuKQogewogCWludCBpbmRleCwgbGVuOwotCWludCByZXQgPSAwOwogCiAJZm9yICg7OykgewogCQlpbmRleCA9ICpzZXErKzsKIAkJbGVuID0gKnNlcSsrOwogCQlzd2l0Y2ggKGxlbikgewogCQljYXNlIEVORF9PRl9TRVFVRU5DRToKLQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm47CiAJCWNhc2UgTE9BRF9QQUdFNDoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlNCwgcGFnZTRfbGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIExPQURfUEFHRTM6Ci0JCQlyZXQgPSByZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTMsIHBhZ2UzX2xlbik7CisJCQlyZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTQsIHBhZ2U0X2xlbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChsZW4gPiBVU0JfQlVGX1NaKSB7CiAJCQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAogCQkJCQkiSW5jb3JyZWN0IHZhcmlhYmxlIHNlcXVlbmNlIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJcmV0dXJuOwogCQkJfQogCQkJd2hpbGUgKGxlbiA+IDApIHsKIAkJCQlpZiAobGVuIDwgOCkgewotCQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LAorCQkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LAogCQkJCQkJaW5kZXgsIHNlcSwgbGVuKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwogCQkJCQlzZXEgKz0gbGVuOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJcmV0ID0gcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CisJCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CiAJCQkJc2VxICs9IDg7CiAJCQkJaW5kZXggKz0gODsKIAkJCQlsZW4gLT0gODsKIAkJCX0KIAkJfQotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CiAJfQogCS8qIG5vdCByZWFjaGVkICovCiB9CkBAIC00MTIsNDYgKzQwOCwzNiBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMxMSBvbmx5ICovCi1zdGF0aWMgaW50IHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTAsIHNkLT5jb250cmFzdCA+PiA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmNvbnRyYXN0ID4+IDQpOwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZ2FpbiA9IEdBSU5fTUFYIC0gc2QtPmdhaW47Ci0JaW50IHJldDsKIAogCWlmIChnYWluIDwgMSkKIAkJZ2FpbiA9IDE7CiAJZWxzZSBpZiAoZ2FpbiA+IDI0NSkKIAkJZ2FpbiA9IDI0NTsKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJLyogcGFnZSA0ICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MGUsIDB4MDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBnYWluKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwZSwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBnYWluKTsKIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAJX191OCByZWc7CiAKIAkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMvNCBjb250YWlucyB0aGUgY2xvY2sgZGl2aWRlciBjb25maWd1cmluZyB0aGUKQEAgLTQ2Myw5NCArNDQ5LDcyIEBACiAJZWxzZSBpZiAocmVnID4gNjMpCiAJCXJlZyA9IDYzOwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsJCS8qIHBhZ2UgNCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDAyLCByZWcpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkJLyogcGFnZSA0ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCByZWcpOworCiAJLyogUGFnZSAxIHJlZ2lzdGVyIDggbXVzdCBhbHdheXMgYmUgMHgwOCBleGNlcHQgd2hlbiBub3QgaW4KIAkgICA2NDB4NDgwIG1vZGUgYW5kIFBhZ2UzLzQgcmVnIDIgPD0gMyB0aGVuIGl0IG11c3QgYmUgOSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwogCWlmIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KWdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2ICYmCiAJCQlyZWcgPD0gMykgewotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOwogCX0gZWxzZSB7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CiAJfQogCiAJLyogbG9hZCByZWdpc3RlcnMgdG8gc2Vuc29yIChCaXQgMCwgYXV0byBjbGVhcikgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwogfQogCi1zdGF0aWMgaW50IHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCV9fdTggZGF0YTsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkvKiBwYWdlIDQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLwogCWRhdGEgPSAoc2QtPmhmbGlwID8gMHgwNCA6IDB4MDApIHwgKHNkLT52ZmxpcCA/IDB4MDggOiAweDAwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKKwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lIGZvciBwYWM3MzExICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXJldHVybiByZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMTEsIHNpemVvZihpbml0XzczMTEpLzIpOworCXJlZ193X3NlcShnc3BjYV9kZXYsIGluaXRfNzMxMSwgc2l6ZW9mKGluaXRfNzMxMSkvMik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAKIAlzZC0+c29mX3JlYWQgPSAwOwogCi0JcmV0ID0gcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMxMSwKLQkJTlVMTCwgMCwKKwlyZWdfd192YXIoZ3NwY2FfZGV2LCBzdGFydF83MzExLAogCQlwYWdlNF83MzExLCBzaXplb2YocGFnZTRfNzMxMSkpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGdhaW4oZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRodmZsaXAoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGh2ZmxpcChnc3BjYV9kZXYpOwogCiAJLyogc2V0IGNvcnJlY3QgcmVzb2x1dGlvbiAqLwogCXN3aXRjaCAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYpIHsKIAljYXNlIDI6CQkJCQkvKiAxNjB4MTIwIHBhYzczMTEgKi8KLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEwKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJCQkJLyogMzIweDI0MCBwYWM3MzExICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgzMCk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgzMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMSk7CiAJCWJyZWFrOwogCWNhc2UgMDoJCQkJCS8qIDY0MHg0ODAgKi8KLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKIAkJYnJlYWs7CiAJfQogCkBAIC01NTksMzcgKzUyMywyNCBAQAogCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCAtMSk7CiAKIAkvKiBzdGFydCBzdHJlYW0gKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDUpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDA1KTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDgwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyOCwgMHhjYSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjksIDB4NTMpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDBlKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4M2UsIDB4MjApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjgsIDB4Y2EpOworCXJlZ193KGdzcGNhX2RldiwgMHgyOSwgMHg1Myk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDBlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgzZSwgMHgyMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCiB9CiAKIC8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgb24gZGlzY29ubmVjdCBmb3IgNzMxMSAqLwpAQCAtNzM0LDcgKzY4NSw3IEBACiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CiAJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNzUyLDcgKzcwMyw3IEBACiAJc2QtPmdhaW4gPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRnYWluKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTc3MCw3ICs3MjEsNyBAQAogCXNkLT5leHBvc3VyZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04MDEsNyArNzUyLDcgQEAKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtODE5LDcgKzc3MCw3IEBACiAJc2QtPmhmbGlwID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04MzcsNyArNzg4LDcgQEAKIAlzZC0+dmZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTg0OCw4ICs3OTksMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCXU4IGRhdGEwLCBkYXRhMTsKKworCWlmIChsZW4gPT0gMikgeworCQlkYXRhMCA9IGRhdGFbMF07CisJCWRhdGExID0gZGF0YVsxXTsKKwkJaWYgKChkYXRhMCA9PSAweDAwICYmIGRhdGExID09IDB4MTEpIHx8CisJCSAgICAoZGF0YTAgPT0gMHgyMiAmJiBkYXRhMSA9PSAweDMzKSB8fAorCQkgICAgKGRhdGEwID09IDB4NDQgJiYgZGF0YTEgPT0gMHg1NSkgfHwKKwkJICAgIChkYXRhMCA9PSAweDY2ICYmIGRhdGExID09IDB4NzcpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg4OCAmJiBkYXRhMSA9PSAweDk5KSB8fAorCQkgICAgKGRhdGEwID09IDB4YWEgJiYgZGF0YTEgPT0gMHhiYikgfHwKKwkJICAgIChkYXRhMCA9PSAweGNjICYmIGRhdGExID09IDB4ZGQpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhlZSAmJiBkYXRhMSA9PSAweGZmKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uIGZvciBwYWM3MzExICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApAQCAtODYwLDYgKzg0Miw5IEBACiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLmRxX2NhbGxiYWNrID0gZG9fYXV0b2dhaW4sCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhY19jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCmluZGV4IDIwZjY3ZDkuLjg0NjJhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAvKiBXZSBjYWxjdWxhdGUgdGhlIGF1dG9nYWluIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyIG9mIGEgZnJhbWUsIGF0IHRoaXMKLSAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyB0cmFuc21pdHRlZCwgYW5kIGEgZnJhbWUgaXMKLSAgIGJlaW5nIGNhcHR1cmVkIHdpdGggdGhlIG9sZCBzZXR0aW5ncy4gU28gaWYgd2UgYWRqdXN0IHRoZSBhdXRvZ2FpbiB3ZSBtdXN0Ci0gICBpZ25vcmUgYXRsZWFzdCB0aGUgMiBuZXh0IGZyYW1lcyBmb3IgdGhlIG5ldyBzZXR0aW5ncyB0byBjb21lIGludG8gZWZmZWN0Ci0gICBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzICovCi0jZGVmaW5lIFBBQ19BVVRPR0FJTl9JR05PUkVfRlJBTUVTCTMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyBjYXB0dXJlZCBhbmQgdHJhbnNtaXR0ZWQuIFNvCisgICBpZiB3ZSBhZGp1c3QgdGhlIGdhaW4gb3IgZXhwb3N1cmUgd2UgbXVzdCBpZ25vcmUgYXRsZWFzdCB0aGUgbmV4dCBmcmFtZSBmb3IKKyAgIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzLiAqLworI2RlZmluZSBQQUNfQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUwkyCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhY19zb2ZfbWFya2VyWzVdID0KIAkJeyAweGZmLCAweGZmLCAweDAwLCAweGZmLCAweDk2IH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNWZkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIFNOOUMyMDI4IGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic245YzIwMjgiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJUaGVvZG9yZSBLaWxnb3JlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvbml4IFNOOUMyMDI4IFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OyAgLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCXU4IHNvZl9yZWFkOworCXUxNiBtb2RlbDsKK307CisKK3N0cnVjdCBpbml0X2NvbW1hbmQgeworCXVuc2lnbmVkIGNoYXIgaW5zdHJ1Y3Rpb25bNl07CisJdW5zaWduZWQgY2hhciB0b19yZWFkOyAvKiBsZW5ndGggdG8gcmVhZC4gMCBtZWFucyBubyByZXBseSByZXF1ZXN0ZWQgKi8KK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworfTsKKworLyogSG93IHRvIGNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiBhbnkgb2YgdGhlIFZHQSBjYW1zIGlzIHVua25vd24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU045QzIwMjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogTm8gd2F5IHRvIGNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgQ0lGIGNhbXMgaXMga25vd24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl9tb2RlW10gPSB7CisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfU045QzIwMjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDMgLyA0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyBpbnQgc245YzIwMjhfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCByYzsKKworCVBERUJVRyhEX1VTQk8sICJzZW5kaW5nIGNvbW1hbmQgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwgY29tbWFuZFswXSwKKwkgICAgICAgY29tbWFuZFsxXSwgY29tbWFuZFsyXSwgY29tbWFuZFszXSwgY29tbWFuZFs0XSwgY29tbWFuZFs1XSk7CisKKwltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBjb21tYW5kLCA2KTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMiwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCA2LCA1MDApOworCWlmIChyYyA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiY29tbWFuZCB3cml0ZSBbJTAyeF0gZXJyb3IgJWQiLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc245YzIwMjhfcmVhZDEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByYzsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCA1MDApOworCWlmIChyYyAhPSAxKSB7CisJCVBERUJVRyhEX0VSUiwgInJlYWQxIGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IC1FSU87CisJfQorCVBERUJVRyhEX1VTQkksICJyZWFkMSByZXNwb25zZSAlMDJ4IiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X3JlYWQ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKnJlYWRpbmcpCit7CisJaW50IHJjOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJNCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCA0LCA1MDApOworCWlmIChyYyAhPSA0KSB7CisJCVBERUJVRyhEX0VSUiwgInJlYWQ0IGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IC1FSU87CisJfQorCW1lbWNweShyZWFkaW5nLCBnc3BjYV9kZXYtPnVzYl9idWYsIDQpOworCVBERUJVRyhEX1VTQkksICJyZWFkNCByZXNwb25zZSAlMDJ4JTAyeCUwMnglMDJ4IiwgcmVhZGluZ1swXSwKKwkgICAgICAgcmVhZGluZ1sxXSwgcmVhZGluZ1syXSwgcmVhZGluZ1szXSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X2xvbmdfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCBpLCBzdGF0dXM7CisJX191OCByZWFkaW5nWzRdOworCisJc3RhdHVzID0gc245YzIwMjhfY29tbWFuZChnc3BjYV9kZXYsIGNvbW1hbmQpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0gLTE7CisJZm9yIChpID0gMDsgaSA8IDI1NiAmJiBzdGF0dXMgPCAyOyBpKyspCisJCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHN0YXR1cyAhPSAyKSB7CisJCVBERUJVRyhEX0VSUiwgImxvbmcgY29tbWFuZCBzdGF0dXMgcmVhZCBlcnJvciAlZCIsIHN0YXR1cyk7CisJCXJldHVybiAoc3RhdHVzIDwgMCkgPyBzdGF0dXMgOiAtRUlPOworCX0KKworCW1lbXNldChyZWFkaW5nLCAwLCA0KTsKKwlzdGF0dXMgPSBzbjljMjAyOF9yZWFkNChnc3BjYV9kZXYsIHJlYWRpbmcpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogaW4gZ2VuZXJhbCwgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlIGlzIHRoZSBmaXJzdCBieXRlIG9mCisJICogdGhlIGNvbW1hbmQsIG9yJ2VkIHdpdGggOCAqLworCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbjljMjAyOF9zaG9ydF9jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKmNvbW1hbmQpCit7CisJaW50IGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwgY29tbWFuZCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwlQREVCVUcoRF9QUk9CRSwgIlNOOUMyMDI4IGNhbWVyYSBkZXRlY3RlZCAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsCisJICAgICAgIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisKKwlzZC0+bW9kZWwgPSBpZC0+aWRQcm9kdWN0OworCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4NzAwNToKKwkJUERFQlVHKERfUFJPQkUsICJHZW5pdXMgU21hcnQgMzAwIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMDoKKwkJUERFQlVHKERfUFJPQkUsICJEQzMxVkMiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDE6CisJCVBERUJVRyhEX1BST0JFLCAiU3B5IGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMzoKKwkJUERFQlVHKERfUFJPQkUsICJDSUYgY2FtZXJhIik7CisJCWJyZWFrOworCWNhc2UgMHg4MDA4OgorCQlQREVCVUcoRF9QUk9CRSwgIk1pbmktU2hvdHogbXMtMzUwIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwYToKKwkJUERFQlVHKERfUFJPQkUsICJWaXZpdGFyIDMzNTBiIHR5cGUgY2FtZXJhIik7CisJCWNhbS0+aW5wdXRfZmxhZ3MgPSBWNEwyX0lOX1NUX1ZGTElQIHwgVjRMMl9JTl9TVF9IRkxJUDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4ODAwMDoKKwljYXNlIDB4ODAwMToKKwljYXNlIDB4ODAwMzoKKwkJY2FtLT5jYW1fbW9kZSA9IGNpZl9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoY2lmX21vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJfQorCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHN0YXR1cyA9IC0xOworCisJc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogMDsKK30KKworc3RhdGljIGludCBydW5fc3RhcnRfY29tbWFuZHMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgICAgc3RydWN0IGluaXRfY29tbWFuZCAqY2FtX2NvbW1hbmRzLCBpbnQgbikKK3sKKwlpbnQgaSwgZXJyX2NvZGUgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3dpdGNoIChjYW1fY29tbWFuZHNbaV0udG9fcmVhZCkgeworCQljYXNlIDQ6CisJCQllcnJfY29kZSA9IHNuOWMyMDI4X2xvbmdfY29tbWFuZChnc3BjYV9kZXYsCisJCQkJCWNhbV9jb21tYW5kc1tpXS5pbnN0cnVjdGlvbik7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZXJyX2NvZGUgPSBzbjljMjAyOF9zaG9ydF9jb21tYW5kKGdzcGNhX2RldiwKKwkJCQkJY2FtX2NvbW1hbmRzW2ldLmluc3RydWN0aW9uKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQllcnJfY29kZSA9IHNuOWMyMDI4X2NvbW1hbmQoZ3NwY2FfZGV2LAorCQkJCQljYW1fY29tbWFuZHNbaV0uaW5zdHJ1Y3Rpb24pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfc3B5X2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBzcHlfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIyLCAweDAxLCAweDA0LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMywgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sIC8qIHdpZHRoICAzNTIgKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgNH0sIC8qIGhlaWdodCAyODggKi8KKwkJLyoge3sweDEzLCAweDI3LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVkIGdhaW4gPyovCisJCS8qIHt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDI5LCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmQsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDJlLCAweDAxLCAweDA5LCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MDcsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEyLCAweDM0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNCwgMHgwMSwgMHhhMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMywgMHgxMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKmRvbid0IG1lc3Mgd2l0aCovCisJCS8qe3sweDExLCAweDA0LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sIG9ic2VydmVkICovCisJCXt7MHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKiBicmlnaHRlciAqLworCQkvKnt7MHgxMSwgMHgwNSwgMHg2NSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogYnJpZ2h0ZXIgKi8KKwkJe3sweDExLCAweDA2LCAweGIxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qIG9ic2VydmVkICovCisJCXt7MHgxMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKnt7MHgxMSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDExLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sICovCisJCS8qIGJyaWdodG5lc3Mgb3IgZ2Fpbi4gMCBpcyBkZWZhdWx0LiA0IGlzIGdvb2QKKwkJICogaW5kb29ycyBhdCBuaWdodCB3aXRoIGluY2FuZGVzY2VudCBsaWdodGluZyAqLworCQl7ezB4MTEsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEwLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qaHN0YXJ0IG9yIGhvZmZzKi8KKwkJe3sweDExLCAweDExLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIHt7MHgxYiwgMHgwMiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LCBvYnNlcnZlZCAqLworCQl7ezB4MWIsIDB4MDIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgLyogYnJpZ2h0ZXIgKi8KKwkJLyoge3sweDFiLCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sIG9ic2VydmVkICovCisJCXt7MHgxYiwgMHgxMywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgLyogY29tcHJlc3NlcyAqLworCQkvKiBDYW1lcmEgc2hvdWxkIHN0YXJ0IHRvIGNhcHR1cmUgbm93LiAqLworCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2Rldiwgc3B5X3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRShzcHlfc3RhcnRfY29tbWFuZHMpKTsKK30KKworc3RhdGljIGludCBzdGFydF9jaWZfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIGNpZl9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyogVGhlIGVudGlyZSBzZXF1ZW5jZSBiZWxvdyBzZWVtcyByZWR1bmRhbnQgKi8KKwkJLyoge3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MTYsIDB4MDAsIDB4MDB9LCA0fSwgd2lkdGg/CisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LCBoZWlnaHQ/CisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LCBzdWJzYW1wbGU/CisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwZiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEyLCAweDM0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNCwgMHgwMSwgMHhhMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwqLworCQl7ezB4MWIsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAzLCAweDVhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNCwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEyLCAweDE0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzcsIDB4YTIsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA2LCAweDBmLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDgsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA5LCAweDEwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgMX0sIC8qIHdpZHRoLzggKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgMX0sIC8qIGhlaWdodC84ICovCisJCS8qIHt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LCBzdWJzYW1wbGU/CisJCSAqIHt7MHgxMywgMHgyOCwgMHgwMSwgMHgxZSwgMHgwMCwgMHgwMH0sIDR9LCBkb2VzIG5vdGhpbmcKKwkJICoge3sweDEzLCAweDI3LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sICovCisJCS8qIHt7MHgxMywgMHgyOSwgMHgwMSwgMHgyMiwgMHgwMCwgMHgwMH0sIDR9LAorCQkgKiBjYXVzZXMgc3Vic2FtcGxpbmcKKwkJICogYnV0IG5vdCBhIGNoYW5nZSBpbiB0aGUgcmVzb2x1dGlvbiBzZXR0aW5nISAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgwNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM2LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwvKiB1c2UgY29tcHJlc3Npb24gKi8KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIGNpZl9zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoY2lmX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfbXMzNTBfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIG1zMzUwX3N0YXJ0X2NvbW1hbmRzW10gPSB7CisJCXt7MHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MTYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDEsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAyLCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMywgMHg1ZCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA1LCAweDI1LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDcsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBiLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBlLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE1LCAweDcwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sIC8qIHdpZHRoICAqLworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgLyogaGVpZ2h0ICovCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LCAvKiB2c3RhcnQ/ICovCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogaHN0YXJ0PyAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwZiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDAyLCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDBhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDB9LAorCQkvKiBDYW1lcmEgc2hvdWxkIHN0YXJ0IHRvIGNhcHR1cmUgbm93LiAqLworCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2RldiwgbXMzNTBfc3RhcnRfY29tbWFuZHMsCisJCQkJICBBUlJBWV9TSVpFKG1zMzUwX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfZ2VuaXVzX2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBnZW5pdXNfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKiAicHJlbGltaW5hcnkiIHdpZHRoIGFuZCBoZWlnaHQgc2V0dGluZ3MgKi8KKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDA3LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDY0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE3LCAweDYwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDI2LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyNywgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDMxLCAweDJhLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgzMiwgMHgyYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzMsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDM0LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHg1YiwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVhbCB3aWR0aCAqLworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVhbCBoZWlnaHQgKi8KKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4NjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHhlMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTYsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE3LCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYywgMHgyMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWMsIDB4MjAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM0LCAweGExLCAweDAwLCAweDAwLCAweDAwfSwgMH0KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIGdlbml1c19zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoZ2VuaXVzX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdml2aXRhcl9jYW0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBpbml0X2NvbW1hbmQgdml2aXRhcl9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MGEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoKKwkJICogQWJvdmUgaXMgY2hhbmdlZCBmcm9tIE9FTSAweDBiLiBGaXhlcyBCYXllciB0aWxpbmcuCisJCSAqIFByZXN1bWFibHkgZ2l2ZXMgYSB2ZXJ0aWNhbCBzaGlmdCBvZiBvbmUgcm93LgorCQkgKi8KKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIEFib3ZlIHNlZW1zIHRvIGRvIGhvcml6b250YWwgc2hpZnQuICovCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIEFib3ZlIHRocmVlIGNvbW1hbmRzIHNlZW0gdG8gcmVsYXRlIHRvIGJyaWdodG5lc3MuICovCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDEsIDB4NzcsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDNhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMiwgMHg3OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE0LCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNSwgMHgzNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MWIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDIwLCAweDQ0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyMywgMHhlZSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjYsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDI3LCAweDlhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjksIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDJhLCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MmYsIDB4M2QsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDMwLCAweDI0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgzMiwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjAsIDB4YTksIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDYxLCAweDQyLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg2NSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjksIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDZmLCAweDg4LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDc0LCAweDIxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3NSwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDdkLCAweGYzLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNywgMHgxYywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE5LCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxYSwgMHhmNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQkvKiB7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MjAsIDB4MzYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEwLCAweDI2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxMiwgMHgyNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MWIsIDB4NzYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM2LCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQkvKiBBYm92ZSBpcyBicmlnaHRuZXNzOyBPRU0gZHJpdmVyIHNldHRpbmcgaXMgMHgxMCAqLworCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDIwLCAweDI5LCAweDMwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNCwgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9CisJfTsKKworCXJldHVybiBydW5fc3RhcnRfY29tbWFuZHMoZ3NwY2FfZGV2LCB2aXZpdGFyX3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRSh2aXZpdGFyX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgZXJyX2NvZGU7CisKKwlzZC0+c29mX3JlYWQgPSAwOworCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4NzAwNToKKwkJZXJyX2NvZGUgPSBzdGFydF9nZW5pdXNfY2FtKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgMHg4MDAxOgorCQllcnJfY29kZSA9IHN0YXJ0X3NweV9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDM6CisJCWVycl9jb2RlID0gc3RhcnRfY2lmX2NhbShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIDB4ODAwODoKKwkJZXJyX2NvZGUgPSBzdGFydF9tczM1MF9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMGE6CisJCWVycl9jb2RlID0gc3RhcnRfdml2aXRhcl9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKERfRVJSLCAiU3RhcnRpbmcgdW5rbm93biBjYW1lcmEsIHBsZWFzZSByZXBvcnQgdGhpcyIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldHVybiBlcnJfY29kZTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXN1bHQ7CisJX191OCBkYXRhWzZdOworCisJcmVzdWx0ID0gc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAiQ2FtZXJhIFN0b3AgcmVhZCBmYWlsZWQiKTsKKworCW1lbXNldChkYXRhLCAwLCA2KTsKKwlkYXRhWzBdID0gMHgxNDsKKwlyZXN1bHQgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwgZGF0YSk7CisJaWYgKHJlc3VsdCA8IDApCisJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGNvbW1hbmQgZmFpbGVkIik7Cit9CisKKy8qIEluY2x1ZGUgc245YzIwMjggc29mIGRldGVjdGlvbiBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJzbjljMjAyOC5oIgorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJdW5zaWduZWQgY2hhciAqc29mOworCisJc29mID0gc245YzIwMjhfZmluZF9zb2YoZ3NwY2FfZGV2LCBkYXRhLCBsZW4pOworCWlmIChzb2YpIHsKKwkJaW50IG47CisKKwkJLyogZmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KKwkJbiA9IHNvZiAtIGRhdGE7CisJCWlmIChuID4gc2l6ZW9mIHNuOWMyMDI4X3NvZl9tYXJrZXIpCisJCQluIC09IHNpemVvZiBzbjljMjAyOF9zb2ZfbWFya2VyOworCQllbHNlCisJCQluID0gMDsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGRhdGEsIG4pOworCQkvKiBTdGFydCBuZXh0IGZyYW1lLiAqLworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQlzbjljMjAyOF9zb2ZfbWFya2VyLCBzaXplb2Ygc245YzIwMjhfc29mX21hcmtlcik7CisJCWxlbiAtPSBzb2YgLSBkYXRhOworCQlkYXRhID0gc29mOworCX0KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAwNSl9LCAvKiBHZW5pdXMgU21hcnQgMzAwLCB2ZXJzaW9uIDIgKi8KKwkvKiBUaGUgR2VuaXVzIFNtYXJ0IGlzIHVudGVzdGVkLiBJIGNhbid0IGZpbmQgYW4gb3duZXIgISAqLworCS8qIHtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAwKX0sIERDMzFWQywgRG9uJ3Qga25vdyB0aGlzIGNhbWVyYSAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAxKX0sIC8qIFdpbGQgUGxhbmV0IGRpZ2l0YWwgc3B5IGNhbSAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAzKX0sIC8qIFNldmVyYWwgc21hbGwgQ0lGIGNhbWVyYXMgKi8KKwkvKiB7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwNil9LCBVbmtub3duIFZHQSBjYW1lcmEgKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwOCl9LCAvKiBNaW5pLVNob3R6IG1zLTM1MCAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDBhKX0sIC8qIFZpdmljYW0gMzM1MEIgKi8KKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgICAgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkMWQzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguaApAQCAtMCwwICsxLDUxIEBACisvKgorICogU045QzIwMjggY29tbW9uIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGVvZG9yZSBLaWxnb3JlIDxraWxnb3RhQGF1YnVybixlZHU+CisgKgorICogQmFzZWQgY2xvc2VseSB1cG9uIHRoZSBmaWxlIGdzcGNhL3BhY19jb21tb24uaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc245YzIwMjhfc29mX21hcmtlcls1XSA9CisJeyAweGZmLCAweGZmLCAweDAwLCAweGM0LCAweGM0IH07CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzbjljMjAyOF9maW5kX3NvZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJCXVuc2lnbmVkIGNoYXIgKm0sIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCisJLyogU2VhcmNoIGZvciB0aGUgU09GIG1hcmtlciAoZml4ZWQgcGFydCkgaW4gdGhlIGhlYWRlciAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAobVtpXSA9PSBzbjljMjAyOF9zb2ZfbWFya2VyW3NkLT5zb2ZfcmVhZF0pIHsKKwkJCXNkLT5zb2ZfcmVhZCsrOworCQkJaWYgKHNkLT5zb2ZfcmVhZCA9PSBzaXplb2Yoc245YzIwMjhfc29mX21hcmtlcikpIHsKKwkJCQlQREVCVUcoRF9GUkFNLAorCQkJCQkiU09GIGZvdW5kLCBieXRlcyB0byBhbmFseXplOiAldS4iCisJCQkJCSIgRnJhbWUgc3RhcnRzIGF0IGJ5dGUgIyV1IiwKKwkJCQkJbGVuLCBpICsgMSk7CisJCQkJc2QtPnNvZl9yZWFkID0gMDsKKwkJCQlyZXR1cm4gbSArIGkgKyAxOworCQkJfQorCQl9IGVsc2UgeworCQkJc2QtPnNvZl9yZWFkID0gMDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYwppbmRleCAwY2ExYzA2Li40YTFiYzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYwpAQCAtMTI5LDcgKzEyOSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGF1dG9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHMzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJICAgIHsKQEAgLTE1MDYsMzYgKzE1MDYsMzYgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJczMyIGh1ZV9jb29yZCwgaHVlX2luZGV4ID0gMTgwICsgc2QtPmh1ZTsKIAl1OCBjbWF0cml4WzIxXTsKLQltZW1zZXQoY21hdHJpeCwgMCwgMjEpOwogCisJbWVtc2V0KGNtYXRyaXgsIDAsIHNpemVvZiBjbWF0cml4KTsKIAljbWF0cml4WzJdID0gKHNkLT5jb250cmFzdCAqIDB4MjUgLyAweDEwMCkgKyAweDI2OwogCWNtYXRyaXhbMF0gPSAweDEzICsgKGNtYXRyaXhbMl0gLSAweDI2KSAqIDB4MTMgLyAweDI1OwogCWNtYXRyaXhbNF0gPSAweDA3ICsgKGNtYXRyaXhbMl0gLSAweDI2KSAqIDB4MDcgLyAweDI1OwogCWNtYXRyaXhbMThdID0gc2QtPmJyaWdodG5lc3MgLSAweDgwOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9yZWRfeFtodWVfaW5kZXhdICogc2QtPnNhdHVyYXRpb24pID4+IDg7Ci0JY21hdHJpeFs2XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzddID0gKHVuc2lnbmVkIGNoYXIpKChodWVfY29vcmQgPj4gOCkgJiAweDBmKTsKKwljbWF0cml4WzZdID0gaHVlX2Nvb3JkOworCWNtYXRyaXhbN10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfcmVkX3lbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbOF0gPSAodW5zaWduZWQgY2hhcikoaHVlX2Nvb3JkICYgMHhmZik7Ci0JY21hdHJpeFs5XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFs4XSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzldID0gKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGY7CiAKIAlodWVfY29vcmQgPSAoaHN2X2dyZWVuX3hbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbMTBdID0gKHVuc2lnbmVkIGNoYXIpKGh1ZV9jb29yZCAmIDB4ZmYpOwotCWNtYXRyaXhbMTFdID0gKHVuc2lnbmVkIGNoYXIpKChodWVfY29vcmQgPj4gOCkgJiAweDBmKTsKKwljbWF0cml4WzEwXSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzExXSA9IChodWVfY29vcmQgPj4gOCkgJiAweDBmOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9ncmVlbl95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzEyXSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzEzXSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxMl0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxM10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfYmx1ZV94W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzE0XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzE1XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxNF0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxNV0gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfYmx1ZV95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzE2XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzE3XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxNl0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxN10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCXJldHVybiByZWdfdyhnc3BjYV9kZXYsIDB4MTBlMSwgY21hdHJpeCwgMjEpOwogfQpAQCAtMjAxNSw2ICsyMDE1LDcgQEAKIAlkZWZhdWx0OgogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJCWJyZWFrOwogCX0KIAogCXNkLT5vbGRfc3RlcCA9IDA7CkBAIC0yMzE5LDcgKzIzMjAsNyBAQAogCQl9CiAJfQogCWlmIChhdmdfbHVtID4gTUFYX0FWR19MVU0pIHsKLQkJaWYgKHNkLT5nYWluID49IDEpIHsKKwkJaWYgKHNkLT5nYWluID4gMCkgewogCQkJc2QtPmdhaW4tLTsKIAkJCXNldF9nYWluKGdzcGNhX2Rldik7CiAJCX0KQEAgLTIzNDcsNyArMjM0OCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBhdmdfbHVtOwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZyYW1lX2hlYWRlcltdID0KKwlzdGF0aWMgdTggZnJhbWVfaGVhZGVyW10gPQogCQl7MHhmZiwgMHhmZiwgMHgwMCwgMHhjNCwgMHhjNCwgMHg5Nn07CiAJaWYgKGxlbiA9PSA2NCAmJiBtZW1jbXAoZGF0YSwgZnJhbWVfaGVhZGVyLCA2KSA9PSAwKSB7CiAJCWF2Z19sdW0gPSAoKGRhdGFbMzVdID4+IDIpICYgMykgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKaW5kZXggZGRmZjJiNS4uNzg1ZWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCkBAIC00Miw2ICs0Miw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNvbml4YiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAogTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CkBAIC01Myw5ICs1NCwxMSBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAJYXRvbWljX3QgYXZnX2x1bTsKIAlpbnQgcHJldl9hdmdfbHVtOworCWludCBleHBfdG9vX2xvd19jbnQ7CisJaW50IGV4cF90b29faGlnaF9jbnQ7CiAKKwl1bnNpZ25lZCBzaG9ydCBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGdhaW47Ci0JdW5zaWduZWQgY2hhciBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CiAJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluX2lnbm9yZV9mcmFtZXM7CkBAIC03Myw4ICs3Niw5IEBACiAjZGVmaW5lIFNFTlNPUl9PVjc2MzAgMgogI2RlZmluZSBTRU5TT1JfUEFTMTA2IDMKICNkZWZpbmUgU0VOU09SX1BBUzIwMiA0Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTEwIDUKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggNgorI2RlZmluZSBTRU5TT1JfVEFTNTExMEMgNQorI2RlZmluZSBTRU5TT1JfVEFTNTExMEQgNgorI2RlZmluZSBTRU5TT1JfVEFTNTEzMENYWCA3CiAJX191OCByZWcxMTsKIH07CiAKQEAgLTk1LDEzICs5OSwxNSBAQAogLyogc2Vuc29yX2RhdGEgZmxhZ3MgKi8KICNkZWZpbmUgRl9HQUlOIDB4MDEJCS8qIGhhcyBnYWluICovCiAjZGVmaW5lIEZfU0lGICAweDAyCQkvKiBzaWYgb3IgdmdhICovCisjZGVmaW5lIEZfQ09BUlNFX0VYUE8gMHgwNAkvKiBleHBvc3VyZSBjb250cm9sIGlzIGNvYXJzZSAqLwogCiAvKiBwcml2IGZpZWxkIG9mIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZmxhZ3MgKGRvIG5vdCB1c2UgbG93IG5pYmJsZSEpICovCiAjZGVmaW5lIE1PREVfUkFXIDB4MTAJCS8qIHJhdyBiYXllciBtb2RlICovCiAjZGVmaW5lIE1PREVfUkVEVUNFRF9TSUYgMHgyMAkvKiB2Z2EgbW9kZSAoMzIweDI0MCAvIDE2MHgxMjApIG9uIHNpZiBjYW0gKi8KIAogLyogY3RybF9kaXMgaGVscGVyIG1hY3JvcyAqLwotI2RlZmluZSBOT19FWFBPICgoMSA8PCBFWFBPU1VSRV9JRFgpIHwgKDEgPDwgQVVUT0dBSU5fSURYKSkKKyNkZWZpbmUgTk9fRVhQTyAoKDEgPDwgRVhQT1NVUkVfSURYKSB8ICgxIDw8IENPQVJTRV9FWFBPU1VSRV9JRFgpIHwgXAorCQkgKDEgPDwgQVVUT0dBSU5fSURYKSkKICNkZWZpbmUgTk9fRlJFUSAoMSA8PCBGUkVRX0lEWCkKICNkZWZpbmUgTk9fQlJJR0hUTkVTUyAoMSA8PCBCUklHSFRORVNTX0lEWCkKIApAQCAtMTI3LDExICsxMzMsMTAgQEAKIH0KIAogLyogV2UgY2FsY3VsYXRlIHRoZSBhdXRvZ2FpbiBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciBvZiBhIGZyYW1lLCBhdCB0aGlzCi0gICBtb21lbnQgYSBmcmFtZSB3aXRoIHRoZSBvbGQgc2V0dGluZ3MgaXMgYmVpbmcgdHJhbnNtaXR0ZWQsIGFuZCBhIGZyYW1lIGlzCi0gICBiZWluZyBjYXB0dXJlZCB3aXRoIHRoZSBvbGQgc2V0dGluZ3MuIFNvIGlmIHdlIGFkanVzdCB0aGUgYXV0b2dhaW4gd2UgbXVzdAotICAgaWdub3JlIGF0bGVhc3QgdGhlIDIgbmV4dCBmcmFtZXMgZm9yIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdAotICAgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBhZGp1c3RtZW50cyAqLwotI2RlZmluZSBBVVRPR0FJTl9JR05PUkVfRlJBTUVTIDMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyBjYXB0dXJlZCBhbmQgdHJhbnNtaXR0ZWQuIFNvCisgICBpZiB3ZSBhZGp1c3QgdGhlIGdhaW4gb3IgZXhwb3N1cmUgd2UgbXVzdCBpZ25vcmUgYXRsZWFzdCB0aGUgbmV4dCBmcmFtZSBmb3IKKyAgIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzLiAqLworI2RlZmluZSBBVVRPR0FJTl9JR05PUkVfRlJBTUVTIDEKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTE0NSw3ICsxNTAsNyBAQAogc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJewogCSAgICB7CkBAIC0xNzEsNyArMTc2LDcgQEAKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKICNkZWZpbmUgR0FJTl9ERUYgMTI3Ci0jZGVmaW5lIEdBSU5fS05FRSAyMDAKKyNkZWZpbmUgR0FJTl9LTkVFIDIzMAogCQkuZGVmYXVsdF92YWx1ZSA9IEdBSU5fREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0Z2FpbiwKQEAgLTE4MywxMCArMTg4LDEwIEBACiAJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKIAkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJCS5uYW1lID0gIkV4cG9zdXJlIiwKLSNkZWZpbmUgRVhQT1NVUkVfREVGICAxNiAvKiAgMzIgbXMgLyAzMCBmcHMgKi8KLSNkZWZpbmUgRVhQT1NVUkVfS05FRSA1MCAvKiAxMDAgbXMgLyAxMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfREVGICA2NiAvKiAgMzMgbXMgLyAzMCBmcHMgKGV4Y2VwdCBvbiBQQVNYWFgpICovCisjZGVmaW5lIEVYUE9TVVJFX0tORUUgMjAwIC8qIDEwMCBtcyAvIDEwIGZwcyAoZXhjZXB0IG9uIFBBU1hYWCkgKi8KIAkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMjU1LAorCQkJLm1heGltdW0gPSAxMDIzLAogCQkJLnN0ZXAgPSAxLAogCQkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPU1VSRV9ERUYsCiAJCQkuZmxhZ3MgPSAwLApAQCAtMTk0LDcgKzE5OSwyMyBAQAogCQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCiAJCS5nZXQgPSBzZF9nZXRleHBvc3VyZSwKIAl9LAotI2RlZmluZSBBVVRPR0FJTl9JRFggMworI2RlZmluZSBDT0FSU0VfRVhQT1NVUkVfSURYIDMKKwl7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiRXhwb3N1cmUiLAorI2RlZmluZSBDT0FSU0VfRVhQT1NVUkVfREVGICAyIC8qIDMwIGZwcyAqLworCQkJLm1pbmltdW0gPSAyLAorCQkJLm1heGltdW0gPSAxNSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gQ09BUlNFX0VYUE9TVVJFX0RFRiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkJLmdldCA9IHNkX2dldGV4cG9zdXJlLAorCX0sCisjZGVmaW5lIEFVVE9HQUlOX0lEWCA0CiAJewogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9BVVRPR0FJTiwKQEAgLTIxMCw3ICsyMzEsNyBAQAogCQkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAotI2RlZmluZSBGUkVRX0lEWCA0CisjZGVmaW5lIEZSRVFfSURYIDUKIAl7CiAJCXsKIAkJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTIxOSw3ICsyNDAsNyBAQAogCQkJLm1pbmltdW0gPSAwLAogCQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KIAkJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgRlJFUV9ERUYgMQorI2RlZmluZSBGUkVRX0RFRiAwCiAJCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAogCQl9LAogCQkuc2V0ID0gc2Rfc2V0ZnJlcSwKQEAgLTM0NSw3ICszNjYsNyBAQAogfTsKIHN0YXRpYyBjb25zdCBfX3U4IGluaXRPdjc2MzBfM1tdID0gewogCTB4NDQsIDB4NDQsIDB4MDAsIDB4MWEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4ODAsCS8qIHIwMSAuLiByMDggKi8KLQkweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAkvKiByMDkgLi4gcjEwICovCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcjA5IC4uIHIxMCAqLwogCTB4MDAsIDB4MDIsIDB4MDEsIDB4MGEsCQkJCS8qIHIxMSAuLiByMTQgKi8KIAkweDI4LCAweDFlLAkJCS8qIEggJiBWIHNpemVzICAgICByMTUgLi4gcjE2ICovCiAJMHg2OCwgMHg4ZiwgTUNLX0lOSVQxLAkJCQkvKiByMTcgLi4gcjE5ICovCkBAIC0zODcsNiArNDA4LDMwIEBACiAJMHgxOCwgMHgxMCwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKIC8qIGNvbXByZXNzaW9uIDB4ODYgbWNraW5pdDEgMHgyYiAqLworCisvKiAiS25vd24iIFBBUzEwNkIgcmVnaXN0ZXJzOgorICAweDAyIGNsb2NrIGRpdmlkZXIKKyAgMHgwMyBWYXJpYWJsZSBmcmFtZXJhdGUgYml0cyA0LTExCisgIDB4MDQgVmFyIGZyYW1lcmF0ZSBiaXRzIDAtMywgb25lIG11c3QgbGVhdmUgdGhlIDQgbXNiJ3MgYXQgMCAhIQorICAgICAgIFRoZSB2YXJpYWJsZSBmcmFtZXJhdGUgY29udHJvbCBtdXN0IG5ldmVyIGJlIHNldCBsb3dlciB0aGVuIDMwMCwKKyAgICAgICB3aGljaCBzZXRzIHRoZSBmcmFtZXJhdGUgYXQgOTAgLyByZWcwMiwgb3RoZXJ3aXNlIHZzeW5jIGlzIGxvc3QuCisgIDB4MDUgU2h1dHRlciBUaW1lIExpbmUgT2Zmc2V0LCB0aGlzIGNhbiBiZSB1c2VkIGFzIGFuIGV4cG9zdXJlIGNvbnRyb2w6CisgICAgICAgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUsIDI1NSA9IG5vIGV4cG9zdXJlIGF0IGFsbAorICAgICAgIE5vdGUgdGhpcyBtYXkgbmV2ZXIgYmUgbGFyZ2VyIHRoZW4gInZhci1mcmFtZXJhdGUgY29udHJvbCIgLyAyIC0gMi4KKyAgICAgICBXaGVuIHZhci1mcmFtZXJhdGUgY29udHJvbCBpcyA8IDUxNCwgbm8gZXhwb3N1cmUgaXMgcmVhY2hlZCBhdCB0aGUgbWF4CisgICAgICAgYWxsb3dlZCB2YWx1ZSBmb3IgdGhlIGZyYW1lcmF0ZSBjb250cm9sIHZhbHVlLCByYXRoZXIgdGhlbiBhdCAyNTUuCisgIDB4MDYgU2h1dHRlciBUaW1lIFBpeGVsIE9mZnNldCwgbGlrZSByZWcwNSB0aGlzIGluZmx1ZW5jZXMgZXhwb3N1cmUsIGJ1dAorICAgICAgIG9ubHkgYSB2ZXJ5IGxpdHRsZSBiaXQsIGxlYXZlIGF0IDB4Y2QKKyAgMHgwNyBvZmZzZXQgc2lnbiBiaXQgKGJpdDAgMSA+IG5lZ2F0aXZlIG9mZnNldCkKKyAgMHgwOCBvZmZzZXQKKyAgMHgwOSBCbHVlIEdhaW4KKyAgMHgwYSBHcmVlbjEgR2FpbgorICAweDBiIEdyZWVuMiBHYWluCisgIDB4MGMgUmVkIEdhaW4KKyAgMHgwZSBHbG9iYWwgZ2FpbgorICAweDEzIFdyaXRlIDEgdG8gY29tbWl0IHNldHRpbmdzIHRvIHNlbnNvcgorKi8KKwogc3RhdGljIGNvbnN0IF9fdTggcGFzMTA2X3NlbnNvcl9pbml0W11bOF0gPSB7CiAJLyogUGl4ZWwgQ2xvY2sgRGl2aWRlciA2ICovCiAJeyAweGExLCAweDQwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDE0IH0sCkBAIC00MzMsMzcgKzQ3OCw1NSBAQAogCTB4NDQsIDB4NDQsIDB4MjEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAzLCAweDBhLAotCTB4MjgsIDB4MWUsIDB4MjgsIDB4ODksIDB4MjAsCisJMHgyOCwgMHgxZSwgMHgyMCwgMHg4OSwgMHgyMCwKIAkweDAwLCAweDAwLCAweDAyLCAweDAzLCAweDBmLCAweDBjCiB9OworCisvKiAiS25vd24iIFBBUzIwMkJDQiByZWdpc3RlcnM6CisgIDB4MDIgY2xvY2sgZGl2aWRlcgorICAweDA0IFZhcmlhYmxlIGZyYW1lcmF0ZSBiaXRzIDYtMTEgKCopCisgIDB4MDUgVmFyIGZyYW1lcmF0ZSAgYml0cyAwLTUsIG9uZSBtdXN0IGxlYXZlIHRoZSAyIG1zYidzIGF0IDAgISEKKyAgMHgwNyBCbHVlIEdhaW4KKyAgMHgwOCBHcmVlbiBHYWluCisgIDB4MDkgUmVkIEdhaW4KKyAgMHgwYiBvZmZzZXQgc2lnbiBiaXQgKGJpdDAgMSA+IG5lZ2F0aXZlIG9mZnNldCkKKyAgMHgwYyBvZmZzZXQKKyAgMHgwZSBVbmtub3duIGltYWdlIGlzIHNsaWdodGx5IGJyaWdodGVyIHdoZW4gYml0IDAgaXMgMCwgaWYgcmVnMGYgaXMgMCB0b28sCisgICAgICAgbGVhdmUgYXQgMSBvdGhlcndpc2Ugd2UgZ2V0IGEganVtcCBpbiBvdXIgZXhwb3N1cmUgY29udHJvbAorICAweDBmIEV4cG9zdXJlIDAtMjU1LCAwID0gdXNlIGZ1bGwgZnJhbWUgdGltZSwgMjU1ID0gbm8gZXhwb3N1cmUgYXQgYWxsCisgIDB4MTAgTWFzdGVyIGdhaW4gMCAtIDMxCisgIDB4MTEgd3JpdGUgMSB0byBhcHBseSBjaGFuZ2VzCisgICgqKSBUaGUgdmFyaWFibGUgZnJhbWVyYXRlIGNvbnRyb2wgbXVzdCBuZXZlciBiZSBzZXQgbG93ZXIgdGhlbiA1MDAKKyAgICAgIHdoaWNoIHNldHMgdGhlIGZyYW1lcmF0ZSBhdCAzMCAvIHJlZzAyLCBvdGhlcndpc2UgdnN5bmMgaXMgbG9zdC4KKyovCiBzdGF0aWMgY29uc3QgX191OCBwYXMyMDJfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyogU2V0IHRoZSBjbG9jayBkaXZpZGVyIHRvIDQgLT4gMzAgLyA0ID0gNy41IGZwcywgd2Ugd291bGQgbGlrZQorCSAgIHRvIHNldCBpdCBsb3dlciwgYnV0IGZvciBzb21lIHJlYXNvbiB0aGUgYnJpZGdlIHN0YXJ0cyBtaXNzaW5nCisJICAgdnN5bmMncyB0aGVuICovCisJezB4YTAsIDB4NDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGQwLCAweDQwLCAweDA0LCAweDA3LCAweDM0LCAweDAwLCAweDA5LCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMH0sCi0JezB4ZDAsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzIsIDB4MTB9LAorCXsweGQwLCAweDQwLCAweDBDLCAweDAwLCAweDBDLCAweDAxLCAweDMyLCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MTUsIDB4NzAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDE4LCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKIAl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MDMsIDB4NTYsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKLQl7MHhiMCwgMHg0MCwgMHgwNCwgMHgwNywgMHgyYSwgMHgwMCwgMHg2MywgMHgxMH0sCi0JezB4YjAsIDB4NDAsIDB4MGUsIDB4MDAsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTB9LAotCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGEwLCAweDQwLCAweDEwLCAweDA4LCAweDNkLCAweDAwLCAweDYzLCAweDE1fSwKLQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwNCwgMHgzZCwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGIwLCAweDQwLCAweDBlLCAweDAwLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKLQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTAsIDB4MGUsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTV9LAotCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwW10gPSB7CitzdGF0aWMgY29uc3QgX191OCBpbml0VGFzNTExMGNbXSA9IHsKIAkweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwOSwgMHgwYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDA5LCAweDBhLAorCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCisJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNworfTsKKy8qIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCBhIGRpZmZlcmVudCBoc3RhcnQgKi8KK3N0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwZFtdID0geworCTB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDBhLAogCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCiAJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKQEAgLTQ3Niw3ICs1MzksNyBAQAogc3RhdGljIGNvbnN0IF9fdTggaW5pdFRhczUxMzBbXSA9IHsKIAkweDA0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwYywgMHgwYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBjLCAweDBhLAogCTB4MjgsIDB4MWUsIDB4NjAsIENPTVAsIE1DS19JTklULAogCTB4MTgsIDB4MTAsIDB4MDQsIDB4MDMsIDB4MTEsIDB4MGMKIH07CkBAIC00OTMsMTIgKzU1NiwxNCBAQAogU0VOUyhpbml0T3Y2NjUwLCBOVUxMLCBvdjY2NTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwgMCwgMHg2MCksCiBTRU5TKGluaXRPdjc2MzAsIGluaXRPdjc2MzBfMywgb3Y3NjMwX3NlbnNvcl9pbml0LCBOVUxMLCBvdjc2MzBfc2Vuc29yX2luaXRfMywKIAlGX0dBSU4sIDAsIDB4MjEpLAotU0VOUyhpbml0UGFzMTA2LCBOVUxMLCBwYXMxMDZfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfU0lGLCBOT19FWFBPfE5PX0ZSRVEsCitTRU5TKGluaXRQYXMxMDYsIE5VTEwsIHBhczEwNl9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwgRl9HQUlOfEZfU0lGLCBOT19GUkVRLAogCTApLAotU0VOUyhpbml0UGFzMjAyLCBpbml0UGFzMjAyLCBwYXMyMDJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIDAsCi0JTk9fRVhQT3xOT19GUkVRLCAwKSwKLVNFTlMoaW5pdFRhczUxMTAsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwKLQlOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0UGFzMjAyLCBpbml0UGFzMjAyLCBwYXMyMDJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTiwKKwlOT19GUkVRLCAwKSwKK1NFTlMoaW5pdFRhczUxMTBjLCBOVUxMLCB0YXM1MTEwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLAorCUZfR0FJTnxGX1NJRnxGX0NPQVJTRV9FWFBPLCBOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0VGFzNTExMGQsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsCisJRl9HQUlOfEZfU0lGfEZfQ09BUlNFX0VYUE8sIE5PX0JSSUdIVE5FU1N8Tk9fRlJFUSwgMCksCiBTRU5TKGluaXRUYXM1MTMwLCBOVUxMLCB0YXM1MTMwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCAwLCBOT19FWFBPfE5PX0ZSRVEsCiAJMCksCiB9OwpAQCAtNTg3LDQyICs2NTIsMjggQEAKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKIAkgICAgfQotCWNhc2UgU0VOU09SX1BBUzEwNjogewotCQlfX3U4IGkyYzFbXSA9Ci0JCQl7MHhhMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07Ci0KLQkJaTJjMVszXSA9IHNkLT5icmlnaHRuZXNzID4+IDM7Ci0JCWkyYzFbMl0gPSAweDBlOwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMxKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaTJjMVszXSA9IDB4MDE7Ci0JCWkyYzFbMl0gPSAweDEzOwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMxKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJYnJlYWs7Ci0JICAgIH0KKwljYXNlIFNFTlNPUl9QQVMxMDY6CiAJY2FzZSBTRU5TT1JfUEFTMjAyOiB7Ci0JCS8qIF9fdTggaTJjcGV4cG8xW10gPQotCQkJezB4YjAsIDB4NDAsIDB4MDQsIDB4MDcsIDB4MmEsIDB4MDAsIDB4NjMsIDB4MTZ9OyAqLwotCQlfX3U4IGkyY3BleHBvW10gPQotCQkJezB4YjAsIDB4NDAsIDB4MGUsIDB4MDEsIDB4YWIsIDB4MDAsIDB4NjMsIDB4MTZ9OwotCQlfX3U4IGkyY3AyMDJbXSA9Ci0JCQl7MHhhMCwgMHg0MCwgMHgxMCwgMHgwZSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNX07Ci0JCXN0YXRpYyBfX3U4IGkyY3Bkb2l0W10gPQotCQkJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTZ9OworCQlfX3U4IGkyY3BicmlnaHRbXSA9CisJCQl7MHhiMCwgMHg0MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisJCV9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CiAKLQkJLyogY2hhbmdlIHJlZyAweDEwICovCi0JCWkyY3BleHBvWzRdID0gMHhmZiAtIHNkLT5icmlnaHRuZXNzOwotLyoJCWlmKGkyY193KGdzcGNhX2RldixpMmNwZXhwbzEpIDwgMCkKLQkJCWdvdG8gZXJyOyAqLwotLyoJCWlmKGkyY193KGdzcGNhX2RldixpMmNwZG9pdCkgPCAwKQotCQkJZ290byBlcnI7ICovCi0JCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BleHBvKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpMmNwMjAyWzNdID0gc2QtPmJyaWdodG5lc3MgPj4gMzsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcDIwMikgPCAwKQorCQkvKiBQQVMxMDYgdXNlcyByZWcgNyBhbmQgOCBpbnN0ZWFkIG9mIGIgYW5kIGMgKi8KKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikgeworCQkJaTJjcGJyaWdodFsyXSA9IDc7CisJCQlpMmNwZG9pdFsyXSA9IDB4MTM7CisJCX0KKworCQlpZiAoc2QtPmJyaWdodG5lc3MgPCAxMjcpIHsKKwkJCS8qIGNoYW5nZSByZWcgMHgwYiwgc2lnbnJlZyAqLworCQkJaTJjcGJyaWdodFszXSA9IDB4MDE7CisJCQkvKiBzZXQgcmVnIDB4MGMsIG9mZnNldCAqLworCQkJaTJjcGJyaWdodFs0XSA9IDEyNyAtIHNkLT5icmlnaHRuZXNzOworCQl9IGVsc2UKKwkJCWkyY3BicmlnaHRbNF0gPSBzZC0+YnJpZ2h0bmVzcyAtIDEyNzsKKworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwYnJpZ2h0KSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKIAkJCWdvdG8gZXJyOwpAQCAtNjUyLDcgKzcwMyw4IEBACiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAotCWNhc2UgU0VOU09SX1RBUzUxMTA6IHsKKwljYXNlIFNFTlNPUl9UQVM1MTEwQzoKKwljYXNlIFNFTlNPUl9UQVM1MTEwRDogewogCQlfX3U4IGkyY1tdID0KIAkJCXsweDMwLCAweDExLCAweDAyLCAweDIwLCAweDcwLCAweDAwLCAweDAwLCAweDEwfTsKIApAQCAtNjc0LDYgKzcyNiwzNyBAQAogCQkJZ290byBlcnI7CiAJCWJyZWFrOwogCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMTA2OgorCWNhc2UgU0VOU09SX1BBUzIwMjogeworCQlfX3U4IGkyY3BnYWluW10gPQorCQkJezB4YTAsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTV9OworCQlfX3U4IGkyY3Bjb2xvcmdhaW5bXSA9CisJCQl7MHhjMCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNX07CisJCV9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisKKwkJLyogUEFTMTA2IHVzZXMgZGlmZmVyZW50IHJlZ3MgKGFuZCBoYXMgc3BsaXQgZ3JlZW4gZ2FpbnMpICovCisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKKwkJCWkyY3BnYWluWzJdID0gMHgwZTsKKwkJCWkyY3Bjb2xvcmdhaW5bMF0gPSAweGQwOworCQkJaTJjcGNvbG9yZ2FpblsyXSA9IDB4MDk7CisJCQlpMmNwZG9pdFsyXSA9IDB4MTM7CisJCX0KKworCQlpMmNwZ2FpblszXSA9IHNkLT5nYWluID4+IDM7CisJCWkyY3Bjb2xvcmdhaW5bM10gPSBzZC0+Z2FpbiA+PiA0OworCQlpMmNwY29sb3JnYWluWzRdID0gc2QtPmdhaW4gPj4gNDsKKwkJaTJjcGNvbG9yZ2Fpbls1XSA9IHNkLT5nYWluID4+IDQ7CisJCWkyY3Bjb2xvcmdhaW5bNl0gPSBzZC0+Z2FpbiA+PiA0OworCisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BnYWluKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGNvbG9yZ2FpbikgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKKwkJYnJlYWs7CisJICAgIH0KIAl9CiAJcmV0dXJuOwogZXJyOgpAQCAtNjg0LDE5ICs3NjcsMjEgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191OCBnYWluOwotCV9fdTggcmdiX3ZhbHVlOworCV9fdTggYnVmWzJdID0geyAwLCAwIH07CisKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0dBSU4pIHsKKwkJLyogVXNlIHRoZSBzZW5zb3IgZ2FpbiB0byBkbyB0aGUgYWN0dWFsIGdhaW4gKi8KKwkJc2V0c2Vuc29yZ2Fpbihnc3BjYV9kZXYpOworCQlyZXR1cm47CisJfQogCiAJZ2FpbiA9IHNkLT5nYWluID4+IDQ7CiAKIAkvKiByZWQgYW5kIGJsdWUgZ2FpbiAqLwotCXJnYl92YWx1ZSA9IGdhaW4gPDwgNCB8IGdhaW47Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDEwLCAmcmdiX3ZhbHVlLCAxKTsKKwlidWZbMF0gPSBnYWluIDw8IDQgfCBnYWluOwogCS8qIGdyZWVuIGdhaW4gKi8KLQlyZ2JfdmFsdWUgPSBnYWluOwotCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgJnJnYl92YWx1ZSwgMSk7Ci0KLQlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0dBSU4pCi0JCXNldHNlbnNvcmdhaW4oZ3NwY2FfZGV2KTsKKwlidWZbMV0gPSBnYWluOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgYnVmLCAyKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNzA0LDE3ICs3ODksMTIgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9UQVM1MTEwOiB7Ci0JCV9fdTggcmVnOwotCisJY2FzZSBTRU5TT1JfVEFTNTExMEM6CisJY2FzZSBTRU5TT1JfVEFTNTExMEQ6IHsKIAkJLyogcmVnaXN0ZXIgMTkncyBoaWdoIG5pYmJsZSBjb250YWlucyB0aGUgc245YzEweCBjbG9jayBkaXZpZGVyCiAJCSAgIFRoZSBoaWdoIG5pYmJsZSBjb25maWd1cmVzIHRoZSBubyBmcHMgYWNjb3JkaW5nIHRvIHRoZQogCQkgICBmb3JtdWxhOiA2MCAvIGhpZ2hfbmliYmxlLiBXaXRoIGEgbWF4aW11bSBvZiAzMCBmcHMgKi8KLQkJcmVnID0gMTIwICogc2QtPmV4cG9zdXJlIC8gMTAwMDsKLQkJaWYgKHJlZyA8IDIpCi0JCQlyZWcgPSAyOwotCQllbHNlIGlmIChyZWcgPiAxNSkKLQkJCXJlZyA9IDE1OworCQlfX3U4IHJlZyA9IHNkLT5leHBvc3VyZTsKIAkJcmVnID0gKHJlZyA8PCA0KSB8IDB4MGI7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgxOSwgJnJlZywgMSk7CiAJCWJyZWFrOwpAQCAtNzUwLDIwICs4MzAsMjEgQEAKIAkJfSBlbHNlCiAJCQlyZWcxMF9tYXggPSAweDQxOwogCi0JCXJlZzExID0gKDYwICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CisJCXJlZzExID0gKDE1ICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CiAJCWlmIChyZWcxMSA8IDEpCiAJCQlyZWcxMSA9IDE7CiAJCWVsc2UgaWYgKHJlZzExID4gMTYpCiAJCQlyZWcxMSA9IDE2OwogCi0JCS8qIEluIDY0MHg0ODAsIGlmIHRoZSByZWcxMSBoYXMgbGVzcyB0aGFuIDMsIHRoZSBpbWFnZSBpcwotCQkgICB1bnN0YWJsZSAobm90IGVub3VnaCBiYW5kd2lkdGgpLiAqLwotCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCA9PSA2NDAgJiYgcmVnMTEgPCAzKQotCQkJcmVnMTEgPSAzOworCQkvKiBJbiA2NDB4NDgwLCBpZiB0aGUgcmVnMTEgaGFzIGxlc3MgdGhhbiA0LCB0aGUgaW1hZ2UgaXMKKwkJICAgdW5zdGFibGUgKHRoZSBicmlkZ2UgZ29lcyBpbnRvIGEgaGlnaGVyIGNvbXByZXNzaW9uIG1vZGUKKwkJICAgd2hpY2ggd2UgaGF2ZSBub3QgcmV2ZXJzZSBlbmdpbmVlcmVkIHlldCkuICovCisJCWlmIChnc3BjYV9kZXYtPndpZHRoID09IDY0MCAmJiByZWcxMSA8IDQpCisJCQlyZWcxMSA9IDQ7CiAKIAkJLyogZnJhbWUgZXhwb3N1cmUgdGltZSBpbiBtcyA9IDEwMDAgKiByZWcxMSAvIDMwICAgIC0+Ci0JCXJlZzEwID0gc2QtPmV4cG9zdXJlICogMiAqIHJlZzEwX21heCAvICgxMDAwICogcmVnMTEgLyAzMCkgKi8KLQkJcmVnMTAgPSAoc2QtPmV4cG9zdXJlICogNjAgKiByZWcxMF9tYXgpIC8gKDEwMDAgKiByZWcxMSk7CisJCXJlZzEwID0gKHNkLT5leHBvc3VyZSAvIDIpICogcmVnMTBfbWF4IC8gKDEwMDAgKiByZWcxMSAvIDMwKSAqLworCQlyZWcxMCA9IChzZC0+ZXhwb3N1cmUgKiAxNSAqIHJlZzEwX21heCkgLyAoMTAwMCAqIHJlZzExKTsKIAogCQkvKiBEb24ndCBhbGxvdyB0aGlzIHRvIGdldCBiZWxvdyAxMCB3aGVuIHVzaW5nIGF1dG9nYWluLCB0aGUKIAkJICAgc3RlcHMgYmVjb21lIHZlcnkgbGFyZ2UgKHJlbGF0aXZlbHkpIHdoZW4gYmVsb3cgMTAgY2F1c2luZwpAQCAtNzg2LDEwICs4NjcsODUgQEAKIAkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjKSA9PSAwKQogCQkJc2QtPnJlZzExID0gcmVnMTE7CiAJCWVsc2UKLQkJCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBleHBvc3VyZSIpOworCQkJZ290byBlcnI7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMjAyOiB7CisJCV9fdTggaTJjcGZyYW1lcmF0ZVtdID0KKwkJCXsweGIwLCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJX191OCBpMmNwZXhwb1tdID0KKwkJCXsweGEwLCAweDQwLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJY29uc3QgX191OCBpMmNwZG9pdFtdID0KKwkJCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJaW50IGZyYW1lcmF0ZV9jdHJsOworCisJCS8qIFRoZSBleHBvc3VyZSBrbmVlIGZvciB0aGUgYXV0b2dhaW4gYWxnb3JpdGhtIGlzIDIwMAorCQkgICAoMTAwIG1zIC8gMTAgZnBzIG9uIG90aGVyIHNlbnNvcnMpLCBmb3IgdmFsdWVzIGJlbG93IHRoaXMKKwkJICAgdXNlIHRoZSBjb250cm9sIGZvciBzZXR0aW5nIHRoZSBwYXJ0aWFsIGZyYW1lIGV4cG9zZSB0aW1lLAorCQkgICBhYm92ZSB0aGF0IHVzZSB2YXJpYWJsZSBmcmFtZXJhdGUuIFRoaXMgd2F5IHdlIHJ1biBhdCBtYXgKKwkJICAgZnJhbWVyYXRlICg2NDB4NDgwQDcuNSBmcHMsIDMyMHgyNDBAMTBmcHMpIHVudGlsIHRoZSBrbmVlCisJCSAgIGlzIHJlYWNoZWQuIFVzaW5nIHRoZSB2YXJpYWJsZSBmcmFtZXJhdGUgY29udHJvbCBhYm92ZSAyMDAKKwkJICAgaXMgYmV0dGVyIHRoZW4gcGxheWluZyBhcm91bmQgd2l0aCBib3RoIGNsb2NrZGl2ICsgcGFydGlhbAorCQkgICBmcmFtZSBleHBvc3VyZSB0aW1lcyAobGlrZSB3ZSBhcmUgZG9pbmcgd2l0aCB0aGUgb3YgY2hpcHMpLAorCQkgICBhcyB0aGF0IHNvbWV0aW1lcyBsZWFkcyB0byBqdW1wcyBpbiB0aGUgZXhwb3N1cmUgY29udHJvbCwKKwkJICAgd2hpY2ggYXJlIGJhZCBmb3IgYXV0byBleHBvc3VyZS4gKi8KKwkJaWYgKHNkLT5leHBvc3VyZSA8IDIwMCkgeworCQkJaTJjcGV4cG9bM10gPSAyNTUgLSAoc2QtPmV4cG9zdXJlICogMjU1KSAvIDIwMDsKKwkJCWZyYW1lcmF0ZV9jdHJsID0gNTAwOworCQl9IGVsc2UgeworCQkJLyogVGhlIFBBUzIwMidzIGV4cG9zdXJlIGNvbnRyb2wgZ29lcyBmcm9tIDAgLSA0MDk1LAorCQkJICAgYnV0IGFueXRoaW5nIGJlbG93IDUwMCBjYXVzZXMgdnN5bmMgaXNzdWVzLCBzbyBzY2FsZQorCQkJICAgb3VyIDIwMC0xMDIzIHRvIDUwMC00MDk1ICovCisJCQlmcmFtZXJhdGVfY3RybCA9IChzZC0+ZXhwb3N1cmUgLSAyMDApICogMTAwMCAvIDIyOSArCisJCQkJCSA1MDA7CisJCX0KKworCQlpMmNwZnJhbWVyYXRlWzNdID0gZnJhbWVyYXRlX2N0cmwgPj4gNjsKKwkJaTJjcGZyYW1lcmF0ZVs0XSA9IGZyYW1lcmF0ZV9jdHJsICYgMHgzZjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGZyYW1lcmF0ZSkgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BleHBvKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgU0VOU09SX1BBUzEwNjogeworCQlfX3U4IGkyY3BmcmFtZXJhdGVbXSA9CisJCQl7MHhiMSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCV9fdTggaTJjcGV4cG9bXSA9CisJCQl7MHhhMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCWNvbnN0IF9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMSwgMHg0MCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCWludCBmcmFtZXJhdGVfY3RybDsKKworCQkvKiBGb3IgdmFsdWVzIGJlbG93IDE1MCB1c2UgcGFydGlhbCBmcmFtZSBleHBvc3VyZSwgYWJvdmUKKwkJICAgdGhhdCB1c2UgZnJhbWVyYXRlIGN0cmwgKi8KKwkJaWYgKHNkLT5leHBvc3VyZSA8IDE1MCkgeworCQkJaTJjcGV4cG9bM10gPSAxNTAgLSBzZC0+ZXhwb3N1cmU7CisJCQlmcmFtZXJhdGVfY3RybCA9IDMwMDsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBQQVMxMDYncyBleHBvc3VyZSBjb250cm9sIGdvZXMgZnJvbSAwIC0gNDA5NSwKKwkJCSAgIGJ1dCBhbnl0aGluZyBiZWxvdyAzMDAgY2F1c2VzIHZzeW5jIGlzc3Vlcywgc28gc2NhbGUKKwkJCSAgIG91ciAxNTAtMTAyMyB0byAzMDAtNDA5NSAqLworCQkJZnJhbWVyYXRlX2N0cmwgPSAoc2QtPmV4cG9zdXJlIC0gMTUwKSAqIDEwMDAgLyAyMzAgKworCQkJCQkgMzAwOworCQl9CisKKwkJaTJjcGZyYW1lcmF0ZVszXSA9IGZyYW1lcmF0ZV9jdHJsID4+IDQ7CisJCWkyY3BmcmFtZXJhdGVbNF0gPSBmcmFtZXJhdGVfY3RybCAmIDB4MGY7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BmcmFtZXJhdGUpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZXhwbykgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKIAkJYnJlYWs7CiAJICAgIH0KIAl9CisJcmV0dXJuOworZXJyOgorCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBleHBvc3VyZSIpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTgyMywzMCArOTc5LDQzIEBACiAJfQogfQogCisjaW5jbHVkZSAiY29hcnNlX2V4cG9fYXV0b2dhaW4uaCIKKwogc3RhdGljIHZvaWQgZG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCBkZWFkem9uZSwgZGVzaXJlZF9hdmdfbHVtOworCWludCBkZWFkem9uZSwgZGVzaXJlZF9hdmdfbHVtLCByZXN1bHQ7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBhdmdfbHVtID0gYXRvbWljX3JlYWQoJnNkLT5hdmdfbHVtKTsKIAotCWlmIChhdmdfbHVtID09IC0xKQorCWlmIChhdmdfbHVtID09IC0xIHx8ICFzZC0+YXV0b2dhaW4pCiAJCXJldHVybjsKIAorCWlmIChzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA+IDApIHsKKwkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMtLTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFNJRiAvIFZHQSBzZW5zb3JzIGhhdmUgYSBkaWZmZXJlbnQgYXV0b2V4cG9zdXJlIGFyZWEgYW5kIHRodXMKIAkgICBkaWZmZXJlbnQgYXZnX2x1bSB2YWx1ZXMgZm9yIHRoZSBzYW1lIHBpY3R1cmUgYnJpZ2h0bmVzcyAqLwogCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfU0lGKSB7Ci0JCWRlYWR6b25lID0gMTAwMDsKLQkJZGVzaXJlZF9hdmdfbHVtID0gNzAwMDsKKwkJZGVhZHpvbmUgPSA1MDA7CisJCS8qIFNJRiBzZW5zb3JzIHRlbmQgdG8gb3ZlcmV4cG9zZSwgc28ga2VlcCB0aGlzIHNtYWxsICovCisJCWRlc2lyZWRfYXZnX2x1bSA9IDUwMDA7CiAJfSBlbHNlIHsKLQkJZGVhZHpvbmUgPSAzMDAwOwotCQlkZXNpcmVkX2F2Z19sdW0gPSAyMzAwMDsKKwkJZGVhZHpvbmUgPSAxNTAwOworCQlkZXNpcmVkX2F2Z19sdW0gPSAxODAwMDsKIAl9CiAKLQlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQotCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOwotCWVsc2UgaWYgKGdzcGNhX2F1dG9fZ2Fpbl9uX2V4cG9zdXJlKGdzcGNhX2RldiwgYXZnX2x1bSwKLQkJCXNkLT5icmlnaHRuZXNzICogZGVzaXJlZF9hdmdfbHVtIC8gMTI3LAotCQkJZGVhZHpvbmUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSkpIHsKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKQorCQlyZXN1bHQgPSBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluKGdzcGNhX2RldiwgYXZnX2x1bSwKKwkJCQlzZC0+YnJpZ2h0bmVzcyAqIGRlc2lyZWRfYXZnX2x1bSAvIDEyNywKKwkJCQlkZWFkem9uZSk7CisJZWxzZQorCQlyZXN1bHQgPSBnc3BjYV9hdXRvX2dhaW5fbl9leHBvc3VyZShnc3BjYV9kZXYsIGF2Z19sdW0sCisJCQkJc2QtPmJyaWdodG5lc3MgKiBkZXNpcmVkX2F2Z19sdW0gLyAxMjcsCisJCQkJZGVhZHpvbmUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSk7CisKKwlpZiAocmVzdWx0KSB7CiAJCVBERUJVRyhEX0ZSQU0sICJhdXRvZ2FpbjogZ2FpbiBjaGFuZ2VkOiBnYWluOiAlZCBleHBvOiAlZCIsCiAJCQkoaW50KXNkLT5nYWluLCAoaW50KXNkLT5leHBvc3VyZSk7CiAJCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUzsKQEAgLTg4MSw3ICsxMDUwLDEzIEBACiAKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5nYWluID0gR0FJTl9ERUY7Ci0Jc2QtPmV4cG9zdXJlID0gRVhQT1NVUkVfREVGOworCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfQ09BUlNFX0VYUE8pIHsKKwkJc2QtPmV4cG9zdXJlID0gQ09BUlNFX0VYUE9TVVJFX0RFRjsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBFWFBPU1VSRV9JRFgpOworCX0gZWxzZSB7CisJCXNkLT5leHBvc3VyZSA9IEVYUE9TVVJFX0RFRjsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBDT0FSU0VfRVhQT1NVUkVfSURYKTsKKwl9CiAJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBBVVRPR0FJTl9JRFgpKQogCQlzZC0+YXV0b2dhaW4gPSAwOyAvKiBEaXNhYmxlIGRvX2F1dG9nYWluIGNhbGxiYWNrICovCiAJZWxzZQpAQCAtOTE3LDkgKzEwOTIsNiBAQAogCXJlZzEyXzE5WzZdID0gc245YzEweFsweDE4IC0gMV0gfCAobW9kZSA8PCA0KTsKIAkvKiBTcGVjaWFsIGNhc2VzIHdoZXJlIHJlZyAxNyBhbmQgb3IgMTkgdmFsdWUgZGVwZW5kcyBvbiBtb2RlICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfUEFTMjAyOgotCQlyZWcxMl8xOVs1XSA9IG1vZGUgPyAweDI0IDogMHgyMDsKLQkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfVEFTNTEzMENYWDoKIAkJLyogcHJvYmFibHkgbm90IG1vZGUgc3BlY2lmaWMgYXQgYWxsIG1vc3QgbGlrZWx5IHRoZSB1cHBlcgogCQkgICBuaWJibGUgb2YgMHgxOSBpcyBleHBvc3VyZSAoY2xvY2sgZGl2aWRlcikganVzdCBhcyB3aXRoCkBAIC05NTUsNiArMTEyNywxNiBAQAogCQkJc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc2Vuc29yX2JyaWRnZV9pbml0X3NpemVbCiAJCQkJc2QtPmJyaWRnZV0pOwogCisJLyogTW9kZSBzcGVjaWZpYyBzZW5zb3Igc2V0dXAgKi8KKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9QQVMyMDI6IHsKKwkJY29uc3QgX191OCBpMmNwY2xvY2tkaXZbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH07CisJCS8qIGNsb2NrZGl2IGZyb20gNCB0byAzICg3LjUgLT4gMTAgZnBzKSB3aGVuIGluIGxvdyByZXMgbW9kZSAqLworCQlpZiAobW9kZSkKKwkJCWkyY193KGdzcGNhX2RldiwgaTJjcGNsb2NrZGl2KTsKKwkgICAgfQorCX0KIAkvKiBIX3NpemUgVl9zaXplIDB4MjgsIDB4MWUgLT4gNjQweDQ4MC4gMHgxNiwgMHgxMiAtPiAzNTJ4Mjg4ICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDE1LCAmcmVnMTJfMTlbM10sIDIpOwogCS8qIGNvbXByZXNzaW9uIHJlZ2lzdGVyICovCkBAIC05ODUsNiArMTE2Nyw4IEBACiAKIAlzZC0+ZnJhbWVzX3RvX2Ryb3AgPSAwOwogCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gMDsKKwlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7CisJc2QtPmV4cF90b29fbG93X2NudCA9IDA7CiAJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDMsMTEgKzEzMjcsMTQgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+YXV0b2dhaW4gPSB2YWw7CisJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOworCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOworCiAJLyogd2hlbiBzd2l0Y2hpbmcgdG8gYXV0b2dhaW4gc2V0IGRlZmF1bHRzIHRvIG1ha2Ugc3VyZQogCSAgIHdlIGFyZSBvbiBhIHZhbGlkIHBvaW50IG9mIHRoZSBhdXRvZ2FpbiBnYWluIC8KIAkgICBleHBvc3VyZSBrbmVlIGdyYXBoLCBhbmQgZ2l2ZSB0aGlzIGNoYW5nZSB0aW1lIHRvCiAJICAgdGFrZSBlZmZlY3QgYmVmb3JlIGRvaW5nIGF1dG9nYWluLiAqLwotCWlmIChzZC0+YXV0b2dhaW4pIHsKKwlpZiAoc2QtPmF1dG9nYWluICYmICEoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKSkgewogCQlzZC0+ZXhwb3N1cmUgPSBFWFBPU1VSRV9ERUY7CiAJCXNkLT5nYWluID0gR0FJTl9ERUY7CiAJCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewpAQCAtMTIwNyw2ICsxMzk0LDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMTIxOSw2ICsxNDI1LDkgQEAKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAogCS5kcV9jYWxsYmFjayA9IGRvX2F1dG9nYWluLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtMTIyNywyMSArMTQzNiwyMSBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKLQl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIFNCKFRBUzUxMTAsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwLCAxMDEpfSwgLyogVEFTNTExMEMxQiAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDAxKSwgU0IoVEFTNTExMEMsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwQywgMTAxKX0sIC8qIFRBUzUxMTBDMUIgKi8KICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQotCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA3KSwgU0IoVEFTNTExMCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcpLCBTQihUQVM1MTEwRCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCisjZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSksIFNCKFBBUzEwNiwgMTAxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMGQpLCBTQihQQVMxMDYsIDEwMSl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTEpLCBTQihPVjY2NTAsIDEwMSl9LAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTkpLCBTQihPVjc2MzAsIDEwMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0KSwgU0IoVEFTNTEzMENYWCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUpLCBTQihUQVM1MTMwQ1hYLCAxMDIpfSwKKyNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI4KSwgU0IoUEFTMjAyLCAxMDIpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSksIFNCKFBBUzEwNiwgMTAyKX0sCi0jZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIFNCKE9WNzYzMCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQpLCBTQihIVjcxMzFSLCAxMDIpfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggMGJkMzZhMC4uODNkNTc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC0yMSw2ICsyMSw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNvbml4aiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKICNpbmNsdWRlICJqcGVnLmgiCiAKQEAgLTQ1LDYgKzQ2LDcgQEAKIAl1OCByZWQ7CiAJdTggZ2FtbWE7CiAJdTggdmZsaXA7CQkJLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCisJdTggc2hhcnBuZXNzOwogCXU4IGluZnJhcmVkOwkJCS8qIG10OXYxMTEgb25seSAqLwogCXU4IGZyZXE7CQkJLyogb3Y3Nnh4IG9ubHkgKi8KIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KQEAgLTY0LDE2ICs2NiwxNyBAQAogI2RlZmluZSBCUklER0VfU045QzExMCAyCiAjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKIAl1OCBzZW5zb3I7CQkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwotI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCi0jZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQotI2RlZmluZSBTRU5TT1JfTU80MDAwIDIKLSNkZWZpbmUgU0VOU09SX01UOVYxMTEgMwotI2RlZmluZSBTRU5TT1JfT002ODAyIDQKLSNkZWZpbmUgU0VOU09SX09WNzYzMCA1Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NDggNgotI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDcKLSNkZWZpbmUgU0VOU09SX1BPMTAzMCA4Ci0jZGVmaW5lIFNFTlNPUl9TUDgwNzA4IDkKKyNkZWZpbmUgU0VOU09SX0FEQ00xNzAwIDAKKyNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMQorI2RlZmluZSBTRU5TT1JfTUkwMzYwIDIKKyNkZWZpbmUgU0VOU09SX01PNDAwMCAzCisjZGVmaW5lIFNFTlNPUl9NVDlWMTExIDQKKyNkZWZpbmUgU0VOU09SX09NNjgwMiA1CisjZGVmaW5lIFNFTlNPUl9PVjc2MzAgNgorI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDcKKyNkZWZpbmUgU0VOU09SX09WNzY2MCA4CisjZGVmaW5lIFNFTlNPUl9QTzEwMzAgOQorI2RlZmluZSBTRU5TT1JfU1A4MDcwOCAxMAogCXU4IGkyY19hZGRyOwogCiAJdTggKmpwZWdfaGRyOwpAQCAtOTYsMTIgKzk5LDE0IEBACiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGluZnJhcmVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aW5mcmFyZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgQlJJR0hUTkVTU19JRFggMAogCXsKIAkgICAgewpAQCAtMjI1LDggKzIzMCwyMyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0dmZsaXAsCiAJICAgIC5nZXQgPSBzZF9nZXR2ZmxpcCwKIAl9LAorI2RlZmluZSBTSEFSUE5FU1NfSURYIDgKKwl7CisJICAgIHsKKwkJLmlkCSA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTaGFycG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgOTAKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorCX0sCiAvKiBtdDl2MTExIG9ubHkgKi8KLSNkZWZpbmUgSU5GUkFSRURfSURYIDgKKyNkZWZpbmUgSU5GUkFSRURfSURYIDkKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9JTkZSQVJFRCwKQEAgLTI0Miw3ICsyNjIsNyBAQAogCSAgICAuZ2V0ID0gc2RfZ2V0aW5mcmFyZWQsCiAJfSwKIC8qIG92NzYzMC9vdjc2NDgvb3Y3NjYwIG9ubHkgKi8KLSNkZWZpbmUgRlJFUV9JRFggOQorI2RlZmluZSBGUkVRX0lEWCAxMAogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0yNjEsMjggKzI4MSwzNyBAQAogCiAvKiB0YWJsZSBvZiB0aGUgZGlzYWJsZWQgY29udHJvbHMgKi8KIHN0YXRpYyBfX3UzMiBjdHJsX2Rpc1tdID0geworCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpIHwKKwkJCSgxIDw8IEFVVE9HQUlOX0lEWCksCS8qIFNFTlNPUl9BRENNMTcwMCAwICovCisJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKKwkJCQkJCS8qIFNFTlNPUl9IVjcxMzFSIDEgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9IVjcxMzFSIDAgKi8KKwkJCQkJCS8qIFNFTlNPUl9NSTAzNjAgMiAqLwogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpLAotCQkJCQkJLyogU0VOU09SX01JMDM2MCAxICovCi0JKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfTU80MDAwIDIgKi8KKwkJCQkJCS8qIFNFTlNPUl9NTzQwMDAgMyAqLwogCSgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSAzICovCisJCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSA0ICovCiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT002ODAyIDQgKi8KKwkJCQkJCS8qIFNFTlNPUl9PTTY4MDIgNSAqLwogCSgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDUgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2MzAgNiAqLwogCSgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDYgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2NDggNyAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNyAqLworCQkJCQkJLyogU0VOU09SX09WNzY2MCA4ICovCiAJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwKLQkJCSAgICAgICgxIDw8IEZSRVFfSURYKSwJLyogU0VOU09SX1BPMTAzMCA4ICovCisJCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9QTzEwMzAgOSAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8Ci0JCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9TUDgwNzA4IDkgKi8KKwkJCSAgICAgICgxIDw8IEZSRVFfSURYKSwJLyogU0VOU09SX1NQODA3MDggMTAgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl9tb2RlW10gPSB7CisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4ICogNCAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCkBAIC0zMDIsNiArMzMxLDE3IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCitzdGF0aWMgY29uc3QgdTggc25fYWRjbTE3MDBbMHgxY10gPSB7CisvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KKwkweDAwLAkweDQzLAkweDYwLAkweDAwLAkweDFhLAkweDAwLAkweDAwLAkweDAwLAorLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCisJMHg4MCwJMHg1MSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCisJMHgwMywJMHgwMCwJMHgwNSwJMHgwMSwJMHgwNSwJMHgxNiwJMHgxMiwJMHg0MiwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNiwJMHgwMCwJMHgwMCwJMHgwMAorfTsKKwogLypEYXRhIGZyb20gc245YzEwMnAraHY3MTMxciAqLwogc3RhdGljIGNvbnN0IHU4IHNuX2h2NzEzMVsweDFjXSA9IHsKIC8qCXJlZzAJcmVnMQlyZWcyCXJlZzMJcmVnNAlyZWc1CXJlZzYJcmVnNyAqLwpAQCAtNDE1LDYgKzQ1NSw3IEBACiAKIC8qIHNlcXVlbmNlIHNwZWNpZmljIHRvIHRoZSBzZW5zb3JzIC0gISEgaW5kZXggPSBTRU5TT1JfeHh4ICovCiBzdGF0aWMgY29uc3QgdTggKnNuX3RiW10gPSB7CisJc25fYWRjbTE3MDAsCiAJc25faHY3MTMxLAogCXNuX21pMDM2MCwKIAlzbl9tbzQwMDAsCkBAIC00MzIsNiArNDczLDExIEBACiAJMHgwMCwgMHgyZCwgMHg0NiwgMHg1YSwgMHg2YywgMHg3YywgMHg4YiwgMHg5OSwKIAkweGE2LCAweGIyLCAweGJmLCAweGNhLCAweGQ1LCAweGUwLCAweGViLCAweGY1LCAweGZmCiB9OworLyogZ2FtbWEgZm9yIHNlbnNvciBBRENNMTcwMCAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMFsxN10gPSB7CisJMHgwZiwgMHgzOSwgMHg1YSwgMHg3NCwgMHg4NiwgMHg5NSwgMHhhNiwgMHhiNCwKKwkweGJkLCAweGM0LCAweGNjLCAweGQ0LCAweGQ1LCAweGRlLCAweGU0LCAweGVkLCAweGY1Cit9OwogLyogZ2FtbWEgZm9yIHNlbnNvcnMgSFY3MTMxUiBhbmQgTVQ5VjExMSAqLwogc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMVsxN10gPSB7CiAJMHgwOCwgMHgzYSwgMHg1MiwgMHg2NSwgMHg3NSwgMHg4MywgMHg5MSwgMHg5ZCwKQEAgLTQ1MCw2ICs0OTYsNDIgQEAKIAkweDNlLCAweDAwLCAweGNkLCAweDBmLCAweGY3LCAweDBmLAkvKiBWUiBWRyBWQiAqLwogCTB4MDAsIDB4MDAsIDB4MDAJCQkvKiBZVVYgb2Zmc2V0cyAqLwogfTsKK3N0YXRpYyBjb25zdCB1OCBhZGNtMTcwMF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGEwLCAweDUxLCAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCS8qIHJlc2V0ICovCisJezB4ZGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGIwLCAweDUxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MGMsIDB4ZTAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDEwLCAweDAyLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgxNCwgMHgwZSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGRkLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggYWRjbTE3MDBfc2Vuc29yX3BhcmFtMVtdWzhdID0geworCXsweGIwLCAweDUxLCAweDI2LCAweGY5LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwJLyogZXhwb3N1cmU/ICovCisJezB4ZDAsIDB4NTEsIDB4MWUsIDB4OGUsIDB4OGUsIDB4OGUsIDB4OGUsIDB4MTB9LAorCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MzIsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQwLCAweDUxLCAweDFlLCAweGJlLCAweGQ3LCAweGU4LCAweGJlLCAweDEwfSwJLyogZXhwb3N1cmU/ICovCisKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGEwLCAweDUxLCAweGZlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgzMiwgMHgwMCwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KK307CiBzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGMxLCAweDExLCAweDAxLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhiMSwgMHgxMSwgMHgzNCwgMHgxNywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC05ODYsMTcgKzEwNjgsMTggQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHU4ICgqc2Vuc29yX2luaXRbMTBdKVs4XSA9IHsKLQlodjcxMzFyX3NlbnNvcl9pbml0LAkvKiBIVjcxMzFSIDAgKi8KLQltaTAzNjBfc2Vuc29yX2luaXQsCS8qIE1JMDM2MCAxICovCi0JbW80MDAwX3NlbnNvcl9pbml0LAkvKiBNTzQwMDAgMiAqLwotCW10OXYxMTFfc2Vuc29yX2luaXQsCS8qIE1UOVYxMTEgMyAqLwotCW9tNjgwMl9zZW5zb3JfaW5pdCwJLyogT002ODAyIDQgKi8KLQlvdjc2MzBfc2Vuc29yX2luaXQsCS8qIE9WNzYzMCA1ICovCi0Jb3Y3NjQ4X3NlbnNvcl9pbml0LAkvKiBPVjc2NDggNiAqLwotCW92NzY2MF9zZW5zb3JfaW5pdCwJLyogT1Y3NjYwIDcgKi8KLQlwbzEwMzBfc2Vuc29yX2luaXQsCS8qIFBPMTAzMCA4ICovCi0Jc3A4MDcwOF9zZW5zb3JfaW5pdCwJLyogU1A4MDcwOCA5ICovCitzdGF0aWMgY29uc3QgdTggKCpzZW5zb3JfaW5pdFsxMV0pWzhdID0geworCWFkY20xNzAwX3NlbnNvcl9pbml0LAkvKiBBRENNMTcwMCAwICovCisJaHY3MTMxcl9zZW5zb3JfaW5pdCwJLyogSFY3MTMxUiAxICovCisJbWkwMzYwX3NlbnNvcl9pbml0LAkvKiBNSTAzNjAgMiAqLworCW1vNDAwMF9zZW5zb3JfaW5pdCwJLyogTU80MDAwIDMgKi8KKwltdDl2MTExX3NlbnNvcl9pbml0LAkvKiBNVDlWMTExIDQgKi8KKwlvbTY4MDJfc2Vuc29yX2luaXQsCS8qIE9NNjgwMiA1ICovCisJb3Y3NjMwX3NlbnNvcl9pbml0LAkvKiBPVjc2MzAgNiAqLworCW92NzY0OF9zZW5zb3JfaW5pdCwJLyogT1Y3NjQ4IDcgKi8KKwlvdjc2NjBfc2Vuc29yX2luaXQsCS8qIE9WNzY2MCA4ICovCisJcG8xMDMwX3NlbnNvcl9pbml0LAkvKiBQTzEwMzAgOSAqLworCXNwODA3MDhfc2Vuc29yX2luaXQsCS8qIFNQODA3MDggMTAgKi8KIH07CiAKIC8qIHJlYWQgPGxlbj4gYnl0ZXMgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCkBAIC0xMDY0LDYgKzExNDcsNyBAQAogCiAJUERFQlVHKERfVVNCTywgImkyY193MiBbJTAyeF0gPSAlMDJ4IiwgcmVnLCB2YWwpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09NNjgwMjoJCS8qIGkyYyBjb21tYW5kID0gYTAgKDEwMCBrSHopICovCiAJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ODAgfCAoMiA8PCA0KTsKIAkJYnJlYWs7CkBAIC0xMTEwLDYgKzExOTQsNyBAQAogCXU4IG1vZGVbOF07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PTTY4MDI6CQkvKiBpMmMgY29tbWFuZCA9IDkwICgxMDAga0h6KSAqLwogCQltb2RlWzBdID0gMHg4MCB8IDB4MTA7CiAJCWJyZWFrOwpAQCAtMTI2MCw3ICsxMzQ1LDggQEAKIAkJezB4MDAsIDB4NDAsIDB4MzgsIDB4MzAsIDB4MDAsIDB4MjB9OwogCXN0YXRpYyBjb25zdCB1OCByZWdkNFtdID0gezB4NjAsIDB4MDAsIDB4MDB9OwogCi0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CisJLyogc2Vuc29yIGNsb2NrIGFscmVhZHkgZW5hYmxlZCBpbiBzZF9pbml0ICovCisJLyogcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7ICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAKIAkvKiBjb25maWd1cmUgZ3BpbyAqLwpAQCAtMTI4NCw2ICsxMzcwLDEyIEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAzLCAmc245YzF4eFszXSwgMHgwZik7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Myk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjIpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYxKTsKQEAgLTEzNTcsMTQgKzE0NDksMTkgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCi0JY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwotCWNhbS0+bnBrdCA9IDI0OwkJCS8qIDI0IHBhY2tldHMgcGVyIElTT0MgbWVzc2FnZSAqLwotCiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiAxNjsKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkgeworCQljYW0tPmNhbV9tb2RlID0gY2lmX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShjaWZfbW9kZSk7CisJfSBlbHNlIHsKKwkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCX0KKwljYW0tPm5wa3QgPSAyNDsJCQkvKiAyNCBwYWNrZXRzIHBlciBJU09DIG1lc3NhZ2UgKi8KKwogCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CkBAIC0xMzc0LDYgKzE0NzEsMTQgQEAKIAlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CiAJc2QtPmFnX2NudCA9IC0xOwogCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PTTY4MDI6CisJCXNkLT5zaGFycG5lc3MgPSAweDEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKwkJYnJlYWs7CisJfQogCXNkLT5pbmZyYXJlZCA9IElORlJBUkVEX0RFRjsKIAlzZC0+ZnJlcSA9IEZSRVFfREVGOwogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CkBAIC0xNDMzLDcgKzE1MzgsOSBAQAogCQlicmVhazsKIAl9CiAKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsKKwkvKiBOb3RlIHdlIGRvIG5vdCBkaXNhYmxlIHRoZSBzZW5zb3IgY2xvY2sgaGVyZSAocG93ZXIgc2F2aW5nIG1vZGUpLAorCSAgIGFzIHRoYXQgYWxzbyBkaXNhYmxlcyB0aGUgYnV0dG9uIG9uIHRoZSBjYW0uICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CiAKIAkvKiBzZXQgdGhlIGkyYyBhZGRyZXNzICovCiAJc245YzF4eCA9IHNuX3RiW3NkLT5zZW5zb3JdOwpAQCAtMTU0Myw2ICsxNjUwLDEwIEBACiAKIAlrMiA9ICgoaW50KSBzZC0+YnJpZ2h0bmVzcyAtIDB4ODAwMCkgPj4gMTA7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWlmIChrMiA+IDB4MWYpCisJCQlrMiA9IDA7CQkvKiBvbmx5IHBvc2l0aXZlIFkgb2Zmc2V0ICovCisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCWV4cG8gPSBzZC0+YnJpZ2h0bmVzcyA8PCA0OwogCQlpZiAoZXhwbyA+IDB4MDAyZGM2YzApCkBAIC0xNjI1LDYgKzE3MzYsOSBAQAogCX07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJZ2FtbWFfYmFzZSA9IGdhbW1hX3NwZWNfMDsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9NVDlWMTExOgogCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18xOwpAQCAtMTY3MCwyMyArMTc4NCwzOSBAQAogCQlzZC0+YWdfY250ID0gLTE7CiB9CiAKLS8qIG92NzYzMC9vdjc2NDggb25seSAqLworLyogaHY3MTMxci9vdjc2MzAvb3Y3NjQ4IG9ubHkgKi8KIHN0YXRpYyB2b2lkIHNldHZmbGlwKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTggY29tbjsKIAogCWlmIChzZC0+Z3NwY2FfZGV2LmN0cmxfZGlzICYgKDEgPDwgVkZMSVBfSURYKSkKIAkJcmV0dXJuOwotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2MzApIHsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgorCQljb21uID0gMHgxODsJCQkvKiBjbGtkaXYgPSAxLCBhYmxjZW4gPSAxICovCisJCWlmIChzZC0+dmZsaXApCisJCQljb21uIHw9IDB4MDE7CisJCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHgwMSwgY29tbik7CS8qIHNjdHJhICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJY29tbiA9IDB4MDI7CiAJCWlmICghc2QtPnZmbGlwKQogCQkJY29tbiB8PSAweDgwOwotCX0gZWxzZSB7CisJCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwgY29tbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjc2NDg6ICovCiAJCWNvbW4gPSAweDA2OwogCQlpZiAoc2QtPnZmbGlwKQogCQkJY29tbiB8PSAweDgwOworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4NzUsIGNvbW4pOworCQlicmVhazsKIAl9Ci0JaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LCBjb21uKTsKK30KKworc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBzZCAqc2QpCit7CisJcmVnX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDk5LCBzZC0+c2hhcnBuZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0aW5mcmFyZWQoc3RydWN0IHNkICpzZCkKQEAgLTE4MDQsNiArMTkzNCw4IEBACiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHU4IEMwW10gPSB7IDB4MmQsIDB4MmQsIDB4M2EsIDB4MDUsIDB4MDQsIDB4M2YgfTsKIAlzdGF0aWMgY29uc3QgdTggQ0FbXSA9IHsgMHgyOCwgMHhkOCwgMHgxNCwgMHhlYyB9OworCXN0YXRpYyBjb25zdCB1OCBDQV9hZGNtMTcwMFtdID0KKwkJCQl7IDB4MTQsIDB4ZWMsIDB4MGEsIDB4ZjYgfTsKIAlzdGF0aWMgY29uc3QgdTggQ0VbXSA9IHsgMHgzMiwgMHhkZCwgMHgyZCwgMHhkZCB9OwkvKiBNSTAzNjAgKi8KIAlzdGF0aWMgY29uc3QgdTggQ0Vfb3Y3Nnh4W10gPQogCQkJCXsgMHgzMiwgMHhkZCwgMHgzMiwgMHhkZCB9OwpAQCAtMTgyNCw2ICsxOTU2LDkgQEAKIAlpMmNfd19zZXEoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdFtzZC0+c2Vuc29yXSk7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJcmVnMiA9IDB4NjA7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09NNjgwMjoKIAkJcmVnMiA9IDB4NzE7CiAJCWJyZWFrOwpAQCAtMTg0MiwxNyArMTk3NywyOCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MTIsIHNuOWMxeHhbMHgxMl0pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTMsIHNuOWMxeHhbMHgxM10pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZDIsIDB4NmEpOwkJLyogREMyOSAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4NTApOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkgeworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGQyLCAweDNhKTsJLyogQUVfSF9TSVpFID0gMTE2ICovCisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4MzApOwkvKiBBRV9WX1NJWkUgPSA5NiAqLworCX0gZWxzZSB7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDIsIDB4NmEpOwkvKiBBRV9IX1NJWkUgPSAyMTIgKi8KKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhkMywgMHg1MCk7CS8qIEFFX1ZfU0laRSA9IDE2MCAqLworCX0KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM2LCAweDAwKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM3LCAweDAwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM4LCAweDUwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfQURDTTE3MDApIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHgyYyk7CS8qIEFXX0hfU1RPUCA9IDM1MiAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDI0KTsJLyogQVdfVl9TVE9QID0gMjg4ICovCisJfSBlbHNlIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHg1MCk7CS8qIEFXX0hfU1RPUCA9IDY0MCAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsJLyogQVdfVl9TVE9QID0gNDgwICovCisJfQogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJCXJlZzE3ID0gMHhlMDsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlyZWcxNyA9IDB4ZTI7CiAJCWJyZWFrOwpAQCAtMTg3MCw0NCArMjAxNiwzOSBAQAogCQlicmVhazsKIAl9CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwotLyogc2V0IHJlZzEgd2FzIGhlcmUgKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDA1LCBzbjljMXh4WzVdKTsJLyogcmVkICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgc245YzF4eFs3XSk7CS8qIGdyZWVuICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgc245YzF4eFs2XSk7CS8qIGJsdWUgKi8KKworCXJlZ193MShnc3BjYV9kZXYsIDB4MDUsIDB4MDApOwkJLyogcmVkICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgMHgwMCk7CQkvKiBncmVlbiAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIDB4MDApOwkJLyogYmx1ZSAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTQsIHNuOWMxeHhbMHgxNF0pOwogCiAJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKIAorLypmaXhtZTogOCB0aW1lcyB3aXRoIGFsbCB6ZXJvZXMgYW5kIDEgb3IgMiB0aW1lcyB3aXRoIG5vcm1hbCB2YWx1ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0LCBzaXplb2YgcmVnODQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX01UOVYxMTE6Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDcpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5TT1JfT002ODAyOgotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA4KTsKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5OSwgMHgxMCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VOU09SX09WNzY0ODoKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwYSk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NjApOwotCQlicmVhazsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJY2FzZSBTRU5TT1JfU1A4MDcwODoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA3KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjQ4OgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDBhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwOCk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOwogCQlicmVhazsKIAl9CisJc2V0c2hhcnBuZXNzKHNkKTsKIAogCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODQsIHNpemVvZiByZWc4NCk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgc245YzF4eFs1XSk7CS8qIHJlZCAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIHNuOWMxeHhbN10pOwkvKiBncmVlbiAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIHNuOWMxeHhbNl0pOwkvKiBibHVlICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgMHgyMCk7CQkvKiByZWQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA3LCAweDIwKTsJCS8qIGdyZWVuICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgMHgyMCk7CQkvKiBibHVlICovCiAKIAlpbml0ID0gTlVMTDsKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CkBAIC0xOTE3LDYgKzIwNTgsMTEgQEAKIAkJcmVnMSA9IDB4MDY7CS8qIDY0MHg0ODA6IGNsayAyNE1oeiwgdmlkZW8gdHJmIGVuYWJsZSAqLwogCXJlZzE3ID0gMHg2MTsJCS8qIDB4OjIwOiBlbmFibGUgc2Vuc29yIGNsb2NrICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWluaXQgPSBhZGNtMTcwMF9zZW5zb3JfcGFyYW0xOworCQlyZWcxID0gMHg0NjsKKwkJcmVnMTcgPSAweGUyOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9NTzQwMDA6CiAJCWlmIChtb2RlKSB7CiAvKgkJCXJlZzEgPSAweDQ2OwkgKiAzMjAgY2xrIDQ4TWh6IDYwZnAvcyAqLwpAQCAtMTk0MCw3ICsyMDg2LDYgQEAKIAkJcmVnMTcgPSAweDY0OwkJLyogNjQwIE1DS1NJWkUgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQlzZXR2ZmxpcChzZCk7CiAJCXJlZzE3ID0gMHhlMjsKIAkJcmVnMSA9IDB4NDQ7CiAJCWJyZWFrOwpAQCAtMTk4Niw4ICsyMTMxLDEyIEBACiAJfQogCiAJcmVnX3coZ3NwY2FfZGV2LCAweGMwLCBDMCwgNik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQSwgNCk7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0FEQ00xNzAwKQorCQlyZWdfdyhnc3BjYV9kZXYsIDB4Y2EsIENBX2FkY20xNzAwLCA0KTsKKwllbHNlCisJCXJlZ193KGdzcGNhX2RldiwgMHhjYSwgQ0EsIDQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09WNzYzMDoKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgpAQCAtMjAwOCwxMSArMjE1Nyw3IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHJlZzEpOwogCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQlzZXR2ZmxpcChzZCk7Ci0JCWJyZWFrOwotCX0KKwlzZXR2ZmxpcChzZCk7CiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKQEAgLTIwNTYsNyArMjIwMSw4IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgc245YzF4eFsweDE3XSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgZGF0YSk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CisJLyogRG9uJ3QgZGlzYWJsZSBzZW5zb3IgY2xvY2sgYXMgdGhhdCBkaXNhYmxlcyB0aGUgYnV0dG9uIG9uIHRoZSBjYW0gKi8KKwkvKiByZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsgKi8KIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMjI4OCw2ICsyNDM0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zaGFycG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRzaGFycG5lc3Moc2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjM5MSw2ICsyNTU1LDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMjQwNiw2ICsyNTg5LDkgQEAKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAorI2VuZGlmCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTI0NzIsNiArMjY1OCw3IEBACiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0MiksIEJTKFNOOUMxMjAsIFBPMjAzME4pfSwJICpzbjljMTIwYiovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCUyhTTjlDMTIwLCBTUDgwNzA4KX0sCS8qc245YzEyMGIqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTQ4KSwgQlMoU045QzEyMCwgT002ODAyKX0sCS8qc245YzEyMGIqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTRhKSwgQlMoU045QzEyMCwgQURDTTE3MDApfSwJLypzbjljMTIwYiovCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKaW5kZXggZmU0Njg2OC4uYjg2NmM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKQEAgLTY4LDcgKzY4LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCmluZGV4IDY3NjFhMzAuLmM5OTMzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgTVlfQlJJR0hUTkVTUyAwCiAJewogCSAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCmluZGV4IDBmOTIzMmYuLmM1NzZlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKaW5kZXggMzkyNTdlNC4uODlmZWM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKQEAgLTUxLDcgKzUxLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpAQCAtNjczLDcgKzY3Myw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IDRkOGU2Y2YuLjE1YjJlZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCkBAIC00NSw3ICs0NSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggNThjMmYwMC4uZGM3ZjJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogfQogCiAvKiBjb250cm9sIHRhYmxlcyAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzXzEyYVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzXzEyYVtdID0gewogCXsKIAkgICAgewogCQkuaWQgPSBWNEwyX0NJRF9IVUUsCkBAIC05NjQsNyArOTY0LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzXzcyYVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzXzcyYVtdID0gewogCXsKIAkgICAgewogCQkuaWQgPSBWNEwyX0NJRF9IVUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYwppbmRleCBkNzBiMTU2Li5lNjQ2NjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogLyogQ29tbWFuZHMuIFRoZXNlIGdvIGluIHRoZSAidmFsdWUiIHNsb3QuICovCiAjZGVmaW5lIFNROTA1Q19DTEVBUiAgIDB4YTAJCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyNkZWZpbmUgU1E5MDVDX0dFVF9JRCAgMHgxNGY0CQkvKiBSZWFkIHZlcnNpb24gbnVtYmVyICovCiAjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0xPVyAweGEwNDAJLyogU3RhcnRzIGNhcHR1cmUgYXQgMTYweDEyMCAqLwogI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9NRUQgMHgxNDQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDMyMHgyNDAgKi8KICNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfSEkgMHgyODQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDMyMHgyNDAgKi8KQEAgLTEwMSw2ICsxMDIsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzcTkwNWNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBjb21tYW5kLCB1MTYgaW5kZXgsCisJCSAgICAgICBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsCQkvKiByZXF1ZXN0ICovCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIGNvbW1hbmQsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIHNpemUsCisJCQkgICAgICBTUTkwNUNfQ01EX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLAorCQkgICAgICAgX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGFuZCBydW5zIHdoZW5ldmVyIHRoZSBjYW1lcmEKICAqIGlzIHN0cmVhbWluZyBkYXRhLiBCZWNhdXNlIGl0IGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGl0IGlzIGFsbG93ZWQgdG8gc2xlZXAKICAqIHNvIHdlIGNhbiB1c2Ugc3luY2hyb25vdXMgVVNCIGNhbGxzLiBUbyBhdm9pZCBwb3NzaWJsZSBjb2xsaXNpb25zIHdpdGggb3RoZXIKQEAgLTE4MywxMyArMjA0LDM0IEBACiB7CiAJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKIAogCVBERUJVRyhEX1BST0JFLAogCQkiU1E5MDUwIGNhbWVyYSBkZXRlY3RlZCIKIAkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisKKwlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19HRVRfSUQsIDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIkdldCB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3E5MDVjX3JlYWQoZ3NwY2FfZGV2LCAweGY1LCAwLCAyMCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiUmVhZGluZyB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIE5vdGUgd2UgbGVhdmUgb3V0IHRoZSB1c2IgaWQgYW5kIHRoZSBtYW51ZmFjdHVyaW5nIGRhdGUgKi8KKwlQREVCVUcoRF9QUk9CRSwKKwkgICAgICAgIlNROTA1MCBJRCBzdHJpbmc6ICUwMnggLSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE0XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE1XSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE2XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE3XSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE4XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE5XSk7CisKIAljYW0tPmNhbV9tb2RlID0gc3E5MDVjX21vZGU7CiAJY2FtLT5ubW9kZXMgPSAyOwotCWlmIChpZC0+aWRQcm9kdWN0ID09IDB4OTA1MCkKKwlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzE1XSA9PSAwKQogCQljYW0tPm5tb2RlcyA9IDE7CiAJLyogV2UgZG9uJ3QgdXNlIHRoZSBidWZmZXIgZ3NwY2EgYWxsb2NhdGVzIHNvIG1ha2UgaXQgc21hbGwuICovCiAJY2FtLT5idWxrX3NpemUgPSAzMjsKQEAgLTI1OCw2ICszMDAsNyBAQAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNWMpfSwKIAl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1MCl9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDUyKX0sCiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxM2QpfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDJlMjkzNTUuLjBmYjUzNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCmluZGV4IDJhNjlkN2MuLmU1MGRkNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCkBAIC00NSw3ICs0NSw3IEBACiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogfTsKIAogc3RhdGljIGludCBzdHZfc25kY3RybChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBzZXQsIHU4IHJlcSwgdTE2IHZhbCwKQEAgLTUzLDI0ICs1MywyOCBAQAogewogCWludCByZXQgPSAtMTsKIAl1OCByZXFfdHlwZSA9IDA7CisJdW5zaWduZWQgaW50IHBpcGUgPSAwOwogCiAJc3dpdGNoIChzZXQpIHsKIAljYXNlIDA6IC8qICAweGMxICAqLwogCQlyZXFfdHlwZSA9IFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQ7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOwogCQlicmVhazsKIAljYXNlIDE6IC8qICAweDQxICAqLwogCQlyZXFfdHlwZSA9IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgkvKiAgMHg4MCAgKi8KIAkJcmVxX3R5cGUgPSBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMzoJLyogIDB4NDAgICovCiAJCXJlcV90eXBlID0gVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAotCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHBpcGUsCiAJCQkgICAgICByZXEsIHJlcV90eXBlLAogCQkJICAgICAgdmFsLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsIHNpemUsIDUwMCk7CiAKQEAgLTEzOCw2ICsxNDIsMTAgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCisJLyogR2l2ZSB0aGUgY2FtZXJhIHNvbWUgdGltZSB0byBzZXR0bGUsIG90aGVyd2lzZSBpbml0YWxpemF0aW9uIHdpbGwKKwkgICBmYWlsIG9uIGhvdHBsdWcsIGFuZCB5ZXMgaXQgcmVhbGx5IG5lZWRzIGEgZnVsbCBzZWNvbmQuICovCisJbXNsZWVwKDEwMDApOworCiAJLyogcGluZyBjYW1lcmEgdG8gYmUgc3VyZSBTVFYwNjgwIGlzIHByZXNlbnQgKi8KIAlpZiAoc3R2X3NuZGN0cmwoZ3NwY2FfZGV2LCAwLCAweDg4LCAweDU2NzgsIDB4MDIpICE9IDB4MDIgfHwKIAkgICAgZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDB4NTYgfHwgZ3NwY2FfZGV2LT51c2JfYnVmWzFdICE9IDB4NzgpIHsKQEAgLTE2OSw2ICsxNzcsOCBAQAogCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBDSUYgbW9kZSIpOwogCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbN10gJiAweDAyKQogCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBWR0EgbW9kZSIpOworCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbN10gJiAweDA0KQorCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBRQ0lGIG1vZGUiKTsKIAlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzddICYgMHgwOCkKIAkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgUVZHQSBtb2RlIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDVkMDI0MWIuLmFmNzNkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtMjcsNiArMjcsNyBAQAogICogUC9OIDg2MTA0MC0wMDAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gUXVpY2tDYW0gV2ViCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAic3R2MDZ4eF9zZW5zb3IuaCIKIAogTU9EVUxFX0FVVEhPUigiRXJpayBBbmRyw6luIik7CkBAIC0yMTksNiArMjIwLDcgQEAKIAkJaW5mbygiUmVhZCAweCV4IGZyb20gYWRkcmVzcyAweCV4IiwgZGF0YSwgaSk7CiAJfQogCisJaW5mbygiVGVzdGluZyBzdHYwNnh4IGJyaWRnZSByZWdpc3RlcnMgZm9yIHdyaXRhYmlsaXR5Iik7CiAJZm9yIChpID0gMHgxNDAwOyBpIDwgMHgxNjBmOyBpKyspIHsKIAkJc3R2MDZ4eF9yZWFkX2JyaWRnZShzZCwgaSwgJmRhdGEpOwogCQlidWYgPSBkYXRhOwpAQCAtMjI5LDcgKzIzMSw3IEBACiAJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQvd3JpdGUiLCBpKTsKIAkJZWxzZSBpZiAoZGF0YSAhPSBidWYpCiAJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQvd3JpdGUsIgotCQkJICAgICAiYnV0IG9ubHkgcGFydGlhbGx5IiwgaSk7CisJCQkgICAgICIgYnV0IG9ubHkgcGFydGlhbGx5IiwgaSk7CiAJCWVsc2UKIAkJCWluZm8oIlJlZ2lzdGVyIDB4JXggaXMgcmVhZC1vbmx5IiwgaSk7CiAKQEAgLTQyNiw2ICs0MjgsMjkgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDB4ODApIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlyZXQgPSAwOworCX0KKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDB4ODgpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzdHYwNnh4X2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiAKQEAgLTQzNiw3ICs0NjEsMTAgQEAKIAkuaW5pdCA9IHN0djA2eHhfaW5pdCwKIAkuc3RhcnQgPSBzdHYwNnh4X3N0YXJ0LAogCS5zdG9wTiA9IHN0djA2eHhfc3RvcE4sCi0JLnBrdF9zY2FuID0gc3R2MDZ4eF9wa3Rfc2NhbgorCS5wa3Rfc2NhbiA9IHN0djA2eHhfcGt0X3NjYW4sCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCAzMDZiN2Q3Li4wYzc4NmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtNjcsNyArNjcsNyBAQAogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTI2NywxNDIgKzI2Nyw2IEBACiAJezB4MDYsIDB4MDAwMCwgMHgwMDAwfSwKIAl7MHgwMCwgMHgwMDA0LCAweDI4ODB9LAogCXsweDAwLCAweDAwMDEsIDB4Mjg4MX0sCi0vKiBsb29rIGxpa2Ugc2V0dGluZyBhIHFUYWJsZSAqLwotCXsweDAwLCAweDAwMDYsIDB4MjgwMH0sCi0JezB4MDAsIDB4MDAwNCwgMHgyODAxfSwKLQl7MHgwMCwgMHgwMDA0LCAweDI4MDJ9LAotCXsweDAwLCAweDAwMDYsIDB4MjgwM30sCi0JezB4MDAsIDB4MDAwYSwgMHgyODA0fSwKLQl7MHgwMCwgMHgwMDEwLCAweDI4MDV9LAotCXsweDAwLCAweDAwMTQsIDB4MjgwNn0sCi0JezB4MDAsIDB4MDAxOCwgMHgyODA3fSwKLQl7MHgwMCwgMHgwMDA1LCAweDI4MDh9LAotCXsweDAwLCAweDAwMDUsIDB4MjgwOX0sCi0JezB4MDAsIDB4MDAwNiwgMHgyODBhfSwKLQl7MHgwMCwgMHgwMDA4LCAweDI4MGJ9LAotCXsweDAwLCAweDAwMGEsIDB4MjgwY30sCi0JezB4MDAsIDB4MDAxNywgMHgyODBkfSwKLQl7MHgwMCwgMHgwMDE4LCAweDI4MGV9LAotCXsweDAwLCAweDAwMTYsIDB4MjgwZn0sCi0KLQl7MHgwMCwgMHgwMDA2LCAweDI4MTB9LAotCXsweDAwLCAweDAwMDUsIDB4MjgxMX0sCi0JezB4MDAsIDB4MDAwNiwgMHgyODEyfSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4MTN9LAotCXsweDAwLCAweDAwMTAsIDB4MjgxNH0sCi0JezB4MDAsIDB4MDAxNywgMHgyODE1fSwKLQl7MHgwMCwgMHgwMDFjLCAweDI4MTZ9LAotCXsweDAwLCAweDAwMTYsIDB4MjgxN30sCi0JezB4MDAsIDB4MDAwNiwgMHgyODE4fSwKLQl7MHgwMCwgMHgwMDA3LCAweDI4MTl9LAotCXsweDAwLCAweDAwMDksIDB4MjgxYX0sCi0JezB4MDAsIDB4MDAwYywgMHgyODFifSwKLQl7MHgwMCwgMHgwMDE0LCAweDI4MWN9LAotCXsweDAwLCAweDAwMjMsIDB4MjgxZH0sCi0JezB4MDAsIDB4MDAyMCwgMHgyODFlfSwKLQl7MHgwMCwgMHgwMDE5LCAweDI4MWZ9LAotCi0JezB4MDAsIDB4MDAwNywgMHgyODIwfSwKLQl7MHgwMCwgMHgwMDA5LCAweDI4MjF9LAotCXsweDAwLCAweDAwMGYsIDB4MjgyMn0sCi0JezB4MDAsIDB4MDAxNiwgMHgyODIzfSwKLQl7MHgwMCwgMHgwMDFiLCAweDI4MjR9LAotCXsweDAwLCAweDAwMmMsIDB4MjgyNX0sCi0JezB4MDAsIDB4MDAyOSwgMHgyODI2fSwKLQl7MHgwMCwgMHgwMDFmLCAweDI4Mjd9LAotCXsweDAwLCAweDAwMGEsIDB4MjgyOH0sCi0JezB4MDAsIDB4MDAwZSwgMHgyODI5fSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4MmF9LAotCXsweDAwLCAweDAwMWEsIDB4MjgyYn0sCi0JezB4MDAsIDB4MDAyMCwgMHgyODJjfSwKLQl7MHgwMCwgMHgwMDJhLCAweDI4MmR9LAotCXsweDAwLCAweDAwMmQsIDB4MjgyZX0sCi0JezB4MDAsIDB4MDAyNSwgMHgyODJmfSwKLQotCXsweDAwLCAweDAwMTQsIDB4MjgzMH0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODMxfSwKLQl7MHgwMCwgMHgwMDFmLCAweDI4MzJ9LAotCXsweDAwLCAweDAwMjMsIDB4MjgzM30sCi0JezB4MDAsIDB4MDAyOSwgMHgyODM0fSwKLQl7MHgwMCwgMHgwMDMwLCAweDI4MzV9LAotCXsweDAwLCAweDAwMzAsIDB4MjgzNn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODM3fSwKLQl7MHgwMCwgMHgwMDFkLCAweDI4Mzh9LAotCXsweDAwLCAweDAwMjUsIDB4MjgzOX0sCi0JezB4MDAsIDB4MDAyNiwgMHgyODNhfSwKLQl7MHgwMCwgMHgwMDI3LCAweDI4M2J9LAotCXsweDAwLCAweDAwMmQsIDB4MjgzY30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODNkfSwKLQl7MHgwMCwgMHgwMDI5LCAweDI4M2V9LAotCXsweDAwLCAweDAwMjgsIDB4MjgzZn0sCi0KLQl7MHgwMCwgMHgwMDA3LCAweDI4NDB9LAotCXsweDAwLCAweDAwMDcsIDB4Mjg0MX0sCi0JezB4MDAsIDB4MDAwYSwgMHgyODQyfSwKLQl7MHgwMCwgMHgwMDEzLCAweDI4NDN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0NH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODQ1fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NDZ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0N30sCi0JezB4MDAsIDB4MDAwNywgMHgyODQ4fSwKLQl7MHgwMCwgMHgwMDA4LCAweDI4NDl9LAotCXsweDAwLCAweDAwMGEsIDB4Mjg0YX0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODRifSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NGN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0ZH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODRlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NGZ9LAotCi0JezB4MDAsIDB4MDAwYSwgMHgyODUwfSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4NTF9LAotCXsweDAwLCAweDAwMTYsIDB4Mjg1Mn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODUzfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NTR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1NX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODU2fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NTd9LAotCXsweDAwLCAweDAwMTMsIDB4Mjg1OH0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODU5fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWF9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Yn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVjfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1ZX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVmfSwKLQotCXsweDAwLCAweDAwMjgsIDB4Mjg2MH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODYxfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2M30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY0fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Nn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY3fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Njh9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2OX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZhfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Y30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZkfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Zn0sCi0KLQl7MHgwMCwgMHgwMDI4LCAweDI4NzB9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3MX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODcyfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3NH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc1fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzZ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3N30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc4fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Nzl9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3YX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdifSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2N9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3ZH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2Z9LAogCiAJezB4YTAsIDB4MDAwMCwgMHgwNTAzfSwKIH07CkBAIC02MjIsNiArNDg2LDIwIEBACiAJUERFQlVHKERfRlJBTSwgImFmdGVyIHdhaXQgMHglMDR4Iiwgbm90ZG9uZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNwY2E1MDRfcmVhZF9pbmZvKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKwl1OCBpbmZvWzZdOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJaW5mb1tpXSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCBpKTsKKwlQREVCVUcoRF9TVFJFQU0sCisJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKKwkJIiBTaG91bGQgYmUgMSwwLDIsMiwwLDAiLAorCQlpbmZvWzBdLCBpbmZvWzFdLCBpbmZvWzJdLAorCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKK30KKwogc3RhdGljIHZvaWQgc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJdTggcmVxLAogCQkJdTE2IGlkeCwgdTE2IHZhbCwgdTE2IGVuZGNvZGUsIHU4IGNvdW50KQpAQCAtODgxLDggKzc1OSw2IEBACiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgaTsKLQl1OCBpbmZvWzZdOwogCiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfU1BDQTUwNEI6CkBAIC05MjQsMTUgKzgwMCw4IEBACiAvKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwogCQlQREVCVUcoRF9TVFJFQU0sICJPcGVuaW5nIFNQQ0E1MDQiKTsKIAkJaWYgKHNkLT5zdWJ0eXBlID09IEFpcHRla01pbmlQZW5DYW0xMykgewotCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCQlpbmZvW2ldID0gcmVnX3JfMShnc3BjYV9kZXYsIGkpOwotCQkJUERFQlVHKERfU1RSRUFNLAotCQkJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKLQkJCQkiIFNob3VsZCBiZSAxLDAsMiwyLDAsMCIsCi0JCQkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKLQkJCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKLQkJCS8qIHNwY2E1MDRhIGFpcHRlayAqLworCQkJc3BjYTUwNF9yZWFkX2luZm8oZ3NwY2FfZGV2KTsKKwogCQkJLyogU2V0IEFFIEFXQiBCYW5kaW5nIFR5cGUgMy0+IDUwSHogMi0+IDYwSHogKi8KIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKIAkJCQkJCQk4LCAzLCAweDllLCAxKTsKQEAgLTk3MSw4ICs4NDAsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZW5hYmxlOwotCWludCBpOwotCXU4IGluZm9bNl07CiAKIAkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCiAJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CkBAIC0xMDA4LDE0ICs4NzUsOCBAQAogCQlicmVhazsKIAljYXNlIEJSSURHRV9TUENBNTA0OgogCQlpZiAoc2QtPnN1YnR5cGUgPT0gQWlwdGVrTWluaVBlbkNhbTEzKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJCWluZm9baV0gPSByZWdfcl8xKGdzcGNhX2RldiwgaSk7Ci0JCQlQREVCVUcoRF9TVFJFQU0sCi0JCQkJIlJlYWQgaW5mbzogJWQgJWQgJWQgJWQgJWQgJWQuIgotCQkJCSIgU2hvdWxkIGJlIDEsMCwyLDIsMCwwIiwKLQkJCQlpbmZvWzBdLCBpbmZvWzFdLCBpbmZvWzJdLAotCQkJCWluZm9bM10sIGluZm9bNF0sIGluZm9bNV0pOwotCQkJLyogc3BjYTUwNGEgYWlwdGVrICovCisJCQlzcGNhNTA0X3JlYWRfaW5mbyhnc3BjYV9kZXYpOworCiAJCQkvKiBTZXQgQUUgQVdCIEJhbmRpbmcgVHlwZSAzLT4gNTBIeiAyLT4gNjBIeiAqLwogCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LAogCQkJCQkJCTgsIDMsIDB4OWUsIDEpOwpAQCAtMTAyNiwxMyArODg3LDcgQEAKIAkJCQkJCQkwLCAwLCAweDlkLCAxKTsKIAkJfSBlbHNlIHsKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCA4LCAzKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJaW5mb1tpXSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCBpKTsKLQkJCVBERUJVRyhEX1NUUkVBTSwKLQkJCQkiUmVhZCBpbmZvOiAlZCAlZCAlZCAlZCAlZCAlZC4iCi0JCQkJIiBTaG91bGQgYmUgMSwwLDIsMiwwLDAiLAotCQkJCWluZm9bMF0sIGluZm9bMV0sIGluZm9bMl0sCi0JCQkJaW5mb1szXSwgaW5mb1s0XSwgaW5mb1s1XSk7CisJCQlzcGNhNTA0X3JlYWRfaW5mbyhnc3BjYV9kZXYpOwogCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDgsIDMpOwogCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDAsIDApOwogCQl9CkBAIC0xMzM2LDYgKzExOTEsNyBAQAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHg1MzMwKSwgQlMoU1BDQTUzMywgMCl9LAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHg1MzYwKSwgQlMoU1BDQTUzNiwgMCl9LAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHhmZmZmKSwgQlMoU1BDQTUwNEIsIDApfSwKKwl7VVNCX0RFVklDRSgweDA1MmIsIDB4MTUwNyksIEJTKFNQQ0E1MzMsIE1lZ2FwaXhWNCl9LAogCXtVU0JfREVWSUNFKDB4MDUyYiwgMHgxNTEzKSwgQlMoU1BDQTUzMywgTWVnYXBpeFY0KX0sCiAJe1VTQl9ERVZJQ0UoMHgwNTJiLCAweDE4MDMpLCBCUyhTUENBNTMzLCBNZWdhSW1hZ2VWSSl9LAogCXtVU0JfREVWSUNFKDB4MDU0NiwgMHgzMTU1KSwgQlMoU1BDQTUzMywgMCl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCA1NWVmNmE3Li42NjhhNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtNTIsNiArNTIsNyBAQAogI2RlZmluZSBTRU5TT1JfT002ODAyIDAKICNkZWZpbmUgU0VOU09SX09USEVSIDEKICNkZWZpbmUgU0VOU09SX1RBUzUxMzBBIDIKKyNkZWZpbmUgU0VOU09SX0xUMTY4RyAzICAgICAvKiBtdXN0IHZlcmlmeSBpZiB0aGlzIGlzIHRoZSBhY3R1YWwgbW9kZWwgKi8KIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTc4LDcgKzc5LDcgQEAKIHN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMzA2LDYgKzMwNywxNyBAQAogCTB4YmUsIDB4MzYsIDB4YmYsIDB4ZmYsIDB4YzIsIDB4ODgsIDB4YzUsIDB4YzgsCiAJMHhjNiwgMHhkYQogfTsKK3N0YXRpYyBjb25zdCB1OCBuNF9sdDE2OGdbXSA9IHsKKwkweDY2LCAweDAxLCAweDdmLCAweDAwLCAweDgwLCAweDdjLCAweDgxLCAweDI4LAorCTB4ODMsIDB4NDQsIDB4ODQsIDB4MjAsIDB4ODYsIDB4MjAsIDB4OGEsIDB4NzAsCisJMHg4YiwgMHg1OCwgMHg4YywgMHg4OCwgMHg4ZCwgMHhhMCwgMHg4ZSwgMHhiMywKKwkweDhmLCAweDI0LCAweGExLCAweGIwLCAweGEyLCAweDM4LCAweGE1LCAweDIwLAorCTB4YTYsIDB4NGEsIDB4YTgsIDB4ZTgsIDB4YWYsIDB4MzgsIDB4YjAsIDB4NjgsCisJMHhiMSwgMHg0NCwgMHhiMiwgMHg4OCwgMHhiYiwgMHg4NiwgMHhiZCwgMHg0MCwKKwkweGJlLCAweDI2LCAweGMxLCAweDA1LCAweGMyLCAweDg4LCAweGM1LCAweGMwLAorCTB4ZGEsIDB4OGUsIDB4ZGIsIDB4Y2EsIDB4ZGMsIDB4YTgsIDB4ZGQsIDB4OGMsCisJMHhkZSwgMHg0NCwgMHhkZiwgMHgwYywgMHhlOSwgMHg4MAorfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CiAgICAgewkJCQkvKiAwOiBPTTY4MDIgKi8KQEAgLTM4MCw2ICszOTIsMjMgQEAKIAkuc3RyZWFtID0KIAkJezB4MGIsIDB4MDQsIDB4MGEsIDB4NDB9LAogICAgIH0sCisgICAgewkJCQkvKiAzOiBMVDE2OEcgKi8KKwkubjMgPSB7MHg2MSwgMHhjMiwgMHg2NSwgMHg2OCwgMHg2MCwgMHgwMH0sCisJLm40ID0gbjRfbHQxNjhnLAorCS5uNHN6ID0gc2l6ZW9mIG40X2x0MTY4ZywKKwkucmVnODAgPSAweDdjLAorCS5yZWc4ZSA9IDB4YjMsCisJLm5zZXQ4ID0gezB4YTgsIDB4ZjAsIDB4YzYsIDB4YmEsIDB4YzAsIDB4MDB9LAorCS5kYXRhMSA9IHsweGMwLCAweDM4LCAweDA4LCAweDEwLCAweGMwLCAweDMwLCAweDEwLCAweDQwLAorCQkgMHhiMCwgMHhmNH0sCisJLmRhdGEyID0gezB4NDAsIDB4ODAsIDB4YzAsIDB4NTAsIDB4YTAsIDB4ZjAsIDB4NTMsIDB4YTYsCisJCSAweGZmfSwKKwkuZGF0YTMgPSB7MHg0MCwgMHg4MCwgMHhjMCwgMHg1MCwgMHhhMCwgMHhmMCwgMHg1MywgMHhhNiwKKwkJIDB4ZmZ9LAorCS5kYXRhNCA9IHsweDY2LCAweDQxLCAweGE4LCAweGYwfSwKKwkuZGF0YTUgPSB7MHgwYywgMHgwMywgMHhhYiwgMHg0YiwgMHg4MSwgMHgyYn0sCisJLnN0cmVhbSA9IHsweDBiLCAweDA0LCAweDBhLCAweDI4fSwKKyAgICB9LAogfTsKIAogI2RlZmluZSBNQVhfRUZGRUNUUyA3CkBAIC03MTYsNiArNzQ1LDEwIEBACiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIHRhczUxMzBhIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7CiAJCWJyZWFrOworCWNhc2UgMHgwODAyOgorCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciBsdDE2OGciKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9MVDE2OEc7CisJCWJyZWFrOwogCWNhc2UgMHgwODAzOgogCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciAnb3RoZXInIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1RIRVI7CkBAIC03NTgsNiArNzkxLDEzIEBACiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5uMywgc2l6ZW9mIHNlbnNvci0+bjMpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+bjQsIHNlbnNvci0+bjRzeik7CiAKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTFQxNjhHKSB7CisJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHg4MCk7CisJCVBERUJVRyhEX1NUUkVBTSwgIlJlZyAweCUwMnggPSAweCUwMngiLCAweDgwLAorCQkgICAgICAgdGVzdF9ieXRlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDZjODApOworCX0KKwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhkMCwgc2Vuc29yLT5kYXRhMSwgc2l6ZW9mIHNlbnNvci0+ZGF0YTEpOwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhjNywgc2Vuc29yLT5kYXRhMiwgc2l6ZW9mIHNlbnNvci0+ZGF0YTIpOwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhlMCwgc2Vuc29yLT5kYXRhMywgc2l6ZW9mIHNlbnNvci0+ZGF0YTMpOwpAQCAtNzgyLDYgKzgyMiwxMyBAQAogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+bnNldDgsIHNpemVvZiBzZW5zb3ItPm5zZXQ4KTsKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3ItPnN0cmVhbSwgc2l6ZW9mIHNlbnNvci0+c3RyZWFtKTsKIAorCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9MVDE2OEcpIHsKKwkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDgwKTsKKwkJUERFQlVHKERfU1RSRUFNLCAiUmVnIDB4JTAyeCA9IDB4JTAyeCIsIDB4ODAsCisJCSAgICAgICB0ZXN0X2J5dGUpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4NmM4MCk7CisJfQorCiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3ItPmRhdGExLCBzaXplb2Ygc2Vuc29yLT5kYXRhMSk7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3ItPmRhdGEyLCBzaXplb2Ygc2Vuc29yLT5kYXRhMik7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3ItPmRhdGEzLCBzaXplb2Ygc2Vuc29yLT5kYXRhMyk7CkBAIC04ODgsNiArOTM1LDggQEAKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCW9tNjgwMl9zZW5zb3JfaW5pdChnc3BjYV9kZXYpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9MVDE2OEc6CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09USEVSOgogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKaW5kZXggYjc0YTNiNi4uYzdiNmViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCkBAIC0zOSw3ICszOSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKaW5kZXggNzE5MjFjOC4uNDk4OWY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCkBAIC0zMiwxMCArMzIsMTMgQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAorCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggY29sb3JzOwogCXU4IGhmbGlwOwogCXU4IHZmbGlwOwogCXU4IGxpZ2h0ZnJlcTsKLQl1OCBzaGFycG5lc3M7CisJczggc2hhcnBuZXNzOwogCiAJdTggaW1hZ2Vfb2Zmc2V0OwogCkBAIC01Miw2ICs1NSw3IEBACiAjZGVmaW5lIFNFTlNPUl9PVjc2NzAgNgogI2RlZmluZSBTRU5TT1JfUE8xMjAwIDcKICNkZWZpbmUgU0VOU09SX1BPMzEzME5DIDgKKyNkZWZpbmUgU0VOU09SX1BPeHh4eCA5CiAJdTggZmxhZ3M7CiAjZGVmaW5lIEZMX1NBTVNVTkcgMHgwMQkJLyogU2Ftc3VuZ1ExICgyIHNlbnNvcnMpICovCiAjZGVmaW5lIEZMX0hGTElQIDB4MDIJCS8qIG1pcnJvcmVkIGJ5IGRlZmF1bHQgKi8KQEAgLTU5LDYgKzYzLDEyIEBACiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtNjgsOSArNzgsNTQgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyOAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKKyNkZWZpbmUgQ09OVFJBU1RfSURYIDEKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDEyNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKyNkZWZpbmUgQ09MT1JTX0lEWCAyCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gPSAxLAorCQkubWF4aW11bSA9IDEyNywKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT0xPUl9ERUYgNjMKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT0xPUl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb2xvcnMsCisJICAgIC5nZXQgPSBzZF9nZXRjb2xvcnMsCisJfSwKIC8qIG5leHQgMiBjb250cm9scyB3b3JrIHdpdGggc29tZSBzZW5zb3JzIG9ubHkgKi8KLSNkZWZpbmUgSEZMSVBfSURYIDAKKyNkZWZpbmUgSEZMSVBfSURYIDMKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9IRkxJUCwKQEAgLTg1LDcgKzE0MCw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRoZmxpcCwKIAkgICAgLmdldCA9IHNkX2dldGhmbGlwLAogCX0sCi0jZGVmaW5lIFZGTElQX0lEWCAxCisjZGVmaW5lIFZGTElQX0lEWCA0CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfVkZMSVAsCkBAIC0xMDAsNyArMTU1LDcgQEAKIAkgICAgLnNldCA9IHNkX3NldHZmbGlwLAogCSAgICAuZ2V0ID0gc2RfZ2V0dmZsaXAsCiAJfSwKLSNkZWZpbmUgTElHSFRGUkVRX0lEWCAyCisjZGVmaW5lIExJR0hURlJFUV9JRFggNQogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0xMTUsMTcgKzE3MCwxNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0ZnJlcSwKIAkgICAgLmdldCA9IHNkX2dldGZyZXEsCiAJfSwKLS8qIHBvMTIwMCBvbmx5ICovCi0jZGVmaW5lIFNIQVJQTkVTU19JRFggMworI2RlZmluZSBTSEFSUE5FU1NfSURYIDYKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKIAkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkgIC5uYW1lID0gIlNoYXJwbmVzcyIsCi0JICAubWluaW11bSA9IDAsCisJICAubWluaW11bSA9IC0xLAogCSAgLm1heGltdW0gPSAyLAogCSAgLnN0ZXAgPSAxLAotI2RlZmluZSBTSEFSUE5FU1NfREVGIDEKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAtMQogCSAgLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKQEAgLTEzMyw2ICsxODcsNDIgQEAKIAkgfSwKIH07CiAKKy8qIHRhYmxlIG9mIHRoZSBkaXNhYmxlZCBjb250cm9scyAqLworc3RhdGljIHUzMiBjdHJsX2Rpc1tdID0geworLyogU0VOU09SX0hWNzEzMVIgMCAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTAzNjAgMSAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTEzMTBfU09DIDIgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX01JMTMyMCAzICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTEzMjBfU09DIDQgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX09WNzY2MCA1ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9PVjc2NzAgNiAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX1BPMTIwMCA3ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCksCisvKiBTRU5TT1JfUE8zMTMwTkMgOCAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9QT3h4eHggOSAqLworCSgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2YzAzMjFfbW9kZVtdID0gewogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1lWWVUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKQEAgLTIxNSw3ICszMDUsNyBAQAogCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCS8qIGkyYyBhZGQ6IDVkICovCiAJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAogCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCkBAIC00MzUsNyArNTI1LDcgQEAKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAkvKiBpMmMgYWRkOiA1ZCAqLwogCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCiAJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LApAQCAtODYwLDcgKzk1MCw4IEBACiAJezB4YjAsIDB4MTYsIDB4MDMsIDB4Y2N9LAl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAkvKiBpMmMgYWRkOiA0OCAqLworCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKIAl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgyMiwgMHgwMywgMHhjY30sCXsweGIzLCAweDIzLCAweGMwLCAweGNjfSwKQEAgLTkwMSw3ICs5OTIsOCBAQAogCXsweGMzLCAweDAxLCAweDAzLCAweGJifSwJezB4YzQsIDB4MDAsIDB4MDQsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwJezB4MDUsIDB4MDEsIDB4MTMsIDB4YmJ9LAogCXsweDA2LCAweDAwLCAweDExLCAweGJifSwJezB4MDcsIDB4MDAsIDB4ODUsIDB4YmJ9LAotCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMCwgMHhiYn0sCS8qIGgvdiBmbGlwcyAtIHdhcyAwMyAqLwogCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAogCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwJezB4MzksIDB4MDMsIDB4MGQsIDB4YmJ9LApAQCAtMTAxMiw3ICsxMTA0LDcgQEAKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAkvKiBpMmMgYWRkOiA0OCAqLwogCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCiAJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LApAQCAtMTM1OSw3ICsxNDUxLDggQEAKIAl7MHhiMywgMHgyMywgMHhlOCwgMHhjY30sCXsweGI4LCAweDA4LCAweGU4LCAweGNjfSwKIAl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKLQl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDM1LCAweGY2LCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAkvKiBpMmMgYWRkOiA3NiAqLwogCXsweGIzLCAweDAwLCAweDI3LCAweGNjfSwJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAogCXsweGI4LCAweDAwLCAweDIxLCAweGNjfSwJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAogCXsweGI4LCAweDAxLCAweDc5LCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LApAQCAtMTU2MSw3ICsxNjU0LDcgQEAKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHg5MSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4OTEsIDB4Y2N9LAkvKiBpMmMgYWRkOiAxMSAqLwogCXsweGIzLCAweDAwLCAweDI3LCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MywgMHhjY30sCiAJezB4YjgsIDB4MDAsIDB4MjMsIDB4Y2N9LApAQCAtMTc0Nyw3ICsxODQwLDggQEAKIAl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCXsweGIzLCAweDFkLCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgxZiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJezB4YjMsIDB4MDAsIDB4MjYsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJLyogaTJjIGFkZDogMjEgKi8KKwl7MHhiMywgMHgwMCwgMHgyNiwgMHhjY30sCiAJezB4YjgsIDB4MDAsIDB4MzMsIDB4Y2N9LCAvKiAxMyAqLwogCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MywgMHhjY30sCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKQEAgLTE4ODMsNyArMTk3Nyw4IEBACiAJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGIzLCAweDAwLCAweDY2LCAweGNjfSwJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJLyogaTJjIGFkZDogMjEgKi8KKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCiAJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAl7MHhiMywgMHgwMywgMHgxZiwgMHhjY30sCkBAIC0yMTgxLDcgKzIyNzYsNyBAQAogCXsweGIwLCAweDU0LCAweDEzLCAweGNjfSwKIAl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGRjLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkYywgMHhjY30sCS8qIGkyYyBhZGQ6IDVjICovCiAJezB4MDAsIDB4MDMsIDB4MDAsIDB4YWF9LAogCXsweDAwLCAweDEyLCAweDA1LCAweGFhfSwKIAl7MHgwMCwgMHgxMywgMHgwMiwgMHhhYX0sCkBAIC0yNDA4LDYgKzI1MDMsMjUxIEBACiAJezB4MDAsIDB4YjYsIDB4MzksIDB4YWF9LAogCXsweDAwLCAweGI3LCAweDI0LCAweGFhfSwKIC8qd3JpdGUgODkgMDQwMCAxNDE1Ki8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0X2NvbW1vbltdWzRdID0geworCXsweGIzLCAweDAwLCAweDA0LCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgwOSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAkvKiBpMmMgYWRkOiA3NiAqLworCXsweGIzLCAweDAyLCAweGIwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgxOCwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MTUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MmMsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDJkLCAweDU2LCAweGNjfSwKKwl7MHhiMywgMHgyZSwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MmYsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDQwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg0MSwgMHgzNCwgMHhjY30sCisJezB4YjMsIDB4NDIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDQzLCAweGUwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhiMywgMHg0ZCwgMHgwMCwgMHhjY30sCisJezB4MDAsIDB4MGIsIDB4MmEsIDB4YWF9LAorCXsweDAwLCAweDBlLCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHgwZiwgMHhlYSwgMHhhYX0sCisJezB4MDAsIDB4MTIsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHgyMSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MzEsIDB4MWYsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDM4LCAweGFhfSwKKwl7MHgwMCwgMHgzNiwgMHhjMCwgMHhhYX0sCisJezB4MDAsIDB4MzcsIDB4YzgsIDB4YWF9LAorCXsweDAwLCAweDNiLCAweDM2LCAweGFhfSwKKwl7MHgwMCwgMHg0YiwgMHhmZSwgMHhhYX0sCisJezB4MDAsIDB4NGQsIDB4MmUsIDB4YWF9LAorCXsweDAwLCAweDUxLCAweDFjLCAweGFhfSwKKwl7MHgwMCwgMHg1MiwgMHgwMSwgMHhhYX0sCisJezB4MDAsIDB4NTUsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDU2LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg1NywgMHgwNywgMHhhYX0sCisJezB4MDAsIDB4NTgsIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHg3MCwgMHg2OCwgMHhhYX0sCisJezB4MDAsIDB4NzEsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDcyLCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHg4MCwgMHg3MSwgMHhhYX0sCisJezB4MDAsIDB4ODEsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDgyLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg4MywgMHg1NSwgMHhhYX0sCisJezB4MDAsIDB4ODQsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDg1LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHg4YiwgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4OGMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDhkLCAweDg2LCAweGFhfSwKKwl7MHgwMCwgMHg4ZSwgMHg4MiwgMHhhYX0sCisJezB4MDAsIDB4OGYsIDB4MmQsIDB4YWF9LAorCXsweDAwLCAweDkwLCAweDhiLCAweGFhfSwKKwl7MHgwMCwgMHg5MSwgMHg4MSwgMHhhYX0sCisJezB4MDAsIDB4OTIsIDB4ODEsIDB4YWF9LAorCXsweDAwLCAweDkzLCAweDIzLCAweGFhfSwKKwl7MHgwMCwgMHhhMywgMHgyYSwgMHhhYX0sCisJezB4MDAsIDB4YTQsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweGE1LCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHhiMCwgMHg2OCwgMHhhYX0sCisJezB4MDAsIDB4YmMsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweGJlLCAweDNiLCAweGFhfSwKKwl7MHgwMCwgMHg0ZSwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4MDYsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDA3LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhjZCwgMHgxOCwgMHhhYX0sCisJezB4MDAsIDB4MjgsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweDI5LCAweGVmLCAweGFhfSwKKy8qIHJlaW5pdCBvbiBhbHQgMiAocXZnYSkgb3IgYWx0NyAodmdhKSAqLworCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDEsIDB4Y2N9LAorCisJezB4MDAsIDB4MWQsIDB4ODUsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweGM2LCAweGFhfSwKKwl7MHgwMCwgMHgwMCwgMHg0MCwgMHhkZH0sCisJezB4MDAsIDB4MWQsIDB4MDUsIDB4YWF9LAorCisJezB4MDAsIDB4ZDYsIDB4MjIsIDB4YWF9LAkvKiBnYW1tYSAwICovCisJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg3NSwgMHgxNiwgMHhhYX0sCisJezB4MDAsIDB4NzYsIDB4MjUsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDM0LCAweGFhfSwKKwl7MHgwMCwgMHg3OCwgMHg0OSwgMHhhYX0sCisJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwKKwl7MHgwMCwgMHg3YiwgMHg5YiwgMHhhYX0sCisJezB4MDAsIDB4N2MsIDB4YmEsIDB4YWF9LAorCXsweDAwLCAweDdkLCAweGQ0LCAweGFhfSwKKwl7MHgwMCwgMHg3ZSwgMHhlYSwgMHhhYX0sCisKKwl7MHgwMCwgMHhkNiwgMHg2MiwgMHhhYX0sCS8qIGdhbW1hIDEgKi8KKwl7MHgwMCwgMHg3MywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NzQsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDc1LCAweDE2LCAweGFhfSwKKwl7MHgwMCwgMHg3NiwgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4NzcsIDB4MzQsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHg3OSwgMHg1YSwgMHhhYX0sCisJezB4MDAsIDB4N2EsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDdiLCAweDliLCAweGFhfSwKKwl7MHgwMCwgMHg3YywgMHhiYSwgMHhhYX0sCisJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwKKworCXsweDAwLCAweGQ2LCAweGEyLCAweGFhfSwJLyogZ2FtbWEgMiAqLworCXsweDAwLCAweDczLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg3NCwgMHgwYSwgMHhhYX0sCisJezB4MDAsIDB4NzUsIDB4MTYsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg3NywgMHgzNCwgMHhhYX0sCisJezB4MDAsIDB4NzgsIDB4NDksIDB4YWF9LAorCXsweDAwLCAweDc5LCAweDVhLCAweGFhfSwKKwl7MHgwMCwgMHg3YSwgMHg3ZiwgMHhhYX0sCisJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwKKwl7MHgwMCwgMHg3ZCwgMHhkNCwgMHhhYX0sCisJezB4MDAsIDB4N2UsIDB4ZWEsIDB4YWF9LAorCisJezB4MDAsIDB4YWEsIDB4ZmYsIDB4YWF9LAkvKiBiYWNrIGxpZ2h0IGNvbXAgKi8KKwl7MHgwMCwgMHhjNCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4YzUsIDB4MTksIDB4YWF9LAorCXsweDAwLCAweGM2LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhjNywgMHg5MSwgMHhhYX0sCisJezB4MDAsIDB4YzgsIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweGM5LCAweGRkLCAweGFhfSwKKwl7MHgwMCwgMHhjYSwgMHgwMiwgMHhhYX0sCisJezB4MDAsIDB4Y2IsIDB4MzcsIDB4YWF9LAorCisvKiByZWFkIGQxICovCisJezB4MDAsIDB4ZDEsIDB4M2MsIDB4YWF9LAorCXsweDAwLCAweGI4LCAweDI4LCAweGFhfSwKKwl7MHgwMCwgMHhiOSwgMHgxZSwgMHhhYX0sCisJezB4MDAsIDB4YjYsIDB4MTQsIDB4YWF9LAorCXsweDAwLCAweGI3LCAweDBmLCAweGFhfSwKKwl7MHgwMCwgMHg1YywgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4NWQsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweDVlLCAweDI0LCAweGFhfSwKKwl7MHgwMCwgMHg1ZiwgMHgyNCwgMHhhYX0sCisJezB4MDAsIDB4ODYsIDB4MWEsIDB4YWF9LAorCXsweDAwLCAweDYwLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg2MSwgMHgxYiwgMHhhYX0sCisJezB4MDAsIDB4NjIsIDB4MzAsIDB4YWF9LAorCXsweDAwLCAweDYzLCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHg4NywgMHgxYSwgMHhhYX0sCisJezB4MDAsIDB4NjQsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDY1LCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHg2NiwgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4NjcsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDg4LCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHg2OCwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NjksIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDZhLCAweDBmLCAweGFhfSwKKwl7MHgwMCwgMHg2YiwgMHgwZiwgMHhhYX0sCisJezB4MDAsIDB4ODksIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweGQ1LCAweDRjLCAweGFhfSwKKwl7MHgwMCwgMHgwYSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MGIsIDB4MmEsIDB4YWF9LAorCXsweDAwLCAweDBlLCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHgwZiwgMHhlYSwgMHhhYX0sCisJezB4MDAsIDB4YTIsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweGEzLCAweDJhLCAweGFhfSwKKwl7MHgwMCwgMHhhNCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4YTUsIDB4ZWEsIDB4YWF9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0VkdBW11bNF0gPSB7CisJezB4MDAsIDB4MjAsIDB4MTEsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDM4LCAweGFhfSwKKwl7MHgwMCwgMHhiYiwgMHgwZCwgMHhhYX0sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweGIwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweDAwLCAweDA0LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHgwNSwgMHgzZiwgMHhhYX0sCisJezB4MDAsIDB4MDQsIDB4MDAsIDB4ZGR9LAkvKiBkZWxheSAxcyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0UVZHQVtdWzRdID0geworCXsweDAwLCAweDIwLCAweDMzLCAweGFhfSwKKwl7MHgwMCwgMHgzMywgMHgzOCwgMHhhYX0sCisJezB4MDAsIDB4YmIsIDB4MGQsIDB4YWF9LAorCXsweGIzLCAweDIyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhmMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDNmLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHhiMCwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAwLCAweGNjfSwKKwl7MHgwMCwgMHgwNCwgMHgwNiwgMHhhYX0sCisJezB4MDAsIDB4MDUsIDB4M2YsIDB4YWF9LAorCXsweDAwLCAweDA0LCAweDAwLCAweGRkfSwJLyogZGVsYXkgMXMgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBwb3h4eHhfaW5pdF9lbmRfMVtdWzRdID0geworCXsweDAwLCAweDQ3LCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg0OCwgMHg4MCwgMHhhYX0sCisJezB4MDAsIDB4NDksIDB4MWYsIDB4YWF9LAorCXsweDAwLCAweDRhLCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHg0NCwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4YWIsIDB4NGEsIDB4YWF9LAorCXsweDAwLCAweGIxLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHhiMiwgMHgwNCwgMHhhYX0sCisJezB4MDAsIDB4YjMsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweGI0LCAweDBiLCAweGFhfSwKKwl7MHgwMCwgMHhiNSwgMHgwZCwgMHhhYX0sCisJezB4MDAsIDB4NTksIDB4N2UsIDB4YWF9LAkvKiBzaGFycG5lc3MgKi8KKwl7MHgwMCwgMHgxNiwgMHgwMCwgMHhhYX0sCS8qIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMCwgMHgxOCwgMHgwMCwgMHhhYX0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggcG94eHh4X2luaXRfZW5kXzJbXVs0XSA9IHsKKwl7MHgwMCwgMHgxZCwgMHg4NSwgMHhhYX0sCisJezB4MDAsIDB4MWUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDFkLCAweDA1LCAweGFhfSwKKwl7fQogfTsKIAogc3RydWN0IHNlbnNvcl9pbmZvIHsKQEAgLTI0MjAsMzMgKzI3NjAsODkgQEAKIAl1OCBvcDsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gc2Vuc29yX2luZm9fZGF0YVtdID0gewotLyogICAgICBzZW5zb3JJZCwgICAgICAgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCisvKiBwcm9iZSB2YWx1ZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gdmMwMzIxX3Byb2JlX2RhdGFbXSA9IHsKKy8qICAgICAgc2Vuc29ySWQsCSAgIEkyY0FkZCwJSWRBZGQsICBWcElkLCAgbTEsICAgIG0yLCAgb3AgKi8KKy8qIDAgT1Y5NjQwICovCiAJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LAorLyogMSBJQ00xMDhUIChtYXkgcmVzcG9uZCBvbiBJZEFkZCA9PSAweDgzIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCiAJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgyLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAotLyogKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLwotLyoJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgzLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLwotCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MzEzMCwgMHgyNCwgMHgyNSwgMHgwMX0sCi0Je1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKLS8qICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KKy8qIDIgUE8yMTMwIChtYXkgZGV0ZWN0IFBPMzEzME5DIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAzIE1JMTMxMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDQgTUkzNjAgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvciAqLwogLyoJe1NFTlNPUl9NSTAzNjAsCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHg4MjQzLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDUgNzEzMVIgKi8KIAl7U0VOU09SX0hWNzEzMVIsICAgIDB4ODAgfCAweDExLCAweDAwLCAweDAyMDksIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogNiBPVjc2NDkgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisvKiA3IFBBUzMwMkJDVyAqLwogCXstMSwJCSAgICAweDgwIHwgMHg0MCwgMHgwMCwgMHgwMDAwLCAweDIwLCAweDIyLCAweDA1fSwKKy8qIDggT1Y3NjYwICovCiAJe1NFTlNPUl9PVjc2NjAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjYwLCAweDI2LCAweDI2LCAweDA1fSwKLS8qCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKiA5IFBPMzEzME5DIC0gKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworLyoJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgzMTMwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDEwIFBPMTAzMEtDICovCiAJey0xLAkJICAgIDB4ODAgfCAweDZlLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAotLyoJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KLS8qCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwgKi8KKy8qIDExIE1JMTMxMF9TT0MgKi8KKwl7U0VOU09SX01JMTMxMF9TT0MsIDB4ODAgfCAweDVkLCAweDAwLCAweDE0M2EsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTIgT1Y5NjUwICovCisJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LAorLyogMTMgUzVLNTMyICovCiAJey0xLAkJICAgIDB4ODAgfCAweDExLCAweDM5LCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTQgTUkzNjBfU09DIC0gPz8/ICovCisvKiAxNSBQTzEyMDBOICovCiAJe1NFTlNPUl9QTzEyMDAsICAgICAweDgwIHwgMHg1YywgMHgwMCwgMHgxMjAwLCAweDY3LCAweDY3LCAweDAxfSwKLQl7LTEsCQkgICAgMHg4MCB8IDB4MmQsIDB4MDAsIDB4MDAwMCwgMHg2NSwgMHg2NywgMHgwMX0sCisvKiAxNiBQTzMwMzBLICovCisJey0xLAkJICAgIDB4ODAgfCAweDE4LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTcgUE8yMDMwICovCiAJey0xLAkJICAgIDB4ODAgfCAweDZlLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogPz8gKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NTYsIDB4MDEsIDB4MDAwMCwgMHg2NCwgMHg2NywgMHgwMX0sCisJe1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9pbmZvIHZjMDMyM19wcm9iZV9kYXRhW10gPSB7CisvKiAgICAgIHNlbnNvcklkLAkgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCisvKiAwIE9WOTY0MCAqLworCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKy8qIDEgSUNNMTA4VCAobWF5IHJlc3BvbmQgb24gSWRBZGQgPT0gMHg4MyAtIHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworCXstMSwJCSAgICAweDgwIHwgMHgyMCwgMHg4MiwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDIgUE8yMTMwIChtYXkgZGV0ZWN0IFBPMzEzME5DIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAzIE1JMTMxMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDQgTUkzNjAgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvciAqLworLyoJe1NFTlNPUl9NSTAzNjAsCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHg4MjQzLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDUgNzEzMVIgKi8KKwl7U0VOU09SX0hWNzEzMVIsICAgIDB4ODAgfCAweDExLCAweDAwLCAweDAyMDksIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogNiBPVjc2NDkgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisvKiA3IFBBUzMwMkJDVyAqLworCXstMSwJCSAgICAweDgwIHwgMHg0MCwgMHgwMCwgMHgwMDAwLCAweDIwLCAweDIyLCAweDA1fSwKKy8qIDggT1Y3NjYwICovCisJe1NFTlNPUl9PVjc2NjAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjYwLCAweDI2LCAweDI2LCAweDA1fSwKKy8qIDkgUE8zMTMwTkMgLSAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisvKgl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDMxMzAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworLyogMTAgUE8xMDMwS0MgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NmUsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAxMSBNSTEzMTBfU09DICovCisJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDEyIE9WOTY1MCAqLworCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKy8qIDEzIFM1SzUzMiAqLworCXstMSwJCSAgICAweDgwIHwgMHgxMSwgMHgzOSwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDE0IE1JMzYwX1NPQyAtID8/PyAqLworLyogMTUgUE8xMjAwTiAqLworCXtTRU5TT1JfUE8xMjAwLCAgICAgMHg4MCB8IDB4NWMsIDB4MDAsIDB4MTIwMCwgMHg2NywgMHg2NywgMHgwMX0sCisvKiAxNiA/PyAqLworCXstMSwJCSAgICAweDgwIHwgMHgyZCwgMHgwMCwgMHgwMDAwLCAweDY1LCAweDY3LCAweDAxfSwKKy8qIDE3IFBPMjAzMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qID8/ICovCiAJey0xLAkJICAgIDB4ODAgfCAweDU2LCAweDAxLCAweDAwMDAsIDB4NjQsIDB4NjcsIDB4MDF9LAogCXtTRU5TT1JfTUkxMzIwX1NPQywgMHg4MCB8IDB4NDgsIDB4MDAsIDB4MTQ4YywgMHg2NCwgMHg2NywgMHgwMX0sCi0vKmZpeG1lOiBwcmV2aW91c2x5IGRldGVjdGVkPyovCi0Je1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKLS8qZml4bWU6IG5vdCBpbiB0aGUgbXMtd2luIHByb2JlIC0gbWF5IGJlIGZvdW5kIGJlZm9yZT8qLworLypmaXhtZTogbm90IGluIHRoZSBtcy13aW4gcHJvYmUgLSBtYXkgYmUgZm91bmQgYmVmb3JlPyAqLwogCXtTRU5TT1JfT1Y3NjcwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY3MywgMHg2NiwgMHg2NywgMHgwNX0sCiB9OwogCkBAIC0yNTIwLDcgKzI5MTYsNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JaW50IGk7CisJaW50IGksIG47CiAJdTE2IHZhbHVlOwogCWNvbnN0IHN0cnVjdCBzZW5zb3JfaW5mbyAqcHRzZW5zb3JfaW5mbzsKIApAQCAtMjUzMSw5ICsyOTI3LDE2IEBACiAJfQogCiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGJmY2YsIDEpOwotCVBERUJVRyhEX1BST0JFLCAiY2hlY2sgc2Vuc29yIGhlYWRlciAlMDJ4IiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZW5zb3JfaW5mb19kYXRhKTsgaSsrKSB7Ci0JCXB0c2Vuc29yX2luZm8gPSAmc2Vuc29yX2luZm9fZGF0YVtpXTsKKwlQREVCVUcoRF9QUk9CRSwgInZjMDMyJWQgY2hlY2sgc2Vuc29yIGhlYWRlciAlMDJ4IiwKKwkJc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxID8gMSA6IDMsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgeworCQlwdHNlbnNvcl9pbmZvID0gdmMwMzIxX3Byb2JlX2RhdGE7CisJCW4gPSBBUlJBWV9TSVpFKHZjMDMyMV9wcm9iZV9kYXRhKTsKKwl9IGVsc2UgeworCQlwdHNlbnNvcl9pbmZvID0gdmMwMzIzX3Byb2JlX2RhdGE7CisJCW4gPSBBUlJBWV9TSVpFKHZjMDMyM19wcm9iZV9kYXRhKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlyZWdfdyhkZXYsIDB4YTAsIDB4MDIsIDB4YjMzNCk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+bTEsIDB4YjMwMCk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+bTIsIDB4YjMwMCk7CkBAIC0yNTUxLDEzICsyOTU0LDE1IEBACiAJCQkJcmV0dXJuIHB0c2Vuc29yX2luZm8tPnNlbnNvcklkOwogCiAJCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQljYXNlIDB4MzEzMDoKKwkJCQlyZXR1cm4gU0VOU09SX1BPMzEzME5DOwogCQkJY2FzZSAweDc2NzM6CiAJCQkJcmV0dXJuIFNFTlNPUl9PVjc2NzA7CiAJCQljYXNlIDB4ODI0MzoKIAkJCQlyZXR1cm4gU0VOU09SX01JMDM2MDsKIAkJCX0KLS8qZml4bWU6IHNob3VsZCByZXR1cm4gaGVyZSovCiAJCX0KKwkJcHRzZW5zb3JfaW5mbysrOwogCX0KIAlyZXR1cm4gLTE7CiB9CkBAIC0yNjE5LDcgKzMwMjQsNyBAQAogCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwgZGF0YVtpXVswXSwgJmRhdGFbaV1bMV0sIDIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhkZDoKLQkJCW1zbGVlcChkYXRhW2ldWzJdICsgMTApOworCQkJbXNsZWVwKGRhdGFbaV1bMV0gKiAyNTYgKyBkYXRhW2ldWzJdICsgMTApOwogCQkJYnJlYWs7CiAJCX0KIAkJaSsrOwpAQCAtMjY0NiwxMiArMzA1MSwxNyBAQAogCQk2NCwJCS8qIE9WNzY3MCA2ICovCiAJCTEyOCwJCS8qIFBPMTIwMCA3ICovCiAJCTEyOCwJCS8qIFBPMzEzME5DIDggKi8KKwkJMTI4LAkJLyogUE94eHh4IDkgKi8KIAl9OwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCXNkLT5icmlkZ2UgPSBpZC0+ZHJpdmVyX2luZm8gPj4gODsKIAlzZC0+ZmxhZ3MgPSBpZC0+ZHJpdmVyX2luZm8gJiAweGZmOwotCXNlbnNvciA9IHZjMDMyeF9wcm9iZV9zZW5zb3IoZ3NwY2FfZGV2KTsKKwlpZiAoaWQtPmlkVmVuZG9yID09IDB4MDQ2ZCAmJgorCSAgICAoaWQtPmlkUHJvZHVjdCA9PSAweDA4OTIgfHwgaWQtPmlkUHJvZHVjdCA9PSAweDA4OTYpKQorCQlzZW5zb3IgPSBTRU5TT1JfUE94eHh4OworCWVsc2UKKwkJc2Vuc29yID0gdmMwMzJ4X3Byb2JlX3NlbnNvcihnc3BjYV9kZXYpOwogCXN3aXRjaCAoc2Vuc29yKSB7CiAJY2FzZSAtMToKIAkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvci4uLiIpOwpAQCAtMjY4NCw2ICszMDk0LDkgQEAKIAljYXNlIFNFTlNPUl9QTzMxMzBOQzoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQTzMxMzBOQyIpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QT3h4eHg6CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIFBPeHh4eCIpOworCQlicmVhazsKIAl9CiAJc2QtPnNlbnNvciA9IHNlbnNvcjsKIApAQCAtMjcxMiwyNyArMzEyNSwxOCBAQAogCX0KIAljYW0tPm5wa3QgPSBucGt0W3NkLT5zZW5zb3JdOwogCisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKIAlzZC0+aGZsaXAgPSBIRkxJUF9ERUY7CiAJc2QtPnZmbGlwID0gVkZMSVBfREVGOworCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKworCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSBjdHJsX2Rpc1tzZC0+c2Vuc29yXTsKKwogCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2NzApCiAJCXNkLT5mbGFncyB8PSBGTF9IRkxJUCB8IEZMX1ZGTElQOwotCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKLQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1Y3NjcwKQotCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgTElHSFRGUkVRX0lEWCk7Ci0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKLQljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgotCWNhc2UgU0VOU09SX09WNzY2MDoKLQljYXNlIFNFTlNPUl9PVjc2NzA6Ci0JY2FzZSBTRU5TT1JfUE8xMjAwOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgSEZMSVBfSURYKQotCQkJCQl8ICgxIDw8IFZGTElQX0lEWCk7Ci0JCWJyZWFrOwotCX0KLQotCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwogCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgewogCQlyZWdfcihnc3BjYV9kZXYsIDB4OGEsIDAsIDMpOwpAQCAtMjc0NywxMCArMzE1MSw1NSBAQAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QT3h4eHgpIHsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzMDAsIDEpOworCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDApIHsKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDI2LCAweGIzMDApOworCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDQsIDB4YjMwMCk7CisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMCwgMHhiMzAwKTsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIAotLyogc29tZSBzZW5zb3JzIG9ubHkgKi8KK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhOworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBCUklHSFRORVNTX0lEWCkpCisJCXJldHVybjsKKwlkYXRhID0gc2QtPmJyaWdodG5lc3M7CisJaWYgKGRhdGEgPj0gMHg4MCkKKwkJZGF0YSAmPSAweDdmOworCWVsc2UKKwkJZGF0YSA9IDB4ZmYgXiBkYXRhOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTgsICZkYXRhLCAxKTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQ09OVFJBU1RfSURYKSkKKwkJcmV0dXJuOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTksICZzZC0+Y29udHJhc3QsIDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhOworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBDT0xPUlNfSURYKSkKKwkJcmV0dXJuOworCWRhdGEgPSBzZC0+Y29sb3JzIC0gKHNkLT5jb2xvcnMgPj4gMykgLSAxOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTQsICZkYXRhLCAxKTsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDk1LCAmc2QtPmNvbG9ycywgMSk7Cit9CisKIHN0YXRpYyB2b2lkIHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjc2NCw2ICszMjEzLDcgQEAKIAkJdmZsaXAgPSAhdmZsaXA7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKKwljYXNlIFNFTlNPUl9NSTEzMjA6CiAJY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKIAkJZGF0YVswXSA9IGRhdGFbMV0gPSAwOwkJLyogc2VsZWN0IHBhZ2UgMCAqLwogCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweGYwLCBkYXRhLCAyKTsKQEAgLTI4MDEsMTggKzMyNTEsMjkgQEAKIAl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfZnJlcV90YltzZC0+bGlnaHRmcmVxXSk7CiB9CiAKLS8qIHBvMTIwMCBvbmx5ICovCiBzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCBkYXRhOwogCi0JaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX1BPMTIwMCkKLQkJcmV0dXJuOwotCWRhdGEgPSAwOwotCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDMsICZkYXRhLCAxKTsKLQlkYXRhID0gMHhiNSArIHNkLT5zaGFycG5lc3MgKiAzOwotCWkyY193cml0ZShnc3BjYV9kZXYsIDB4NjEsICZkYXRhLCAxKTsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9QTzEyMDA6CisJCWRhdGEgPSAwOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAzLCAmZGF0YSwgMSk7CisJCWlmIChzZC0+c2hhcnBuZXNzIDwgMCkKKwkJCWRhdGEgPSAweDZhOworCQllbHNlCisJCQlkYXRhID0gMHhiNSArIHNkLT5zaGFycG5lc3MgKiAzOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDYxLCAmZGF0YSwgMSk7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPeHh4eDoKKwkJaWYgKHNkLT5zaGFycG5lc3MgPCAwKQorCQkJZGF0YSA9IDB4N2U7CS8qIGRlZiA9IG1heCAqLworCQllbHNlCisJCQlkYXRhID0gMHg2MCArIHNkLT5zaGFycG5lc3MgKiAweDBmOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDU5LCAmZGF0YSwgMSk7CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0yOTIyLDEyICszMzgzLDI3IEBACiAJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOwogCQlpbml0ID0gcG8zMTMwX3J1bmRhdGE7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0vKgljYXNlIFNFTlNPUl9QTzEyMDA6ICovCisJY2FzZSBTRU5TT1JfUE8xMjAwOgogCQlHYW1tYVQgPSBwbzEyMDBfZ2FtbWE7CiAJCU1hdHJpeFQgPSBwbzEyMDBfbWF0cml4OwogCQlpbml0ID0gcG8xMjAwX2luaXRWR0FfZGF0YTsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX1BPeHh4eDogKi8KKwkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG94eHh4X2luaXRfY29tbW9uKTsKKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gcG94eHh4X2luaXRRVkdBOworCQllbHNlCisJCQlpbml0ID0gcG94eHh4X2luaXRWR0E7CisJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOworCQlyZWdfcihnc3BjYV9kZXYsIDB4OGMsIDB4MDAwMCwgMyk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSAmIDEgPyAwIDogMSwKKwkJCQkweGIzNWMpOworCQltc2xlZXAoMzAwKTsKKy8qZml4bWU6IGkyYyByZWFkIDA0IGFuZCAwNSovCisJCWluaXQgPSBwb3h4eHhfaW5pdF9lbmRfMTsKKwkJYnJlYWs7CiAJfQogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOwogCWlmIChHYW1tYVQgJiYgTWF0cml4VCkgewpAQCAtMjkzNiw3ICszNDEyLDYgQEAKIAkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBHYW1tYVQsIDE3LCAweGI4NmMpOwogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIE1hdHJpeFQsIDksIDB4YjgyYyk7CiAKLQkJLyogc2V0IHRoZSBsZWQgb24gMHgwODkyIDB4MDg5NiAqLwogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAkJY2FzZSBTRU5TT1JfUE8xMjAwOgogCQljYXNlIFNFTlNPUl9IVjcxMzFSOgpAQCAtMjk0NSwxNiArMzQyMCwyMiBAQAogCQljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgogCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4MDU4YywgMHgwMDAwKTsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCi0JCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZGZmKTsKLQkJCWJyZWFrOwogCQl9CiAJCW1zbGVlcCgxMDApOwogCQlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7CiAJCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwogCX0KKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUE94eHh4KSB7CisJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisKKwkJLyogbGVkIG9uICovCisJCW1zbGVlcCg4MCk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7CisJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBveHh4eF9pbml0X2VuZF8yKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NjMsMTAgKzM0NDQsMTcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMTMxMF9TT0MpCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKIAkJcmVnX3coZGV2LCAweDg5LCAweDA1OGMsIDB4MDBmZik7Ci0JZWxzZSBpZiAoIShzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSkKLQkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPeHh4eDoKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQorCQkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJCWJyZWFrOworCX0KIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMwMSk7CiAJcmVnX3coZGV2LCAweGEwLCAweDA5LCAweGIwMDMpOwogfQpAQCAtMjk4NCw2ICszNDcyLDEyIEBACiAJCXJlZ193KGRldiwgMHg4OSwgMHgwNThjLCAweDAwZmYpOwogCWVsc2UgaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCiAJCXJlZ193KGRldiwgMHg4OSwgMHhmZmZmLCAweGZmZmYpOworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BPeHh4eCkgeworCQlyZWdfdyhkZXYsIDB4YTAsIDB4MjYsIDB4YjMwMCk7CisJCXJlZ193KGRldiwgMHhhMCwgMHgwNCwgMHhiMzAwKTsKKwkJcmVnX3coZGV2LCAweGEwLCAweDAwLCAweGIzMDApOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMzAyMCw2ICszNTE0LDYwIEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOwogfQogCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb2xvcnMgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29sb3JzOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNkX3NldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCAxYTgwMGZjLi41MDk4NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC0xLDkgKzEsOCBAQAogLyoKLSAqCVotU3Rhci9WaW1pY3JvIHpjMzAxL3pjMzAycC92YzMweCBsaWJyYXJ5Ci0gKglDb3B5cmlnaHQgKEMpIDIwMDQgMjAwNSAyMDA2IE1pY2hlbCBYaGFhcmQKLSAqCQlteGhhYXJkQG1hZ2ljLmZyCisgKiBaLVN0YXIvVmltaWNybyB6YzMwMS96YzMwMnAvdmMzMHggbGlicmFyeQogICoKLSAqIFY0TDIgYnkgSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgMjAwNSAyMDA2IE1pY2hlbCBYaGFhcmQgbXhoYWFyZEBtYWdpYy5mcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMTAgKzIxLDExIEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInpjM3h4IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogI2luY2x1ZGUgImpwZWcuaCIKIAotTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LCAiCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiwgIgogCQkiU2VyZ2UgQS4gU3VjaGtvdiA8U2VyZ2UuQS5TQHRvY2hrYS5ydT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EgWkMwM3h4L1ZDM3h4IFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0zOSwxOCArMzksMTggQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCV9fdTggYnJpZ2h0bmVzczsKLQlfX3U4IGNvbnRyYXN0OwotCV9fdTggZ2FtbWE7Ci0JX191OCBhdXRvZ2FpbjsKLQlfX3U4IGxpZ2h0ZnJlcTsKLQlfX3U4IHNoYXJwbmVzczsKKwl1OCBicmlnaHRuZXNzOworCXU4IGNvbnRyYXN0OworCXU4IGdhbW1hOworCXU4IGF1dG9nYWluOworCXU4IGxpZ2h0ZnJlcTsKKwl1OCBzaGFycG5lc3M7CiAJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCiAjZGVmaW5lIFFVQUxJVFlfTUlOIDQwCiAjZGVmaW5lIFFVQUxJVFlfTUFYIDYwCiAjZGVmaW5lIFFVQUxJVFlfREVGIDUwCiAKLQlzaWduZWQgY2hhciBzZW5zb3I7CQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwICovCisJdTggc2Vuc29yOwkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwogLyogISEgdmFsdWVzIHVzZWQgaW4gZGlmZmVyZW50IHRhYmxlcyAqLwogI2RlZmluZSBTRU5TT1JfQURDTTI3MDAgMAogI2RlZmluZSBTRU5TT1JfQ1MyMTAyIDEKQEAgLTkyLDkgKzkyLDggQEAKIHN0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKLSNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTEwMywyNiArMTAyLDI2IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyOAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKLSNkZWZpbmUgU0RfQ09OVFJBU1QgMQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKIAkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDI1NiwKKwkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAxMjgKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCX0sCi0jZGVmaW5lIFNEX0dBTU1BIDIKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9HQU1NQSwKQEAgLTEzNiw3ICsxMzUsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Z2FtbWEsCiAJICAgIC5nZXQgPSBzZF9nZXRnYW1tYSwKIAl9LAotI2RlZmluZSBTRF9BVVRPR0FJTiAzCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCkBAIC0xNDUsMTMgKzE0MywxMyBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMSwKIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAogI2RlZmluZSBMSUdIVEZSRVFfSURYIDQKLSNkZWZpbmUgU0RfRlJFUSA0CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTE2MCwxMiArMTU4LDEyIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGZyZXEsCiAJICAgIC5nZXQgPSBzZF9nZXRmcmVxLAogCX0sCi0jZGVmaW5lIFNEX1NIQVJQTkVTUyA1CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCkBAIC0xNzQsNyArMTcyLDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDMsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAyLAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDIKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLApAQCAtMTk0LDYgKzE5MywxOSBAQAogCQkucHJpdiA9IDB9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgYnJva2VuX3ZnYV9tb2RlW10gPSB7CisJezMyMCwgMjMyLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjMyICogNCAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDcyLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDcyICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0gewogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKQEAgLTIwOSw5ICsyMjEsOSBAQAogCiAvKiB1c2IgZXhjaGFuZ2VzICovCiBzdHJ1Y3QgdXNiX2FjdGlvbiB7Ci0JX191OAlyZXE7Ci0JX191OAl2YWw7Ci0JX191MTYJaWR4OworCXU4CXJlcTsKKwl1OAl2YWw7CisJdTE2CWlkeDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF9Jbml0aWFsW10gPSB7CkBAIC00MjEsNyArNDMzLDcgQEAKIAl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFtdID0gewkvKiAzMjB4MjQwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtNDczLDcgKzQ4NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDY0MHg0ODAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtNTI0LDcgKzUzNiw3IEBACiAJezB4YTAsIDB4MDAsIDB4MDFhZH0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMX0sCiAJezB4YWEsIDB4MjQsIDB4MDA1Zn0sCkBAIC01NDYsNyArNTU4LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzUwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAwfSwKIAl7MHhhYSwgMHgyNCwgMHgwMGFmfSwKQEAgLTU2OCw3ICs1ODAsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDF9LAogCXsweGFhLCAweDI0LCAweDAwNTV9LApAQCAtNTkwLDcgKzYwMiw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl82MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMH0sCiAJezB4YWEsIDB4MjQsIDB4MDBhYX0sCkBAIC02MTIsNyArNjI0LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDF9LAogCXsweGFhLCAweDI0LCAweDAwNWZ9LApAQCAtNjM0LDcgKzY0Niw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX05vRmxpa2VyU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAwfSwKIAl7MHhhYSwgMHgyNCwgMHgwMGFmfSwKQEAgLTY1OCw3ICs2NzAsNyBAQAogfTsKIAogLyogQ1MyMTAyX0tPQ09NICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgxMSwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTkxNyw3ICs5MjksNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJLX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTE0OTUsNyArMTUwNyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHhiX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMGJfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTEsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIHF0YWJsZSAweDA1ICovCkBAIC0xNjI3LDcgKzE2MzksNyBAQAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHhiX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGhkY3MyMDIwYl9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0xODE5LDcgKzE4MzEsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYnh4X0luaXRpYWxbXSA9IHsJCS8qIDMyMHgyNDAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFiX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtMTg2Niw3ICsxODc4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWJ4eF9Jbml0aWFsU2NhbGVbXSA9IHsJLyogNjQweDQ4MCovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYl9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTIwNjMsNyArMjA3NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFjeHhfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMXJfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtMjE1Nyw3ICsyMTY5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWN4eF9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFyX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJLyogZGlmZiAqLwpAQCAtMjI1OSw3ICsyMjcxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWF4eF9Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTI0MzYsNyArMjQ0OCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVheHhfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0yNjE1LDcgKzI2MjcsNyBAQAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMjB9LCAvKiAwMCwwYywyMCxhYSAqLwpAQCAtMjY0Niw3ICsyNjU4LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNTBIWltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwOGN9LCAvKiAwMCwwYyw4YyxhYSAqLwpAQCAtMjY3OSw3ICsyNjkxLDcgQEAKIAl7MHhhMCwgMHhjMCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sIC8qIDAxLGE4LGMwLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA0fSwgLyogMDAsMGMsMDQsYWEgKi8KQEAgLTI3MTAsNyArMjcyMiw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzYwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA4fSwgLyogMDAsMGMsMDgsYWEgKi8KQEAgLTI3NDMsNyArMjc1NSw3IEBACiAJezB4YTAsIDB4YzAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCxjMCxjYyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX05vRmxpa2VyU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA0fSwgLyogMDAsMGMsMDQsYWEgKi8KQEAgLTI3NzQsNyArMjc4Niw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Ob0ZsaWtlclNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMDR9LCAvKiAwMCwwYywwNCxhYSAqLwpAQCAtMjgwOCw3ICsyODIwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiwwMCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLwpAQCAtMjkyOCw3ICsyOTQwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfSW5pdGlhbFtdID0gewkgLyogMzIweDI0MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfSW5pdGlhbFNjYWxlW10gPSB7CSAvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiwxMCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLwpAQCAtMzA0Nyw3ICszMDU5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfNTBIWlNjYWxlW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAxZH0sIC8qIDAwLDM2LDFELGFhICovCkBAIC0zMDY0LDcgKzMwNzYsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl81MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiXzUwSFpbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDNhfSwgLyogMDAsMzYsM0EsYWEgKi8KQEAgLTMwODEsNyArMzA5Myw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiXzYwSFpTY2FsZVtdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMTh9LCAvKiAwMCwzNiwxOCxhYSAqLwpAQCAtMzA5OCw3ICszMTEwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl82MEhaW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAzMH0sIC8qIDAwLDM2LDMwLGFhICovCkBAIC0zMTE1LDcgKzMxMjcsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMTh9LCAvKiAwMCwzNiwxOCxhYSAqLwpAQCAtMzEzMiw3ICszMTQ0LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfTm9GbGlrZXJTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfTm9GbGlrZXJbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDMwfSwgLyogMDAsMzYsMzAsYWEgKi8KQEAgLTMxNDQsOCArMzE1Niw4IEBACiAJe30KIH07CiAKLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlLEluaXRpYWwgLSA2NDB4NDgwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX21vZGUwW10gPSB7CisvKiBmcm9tIHpzMjExLmluZiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYyMF9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sIC8qIDAwLDAyLDQwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwgLyogMDAsMDgsMDAsY2MgKi8KQEAgLTMyMTQsOSArMzIyNiw3IEBACiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCw1MCxjYyAqLwogCXt9CiB9OwotCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJSxJbml0aWFsU2NhbGUgLSAzMjB4MjQwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX21vZGUxW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4NTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiAwMCwwMiw1MCxjYyAqLwogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIDAwLDA4LDAwLGNjICovCkBAIC0zMjg3LDkgKzMyOTcsNyBAQAogCXsweGEwLCAweDUwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwJLyogMDEsYTgsNTAsY2MgKi8KIAl7fQogfTsKLQotLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCVcQUUsNTBIWiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF81MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwXzUwSFpbXSA9IHsKIAl7MHhhYSwgMHgxMywgMHgwMGEzfSwJLyogMDAsMTMsYTMsYWEgKi8KIAl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJLyogMDAsMDEsMDAsZGQgKi8KIAl7MHhhYSwgMHgyYiwgMHgwMDk2fSwJLyogMDAsMmIsOTYsYWEgKi8KQEAgLTMzMDcsOSArMzMxNSw3IEBACiAJCQkJCQkJIGlmIG1vZGUwICg2NDB4NDgwKSAqLwogCXt9CiB9OwotCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJVxBRSw2MEhaICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MjBfNjBIWltdID0gewogCXsweGFhLCAweDEzLCAweDAwYTN9LAkJCS8qIDAwLDEzLGEzLGFhICovCiAJCQkJCQkvKiAoYnVnIGluIHpzMjExLmluZikgKi8KIAl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJCQkvKiAwMCwwMSwwMCxkZCAqLwpAQCAtMzMzMSw5ICszMzM3LDcgQEAKIAl7MHhhMSwgMHgwMSwgMHgwMDM3fSwJCSovCiAJe30KIH07Ci0KLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlXEFFLE5vRmxpa2VyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX05vRmxpa2VyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwX05vRmxpa2VyW10gPSB7CiAJezB4YWEsIDB4MTMsIDB4MDBhM30sCQkJLyogMDAsMTMsYTMsYWEgKi8KIAkJCQkJCS8qIChidWcgaW4genMyMTEuaW5mKSAqLwogCXsweGRkLCAweDAwLCAweDAxMDB9LAkJCS8qIDAwLDAxLDAwLGRkICovCkBAIC0zMzU0LDcgKzMzNTgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCkBAIC0zNTExLDcgKzM1MTUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MzBjX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTM2ODIsNyArMzY4Niw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMxMDZiX0luaXRpYWxbXSA9IHsJLyogMTc2eDE0NCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDE3NngxNDQgKi8KIC8qIEpQRUcgY29udHJvbCAqLwogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAvKiBTcmVhbSBhbmQgU2Vuc29yIHNwZWNpZmljICovCkBAIC0zODAwLDcgKzM4MDQsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMTA2Yl9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzUyeDI4OCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFtdID0gewkvKiAzNTJ4Mjg4ICovCiAvKiBKUEVHIGNvbnRyb2wgKi8KIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAogLyogU3JlYW0gYW5kIFNlbnNvciBzcGVjaWZpYyAqLwpAQCAtMzk3MiwxMCArMzk3NiwxMCBAQAogCXt9CiB9OwogCi0vKiBmcm9tIHVzYnZtMzFiLmluZiAqLworLyogZnJvbSBsdldJTXYuaW5mIDA0NmQ6MDhhMi86MDhhYSAyMDA3LzA2LzAzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwZSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGUsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwwMCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KQEAgLTQwMDAsNyArNDAwNCw3IEBACiAJezB4YWEsIDB4MDksIDB4MDAwNn0sCQkJCS8qIDAwLDA5LDA2LGFhICovCiAJezB4YWEsIDB4MGEsIDB4MDAwMX0sCQkJCS8qIDAwLDBhLDAxLGFhICovCiAJezB4YWEsIDB4MGIsIDB4MDAwMX0sCQkJCS8qIDAwLDBiLDAxLGFhICovCi0JezB4YWEsIDB4MGMsIDB4MDAwOH0sCQkJCS8qIDAwLDBjLDA4LGFhICovCisJezB4YWEsIDB4MGMsIDB4MDAwNn0sCiAJezB4YWEsIDB4MGQsIDB4MDAwMH0sCQkJCS8qIDAwLDBkLDAwLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDAwMH0sCQkJCS8qIDAwLDEwLDAwLGFhICovCiAJezB4YWEsIDB4MTIsIDB4MDAwNX0sCQkJCS8qIDAwLDEyLDA1LGFhICovCkBAIC00MDE5LDEzICs0MDIzLDEzIEBACiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczIwMmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwZSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGUsY2MgKi8KIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwxMCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KIAl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwJCS8qIDAwLDA0LDgwLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwJLyogMDAsMDUsMDEsY2MgKi8KLQl7MHhhMCwgMHhkMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCS8qIDAwLDA2LGQwLGNjICovCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjICovCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAzLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjICovCkBAIC00MDM1LDcgKzQwMzksNyBAQAogCXsweGEwLCAweDA4LCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCQkvKiAwMSwxYSwwOCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMixjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDlCX1dJTkhFSUdIVEhJR0h9LAkJLyogMDAsOWIsMDEsY2MgKi8KLQl7MHhhMCwgMHhkOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkJLyogMDAsOWMsZDgsY2MgKi8KKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAogCXsweGEwLCAweDAyLCBaQzNYWF9SMDlEX1dJTldJRFRISElHSH0sCQkvKiAwMCw5ZCwwMixjYyAqLwogCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJCS8qIDAwLDllLDg4LGNjICovCiAJezB4YWEsIDB4MDIsIDB4MDAwMn0sCQkJCS8qIDAwLDAyLDAyLGFhICovCkBAIC00MDQ0LDcgKzQwNDgsNyBAQAogCXsweGFhLCAweDA5LCAweDAwMDZ9LAkJCQkvKiAwMCwwOSwwNixhYSAqLwogCXsweGFhLCAweDBhLCAweDAwMDF9LAkJCQkvKiAwMCwwYSwwMSxhYSAqLwogCXsweGFhLCAweDBiLCAweDAwMDF9LAkJCQkvKiAwMCwwYiwwMSxhYSAqLwotCXsweGFhLCAweDBjLCAweDAwMDh9LAkJCQkvKiAwMCwwYywwOCxhYSAqLworCXsweGFhLCAweDBjLCAweDAwMDZ9LAogCXsweGFhLCAweDBkLCAweDAwMDB9LAkJCQkvKiAwMCwwZCwwMCxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwMDB9LAkJCQkvKiAwMCwxMCwwMCxhYSAqLwogCXsweGFhLCAweDEyLCAweDAwMDV9LAkJCQkvKiAwMCwxMiwwNSxhYSAqLwpAQCAtNDA1OSw2ICs0MDYzLDggQEAKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCS8qIDAyLDUwLDA4LGNjICovCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJCS8qIDAzLDAxLDA4LGNjICovCiAJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCQkvKiAwMSw4ZCw3MCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDk3X1dJTllTVEFSVEhJR0h9LAorCXsweGEwLCAweGZlLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCiAJe30KIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl81MEhaW10gPSB7CkBAIC00MDY2LDIyICs0MDcyLDIyIEBACiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KIAl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDY4fSwJCQkJLyogMDAsMjEsNjgsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDFifSwKIAl7MHhhYSwgMHgwMywgMHgwMDQ0fSwJCQkJLyogMDAsMDMsNDQsYWEgKi8KLQl7MHhhYSwgMHgwNCwgMHgwMDA5fSwJCQkJLyogMDAsMDQsMDksYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDI4fSwJCQkJLyogMDAsMDUsMjgsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDA4fSwKKwl7MHhhYSwgMHgwNSwgMHgwMDFifSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgxYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKIAl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMDcsY2MgKi8KLQl7MHhhMCwgMHhkMiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsZDIsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHg0ZCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDRkLGNjICovCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAogCXsweGEwLCAweDQ0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDQsY2MgKi8KIAl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDZmLGNjICovCiAJezB4YTAsIDB4YWQsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixhZCxjYyAqLwpAQCAtNDA5NCwyMyArNDEwMCwyMyBAQAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkJLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwotCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwNmN9LAkJCQkvKiAwMCwyMSw2YyxhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDR9LAorCXsweGFhLCAweDIxLCAweDAwM2R9LAogCXsweGFhLCAweDAzLCAweDAwNDF9LAkJCQkvKiAwMCwwMyw0MSxhYSAqLwotCXsweGFhLCAweDA0LCAweDAwMDl9LAkJCQkvKiAwMCwwNCwwOSxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMmN9LAkJCQkvKiAwMCwwNSwyYyxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMTB9LAorCXsweGFhLCAweDA1LCAweDAwM2R9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwotCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwxNCxjYyAqLworCXsweGEwLCAweDFjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAogCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDBmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwZixjYyAqLwotCXsweGEwLCAweGJlLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixiZSxjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDNkLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwogCXsweGEwLCAweDliLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsOWIsY2MgKi8KLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLwotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCiAJezB4YTAsIDB4NDEsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0MSxjYyAqLwogCXsweGEwLCAweDZmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNmYsY2MgKi8KIAl7MHhhMCwgMHhhZCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGFkLGNjICovCkBAIC00MTMwLDE2ICs0MTM2LDE2IEBACiAJezB4YWEsIDB4MDUsIDB4MDAwMH0sCQkJCS8qIDAwLDA1LDAwLGFhICovCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE0LGNjICovCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCiAJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDA3LGNjICovCi0JezB4YTAsIDB4YzAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGMwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCiAJezB4YTAsIDB4NDAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw0MCxjYyAqLwotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKIAl7MHhhMCwgMHg0NSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLDFkLDQ1LGNjICovCiAJezB4YTAsIDB4OGUsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw4ZSxjYyAqLwogCXsweGEwLCAweGMxLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsYzEsY2MgKi8KQEAgLTQxNTIsMjMgKzQxNTgsMjMgQEAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJCS8qIDAwLDE5LDAwLGNjICovCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KLQl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDA0fSwJCQkJLyogMDAsMjEsMDQsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDA0fSwKKwl7MHhhYSwgMHgyMSwgMHgwMDA4fSwKIAl7MHhhYSwgMHgwMywgMHgwMDQyfSwJCQkJLyogMDAsMDMsNDIsYWEgKi8KLQl7MHhhYSwgMHgwNCwgMHgwMDA4fSwJCQkJLyogMDAsMDQsMDgsYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDA0fSwJCQkJLyogMDAsMDUsMDQsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDEwfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDA4fSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgxYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKIAl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGYsY2MgKi8KLQl7MHhhMCwgMHg5ZiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsOWYsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHg4MSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDgxLGNjICovCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAogCXsweGEwLCAweDQyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDIsY2MgKi8KIAl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDZmLGNjICovCiAJezB4YTAsIDB4YWYsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixhZixjYyAqLwpAQCAtNDE4MiwyMiArNDE4OCwyMiBAQAogCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KIAl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCiAJezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCi0JezB4YWEsIDB4MjEsIDB4MDAyMH0sCQkJCS8qIDAwLDIxLDIwLGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAwNn0sCiAJezB4YWEsIDB4MDMsIDB4MDA0MH0sCQkJCS8qIDAwLDAzLDQwLGFhICovCiAJezB4YWEsIDB4MDQsIDB4MDAwOH0sCQkJCS8qIDAwLDA0LDA4LGFhICovCi0JezB4YWEsIDB4MDUsIDB4MDAyMH0sCQkJCS8qIDAwLDA1LDIwLGFhICovCisJezB4YWEsIDB4MDUsIDB4MDAwNn0sCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwNyxjYyAqLwotCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwotCXsweGEwLCAweDAyLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsMDIsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDAwLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDAsY2MgKi8KIAl7MHhhMCwgMHg2MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDYwLGNjICovCiAJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZiw5MCxjYyAqLwpAQCAtNDIxMCwyMyArNDIxNiwyMyBAQAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkJLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwotCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwMTB9LAkJCQkvKiAwMCwyMSwxMCxhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDR9LAorCXsweGFhLCAweDIxLCAweDAwMGN9LAogCXsweGFhLCAweDAzLCAweDAwNDB9LAkJCQkvKiAwMCwwMyw0MCxhYSAqLwotCXsweGFhLCAweDA0LCAweDAwMDh9LAkJCQkvKiAwMCwwNCwwOCxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMTB9LAkJCQkvKiAwMCwwNSwxMCxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMTB9LAorCXsweGFhLCAweDA1LCAweDAwMGN9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGYsY2MgKi8KLQl7MHhhMCwgMHhmMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsZjAsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDAyLGNjICovCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDAwLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDAsY2MgKi8KIAl7MHhhMCwgMHg2MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDYwLGNjICovCiAJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZiw5MCxjYyAqLwpAQCAtNDcxMyw4ICs0NzE5LDggQEAKIAl7fQogfTsKIAotLyogZnJvbSBvZW05LmluZiAtIEhLUiwlUE8yMDMwJSxJbml0aWFsIC0gNjQweDQ4MCAtIChjbG9zZSB0byBDUzIxMDIpICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwX21vZGUwW10gPSB7CisvKiBmcm9tIG9lbTkuaW5mICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcG8yMDMwX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDA0LCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJLyogMDAsMDIsMDQsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KQEAgLTQ3OTAsOCArNDc5Niw4IEBACiAJe30KIH07CiAKLS8qIGZyb20gb2VtOS5pbmYgLSBIS1IsJVBPMjAzMCUsSW5pdGlhbFNjYWxlIC0gMzIweDI0MCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF9tb2RlMVtdID0geworLyogZnJvbSBvZW05LmluZiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwgLyogMDAsMDIsMTAsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KQEAgLTQ4NjcsNyArNDg3Myw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBQTzIwMzBfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF81MEhaW10gPSB7CiAJezB4YWEsIDB4OGQsIDB4MDAwOH0sIC8qIDAwLDhkLDA4LGFhICovCiAJezB4YWEsIDB4MWEsIDB4MDAwMX0sIC8qIDAwLDFhLDAxLGFhICovCiAJezB4YWEsIDB4MWIsIDB4MDAwYX0sIC8qIDAwLDFiLDBhLGFhICovCkBAIC00ODg5LDcgKzQ4OTUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwbzIwMzBfNjBIWltdID0gewogCXsweGFhLCAweDhkLCAweDAwMDh9LCAvKiAwMCw4ZCwwOCxhYSAqLwogCXsweGFhLCAweDFhLCAweDAwMDB9LCAvKiAwMCwxYSwwMCxhYSAqLwogCXsweGFhLCAweDFiLCAweDAwZGV9LCAvKiAwMCwxYixkZSxhYSAqLwpAQCAtNDkxMiw3ICs0OTE4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDAyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwgLyogMDEsODAsMDIsY2MgKi8KIAl7MHhhYSwgMHg4ZCwgMHgwMDBkfSwgLyogMDAsOGQsMGQsYWEgKi8KIAl7MHhhYSwgMHgxYSwgMHgwMDAwfSwgLyogMDAsMWEsMDAsYWEgKi8KQEAgLTQ5MjQsNyArNDkzMCw3IEBACiB9OwogCiAvKiBURVNUICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMENLX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY0tfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDEsIDB4MDAzYn0sCiAJezB4YTAsIDB4MGUsIDB4MDAzYX0sCkBAIC01MTI3LDcgKzUxMzMsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMENLX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjS19Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDEsIDB4MDAzYn0sCiAJezB4YTAsIDB4MGUsIDB4MDAzYX0sCkBAIC01NTYwLDcgKzU1NjYsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCQkvKiAwMCwwMCwwMSxjYywgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDIsY2MsICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjLCAqLwpAQCAtNTYyNyw3ICs1NjMzLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MsICovCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAyLGNjLCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYywgKi8KQEAgLTU2OTIsOCArNTY5OCw3IEBACiAJezB4YTAsIDB4NjUsIFpDM1hYX1IxMThfQkdBSU59LAkJLyogMDEsMTgsNjUsY2MgKi8KIAl7fQogfTsKLS8qICI1MEhaIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMX0sCQkvKiAwMCw4MywwMSxhYSAqLwogCXsweGFhLCAweDg0LCAweDAwYWF9LAkJLyogMDAsODQsYWEsYWEgKi8KQEAgLTU3MTcsOCArNTcyMiw3IEBACiAJe30KIH07CiAKLS8qICI1MEhaU2NhbGUiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWltdID0gewogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAzfSwJCS8qIDAwLDgzLDAzLGFhICovCiAJezB4YWEsIDB4ODQsIDB4MDA1NH0sCQkvKiAwMCw4NCw1NCxhYSAqLwpAQCAtNTc0Miw4ICs1NzQ2LDcgQEAKIAl7fQogfTsKIAotLyogIjYwSFoiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpTY2FsZVtdID0gewogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAxfSwJCS8qIDAwLDgzLDAxLGFhICovCiAJezB4YWEsIDB4ODQsIDB4MDA2Mn0sCQkvKiAwMCw4NCw2MixhYSAqLwpAQCAtNTc2Nyw4ICs1NzcwLDcgQEAKIAl7fQogfTsKIAotLyogIjYwSFpTY2FsZSIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMn0sCQkvKiAwMCw4MywwMixhYSAqLwogCXsweGFhLCAweDg0LCAweDAwYzR9LAkJLyogMDAsODQsYzQsYWEgKi8KQEAgLTU3OTIsOCArNTc5NCw3IEBACiAJe30KIH07CiAKLS8qICJOb0ZsaWtlciIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGMsY2MsICovCiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDB9LAkJLyogMDAsODMsMDAsYWEgKi8KQEAgLTU4MTUsOCArNTgxNiw3IEBACiAJe30KIH07CiAKLS8qICJOb0ZsaWtlclNjYWxlIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGMsY2MsICovCiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDB9LAkJLyogMDAsODMsMDAsYWEgKi8KQEAgLTU4MzksNyArNTgzOSw3IEBACiB9OwogCiBzdGF0aWMgdTggcmVnX3JfaShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCV9fdTE2IGluZGV4KQorCQl1MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTU4NTIsNyArNTg1Miw3IEBACiB9CiAKIHN0YXRpYyB1OCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCV9fdTE2IGluZGV4KQorCQl1MTYgaW5kZXgpCiB7CiAJdTggcmV0OwogCkBAIC01ODYyLDggKzU4NjIsOCBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfd19pKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQlfX3U4IHZhbHVlLAotCQkJX191MTYgaW5kZXgpCisJCQl1OCB2YWx1ZSwKKwkJCXUxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCkBAIC01ODc0LDE4ICs1ODc0LDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQlfX3U4IHZhbHVlLAotCQkJX191MTYgaW5kZXgpCisJCQl1OCB2YWx1ZSwKKwkJCXUxNiBpbmRleCkKIHsKIAlQREVCVUcoRF9VU0JPLCAicmVnIHcgWyUwNHhdID0gJTAyeCIsIGluZGV4LCB2YWx1ZSk7CiAJcmVnX3dfaShkZXYsIHZhbHVlLCBpbmRleCk7CiB9CiAKLXN0YXRpYyBfX3UxNiBpMmNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3U4IHJlZykKK3N0YXRpYyB1MTYgaTJjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggcmVnKQogewotCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiByZXR2YWw7CisJdTggcmV0Ynl0ZTsKKwl1MTYgcmV0dmFsOwogCiAJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDAwOTIpOwogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDA5MCk7CQkvKiA8LSByZWFkIGNvbW1hbmQgKi8KQEAgLTU5MDAsMTIgKzU5MDAsMTIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgX191OCBpMmNfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJX191OCByZWcsCi0JCQlfX3U4IHZhbEwsCi0JCQlfX3U4IHZhbEgpCitzdGF0aWMgdTggaTJjX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4IHJlZywKKwkJCXU4IHZhbEwsCisJCQl1OCB2YWxIKQogewotCV9fdTggcmV0Ynl0ZTsKKwl1OCByZXRieXRlOwogCiAJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDkyKTsKIAlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCB2YWxMLCAweDkzKTsKQEAgLTU5NTcsMjQgKzU5NTcsMjQgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7Ci0JY29uc3QgX191OCAqbWF0cml4OworCWNvbnN0IHU4ICptYXRyaXg7CiAJc3RhdGljIGNvbnN0IHU4IGFkY20yNzAwX21hdHJpeFs5XSA9CiAvKgkJezB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjZ9OyAqLwogLyptcy13aW4qLwogCQl7MHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggZ2MwMzA1X21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IGdjMDMwNV9tYXRyaXhbOV0gPQogCQl7MHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggb3Y3NjIwX21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IG92NzYyMF9tYXRyaXhbOV0gPQogCQl7MHg1OCwgMHhmNCwgMHhmNCwgMHhmNCwgMHg1OCwgMHhmNCwgMHhmNCwgMHhmNCwgMHg1OH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcGFzMjAyYl9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCBwYXMyMDJiX21hdHJpeFs5XSA9CiAJCXsweDRjLCAweGY1LCAweGZmLCAweGY5LCAweDUxLCAweGY1LCAweGZiLCAweGVkLCAweDVmfTsKLQlzdGF0aWMgY29uc3QgX191OCBwbzIwMzBfbWF0cml4WzldID0KKwlzdGF0aWMgY29uc3QgdTggcG8yMDMwX21hdHJpeFs5XSA9CiAJCXsweDYwLCAweGYwLCAweGYwLCAweGYwLCAweDYwLCAweGYwLCAweGYwLCAweGYwLCAweDYwfTsKIAlzdGF0aWMgY29uc3QgdTggdGFzNTEzMGNfbWF0cml4WzldID0KIAkJezB4NjgsIDB4ZWMsIDB4ZWMsIDB4ZWMsIDB4NjgsIDB4ZWMsIDB4ZWMsIDB4ZWMsIDB4Njh9OwotCXN0YXRpYyBjb25zdCBfX3U4IHZmMDI1MF9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCB2ZjAyNTBfbWF0cml4WzldID0KIAkJezB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2J9OwotCXN0YXRpYyBjb25zdCBfX3U4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7CisJc3RhdGljIGNvbnN0IHU4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7CiAJCWFkY20yNzAwX21hdHJpeCwgLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KIAkJb3Y3NjIwX21hdHJpeCwJLyogU0VOU09SX0NTMjEwMiAxICovCiAJCU5VTEwsCQkvKiBTRU5TT1JfQ1MyMTAySyAyICovCkBAIC02MDA2LDExICs2MDA2LDEyIEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBicmlnaHRuZXNzOworCXU4IGJyaWdodG5lc3M7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQlyZXR1cm47CiAJfQpAQCAtNjAzNCw3ICs2MDM1LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBzaGFycG5lc3M7Ci0Jc3RhdGljIGNvbnN0IF9fdTggc2hhcnBuZXNzX3RiW11bMl0gPSB7CisJc3RhdGljIGNvbnN0IHU4IHNoYXJwbmVzc190YltdWzJdID0gewogCQl7MHgwMiwgMHgwM30sCiAJCXsweDA0LCAweDA3fSwKIAkJezB4MDgsIDB4MGZ9LApAQCAtNjA1MywxMTggKzYwNTQsNjkgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWNvbnN0IF9fdTggKlRnYW1tYSwgKlRncmFkaWVudDsKLQlpbnQgZywgaSwgazsKLQlzdGF0aWMgY29uc3QgX191OCBrZ2FtbWFfdGJbMTZdID0JLyogZGVsdGEgZm9yIGNvbnRyYXN0ICovCisJY29uc3QgdTggKlRnYW1tYTsKKwlpbnQgZywgaSwgaywgYWRqLCBncDsKKwl1OCBnclsxNl07CisJc3RhdGljIGNvbnN0IHU4IGRlbHRhX3RiWzE2XSA9CQkvKiBkZWx0YSBmb3IgY29udHJhc3QgKi8KIAkJezB4MTUsIDB4MGQsIDB4MGEsIDB4MDksIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsCiAJCSAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4fTsKLQlzdGF0aWMgY29uc3QgX191OCBrZ3JhZF90YlsxNl0gPQotCQl7MHgxYiwgMHgwNiwgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDYsIDB4MDR9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8xWzE2XSA9CisJc3RhdGljIGNvbnN0IHU4IGdhbW1hX3RiWzZdWzE2XSA9IHsKIAkJezB4MDAsIDB4MDAsIDB4MDMsIDB4MGQsIDB4MWIsIDB4MmUsIDB4NDUsIDB4NWYsCi0JCSAweDc5LCAweDkzLCAweGFiLCAweGMxLCAweGQ0LCAweGU1LCAweGYzLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfMVsxNl0gPQotCQl7MHgwMCwgMHgwMSwgMHgwNSwgMHgwYiwgMHgxMCwgMHgxNSwgMHgxOCwgMHgxYSwKLQkJIDB4MWEsIDB4MTgsIDB4MTYsIDB4MTQsIDB4MTIsIDB4MGYsIDB4MGQsIDB4MDZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8yWzE2XSA9CisJCSAweDc5LCAweDkzLCAweGFiLCAweGMxLCAweGQ0LCAweGU1LCAweGYzLCAweGZmfSwKIAkJezB4MDEsIDB4MGMsIDB4MWYsIDB4M2EsIDB4NTMsIDB4NmQsIDB4ODUsIDB4OWMsCi0JCSAweGIwLCAweGMyLCAweGQxLCAweGRlLCAweGU5LCAweGYyLCAweGY5LCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfMlsxNl0gPQotCQl7MHgwNSwgMHgwZiwgMHgxNiwgMHgxYSwgMHgxOSwgMHgxOSwgMHgxNywgMHgxNSwKLQkJIDB4MTIsIDB4MTAsIDB4MGUsIDB4MGIsIDB4MDksIDB4MDgsIDB4MDYsIDB4MDN9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8zWzE2XSA9CisJCSAweGIwLCAweGMyLCAweGQxLCAweGRlLCAweGU5LCAweGYyLCAweGY5LCAweGZmfSwKIAkJezB4MDQsIDB4MTYsIDB4MzAsIDB4NGUsIDB4NjgsIDB4ODEsIDB4OTgsIDB4YWMsCi0JCSAweGJlLCAweGNkLCAweGRhLCAweGU0LCAweGVkLCAweGY1LCAweGZiLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfM1sxNl0gPQotCQl7MHgwYywgMHgxNiwgMHgxYiwgMHgxYywgMHgxOSwgMHgxOCwgMHgxNSwgMHgxMiwKLQkJIDB4MTAsIDB4MGQsIDB4MGIsIDB4MDksIDB4MDgsIDB4MDYsIDB4MDUsIDB4MDN9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV80WzE2XSA9CisJCSAweGJlLCAweGNkLCAweGRhLCAweGU0LCAweGVkLCAweGY1LCAweGZiLCAweGZmfSwKIAkJezB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCi0JCSAweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfNFsxNl0gPQotCQl7MHgyNiwgMHgyMiwgMHgyMCwgMHgxYywgMHgxNiwgMHgxMywgMHgxMCwgMHgwZCwKLQkJIDB4MGIsIDB4MDksIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDJ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV81WzE2XSA9CisJCSAweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmfSwKIAkJezB4MjAsIDB4NGIsIDB4NmUsIDB4OGQsIDB4YTMsIDB4YjUsIDB4YzUsIDB4ZDIsCi0JCSAweGRjLCAweGU1LCAweGVjLCAweGYyLCAweGY2LCAweGZhLCAweGZkLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfNVsxNl0gPQotCQl7MHgzNywgMHgyNiwgMHgyMCwgMHgxYSwgMHgxNCwgMHgxMCwgMHgwZSwgMHgwYiwKLQkJIDB4MDksIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDJ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV82WzE2XSA9CQkvKiA/PyB3YXMgZ2FtbWEgNSAqLworCQkgMHhkYywgMHhlNSwgMHhlYywgMHhmMiwgMHhmNiwgMHhmYSwgMHhmZCwgMHhmZn0sCiAJCXsweDI0LCAweDQ0LCAweDY0LCAweDg0LCAweDlkLCAweGIyLCAweGM0LCAweGQzLAotCQkgMHhlMCwgMHhlYiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzZbMTZdID0KLQkJezB4MTgsIDB4MjAsIDB4MjAsIDB4MWMsIDB4MTYsIDB4MTMsIDB4MTAsIDB4MGUsCi0JCSAweDBiLCAweDA5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfTsKLQlzdGF0aWMgY29uc3QgX191OCAqZ2FtbWFfdGJbXSA9IHsKLQkJTlVMTCwgVGdhbW1hXzEsIFRnYW1tYV8yLAotCQlUZ2FtbWFfMywgVGdhbW1hXzQsIFRnYW1tYV81LCBUZ2FtbWFfNgorCQkgMHhlMCwgMHhlYiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn0sCiAJfTsKLQlzdGF0aWMgY29uc3QgX191OCAqZ3JhZGllbnRfdGJbXSA9IHsKLQkJTlVMTCwgVGdyYWRpZW50XzEsIFRncmFkaWVudF8yLAotCQlUZ3JhZGllbnRfMywgVGdyYWRpZW50XzQsIFRncmFkaWVudF81LCBUZ3JhZGllbnRfNgotCX07Ci0jaWZkZWYgR1NQQ0FfREVCVUcKLQlfX3U4IHZbMTZdOwotI2VuZGlmCiAKLQlUZ2FtbWEgPSBnYW1tYV90YltzZC0+Z2FtbWFdOwotCVRncmFkaWVudCA9IGdyYWRpZW50X3RiW3NkLT5nYW1tYV07CisJVGdhbW1hID0gZ2FtbWFfdGJbc2QtPmdhbW1hIC0gMV07CiAKLQlrID0gKHNkLT5jb250cmFzdCAtIDEyOCkJCS8qIC0xMjggLyAxMjggKi8KLQkJCSogVGdhbW1hWzBdOwotCVBERUJVRyhEX0NPTkYsICJnYW1tYTolZCBjb250cmFzdDolZCBnYW1tYSBjb2VmZjogJWQvMTI4IiwKLQkJc2QtPmdhbW1hLCBzZC0+Y29udHJhc3QsIGspOworCWsgPSAoKGludCkgc2QtPmNvbnRyYXN0IC0gMTI4KTsJCS8qIC0xMjggLyAxMjggKi8KKwlhZGogPSAwOworCWdwID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlnID0gVGdhbW1hW2ldICsga2dhbW1hX3RiW2ldICogayAvIDEyODsKKwkJZyA9IFRnYW1tYVtpXSAtIGRlbHRhX3RiW2ldICogayAvIDEyOCAtIGFkaiAvIDI7CiAJCWlmIChnID4gMHhmZikKIAkJCWcgPSAweGZmOwogCQllbHNlIGlmIChnIDw9IDApCiAJCQlnID0gMTsKIAkJcmVnX3coZGV2LCBnLCAweDAxMjAgKyBpKTsJLyogZ2FtbWEgKi8KLSNpZmRlZiBHU1BDQV9ERUJVRwotCQlpZiAoZ3NwY2FfZGVidWcgJiBEX0NPTkYpCi0JCQl2W2ldID0gZzsKLSNlbmRpZgotCX0KLQlQREVCVUcoRF9DT05GLCAidGI6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCi0JCXZbMF0sIHZbMV0sIHZbMl0sIHZbM10sIHZbNF0sIHZbNV0sIHZbNl0sIHZbN10pOwotCVBERUJVRyhEX0NPTkYsICIgICAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKLQkJdls4XSwgdls5XSwgdlsxMF0sIHZbMTFdLCB2WzEyXSwgdlsxM10sIHZbMTRdLCB2WzE1XSk7Ci0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJZyA9IFRncmFkaWVudFtpXSAtIGtncmFkX3RiW2ldICogayAvIDEyODsKLQkJaWYgKGcgPiAweGZmKQotCQkJZyA9IDB4ZmY7Ci0JCWVsc2UgaWYgKGcgPD0gMCkgewotCQkJaWYgKGkgIT0gMTUpCi0JCQkJZyA9IDA7CisJCWlmIChrID4gMCkKKwkJCWFkai0tOworCQllbHNlCisJCQlhZGorKzsKKworCQlpZiAoaSAhPSAwKSB7CisJCQlpZiAoZ3AgPT0gMCkKKwkJCQlncltpIC0gMV0gPSAwOwogCQkJZWxzZQotCQkJCWcgPSAxOworCQkJCWdyW2kgLSAxXSA9IGcgLSBncDsKIAkJfQotCQlyZWdfdyhkZXYsIGcsIDB4MDEzMCArIGkpOwkvKiBncmFkaWVudCAqLwotI2lmZGVmIEdTUENBX0RFQlVHCi0JCWlmIChnc3BjYV9kZWJ1ZyAmIERfQ09ORikKLQkJCXZbaV0gPSBnOwotI2VuZGlmCisJCWdwID0gZzsKIAl9Ci0JUERFQlVHKERfQ09ORiwgIiAgICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAotCQl2WzBdLCB2WzFdLCB2WzJdLCB2WzNdLCB2WzRdLCB2WzVdLCB2WzZdLCB2WzddKTsKLQlQREVCVUcoRF9DT05GLCAiICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCi0JCXZbOF0sIHZbOV0sIHZbMTBdLCB2WzExXSwgdlsxMl0sIHZbMTNdLCB2WzE0XSwgdlsxNV0pOworCWdyWzE1XSA9IGdyWzE0XSAvIDI7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXJlZ193KGRldiwgZ3JbaV0sIDB4MDEzMCArIGkpOwkvKiBncmFkaWVudCAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRxdWFsaXR5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggZnJ4dDsKKwl1OCBmcnh0OwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX0hWNzEzMUI6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQlyZXR1cm47CiAJfQpAQCAtNjIxOCw5ICs2MTcwLDkgQEAKIAkJIGhkY3MyMDIwYl81MEhaLCBoZGNzMjAyMGJfNTBIWiwKIAkJIGhkY3MyMDIwYl82MEhaLCBoZGNzMjAyMGJfNjBIWn0sCiAvKiBTRU5TT1JfSFY3MTMxQiA1ICovCi0JCXtodjcxMzFiX05vRmxpa2VyU2NhbGUsIGh2NzEzMWJfTm9GbGlrZXIsCi0JCSBodjcxMzFiXzUwSFpTY2FsZSwgaHY3MTMxYl81MEhaLAotCQkgaHY3MTMxYl82MEhaU2NhbGUsIGh2NzEzMWJfNjBIWn0sCisJCXtodjcxMzFiX05vRmxpa2VyLCBodjcxMzFiX05vRmxpa2VyU2NhbGUsCisJCSBodjcxMzFiXzUwSFosIGh2NzEzMWJfNTBIWlNjYWxlLAorCQkgaHY3MTMxYl82MEhaLCBodjcxMzFiXzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfSFY3MTMxQyA2ICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKQEAgLTYyMzAsMTcgKzYxODIsMTcgQEAKIAkJIGljbTEwNWFfNTBIWiwgaWNtMTA1YV81MEhaU2NhbGUsCiAJCSBpY20xMDVhXzYwSFosIGljbTEwNWFfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9NQzUwMUNCIDggKi8KLQkJe01DNTAxQ0JfTm9GbGlrZXIsIE1DNTAxQ0JfTm9GbGlrZXJTY2FsZSwKLQkJIE1DNTAxQ0JfNTBIWiwgTUM1MDFDQl81MEhaU2NhbGUsCi0JCSBNQzUwMUNCXzYwSFosIE1DNTAxQ0JfNjBIWlNjYWxlfSwKKwkJe21jNTAxY2JfTm9GbGlrZXIsIG1jNTAxY2JfTm9GbGlrZXJTY2FsZSwKKwkJIG1jNTAxY2JfNTBIWiwgbWM1MDFjYl81MEhaU2NhbGUsCisJCSBtYzUwMWNiXzYwSFosIG1jNTAxY2JfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9NSTAzNjBTT0MgOSAqLwotCQl7bWkzNjBzb2NfQUVOb0ZsaWtlclNjYWxlLCBtaTM2MHNvY19BRU5vRmxpa2VyLAotCQkgbWkzNjBzb2NfQUU1MEhaU2NhbGUsIG1pMzYwc29jX0FFNTBIWiwKLQkJIG1pMzYwc29jX0FFNjBIWlNjYWxlLCBtaTM2MHNvY19BRTYwSFp9LAorCQl7bWkzNjBzb2NfQUVOb0ZsaWtlciwgbWkzNjBzb2NfQUVOb0ZsaWtlclNjYWxlLAorCQkgbWkzNjBzb2NfQUU1MEhaLCBtaTM2MHNvY19BRTUwSFpTY2FsZSwKKwkJIG1pMzYwc29jX0FFNjBIWiwgbWkzNjBzb2NfQUU2MEhaU2NhbGV9LAogLyogU0VOU09SX09WNzYyMCAxMCAqLwotCQl7T1Y3NjIwX05vRmxpa2VyLCBPVjc2MjBfTm9GbGlrZXIsCi0JCSBPVjc2MjBfNTBIWiwgT1Y3NjIwXzUwSFosCi0JCSBPVjc2MjBfNjBIWiwgT1Y3NjIwXzYwSFp9LAorCQl7b3Y3NjIwX05vRmxpa2VyLCBvdjc2MjBfTm9GbGlrZXIsCisJCSBvdjc2MjBfNTBIWiwgb3Y3NjIwXzUwSFosCisJCSBvdjc2MjBfNjBIWiwgb3Y3NjIwXzYwSFp9LAogLyogU0VOU09SX09WNzYzMEMgMTEgKi8KIAkJe05VTEwsIE5VTEwsCiAJCSBOVUxMLCBOVUxMLApAQCAtNjI1OCwxNyArNjIxMCwxNyBAQAogCQkgcGIwMzMwXzUwSFpTY2FsZSwgcGIwMzMwXzUwSFosCiAJCSBwYjAzMzBfNjBIWlNjYWxlLCBwYjAzMzBfNjBIWn0sCiAvKiBTRU5TT1JfUE8yMDMwIDE1ICovCi0JCXtQTzIwMzBfTm9GbGlrZXIsIFBPMjAzMF9Ob0ZsaWtlciwKLQkJIFBPMjAzMF81MEhaLCBQTzIwMzBfNTBIWiwKLQkJIFBPMjAzMF82MEhaLCBQTzIwMzBfNjBIWn0sCisJCXtwbzIwMzBfTm9GbGlrZXIsIHBvMjAzMF9Ob0ZsaWtlciwKKwkJIHBvMjAzMF81MEhaLCBwbzIwMzBfNTBIWiwKKwkJIHBvMjAzMF82MEhaLCBwbzIwMzBfNjBIWn0sCiAvKiBTRU5TT1JfVEFTNTEzMENLIDE2ICovCi0JCXt0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsIHRhczUxMzBjeHhfTm9GbGlrZXIsCi0JCSB0YXM1MTMwY3h4XzUwSFpTY2FsZSwgdGFzNTEzMGN4eF81MEhaLAotCQkgdGFzNTEzMGN4eF82MEhaU2NhbGUsIHRhczUxMzBjeHhfNjBIWn0sCisJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCisJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAorCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwotCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLCB0YXM1MTMwY3h4X05vRmxpa2VyLAotCQkgdGFzNTEzMGN4eF81MEhaU2NhbGUsIHRhczUxMzBjeHhfNTBIWiwKLQkJIHRhczUxMzBjeHhfNjBIWlNjYWxlLCB0YXM1MTMwY3h4XzYwSFp9LAorCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlciwgdGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLAorCQkgdGFzNTEzMGN4eF81MEhaLCB0YXM1MTMwY3h4XzUwSFpTY2FsZSwKKwkJIHRhczUxMzBjeHhfNjBIWiwgdGFzNTEzMGN4eF82MEhaU2NhbGV9LAogLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxOCAqLwogCQl7dGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyLCB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZSwKIAkJIHRhczUxMzBjX3ZmMDI1MF81MEhaLCB0YXM1MTMwY192ZjAyNTBfNTBIWlNjYWxlLApAQCAtNjI3Nyw5ICs2MjI5LDkgQEAKIAogCWkgPSBzZC0+bGlnaHRmcmVxICogMjsKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0JaWYgKCFtb2RlKQotCQlpKys7CQkJLyogNjQweDQ4MCAqLwotCXpjM19mcmVxID0gZnJlcV90YlsoaW50KSBzZC0+c2Vuc29yXVtpXTsKKwlpZiAobW9kZSkKKwkJaSsrOwkJCS8qIDMyMHgyNDAgKi8KKwl6YzNfZnJlcSA9IGZyZXFfdGJbc2QtPnNlbnNvcl1baV07CiAJaWYgKHpjM19mcmVxICE9IE5VTEwpIHsKIAkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgemMzX2ZyZXEpOwogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTYyOTcsNiArNjI0OSw5IEBACiAJCQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDQ0LCAweDAwMDIpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgU0VOU09SX1BBUzIwMkI6CisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMCwgMHgwMWE3KTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtNjMwNSw3ICs2MjYwLDcgQEAKIHN0YXRpYyB2b2lkIHNldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBhdXRvdmFsOworCXU4IGF1dG92YWw7CiAKIAlpZiAoc2QtPmF1dG9nYWluKQogCQlhdXRvdmFsID0gMHg0MjsKQEAgLTYzMzMsNiArNjI4OCwxMiBAQAogCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKKwkJcmVnX3coZGV2LCAweDAzLCAweDAwM2IpOworCQlyZWdfdyhkZXYsIDB4MGMsIDB4MDAzYSk7CisJCXJlZ193KGRldiwgMHgwYiwgMHgwMDM5KTsKKwkJcmVnX3coZGV2LCAweDBiLCAweDAwMzgpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTYzNDksNyArNjMxMCw3IEBACiAKIHN0YXRpYyBpbnQgc2lmX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IGNoZWNrd29yZDsKIAogCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYtPmRldiwgMHgwZik7CQkvKiBQQVMxMDYgKi8KIAlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwOCwgMHgwMDhkKTsKQEAgLTYzOTIsNiArNjM1Myw3IEBACiAJfQogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwOCk7CQkvKiBIRENTMjAyMCAqLworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MWMsIDB4MDAsIDB4MDApOwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTUsIDB4YWEsIDB4MDApOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOwogCWlmIChyZXR3b3JkICE9IDApCkBAIC02NDIwLDggKzYzODIsMTAgQEAKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAzLCAweGFhLCAweDAwKTsKIAltc2xlZXAoNTApOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDMpOwotCWlmIChyZXR3b3JkICE9IDApCisJaWYgKHJldHdvcmQgIT0gMCkgeworCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfUEFTMjAyQik7CiAJCXJldHVybiAweDBlOwkJCS8qIFBBUzIwMkJDQiAqLworCX0KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDIpOwkJLyogVEFTNTEzMEMgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKQEAgLTY0NTcsOCArNjQyMSw4IEBACiB9CiAKIHN0cnVjdCBzZW5zb3JfYnlfY2hpcHNldF9yZXZpc2lvbiB7Ci0JX191MTYgcmV2aXNpb247Ci0JX191OCBpbnRlcm5hbF9zZW5zb3JfaWQ7CisJdTE2IHJldmlzaW9uOworCXU4IGludGVybmFsX3NlbnNvcl9pZDsKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9ieV9jaGlwc2V0X3JldmlzaW9uIGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW10gPSB7CiAJezB4YzAwMCwgMHgxMn0sCQkvKiBUQVM1MTMwQyAqLwpAQCAtNjQ2Nyw2ICs2NDMxLDcgQEAKIAl7MHg4MDAxLCAweDEzfSwKIAl7MHg4MDAwLCAweDE0fSwJCS8qIENTMjEwMksgKi8KIAl7MHg4NDAwLCAweDE1fSwJCS8qIFRBUzUxMzBLICovCisJezB4ZTQwMCwgMHgxNX0sCiB9OwogCiBzdGF0aWMgaW50IHZnYV8zd3JfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNjQ3NCw3ICs2NDM5LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwotCV9fdTggcmV0Ynl0ZTsKKwl1OCByZXRieXRlOwogCXUxNiByZXR3b3JkOwogCiAvKmZpeG1lOiBsYWNrIG9mIDhiPWIzICgxMSwxMiktPiAxMCwgOGI9ZTAgKDE0LDE1LDE2KS0+IDEyIGZvdW5kIGluIGdzcGNhdjEqLwpAQCAtNjYyMiw4ICs2NTg3LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCWludCBzZW5zb3I7Ci0JaW50IHZnYSA9IDE7CQkvKiAxOiB2Z2EsIDA6IHNpZiAqLwotCXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hW1NFTlNPUl9NQVhdID0geworCXN0YXRpYyBjb25zdCB1OCBnYW1tYVtTRU5TT1JfTUFYXSA9IHsKIAkJNCwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KIAkJNCwJLyogU0VOU09SX0NTMjEwMiAxICovCiAJCTUsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KQEAgLTY2NDQsOSArNjYwOCwzMCBAQAogCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwogCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCiAJfTsKKwlzdGF0aWMgY29uc3QgdTggbW9kZV90YltTRU5TT1JfTUFYXSA9IHsKKwkJMiwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJMSwJLyogU0VOU09SX0NTMjEwMiAxICovCisJCTEsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KKwkJMSwJLyogU0VOU09SX0dDMDMwNSAzICovCisJCTEsCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQkxLAkvKiBTRU5TT1JfSFY3MTMxQiA1ICovCisJCTEsCS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KKwkJMSwJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQkyLAkvKiBTRU5TT1JfTUM1MDFDQiA4ICovCisJCTEsCS8qIFNFTlNPUl9NSTAzNjBTT0MgOSAqLworCQkyLAkvKiBTRU5TT1JfT1Y3NjIwIDEwICovCisJCTEsCS8qIFNFTlNPUl9PVjc2MzBDIDExICovCisJCTAsCS8qIFNFTlNPUl9QQVMxMDYgMTIgKi8KKwkJMSwJLyogU0VOU09SX1BBUzIwMkIgMTMgKi8KKwkJMSwJLyogU0VOU09SX1BCMDMzMCAxNCAqLworCQkxLAkvKiBTRU5TT1JfUE8yMDMwIDE1ICovCisJCTEsCS8qIFNFTlNPUl9UQVM1MTMwQ0sgMTYgKi8KKwkJMSwJLyogU0VOU09SX1RBUzUxMzBDWFggMTcgKi8KKwkJMSwJLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxOCAqLworCX07CiAKIAkvKiBkZWZpbmUgc29tZSBzZW5zb3JzIGZyb20gdGhlIHZlbmRvci9wcm9kdWN0ICovCi0Jc2QtPnNoYXJwbmVzcyA9IDI7CisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKIAlzZW5zb3IgPSB6Y3h4X3Byb2JlU2Vuc29yKGdzcGNhX2Rldik7CiAJaWYgKHNlbnNvciA+PSAwKQpAQCAtNjY3MSw4ICs2NjU2LDIxIEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAwOgotCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFCIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUI7CisJCQkvKiBjaGVjayB0aGUgc2Vuc29yIHR5cGUgKi8KKwkJCXNlbnNvciA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBodjcxMzEgdHlwZSAlZCIsIHNlbnNvcik7CisJCQlzd2l0Y2ggKHNlbnNvcikgeworCQkJY2FzZSAwOgkJCS8qIGh2NzEzMWIgKi8KKwkJCWNhc2UgMToJCQkvKiBodjcxMzFlICovCisJCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFCIik7CisJCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFCOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKy8qCQkJY2FzZSAyOgkJCSAqIGh2NzEzMXIgKi8KKwkJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEhWNzEzMVIoYykiKTsKKwkJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUM7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgogCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgVEFTNTEzMEMiKTsKQEAgLTY2OTksMTIgKzY2OTcsMTEgQEAKIAkJY2FzZSAweDBlOgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQQVMyMDJCIik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX1BBUzIwMkI7Ci0JCQlzZC0+c2hhcnBuZXNzID0gMTsKKy8qCQkJc2QtPnNoYXJwbmVzcyA9IDE7ICovCiAJCQlicmVhazsKIAkJY2FzZSAweDBmOgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQQVMxMDYiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUEFTMTA2OwotCQkJdmdhID0gMDsJCS8qIFNJRiAqLwogCQkJYnJlYWs7CiAJCWNhc2UgMHgxMDoKIAkJY2FzZSAweDEyOgpAQCAtNjc3MCwzMSArNjc2NywzOCBAQAogCWlmIChzZW5zb3IgPCAweDIwKSB7CiAJCWlmIChzZW5zb3IgPT0gLTEgfHwgc2Vuc29yID09IDB4MTAgfHwgc2Vuc29yID09IDB4MTIpCiAJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMiwgMHgwMDEwKTsKLQkJZWxzZQotCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIHNlbnNvciAmIDB4MGYsIDB4MDAxMCk7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEwKTsKIAl9CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAvKmZpeG1lOnRlc3QqLwogCWdzcGNhX2Rldi0+bmJhbHQtLTsKLQlpZiAodmdhKSB7Ci0JCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKLQl9IGVsc2UgeworCXN3aXRjaCAobW9kZV90YltzZC0+c2Vuc29yXSkgeworCWNhc2UgMDoKIAkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOworCQlicmVhazsKKwljYXNlIDE6CisJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgMjogKi8KKwkJY2FtLT5jYW1fbW9kZSA9IGJyb2tlbl92Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKGJyb2tlbl92Z2FfbW9kZSk7CisJCWJyZWFrOwogCX0KLQlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmdhbW1hID0gZ2FtbWFbKGludCkgc2QtPnNlbnNvcl07Ci0Jc2QtPmF1dG9nYWluID0gc2RfY3RybHNbU0RfQVVUT0dBSU5dLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmxpZ2h0ZnJlcSA9IHNkX2N0cmxzW1NEX0ZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmdhbW1hID0gZ2FtbWFbc2QtPnNlbnNvcl07CisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKIAlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX09WNzYyMDoKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEJSSUdIVE5FU1NfSURYKTsKIAkJYnJlYWs7CkBAIC02ODA1LDE0ICs2ODA5LDEzIEBACiAJCWJyZWFrOwogCX0KIAotCS8qIHN3aXRjaCB0aGUgbGVkIG9mZiAqLwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDAxLCAweDAwMDApOwogCXJldHVybiAwOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJLyogc3dpdGNoIG9mZiB0aGUgbGVkICovCiAJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDEsIDB4MDAwMCk7CiAJcmV0dXJuIDA7CiB9CkBAIC02ODIxLDI4ICs2ODI0LDI3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQljb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqemMzX2luaXQ7CiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICppbml0X3RiW1NFTlNPUl9NQVhdWzJdID0gewogCQl7YWRjbTI3MDBfSW5pdGlhbCwgYWRjbTI3MDBfSW5pdGlhbFNjYWxlfSwJLyogMCAqLwotCQl7Y3MyMTAyX0luaXRpYWxTY2FsZSwgY3MyMTAyX0luaXRpYWx9LAkJLyogMSAqLwotCQl7Y3MyMTAyS19Jbml0aWFsU2NhbGUsIGNzMjEwMktfSW5pdGlhbH0sCS8qIDIgKi8KKwkJe2NzMjEwMl9Jbml0aWFsLCBjczIxMDJfSW5pdGlhbFNjYWxlfSwJCS8qIDEgKi8KKwkJe2NzMjEwMktfSW5pdGlhbCwgY3MyMTAyS19Jbml0aWFsU2NhbGV9LAkvKiAyICovCiAJCXtnYzAzMDVfSW5pdGlhbCwgZ2MwMzA1X0luaXRpYWxTY2FsZX0sCQkvKiAzICovCi0JCXtoZGNzMjAyMHhiX0luaXRpYWxTY2FsZSwgaGRjczIwMjB4Yl9Jbml0aWFsfSwJLyogNCAqLwotCQl7aHY3MTMxYnh4X0luaXRpYWxTY2FsZSwgaHY3MTMxYnh4X0luaXRpYWx9LAkvKiA1ICovCi0JCXtodjcxMzFjeHhfSW5pdGlhbFNjYWxlLCBodjcxMzFjeHhfSW5pdGlhbH0sCS8qIDYgKi8KLQkJe2ljbTEwNWF4eF9Jbml0aWFsU2NhbGUsIGljbTEwNWF4eF9Jbml0aWFsfSwJLyogNyAqLwotCQl7TUM1MDFDQl9Jbml0aWFsU2NhbGUsIE1DNTAxQ0JfSW5pdGlhbH0sCS8qIDggKi8KKwkJe2hkY3MyMDIwYl9Jbml0aWFsLCBoZGNzMjAyMGJfSW5pdGlhbFNjYWxlfSwJLyogNCAqLworCQl7aHY3MTMxYl9Jbml0aWFsLCBodjcxMzFiX0luaXRpYWxTY2FsZX0sCS8qIDUgKi8KKwkJe2h2NzEzMXJfSW5pdGlhbCwgaHY3MTMxcl9Jbml0aWFsU2NhbGV9LAkvKiA2ICovCisJCXtpY20xMDVhX0luaXRpYWwsIGljbTEwNWFfSW5pdGlhbFNjYWxlfSwJLyogNyAqLworCQl7bWM1MDFjYl9Jbml0aWFsLCBtYzUwMWNiX0luaXRpYWxTY2FsZX0sCS8qIDggKi8KIAkJe21pMDM2MHNvY19Jbml0aWFsLCBtaTAzNjBzb2NfSW5pdGlhbFNjYWxlfSwJLyogOSAqLwotCQl7T1Y3NjIwX21vZGUwLCBPVjc2MjBfbW9kZTF9LAkJCS8qIDEwICovCi0JCXtvdjc2MzBjX0luaXRpYWxTY2FsZSwgb3Y3NjMwY19Jbml0aWFsfSwJLyogMTEgKi8KLQkJe3BhczEwNmJfSW5pdGlhbFNjYWxlLCBwYXMxMDZiX0luaXRpYWx9LAkvKiAxMiAqLworCQl7b3Y3NjIwX0luaXRpYWwsIG92NzYyMF9Jbml0aWFsU2NhbGV9LAkJLyogMTAgKi8KKwkJe292NzYzMGNfSW5pdGlhbCwgb3Y3NjMwY19Jbml0aWFsU2NhbGV9LAkvKiAxMSAqLworCQl7cGFzMTA2Yl9Jbml0aWFsLCBwYXMxMDZiX0luaXRpYWxTY2FsZX0sCS8qIDEyICovCiAJCXtwYXMyMDJiX0luaXRpYWwsIHBhczIwMmJfSW5pdGlhbFNjYWxlfSwJLyogMTMgKi8KIAkJe3BiMDMzMF9Jbml0aWFsLCBwYjAzMzBfSW5pdGlhbFNjYWxlfSwJCS8qIDE0ICovCi0JCXtQTzIwMzBfbW9kZTAsIFBPMjAzMF9tb2RlMX0sCQkJLyogMTUgKi8KLQkJe3RhczUxMzBDS19Jbml0aWFsU2NhbGUsIHRhczUxMzBDS19Jbml0aWFsfSwJLyogMTYgKi8KKwkJe3BvMjAzMF9Jbml0aWFsLCBwbzIwMzBfSW5pdGlhbFNjYWxlfSwJCS8qIDE1ICovCisJCXt0YXM1MTMwY0tfSW5pdGlhbCwgdGFzNTEzMGNLX0luaXRpYWxTY2FsZX0sCS8qIDE2ICovCiAJCXt0YXM1MTMwY3h4X0luaXRpYWwsIHRhczUxMzBjeHhfSW5pdGlhbFNjYWxlfSwJLyogMTcgKi8KLQkJe3RhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGUsIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsfSwKKwkJe3RhczUxMzBjX3ZmMDI1MF9Jbml0aWFsLCB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlfSwKIAkJCQkJCQkJLyogMTggKi8KIAl9OwogCkBAIC02ODU0LDggKzY4NTYsNyBAQAogCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLwogCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CiAKLQltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0JemMzX2luaXQgPSBpbml0X3RiWyhpbnQpIHNkLT5zZW5zb3JdW21vZGVdOworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9IVjcxMzFDOgogCQl6Y3h4X3Byb2JlU2Vuc29yKGdzcGNhX2Rldik7CkBAIC02ODY0LDcgKzY4NjUsNyBAQAogCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwYXMxMDZiX0luaXRpYWxfY29tKTsKIAkJYnJlYWs7CiAJfQotCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19pbml0KTsKKwl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0X3RiW3NkLT5zZW5zb3JdW21vZGVdKTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0FEQ00yNzAwOgpAQCAtNjg4Myw2ICs2ODg0LDExIEBACiAJCXJlZ193KGRldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgorCQlyZWdfdyhkZXYsIDB4MDMsIDB4MDAzYik7CisJCXJlZ193KGRldiwgMHgwYywgMHgwMDNhKTsKKwkJcmVnX3coZGV2LCAweDBiLCAweDAwMzkpOworCQlicmVhazsKIAl9CiAKIAlzZXRtYXRyaXgoZ3NwY2FfZGV2KTsKQEAgLTY5NjEsMTMgKzY5NjcsMTMgQEAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9QTzIwMzA6CiAJCW1zbGVlcCg1MCk7Ci0JCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDcpOwotCQkvKmZhbGwgdGhydSovCi0JY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMDcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfdyhkZXYsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKKwkJcmVnX3coZGV2LCAweDMyLCAweDAwMDcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfdyhkZXYsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzE2NSw2ICs3MTcxLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJycHV0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpZiAobGVuID09IDggJiYgZGF0YVs0XSA9PSAxKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCkBAIC03MTc3LDYgKzcxOTksOSBAQAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCiAJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKIAkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCA1MWYzOTNkLi4yZmM5ODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtMzksMTIgKzM5LDEyIEBACiBtb2R1bGVfcGFyYW0oaGRwdnJfZGVidWcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoaGRwdnJfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIG91dHB1dCIpOwogCi11aW50IGRlZmF1bHRfdmlkZW9faW5wdXQgPSBIRFBWUl9WSURFT19JTlBVVFM7CitzdGF0aWMgdWludCBkZWZhdWx0X3ZpZGVvX2lucHV0ID0gSERQVlJfVklERU9fSU5QVVRTOwogbW9kdWxlX3BhcmFtKGRlZmF1bHRfdmlkZW9faW5wdXQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfdmlkZW9faW5wdXQsICJkZWZhdWx0IHZpZGVvIGlucHV0OiAwPUNvbXBvbmVudCAvICIKIAkJICIxPVMtVmlkZW8gLyAyPUNvbXBvc2l0ZSIpOwogCi11aW50IGRlZmF1bHRfYXVkaW9faW5wdXQgPSBIRFBWUl9BVURJT19JTlBVVFM7CitzdGF0aWMgdWludCBkZWZhdWx0X2F1ZGlvX2lucHV0ID0gSERQVlJfQVVESU9fSU5QVVRTOwogbW9kdWxlX3BhcmFtKGRlZmF1bHRfYXVkaW9faW5wdXQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfYXVkaW9faW5wdXQsICJkZWZhdWx0IGF1ZGlvIGlucHV0OiAwPVJDQSBiYWNrIC8gIgogCQkgIjE9UkNBIGZyb250IC8gMj1TL1BESUYiKTsKQEAgLTU5LDYgKzU5LDcgQEAKIAl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKEhEX1BWUl9WRU5ET1JfSUQsIEhEX1BWUl9QUk9EVUNUX0lEMSkgfSwKIAl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQyKSB9LAorCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRDMpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBoZHB2cl90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKaW5kZXggZmRkNzgyMC4uMTk2ZjgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwpAQCAtMzAyLDcgKzMwMiw4IEBACiAvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KIHN0YXRpYyBpbnQgaGRwdnJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQogewotCXVpbnQgYWN0dWFsX2xlbmd0aCwgYyA9IDA7CisJaW50IGFjdHVhbF9sZW5ndGg7CisJdWludCBjID0gMDsKIAl1OCAqYnVmOwogCiAJaWYgKGRldi0+c3RhdHVzID09IFNUQVRVU19JRExFKQpAQCAtNTcyLDcgKzU3Myw3IEBACiAJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN0cmNweShjYXAtPmRyaXZlciwgImhkcHZyIik7Ci0Jc3RyY3B5KGNhcC0+Y2FyZCwgIkhhdXBhdWdlIEhEIFBWUiIpOworCXN0cmNweShjYXAtPmNhcmQsICJIYXVwcGF1Z2UgSEQgUFZSIik7CiAJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT52ZXJzaW9uID0gSERQVlJfVkVSU0lPTjsKIAljYXAtPmNhcGFiaWxpdGllcyA9ICAgICBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAppbmRleCAxZWRkODc1Li40OWFlMjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lECTB4NDkwMAogI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRDEJMHg0OTAxCiAjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lEMgkweDQ5MDIKKyNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQzCTB4NDk4MgogCiAjZGVmaW5lIFVOU0VUICAgICgtMVUpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKaW5kZXggNjBkOTkyZS4uZTYyMGEzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKQEAgLTM1Miw5ICszNTIsMTMgQEAKIHN0YXRpYyBpbnQgaGV4aXVtX2F0dGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfcGNpX2V4dGVuc2lvbl9kYXRhICppbmZvKQogewogCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisJaW50IHJldDsKIAogCURFQl9FRSgoIi5cbiIpKTsKIAorCXJldCA9IHNhYTcxNDZfdnZfZGV2aW5pdChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAJaGV4aXVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhleGl1bSksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGhleGl1bSkgewogCQlwcmludGsoImhleGl1bV9nZW1pbmk6IG5vdCBlbm91Z2gga2VybmVsIG1lbW9yeSBpbiBoZXhpdW1fYXR0YWNoKCkuXG4iKTsKQEAgLTQwMCw5ICs0MDQsMTAgQEAKIAl2dl9kYXRhLm9wcy52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0OwogCXZ2X2RhdGEub3BzLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQ7CiAJdnZfZGF0YS5vcHMudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dDsKLQlpZiAoMCAhPSBzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmaGV4aXVtLT52aWRlb19kZXYsIGRldiwgImhleGl1bSBnZW1pbmkiLCBWRkxfVFlQRV9HUkFCQkVSKSkgeworCXJldCA9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZoZXhpdW0tPnZpZGVvX2RldiwgZGV2LCAiaGV4aXVtIGdlbWluaSIsIFZGTF9UWVBFX0dSQUJCRVIpOworCWlmIChyZXQgPCAwKSB7CiAJCXByaW50aygiaGV4aXVtX2dlbWluaTogY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlwcmludGsoImhleGl1bV9nZW1pbmk6IGZvdW5kICdoZXhpdW0gZ2VtaW5pJyBmcmFtZSBncmFiYmVyLSVkLlxuIiwgaGV4aXVtX251bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYwppbmRleCA5MzhhMWY4Li5mZTU5NmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKQEAgLTIxNiw2ICsyMTYsMTAgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCisJZXJyID0gc2FhNzE0Nl92dl9kZXZpbml0KGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWhleGl1bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZXhpdW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoTlVMTCA9PSBoZXhpdW0pIHsKIAkJcHJpbnRrKCJoZXhpdW1fb3Jpb246IGhleGl1bV9wcm9iZTogbm90IGVub3VnaCBrZXJuZWwgbWVtb3J5LlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IGI4NmUzNTMuLmRhMThkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gTlVMTDsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKLQlpbnQgaXJfdHlwZSA9IDA7CisJdTY0IGlyX3R5cGUgPSAwOwogCXN0cnVjdCBJUl9pMmMgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CkBAIC0zMzEsNiArMzMxLDcgQEAKIAkJaXJfY29kZXMgICAgPSAmaXJfY29kZXNfcHY5NTFfdGFibGU7CiAJCWJyZWFrOwogCWNhc2UgMHgxODoKKwljYXNlIDB4MWY6CiAJY2FzZSAweDFhOgogCQluYW1lICAgICAgICA9ICJIYXVwcGF1Z2UiOwogCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfaGF1cDsKQEAgLTQ0Niw3ICs0NDcsNyBAQAogCWlucHV0X2Rldi0+bmFtZSAgICAgICA9IGlyLT5uYW1lOwogCWlucHV0X2Rldi0+cGh5cyAgICAgICA9IGlyLT5waHlzOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBpci0+aXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXItPmlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKaW5kZXggNzlkMGZlNC4uY2ExZmQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCkBAIC0xMjEwLDYgKzEyMTAsNTMgQEAKIAkuaTJjID0gJml2dHZfaTJjX3N0ZCwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFNvbnkgS2lreW91ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkX3BjaV9pbmZvIGl2dHZfcGNpX2tpa3lvdVtdID0geworCXsgUENJX0RFVklDRV9JRF9JVlRWMTYsIElWVFZfUENJX0lEX1NPTlksIDB4ODEzZCB9LAorCXsgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl2dHZfY2FyZCBpdnR2X2NhcmRfa2lreW91ID0geworCS50eXBlID0gSVZUVl9DQVJEX0tJS1lPVSwKKwkubmFtZSA9ICJTb255IFZBSU8gR2lnYSBQb2NrZXQgKEVOWCBLaWt5b3UpIiwKKwkudjRsMl9jYXBhYmlsaXRpZXMgPSBJVlRWX0NBUF9FTkNPREVSLAorCS5od192aWRlbyA9IElWVFZfSFdfU0FBNzExNSwKKwkuaHdfYXVkaW8gPSBJVlRWX0hXX0dQSU8sCisJLmh3X2F1ZGlvX2N0cmwgPSBJVlRWX0hXX0dQSU8sCisJLmh3X2FsbCA9IElWVFZfSFdfR1BJTyB8IElWVFZfSFdfU0FBNzExNSB8IElWVFZfSFdfVFVORVIsCisJLnZpZGVvX2lucHV0cyA9IHsKKwl7IElWVFZfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBJVlRWX1NBQTcxWFhfQ09NUE9TSVRFMSB9LAorCXsgSVZUVl9DQVJEX0lOUFVUX0NPTVBPU0lURTEsIDEsIElWVFZfU0FBNzFYWF9DT01QT1NJVEUxIH0sCisJeyBJVlRWX0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwgSVZUVl9TQUE3MVhYX1NWSURFTzEgfSwKKwl9LAorCS5hdWRpb19pbnB1dHMgPSB7CisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9BVURfVFVORVIsICBJVlRWX0dQSU9fVFVORVIgfSwKKwkgICAgIHsgSVZUVl9DQVJEX0lOUFVUX0xJTkVfSU4xLCAgIElWVFZfR1BJT19MSU5FX0lOIH0sCisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9MSU5FX0lOMiwgICBJVlRWX0dQSU9fTElORV9JTiB9LAorCX0sCisJLmdwaW9faW5pdCA9IHsgLmRpcmVjdGlvbiA9IDB4MDNlMSwgLmluaXRpYWxfdmFsdWUgPSAweDAzMjAgfSwKKwkuZ3Bpb19hdWRpb19pbnB1dCA9IHsgLm1hc2sgICA9IDB4MDA2MCwKKwkJCSAgICAgIC50dW5lciAgPSAweDAwMjAsCisJCQkgICAgICAubGluZWluID0gMHgwMDAwLAorCQkJICAgICAgLnJhZGlvICA9IDB4MDA2MCB9LAorCS5ncGlvX2F1ZGlvX211dGUgID0geyAubWFzayA9IDB4MDAwMCwKKwkJCSAgICAgIC5tdXRlID0gMHgwMDAwIH0sIC8qIDB4MjAwPyBEaXNhYmxlIGZvciBub3cuICovCisJLmdwaW9fYXVkaW9fbW9kZSAgPSB7IC5tYXNrICAgPSAweDAwODAsCisJCQkgICAgICAubW9ubyAgID0gMHgwMDAwLAorCQkJICAgICAgLnN0ZXJlbyA9IDB4MDAwMCwgLyogU0FQICovCisJCQkgICAgICAubGFuZzEgID0gMHgwMDgwLAorCQkJICAgICAgLmxhbmcyICA9IDB4MDAwMCwKKwkJCSAgICAgIC5ib3RoICAgPSAweDAwODAgfSwKKwkudHVuZXJzID0geworCSAgICAgeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9TT05ZX0JURl9QWE4wMVogfSwKKwl9LAorCS5wY2lfbGlzdCA9IGl2dHZfcGNpX2tpa3lvdSwKKwkuaTJjID0gJml2dHZfaTJjX3N0ZCwKK307CisKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpdnR2X2NhcmQgKml2dHZfY2FyZF9saXN0W10gPSB7CiAJJml2dHZfY2FyZF9wdnIyNTAsCiAJJml2dHZfY2FyZF9wdnIzNTAsCkBAIC0xMjM4LDYgKzEyODUsNyBAQAogCSZpdnR2X2NhcmRfYXZlcl9tMTA0LAogCSZpdnR2X2NhcmRfYnVmZmFsbywKIAkmaXZ0dl9jYXJkX2F2ZXJfdWx0cmExNTAwbWNlLAorCSZpdnR2X2NhcmRfa2lreW91LAogCiAJLyogVmFyaWF0aW9ucyBvZiBzdGFuZGFyZCBjYXJkcyBidXQgd2l0aCB0aGUgc2FtZSBQQ0kgSURzLgogCSAgIFRoZXNlIGNhcmRzIG11c3QgY29tZSBsYXN0IGluIHRoaXMgbGlzdC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCmluZGV4IDYxNDg4MjcuLjc4ZWNhOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaApAQCAtNTEsNyArNTEsOCBAQAogI2RlZmluZSBJVlRWX0NBUkRfQVZFUl9NMTA0ICAgICAgICAgIDI0IC8qIEF2ZXJNZWRpYSBNMTA0IG1pbmlQQ0kgY2FyZCAqLwogI2RlZmluZSBJVlRWX0NBUkRfQlVGRkFMT19NVjVMICAgICAgIDI1IC8qIEJ1ZmZhbG8gUEMtTVY1TC9QQ0kgY2FyZCAqLwogI2RlZmluZSBJVlRWX0NBUkRfQVZFUl9VTFRSQTE1MDBNQ0UgIDI2IC8qIEFWZXJNZWRpYSBVbHRyYVRWIDE1MDAgTUNFICovCi0jZGVmaW5lIElWVFZfQ0FSRF9MQVNUIAkJICAgICAyNgorI2RlZmluZSBJVlRWX0NBUkRfS0lLWU9VICAgICAgICAgICAgIDI3IC8qIFNvbnkgVkFJTyBHaWdhIFBvY2tldCAoRU5YIEtpa3lvdSkgKi8KKyNkZWZpbmUgSVZUVl9DQVJEX0xBU1QgCQkgICAgIDI3CiAKIC8qIFZhcmlhbnRzIG9mIGV4aXN0aW5nIGNhcmRzIGJ1dCB3aXRoIHRoZSBzYW1lIFBDSSBJRHMuIFRoZSBkcml2ZXIKICAgIGRldGVjdHMgdGhlc2UgYmFzZWQgb24gb3RoZXIgZGV2aWNlIGluZm9ybWF0aW9uLgpAQCAtODYsNiArODcsNyBAQAogI2RlZmluZSBJVlRWX1BDSV9JRF9NRUxDTyAJCTB4MTE1NAogI2RlZmluZSBJVlRWX1BDSV9JRF9HT1RWSUVXMQkJMHhmZmFjCiAjZGVmaW5lIElWVFZfUENJX0lEX0dPVFZJRVcyIAkJMHhmZmFkCisjZGVmaW5lIElWVFZfUENJX0lEX1NPTlkgCQkweDEwNGQKIAogLyogaGFyZHdhcmUgZmxhZ3MsIG5vIGdhcHMgYWxsb3dlZCAqLwogI2RlZmluZSBJVlRWX0hXX0NYMjU4NDAJCQkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwppbmRleCAzNDdjMzM0Li45YTI1MDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwpAQCAtMTkzLDYgKzE5Myw3IEBACiAJCSAiXHRcdFx0MjUgPSBBdmVyTWVkaWEgTTEwNCAobm90IHlldCB3b3JraW5nKVxuIgogCQkgIlx0XHRcdDI2ID0gQnVmZmFsbyBQQy1NVjVML1BDSVxuIgogCQkgIlx0XHRcdDI3ID0gQVZlck1lZGlhIFVsdHJhVFYgMTUwMCBNQ0VcbiIKKwkJICJcdFx0XHQyOCA9IFNvbnkgVkFJTyBHaWdhIFBvY2tldCAoRU5YIEtpa3lvdSlcbiIKIAkJICJcdFx0XHQgMCA9IEF1dG9kZXRlY3QgKGRlZmF1bHQpXG4iCiAJCSAiXHRcdFx0LTEgPSBJZ25vcmUgdGhpcyBjYXJkXG5cdFx0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBhbCwgIlNldCBQQUwgc3RhbmRhcmQ6IEJHSCwgREssIEksIE0sIE4sIE5jLCA2MCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKaW5kZXggYzFiN2VjNC4uYTcxZThiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkJSVZUVl9FUlIoIml2dHZfaW5pdF9tcGVnX2RlY29kZXIgZmFpbGVkIHRvIHN0YXJ0IHBsYXliYWNrXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5kZWNfbWJveCwgSVZUVl9NQk9YX0RNQSwgZGF0YSk7CisJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIDIsIGRhdGEpOwogCW1lbV9vZmZzZXQgPSBpdHYtPmRlY19tZW0gKyBkYXRhWzFdOwogCiAJaWYgKChyZWFkYnl0ZXMgPSBsb2FkX2Z3X2RpcmVjdChJVlRWX0RFQ09ERV9JTklUX01QRUdfRklMRU5BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCmluZGV4IGNkOWRiMGIuLjEyZDM2Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCkBAIC01NjIsNyArNTYyLDcgQEAKIAl1MzIgZGF0YVtDWDIzNDFYX01CT1hfTUFYX0RBVEFdOwogCXN0cnVjdCBpdnR2X3N0cmVhbSAqczsKIAotCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BX0VORCwgZGF0YSk7CisJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUFfRU5ELCAyLCBkYXRhKTsKIAlJVlRWX0RFQlVHX0hJX0lSUSgiRU5DIERNQSBDT01QTEVURSAleCAlZCAoJWQpXG4iLCBkYXRhWzBdLCBkYXRhWzFdLCBpdHYtPmN1cl9kbWFfc3RyZWFtKTsKIAogCWRlbF90aW1lcigmaXR2LT5kbWFfdGltZXIpOwpAQCAtNjM4LDcgKzYzOCw3IEBACiAJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKIAogCWRlbF90aW1lcigmaXR2LT5kbWFfdGltZXIpOwotCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BX0VORCwgZGF0YSk7CisJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUFfRU5ELCAyLCBkYXRhKTsKIAlJVlRWX0RFQlVHX1dBUk4oIkRNQSBFUlJPUiAlMDh4ICUwOHggJTA4eCAlZFxuIiwgZGF0YVswXSwgZGF0YVsxXSwKIAkJCQlyZWFkX3JlZyhJVlRWX1JFR19ETUFTVEFUVVMpLCBpdHYtPmN1cl9kbWFfc3RyZWFtKTsKIAl3cml0ZV9yZWcocmVhZF9yZWcoSVZUVl9SRUdfRE1BU1RBVFVTKSAmIDMsIElWVFZfUkVHX0RNQVNUQVRVUyk7CkBAIC02NjksNyArNjY5LDcgQEAKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnM7CiAKIAkvKiBHZXQgRE1BIGRlc3RpbmF0aW9uIGFuZCBzaXplIGFyZ3VtZW50cyBmcm9tIGNhcmQgKi8KLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQSwgZGF0YSk7CisJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUEsIDcsIGRhdGEpOwogCUlWVFZfREVCVUdfSElfSVJRKCJFTkMgU1RBUlQgQ0FQICVkOiAlMDh4ICUwOHhcbiIsIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0pOwogCiAJaWYgKGRhdGFbMF0gPiAyIHx8IGRhdGFbMV0gPT0gMCB8fCBkYXRhWzJdID09IDApIHsKQEAgLTcxMyw5ICs3MTMsOSBAQAogCXN0cnVjdCBpdnR2X3N0cmVhbSAqczsKIAogCS8qIFlVViBvciBNUEcgKi8KLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5kZWNfbWJveCwgSVZUVl9NQk9YX0RNQSwgZGF0YSk7CiAKIAlpZiAodGVzdF9iaXQoSVZUVl9GX0lfREVDX1lVViwgJml0di0+aV9mbGFncykpIHsKKwkJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIDIsIGRhdGEpOwogCQlpdHYtPmRtYV9kYXRhX3JlcV9zaXplID0KIAkJCQkgMTA4MCAqICgoaXR2LT55dXZfaW5mby52NGwyX3NyY19oICsgMzEpICYgfjMxKTsKIAkJaXR2LT5kbWFfZGF0YV9yZXFfb2Zmc2V0ID0gZGF0YVsxXTsKQEAgLTcyNCw2ICs3MjQsNyBAQAogCQlzID0gJml0di0+c3RyZWFtc1tJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVZdOwogCX0KIAllbHNlIHsKKwkJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIDMsIGRhdGEpOwogCQlpdHYtPmRtYV9kYXRhX3JlcV9zaXplID0gbWluX3QodTMyLCBkYXRhWzJdLCAweDEwMDAwKTsKIAkJaXR2LT5kbWFfZGF0YV9yZXFfb2Zmc2V0ID0gZGF0YVsxXTsKIAkJcyA9ICZpdHYtPnN0cmVhbXNbSVZUVl9ERUNfU1RSRUFNX1RZUEVfTVBHXTsKQEAgLTk0MCw5ICs5NDEsMTAgQEAKIAkJCQlpdnR2X2RtYV9lbmNfc3RhcnQocyk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoaSA9PSBJVlRWX01BWF9TVFJFQU1TICYmIHRlc3RfYW5kX2NsZWFyX2JpdChJVlRWX0ZfSV9VRE1BX1BFTkRJTkcsICZpdHYtPmlfZmxhZ3MpKSB7CisKKwkJaWYgKGkgPT0gSVZUVl9NQVhfU1RSRUFNUyAmJgorCQkgICAgdGVzdF9iaXQoSVZUVl9GX0lfVURNQV9QRU5ESU5HLCAmaXR2LT5pX2ZsYWdzKSkKIAkJCWl2dHZfdWRtYV9zdGFydChpdHYpOwotCQl9CiAJfQogCiAJaWYgKChjb21ibyAmIElWVFZfSVJRX0RNQSkgJiYgIXRlc3RfYml0KElWVFZfRl9JX1BJTywgJml0di0+aV9mbGFncykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guYwppbmRleCAxYjVjMGFjLi44NDU3N2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5jCkBAIC0zNjksMTAgKzM2OSwxMSBAQAogfQogCiAvKiBUaGlzIG9uZSBpcyBmb3Igc3R1ZmYgdGhhdCBjYW4ndCBzbGVlcC4uIGlycSBoYW5kbGVycywgZXRjLi4gKi8KLXZvaWQgaXZ0dl9hcGlfZ2V0X2RhdGEoc3RydWN0IGl2dHZfbWFpbGJveF9kYXRhICptYmRhdGEsIGludCBtYiwgdTMyIGRhdGFbXSkKK3ZvaWQgaXZ0dl9hcGlfZ2V0X2RhdGEoc3RydWN0IGl2dHZfbWFpbGJveF9kYXRhICptYmRhdGEsIGludCBtYiwKKwkJICAgICAgIGludCBhcmdjLCB1MzIgZGF0YVtdKQogeworCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpwID0gbWJkYXRhLT5tYm94W21iXS5kYXRhOwogCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IENYMjM0MVhfTUJPWF9NQVhfREFUQTsgaSsrKQotCQlkYXRhW2ldID0gcmVhZGwoJm1iZGF0YS0+bWJveFttYl0uZGF0YVtpXSk7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKywgcCsrKQorCQlkYXRhW2ldID0gcmVhZGwocCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmgKaW5kZXggNmVmMTIwOS4uODI0NzY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guaApAQCAtMjQsNyArMjQsOCBAQAogI2RlZmluZSBJVlRWX01CT1hfRE1BX0VORCAgICAgICAgIDgKICNkZWZpbmUgSVZUVl9NQk9YX0RNQSAgICAgICAgICAgICA5CiAKLXZvaWQgaXZ0dl9hcGlfZ2V0X2RhdGEoc3RydWN0IGl2dHZfbWFpbGJveF9kYXRhICptYm94LCBpbnQgbWIsIHUzMiBkYXRhW10pOwordm9pZCBpdnR2X2FwaV9nZXRfZGF0YShzdHJ1Y3QgaXZ0dl9tYWlsYm94X2RhdGEgKm1iZGF0YSwgaW50IG1iLAorCQkgICAgICAgaW50IGFyZ2MsIHUzMiBkYXRhW10pOwogaW50IGl2dHZfYXBpKHN0cnVjdCBpdnR2ICppdHYsIGludCBjbWQsIGludCBhcmdzLCB1MzIgZGF0YVtdKTsKIGludCBpdnR2X3ZhcGlfcmVzdWx0KHN0cnVjdCBpdnR2ICppdHYsIHUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV0sIGludCBjbWQsIGludCBhcmdzLCAuLi4pOwogaW50IGl2dHZfdmFwaShzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgY21kLCBpbnQgYXJncywgLi4uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCBlMTJjNjAyLi4xZjkzODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC01NzcsMTAgKzU3NywxNCBAQAogCQljbGVhcl9iaXQoSVZUVl9GX0lfRU9TLCAmaXR2LT5pX2ZsYWdzKTsKIAogCQkvKiBJbml0aWFsaXplIERpZ2l0aXplciBmb3IgQ2FwdHVyZSAqLworCQkvKiBBdm9pZCB0aW5ueSBhdWRpbyBwcm9ibGVtIC0gZW5zdXJlIGF1ZGlvIGNsb2NrcyBhcmUgZ29pbmcgKi8KKwkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBhdWRpbywgc19zdHJlYW0sIDEpOworCQkvKiBBdm9pZCB1bnByZWRpY3RhYmxlIFBDSSBidXMgaGFuZyAtIGRpc2FibGUgdmlkZW8gY2xvY2tzICovCiAJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfc3RyZWFtLCAwKTsKLQkJaXZ0dl9tc2xlZXBfdGltZW91dCgzMDAsIDEpOworCQlpdnR2X21zbGVlcF90aW1lb3V0KDE1MCwgMSk7CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX0lOSVRJQUxJWkVfSU5QVVQsIDApOwogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX3N0cmVhbSwgMSk7CisJCWl2dHZfbXNsZWVwX3RpbWVvdXQoMTUwLCAxKTsKIAl9CiAKIAkvKiBiZWdpbl9jYXB0dXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKaW5kZXggZDA3YWQ2Yy4uMWRhZjFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYwpAQCAtMjEzLDYgKzIxMyw3IEBACiAJd3JpdGVfcmVnX3N5bmMocmVhZF9yZWcoSVZUVl9SRUdfRE1BWEZFUikgfCAweDAxLCBJVlRWX1JFR19ETUFYRkVSKTsKIAlzZXRfYml0KElWVFZfRl9JX0RNQSwgJml0di0+aV9mbGFncyk7CiAJc2V0X2JpdChJVlRWX0ZfSV9VRE1BLCAmaXR2LT5pX2ZsYWdzKTsKKwljbGVhcl9iaXQoSVZUVl9GX0lfVURNQV9QRU5ESU5HLCAmaXR2LT5pX2ZsYWdzKTsKIH0KIAogdm9pZCBpdnR2X3VkbWFfcHJlcGFyZShzdHJ1Y3QgaXZ0diAqaXR2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQxMTIuYwppbmRleCBmYzRkZDYwLi43NDM4ZjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQxMTIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQxMTIuYwpAQCAtNTE0LDcgKzUxNCw3IEBACiAJLyogcG9sbCB0byB2ZXJpZnkgb3V0IG9mIHN0YW5kYnkuIE11c3QgUG9sbCB0aGlzIGJpdCAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewogCQltdDl0MTEyX3JlZ19yZWFkKGRhdGEsIGNsaWVudCwgMHgwMDE4KTsKLQkJaWYgKDB4NDAwMCAmIGRhdGEpCisJCWlmICghKDB4NDAwMCAmIGRhdGEpKQogCQkJYnJlYWs7CiAKIAkJbWRlbGF5KDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKaW5kZXggOTFkZjdlYy4uMWEzNGQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKQEAgLTI1NywxOSArMjU3LDE4IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDl2MDIyX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKLQl1bnNpZ25lZCBpbnQgd2lkdGhfZmxhZzsKLQotCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKLQkJd2lkdGhfZmxhZyA9IGljbC0+cXVlcnlfYnVzX3BhcmFtKGljbCkgJgotCQkJU09DQU1fREFUQVdJRFRIX01BU0s7Ci0JZWxzZQotCQl3aWR0aF9mbGFnID0gU09DQU1fREFUQVdJRFRIXzEwOwotCi0JcmV0dXJuIFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcgfAorCXVuc2lnbmVkIGludCBmbGFncyA9IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKKwkJU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fUENMS19TQU1QTEVfRkFMTElORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8Ci0JCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVIgfCBTT0NBTV9TTEFWRSB8Ci0JCXdpZHRoX2ZsYWc7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0g7CisKKwlpZiAoaWNsLT5xdWVyeV9idXNfcGFyYW0pCisJCWZsYWdzIHw9IGljbC0+cXVlcnlfYnVzX3BhcmFtKGljbCkgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKKwllbHNlCisJCWZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xMDsKKworCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBtdDl2MDIyX3NfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKaW5kZXggYzFmYzZkYy4uOWYwMWYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCkBAIC0xNjksNyArMTY5LDExIEBACiBzdGF0aWMgaW50IG14Yl9wcm9iZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbXhiICpteGIgPSBOVUxMOworCWludCBlcnI7CiAKKwllcnIgPSBzYWE3MTQ2X3Z2X2RldmluaXQoZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCW14YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGIpLCBHRlBfS0VSTkVMKTsKIAlpZiAobXhiID09IE5VTEwpIHsKIAkJREVCX0QoKCJub3QgZW5vdWdoIGtlcm5lbCBtZW1vcnkuXG4iKSk7CkBAIC0yOTQsNyArMjk4LDcgQEAKIAkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIHNhYTcxMTFhICovCiAJaSA9IDA7CiAJc2FhNzExMWFfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsIFNBQTcxMTVfQ09NUE9TSVRFMCwKLQkJU0FBNzExMV9GTVRfQ0NJUiB8IFNBQTcxMTFfVkJJX0JZUEFTUywgMCk7CisJCVNBQTcxMTFfRk1UX0NDSVIsIDApOwogCiAJLyogc2VsZWN0IGEgdHVuZXIgdHlwZSAqLwogCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKQEAgLTUxOCw4ICs1MjIsOCBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogc3dpdGNoIHZpZGVvIGluIHNhYTcxMTFhICovCi0JaWYgKHNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCBpLCAwLCAwKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3Mgc2FhNzExMWEgIzEuXG4iKTsKKwlpZiAoc2FhNzExMWFfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsIGksIFNBQTcxMTFfRk1UX0NDSVIsIDApKQorCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYS5cbiIpOwogCiAJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2Ugb25seSBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoMCA9PSBteGItPmN1cl9tdXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKaW5kZXggM2E0NWU5NC4uN2Y4ZWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCkBAIC01NDcsNyArNTQ3LDYgQEAKIAl9LAogfTsKIAotCiAvKgogICogZ2VuZXJhbCBmdW5jdGlvbgogICovCkBAIC02MzQsNyArNjMzLDEyIEBACiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX01BU1RFUiB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAotCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgcHJpdi0+aW5mby0+YnVzd2lkdGg7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0g7CisKKwlpZiAocHJpdi0+aW5mby0+ZmxhZ3MgJiBPVjc3MlhfRkxBR184QklUKQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfODsKKwllbHNlCisJCWZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xMDsKIAogCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KQEAgLTEwNDAsMTUgKzEwNDQsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qCi0JICogb3Y3NzJ4IG9ubHkgdXNlIDggb3IgMTAgYml0IGJ1cyB3aWR0aAotCSAqLwotCWlmIChTT0NBTV9EQVRBV0lEVEhfMTAgIT0gcHJpdi0+aW5mby0+YnVzd2lkdGggJiYKLQkgICAgU09DQU1fREFUQVdJRFRIXzggICE9IHByaXYtPmluZm8tPmJ1c3dpZHRoKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiYnVzIHdpZHRoIGVycm9yXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKIAkgKiBjaGVjayBhbmQgc2hvdyBwcm9kdWN0IElEIGFuZCBtYW51ZmFjdHVyZXIgSUQKIAkgKi8KIAlwaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBQSUQpOwpAQCAtMTEzMCw3ICsxMTI1LDYgQEAKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCiB7CiAJc3RydWN0IG92NzcyeF9wcml2ICAgICAgICAqcHJpdjsKLQlzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvICppbmZvOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAgICAqaWNsOwpAQCAtMTE0NSw4ICsxMTM5LDYgQEAKIAlpZiAoIWljbCB8fCAhaWNsLT5wcml2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWluZm8gPSBpY2wtPnByaXY7Ci0KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+ZGV2LAogCQkJIkkyQy1BZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCAiCkBAIC0xMTU4LDcgKzExNTAsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcml2LT5pbmZvID0gaW5mbzsKKwlwcml2LT5pbmZvID0gaWNsLT5wcml2OwogCiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgY2xpZW50LCAmb3Y3NzJ4X3N1YmRldl9vcHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCmluZGV4IGRlNTQ4NWYuLmNiNDA1N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCkBAIC0yMzMsOCArMjMzLDkgQEAKIAlpbnQgc3RhdGVfZW5jb2Rlcl93YWl0b2s7ICAgICAvKiBFbmNvZGVyIHByZS13YWl0IGRvbmUgKi8KIAlpbnQgc3RhdGVfZW5jb2Rlcl9ydW5vazsgICAgICAvKiBFbmNvZGVyIGhhcyBydW4gZm9yID49IC4yNSBzZWMgKi8KIAlpbnQgc3RhdGVfZGVjb2Rlcl9ydW47ICAgICAgICAvKiBEZWNvZGVyIGlzIHJ1bm5pbmcgKi8KKwlpbnQgc3RhdGVfZGVjb2Rlcl9yZWFkeTsgICAgICAvKiBEZWNvZGVyIGlzIHN0YWJpbGl6ZWQgJiBzdHJlYW1hYmxlICovCiAJaW50IHN0YXRlX3VzYnN0cmVhbV9ydW47ICAgICAgLyogRlgyIGlzIHN0cmVhbWluZyAqLwotCWludCBzdGF0ZV9kZWNvZGVyX3F1aWVzY2VudDsgIC8qIERlY29kZXIgaWRsZSBmb3IgPiA1MG1zZWMgKi8KKwlpbnQgc3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQ7ICAvKiBEZWNvZGVyIGlkbGUgZm9yIG1pbmltYWwgaW50ZXJ2YWwgKi8KIAlpbnQgc3RhdGVfcGlwZWxpbmVfY29uZmlnOyAgICAvKiBQaXBlbGluZSBpcyBjb25maWd1cmVkICovCiAJaW50IHN0YXRlX3BpcGVsaW5lX3JlcTsgICAgICAgLyogU29tZWJvZHkgd2FudHMgdG8gc3RyZWFtICovCiAJaW50IHN0YXRlX3BpcGVsaW5lX3BhdXNlOyAgICAgLyogUGlwZWxpbmUgbXVzdCBiZSBwYXVzZWQgKi8KQEAgLTI1NSw5ICsyNTYsMTYgQEAKIAl2b2lkICgqc3RhdGVfZnVuYykodm9pZCAqKTsKIAl2b2lkICpzdGF0ZV9kYXRhOwogCi0JLyogVGltZXIgZm9yIG1lYXN1cmluZyBkZWNvZGVyIHNldHRsaW5nIHRpbWUgKi8KKwkvKiBUaW1lciBmb3IgbWVhc3VyaW5nIHJlcXVpcmVkIGRlY29kZXIgc2V0dGxpbmcgdGltZSBiZWZvcmUgd2UncmUKKwkgICBhbGxvd2VkIHRvIGZpcmUgaXQgdXAgYWdhaW4uICovCiAJc3RydWN0IHRpbWVyX2xpc3QgcXVpZXNjZW50X3RpbWVyOwogCisJLyogVGltZXIgZm9yIG1lYXN1cmluZyBkZWNvZGVyIHN0YWJpbGl6YXRpb24gdGltZSwgd2hpY2ggaXMgdGhlCisJICAgYW1vdW50IG9mIHRpbWUgd2UgbmVlZCB0byBsZXQgdGhlIGRlY29kZXIgcnVuIGJlZm9yZSB3ZSBjYW4KKwkgICB0cnVzdCBpdHMgb3V0cHV0IChvdGhlcndpc2UgdGhlIGVuY29kZXIgbWlnaHQgc2VlIGdhcmJhZ2UgYW5kCisJICAgdGhlbiBmYWlsIHRvIHN0YXJ0IGNvcnJlY3RseSkuICovCisJc3RydWN0IHRpbWVyX2xpc3QgZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyOworCiAJLyogVGltZXIgZm9yIG1lYXN1cmluZyBlbmNvZGVyIHByZS13YWl0IHRpbWUgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBlbmNvZGVyX3dhaXRfdGltZXI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggMWJiZGFiMC4uNzEyYjMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTQ4LDExICs0OCwxMyBAQAogICAgYmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIHN0YXJ0IGl0IHJ1bm5pbmcuICovCiAjZGVmaW5lIFRJTUVfTVNFQ19ERUNPREVSX1dBSVQgNTAKIAorLyogVGhpcyBkZWZpbmVzIGEgbWluaW11bSBpbnRlcnZhbCB0aGF0IHRoZSBkZWNvZGVyIG11c3QgYmUgYWxsb3dlZCB0byBydW4KKyAgIGJlZm9yZSB3ZSBjYW4gc2FmZWx5IGJlZ2luIHVzaW5nIGl0cyBzdHJlYW1pbmcgb3V0cHV0LiAqLworI2RlZmluZSBUSU1FX01TRUNfREVDT0RFUl9TVEFCSUxJWkFUSU9OX1dBSVQgMzAwCisKIC8qIFRoaXMgZGVmaW5lcyBhIG1pbmltdW0gaW50ZXJ2YWwgdGhhdCB0aGUgZW5jb2RlciBtdXN0IHJlbWFpbiBxdWlldAotICAgYmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIGNvbmZpZ3VyZSBpdC4gIEkgaGFkIHRoaXMgb3JpZ2luYWxseSBzZXQgdG8KLSAgIDUwbXNlYywgYnV0IE1hcnRpbiBEYXVza2FyZHQgPG1hcnRpbi5kYXVza2FyZHRAZ214LmRlPiByZXBvcnRzIHRoYXQKLSAgIHRoaW5ncyB3b3JrIGJldHRlciB3aGVuIGl0J3Mgc2V0IHRvIDEwMG1zZWMuICovCi0jZGVmaW5lIFRJTUVfTVNFQ19FTkNPREVSX1dBSVQgMTAwCisgICBiZWZvcmUgd2UgYXJlIGFsbG93ZWQgdG8gY29uZmlndXJlIGl0LiAqLworI2RlZmluZSBUSU1FX01TRUNfRU5DT0RFUl9XQUlUIDUwCiAKIC8qIFRoaXMgZGVmaW5lcyB0aGUgbWluaW11bSBpbnRlcnZhbCB0aGF0IHRoZSBlbmNvZGVyIG11c3Qgc3VjY2Vzc2Z1bGx5IHJ1bgogICAgYmVmb3JlIHdlIGNvbnNpZGVyIHRoYXQgdGhlIGVuY29kZXIgaGFzIHJ1biBhdCBsZWFzdCBvbmNlIHNpbmNlIGl0cwpAQCAtMzM0LDYgKzMzNiw3IEBACiBzdGF0aWMgdm9pZCBwdnIyX2hkd19pbnRlcm5hbF9maW5kX3N0ZGVudW0oc3RydWN0IHB2cjJfaGR3ICpoZHcpOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfaW50ZXJuYWxfc2V0X3N0ZF9hdmFpbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd19xdWllc2NlbnRfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIHB2cjJfaGR3X2RlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfZW5jb2Rlcl93YWl0X3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd19lbmNvZGVyX3J1bl90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIGludCBwdnIyX2lzc3VlX3NpbXBsZV9jbWQoc3RydWN0IHB2cjJfaGR3ICosdTMyKTsKQEAgLTE3MDUsNiArMTcwOCw3IEBACiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc3RyZWFtPSVzIiwKIAkJICAgKGVuYWJsZWZsID8gIm9uIiA6ICJvZmYiKSk7CiAJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3N0cmVhbSwgZW5hYmxlZmwpOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCBhdWRpbywgc19zdHJlYW0sIGVuYWJsZWZsKTsKIAlpZiAoaGR3LT5kZWNvZGVyX2NsaWVudF9pZCkgewogCQkvKiBXZSBnZXQgaGVyZSBpZiB0aGUgZW5jb2RlciBoYXMgYmVlbiBub3RpY2VkLiAgT3RoZXJ3aXNlCiAJCSAgIHdlJ2xsIGlzc3VlIGEgd2FybmluZyB0byB0aGUgdXNlciAod2hpY2ggc2hvdWxkCkBAIC0yNDYxLDYgKzI0NjUsMTEgQEAKIAloZHctPnF1aWVzY2VudF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGR3OwogCWhkdy0+cXVpZXNjZW50X3RpbWVyLmZ1bmN0aW9uID0gcHZyMl9oZHdfcXVpZXNjZW50X3RpbWVvdXQ7CiAKKwlpbml0X3RpbWVyKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CisJaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhkdzsKKwloZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lci5mdW5jdGlvbiA9CisJCXB2cjJfaGR3X2RlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lb3V0OworCiAJaW5pdF90aW1lcigmaGR3LT5lbmNvZGVyX3dhaXRfdGltZXIpOwogCWhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyloZHc7CiAJaGR3LT5lbmNvZGVyX3dhaXRfdGltZXIuZnVuY3Rpb24gPSBwdnIyX2hkd19lbmNvZGVyX3dhaXRfdGltZW91dDsKQEAgLTI2NzQsNiArMjY4Myw3IEBACiAgZmFpbDoKIAlpZiAoaGR3KSB7CiAJCWRlbF90aW1lcl9zeW5jKCZoZHctPnF1aWVzY2VudF90aW1lcik7CisJCWRlbF90aW1lcl9zeW5jKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CiAJCWRlbF90aW1lcl9zeW5jKCZoZHctPmVuY29kZXJfcnVuX3RpbWVyKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyKTsKIAkJaWYgKGhkdy0+d29ya3F1ZXVlKSB7CkBAIC0yNzQxLDYgKzI3NTEsNyBAQAogCQloZHctPndvcmtxdWV1ZSA9IE5VTEw7CiAJfQogCWRlbF90aW1lcl9zeW5jKCZoZHctPnF1aWVzY2VudF90aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyKTsKIAlkZWxfdGltZXJfc3luYygmaGR3LT5lbmNvZGVyX3J1bl90aW1lcik7CiAJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyKTsKIAlpZiAoaGR3LT5md19idWZmZXIpIHsKQEAgLTQ0NTIsNyArNDQ2Myw3IEBACiAKIAlzd2l0Y2ggKGhkdy0+cGF0aHdheV9zdGF0ZSkgewogCWNhc2UgUFZSMl9QQVRIV0FZX0FOQUxPRzoKLQkJaWYgKGhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4pIHsKKwkJaWYgKGhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4gJiYgaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5KSB7CiAJCQkvKiBJbiBhbmFsb2cgbW9kZSwgaWYgdGhlIGRlY29kZXIgaXMgcnVubmluZywgdGhlbgogCQkJICAgcnVuIHRoZSBlbmNvZGVyLiAqLwogCQkJcmV0dXJuICEwOwpAQCAtNDUxOSw2ICs0NTMwLDE3IEBACiB9CiAKIAorLyogVGltZW91dCBmdW5jdGlvbiBmb3IgZGVjb2RlciBzdGFiaWxpemF0aW9uIHRpbWVyLiAqLworc3RhdGljIHZvaWQgcHZyMl9oZHdfZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gKHN0cnVjdCBwdnIyX2hkdyAqKWRhdGE7CisJaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5ID0gITA7CisJdHJhY2Vfc3RiaXQoInN0YXRlX2RlY29kZXJfcmVhZHkiLCBoZHctPnN0YXRlX2RlY29kZXJfcmVhZHkpOworCWhkdy0+c3RhdGVfc3RhbGUgPSAhMDsKKwlxdWV1ZV93b3JrKGhkdy0+d29ya3F1ZXVlLCAmaGR3LT53b3JrcG9sbCk7Cit9CisKKwogLyogVGltZW91dCBmdW5jdGlvbiBmb3IgZW5jb2RlciB3YWl0IHRpbWVyLiAqLwogc3RhdGljIHZvaWQgcHZyMl9oZHdfZW5jb2Rlcl93YWl0X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtNDU1Nyw4ICs0NTc5LDEzIEBACiAJCX0KIAkJaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCA9IDA7CiAJCWhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4gPSAwOwotCQkvKiBwYXJhbm9pYSAtIHNvbHZlIHJhY2UgaWYgdGltZXIganVzdCBjb21wbGV0ZWQgKi8KKwkJLyogcGFyYW5vaWEgLSBzb2x2ZSByYWNlIGlmIHRpbWVyKHMpIGp1c3QgY29tcGxldGVkICovCiAJCWRlbF90aW1lcl9zeW5jKCZoZHctPnF1aWVzY2VudF90aW1lcik7CisJCS8qIEtpbGwgdGhlIHN0YWJpbGl6YXRpb24gdGltZXIsIGluIGNhc2Ugd2UncmUga2lsbGluZyB0aGUKKwkJICAgZW5jb2RlciBiZWZvcmUgdGhlIHByZXZpb3VzIHN0YWJpbGl6YXRpb24gaW50ZXJ2YWwgaGFzCisJCSAgIGJlZW4gcHJvcGVybHkgdGltZWQuICovCisJCWRlbF90aW1lcl9zeW5jKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CisJCWhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA9IDA7CiAJfSBlbHNlIHsKIAkJaWYgKCFoZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50KSB7CiAJCQlpZiAoIXRpbWVyX3BlbmRpbmcoJmhkdy0+cXVpZXNjZW50X3RpbWVyKSkgewpAQCAtNDU5NiwxMCArNDYyMywyMSBAQAogCQlpZiAoaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkKSByZXR1cm4gMDsKIAkJaWYgKHB2cjJfZGVjb2Rlcl9lbmFibGUoaGR3LCEwKSA8IDApIHJldHVybiAwOwogCQloZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50ID0gMDsKKwkJaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5ID0gMDsKIAkJaGR3LT5zdGF0ZV9kZWNvZGVyX3J1biA9ICEwOworCQlpZiAoaGR3LT5kZWNvZGVyX2NsaWVudF9pZCA9PSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1KSB7CisJCQloZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lci5leHBpcmVzID0KKwkJCQlqaWZmaWVzICsKKwkJCQkoSFogKiBUSU1FX01TRUNfREVDT0RFUl9TVEFCSUxJWkFUSU9OX1dBSVQgLworCQkJCSAxMDAwKTsKKwkJCWFkZF90aW1lcigmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOworCQl9IGVsc2UgeworCQkJaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5ID0gITA7CisJCX0KIAl9CiAJdHJhY2Vfc3RiaXQoInN0YXRlX2RlY29kZXJfcXVpZXNjZW50IixoZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50KTsKIAl0cmFjZV9zdGJpdCgic3RhdGVfZGVjb2Rlcl9ydW4iLGhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4pOworCXRyYWNlX3N0Yml0KCJzdGF0ZV9kZWNvZGVyX3JlYWR5IiwgaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5KTsKIAlyZXR1cm4gITA7CiB9CiAKQEAgLTQ3OTcsNyArNDgzNSw4IEBACiAJCQlidWYsYWNudCwKIAkJCSJ3b3JrZXI6JXMlcyVzJXMlcyVzJXMiLAogCQkJKGhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4gPwotCQkJICIgPGRlY29kZTpydW4+IiA6CisJCQkgKGhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA/CisJCQkgICI8ZGVjb2RlOnJ1bj4iIDogIiA8ZGVjb2RlOnN0YXJ0PiIpIDoKIAkJCSAoaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCA/CiAJCQkgICIiIDogIiA8ZGVjb2RlOnN0b3A+IikpLAogCQkJKGhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQgPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAppbmRleCA1NmU3MGVhLi41MWQzMDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaApAQCAtMzA2LDYgKzMwNiw3IEBACiAJaW50IHN0YXRlX2VuY29kZXJfb2s7CiAJaW50IHN0YXRlX2VuY29kZXJfcnVuOwogCWludCBzdGF0ZV9kZWNvZGVyX3J1bjsKKwlpbnQgc3RhdGVfZGVjb2Rlcl9yZWFkeTsKIAlpbnQgc3RhdGVfdXNic3RyZWFtX3J1bjsKIAlpbnQgc3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQ7CiAJaW50IHN0YXRlX3BpcGVsaW5lX2NvbmZpZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jCmluZGV4IDUwYjQxNWUuLmY3ZjdlMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwpAQCAtNzUzLDcgKzc1Myw3IEBACiAJCWJ1ZlswXSA9IDB4ZmY7IC8qIGZpeGVkICovCiAKIAlyZXQgPSBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCVNFVF9MVU1fQ1RMLCBTSFVUVEVSX01PREVfRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7CisJCVNFVF9MVU1fQ1RMLCBTSFVUVEVSX01PREVfRk9STUFUVEVSLCAmYnVmLCAxKTsKIAogCWlmICghbW9kZSAmJiByZXQgPj0gMCkgewogCQlpZiAodmFsdWUgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCAyOTRmODYwLi4zMjJhYzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtODk4LDE4ICs4OTgsOCBAQAogCiBzdGF0aWMgdm9pZCBweGFfY2FtZXJhX2FjdGl2YXRlKHN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYpCiB7Ci0Jc3RydWN0IHB4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBjZGV2LT5wZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2Rldi0+c29jX2hvc3QudjRsMl9kZXYuZGV2OwogCXUzMiBjaWNyNCA9IDA7CiAKLQlkZXZfZGJnKGRldiwgIlJlZ2lzdGVyZWQgcGxhdGZvcm0gZGV2aWNlIGF0ICVwIGRhdGEgJXBcbiIsCi0JCXBjZGV2LCBwZGF0YSk7Ci0KLQlpZiAocGRhdGEgJiYgcGRhdGEtPmluaXQpIHsKLQkJZGV2X2RiZyhkZXYsICIlczogSW5pdCBncGlvc1xuIiwgX19mdW5jX18pOwotCQlwZGF0YS0+aW5pdChkZXYpOwotCX0KLQogCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAlfX3Jhd193cml0ZWwoMHgzZmYsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCmluZGV4IDgwNTIyNmUuLjkyNzcxOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAl1OCB2YWw7CiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfNFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzRbXSA9IHsKIAl7MHg0MTcsIDB9LAogCXsweDQyYywgMH0sCiAJezB4NDJkLCAweGYwfSwKQEAgLTE4Niw3ICsxODYsNyBAQAogCXsweDRmZSwgMn0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfNVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzVbXSA9IHsKIAl7MHg1MTQsIDB9LAogCXsweDUxNiwgMH0sCiAJezB4NTE4LCAwfSwKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXsweDVmZSwgMn0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfN1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzdbXSA9IHsKIAl7MHg3MGEsIDB9LAogCXsweDcxNCwgMHhmZn0sCiAJezB4NzE1LCAweGZmfSwKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXsweDdGRSwgMn0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfOFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzhbXSA9IHsKIAl7MHg4MDAsIDB4MDB9LAogCXsweDgwMSwgMHgwMX0sCiAJezB4ODAyLCAweDYxfSwKQEAgLTQwMywxMiArNDAzLDEyIEBACiAJezB4OEZFLCAyfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua18xMFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzEwW10gPSB7CiAJezB4MTBiZiwgMHg2OX0KIH07CiAKIC8qIENsb2NrIGRpdmlkZXJzIC0gdGhlc2UgYXJlIGRlZmF1bHQgcmVnaXN0ZXIgdmFsdWVzLCBkaXZpZGVyID0gcmVnaXN0ZXIgKyAxICovCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9jbG9ja19kaXYgY2xrX2RpdiA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX2Nsb2NrX2RpdiBjbGtfZGl2ID0gewogCS5yYXRpb190Zwk9IDMgLyogZGVmYXVsdDogNSAqLywKIAkucmF0aW9fdAk9IDQgLyogZGVmYXVsdDogMSAqLywKIAkucmF0aW9fcgk9IDQgLyogZGVmYXVsdDogMCAqLywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKaW5kZXggNDQ4NzNhMC4uYzBhN2Y4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKQEAgLTEwNCw2ICsxMDQsMTAgQEAKIAlpZiAoaWQgPT0gVjRMMl9JREVOVF9TQUE3MTExKQogCQlyZXR1cm4gcmVnIDwgMHgyMCAmJiByZWcgIT0gMHgwMSAmJiByZWcgIT0gMHgwZiAmJgogCQkgICAgICAgKHJlZyA8IDB4MTMgfHwgcmVnID4gMHgxOSkgJiYgcmVnICE9IDB4MWQgJiYgcmVnICE9IDB4MWU7CisJaWYgKGlkID09IFY0TDJfSURFTlRfU0FBNzExMUEpCisJCXJldHVybiByZWcgPCAweDIwICYmIHJlZyAhPSAweDAxICYmIHJlZyAhPSAweDBmICYmCisJCSAgICAgICByZWcgIT0gMHgxNCAmJiByZWcgIT0gMHgxOCAmJiByZWcgIT0gMHgxOSAmJgorCQkgICAgICAgcmVnICE9IDB4MWQgJiYgcmVnICE9IDB4MWU7CiAKIAkvKiBjb21tb24gZm9yIHNhYTcxMTMvNC81LzggKi8KIAlpZiAodW5saWtlbHkoKHJlZyA+PSAweDNiICYmIHJlZyA8PSAweDNmKSB8fCByZWcgPT0gMHg1YyB8fCByZWcgPT0gMHg1ZiB8fApAQCAtOTU0LDggKzk1OCw3IEBACiAJMDExIE5UU0MgTiAoMy41OE1IeikgICAgICAgICAgICBQQUwgTSAoMy41OE1IeikKIAkxMDAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgIE5UU0MtSmFwYW4gKDMuNThNSHopCiAJKi8KLQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSB8fAotCSAgICBzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzKSB7CisJaWYgKHN0YXRlLT5pZGVudCA8PSBWNEwyX0lERU5UX1NBQTcxMTMpIHsKIAkJdTggcmVnID0gc2FhNzExeF9yZWFkKHNkLCBSXzBFX0NIUk9NQV9DTlRMXzEpICYgMHg4ZjsKIAogCQlpZiAoc3RkID09IFY0TDJfU1REX1BBTF9NKSB7CkBAIC0xMjMyLDIyICsxMjM1LDE5IEBACiAJCQkgICAgIHUzMiBpbnB1dCwgdTMyIG91dHB1dCwgdTMyIGNvbmZpZykKIHsKIAlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0JdTggbWFzayA9IChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSA/IDB4ZjggOiAweGYwOworCXU4IG1hc2sgPSAoc3RhdGUtPmlkZW50IDw9IFY0TDJfSURFTlRfU0FBNzExMUEpID8gMHhmOCA6IDB4ZjA7CiAKIAl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJkZWNvZGVyIHNldCBpbnB1dCAlZCBvdXRwdXQgJWRcbiIsCiAJCWlucHV0LCBvdXRwdXQpOwogCiAJLyogc2FhNzExMS8zIGRvZXMgbm90IGhhdmUgdGhlc2UgaW5wdXRzICovCi0JaWYgKChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzIHx8Ci0JICAgICBzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSAmJgorCWlmIChzdGF0ZS0+aWRlbnQgPD0gVjRMMl9JREVOVF9TQUE3MTEzICYmCiAJICAgIChpbnB1dCA9PSBTQUE3MTE1X0NPTVBPU0lURTQgfHwKIAkgICAgIGlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNSkpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChpbnB1dCA+IFNBQTcxMTVfU1ZJREVPMykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKG91dHB1dCA+IFNBQTcxMTVfSVBPUlRfT04pCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChzdGF0ZS0+aW5wdXQgPT0gaW5wdXQgJiYgc3RhdGUtPm91dHB1dCA9PSBvdXRwdXQpCiAJCXJldHVybiAwOwogCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIm5vdyBzZXR0aW5nICVzIGlucHV0ICVzIG91dHB1dFxuIiwKQEAgLTEyNTYsNyArMTI1Niw3IEBACiAJc3RhdGUtPmlucHV0ID0gaW5wdXQ7CiAKIAkvKiBzYWE3MTExIGhhcyBzbGlnaHRseSBkaWZmZXJlbnQgaW5wdXQgbnVtYmVyaW5nICovCi0JaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpIHsKKwlpZiAoc3RhdGUtPmlkZW50IDw9IFY0TDJfSURFTlRfU0FBNzExMUEpIHsKIAkJaWYgKGlucHV0ID49IFNBQTcxMTVfQ09NUE9TSVRFNCkKIAkJCWlucHV0IC09IDI7CiAJCS8qIHNhYTcxMTEgc3BlY2lmaWMgKi8KQEAgLTEyOTIsNyArMTI5Miw3IEBACiB7CiAJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCi0JaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTEpCisJaWYgKHN0YXRlLT5pZGVudCA+IFY0TDJfSURFTlRfU0FBNzExMUEpCiAJCXJldHVybiAtRUlOVkFMOwogCXNhYTcxMXhfd3JpdGUoc2QsIDB4MTEsIChzYWE3MTF4X3JlYWQoc2QsIDB4MTEpICYgMHg3ZikgfAogCQkodmFsID8gMHg4MCA6IDApKTsKQEAgLTE1OTYsNiArMTU5NiwxMCBAQAogCXN3aXRjaCAoY2hpcF9pZCkgewogCWNhc2UgJzEnOgogCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTE7CisJCWlmIChzYWE3MTF4X3JlYWQoc2QsIFJfMDBfQ0hJUF9WRVJTSU9OKSAmIDB4ZjApIHsKKwkJCXY0bF9pbmZvKGNsaWVudCwgInNhYTcxMTFhIHZhcmlhbnQgZm91bmRcbiIpOworCQkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTExQTsKKwkJfQogCQlicmVhazsKIAljYXNlICczJzoKIAkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTEzOwpAQCAtMTYxMiw3ICsxNjE2LDcgQEAKIAlkZWZhdWx0OgogCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTE7CiAJCXY0bDJfaW5mbyhzZCwgIldBUk5JTkc6IENoaXAgaXMgbm90IGtub3duIC0gRmFsbGluZyBiYWNrIHRvIHNhYTcxMTFcbiIpOwotCisJCWJyZWFrOwogCX0KIAogCXN0YXRlLT5hdWRjbGtfZnJlcSA9IDQ4MDAwOwpAQCAtMTYyMyw2ICsxNjI3LDcgQEAKIAlzdGF0ZS0+Y3J5c3RhbF9mcmVxID0gU0FBNzExNV9GUkVRXzI0XzU3Nl9NSFo7CiAJc3dpdGNoIChzdGF0ZS0+aWRlbnQpIHsKIAljYXNlIFY0TDJfSURFTlRfU0FBNzExMToKKwljYXNlIFY0TDJfSURFTlRfU0FBNzExMUE6CiAJCXNhYTcxMXhfd3JpdGVyZWdzKHNkLCBzYWE3MTExX2luaXQpOwogCQlicmVhazsKIAljYXNlIFY0TDJfSURFTlRfU0FBNzExMzoKQEAgLTE2MzIsNyArMTYzNyw3IEBACiAJCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBTQUE3MTE1X0ZSRVFfMzJfMTFfTUhaOwogCQlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExNV9pbml0X2F1dG9faW5wdXQpOwogCX0KLQlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExMSkKKwlpZiAoc3RhdGUtPmlkZW50ID4gVjRMMl9JREVOVF9TQUE3MTExQSkKIAkJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTVfaW5pdF9taXNjKTsKIAlzYWE3MTF4X3NldF92NGxzdGQoc2QsIFY0TDJfU1REX05UU0MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCmluZGV4IDJmZTdhNzAuLjI1MGVmODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCkBAIC0xODEsNyArMTgxLDcgQEAKICNkZWZpbmUgU0FBNzEyN182MEhaX0RBQ19DT05UUk9MIDB4MTUKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSBzYWE3MTI3X2luaXRfY29uZmlnXzYwaHpbXSA9IHsKIAl7IFNBQTcxMjdfUkVHX0JVUlNUX1NUQVJULCAJCQkweDE5IH0sCi0JLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19kZXRlY3RfY2xpZW50ICovCisJLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19wcm9iZSAqLwogCXsgU0FBNzEyN19SRUdfQlVSU1RfRU5ELCAJCQkweDFkIH0sCiAJeyBTQUE3MTI3X1JFR19DSFJPTUFfUEhBU0UsIAkJCTB4YTMgfSwKIAl7IFNBQTcxMjdfUkVHX0dBSU5VLCAJCQkJMHg5OCB9LApAQCAtMjAwLDEwICsyMDAsMTAgQEAKIAl7IDAsIDAgfQogfTsKIAotI2RlZmluZSBTQUE3MTI3XzUwSFpfREFDX0NPTlRST0wgMHgwMgotc3RhdGljIHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfNTBoeltdID0geworI2RlZmluZSBTQUE3MTI3XzUwSFpfUEFMX0RBQ19DT05UUk9MIDB4MDIKK3N0YXRpYyBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHpfcGFsW10gPSB7CiAJeyBTQUE3MTI3X1JFR19CVVJTVF9TVEFSVCwgCQkJMHgyMSB9LAotCS8qIEJVUlNUX0VORCBpcyBhbHNvIHVzZWQgYXMgYSBjaGlwIElEIGluIHNhYTcxMjdfZGV0ZWN0X2NsaWVudCAqLworCS8qIEJVUlNUX0VORCBpcyBhbHNvIHVzZWQgYXMgYSBjaGlwIElEIGluIHNhYTcxMjdfcHJvYmUgKi8KIAl7IFNBQTcxMjdfUkVHX0JVUlNUX0VORCwgCQkJMHgxZCB9LAogCXsgU0FBNzEyN19SRUdfQ0hST01BX1BIQVNFLCAJCQkweDNmIH0sCiAJeyBTQUE3MTI3X1JFR19HQUlOVSwgCQkJCTB4N2QgfSwKQEAgLTIyMiw2ICsyMjIsMjggQEAKIAl7IDAsIDAgfQogfTsKIAorI2RlZmluZSBTQUE3MTI3XzUwSFpfU0VDQU1fREFDX0NPTlRST0wgMHgwOAorc3RhdGljIHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfNTBoel9zZWNhbVtdID0geworCXsgU0FBNzEyN19SRUdfQlVSU1RfU1RBUlQsIAkJCTB4MjEgfSwKKwkvKiBCVVJTVF9FTkQgaXMgYWxzbyB1c2VkIGFzIGEgY2hpcCBJRCBpbiBzYWE3MTI3X3Byb2JlICovCisJeyBTQUE3MTI3X1JFR19CVVJTVF9FTkQsIAkJCTB4MWQgfSwKKwl7IFNBQTcxMjdfUkVHX0NIUk9NQV9QSEFTRSwgCQkJMHgzZiB9LAorCXsgU0FBNzEyN19SRUdfR0FJTlUsIAkJCQkweDZhIH0sCisJeyBTQUE3MTI3X1JFR19HQUlOViwgCQkJCTB4ODEgfSwKKwl7IFNBQTcxMjdfUkVHX0JMQUNLX0xFVkVMLCAJCQkweDMzIH0sCisJeyBTQUE3MTI3X1JFR19CTEFOS0lOR19MRVZFTCwgCQkJMHgzNSB9LAorCXsgU0FBNzEyN19SRUdfVkJJX0JMQU5LSU5HLCAJCQkweDM1IH0sCisJeyBTQUE3MTI3X1JFR19EQUNfQ09OVFJPTCwgCQkJMHgwOCB9LAorCXsgU0FBNzEyN19SRUdfQlVSU1RfQU1QLCAJCQkweDJmIH0sCisJeyBTQUE3MTI3X1JFR19TVUJDMywgCQkJCTB4YjIgfSwKKwl7IFNBQTcxMjdfUkVHX1NVQkMyLCAJCQkJMHgzYiB9LAorCXsgU0FBNzEyN19SRUdfU1VCQzEsIAkJCQkweGEzIH0sCisJeyBTQUE3MTI3X1JFR19TVUJDMCwgCQkJCTB4MjggfSwKKwl7IFNBQTcxMjdfUkVHX01VTFRJLCAJCQkJMHg5MCB9LAorCXsgU0FBNzEyN19SRUdfQ0xPU0VEX0NBUFRJT04sIAkJCTB4MDAgfSwKKwl7IDAsIDAgfQorfTsKKwogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDYzLDEwICs0ODUsMjEgQEAKIAkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiU2VsZWN0aW5nIDYwIEh6IHZpZGVvIFN0YW5kYXJkXG4iKTsKIAkJaW5pdHRhYiA9IHNhYTcxMjdfaW5pdF9jb25maWdfNjBoejsKIAkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNjBIWl9EQUNfQ09OVFJPTDsKKworCX0gZWxzZSBpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzEyOSAmJgorCQkgICAoc3RkICYgVjRMMl9TVERfU0VDQU0pICYmCisJCSAgICEoc3RkICYgKFY0TDJfU1REXzYyNV81MCAmIH5WNEwyX1NURF9TRUNBTSkpKSB7CisKKwkJLyogSWYgYW5kIG9ubHkgaWYgU0VDQU0sIHdpdGggYSBTQUE3MTJbODldICovCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKKwkJCSAiU2VsZWN0aW5nIDUwIEh6IFNFQ0FNIHZpZGVvIFN0YW5kYXJkXG4iKTsKKwkJaW5pdHRhYiA9IHNhYTcxMjdfaW5pdF9jb25maWdfNTBoel9zZWNhbTsKKwkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNTBIWl9TRUNBTV9EQUNfQ09OVFJPTDsKKwogCX0gZWxzZSB7Ci0JCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNlbGVjdGluZyA1MCBIeiB2aWRlbyBTdGFuZGFyZFxuIik7Ci0JCWluaXR0YWIgPSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHo7Ci0JCXN0YXRlLT5yZWdfNjEgPSBTQUE3MTI3XzUwSFpfREFDX0NPTlRST0w7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNlbGVjdGluZyA1MCBIeiBQQUwgdmlkZW8gU3RhbmRhcmRcbiIpOworCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ181MGh6X3BhbDsKKwkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNTBIWl9QQUxfREFDX0NPTlRST0w7CiAJfQogCiAJLyogV3JpdGUgVGFibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IDAzZjU3MjcuLjI5NzgzM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtNDE2MCw3ICs0MTYwLDcgQEAKIAkJCS5hbXV4ID0gTElORTIsCiAJCX0sCiAJfSwKLQlbU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTXSA9IHsKKwlbU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LNV0gPSB7CiAJCS8qICAgICAgIEJlaG9sZGVyIEludGwuIEx0ZC4gMjAwOCAgICAgICovCiAJCS8qRG1pdHJ5IEJlbGltb3YgPGQuYmVsaW1vdkBnbWFpbC5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViA1MDUgUkRTIiwKQEAgLTUzMjAsNiArNTMyMCw0MSBAQAogCQkJLnZtdXggPSA4LAogCQl9IH0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LM10gPSB7CisJCS8qICAgICAgIEJlaG9sZGVyIEludGwuIEx0ZC4gMjAwOCAgICAgICovCisJCS8qRG1pdHJ5IEJlbGltb3YgPGQuYmVsaW1vdkBnbWFpbC5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViA1MDUgUkRTIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmRzX2FkZHIgCT0gMHgxMCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMDA4MDAwLAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJCS50diAgID0gMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwkJLm11dGUgPSB7CisJCQkubmFtZSA9IG5hbWVfbXV0ZSwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0sCisJfSwKIAogfTsKIApAQCAtNjIzNSw3ICs2MjcwLDEzIEBACiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKIAkJLnN1YnZlbmRvciAgICA9IDB4MDAwMCwKIAkJLnN1YmRldmljZSAgICA9IDB4NTA1QiwKLQkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEUywKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzUsCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwMDAsCisJCS5zdWJkZXZpY2UgICAgPSAweDUwNTEsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszLAogCX0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCkBAIC02NzkyLDcgKzY4MzMsOCBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA3Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVGTToKLQljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEUzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzU6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3XzlGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUs1OgpAQCAtNjk1Myw4ICs2OTk1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9TMzUwOgogCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwotCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHgwMDAwODAwMCwgMHgwMDAwODAwMCk7Ci0JCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwKTsKKwkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIDB4MDAwMEMwMDAsIDB4MDAwMEMwMDApOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgwMDAwQzAwMCwgMHgwMDAwQzAwMCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwppbmRleCA3ZGZlY2ZjLi5lZTViZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCkBAIC05Myw5ICs5Myw5IEBACiAJZHByaW50aygib3BlbiBkZXY9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldikpOwogCWVyciA9IC1FQlVTWTsKIAlpZiAoIW11dGV4X3RyeWxvY2soJmRldi0+ZW1wcmVzc190c3EudmJfbG9jaykpCi0JCWdvdG8gZG9uZTsKKwkJcmV0dXJuIGVycjsKIAlpZiAoYXRvbWljX3JlYWQoJmRldi0+ZW1wcmVzc191c2VycykpCi0JCWdvdG8gZG9uZV91cDsKKwkJZ290byBkb25lOwogCiAJLyogVW5tdXRlIGF1ZGlvICovCiAJc2FhX3dyaXRlYihTQUE3MTM0X0FVRElPX01VVEVfQ1RSTCwKQEAgLTEwNSwxMCArMTA1LDggQEAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CiAJZXJyID0gMDsKIAotZG9uZV91cDoKLQltdXRleF91bmxvY2soJmRldi0+ZW1wcmVzc190c3EudmJfbG9jayk7CiBkb25lOgotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmRldi0+ZW1wcmVzc190c3EudmJfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggZjhlOTg1OS4uOTQ5OTAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAlpbnQgcG9sbGluZyAgICAgID0gMDsKIAlpbnQgcmM1X2dwaW8JID0gMDsKIAlpbnQgbmVjX2dwaW8JID0gMDsKLQlpbnQgaXJfdHlwZSAgICAgID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVycjsKIAogCWlmIChkZXYtPmhhc19yZW1vdGUgIT0gU0FBNzEzNF9SRU1PVEVfR1BJTykKQEAgLTU2OCw3ICs1NjgsOCBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA3Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVGTToKLQljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEUzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzU6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3XzlGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUs1OgpAQCAtNzI4LDcgKzcyOSw3IEBACiAJZGV2LT5yZW1vdGUgPSBpcjsKIAlzYWE3MTM0X2lyX3N0YXJ0KGRldiwgaXIpOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmRldiwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5kZXYsIGlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggY2I3MzI2NC4uMzExMzhkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogI2RlZmluZSBOT1JNXzUyNV82MAkJCVwKIAkJLmhfc3RhcnQgICAgICAgPSAwLAlcCi0JCS5oX3N0b3AgICAgICAgID0gNzAzLAlcCisJCS5oX3N0b3AgICAgICAgID0gNzE5LAlcCiAJCS52aWRlb192X3N0YXJ0ID0gMjMsCVwKIAkJLnZpZGVvX3Zfc3RvcCAgPSAyNjIsCVwKIAkJLnZiaV92X3N0YXJ0XzAgPSAxMCwJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggNTNiN2UwYi4uYmYxMzA5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0yODIsNyArMjgyLDcgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMCAgIDE1NgogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fNTA3VUEgMTU3CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0NBUkRCVVNfNTAxIDE1OAotI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFMgICAgICAgICAxNTkKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LNSAgICAgMTU5CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzMgICAgIDE2MAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUs1ICAgICAxNjEKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNjA3Rk1fTUs1ICAgICAgMTYyCkBAIC0yOTksNiArMjk5LDcgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9aT0xJRF9IWUJSSURfUENJCQkxNzMKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BU1VTX0VVUk9QQV9IWUJSSUQJMTc0CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfTEVBRFRFS19XSU5GQVNUX0RUVjEwMDBTIDE3NQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszICAgICAxNzYKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyAzMgogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jCmluZGV4IDZmMDk0YTkuLjFkNDg3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jCkBAIC01MjMsNyArNTIzLDcgQEAKIAl9CiAKIAlyZWdsZW4gPSBzYWE3MTY0X2kyY2FkZHJfdG9fcmVnbGVuKGJ1cywgYWRkcik7Ci0JaWYgKHVuaXRpZCA8IDApIHsKKwlpZiAocmVnbGVuIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSIlcygpIGVycm9yLCBjYW5ub3QgdHJhbnNsYXRlIHJlZ2FkZHIgdG8gcmVnbGVuXG4iLAogCQkJX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IGYwOWM3MTQuLmZiODhjNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTE3NDgsNiArMTc0OCwyMiBAQAogCQkJCSAgICAgICBpY2QpOwogfQogCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfZ2V0X3Bhcm0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3Bhcm0sIHBhcm0pOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X3Bhcm0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3Bhcm0sIHBhcm0pOworfQorCiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfZ2V0X2N0cmwoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewpAQCAtMTgwOCw2ICsxODI0LDggQEAKIAkudHJ5X2ZtdAk9IHNoX21vYmlsZV9jZXVfdHJ5X2ZtdCwKIAkuc2V0X2N0cmwJPSBzaF9tb2JpbGVfY2V1X3NldF9jdHJsLAogCS5nZXRfY3RybAk9IHNoX21vYmlsZV9jZXVfZ2V0X2N0cmwsCisJLnNldF9wYXJtCT0gc2hfbW9iaWxlX2NldV9zZXRfcGFybSwKKwkuZ2V0X3Bhcm0JPSBzaF9tb2JpbGVfY2V1X2dldF9wYXJtLAogCS5yZXFidWZzCT0gc2hfbW9iaWxlX2NldV9yZXFidWZzLAogCS5wb2xsCQk9IHNoX21vYmlsZV9jZXVfcG9sbCwKIAkucXVlcnljYXAJPSBzaF9tb2JpbGVfY2V1X3F1ZXJ5Y2FwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwppbmRleCBmNzFmMjcyLi42ZWJhZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwpAQCAtMSw3ICsxLDEwIEBACiBjb25maWcgVVNCX1NOOUMxMDIKLQl0cmlzdGF0ZSAiVVNCIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVVNCIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyCiAJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBzb25peGIgYW5kCisJICBzb25peGogbW9kdWxlcyBpbnN0ZWFkLgorCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gU09OaVggU045QzEwMSwKIAkgIFNOOUMxMDIsIFNOOUMxMDMsIFNOOUMxMDUgYW5kIFNOOUMxMjAgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAppbmRleCAzNmVlNDNhLi5jYzQwZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKQEAgLTQ1LDIwICs0NSwyNCBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1LCBCUklER0VfU045QzEwMiksIH0sCiAjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNywgQlJJREdFX1NOOUMxMDIpLCB9LAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkLCBCUklER0VfU045QzEwMiksIH0sCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAxMSwgQlJJREdFX1NOOUMxMDIpLCB9LCBPVjY2NTAgKi8KKyNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDE5LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjQsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNSwgQlJJREdFX1NOOUMxMDIpLCB9LAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOCwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5LCBCUklER0VfU045QzEwMiksIH0sCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJiLCBCUklER0VfU045QzEwMiksIH0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJjLCBCUklER0VfU045QzEwMiksIH0sCi0jZW5kaWYKIC8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJkLCBCUklER0VfU045QzEwMiksIH0sIEhWNzEzMVIgKi8KKyNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJlLCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMzAsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAkvKiBTTjlDMTAzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDZiM2ZiY2MuLjgwZjZiZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC03ODEsNiArNzgxLDMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzb2NfY2FtZXJhX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+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+c2FzX21nbXQuc3RhdHVzKQorCW11dGV4X3VubG9jaygmaW9jLT5zYXNfbWdtdC5tdXRleCk7CitvdXQ6CisJcmV0dXJuIHJldDsKKyB9CisKIHN0YXRpYyB2b2lkCiBtcHRzYXNfcGFyc2VfZGV2aWNlX2luZm8oc3RydWN0IHNhc19pZGVudGlmeSAqaWRlbnRpZnksCiAJCXN0cnVjdCBtcHRzYXNfZGV2aW5mbyAqZGV2aWNlX2luZm8pCkBAIC0yOTY3LDYgKzMxNjMsMTEgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCW1wdHNhc19zZXRfcnBoeShpb2MsIHBoeV9pbmZvLCBycGh5KTsKKwkJaWYgKGlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19FREdFX0VYUEFOREVSX0RFVklDRSB8fAorCQkJaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0gU0FTX0ZBTk9VVF9FWFBBTkRFUl9ERVZJQ0UpCisJCQkJbXB0c2FzX2V4cF9yZXBtYW51ZmFjdHVyZV9pbmZvKGlvYywKKwkJCQkJaWRlbnRpZnkuc2FzX2FkZHJlc3MsCisJCQkJCXJwaHlfdG9fZXhwYW5kZXJfZGV2aWNlKHJwaHkpKTsKIAl9CiAKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggNTc3NTI3NS4uNGE3ZDFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtMTQzOCw5ICsxNDM4LDE0IEBACiAJICAgICYmICh2ZGV2aWNlLT52dGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTKQogCSAgICAmJiAoU0NwbnQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkpIHsKIAkJc2NzaWN0bCA9IHNjc2lkaXIgfCBNUElfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQl9IGVsc2UgeworCQlpZiAoU0NwbnQtPnJlcXVlc3QgJiYgU0NwbnQtPnJlcXVlc3QtPmlvcHJpbykgeworCQkJaWYgKCgoU0NwbnQtPnJlcXVlc3QtPmlvcHJpbyAmIDB4NykgPT0gMSkgfHwKKwkJCQkhKFNDcG50LT5yZXF1ZXN0LT5pb3ByaW8gJiAweDcpKQorCQkJCXNjc2ljdGwgfD0gTVBJX1NDU0lJT19DT05UUk9MX0hFQURPRlE7CisJCX0KKwl9IGVsc2UKIAkJc2NzaWN0bCA9IHNjc2lkaXIgfCBNUElfU0NTSUlPX0NPTlRST0xfVU5UQUdHRUQ7Ci0JfQorCiAKIAkvKiBVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIHRvIHNldCB1cCB0aGUgbWVzc2FnZSBmcmFtZQogCSAqLwpAQCAtMTc5Niw3ICsxODAxLDcgQEAKIAkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UICJ0YXNrIGFib3J0OiAiCiAJCSAgICJDb21tYW5kIG5vdCBpbiB0aGUgYWN0aXZlIGxpc3QhIChzYz0lcClcbiIsIGlvYy0+bmFtZSwKIAkJICAgU0NwbnQpKTsKLQkJcmV0dmFsID0gMDsKKwkJcmV0dmFsID0gU1VDQ0VTUzsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCA4NzgyOTc4Li40MTM1NzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTM0OCw2ICszNDgsMTYgQEAKIAkgIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGZvciB0aGUgZGV2aWNlcyB0byBnZXQgYWNjZXNzIHRvIHRoaXMgY2hpcC4KIAkgIFRoaXMgY2hpcCBlbWJlZHMgdmFyaW91cyBvdGhlciBtdWx0aW1lZGlhIGZ1bnRpb25hbGl0aWVzIGFzIHdlbGwuCiAKK2NvbmZpZyBNRkRfVElNQkVSREFMRQorCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aGUgVGltYmVyZGFsZSBGUEdBIgorCXNlbGVjdCBNRkRfQ09SRQorCWRlcGVuZHMgb24gUENJICYmIEdQSU9MSUIKKwktLS1oZWxwLS0tCisJVGhpcyBpcyB0aGUgY29yZSBkcml2ZXIgZm9yIHRoZSB0aW1iZXJkYWxlIEZQR0EuIFRoaXMgZGV2aWNlIGlzIGEKKwltdWx0aWZ1bmN0aW9uIGRldmljZSB3aGljaCBleHBvc2VzIG51bWVyb3VzIHBsYXRmb3JtIGRldmljZXMuCisKKwlUaGUgdGltYmVyZGFsZSBGUEdBIGNhbiBiZSBmb3VuZCBvbiB0aGUgSW50ZWwgQXRvbSBkZXZlbG9wbWVudCBib2FyZAorCWZvciBpbi12ZWhpY2xlIGluZm9udGFpbm1lbnQsIGNhbGxlZCBSdXNzZWxsdmlsbGUuCiBlbmRtZW51CiAKIG1lbnUgIk11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggOGYwZDE4NC4uNzgyOTVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIG9iai0kKENPTkZJR19NRkRfU001MDEpCQkrPSBzbTUwMS5vCi1vYmotJChDT05GSUdfTUZEX0FTSUMzKQkJKz0gYXNpYzMubworb2JqLSQoQ09ORklHX01GRF9BU0lDMykJCSs9IGFzaWMzLm8gdG1pb19jb3JlLm8KIG9iai0kKENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkpCQkrPSBzaF9tb2JpbGVfc2RoaS5vCiAKIG9iai0kKENPTkZJR19IVENfRUdQSU8pCQkrPSBodGMtZWdwaW8ubwpAQCAtNTQsNSArNTQsNiBAQAogb2JqLSQoQ09ORklHX0FCMzEwMF9DT1JFKQkrPSBhYjMxMDAtY29yZS5vCiBvYmotJChDT05GSUdfQUIzMTAwX09UUCkJKz0gYWIzMTAwLW90cC5vCiBvYmotJChDT05GSUdfQUI0NTAwX0NPUkUpCSs9IGFiNDUwMC1jb3JlLm8KK29iai0kKENPTkZJR19NRkRfVElNQkVSREFMRSkgICAgKz0gdGltYmVyZGFsZS5vCiBvYmotJChDT05GSUdfTUZEXzg4UE04NjA3KQkrPSA4OHBtODYwNy5vCi1vYmotJChDT05GSUdfUE1JQ19BRFA1NTIwKQkrPSBhZHA1NTIwLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitvYmotJChDT05GSUdfUE1JQ19BRFA1NTIwKQkrPSBhZHA1NTIwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuYyBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWQ0NGQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5jCkBAIC0wLDAgKzEsNzI3IEBACisvKgorICogdGltYmVyZGFsZS5jIHRpbWJlcmRhbGUgRlBHQSBNRkQgZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBTdXBwb3J0czoKKyAqIFRpbWJlcmRhbGUgRlBHQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorCisjaW5jbHVkZSA8bGludXgvdGltYl9ncGlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtb2NvcmVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3RzYzIwMDcuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkveGlsaW54X3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9tYXg3MzAxLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL21jMzM4ODAuaD4KKworI2luY2x1ZGUgPG1lZGlhL3RpbWJfcmFkaW8uaD4KKworI2luY2x1ZGUgInRpbWJlcmRhbGUuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAidGltYmVyZGFsZSIKKworc3RydWN0IHRpbWJlcmRhbGVfZGV2aWNlIHsKKwlyZXNvdXJjZV9zaXplX3QJCWN0bF9tYXBiYXNlOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAgICpjdGxfbWVtYmFzZTsKKwlzdHJ1Y3QgeworCQl1MzIgbWFqb3I7CisJCXUzMiBtaW5vcjsKKwkJdTMyIGNvbmZpZzsKKwl9IGZ3OworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdHNjMjAwN19wbGF0Zm9ybV9kYXRhIHRpbWJlcmRhbGVfdHNjMjAwN19wbGF0Zm9ybV9kYXRhID0geworCS5tb2RlbCA9IDIwMDMsCisJLnhfcGxhdGVfb2htcyA9IDEwMAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHNjMjAwNyIsIDB4NDgpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3RzYzIwMDdfcGxhdGZvcm1fZGF0YSwKKwkJLmlycSA9IElSUV9USU1CRVJEQUxFX1RTQ19JTlQKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG9jb3Jlc19pMmNfcGxhdGZvcm1fZGF0YQordGltYmVyZGFsZV9vY29yZXNfcGxhdGZvcm1fZGF0YSA9IHsKKwkucmVnc3RlcCA9IDQsCisJLmNsb2NrX2toeiA9IDYyNTAwLAorCS5kZXZpY2VzID0gdGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mbywKKwkubnVtX2RldmljZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm8pCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfb2NvcmVzX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT0NPUkVTT0ZGU0VULAorCQkuZW5kCT0gT0NPUkVTRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0IAk9IElSUV9USU1CRVJEQUxFX0kyQywKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX0kyQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0cnVjdCBtYXg3MzAxX3BsYXRmb3JtX2RhdGEgdGltYmVyZGFsZV9tYXg3MzAxX3BsYXRmb3JtX2RhdGEgPSB7CisJLmJhc2UgPSAyMDAKK307CisKK2NvbnN0IHN0cnVjdCBtYzMzODgwX3BsYXRmb3JtX2RhdGEgdGltYmVyZGFsZV9tYzMzODgwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmJhc2UgPSAxMDAKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdGltYmVyZGFsZV9zcGlfMTZiaXRfYm9hcmRfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1heDczMDEiLAorCQkubWF4X3NwZWVkX2h6ID0gMjYwMDAsCisJCS5jaGlwX3NlbGVjdCA9IDIsCisJCS5tb2RlID0gU1BJX01PREVfMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9tYXg3MzAxX3BsYXRmb3JtX2RhdGEKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB0aW1iZXJkYWxlX3NwaV84Yml0X2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJtYzMzODgwIiwKKwkJLm1heF9zcGVlZF9oeiA9IDQwMDAsCisJCS5jaGlwX3NlbGVjdCA9IDEsCisJCS5tb2RlID0gU1BJX01PREVfMSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9tYzMzODgwX3BsYXRmb3JtX2RhdGEKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHhzcGlfcGxhdGZvcm1fZGF0YSB0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSAzLAorCS5saXR0bGVfZW5kaWFuID0gdHJ1ZSwKKwkvKiBiaXRzIHBlciB3b3JkIGFuZCBkZXZpY2VzIHdpbGwgYmUgZmlsbGVkIGluIHJ1bnRpbWUgZGVwZW5kaW5nCisJICogb24gdGhlIEhXIGNvbmZpZworCSAqLworfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAJPSBTUElPRkZTRVQsCisJCS5lbmQJPSBTUElFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9TUEksCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9TUEksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gRVRIT0ZGU0VULAorCQkuZW5kCT0gRVRIRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfRVRIU1dfSUYsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9FVEhTV19JRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB0aW1iZ3Bpb19wbGF0Zm9ybV9kYXRhCisJdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEgPSB7CisJLmdwaW9fYmFzZSA9IDAsCisJLm5yX3BpbnMgPSBHUElPX05SX1BJTlMsCisJLmlycV9iYXNlID0gMjAwLAorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBHUElPT0ZGU0VULAorCQkuZW5kCT0gR1BJT0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX0dQSU8sCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9HUElPLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX21sb2dpY29yZV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1MQ09SRU9GRlNFVCwKKwkJLmVuZAk9IE1MQ09SRUVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX01MQ09SRSwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX01MQ09SRSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX01MQ09SRV9CVUYsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9NTENPUkVfQlVGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBVQVJUT0ZGU0VULAorCQkuZW5kCT0gVUFSVEVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX1VBUlQsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9VQVJULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX3VhcnRsaXRlX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gVUFSVExJVEVPRkZTRVQsCisJCS5lbmQJPSBVQVJUTElURUVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX1VBUlRMSVRFLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfVUFSVExJVEUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBSRFNPRkZTRVQsCisJCS5lbmQJPSBSRFNFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9SRFMsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9SRFMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdGltYmVyZGFsZV90ZWY2ODY4X2kyY19ib2FyZF9pbmZvID0geworCUkyQ19CT0FSRF9JTkZPKCJ0ZWY2ODYyIiwgMHg2MCkKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB0aW1iZXJkYWxlX3NhYTc3MDZfaTJjX2JvYXJkX2luZm8gPSB7CisJSTJDX0JPQVJEX0lORk8oInNhYTc3MDZoIiwgMHgxQykKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB0aW1iX3JhZGlvX3BsYXRmb3JtX2RhdGEKKwl0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEgPSB7CisJLmkyY19hZGFwdGVyID0gMCwKKwkudHVuZXIgPSB7CisJCS5tb2R1bGVfbmFtZSA9ICJ0ZWY2ODYyIiwKKwkJLmluZm8gPSAmdGltYmVyZGFsZV90ZWY2ODY4X2kyY19ib2FyZF9pbmZvCisJfSwKKwkuZHNwID0geworCQkubW9kdWxlX25hbWUgPSAic2FhNzcwNmgiLAorCQkuaW5mbyA9ICZ0aW1iZXJkYWxlX3NhYTc3MDZfaTJjX2JvYXJkX2luZm8KKwl9Cit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gRE1BT0ZGU0VULAorCQkuZW5kCT0gRE1BRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfRE1BLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfRE1BLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG1mZF9jZWxsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcwW10gPSB7CisJeworCQkubmFtZSA9ICJ0aW1iLXVhcnQiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWdwaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItcmFkaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ4aWxpbnhfc3BpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAia3M4ODQyIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZG1hIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMVtdID0geworCXsKKwkJLm5hbWUgPSAidGltYi11YXJ0IiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidWFydGxpdGUiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV91YXJ0bGl0ZV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV91YXJ0bGl0ZV9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1tbG9naWNvcmUiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9tbG9naWNvcmVfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfbWxvZ2ljb3JlX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1yYWRpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInhpbGlueF9zcGkiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJrczg4NDIiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1kbWEiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG1mZF9jZWxsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcyW10gPSB7CisJeworCQkubmFtZSA9ICJ0aW1iLXVhcnQiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWdwaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItcmFkaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ4aWxpbnhfc3BpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1kbWEiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG1mZF9jZWxsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmczW10gPSB7CisJeworCQkubmFtZSA9ICJ0aW1iLXVhcnQiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJvY29yZXMtaTJjIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfb2NvcmVzX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX29jb3Jlc19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfb2NvcmVzX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9vY29yZXNfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1yYWRpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInhpbGlueF9zcGkiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJrczg4NDIiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1kbWEiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX3NkaGNfcmVzb3VyY2VzW10gPSB7CisJLyogbG9jYXRlZCBpbiBiYXIgMSBhbmQgYmFyIDIgKi8KKwl7CisJCS5zdGFydAk9IFNESEMwT0ZGU0VULAorCQkuZW5kCT0gU0RIQzBFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9TREhDLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfU0RIQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjFbXSA9IHsKKwl7CisJCS5uYW1lID0gInNkaGNpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zZGhjX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG1mZF9jZWxsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMltdID0geworCXsKKwkJLm5hbWUgPSAic2RoY2kiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zZGhjX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NkaGNfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X2Z3X3ZlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgdGltYmVyZGFsZV9kZXZpY2UgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lZC4lZFxuIiwgcHJpdi0+ZncubWFqb3IsIHByaXYtPmZ3Lm1pbm9yLAorCQlwcml2LT5mdy5jb25maWcpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZndfdmVyLCBTX0lSVUdPLCBzaG93X2Z3X3ZlciwgTlVMTCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0aW1iX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0aW1iZXJkYWxlX2RldmljZSAqcHJpdjsKKwlpbnQgZXJyLCBpOworCXJlc291cmNlX3NpemVfdCBtYXBiYXNlOworCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXMgPSBOVUxMOworCXU4IGlwX3NldHVwOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9lbmFibGU7CisKKwltYXBiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJaWYgKCFtYXBiYXNlKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gcmVzb3VyY2VcbiIpOworCQlnb3RvIGVycl9zdGFydDsKKwl9CisKKwkvKiBjcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhlIFBDSSBtYXN0ZXIgcmVnaXN0ZXIgKi8KKwlwcml2LT5jdGxfbWFwYmFzZSA9IG1hcGJhc2UgKyBDSElQQ1RMT0ZGU0VUOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHByaXYtPmN0bF9tYXBiYXNlLCBDSElQQ1RMU0laRSwgInRpbWItY3RsIikpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBjdGwgbWVtXG4iKTsKKwkJZ290byBlcnJfcmVxdWVzdDsKKwl9CisKKwlwcml2LT5jdGxfbWVtYmFzZSA9IGlvcmVtYXAocHJpdi0+Y3RsX21hcGJhc2UsIENISVBDVExTSVpFKTsKKwlpZiAoIXByaXYtPmN0bF9tZW1iYXNlKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWQgZm9yIGN0bCBtZW1cbiIpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCS8qIHJlYWQgdGhlIEhXIGNvbmZpZyAqLworCXByaXYtPmZ3Lm1ham9yID0gaW9yZWFkMzIocHJpdi0+Y3RsX21lbWJhc2UgKyBUSU1CX1JFVl9NQUpPUik7CisJcHJpdi0+ZncubWlub3IgPSBpb3JlYWQzMihwcml2LT5jdGxfbWVtYmFzZSArIFRJTUJfUkVWX01JTk9SKTsKKwlwcml2LT5mdy5jb25maWcgPSBpb3JlYWQzMihwcml2LT5jdGxfbWVtYmFzZSArIFRJTUJfSFdfQ09ORklHKTsKKworCWlmIChwcml2LT5mdy5tYWpvciA+IFRJTUJfU1VQUE9SVEVEX01BSk9SKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiVGhlIGRyaXZlciBzdXBwb3J0cyBhbiBvbGRlciAiCisJCQkidmVyc2lvbiBvZiB0aGUgRlBHQSwgcGxlYXNlIHVwZGF0ZSB0aGUgZHJpdmVyIHRvICIKKwkJCSJzdXBwb3J0ICVkLiVkXG4iLCBwcml2LT5mdy5tYWpvciwgcHJpdi0+ZncubWlub3IpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKwlpZiAocHJpdi0+ZncubWFqb3IgPCBUSU1CX1NVUFBPUlRFRF9NQUpPUiB8fAorCQlwcml2LT5mdy5taW5vciA8IFRJTUJfUkVRVUlSRURfTUlOT1IpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJUaGUgRlBHQSBpbWFnZSBpcyB0b28gb2xkICglZC4lZCksICIKKwkJCSJwbGVhc2UgdXBncmFkZSB0aGUgRlBHQSB0byBhdCBsZWFzdDogJWQuJWRcbiIsCisJCQlwcml2LT5mdy5tYWpvciwgcHJpdi0+ZncubWlub3IsCisJCQlUSU1CX1NVUFBPUlRFRF9NQUpPUiwgVElNQl9SRVFVSVJFRF9NSU5PUik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJbXNpeF9lbnRyaWVzID0ga3phbGxvYyhUSU1CRVJEQUxFX05SX0lSUVMgKiBzaXplb2YoKm1zaXhfZW50cmllcyksCisJCUdGUF9LRVJORUwpOworCWlmICghbXNpeF9lbnRyaWVzKQorCQlnb3RvIGVycl9pb3JlbWFwOworCisJZm9yIChpID0gMDsgaSA8IFRJTUJFUkRBTEVfTlJfSVJRUzsgaSsrKQorCQltc2l4X2VudHJpZXNbaV0uZW50cnkgPSBpOworCisJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGRldiwgbXNpeF9lbnRyaWVzLCBUSU1CRVJEQUxFX05SX0lSUVMpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkiTVNJLVggaW5pdCBmYWlsZWQ6ICVkLCBleHBlY3RlZCBlbnRyaWVzOiAlZFxuIiwKKwkJCWVyciwgVElNQkVSREFMRV9OUl9JUlFTKTsKKwkJZ290byBlcnJfbXNpeDsKKwl9CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfZndfdmVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9jcmVhdGVfZmlsZTsKKworCS8qIFJlc2V0IGFsbCBGUEdBIFBMQiBwZXJpcGhlcmFscyAqLworCWlvd3JpdGUzMigweDEsIHByaXYtPmN0bF9tZW1iYXNlICsgVElNQl9TV19SU1QpOworCisJLyogdXBkYXRlIElSUSBvZmZzZXRzIGluIEkyQyBib2FyZCBpbmZvICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mbyk7IGkrKykKKwkJdGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mb1tpXS5pcnEgPQorCQkJbXNpeF9lbnRyaWVzW3RpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm9baV0uaXJxXS52ZWN0b3I7CisKKwkvKiBVcGRhdGUgdGhlIFNQSSBjb25maWd1cmF0aW9uIGRlcGVuZGluZyBvbiB0aGUgSFcgKDggb3IgMTYgYml0KSAqLworCWlmIChwcml2LT5mdy5jb25maWcgJiBUSU1CX0hXX0NPTkZJR19TUElfOEJJVCkgeworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5iaXRzX3Blcl93b3JkID0gODsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEuZGV2aWNlcyA9CisJCQl0aW1iZXJkYWxlX3NwaV84Yml0X2JvYXJkX2luZm87CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLm51bV9kZXZpY2VzID0KKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfOGJpdF9ib2FyZF9pbmZvKTsKKwl9IGVsc2UgeworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5iaXRzX3Blcl93b3JkID0gMTY7CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLmRldmljZXMgPQorCQkJdGltYmVyZGFsZV9zcGlfMTZiaXRfYm9hcmRfaW5mbzsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEubnVtX2RldmljZXMgPQorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV8xNmJpdF9ib2FyZF9pbmZvKTsKKwl9CisKKwlpcF9zZXR1cCA9IHByaXYtPmZ3LmNvbmZpZyAmIFRJTUJfSFdfVkVSX01BU0s7CisJc3dpdGNoIChpcF9zZXR1cCkgeworCWNhc2UgVElNQl9IV19WRVIwOgorCQllcnIgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAtMSwKKwkJCXRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcwLAorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMCksCisJCQkmZGV2LT5yZXNvdXJjZVswXSwgbXNpeF9lbnRyaWVzWzBdLnZlY3Rvcik7CisJCWJyZWFrOworCWNhc2UgVElNQl9IV19WRVIxOgorCQllcnIgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAtMSwKKwkJCXRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcxLAorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMSksCisJCQkmZGV2LT5yZXNvdXJjZVswXSwgbXNpeF9lbnRyaWVzWzBdLnZlY3Rvcik7CisJCWJyZWFrOworCWNhc2UgVElNQl9IV19WRVIyOgorCQllcnIgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAtMSwKKwkJCXRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcyLAorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMiksCisJCQkmZGV2LT5yZXNvdXJjZVswXSwgbXNpeF9lbnRyaWVzWzBdLnZlY3Rvcik7CisJCWJyZWFrOworCWNhc2UgVElNQl9IV19WRVIzOgorCQllcnIgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAtMSwKKwkJCXRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmczLAorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMyksCisJCQkmZGV2LT5yZXNvdXJjZVswXSwgbXNpeF9lbnRyaWVzWzBdLnZlY3Rvcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiVWtub3duIElQIHNldHVwOiAlZC4lZC4lZFxuIiwKKwkJCXByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vciwgaXBfc2V0dXApOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9tZmQ7CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJtZmRfYWRkX2RldmljZXMgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfbWZkOworCX0KKworCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIDAsCisJCXRpbWJlcmRhbGVfY2VsbHNfYmFyMSwgQVJSQVlfU0laRSh0aW1iZXJkYWxlX2NlbGxzX2JhcjEpLAorCQkmZGV2LT5yZXNvdXJjZVsxXSwgbXNpeF9lbnRyaWVzWzBdLnZlY3Rvcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1mZF9hZGRfZGV2aWNlcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9tZmQyOworCX0KKworCS8qIG9ubHkgdmVyc2lvbiAwIGFuZCAzIGhhdmUgdGhlIGlOYW5kIHJvdXRlZCB0byBTREhDSSAqLworCWlmICgoKHByaXYtPmZ3LmNvbmZpZyAmIFRJTUJfSFdfVkVSX01BU0spID09IFRJTUJfSFdfVkVSMCkgfHwKKwkJKChwcml2LT5mdy5jb25maWcgJiBUSU1CX0hXX1ZFUl9NQVNLKSA9PSBUSU1CX0hXX1ZFUjMpKSB7CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIDEsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMiwKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIyKSwKKwkJCSZkZXYtPnJlc291cmNlWzJdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICJtZmRfYWRkX2RldmljZXMgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJCWdvdG8gZXJyX21mZDI7CisJCX0KKwl9CisKKwlrZnJlZShtc2l4X2VudHJpZXMpOworCisJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkiRm91bmQgVGltYmVyZGFsZSBDYXJkLiBSZXY6ICVkLiVkLCBIVyBjb25maWc6IDB4JTAyeFxuIiwKKwkJcHJpdi0+ZncubWFqb3IsIHByaXYtPmZ3Lm1pbm9yLCBwcml2LT5mdy5jb25maWcpOworCisJcmV0dXJuIDA7CisKK2Vycl9tZmQyOgorCW1mZF9yZW1vdmVfZGV2aWNlcygmZGV2LT5kZXYpOworZXJyX21mZDoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfZndfdmVyKTsKK2Vycl9jcmVhdGVfZmlsZToKKwlwY2lfZGlzYWJsZV9tc2l4KGRldik7CitlcnJfbXNpeDoKKwlpb3VubWFwKHByaXYtPmN0bF9tZW1iYXNlKTsKK2Vycl9pb3JlbWFwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihwcml2LT5jdGxfbWFwYmFzZSwgQ0hJUENUTFNJWkUpOworZXJyX3JlcXVlc3Q6CisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CitlcnJfc3RhcnQ6CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CitlcnJfZW5hYmxlOgorCWtmcmVlKG1zaXhfZW50cmllcyk7CisJa2ZyZWUocHJpdik7CisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB0aW1iX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCB0aW1iZXJkYWxlX2RldmljZSAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCisJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfZndfdmVyKTsKKworCWlvdW5tYXAocHJpdi0+Y3RsX21lbWJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwcml2LT5jdGxfbWFwYmFzZSwgQ0hJUENUTFNJWkUpOworCisJcGNpX2Rpc2FibGVfbXNpeChkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHByaXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdGltYmVyZGFsZV9wY2lfdGJsW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVElNQiwgUENJX0RFVklDRV9JRF9USU1CKSB9LAorCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHRpbWJlcmRhbGVfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0aW1iZXJkYWxlX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuaWRfdGFibGUgPSB0aW1iZXJkYWxlX3BjaV90YmwsCisJLnByb2JlID0gdGltYl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodGltYl9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGltYmVyZGFsZV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnRpbWJlcmRhbGVfcGNpX2RyaXZlcik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBkcml2ZXIgZm9yICVzIGRldmljZS5cbiIsCisJCQl0aW1iZXJkYWxlX3BjaV9kcml2ZXIubmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkRyaXZlciBmb3IgJXMgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQuXG4iLAorCQl0aW1iZXJkYWxlX3BjaV9kcml2ZXIubmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRpbWJlcmRhbGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdGltYmVyZGFsZV9wY2lfZHJpdmVyKTsKKworCXByaW50ayhLRVJOX0lORk8gIkRyaXZlciBmb3IgJXMgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVucmVnaXN0ZXJlZC5cbiIsCisJCXRpbWJlcmRhbGVfcGNpX2RyaXZlci5uYW1lKTsKK30KKworbW9kdWxlX2luaXQodGltYmVyZGFsZV9pbml0KTsKK21vZHVsZV9leGl0KHRpbWJlcmRhbGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5oIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjdmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiB0aW1iZXJkYWxlLmggdGltYmVyZGFsZSBGUEdBIE1GRCBkcml2ZXIgZGVmaW5lcworICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogU3VwcG9ydHM6CisgKiBUaW1iZXJkYWxlIEZQR0EKKyAqLworCisjaWZuZGVmIE1GRF9USU1CRVJEQUxFX0gKKyNkZWZpbmUgTUZEX1RJTUJFUkRBTEVfSAorCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMC4xIgorCisvKiBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnQgdmVyc2lvbnMgPj0gMy44IGFuZCA8IDQuMCAgKi8KKyNkZWZpbmUgVElNQl9TVVBQT1JURURfTUFKT1IJMworCisvKiBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnQgbWlub3IgPj0gOCAqLworI2RlZmluZSBUSU1CX1JFUVVJUkVEX01JTk9SCTgKKworLyogUmVnaXN0ZXJzIG9mIHRoZSBjb250cm9sIGFyZWEgKi8KKyNkZWZpbmUgVElNQl9SRVZfTUFKT1IJMHgwMAorI2RlZmluZSBUSU1CX1JFVl9NSU5PUgkweDA0CisjZGVmaW5lIFRJTUJfSFdfQ09ORklHCTB4MDgKKyNkZWZpbmUgVElNQl9TV19SU1QJMHg0MAorCisvKiBiaXRzIGluIHRoZSBUSU1CX0hXX0NPTkZJRyByZWdpc3RlciAqLworI2RlZmluZSBUSU1CX0hXX0NPTkZJR19TUElfOEJJVAkweDgwCisKKyNkZWZpbmUgVElNQl9IV19WRVJfTUFTSwkweDBmCisjZGVmaW5lIFRJTUJfSFdfVkVSMAkJMHgwMAorI2RlZmluZSBUSU1CX0hXX1ZFUjEJCTB4MDEKKyNkZWZpbmUgVElNQl9IV19WRVIyCQkweDAyCisjZGVmaW5lIFRJTUJfSFdfVkVSMwkJMHgwMworCisjZGVmaW5lIE9DT1JFU09GRlNFVAkweDAKKyNkZWZpbmUgT0NPUkVTRU5ECTB4MWYKKworI2RlZmluZSBTUElPRkZTRVQJMHg4MAorI2RlZmluZSBTUElFTkQJCTB4ZmYKKworI2RlZmluZSBVQVJUTElURU9GRlNFVAkweDEwMAorI2RlZmluZSBVQVJUTElURUVORAkweDEwZgorCisjZGVmaW5lIFJEU09GRlNFVAkweDE4MAorI2RlZmluZSBSRFNFTkQJCTB4MTgzCisKKyNkZWZpbmUgRVRIT0ZGU0VUCTB4MzAwCisjZGVmaW5lIEVUSEVORAkJMHgzZmYKKworI2RlZmluZSBHUElPT0ZGU0VUCTB4NDAwCisjZGVmaW5lIEdQSU9FTkQJCTB4N2ZmCisKKyNkZWZpbmUgQ0hJUENUTE9GRlNFVAkweDgwMAorI2RlZmluZSBDSElQQ1RMRU5ECTB4OGZmCisjZGVmaW5lIENISVBDVExTSVpFCShDSElQQ1RMRU5EIC0gQ0hJUENUTE9GRlNFVCkKKworI2RlZmluZSBJTlRDT0ZGU0VUCTB4YzAwCisjZGVmaW5lIElOVENFTkQJCTB4ZmZmCisjZGVmaW5lIElOVENTSVpFCShJTlRDRU5EIC0gSU5UQ09GRlNFVCkKKworI2RlZmluZSBNT1NUT0ZGU0VUCTB4MTAwMAorI2RlZmluZSBNT1NURU5ECQkweDEzZmYKKworI2RlZmluZSBVQVJUT0ZGU0VUCTB4MTQwMAorI2RlZmluZSBVQVJURU5ECQkweDE3ZmYKKworI2RlZmluZSBYSUlDT0ZGU0VUCTB4MTgwMAorI2RlZmluZSBYSUlDRU5ECQkweDE5ZmYKKworI2RlZmluZSBJMlNPRkZTRVQJMHgxQzAwCisjZGVmaW5lIEkyU0VORAkJMHgxZmZmCisKKyNkZWZpbmUgTE9HSVdPRkZTRVQJMHgzMDAwMAorI2RlZmluZSBMT0dJV0VORAkweDM3ZmZmCisKKyNkZWZpbmUgTUxDT1JFT0ZGU0VUCTB4NDAwMDAKKyNkZWZpbmUgTUxDT1JFRU5ECTB4NDNmZmYKKworI2RlZmluZSBETUFPRkZTRVQJMHgwMTAwMDAwMAorI2RlZmluZSBETUFFTkQJCTB4MDEzZmZmZmYKKworLyogU0RIQzAgaXMgcGxhY2VkIGluIFBDSSBiYXIgMSAqLworI2RlZmluZSBTREhDME9GRlNFVAkweDAwCisjZGVmaW5lIFNESEMwRU5ECTB4ZmYKKworLyogU0RIQzEgaXMgcGxhY2VkIGluIFBDSSBiYXIgMiAqLworI2RlZmluZSBTREhDMU9GRlNFVAkweDAwCisjZGVmaW5lIFNESEMxRU5ECTB4ZmYKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJTUIJMHgxMGVlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElNQgkweGExMjMKKworI2RlZmluZSBJUlFfVElNQkVSREFMRV9JTklDCQkwCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX01MQgkJMQorI2RlZmluZSBJUlFfVElNQkVSREFMRV9HUElPCQkyCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0kyQwkJMworI2RlZmluZSBJUlFfVElNQkVSREFMRV9VQVJUCQk0CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0RNQQkJNQorI2RlZmluZSBJUlFfVElNQkVSREFMRV9JMlMJCTYKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfVFNDX0lOVAkJNworI2RlZmluZSBJUlFfVElNQkVSREFMRV9TREhDCQk4CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0FEVjcxODAJCTkKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfRVRIU1dfSUYJCTEwCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1NQSQkJMTEKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfVUFSVExJVEUJCTEyCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX01MQ09SRQkJMTMKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfTUxDT1JFX0JVRgkxNAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9SRFMJCTE1CisjZGVmaW5lIFRJTUJFUkRBTEVfTlJfSVJRUwkJMTYKKworI2RlZmluZSBHUElPX1BJTl9BU0NCCQk4CisjZGVmaW5lIEdQSU9fUElOX0lOSUNfUlNUCTE0CisjZGVmaW5lIEdQSU9fUElOX0JUX1JTVAkJMTUKKyNkZWZpbmUgR1BJT19OUl9QSU5TCQkxNgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYyBiL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYwppbmRleCBiOWYxZTg0Li5lN2Y4MDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCkBAIC03NCw2ICs3NCw5IEBACiAJfQogCiAJbXJxLT5jbWQtPmFyZyA9IGRldl9hZGRyOworCWlmICghbW1jX2NhcmRfYmxvY2thZGRyKHRlc3QtPmNhcmQpKQorCQltcnEtPmNtZC0+YXJnIDw8PSA5OworCiAJbXJxLT5jbWQtPmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsKIAogCWlmIChibG9ja3MgPT0gMSkKQEAgLTE5MCw3ICsxOTMsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7aSA8IEJVRkZFUl9TSVpFIC8gNTEyO2krKykgewotCQlyZXQgPSBtbWNfdGVzdF9idWZmZXJfdHJhbnNmZXIodGVzdCwgdGVzdC0+YnVmZmVyLCBpICogNTEyLCA1MTIsIDEpOworCQlyZXQgPSBtbWNfdGVzdF9idWZmZXJfdHJhbnNmZXIodGVzdCwgdGVzdC0+YnVmZmVyLCBpLCA1MTIsIDEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC0yMTksNyArMjIyLDcgQEAKIAltZW1zZXQodGVzdC0+YnVmZmVyLCAwLCA1MTIpOwogCiAJZm9yIChpID0gMDtpIDwgQlVGRkVSX1NJWkUgLyA1MTI7aSsrKSB7Ci0JCXJldCA9IG1tY190ZXN0X2J1ZmZlcl90cmFuc2Zlcih0ZXN0LCB0ZXN0LT5idWZmZXIsIGkgKiA1MTIsIDUxMiwgMSk7CisJCXJldCA9IG1tY190ZXN0X2J1ZmZlcl90cmFuc2Zlcih0ZXN0LCB0ZXN0LT5idWZmZXIsIGksIDUxMiwgMSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTQyNiw3ICs0MjksNyBAQAogCQlmb3IgKGkgPSAwO2kgPCBzZWN0b3JzO2krKykgewogCQkJcmV0ID0gbW1jX3Rlc3RfYnVmZmVyX3RyYW5zZmVyKHRlc3QsCiAJCQkJdGVzdC0+YnVmZmVyICsgaSAqIDUxMiwKLQkJCQlkZXZfYWRkciArIGkgKiA1MTIsIDUxMiwgMCk7CisJCQkJZGV2X2FkZHIgKyBpLCA1MTIsIDApOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCmluZGV4IGQzZjU1NjEuLjU3YjIxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCkBAIC02NTAsMTEgKzY1MCwxMSBAQAogCQkJCWZsYWdzID0gRERNQV9GTEFHU19JRTsKIAogCQkJaWYgKGhvc3QtPmZsYWdzICYgSE9TVF9GX1hNSVQpIHsKLQkJCQlyZXQgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZV9mbGFncyhjaGFubmVsLAotCQkJCQkodm9pZCAqKXNnX3ZpcnQoc2cpLCBsZW4sIGZsYWdzKTsKKwkJCQlyZXQgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjaGFubmVsLAorCQkJCQlzZ19waHlzKHNnKSwgbGVuLCBmbGFncyk7CiAJCQl9IGVsc2UgewotCQkJCXJldCA9IGF1MXh4eF9kYmRtYV9wdXRfZGVzdF9mbGFncyhjaGFubmVsLAotCQkJCQkodm9pZCAqKXNnX3ZpcnQoc2cpLCBsZW4sIGZsYWdzKTsKKwkJCQlyZXQgPSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoY2hhbm5lbCwKKwkJCQkJc2dfcGh5cyhzZyksIGxlbiwgZmxhZ3MpOwogCQkJfQogCiAJCQlpZiAoIXJldCkKQEAgLTEwMTcsNiArMTAxNywxMCBAQAogCX0gZWxzZQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOwogCisJLyogcGxhdGZvcm0gbWF5IG5vdCBiZSBhYmxlIHRvIHVzZSBhbGwgYWR2ZXJ0aXNlZCBjYXBzICovCisJaWYgKGhvc3QtPnBsYXRkYXRhKQorCQltbWMtPmNhcHMgJj0gfihob3N0LT5wbGF0ZGF0YS0+bWFza19ob3N0X2NhcHMpOworCiAJdGFza2xldF9pbml0KCZob3N0LT5kYXRhX3Rhc2ssIGF1MXhtbWNfdGFza2xldF9kYXRhLAogCQkJKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCAyZGUwY2M4Li4yYmIwM2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0yNTEsMTIgKzI1MSw2IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgZmxhc2ggY2hpcHMgb24gTkVUdGVsL1NlY3VyZUVkZ2UvU25hcEdlYXIgYm9hcmRzLgogCi1jb25maWcgTVREX0FMQ0hFTVkKLQl0cmlzdGF0ZSAiQU1EIEFsY2hlbXkgUGIxeHh4L0RiMXh4eC9SREsgTVREIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT0NfQVUxWDAwICYmIE1URF9QQVJUSVRJT05TICYmIE1URF9DRkkKLQloZWxwCi0JICBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIEFNRCBBbGNoZW15IFBiL0RiL1JESyBSZWZlcmVuY2UgQm9hcmRzCi0KIGNvbmZpZyBNVERfRElMTkVUUEMKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gRElML05ldCBQQyIKIAlkZXBlbmRzIG9uIFg4NiAmJiBNVERfQ09OQ0FUICYmIE1URF9QQVJUSVRJT05TICYmIE1URF9DRklfSU5URUxFWFQgJiYgQlJPS0VOCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCBjZTMxNTIxLi5hNDQ5MTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTQwLDcgKzQwLDYgQEAKIG9iai0kKENPTkZJR19NVERfREJPWDIpCQkrPSBkYm94Mi1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX1NPTFVUSU9ORU5HSU5FKSs9IHNvbHV0aW9uZW5naW5lLm8KIG9iai0kKENPTkZJR19NVERfUENJKQkJKz0gcGNpLm8KLW9iai0kKENPTkZJR19NVERfQUxDSEVNWSkgICAgICAgKz0gYWxjaGVteS1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0FVVENQVTEyKQkrPSBhdXRjcHUxMi1udnJhbS5vCiBvYmotJChDT05GSUdfTVREX0VEQjczMTIpCSs9IGVkYjczMTIubwogb2JqLSQoQ09ORklHX01URF9JTVBBNykJCSs9IGltcGE3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NWFkNGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gQU1EIEFsY2hlbXkgZXZhbHVhdGlvbiBib2FyZHMKLSAqCi0gKiAoQykgMjAwMywgMjAwNCBQZXRlIFBvcG92IDxwcG9wb3ZAZW1iZWRkZWRhbGxleS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTAwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAwODAwMDAwIC8qIDhNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxNTAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJQYjE1MDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwNDAwMDAwMCAvKiA2NE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjExMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTEwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA0MDAwMDAwIC8qIDY0TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTU1MAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxNTUwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxMjAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggMiAvKiAxNi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTAwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxMDAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDIwMDAwMDAgLyogMzJNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJEYjE1MDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwMjAwMDAwMCAvKiAzMk1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjExMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkRiMTEwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAyMDAwMDAwIC8qIDMyTUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxNTUwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxMjAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDQwMDAwMDAgLyogNjRNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCAyIC8qIDE2LWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkJvc3BvcnVzIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDEwMDAwMDAgLyogMTZNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCAyIC8qIDE2LWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJNaXJhZ2UgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwNDAwMDAwMCAvKiA2NE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2RlZmluZSBVU0VfTE9DQUxfQUNDRVNTT1JTIC8qIHdoeT8gKi8KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIGFsY2hlbXlfbWFwID0gewotCS5uYW1lID0JQk9BUkRfTUFQX05BTUUsCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYWxjaGVteV9wYXJ0aXRpb25zW10gPSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgICAgICAubmFtZSA9ICJVc2VyIEZTIiwKLSAgICAgICAgICAgICAgICAuc2l6ZSA9IEJPQVJEX0ZMQVNIX1NJWkUgLSAweDAwNDAwMDAwLAotICAgICAgICAgICAgICAgIC5vZmZzZXQgPSAweDAwMDAwMDAKLSAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgLm5hbWUgPSAiWUFNT04iLAotICAgICAgICAgICAgICAgIC5zaXplID0gMHgwMTAwMDAwLAotCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAotICAgICAgICAgICAgICAgIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRQotICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAubmFtZSA9ICJyYXcga2VybmVsIiwKLQkJLnNpemUgPSAoMHgzMDAwMDAgLSAweDQwMDAwKSwgLyogbGFzdCAyNTZLQiBpcyB5YW1vbiBlbnYgKi8KLQkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKLSAgICAgICAgfQotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsY2hlbXlfbXRkX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7Ci0JaW50IG5iX3BhcnRzID0gMDsKLQl1bnNpZ25lZCBsb25nIHdpbmRvd19hZGRyOwotCXVuc2lnbmVkIGxvbmcgd2luZG93X3NpemU7Ci0KLQkvKiBEZWZhdWx0IGZsYXNoIGJ1c3dpZHRoICovCi0JYWxjaGVteV9tYXAuYmFua3dpZHRoID0gQk9BUkRfRkxBU0hfV0lEVEg7Ci0KLQl3aW5kb3dfYWRkciA9IDB4MjAwMDAwMDAgLSBCT0FSRF9GTEFTSF9TSVpFOwotCXdpbmRvd19zaXplID0gQk9BUkRfRkxBU0hfU0laRTsKLQotCS8qCi0JICogU3RhdGljIHBhcnRpdGlvbiBkZWZpbml0aW9uIHNlbGVjdGlvbgotCSAqLwotCXBhcnRzID0gYWxjaGVteV9wYXJ0aXRpb25zOwotCW5iX3BhcnRzID0gQVJSQVlfU0laRShhbGNoZW15X3BhcnRpdGlvbnMpOwotCWFsY2hlbXlfbWFwLnNpemUgPSB3aW5kb3dfc2l6ZTsKLQotCS8qCi0JICogTm93IGxldCdzIHByb2JlIGZvciB0aGUgYWN0dWFsIGZsYXNoLiAgRG8gaXQgaGVyZSBzaW5jZQotCSAqIHNwZWNpZmljIG1hY2hpbmUgc2V0dGluZ3MgbWlnaHQgaGF2ZSBiZWVuIHNldCBhYm92ZS4KLQkgKi8KLQlwcmludGsoS0VSTl9OT1RJQ0UgQk9BUkRfTUFQX05BTUUgIjogcHJvYmluZyAlZC1iaXQgZmxhc2ggYnVzXG4iLAotCQkJYWxjaGVteV9tYXAuYmFua3dpZHRoKjgpOwotCWFsY2hlbXlfbWFwLnZpcnQgPSBpb3JlbWFwKHdpbmRvd19hZGRyLCB3aW5kb3dfc2l6ZSk7Ci0JbXltdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZhbGNoZW15X21hcCk7Ci0JaWYgKCFteW10ZCkgewotCQlpb3VubWFwKGFsY2hlbXlfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQlteW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQotCWFkZF9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydHMsIG5iX3BhcnRzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsY2hlbXlfbXRkX2NsZWFudXAodm9pZCkKLXsKLQlpZiAobXltdGQpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKG15bXRkKTsKLQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCQlpb3VubWFwKGFsY2hlbXlfbWFwLnZpcnQpOwotCX0KLX0KLQotbW9kdWxlX2luaXQoYWxjaGVteV9tdGRfaW5pdCk7Ci1tb2R1bGVfZXhpdChhbGNoZW15X210ZF9jbGVhbnVwKTsKLQotTU9EVUxFX0FVVEhPUigiRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zLCBJbmMiKTsKLU1PRFVMRV9ERVNDUklQVElPTihCT0FSRF9NQVBfTkFNRSAiIE1URCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCA2NzdjZDUzLi5iYjY0NjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC00NTcsMTAgKzQ1NywxMCBAQAogCiBjb25maWcgTVREX05BTkRfU0hfRkxDVEwKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBvbiBSZW5lc2FzIFN1cGVySCBGTENUTCIKLQlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFNVUEVSSCAmJiBDUFVfU1VCVFlQRV9TSDc3MjMKKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFNVUEVSSAogCWhlbHAKIAkgIFNldmVyYWwgUmVuZXNhcyBTdXBlckggQ1BVIGhhcyBGTENUTC4gVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0Ci0JICBmb3IgTkFORCBGbGFzaCB1c2luZyBGTENUTC4gVGhpcyBkcml2ZXIgc3VwcG9ydCBTSDc3MjMuCisJICBmb3IgTkFORCBGbGFzaCB1c2luZyBGTENUTC4KIAogY29uZmlnIE1URF9OQU5EX0RBVklOQ0kKICAgICAgICAgdHJpc3RhdGUgIlN1cHBvcnQgTkFORCBvbiBEYVZpbmNpIFNvQyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYwppbmRleCA5MmMzMzRmLi40M2Q0NmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KIAogLyoKICAqIE1URCBzdHJ1Y3R1cmUgZm9yIE5BTkQgY29udHJvbGxlcgpAQCAtNDc1LDcgKzQ3Niw4IEBACiAJLyogc2V0IGdwaW8yMDYgaGlnaCAqLwogCWF1X3dyaXRlbChhdV9yZWFkbChHUElPMl9ESVIpICYgfigxIDw8IDYpLCBHUElPMl9ESVIpOwogCi0JYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDcgPDwgMSkpIHwgKChiY3NyLT5zdGF0dXMgPj4gNikgJiAweDEpOworCWJvb3Rfc3dhcGJvb3QgPSAoYXVfcmVhZGwoTUVNX1NUU1RBVCkgJiAoMHg3IDw8IDEpKSB8ICgoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSA+PiA2KSAmIDB4MSk7CisKIAlzd2l0Y2ggKGJvb3Rfc3dhcGJvb3QpIHsKIAljYXNlIDA6CiAJY2FzZSAyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCmluZGV4IDAyYmVmMjEuLjE4NDJkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBTdXBlckggRkxDVEwgbmFuZCBjb250cm9sbGVyCiAgKgotICogQ29weXJpZ2h0IMKpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KLSAqIENvcHlyaWdodCDCqSAyMDA4IEF0b20gQ3JlYXRlIEVuZ2luZWVyaW5nIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCiAgKgotICogQmFzZWQgb24gZnNsX2VsYmNfbmFuZC5jLCBDb3B5cmlnaHQgwqkgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKiBCYXNlZCBvbiBmc2xfZWxiY19uYW5kLmMsIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC03NSw2ICs3NSwxMSBAQAogCXdyaXRlYihUUlNUUlQsIEZMVFJDUihmbGN0bCkpOwogfQogCitzdGF0aWMgdm9pZCB0aW1lb3V0X2Vycm9yKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlkZXZfZXJyKCZmbGN0bC0+cGRldi0+ZGV2LCAiVGltZW91dCBvY2N1cmVkIGluICVzXG4iLCBzdHIpOworfQorCiBzdGF0aWMgdm9pZCB3YWl0X2NvbXBsZXRpb24oc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKIHsKIAl1aW50MzJfdCB0aW1lb3V0ID0gTE9PUF9USU1FT1VUX01BWDsKQEAgLTg3LDcgKzkyLDcgQEAKIAkJdWRlbGF5KDEpOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAid2FpdF9jb21wbGV0aW9uKCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIAl3cml0ZWIoMHgwLCBGTFRSQ1IoZmxjdGwpKTsKIH0KIApAQCAtMTAwLDYgKzEwNSw4IEBACiAJCWFkZHIgPSBwYWdlX2FkZHI7CS8qIEVSQVNFMSAqLwogCX0gZWxzZSBpZiAocGFnZV9hZGRyICE9IC0xKSB7CiAJCS8qIFNFUUlOLCBSRUFEMCwgZXRjLi4gKi8KKwkJaWYgKGZsY3RsLT5jaGlwLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJY29sdW1uID4+PSAxOwogCQlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkgewogCQkJYWRkciA9IGNvbHVtbiAmIDB4MEZGRjsKIAkJCWFkZHIgfD0gKHBhZ2VfYWRkciAmIDB4ZmYpIDw8IDE2OwpAQCAtMTMyLDcgKzEzOSw3IEBACiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHZvaWQgd2FpdF93Zmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQpAQCAtMTQ2LDcgKzE1Myw3IEBACiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIGludCB3YWl0X3JlY2ZpZm9fcmVhZHkoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IHNlY3Rvcl9udW1iZXIpCkBAIC0xOTgsNyArMjA1LDcgQEAKIAkJd3JpdGVsKDAsIEZMNEVDQ0NSKGZsY3RsKSk7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JlY2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJdGltZW91dF9lcnJvcihmbGN0bCwgX19mdW5jX18pOwogCXJldHVybiAxOwkvKiB0aW1lb3V0ICovCiB9CiAKQEAgLTIxNCw3ICsyMjEsNyBAQAogCQkJcmV0dXJuOwogCQl1ZGVsYXkoMSk7CiAJfQotCXByaW50ayhLRVJOX0VSUiAid2FpdF93ZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHZvaWQgcmVhZF9kYXRhcmVnKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGludCBvZmZzZXQpCkBAIC0yNzUsNyArMjgyLDcgQEAKIHN0YXRpYyB2b2lkIHNldF9jbWRfcmVncyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDMyX3QgY21kLCB1aW50MzJfdCBmbGNtY2RyX3ZhbCkKIHsKIAlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7Ci0JdWludDMyX3QgZmxjbW5jcl92YWwgPSByZWFkbChGTENNTkNSKGZsY3RsKSk7CisJdWludDMyX3QgZmxjbW5jcl92YWwgPSByZWFkbChGTENNTkNSKGZsY3RsKSkgJiB+U0VMXzE2QklUOwogCXVpbnQzMl90IGZsY21kY3JfdmFsLCBhZGRyX2xlbl9ieXRlcyA9IDA7CiAKIAkvKiBTZXQgU05BTkQgYml0IGlmIHBhZ2Ugc2l6ZSBpcyAyMDQ4Ynl0ZSAqLwpAQCAtMjk3LDYgKzMwNCw4IEBACiAJY2FzZSBOQU5EX0NNRF9SRUFET09COgogCQlhZGRyX2xlbl9ieXRlcyA9IGZsY3RsLT5yd19BRFJDTlQ7CiAJCWZsY21kY3JfdmFsIHw9IENEU1JDX0U7CisJCWlmIChmbGN0bC0+Y2hpcC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWZsY21uY3JfdmFsIHw9IFNFTF8xNkJJVDsKIAkJYnJlYWs7CiAJY2FzZSBOQU5EX0NNRF9TRVFJTjoKIAkJLyogVGhpcyBjYXNlIGlzIHRoYXQgY21kIGlzIFJFQUQwIG9yIFJFQUQxIG9yIFJFQUQwMCAqLwpAQCAtMzA1LDYgKzMxNCw4IEBACiAJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKIAkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOwogCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRSB8IENEU1JDX0UgfCBTRUxSVzsKKwkJaWYgKGZsY3RsLT5jaGlwLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJZmxjbW5jcl92YWwgfD0gU0VMXzE2QklUOwogCQlicmVhazsKIAljYXNlIE5BTkRfQ01EX1JFQURJRDoKIAkJZmxjbW5jcl92YWwgJj0gflNOQU5EX0U7CkBAIC01MjMsNiArNTM0LDggQEAKIAkJc2V0X2FkZHIobXRkLCAwLCBwYWdlX2FkZHIpOwogCiAJCWZsY3RsLT5yZWFkX2J5dGVzID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CisJCWlmIChmbGN0bC0+Y2hpcC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWNvbHVtbiA+Pj0gMTsKIAkJZmxjdGwtPmluZGV4ICs9IGNvbHVtbjsKIAkJZ290byByZWFkX25vcm1hbF9leGl0OwogCkBAIC02ODYsNiArNjk5LDE4IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKK3N0YXRpYyB1aW50MTZfdCBmbGN0bF9yZWFkX3dvcmQoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisgICAgICAgc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworICAgICAgIGludCBpbmRleCA9IGZsY3RsLT5pbmRleDsKKyAgICAgICB1aW50MTZfdCBkYXRhOworICAgICAgIHVpbnQxNl90ICpidWYgPSAodWludDE2X3QgKikmZmxjdGwtPmRvbmVfYnVmZltpbmRleF07CisKKyAgICAgICBkYXRhID0gKmJ1ZjsKKyAgICAgICBmbGN0bC0+aW5kZXggKz0gMjsKKyAgICAgICByZXR1cm4gZGF0YTsKK30KKwogc3RhdGljIHZvaWQgZmxjdGxfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKQEAgLTc2OSwzOCArNzk0LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZsY3RsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmbGN0bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGw7CiAJc3RydWN0IG10ZF9pbmZvICpmbGN0bF9tdGQ7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZDsKIAlzdHJ1Y3Qgc2hfZmxjdGxfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOWElPOwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAocGRhdGEgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInNoX2ZsY3RsIHBsYXRmb3JtX2RhdGEgbm90IGZvdW5kLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmbGN0bCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9mbGN0bCksIEdGUF9LRVJORUwpOwogCWlmICghZmxjdGwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgTkFORCBNVEQgZGV2IHN0cnVjdHVyZS5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc291cmNlIG5vdCBmb3VuZC5cbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVOT0RFVjsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCi0JZmxjdGwtPnJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJZmxjdGwtPnJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZmxjdGwtPnJlZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC04MDgsNiArODMxLDcgQEAKIAlmbGN0bF9tdGQgPSAmZmxjdGwtPm10ZDsKIAluYW5kID0gJmZsY3RsLT5jaGlwOwogCWZsY3RsX210ZC0+cHJpdiA9IG5hbmQ7CisJZmxjdGwtPnBkZXYgPSBwZGV2OwogCWZsY3RsLT5od2VjYyA9IHBkYXRhLT5oYXNfaHdlY2M7CiAKIAlmbGN0bF9yZWdpc3Rlcl9pbml0KGZsY3RsLCBwZGF0YS0+ZmxjbW5jcl92YWwpOwpAQCAtODI1LDYgKzg0OSwxMSBAQAogCW5hbmQtPnNlbGVjdF9jaGlwID0gZmxjdGxfc2VsZWN0X2NoaXA7CiAJbmFuZC0+Y21kZnVuYyA9IGZsY3RsX2NtZGZ1bmM7CiAKKwlpZiAocGRhdGEtPmZsY21uY3JfdmFsICYgU0VMXzE2QklUKSB7CisJCW5hbmQtPm9wdGlvbnMgfD0gTkFORF9CVVNXSURUSF8xNjsKKwkJbmFuZC0+cmVhZF93b3JkID0gZmxjdGxfcmVhZF93b3JkOworCX0KKwogCXJldCA9IG5hbmRfc2Nhbl9pZGVudChmbGN0bF9tdGQsIDEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwpAQCAtODQ2LDcgKzg3NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgZmxjdGxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBmbGN0bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCA2YmFjMDQ2Li42ZTVhNjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgpAQCAtNjMsNiArNjQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2luY2x1ZGUgPGF1MTAwMC5oPgorI2luY2x1ZGUgPGF1MXh4eF9ldGguaD4KICNpbmNsdWRlIDxwcm9tLmg+CiAKICNpbmNsdWRlICJhdTEwMDBfZXRoLmgiCkBAIC0xMTIsMTUgKzExNCwxNSBAQAogICoKICAqIFBIWSBkZXRlY3Rpb24gYWxnb3JpdGhtCiAgKgotICogSWYgQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHIGlzIHVuZGVmaW5lZCwgdGhlIFBIWSBzZXR1cCBpcworICogSWYgcGh5X3N0YXRpY19jb25maWcgaXMgdW5kZWZpbmVkLCB0aGUgUEhZIHNldHVwIGlzCiAgKiBhdXRvZGV0ZWN0ZWQ6CiAgKgogICogbWlpX3Byb2JlKCkgZmlyc3Qgc2VhcmNoZXMgdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyBmb3IgYSBQSFksCi0gKiBzZWxlY3RpbmcgdGhlIGZpcnN0IChvciBsYXN0LCBpZiBBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIgaXMKKyAqIHNlbGVjdGluZyB0aGUgZmlyc3QgKG9yIGxhc3QsIGlmIHBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyIGlzCiAgKiBkZWZpbmVkKSBQSFkgYWRkcmVzcyBub3QgYWxyZWFkeSBjbGFpbWVkIGJ5IGFub3RoZXIgbmV0ZGV2LgogICoKICAqIElmIG5vdGhpbmcgd2FzIGZvdW5kIHRoYXQgd2F5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgMm5kIGV0aGVybmV0Ci0gKiBjb250cm9sbGVyJ3MgUEhZIGFuZCBBVTFYWFhfUEhZMV9TRUFSQ0hfT05fTUFDMCBpcyBkZWZpbmVkLCB0aGVuCisgKiBjb250cm9sbGVyJ3MgUEhZIGFuZCBwaHkxX3NlYXJjaF9tYWMwIGlzIGRlZmluZWQsIHRoZW4KICAqIHRoZSBmaXJzdCBNSUkgYnVzIGlzIHNlYXJjaGVkIGFzIHdlbGwgZm9yIGFuIHVuY2xhaW1lZCBQSFk7IHRoaXMgaXMKICAqIG5lZWRlZCBpbiBjYXNlIG9mIGEgZHVhbC1QSFkgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2ggdGhlIE1BQzAncyBNSUkKICAqIGJ1cy4KQEAgLTEyOSw5ICsxMzEsNyBAQAogICogY29udHJvbGxlciBpcyBub3QgcmVnaXN0ZXJlZCB0byB0aGUgbmV0d29yayBzdWJzeXN0ZW0uCiAgKi8KIAotLyogYXV0b2RldGVjdGlvbiBkZWZhdWx0cyAqLwotI3VuZGVmICBBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIKLSNkZWZpbmUgQVUxWFhYX1BIWTFfU0VBUkNIX09OX01BQzAKKy8qIGF1dG9kZXRlY3Rpb24gZGVmYXVsdHM6IHBoeTFfc2VhcmNoX21hYzAgKi8KIAogLyogc3RhdGljIFBIWSBzZXR1cAogICoKQEAgLTE0OCwyOSArMTQ4LDYgQEAKICAqIHNwZWNpZmljIGlycS1tYXAKICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19CT1NQT1JVUykKLS8qCi0gKiBNaWNyZWwvS2VuZGluIDUgcG9ydCBzd2l0Y2ggYXR0YWNoZWQgdG8gTUFDMCwKLSAqIE1BQzAgaXMgYXNzb2NpYXRlZCB3aXRoIFBIWSBhZGRyZXNzIDUgKD09IFdBTiBwb3J0KQotICogTUFDMSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBQSFksIHNpbmNlIGl0J3MgY29ubmVjdGVkIGRpcmVjdGx5Ci0gKiB0byB0aGUgc3dpdGNoLgotICogbm8gaW50ZXJydXB0cyBhcmUgdXNlZAotICovCi0jIGRlZmluZSBBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcKLQotIyBkZWZpbmUgQVUxWFhYX1BIWTBfQUREUiAgNQotIyBkZWZpbmUgQVUxWFhYX1BIWTBfQlVTSUQgMAotIyAgdW5kZWYgQVUxWFhYX1BIWTBfSVJRCi0KLSMgIHVuZGVmIEFVMVhYWF9QSFkxX0FERFIKLSMgIHVuZGVmIEFVMVhYWF9QSFkxX0JVU0lECi0jICB1bmRlZiBBVTFYWFhfUEhZMV9JUlEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBVTFYWFhfUEhZMF9CVVNJRCkgJiYgKEFVMVhYWF9QSFkwX0JVU0lEID4gMCkKLSMgZXJyb3IgTUFDMC1hc3NvY2lhdGVkIFBIWSBhdHRhY2hlZCAybmQgTUFDcyBNSUkgYnVzIG5vdCBzdXBwb3J0ZWQgeWV0Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2VfcmVzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM5MCw2NyArMzY3LDU1IEBACiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBOVUxMOwogCi0jaWYgZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpCi0JQlVHX09OKGF1cC0+bWFjX2lkIDwgMCB8fCBhdXAtPm1hY19pZCA+IDEpOworCWlmIChhdXAtPnBoeV9zdGF0aWNfY29uZmlnKSB7CisJCUJVR19PTihhdXAtPm1hY19pZCA8IDAgfHwgYXVwLT5tYWNfaWQgPiAxKTsKIAotCWlmKGF1cC0+bWFjX2lkID09IDApIHsgLyogZ2V0IFBIWTAgKi8KLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMF9BRERSKQotCQlwaHlkZXYgPSBhdV9tYWNzW0FVMVhYWF9QSFkwX0JVU0lEXS0+bWlpX2J1cy0+cGh5X21hcFtBVTFYWFhfUEhZMF9BRERSXTsKLSMgZWxzZQotCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKLQkJCWRldi0+bmFtZSk7CisJCWlmIChhdXAtPnBoeV9hZGRyKQorCQkJcGh5ZGV2ID0gYXVwLT5taWlfYnVzLT5waHlfbWFwW2F1cC0+cGh5X2FkZHJdOworCQllbHNlCisJCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQlyZXR1cm4gMDsKLSMgZW5kaWYgLyogZGVmaW5lZChBVTFYWFhfUEhZMF9BRERSKSAqLwotCX0gZWxzZSBpZiAoYXVwLT5tYWNfaWQgPT0gMSkgeyAvKiBnZXQgUEhZMSAqLwotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX0FERFIpCi0JCXBoeWRldiA9IGF1X21hY3NbQVUxWFhYX1BIWTFfQlVTSURdLT5taWlfYnVzLT5waHlfbWFwW0FVMVhYWF9QSFkxX0FERFJdOwotIyBlbHNlCi0JCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6JXM6IHVzaW5nIFBIWS1sZXNzIHNldHVwXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJcmV0dXJuIDA7Ci0jIGVuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWTFfQUREUikgKi8KLQl9CisJfSBlbHNlIHsKKwkJaW50IHBoeV9hZGRyOwogCi0jZWxzZSAvKiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykgKi8KLQlpbnQgcGh5X2FkZHI7CisJCS8qIGZpbmQgdGhlIGZpcnN0IChsb3dlc3QgYWRkcmVzcykgUEhZIG9uIHRoZSBjdXJyZW50IE1BQydzIE1JSSBidXMgKi8KKwkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKQorCQkJaWYgKGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKKwkJCQlwaHlkZXYgPSBhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOworCQkJCWlmICghYXVwLT5waHlfc2VhcmNoX2hpZ2hlc3RfYWRkcikKKwkJCQkJYnJlYWs7IC8qIGJyZWFrIG91dCB3aXRoIGZpcnN0IG9uZSBmb3VuZCAqLworCQkJfQogCi0JLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBQSFkgb24gdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyAqLwotCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykKLQkJaWYgKGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKLQkJCXBoeWRldiA9IGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07Ci0jIGlmICFkZWZpbmVkKEFVMVhYWF9QSFlfU0VBUkNIX0hJR0hFU1RfQUREUikKLQkJCWJyZWFrOyAvKiBicmVhayBvdXQgd2l0aCBmaXJzdCBvbmUgZm91bmQgKi8KLSMgZW5kaWYKLQkJfQorCQlpZiAoYXVwLT5waHkxX3NlYXJjaF9tYWMwKSB7CisJCQkvKiB0cnkgaGFyZGVyIHRvIGZpbmQgYSBQSFkgKi8KKwkJCWlmICghcGh5ZGV2ICYmIChhdXAtPm1hY19pZCA9PSAxKSkgeworCQkJCS8qIG5vIFBIWSBmb3VuZCwgbWF5YmUgd2UgaGF2ZSBhIGR1YWwgUEhZPyAqLworCQkJCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6IG5vIFBIWSBmb3VuZCBvbiBNQUMxLCAiCisJCQkJCSJsZXQncyBzZWUgaWYgaXQncyBhdHRhY2hlZCB0byBNQUMwLi4uXG4iKTsKIAotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX1NFQVJDSF9PTl9NQUMwKQotCS8qIHRyeSBoYXJkZXIgdG8gZmluZCBhIFBIWSAqLwotCWlmICghcGh5ZGV2ICYmIChhdXAtPm1hY19pZCA9PSAxKSkgewotCQkvKiBubyBQSFkgZm91bmQsIG1heWJlIHdlIGhhdmUgYSBkdWFsIFBIWT8gKi8KLQkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjogbm8gUEhZIGZvdW5kIG9uIE1BQzEsICIKLQkJCSJsZXQncyBzZWUgaWYgaXQncyBhdHRhY2hlZCB0byBNQUMwLi4uXG4iKTsKKwkJCQkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIG5vbi1hdHRhY2hlZCBQSFkgb24KKwkJCQkgKiB0aGUgTUFDMCBNSUkgYnVzICovCisJCQkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7CisJCQkJCXN0cnVjdCBwaHlfZGV2aWNlICpjb25zdCB0bXBfcGh5ZGV2ID0KKwkJCQkJCQlhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOwogCi0JCUJVR19PTighYXVfbWFjc1swXSk7CisJCQkJCWlmIChhdXAtPm1hY19pZCA9PSAxKQorCQkJCQkJYnJlYWs7CiAKLQkJLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBub24tYXR0YWNoZWQgUEhZIG9uCi0JCSAqIHRoZSBNQUMwIE1JSSBidXMgKi8KLQkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7Ci0JCQlzdHJ1Y3QgcGh5X2RldmljZSAqY29uc3QgdG1wX3BoeWRldiA9Ci0JCQkJYXVfbWFjc1swXS0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07CisJCQkJCWlmICghdG1wX3BoeWRldikKKwkJCQkJCWNvbnRpbnVlOyAvKiBubyBQSFkgaGVyZS4uLiAqLwogCi0JCQlpZiAoIXRtcF9waHlkZXYpCi0JCQkJY29udGludWU7IC8qIG5vIFBIWSBoZXJlLi4uICovCisJCQkJCWlmICh0bXBfcGh5ZGV2LT5hdHRhY2hlZF9kZXYpCisJCQkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjbGFpbWVkIGJ5IE1BQzAgKi8KIAotCQkJaWYgKHRtcF9waHlkZXYtPmF0dGFjaGVkX2RldikKLQkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjbGFpbWVkIGJ5IE1BQzAgKi8KLQotCQkJcGh5ZGV2ID0gdG1wX3BoeWRldjsKLQkJCWJyZWFrOyAvKiBmb3VuZCBpdCAqLworCQkJCQlwaHlkZXYgPSB0bXBfcGh5ZGV2OworCQkJCQlicmVhazsgLyogZm91bmQgaXQgKi8KKwkJCQl9CisJCQl9CiAJCX0KIAl9Ci0jIGVuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWTFfU0VBUkNIX09USEVSX0JVUykgKi8KIAotI2VuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHKSAqLwogCWlmICghcGh5ZGV2KSB7CiAJCXByaW50ayAoS0VSTl9FUlIgRFJWX05BTUUgIjolczogbm8gUEhZIGZvdW5kXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CkBAIC01NzgsMzEgKzU0Myw2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHsKLQl1MzIgYmFzZV9hZGRyOwotCXUzMiBtYWNlbl9hZGRyOwotCWludCBpcnE7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLX0gaWZsaXN0WzJdID0gewotI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCi0Je0FVMTAwMF9FVEgwX0JBU0UsIEFVMTAwMF9NQUMwX0VOQUJMRSwgQVUxMDAwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTAwMF9FVEgxX0JBU0UsIEFVMTAwMF9NQUMxX0VOQUJMRSwgQVUxMDAwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCi0Je0FVMTEwMF9FVEgwX0JBU0UsIEFVMTEwMF9NQUMwX0VOQUJMRSwgQVUxMTAwX01BQzBfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCi0Je0FVMTUwMF9FVEgwX0JBU0UsIEFVMTUwMF9NQUMwX0VOQUJMRSwgQVUxNTAwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTUwMF9FVEgxX0JBU0UsIEFVMTUwMF9NQUMxX0VOQUJMRSwgQVUxNTAwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCi0Je0FVMTU1MF9FVEgwX0JBU0UsIEFVMTU1MF9NQUMwX0VOQUJMRSwgQVUxNTUwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTU1MF9FVEgxX0JBU0UsIEFVMTU1MF9NQUMxX0VOQUJMRSwgQVUxNTUwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBudW1faWZzOwotCiAvKgogICogZXRodG9vbCBvcGVyYXRpb25zCiAgKi8KQEAgLTcxMSw3ICs2NTEsNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3J4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpCiB7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwogCiAJcHMtPnJ4X3BhY2tldHMrKzsKQEAgLTk2OSw3ICs5MDgsNyBAQAogCX0KIAogCXBEQiA9IGF1cC0+dHhfZGJfaW51c2VbYXVwLT50eF9oZWFkXTsKLQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcERCLT52YWRkciwgc2tiLT5sZW4pOworCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAodm9pZCAqKXBEQi0+dmFkZHIsIHNrYi0+bGVuKTsKIAlpZiAoc2tiLT5sZW4gPCBFVEhfWkxFTikgewogCQlmb3IgKGk9c2tiLT5sZW47IGk8RVRIX1pMRU47IGkrKykgewogCQkJKChjaGFyICopcERCLT52YWRkcilbaV0gPSAwOwpAQCAtMTA1OCw1MyArOTk3LDU5IEBACiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAogfTsKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogYXUxMDAwX3Byb2JlKGludCBwb3J0X251bSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQgPSAwOwogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gTlVMTDsKKwlzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhICpwZDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlkYl9kZXN0X3QgKnBEQiwgKnBEQmZyZWU7CisJaW50IGlycSwgaSwgZXJyID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmJhc2UsICptYWNlbjsKIAljaGFyIGV0aGFkZHJbNl07Ci0JaW50IGlycSwgaSwgZXJyOwotCXUzMiBiYXNlLCBtYWNlbjsKIAotCWlmIChwb3J0X251bSA+PSBOVU1fRVRIX0lOVEVSRkFDRVMpCi0JCXJldHVybiBOVUxMOworCWJhc2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJldHJpZXZlIGJhc2UgcmVnaXN0ZXJcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQliYXNlICA9IENQSFlTQUREUihpZmxpc3RbcG9ydF9udW1dLmJhc2VfYWRkciApOwotCW1hY2VuID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0ubWFjZW5fYWRkcik7Ci0JaXJxID0gaWZsaXN0W3BvcnRfbnVtXS5pcnE7CisJbWFjZW4gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmICghbWFjZW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byByZXRyaWV2ZSBNQUMgRW5hYmxlIHJlZ2lzdGVyXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oIGJhc2UsIE1BQ19JT1NJWkUsICJBdTF4MDAgRU5FVCIpIHx8Ci0JICAgICFyZXF1ZXN0X21lbV9yZWdpb24obWFjZW4sIDQsICJBdTF4MDAgRU5FVCIpKQotCQlyZXR1cm4gTlVMTDsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gcmV0cmlldmUgSVJRXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKHZlcnNpb25fcHJpbnRlZCsrID09IDApCi0JCXByaW50aygiJXMgdmVyc2lvbiAlcyAlc1xuIiwgRFJWX05BTUUsIERSVl9WRVJTSU9OLCBEUlZfQVVUSE9SKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihiYXNlLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShiYXNlKSwgcGRldi0+bmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb24gZm9yIGJhc2UgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtYWNlbi0+c3RhcnQsIHJlc291cmNlX3NpemUobWFjZW4pLCBwZGV2LT5uYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvbiBmb3IgTUFDIGVuYWJsZSByZWdpc3RlclxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfcmVxdWVzdDsKKwl9CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGF1MTAwMF9wcml2YXRlKSk7CiAJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iLCBEUlZfTkFNRSk7Ci0JCXJldHVybiBOVUxMOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvYzsKIAl9CiAKLQlkZXYtPmJhc2VfYWRkciA9IGJhc2U7Ci0JZGV2LT5pcnEgPSBpcnE7Ci0JZGV2LT5uZXRkZXZfb3BzID0gJmF1MTAwMF9uZXRkZXZfb3BzOwotCVNFVF9FVEhUT09MX09QUyhkZXYsICZhdTEwMDBfZXRodG9vbF9vcHMpOwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVEhfVFhfVElNRU9VVDsKLQotCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgZXJyb3IgJWRcbiIsCi0JCQkJRFJWX05BTUUsIGVycik7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXByaW50aygiJXM6IEF1MXh4MCBFdGhlcm5ldCBmb3VuZCBhdCAweCV4LCBpcnEgJWRcbiIsCi0JCWRldi0+bmFtZSwgYmFzZSwgaXJxKTsKLQorCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlhdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmF1cC0+bG9jayk7CkBAIC0xMTE1LDIxICsxMDYwLDI5IEBACiAJCQkJCQkoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKIAkJCQkJCSZhdXAtPmRtYV9hZGRyLAkwKTsKIAlpZiAoIWF1cC0+dmFkZHIpIHsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKCBiYXNlLCBNQUNfSU9TSVpFKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2VuLCA0KTsKLQkJcmV0dXJuIE5VTEw7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gYWxsb2NhdGUgZGF0YSBidWZmZXJzXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfdmFkZHI7CiAJfQogCiAJLyogYXVwLT5tYWMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgTUFDJ3MgcmVnaXN0ZXJzICovCi0JYXVwLT5tYWMgPSAodm9sYXRpbGUgbWFjX3JlZ190ICopaWZsaXN0W3BvcnRfbnVtXS5iYXNlX2FkZHI7CisJYXVwLT5tYWMgPSAodm9sYXRpbGUgbWFjX3JlZ190ICopaW9yZW1hcF9ub2NhY2hlKGJhc2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGJhc2UpKTsKKwlpZiAoIWF1cC0+bWFjKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gaW9yZW1hcCBNQUMgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9yZW1hcDE7CisJfQogCi0JLyogU2V0dXAgc29tZSB2YXJpYWJsZXMgZm9yIHF1aWNrIHJlZ2lzdGVyIGFkZHJlc3MgYWNjZXNzICovCi0JYXVwLT5lbmFibGUgPSAodm9sYXRpbGUgdTMyICopaWZsaXN0W3BvcnRfbnVtXS5tYWNlbl9hZGRyOwotCWF1cC0+bWFjX2lkID0gcG9ydF9udW07Ci0JYXVfbWFjc1twb3J0X251bV0gPSBhdXA7CisgICAgICAgIC8qIFNldHVwIHNvbWUgdmFyaWFibGVzIGZvciBxdWljayByZWdpc3RlciBhZGRyZXNzIGFjY2VzcyAqLworCWF1cC0+ZW5hYmxlID0gKHZvbGF0aWxlIHUzMiAqKWlvcmVtYXBfbm9jYWNoZShtYWNlbi0+c3RhcnQsIHJlc291cmNlX3NpemUobWFjZW4pKTsKKwlpZiAoIWF1cC0+ZW5hYmxlKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gaW9yZW1hcCBNQUMgZW5hYmxlIHJlZ2lzdGVyXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9yZW1hcDI7CisJfQorCWF1cC0+bWFjX2lkID0gcGRldi0+aWQ7CiAKLQlpZiAocG9ydF9udW0gPT0gMCkgeworCWlmIChwZGV2LT5pZCA9PSAwKSB7CiAJCWlmIChwcm9tX2dldF9ldGhlcm5ldF9hZGRyKGV0aGFkZHIpID09IDApCiAJCQltZW1jcHkoYXUxMDAwX21hY19hZGRyLCBldGhhZGRyLCBzaXplb2YoYXUxMDAwX21hY19hZGRyKSk7CiAJCWVsc2UgewpAQCAtMTEzOSw3ICsxMDkyLDcgQEAKIAkJfQogCiAJCXNldHVwX2h3X3JpbmdzKGF1cCwgTUFDMF9SWF9ETUFfQUREUiwgTUFDMF9UWF9ETUFfQUREUik7Ci0JfSBlbHNlIGlmIChwb3J0X251bSA9PSAxKQorCX0gZWxzZSBpZiAocGRldi0+aWQgPT0gMSkKIAkJc2V0dXBfaHdfcmluZ3MoYXVwLCBNQUMxX1JYX0RNQV9BRERSLCBNQUMxX1RYX0RNQV9BRERSKTsKIAogCS8qCkBAIC0xMTQ3LDE0ICsxMTAwLDM3IEBACiAJICogdG8gbWF0Y2ggdGhvc2UgdGhhdCBhcmUgcHJpbnRlZCBvbiB0aGVpciBzdGlja2VycwogCSAqLwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBhdTEwMDBfbWFjX2FkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKLQlkZXYtPmRldl9hZGRyWzVdICs9IHBvcnRfbnVtOworCWRldi0+ZGV2X2FkZHJbNV0gKz0gcGRldi0+aWQ7CiAKIAkqYXVwLT5lbmFibGUgPSAwOwogCWF1cC0+bWFjX2VuYWJsZWQgPSAwOwogCisJcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkKSB7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogbm8gcGxhdGZvcm1fZGF0YSBwYXNzZWQsIFBIWSBzZWFyY2ggb24gTUFDMFxuIik7CisJCWF1cC0+cGh5MV9zZWFyY2hfbWFjMCA9IDE7CisJfSBlbHNlIHsKKwkJYXVwLT5waHlfc3RhdGljX2NvbmZpZyA9IHBkLT5waHlfc3RhdGljX2NvbmZpZzsKKwkJYXVwLT5waHlfc2VhcmNoX2hpZ2hlc3RfYWRkciA9IHBkLT5waHlfc2VhcmNoX2hpZ2hlc3RfYWRkcjsKKwkJYXVwLT5waHkxX3NlYXJjaF9tYWMwID0gcGQtPnBoeTFfc2VhcmNoX21hYzA7CisJCWF1cC0+cGh5X2FkZHIgPSBwZC0+cGh5X2FkZHI7CisJCWF1cC0+cGh5X2J1c2lkID0gcGQtPnBoeV9idXNpZDsKKwkJYXVwLT5waHlfaXJxID0gcGQtPnBoeV9pcnE7CisJfQorCisJaWYgKGF1cC0+cGh5X2J1c2lkICYmIGF1cC0+cGh5X2J1c2lkID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogTUFDMC1hc3NvY2lhdGVkIFBIWSBhdHRhY2hlZCAybmQgTUFDcyBNSUkiCisJCQkJImJ1cyBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX21kaW9idXNfYWxsb2M7CisJfQorCiAJYXVwLT5taWlfYnVzID0gbWRpb2J1c19hbGxvYygpOwotCWlmIChhdXAtPm1paV9idXMgPT0gTlVMTCkKLQkJZ290byBlcnJfb3V0OworCWlmIChhdXAtPm1paV9idXMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIGFsbG9jYXRlIG1kaW9idXMgc3RydWN0dXJlXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfbWRpb2J1c19hbGxvYzsKKwl9CiAKIAlhdXAtPm1paV9idXMtPnByaXYgPSBkZXY7CiAJYXVwLT5taWlfYnVzLT5yZWFkID0gYXUxMDAwX21kaW9idXNfcmVhZDsKQEAgLTExNjgsMjQgKzExNDQsMjAgQEAKIAogCWZvcihpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgKytpKQogCQlhdXAtPm1paV9idXMtPmlycVtpXSA9IFBIWV9QT0xMOwotCiAJLyogaWYga25vd24sIHNldCBjb3JyZXNwb25kaW5nIFBIWSBJUlFzICovCi0jaWYgZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpCi0jIGlmIGRlZmluZWQoQVUxWFhYX1BIWTBfSVJRKQotCWlmIChBVTFYWFhfUEhZMF9CVVNJRCA9PSBhdXAtPm1hY19pZCkKLQkJYXVwLT5taWlfYnVzLT5pcnFbQVUxWFhYX1BIWTBfQUREUl0gPSBBVTFYWFhfUEhZMF9JUlE7Ci0jIGVuZGlmCi0jIGlmIGRlZmluZWQoQVUxWFhYX1BIWTFfSVJRKQotCWlmIChBVTFYWFhfUEhZMV9CVVNJRCA9PSBhdXAtPm1hY19pZCkKLQkJYXVwLT5taWlfYnVzLT5pcnFbQVUxWFhYX1BIWTFfQUREUl0gPSBBVTFYWFhfUEhZMV9JUlE7Ci0jIGVuZGlmCi0jZW5kaWYKLQltZGlvYnVzX3JlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7CisJaWYgKGF1cC0+cGh5X3N0YXRpY19jb25maWcpCisJCWlmIChhdXAtPnBoeV9pcnEgJiYgYXVwLT5waHlfYnVzaWQgPT0gYXVwLT5tYWNfaWQpCisJCQlhdXAtPm1paV9idXMtPmlycVthdXAtPnBoeV9hZGRyXSA9IGF1cC0+cGh5X2lycTsKIAotCWlmIChtaWlfcHJvYmUoZGV2KSAhPSAwKSB7Ci0JCWdvdG8gZXJyX291dDsKKwllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiBmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXNcbiIpOworCQlnb3RvIGVycl9tZGlvYnVzX3JlZzsKIAl9CiAKKwlpZiAobWlpX3Byb2JlKGRldikgIT0gMCkKKwkJZ290byBlcnJfb3V0OworCiAJcERCZnJlZSA9IE5VTEw7CiAJLyogc2V0dXAgdGhlIGRhdGEgYnVmZmVyIGRlc2NyaXB0b3JzIGFuZCBhdHRhY2ggYSBidWZmZXIgdG8gZWFjaCBvbmUgKi8KIAlwREIgPSBhdXAtPmRiOwpAQCAtMTIxNiwxOSArMTE4OCwzNSBAQAogCQlhdXAtPnR4X2RiX2ludXNlW2ldID0gcERCOwogCX0KIAorCWRldi0+YmFzZV9hZGRyID0gYmFzZS0+c3RhcnQ7CisJZGV2LT5pcnEgPSBpcnE7CisJZGV2LT5uZXRkZXZfb3BzID0gJmF1MTAwMF9uZXRkZXZfb3BzOworCVNFVF9FVEhUT09MX09QUyhkZXYsICZhdTEwMDBfZXRodG9vbF9vcHMpOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVEhfVFhfVElNRU9VVDsKKwogCS8qCiAJICogVGhlIGJvb3QgY29kZSB1c2VzIHRoZSBldGhlcm5ldCBjb250cm9sbGVyLCBzbyByZXNldCBpdCB0byBzdGFydAogCSAqIGZyZXNoLiAgYXUxMDAwX2luaXQoKSBleHBlY3RzIHRoYXQgdGhlIGRldmljZSBpcyBpbiByZXNldCBzdGF0ZS4KIAkgKi8KIAlyZXNldF9tYWMoZGV2KTsKIAotCXJldHVybiBkZXY7CisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iLAorCQkJCQlkZXYtPm5hbWUpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcHJpbnRrKCIlczogQXUxeHgwIEV0aGVybmV0IGZvdW5kIGF0IDB4JWx4LCBpcnEgJWRcbiIsCisJCQlkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nKWJhc2UtPnN0YXJ0LCBpcnEpOworCWlmICh2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQorCQlwcmludGsoIiVzIHZlcnNpb24gJXMgJXNcbiIsIERSVl9OQU1FLCBEUlZfVkVSU0lPTiwgRFJWX0FVVEhPUik7CisKKwlyZXR1cm4gMDsKIAogZXJyX291dDoKLQlpZiAoYXVwLT5taWlfYnVzICE9IE5VTEwpIHsKKwlpZiAoYXVwLT5taWlfYnVzICE9IE5VTEwpCiAJCW1kaW9idXNfdW5yZWdpc3RlcihhdXAtPm1paV9idXMpOwotCQltZGlvYnVzX2ZyZWUoYXVwLT5taWlfYnVzKTsKLQl9CiAKIAkvKiBoZXJlIHdlIHNob3VsZCBoYXZlIGEgdmFsaWQgZGV2IHBsdXMgYXVwLT4gcmVnaXN0ZXIgYWRkcmVzc2VzCiAJICogc28gd2UgY2FuIHJlc2V0IHRoZSBtYWMgcHJvcGVybHkuKi8KQEAgLTEyNDIsNjcgKzEyMzAsODQgQEAKIAkJaWYgKGF1cC0+dHhfZGJfaW51c2VbaV0pCiAJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnR4X2RiX2ludXNlW2ldKTsKIAl9CitlcnJfbWRpb2J1c19yZWc6CisJbWRpb2J1c19mcmVlKGF1cC0+bWlpX2J1cyk7CitlcnJfbWRpb2J1c19hbGxvYzoKKwlpb3VubWFwKGF1cC0+ZW5hYmxlKTsKK2Vycl9yZW1hcDI6CisJaW91bm1hcChhdXAtPm1hYyk7CitlcnJfcmVtYXAxOgogCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqIChOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAogCQkJICAgICAodm9pZCAqKWF1cC0+dmFkZHIsIGF1cC0+ZG1hX2FkZHIpOwotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CitlcnJfdmFkZHI6CiAJZnJlZV9uZXRkZXYoZGV2KTsKLQlyZWxlYXNlX21lbV9yZWdpb24oIGJhc2UsIE1BQ19JT1NJWkUpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihtYWNlbiwgNCk7Ci0JcmV0dXJuIE5VTEw7CitlcnJfYWxsb2M6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2VuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtYWNlbikpOworZXJyX3JlcXVlc3Q6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGJhc2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGJhc2UpKTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCi0vKgotICogU2V0dXAgdGhlIGJhc2UgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG9mIHRoZSBBdTF4eHggZXRoZXJuZXQgbWFjcwotICogYmFzZWQgb24gY3B1IHR5cGUgYW5kIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkIGluIHN5c19waW5mdW5jCi0gKiByZWdpc3Rlci4gVGhlIGxhc3QgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgU1lTX1BGX05JMiAoYml0IDQpIGlzIDAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9pbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2RldmV4aXQgYXUxMDAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCBuaSA9IChpbnQpKChhdV9yZWFkbChTWVNfUElORlVOQykgJiAodTMyKShTWVNfUEZfTkkyKSkgPj4gNCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaSwgZm91bmRfb25lID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCXN0cnVjdCByZXNvdXJjZSAqYmFzZSwgKm1hY2VuOwogCi0JbnVtX2lmcyA9IE5VTV9FVEhfSU5URVJGQUNFUyAtIG5pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi0JZm9yKGkgPSAwOyBpIDwgbnVtX2lmczsgaSsrKSB7Ci0JCWRldiA9IGF1MTAwMF9wcm9iZShpKTsKLQkJaWZsaXN0W2ldLmRldiA9IGRldjsKLQkJaWYgKGRldikKLQkJCWZvdW5kX29uZSsrOwotCX0KLQlpZiAoIWZvdW5kX29uZSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwltZGlvYnVzX3VucmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKKwltZGlvYnVzX2ZyZWUoYXVwLT5taWlfYnVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfRE1BOyBpKyspCisJCWlmIChhdXAtPnJ4X2RiX2ludXNlW2ldKQorCQkJUmVsZWFzZURCKGF1cCwgYXVwLT5yeF9kYl9pbnVzZVtpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RNQTsgaSsrKQorCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtpXSkKKwkJCVJlbGVhc2VEQihhdXAsIGF1cC0+dHhfZGJfaW51c2VbaV0pOworCisJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICoKKwkJCShOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAorCQkJKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKKworCWlvdW5tYXAoYXVwLT5tYWMpOworCWlvdW5tYXAoYXVwLT5lbmFibGUpOworCisJYmFzZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGJhc2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGJhc2UpKTsKKworCW1hY2VuID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWFjZW4tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1hY2VuKSk7CisKKwlmcmVlX25ldGRldihkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBhdTEwMDBfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMDAwX2V0aF9kcml2ZXIgPSB7CisJLnByb2JlICA9IGF1MTAwMF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYXUxMDAwX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICA9ICJhdTEwMDAtZXRoIiwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdTEwMDAtZXRoIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2lmczsgaSsrKSB7Ci0JCWRldiA9IGlmbGlzdFtpXS5kZXY7Ci0JCWlmIChkZXYpIHsKLQkJCWF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0JCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQkJbWRpb2J1c191bnJlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7Ci0JCQltZGlvYnVzX2ZyZWUoYXVwLT5taWlfYnVzKTsKLQkJCWZvciAoaiA9IDA7IGogPCBOVU1fUlhfRE1BOyBqKyspCi0JCQkJaWYgKGF1cC0+cnhfZGJfaW51c2Vbal0pCi0JCQkJCVJlbGVhc2VEQihhdXAsIGF1cC0+cnhfZGJfaW51c2Vbal0pOwotCQkJZm9yIChqID0gMDsgaiA8IE5VTV9UWF9ETUE7IGorKykKLQkJCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtqXSkKLQkJCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtqXSk7Ci0JCQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgotCQkJCQkgICAgIChOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAotCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7Ci0JCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE1BQ19JT1NJWkUpOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpZmxpc3RbaV0ubWFjZW5fYWRkciksIDQpOwotCQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJfQotCX0KKworc3RhdGljIGludCBfX2luaXQgYXUxMDAwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxMDAwX2V0aF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXUxMDAwX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTAwMF9ldGhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXUxMDAwX2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KGF1MTAwMF9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdChhdTEwMDBfZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oCmluZGV4IDgyNGVjZDUuLmY5ZDI5YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaAorKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgKQEAgLTEwOCw2ICsxMDgsMTUgQEAKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldjsKIAlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsKIAorCS8qIFBIWSBjb25maWd1cmF0aW9uICovCisJaW50IHBoeV9zdGF0aWNfY29uZmlnOworCWludCBwaHlfc2VhcmNoX2hpZ2hlc3RfYWRkcjsKKwlpbnQgcGh5MV9zZWFyY2hfbWFjMDsKKworCWludCBwaHlfYWRkcjsKKwlpbnQgcGh5X2J1c2lkOworCWludCBwaHlfaXJxOworCiAJLyogVGhlc2UgdmFyaWFibGVzIGFyZSBqdXN0IGZvciBxdWljayBhY2Nlc3MgdG8gY2VydGFpbiByZWdzIGFkZHJlc3Nlcy4gKi8KIAl2b2xhdGlsZSBtYWNfcmVnX3QgKm1hYzsgIC8qIG1hYyByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgKi8KIAl2b2xhdGlsZSB1MzIgKmVuYWJsZTsgICAgIC8qIGFkZHJlc3Mgb2YgTUFDIEVuYWJsZSBSZWdpc3RlciAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYyBiL2RyaXZlcnMvbmV0L2F4ODg3OTYuYwppbmRleCA2MmQ5YzljLi4xZGQ0NDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9heDg4Nzk2LmMKKysrIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCkBAIC05MjEsNyArOTIxLDcgQEAKICAJCXNpemUgPSAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSArIDE7CiAKIAkJYXgtPm1lbTIgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7Ci0JCWlmIChheC0+bWVtID09IE5VTEwpIHsKKwkJaWYgKGF4LT5tZW0yID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXNlcnZlIHJlZ2lzdGVyc1xuIik7CiAJCQlyZXQgPSAtRU5YSU87CiAJCQlnb3RvIGV4aXRfbWVtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCmluZGV4IDlmZDhlNWUuLjViYzc0NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaApAQCAtMjc2LDggKzI3NiwxMyBAQAogCWludCBsaW5rX3NwZWVkOwogCXU4IHBvcnRfdHlwZTsKIAl1OCB0cmFuc2NlaXZlcjsKKwl1OCBnZW5lcmF0aW9uOwkJLyogQmxhZGVFbmdpbmUgQVNJQyBnZW5lcmF0aW9uICovCiB9OwogCisvKiBCbGFkZUVuZ2luZSBHZW5lcmF0aW9uIG51bWJlcnMgKi8KKyNkZWZpbmUgQkVfR0VOMiAyCisjZGVmaW5lIEJFX0dFTjMgMworCiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOwogCiAjZGVmaW5lIGRydnJfc3RhdHMoYWRhcHRlcikJCSgmYWRhcHRlci0+c3RhdHMuZHJ2cl9zdGF0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCBmZWU2ZWVlLi4wMDZjYjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCkBAIC0yOTYsNiArMjk2LDcgQEAKIAlyZXFfaGRyLT5vcGNvZGUgPSBvcGNvZGU7CiAJcmVxX2hkci0+c3Vic3lzdGVtID0gc3Vic3lzdGVtOwogCXJlcV9oZHItPnJlcXVlc3RfbGVuZ3RoID0gY3B1X3RvX2xlMzIoY21kX2xlbiAtIHNpemVvZigqcmVxX2hkcikpOworCXJlcV9oZHItPnZlcnNpb24gPSAwOwogfQogCiBzdGF0aWMgdm9pZCBiZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHN0cnVjdCBwaHlzX2FkZHIgKnBhZ2VzLCB1MzIgbWF4X3BhZ2VzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCmluZGV4IGMwMDJiODMuLjEzYjMzYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKQEAgLTE2NCw3ICsxNjQsOCBAQAogCXU4IGRvbWFpbjsJCS8qIGR3b3JkIDAgKi8KIAl1MzIgdGltZW91dDsJCS8qIGR3b3JkIDEgKi8KIAl1MzIgcmVxdWVzdF9sZW5ndGg7CS8qIGR3b3JkIDIgKi8KLQl1MzIgcnN2ZDsJCS8qIGR3b3JkIDMgKi8KKwl1OCB2ZXJzaW9uOwkJLyogZHdvcmQgMyAqLworCXU4IHJzdmRbM107CQkvKiBkd29yZCAzICovCiB9OwogCiAjZGVmaW5lIFJFU1BfSERSX0lORk9fT1BDT0RFX1NISUZUCTAJLyogYml0cyAwIC0gNyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IDMzYWI4YzcuLjYyNmI3NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTEzNTAsNyArMTM1MCw3IEBACiAJaW50IGlzcjsKIAogCWlzciA9IGlvcmVhZDMyKGFkYXB0ZXItPmNzciArIENFVl9JU1IwX09GRlNFVCArCi0JCQliZV9wY2lfZnVuYyhhZGFwdGVyKSAqIENFVl9JU1JfU0laRSk7CisJCShhZGFwdGVyLT50eF9lcS5xLmlkLyA4KSAqIENFVl9JU1JfU0laRSk7CiAJaWYgKCFpc3IpCiAJCXJldHVybiBJUlFfTk9ORTsKIApAQCAtMjA1MSw2ICsyMDUxLDcgQEAKIHN0YXRpYyBpbnQgYmVfbWFwX3BjaV9iYXJzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXU4IF9faW9tZW0gKmFkZHI7CisJaW50IHBjaWNmZ19yZWc7CiAKIAlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5wZGV2LCAyKSwKIAkJCXBjaV9yZXNvdXJjZV9sZW4oYWRhcHRlci0+cGRldiwgMikpOwpAQCAtMjA2NCw4ICsyMDY1LDEzIEBACiAJCWdvdG8gcGNpX21hcF9lcnI7CiAJYWRhcHRlci0+ZGIgPSBhZGRyOwogCi0JYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMSksCi0JCQlwY2lfcmVzb3VyY2VfbGVuKGFkYXB0ZXItPnBkZXYsIDEpKTsKKwlpZiAoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4yKQorCQlwY2ljZmdfcmVnID0gMTsKKwllbHNlCisJCXBjaWNmZ19yZWcgPSAwOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgcGNpY2ZnX3JlZyksCisJCQlwY2lfcmVzb3VyY2VfbGVuKGFkYXB0ZXItPnBkZXYsIHBjaWNmZ19yZWcpKTsKIAlpZiAoYWRkciA9PSBOVUxMKQogCQlnb3RvIHBjaV9tYXBfZXJyOwogCWFkYXB0ZXItPnBjaWNmZyA9IGFkZHI7CkBAIC0yMTYyLDYgKzIxNjgsNyBAQAogCWNtZC0+dmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBjbWQtPnNpemUsICZjbWQtPmRtYSk7CiAJaWYgKGNtZC0+dmEgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOworCW1lbXNldChjbWQtPnZhLCAwLCBjbWQtPnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjQwLDYgKzIyNDcsMjAgQEAKIAkJZ290byByZWxfcmVnOwogCX0KIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CisJY2FzZSBCRV9ERVZJQ0VfSUQxOgorCWNhc2UgT0NfREVWSUNFX0lEMToKKwkJYWRhcHRlci0+Z2VuZXJhdGlvbiA9IEJFX0dFTjI7CisJCWJyZWFrOworCWNhc2UgQkVfREVWSUNFX0lEMjoKKwljYXNlIE9DX0RFVklDRV9JRDI6CisJCWFkYXB0ZXItPmdlbmVyYXRpb24gPSBCRV9HRU4zOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gMDsKKwl9CisKIAlhZGFwdGVyLT5wZGV2ID0gcGRldjsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7CiAJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggM2YwMDcxYy4uZWZhMGU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0zNjM5LDcgKzM2MzksNyBAQAogCQkgKi8KIAkJaWYgKGJvbmRfYWxiX2luaXRpYWxpemUoYm9uZCwgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV9BTEIpKSkgewogCQkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgLSBmYWlsIHRoZSBvcGVuIG9wZXJhdGlvbiAqLwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAogCQlJTklUX0RFTEFZRURfV09SSygmYm9uZC0+YWxiX3dvcmssIGJvbmRfYWxiX21vbml0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3BtYWMuYyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKaW5kZXggOGQwYmUyNi4uYmYyMDcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3BtYWMuYworKysgYi9kcml2ZXJzL25ldC9jcG1hYy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGh5X2ZpeGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApAQCAtMjk0LDkgKzI5NSwxNiBAQAogCiBzdGF0aWMgaW50IGNwbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKIHsKKwlzdHJ1Y3QgY2xrICpjcG1hY19jbGs7CisKKwljcG1hY19jbGsgPSBjbGtfZ2V0KCZidXMtPmRldiwgImNwbWFjIik7CisJaWYgKElTX0VSUihjcG1hY19jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdldCBjcG1hYyBjbG9ja1xuIik7CisJCXJldHVybiAtMTsKKwl9CiAJYXI3X2RldmljZV9yZXNldChBUjdfUkVTRVRfQklUX01ESU8pOwogCWNwbWFjX3dyaXRlKGJ1cy0+cHJpdiwgQ1BNQUNfTURJT19DT05UUk9MLCBNRElPQ19FTkFCTEUgfAotCQkgICAgTURJT0NfQ0xLRElWKGFyN19jcG1hY19mcmVxKCkgLyAyMjAwMDAwIC0gMSkpOworCQkgICAgTURJT0NfQ0xLRElWKGNsa19nZXRfcmF0ZShjcG1hY19jbGspIC8gMjIwMDAwMCAtIDEpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwppbmRleCBiZGJkMTQ3Li4zMThhMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwpAQCAtMjA3OSw2ICsyMDc5LDcgQEAKIAkJCSBzdHJ1Y3Qgc2dlX2ZsICpmbCwgaW50IGxlbiwgaW50IGNvbXBsZXRlKQogewogCXN0cnVjdCByeF9zd19kZXNjICpzZCA9ICZmbC0+c2Rlc2NbZmwtPmNpZHhdOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYocXMtPm5ldGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJc3RydWN0IGNwbF9yeF9wa3QgKmNwbDsKIAlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpyeF9mcmFnOwpAQCAtMjExNiwxMSArMjExNywxOCBAQAogCiAJaWYgKCFucl9mcmFncykgewogCQlvZmZzZXQgPSAyICsgc2l6ZW9mKHN0cnVjdCBjcGxfcnhfcGt0KTsKLQkJcXMtPmxyb192YSA9IHNkLT5wZ19jaHVuay52YSArIDI7Ci0JfQotCWxlbiAtPSBvZmZzZXQ7CisJCWNwbCA9IHFzLT5scm9fdmEgPSBzZC0+cGdfY2h1bmsudmEgKyAyOwogCi0JcHJlZmV0Y2gocXMtPmxyb192YSk7CisJCWlmICgocGktPnJ4X29mZmxvYWQgJiBUM19SWF9DU1VNKSAmJgorCQkgICAgIGNwbC0+Y3N1bV92YWxpZCAmJiBjcGwtPmNzdW0gPT0gaHRvbnMoMHhmZmZmKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9SWF9DU1VNX0dPT0RdKys7CisJCX0gZWxzZQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCX0gZWxzZQorCQljcGwgPSBxcy0+bHJvX3ZhOworCisJbGVuIC09IG9mZnNldDsKIAogCXJ4X2ZyYWcgKz0gbnJfZnJhZ3M7CiAJcnhfZnJhZy0+cGFnZSA9IHNkLT5wZ19jaHVuay5wYWdlOwpAQCAtMjEzNiwxMiArMjE0NCw4IEBACiAJCXJldHVybjsKIAogCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBxcyAtICZhZGFwLT5zZ2UucXNbMF0pOwotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JY3BsID0gcXMtPmxyb192YTsKIAogCWlmICh1bmxpa2VseShjcGwtPnZsYW5fdmFsaWQpKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxcy0+bmV0ZGV2OwotCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJCXN0cnVjdCB2bGFuX2dyb3VwICpncnAgPSBwaS0+dmxhbl9ncnA7CiAKIAkJaWYgKGxpa2VseShncnAgIT0gTlVMTCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCBkMjliYjUzLi43NjU1NDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC00MDA2LDExICs0MDA2LDIxIEBACiAJCQl9CiAJCX0KIAotCQlpZiAoIWJ1ZmZlcl9pbmZvLT5kbWEpCisJCWlmICghYnVmZmVyX2luZm8tPmRtYSkgewogCQkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfcGFnZShwZGV2LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfaW5mby0+cGFnZSwgMCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPmxlbmd0aCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgYnVmZmVyX2luZm8tPmRtYSkpIHsKKwkJCQlwdXRfcGFnZShidWZmZXJfaW5mby0+cGFnZSk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCWJ1ZmZlcl9pbmZvLT5wYWdlID0gTlVMTDsKKwkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKKwkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOworCQkJCWJyZWFrOyAvKiB3aGlsZSAhYnVmZmVyX2luZm8tPnNrYiAqLworCQkJfQorCQl9CiAKIAkJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0MoKnJ4X3JpbmcsIGkpOwogCQlyeF9kZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOwpAQCAtNDEwMSw2ICs0MTExLDEzIEBACiAJCQkJCQkgIHNrYi0+ZGF0YSwKIAkJCQkJCSAgYnVmZmVyX2luZm8tPmxlbmd0aCwKIAkJCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCBidWZmZXJfaW5mby0+ZG1hKSkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKKwkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CisJCQlicmVhazsgLyogd2hpbGUgIWJ1ZmZlcl9pbmZvLT5za2IgKi8KKwkJfQogCiAJCS8qCiAJCSAqIFhYWCBpZiBpdCB3YXMgYWxsb2NhdGVkIGNsZWFubHkgaXQgd2lsbCBuZXZlciBtYXAgdG8gYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCA5OTcxMjRkLi5jODgxMzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtNDIxLDYgKzQyMSw4IEBACiAJCQltc2l4Ym0gPSBFMTAwMF9FSUNSX1JYX1FVRVVFMCA8PCByeF9xdWV1ZTsKIAkJaWYgKHR4X3F1ZXVlID4gSUdCX04wX1FVRVVFKQogCQkJbXNpeGJtIHw9IEUxMDAwX0VJQ1JfVFhfUVVFVUUwIDw8IHR4X3F1ZXVlOworCQlpZiAoIWFkYXB0ZXItPm1zaXhfZW50cmllcyAmJiBtc2l4X3ZlY3RvciA9PSAwKQorCQkJbXNpeGJtIHw9IEUxMDAwX0VJTVNfT1RIRVI7CiAJCWFycmF5X3dyMzIoRTEwMDBfTVNJWEJNKDApLCBtc2l4X3ZlY3RvciwgbXNpeGJtKTsKIAkJcV92ZWN0b3ItPmVpbXNfdmFsdWUgPSBtc2l4Ym07CiAJCWJyZWFrOwpAQCAtODc3LDcgKzg3OSw2IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgZXJyID0gMDsKIAogCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpIHsKQEAgLTkwOSwyMCArOTEwLDcgQEAKIAkJaWdiX3NldHVwX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7CiAJCWlnYl9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCX0gZWxzZSB7Ci0JCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7Ci0JCWNhc2UgZTEwMDBfODI1NzU6Ci0JCQl3cjMyKEUxMDAwX01TSVhCTSgwKSwKLQkJCSAgICAgKEUxMDAwX0VJQ1JfUlhfUVVFVUUwIHwKLQkJCSAgICAgIEUxMDAwX0VJQ1JfVFhfUVVFVUUwIHwKLQkJCSAgICAgIEUxMDAwX0VJTVNfT1RIRVIpKTsKLQkJCWJyZWFrOwotCQljYXNlIGUxMDAwXzgyNTgwOgotCQljYXNlIGUxMDAwXzgyNTc2OgotCQkJd3IzMihFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9CisJCWlnYl9hc3NpZ25fdmVjdG9yKGFkYXB0ZXItPnFfdmVjdG9yWzBdLCAwKTsKIAl9CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19IQVNfTVNJKSB7CkBAIC0xMTQwLDYgKzExMjgsOCBAQAogCX0KIAlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQogCQlpZ2JfY29uZmlndXJlX21zaXgoYWRhcHRlcik7CisJZWxzZQorCQlpZ2JfYXNzaWduX3ZlY3RvcihhZGFwdGVyLT5xX3ZlY3RvclswXSwgMCk7CiAKIAkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLwogCXJkMzIoRTEwMDBfSUNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKaW5kZXggMjk3YTVkZC4uMmFhNzFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKQEAgLTIxMTcsNiArMjExNyw3IEBACiAJLyogc2V0IHRpbWVfc3RhbXAgKmJlZm9yZSogZG1hIHRvIGhlbHAgYXZvaWQgYSBwb3NzaWJsZSByYWNlICovCiAJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKKwlidWZmZXJfaW5mby0+bWFwcGVkX2FzX3BhZ2UgPSBmYWxzZTsKIAlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBsZW4sCiAJCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCBidWZmZXJfaW5mby0+ZG1hKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKaW5kZXggOWIyZWViZC4uYjVjYmQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vcGIxMDAwLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCiAjaW5jbHVkZSA8YXNtL2RiMXgwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAjZWxzZSAKICNlcnJvciBhdTFrX2lyOiB1bnN1cHBvcnRlZCBib2FyZAogI2VuZGlmCkBAIC02NiwxMCArNjcsNiBAQAogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIAotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKLXN0YXRpYyBCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopMHhBRTAwMDAwMDsKLSNlbmRpZgotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlyX2xvY2spOwogCiAvKgpAQCAtMjgyLDkgKzI3OSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCiAJLyogcG93ZXIgb24gKi8KLQliY3NyLT5yZXNldHMgJj0gfkJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLOwotCWJjc3ItPnJlc2V0cyB8PSBCQ1NSX1JFU0VUU19JUkRBX01PREVfRlVMTDsKLQlhdV9zeW5jKCk7CisJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLLAorCQkJICAgICAgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX0ZVTEwpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTcyMCwxNCArNzE2LDE0IEBACiAKIAlpZiAoc3BlZWQgPT0gNDAwMDAwMCkgewogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKLQkJYmNzci0+cmVzZXRzIHw9IEJDU1JfUkVTRVRTX0ZJUl9TRUw7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCAwLCBCQ1NSX1JFU0VUU19GSVJfU0VMKTsKICNlbHNlIC8qIFBiMTAwMCBhbmQgUGIxMTAwICovCiAJCXdyaXRlbCgxPDwxMywgQ1BMRF9BVVgxKTsKICNlbmRpZgogCX0KIAllbHNlIHsKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCi0JCWJjc3ItPnJlc2V0cyAmPSB+QkNTUl9SRVNFVFNfRklSX1NFTDsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX0ZJUl9TRUwsIDApOwogI2Vsc2UgLyogUGIxMDAwIGFuZCBQYjExMDAgKi8KIAkJd3JpdGVsKHJlYWRsKENQTERfQVVYMSkgJiB+KDE8PDEzKSwgQ1BMRF9BVVgxKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKaW5kZXggMzEwM2Y0MS4uMzVhMDZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCkBAIC0zNTcsMTIgKzM1NywzNCBAQAogCXUzMiBmY3RybF9yZWc7CiAJdTMyIHJtY3NfcmVnOwogCXUzMiByZWc7CisJdTMyIGxpbmtfc3BlZWQgPSAwOworCWJvb2wgbGlua191cDsKIAogI2lmZGVmIENPTkZJR19EQ0IKIAlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3BmYykKIAkJZ290byBvdXQ7CiAKICNlbmRpZiAvKiBDT05GSUdfRENCICovCisJLyoKKwkgKiBPbiA4MjU5OCBoYXZpbmcgUnggRkMgb24gY2F1c2VzIHJlc2V0cyB3aGlsZSBkb2luZyAxRworCSAqIHNvIGlmIGl0J3Mgb24gdHVybiBpdCBvZmYgb25jZSB3ZSBrbm93IGxpbmtfc3BlZWQuIEZvcgorCSAqIG1vcmUgZGV0YWlscyBzZWUgODI1OTggU3BlY2lmaWNhdGlvbiB1cGRhdGUuCisJICovCisJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmxpbmtfc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJaWYgKGxpbmtfdXAgJiYgbGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSB7CisJCXN3aXRjaCAoaHctPmZjLnJlcXVlc3RlZF9tb2RlKSB7CisJCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX3R4X3BhdXNlOworCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19ub25lOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBubyBjaGFuZ2UgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCiAJLyogTmVnb3RpYXRlIHRoZSBmYyBtb2RlIHRvIHVzZSAqLwogCXJldF92YWwgPSBpeGdiZV9mY19hdXRvbmVnKGh3KTsKIAlpZiAocmV0X3ZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKaW5kZXggNTZmMzdmNi4uZGQ0ODgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5id19wZXJjZW50YWdlWzBdW2J3Z19pZF0gIT0KIAkgICAgYWRhcHRlci0+ZGNiX2NmZy5id19wZXJjZW50YWdlWzBdW2J3Z19pZF0pIHsKLQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX1BHX1JYOworCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfUEdfVFg7CiAJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9SRVNFVExJTks7CiAJfQogfQpAQCAtMzQxLDYgKzM0MSwxMiBAQAogCWlmICghYWRhcHRlci0+ZGNiX3NldF9iaXRtYXApCiAJCXJldHVybiBEQ0JfTk9fSFdfQ0hHOwogCisJcmV0ID0gaXhnYmVfY29weV9kY2JfY2ZnKCZhZGFwdGVyLT50ZW1wX2RjYl9jZmcsICZhZGFwdGVyLT5kY2JfY2ZnLAorCQkJCSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gRENCX05PX0hXX0NIRzsKKwogCS8qCiAJICogT25seSB0YWtlIGRvd24gdGhlIGFkYXB0ZXIgaWYgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlCiAJICogcmVxdWlyZXMgYSByZXNldC4KQEAgLTM1OSwxNCArMzY1LDYgQEAKIAkJfQogCX0KIAotCXJldCA9IGl4Z2JlX2NvcHlfZGNiX2NmZygmYWRhcHRlci0+dGVtcF9kY2JfY2ZnLCAmYWRhcHRlci0+ZGNiX2NmZywKLQkJCQkgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMpOwotCWlmIChyZXQpIHsKLQkJaWYgKGFkYXB0ZXItPmRjYl9zZXRfYml0bWFwICYgQklUX1JFU0VUTElOSykKLQkJCWNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKLQkJcmV0dXJuIERDQl9OT19IV19DSEc7Ci0JfQotCiAJaWYgKGFkYXB0ZXItPmRjYl9jZmcucGZjX21vZGVfZW5hYmxlKSB7CiAJCWlmICgoYWRhcHRlci0+aHcubWFjLnR5cGUgIT0gaXhnYmVfbWFjXzgyNTk4RUIpICYmCiAJCQkoYWRhcHRlci0+aHcuZmMuY3VycmVudF9tb2RlICE9IGl4Z2JlX2ZjX3BmYykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggYjVmNjRhZC4uOTUxYjczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtNTE3OSw3ICs1MTc5LDcgQEAKIAkJaXhnYmVfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgdHhfYnVmZmVyX2luZm8pOwogCX0KIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfdHhfcXVldWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC01MzI5LDggKzUzMjksMTEgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHR4cSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUpCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSkgeworCQl3aGlsZSAodW5saWtlbHkodHhxID49IGRldi0+cmVhbF9udW1fdHhfcXVldWVzKSkKKwkJCXR4cSAtPSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKIAkJcmV0dXJuIHR4cTsKKwl9CiAKICNpZmRlZiBJWEdCRV9GQ09FCiAJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSAmJgpAQCAtNTc2MCw2ICs1NzYzLDEwIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfc3dfaW5pdDsKIAorCS8qIE1ha2UgaXQgcG9zc2libGUgdGhlIGFkYXB0ZXIgdG8gYmUgd29rZW4gdXAgdmlhIFdPTCAqLworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfV1VTLCB+MCk7CisKIAkvKgogCSAqIElmIHRoZXJlIGlzIGEgZmFuIG9uIHRoaXMgZGV2aWNlIGFuZCBpdCBoYXMgZmFpbGVkIGxvZyB0aGUKIAkgKiBmYWlsdXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jIGIvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCmluZGV4IGMxNDYzMDQuLmMwY2VlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKQEAgLTg1NCw4ICs4NTQsOCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qga3NfaXJxKGludCBpcnEsIHZvaWQgKnB3KQogewotCXN0cnVjdCBrc19uZXQgKmtzID0gcHc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGtzLT5uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHB3OworCXN0cnVjdCBrc19uZXQgKmtzID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MTYgc3RhdHVzOwogCiAJLyp0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3QgaW4gSVJRIGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY2UuYwppbmRleCBkOWZiYWQzLi40M2FlYTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjZS5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJbXAtPnBvcnRfYWF1aSA9IHBvcnRfYWF1aTsKIAllbHNlIHsKIAkJLyogQXBwbGUgTmV0d29yayBTZXJ2ZXIgdXNlcyB0aGUgQUFVSSBwb3J0ICovCi0JCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsU2hpbmVyRVNCIikpCisJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsU2hpbmVyRVNCIikpCiAJCQltcC0+cG9ydF9hYXVpID0gMTsKIAkJZWxzZSB7CiAjaWZkZWYgQ09ORklHX01BQ0VfQUFVSV9QT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNtYWNlLmMgYi9kcml2ZXJzL25ldC9tYWNtYWNlLmMKaW5kZXggNDRmM2MyOC4uNzk0MDhjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjbWFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L21hY21hY2UuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIm1hY2UuaCIKIAogc3RhdGljIGNoYXIgbWFjX21hY2Vfc3RyaW5nW10gPSAibWFjbWFjZSI7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFjX21hY2VfZGV2aWNlOwogCiAjZGVmaW5lIE5fVFhfQlVGRl9PUkRFUgkwCiAjZGVmaW5lIE5fVFhfUklORwkoMSA8PCBOX1RYX0JVRkZfT1JERVIpCkBAIC03NTIsNiArNzUxLDcgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYWNpbnRvc2ggTUFDRSBldGhlcm5ldCBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWFjbWFjZSIpOwogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYWNfbWFjZV9kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtNzc3LDQ3ICs3NzcsMjIgQEAKIAkucHJvYmUgID0gbWFjZV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobWFjX21hY2VfZGV2aWNlX3JlbW92ZSksCiAJLmRyaXZlcgk9IHsKLQkJLm5hbWUgPSBtYWNfbWFjZV9zdHJpbmcsCisJCS5uYW1lCT0gbWFjX21hY2Vfc3RyaW5nLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjX21hY2VfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlpbnQgZXJyOwotCiAJaWYgKCFNQUNIX0lTX01BQykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX21hY2VfZHJpdmVyKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbWFjX21hY2VfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG1hY19tYWNlX3N0cmluZywgMCk7Ci0JaWYgKCFtYWNfbWFjZV9kZXZpY2UpCi0JCWdvdG8gb3V0X3VucmVnaXN0ZXI7Ci0KLQlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZChtYWNfbWFjZV9kZXZpY2UpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQobWFjX21hY2VfZGV2aWNlKTsKLQkJbWFjX21hY2VfZGV2aWNlID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X3VucmVnaXN0ZXI6Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19tYWNlX2RyaXZlcik7Ci0KLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYWNfbWFjZV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX21hY2VfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjX21hY2VfZHJpdmVyKTsKLQotCWlmIChtYWNfbWFjZV9kZXZpY2UpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWFjX21hY2VfZGV2aWNlKTsKLQkJbWFjX21hY2VfZGV2aWNlID0gTlVMTDsKLQl9CiB9CiAKIG1vZHVsZV9pbml0KG1hY19tYWNlX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCmluZGV4IDg3NWQzNjEuLjI0MTA5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwpAQCAtNjIsNyArNjIsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNfdmlhLmg+CiAKIHN0YXRpYyBjaGFyIG1hY19zb25pY19zdHJpbmdbXSA9ICJtYWNzb25pYyI7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFjX3NvbmljX2RldmljZTsKIAogI2luY2x1ZGUgInNvbmljLmgiCiAKQEAgLTYwNyw2ICs2MDYsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYWNpbnRvc2ggU09OSUMgZXRoZXJuZXQgZHJpdmVyIik7CiBtb2R1bGVfcGFyYW0oc29uaWNfZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNvbmljX2RlYnVnLCAibWFjc29uaWMgZGVidWcgbGV2ZWwgKDEtNCkiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWFjc29uaWMiKTsKIAogI2luY2x1ZGUgInNvbmljLmMiCiAKQEAgLTYyNyw0NCArNjI3LDE5IEBACiAJLnByb2JlICA9IG1hY19zb25pY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobWFjX3NvbmljX2RldmljZV9yZW1vdmUpLAogCS5kcml2ZXIJPSB7Ci0JCS5uYW1lID0gbWFjX3NvbmljX3N0cmluZywKKwkJLm5hbWUJPSBtYWNfc29uaWNfc3RyaW5nLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjX3NvbmljX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JaW50IGVycjsKLQotCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbWFjX3NvbmljX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhtYWNfc29uaWNfc3RyaW5nLCAwKTsKLQlpZiAoIW1hY19zb25pY19kZXZpY2UpCi0JCWdvdG8gb3V0X3VucmVnaXN0ZXI7Ci0KLQlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZChtYWNfc29uaWNfZGV2aWNlKSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG1hY19zb25pY19kZXZpY2UpOwotCQltYWNfc29uaWNfZGV2aWNlID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X3VucmVnaXN0ZXI6Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOwotCi0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYWNfc29uaWNfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcik7Ci0KLQlpZiAobWFjX3NvbmljX2RldmljZSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtYWNfc29uaWNfZGV2aWNlKTsKLQkJbWFjX3NvbmljX2RldmljZSA9IE5VTEw7Ci0JfQogfQogCiBtb2R1bGVfaW5pdChtYWNfc29uaWNfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDlmOWQ2MDguLjI0Mjc5ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTE5NDEsNyArMTk0MSw3IEBACiAJCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKIAogCQljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Ci0KKwkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAkJaWYgKCFuZXR4ZW5fbmljX3Jlc2V0X2NvbnRleHQoYWRhcHRlcikpIHsKQEAgLTIyNDAsNyArMjI0MCw5IEBACiAKIAluZXR4ZW5fbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKIAorCXJ0bmxfbG9jaygpOwogCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOworCXJ0bmxfdW5sb2NrKCk7CiAKIAlzdGF0dXMgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BFR19IQUxUX1NUQVRVUzEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDZkZDQ4NmQuLmFhNTdjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC00NTMsOCArNDUzLDcgQEAKIAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPQotCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKKyAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKICAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKQEAgLTY1Miw4ICs2NTEsNyBAQAogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAgICAgbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9Ci0JSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CisgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAgICAgbGluay0+aW8uTnVtUG9ydHMxID0gNjQ7CiAgICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKICAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IDEwM2U4YjAuLjQ2OTk3ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTIyODQsNiArMjI4NCw3IEBACiAgZmFpbDI6CiAJZWZ4X2Zpbmlfc3RydWN0KGVmeCk7CiAgZmFpbDE6CisJV0FSTl9PTihyYyA+IDApOwogCUVGWF9MT0coZWZ4LCAiaW5pdGlhbGlzYXRpb24gZmFpbGVkLiByYz0lZFxuIiwgcmMpOwogCWZyZWVfbmV0ZGV2KG5ldF9kZXYpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25fYm9hcmRzLmMgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2JvYXJkcy5jCmluZGV4IGJmMGI5NmEuLjU3MTJmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25fYm9hcmRzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9ib2FyZHMuYwpAQCAtMjksNiArMjksMTUgQEAKICNkZWZpbmUgRkFMQ09OX0JPQVJEX1NGTjQxMTFUIDB4NTEKICNkZWZpbmUgRkFMQ09OX0JPQVJEX1NGTjQxMTJGIDB4NTIKIAorLyogQm9hcmQgdGVtcGVyYXR1cmUgaXMgYWJvdXQgMTXCsEMgYWJvdmUgYW1iaWVudCB3aGVuIGFpciBmbG93IGlzCisgKiBsaW1pdGVkLiAqLworI2RlZmluZSBGQUxDT05fQk9BUkRfVEVNUF9CSUFTCTE1CisKKy8qIFNGQzQwMDAgZGF0YXNoZWV0IHNheXM6ICdUaGUgbWF4aW11bSBwZXJtaXR0ZWQganVuY3Rpb24gdGVtcGVyYXR1cmUKKyAqIGlzIDEyNcKwQzsgdGhlIHRoZXJtYWwgZGVzaWduIG9mIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIFNGQzQwMDAKKyAqIHNob3VsZCBhaW0gdG8ga2VlcCB0aGlzIHdlbGwgYmVsb3cgMTAwwrBDLicgKi8KKyNkZWZpbmUgRkFMQ09OX0pVTkNfVEVNUF9NQVgJOTAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTdXBwb3J0IGZvciBMTTg3IHNlbnNvciBjaGlwIHVzZWQgb24gc2V2ZXJhbCBib2FyZHMKICAqLwpAQCAtNTQ4LDE2ICs1NTcsMTYgQEAKIHN0YXRpYyB1OCBzZmU0MDAyX2xtODdfY2hhbm5lbCA9IDB4MDM7IC8qIHVzZSBBSU4gbm90IEZBTiBpbnB1dHMgKi8KIAogc3RhdGljIGNvbnN0IHU4IHNmZTQwMDJfbG04N19yZWdzW10gPSB7Ci0JTE04N19JTl9MSU1JVFMoMCwgMHg4MywgMHg5MSksCQkvKiAyLjVWOiAgMS44ViArLy0gNSUgKi8KLQlMTTg3X0lOX0xJTUlUUygxLCAweDUxLCAweDVhKSwJCS8qIFZjY3AxOiAxLjJWICsvLSA1JSAqLwotCUxNODdfSU5fTElNSVRTKDIsIDB4YjYsIDB4Y2EpLAkJLyogMy4zVjogIDMuM1YgKy8tIDUlICovCi0JTE04N19JTl9MSU1JVFMoMywgMHhiMCwgMHhjOSksCQkvKiA1VjogICAgNC42LTUuMlYgKi8KLQlMTTg3X0lOX0xJTUlUUyg0LCAweGIwLCAweGUwKSwJCS8qIDEyVjogICAxMS0xNFYgKi8KLQlMTTg3X0lOX0xJTUlUUyg1LCAweDQ0LCAweDRiKSwJCS8qIFZjY3AyOiAxLjBWICsvLSA1JSAqLwotCUxNODdfQUlOX0xJTUlUUygwLCAweGEwLCAweGIyKSwJCS8qIEFJTjE6ICAxLjY2ViArLy0gNSUgKi8KLQlMTTg3X0FJTl9MSU1JVFMoMSwgMHg5MSwgMHhhMSksCQkvKiBBSU4yOiAgMS41ViArLy0gNSUgKi8KLQlMTTg3X1RFTVBfSU5UX0xJTUlUUygxMCwgNjApLAkJLyogYm9hcmQgKi8KLQlMTTg3X1RFTVBfRVhUMV9MSU1JVFMoMTAsIDcwKSwJCS8qIEZhbGNvbiAqLworCUxNODdfSU5fTElNSVRTKDAsIDB4N2MsIDB4OTkpLAkJLyogMi41VjogIDEuOFYgKy8tIDEwJSAqLworCUxNODdfSU5fTElNSVRTKDEsIDB4NGMsIDB4NWUpLAkJLyogVmNjcDE6IDEuMlYgKy8tIDEwJSAqLworCUxNODdfSU5fTElNSVRTKDIsIDB4YWMsIDB4ZDQpLAkJLyogMy4zVjogIDMuM1YgKy8tIDEwJSAqLworCUxNODdfSU5fTElNSVRTKDMsIDB4YWMsIDB4ZDQpLAkJLyogNVY6ICAgIDUuMFYgKy8tIDEwJSAqLworCUxNODdfSU5fTElNSVRTKDQsIDB4YWMsIDB4ZTApLAkJLyogMTJWOiAgIDEwLjgtMTRWICovCisJTE04N19JTl9MSU1JVFMoNSwgMHgzZiwgMHg0ZiksCQkvKiBWY2NwMjogMS4wViArLy0gMTAlICovCisJTE04N19BSU5fTElNSVRTKDAsIDB4OTgsIDB4YmIpLAkJLyogQUlOMTogIDEuNjZWICsvLSAxMCUgKi8KKwlMTTg3X0FJTl9MSU1JVFMoMSwgMHg4YSwgMHhhOSksCQkvKiBBSU4yOiAgMS41ViArLy0gMTAlICovCisJTE04N19URU1QX0lOVF9MSU1JVFMoMCwgODAgKyBGQUxDT05fQk9BUkRfVEVNUF9CSUFTKSwKKwlMTTg3X1RFTVBfRVhUMV9MSU1JVFMoMCwgRkFMQ09OX0pVTkNfVEVNUF9NQVgpLAogCTAKIH07CiAKQEAgLTYxOSwxNCArNjI4LDE0IEBACiBzdGF0aWMgdTggc2ZuNDExMmZfbG04N19jaGFubmVsID0gMHgwMzsgLyogdXNlIEFJTiBub3QgRkFOIGlucHV0cyAqLwogCiBzdGF0aWMgY29uc3QgdTggc2ZuNDExMmZfbG04N19yZWdzW10gPSB7Ci0JTE04N19JTl9MSU1JVFMoMCwgMHg4MywgMHg5MSksCQkvKiAyLjVWOiAgMS44ViArLy0gNSUgKi8KLQlMTTg3X0lOX0xJTUlUUygxLCAweDUxLCAweDVhKSwJCS8qIFZjY3AxOiAxLjJWICsvLSA1JSAqLwotCUxNODdfSU5fTElNSVRTKDIsIDB4YjYsIDB4Y2EpLAkJLyogMy4zVjogIDMuM1YgKy8tIDUlICovCi0JTE04N19JTl9MSU1JVFMoNCwgMHhiMCwgMHhlMCksCQkvKiAxMlY6ICAgMTEtMTRWICovCi0JTE04N19JTl9MSU1JVFMoNSwgMHg0NCwgMHg0YiksCQkvKiBWY2NwMjogMS4wViArLy0gNSUgKi8KLQlMTTg3X0FJTl9MSU1JVFMoMSwgMHg5MSwgMHhhMSksCQkvKiBBSU4yOiAgMS41ViArLy0gNSUgKi8KLQlMTTg3X1RFTVBfSU5UX0xJTUlUUygxMCwgNjApLAkJLyogYm9hcmQgKi8KLQlMTTg3X1RFTVBfRVhUMV9MSU1JVFMoMTAsIDcwKSwJCS8qIEZhbGNvbiAqLworCUxNODdfSU5fTElNSVRTKDAsIDB4N2MsIDB4OTkpLAkJLyogMi41VjogIDEuOFYgKy8tIDEwJSAqLworCUxNODdfSU5fTElNSVRTKDEsIDB4NGMsIDB4NWUpLAkJLyogVmNjcDE6IDEuMlYgKy8tIDEwJSAqLworCUxNODdfSU5fTElNSVRTKDIsIDB4YWMsIDB4ZDQpLAkJLyogMy4zVjogIDMuM1YgKy8tIDEwJSAqLworCUxNODdfSU5fTElNSVRTKDQsIDB4YWMsIDB4ZTApLAkJLyogMTJWOiAgIDEwLjgtMTRWICovCisJTE04N19JTl9MSU1JVFMoNSwgMHgzZiwgMHg0ZiksCQkvKiBWY2NwMjogMS4wViArLy0gMTAlICovCisJTE04N19BSU5fTElNSVRTKDEsIDB4OGEsIDB4YTkpLAkJLyogQUlOMjogIDEuNVYgKy8tIDEwJSAqLworCUxNODdfVEVNUF9JTlRfTElNSVRTKDAsIDYwICsgRkFMQ09OX0JPQVJEX1RFTVBfQklBUyksCisJTE04N19URU1QX0VYVDFfTElNSVRTKDAsIEZBTENPTl9KVU5DX1RFTVBfTUFYKSwKIAkwCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWNkaS5jIGIvZHJpdmVycy9uZXQvc2ZjL21jZGkuYwppbmRleCA5ZjAzNWI5Li5mNjZiM2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWVmeF9kd29yZF90IHJlZzsKIAogCS8qIENoZWNrIGZvciBhIHJlYm9vdCBhdG9taWNhbGx5IHdpdGggcmVzcGVjdCB0byBlZnhfbWNkaV9jb3B5b3V0KCkgKi8KLQlyYyA9IGVmeF9tY2RpX3BvbGxfcmVib290KGVmeCk7CisJcmMgPSAtZWZ4X21jZGlfcG9sbF9yZWJvb3QoZWZ4KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYwppbmRleCBlMGQxM2E0Li42N2VlYzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKQEAgLTMyMCw3ICszMjAsNyBAQAogCiAJZmFsY29uX2JvYXJkKGVmeCktPnR5cGUtPmluaXRfcGh5KGVmeCk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiAKICBmYWlsOgogCUVGWF9FUlIoZWZ4LCAiUEhZIHJlc2V0IHRpbWVkIG91dFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggZDc2MDY1MC4uNjcyNDljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtMTAyNSwxMSArMTAyNSw4IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza3kyX3R4X2xlICpnZXRfdHhfbGUoc3RydWN0IHNreTJfcG9ydCAqc2t5MiwgdTE2ICpzbG90KQogewogCXN0cnVjdCBza3kyX3R4X2xlICpsZSA9IHNreTItPnR4X2xlICsgKnNsb3Q7Ci0Jc3RydWN0IHR4X3JpbmdfaW5mbyAqcmUgPSBza3kyLT50eF9yaW5nICsgKnNsb3Q7CiAKIAkqc2xvdCA9IFJJTkdfTkVYVCgqc2xvdCwgc2t5Mi0+dHhfcmluZ19zaXplKTsKLQlyZS0+ZmxhZ3MgPSAwOwotCXJlLT5za2IgPSBOVUxMOwogCWxlLT5jdHJsID0gMDsKIAlyZXR1cm4gbGU7CiB9CkBAIC0xNjIyLDggKzE2MTksNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHZvaWQgc2t5Ml90eF91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCSAgY29uc3Qgc3RydWN0IHR4X3JpbmdfaW5mbyAqcmUpCitzdGF0aWMgdm9pZCBza3kyX3R4X3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdHhfcmluZ19pbmZvICpyZSkKIHsKIAlpZiAocmUtPmZsYWdzICYgVFhfTUFQX1NJTkdMRSkKIAkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBwY2lfdW5tYXBfYWRkcihyZSwgbWFwYWRkciksCkBAIC0xNjMzLDYgKzE2MjksNyBAQAogCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBwY2lfdW5tYXBfYWRkcihyZSwgbWFwYWRkciksCiAJCQkgICAgICAgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKIAkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwlyZS0+ZmxhZ3MgPSAwOwogfQogCiAvKgpAQCAtMTgzOSw2ICsxODM2LDcgQEAKIAkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAorCQkJcmUtPnNrYiA9IE5VTEw7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCiAJCQlza3kyLT50eF9uZXh0ID0gUklOR19ORVhUKGlkeCwgc2t5Mi0+dHhfcmluZ19zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IDk1ZGI2MGEuLmY5NTIxMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAlpZiAocmV0dmFsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3RhcmZpcmU6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKIAkJICAgICAgIEZJUk1XQVJFX1JYKTsKLQkJcmV0dXJuIHJldHZhbDsKKwkJZ290byBvdXRfaW5pdDsKIAl9CiAJaWYgKGZ3X3J4LT5zaXplICUgNCkgewogCQlwcmludGsoS0VSTl9FUlIgInN0YXJmaXJlOiBib2d1cyBsZW5ndGggJXp1IGluIFwiJXNcIlxuIiwKQEAgLTExMDgsNiArMTEwOCw5IEBACiAJcmVsZWFzZV9maXJtd2FyZShmd190eCk7CiBvdXRfcng6CiAJcmVsZWFzZV9maXJtd2FyZShmd19yeCk7CitvdXRfaW5pdDoKKwlpZiAocmV0dmFsKQorCQluZXRkZXZfY2xvc2UoZGV2KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggNzVhNjY5ZC4uZDcxYzE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtMTQzNyw3ICsxNDM3LDYgQEAKIAkJLyogVHJhbnNtaXQgY29tcGxldGUuICovCiAJCWxwLT5sc3RhdHMudHhfaW50cysrOwogCQl0YzM1ODE1X3R4ZG9uZShkZXYpOwotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0ID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKaW5kZXggMjFlMTgzYS4uNWYzYjllYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYwpAQCAtNDE5LDcgKzQxOSw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JY2RjX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIkNEQyBFdGhlcm5ldCBEZXZpY2UiLAotCS5mbGFncyA9CUZMQUdfRVRIRVIgfCBGTEFHX0xJTktfSU5UUiwKKwkuZmxhZ3MgPQlGTEFHX0VUSEVSLAogCS8vIC5jaGVja19jb25uZWN0ID0gY2RjX2NoZWNrX2Nvbm5lY3QsCiAJLmJpbmQgPQkJY2RjX2JpbmQsCiAJLnVuYmluZCA9CXVzYm5ldF9jZGNfdW5iaW5kLApAQCAtNTg0LDYgKzU4NCwxMSBAQAogCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmbWJtX2luZm8sCiB9LCB7CisJLyogRXJpY3Nzb24gQzM2MDd3IHZlciAyICovCisJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwYmRiLCAweDE5MGIsIFVTQl9DTEFTU19DT01NLAorCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmbWJtX2luZm8sCit9LCB7CiAJLyogVG9zaGliYSBGMzUwN2cgKi8KIAlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDA5MzAsIDB4MTMwYiwgVVNCX0NMQVNTX0NPTU0sCiAJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGM5M2Y1OGYuLjMxN2FhMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC0xODc3LDEzICsxODc3LDEyIEBACiAvKioKICAqCXR4X3NydgkJLQl0cmFuc21pdCBpbnRlcnJ1cHQgc2VydmljZQogICoJQHZwdHI7IFZlbG9jaXR5Ci0gKglAc3RhdHVzOgogICoKICAqCVNjYW4gdGhlIHF1ZXVlcyBsb29raW5nIGZvciB0cmFuc21pdHRlZCBwYWNrZXRzIHRoYXQKICAqCXdlIGNhbiBjb21wbGV0ZSBhbmQgY2xlYW4gdXAuIFVwZGF0ZSBhbnkgc3RhdGlzdGljcyBhcwogICoJbmVjZXNzYXJ5LwogICovCi1zdGF0aWMgaW50IHZlbG9jaXR5X3R4X3NydihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIHN0YXR1cykKK3N0YXRpYyBpbnQgdmVsb2NpdHlfdHhfc3J2KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQogewogCXN0cnVjdCB0eF9kZXNjICp0ZDsKIAlpbnQgcW51bTsKQEAgLTIwOTAsMTQgKzIwODksMTIgQEAKIC8qKgogICoJdmVsb2NpdHlfcnhfc3J2CQktCXNlcnZpY2UgUlggaW50ZXJydXB0CiAgKglAdnB0cjogdmVsb2NpdHkKLSAqCUBzdGF0dXM6IGFkYXB0ZXIgc3RhdHVzICh1bnVzZWQpCiAgKgogICoJV2FsayB0aGUgcmVjZWl2ZSByaW5nIG9mIHRoZSB2ZWxvY2l0eSBhZGFwdGVyIGFuZCByZW1vdmUKICAqCWFueSByZWNlaXZlZCBwYWNrZXRzIGZyb20gdGhlIHJlY2VpdmUgcXVldWUuIEhhbmQgdGhlIHJpbmcKICAqCXNsb3RzIGJhY2sgdG8gdGhlIGFkYXB0ZXIgZm9yIHJldXNlLgogICovCi1zdGF0aWMgaW50IHZlbG9jaXR5X3J4X3NydihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IHN0YXR1cywKLQkJaW50IGJ1ZGdldF9sZWZ0KQorc3RhdGljIGludCB2ZWxvY2l0eV9yeF9zcnYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBidWRnZXRfbGVmdCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdnB0ci0+ZGV2LT5zdGF0czsKIAlpbnQgcmRfY3VyciA9IHZwdHItPnJ4LmN1cnI7CkBAIC0yMTUxLDMyICsyMTQ4LDI0IEBACiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBjb250YWluZXJfb2YobmFwaSwKIAkJCXN0cnVjdCB2ZWxvY2l0eV9pbmZvLCBuYXBpKTsKIAl1bnNpZ25lZCBpbnQgcnhfZG9uZTsKLQl1MzIgaXNyX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZ2cHRyLT5sb2NrKTsKLQlpc3Jfc3RhdHVzID0gbWFjX3JlYWRfaXNyKHZwdHItPm1hY19yZWdzKTsKLQotCS8qIEFjayB0aGUgaW50ZXJydXB0ICovCi0JbWFjX3dyaXRlX2lzcih2cHRyLT5tYWNfcmVncywgaXNyX3N0YXR1cyk7Ci0JaWYgKGlzcl9zdGF0dXMgJiAofihJU1JfUFJYSSB8IElTUl9QUFJYSSB8IElTUl9QVFhJIHwgSVNSX1BQVFhJKSkpCi0JCXZlbG9jaXR5X2Vycm9yKHZwdHIsIGlzcl9zdGF0dXMpOwotCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKIAkvKgogCSAqIERvIHJ4IGFuZCB0eCB0d2ljZSBmb3IgcGVyZm9ybWFuY2UgKHRha2VuIGZyb20gdGhlIFZJQQogCSAqIG91dC1vZi10cmVlIGRyaXZlcikuCiAJICovCi0JcnhfZG9uZSA9IHZlbG9jaXR5X3J4X3Nydih2cHRyLCBpc3Jfc3RhdHVzLCBidWRnZXQgLyAyKTsKLQl2ZWxvY2l0eV90eF9zcnYodnB0ciwgaXNyX3N0YXR1cyk7Ci0JcnhfZG9uZSArPSB2ZWxvY2l0eV9yeF9zcnYodnB0ciwgaXNyX3N0YXR1cywgYnVkZ2V0IC0gcnhfZG9uZSk7Ci0JdmVsb2NpdHlfdHhfc3J2KHZwdHIsIGlzcl9zdGF0dXMpOwotCi0Jc3Bpbl91bmxvY2soJnZwdHItPmxvY2spOworCXJ4X2RvbmUgPSB2ZWxvY2l0eV9yeF9zcnYodnB0ciwgYnVkZ2V0IC8gMik7CisJdmVsb2NpdHlfdHhfc3J2KHZwdHIpOworCXJ4X2RvbmUgKz0gdmVsb2NpdHlfcnhfc3J2KHZwdHIsIGJ1ZGdldCAtIHJ4X2RvbmUpOworCXZlbG9jaXR5X3R4X3Nydih2cHRyKTsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmIChyeF9kb25lIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCW1hY19lbmFibGVfaW50KHZwdHItPm1hY19yZWdzKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJ4X2RvbmU7CiB9CkBAIC0yMjA2LDEwICsyMTk1LDE3IEBACiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKKwkvKiBBY2sgdGhlIGludGVycnVwdCAqLworCW1hY193cml0ZV9pc3IodnB0ci0+bWFjX3JlZ3MsIGlzcl9zdGF0dXMpOworCiAJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJnZwdHItPm5hcGkpKSkgewogCQltYWNfZGlzYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOwogCQlfX25hcGlfc2NoZWR1bGUoJnZwdHItPm5hcGkpOwogCX0KKworCWlmIChpc3Jfc3RhdHVzICYgKH4oSVNSX1BSWEkgfCBJU1JfUFBSWEkgfCBJU1JfUFRYSSB8IElTUl9QUFRYSSkpKQorCQl2ZWxvY2l0eV9lcnJvcih2cHRyLCBpc3Jfc3RhdHVzKTsKKwogCXNwaW5fdW5sb2NrKCZ2cHRyLT5sb2NrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTMxMDAsNyArMzA5Niw3IEBACiAJdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnModnB0ciwgVkVMT0NJVFlfSU5JVF9XT0wpOwogCW1hY19kaXNhYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7CiAKLQl2ZWxvY2l0eV90eF9zcnYodnB0ciwgMCk7CisJdmVsb2NpdHlfdHhfc3J2KHZwdHIpOwogCiAJZm9yIChpID0gMDsgaSA8IHZwdHItPnR4Lm51bXE7IGkrKykgewogCQlpZiAodnB0ci0+dHgudXNlZFtpXSkKQEAgLTMzNDQsNiArMzM0MCw3IEBACiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBtYXhfdXMgPSAweDNmICogNjQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIDYgYml0cyBvZiAgKi8KIAlpZiAoZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MgPiBtYXhfdXMpCkBAIC0zMzY1LDYgKzMzNjIsNyBAQAogCQkJZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MpOwogCiAJLyogU2V0dXAgdGhlIGludGVycnVwdCBzdXBwcmVzc2lvbiBhbmQgcXVldWUgdGltZXJzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKIAltYWNfZGlzYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOwogCXNldHVwX2FkYXB0aXZlX2ludGVycnVwdHModnB0cik7CiAJc2V0dXBfcXVldWVfdGltZXJzKHZwdHIpOwpAQCAtMzM3Miw2ICszMzcwLDcgQEAKIAltYWNfd3JpdGVfaW50X21hc2sodnB0ci0+aW50X21hc2ssIHZwdHItPm1hY19yZWdzKTsKIAltYWNfY2xlYXJfaXNyKHZwdHItPm1hY19yZWdzKTsKIAltYWNfZW5hYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCmluZGV4IDJlYzYxZjAuLmFlMzcxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCkBAIC04NTUsMTIgKzg1NSwxMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF8xMWFfZWVwcm9tX2ZpeChzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfZWVwcm9tX2ZpeChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgaSwgajsKIAotCWlmICgoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgJiYKLQkgICAgdGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgeworCWlmIChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjkyODBfREVWSURfUENJKSB7CiAKIAkJLyogRUVQUk9NIEZpeHVwICovCiAJCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pTW9kZXMuaWFfcm93czsgaSsrKSB7CkBAIC05ODAsNyArOTc5LDcgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlhdGg5a19od19pbml0XzExYV9lZXByb21fZml4KGFoKTsKKwlhdGg5a19od19pbml0X2VlcHJvbV9maXgoYWgpOwogCiAJciA9IGF0aDlrX2h3X2luaXRfbWFjYWRkcihhaCk7CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IDk5NmViOTAuLjY0M2JlYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMjY1NSwxMCArMjY1NSwxMCBAQAogCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKIAkJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKLQkJYXRoX2JlYWNvbl9yZXR1cm4oc2MsIGF2cCk7CiAJCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCX0KIAorCWF0aF9iZWFjb25fcmV0dXJuKHNjLCBhdnApOwogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQkVBQ09OUzsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT5iZWFjb24uYnNsb3QpOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCmluZGV4IGZhMTJiOTAuLjI5YmYzMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAKIAkJYmYtPmJmX2ZybWxlbiAtPSBwYWRzaXplOwogCX0KIAotCWlmIChjb25mX2lzX2h0KCZody0+Y29uZikgJiYgIWlzX3BhZShza2IpKQorCWlmIChjb25mX2lzX2h0KCZody0+Y29uZikpCiAJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9IVDsKIAogCWJmLT5iZl9mbGFncyA9IHNldHVwX3R4X2ZsYWdzKHNjLCBza2IsIHR4Y3RsLT50eHEpOwpAQCAtMTcwMSw3ICsxNzAxLDcgQEAKIAkJCWdvdG8gdHhfZG9uZTsKIAkJfQogCi0JCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJaWYgKCh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpICYmICFpc19wYWUoc2tiKSkgewogCQkJLyoKIAkJCSAqIFRyeSBhZ2dyZWdhdGlvbiBpZiBpdCdzIGEgdW5pY2FzdCBkYXRhIGZyYW1lCiAJCQkgKiBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIEhUIGNhcGFibGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggZmUzYmY5NC4uYzQ4NGNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaApAQCAtMTE1LDYgKzExNSw3IEBACiAjZGVmaW5lIEI0M19NTUlPX1RTRl8yCQkJMHg2MzYJLyogY29yZSByZXYgPCAzIG9ubHkgKi8KICNkZWZpbmUgQjQzX01NSU9fVFNGXzMJCQkweDYzOAkvKiBjb3JlIHJldiA8IDMgb25seSAqLwogI2RlZmluZSBCNDNfTU1JT19STkcJCQkweDY1QQorI2RlZmluZSBCNDNfTU1JT19JRlNTTE9UCQkweDY4NAkvKiBJbnRlcmZyYW1lIHNsb3QgdGltZSAqLwogI2RlZmluZSBCNDNfTU1JT19JRlNDVEwJCQkweDY4OCAvKiBJbnRlcmZyYW1lIHNwYWNlIGNvbnRyb2wgKi8KICNkZWZpbmUgIEI0M19NTUlPX0lGU0NUTF9VU0VfRURDRgkweDAwMDQKICNkZWZpbmUgQjQzX01NSU9fUE9XRVJVUF9ERUxBWQkJMHg2QTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCmluZGV4IDRjNDFjZmUuLjQ5MGZiNDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTYyOCwxMCArNjI4LDE3IEBACiBzdGF0aWMgdm9pZCBiNDNfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBzbG90X3RpbWUpCiB7CiAJLyogc2xvdF90aW1lIGlzIGluIHVzZWMuICovCi0JaWYgKGRldi0+cGh5LnR5cGUgIT0gQjQzX1BIWVRZUEVfRykKKwkvKiBUaGlzIHRlc3QgdXNlZCB0byBleGl0IGZvciBhbGwgYnV0IGEgRyBQSFkuICovCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJcmV0dXJuOwotCWI0M193cml0ZTE2KGRldiwgMHg2ODQsIDUxMCArIHNsb3RfdGltZSk7Ci0JYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIDB4MDAxMCwgc2xvdF90aW1lKTsKKwliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX0lGU1NMT1QsIDUxMCArIHNsb3RfdGltZSk7CisJLyogU2hhcmVkIG1lbW9yeSBsb2NhdGlvbiAweDAwMTAgaXMgdGhlIHNsb3QgdGltZSBhbmQgc2hvdWxkIGJlCisJICogc2V0IHRvIHNsb3RfdGltZTsgaG93ZXZlciwgdGhpcyByZWdpc3RlciBpcyBpbml0aWFsbHkgMCBhbmQgY2hhbmdpbmcKKwkgKiB0aGUgdmFsdWUgYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIHRyYW5zbWl0IHJhdGUgZm9yIEJDTTQzMTEKKwkgKiBkZXZpY2VzLiBVbnRpbCB0aGlzIGJlaGF2aW9yIGlzIHVudGVyc3Rvb2QsIGRlbGV0ZSB0aGlzIHN0ZXAKKwkgKgorCSAqIGI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCAweDAwMTAsIHNsb3RfdGltZSk7CisJICovCiB9CiAKIHN0YXRpYyB2b2lkIGI0M19zaG9ydF9zbG90X3RpbWluZ19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IDliNGI4YjUuLjMxNDYyODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTIwMDgsNyArMjAwOCw3IEBACiAJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlJldHJ5IHNjaGVkdWxlciByZWNsYWltIHNjZF9zc24gIgogCQkJCQkgICAiJWQgaW5kZXggJWRcbiIsIHNjZF9zc24gLCBpbmRleCk7CiAJCQlmcmVlZCA9IGl3bF90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOworCQkJaXdsX2ZyZWVfdGZkc19pbl9xdWV1ZShwcml2LCBzdGFfaWQsIHRpZCwgZnJlZWQpOwogCiAJCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgogCQkJICAgIChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmspICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggZGU0NWYzMC4uY2ZmYWFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMTEyNSw3ICsxMTI1LDcgQEAKIAkJCQkJc2NkX3NzbiAsIGluZGV4LCB0eHFfaWQsIHR4cS0+c3dxX2lkKTsKIAogCQkJZnJlZWQgPSBpd2xfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKLQkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSAtPSBmcmVlZDsKKwkJCWl3bF9mcmVlX3RmZHNfaW5fcXVldWUocHJpdiwgc3RhX2lkLCB0aWQsIGZyZWVkKTsKIAogCQkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKIAkJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSAmJgpAQCAtMTE1MywxNiArMTE1MywxNCBAQAogCQkJCSAgIHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWUpOwogCiAJCWZyZWVkID0gaXdsX3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7Ci0JCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3ModHhfcmVzcC0+ZnJhbWVfY3RybCkpCi0JCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CisJCWl3bF9mcmVlX3RmZHNfaW5fcXVldWUocHJpdiwgc3RhX2lkLCB0aWQsIGZyZWVkKTsKIAogCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgogCQkgICAgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykpCiAJCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHFfaWQpOwogCX0KIAotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3ModHhfcmVzcC0+ZnJhbWVfY3RybCkpCi0JCWl3bF90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7CisJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCiAJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCmluZGV4IDU0NjFmMTAuLmYzNmY4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKQEAgLTI3NDUsNiArMjc0NSw3IEBACiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSAwOwogCiAJCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwpOworCQlpd2xfc2V0X3J4b25faHQocHJpdiwgaHRfY29uZik7CiAKIAkJaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IDI3Y2E4NTkuLmI2OWU5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKQEAgLTQ0Niw2ICs0NDYsOCBAQAogaW50IGl3bF9od190eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogaW50IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7Cit2b2lkIGl3bF9mcmVlX3RmZHNfaW5fcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgIGludCBzdGFfaWQsIGludCB0aWQsIGludCBmcmVlZCk7CiBpbnQgaXdsX3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCiAJCSAgICAgIGludCBzbG90c19udW0sIHUzMiB0eHFfaWQpOwogdm9pZCBpd2xfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggNmYzNmI2ZS4uMmRiY2U4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC05MjgsNyArOTI4LDEwIEBACiAJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSB8fAogCSAgICBpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChmYykgfHwKIAkgICAgaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpIHx8Ci0JICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykKKwkgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkgJiBJRUVFODAyMTFfU0NUTF9GUkFHIHx8CisJICAgIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmCisJICAgICAqaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcikgJgorCSAgICAgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UKSkKIAkJcmV0ID0gc2tiX2xpbmVhcml6ZShza2IpOwogCWVsc2UKIAkJcmV0ID0gX19wc2tiX3B1bGxfdGFpbChza2IsIG1pbl90KHUxNiwgSVdMX0xJTktfSERSX01BWCwgbGVuKSkgPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwppbmRleCBjZGUwOWE4Li45MGZiZGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9hZGRfc3RhdGlvbik7CiAKLXN0YXRpYyB2b2lkIGl3bF9zdGFfdWNvZGVfZGVhY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IGNoYXIgKmFkZHIpCitzdGF0aWMgdm9pZCBpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IHN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7CkBAIC0zMjQsNyArMzI0LDcgQEAKIHsKIAlzdHJ1Y3QgaXdsX3JlbV9zdGFfY21kICpybV9zdGEgPQogCQkJKHN0cnVjdCBpd2xfcmVtX3N0YV9jbWQgKiljbWQtPmNtZC5wYXlsb2FkOwotCWNvbnN0IGNoYXIgKmFkZHIgPSBybV9zdGEtPmFkZHI7CisJY29uc3QgdTggKmFkZHIgPSBybV9zdGEtPmFkZHI7CiAKIAlpZiAocGt0LT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKIAkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCA4N2NlMmJkLi44ZjQwNzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTEyMCw2ICsxMjAsMjAgQEAKIEVYUE9SVF9TWU1CT0woaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKTsKIAogCit2b2lkIGl3bF9mcmVlX3RmZHNfaW5fcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgIGludCBzdGFfaWQsIGludCB0aWQsIGludCBmcmVlZCkKK3sKKwlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlID49IGZyZWVkKQorCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CisJZWxzZSB7CisJCUlXTF9FUlIocHJpdiwgImZyZWUgbW9yZSB0aGFuIHRmZHNfaW5fcXVldWUgKCV1OiVkKVxuIiwKKwkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSwKKwkJCWZyZWVkKTsKKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlID0gMDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9mcmVlX3RmZHNfaW5fcXVldWUpOworCiAvKioKICAqIGl3bF90eF9xdWV1ZV9mcmVlIC0gRGVhbGxvY2F0ZSBETUEgcXVldWUuCiAgKiBAdHhxOiBUcmFuc21pdCBxdWV1ZSB0byBkZWFsbG9jYXRlLgpAQCAtMTEzMSw2ICsxMTQ1LDcgQEAKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKIAlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4X2luZm87CiAJaW50IG5mcmVlZCA9IDA7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKHEsIGluZGV4KSA9PSAwKSkgewogCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCkBAIC0xMTQ1LDEzICsxMTYwLDE2IEBACiAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwogCQlpd2xfdHhfc3RhdHVzKHByaXYsIHR4X2luZm8tPnNrYlswXSk7CisKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfaW5mby0+c2tiWzBdLT5kYXRhOworCQlpZiAoaGRyICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJbmZyZWVkKys7CiAJCXR4X2luZm8tPnNrYlswXSA9IE5VTEw7CiAKIAkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbnZhbF9ieXRlX2NudF90YmwpCiAJCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSk7CiAKIAkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7Ci0JCW5mcmVlZCsrOwogCX0KIAlyZXR1cm4gbmZyZWVkOwogfQpAQCAtMTU1OSw3ICsxNTc3LDcgQEAKIAlpZiAodHhxLT5xLnJlYWRfcHRyICE9IChiYV9yZXNwX3NjZF9zc24gJiAweGZmKSkgewogCQkvKiBjYWxjdWxhdGUgbWFjODAyMTEgYW1wZHUgc3cgcXVldWUgdG8gd2FrZSAqLwogCQlpbnQgZnJlZWQgPSBpd2xfdHhfcXVldWVfcmVjbGFpbShwcml2LCBzY2RfZmxvdywgaW5kZXgpOwotCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CisJCWl3bF9mcmVlX3RmZHNfaW5fcXVldWUocHJpdiwgc3RhX2lkLCB0aWQsIGZyZWVkKTsKIAogCQlpZiAoKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykgJiYKIAkJICAgIHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKaW5kZXggNmQ2ZWQ3NC4uZjcyN2I0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKQEAgLTc5NCw3ICs3OTQsNyBAQAogCX0KIAogCWJzcy0+YnNzID0ga3phbGxvYyhic3NfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJzcykgeworCWlmICghYnNzLT5ic3MpIHsKIAkJa2ZyZWUoYnNzKTsKIAkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBhbGxvY2F0ZSBic3NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwppbmRleCBiYzU3MjZkLi43YmEzMDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCkBAIC02NSw2ICs2NSw3IEBACiAJLyogU2l0ZWNvbSAqLwogCXtVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDBkKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAogCXtVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDI4KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKKwl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAyOSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCiAJLyogU3BoYWlyb24gQWNjZXNzIFN5c3RlbXMgR21iSCAqLwogCXtVU0JfREVWSUNFKDB4MTE0QiwgMHgwMTUwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAogCS8qIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvS2NvbmZpZyBiL2RyaXZlcnMvb2YvS2NvbmZpZwppbmRleCBkMmZhMjdjLi43Y2VjYzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL0tjb25maWcKKysrIGIvZHJpdmVycy9vZi9LY29uZmlnCkBAIC0xLDMgKzEsMTEgQEAKK2NvbmZpZyBPRl9GTEFUVFJFRQorCWJvb2wKKwlkZXBlbmRzIG9uIE9GCisKK2NvbmZpZyBPRl9EWU5BTUlDCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gT0YgJiYgUFBDX09GCisKIGNvbmZpZyBPRl9ERVZJQ0UKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBPRiAmJiAoU1BBUkMgfHwgUFBDX09GIHx8IE1JQ1JPQkxBWkUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL01ha2VmaWxlIGIvZHJpdmVycy9vZi9NYWtlZmlsZQppbmRleCBiZGZiNWY1Li5mMjMyY2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvb2YvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiBvYmoteSA9IGJhc2Uubworb2JqLSQoQ09ORklHX09GX0ZMQVRUUkVFKSArPSBmZHQubwogb2JqLSQoQ09ORklHX09GX0RFVklDRSkgKz0gZGV2aWNlLm8gcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX09GX0dQSU8pICAgKz0gZ3Bpby5vCiBvYmotJChDT05GSUdfT0ZfSTJDKQkrPSBvZl9pMmMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCBlNjYyN2IyLi5jYjk2ODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtMjAsOCArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+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+Y3VyX2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCiAJYWNwaXBocF9zbG90LT5zbG90ID0gc2xvdDsKIAlzbnByaW50ZihuYW1lLCBTTE9UX05BTUVfU0laRSwgIiVsbHUiLCBzbG90LT5hY3BpX3Nsb3QtPnN1bik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwppbmRleCA4ZTk1MmZkLi5jYjJmZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKQEAgLTcyMCwxMiArNzIwLDYgQEAKIAkJCS1yZXRfdmFsKTsKIAkJZ290byBhY3BpcGhwX2J1c19hZGRfb3V0OwogCX0KLQkvKgotCSAqIHRyeSB0byBzdGFydCBhbnl3YXkuICBXZSBjb3VsZCBoYXZlIGZhaWxlZCB0byBhZGQKLQkgKiBzaW1wbHkgYmVjYXVzZSB0aGlzIGJ1cyBoYWQgcHJldmlvdXNseSBiZWVuIGFkZGVkCi0JICogb24gYW5vdGhlciBhZGQuICBEb24ndCBib3RoZXIgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCi0JICogd2UganVzdCBrZWVwIGdvaW5nLgotCSAqLwogCXJldF92YWwgPSBhY3BpX2J1c19zdGFydChkZXZpY2UpOwogCiBhY3BpcGhwX2J1c19hZGRfb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jCmluZGV4IDE0OGZiNDYuLmZiM2Y4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMKQEAgLTE2Miw2ICsxNjIsNyBAQAogCWRldiA9IHBjaV9nZXRfc2xvdChidXMsIFBDSV9ERVZGTihicmlkZ2Vfc2xvdCwgMCkpOwogCWlmKCFkZXYgfHwgZGV2LT5oZHJfdHlwZSAhPSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CiAJCWVycigiSW52YWxpZCBicmlkZ2UgZGV2aWNlICVzIiwgYnJpZGdlKTsKKwkJcGNpX2Rldl9wdXQoZGV2KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWJ1cyA9IGRldi0+c3Vib3JkaW5hdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaAppbmRleCA5YzZhOWZkLi5kOGZmYzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKQEAgLTMxMCw4ICszMTAsNiBAQAogCXU4IGZpcnN0X3Nsb3Q7CiAJdTggYWRkX3N1cHBvcnQ7CiAJdTggcHVzaF9mbGFnOwotCWVudW0gcGNpX2J1c19zcGVlZCBzcGVlZDsKLQllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWRfY2FwYWJpbGl0eTsKIAl1OCBwdXNoX2J1dHRvbjsJCQkvKiAwID0gbm8gcHVzaGJ1dHRvbiwgMSA9IHB1c2hidXR0b24gcHJlc2VudCAqLwogCXU4IHNsb3Rfc3dpdGNoX3R5cGU7CQkvKiAwID0gbm8gc3dpdGNoLCAxID0gc3dpdGNoIHByZXNlbnQgKi8KIAl1OCBkZWZlYXR1cmVfUEhQOwkJLyogMCA9IFBIUCBub3Qgc3VwcG9ydGVkLCAxID0gUEhQIHN1cHBvcnRlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCmluZGV4IDA3NWI0ZjQuLmYxODRkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKQEAgLTU4MywzMCArNTgzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwotCi0JKnZhbHVlID0gY3RybC0+c3BlZWRfY2FwYWJpbGl0eTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGdldF9jdXJfYnVzX3NwZWVkIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQkqdmFsdWUgPSBjdHJsLT5zcGVlZDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGhvdHBsdWdfc2xvdF9vcHMgY3BxcGhwX2hvdHBsdWdfc2xvdF9vcHMgPSB7CiAJLnNldF9hdHRlbnRpb25fc3RhdHVzID0Jc2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmVuYWJsZV9zbG90ID0JCXByb2Nlc3NfU0ksCkBAIC02MTYsOCArNTkyLDYgQEAKIAkuZ2V0X2F0dGVudGlvbl9zdGF0dXMgPQlnZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZ2V0X2xhdGNoX3N0YXR1cyA9CWdldF9sYXRjaF9zdGF0dXMsCiAJLmdldF9hZGFwdGVyX3N0YXR1cyA9CWdldF9hZGFwdGVyX3N0YXR1cywKLQkuZ2V0X21heF9idXNfc3BlZWQgPQlnZXRfbWF4X2J1c19zcGVlZCwKLQkuZ2V0X2N1cl9idXNfc3BlZWQgPQlnZXRfY3VyX2J1c19zcGVlZCwKIH07CiAKICNkZWZpbmUgU0xPVF9OQU1FX1NJWkUgMTAKQEAgLTYyOSw2ICs2MDMsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90OwogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdDsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gKmhvdHBsdWdfc2xvdF9pbmZvOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfYnVzOwogCXU4IG51bWJlcl9vZl9zbG90czsKIAl1OCBzbG90X2RldmljZTsKIAl1OCBzbG90X251bWJlcjsKQEAgLTY5NCw3ICs2NjksNyBAQAogCQkJc2xvdC0+Y2FwYWJpbGl0aWVzIHw9IFBDSVNMT1RfNjRfQklUX1NVUFBPUlRFRDsKIAkJaWYgKGlzX3Nsb3Q2Nm1oeihzbG90KSkKIAkJCXNsb3QtPmNhcGFiaWxpdGllcyB8PSBQQ0lTTE9UXzY2X01IWl9TVVBQT1JURUQ7Ci0JCWlmIChjdHJsLT5zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopCisJCWlmIChidXMtPmN1cl9idXNfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KQogCQkJc2xvdC0+Y2FwYWJpbGl0aWVzIHw9IFBDSVNMT1RfNjZfTUhaX09QRVJBVElPTjsKIAogCQljdHJsX3Nsb3QgPQpAQCAtODQ0LDYgKzgxOSw3IEBACiAJdTMyIHJjOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwogCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCWludCBlcnI7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTg1Miw2ICs4MjgsNyBAQAogCQkJcGNpX25hbWUocGRldiksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQorCWJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlOwogCiAJLyogTmVlZCB0byByZWFkIFZJRCBlYXJseSBiL2MgaXQncyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgQ1BRIGFuZCBJTlRDCiAJICogZGlzY292ZXJ5CkBAIC05MjksMjIgKzkwNiwyMiBAQAogCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgJmJ1c19jYXApOwogCQkJaWYgKGJ1c19jYXAgJiAweDgwKSB7CiAJCQkJZGJnKCJidXMgbWF4IHN1cHBvcnRzIDEzM01IeiBQQ0ktWFxuIik7Ci0JCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKKwkJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoYnVzX2NhcCAmIDB4NDApIHsKIAkJCQlkYmcoImJ1cyBtYXggc3VwcG9ydHMgMTAwTUh6IFBDSS1YXG4iKTsKLQkJCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOworCQkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChidXNfY2FwICYgMjApIHsKIAkJCQlkYmcoImJ1cyBtYXggc3VwcG9ydHMgNjZNSHogUENJLVhcbiIpOwotCQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChidXNfY2FwICYgMTApIHsKIAkJCQlkYmcoImJ1cyBtYXggc3VwcG9ydHMgNjZNSHogUENJXG4iKTsKLQkJCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzY2TUh6OworCQkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtOTU1LDcgKzkzMiw3IEBACiAJCWNhc2UgUENJX1NVQl9IUENfSUQ6CiAJCQkvKiBPcmlnaW5hbCA2NTAwLzcwMDAgaW1wbGVtZW50YXRpb24gKi8KIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8zM01IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMDsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC05NjYsNyArOTQzLDcgQEAKIAkJCS8qIEZpcnN0IFB1c2hidXR0b24gaW1wbGVtZW50YXRpb24gKi8KIAkJCWN0cmwtPnB1c2hfZmxhZyA9IDE7CiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMzNNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDE7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtOTc2LDcgKzk1Myw3IEBACiAJCWNhc2UgUENJX1NVQl9IUENfSURfSU5UQzoKIAkJCS8qIFRoaXJkIHBhcnR5ICg2NTAwLzcwMDApICovCiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMzNNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDA7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtOTg3LDcgKzk2NCw3IEBACiAJCQkvKiBGaXJzdCA2NiBNaHogaW1wbGVtZW50YXRpb24gKi8KIAkJCWN0cmwtPnB1c2hfZmxhZyA9IDE7CiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfNjZNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDE7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtOTk4LDcgKzk3NSw3IEBACiAJCQkvKiBGaXJzdCBQQ0ktWCBpbXBsZW1lbnRhdGlvbiwgMTAwTUh6ICovCiAJCQljdHJsLT5wdXNoX2ZsYWcgPSAxOwogCQkJY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA9IDE7Ci0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwogCQkJY3RybC0+cHVzaF9idXR0b24gPSAxOwogCQkJY3RybC0+cGNpX2NvbmZpZ19zcGFjZSA9IDE7CiAJCQljdHJsLT5kZWZlYXR1cmVfUEhQID0gMTsKQEAgLTEwMTUsOSArOTkyLDkgQEAKIAljYXNlIFBDSV9WRU5ET1JfSURfSU5URUw6CiAJCS8qIENoZWNrIGZvciBzcGVlZCBjYXBhYmlsaXR5ICgwPTMzLCAxPTY2KSAqLwogCQlpZiAoc3Vic3lzdGVtX2RldmljZWlkICYgMHgwMDAxKQotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF82Nk1IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJZWxzZQotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8zM01IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKIAogCQkvKiBDaGVjayBmb3IgcHVzaCBidXR0b24gKi8KIAkJaWYgKHN1YnN5c3RlbV9kZXZpY2VpZCAmIDB4MDAwMikKQEAgLTEwNzksNyArMTA1Niw3IEBACiAJCQkJCXBkZXYtPmJ1cy0+bnVtYmVyKTsKIAogCWRiZygiSG90cGx1ZyBjb250cm9sbGVyIGNhcGFiaWxpdGllczpcbiIpOwotCWRiZygiICAgIHNwZWVkX2NhcGFiaWxpdHkgICAgICAgJWRcbiIsIGN0cmwtPnNwZWVkX2NhcGFiaWxpdHkpOworCWRiZygiICAgIHNwZWVkX2NhcGFiaWxpdHkgICAgICAgJWRcbiIsIGJ1cy0+bWF4X2J1c19zcGVlZCk7CiAJZGJnKCIgICAgc2xvdF9zd2l0Y2hfdHlwZSAgICAgICAlc1xuIiwgY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA/CiAJCQkJCSJzd2l0Y2ggcHJlc2VudCIgOiAibm8gc3dpdGNoIik7CiAJZGJnKCIgICAgZGVmZWF0dXJlX1BIUCAgICAgICAgICAlc1xuIiwgY3RybC0+ZGVmZWF0dXJlX1BIUCA/CkBAIC0xMTQyLDcgKzExMTksNyBAQAogCX0KIAogCS8qIENoZWNrIGZvciA2Nk1oeiBvcGVyYXRpb24gKi8KLQljdHJsLT5zcGVlZCA9IGdldF9jb250cm9sbGVyX3NwZWVkKGN0cmwpOworCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGdldF9jb250cm9sbGVyX3NwZWVkKGN0cmwpOwogCiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYwppbmRleCAwZmY2ODlhLi5lNDM5MDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCkBAIC0xMTMwLDEyICsxMTMwLDEzIEBACiBzdGF0aWMgdTggc2V0X2NvbnRyb2xsZXJfc3BlZWQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHU4IGFkYXB0ZXJfc3BlZWQsIHU4IGhwX3Nsb3QpCiB7CiAJc3RydWN0IHNsb3QgKnNsb3Q7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9idXM7CiAJdTggcmVnOwogCXU4IHNsb3RfcG93ZXIgPSByZWFkYihjdHJsLT5ocGNfcmVnICsgU0xPVF9QT1dFUik7CiAJdTE2IHJlZzE2OwogCXUzMiBsZWRzID0gcmVhZGwoY3RybC0+aHBjX3JlZyArIExFRF9DT05UUk9MKTsKIAotCWlmIChjdHJsLT5zcGVlZCA9PSBhZGFwdGVyX3NwZWVkKQorCWlmIChidXMtPmN1cl9idXNfc3BlZWQgPT0gYWRhcHRlcl9zcGVlZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSBkb24ndCBhbGxvdyBmcmVxL21vZGUgY2hhbmdlcyBpZiB3ZSBmaW5kIGFub3RoZXIgYWRhcHRlciBydW5uaW5nCkBAIC0xMTUyLDcgKzExNTMsNyBAQAogCQkgKiBsb3dlciBzcGVlZC9tb2RlLCB3ZSBhbGxvdyB0aGUgbmV3IGFkYXB0ZXIgdG8gZnVuY3Rpb24gYXQKIAkJICogdGhpcyByYXRlIGlmIHN1cHBvcnRlZAogCQkgKi8KLQkJaWYgKGN0cmwtPnNwZWVkIDwgYWRhcHRlcl9zcGVlZCkKKwkJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpCiAJCQlyZXR1cm4gMDsKIAogCQlyZXR1cm4gMTsKQEAgLTExNjEsMjAgKzExNjIsMjAgQEAKIAkvKiBJZiB0aGUgY29udHJvbGxlciBkb2Vzbid0IHN1cHBvcnQgZnJlcS9tb2RlIGNoYW5nZXMgYW5kIHRoZQogCSAqIGNvbnRyb2xsZXIgaXMgcnVubmluZyBhdCBhIGhpZ2hlciBtb2RlLCB3ZSBiYWlsCiAJICovCi0JaWYgKChjdHJsLT5zcGVlZCA+IGFkYXB0ZXJfc3BlZWQpICYmICghY3RybC0+cGNpeF9zcGVlZF9jYXBhYmlsaXR5KSkKKwlpZiAoKGJ1cy0+Y3VyX2J1c19zcGVlZCA+IGFkYXB0ZXJfc3BlZWQpICYmICghY3RybC0+cGNpeF9zcGVlZF9jYXBhYmlsaXR5KSkKIAkJcmV0dXJuIDE7CiAKIAkvKiBCdXQgd2UgYWxsb3cgdGhlIGFkYXB0ZXIgdG8gcnVuIGF0IGEgbG93ZXIgcmF0ZSBpZiBwb3NzaWJsZSAqLwotCWlmICgoY3RybC0+c3BlZWQgPCBhZGFwdGVyX3NwZWVkKSAmJiAoIWN0cmwtPnBjaXhfc3BlZWRfY2FwYWJpbGl0eSkpCisJaWYgKChidXMtPmN1cl9idXNfc3BlZWQgPCBhZGFwdGVyX3NwZWVkKSAmJiAoIWN0cmwtPnBjaXhfc3BlZWRfY2FwYWJpbGl0eSkpCiAJCXJldHVybiAwOwogCiAJLyogV2UgdHJ5IHRvIHNldCB0aGUgbWF4IHNwZWVkIHN1cHBvcnRlZCBieSBib3RoIHRoZSBhZGFwdGVyIGFuZAogCSAqIGNvbnRyb2xsZXIKIAkgKi8KLQlpZiAoY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA8IGFkYXB0ZXJfc3BlZWQpIHsKLQkJaWYgKGN0cmwtPnNwZWVkID09IGN0cmwtPnNwZWVkX2NhcGFiaWxpdHkpCisJaWYgKGJ1cy0+bWF4X2J1c19zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpIHsKKwkJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBidXMtPm1heF9idXNfc3BlZWQpCiAJCQlyZXR1cm4gMDsKLQkJYWRhcHRlcl9zcGVlZCA9IGN0cmwtPnNwZWVkX2NhcGFiaWxpdHk7CisJCWFkYXB0ZXJfc3BlZWQgPSBidXMtPm1heF9idXNfc3BlZWQ7CiAJfQogCiAJd3JpdGVsKDB4MEwsIGN0cmwtPmhwY19yZWcgKyBMRURfQ09OVFJPTCk7CkBAIC0xMjI5LDggKzEyMzAsOCBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShjdHJsLT5wY2lfZGV2LCAweDQzLCByZWcpOwogCiAJLyogT25seSBpZiBtb2RlIGNoYW5nZS4uLiovCi0JaWYgKCgoY3RybC0+c3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KSAmJiAoYWRhcHRlcl9zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHpfUENJWCkpIHx8Ci0JCSgoY3RybC0+c3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6X1BDSVgpICYmIChhZGFwdGVyX3NwZWVkID09IFBDSV9TUEVFRF82Nk1IeikpKSAKKwlpZiAoKChidXMtPmN1cl9idXNfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KSAmJiAoYWRhcHRlcl9zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHpfUENJWCkpIHx8CisJCSgoYnVzLT5jdXJfYnVzX3NwZWVkID09IFBDSV9TUEVFRF82Nk1Iel9QQ0lYKSAmJiAoYWRhcHRlcl9zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopKSkgCiAJCQlzZXRfU09HTyhjdHJsKTsKIAogCXdhaXRfZm9yX2N0cmxfaXJxKGN0cmwpOwpAQCAtMTI0Myw3ICsxMjQ0LDcgQEAKIAlzZXRfU09HTyhjdHJsKTsKIAl3YWl0X2Zvcl9jdHJsX2lycShjdHJsKTsKIAotCWN0cmwtPnNwZWVkID0gYWRhcHRlcl9zcGVlZDsKKwlidXMtPmN1cl9idXNfc3BlZWQgPSBhZGFwdGVyX3NwZWVkOwogCXNsb3QgPSBjcHFocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKIAlpbmZvKCJTdWNjZXNzZnVsbHkgY2hhbmdlZCBmcmVxdWVuY3kvbW9kZSBmb3IgYWRhcHRlciBpbiBzbG90ICVkXG4iLApAQCAtMTI2OSw2ICsxMjcwLDcgQEAKICAqLwogc3RhdGljIHUzMiBib2FyZF9yZXBsYWNlZChzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogeworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfYnVzOwogCXU4IGhwX3Nsb3Q7CiAJdTggdGVtcF9ieXRlOwogCXU4IGFkYXB0ZXJfc3BlZWQ7CkBAIC0xMzA5LDcgKzEzMTEsNyBAQAogCQl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CiAKIAkJYWRhcHRlcl9zcGVlZCA9IGdldF9hZGFwdGVyX3NwZWVkKGN0cmwsIGhwX3Nsb3QpOwotCQlpZiAoY3RybC0+c3BlZWQgIT0gYWRhcHRlcl9zcGVlZCkKKwkJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKQogCQkJaWYgKHNldF9jb250cm9sbGVyX3NwZWVkKGN0cmwsIGFkYXB0ZXJfc3BlZWQsIGhwX3Nsb3QpKQogCQkJCXJjID0gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIApAQCAtMTQyNiw2ICsxNDI4LDcgQEAKIAl1MzIgdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7CiAJdTMyIHJjID0gMDsKIAlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19zbG90ID0gTlVMTDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2J1czsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwogCXN0cnVjdCByZXNvdXJjZV9saXN0cyByZXNfbGlzdHM7CiAKQEAgLTE0NTYsNyArMTQ1OSw3IEBACiAJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogCiAJYWRhcHRlcl9zcGVlZCA9IGdldF9hZGFwdGVyX3NwZWVkKGN0cmwsIGhwX3Nsb3QpOwotCWlmIChjdHJsLT5zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKQorCWlmIChidXMtPmN1cl9idXNfc3BlZWQgIT0gYWRhcHRlcl9zcGVlZCkKIAkJaWYgKHNldF9jb250cm9sbGVyX3NwZWVkKGN0cmwsIGFkYXB0ZXJfc3BlZWQsIGhwX3Nsb3QpKQogCQkJcmMgPSBXUk9OR19CVVNfRlJFUVVFTkNZOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMKaW5kZXggNzQ4NWZmZC4uZDkzNGRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYwpAQCAtMzk1LDg5ICszOTUsNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQorc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKLQlpbnQgcmMgPSAtRU5PREVWOwotCXN0cnVjdCBzbG90ICpwc2xvdDsKKwlpbnQgcmM7CiAJdTggbW9kZSA9IDA7CisJZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBzbG90LT5ob3RwbHVnX3Nsb3QtPnBjaV9zbG90LT5idXM7CiAKLQlkZWJ1ZygiJXMgLSBFbnRyeSBob3RwbHVnX3Nsb3RbJXBdIHB2YWx1ZVslcF1cbiIsIF9fZnVuY19fLAotCQlob3RwbHVnX3Nsb3QsIHZhbHVlKTsKKwlkZWJ1ZygiJXMgLSBFbnRyeSBzbG90WyVwXVxuIiwgX19mdW5jX18sIHNsb3QpOwogCiAJaWJtcGhwX2xvY2tfb3BlcmF0aW9ucygpOworCW1vZGUgPSBzbG90LT5zdXBwb3J0ZWRfYnVzX21vZGU7CisJc3BlZWQgPSBzbG90LT5zdXBwb3J0ZWRfc3BlZWQ7IAorCWlibXBocF91bmxvY2tfb3BlcmF0aW9ucygpOwogCi0JaWYgKGhvdHBsdWdfc2xvdCkgewotCQlwc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQkJaWYgKHBzbG90KSB7Ci0JCQlyYyA9IDA7Ci0JCQltb2RlID0gcHNsb3QtPnN1cHBvcnRlZF9idXNfbW9kZTsKLQkJCSp2YWx1ZSA9IHBzbG90LT5zdXBwb3J0ZWRfc3BlZWQ7IAotCQkJc3dpdGNoICgqdmFsdWUpIHsKLQkJCWNhc2UgQlVTX1NQRUVEXzMzOgotCQkJCWJyZWFrOwotCQkJY2FzZSBCVVNfU1BFRURfNjY6Ci0JCQkJaWYgKG1vZGUgPT0gQlVTX01PREVfUENJWCkgCi0JCQkJCSp2YWx1ZSArPSAweDAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBCVVNfU1BFRURfMTAwOgotCQkJY2FzZSBCVVNfU1BFRURfMTMzOgotCQkJCSp2YWx1ZSA9IHBzbG90LT5zdXBwb3J0ZWRfc3BlZWQgKyAweDAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQkvKiBOb3RlICh3aWxsIG5lZWQgdG8gY2hhbmdlKTogdGhlcmUgd291bGQgYmUgc29vbiAyNTYsIDUxMiBhbHNvICovCi0JCQkJcmMgPSAtRU5PREVWOwotCQkJfQotCQl9CisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgQlVTX1NQRUVEXzMzOgorCQlicmVhazsKKwljYXNlIEJVU19TUEVFRF82NjoKKwkJaWYgKG1vZGUgPT0gQlVTX01PREVfUENJWCkgCisJCQlzcGVlZCArPSAweDAxOworCQlicmVhazsKKwljYXNlIEJVU19TUEVFRF8xMDA6CisJY2FzZSBCVVNfU1BFRURfMTMzOgorCQlzcGVlZCArPSAweDAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOb3RlICh3aWxsIG5lZWQgdG8gY2hhbmdlKTogdGhlcmUgd291bGQgYmUgc29vbiAyNTYsIDUxMiBhbHNvICovCisJCXJjID0gLUVOT0RFVjsKIAl9CiAKLQlpYm1waHBfdW5sb2NrX29wZXJhdGlvbnMoKTsKLQlkZWJ1ZygiJXMgLSBFeGl0IHJjWyVkXSB2YWx1ZVsleF1cbiIsIF9fZnVuY19fLCByYywgKnZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19CisJaWYgKCFyYykKKwkJYnVzLT5tYXhfYnVzX3NwZWVkID0gc3BlZWQ7CiAKLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCWludCByYyA9IC1FTk9ERVY7Ci0Jc3RydWN0IHNsb3QgKnBzbG90OwotCXU4IG1vZGUgPSAwOwotCi0JZGVidWcoIiVzIC0gRW50cnkgaG90cGx1Z19zbG90WyVwXSBwdmFsdWVbJXBdXG4iLCBfX2Z1bmNfXywKLQkJaG90cGx1Z19zbG90LCB2YWx1ZSk7Ci0KLQlpYm1waHBfbG9ja19vcGVyYXRpb25zKCk7Ci0KLQlpZiAoaG90cGx1Z19zbG90KSB7Ci0JCXBzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCQlpZiAocHNsb3QpIHsKLQkJCXJjID0gZ2V0X2N1cl9idXNfaW5mbygmcHNsb3QpOwotCQkJaWYgKCFyYykgewotCQkJCW1vZGUgPSBwc2xvdC0+YnVzX29uLT5jdXJyZW50X2J1c19tb2RlOwotCQkJCSp2YWx1ZSA9IHBzbG90LT5idXNfb24tPmN1cnJlbnRfc3BlZWQ7Ci0JCQkJc3dpdGNoICgqdmFsdWUpIHsKLQkJCQljYXNlIEJVU19TUEVFRF8zMzoKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBCVVNfU1BFRURfNjY6Ci0JCQkJCWlmIChtb2RlID09IEJVU19NT0RFX1BDSVgpIAotCQkJCQkJKnZhbHVlICs9IDB4MDE7Ci0JCQkJCWVsc2UgaWYgKG1vZGUgPT0gQlVTX01PREVfUENJKQotCQkJCQkJOwotCQkJCQllbHNlCi0JCQkJCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBCVVNfU1BFRURfMTAwOgotCQkJCWNhc2UgQlVTX1NQRUVEXzEzMzoKLQkJCQkJKnZhbHVlICs9IDB4MDE7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCS8qIE5vdGUgb2YgY2hhbmdlOiB0aGVyZSB3b3VsZCBhbHNvIGJlIDI1NiwgNTEyIHNvb24gKi8KLQkJCQkJcmMgPSAtRU5PREVWOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWlibXBocF91bmxvY2tfb3BlcmF0aW9ucygpOwotCWRlYnVnKCIlcyAtIEV4aXQgcmNbJWRdIHZhbHVlWyV4XVxuIiwgX19mdW5jX18sIHJjLCAqdmFsdWUpOworCWRlYnVnKCIlcyAtIEV4aXQgcmNbJWRdIHNwZWVkWyV4XVxuIiwgX19mdW5jX18sIHJjLCBzcGVlZCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NzIsNiArNTIzLDcgQEAKIAkJaWYgKHNsb3RfY3VyLT5idXNfb24tPmN1cnJlbnRfc3BlZWQgPT0gMHhGRikgCiAJCQlpZiAoZ2V0X2N1cl9idXNfaW5mbygmc2xvdF9jdXIpKSAKIAkJCQlyZXR1cm4gLTE7CisJCWdldF9tYXhfYnVzX3NwZWVkKHNsb3RfY3VyKTsKIAogCQlpZiAoc2xvdF9jdXItPmN0cmwtPm9wdGlvbnMgPT0gMHhGRikKIAkJCWlmIChnZXRfaHBjX29wdGlvbnMoc2xvdF9jdXIsICZzbG90X2N1ci0+Y3RybC0+b3B0aW9ucykpCkBAIC02NTUsNiArNjA3LDcgQEAKIGludCBpYm1waHBfdXBkYXRlX3Nsb3RfaW5mbyhzdHJ1Y3Qgc2xvdCAqc2xvdF9jdXIpCiB7CiAJc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvICppbmZvOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBzbG90X2N1ci0+aG90cGx1Z19zbG90LT5wY2lfc2xvdC0+YnVzOwogCWludCByYzsKIAl1OCBidXNfc3BlZWQ7CiAJdTggbW9kZTsKQEAgLTcwMCw4ICs2NTMsNyBAQAogCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJfQogCi0JaW5mby0+Y3VyX2J1c19zcGVlZCA9IGJ1c19zcGVlZDsKLQlpbmZvLT5tYXhfYnVzX3NwZWVkID0gc2xvdF9jdXItPmhvdHBsdWdfc2xvdC0+aW5mby0+bWF4X2J1c19zcGVlZDsKKwlidXMtPmN1cl9idXNfc3BlZWQgPSBidXNfc3BlZWQ7CiAJLy8gVG8gZG86IGJ1c19uYW1lcyAKIAkKIAlyYyA9IHBjaV9ocF9jaGFuZ2Vfc2xvdF9pbmZvKHNsb3RfY3VyLT5ob3RwbHVnX3Nsb3QsIGluZm8pOwpAQCAtMTMyNiw4ICsxMjc4LDYgQEAKIAkuZ2V0X2F0dGVudGlvbl9zdGF0dXMgPQkJZ2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmdldF9sYXRjaF9zdGF0dXMgPQkJZ2V0X2xhdGNoX3N0YXR1cywKIAkuZ2V0X2FkYXB0ZXJfc3RhdHVzID0JCWdldF9hZGFwdGVyX3ByZXNlbnQsCi0JLmdldF9tYXhfYnVzX3NwZWVkID0JCWdldF9tYXhfYnVzX3NwZWVkLAotCS5nZXRfY3VyX2J1c19zcGVlZCA9CQlnZXRfY3VyX2J1c19zcGVlZCwKIC8qCS5nZXRfbWF4X2FkYXB0ZXJfc3BlZWQgPQlnZXRfbWF4X2FkYXB0ZXJfc3BlZWQsCiAJLmdldF9idXNfbmFtZV9zdGF0dXMgPQkJZ2V0X2J1c19uYW1lLAogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYwppbmRleCBjMWFiYWM4Li41YmVjYmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogaW50IF9faW5pdCBpYm1waHBfYWNjZXNzX2ViZGEgKHZvaWQpCiB7Ci0JdTggZm9ybWF0LCBudW1fY3RscnMsIHJpb19jb21wbGV0ZSwgaHNfY29tcGxldGU7CisJdTggZm9ybWF0LCBudW1fY3RscnMsIHJpb19jb21wbGV0ZSwgaHNfY29tcGxldGUsIGViZGFfc3o7CiAJdTE2IGViZGFfc2VnLCBudW1fZW50cmllcywgbmV4dF9vZmZzZXQsIG9mZnNldCwgYmxrX2lkLCBzdWJfYWRkciwgcmUsIHJjX2lkLCByZV9pZCwgYmFzZTsKIAlpbnQgcmMgPSAwOwogCkBAIC0yNjAsNyArMjYwLDE2IEBACiAJaW91bm1hcCAoaW9fbWVtKTsKIAlkZWJ1ZyAoInJldHVybmVkIGViZGEgc2VnbWVudDogJXhcbiIsIGViZGFfc2VnKTsKIAkKLQlpb19tZW0gPSBpb3JlbWFwKGViZGFfc2VnPDw0LCAxMDI0KTsKKwlpb19tZW0gPSBpb3JlbWFwKGViZGFfc2VnPDw0LCAxKTsKKwlpZiAoIWlvX21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZWJkYV9zeiA9IHJlYWRiKGlvX21lbSk7CisJaW91bm1hcChpb19tZW0pOworCWRlYnVnKCJlYmRhIHNpemU6ICVkKEtpQilcbiIsIGViZGFfc3opOworCWlmIChlYmRhX3N6ID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaW9fbWVtID0gaW9yZW1hcChlYmRhX3NlZzw8NCwgKGViZGFfc3ogKiAxMDI0KSk7CiAJaWYgKCFpb19tZW0gKQogCQlyZXR1cm4gLUVOT01FTTsKIAluZXh0X29mZnNldCA9IDB4MTgwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYwppbmRleCBjNzA4NGYwLi4xYWFmM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgImlibXBocC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IDM4MTgzYTUuLjcyOGIxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCkBAIC02NCwzMiArNjQsNiBAQAogc3RhdGljIExJU1RfSEVBRChwY2lfaG90cGx1Z19zbG90X2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChwY2lfaHBfbXV0ZXgpOwogCi0vKiB0aGVzZSBzdHJpbmdzIG1hdGNoIHVwIHdpdGggdGhlIHZhbHVlcyBpbiBwY2lfYnVzX3NwZWVkICovCi1zdGF0aWMgY2hhciAqcGNpX2J1c19zcGVlZF9zdHJpbmdzW10gPSB7Ci0JIjMzIE1IeiBQQ0kiLAkJLyogMHgwMCAqLwotCSI2NiBNSHogUENJIiwJCS8qIDB4MDEgKi8KLQkiNjYgTUh6IFBDSS1YIiwJCS8qIDB4MDIgKi8KLQkiMTAwIE1IeiBQQ0ktWCIsCS8qIDB4MDMgKi8KLQkiMTMzIE1IeiBQQ0ktWCIsCS8qIDB4MDQgKi8KLQlOVUxMLAkJCS8qIDB4MDUgKi8KLQlOVUxMLAkJCS8qIDB4MDYgKi8KLQlOVUxMLAkJCS8qIDB4MDcgKi8KLQlOVUxMLAkJCS8qIDB4MDggKi8KLQkiNjYgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MDkgKi8KLQkiMTAwIE1IeiBQQ0ktWCAyNjYiLAkvKiAweDBhICovCi0JIjEzMyBNSHogUENJLVggMjY2IiwJLyogMHgwYiAqLwotCU5VTEwsCQkJLyogMHgwYyAqLwotCU5VTEwsCQkJLyogMHgwZCAqLwotCU5VTEwsCQkJLyogMHgwZSAqLwotCU5VTEwsCQkJLyogMHgwZiAqLwotCU5VTEwsCQkJLyogMHgxMCAqLwotCSI2NiBNSHogUENJLVggNTMzIiwJLyogMHgxMSAqLwotCSIxMDAgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTIgKi8KLQkiMTMzIE1IeiBQQ0ktWCA1MzMiLAkvKiAweDEzICovCi0JIjIuNSBHVC9zIFBDSWUiLAkvKiAweDE0ICovCi0JIjUuMCBHVC9zIFBDSWUiLAkvKiAweDE1ICovCi19OwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kKIGV4dGVybiBpbnQgY3BjaV9ob3RwbHVnX2luaXQoaW50IGRlYnVnKTsKIGV4dGVybiB2b2lkIGNwY2lfaG90cGx1Z19leGl0KHZvaWQpOwpAQCAtMTE4LDggKzkyLDYgQEAKIEdFVF9TVEFUVVMoYXR0ZW50aW9uX3N0YXR1cywgdTgpCiBHRVRfU1RBVFVTKGxhdGNoX3N0YXR1cywgdTgpCiBHRVRfU1RBVFVTKGFkYXB0ZXJfc3RhdHVzLCB1OCkKLUdFVF9TVEFUVVMobWF4X2J1c19zcGVlZCwgZW51bSBwY2lfYnVzX3NwZWVkKQotR0VUX1NUQVRVUyhjdXJfYnVzX3NwZWVkLCBlbnVtIHBjaV9idXNfc3BlZWQpCiAKIHN0YXRpYyBzc2l6ZV90IHBvd2VyX3JlYWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGNoYXIgKmJ1ZikKIHsKQEAgLTI2Myw2MCArMjM1LDYgQEAKIAkuc2hvdyA9IHByZXNlbmNlX3JlYWRfZmlsZSwKIH07CiAKLXN0YXRpYyBjaGFyICp1bmtub3duX3NwZWVkID0gIlVua25vd24gYnVzIHNwZWVkIjsKLQotc3RhdGljIHNzaXplX3QgbWF4X2J1c19zcGVlZF9yZWFkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjaGFyICpidWYpCi17Ci0JY2hhciAqc3BlZWRfc3RyaW5nOwotCWludCByZXR2YWw7Ci0JZW51bSBwY2lfYnVzX3NwZWVkIHZhbHVlOwotCQotCXJldHZhbCA9IGdldF9tYXhfYnVzX3NwZWVkKHNsb3QtPmhvdHBsdWcsICZ2YWx1ZSk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0OwotCi0JaWYgKHZhbHVlID09IFBDSV9TUEVFRF9VTktOT1dOKQotCQlzcGVlZF9zdHJpbmcgPSB1bmtub3duX3NwZWVkOwotCWVsc2UKLQkJc3BlZWRfc3RyaW5nID0gcGNpX2J1c19zcGVlZF9zdHJpbmdzW3ZhbHVlXTsKLQkKLQlyZXR2YWwgPSBzcHJpbnRmIChidWYsICIlc1xuIiwgc3BlZWRfc3RyaW5nKTsKLQotZXhpdDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9zbG90X2F0dHJpYnV0ZSBob3RwbHVnX3Nsb3RfYXR0cl9tYXhfYnVzX3NwZWVkID0gewotCS5hdHRyID0gey5uYW1lID0gIm1heF9idXNfc3BlZWQiLCAubW9kZSA9IFNfSUZSRUcgfCBTX0lSVUdPfSwKLQkuc2hvdyA9IG1heF9idXNfc3BlZWRfcmVhZF9maWxlLAotfTsKLQotc3RhdGljIHNzaXplX3QgY3VyX2J1c19zcGVlZF9yZWFkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjaGFyICpidWYpCi17Ci0JY2hhciAqc3BlZWRfc3RyaW5nOwotCWludCByZXR2YWw7Ci0JZW51bSBwY2lfYnVzX3NwZWVkIHZhbHVlOwotCi0JcmV0dmFsID0gZ2V0X2N1cl9idXNfc3BlZWQoc2xvdC0+aG90cGx1ZywgJnZhbHVlKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXQ7Ci0KLQlpZiAodmFsdWUgPT0gUENJX1NQRUVEX1VOS05PV04pCi0JCXNwZWVkX3N0cmluZyA9IHVua25vd25fc3BlZWQ7Ci0JZWxzZQotCQlzcGVlZF9zdHJpbmcgPSBwY2lfYnVzX3NwZWVkX3N0cmluZ3NbdmFsdWVdOwotCQotCXJldHZhbCA9IHNwcmludGYgKGJ1ZiwgIiVzXG4iLCBzcGVlZF9zdHJpbmcpOwotCi1leGl0OgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Nsb3RfYXR0cmlidXRlIGhvdHBsdWdfc2xvdF9hdHRyX2N1cl9idXNfc3BlZWQgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiY3VyX2J1c19zcGVlZCIsIC5tb2RlID0gU19JRlJFRyB8IFNfSVJVR099LAotCS5zaG93ID0gY3VyX2J1c19zcGVlZF9yZWFkX2ZpbGUsCi19OwotCiBzdGF0aWMgc3NpemVfdCB0ZXN0X3dyaXRlX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdCwgY29uc3QgY2hhciAqYnVmLAogCQlzaXplX3QgY291bnQpCiB7CkBAIC0zOTEsMjYgKzMwOSw2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBoYXNfbWF4X2J1c19zcGVlZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3QpCi17Ci0Jc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCA9IHBjaV9zbG90LT5ob3RwbHVnOwotCWlmICgoIXNsb3QpIHx8ICghc2xvdC0+b3BzKSkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChzbG90LT5vcHMtPmdldF9tYXhfYnVzX3NwZWVkKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGhhc19jdXJfYnVzX3NwZWVkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdCkKLXsKLQlzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90ID0gcGNpX3Nsb3QtPmhvdHBsdWc7Ci0JaWYgKCghc2xvdCkgfHwgKCFzbG90LT5vcHMpKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNsb3QtPm9wcy0+Z2V0X2N1cl9idXNfc3BlZWQpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIGJvb2wgaGFzX3Rlc3RfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9zbG90KQogewogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QgPSBwY2lfc2xvdC0+aG90cGx1ZzsKQEAgLTQ1NiwyMCArMzU0LDYgQEAKIAkJCWdvdG8gZXhpdF9hZGFwdGVyOwogCX0KIAotCWlmIChoYXNfbWF4X2J1c19zcGVlZF9maWxlKHNsb3QpKSB7Ci0JCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCQkmaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZC5hdHRyKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gZXhpdF9tYXhfc3BlZWQ7Ci0JfQotCi0JaWYgKGhhc19jdXJfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpIHsKLQkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJCSZob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkLmF0dHIpOwotCQlpZiAocmV0dmFsKQotCQkJZ290byBleGl0X2N1cl9zcGVlZDsKLQl9Ci0KIAlpZiAoaGFzX3Rlc3RfZmlsZShzbG90KSkgewogCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmc2xvdC0+a29iaiwKIAkJCQkJICAgJmhvdHBsdWdfc2xvdF9hdHRyX3Rlc3QuYXR0cik7CkBAIC00ODAsMTQgKzM2NCw2IEBACiAJZ290byBleGl0OwogCiBleGl0X3Rlc3Q6Ci0JaWYgKGhhc19jdXJfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX2N1cl9idXNfc3BlZWQuYXR0cik7Ci1leGl0X2N1cl9zcGVlZDoKLQlpZiAoaGFzX21heF9idXNfc3BlZWRfZmlsZShzbG90KSkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJICAmaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZC5hdHRyKTsKLWV4aXRfbWF4X3NwZWVkOgogCWlmIChoYXNfYWRhcHRlcl9maWxlKHNsb3QpKQogCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKIAkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9wcmVzZW5jZS5hdHRyKTsKQEAgLTUyMywxNCArMzk5LDYgQEAKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCiAJCQkJICAmaG90cGx1Z19zbG90X2F0dHJfcHJlc2VuY2UuYXR0cik7CiAKLQlpZiAoaGFzX21heF9idXNfc3BlZWRfZmlsZShzbG90KSkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJICAmaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZC5hdHRyKTsKLQotCWlmIChoYXNfY3VyX2J1c19zcGVlZF9maWxlKHNsb3QpKQotCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkLmF0dHIpOwotCiAJaWYgKGhhc190ZXN0X2ZpbGUoc2xvdCkpCiAJCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfdGVzdC5hdHRyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCmluZGV4IDU2NzRiMjAuLjkyMGY4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKQEAgLTY5LDggKzY5LDYgQEAKIHN0YXRpYyBpbnQgZ2V0X2F0dGVudGlvbl9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiBzdGF0aWMgaW50IGdldF9sYXRjaF9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiBzdGF0aWMgaW50IGdldF9hZGFwdGVyX3N0YXR1cwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZAkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7CiAKIC8qKgogICogcmVsZWFzZV9zbG90IC0gZnJlZSB1cCB0aGUgbWVtb3J5IHVzZWQgYnkgYSBzbG90CkBAIC0xMTMsOCArMTExLDYgQEAKIAlvcHMtPmRpc2FibGVfc2xvdCA9IGRpc2FibGVfc2xvdDsKIAlvcHMtPmdldF9wb3dlcl9zdGF0dXMgPSBnZXRfcG93ZXJfc3RhdHVzOwogCW9wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzID0gZ2V0X2FkYXB0ZXJfc3RhdHVzOwotCW9wcy0+Z2V0X21heF9idXNfc3BlZWQgPSBnZXRfbWF4X2J1c19zcGVlZDsKLQlvcHMtPmdldF9jdXJfYnVzX3NwZWVkID0gZ2V0X2N1cl9idXNfc3BlZWQ7CiAJaWYgKE1STF9TRU5TKGN0cmwpKQogCQlvcHMtPmdldF9sYXRjaF9zdGF0dXMgPSBnZXRfbGF0Y2hfc3RhdHVzOwogCWlmIChBVFROX0xFRChjdHJsKSkgewpAQCAtMjI3LDI3ICsyMjMsNiBAQAogCXJldHVybiBwY2llaHBfZ2V0X2FkYXB0ZXJfc3RhdHVzKHNsb3QsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsCi0JCQkJZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQotCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAotCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQlyZXR1cm4gcGNpZWhwX2dldF9tYXhfbGlua19zcGVlZChzbG90LCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCi0JY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCi0JCSBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCXJldHVybiBwY2llaHBfZ2V0X2N1cl9saW5rX3NwZWVkKHNsb3QsIHZhbHVlKTsKLX0KLQogc3RhdGljIGludCBwY2llaHBfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCmluZGV4IGQ2YWMxYjIuLjlhN2YyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKQEAgLTM0MSw2ICszNDEsNyBAQAogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPTl9TVEFURTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJa2ZyZWUoaW5mbyk7CiAJCWdvdG8gb3V0OwogCX0KIAlxdWV1ZV93b3JrKHBjaWVocF93cSwgJmluZm8tPndvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwppbmRleCAxMDA0MGQ1Li40MGI0OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwpAQCAtNDkyLDYgKzQ5Miw3IEBACiAJdTE2IHNsb3RfY21kOwogCXUxNiBjbWRfbWFzazsKIAl1MTYgc2xvdF9zdGF0dXM7CisJdTE2IGxua19zdGF0dXM7CiAJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBDbGVhciBzdGlja3kgcG93ZXItZmF1bHQgYml0IGZyb20gcHJldmlvdXMgcG93ZXIgZmFpbHVyZXMgKi8KQEAgLTUyMyw2ICs1MjQsMTQgQEAKIAljdHJsX2RiZyhjdHJsLCAiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwgX19mdW5jX18sCiAJCSBwY2lfcGNpZV9jYXAoY3RybC0+cGNpZS0+cG9ydCkgKyBQQ0lfRVhQX1NMVENUTCwgc2xvdF9jbWQpOwogCisJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFBDSV9FWFBfTE5LU1RBLCAmbG5rX3N0YXR1cyk7CisJaWYgKHJldHZhbCkgeworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS1NUQSByZWdpc3RlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXBjaWVfdXBkYXRlX2xpbmtfc3BlZWQoY3RybC0+cGNpZS0+cG9ydC0+c3Vib3JkaW5hdGUsIGxua19zdGF0dXMpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNjEwLDM3ICs2MTksNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotaW50IHBjaWVocF9nZXRfbWF4X2xpbmtfc3BlZWQoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCWVudW0gcGNpZV9saW5rX3NwZWVkIGxua19zcGVlZDsKLQl1MzIJbG5rX2NhcDsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXJldHZhbCA9IHBjaWVocF9yZWFkbChjdHJsLCBQQ0lfRVhQX0xOS0NBUCwgJmxua19jYXApOwotCWlmIChyZXR2YWwpIHsKLQkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBMTktDQVAgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlzd2l0Y2ggKGxua19jYXAgJiAweDAwMEYpIHsKLQljYXNlIDE6Ci0JCWxua19zcGVlZCA9IFBDSUVfMl81R0I7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbG5rX3NwZWVkID0gUENJRV81XzBHQjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbG5rX3NwZWVkID0gUENJRV9MTktfU1BFRURfVU5LTk9XTjsKLQkJYnJlYWs7Ci0JfQotCi0JKnZhbHVlID0gbG5rX3NwZWVkOwotCWN0cmxfZGJnKGN0cmwsICJNYXggbGluayBzcGVlZCA9ICVkXG4iLCBsbmtfc3BlZWQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQogaW50IHBjaWVocF9nZXRfbWF4X2xua193aWR0aChzdHJ1Y3Qgc2xvdCAqc2xvdCwKIAkJCQkgZW51bSBwY2llX2xpbmtfd2lkdGggKnZhbHVlKQogewpAQCAtNjkxLDM4ICs2NjksNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWludCBwY2llaHBfZ2V0X2N1cl9saW5rX3NwZWVkKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQllbnVtIHBjaWVfbGlua19zcGVlZCBsbmtfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQlpbnQgcmV0dmFsID0gMDsKLQl1MTYgbG5rX3N0YXR1czsKLQotCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBQQ0lfRVhQX0xOS1NUQSwgJmxua19zdGF0dXMpOwotCWlmIChyZXR2YWwpIHsKLQkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsCi0JCQkgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXN3aXRjaCAobG5rX3N0YXR1cyAmIFBDSV9FWFBfTE5LU1RBX0NMUykgewotCWNhc2UgMToKLQkJbG5rX3NwZWVkID0gUENJRV8yXzVHQjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlsbmtfc3BlZWQgPSBQQ0lFXzVfMEdCOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlsbmtfc3BlZWQgPSBQQ0lFX0xOS19TUEVFRF9VTktOT1dOOwotCQlicmVhazsKLQl9Ci0KLQkqdmFsdWUgPSBsbmtfc3BlZWQ7Ci0JY3RybF9kYmcoY3RybCwgIkN1cnJlbnQgbGluayBzcGVlZCA9ICVkXG4iLCBsbmtfc3BlZWQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQogaW50IHBjaWVocF9nZXRfY3VyX2xua193aWR0aChzdHJ1Y3Qgc2xvdCAqc2xvdCwKIAkJCQkgZW51bSBwY2llX2xpbmtfd2lkdGggKnZhbHVlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYwppbmRleCAyMTczMzEwLi4wYTE2NDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYwpAQCAtNTMsMTcgKzUzLDE1IEBACiAJCWJ1c25yID0gcGNpX3NjYW5fYnJpZGdlKHBhcmVudCwgZGV2LCBidXNuciwgcGFzcyk7CiAJaWYgKCFkZXYtPnN1Ym9yZGluYXRlKQogCQlyZXR1cm4gLTE7Ci0JcGNpX2J1c19zaXplX2JyaWRnZXMoZGV2LT5zdWJvcmRpbmF0ZSk7Ci0JcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHBhcmVudCk7Ci0JcGNpX2VuYWJsZV9icmlkZ2VzKHBhcmVudCk7Ci0JcGNpX2J1c19hZGRfZGV2aWNlcyhwYXJlbnQpOworCiAJcmV0dXJuIDA7CiB9CiAKIGludCBwY2llaHBfY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0Jc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IHBfc2xvdC0+Y3RybC0+cGNpZS0+cG9ydC0+c3Vib3JkaW5hdGU7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IHBfc2xvdC0+Y3RybC0+cGNpZS0+cG9ydDsKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gYnJpZGdlLT5zdWJvcmRpbmF0ZTsKIAlpbnQgbnVtLCBmbjsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIApAQCAtOTYsMTIgKzk0LDI1IEBACiAJCQkJKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKSB7CiAJCQlwY2llaHBfYWRkX2JyaWRnZShkZXYpOwogCQl9CisJCXBjaV9kZXZfcHV0KGRldik7CisJfQorCisJcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2JyaWRnZV9yZXNvdXJjZXMoYnJpZGdlKTsKKworCWZvciAoZm4gPSAwOyBmbiA8IDg7IGZuKyspIHsKKwkJZGV2ID0gcGNpX2dldF9zbG90KHBhcmVudCwgUENJX0RFVkZOKDAsIGZuKSk7CisJCWlmICghZGV2KQorCQkJY29udGludWU7CisJCWlmICgoZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgeworCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCXBjaV9jb25maWd1cmVfc2xvdChkZXYpOwogCQlwY2lfZGV2X3B1dChkZXYpOwogCX0KIAotCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhwYXJlbnQpOwogCXBjaV9idXNfYWRkX2RldmljZXMocGFyZW50KTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKaW5kZXggYzE1OTIyMy4uZGNhYWU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwpAQCAtMTMwLDEwICsxMzAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKK3N0YXRpYyBlbnVtIHBjaV9idXNfc3BlZWQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IHNsb3QgKnNsb3QpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSAoc3RydWN0IHNsb3QgKilob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0KKwllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQ7CiAJc3dpdGNoIChzbG90LT50eXBlKSB7CiAJY2FzZSAxOgogCWNhc2UgMjoKQEAgLTE0MSwzMCArMTQwLDMwIEBACiAJY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8zM01IejsJLyogc3BlZWQgZm9yIGNhc2UgMS02ICovCisJCXNwZWVkID0gUENJX1NQRUVEXzMzTUh6OwkvKiBzcGVlZCBmb3IgY2FzZSAxLTYgKi8KIAkJYnJlYWs7CiAJY2FzZSA3OgogCWNhc2UgODoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6OworCQlzcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJYnJlYWs7CiAJY2FzZSAxMToKIAljYXNlIDE0OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKIAkJYnJlYWs7CiAJY2FzZSAxMjoKIAljYXNlIDE1OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CisJCXNwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwogCQlicmVhazsKIAljYXNlIDEzOgogCWNhc2UgMTY6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOworCQlzcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCQlicmVhazsKLQogCX0KLQlyZXR1cm4gMDsKKworCXJldHVybiBzcGVlZDsKIH0KIAogc3RhdGljIGludCBnZXRfY2hpbGRyZW5fcHJvcHMoc3RydWN0IGRldmljZV9ub2RlICpkbiwgY29uc3QgaW50ICoqZHJjX2luZGV4ZXMsCkBAIC00MDgsNiArNDA3LDggQEAKIAkJc2xvdC0+c3RhdGUgPSBOT1RfVkFMSUQ7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKworCXNsb3QtPmJ1cy0+bWF4X2J1c19zcGVlZCA9IGdldF9tYXhfYnVzX3NwZWVkKHNsb3QpOwogCXJldHVybiAwOwogfQogCkBAIC00MjksNyArNDMwLDYgQEAKIAkuZ2V0X3Bvd2VyX3N0YXR1cyA9IGdldF9wb3dlcl9zdGF0dXMsCiAJLmdldF9hdHRlbnRpb25fc3RhdHVzID0gZ2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmdldF9hZGFwdGVyX3N0YXR1cyA9IGdldF9hZGFwdGVyX3N0YXR1cywKLQkuZ2V0X21heF9idXNfc3BlZWQgPSBnZXRfbWF4X2J1c19zcGVlZCwKIH07CiAKIG1vZHVsZV9pbml0KHJwYXBocF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCmluZGV4IDhlMjEwY2Q3Li5kMjYyN2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKQEAgLTMzMyw4ICszMzMsNiBAQAogCWludCAoKnNldF9hdHRlbnRpb25fc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggc3RhdHVzKTsKIAlpbnQgKCpnZXRfbGF0Y2hfc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnN0YXR1cyk7CiAJaW50ICgqZ2V0X2FkYXB0ZXJfc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnN0YXR1cyk7Ci0JaW50ICgqZ2V0X21heF9idXNfc3BlZWQpKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnNwZWVkKTsKLQlpbnQgKCpnZXRfY3VyX2J1c19zcGVlZCkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOwogCWludCAoKmdldF9hZGFwdGVyX3NwZWVkKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICpzcGVlZCk7CiAJaW50ICgqZ2V0X21vZGUxX0VDQ19jYXApKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqbW9kZSk7CiAJaW50ICgqZ2V0X3Byb2dfaW50KShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnByb2dfaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYwppbmRleCA4YTUyMGEzLi5hNTA2MjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCkBAIC02NSw4ICs2NSw2IEBACiBzdGF0aWMgaW50IGdldF9hdHRlbnRpb25fc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogc3RhdGljIGludCBnZXRfbGF0Y2hfc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogc3RhdGljIGludCBnZXRfYWRhcHRlcl9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7Ci1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwogCiBzdGF0aWMgc3RydWN0IGhvdHBsdWdfc2xvdF9vcHMgc2hwY2hwX2hvdHBsdWdfc2xvdF9vcHMgPSB7CiAJLnNldF9hdHRlbnRpb25fc3RhdHVzID0Jc2V0X2F0dGVudGlvbl9zdGF0dXMsCkBAIC03Niw4ICs3NCw2IEBACiAJLmdldF9hdHRlbnRpb25fc3RhdHVzID0JZ2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmdldF9sYXRjaF9zdGF0dXMgPQlnZXRfbGF0Y2hfc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMgPQlnZXRfYWRhcHRlcl9zdGF0dXMsCi0JLmdldF9tYXhfYnVzX3NwZWVkID0JZ2V0X21heF9idXNfc3BlZWQsCi0JLmdldF9jdXJfYnVzX3NwZWVkID0JZ2V0X2N1cl9idXNfc3BlZWQsCiB9OwogCiAvKioKQEAgLTI3OSwzNyArMjc1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsCi0JCQkJZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7Ci0JaW50IHJldHZhbDsKLQotCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAotCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfbWF4X2J1c19zcGVlZChzbG90LCB2YWx1ZSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7Ci0JaW50IHJldHZhbDsKLQotCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAotCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfY3VyX2J1c19zcGVlZChzbG90LCB2YWx1ZSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgaXNfc2hwY19jYXBhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaWYgKChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkgfHwgKGRldi0+ZGV2aWNlID09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKaW5kZXggYjhhYjI3OS4uM2JiYTBjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwpAQCAtMjg1LDE3ICsyODUsOCBAQAogCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIAl9CiAKLQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2N1cl9idXNfc3BlZWQocF9zbG90LCAmYnNwKTsKLQlpZiAocmMpIHsKLQkJY3RybF9lcnIoY3RybCwgIkNhbid0IGdldCBidXMgb3BlcmF0aW9uIHNwZWVkXG4iKTsKLQkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7Ci0JfQotCi0JcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9tYXhfYnVzX3NwZWVkKHBfc2xvdCwgJm1zcCk7Ci0JaWYgKHJjKSB7Ci0JCWN0cmxfZXJyKGN0cmwsICJDYW4ndCBnZXQgbWF4IGJ1cyBvcGVyYXRpb24gc3BlZWRcbiIpOwotCQltc3AgPSBic3A7Ci0JfQorCWJzcCA9IGN0cmwtPnBjaV9kZXYtPmJ1cy0+Y3VyX2J1c19zcGVlZDsKKwltc3AgPSBjdHJsLT5wY2lfZGV2LT5idXMtPm1heF9idXNfc3BlZWQ7CiAKIAkvKiBDaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgc2xvdHMgb3IgZGV2aWNlcyBvbiB0aGUgc2FtZSBidXMgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzKSkKQEAgLTQ2Miw2ICs0NTMsNyBAQAogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPTl9TVEFURTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJa2ZyZWUoaW5mbyk7CiAJCWdvdG8gb3V0OwogCX0KIAlxdWV1ZV93b3JrKHNocGNocF93cSwgJmluZm8tPndvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwppbmRleCA4NmRjMzk4Li41ZjVlOGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwpAQCAtNjYwLDYgKzY2MCw3NSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyBpbnQgc2hwY19nZXRfY3VyX2J1c19zcGVlZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CisJZW51bSBwY2lfYnVzX3NwZWVkIGJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOworCXUxNiBzZWNfYnVzX3JlZyA9IHNocGNfcmVhZHcoY3RybCwgU0VDX0JVU19DT05GSUcpOworCXU4IHBpID0gc2hwY19yZWFkYihjdHJsLCBQUk9HX0lOVEVSRkFDRSk7CisJdTggc3BlZWRfbW9kZSA9IChwaSA9PSAyKSA/IChzZWNfYnVzX3JlZyAmIDB4RikgOiAoc2VjX2J1c19yZWcgJiAweDcpOworCisJaWYgKChwaSA9PSAxKSAmJiAoc3BlZWRfbW9kZSA+IDQpKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoc3BlZWRfbW9kZSkgeworCWNhc2UgMHgwOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYX0VDQzsKKwkJYnJlYWs7CisJY2FzZSAweDY6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0M7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOworCQlicmVhazsKKwljYXNlIDB4ODoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2OworCQlicmVhazsKKwljYXNlIDB4OToKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2NjsKKwkJYnJlYWs7CisJY2FzZSAweGE6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjY7CisJCWJyZWFrOworCWNhc2UgMHhiOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF81MzM7CisJCWJyZWFrOworCWNhc2UgMHhjOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzOworCQlicmVhazsKKwljYXNlIDB4ZDoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJYnJlYWs7CisJfQorCisgb3V0OgorCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGJ1c19zcGVlZDsKKwlkYmcoIkN1cnJlbnQgYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCiBzdGF0aWMgaW50IGhwY19zZXRfYnVzX3NwZWVkX21vZGUoc3RydWN0IHNsb3QgKiBzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgdmFsdWUpCiB7CiAJaW50IHJldHZhbDsKQEAgLTcyMCw2ICs3ODksOCBAQAogCXJldHZhbCA9IHNocGNfd3JpdGVfY21kKHNsb3QsIDAsIGNtZCk7CiAJaWYgKHJldHZhbCkKIAkJY3RybF9lcnIoY3RybCwgIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKKwllbHNlCisJCXNocGNfZ2V0X2N1cl9idXNfc3BlZWQoY3RybCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtODAzLDEwICs4NzQsMTAgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgaHBjX2dldF9tYXhfYnVzX3NwZWVkIChzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKK3N0YXRpYyBpbnQgc2hwY19nZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOwogCWVudW0gcGNpX2J1c19zcGVlZCBidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAl1OCBwaSA9IHNocGNfcmVhZGIoY3RybCwgUFJPR19JTlRFUkZBQ0UpOwogCXUzMiBzbG90X2F2YWlsMSA9IHNocGNfcmVhZGwoY3RybCwgU0xPVF9BVkFJTDEpOwpAQCAtODQyLDc5ICs5MTMsMTIgQEAKIAkJCXJldHZhbCA9IC1FTk9ERVY7CiAJfQogCi0JKnZhbHVlID0gYnVzX3NwZWVkOworCWJ1cy0+bWF4X2J1c19zcGVlZCA9IGJ1c19zcGVlZDsKIAljdHJsX2RiZyhjdHJsLCAiTWF4IGJ1cyBzcGVlZCA9ICVkXG4iLCBidXNfc3BlZWQpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBocGNfZ2V0X2N1cl9idXNfc3BlZWQgKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQllbnVtIHBjaV9idXNfc3BlZWQgYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0JdTE2IHNlY19idXNfcmVnID0gc2hwY19yZWFkdyhjdHJsLCBTRUNfQlVTX0NPTkZJRyk7Ci0JdTggcGkgPSBzaHBjX3JlYWRiKGN0cmwsIFBST0dfSU5URVJGQUNFKTsKLQl1OCBzcGVlZF9tb2RlID0gKHBpID09IDIpID8gKHNlY19idXNfcmVnICYgMHhGKSA6IChzZWNfYnVzX3JlZyAmIDB4Nyk7Ci0KLQlpZiAoKHBpID09IDEpICYmIChzcGVlZF9tb2RlID4gNCkpIHsKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN3aXRjaCAoc3BlZWRfbW9kZSkgewotCWNhc2UgMHgwOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMzNNSHo7Ci0JCWJyZWFrOwotCWNhc2UgMHgxOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHo7Ci0JCWJyZWFrOwotCWNhc2UgMHgyOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKLQkJYnJlYWs7Ci0JY2FzZSAweDM6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKLQkJYnJlYWs7Ci0JY2FzZSAweDQ6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKLQkJYnJlYWs7Ci0JY2FzZSAweDU6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYX0VDQzsKLQkJYnJlYWs7Ci0JY2FzZSAweDY6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0M7Ci0JCWJyZWFrOwotCWNhc2UgMHg3OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOwotCQlicmVhazsKLQljYXNlIDB4ODoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2OwotCQlicmVhazsKLQljYXNlIDB4OToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2NjsKLQkJYnJlYWs7Ci0JY2FzZSAweGE6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjY7Ci0JCWJyZWFrOwotCWNhc2UgMHhiOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF81MzM7Ci0JCWJyZWFrOwotCWNhc2UgMHhjOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzOwotCQlicmVhazsKLQljYXNlIDB4ZDoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWJyZWFrOwotCX0KLQotCWN0cmxfZGJnKGN0cmwsICJDdXJyZW50IGJ1cyBzcGVlZCA9ICVkXG4iLCBidXNfc3BlZWQpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaHBjX29wcyBzaHBjaHBfaHBjX29wcyA9IHsKIAkucG93ZXJfb25fc2xvdAkJCT0gaHBjX3Bvd2VyX29uX3Nsb3QsCiAJLnNsb3RfZW5hYmxlCQkJPSBocGNfc2xvdF9lbmFibGUsCkBAIC05MjYsOCArOTMwLDYgQEAKIAkuZ2V0X2xhdGNoX3N0YXR1cwkJPSBocGNfZ2V0X2xhdGNoX3N0YXR1cywKIAkuZ2V0X2FkYXB0ZXJfc3RhdHVzCQk9IGhwY19nZXRfYWRhcHRlcl9zdGF0dXMsCiAKLQkuZ2V0X21heF9idXNfc3BlZWQJCT0gaHBjX2dldF9tYXhfYnVzX3NwZWVkLAotCS5nZXRfY3VyX2J1c19zcGVlZAkJPSBocGNfZ2V0X2N1cl9idXNfc3BlZWQsCiAJLmdldF9hZGFwdGVyX3NwZWVkCQk9IGhwY19nZXRfYWRhcHRlcl9zcGVlZCwKIAkuZ2V0X21vZGUxX0VDQ19jYXAJCT0gaHBjX2dldF9tb2RlMV9FQ0NfY2FwLAogCS5nZXRfcHJvZ19pbnQJCQk9IGhwY19nZXRfcHJvZ19pbnQsCkBAIC0xMDg2LDYgKzEwODgsOSBAQAogCX0KIAljdHJsX2RiZyhjdHJsLCAiSFBDIGF0ICVzIGlycT0leFxuIiwgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSk7CiAKKwlzaHBjX2dldF9tYXhfYnVzX3NwZWVkKGN0cmwpOworCXNocGNfZ2V0X2N1cl9idXNfc3BlZWQoY3RybCk7CisKIAkvKgogCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IGNvbnRyb2xsZXIgdG8gYmUgaW5pdGlhbGl6ZWQsCiAJICogaW5pdGlhbGl6ZSB0aGUgc2hwY2hwZCB3b3JrIHF1ZXVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYwppbmRleCAyOWZhOWQyLi4wNzFiN2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMKQEAgLTQ3LDggKzQ3LDcgQEAKIAlidXMgPSBwZGV2LT5zdWJvcmRpbmF0ZTsKIAogCW91dCArPSBzcHJpbnRmKGJ1ZiwgIkZyZWUgcmVzb3VyY2VzOiBtZW1vcnlcbiIpOwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaW5kZXgrKykgewotCQlyZXMgPSBidXMtPnJlc291cmNlW2luZGV4XTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpbmRleCkgewogCQlpZiAocmVzICYmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCiAJCQkJIShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9QUkVGRVRDSCkpIHsKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgInN0YXJ0ID0gJTguOGxseCwgIgpAQCAtNTgsOCArNTcsNyBAQAogCQl9CiAJfQogCW91dCArPSBzcHJpbnRmKG91dCwgIkZyZWUgcmVzb3VyY2VzOiBwcmVmZXRjaGFibGUgbWVtb3J5XG4iKTsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGluZGV4KyspIHsKLQkJcmVzID0gYnVzLT5yZXNvdXJjZVtpbmRleF07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaW5kZXgpIHsKIAkJaWYgKHJlcyAmJiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSAmJgogCQkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9QUkVGRVRDSCkpIHsKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgInN0YXJ0ID0gJTguOGxseCwgIgpAQCAtNjksOCArNjcsNyBAQAogCQl9CiAJfQogCW91dCArPSBzcHJpbnRmKG91dCwgIkZyZWUgcmVzb3VyY2VzOiBJT1xuIik7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpbmRleCsrKSB7Ci0JCXJlcyA9IGJ1cy0+cmVzb3VyY2VbaW5kZXhdOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGluZGV4KSB7CiAJCWlmIChyZXMgJiYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkgewogCQkJb3V0ICs9IHNwcmludGYob3V0LCAic3RhcnQgPSAlOC44bGx4LCAiCiAJCQkJCSJsZW5ndGggPSAlOC44bGx4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGVnYWN5LmMgYi9kcml2ZXJzL3BjaS9sZWdhY3kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcxZjY1Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjaS9sZWdhY3kuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSAicGNpLmgiCi0KLS8qKgotICogcGNpX2ZpbmRfZGV2aWNlIC0gYmVnaW4gb3IgY29udGludWUgc2VhcmNoaW5nIGZvciBhIFBDSSBkZXZpY2UgYnkgdmVuZG9yL2RldmljZSBpZAotICogQHZlbmRvcjogUENJIHZlbmRvciBpZCB0byBtYXRjaCwgb3IgJVBDSV9BTllfSUQgdG8gbWF0Y2ggYWxsIHZlbmRvciBpZHMKLSAqIEBkZXZpY2U6IFBDSSBkZXZpY2UgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCBkZXZpY2UgaWRzCi0gKiBAZnJvbTogUHJldmlvdXMgUENJIGRldmljZSBmb3VuZCBpbiBzZWFyY2gsIG9yICVOVUxMIGZvciBuZXcgc2VhcmNoLgotICoKLSAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmQKLSAqIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yIGFuZCBAZGV2aWNlLCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMKLSAqIHJldHVybmVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KLSAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCi0gKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlCi0gKiBvbiB0aGUgZ2xvYmFsIGxpc3QuCi0gKgotICogTk9URTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGFueSBtb3JlOyB1c2UgcGNpX2dldF9kZXZpY2UoKSBpbnN0ZWFkLCBhcwotICogdGhlIFBDSSBkZXZpY2UgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gZGlzYXBwZWFyIGF0IGFueSBtb21lbnQgaW4KLSAqIHRpbWUuCi0gKi8KLXN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwKLQkJCQlzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQotCXBjaV9kZXZfZ2V0KGZyb20pOwotCXBkZXYgPSBwY2lfZ2V0X3N1YnN5cyh2ZW5kb3IsIGRldmljZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZnJvbSk7Ci0JcGNpX2Rldl9wdXQocGRldik7Ci0JcmV0dXJuIHBkZXY7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjaV9maW5kX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCA3ZTI4Mjk1Li5jMGM3MzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTE2LDggKzE2LDE0NCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgInBjaS5oIgogCitzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisvKioKKyAqIHBjaV9hY3BpX3dha2VfYnVzIC0gV2FrZS11cCBub3RpZmljYXRpb24gaGFuZGxlciBmb3Igcm9vdCBidXNlcy4KKyAqIEBoYW5kbGU6IEFDUEkgaGFuZGxlIG9mIGEgZGV2aWNlIHRoZSBub3RpZmljYXRpb24gaXMgZm9yLgorICogQGV2ZW50OiBUeXBlIG9mIHRoZSBzaWduYWxlZCBldmVudC4KKyAqIEBjb250ZXh0OiBQQ0kgcm9vdCBidXMgdG8gd2FrZSB1cCBkZXZpY2VzIG9uLgorICovCitzdGF0aWMgdm9pZCBwY2lfYWNwaV93YWtlX2J1cyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cyA9IGNvbnRleHQ7CisKKwlpZiAoZXZlbnQgPT0gQUNQSV9OT1RJRllfREVWSUNFX1dBS0UgJiYgcGNpX2J1cykKKwkJcGNpX3BtZV93YWtldXBfYnVzKHBjaV9idXMpOworfQorCisvKioKKyAqIHBjaV9hY3BpX3dha2VfZGV2IC0gV2FrZS11cCBub3RpZmljYXRpb24gaGFuZGxlciBmb3IgUENJIGRldmljZXMuCisgKiBAaGFuZGxlOiBBQ1BJIGhhbmRsZSBvZiBhIGRldmljZSB0aGUgbm90aWZpY2F0aW9uIGlzIGZvci4KKyAqIEBldmVudDogVHlwZSBvZiB0aGUgc2lnbmFsZWQgZXZlbnQuCisgKiBAY29udGV4dDogUENJIGRldmljZSBvYmplY3QgdG8gd2FrZSB1cC4KKyAqLworc3RhdGljIHZvaWQgcGNpX2FjcGlfd2FrZV9kZXYoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBjb250ZXh0OworCisJaWYgKGV2ZW50ID09IEFDUElfTk9USUZZX0RFVklDRV9XQUtFICYmIHBjaV9kZXYpIHsKKwkJcGNpX2NoZWNrX3BtZV9zdGF0dXMocGNpX2Rldik7CisJCXBtX3J1bnRpbWVfcmVzdW1lKCZwY2lfZGV2LT5kZXYpOworCQlpZiAocGNpX2Rldi0+c3Vib3JkaW5hdGUpCisJCQlwY2lfcG1lX3dha2V1cF9idXMocGNpX2Rldi0+c3Vib3JkaW5hdGUpOworCX0KK30KKworLyoqCisgKiBhZGRfcG1fbm90aWZpZXIgLSBSZWdpc3RlciBQTSBub3RpZmllciBmb3IgZ2l2ZW4gQUNQSSBkZXZpY2UuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byBhZGQgdGhlIG5vdGlmaWVyIGZvci4KKyAqIEBjb250ZXh0OiBQQ0kgZGV2aWNlIG9yIGJ1cyB0byBjaGVjayBmb3IgUE1FIHN0YXR1cyBpZiBhbiBldmVudCBpcyBzaWduYWxlZC4KKyAqCisgKiBOT1RFOiBAZGV2IG5lZWQgbm90IGJlIGEgcnVuLXdha2Ugb3Igd2FrZS11cCBkZXZpY2UgdG8gYmUgYSB2YWxpZCBzb3VyY2Ugb2YKKyAqIFBNIHdha2UtdXAgZXZlbnRzLiAgRm9yIGV4YW1wbGUsIHdha2UtdXAgZXZlbnRzIG1heSBiZSBnZW5lcmF0ZWQgZm9yIGJyaWRnZXMKKyAqIGlmIG9uZSBvZiB0aGUgZGV2aWNlcyBiZWxvdyB0aGUgYnJpZGdlIGlzIHNpZ25hbGluZyBQTUUsIGV2ZW4gaWYgdGhlIGJyaWRnZQorICogaXRzZWxmIGRvZXNuJ3QgaGF2ZSBhIHdha2UtdXAgR1BFIGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIGFkZF9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsCisJCQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKKworCW11dGV4X2xvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisJaWYgKGRldi0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQpCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldi0+aGFuZGxlLAorCQkJCQkgICAgIEFDUElfU1lTVEVNX05PVElGWSwKKwkJCQkJICAgICBoYW5kbGVyLCBjb250ZXh0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCWdvdG8gb3V0OworCisJZGV2LT53YWtldXAuZmxhZ3Mubm90aWZpZXJfcHJlc2VudCA9IHRydWU7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwY2lfYWNwaV9wbV9ub3RpZnlfbXR4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHJlbW92ZV9wbV9ub3RpZmllciAtIFVucmVnaXN0ZXIgUE0gbm90aWZpZXIgZnJvbSBnaXZlbiBBQ1BJIGRldmljZS4KKyAqIEBkZXY6IEFDUEkgZGV2aWNlIHRvIHJlbW92ZSB0aGUgbm90aWZpZXIgZnJvbS4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIHJlbW92ZV9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKworCW11dGV4X2xvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ub3RpZmllcl9wcmVzZW50KQorCQlnb3RvIG91dDsKKworCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldi0+aGFuZGxlLAorCQkJCQkgICAgQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQkgICAgaGFuZGxlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlnb3RvIG91dDsKKworCWRldi0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQgPSBmYWxzZTsKKworIG91dDoKKwltdXRleF91bmxvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllciAtIFJlZ2lzdGVyIFBNIG5vdGlmaWVyIGZvciBnaXZlbiBQQ0kgYnVzLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gYWRkIHRoZSBub3RpZmllciBmb3IuCisgKiBAcGNpX2J1czogUENJIGJ1cyB0byB3YWxrIGNoZWNraW5nIGZvciBQTUUgc3RhdHVzIGlmIGFuIGV2ZW50IGlzIHNpZ25hbGVkLgorICovCithY3BpX3N0YXR1cyBwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IHBjaV9idXMgKnBjaV9idXMpCit7CisJcmV0dXJuIGFkZF9wbV9ub3RpZmllcihkZXYsIHBjaV9hY3BpX3dha2VfYnVzLCBwY2lfYnVzKTsKK30KKworLyoqCisgKiBwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyIC0gVW5yZWdpc3RlciBQQ0kgYnVzIFBNIG5vdGlmaWVyLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gcmVtb3ZlIHRoZSBub3RpZmllciBmcm9tLgorICovCithY3BpX3N0YXR1cyBwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KQoreworCXJldHVybiByZW1vdmVfcG1fbm90aWZpZXIoZGV2LCBwY2lfYWNwaV93YWtlX2J1cyk7Cit9CisKKy8qKgorICogcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyIC0gUmVnaXN0ZXIgUE0gbm90aWZpZXIgZm9yIGdpdmVuIFBDSSBkZXZpY2UuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byBhZGQgdGhlIG5vdGlmaWVyIGZvci4KKyAqIEBwY2lfZGV2OiBQQ0kgZGV2aWNlIHRvIGNoZWNrIGZvciB0aGUgUE1FIHN0YXR1cyBpZiBhbiBldmVudCBpcyBzaWduYWxlZC4KKyAqLworYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcmV0dXJuIGFkZF9wbV9ub3RpZmllcihkZXYsIHBjaV9hY3BpX3dha2VfZGV2LCBwY2lfZGV2KTsKK30KKworLyoqCisgKiBwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIgLSBVbnJlZ2lzdGVyIFBDSSBkZXZpY2UgUE0gbm90aWZpZXIuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byByZW1vdmUgdGhlIG5vdGlmaWVyIGZyb20uCisgKi8KK2FjcGlfc3RhdHVzIHBjaV9hY3BpX3JlbW92ZV9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcmVtb3ZlX3BtX25vdGlmaWVyKGRldiwgcGNpX2FjcGlfd2FrZV9kZXYpOworfQorCiAvKgogICogX1N4RCByZXR1cm5zIHRoZSBELXN0YXRlIHdpdGggdGhlIGhpZ2hlc3QgcG93ZXIKICAqIChsb3dlc3QgRC1zdGF0ZSBudW1iZXIpIHN1cHBvcnRlZCBpbiB0aGUgUy1zdGF0ZSAieCIuCkBAIC0xMzEsMTIgKzI2Nyw4NyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGFjcGlfZGV2X3J1bl93YWtlIC0gRW5hYmxlL2Rpc2FibGUgd2FrZS11cCBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQHBoeXNfZGV2OiBEZXZpY2UgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHBsYXRmb3JtIHRvIHdha2UtdXAgdGhlIHN5c3RlbSBmb3IuCisgKiBAZW5hYmxlOiBXaGV0aGVyIGVuYWJsZSBvciBkaXNhYmxlIHRoZSB3YWtlLXVwIGZ1bmN0aW9uYWxpdHkuCisgKgorICogRmluZCB0aGUgQUNQSSBkZXZpY2Ugb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gQHBjaV9kZXYgYW5kIHRyeSB0bworICogZW5hYmxlL2Rpc2FibGUgdGhlIEdQRSBhc3NvY2lhdGVkIHdpdGggaXQuCisgKi8KK3N0YXRpYyBpbnQgYWNwaV9kZXZfcnVuX3dha2Uoc3RydWN0IGRldmljZSAqcGh5c19kZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2OworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwlpbnQgZXJyb3IgPSAtRU5PREVWOworCisJaWYgKCFkZXZpY2VfcnVuX3dha2UocGh5c19kZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRShwaHlzX2Rldik7CisJaWYgKCFoYW5kbGUgfHwgQUNQSV9GQUlMVVJFKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2KSkpIHsKKwkJZGV2X2RiZyhwaHlzX2RldiwgIkFDUEkgaGFuZGxlIGhhcyBubyBjb250ZXh0IGluICVzIVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGVuYWJsZSkgeworCQlpZiAoIWRldi0+d2FrZXVwLnJ1bl93YWtlX2NvdW50KyspIHsKKwkJCWFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2LCBBQ1BJX1NUQVRFX1MwKTsKKwkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCQlBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCQl9CisJfSBlbHNlIGlmIChkZXYtPndha2V1cC5ydW5fd2FrZV9jb3VudCA+IDApIHsKKwkJaWYgKCEtLWRldi0+d2FrZXVwLnJ1bl93YWtlX2NvdW50KSB7CisJCQlhY3BpX2Rpc2FibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCisJCQkJCSBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCQkgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCWFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGRldik7CisJCX0KKwl9IGVsc2UgeworCQllcnJvciA9IC1FQUxSRUFEWTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGNpX3Byb3BhZ2F0ZV9ydW5fd2FrZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBib29sIGVuYWJsZSkKK3sKKwl3aGlsZSAoYnVzLT5wYXJlbnQpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKworCQlpZiAoYnJpZGdlLT5wbWVfaW50ZXJydXB0KQorCQkJcmV0dXJuOworCQlpZiAoIWFjcGlfZGV2X3J1bl93YWtlKCZicmlkZ2UtPmRldiwgZW5hYmxlKSkKKwkJCXJldHVybjsKKwkJYnVzID0gYnVzLT5wYXJlbnQ7CisJfQorCisJLyogV2UgaGF2ZSByZWFjaGVkIHRoZSByb290IGJ1cy4gKi8KKwlpZiAoYnVzLT5icmlkZ2UpCisJCWFjcGlfZGV2X3J1bl93YWtlKGJ1cy0+YnJpZGdlLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IGFjcGlfcGNpX3J1bl93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWlmIChkZXYtPnBtZV9pbnRlcnJ1cHQpCisJCXJldHVybiAwOworCisJaWYgKCFhY3BpX2Rldl9ydW5fd2FrZSgmZGV2LT5kZXYsIGVuYWJsZSkpCisJCXJldHVybiAwOworCisJYWNwaV9wY2lfcHJvcGFnYXRlX3J1bl93YWtlKGRldi0+YnVzLCBlbmFibGUpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9wbGF0Zm9ybV9wbV9vcHMgYWNwaV9wY2lfcGxhdGZvcm1fcG0gPSB7CiAJLmlzX21hbmFnZWFibGUgPSBhY3BpX3BjaV9wb3dlcl9tYW5hZ2VhYmxlLAogCS5zZXRfc3RhdGUgPSBhY3BpX3BjaV9zZXRfcG93ZXJfc3RhdGUsCiAJLmNob29zZV9zdGF0ZSA9IGFjcGlfcGNpX2Nob29zZV9zdGF0ZSwKIAkuY2FuX3dha2V1cCA9IGFjcGlfcGNpX2Nhbl93YWtldXAsCiAJLnNsZWVwX3dha2UgPSBhY3BpX3BjaV9zbGVlcF93YWtlLAorCS5ydW5fd2FrZSA9IGFjcGlfcGNpX3J1bl93YWtlLAogfTsKIAogLyogQUNQSSBidXMgdHlwZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGU1ZDQ3YmUuLmY5YTBhZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKIHN0cnVjdCBwY2lfZHluaWQgewpAQCAtNDA0LDYgKzQwNSwzNSBAQAogCXBjaV9tc2l4X3NodXRkb3duKHBjaV9kZXYpOwogfQogCisjaWZkZWYgQ09ORklHX1BNX09QUworCisvKiBBdXhpbGlhcnkgZnVuY3Rpb25zIHVzZWQgZm9yIHN5c3RlbSByZXN1bWUgYW5kIHJ1bi10aW1lIHJlc3VtZS4gKi8KKworLyoqCisgKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcgLSByZXN0b3JlIHN0YW5kYXJkIGNvbmZpZyByZWdpc3RlcnMgb2YgUENJIGRldmljZQorICogQHBjaV9kZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShwY2lfZGV2LCBQQ0lfVU5LTk9XTik7CisKKwlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKKwkJaW50IGVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIHBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOworfQorCitzdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHBjaV9kZXYpOworCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZV9lYXJseSwgcGNpX2Rldik7Cit9CisKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAKIC8qCkBAIC01MjAsMjkgKzU1MCw2IEBACiAKIC8qIEF1eGlsaWFyeSBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbmV3IHBvd2VyIG1hbmFnZW1lbnQgZnJhbWV3b3JrICovCiAKLS8qKgotICogcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnIC0gcmVzdG9yZSBzdGFuZGFyZCBjb25maWcgcmVnaXN0ZXJzIG9mIFBDSSBkZXZpY2UKLSAqIEBwY2lfZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZQotICovCi1zdGF0aWMgaW50IHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKLXsKLQlwY2lfdXBkYXRlX2N1cnJlbnRfc3RhdGUocGNpX2RldiwgUENJX1VOS05PV04pOwotCi0JaWYgKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKSB7Ci0JCWludCBlcnJvciA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QwKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCX0KLQotCXJldHVybiBwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcGNpX3BtX2RlZmF1bHRfcmVzdW1lX25vaXJxKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQotewotCXBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhwY2lfZGV2KTsKLQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWVfZWFybHksIHBjaV9kZXYpOwotfQotCiBzdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfcmVzdW1lLCBwY2lfZGV2KTsKQEAgLTU4MSw2ICs1ODgsMTcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAorCS8qCisJICogUENJIGRldmljZXMgc3VzcGVuZGVkIGF0IHJ1biB0aW1lIG5lZWQgdG8gYmUgcmVzdW1lZCBhdCB0aGlzCisJICogcG9pbnQsIGJlY2F1c2UgaW4gZ2VuZXJhbCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVjb25maWd1cmUgdGhlbSBmb3IKKwkgKiBzeXN0ZW0gc3VzcGVuZC4gIE5hbWVseSwgaWYgdGhlIGRldmljZSBpcyBzdXBwb3NlZCB0byB3YWtlIHVwIHRoZQorCSAqIHN5c3RlbSBmcm9tIHRoZSBzbGVlcCBzdGF0ZSwgd2UgbWF5IG5lZWQgdG8gcmVjb25maWd1cmUgaXQgZm9yIHRoaXMKKwkgKiBwdXJwb3NlLiAgSW4gdHVybiwgaWYgdGhlIGRldmljZSBpcyBub3Qgc3VwcG9zZWQgdG8gd2FrZSB1cCB0aGUKKwkgKiBzeXN0ZW0gZnJvbSB0aGUgc2xlZXAgc3RhdGUsIHdlJ2xsIGhhdmUgdG8gcHJldmVudCBpdCBmcm9tIHNpZ25hbGluZworCSAqIHdha2UtdXAuCisJICovCisJcG1fcnVudGltZV9yZXN1bWUoZGV2KTsKKwogCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5wcmVwYXJlKQogCQllcnJvciA9IGRydi0+cG0tPnByZXBhcmUoZGV2KTsKIApAQCAtNTk1LDYgKzYxMywxMyBAQAogCQlkcnYtPnBtLT5jb21wbGV0ZShkZXYpOwogfQogCisjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKKyNkZWZpbmUgcGNpX3BtX3ByZXBhcmUJTlVMTAorI2RlZmluZSBwY2lfcG1fY29tcGxldGUJTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKIAogc3RhdGljIGludCBwY2lfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC02ODEsNyArNzA2LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAotCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9ub2lycShwY2lfZGV2KTsKKwlwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkocGNpX2Rldik7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7CkBAIC04NzksNyArOTA0LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAotCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9ub2lycShwY2lfZGV2KTsKKwlwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkocGNpX2Rldik7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7CkBAIC05MzEsNiArOTU2LDg0IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCiAKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwlwY2lfcG93ZXJfdCBwcmV2ID0gcGNpX2Rldi0+Y3VycmVudF9zdGF0ZTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIXBtIHx8ICFwbS0+cnVudGltZV9zdXNwZW5kKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWVycm9yID0gcG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChwbS0+cnVudGltZV9zdXNwZW5kLCBlcnJvcik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKKworCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkgICAgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfVU5LTk9XTikgeworCQlXQVJOX09OQ0UocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBwcmV2LAorCQkJIlBDSSBQTTogU3RhdGUgb2YgZGV2aWNlIG5vdCBzYXZlZCBieSAlcEZcbiIsCisJCQlwbS0+cnVudGltZV9zdXNwZW5kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCkKKwkJcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisKKwlwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChwY2lfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKCFwbSB8fCAhcG0tPnJ1bnRpbWVfcmVzdW1lKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShwY2lfZGV2KTsKKwlfX3BjaV9lbmFibGVfd2FrZShwY2lfZGV2LCBQQ0lfRDAsIHRydWUsIGZhbHNlKTsKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYpOworCisJcmV0dXJuIHBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKworCWlmICghcG0pCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKHBtLT5ydW50aW1lX2lkbGUpIHsKKwkJaW50IHJldCA9IHBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcG1fcnVudGltZV9zdXNwZW5kKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKKyNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHBjaV9wbV9ydW50aW1lX3Jlc3VtZQlOVUxMCisjZGVmaW5lIHBjaV9wbV9ydW50aW1lX2lkbGUJTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKKyNpZmRlZiBDT05GSUdfUE1fT1BTCisKIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHBjaV9kZXZfcG1fb3BzID0gewogCS5wcmVwYXJlID0gcGNpX3BtX3ByZXBhcmUsCiAJLmNvbXBsZXRlID0gcGNpX3BtX2NvbXBsZXRlLApAQCAtOTQ2LDE1ICsxMDQ5LDE4IEBACiAJLnRoYXdfbm9pcnEgPSBwY2lfcG1fdGhhd19ub2lycSwKIAkucG93ZXJvZmZfbm9pcnEgPSBwY2lfcG1fcG93ZXJvZmZfbm9pcnEsCiAJLnJlc3RvcmVfbm9pcnEgPSBwY2lfcG1fcmVzdG9yZV9ub2lycSwKKwkucnVudGltZV9zdXNwZW5kID0gcGNpX3BtX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBwY2lfcG1fcnVudGltZV9yZXN1bWUsCisJLnJ1bnRpbWVfaWRsZSA9IHBjaV9wbV9ydW50aW1lX2lkbGUsCiB9OwogCiAjZGVmaW5lIFBDSV9QTV9PUFNfUFRSCSgmcGNpX2Rldl9wbV9vcHMpCiAKLSNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKyNlbHNlIC8qICFDT01GSUdfUE1fT1BTICovCiAKICNkZWZpbmUgUENJX1BNX09QU19QVFIJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qICFDT01GSUdfUE1fT1BTICovCiAKIC8qKgogICogX19wY2lfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgcGNpIGRyaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBhYzJhNTc2Li41YjU0OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fd2FrZXVwLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgkvKiBpc2FfZG1hX2JyaWRnZV9idWdneSAqLwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlICJwY2kuaCIKIApAQCAtMjksNiArMjksMTIgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcG93ZXJfbmFtZXMpOwogCitpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CitFWFBPUlRfU1lNQk9MKGlzYV9kbWFfYnJpZGdlX2J1Z2d5KTsKKworaW50IHBjaV9wY2lfcHJvYmxlbXM7CitFWFBPUlRfU1lNQk9MKHBjaV9wY2lfcHJvYmxlbXMpOworCiB1bnNpZ25lZCBpbnQgcGNpX3BtX2QzX2RlbGF5OwogCiBzdGF0aWMgdm9pZCBwY2lfZGV2X2QzX3NsZWVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0zODAsMTAgKzM4Niw5IEBACiB7CiAJY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwogCWludCBpOwotCXN0cnVjdCByZXNvdXJjZSAqYmVzdCA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpiZXN0ID0gTlVMTCwgKnI7CiAKLQlmb3IoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBidXMtPnJlc291cmNlW2ldOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByLCBpKSB7CiAJCWlmICghcikKIAkJCWNvbnRpbnVlOwogCQlpZiAocmVzLT5zdGFydCAmJiAhKHJlcy0+c3RhcnQgPj0gci0+c3RhcnQgJiYgcmVzLT5lbmQgPD0gci0+ZW5kKSkKQEAgLTQ1Nyw2ICs0NjIsMTIgQEAKIAkJCXBjaV9wbGF0Zm9ybV9wbS0+c2xlZXBfd2FrZShkZXYsIGVuYWJsZSkgOiAtRU5PREVWOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwbGF0Zm9ybV9wY2lfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIHBjaV9wbGF0Zm9ybV9wbSA/CisJCQlwY2lfcGxhdGZvcm1fcG0tPnJ1bl93YWtlKGRldiwgZW5hYmxlKSA6IC1FTk9ERVY7Cit9CisKIC8qKgogICogcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUgLSBVc2UgUENJIFBNIHJlZ2lzdGVycyB0byBzZXQgdGhlIHBvd2VyIHN0YXRlIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIFBDSSBkZXZpY2UKQEAgLTExOTAsNiArMTIwMSw2NiBAQAogfQogCiAvKioKKyAqIHBjaV9jaGVja19wbWVfc3RhdHVzIC0gQ2hlY2sgaWYgZ2l2ZW4gZGV2aWNlIGhhcyBnZW5lcmF0ZWQgUE1FLgorICogQGRldjogRGV2aWNlIHRvIGNoZWNrLgorICoKKyAqIENoZWNrIHRoZSBQTUUgc3RhdHVzIG9mIHRoZSBkZXZpY2UgYW5kIGlmIHNldCwgY2xlYXIgaXQgYW5kIGNsZWFyIFBNRSBlbmFibGUKKyAqIChpZiBzZXQpLiAgUmV0dXJuICd0cnVlJyBpZiBQTUUgc3RhdHVzIGFuZCBQTUUgZW5hYmxlIHdlcmUgYm90aCBzZXQgb3IKKyAqICdmYWxzZScgb3RoZXJ3aXNlLgorICovCitib29sIHBjaV9jaGVja19wbWVfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBtY3NyX3BvczsKKwl1MTYgcG1jc3I7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWlmICghZGV2LT5wbV9jYXApCisJCXJldHVybiBmYWxzZTsKKworCXBtY3NyX3BvcyA9IGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkw7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwbWNzcl9wb3MsICZwbWNzcik7CisJaWYgKCEocG1jc3IgJiBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2xlYXIgUE1FIHN0YXR1cy4gKi8KKwlwbWNzciB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOworCWlmIChwbWNzciAmIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUpIHsKKwkJLyogRGlzYWJsZSBQTUUgdG8gYXZvaWQgaW50ZXJydXB0IGZsb29kLiAqLworCQlwbWNzciAmPSB+UENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKKwkJcmV0ID0gdHJ1ZTsKKwl9CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwbWNzcl9wb3MsIHBtY3NyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcGNpX3BtZV93YWtldXAgLSBXYWtlIHVwIGEgUENJIGRldmljZSBpZiBpdHMgUE1FIFN0YXR1cyBiaXQgaXMgc2V0LgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBpZ246IElnbm9yZWQuCisgKgorICogQ2hlY2sgaWYgQGRldiBoYXMgZ2VuZXJhdGVkIFBNRSBhbmQgcXVldWUgYSByZXN1bWUgcmVxdWVzdCBmb3IgaXQgaW4gdGhhdAorICogY2FzZS4KKyAqLworc3RhdGljIGludCBwY2lfcG1lX3dha2V1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICppZ24pCit7CisJaWYgKHBjaV9jaGVja19wbWVfc3RhdHVzKGRldikpCisJCXBtX3JlcXVlc3RfcmVzdW1lKCZkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpX3BtZV93YWtldXBfYnVzIC0gV2FsayBnaXZlbiBidXMgYW5kIHdha2UgdXAgZGV2aWNlcyBvbiBpdCwgaWYgbmVjZXNzYXJ5LgorICogQGJ1czogVG9wIGJ1cyBvZiB0aGUgc3VidHJlZSB0byB3YWxrLgorICovCit2b2lkIHBjaV9wbWVfd2FrZXVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCWlmIChidXMpCisJCXBjaV93YWxrX2J1cyhidXMsIHBjaV9wbWVfd2FrZXVwLCBOVUxMKTsKK30KKworLyoqCiAgKiBwY2lfcG1lX2NhcGFibGUgLSBjaGVjayB0aGUgY2FwYWJpbGl0eSBvZiBQQ0kgZGV2aWNlIHRvIGdlbmVyYXRlIFBNRSMKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQQ0kgc3RhdGUgZnJvbSB3aGljaCBkZXZpY2Ugd2lsbCBpc3N1ZSBQTUUjLgpAQCAtMTIzMCw5ICsxMzAxLDEwIEBACiB9CiAKIC8qKgotICogcGNpX2VuYWJsZV93YWtlIC0gZW5hYmxlIFBDSSBkZXZpY2UgYXMgd2FrZXVwIGV2ZW50IHNvdXJjZQorICogX19wY2lfZW5hYmxlX3dha2UgLSBlbmFibGUgUENJIGRldmljZSBhcyB3YWtldXAgZXZlbnQgc291cmNlCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIGFmZmVjdGVkCiAgKiBAc3RhdGU6IFBDSSBzdGF0ZSBmcm9tIHdoaWNoIGRldmljZSB3aWxsIGlzc3VlIHdha2V1cCBldmVudHMKKyAqIEBydW50aW1lOiBUcnVlIGlmIHRoZSBldmVudHMgYXJlIHRvIGJlIGdlbmVyYXRlZCBhdCBydW4gdGltZQogICogQGVuYWJsZTogVHJ1ZSB0byBlbmFibGUgZXZlbnQgZ2VuZXJhdGlvbjsgZmFsc2UgdG8gZGlzYWJsZQogICoKICAqIFRoaXMgZW5hYmxlcyB0aGUgZGV2aWNlIGFzIGEgd2FrZXVwIGV2ZW50IHNvdXJjZSwgb3IgZGlzYWJsZXMgaXQuCkBAIC0xMjQ4LDExICsxMzIwLDEyIEBACiAgKiBFcnJvciBjb2RlIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gaXMgcmV0dXJuZWQgaWYgYm90aCB0aGUgcGxhdGZvcm0gYW5kCiAgKiB0aGUgbmF0aXZlIG1lY2hhbmlzbSBmYWlsIHRvIGVuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB3YWtlLXVwIGV2ZW50cwogICovCi1pbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBib29sIGVuYWJsZSkKK2ludCBfX3BjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSwKKwkJICAgICAgYm9vbCBydW50aW1lLCBib29sIGVuYWJsZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChlbmFibGUgJiYgIWRldmljZV9tYXlfd2FrZXVwKCZkZXYtPmRldikpCisJaWYgKGVuYWJsZSAmJiAhcnVudGltZSAmJiAhZGV2aWNlX21heV93YWtldXAoJmRldi0+ZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEb24ndCBkbyB0aGUgc2FtZSB0aGluZyB0d2ljZSBpbiBhIHJvdyBmb3Igb25lIGRldmljZS4gKi8KQEAgLTEyNzIsMTkgKzEzNDUsMjQgQEAKIAkJCXBjaV9wbWVfYWN0aXZlKGRldiwgdHJ1ZSk7CiAJCWVsc2UKIAkJCXJldCA9IDE7Ci0JCWVycm9yID0gcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCB0cnVlKTsKKwkJZXJyb3IgPSBydW50aW1lID8gcGxhdGZvcm1fcGNpX3J1bl93YWtlKGRldiwgdHJ1ZSkgOgorCQkJCQlwbGF0Zm9ybV9wY2lfc2xlZXBfd2FrZShkZXYsIHRydWUpOwogCQlpZiAocmV0KQogCQkJcmV0ID0gZXJyb3I7CiAJCWlmICghcmV0KQogCQkJZGV2LT53YWtldXBfcHJlcGFyZWQgPSB0cnVlOwogCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX3BjaV9zbGVlcF93YWtlKGRldiwgZmFsc2UpOworCQlpZiAocnVudGltZSkKKwkJCXBsYXRmb3JtX3BjaV9ydW5fd2FrZShkZXYsIGZhbHNlKTsKKwkJZWxzZQorCQkJcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCBmYWxzZSk7CiAJCXBjaV9wbWVfYWN0aXZlKGRldiwgZmFsc2UpOwogCQlkZXYtPndha2V1cF9wcmVwYXJlZCA9IGZhbHNlOwogCX0KIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKF9fcGNpX2VuYWJsZV93YWtlKTsKIAogLyoqCiAgKiBwY2lfd2FrZV9mcm9tX2QzIC0gZW5hYmxlL2Rpc2FibGUgZGV2aWNlIHRvIHdha2UgdXAgZnJvbSBEM19ob3Qgb3IgRDNfY29sZApAQCAtMTM5NCw2ICsxNDcyLDY2IEBACiB9CiAKIC8qKgorICogcGNpX2ZpbmlzaF9ydW50aW1lX3N1c3BlbmQgLSBDYXJyeSBvdXQgUENJLXNwZWNpZmljIHBhcnQgb2YgcnVudGltZSBzdXNwZW5kLgorICogQGRldjogUENJIGRldmljZSBiZWluZyBzdXNwZW5kZWQuCisgKgorICogUHJlcGFyZSBAZGV2IHRvIGdlbmVyYXRlIHdha2UtdXAgZXZlbnRzIGF0IHJ1biB0aW1lIGFuZCBwdXQgaXQgaW50byBhIGxvdworICogcG93ZXIgc3RhdGUuCisgKi8KK2ludCBwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV9wb3dlcl90IHRhcmdldF9zdGF0ZSA9IHBjaV90YXJnZXRfc3RhdGUoZGV2KTsKKwlpbnQgZXJyb3I7CisKKwlpZiAodGFyZ2V0X3N0YXRlID09IFBDSV9QT1dFUl9FUlJPUikKKwkJcmV0dXJuIC1FSU87CisKKwlfX3BjaV9lbmFibGVfd2FrZShkZXYsIHRhcmdldF9zdGF0ZSwgdHJ1ZSwgcGNpX2Rldl9ydW5fd2FrZShkZXYpKTsKKworCWVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHRhcmdldF9zdGF0ZSk7CisKKwlpZiAoZXJyb3IpCisJCV9fcGNpX2VuYWJsZV93YWtlKGRldiwgdGFyZ2V0X3N0YXRlLCB0cnVlLCBmYWxzZSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogcGNpX2Rldl9ydW5fd2FrZSAtIENoZWNrIGlmIGRldmljZSBjYW4gZ2VuZXJhdGUgcnVuLXRpbWUgd2FrZS11cCBldmVudHMuCisgKiBAZGV2OiBEZXZpY2UgdG8gY2hlY2suCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGRldmljZSBpdHNlbGYgaXMgY2FiYWJsZSBvZiBnZW5lcmF0aW5nIHdha2UtdXAgZXZlbnRzCisgKiAodGhyb3VnaCB0aGUgcGxhdGZvcm0gb3IgdXNpbmcgdGhlIG5hdGl2ZSBQQ0llIFBNRSkgb3IgaWYgdGhlIGRldmljZSBzdXBwb3J0cworICogUE1FIGFuZCBvbmUgb2YgaXRzIHVwc3RyZWFtIGJyaWRnZXMgY2FuIGdlbmVyYXRlIHdha2UtdXAgZXZlbnRzLgorICovCitib29sIHBjaV9kZXZfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7CisKKwlpZiAoZGV2aWNlX3J1bl93YWtlKCZkZXYtPmRldikpCisJCXJldHVybiB0cnVlOworCisJaWYgKCFkZXYtPnBtZV9zdXBwb3J0KQorCQlyZXR1cm4gZmFsc2U7CisKKwl3aGlsZSAoYnVzLT5wYXJlbnQpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKworCQlpZiAoZGV2aWNlX3J1bl93YWtlKCZicmlkZ2UtPmRldikpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlidXMgPSBidXMtPnBhcmVudDsKKwl9CisKKwkvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIHJvb3QgYnVzLiAqLworCWlmIChidXMtPmJyaWRnZSkKKwkJcmV0dXJuIGRldmljZV9ydW5fd2FrZShidXMtPmJyaWRnZSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGV2X3J1bl93YWtlKTsKKworLyoqCiAgKiBwY2lfcG1faW5pdCAtIEluaXRpYWxpemUgUE0gZnVuY3Rpb25zIG9mIGdpdmVuIFBDSSBkZXZpY2UKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICovCkBAIC0xNDAyLDYgKzE1NDAsNyBAQAogCWludCBwbTsKIAl1MTYgcG1jOwogCisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZkZXYtPmRldik7CiAJZGV2LT53YWtldXBfcHJlcGFyZWQgPSBmYWxzZTsKIAlkZXYtPnBtX2NhcCA9IDA7CiAKQEAgLTI4OTUsNyArMzAzNCw2IEBACiBFWFBPUlRfU1lNQk9MKHBjaV9yZXN0b3JlX3N0YXRlKTsKIEVYUE9SVF9TWU1CT0wocGNpX3BtZV9jYXBhYmxlKTsKIEVYUE9SVF9TWU1CT0wocGNpX3BtZV9hY3RpdmUpOwotRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX3dha2UpOwogRVhQT1JUX1NZTUJPTChwY2lfd2FrZV9mcm9tX2QzKTsKIEVYUE9SVF9TWU1CT0wocGNpX3RhcmdldF9zdGF0ZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wcmVwYXJlX3RvX3NsZWVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggZmJkMGUzYS4uNGViMTBmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTM1LDYgKzM1LDEwIEBACiAgKgogICogQHNsZWVwX3dha2U6IGVuYWJsZXMvZGlzYWJsZXMgdGhlIHN5c3RlbSB3YWtlIHVwIGNhcGFiaWxpdHkgb2YgZ2l2ZW4gZGV2aWNlCiAgKgorICogQHJ1bl93YWtlOiBlbmFibGVzL2Rpc2FibGVzIHRoZSBwbGF0Zm9ybSB0byBnZW5lcmF0ZSBydW4tdGltZSB3YWtlLXVwIGV2ZW50cworICoJCWZvciBnaXZlbiBkZXZpY2UgKHRoZSBkZXZpY2UncyB3YWtlLXVwIGNhcGFiaWxpdHkgaGFzIHRvIGJlCisgKgkJZW5hYmxlZCBieSBAc2xlZXBfd2FrZSBmb3IgdGhpcyBmZWF0dXJlIHRvIHdvcmspCisgKgogICogSWYgZ2l2ZW4gcGxhdGZvcm0gaXMgZ2VuZXJhbGx5IGNhcGFibGUgb2YgcG93ZXIgbWFuYWdpbmcgUENJIGRldmljZXMsIGFsbCBvZgogICogdGhlc2UgY2FsbGJhY2tzIGFyZSBtYW5kYXRvcnkuCiAgKi8KQEAgLTQ0LDExICs0OCwxNiBAQAogCXBjaV9wb3dlcl90ICgqY2hvb3NlX3N0YXRlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAlib29sICgqY2FuX3dha2V1cCkoc3RydWN0IHBjaV9kZXYgKmRldik7CiAJaW50ICgqc2xlZXBfd2FrZSkoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpOworCWludCAoKnJ1bl93YWtlKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7CiB9OwogCiBleHRlcm4gaW50IHBjaV9zZXRfcGxhdGZvcm1fcG0oc3RydWN0IHBjaV9wbGF0Zm9ybV9wbV9vcHMgKm9wcyk7CiBleHRlcm4gdm9pZCBwY2lfdXBkYXRlX2N1cnJlbnRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfZW5hYmxlZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gYm9vbCBwY2lfY2hlY2tfcG1lX3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpX2ZpbmlzaF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaW50IF9fcGNpX3BtZV93YWtldXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqaWduKTsKK2V4dGVybiB2b2lkIHBjaV9wbWVfd2FrZXVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGV4dGVybiB2b2lkIHBjaV9wbV9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgcGxhdGZvcm1fcGNpX3dha2V1cF9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgcGNpX2FsbG9jYXRlX2NhcF9zYXZlX2J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKmRldik7CkBAIC0zMTksNiArMzI4LDEzIEBACiAJaW50ICgqcmVzZXQpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSk7CiB9OwogCisjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MKIGV4dGVybiBpbnQgcGNpX2Rldl9zcGVjaWZpY19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9kZXZfc3BlY2lmaWNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKQoreworCXJldHVybiAtRU5PVFRZOworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBEUklWRVJTX1BDSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcgYi9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKaW5kZXggNWEwYzZhZC4uYjhiNDk0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwpAQCAtNDYsMyArNDYsNyBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBQQ0kgRXhwcmVzcyBBU1BNIGRlYnVnIHN1cHBvcnQuIEl0IHdpbGwgYWRkIHBlci1kZXZpY2UKIAkgIGludGVyZmFjZSB0byBjb250cm9sIEFTUE0uCisKK2NvbmZpZyBQQ0lFX1BNRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFBDSUVQT1JUQlVTICYmIFBNX1JVTlRJTUUgJiYgRVhQRVJJTUVOVEFMICYmIEFDUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlCmluZGV4IDExZjZiYjEuLmVhNjU0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQpAQCAtMTEsMyArMTEsNSBAQAogCiAjIEJ1aWxkIFBDSSBFeHByZXNzIEFFUiBpZiBuZWVkZWQKIG9iai0kKENPTkZJR19QQ0lFQUVSKQkJKz0gYWVyLworCitvYmotJChDT05GSUdfUENJRV9QTUUpICs9IHBtZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG1lL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5MjM4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgUENJLUV4cHJlc3MgUm9vdCBQb3J0IFBNRSBzaWduYWxpbmcgZHJpdmVyCisjCisKK29iai0kKENPTkZJR19QQ0lFX1BNRSkgKz0gcG1lZHJpdmVyLm8KKworcG1lZHJpdmVyLW9ianMgOj0gcGNpZV9wbWUubworcG1lZHJpdmVyLSQoQ09ORklHX0FDUEkpICs9IHBjaWVfcG1lX2FjcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzY2JmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKQEAgLTAsMCArMSw1MDUgQEAKKy8qCisgKiBQQ0llIE5hdGl2ZSBQTUUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycAorICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOSBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFYyLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2llcG9ydF9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgIi4uLy4uL3BjaS5oIgorI2luY2x1ZGUgInBjaWVfcG1lLmgiCisKKyNkZWZpbmUgUENJX0VYUF9SVFNUQV9QTUUJMHgxMDAwMCAvKiBQTUUgc3RhdHVzICovCisjZGVmaW5lIFBDSV9FWFBfUlRTVEFfUEVORElORwkweDIwMDAwIC8qIFBNRSBwZW5kaW5nICovCisKKy8qCisgKiBJZiBzZXQsIHRoaXMgc3dpdGNoIHdpbGwgcHJldmVudCB0aGUgUENJZSByb290IHBvcnQgUE1FIHNlcnZpY2UgZHJpdmVyIGZyb20KKyAqIGJlaW5nIHJlZ2lzdGVyZWQuICBDb25zZXF1ZW50bHksIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nIHdpbGwKKyAqIG5vdCBiZSB1c2VkIGJ5IGFueSBQQ0llIHJvb3QgcG9ydHMgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9kaXNhYmxlZDsKKworLyoKKyAqIFRoZSBQQ0kgRXhwcmVzcyBCYXNlIFNwZWNpZmljYXRpb24gMi4wLCBTZWN0aW9uIDYuMS44LCBzdGF0ZXMgdGhlIGZvbGxvd2luZzoKKyAqICJJbiBvcmRlciB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggbm9uLVBDSSBFeHByZXNzLWF3YXJlIHN5c3RlbQorICogc29mdHdhcmUsIHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50IGxvZ2ljIG11c3QgYmUgY29uZmlndXJlZCBieSBmaXJtd2FyZSB0byB1c2UKKyAqIHRoZSBsZWdhY3kgbWVjaGFuaXNtIG9mIHNpZ25hbGluZyBQTUUgYnkgZGVmYXVsdC4gIFBDSSBFeHByZXNzLWF3YXJlIHN5c3RlbQorICogc29mdHdhcmUgbXVzdCBub3RpZnkgdGhlIGZpcm13YXJlIHByaW9yIHRvIGVuYWJsaW5nIG5hdGl2ZSwgaW50ZXJydXB0LWJhc2VkCisgKiBQTUUgc2lnbmFsaW5nLiIgIEhvd2V2ZXIsIGlmIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCBhIHN1aXRhYmxlCisgKiBub3RpZmljYXRpb24gbWVjaGFuaXNtIG9yIHRoZSBub3RpZmljYXRpb24gZmFpbHMsIGl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIG9yCisgKiBub3Qgd2UgYXJlIHN1cHBvc2VkIHRvIHVzZSB0aGUgaW50ZXJydXB0LWJhc2VkIFBDSWUgUE1FIHNpZ25hbGluZy4gIFRoZQorICogc3dpdGNoIGJlbG93IGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoZSBkZXNpcmVkIGJlaGF2aW91ci4gIFdoZW4gc2V0LCBpdAorICogd2lsbCBtYWtlIHRoZSBrZXJuZWwgdXNlIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nIHJlZ2FyZGxlc3Mgb2YKKyAqIHRoZSBwbGF0Zm9ybSBub3RpZmljYXRpb24gc3RhdHVzLCBhbHRob3VnaCB0aGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0byBub3RpZnkKKyAqIHRoZSBwbGF0Zm9ybSBhbnl3YXkuICBXaGVuIHVuc2V0LCBpdCB3aWxsIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIHVzaW5nIHRoZQorICogdGhlIGludGVycnVwdC1iYXNlZCBQQ0llIFBNRSBzaWduYWxpbmcgaWYgdGhlIHBsYXRmb3JtIG5vdGlmaWNhdGlvbiBmYWlscywKKyAqIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9mb3JjZV9lbmFibGU7CisKKy8qCisgKiBJZiB0aGlzIHN3aXRjaCBpcyBzZXQsIE1TSSB3aWxsIG5vdCBiZSB1c2VkIGZvciBQQ0llIFBNRSBzaWduYWxpbmcuICBUaGlzCisgKiBjYXVzZXMgdGhlIFBDSWUgcG9ydCBkcml2ZXIgdG8gdXNlIElOVHggaW50ZXJydXB0cyBvbmx5LCBidXQgaXQgdHVybnMgb3V0CisgKiB0aGF0IHVzaW5nIE1TSSBmb3IgUENJZSBQTUUgc2lnbmFsaW5nIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUENJZSBQTUUtYmFzZWQKKyAqIHdha2UtdXAgZnJvbSBzeXN0ZW0gc2xlZXAgc3RhdGVzLgorICovCitib29sIHBjaWVfcG1lX21zaV9kaXNhYmxlZDsKKworc3RhdGljIGludCBfX2luaXQgcGNpZV9wbWVfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyY21wKHN0ciwgIm9mZiIpKQorCQlwY2llX3BtZV9kaXNhYmxlZCA9IHRydWU7CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJmb3JjZSIpKQorCQlwY2llX3BtZV9mb3JjZV9lbmFibGUgPSB0cnVlOworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9tc2kiKSkKKwkJcGNpZV9wbWVfbXNpX2Rpc2FibGVkID0gdHJ1ZTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInBjaWVfcG1lPSIsIHBjaWVfcG1lX3NldHVwKTsKKworLyoqCisgKiBwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cCAtIEVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgY29udHJvbHMgdGhlIFBDSWUgUE1FLgorICogQHNydjogUENJZSBQTUUgcm9vdCBwb3J0IHNlcnZpY2UgdG8gdXNlIGZvciBjYXJyeWluZyBvdXQgdGhlIGNoZWNrLgorICoKKyAqIE5vdGlmeSB0aGUgcGxhdGZvcm0gdGhhdCB0aGUgbmF0aXZlIFBDSWUgUE1FIGlzIGdvaW5nIHRvIGJlIHVzZWQgYW5kIHJldHVybgorICogJ3RydWUnIGlmIHRoZSBjb250cm9sIG9mIHRoZSBQQ0llIFBNRSByZWdpc3RlcnMgaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUKKyAqIHBsYXRmb3JtLgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlpZiAoIXBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzcnYpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gcGNpZV9wbWVfZm9yY2VfZW5hYmxlOworfQorCitzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHBjaWVfZGV2aWNlICpzcnY7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJYm9vbCBub2lycTsgLyogRG9uJ3QgZW5hYmxlIHRoZSBQTUUgaW50ZXJydXB0IHVzZWQgYnkgdGhpcyBzZXJ2aWNlLiAqLworfTsKKworLyoqCisgKiBwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlIC0gRW5hYmxlL2Rpc2FibGUgUENJZSBQTUUgaW50ZXJydXB0IGdlbmVyYXRpb24uCisgKiBAZGV2OiBQQ0llIHJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IuCisgKiBAZW5hYmxlOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWludCBydGN0bF9wb3M7CisJdTE2IHJ0Y3RsOworCisJcnRjdGxfcG9zID0gcGNpX3BjaWVfY2FwKGRldikgKyBQQ0lfRVhQX1JUQ1RMOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBydGN0bF9wb3MsICZydGN0bCk7CisJaWYgKGVuYWJsZSkKKwkJcnRjdGwgfD0gUENJX0VYUF9SVENUTF9QTUVJRTsKKwllbHNlCisJCXJ0Y3RsICY9IH5QQ0lfRVhQX1JUQ1RMX1BNRUlFOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHJ0Y3RsX3BvcywgcnRjdGwpOworfQorCisvKioKKyAqIHBjaWVfcG1lX2NsZWFyX3N0YXR1cyAtIENsZWFyIHJvb3QgcG9ydCBQTUUgaW50ZXJydXB0IHN0YXR1cy4KKyAqIEBkZXY6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3Rvci4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfY2xlYXJfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAoZGV2KSArIFBDSV9FWFBfUlRTVEE7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBydHN0YV9wb3MsICZydHN0YSk7CisJcnRzdGEgfD0gUENJX0VYUF9SVFNUQV9QTUU7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJ0c3RhX3BvcywgcnRzdGEpOworfQorCisvKioKKyAqIHBjaWVfcG1lX3dhbGtfYnVzIC0gU2NhbiBhIFBDSSBidXMgZm9yIGRldmljZXMgYXNzZXJ0aW5nIFBNRSMuCisgKiBAYnVzOiBQQ0kgYnVzIHRvIHNjYW4uCisgKgorICogU2NhbiBnaXZlbiBQQ0kgYnVzIGFuZCBhbGwgYnVzZXMgdW5kZXIgaXQgZm9yIGRldmljZXMgYXNzZXJ0aW5nIFBNRSMuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX3dhbGtfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlib29sIHJldCA9IGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCS8qIFNraXAgUENJZSBkZXZpY2VzIGluIGNhc2Ugd2Ugc3RhcnRlZCBmcm9tIGEgcm9vdCBwb3J0LiAqLworCQlpZiAoIXBjaV9pc19wY2llKGRldikgJiYgcGNpX2NoZWNrX3BtZV9zdGF0dXMoZGV2KSkgeworCQkJcG1fcmVxdWVzdF9yZXN1bWUoJmRldi0+ZGV2KTsKKwkJCXJldCA9IHRydWU7CisJCX0KKworCQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSAmJiBwY2llX3BtZV93YWxrX2J1cyhkZXYtPnN1Ym9yZGluYXRlKSkKKwkJCXJldCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3BtZV9mcm9tX3BjaV9icmlkZ2UgLSBDaGVjayBpZiBQQ0llLVBDSSBicmlkZ2UgZ2VuZXJhdGVkIGEgUE1FLgorICogQGJ1czogU2Vjb25kYXJ5IGJ1cyBvZiB0aGUgYnJpZGdlLgorICogQGRldmZuOiBEZXZpY2UvZnVuY3Rpb24gbnVtYmVyIHRvIGNoZWNrLgorICoKKyAqIFBNRSBmcm9tIFBDSSBkZXZpY2VzIHVuZGVyIGEgUENJZS1QQ0kgYnJpZGdlIG1heSBiZSBjb252ZXJ0ZWQgdG8gYW4gaW4tYmFuZAorICogUENJZSBQTUUgbWVzc2FnZS4gIEluIHN1Y2ggdGhhdCBjYXNlIHRoZSBicmlkZ2Ugc2hvdWxkIHVzZSB0aGUgUmVxdWVzdGVyIElECisgKiBvZiBkZXZpY2UvZnVuY3Rpb24gbnVtYmVyIDAgb24gaXRzIHNlY29uZGFyeSBidXMuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1OCBkZXZmbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWlmIChkZXZmbikKKwkJcmV0dXJuIGZhbHNlOworCisJZGV2ID0gcGNpX2Rldl9nZXQoYnVzLT5zZWxmKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBjaV9pc19wY2llKGRldikgJiYgZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1BDSV9CUklER0UpIHsKKwkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCWlmIChwY2llX3BtZV93YWxrX2J1cyhidXMpKQorCQkJZm91bmQgPSB0cnVlOworCQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJfQorCisJcGNpX2Rldl9wdXQoZGV2KTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogcGNpZV9wbWVfaGFuZGxlX3JlcXVlc3QgLSBGaW5kIGRldmljZSB0aGF0IGdlbmVyYXRlZCBQTUUgYW5kIGhhbmRsZSBpdC4KKyAqIEBwb3J0OiBSb290IHBvcnQgb3IgZXZlbnQgY29sbGVjdG9yIHRoYXQgZ2VuZXJhdGVkIHRoZSBQTUUgaW50ZXJydXB0LgorICogQHJlcV9pZDogUENJZSBSZXF1ZXN0ZXIgSUQgb2YgdGhlIGRldmljZSB0aGF0IGdlbmVyYXRlZCB0aGUgUE1FLgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNpX2RldiAqcG9ydCwgdTE2IHJlcV9pZCkKK3sKKwl1OCBidXNuciA9IHJlcV9pZCA+PiA4LCBkZXZmbiA9IHJlcV9pZCAmIDB4ZmY7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCS8qIEZpcnN0LCBjaGVjayBpZiB0aGUgUE1FIGlzIGZyb20gdGhlIHJvb3QgcG9ydCBpdHNlbGYuICovCisJaWYgKHBvcnQtPmRldmZuID09IGRldmZuICYmIHBvcnQtPmJ1cy0+bnVtYmVyID09IGJ1c25yKSB7CisJCWlmIChwY2lfY2hlY2tfcG1lX3N0YXR1cyhwb3J0KSkgeworCQkJcG1fcmVxdWVzdF9yZXN1bWUoJnBvcnQtPmRldik7CisJCQlmb3VuZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQXBwYXJlbnRseSwgdGhlIHJvb3QgcG9ydCBnZW5lcmF0ZWQgdGhlIFBNRSBvbiBiZWhhbGYKKwkJCSAqIG9mIGEgbm9uLVBDSWUgZGV2aWNlIGRvd25zdHJlYW0uICBJZiB0aGlzIGlzIGRvbmUgYnkKKwkJCSAqIGEgcm9vdCBwb3J0LCB0aGUgUmVxdWVzdGVyIElEIGZpZWxkIGluIGl0cyBzdGF0dXMKKwkJCSAqIHJlZ2lzdGVyIG1heSBjb250YWluIGVpdGhlciB0aGUgcm9vdCBwb3J0J3MsIG9yIHRoZQorCQkJICogc291cmNlIGRldmljZSdzIGluZm9ybWF0aW9uIChQQ0kgRXhwcmVzcyBCYXNlCisJCQkgKiBTcGVjaWZpY2F0aW9uLCBSZXYuIDIuMCwgU2VjdGlvbiA2LjEuOSkuCisJCQkgKi8KKwkJCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOworCQkJZm91bmQgPSBwY2llX3BtZV93YWxrX2J1cyhwb3J0LT5zdWJvcmRpbmF0ZSk7CisJCQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogU2Vjb25kLCBmaW5kIHRoZSBidXMgdGhlIHNvdXJjZSBkZXZpY2UgaXMgb24uICovCisJYnVzID0gcGNpX2ZpbmRfYnVzKHBjaV9kb21haW5fbnIocG9ydC0+YnVzKSwgYnVzbnIpOworCWlmICghYnVzKQorCQlnb3RvIG91dDsKKworCS8qIE5leHQsIGNoZWNrIGlmIHRoZSBQTUUgaXMgZnJvbSBhIFBDSWUtUENJIGJyaWRnZS4gKi8KKwlmb3VuZCA9IHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShidXMsIGRldmZuKTsKKwlpZiAoZm91bmQpCisJCWdvdG8gb3V0OworCisJLyogRmluYWxseSwgdHJ5IHRvIGZpbmQgdGhlIFBNRSBzb3VyY2Ugb24gdGhlIGJ1cy4gKi8KKwlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJcGNpX2Rldl9nZXQoZGV2KTsKKwkJaWYgKGRldi0+ZGV2Zm4gPT0gZGV2Zm4pIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCXBjaV9kZXZfcHV0KGRldik7CisJfQorCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKworCWlmIChmb3VuZCkgeworCQkvKiBUaGUgZGV2aWNlIGlzIHRoZXJlLCBidXQgd2UgaGF2ZSB0byBjaGVjayBpdHMgUE1FIHN0YXR1cy4gKi8KKwkJZm91bmQgPSBwY2lfY2hlY2tfcG1lX3N0YXR1cyhkZXYpOworCQlpZiAoZm91bmQpCisJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmZGV2LT5kZXYpOworCQlwY2lfZGV2X3B1dChkZXYpOworCX0gZWxzZSBpZiAoZGV2Zm4pIHsKKwkJLyoKKwkJICogVGhlIGRldmljZSBpcyBub3QgdGhlcmUsIGJ1dCB3ZSBjYW4gc3RpbGwgdHJ5IHRvIHJlY292ZXIgYnkKKwkJICogYXNzdW1pbmcgdGhhdCB0aGUgUE1FIHdhcyByZXBvcnRlZCBieSBhIFBDSWUtUENJIGJyaWRnZSB0aGF0CisJCSAqIHVzZWQgZGV2Zm4gZGlmZmVyZW50IGZyb20gemVyby4KKwkJICovCisJCWRldl9kYmcoJnBvcnQtPmRldiwgIlBNRSBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGZvciAiCisJCQkibm9uLWV4aXN0ZW50IGRldmljZSAlMDJ4OiUwMnguJWRcbiIsCisJCQlidXNuciwgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOworCQlmb3VuZCA9IHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShidXMsIDApOworCX0KKworIG91dDoKKwlpZiAoIWZvdW5kKQorCQlkZXZfZGJnKCZwb3J0LT5kZXYsICJTcHVyaW91cyBuYXRpdmUgUE1FIGludGVycnVwdCFcbiIpOworfQorCisvKioKKyAqIHBjaWVfcG1lX3dvcmtfZm4gLSBXb3JrIGhhbmRsZXIgZm9yIFBDSWUgUE1FIGludGVycnVwdC4KKyAqIEB3b3JrOiBXb3JrIHN0cnVjdHVyZSBnaXZpbmcgYWNjZXNzIHRvIHNlcnZpY2UgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSAqZGF0YSA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSwgd29yayk7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBkYXRhLT5zcnYtPnBvcnQ7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAocG9ydCkgKyBQQ0lfRVhQX1JUU1RBOworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlmb3IgKDs7KSB7CisJCWlmIChkYXRhLT5ub2lycSkKKwkJCWJyZWFrOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwb3J0LCBydHN0YV9wb3MsICZydHN0YSk7CisJCWlmIChydHN0YSAmIFBDSV9FWFBfUlRTVEFfUE1FKSB7CisJCQkvKgorCQkJICogQ2xlYXIgUE1FIHN0YXR1cyBvZiB0aGUgcG9ydC4gIElmIHRoZXJlIGFyZSBvdGhlcgorCQkJICogcGVuZGluZyBQTUVzLCB0aGUgc3RhdHVzIHdpbGwgYmUgc2V0IGFnYWluLgorCQkJICovCisJCQlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJCQlwY2llX3BtZV9oYW5kbGVfcmVxdWVzdChwb3J0LCBydHN0YSAmIDB4ZmZmZik7CisJCQlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBObyBuZWVkIHRvIGxvb3AgaWYgdGhlcmUgYXJlIG5vIG1vcmUgUE1FcyBwZW5kaW5nLiAqLworCQlpZiAoIShydHN0YSAmIFBDSV9FWFBfUlRTVEFfUEVORElORykpCisJCQlicmVhazsKKworCQlzcGluX3VubG9ja19pcnEoJmRhdGEtPmxvY2spOworCQljcHVfcmVsYXgoKTsKKwkJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJfQorCisJaWYgKCFkYXRhLT5ub2lycSkKKwkJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7Cit9CisKKy8qKgorICogcGNpZV9wbWVfaXJxIC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIFBDSWUgcm9vdCBwb3J0IFBNRSBpbnRlcnJ1cHQuCisgKiBAaXJxOiBJbnRlcnJ1cHQgdmVjdG9yLgorICogQGNvbnRleHQ6IEludGVycnVwdCBjb250ZXh0IHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwY2llX3BtZV9pcnEoaW50IGlycSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydDsKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhOworCWludCBydHN0YV9wb3M7CisJdTMyIHJ0c3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb3J0ID0gKChzdHJ1Y3QgcGNpZV9kZXZpY2UgKiljb250ZXh0KS0+cG9ydDsKKwlkYXRhID0gZ2V0X3NlcnZpY2VfZGF0YSgoc3RydWN0IHBjaWVfZGV2aWNlICopY29udGV4dCk7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAocG9ydCkgKyBQQ0lfRVhQX1JUU1RBOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocG9ydCwgcnRzdGFfcG9zLCAmcnRzdGEpOworCisJaWYgKCEocnRzdGEgJiBQQ0lfRVhQX1JUU1RBX1BNRSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCBmYWxzZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCisJLyogV2UgZG9uJ3QgdXNlIHBtX3dxLCBiZWNhdXNlIGl0J3MgZnJlZXphYmxlLiAqLworCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHBjaWVfcG1lX3NldF9uYXRpdmUgLSBTZXQgdGhlIFBNRSBpbnRlcnJ1cHQgZmxhZyBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogUENJIGRldmljZSB0byBoYW5kbGUuCisgKiBAaWduOiBJZ25vcmVkLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3NldF9uYXRpdmUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqaWduKQoreworCWRldl9pbmZvKCZkZXYtPmRldiwgIlNpZ25hbGluZyBQTUUgdGhyb3VnaCBQQ0llIFBNRSBpbnRlcnJ1cHRcbiIpOworCisJZGV2aWNlX3NldF9ydW5fd2FrZSgmZGV2LT5kZXYsIHRydWUpOworCWRldi0+cG1lX2ludGVycnVwdCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfbWFya19kZXZpY2VzIC0gU2V0IHRoZSBQTUUgaW50ZXJydXB0IGZsYWcgZm9yIGRldmljZXMgYmVsb3cgYSBwb3J0LgorICogQHBvcnQ6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3RvciB0byBoYW5kbGUuCisgKgorICogRm9yIGVhY2ggZGV2aWNlIGJlbG93IGdpdmVuIHJvb3QgcG9ydCwgaW5jbHVkaW5nIHRoZSBwb3J0IGl0c2VsZiAob3IgZm9yIGVhY2gKKyAqIHJvb3QgY29tcGxleCBpbnRlZ3JhdGVkIGVuZHBvaW50IGlmIEBwb3J0IGlzIGEgcm9vdCBjb21wbGV4IGV2ZW50IGNvbGxlY3RvcikKKyAqIHNldCB0aGUgZmxhZyBpbmRpY2F0aW5nIHRoYXQgaXQgY2FuIHNpZ25hbCBydW4tdGltZSB3YWtlLXVwIGV2ZW50cyB2aWEgUENJZQorICogUE1FIGludGVycnVwdHMuCisgKi8KK3N0YXRpYyB2b2lkIHBjaWVfcG1lX21hcmtfZGV2aWNlcyhzdHJ1Y3QgcGNpX2RldiAqcG9ydCkKK3sKKwlwY2llX3BtZV9zZXRfbmF0aXZlKHBvcnQsIE5VTEwpOworCWlmIChwb3J0LT5zdWJvcmRpbmF0ZSkgeworCQlwY2lfd2Fsa19idXMocG9ydC0+c3Vib3JkaW5hdGUsIHBjaWVfcG1lX3NldF9uYXRpdmUsIE5VTEwpOworCX0gZWxzZSB7CisJCXN0cnVjdCBwY2lfYnVzICpidXMgPSBwb3J0LT5idXM7CisJCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwkJLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHJvb3QgcG9ydCBldmVudCBjb2xsZWN0b3IuICovCisJCWlmIChwb3J0LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX1JDX0VDIHx8ICFidXMpCisJCQlyZXR1cm47CisKKwkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJCWlmIChwY2lfaXNfcGNpZShkZXYpCisJCQkgICAgJiYgZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1JDX0VORCkKKwkJCQlwY2llX3BtZV9zZXRfbmF0aXZlKGRldiwgTlVMTCk7CisJCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKwl9Cit9CisKKy8qKgorICogcGNpZV9wbWVfcHJvYmUgLSBJbml0aWFsaXplIFBDSWUgUE1FIHNlcnZpY2UgZm9yIGdpdmVuIHJvb3QgcG9ydC4KKyAqIEBzcnY6IFBDSWUgc2VydmljZSB0byBpbml0aWFsaXplLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3Byb2JlKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwb3J0OworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJldDsKKworCWlmICghcGNpZV9wbWVfcGxhdGZvcm1fc2V0dXAoc3J2KSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCUlOSVRfV09SSygmZGF0YS0+d29yaywgcGNpZV9wbWVfd29ya19mbik7CisJZGF0YS0+c3J2ID0gc3J2OworCXNldF9zZXJ2aWNlX2RhdGEoc3J2LCBkYXRhKTsKKworCXBvcnQgPSBzcnYtPnBvcnQ7CisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCBmYWxzZSk7CisJcGNpZV9wbWVfY2xlYXJfc3RhdHVzKHBvcnQpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoc3J2LT5pcnEsIHBjaWVfcG1lX2lycSwgSVJRRl9TSEFSRUQsICJQQ0llIFBNRSIsIHNydik7CisJaWYgKHJldCkgeworCQlrZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQlwY2llX3BtZV9tYXJrX2RldmljZXMocG9ydCk7CisJCXBjaWVfcG1lX2ludGVycnVwdF9lbmFibGUocG9ydCwgdHJ1ZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3BtZV9zdXNwZW5kIC0gU3VzcGVuZCBQQ0llIFBNRSBzZXJ2aWNlIGRldmljZS4KKyAqIEBzcnY6IFBDSWUgc2VydmljZSBkZXZpY2UgdG8gc3VzcGVuZC4KKyAqLworc3RhdGljIGludCBwY2llX3BtZV9zdXNwZW5kKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGEgPSBnZXRfc2VydmljZV9kYXRhKHNydik7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBzcnYtPnBvcnQ7CisKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKwlwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHBvcnQsIGZhbHNlKTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisJZGF0YS0+bm9pcnEgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlzeW5jaHJvbml6ZV9pcnEoc3J2LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfcmVzdW1lIC0gUmVzdW1lIFBDSWUgUE1FIHNlcnZpY2UgZGV2aWNlLgorICogQHNydiAtIFBDSWUgc2VydmljZSBkZXZpY2UgdG8gcmVzdW1lLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3Jlc3VtZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhID0gZ2V0X3NlcnZpY2VfZGF0YShzcnYpOworCXN0cnVjdCBwY2lfZGV2ICpwb3J0ID0gc3J2LT5wb3J0OworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJZGF0YS0+bm9pcnEgPSBmYWxzZTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKwlzcGluX3VubG9ja19pcnEoJmRhdGEtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfcmVtb3ZlIC0gUHJlcGFyZSBQQ0llIFBNRSBzZXJ2aWNlIGRldmljZSBmb3IgcmVtb3ZhbC4KKyAqIEBzcnYgLSBQQ0llIHNlcnZpY2UgZGV2aWNlIHRvIHJlc3VtZS4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfcmVtb3ZlKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXBjaWVfcG1lX3N1c3BlbmQoc3J2KTsKKwlmcmVlX2lycShzcnYtPmlycSwgc3J2KTsKKwlrZnJlZShnZXRfc2VydmljZV9kYXRhKHNydikpOworfQorCitzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBwY2llX3BtZV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInBjaWVfcG1lIiwKKwkucG9ydF90eXBlIAk9IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQsCisJLnNlcnZpY2UgCT0gUENJRV9QT1JUX1NFUlZJQ0VfUE1FLAorCisJLnByb2JlCQk9IHBjaWVfcG1lX3Byb2JlLAorCS5zdXNwZW5kCT0gcGNpZV9wbWVfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjaWVfcG1lX3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHBjaWVfcG1lX3JlbW92ZSwKK307CisKKy8qKgorICogcGNpZV9wbWVfc2VydmljZV9pbml0IC0gUmVnaXN0ZXIgdGhlIFBDSWUgUE1FIHNlcnZpY2UgZHJpdmVyLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwY2llX3BtZV9zZXJ2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wbWVfZGlzYWJsZWQgPworCQktRU5PREVWIDogcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJnBjaWVfcG1lX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBjaWVfcG1lX3NlcnZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5oIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBkMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaAorICoKKyAqIFBDSSBFeHByZXNzIFJvb3QgUG9ydCBQTUUgc2lnbmFsaW5nIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqLworCisjaWZuZGVmIF9QQ0lFX1BNRV9IXworI2RlZmluZSBfUENJRV9QTUVfSF8KKworc3RydWN0IHBjaWVfZGV2aWNlOworCisjaWZkZWYgQ09ORklHX0FDUEkKK2V4dGVybiBpbnQgcGNpZV9wbWVfYWNwaV9zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlyZXR1cm4gcGNpZV9wbWVfYWNwaV9zZXR1cChzcnYpOworfQorI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCitzdGF0aWMgaW5saW5lIGludCBwY2llX3BtZV9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IHBjaWVfZGV2aWNlICpzcnYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogIUNPTkZJR19BQ1BJICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWVfYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWVfYWNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYWIyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZV9hY3BpLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIFBDSWUgTmF0aXZlIFBNRSBzdXBwb3J0LCBBQ1BJLXJlbGF0ZWQgcGFydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFYyLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CisKKy8qKgorICogcGNpZV9wbWVfYWNwaV9zZXR1cCAtIFJlcXVlc3QgdGhlIEFDUEkgQklPUyB0byByZWxlYXNlIGNvbnRyb2wgb3ZlciBQQ0llIFBNRS4KKyAqIEBzcnYgLSBQQ0llIFBNRSBzZXJ2aWNlIGZvciBhIHJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IuCisgKgorICogSW52b2tlZCB3aGVuIHRoZSBQQ0llIGJ1cyB0eXBlIGxvYWRzIFBDSWUgUE1FIHNlcnZpY2UgZHJpdmVyLiAgVG8gYXZvaWQKKyAqIGNvbmZsaWN0IHdpdGggdGhlIEJJT1MgUENJZSBzdXBwb3J0IHJlcXVpcmVzIHRoZSBCSU9TIHRvIHlpZWxkIFBDSWUgUE1FCisgKiBjb250cm9sIHRvIHRoZSBrZXJuZWwuCisgKi8KK2ludCBwY2llX3BtZV9hY3BpX3NldHVwKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9GT1VORDsKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydCA9IHNydi0+cG9ydDsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IGVycm9yID0gMDsKKworCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlkZXZfaW5mbygmcG9ydC0+ZGV2LCAiUmVxdWVzdGluZyBjb250cm9sIG9mIFBDSWUgUE1FIGZyb20gQUNQSSBCSU9TXG4iKTsKKworCWhhbmRsZSA9IGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUocG9ydCk7CisJaWYgKCFoYW5kbGUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gYWNwaV9wY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwKKwkJCU9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTCB8CisJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJZGV2X2luZm8oJnBvcnQtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVjZWl2ZSBjb250cm9sIG9mIFBDSWUgUE1FIHNlcnZpY2U6ICVzXG4iLAorCQkJKHN0YXR1cyA9PSBBRV9TVVBQT1JUIHx8IHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpID8KKwkJCSJubyBfT1NDIHN1cHBvcnQiIDogIkFDUEkgX09TQyBmYWlsZWQiKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCX0KKworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKaW5kZXggYWFlYjlkMi4uODEzYTVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKQEAgLTMwLDQgKzMwLDIxIEBACiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpZV9wb3J0X2J1c191bnJlZ2lzdGVyKHZvaWQpOwogCisjaWZkZWYgQ09ORklHX1BDSUVfUE1FCitleHRlcm4gYm9vbCBwY2llX3BtZV9tc2lfZGlzYWJsZWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2llX3BtZV9kaXNhYmxlX21zaSh2b2lkKQoreworCXBjaWVfcG1lX21zaV9kaXNhYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3BtZV9ub19tc2kodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wbWVfbXNpX2Rpc2FibGVkOworfQorI2Vsc2UgLyogIUNPTkZJR19QQ0lFX1BNRSAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaWVfcG1lX2Rpc2FibGVfbXNpKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV9wbWVfbm9fbXNpKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYgLyogIUNPTkZJR19QQ0lFX1BNRSAqLworCiAjZW5kaWYgLyogX1BPUlREUlZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IGIxNzQxODguLmU3M2VmZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMTg2LDE2ICsxODYsMjQgQEAKICAqLwogc3RhdGljIGludCBpbml0X3NlcnZpY2VfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgKmlycXMsIGludCBtYXNrKQogewotCWludCBpLCBpcnE7CisJaW50IGksIGlycSA9IC0xOworCisJLyogV2UgaGF2ZSB0byB1c2UgSU5UeCBpZiBNU0kgY2Fubm90IGJlIHVzZWQgZm9yIFBDSWUgUE1FLiAqLworCWlmICgobWFzayAmIFBDSUVfUE9SVF9TRVJWSUNFX1BNRSkgJiYgcGNpZV9wbWVfbm9fbXNpKCkpIHsKKwkJaWYgKGRldi0+cGluKQorCQkJaXJxID0gZGV2LT5pcnE7CisJCWdvdG8gbm9fbXNpOworCX0KIAogCS8qIFRyeSB0byB1c2UgTVNJLVggaWYgc3VwcG9ydGVkICovCiAJaWYgKCFwY2llX3BvcnRfZW5hYmxlX21zaXgoZGV2LCBpcnFzLCBtYXNrKSkKIAkJcmV0dXJuIDA7CisKIAkvKiBXZSdyZSBub3QgZ29pbmcgdG8gdXNlIE1TSS1YLCBzbyB0cnkgTVNJIGFuZCBmYWxsIGJhY2sgdG8gSU5UeCAqLwotCWlycSA9IC0xOwogCWlmICghcGNpX2VuYWJsZV9tc2koZGV2KSB8fCBkZXYtPnBpbikKIAkJaXJxID0gZGV2LT5pcnE7CiAKKyBub19tc2k6CiAJZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykKIAkJaXJxc1tpXSA9IGlycTsKIAlpcnFzW1BDSUVfUE9SVF9TRVJWSUNFX1ZDX1NISUZUXSA9IC0xOwpAQCAtMjc3LDYgKzI4NSw3IEBACiAJCSAgICAgcGNpX25hbWUocGRldiksCiAJCSAgICAgZ2V0X2Rlc2NyaXB0b3JfaWQocGRldi0+cGNpZV90eXBlLCBzZXJ2aWNlKSk7CiAJZGV2aWNlLT5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZChkZXZpY2UpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKGRldmljZSk7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCAxM2M4OTcyLi4xMjdlOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CiAjaW5jbHVkZSA8bGludXgvYWVyLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKICNpbmNsdWRlICJwb3J0ZHJ2LmgiCiAjaW5jbHVkZSAiYWVyL2FlcmRydi5oIgpAQCAtMjczLDEwICsyNzQsMzYgQEAKIAkuZHJpdmVyLnBtIAk9IFBDSUVfUE9SVERSVl9QTV9PUFMsCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBkbWlfcGNpZV9wbWVfZGlzYWJsZV9tc2koY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJcHJfbm90aWNlKCIlcyBkZXRlY3RlZDogd2lsbCBub3QgdXNlIE1TSSBmb3IgUENJZSBQTUUgc2lnbmFsaW5nXG4iLAorCQkJZC0+aWRlbnQpOworCXBjaWVfcG1lX2Rpc2FibGVfbXNpKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIHBjaWVfcG9ydGRydl9kbWlfdGFibGVbXSA9IHsKKwkvKgorCSAqIEJveGVzIHRoYXQgc2hvdWxkIG5vdCB1c2UgTVNJIGZvciBQQ0llIFBNRSBzaWduYWxpbmcuCisJICovCisJeworCSAuY2FsbGJhY2sgPSBkbWlfcGNpZV9wbWVfZGlzYWJsZV9tc2ksCisJIC5pZGVudCA9ICJNU0kgV2luZCBVLTEwMCIsCisJIC5tYXRjaGVzID0geworCQkgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJICAgICAJCSJNSUNSTy1TVEFSIElOVEVSTkFUSU9OQUwgQ08uLCBMVEQiKSwKKwkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlUtMTAwIiksCisJCSAgICAgfSwKKwkgfSwKKwkge30KK307CisKIHN0YXRpYyBpbnQgX19pbml0IHBjaWVfcG9ydGRydl9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAorCWRtaV9jaGVja19zeXN0ZW0ocGNpZV9wb3J0ZHJ2X2RtaV90YWJsZSk7CisKIAlyZXR2YWwgPSBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0lFOiBidXNfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggOThmZmIyZC4uMmE5NDMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC04OSw2ICs4OSw3IEBACiAKIAlpZiAocGNpX2J1cy0+YnJpZGdlKQogCQlwdXRfZGV2aWNlKHBjaV9idXMtPmJyaWRnZSk7CisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKHBjaV9idXMpOwogCWtmcmVlKHBjaV9idXMpOwogfQogCkBAIC0yODEsMjYgKzI4MiwxMiBAQAogCX0KIH0KIAotdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX2Jhc2VzKHN0cnVjdCBwY2lfYnVzICpjaGlsZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfaW8oc3RydWN0IHBjaV9idXMgKmNoaWxkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKIAl1OCBpb19iYXNlX2xvLCBpb19saW1pdF9sbzsKLQl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKIAl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpOwotCi0JaWYgKHBjaV9pc19yb290X2J1cyhjaGlsZCkpCS8qIEl0J3MgYSBob3N0IGJ1cywgbm90aGluZyB0byByZWFkICovCi0JCXJldHVybjsKLQotCWRldl9pbmZvKCZkZXYtPmRldiwgIlBDSSBicmlkZ2UgdG8gW2J1cyAlMDJ4LSUwMnhdJXNcbiIsCi0JCSBjaGlsZC0+c2Vjb25kYXJ5LCBjaGlsZC0+c3Vib3JkaW5hdGUsCi0JCSBkZXYtPnRyYW5zcGFyZW50ID8gIiAoc3VidHJhY3RpdmUgZGVjb2RlKSI6ICIiKTsKLQotCWlmIChkZXYtPnRyYW5zcGFyZW50KSB7Ci0JCWZvcihpID0gMzsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKQotCQkJY2hpbGQtPnJlc291cmNlW2ldID0gY2hpbGQtPnBhcmVudC0+cmVzb3VyY2VbaSAtIDNdOwotCX0KIAogCXJlcyA9IGNoaWxkLT5yZXNvdXJjZVswXTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JT19CQVNFLCAmaW9fYmFzZV9sbyk7CkBAIC0zMTYsMjYgKzMwMyw1MCBAQAogCQlsaW1pdCB8PSAoaW9fbGltaXRfaGkgPDwgMTYpOwogCX0KIAotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKGlvX2Jhc2VfbG8gJiBQQ0lfSU9fUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfSU87CiAJCWlmICghcmVzLT5zdGFydCkKIAkJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlpZiAoIXJlcy0+ZW5kKQogCQkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkgIiAgYnJpZGdlIHdpbmRvdyBbaW8gICUwNGx4IC0gJTA0bHhdIHJlZyByZWFkaW5nXG4iLAorCQkJCSBiYXNlLCBsaW1pdCk7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX21taW8oc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzFdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX01FTU9SWV9CQVNFLCAmbWVtX2Jhc2VfbG8pOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX01FTU9SWV9MSU1JVCwgJm1lbV9saW1pdF9sbyk7CiAJYmFzZSA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfTUFTSykgPDwgMTY7CiAJbGltaXQgPSAobWVtX2xpbWl0X2xvICYgUENJX01FTU9SWV9SQU5HRV9NQVNLKSA8PCAxNjsKLQlpZiAoYmFzZSA8PSBsaW1pdCkgeworCWlmIChiYXNlICYmIGJhc2UgPD0gbGltaXQpIHsKIAkJcmVzLT5mbGFncyA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfTUVNOwogCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmZmY7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCSIgIGJyaWRnZSB3aW5kb3cgW21lbSAweCUwOGx4IC0gMHglMDhseF0gcmVnIHJlYWRpbmdcbiIsCisJCQkJCSBiYXNlLCBsaW1pdCArIDB4ZmZmZmYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9yZWFkX2JyaWRnZV9tbWlvX3ByZWYoc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzJdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1BSRUZfTUVNT1JZX0JBU0UsICZtZW1fYmFzZV9sbyk7CkBAIC0zNjYsNyArMzc3LDcgQEAKICNlbmRpZgogCQl9CiAJfQotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKG1lbV9iYXNlX2xvICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSB8CiAJCQkJCSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAJCWlmIChyZXMtPmZsYWdzICYgUENJX1BSRUZfUkFOR0VfVFlQRV82NCkKQEAgLTM3NCw2ICszODUsNDQgQEAKIAkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZmZmOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCSAgICAgIiAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4JTA4bHggLSAlMDhseCBwcmVmXSByZWcgcmVhZGluZ1xuIiwKKwkJCQkJIGJhc2UsIGxpbWl0ICsgMHhmZmZmZik7CisJfQorfQorCit2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKKworCWlmIChwY2lfaXNfcm9vdF9idXMoY2hpbGQpKQkvKiBJdCdzIGEgaG9zdCBidXMsIG5vdGhpbmcgdG8gcmVhZCAqLworCQlyZXR1cm47CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XSVzXG4iLAorCQkgY2hpbGQtPnNlY29uZGFyeSwgY2hpbGQtPnN1Ym9yZGluYXRlLAorCQkgZGV2LT50cmFuc3BhcmVudCA/ICIgKHN1YnRyYWN0aXZlIGRlY29kZSkiIDogIiIpOworCisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGNoaWxkKTsKKwlmb3IgKGkgPSAwOyBpIDwgUENJX0JSSURHRV9SRVNPVVJDRV9OVU07IGkrKykKKwkJY2hpbGQtPnJlc291cmNlW2ldID0gJmRldi0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07CisKKwlwY2lfcmVhZF9icmlkZ2VfaW8oY2hpbGQpOworCXBjaV9yZWFkX2JyaWRnZV9tbWlvKGNoaWxkKTsKKwlwY2lfcmVhZF9icmlkZ2VfbW1pb19wcmVmKGNoaWxkKTsKKworCWlmIChkZXYtPnRyYW5zcGFyZW50KSB7CisJCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoY2hpbGQtPnBhcmVudCwgcmVzLCBpKSB7CisJCQlpZiAocmVzKSB7CisJCQkJcGNpX2J1c19hZGRfcmVzb3VyY2UoY2hpbGQsIHJlcywKKwkJCQkJCSAgICAgUENJX1NVQlRSQUNUSVZFX0RFQ09ERSk7CisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJCSAgICIgIGJyaWRnZSB3aW5kb3cgJXBSIChzdWJ0cmFjdGl2ZSBkZWNvZGUpXG4iLAorCQkJCQkgICByZXMpOworCQkJfQorCQl9CiAJfQogfQogCkBAIC0zODcsMTAgKzQzNiwxNDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJmItPmNoaWxkcmVuKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmItPmRldmljZXMpOwogCQlJTklUX0xJU1RfSEVBRCgmYi0+c2xvdHMpOworCQlJTklUX0xJU1RfSEVBRCgmYi0+cmVzb3VyY2VzKTsKKwkJYi0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOworCQliLT5jdXJfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJfQogCXJldHVybiBiOwogfQogCitzdGF0aWMgdW5zaWduZWQgY2hhciBwY2l4X2J1c19zcGVlZFtdID0geworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogMCAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYLAkJLyogMSAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWCwJCS8qIDIgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVgsCQkvKiAzICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA0ICovCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDLAkvKiA1ICovCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQywJLyogNiAqLworCVBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0MsCS8qIDcgKi8KKwlQQ0lfU1BFRURfVU5LTk9XTiwJCS8qIDggKi8KKwlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYsCS8qIDkgKi8KKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2LAkvKiBBICovCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NiwJLyogQiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQyAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMywJLyogRCAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzMsCS8qIEUgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCS8qIEYgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBjaWVfbGlua19zcGVlZFtdID0geworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogMCAqLworCVBDSUVfU1BFRURfMl81R1QsCQkvKiAxICovCisJUENJRV9TUEVFRF81XzBHVCwJCS8qIDIgKi8KKwlQQ0lFX1NQRUVEXzhfMEdULAkJLyogMyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogRCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogRSAqLworCVBDSV9TUEVFRF9VTktOT1dOCQkvKiBGICovCit9OworCit2b2lkIHBjaWVfdXBkYXRlX2xpbmtfc3BlZWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdTE2IGxpbmtzdGEpCit7CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gcGNpZV9saW5rX3NwZWVkW2xpbmtzdGEgJiAweGZdOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpZV91cGRhdGVfbGlua19zcGVlZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFncF9zcGVlZHNbXSA9IHsKKwlBR1BfVU5LTk9XTiwKKwlBR1BfMVgsCisJQUdQXzJYLAorCUFHUF80WCwKKwlBR1BfOFgKK307CisKK3N0YXRpYyBlbnVtIHBjaV9idXNfc3BlZWQgYWdwX3NwZWVkKGludCBhZ3AzLCBpbnQgYWdwc3RhdCkKK3sKKwlpbnQgaW5kZXggPSAwOworCisJaWYgKGFncHN0YXQgJiA0KQorCQlpbmRleCA9IDM7CisJZWxzZSBpZiAoYWdwc3RhdCAmIDIpCisJCWluZGV4ID0gMjsKKwllbHNlIGlmIChhZ3BzdGF0ICYgMSkKKwkJaW5kZXggPSAxOworCWVsc2UKKwkJZ290byBvdXQ7CisJCisJaWYgKGFncDMpIHsKKwkJaW5kZXggKz0gMjsKKwkJaWYgKGluZGV4ID09IDUpCisJCQlpbmRleCA9IDA7CisJfQorCisgb3V0OgorCXJldHVybiBhZ3Bfc3BlZWRzW2luZGV4XTsKK30KKworCitzdGF0aWMgdm9pZCBwY2lfc2V0X2J1c19zcGVlZChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0FHUCk7CisJaWYgKCFwb3MpCisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0FHUDMpOworCWlmIChwb3MpIHsKKwkJdTMyIGFncHN0YXQsIGFncGNtZDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfQUdQX1NUQVRVUywgJmFncHN0YXQpOworCQlidXMtPm1heF9idXNfc3BlZWQgPSBhZ3Bfc3BlZWQoYWdwc3RhdCAmIDgsIGFncHN0YXQgJiA3KTsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfQUdQX0NPTU1BTkQsICZhZ3BjbWQpOworCQlidXMtPmN1cl9idXNfc3BlZWQgPSBhZ3Bfc3BlZWQoYWdwc3RhdCAmIDgsIGFncGNtZCAmIDcpOworCX0KKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX1BDSVgpOworCWlmIChwb3MpIHsKKwkJdTE2IHN0YXR1czsKKwkJZW51bSBwY2lfYnVzX3NwZWVkIG1heDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlLCBwb3MgKyAyLCAmc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CisJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIDB4NDAwMCkgeworCQkJbWF4ID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NjsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiAweDAwMDIpIHsKKwkJCWlmICgoKHN0YXR1cyA+PiAxMikgJiAweDMpID09IDIpIHsKKwkJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOworCQkJfSBlbHNlIHsKKwkJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCQl9CisJCX0gZWxzZSB7CisJCQltYXggPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJfQorCisJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IG1heDsKKwkJYnVzLT5jdXJfYnVzX3NwZWVkID0gcGNpeF9idXNfc3BlZWRbKHN0YXR1cyA+PiA2KSAmIDB4Zl07CisKKwkJcmV0dXJuOworCX0KKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKHBvcykgeworCQl1MzIgbGlua2NhcDsKKwkJdTE2IGxpbmtzdGE7CisKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9MTktDQVAsICZsaW5rY2FwKTsKKwkJYnVzLT5tYXhfYnVzX3NwZWVkID0gcGNpZV9saW5rX3NwZWVkW2xpbmtjYXAgJiAweGZdOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9MTktTVEEsICZsaW5rc3RhKTsKKwkJcGNpZV91cGRhdGVfbGlua19zcGVlZChidXMsIGxpbmtzdGEpOworCX0KK30KKworCiBzdGF0aWMgc3RydWN0IHBjaV9idXMgKnBjaV9hbGxvY19jaGlsZF9idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwKIAkJCQkJICAgc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgaW50IGJ1c25yKQogewpAQCAtNDMwLDYgKzYxNiw4IEBACiAJY2hpbGQtPnNlbGYgPSBicmlkZ2U7CiAJY2hpbGQtPmJyaWRnZSA9IGdldF9kZXZpY2UoJmJyaWRnZS0+ZGV2KTsKIAorCXBjaV9zZXRfYnVzX3NwZWVkKGNoaWxkKTsKKwogCS8qIFNldCB1cCBkZWZhdWx0IHJlc291cmNlIHBvaW50ZXJzIGFuZCBuYW1lcy4uICovCiAJZm9yIChpID0gMDsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBpKyspIHsKIAkJY2hpbGQtPnJlc291cmNlW2ldID0gJmJyaWRnZS0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07CkBAIC02ODEsNyArODY5LDcgQEAKIAlkZXYtPmlycSA9IGlycTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3BjaWVfcG9ydF90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQordm9pZCBzZXRfcGNpZV9wb3J0X3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJaW50IHBvczsKIAl1MTYgcmVnMTY7CkBAIC02OTUsNyArODgzLDcgQEAKIAlwZGV2LT5wY2llX3R5cGUgPSAocmVnMTYgJiBQQ0lfRVhQX0ZMQUdTX1RZUEUpID4+IDQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9wY2llX2hvdHBsdWdfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQordm9pZCBzZXRfcGNpZV9ob3RwbHVnX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlpbnQgcG9zOwogCXUxNiByZWcxNjsKQEAgLTEwODEsNiArMTI2OSw0NSBAQAogfQogRVhQT1JUX1NZTUJPTChwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKTsKIAorc3RhdGljIHVuc2lnbmVkIG5leHRfYXJpX2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGZuKQoreworCXUxNiBjYXA7CisJdW5zaWduZWQgcG9zLCBuZXh0X2ZuOworCisJaWYgKCFkZXYpCisJCXJldHVybiAwOworCisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9BUkkpOworCWlmICghcG9zKQorCQlyZXR1cm4gMDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIDQsICZjYXApOworCW5leHRfZm4gPSBjYXAgPj4gODsKKwlpZiAobmV4dF9mbiA8PSBmbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG5leHRfZm47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuZXh0X3RyYWRfZm4oc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgZm4pCit7CisJcmV0dXJuIChmbiArIDEpICUgODsKK30KKworc3RhdGljIHVuc2lnbmVkIG5vX25leHRfZm4oc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgZm4pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb25seV9vbmVfY2hpbGQoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGFyZW50ID0gYnVzLT5zZWxmOworCWlmICghcGFyZW50IHx8ICFwY2lfaXNfcGNpZShwYXJlbnQpKQorCQlyZXR1cm4gMDsKKwlpZiAocGFyZW50LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCB8fAorCSAgICBwYXJlbnQtPnBjaWVfdHlwZSA9PSBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogcGNpX3NjYW5fc2xvdCAtIHNjYW4gYSBQQ0kgc2xvdCBvbiBhIGJ1cyBmb3IgZGV2aWNlcy4KICAqIEBidXM6IFBDSSBidXMgdG8gc2NhbgpAQCAtMTA5NCwyMSArMTMyMSwzMCBAQAogICovCiBpbnQgcGNpX3NjYW5fc2xvdChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7Ci0JaW50IGZuLCBuciA9IDA7CisJdW5zaWduZWQgZm4sIG5yID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXVuc2lnbmVkICgqbmV4dF9mbikoc3RydWN0IHBjaV9kZXYgKiwgdW5zaWduZWQpID0gbm9fbmV4dF9mbjsKKworCWlmIChvbmx5X29uZV9jaGlsZChidXMpICYmIChkZXZmbiA+IDApKQorCQlyZXR1cm4gMDsgLyogQWxyZWFkeSBzY2FubmVkIHRoZSBlbnRpcmUgc2xvdCAqLwogCiAJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuKTsKLQlpZiAoZGV2ICYmICFkZXYtPmlzX2FkZGVkKQkvKiBuZXcgZGV2aWNlPyAqLworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKwlpZiAoIWRldi0+aXNfYWRkZWQpCiAJCW5yKys7CiAKLQlpZiAoZGV2ICYmIGRldi0+bXVsdGlmdW5jdGlvbikgewotCQlmb3IgKGZuID0gMTsgZm4gPCA4OyBmbisrKSB7Ci0JCQlkZXYgPSBwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGJ1cywgZGV2Zm4gKyBmbik7Ci0JCQlpZiAoZGV2KSB7Ci0JCQkJaWYgKCFkZXYtPmlzX2FkZGVkKQotCQkJCQlucisrOwotCQkJCWRldi0+bXVsdGlmdW5jdGlvbiA9IDE7Ci0JCQl9CisJaWYgKHBjaV9hcmlfZW5hYmxlZChidXMpKQorCQluZXh0X2ZuID0gbmV4dF9hcmlfZm47CisJZWxzZSBpZiAoZGV2LT5tdWx0aWZ1bmN0aW9uKQorCQluZXh0X2ZuID0gbmV4dF90cmFkX2ZuOworCisJZm9yIChmbiA9IG5leHRfZm4oZGV2LCAwKTsgZm4gPiAwOyBmbiA9IG5leHRfZm4oZGV2LCBmbikpIHsKKwkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuICsgZm4pOworCQlpZiAoZGV2KSB7CisJCQlpZiAoIWRldi0+aXNfYWRkZWQpCisJCQkJbnIrKzsKKwkJCWRldi0+bXVsdGlmdW5jdGlvbiA9IDE7CiAJCX0KIAl9CiAKQEAgLTEyMDAsNiArMTQzNiw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGRldl9yZWdfZXJyOwogCWItPmJyaWRnZSA9IGdldF9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoYi0+YnJpZGdlKTsKIAogCWlmICghcGFyZW50KQogCQlzZXRfZGV2X25vZGUoYi0+YnJpZGdlLCBwY2lidXNfdG9fbm9kZShiKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGM3NDY5NDMuLjc5MGViNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yNSwxNCArMjUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgkvKiBpc2FfZG1hX2JyaWRnZV9idWdneSAqLwogI2luY2x1ZGUgInBjaS5oIgogCi1pbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7Ci1FWFBPUlRfU1lNQk9MKGlzYV9kbWFfYnJpZGdlX2J1Z2d5KTsKLWludCBwY2lfcGNpX3Byb2JsZW1zOwotRVhQT1JUX1NZTUJPTChwY2lfcGNpX3Byb2JsZW1zKTsKLQotI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTCiAvKgogICogVGhpcyBxdWlyayBmdW5jdGlvbiBkaXNhYmxlcyBtZW1vcnkgZGVjb2RpbmcgYW5kIHJlbGVhc2VzIG1lbW9yeSByZXNvdXJjZXMKICAqIG9mIHRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IGtlcm5lbCdzIGJvb3QgcGFyYW1ldGVyICdwY2k9cmVzb3VyY2VfYWxpZ25tZW50PScuCkBAIC0zMzgsNiArMzMzLDIzIEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9TMywJUENJX0RFVklDRV9JRF9TM184NjgsCQlxdWlya19zM182NE0pOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfUzMsCVBDSV9ERVZJQ0VfSURfUzNfOTY4LAkJcXVpcmtfczNfNjRNKTsKIAorLyoKKyAqIFNvbWUgQ1M1NTM2IEJJT1NlcyAoZm9yIGV4YW1wbGUsIHRoZSBTb2VrcmlzIE5FVDU1MDEgYm9hcmQgdy8gY29tQklPUworICogdmVyLiAxLjMzICAyMDA3MDEwMykgZG9uJ3Qgc2V0IHRoZSBjb3JyZWN0IElTQSBQQ0kgcmVnaW9uIGhlYWRlciBpbmZvLgorICogQkFSMCBzaG91bGQgYmUgOCBieXRlczsgaW5zdGVhZCwgaXQgbWF5IGJlIHNldCB0byBzb21ldGhpbmcgbGlrZSA4aworICogKHdoaWNoIGNvbmZsaWN0cyB3LyBCQVIxJ3MgbWVtb3J5IHJhbmdlKS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2NzNTUzNl92c2Eoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAocGNpX3Jlc291cmNlX2xlbihkZXYsIDApICE9IDgpIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZGV2LT5yZXNvdXJjZVswXTsKKwkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgOCAtIDE7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIkNTNTUzNiBJU0EgYnJpZGdlIGJ1ZyBkZXRlY3RlZCAiCisJCQkJIihpbmNvcnJlY3QgaGVhZGVyKTsgd29ya2Fyb3VuZCBhcHBsaWVkLlxuIik7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBLCBxdWlya19jczU1MzZfdnNhKTsKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2lvX3JlZ2lvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCByZWdpb24sCiAJdW5zaWduZWQgc2l6ZSwgaW50IG5yLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMjU5NSw2ICsyNjA3LDcgQEAKIAl9CiAJcGNpX2RvX2ZpeHVwcyhkZXYsIHN0YXJ0LCBlbmQpOwogfQorRVhQT1JUX1NZTUJPTChwY2lfZml4dXBfZGV2aWNlKTsKIAogc3RhdGljIGludCBfX2luaXQgcGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyh2b2lkKQogewpAQCAtMjcwNiw5ICsyNzE5LDMgQEAKIAogCXJldHVybiAtRU5PVFRZOwogfQotCi0jZWxzZQotdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KLWludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkgeyByZXR1cm4gLUVOT1RUWTsgfQotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCBjNDhjZDM3Li5iZjMyZjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMjcsMzcgKzI3LDgzIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgInBjaS5oIgogCi1zdGF0aWMgdm9pZCBwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKK3N0cnVjdCByZXNvdXJjZV9saXN0X3ggeworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKm5leHQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3QgaGVhZCwgKmxpc3QsICp0bXA7Ci0JaW50IGlkeDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXJlc291cmNlX3NpemVfdCBzdGFydDsKKwlyZXNvdXJjZV9zaXplX3QgZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OwogCi0JaGVhZC5uZXh0ID0gTlVMTDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJdTE2IGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4Oworc3RhdGljIHZvaWQgYWRkX3RvX2ZhaWxlZF9saXN0KHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmhlYWQsCisJCQkJIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxpc3QgPSBoZWFkOworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxuID0gbGlzdC0+bmV4dDsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICp0bXA7CiAKLQkJLyogRG9uJ3QgdG91Y2ggY2xhc3NsZXNzIGRldmljZXMgb3IgaG9zdCBicmlkZ2VzIG9yIGlvYXBpY3MuICAqLwotCQlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEIHx8Ci0JCSAgICBjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpCi0JCQljb250aW51ZTsKLQotCQkvKiBEb24ndCB0b3VjaCBpb2FwaWMgZGV2aWNlcyBhbHJlYWR5IGVuYWJsZWQgYnkgZmlybXdhcmUgKi8KLQkJaWYgKGNsYXNzID09IFBDSV9DTEFTU19TWVNURU1fUElDKSB7Ci0JCQl1MTYgY29tbWFuZDsKLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKLQkJCWlmIChjb21tYW5kICYgKFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCXBkZXZfc29ydF9yZXNvdXJjZXMoZGV2LCAmaGVhZCk7CisJdG1wID0ga21hbGxvYyhzaXplb2YoKnRtcCksIEdGUF9LRVJORUwpOworCWlmICghdG1wKSB7CisJCXByX3dhcm5pbmcoImFkZF90b19mYWlsZWRfbGlzdDoga21hbGxvYygpIGZhaWxlZCFcbiIpOworCQlyZXR1cm47CiAJfQogCi0JZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCXRtcC0+bmV4dCA9IGxuOworCXRtcC0+cmVzID0gcmVzOworCXRtcC0+ZGV2ID0gZGV2OworCXRtcC0+c3RhcnQgPSByZXMtPnN0YXJ0OworCXRtcC0+ZW5kID0gcmVzLT5lbmQ7CisJdG1wLT5mbGFncyA9IHJlcy0+ZmxhZ3M7CisJbGlzdC0+bmV4dCA9IHRtcDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9mYWlsZWRfbGlzdChzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpoZWFkKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxpc3QsICp0bXA7CisKKwlmb3IgKGxpc3QgPSBoZWFkLT5uZXh0OyBsaXN0OykgeworCQl0bXAgPSBsaXN0OworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJa2ZyZWUodG1wKTsKKwl9CisKKwloZWFkLT5uZXh0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19kZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3QgKmhlYWQpCit7CisJdTE2IGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OworCisJLyogRG9uJ3QgdG91Y2ggY2xhc3NsZXNzIGRldmljZXMgb3IgaG9zdCBicmlkZ2VzIG9yIGlvYXBpY3MuICAqLworCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORUQgfHwgY2xhc3MgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKQorCQlyZXR1cm47CisKKwkvKiBEb24ndCB0b3VjaCBpb2FwaWMgZGV2aWNlcyBhbHJlYWR5IGVuYWJsZWQgYnkgZmlybXdhcmUgKi8KKwlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX1NZU1RFTV9QSUMpIHsKKwkJdTE2IGNvbW1hbmQ7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwkJaWYgKGNvbW1hbmQgJiAoUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkpKQorCQkJcmV0dXJuOworCX0KKworCXBkZXZfc29ydF9yZXNvdXJjZXMoZGV2LCBoZWFkKTsKK30KKworc3RhdGljIHZvaWQgX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCByZXNvdXJjZV9saXN0ICpsaXN0LCAqdG1wOworCWludCBpZHg7CisKKwlmb3IgKGxpc3QgPSBoZWFkLT5uZXh0OyBsaXN0OykgewogCQlyZXMgPSBsaXN0LT5yZXM7CiAJCWlkeCA9IHJlcyAtICZsaXN0LT5kZXYtPnJlc291cmNlWzBdOwogCQlpZiAocGNpX2Fzc2lnbl9yZXNvdXJjZShsaXN0LT5kZXYsIGlkeCkpIHsKKwkJCWlmIChmYWlsX2hlYWQgJiYgIXBjaV9pc19yb290X2J1cyhsaXN0LT5kZXYtPmJ1cykpCisJCQkJYWRkX3RvX2ZhaWxlZF9saXN0KGZhaWxfaGVhZCwgbGlzdC0+ZGV2LCByZXMpOwogCQkJcmVzLT5zdGFydCA9IDA7CiAJCQlyZXMtPmVuZCA9IDA7CiAJCQlyZXMtPmZsYWdzID0gMDsKQEAgLTY4LDYgKzExNCwzMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcGRldl9hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3QgaGVhZDsKKworCWhlYWQubmV4dCA9IE5VTEw7CisJX19kZXZfc29ydF9yZXNvdXJjZXMoZGV2LCAmaGVhZCk7CisJX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZCgmaGVhZCwgZmFpbF9oZWFkKTsKKworfQorCitzdGF0aWMgdm9pZCBwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCBoZWFkOworCisJaGVhZC5uZXh0ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCV9fZGV2X3NvcnRfcmVzb3VyY2VzKGRldiwgJmhlYWQpOworCisJX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZCgmaGVhZCwgZmFpbF9oZWFkKTsKK30KKwogdm9pZCBwY2lfc2V0dXBfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CkBAIC0xMzQsMTggKzIwNCwxMiBAQAogICAgY29uZmlnIHNwYWNlIHdyaXRlcywgc28gaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IGFuIEkvTyB3aW5kb3cgb2YKICAgIHRoZSBicmlkZ2Ugd2lsbCBoYXZlIHNvbWUgdW5kZXNpcmFibGUgYWRkcmVzcyAoZS5nLiAwKSBhZnRlciB0aGUKICAgIGZpcnN0IHdyaXRlLiBEaXR0byA2NC1iaXQgcHJlZmV0Y2hhYmxlIE1NSU8uICAqLwotc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9pbyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKLQl1MzIgbCwgYnUsIGx1LCBpb191cHBlcjE2OwotCi0JaWYgKHBjaV9pc19lbmFibGVkKGJyaWRnZSkpCi0JCXJldHVybjsKLQotCWRldl9pbmZvKCZicmlkZ2UtPmRldiwgIlBDSSBicmlkZ2UgdG8gW2J1cyAlMDJ4LSUwMnhdXG4iLAotCQkgYnVzLT5zZWNvbmRhcnksIGJ1cy0+c3Vib3JkaW5hdGUpOworCXUzMiBsLCBpb191cHBlcjE2OwogCiAJLyogU2V0IHVwIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgUENJIEkvTyBzZWdtZW50IGZvciB0aGlzIGJ1cy4gKi8KIAlyZXMgPSBidXMtPnJlc291cmNlWzBdOwpAQCAtMTU4LDggKzIyMiw3IEBACiAJCS8qIFNldCB1cCB1cHBlciAxNiBiaXRzIG9mIEkvTyBiYXNlL2xpbWl0LiAqLwogCQlpb191cHBlcjE2ID0gKHJlZ2lvbi5lbmQgJiAweGZmZmYwMDAwKSB8IChyZWdpb24uc3RhcnQgPj4gMTYpOwogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQkvKiBDbGVhciB1cHBlciAxNiBiaXRzIG9mIEkvTyBiYXNlL2xpbWl0LiAqLwogCQlpb191cHBlcjE2ID0gMDsKIAkJbCA9IDB4MDBmMDsKQEAgLTE3MSwyMSArMjM0LDM1IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9JT19CQVNFLCBsKTsKIAkvKiBVcGRhdGUgdXBwZXIgMTYgYml0cyBvZiBJL08gYmFzZS9saW1pdC4gKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX0lPX0JBU0VfVVBQRVIxNiwgaW9fdXBwZXIxNik7Cit9CiAKLQkvKiBTZXQgdXAgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBQQ0kgTWVtb3J5IHNlZ21lbnQKLQkgICBmb3IgdGhpcyBidXMuICovCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW8oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247CisJdTMyIGw7CisKKwkvKiBTZXQgdXAgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBQQ0kgTWVtb3J5IHNlZ21lbnQgZm9yIHRoaXMgYnVzLiAqLwogCXJlcyA9IGJ1cy0+cmVzb3VyY2VbMV07CiAJcGNpYmlvc19yZXNvdXJjZV90b19idXMoYnJpZGdlLCAmcmVnaW9uLCByZXMpOwogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJbCA9IChyZWdpb24uc3RhcnQgPj4gMTYpICYgMHhmZmYwOwogCQlsIHw9IHJlZ2lvbi5lbmQgJiAweGZmZjAwMDAwOwogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlsID0gMHgwMDAwZmZmMDsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFttZW0gZGlzYWJsZWRdXG4iKTsKIAl9CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9NRU1PUllfQkFTRSwgbCk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOworCXUzMiBsLCBidSwgbHU7CiAKIAkvKiBDbGVhciBvdXQgdGhlIHVwcGVyIDMyIGJpdHMgb2YgUFJFRiBsaW1pdC4KIAkgICBJZiBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIgd2FzIG5vbi16ZXJvLCB0aGlzIHRlbXBvcmFyaWx5CkBAIC0yMDQsOCArMjgxLDcgQEAKIAkJCWx1ID0gdXBwZXJfMzJfYml0cyhyZWdpb24uZW5kKTsKIAkJfQogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlsID0gMHgwMDAwZmZmMDsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFttZW0gcHJlZiBkaXNhYmxlZF1cbiIpOwogCX0KQEAgLTIxNCwxMCArMjkwLDM1IEBACiAJLyogU2V0IHRoZSB1cHBlciAzMiBiaXRzIG9mIFBSRUYgYmFzZSAmIGxpbWl0LiAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIsIGJ1KTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX1BSRUZfTElNSVRfVVBQRVIzMiwgbHUpOworfQorCitzdGF0aWMgdm9pZCBfX3BjaV9zZXR1cF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisKKwlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XVxuIiwKKwkJIGJ1cy0+c2Vjb25kYXJ5LCBidXMtPnN1Ym9yZGluYXRlKTsKKworCWlmICh0eXBlICYgSU9SRVNPVVJDRV9JTykKKwkJcGNpX3NldHVwX2JyaWRnZV9pbyhidXMpOworCisJaWYgKHR5cGUgJiBJT1JFU09VUkNFX01FTSkKKwkJcGNpX3NldHVwX2JyaWRnZV9tbWlvKGJ1cyk7CisKKwlpZiAodHlwZSAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpCisJCXBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKGJ1cyk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnJpZGdlLCBQQ0lfQlJJREdFX0NPTlRST0wsIGJ1cy0+YnJpZGdlX2N0bCk7CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwl1bnNpZ25lZCBsb25nIHR5cGUgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAorCQkJCSAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKKworCV9fcGNpX3NldHVwX2JyaWRnZShidXMsIHR5cGUpOworfQorCiAvKiBDaGVjayB3aGV0aGVyIHRoZSBicmlkZ2Ugc3VwcG9ydHMgb3B0aW9uYWwgSS9PIGFuZAogICAgcHJlZmV0Y2hhYmxlIG1lbW9yeSByYW5nZXMuIElmIG5vdCwgdGhlIHJlc3BlY3RpdmUKICAgIGJhc2UvbGltaXQgcmVnaXN0ZXJzIG11c3QgYmUgcmVhZC1vbmx5IGFuZCByZWFkIGFzIDAuICovCkBAIC0yNTMsOCArMzU0LDExIEBACiAJfQogCWlmIChwbWVtKSB7CiAJCWJfcmVzWzJdLmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKLQkJaWYgKChwbWVtICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSA9PSBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KQorCQlpZiAoKHBtZW0gJiBQQ0lfUFJFRl9SQU5HRV9UWVBFX01BU0spID09CisJCSAgICBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSB7CiAJCQliX3Jlc1syXS5mbGFncyB8PSBJT1JFU09VUkNFX01FTV82NDsKKwkJCWJfcmVzWzJdLmZsYWdzIHw9IFBDSV9QUkVGX1JBTkdFX1RZUEVfNjQ7CisJCX0KIAl9CiAKIAkvKiBkb3VibGUgY2hlY2sgaWYgYnJpZGdlIGRvZXMgc3VwcG9ydCA2NCBiaXQgcHJlZiAqLwpAQCAtMjgzLDggKzM4Nyw3IEBACiAJdW5zaWduZWQgbG9uZyB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAogCQkJCSAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlyID0gYnVzLT5yZXNvdXJjZVtpXTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgciwgaSkgewogCQlpZiAociA9PSAmaW9wb3J0X3Jlc291cmNlIHx8IHIgPT0gJmlvbWVtX3Jlc291cmNlKQogCQkJY29udGludWU7CiAJCWlmIChyICYmIChyLT5mbGFncyAmIHR5cGVfbWFzaykgPT0gdHlwZSAmJiAhci0+cGFyZW50KQpAQCAtMzAxLDcgKzQwNCw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzID0gZmluZF9mcmVlX2J1c19yZXNvdXJjZShidXMsIElPUkVTT1VSQ0VfSU8pOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDAsIHNpemUxID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAwLCBzaXplMSA9IDAsIG9sZF9zaXplOwogCiAJaWYgKCFiX3JlcykKICAJCXJldHVybjsKQEAgLTMyNiwxMiArNDI5LDE3IEBACiAJfQogCWlmIChzaXplIDwgbWluX3NpemUpCiAJCXNpemUgPSBtaW5fc2l6ZTsKKwlvbGRfc2l6ZSA9IHJlc291cmNlX3NpemUoYl9yZXMpOworCWlmIChvbGRfc2l6ZSA9PSAxKQorCQlvbGRfc2l6ZSA9IDA7CiAvKiBUbyBiZSBmaXhlZCBpbiAyLjU6IHdlIHNob3VsZCBoYXZlIHNvcnQgb2YgSEFWRV9JU0EKICAgIGZsYWcgaW4gdGhlIHN0cnVjdCBwY2lfYnVzLiAqLwogI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgZGVmaW5lZChDT05GSUdfRUlTQSkKIAlzaXplID0gKHNpemUgJiAweGZmKSArICgoc2l6ZSAmIH4weGZmVUwpIDw8IDIpOwogI2VuZGlmCiAJc2l6ZSA9IEFMSUdOKHNpemUgKyBzaXplMSwgNDA5Nik7CisJaWYgKHNpemUgPCBvbGRfc2l6ZSkKKwkJc2l6ZSA9IG9sZF9zaXplOwogCWlmICghc2l6ZSkgewogCQlpZiAoYl9yZXMtPnN0YXJ0IHx8IGJfcmVzLT5lbmQpCiAJCQlkZXZfaW5mbygmYnVzLT5zZWxmLT5kZXYsICJkaXNhYmxpbmcgYnJpZGdlIHdpbmRvdyAiCkBAIC0zNTIsNyArNDYwLDcgQEAKIAkJCSB1bnNpZ25lZCBsb25nIHR5cGUsIHJlc291cmNlX3NpemVfdCBtaW5fc2l6ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplOworCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplLCBvbGRfc2l6ZTsKIAlyZXNvdXJjZV9zaXplX3QgYWxpZ25zWzEyXTsJLyogQWxpZ25tZW50cyBmcm9tIDFNYiB0byAyR2IgKi8KIAlpbnQgb3JkZXIsIG1heF9vcmRlcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzID0gZmluZF9mcmVlX2J1c19yZXNvdXJjZShidXMsIHR5cGUpOwpAQCAtNDAyLDYgKzUxMCwxMSBAQAogCX0KIAlpZiAoc2l6ZSA8IG1pbl9zaXplKQogCQlzaXplID0gbWluX3NpemU7CisJb2xkX3NpemUgPSByZXNvdXJjZV9zaXplKGJfcmVzKTsKKwlpZiAob2xkX3NpemUgPT0gMSkKKwkJb2xkX3NpemUgPSAwOworCWlmIChzaXplIDwgb2xkX3NpemUpCisJCXNpemUgPSBvbGRfc2l6ZTsKIAogCWFsaWduID0gMDsKIAltaW5fYWxpZ24gPSAwOwpAQCAtNTM4LDIzICs2NTEsMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19zaXplX2JyaWRnZXMpOwogCi12b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgX19yZWYgX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmZhaWxfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCi0JcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChidXMpOworCXBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoYnVzLCBmYWlsX2hlYWQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CiAJCWIgPSBkZXYtPnN1Ym9yZGluYXRlOwogCQlpZiAoIWIpCiAJCQljb250aW51ZTsKIAotCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYik7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGIsIGZhaWxfaGVhZCk7CiAKIAkJc3dpdGNoIChkZXYtPmNsYXNzID4+IDgpIHsKIAkJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSToKLQkJCXBjaV9zZXR1cF9icmlkZ2UoYik7CisJCQlpZiAoIXBjaV9pc19lbmFibGVkKGRldikpCisJCQkJcGNpX3NldHVwX2JyaWRnZShiKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTOgpAQCAtNTY4LDE1ICs2ODMsMTMwIEBACiAJCX0KIAl9CiB9CisKK3ZvaWQgX19yZWYgcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzLCBOVUxMKTsKK30KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKTsKIAorc3RhdGljIHZvaWQgX19yZWYgX19wY2lfYnJpZGdlX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwKKwkJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmZhaWxfaGVhZCkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYjsKKworCXBkZXZfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoKHN0cnVjdCBwY2lfZGV2ICopYnJpZGdlLCBmYWlsX2hlYWQpOworCisJYiA9IGJyaWRnZS0+c3Vib3JkaW5hdGU7CisJaWYgKCFiKQorCQlyZXR1cm47CisKKwlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhiLCBmYWlsX2hlYWQpOworCisJc3dpdGNoIChicmlkZ2UtPmNsYXNzID4+IDgpIHsKKwljYXNlIFBDSV9DTEFTU19CUklER0VfUENJOgorCQlwY2lfc2V0dXBfYnJpZGdlKGIpOworCQlicmVhazsKKworCWNhc2UgUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTOgorCQlwY2lfc2V0dXBfY2FyZGJ1cyhiKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJub3Qgc2V0dGluZyB1cCBicmlkZ2UgZm9yIGJ1cyAiCisJCQkgIiUwNHg6JTAyeFxuIiwgcGNpX2RvbWFpbl9ucihiKSwgYi0+bnVtYmVyKTsKKwkJYnJlYWs7CisJfQorfQorc3RhdGljIHZvaWQgcGNpX2JyaWRnZV9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKwlpbnQgaWR4OworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc3RydWN0IHJlc291cmNlICpyOworCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisKKwlkZXYgPSBidXMtPnNlbGY7CisJZm9yIChpZHggPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaWR4IDw9IFBDSV9CUklER0VfUkVTT1VSQ0VfRU5EOworCSAgICAgaWR4KyspIHsKKwkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07CisJCWlmICgoci0+ZmxhZ3MgJiB0eXBlX21hc2spICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJaWYgKCFyLT5wYXJlbnQpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogaWYgdGhlcmUgYXJlIGNoaWxkcmVuIHVuZGVyIHRoYXQsIHdlIHNob3VsZCByZWxlYXNlIHRoZW0KKwkJICogIGFsbAorCQkgKi8KKwkJcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMocik7CisJCWlmICghcmVsZWFzZV9yZXNvdXJjZShyKSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJICJyZXNvdXJjZSAlZCAlcFIgcmVsZWFzZWRcbiIsIGlkeCwgcik7CisJCQkvKiBrZWVwIHRoZSBvbGQgc2l6ZSAqLworCQkJci0+ZW5kID0gcmVzb3VyY2Vfc2l6ZShyKSAtIDE7CisJCQlyLT5zdGFydCA9IDA7CisJCQlyLT5mbGFncyA9IDA7CisJCQljaGFuZ2VkID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkKSB7CisJCS8qIGF2b2lkaW5nIHRvdWNoIHRoZSBvbmUgd2l0aG91dCBQUkVGICovCisJCWlmICh0eXBlICYgSU9SRVNPVVJDRV9QUkVGRVRDSCkKKwkJCXR5cGUgPSBJT1JFU09VUkNFX1BSRUZFVENIOworCQlfX3BjaV9zZXR1cF9icmlkZ2UoYnVzLCB0eXBlKTsKKwl9Cit9CisKK2VudW0gcmVsZWFzZV90eXBlIHsKKwlsZWFmX29ubHksCisJd2hvbGVfc3VidHJlZSwKK307CisvKgorICogdHJ5IHRvIHJlbGVhc2UgcGNpIGJyaWRnZSByZXNvdXJjZXMgdGhhdCBpcyBmcm9tIGxlYWYgYnJpZGdlLAorICogc28gd2UgY2FuIGFsbG9jYXRlIGJpZyBuZXcgb25lIGxhdGVyCisgKi8KK3N0YXRpYyB2b2lkIF9fcmVmIHBjaV9idXNfcmVsZWFzZV9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJCQkgICBlbnVtIHJlbGVhc2VfdHlwZSByZWxfdHlwZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgaXNfbGVhZl9icmlkZ2UgPSB0cnVlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCXN0cnVjdCBwY2lfYnVzICpiID0gZGV2LT5zdWJvcmRpbmF0ZTsKKwkJaWYgKCFiKQorCQkJY29udGludWU7CisKKwkJaXNfbGVhZl9icmlkZ2UgPSBmYWxzZTsKKworCQlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCisJCQljb250aW51ZTsKKworCQlpZiAocmVsX3R5cGUgPT0gd2hvbGVfc3VidHJlZSkKKwkJCXBjaV9idXNfcmVsZWFzZV9icmlkZ2VfcmVzb3VyY2VzKGIsIHR5cGUsCisJCQkJCQkgd2hvbGVfc3VidHJlZSk7CisJfQorCisJaWYgKHBjaV9pc19yb290X2J1cyhidXMpKQorCQlyZXR1cm47CisKKwlpZiAoKGJ1cy0+c2VsZi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCisJCXJldHVybjsKKworCWlmICgocmVsX3R5cGUgPT0gd2hvbGVfc3VidHJlZSkgfHwgaXNfbGVhZl9icmlkZ2UpCisJCXBjaV9icmlkZ2VfcmVsZWFzZV9yZXNvdXJjZXMoYnVzLCB0eXBlKTsKK30KKwogc3RhdGljIHZvaWQgcGNpX2J1c19kdW1wX3JlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewotICAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGJ1cy0+cmVzb3VyY2VbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXMgfHwgIXJlcy0+ZW5kKQorCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpIHsKKwkJaWYgKCFyZXMgfHwgIXJlcy0+ZW5kIHx8ICFyZXMtPmZsYWdzKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmYnVzLT5kZXYsICJyZXNvdXJjZSAlZCAlcFJcbiIsIGksIHJlcyk7CkBAIC02MDAsMTEgKzgzMCw2NSBAQAogCX0KIH0KIAorc3RhdGljIGludCBfX2luaXQgcGNpX2J1c19nZXRfZGVwdGgoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlpbnQgZGVwdGggPSAwOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHBjaV9idXMgKmIgPSBkZXYtPnN1Ym9yZGluYXRlOworCQlpZiAoIWIpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBwY2lfYnVzX2dldF9kZXB0aChiKTsKKwkJaWYgKHJldCArIDEgPiBkZXB0aCkKKwkJCWRlcHRoID0gcmV0ICsgMTsKKwl9CisKKwlyZXR1cm4gZGVwdGg7Cit9CitzdGF0aWMgaW50IF9faW5pdCBwY2lfZ2V0X21heF9kZXB0aCh2b2lkKQoreworCWludCBkZXB0aCA9IDA7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBwY2lfYnVzX2dldF9kZXB0aChidXMpOworCQlpZiAocmV0ID4gZGVwdGgpCisJCQlkZXB0aCA9IHJldDsKKwl9CisKKwlyZXR1cm4gZGVwdGg7Cit9CisKKy8qCisgKiBmaXJzdCB0cnkgd2lsbCBub3QgdG91Y2ggcGNpIGJyaWRnZSByZXMKKyAqIHNlY29uZCAgYW5kIGxhdGVyIHRyeSB3aWxsIGNsZWFyIHNtYWxsIGxlYWYgYnJpZGdlIHJlcworICogd2lsbCBzdG9wIHRpbGwgdG8gdGhlIG1heCAgZGVlcHRoIGlmIGNhbiBub3QgZmluZCBnb29kIG9uZQorICovCiB2b2lkIF9faW5pdAogcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcyh2b2lkKQogewogCXN0cnVjdCBwY2lfYnVzICpidXM7CisJaW50IHRyaWVkX3RpbWVzID0gMDsKKwllbnVtIHJlbGVhc2VfdHlwZSByZWxfdHlwZSA9IGxlYWZfb25seTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94IGhlYWQsICpsaXN0OworCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisJdW5zaWduZWQgbG9uZyBmYWlsZWRfdHlwZTsKKwlpbnQgbWF4X2RlcHRoID0gcGNpX2dldF9tYXhfZGVwdGgoKTsKKwlpbnQgcGNpX3RyeV9udW07CiAKKwloZWFkLm5leHQgPSBOVUxMOworCisJcGNpX3RyeV9udW0gPSBtYXhfZGVwdGggKyAxOworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IG1heCBidXMgZGVwdGg6ICVkIHBjaV90cnlfbnVtOiAlZFxuIiwKKwkJIG1heF9kZXB0aCwgcGNpX3RyeV9udW0pOworCithZ2FpbjoKIAkvKiBEZXB0aCBmaXJzdCwgY2FsY3VsYXRlIHNpemVzIGFuZCBhbGlnbm1lbnRzIG9mIGFsbAogCSAgIHN1Ym9yZGluYXRlIGJ1c2VzLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKQEAgLTYxMiwxMiArODk2LDEzMCBAQAogCX0KIAkvKiBEZXB0aCBsYXN0LCBhbGxvY2F0ZSByZXNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgaGFyZHdhcmUuICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZwY2lfcm9vdF9idXNlcywgbm9kZSkgewotCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKLQkJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cywgJmhlYWQpOwogCX0KKwl0cmllZF90aW1lcysrOworCisJLyogYW55IGRldmljZSBjb21wbGFpbj8gKi8KKwlpZiAoIWhlYWQubmV4dCkKKwkJZ290byBlbmFibGVfYW5kX2R1bXA7CisJZmFpbGVkX3R5cGUgPSAwOworCWZvciAobGlzdCA9IGhlYWQubmV4dDsgbGlzdDspIHsKKwkJZmFpbGVkX3R5cGUgfD0gbGlzdC0+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+c3RhdGUgJiBTT0NLRVRfSU5VU0UpOwotCi0JcmV0ID0gdHJ5X21vZHVsZV9nZXQoc2t0LT5vd25lcik7Ci0JaWYgKHJldCkKLQkJc2t0LT5zdGF0ZSB8PSBTT0NLRVRfSU5VU0U7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNzX3NvY2tldF9wdXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9JTlVTRSkgewotCQlza3QtPnN0YXRlICY9IH5TT0NLRVRfSU5VU0U7Ci0JCW1vZHVsZV9wdXQoc2t0LT5vd25lcik7Ci0JfQotfQotCiAKIC8qCiAgKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYV9jb3JlIjoKICAqLwogCi0vKiBjaXN0cGwuYyAqLwotaW50IHZlcmlmeV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCi0vKiByc3JjX21nci5jICovCi12b2lkIHJlbGVhc2VfcmVzb3VyY2VfZGIoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCiAvKiBzb2NrZXRfc3lzZnMuYyAqLwogZXh0ZXJuIGludCBwY2NhcmRfc3lzZnNfYWRkX3NvY2tldChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcGNjYXJkX3N5c2ZzX3JlbW92ZV9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTEyNSw4ICs5OSw2IEBACiAvKiBjYXJkYnVzLmMgKi8KIGludCBjYl9hbGxvYyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiB2b2lkIGNiX2ZyZWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotaW50IHJlYWRfY2JfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgc3BhY2UsIHVfaW50IGFkZHIsIHVfaW50IGxlbiwKLQkJdm9pZCAqcHRyKTsKIAogCiAKQEAgLTEzOCw3ICsxMTAsOCBAQAogCXN0cnVjdCBtb2R1bGUJKm93bmVyOwogCWludAkJKCpldmVudCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkJCSAgZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5KTsKLQl2b2lkCQkoKnJlcXVlcnkpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IG5ld19jaXMpOworCXZvaWQJCSgqcmVxdWVyeSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQJCSgqdmFsaWRhdGUpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50ICppKTsKIAlpbnQJCSgqc3VzcGVuZCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAlpbnQJCSgqcmVzdW1lKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogfTsKQEAgLTE1MSwxNiArMTI0LDM1IEBACiBpbnQgcGNjYXJkX3JlZ2lzdGVyX3BjbWNpYShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjbWNpYV9jYWxsYmFjayAqYyk7CiBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcGNtY2lhX2dldF9zb2NrZXRfYnlfbnIodW5zaWduZWQgaW50IG5yKTsKIAotaW50IHBjbWNpYV9zdXNwZW5kX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci1pbnQgcGNtY2lhX3Jlc3VtZV9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotCi1pbnQgcGNtY2lhX2VqZWN0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci1pbnQgcGNtY2lhX2luc2VydF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwordm9pZCBwY21jaWFfcGFyc2VfdWV2ZW50cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0LCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKKyNkZWZpbmUgUENNQ0lBX1VFVkVOVF9FSkVDVAkweDAwMDEKKyNkZWZpbmUgUENNQ0lBX1VFVkVOVF9JTlNFUlQJMHgwMDAyCisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfU1VTUEVORAkweDAwMDQKKyNkZWZpbmUgUENNQ0lBX1VFVkVOVF9SRVNVTUUJMHgwMDA4CisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfUkVRVUVSWQkweDAwMTAKIAogc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogdm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIAorLyoKKyAqIFN0dWZmIGludGVybmFsIHRvIG1vZHVsZSAicGNtY2lhIi4KKyAqLworLyogZHMuYyAqLworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY21jaWFfYnVzX3R5cGU7CisKKy8qIHBjbWNpYV9yZXNvdXJjZS5jICovCitleHRlcm4gaW50IHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK2V4dGVybiBpbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CitleHRlcm4gc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9tZW1fcmVnaW9uKHVfbG9uZyBiYXNlLAorCQkJCQkgICAgICAgdV9sb25nIG51bSwKKwkJCQkJICAgICAgIHVfbG9uZyBhbGlnbiwKKwkJCQkJICAgICAgIGludCBsb3csCisJCQkJCSAgICAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisKKwogLyogY2lzdHBsLmMgKi8KK2V4dGVybiBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBwY2NhcmRfY2lzX2F0dHI7CisKIGludCBwY21jaWFfcmVhZF9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKIAkJCXVfaW50IGFkZHIsIHVfaW50IGxlbiwgdm9pZCAqcHRyKTsKIHZvaWQgcGNtY2lhX3dyaXRlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLApAQCAtMTcyLDggKzE2NCw4IEBACiBpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwogaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqY291bnQpOworaW50IHZlcmlmeV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCi0vKiBsb29wIG92ZXIgQ0lTIGVudHJpZXMgKi8KIGludCBwY2NhcmRfbG9vcF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAogCQkgICAgICBjaXNkYXRhX3QgY29kZSwgY2lzcGFyc2VfdCAqcGFyc2UsIHZvaWQgKnByaXZfZGF0YSwKIAkJICAgICAgaW50ICgqbG9vcF90dXBsZSkgKHR1cGxlX3QgKnR1cGxlLApAQCAtMTg5LDM1ICsxODEsOCBAQAogaW50IHBjY2FyZF9nZXRfdHVwbGVfZGF0YShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdHVwbGVfdCAqdHVwbGUpOwogCiAKLS8qIHJzcmNfbWdyLmMgKi8KLWludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfaW9fcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCQkgICAgICAgaW50IG51bSwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKLQkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotaW50IHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIHJfZW5kLAotCQkJICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwKLQkJCQkJdV9sb25nIG51bSwKLQkJCQkJdV9sb25nIGFsaWduLAotCQkJCQlpbnQgbG93LAotCQkJCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci0KLS8qCi0gKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYSIuCi0gKi8KLS8qIGRzLmMgKi8KLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOwotCi0vKiBwY21jaWFfcmVzb3VyY2UuYyAqLwotZXh0ZXJuIGludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci0KICNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCiAvKiBkcy5jICovCi1leHRlcm4gc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKLQogZXh0ZXJuIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogZXh0ZXJuIHZvaWQgcGNtY2lhX3B1dF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMgYi9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODg5Y2YwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgKiBQQ01DSUEgc29ja2V0IGNvZGUgZm9yIHRoZSBBbGNoZW15IERiMXh4eC9QYjF4eHggYm9hcmRzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBNYW51ZWwgTGF1c3MgPG1hbnVlbC5sYXVzc0BnbWFpbC5jb20+CisgKgorICovCisKKy8qIFRoaXMgaXMgYSBmYWlybHkgZ2VuZXJpYyBQQ01DSUEgc29ja2V0IGRyaXZlciBzdWl0YWJsZSBmb3IgdGhlCisgKiBmb2xsb3dpbmcgQWxjaGVteSBEZXZlbG9wbWVudCBib2FyZHM6CisgKiAgRGIxMDAwLCBEYi9QYjE1MDAsIERiL1BiMTEwMCwgRGIvUGIxNTUwLCBEYi9QYjEyMDAuCisgKgorICogVGhlIERiMTAwMCBpcyB1c2VkIGFzIGEgcmVmZXJlbmNlOiAgUGVyLXNvY2tldCBjYXJkLSwgY2FyZGRldGVjdC0gYW5kCisgKiAgc3RhdHVzY2hhbmdlIElSUXMgY29ubmVjdGVkIHRvIFNvQyBHUElPcywgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyCisgKiAgYml0cyBhcnJhbmdlZCBpbiBwZXItc29ja2V0IGdyb3VwcyBpbiBhbiBleHRlcm5hbCBQTEQuICBBbGwgYm9hcmRzCisgKiAgbGlzdGVkIGhlcmUgdXNlIHRoaXMgbGF5b3V0LCBpbmNsdWRpbmcgYml0IHBvc2l0aW9ucyBhbmQgbWVhbmluZ3MuCisgKiAgT2YgY291cnNlIHRoZXJlIGFyZSBleGNlcHRpb25zIGluIGxhdGVyIGJvYXJkczoKKyAqCisgKgktIFBiMTEwMC9QYjE1MDA6ICBzaW5nbGUgc29ja2V0IG9ubHk7IHZvbHRhZ2Uga2V5IGJpdHMgVlMgYXJlCisgKgkJCSAgYXQgU1RBVFVTWzU6NF0gKGluc3RlYWQgb2YgU1RBVFVTWzE6MF0pLgorICoJLSBBdTEyMDAtYmFzZWQ6CSAgYWRkaXRpb25hbCBjYXJkLWVqZWN0IGlycXMsIGlycXMgbm90IGdwaW9zIQorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKKyNkZWZpbmUgTUVNX01BUF9TSVpFCTB4NDAwMDAwCisjZGVmaW5lIElPX01BUF9TSVpFCTB4MTAwMAorCitzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayB7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQJc29ja2V0OworCWludAkJbnI7CQkvKiBzb2NrZXQgbnVtYmVyICovCisJdm9pZAkJKnZpcnRfaW87CisKKwkvKiB0aGUgInBzZXVkbyIgYWRkcmVzc2VzIG9mIHRoZSBQQ01DSUEgc3BhY2UuICovCisJcGh5c19hZGRyX3QJcGh5c19pbzsKKwlwaHlzX2FkZHJfdAlwaHlzX2F0dHI7CisJcGh5c19hZGRyX3QJcGh5c19tZW07CisKKwkvKiBwcmV2aW91cyBmbGFncyBmb3Igc2V0X3NvY2tldCgpICovCisJdW5zaWduZWQgaW50IG9sZF9mbGFnczsKKworCS8qIGludGVycnVwdCBzb3VyY2VzOiBsaW51eCBpcnEgbnVtYmVycyEgKi8KKwlpbnQJaW5zZXJ0X2lycTsJLyogZGVmYXVsdCBjYXJkZGV0ZWN0IGlycSAqLworCWludAlzdHNjaGdfaXJxOwkvKiBjYXJkLXN0YXR1cy1jaGFuZ2UgaXJxICovCisJaW50CWNhcmRfaXJxOwkvKiBjYXJkIGlycSAqLworCWludAllamVjdF9pcnE7CS8qIGRiMTIwMC9wYjEyMDAgaGF2ZSB0aGVzZSAqLworCisjZGVmaW5lIEJPQVJEX1RZUEVfREVGQVVMVAkwCS8qIG1vc3QgYm9hcmRzICovCisjZGVmaW5lIEJPQVJEX1RZUEVfREIxMjAwCTEJLyogSVJRcyBhcmVuJ3QgZ3Bpb3MgKi8KKyNkZWZpbmUgQk9BUkRfVFlQRV9QQjExMDAJMgkvKiBWUyBiaXRzIHNsaWdodGx5IGRpZmZlcmVudCAqLworCWludAlib2FyZF90eXBlOworfTsKKworI2RlZmluZSB0b19kYjF4X3NvY2tldCh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRiMXhfcGNtY2lhX3NvY2ssIHNvY2tldCkKKworLyogREIvUEIxMjAwOiBjaGVjayBDUExEIFNJR1NUQVRVUyByZWdpc3RlciBiaXQgMTAvMTIgKi8KK3N0YXRpYyBpbnQgZGIxMjAwX2NhcmRfaW5zZXJ0ZWQoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2spCit7CisJdW5zaWduZWQgc2hvcnQgc2lnc3RhdDsKKworCXNpZ3N0YXQgPSBiY3NyX3JlYWQoQkNTUl9TSUdTVEFUKTsKKwlyZXR1cm4gc2lnc3RhdCAmIDEgPDwgKDggKyAyICogc29jay0+bnIpOworfQorCisvKiBjYXJkZGV0ZWN0IGdwaW86IGxvdy1hY3RpdmUgKi8KK3N0YXRpYyBpbnQgZGIxMDAwX2NhcmRfaW5zZXJ0ZWQoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2spCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShpcnFfdG9fZ3Bpbyhzb2NrLT5pbnNlcnRfaXJxKSk7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9jYXJkX2luc2VydGVkKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCXN3aXRjaCAoc29jay0+Ym9hcmRfdHlwZSkgeworCWNhc2UgQk9BUkRfVFlQRV9EQjEyMDA6CisJCXJldHVybiBkYjEyMDBfY2FyZF9pbnNlcnRlZChzb2NrKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZGIxMDAwX2NhcmRfaW5zZXJ0ZWQoc29jayk7CisJfQorfQorCisvKiBTVFNDSEcgdGVuZHMgdG8gYm91bmNlIGhlYXZpbHkgd2hlbiBjYXJkcyBhcmUgaW5zZXJ0ZWQvZWplY3RlZC4KKyAqIFRvIGF2b2lkIHRoaXMsIHRoZSBpbnRlcnJ1cHQgaXMgbm9ybWFsbHkgZGlzYWJsZWQgYW5kIG9ubHkgZW5hYmxlZAorICogYWZ0ZXIgcmVzZXQgdG8gYSBjYXJkIGhhcyBiZWVuIGRlLWFzc2VydGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N0c2NoZyhzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaywgaW50IGVuKQoreworCWlmIChzb2NrLT5zdHNjaGdfaXJxICE9IC0xKSB7CisJCWlmIChlbikKKwkJCWVuYWJsZV9pcnEoc29jay0+c3RzY2hnX2lycSk7CisJCWVsc2UKKwkJCWRpc2FibGVfaXJxKHNvY2stPnN0c2NoZ19pcnEpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IGRiMTAwMF9wY21jaWFfY2RpcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IGRhdGE7CisKKwlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrLT5zb2NrZXQsIFNTX0RFVEVDVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYjEwMDBfcGNtY2lhX3N0c2NoZ2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gZGF0YTsKKworCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNvY2stPnNvY2tldCwgU1NfU1RTQ0hHKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGRiMTIwMF9wY21jaWFfY2RpcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IGRhdGE7CisKKwkvKiBEYi9QYjEyMDAgaGF2ZSBzZXBhcmF0ZSBwZXItc29ja2V0IGluc2VydGlvbiBhbmQgZWplY3Rpb24KKwkgKiBpbnRlcnJ1cHRzIHdoaWNoIHN0YXkgYXNzZXJ0ZWQgYXMgbG9uZyBhcyB0aGUgY2FyZCBpcworCSAqIGluc2VydGVkL21pc3NpbmcuICBUaGUgb25lIHdoaWNoIGNhdXNlZCB1cyB0byBiZSBjYWxsZWQKKwkgKiBuZWVkcyB0byBiZSBkaXNhYmxlZCBhbmQgdGhlIG90aGVyIG9uZSBlbmFibGVkLgorCSAqLworCWlmIChpcnEgPT0gc29jay0+aW5zZXJ0X2lycSkgeworCQlkaXNhYmxlX2lycV9ub3N5bmMoc29jay0+aW5zZXJ0X2lycSk7CisJCWVuYWJsZV9pcnEoc29jay0+ZWplY3RfaXJxKTsKKwl9IGVsc2UgeworCQlkaXNhYmxlX2lycV9ub3N5bmMoc29jay0+ZWplY3RfaXJxKTsKKwkJZW5hYmxlX2lycShzb2NrLT5pbnNlcnRfaXJxKTsKKwl9CisKKwlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrLT5zb2NrZXQsIFNTX0RFVEVDVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfc2V0dXBfaXJxcyhzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoc29jay0+c3RzY2hnX2lycSAhPSAtMSkgeworCQlyZXQgPSByZXF1ZXN0X2lycShzb2NrLT5zdHNjaGdfaXJxLCBkYjEwMDBfcGNtY2lhX3N0c2NoZ2lycSwKKwkJCQkgIDAsICJwY21jaWFfc3RzY2hnIiwgc29jayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIERiL1BiMTIwMCBoYXZlIHNlcGFyYXRlIHBlci1zb2NrZXQgaW5zZXJ0aW9uIGFuZCBlamVjdGlvbgorCSAqIGludGVycnVwdHMsIHdoaWNoIHNob3VsZCBzaG93IGVkZ2UgYmVoYXZpb3VyIGJ1dCBkb24ndC4KKwkgKiBTbyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bnRpbCBib3RoIGluc2VydGlvbiBhbmQKKwkgKiBlamVjdGlvbiBoYW5kbGVyIGhhdmUgYmVlbiByZWdpc3RlcmVkIGFuZCB0aGUgY3VycmVudGx5CisJICogYWN0aXZlIG9uZSBkaXNhYmxlZC4KKwkgKi8KKwlpZiAoc29jay0+Ym9hcmRfdHlwZSA9PSBCT0FSRF9UWVBFX0RCMTIwMCkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc29jay0+aW5zZXJ0X2lycSwgZGIxMjAwX3BjbWNpYV9jZGlycSwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJwY21jaWFfaW5zZXJ0Iiwgc29jayk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDE7CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc29jay0+ZWplY3RfaXJxLCBkYjEyMDBfcGNtY2lhX2NkaXJxLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInBjbWNpYV9lamVjdCIsIHNvY2spOworCQlpZiAocmV0KSB7CisJCQlmcmVlX2lycShzb2NrLT5pbnNlcnRfaXJxLCBzb2NrKTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCWdvdG8gb3V0MTsKKwkJfQorCisJCS8qIGRpc2FibGUgdGhlIGN1cnJlbnRseSBhY3RpdmUgb25lICovCisJCWlmIChkYjEyMDBfY2FyZF9pbnNlcnRlZChzb2NrKSkKKwkJCWRpc2FibGVfaXJxX25vc3luYyhzb2NrLT5pbnNlcnRfaXJxKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnFfbm9zeW5jKHNvY2stPmVqZWN0X2lycSk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0gZWxzZSB7CisJCS8qIGFsbCBvdGhlciAob2xkZXIpIERiMXgwMCBib2FyZHMgdXNlIGEgR1BJTyB0byBzaG93CisJCSAqIGNhcmQgZGV0ZWN0aW9uIHN0YXR1czogIHVzZSBib3RoLWVkZ2UgdHJpZ2dlcnMuCisJCSAqLworCQlzZXRfaXJxX3R5cGUoc29jay0+aW5zZXJ0X2lycSwgSVJRX1RZUEVfRURHRV9CT1RIKTsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc29jay0+aW5zZXJ0X2lycSwgZGIxMDAwX3BjbWNpYV9jZGlycSwKKwkJCQkgIDAsICJwY21jaWFfY2FyZGRldGVjdCIsIHNvY2spOworCisJCWlmIChyZXQpCisJCQlnb3RvIG91dDE7CisJfQorCisJcmV0dXJuIDA7CS8qIGFsbCBkb25lICovCisKK291dDE6CisJaWYgKHNvY2stPnN0c2NoZ19pcnEgIT0gLTEpCisJCWZyZWVfaXJxKHNvY2stPnN0c2NoZ19pcnEsIHNvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZGIxeF9wY21jaWFfZnJlZV9pcnFzKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCWlmIChzb2NrLT5zdHNjaGdfaXJxICE9IC0xKQorCQlmcmVlX2lycShzb2NrLT5zdHNjaGdfaXJxLCBzb2NrKTsKKworCWZyZWVfaXJxKHNvY2stPmluc2VydF9pcnEsIHNvY2spOworCWlmIChzb2NrLT5lamVjdF9pcnEgIT0gLTEpCisJCWZyZWVfaXJxKHNvY2stPmVqZWN0X2lycSwgc29jayk7Cit9CisKKy8qCisgKiBjb25maWd1cmUgYSBQQ01DSUEgc29ja2V0IG9uIHRoZSBEYjF4MDAgc2VyaWVzIG9mIGJvYXJkcyAoYW5kCisgKiBjb21wYXRpYmxlcykuCisgKgorICogMiBleHRlcm5hbCByZWdpc3RlcnMgYXJlIGludm9sdmVkOgorICogICBwY21jaWFfc3RhdHVzIChvZmZzZXQgMHgwNCk6IGJpdHMgWzA6MS8yOjNdOiByZWFkIGNhcmQgdm9sdGFnZSBpZAorICogICBwY21jaWFfY29udHJvbChvZmZzZXQgMHgxMCk6CisgKgliaXRzWzA6MV0gc2V0IHZjYyBmb3IgY2FyZAorICoJYml0c1syOjNdIHNldCB2cHAgZm9yIGNhcmQKKyAqCWJpdCA0OgllbmFibGUgZGF0YSBidWZmZXJzCisgKgliaXQgNzoJcmVzZXQjIGZvciBjYXJkCisgKglhZGQgOCBmb3Igc2Vjb25kIHNvY2tldC4KKyAqLworc3RhdGljIGludCBkYjF4X3BjbWNpYV9jb25maWd1cmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgc3RydWN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHRvX2RiMXhfc29ja2V0KHNrdCk7CisJdW5zaWduZWQgc2hvcnQgY3JfY2xyLCBjcl9zZXQ7CisJdW5zaWduZWQgaW50IGNoYW5nZWQ7CisJaW50IHYsIHAsIHJldDsKKworCS8qIGNhcmQgdm9sdGFnZSBzZXR1cCAqLworCWNyX2NsciA9ICgweGYgPDwgKHNvY2stPm5yICogOCkpOyAvKiBjbGVhciB2b2x0YWdlIHNldHRpbmdzICovCisJY3Jfc2V0ID0gMDsKKwl2ID0gcCA9IHJldCA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlLT5WY2MpIHsKKwljYXNlIDUwOgorCQkrK3Y7CisJY2FzZSAzMzoKKwkJKyt2OworCWNhc2UgMDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhJWQgdW5zdXBwb3J0ZWQgVmNjICVkXG4iLAorCQkJc29jay0+bnIsIHN0YXRlLT5WY2MpOworCX0KKworCXN3aXRjaCAoc3RhdGUtPlZwcCkgeworCWNhc2UgMTI6CisJCSsrcDsKKwljYXNlIDMzOgorCWNhc2UgNTA6CisJCSsrcDsKKwljYXNlIDA6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYSVkIHVuc3VwcG9ydGVkIFZwcCAlZFxuIiwKKwkJCXNvY2stPm5yLCBzdGF0ZS0+VnBwKTsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2s6IFZwcCBtdXN0IGJlIDAsIDEyLCBvciBWY2MgKi8KKwlpZiAoKChzdGF0ZS0+VmNjID09IDMzKSAmJiAoc3RhdGUtPlZwcCA9PSA1MCkpIHx8CisJICAgICgoc3RhdGUtPlZjYyA9PSA1MCkgJiYgKHN0YXRlLT5WcHAgPT0gMzMpKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWElZCBiYWQgVmNjL1ZwcCBjb21ibyAoJWQgJWQpXG4iLAorCQkJc29jay0+bnIsIHN0YXRlLT5WY2MsIHN0YXRlLT5WcHApOworCQl2ID0gcCA9IDA7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJLyogY3JlYXRlIG5ldyB2b2x0YWdlIGNvZGUgKi8KKwljcl9zZXQgfD0gKCh2IDw8IDIpIHwgcCkgPDwgKHNvY2stPm5yICogOCk7CisKKwljaGFuZ2VkID0gc3RhdGUtPmZsYWdzIF4gc29jay0+b2xkX2ZsYWdzOworCisJaWYgKGNoYW5nZWQgJiBTU19SRVNFVCkgeworCQlpZiAoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpIHsKKwkJCXNldF9zdHNjaGcoc29jaywgMCk7CisJCQkvKiBhc3NlcnQgcmVzZXQsIGRpc2FibGUgaW8gYnVmZmVycyAqLworCQkJY3JfY2xyIHw9ICgxIDw8ICg3ICsgKHNvY2stPm5yICogOCkpKTsKKwkJCWNyX2NsciB8PSAoMSA8PCAoNCArIChzb2NrLT5uciAqIDgpKSk7CisJCX0gZWxzZSB7CisJCQkvKiBkZS1hc3NlcnQgcmVzZXQsIGVuYWJsZSBpbyBidWZmZXJzICovCisJCQljcl9zZXQgfD0gMSA8PCAoNyArIChzb2NrLT5uciAqIDgpKTsKKwkJCWNyX3NldCB8PSAxIDw8ICg0ICsgKHNvY2stPm5yICogOCkpOworCQl9CisJfQorCisJLyogdXBkYXRlIFBDTUNJQSBjb25maWd1cmF0aW9uICovCisJYmNzcl9tb2QoQkNTUl9QQ01DSUEsIGNyX2NsciwgY3Jfc2V0KTsKKworCXNvY2stPm9sZF9mbGFncyA9IHN0YXRlLT5mbGFnczsKKworCS8qIHJlc2V0IHdhcyB0YWtlbiBhd2F5OiBnaXZlIGNhcmQgdGltZSB0byBpbml0aWFsaXplIHByb3Blcmx5ICovCisJaWYgKChjaGFuZ2VkICYgU1NfUkVTRVQpICYmICEoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpKSB7CisJCW1zbGVlcCg1MDApOworCQlzZXRfc3RzY2hnKHNvY2ssIDEpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFZDQyBiaXRzIGF0IFszOjJdL1sxMToxMF0gKi8KKyNkZWZpbmUgR0VUX1ZDQyhjciwgc29ja25yKQkJXAorCSgoKChjcikgPj4gMikgPj4gKChzb2NrbnIpICogOCkpICYgMykKKworLyogVlMgYml0cyBhdCBbMDoxXS9bMzoyXSAqLworI2RlZmluZSBHRVRfVlMoc3IsIHNvY2tucikJCVwKKwkoKChzcikgPj4gKDIgKiAoc29ja25yKSkpICYgMykKKworLyogcmVzZXQgYml0cyBhdCBbN10vWzE1XSAqLworI2RlZmluZSBHRVRfUkVTRVQoY3IsIHNvY2tucikJCVwKKwkoKGNyKSAmICgxIDw8ICg3ICsgKDggKiAoc29ja25yKSkpKSkKKworc3RhdGljIGludCBkYjF4X3BjbWNpYV9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICB1bnNpZ25lZCBpbnQgKnZhbHVlKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gdG9fZGIxeF9zb2NrZXQoc2t0KTsKKwl1bnNpZ25lZCBzaG9ydCBjciwgc3I7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGRiMXhfY2FyZF9pbnNlcnRlZChzb2NrKSA/IFNTX0RFVEVDVCA6IDA7CisKKwljciA9IGJjc3JfcmVhZChCQ1NSX1BDTUNJQSk7CisJc3IgPSBiY3NyX3JlYWQoQkNTUl9TVEFUVVMpOworCisJLyogUEIxMTAwL1BCMTUwMDogdm9sdGFnZSBrZXkgYml0cyBhcmUgYXQgWzU6NF0gKi8KKwlpZiAoc29jay0+Ym9hcmRfdHlwZSA9PSBCT0FSRF9UWVBFX1BCMTEwMCkKKwkJc3IgPj49IDQ7CisKKwkvKiBkZXRlcm1pbmUgY2FyZCB0eXBlICovCisJc3dpdGNoIChHRVRfVlMoc3IsIHNvY2stPm5yKSkgeworCWNhc2UgMDoKKwljYXNlIDI6CisJCXN0YXR1cyB8PSBTU18zVkNBUkQ7CS8qIDNWIGNhcmQgKi8KKwljYXNlIDM6CisJCWJyZWFrOwkJCS8qIDVWIGNhcmQ6IHNldCBub3RoaW5nICovCisJZGVmYXVsdDoKKwkJc3RhdHVzIHw9IFNTX1hWQ0FSRDsJLyogdHJlYXRlZCBhcyB1bnN1cHBvcnRlZCBpbiBjb3JlICovCisJfQorCisJLyogaWYgVmNjIGlzIG5vdCB6ZXJvLCB3ZSBoYXZlIGFwcGxpZWQgcG93ZXIgdG8gYSBjYXJkICovCisJc3RhdHVzIHw9IEdFVF9WQ0MoY3IsIHNvY2stPm5yKSA/IFNTX1BPV0VST04gOiAwOworCisJLyogcmVzZXQgZGUtYXNzZXJ0ZWQ/IHRoZW4gd2UncmUgcmVhZHkgKi8KKwlzdGF0dXMgfD0gKEdFVF9SRVNFVChjciwgc29jay0+bnIpKSA/IFNTX1JFQURZIDogU1NfUkVTRVQ7CisKKwkqdmFsdWUgPSBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYjF4X3BjbWNpYV9zb2NrX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYjF4X3BjbWNpYV9zb2NrX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4MDBfcGNtY2lhX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgc3RydWN0IHBjY2FyZF9pb19tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHRvX2RiMXhfc29ja2V0KHNrdCk7CisKKwltYXAtPnN0YXJ0ID0gKHUzMilzb2NrLT52aXJ0X2lvOworCW1hcC0+c3RvcCA9IG1hcC0+c3RhcnQgKyBJT19NQVBfU0laRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1MXgwMF9wY21jaWFfc2V0X21lbV9tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgIHN0cnVjdCBwY2NhcmRfbWVtX21hcCAqbWFwKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gdG9fZGIxeF9zb2NrZXQoc2t0KTsKKworCWlmIChtYXAtPmZsYWdzICYgTUFQX0FUVFJJQikKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBzb2NrLT5waHlzX2F0dHIgKyBtYXAtPmNhcmRfc3RhcnQ7CisJZWxzZQorCQltYXAtPnN0YXRpY19zdGFydCA9IHNvY2stPnBoeXNfbWVtICsgbWFwLT5jYXJkX3N0YXJ0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgZGIxeF9wY21jaWFfb3BlcmF0aW9ucyA9IHsKKwkuaW5pdAkJCT0gZGIxeF9wY21jaWFfc29ja19pbml0LAorCS5zdXNwZW5kCQk9IGRiMXhfcGNtY2lhX3NvY2tfc3VzcGVuZCwKKwkuZ2V0X3N0YXR1cwkJPSBkYjF4X3BjbWNpYV9nZXRfc3RhdHVzLAorCS5zZXRfc29ja2V0CQk9IGRiMXhfcGNtY2lhX2NvbmZpZ3VyZSwKKwkuc2V0X2lvX21hcAkJPSBhdTF4MDBfcGNtY2lhX3NldF9pb19tYXAsCisJLnNldF9tZW1fbWFwCQk9IGF1MXgwMF9wY21jaWFfc2V0X21lbV9tYXAsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYjF4X3BjbWNpYV9zb2NrZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jazsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldCwgYmlkOworCisJc29jayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNvY2stPm5yID0gcGRldi0+aWQ7CisKKwliaWQgPSBCQ1NSX1dIT0FNSV9CT0FSRChiY3NyX3JlYWQoQkNTUl9XSE9BTUkpKTsKKwlzd2l0Y2ggKGJpZCkgeworCWNhc2UgQkNTUl9XSE9BTUlfUEIxNTAwOgorCWNhc2UgQkNTUl9XSE9BTUlfUEIxNTAwUjI6CisJY2FzZSBCQ1NSX1dIT0FNSV9QQjExMDA6CisJCXNvY2stPmJvYXJkX3R5cGUgPSBCT0FSRF9UWVBFX1BCMTEwMDsKKwkJYnJlYWs7CisJY2FzZSBCQ1NSX1dIT0FNSV9EQjEwMDAgLi4uIEJDU1JfV0hPQU1JX1BCMTU1MF9TRFI6CisJCXNvY2stPmJvYXJkX3R5cGUgPSBCT0FSRF9UWVBFX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgQkNTUl9XSE9BTUlfUEIxMjAwIC4uLiBCQ1NSX1dIT0FNSV9EQjEyMDA6CisJCXNvY2stPmJvYXJkX3R5cGUgPSBCT0FSRF9UWVBFX0RCMTIwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZGIxeHh4LXNzOiB1bmtub3duIGJvYXJkICVkIVxuIiwgYmlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQwOworCX07CisKKwkvKgorCSAqIGdhdGhlciByZXNvdXJjZXMgbmVjZXNzYXJ5IGFuZCBvcHRpb25hbCBuaWNlLXRvLWhhdmVzIHRvCisJICogb3BlcmF0ZSBhIHNvY2tldDoKKwkgKiBUaGlzIGluY2x1ZGVzIElSUXMgZm9yIENhcmRkZXRlY3Rpb24vZWplY3Rpb24sIHRoZSBjYXJkCisJICogIGl0c2VsZiBhbmQgb3B0aW9uYWwgc3RhdHVzIGNoYW5nZSBkZXRlY3Rpb24uCisJICogQWxzbywgdGhlIG1lbW9yeSBhcmVhcyBjb3ZlcmVkIGJ5IGEgc29ja2V0LiAgRm9yIHRoZXNlCisJICogIHdlIHJlcXVpcmUgdGhlIDMyYml0ICJwc2V1ZG8iIGFkZHJlc3NlcyAoc2VlIHRoZSBhdTEwMDAuaAorCSAqICBoZWFkZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorCSAqLworCisJLyogY2FyZDogaXJxIGFzc2lnbmVkIHRvIHRoZSBjYXJkIGl0c2VsZi4gKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgImNhcmQiKTsKKwlzb2NrLT5jYXJkX2lycSA9IHIgPyByLT5zdGFydCA6IDA7CisKKwkvKiBpbnNlcnQ6IGlycSB3aGljaCB0cmlnZ2VycyBvbiBjYXJkIGluc2VydGlvbi9lamVjdGlvbiAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAiaW5zZXJ0Iik7CisJc29jay0+aW5zZXJ0X2lycSA9IHIgPyByLT5zdGFydCA6IC0xOworCisJLyogc3RzY2hnOiBpcnEgd2hpY2ggdHJpZ2dlciBvbiBjYXJkIHN0YXR1cyBjaGFuZ2UgKG9wdGlvbmFsKSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAic3RzY2hnIik7CisJc29jay0+c3RzY2hnX2lycSA9IHIgPyByLT5zdGFydCA6IC0xOworCisJLyogZWplY3Q6IGlycSB3aGljaCB0cmlnZ2VycyBvbiBlamVjdGlvbiAoREIxMjAwL1BCMTIwMCBvbmx5KSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAiZWplY3QiKTsKKwlzb2NrLT5lamVjdF9pcnEgPSByID8gci0+c3RhcnQgOiAtMTsKKworCXJldCA9IC1FTk9ERVY7CisKKwkvKgorCSAqIHBzZXVkby1hdHRyOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBhdHRyaWJ1dGUgc3BhY2UKKwkgKiBmb3IgdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZQorCSAqIHJpZ2h0KS4KKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1hdHRyIik7CisJaWYgKCFyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhJWQgaGFzIG5vICdwc2V1ZG8tYXR0cicgcmVzb3VyY2UhXG4iLAorCQkJc29jay0+bnIpOworCQlnb3RvIG91dDA7CisJfQorCXNvY2stPnBoeXNfYXR0ciA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBwc2V1ZG8tbWVtOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBtZW1vcnkgc3BhY2UgZm9yCisJICogdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZSByaWdodCkKKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1tZW0iKTsKKwlpZiAoIXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBoYXMgbm8gJ3BzZXVkby1tZW0nIHJlc291cmNlIVxuIiwKKwkJCXNvY2stPm5yKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX21lbSA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBwc2V1ZG8taW86ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIElPIHNwYWNlIGZvciB0aGlzCisJICogc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUgcmlnaHQpLgorCSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLWlvIik7CisJaWYgKCFyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhJWQgaGFzIG5vICdwc2V1ZG8taW8nIHJlc291cmNlIVxuIiwKKwkJCXNvY2stPm5yKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX2lvID0gci0+c3RhcnQ7CisKKwkvKgorCSAqIFBDTUNJQSBjbGllbnQgZHJpdmVycyB1c2UgdGhlIGluYi9vdXRiIG1hY3JvcyB0byBhY2Nlc3MKKwkgKiB0aGUgSU8gcmVnaXN0ZXJzLiAgU2luY2UgbWlwc19pb19wb3J0X2Jhc2UgaXMgYWRkZWQKKwkgKiB0byB0aGUgYWNjZXNzIGFkZHJlc3Mgb2YgdGhlIG1pcHMgaW1wbGVtZW50YXRpb24gb2YKKwkgKiBpbmIvb3V0Yiwgd2UgbmVlZCB0byBzdWJ0cmFjdCBpdCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAorCSAqIHRvIGFjY2VzcyB0aGUgSS9PIG9yIE1FTSBhZGRyZXNzIGRpcmVjdGx5LCB3aXRob3V0CisJICogZ29pbmcgdGhyb3VnaCB0aGlzICJtaXBzX2lvX3BvcnRfYmFzZSIgbWVjaGFuaXNtLgorCSAqLworCXNvY2stPnZpcnRfaW8gPSAodm9pZCAqKShpb3JlbWFwKHNvY2stPnBoeXNfaW8sIElPX01BUF9TSVpFKSAtCisJCQkJIG1pcHNfaW9fcG9ydF9iYXNlKTsKKworCWlmICghc29jay0+dmlydF9pbykgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkOiBjYW5ub3QgcmVtYXAgSU8gYXJlYVxuIiwKKwkJCXNvY2stPm5yKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQwOworCX0KKworCXNvY2stPnNvY2tldC5vcHMJPSAmZGIxeF9wY21jaWFfb3BlcmF0aW9uczsKKwlzb2NrLT5zb2NrZXQub3duZXIJPSBUSElTX01PRFVMRTsKKwlzb2NrLT5zb2NrZXQucGNpX2lycQk9IHNvY2stPmNhcmRfaXJxOworCXNvY2stPnNvY2tldC5mZWF0dXJlcwk9IFNTX0NBUF9TVEFUSUNfTUFQIHwgU1NfQ0FQX1BDQ0FSRDsKKwlzb2NrLT5zb2NrZXQubWFwX3NpemUJPSBNRU1fTUFQX1NJWkU7CisJc29jay0+c29ja2V0LmlvX29mZnNldAk9ICh1bnNpZ25lZCBsb25nKXNvY2stPnZpcnRfaW87CisJc29jay0+c29ja2V0LmRldi5wYXJlbnQJPSAmcGRldi0+ZGV2OworCXNvY2stPnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzb2NrKTsKKworCXJldCA9IGRiMXhfcGNtY2lhX3NldHVwX2lycXMoc29jayk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGNhbm5vdCBzZXR1cCBpbnRlcnJ1cHRzXG4iLAorCQkJc29jay0+bnIpOworCQlnb3RvIG91dDE7CisJfQorCisJc2V0X3N0c2NoZyhzb2NrLCAwKTsKKworCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJnNvY2stPnNvY2tldCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGZhaWxlZCB0byByZWdpc3RlclxuIiwgc29jay0+bnIpOworCQlnb3RvIG91dDI7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteSBEYi9QYjF4eHggcGNtY2lhJWQgQCBpby9hdHRyL21lbSAlMDlsbHgiCisJCSIoJXApICUwOWxseCAlMDlsbHggIGNhcmQvaW5zZXJ0L3N0c2NoZy9lamVjdCBpcnFzIEAgJWQgIgorCQkiJWQgJWQgJWRcbiIsIHNvY2stPm5yLCBzb2NrLT5waHlzX2lvLCBzb2NrLT52aXJ0X2lvLAorCQlzb2NrLT5waHlzX2F0dHIsIHNvY2stPnBoeXNfbWVtLCBzb2NrLT5jYXJkX2lycSwKKwkJc29jay0+aW5zZXJ0X2lycSwgc29jay0+c3RzY2hnX2lycSwgc29jay0+ZWplY3RfaXJxKTsKKworCXJldHVybiAwOworCitvdXQyOgorCWRiMXhfcGNtY2lhX2ZyZWVfaXJxcyhzb2NrKTsKK291dDE6CisJaW91bm1hcCgodm9pZCAqKShzb2NrLT52aXJ0X2lvICsgKHUzMiltaXBzX2lvX3BvcnRfYmFzZSkpOworb3V0MDoKKwlrZnJlZShzb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkYjF4X3BjbWNpYV9zb2NrZXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRiMXhfcGNtY2lhX2ZyZWVfaXJxcyhzb2NrKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoJnNvY2stPnNvY2tldCk7CisJaW91bm1hcCgodm9pZCAqKShzb2NrLT52aXJ0X2lvICsgKHUzMiltaXBzX2lvX3BvcnRfYmFzZSkpOworCWtmcmVlKHNvY2spOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoZGV2KTsKK30KKworc3RhdGljIGludCBkYjF4X3BjbWNpYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGRiMXhfcGNtY2lhX3Btb3BzID0geworCS5yZXN1bWUJCT0gZGIxeF9wY21jaWFfcmVzdW1lLAorCS5zdXNwZW5kCT0gZGIxeF9wY21jaWFfc3VzcGVuZCwKKwkudGhhdwkJPSBkYjF4X3BjbWNpYV9yZXN1bWUsCisJLmZyZWV6ZQkJPSBkYjF4X3BjbWNpYV9zdXNwZW5kLAorfTsKKworI2RlZmluZSBEQjFYWFhfU1NfUE1PUFMgJmRiMXhfcGNtY2lhX3Btb3BzCisKKyNlbHNlCisKKyNkZWZpbmUgREIxWFhYX1NTX1BNT1BTIE5VTEwKKworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRiMXhfcGNtY2lhX3NvY2tldF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiZGIxeHh4X3BjbWNpYSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0JPSBEQjFYWFhfU1NfUE1PUFMKKwl9LAorCS5wcm9iZQkJPSBkYjF4X3BjbWNpYV9zb2NrZXRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChkYjF4X3BjbWNpYV9zb2NrZXRfcmVtb3ZlKSwKK307CisKK2ludCBfX2luaXQgZGIxeF9wY21jaWFfc29ja2V0X2xvYWQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkYjF4X3BjbWNpYV9zb2NrZXRfZHJpdmVyKTsKK30KKwordm9pZCAgX19leGl0IGRiMXhfcGNtY2lhX3NvY2tldF91bmxvYWQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZGIxeF9wY21jaWFfc29ja2V0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRiMXhfcGNtY2lhX3NvY2tldF9sb2FkKTsKK21vZHVsZV9leGl0KGRiMXhfcGNtY2lhX3NvY2tldF91bmxvYWQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBDTUNJQSBTb2NrZXQgU2VydmljZXMgZm9yIEFsY2hlbXkgRGIvUGIxeDAwIGJvYXJkcyIpOworTU9EVUxFX0FVVEhPUigiTWFudWVsIExhdXNzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCAxYTRhM2M0Li4wZjk4YmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTQyLDggKzQyLDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogCi1zcGlubG9ja190IHBjbWNpYV9kZXZfbGlzdF9sb2NrOwotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgcGNtY2lhX2NoZWNrX2RyaXZlcihzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnYpCkBAIC0xMjYsOSArMTI0LDkgQEAKIAlkeW5pZC0+aWQuZGV2aWNlX25vID0gZGV2aWNlX25vOwogCW1lbWNweShkeW5pZC0+aWQucHJvZF9pZF9oYXNoLCBwcm9kX2lkX2hhc2gsIHNpemVvZihfX3UzMikgKiA0KTsKIAotCXNwaW5fbG9jaygmcGRydi0+ZHluaWRzLmxvY2spOworCW11dGV4X2xvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZkeW5pZC0+bm9kZSwgJnBkcnYtPmR5bmlkcy5saXN0KTsKLQlzcGluX3VubG9jaygmcGRydi0+ZHluaWRzLmxvY2spOworCW11dGV4X3VubG9jaygmcGRydi0+ZHluaWRzLmxvY2spOwogCiAJaWYgKGdldF9kcml2ZXIoJnBkcnYtPmRydikpIHsKIAkJcmV0dmFsID0gZHJpdmVyX2F0dGFjaCgmcGRydi0+ZHJ2KTsKQEAgLTE0NiwxMiArMTQ0LDEyIEBACiB7CiAJc3RydWN0IHBjbWNpYV9keW5pZCAqZHluaWQsICpuOwogCi0Jc3Bpbl9sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF9sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHluaWQsIG4sICZkcnYtPmR5bmlkcy5saXN0LCBub2RlKSB7CiAJCWxpc3RfZGVsKCZkeW5pZC0+bm9kZSk7CiAJCWtmcmVlKGR5bmlkKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmRydi0+ZHluaWRzLmxvY2spOworCW11dGV4X3VubG9jaygmZHJ2LT5keW5pZHMubG9jayk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE4Miw3ICsxODAsNyBAQAogCS8qIGluaXRpYWxpemUgY29tbW9uIGZpZWxkcyAqLwogCWRyaXZlci0+ZHJ2LmJ1cyA9ICZwY21jaWFfYnVzX3R5cGU7CiAJZHJpdmVyLT5kcnYub3duZXIgPSBkcml2ZXItPm93bmVyOwotCXNwaW5fbG9ja19pbml0KCZkcml2ZXItPmR5bmlkcy5sb2NrKTsKKwltdXRleF9pbml0KCZkcml2ZXItPmR5bmlkcy5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZHJpdmVyLT5keW5pZHMubGlzdCk7CiAKIAlwcl9kZWJ1ZygicmVnaXN0ZXJpbmcgZHJpdmVyICVzXG4iLCBkcml2ZXItPmRydi5uYW1lKTsKQEAgLTIzOSwzMCArMjM3LDIxIEBACiBzdGF0aWMgdm9pZCBwY21jaWFfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKKwlpbnQgaTsKIAlkZXZfZGJnKGRldiwgInJlbGVhc2luZyBkZXZpY2VcbiIpOwogCXBjbWNpYV9wdXRfc29ja2V0KHBfZGV2LT5zb2NrZXQpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWtmcmVlKHBfZGV2LT5wcm9kX2lkW2ldKTsKIAlrZnJlZShwX2Rldi0+ZGV2bmFtZSk7CiAJa3JlZl9wdXQoJnBfZGV2LT5mdW5jdGlvbl9jb25maWctPnJlZiwgcGNtY2lhX3JlbGVhc2VfZnVuY3Rpb24pOwogCWtmcmVlKHBfZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgcGNtY2lhX2FkZF9kZXZpY2VfbGF0ZXIoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBtZmMpCi17Ci0JaWYgKCFzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgInNjaGVkdWxpbmcgdG8gYWRkICVzIHNlY29uZGFyeSIKLQkJICAgICAgICIgZGV2aWNlIHRvICVkXG4iLCBtZmMgPyAibWZjIiA6ICJwZmMiLCBzLT5zb2NrKTsKLQkJcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZyA9IDE7Ci0JCXMtPnBjbWNpYV9zdGF0ZS5tZmNfcGZjID0gbWZjOwotCQlzY2hlZHVsZV93b3JrKCZzLT5kZXZpY2VfYWRkKTsKLQl9Ci0JcmV0dXJuOwotfQogCiBzdGF0aWMgaW50IHBjbWNpYV9kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7Ci0Jc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKmRpZDsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKIAljaXN0cGxfY29uZmlnX3QgY2lzX2NvbmZpZzsKIAlpbnQgcmV0ID0gMDsKQEAgLTI3NSwxOCArMjY0LDYgQEAKIAlwX2RydiA9IHRvX3BjbWNpYV9kcnYoZGV2LT5kcml2ZXIpOwogCXMgPSBwX2Rldi0+c29ja2V0OwogCi0JLyogVGhlIFBDTUNJQSBjb2RlIHBhc3NlcyB0aGUgbWF0Y2ggZGF0YSBpbiB2aWEgZGV2X3NldF9kcnZkYXRhKGRldikKLQkgKiB3aGljaCBpcyBhbiB1Z2x5IGhhY2suIE9uY2UgdGhlIGRyaXZlciBwcm9iZSBpcyBjYWxsZWQgaXQgbWF5Ci0JICogYW5kIG9mdGVuIHdpbGwgb3ZlcndyaXRlIHRoZSBtYXRjaCBkYXRhIHNvIHdlIG11c3Qgc2F2ZSBpdCBmaXJzdAotCSAqCi0JICogaGFuZGxlIHBzZXVkbyBtdWx0aWZ1bmN0aW9uIGRldmljZXM6Ci0JICogdGhlcmUgYXJlIGF0IG1vc3QgdHdvIHBzZXVkbyBtdWx0aWZ1bmN0aW9uIGRldmljZXMuCi0JICogaWYgd2UncmUgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZmlyc3QsIHNjaGVkdWxlIGEKLQkgKiBjYWxsIHdoaWNoIHdpbGwgdGhlbiBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZSB0d28KLQkgKiBwc2V1ZG8gZGV2aWNlcywgYW5kIGlmIG5vdCwgYWRkIHRoZSBzZWNvbmQgb25lLgotCSAqLwotCWRpZCA9IGRldl9nZXRfZHJ2ZGF0YSgmcF9kZXYtPmRldik7Ci0KIAlkZXZfZGJnKGRldiwgInRyeWluZyB0byBiaW5kIHRvICVzXG4iLCBwX2Rydi0+ZHJ2Lm5hbWUpOwogCiAJaWYgKCghcF9kcnYtPnByb2JlKSB8fCAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHx8CkBAIC0zMTUsOSArMjkyLDExIEBACiAJCWdvdG8gcHV0X21vZHVsZTsKIAl9CiAKLQlpZiAoZGlkICYmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pICYmCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlpZiAoKHMtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjKSAmJgogCSAgICAocF9kZXYtPnNvY2tldC0+ZGV2aWNlX2NvdW50ID09IDEpICYmIChwX2Rldi0+ZGV2aWNlX25vID09IDApKQotCQlwY21jaWFfYWRkX2RldmljZV9sYXRlcihwX2Rldi0+c29ja2V0LCAwKTsKKwkJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9SRVFVRVJZKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIHB1dF9tb2R1bGU6CiAJaWYgKHJldCkKQEAgLTMzNiwyNiArMzE1LDI3IEBACiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSp0bXA7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKIAlkZXZfZGJnKGxlZnRvdmVyID8gJmxlZnRvdmVyLT5kZXYgOiAmcy0+ZGV2LAogCQkgICAicGNtY2lhX2NhcmRfcmVtb3ZlKCVkKSAlc1xuIiwgcy0+c29jaywKIAkJICAgbGVmdG92ZXIgPyBsZWZ0b3Zlci0+ZGV2bmFtZSA6ICIiKTsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJaWYgKCFsZWZ0b3ZlcikKIAkJcy0+ZGV2aWNlX2NvdW50ID0gMDsKIAllbHNlCiAJCXMtPmRldmljZV9jb3VudCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJLyogdW5yZWdpc3RlciBhbGwgcGNtY2lhX2RldmljZXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgc29ja2V0LCBleGNlcHQgbGVmdG92ZXIgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocF9kZXYsIHRtcCwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7CiAJCWlmIChwX2RldiA9PSBsZWZ0b3ZlcikKIAkJCWNvbnRpbnVlOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlsaXN0X2RlbCgmcF9kZXYtPnNvY2tldF9kZXZpY2VfbGlzdCk7CiAJCXBfZGV2LT5fcmVtb3ZlZCA9IDE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCQlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBkZXZpY2VcbiIpOwogCQlkZXZpY2VfdW5yZWdpc3RlcigmcF9kZXYtPmRldik7CkBAIC0zNjgsNyArMzQ4LDYgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQ7CiAJaW50IGk7CiAKIAlwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKQEAgLTM4MCw5ICszNTksOCBAQAogCSAqIHBzZXVkbyBtdWx0aS1mdW5jdGlvbiBjYXJkLCB3ZSBuZWVkIHRvIHVuYmluZAogCSAqIGFsbCBkZXZpY2VzCiAJICovCi0JZGlkID0gZGV2X2dldF9kcnZkYXRhKCZwX2Rldi0+ZGV2KTsKLQlpZiAoZGlkICYmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pICYmCi0JICAgIChwX2Rldi0+c29ja2V0LT5kZXZpY2VfY291bnQgIT0gMCkgJiYKKwlpZiAoKHBfZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjKSAmJgorCSAgICAocF9kZXYtPnNvY2tldC0+ZGV2aWNlX2NvdW50ID4gMCkgJiYKIAkgICAgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gMCkpCiAJCXBjbWNpYV9jYXJkX3JlbW92ZShwX2Rldi0+c29ja2V0LCBwX2Rldik7CiAKQEAgLTQzMSwxNiArNDA5LDIwIEBACiAKIAlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLAogCQkJICAgICAgIENJU1RQTF9NQU5GSUQsICZtYW5mX2lkKSkgeworCQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCQlwX2Rldi0+bWFuZl9pZCA9IG1hbmZfaWQubWFuZjsKIAkJcF9kZXYtPmNhcmRfaWQgPSBtYW5mX2lkLmNhcmQ7CiAJCXBfZGV2LT5oYXNfbWFuZl9pZCA9IDE7CiAJCXBfZGV2LT5oYXNfY2FyZF9pZCA9IDE7CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAl9CiAKIAlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLAogCQkJICAgICAgIENJU1RQTF9GVU5DSUQsICZmdW5jX2lkKSkgeworCQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCQlwX2Rldi0+ZnVuY19pZCA9IGZ1bmNfaWQuZnVuYzsKIAkJcF9kZXYtPmhhc19mdW5jX2lkID0gMTsKKwkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCX0gZWxzZSB7CiAJCS8qIHJ1bGUgb2YgdGh1bWI6IGNhcmRzIHdpdGggbm8gRlVOQ0lELCBidXQgd2l0aAogCQkgKiBjb21tb24gbWVtb3J5IGRldmljZSBnZW9tZXRyeSBpbmZvcm1hdGlvbiwgYXJlCkBAIC00NTcsMTcgKzQzOSwyMSBAQAogCQkJZGV2X2RiZygmcF9kZXYtPmRldiwKIAkJCQkgICAibWVtIGRldmljZSBnZW9tZXRyeSBwcm9iYWJseSBtZWFucyAiCiAJCQkJICAgIkZVTkNJRF9NRU1PUllcbiIpOworCQkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJCXBfZGV2LT5mdW5jX2lkID0gQ0lTVFBMX0ZVTkNJRF9NRU1PUlk7CiAJCQlwX2Rldi0+aGFzX2Z1bmNfaWQgPSAxOworCQkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCQl9CiAJCWtmcmVlKGRldmdlbyk7CiAJfQogCiAJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMSwKIAkJCSAgICAgICB2ZXJzMSkpIHsKKwkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJZm9yIChpID0gMDsgaSA8IG1pbl90KHVuc2lnbmVkIGludCwgNCwgdmVyczEtPm5zKTsgaSsrKSB7CiAJCQljaGFyICp0bXA7CiAJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCQkJY2hhciAqbmV3OwogCiAJCQl0bXAgPSB2ZXJzMS0+c3RyICsgdmVyczEtPm9mc1tpXTsKIApAQCAtNDc1LDE0ICs0NjEsMTcgQEAKIAkJCWlmICgobGVuZ3RoIDwgMikgfHwgKGxlbmd0aCA+IDI1NSkpCiAJCQkJY29udGludWU7CiAKLQkJCXBfZGV2LT5wcm9kX2lkW2ldID0ga21hbGxvYyhzaXplb2YoY2hhcikgKiBsZW5ndGgsCi0JCQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXBfZGV2LT5wcm9kX2lkW2ldKQorCQkJbmV3ID0ga21hbGxvYyhzaXplb2YoY2hhcikgKiBsZW5ndGgsIEdGUF9LRVJORUwpOworCQkJaWYgKCFuZXcpCiAJCQkJY29udGludWU7CiAKLQkJCXBfZGV2LT5wcm9kX2lkW2ldID0gc3RybmNweShwX2Rldi0+cHJvZF9pZFtpXSwKLQkJCQkJCSAgICB0bXAsIGxlbmd0aCk7CisJCQluZXcgPSBzdHJuY3B5KG5ldywgdG1wLCBsZW5ndGgpOworCisJCQl0bXAgPSBwX2Rldi0+cHJvZF9pZFtpXTsKKwkJCXBfZGV2LT5wcm9kX2lkW2ldID0gbmV3OworCQkJa2ZyZWUodG1wKTsKIAkJfQorCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJfQogCiAJa2ZyZWUodmVyczEpOwpAQCAtNTAyLDcgKzQ5MSw3IEBACiBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2RldmljZV9hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsICp0bXBfZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CiAKIAlzID0gcGNtY2lhX2dldF9zb2NrZXQocyk7CiAJaWYgKCFzKQpAQCAtNTEyLDE2ICs1MDEsMTkgQEAKIAogCXByX2RlYnVnKCJhZGRpbmcgZGV2aWNlIHRvICVkLCBmdW5jdGlvbiAlZFxuIiwgcy0+c29jaywgZnVuY3Rpb24pOwogCi0JLyogbWF4IG9mIDQgZGV2aWNlcyBwZXIgY2FyZCAqLwotCWlmIChzLT5kZXZpY2VfY291bnQgPT0gNCkKLQkJZ290byBlcnJfcHV0OwotCiAJcF9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNtY2lhX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghcF9kZXYpCiAJCWdvdG8gZXJyX3B1dDsKIAotCXBfZGV2LT5zb2NrZXQgPSBzOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJcF9kZXYtPmRldmljZV9ubyA9IChzLT5kZXZpY2VfY291bnQrKyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCisJLyogbWF4IG9mIDIgZGV2aWNlcyBwZXIgY2FyZCAqLworCWlmIChwX2Rldi0+ZGV2aWNlX25vID49IDIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlwX2Rldi0+c29ja2V0ID0gczsKIAlwX2Rldi0+ZnVuYyAgID0gZnVuY3Rpb247CiAKIAlwX2Rldi0+ZGV2LmJ1cyA9ICZwY21jaWFfYnVzX3R5cGU7CkBAIC01MzgsNyArNTMwLDcgQEAKIAkJZ290byBlcnJfZnJlZTsKIAlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAiZGV2bmFtZSBpcyAlc1xuIiwgcF9kZXYtPmRldm5hbWUpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAogCS8qCiAJICogcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZyBtdXN0IGJlIHRoZSBzYW1lIGZvciBhbGwgY2FyZCBmdW5jdGlvbnMuCkBAIC01NTYsNyArNTQ4LDcgQEAKIAkvKiBBZGQgdG8gdGhlIGxpc3QgaW4gcGNtY2lhX2J1c19zb2NrZXQgKi8KIAlsaXN0X2FkZCgmcF9kZXYtPnNvY2tldF9kZXZpY2VfbGlzdCwgJnMtPmRldmljZXNfbGlzdCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCWlmICghcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZykgewogCQlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAiY3JlYXRpbmcgY29uZmlnX3RcbiIpOwpAQCAtNTgxLDE0ICs1NzMsMTkgQEAKIAlyZXR1cm4gcF9kZXY7CiAKICBlcnJfdW5yZWc6Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlsaXN0X2RlbCgmcF9kZXYtPnNvY2tldF9kZXZpY2VfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKICBlcnJfZnJlZToKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCXMtPmRldmljZV9jb3VudC0tOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWtmcmVlKHBfZGV2LT5wcm9kX2lkW2ldKTsKIAlrZnJlZShwX2Rldi0+ZGV2bmFtZSk7CiAJa2ZyZWUocF9kZXYpOwotCXMtPmRldmljZV9jb3VudC0tOwogIGVycl9wdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkZXZpY2VfYWRkX2xvY2spOwogCXBjbWNpYV9wdXRfc29ja2V0KHMpOwpAQCAtNjAxLDE5ICs1OTgsMjMgQEAKIHsKIAljaXN0cGxfbG9uZ2xpbmtfbWZjX3QgbWZjOwogCXVuc2lnbmVkIGludCBub19mdW5jcywgaSwgbm9fY2hhaW5zOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAtRUFHQUlOOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlpZiAoIShzLT5yZXNvdXJjZV9zZXR1cF9kb25lKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsCiAJCQkgICAibm8gcmVzb3VyY2VzIGF2YWlsYWJsZSwgZGVsYXlpbmcgY2FyZF9hZGRcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KIAogCWlmIChwY21jaWFfdmFsaWRhdGVfbWVtKHMpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgInZhbGlkYXRpbmcgbWVtIHJlc291cmNlcyBmYWlsZWQsICIKIAkJICAgICAgICJkZWxheWluZyBjYXJkX2FkZFxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiwgYnV0IGxhdGVyLi4uICovCiAJfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJm5vX2NoYWlucyk7CiAJaWYgKHJldCB8fCAhbm9fY2hhaW5zKSB7CkBAIC02MzQsMTcgKzYzNSw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgcGNtY2lhX2RlbGF5ZWRfYWRkX2RldmljZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBjbWNpYV9zb2NrZXQsIGRldmljZV9hZGQpOwotCWRldl9kYmcoJnMtPmRldiwgImFkZGluZyBhZGRpdGlvbmFsIGRldmljZSB0byAlZFxuIiwgcy0+c29jayk7Ci0JcGNtY2lhX2RldmljZV9hZGQocywgcy0+cGNtY2lhX3N0YXRlLm1mY19wZmMpOwotCXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcgPSAwOwotCXMtPnBjbWNpYV9zdGF0ZS5tZmNfcGZjID0gMDsKLX0KLQotc3RhdGljIGludCBwY21jaWFfcmVxdWVyeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKiBfZGF0YSkKK3N0YXRpYyBpbnQgcGNtY2lhX3JlcXVlcnlfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICogX2RhdGEpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwogCWlmICghcF9kZXYtPmRldi5kcml2ZXIpIHsKQEAgLTY1NSw0NSArNjQ2LDY3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBjbWNpYV9idXNfcmVzY2FuKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsIGludCBuZXdfY2lzKQorCitzdGF0aWMgdm9pZCBwY21jaWFfcmVxdWVyeShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKLQlpbnQgbm9fZGV2aWNlcyA9IDA7Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcHJlc2VudCwgaGFzX3BmYzsKIAotCS8qIG11c3QgYmUgY2FsbGVkIHdpdGggc2t0X211dGV4IGhlbGQgKi8KLQlkZXZfZGJnKCZza3QtPmRldiwgInJlLXNjYW5uaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCXByZXNlbnQgPSBzLT5wY21jaWFfc3RhdGUucHJlc2VudDsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmc2t0LT5kZXZpY2VzX2xpc3QpKQotCQlub19kZXZpY2VzID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCWlmICghcHJlc2VudCkKKwkJcmV0dXJuOwogCi0JLyogSWYgdGhpcyBpcyBiZWNhdXNlIG9mIGEgQ0lTIG92ZXJyaWRlLCBzdGFydCBvdmVyICovCi0JaWYgKG5ld19jaXMgJiYgIW5vX2RldmljZXMpCi0JCXBjbWNpYV9jYXJkX3JlbW92ZShza3QsIE5VTEwpOwotCi0JLyogaWYgbm8gZGV2aWNlcyB3ZXJlIGFkZGVkIGZvciB0aGlzIHNvY2tldCB5ZXQgYmVjYXVzZSBvZgotCSAqIG1pc3NpbmcgcmVzb3VyY2UgaW5mb3JtYXRpb24gb3Igb3RoZXIgdHJvdWJsZSwgd2UgbmVlZCB0bwotCSAqIGRvIHRoaXMgbm93LiAqLwotCWlmIChub19kZXZpY2VzIHx8IG5ld19jaXMpIHsKLQkJcmV0ID0gcGNtY2lhX2NhcmRfYWRkKHNrdCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm47CisJaWYgKHMtPmZ1bmN0aW9ucyA9PSAwKSB7CisJCXBjbWNpYV9jYXJkX2FkZChzKTsKKwkJcmV0dXJuOwogCX0KIAogCS8qIHNvbWUgZGV2aWNlIGluZm9ybWF0aW9uIG1pZ2h0IGhhdmUgY2hhbmdlZCBiZWNhdXNlIG9mIGEgQ0lTCiAJICogdXBkYXRlIG9yIGJlY2F1c2Ugd2UgY2FuIGZpbmFsbHkgcmVhZCBpdCBjb3JyZWN0bHkuLi4gc28KIAkgKiBkZXRlcm1pbmUgaXQgYWdhaW4sIG92ZXJ3cml0aW5nIG9sZCB2YWx1ZXMgaWYgbmVjZXNzYXJ5LiAqLwotCWJ1c19mb3JfZWFjaF9kZXYoJnBjbWNpYV9idXNfdHlwZSwgTlVMTCwgTlVMTCwgcGNtY2lhX3JlcXVlcnkpOworCWJ1c19mb3JfZWFjaF9kZXYoJnBjbWNpYV9idXNfdHlwZSwgTlVMTCwgTlVMTCwgcGNtY2lhX3JlcXVlcnlfY2FsbGJhY2spOworCisJLyogaWYgdGhlIENJUyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIG51bWJlciBvZgorCSAqIGZ1bmN0aW9ucyBjaGFuZ2VkLiAqLworCWlmIChzLT5mYWtlX2NpcykgeworCQlpbnQgb2xkX2Z1bmNzLCBuZXdfZnVuY3M7CisJCWNpc3RwbF9sb25nbGlua19tZmNfdCBtZmM7CisKKwkJLyogZG9lcyB0aGlzIGNpcyBvdmVycmlkZSBhZGQgb3IgcmVtb3ZlIGZ1bmN0aW9ucz8gKi8KKwkJb2xkX2Z1bmNzID0gcy0+ZnVuY3Rpb25zOworCisJCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9MT05HTElOS19NRkMsCisJCQkJCSZtZmMpKQorCQkJbmV3X2Z1bmNzID0gbWZjLm5mbjsKKwkJZWxzZQorCQkJbmV3X2Z1bmNzID0gMTsKKwkJaWYgKG9sZF9mdW5jcyA+IG5ld19mdW5jcykgeworCQkJcGNtY2lhX2NhcmRfcmVtb3ZlKHMsIE5VTEwpOworCQkJcGNtY2lhX2NhcmRfYWRkKHMpOworCQl9IGVsc2UgaWYgKG5ld19mdW5jcyA+IG9sZF9mdW5jcykgeworCQkJcy0+ZnVuY3Rpb25zID0gbmV3X2Z1bmNzOworCQkJcGNtY2lhX2RldmljZV9hZGQocywgMSk7CisJCX0KKwl9CisKKwkvKiBJZiB0aGUgUENNQ0lBIGRldmljZSBjb25zaXN0cyBvZiB0d28gcHNldWRvIGRldmljZXMsCisJICogY2FsbCBwY21jaWFfZGV2aWNlX2FkZCgpIC0tIHdoaWNoIHdpbGwgZmFpbCBpZiBib3RoCisJICogZGV2aWNlcyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkLiAqLworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJaGFzX3BmYyA9IHMtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwlpZiAoaGFzX3BmYykKKwkJcGNtY2lhX2RldmljZV9hZGQocywgMCk7CiAKIAkvKiB3ZSByZS1zY2FuIGFsbCBkZXZpY2VzLCBub3QganVzdCB0aGUgb25lcyBjb25uZWN0ZWQgdG8gdGhpcwogCSAqIHNvY2tldC4gVGhpcyBkb2VzIG5vdCBtYXR0ZXIsIHRob3VnaC4gKi8KLQlyZXQgPSBidXNfcmVzY2FuX2RldmljZXMoJnBjbWNpYV9idXNfdHlwZSk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBidXNfcmVzY2FuX2RldmljZXMgZmFpbGVkXG4iKTsKKwlpZiAoYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpKQorCQlkZXZfd2Fybigmcy0+ZGV2LCAicmVzY2FubmluZyB0aGUgYnVzIGZhaWxlZFxuIik7CiB9CiAKKwogI2lmZGVmIENPTkZJR19QQ01DSUFfTE9BRF9DSVMKIAogLyoqCkBAIC03MTAsOSArNzIzLDYgQEAKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IGRldi0+c29ja2V0OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IHJldCA9IC1FTk9NRU07Ci0JaW50IG5vX2Z1bmNzOwotCWludCBvbGRfZnVuY3M7Ci0JY2lzdHBsX2xvbmdsaW5rX21mY190IG1mYzsKIAogCWlmICghZmlsZW5hbWUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzM5LDE5ICs3NDksOCBAQAogCQkvKiB1cGRhdGUgaW5mb3JtYXRpb24gKi8KIAkJcGNtY2lhX2RldmljZV9xdWVyeShkZXYpOwogCi0JCS8qIGRvZXMgdGhpcyBjaXMgb3ZlcnJpZGUgYWRkIG9yIHJlbW92ZSBmdW5jdGlvbnM/ICovCi0JCW9sZF9mdW5jcyA9IHMtPmZ1bmN0aW9uczsKLQotCQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfTE9OR0xJTktfTUZDLCAmbWZjKSkKLQkJCW5vX2Z1bmNzID0gbWZjLm5mbjsKLQkJZWxzZQotCQkJbm9fZnVuY3MgPSAxOwotCQlzLT5mdW5jdGlvbnMgPSBub19mdW5jczsKLQotCQlpZiAob2xkX2Z1bmNzID4gbm9fZnVuY3MpCi0JCQlwY21jaWFfY2FyZF9yZW1vdmUocywgZGV2KTsKLQkJZWxzZSBpZiAobm9fZnVuY3MgPiBvbGRfZnVuY3MpCi0JCQlwY21jaWFfYWRkX2RldmljZV9sYXRlcihzLCAxKTsKKwkJLyogcmVxdWVyeSAoYXMgbnVtYmVyIG9mIGZ1bmN0aW9ucyBtaWdodCBoYXZlIGNoYW5nZWQpICovCisJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CiAJfQogIHJlbGVhc2U6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CkBAIC04MTgsOSArODE3LDE0IEBACiAJaWYgKGRpZC0+bWF0Y2hfZmxhZ3MgJiBQQ01DSUFfREVWX0lEX01BVENIX0RFVklDRV9OTykgewogCQlpZiAoZGV2LT5kZXZpY2Vfbm8gIT0gZGlkLT5kZXZpY2Vfbm8pCiAJCQlyZXR1cm4gMDsKKwkJbXV0ZXhfbG9jaygmZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisJCWRldi0+c29ja2V0LT5wY21jaWFfc3RhdGUuaGFzX3BmYyA9IDE7CisJCW11dGV4X3VubG9jaygmZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJfQogCiAJaWYgKGRpZC0+bWF0Y2hfZmxhZ3MgJiBQQ01DSUFfREVWX0lEX01BVENIX0ZVTkNfSUQpIHsKKwkJaW50IHJldDsKKwogCQlpZiAoKCFkZXYtPmhhc19mdW5jX2lkKSB8fCAoZGV2LT5mdW5jX2lkICE9IGRpZC0+ZnVuY19pZCkpCiAJCQlyZXR1cm4gMDsKIApAQCAtODM1LDEwICs4MzksMTUgQEAKIAkJICogYWZ0ZXIgaXQgaGFzIHJlLWNoZWNrZWQgdGhhdCB0aGVyZSBpcyBubyBwb3NzaWJsZSBtb2R1bGUKIAkJICogd2l0aCBhIHByb2RfaWQvbWFuZl9pZC9jYXJkX2lkIG1hdGNoLgogCQkgKi8KLQkJZGV2X2RiZygmZGV2LT5kZXYsCi0JCQkic2tpcHBpbmcgRlVOQ19JRCBtYXRjaCB1bnRpbCB1c2Vyc3BhY2UgaW50ZXJhY3Rpb25cbiIpOwotCQlpZiAoIWRldi0+YWxsb3dfZnVuY19pZF9tYXRjaCkKKwkJbXV0ZXhfbG9jaygmZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisJCXJldCA9IGRldi0+YWxsb3dfZnVuY19pZF9tYXRjaDsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKworCQlpZiAoIXJldCkgeworCQkJZGV2X2RiZygmZGV2LT5kZXYsCisJCQkJInNraXBwaW5nIEZVTkNfSUQgbWF0Y2ggdW50aWwgdXNlcnNwYWNlIEFDS1xuIik7CiAJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9GQUtFX0NJUykgewpAQCAtODU5LDggKzg2OCw2IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBkaWQpOwotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTg3MywxNiArODgwLDE2IEBACiAJc3RydWN0IHBjbWNpYV9keW5pZCAqZHluaWQ7CiAKIAkvKiBtYXRjaCBkeW5hbWljIGRldmljZXMgZmlyc3QgKi8KLQlzcGluX2xvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfbG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR5bmlkLCAmcF9kcnYtPmR5bmlkcy5saXN0LCBub2RlKSB7CiAJCWRldl9kYmcoZGV2LCAidHJ5aW5nIHRvIG1hdGNoIHRvICVzXG4iLCBkcnYtPm5hbWUpOwogCQlpZiAocGNtY2lhX2Rldm1hdGNoKHBfZGV2LCAmZHluaWQtPmlkKSkgewogCQkJZGV2X2RiZyhkZXYsICJtYXRjaGVkIHRvICVzXG4iLCBkcnYtPm5hbWUpOwotCQkJc3Bpbl91bmxvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CisJCQltdXRleF91bmxvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF91bmxvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CiAKICNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCiAJLyogbWF0Y2hpbmcgYnkgY2FyZG1nciAqLwpAQCAtOTcwLDEzICs5NzcsMTQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByYzsKIAogCWRvd24oJmRldi0+c2VtKTsKIAlyYyA9IHBjbWNpYV9kZXZfcmVzdW1lKGRldik7CiAJdXAoJmRldi0+c2VtKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogcGVyLWRldmljZSBzeXNmcyBvdXRwdXQgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTAyNyw3ICsxMDM1LDcgQEAKIAlpZiAoKCFwX2Rldi0+c3VzcGVuZGVkKSAmJiAhc3RybmNtcChidWYsICJvZmYiLCAzKSkKIAkJcmV0ID0gcnVudGltZV9zdXNwZW5kKGRldik7CiAJZWxzZSBpZiAocF9kZXYtPnN1c3BlbmRlZCAmJiAhc3RybmNtcChidWYsICJvbiIsIDIpKQotCQlydW50aW1lX3Jlc3VtZShkZXYpOworCQlyZXQgPSBydW50aW1lX3Jlc3VtZShkZXYpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwogfQpAQCAtMTA1OSwxOSArMTA2NywxNCBAQAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwotCWludCByZXQ7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPnNrdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAlwX2Rldi0+YWxsb3dfZnVuY19pZF9tYXRjaCA9IDE7Ci0JbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5za3RfbXV0ZXgpOwotCi0JcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogYnVzX3Jlc2Nhbl9kZXZpY2VzIGZhaWxlZCBhZnRlciAiCi0JCSAgICAgICAiYWxsb3dpbmcgZnVuY19pZCBtYXRjaGVzXG4iKTsKKwltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocF9kZXYtPnNvY2tldCwgUENNQ0lBX1VFVkVOVF9SRVFVRVJZKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTEwOTksOCArMTEwMiwxMyBAQAogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAocF9kZXYtPnN1c3BlbmRlZCkKKwltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCWlmIChwX2Rldi0+c3VzcGVuZGVkKSB7CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcmV0dXJuIDA7CisJfQorCXBfZGV2LT5zdXNwZW5kZWQgPSAxOworCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAogCWRldl9kYmcoZGV2LCAic3VzcGVuZGluZ1xuIik7CiAKQEAgLTExMTcsNiArMTEyNSw5IEBACiAJCQkJICAgInBjbWNpYTogZGV2aWNlICVzIChkcml2ZXIgJXMpIGRpZCAiCiAJCQkJICAgIm5vdCB3YW50IHRvIGdvIHRvIHNsZWVwICglZClcbiIsCiAJCQkJICAgcF9kZXYtPmRldm5hbWUsIHBfZHJ2LT5kcnYubmFtZSwgcmV0KTsKKwkJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisJCQlwX2Rldi0+c3VzcGVuZGVkID0gMDsKKwkJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtMTEyNyw4ICsxMTM4LDYgQEAKIAl9CiAKICBvdXQ6Ci0JaWYgKCFyZXQpCi0JCXBfZGV2LT5zdXNwZW5kZWQgPSAxOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExMzksOCArMTE0OCwxMyBAQAogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIXBfZGV2LT5zdXNwZW5kZWQpCisJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKwlpZiAoIXBfZGV2LT5zdXNwZW5kZWQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gMDsKKwl9CisJcF9kZXYtPnN1c3BlbmRlZCA9IDA7CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCiAJZGV2X2RiZyhkZXYsICJyZXN1bWluZ1xuIik7CiAKQEAgLTExNjEsOCArMTE3NSw2IEBACiAJCXJldCA9IHBfZHJ2LT5yZXN1bWUocF9kZXYpOwogCiAgb3V0OgotCWlmICghcmV0KQotCQlwX2Rldi0+c3VzcGVuZGVkID0gMDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjM3LDEzICsxMjQ5LDIyIEBACiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBDU19FVkVOVF9DQVJEX1JFTU9WQUw6CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCXMtPnBjbWNpYV9zdGF0ZS5wcmVzZW50ID0gMDsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlwY21jaWFfY2FyZF9yZW1vdmUoc2t0LCBOVUxMKTsKIAkJaGFuZGxlX2V2ZW50KHNrdCwgZXZlbnQpOworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQlkZXN0cm95X2Npc19jYWNoZShzKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlicmVhazsKIAogCWNhc2UgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT046CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJCXMtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjID0gMDsKIAkJcy0+cGNtY2lhX3N0YXRlLnByZXNlbnQgPSAxOworCQlkZXN0cm95X2Npc19jYWNoZShzKTsgLyogdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4uLiAqLworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXBjbWNpYV9jYXJkX2FkZChza3QpOwogCQloYW5kbGVfZXZlbnQoc2t0LCBldmVudCk7CiAJCWJyZWFrOwpAQCAtMTI1MSw4ICsxMjcyLDI0IEBACiAJY2FzZSBDU19FVkVOVF9FSkVDVElPTl9SRVFVRVNUOgogCQlicmVhazsKIAotCWNhc2UgQ1NfRVZFTlRfUE1fU1VTUEVORDoKIAljYXNlIENTX0VWRU5UX1BNX1JFU1VNRToKKwkJaWYgKHZlcmlmeV9jaXNfY2FjaGUoc2t0KSAhPSAwKSB7CisJCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtaXNtYXRjaCAtIGRpZmZlcmVudCBjYXJkXG4iKTsKKwkJCS8qIGZpcnN0LCByZW1vdmUgdGhlIGNhcmQgKi8KKwkJCWRzX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7CisJCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQkJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsKKwkJCWtmcmVlKHNrdC0+ZmFrZV9jaXMpOworCQkJc2t0LT5mYWtlX2NpcyA9IE5VTEw7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQkvKiBub3csIGFkZCB0aGUgbmV3IGNhcmQgKi8KKwkJCWRzX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04sCisJCQkJIENTX0VWRU5UX1BSSV9MT1cpOworCQl9CisJCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIENTX0VWRU5UX1BNX1NVU1BFTkQ6CiAJY2FzZSBDU19FVkVOVF9SRVNFVF9QSFlTSUNBTDoKIAljYXNlIENTX0VWRU5UX0NBUkRfUkVTRVQ6CiAJZGVmYXVsdDoKQEAgLTEyNzUsOSArMTMxMiwxMyBAQAogCWlmICghcF9kZXYpCiAJCXJldHVybiBOVUxMOwogCisJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAlpZiAoIXBfZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5wcmVzZW50KQogCQlnb3RvIG91dDsKIAorCWlmIChwX2Rldi0+c29ja2V0LT5wY21jaWFfc3RhdGUuZGVhZCkKKwkJZ290byBvdXQ7CisKIAlpZiAocF9kZXYtPl9yZW1vdmVkKQogCQlnb3RvIG91dDsKIApAQCAtMTI4Niw2ICsxMzI3LDcgQEAKIAogCXJldCA9IHBfZGV2OwogIG91dDoKKwltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJcGNtY2lhX3B1dF9kZXYocF9kZXYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMjk1LDcgKzEzMzcsOCBAQAogc3RhdGljIHN0cnVjdCBwY21jaWFfY2FsbGJhY2sgcGNtY2lhX2J1c19jYWxsYmFjayA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuZXZlbnQgPSBkc19ldmVudCwKLQkucmVxdWVyeSA9IHBjbWNpYV9idXNfcmVzY2FuLAorCS5yZXF1ZXJ5ID0gcGNtY2lhX3JlcXVlcnksCisJLnZhbGlkYXRlID0gcGNjYXJkX3ZhbGlkYXRlX2NpcywKIAkuc3VzcGVuZCA9IHBjbWNpYV9idXNfc3VzcGVuZCwKIAkucmVzdW1lID0gcGNtY2lhX2J1c19yZXN1bWUsCiB9OwpAQCAtMTMxMywxNyArMTM1NiwxNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKgotCSAqIFVnbHkuIEJ1dCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdGhyZWFkcyB0byBoYXZlIHN0YXJ0ZWQgdXAuCi0JICogV2UgcmVhbGx5IHNob3VsZCBsZXQgdGhlIGRyaXZlcnMgdGhlbXNlbHZlcyBkcml2ZSBzb21lIG9mIHRoaXMuLgotCSAqLwotCW1zbGVlcCgyNTApOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCAmcGNjYXJkX2Npc19hdHRyKTsKKwlpZiAocmV0KSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsIGRldiwgIlBDTUNJQSByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJcGNtY2lhX3B1dF9zb2NrZXQoc29ja2V0KTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKICNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc29ja2V0LT5xdWV1ZSk7CiAjZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmc29ja2V0LT5kZXZpY2VzX2xpc3QpOwotCUlOSVRfV09SSygmc29ja2V0LT5kZXZpY2VfYWRkLCBwY21jaWFfZGVsYXllZF9hZGRfZGV2aWNlKTsKIAltZW1zZXQoJnNvY2tldC0+cGNtY2lhX3N0YXRlLCAwLCBzaXplb2YodTgpKTsKIAlzb2NrZXQtPmRldmljZV9jb3VudCA9IDA7CiAKQEAgLTEzNDUsMTQgKzEzODgsMjAgQEAKIAlpZiAoIXNvY2tldCkKIAkJcmV0dXJuOwogCisJbXV0ZXhfbG9jaygmc29ja2V0LT5vcHNfbXV0ZXgpOwogCXNvY2tldC0+cGNtY2lhX3N0YXRlLmRlYWQgPSAxOworCW11dGV4X3VubG9jaygmc29ja2V0LT5vcHNfbXV0ZXgpOworCiAJcGNjYXJkX3JlZ2lzdGVyX3BjbWNpYShzb2NrZXQsIE5VTEwpOwogCiAJLyogdW5yZWdpc3RlciBhbnkgdW5ib3VuZCBkZXZpY2VzICovCiAJbXV0ZXhfbG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCXBjbWNpYV9jYXJkX3JlbW92ZShzb2NrZXQsIE5VTEwpOworCXJlbGVhc2VfY2lzX21lbShzb2NrZXQpOwogCW11dGV4X3VubG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZkZXYtPmtvYmosICZwY2NhcmRfY2lzX2F0dHIpOworCiAJcGNtY2lhX3B1dF9zb2NrZXQoc29ja2V0KTsKIAogCXJldHVybjsKQEAgLTEzODMsOCArMTQzMiw2IEBACiB7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19pbml0KCZwY21jaWFfZGV2X2xpc3RfbG9jayk7Ci0KIAlyZXQgPSBidXNfcmVnaXN0ZXIoJnBjbWNpYV9idXNfdHlwZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNtY2lhOiBidXNfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jIGIvZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jCmluZGV4IGQxODdiYTQuLjg5Y2ZkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMKQEAgLTM0Nyw3ICszNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBlbGVjdHJhX2NmX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbGVjdHJhX2NmX21hdGNoW10gPSB7CiAJewogCQkuY29tcGF0aWJsZSAgID0gImVsZWN0cmEtY2YiLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaCBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5oCmluZGV4IDYyMjg2MGMuLjg0OWVmMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5oCkBAIC03Nyw4ICs3Nyw4IEBACiAjZGVmaW5lIEkzNjVfVlBQMl81VgkweDA0CS8qIFZwcDIgPSA1LjB2ICovCiAjZGVmaW5lIEkzNjVfVlBQMl8xMlYJMHgwOAkvKiBWcHAyID0gMTIuMHYgKi8KICNkZWZpbmUgSTM2NV9WUFAxX01BU0sJMHgwMwkvKiBNYXNrIGZvciB0dXJuaW5nIG9mZiBWcHAxICovCi0jZGVmaW5lIEkzNjVfVlBQMV81VgkweDAxCS8qIFZwcDIgPSA1LjB2ICovCi0jZGVmaW5lIEkzNjVfVlBQMV8xMlYJMHgwMgkvKiBWcHAyID0gMTIuMHYgKi8KKyNkZWZpbmUgSTM2NV9WUFAxXzVWCTB4MDEJLyogVnBwMSA9IDUuMHYgKi8KKyNkZWZpbmUgSTM2NV9WUFAxXzEyVgkweDAyCS8qIFZwcDEgPSAxMi4wdiAqLwogCiAvKiBGbGFncyBmb3IgSTM2NV9JTlRDVEwgKi8KICNkZWZpbmUgSTM2NV9SSU5HX0VOQQkweDgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCAyNmE2MjFjLi4wZWNlMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTc2NCw3ICs3NjQsNyBAQAogCWZvciAoaSA9IDAgOyBpIDwgcGNjX3NvY2tldHMgOyBpKyspIHsKIAkJc29ja2V0W2ldLnNvY2tldC5kZXYucGFyZW50ID0gJnBjY19kZXZpY2UuZGV2OwogCQlzb2NrZXRbaV0uc29ja2V0Lm9wcyA9ICZwY2Nfb3BlcmF0aW9uczsKLQkJc29ja2V0W2ldLnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX25vbnN0YXRpY19vcHM7CisJCXNvY2tldFtpXS5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOwogCQlzb2NrZXRbaV0uc29ja2V0Lm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXNvY2tldFtpXS5udW1iZXIgPSBpOwogCQlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZzb2NrZXRbaV0uc29ja2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCmluZGV4IDdmNzljNGUuLjYxYzIxNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwpAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIAkJc29ja2V0W2ldLnNvY2tldC5pb19vZmZzZXQgPSAwOwogCQlzb2NrZXRbaV0uc29ja2V0LnBjaV9pcnEgPSBwY21jaWFfc2NobHZsOwogCQlzb2NrZXRbaV0uc29ja2V0Lm9wcyA9ICZtOHh4X3NlcnZpY2VzOwotCQlzb2NrZXRbaV0uc29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfbm9uc3RhdGljX29wczsKKwkJc29ja2V0W2ldLnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX2lvZHluX29wczsKIAkJc29ja2V0W2ldLnNvY2tldC5jYl9kZXYgPSBOVUxMOwogCQlzb2NrZXRbaV0uc29ja2V0LmRldi5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKIAkJc29ja2V0W2ldLnBjbWNpYSA9IHBjbWNpYTsKQEAgLTEzMDMsNyArMTMwMyw3IEBACiAjZGVmaW5lIG04eHhfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtOHh4X3BjbWNpYV9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbTh4eF9wY21jaWFfbWF0Y2hbXSA9IHsKIAl7CiAJIC50eXBlID0gInBjbWNpYSIsCiAJIC5jb21wYXRpYmxlID0gImZzbCxwcS1wY21jaWEiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oIGIvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oCmluZGV4IDYyNDQ0MmYuLmU3NGJlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaAorKysgYi9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKQEAgLTExNiwxMyArMTE2LDEyIEBACiAJICogZnJvbSBFcmljIFN0aWxsLCAwMk1pY3JvLgogCSAqLwogCXU4IGEsIGI7CisJYm9vbCB1c2Vfc3BlZWR1cDsKIAogCWlmIChQQ0lfRlVOQyhzb2NrZXQtPmRldi0+ZGV2Zm4pID09IDApIHsKIAkJYSA9IGNvbmZpZ19yZWFkYihzb2NrZXQsIE8yX1JFU0VSVkVEMSk7CiAJCWIgPSBjb25maWdfcmVhZGIoc29ja2V0LCBPMl9SRVNFUlZFRDIpOwotCi0JCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKLQkJCSAgICJPMjogcmVzIGF0IDB4OTQvMHhENDogJTAyeC8lMDJ4XG4iLCBhLCBiKTsKKwkJZGV2X2RiZygmc29ja2V0LT5kZXYtPmRldiwgIk8yOiAweDk0LzB4RDQ6ICUwMngvJTAyeFxuIiwgYSwgYik7CiAKIAkJc3dpdGNoIChzb2NrZXQtPmRldi0+ZGV2aWNlKSB7CiAJCS8qCkBAIC0xMzUsMjMgKzEzNCwzNyBAQAogCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjgxMjoKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY4MzI6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82ODM2OgotIAkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY5MzM6Ci0JCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCi0JCQkJICAgIlllbnRhIE8yOiBvbGQgYnJpZGdlLCBkaXNhYmxpbmcgcmVhZCAiCi0JCQkJICAgInByZWZldGNoL3dyaXRlIGJ1cnN0XG4iKTsKLQkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDEsCi0JCQkgICAgICAgICAgICAgIGEgJiB+KE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKSk7Ci0JCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQyLAotCQkJICAgICAgICAgICAgICBiICYgfihPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCkpOworCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjkzMzoKKwkJCXVzZV9zcGVlZHVwID0gZmFsc2U7CiAJCQlicmVhazsKLQogCQlkZWZhdWx0OgotCQkJZGV2X3ByaW50ayhLRVJOX0lORk8gLCAmc29ja2V0LT5kZXYtPmRldiwKLQkJCQkgICAiTzI6IGVuYWJsaW5nIHJlYWQgcHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOworCQkJdXNlX3NwZWVkdXAgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB0aGUgdXNlciBtYXkgb3ZlcnJpZGUgb3VyIGRlY2lzaW9uICovCisJCWlmIChzdHJjYXNlY21wKG8yX3NwZWVkdXAsICJvbiIpID09IDApCisJCQl1c2Vfc3BlZWR1cCA9IHRydWU7CisJCWVsc2UgaWYgKHN0cmNhc2VjbXAobzJfc3BlZWR1cCwgIm9mZiIpID09IDApCisJCQl1c2Vfc3BlZWR1cCA9IGZhbHNlOworCQllbHNlIGlmIChzdHJjYXNlY21wKG8yX3NwZWVkdXAsICJkZWZhdWx0IikgIT0gMCkKKwkJCWRldl93YXJuKCZzb2NrZXQtPmRldi0+ZGV2LAorCQkJCSJPMjogVW5rbm93biBwYXJhbWV0ZXIsIHVzaW5nICdkZWZhdWx0JyIpOworCisJCWlmICh1c2Vfc3BlZWR1cCkgeworCQkJZGV2X2luZm8oJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJIk8yOiBlbmFibGluZyByZWFkIHByZWZldGNoL3dyaXRlIGJ1cnN0XG4iKTsKIAkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDEsCi0JCQkgICAgICAgICAgICAgIGEgfCBPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCk7CisJCQkJICAgICAgYSB8IE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKTsKIAkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDIsCi0JCQkgICAgICAgICAgICAgIGIgfCBPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCk7CisJCQkJICAgICAgYiB8IE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKCZzb2NrZXQtPmRldi0+ZGV2LAorCQkJCSJPMjogZGlzYWJsaW5nIHJlYWQgcHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOworCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMSwKKwkJCQkgICAgICBhICYgfihPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCkpOworCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMiwKKwkJCQkgICAgICBiICYgfihPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKaW5kZXggNjYzNzgxZC4uM2VmOTkxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwpAQCAtNzEsOCArNzEsNiBAQAogCiAjZGVmaW5lCVBPTExfSU5URVJWQUwJCSgyICogSFopCiAKLSNkZWZpbmUJU1pfMksJCQkoMiAqIFNaXzFLKQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBvbWFwX2NmX3NzX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCmluZGV4IGY3M2ZkNWIuLjEzYTcxMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCkBAIC02MiwxNiArNjIsMTUgQEAKIAkJCQkJCXVuc2lnbmVkIGludCBmdW5jdGlvbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYtPmZ1bmMgPT0gZnVuY3Rpb24pIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQlyZXR1cm4gcGNtY2lhX2dldF9kZXYocF9kZXYpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNjksNyArMTY4LDYgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKIAlpbnQgcmV0ID0gLUVOT1NZUzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZG93bl9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJnBjbWNpYV9zb2NrZXRfbGlzdCwgc29ja2V0X2xpc3QpIHsKQEAgLTE4MiwxNCArMTgwLDEzIEBACiAKIAkJCS8qIHlvdSBjYW4ndCB1c2UgdGhlIG9sZCBpbnRlcmZhY2UgaWYgdGhlIG5ldwogCQkJICogb25lIHdhcyB1c2VkIGJlZm9yZSAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKKwkJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCQlpZiAoKHMtPnJlc291cmNlX3NldHVwX25ldykgJiYKIAkJCSAgICAhKHMtPnJlc291cmNlX3NldHVwX29sZCkpIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIGlmICghKHMtPnJlc291cmNlX3NldHVwX29sZCkpCiAJCQkJcy0+cmVzb3VyY2Vfc2V0dXBfb2xkID0gMTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAogCQkJc3dpdGNoIChhZGotPlJlc291cmNlKSB7CiAJCQljYXNlIFJFU19NRU1PUllfUkFOR0U6CkBAIC0yMDgsMTAgKzIwNSw5IEBACiAJCQkJICogbGFzdCBjYWxsIHRvIGFkanVzdF9yZXNvdXJjZV9pbmZvLCB3ZQogCQkJCSAqIGFsd2F5cyBuZWVkIHRvIGFzc3VtZSB0aGlzIGlzIHRoZSBsYXRlc3QKIAkJCQkgKiBvbmUuLi4gKi8KLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCQkJCXMtPnJlc291cmNlX3NldHVwX2RvbmUgPSAxOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJCX0KKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJfQogCX0KIAl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwpAQCAtNDcwLDcgKzQ2Niw2IEBACiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcyA9IHBjbWNpYV9nZXRfc29ja2V0KHMpOwogCWlmICghcykKQEAgLTQ5MCw3ICs0ODUsNyBAQAogCQlnb3RvIGVycl9wdXRfZHJpdmVyOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7CiAJCWlmIChwX2Rldi0+ZnVuYyA9PSBiaW5kX2luZm8tPmZ1bmN0aW9uKSB7CiAJCQlpZiAoKHBfZGV2LT5kZXYuZHJpdmVyID09ICZwX2Rydi0+ZHJ2KSkgewpAQCAtNDk5LDcgKzQ5NCw3IEBACiAJCQkJCSAqIHJlZ2lzdGVyZWQsIGFuZCBpdCB3YXMgcmVnaXN0ZXJlZAogCQkJCQkgKiBieSB1c2Vyc3BhY2UgYmVmb3JlLCB3ZSBuZWVkIHRvCiAJCQkJCSAqIHJldHVybiB0aGUgImluc3RhbmNlIi4gKi8KLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJCQliaW5kX2luZm8tPmluc3RhbmNlID0gcF9kZXY7CiAJCQkJCXJldCA9IC1FQlVTWTsKIAkJCQkJZ290byBlcnJfcHV0X21vZHVsZTsKQEAgLTUwNyw3ICs1MDIsNyBAQAogCQkJCQkvKiB0aGUgY29ycmVjdCBkcml2ZXIgbWFuYWdlZCB0byBiaW5kCiAJCQkJCSAqIGl0c2VsZiBtYWdpY2FsbHkgdG8gdGhlIGNvcnJlY3QKIAkJCQkJICogZGV2aWNlLiAqLwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQkJCXBfZGV2LT5jYXJkbWdyID0gcF9kcnY7CiAJCQkJCXJldCA9IDA7CiAJCQkJCWdvdG8gZXJyX3B1dF9tb2R1bGU7CkBAIC01MTYsMTIgKzUxMSwxMiBAQAogCQkJCS8qIHRoZXJlJ3MgYWxyZWFkeSBhIGRldmljZSBhdmFpbGFibGUgd2hlcmUKIAkJCQkgKiBubyBkZXZpY2UgaGFzIGJlZW4gYm91bmQgdG8geWV0LiBTbyB3ZSBkb24ndAogCQkJCSAqIG5lZWQgdG8gcmVnaXN0ZXIgYSBkZXZpY2UhICovCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQkJZ290byByZXNjYW47CiAJCQl9CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlwX2RldiA9IHBjbWNpYV9kZXZpY2VfYWRkKHMsIGJpbmRfaW5mby0+ZnVuY3Rpb24pOwogCWlmICghcF9kZXYpIHsKQEAgLTU3OCw3ICs1NzMsNiBAQAogCWRldl9ub2RlX3QgKm5vZGU7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgQ09ORklHX0NBUkRCVVMKQEAgLTYxNyw3ICs2MTEsNyBAQAogCX0KICNlbmRpZgogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKIAkJaWYgKHBfZGV2LT5mdW5jID09IGJpbmRfaW5mby0+ZnVuY3Rpb24pIHsKIAkJCXBfZGV2ID0gcGNtY2lhX2dldF9kZXYocF9kZXYpOwpAQCAtNjI2LDExICs2MjAsMTEgQEAKIAkJCWdvdG8gZm91bmQ7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0dXJuIC1FTk9ERVY7CiAKICBmb3VuZDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihwX2Rldi0+ZGV2LmRyaXZlcik7CiAJaWYgKHBfZHJ2ICYmICFwX2Rldi0+X2xvY2tlZCkgewpAQCAtOTMxLDE2ICs5MjUsMTYgQEAKIAlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZidWYtPmNpc2luZm8uQ2hhaW5zKTsKIAlicmVhazsKICAgICBjYXNlIERTX1NVU1BFTkRfQ0FSRDoKLQlyZXQgPSBwY21jaWFfc3VzcGVuZF9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfU1VTUEVORCk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19SRVNVTUVfQ0FSRDoKLQlyZXQgPSBwY21jaWFfcmVzdW1lX2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9SRVNVTUUpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfRUpFQ1RfQ0FSRDoKLQllcnIgPSBwY21jaWFfZWplY3RfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX0VKRUNUKTsKIAlicmVhazsKICAgICBjYXNlIERTX0lOU0VSVF9DQVJEOgotCWVyciA9IHBjbWNpYV9pbnNlcnRfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX0lOU0VSVCk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19BQ0NFU1NfQ09ORklHVVJBVElPTl9SRUdJU1RFUjoKIAlpZiAoKGJ1Zi0+Y29uZl9yZWcuQWN0aW9uID09IENTX1dSSVRFKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCBkNWRiOTU2Li5iMmRmMDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtNDMsNiArNDMsMzkgQEAKIHN0YXRpYyB1OCBwY21jaWFfdXNlZF9pcnFbTlJfSVJRU107CiAjZW5kaWYKIAorc3RhdGljIGludCBwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJaWYgKHMtPnJlc291cmNlX29wcy0+YWRqdXN0X2lvX3JlZ2lvbikKKwkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+YWRqdXN0X2lvX3JlZ2lvbihyZXMsIHN0YXJ0LCBlbmQsIHMpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9pb19yZWdpb24odW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgbnVtLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJCQkgICAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKK3sKKwlpZiAocy0+cmVzb3VyY2Vfb3BzLT5maW5kX2lvKQorCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT5maW5kX2lvKGJhc2UsIG51bSwgYWxpZ24sIHMpOworCXJldHVybiBOVUxMOworfQorCitpbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKK3sKKwlpZiAocy0+cmVzb3VyY2Vfb3BzLT52YWxpZGF0ZV9tZW0pCisJCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPnZhbGlkYXRlX21lbShzKTsKKwkvKiBpZiB0aGVyZSBpcyBubyBjYWxsYmFjaywgd2UgY2FuIGFzc3VtZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgT0sgKi8KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9tZW1fcmVnaW9uKHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtLCB1X2xvbmcgYWxpZ24sCisJCQkJIGludCBsb3csIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCWlmIChzLT5yZXNvdXJjZV9vcHMtPmZpbmRfbWVtKQorCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT5maW5kX21lbShiYXNlLCBudW0sIGFsaWduLCBsb3csIHMpOworCXJldHVybiBOVUxMOworfQorCiAKIC8qKiBhbGxvY19pb19zcGFjZQogICoKQEAgLTE1OCwxNCArMTkxLDE4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcyA9IHBfZGV2LT5zb2NrZXQ7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCEoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzbnQndCBsb2NrZWRcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAogCWFkZHIgPSAoYy0+Q29uZmlnQmFzZSArIHJlZy0+T2Zmc2V0KSA+PiAxOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXN3aXRjaCAocmVnLT5BY3Rpb24pIHsKIAljYXNlIENTX1JFQUQ6CkBAIC0xOTAsNiArMjI3LDcgQEAKIAkJCW1lbXJlcV90ICpyZXEpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OworCWludCByZXQ7CiAKIAl3aC0tOwogCWlmICh3aCA+PSBNQVhfV0lOKQpAQCAtMTk4LDEyICsyMzYsMTMgQEAKIAkJZGV2X2RiZygmcy0+ZGV2LCAiZmFpbHVyZTogcmVxdWVzdGVkIHBhZ2UgaXMgemVyb1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXMtPndpblt3aF0uY2FyZF9zdGFydCA9IHJlcS0+Q2FyZE9mZnNldDsKLQlpZiAocy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+d2luW3doXSkgIT0gMCkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJmYWlsZWQgdG8gc2V0X21lbV9tYXBcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0ID0gcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+d2luW3doXSk7CisJaWYgKHJldCkKKwkJZGV2X3dhcm4oJnMtPmRldiwgImZhaWxlZCB0byBzZXRfbWVtX21hcFxuIik7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9tYXBfbWVtX3BhZ2UgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX21hcF9tZW1fcGFnZSk7CiAKQEAgLTIxOSwxNCArMjU4LDE4IEBACiAJY29uZmlnX3QgKmM7CiAKIAlzID0gcF9kZXYtPnNvY2tldDsKKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJObyBjYXJkIHByZXNlbnRcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXNudCd0IGxvY2tlZFxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCkBAIC0yNTEsMTAgKzI5NCwxMiBAQAogCSAgICAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAyX0NIQU5HRV9WQUxJRCkpIHsKIAkJaWYgKG1vZC0+VnBwMSAhPSBtb2QtPlZwcDIpIHsKIAkJCWRldl9kYmcoJnMtPmRldiwgIlZwcDEgYW5kIFZwcDIgbXVzdCBiZSB0aGUgc2FtZVxuIik7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlzLT5zb2NrZXQuVnBwID0gbW9kLT5WcHAxOwogCQlpZiAocy0+b3BzLT5zZXRfc29ja2V0KHMsICZzLT5zb2NrZXQpKSB7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwKIAkJCQkgICAiVW5hYmxlIHRvIHNldCBWUFBcbiIpOwogCQkJcmV0dXJuIC1FSU87CkBAIC0yNjIsNiArMzA3LDcgQEAKIAl9IGVsc2UgaWYgKChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDFfQ0hBTkdFX1ZBTElEKSB8fAogCQkgICAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAyX0NIQU5HRV9WQUxJRCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiY2hhbmdpbmcgVmNjIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgdGltZVxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yODYsNiArMzMyLDcgQEAKIAkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW9fb24pOwogCQl9CiAJfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiAwOwogfSAvKiBtb2RpZnlfY29uZmlndXJhdGlvbiAqLwpAQCAtMjk2LDkgKzM0MywxMSBAQAogewogCXBjY2FyZF9pb19tYXAgaW8gPSB7IDAsIDAsIDAsIDAsIDEgfTsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7Ci0JY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOworCWNvbmZpZ190ICpjOwogCWludCBpOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAlpZiAocF9kZXYtPl9sb2NrZWQpIHsKIAkJcF9kZXYtPl9sb2NrZWQgPSAwOwogCQlpZiAoLS0ocy0+bG9ja19jb3VudCkgPT0gMCkgewpAQCAtMzIxLDYgKzM3MCw3IEBACiAJCQkJcy0+b3BzLT5zZXRfaW9fbWFwKHMsICZpbyk7CiAJCQl9CiAJfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uICovCkBAIC0zMzcsMTAgKzM4NywxNCBAQAogc3RhdGljIGludCBwY21jaWFfcmVsZWFzZV9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwotCWNvbmZpZ190ICpjID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwljb25maWdfdCAqYzsKKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIXBfZGV2LT5faW8pCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAogCXBfZGV2LT5faW8gPSAwOwogCkBAIC0zNDgsNyArNDAyLDcgQEAKIAkgICAgKGMtPmlvLk51bVBvcnRzMSAhPSByZXEtPk51bVBvcnRzMSkgfHwKIAkgICAgKGMtPmlvLkJhc2VQb3J0MiAhPSByZXEtPkJhc2VQb3J0MikgfHwKIAkgICAgKGMtPmlvLk51bVBvcnRzMiAhPSByZXEtPk51bVBvcnRzMikpCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAogCWMtPnN0YXRlICY9IH5DT05GSUdfSU9fUkVROwogCkBAIC0zNTYsMjggKzQxMCwzOCBAQAogCWlmIChyZXEtPk51bVBvcnRzMikKIAkJcmVsZWFzZV9pb19zcGFjZShzLCByZXEtPkJhc2VQb3J0MiwgcmVxLT5OdW1Qb3J0czIpOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0gLyogcGNtY2lhX3JlbGVhc2VfaW8gKi8KIAogCiBzdGF0aWMgaW50IHBjbWNpYV9yZWxlYXNlX2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlycV9yZXFfdCAqcmVxKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKLQljb25maWdfdCAqYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisJY29uZmlnX3QgKmM7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIXBfZGV2LT5faXJxKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisKIAlwX2Rldi0+X2lycSA9IDA7CiAKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQotCQlyZXR1cm4gLUVBQ0NFUzsKKwkJZ290byBvdXQ7CisKIAlpZiAoYy0+aXJxLkF0dHJpYnV0ZXMgIT0gcmVxLT5BdHRyaWJ1dGVzKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIklSUSBhdHRyaWJ1dGVzIG11c3QgbWF0Y2ggYXNzaWduZWQgb25lc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKHMtPmlycS5Bc3NpZ25lZElSUSAhPSByZXEtPkFzc2lnbmVkSVJRKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIklSUSBtdXN0IG1hdGNoIGFzc2lnbmVkIG9uZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKC0tcy0+aXJxLkNvbmZpZyA9PSAwKSB7CiAJCWMtPnN0YXRlICY9IH5DT05GSUdfSVJRX1JFUTsKQEAgLTM5MCw4ICs0NTQsMTIgQEAKICNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCiAJcGNtY2lhX3VzZWRfaXJxW3JlcS0+QXNzaWduZWRJUlFdLS07CiAjZW5kaWYKKwlyZXQgPSAwOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0gLyogcGNtY2lhX3JlbGVhc2VfaXJxICovCiAKIApAQCAtNDA0LDEwICs0NzIsMTIgQEAKIAlpZiAod2ggPj0gTUFYX1dJTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXdpbiA9ICZzLT53aW5bd2hdOwogCiAJaWYgKCEocF9kZXYtPl93aW4gJiBDTElFTlRfV0lOX1JFUSh3aCkpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIm5vdCByZWxlYXNpbmcgdW5rbm93biB3aW5kb3dcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDIzLDYgKzQ5Myw3IEBACiAJCXdpbi0+cmVzID0gTlVMTDsKIAl9CiAJcF9kZXYtPl93aW4gJj0gfkNMSUVOVF9XSU5fUkVRKHdoKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlbGVhc2Vfd2luZG93ICovCkBAIC00NDUsOCArNTE2LDExIEBACiAJCWRldl9kYmcoJnMtPmRldiwgIkludFR5cGUgbWF5IG5vdCBiZSBJTlRfQ0FSREJVU1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkgeworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCWRldl9kYmcoJnMtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXMgbG9ja2VkXG4iKTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQpAQCAtNDU0LDYgKzUyOCw3IEBACiAJLyogRG8gcG93ZXIgY29udHJvbC4gIFdlIGRvbid0IGFsbG93IGNoYW5nZXMgaW4gVmNjLiAqLwogCXMtPnNvY2tldC5WcHAgPSByZXEtPlZwcDsKIAlpZiAocy0+b3BzLT5zZXRfc29ja2V0KHMsICZzLT5zb2NrZXQpKSB7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsCiAJCQkgICAiVW5hYmxlIHRvIHNldCBzb2NrZXQgc3RhdGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ3Niw2ICs1NTEsNyBAQAogCQlzLT5zb2NrZXQuaW9faXJxID0gMDsKIAlzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCk7CiAJcy0+bG9ja19jb3VudCsrOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCS8qIFNldCB1cCBDSVMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KIAliYXNlID0gYy0+Q29uZmlnQmFzZSA9IHJlcS0+Q29uZmlnQmFzZTsKQEAgLTUyNCw2ICs2MDAsNyBAQAogCiAJLyogQ29uZmlndXJlIEkvTyB3aW5kb3dzICovCiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lPX1JFUSkgeworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlpb21hcC5zcGVlZCA9IGlvX3NwZWVkOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lPX1dJTjsgaSsrKQogCQkJaWYgKHMtPmlvW2ldLnJlcykgewpAQCAtNTQyLDYgKzYxOSw3IEBACiAJCQkJcy0+b3BzLT5zZXRfaW9fbWFwKHMsICZpb21hcCk7CiAJCQkJcy0+aW9baV0uQ29uZmlnKys7CiAJCQl9CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAl9CiAKIAljLT5zdGF0ZSB8PSBDT05GSUdfTE9DS0VEOwpAQCAtNTYwLDU0ICs2MzgsNjUgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CiAJY29uZmlnX3QgKmM7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiTm8gY2FyZCBwcmVzZW50XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmICghcmVxKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXMgbG9ja2VkXG4iKTsKLQkJcmV0dXJuIC1FQUNDRVM7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIklPIGFscmVhZHkgY29uZmlndXJlZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAocmVxLT5BdHRyaWJ1dGVzMSAmIChJT19TSEFSRUQgfCBJT19GT1JDRV9BTElBU19BQ0NFU1MpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCWlmICgocmVxLT5OdW1Qb3J0czIgPiAwKSAmJgogCSAgICAocmVxLT5BdHRyaWJ1dGVzMiAmIChJT19TSEFSRUQgfCBJT19GT1JDRV9BTElBU19BQ0NFU1MpKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJiYWQgYXR0cmlidXRlIHNldHRpbmcgZm9yIElPIHJlZ2lvbiAyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCWRldl9kYmcoJnMtPmRldiwgInRyeWluZyB0byBhbGxvY2F0ZSByZXNvdXJjZSAxXG4iKTsKLQlpZiAoYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMSwgJnJlcS0+QmFzZVBvcnQxLAotCQkJICAgcmVxLT5OdW1Qb3J0czEsIHJlcS0+SU9BZGRyTGluZXMpKSB7CisJcmV0ID0gYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMSwgJnJlcS0+QmFzZVBvcnQxLAorCQkJICAgICByZXEtPk51bVBvcnRzMSwgcmVxLT5JT0FkZHJMaW5lcyk7CisJaWYgKHJldCkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW9uIG9mIHJlc291cmNlIDEgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHJlcS0+TnVtUG9ydHMyKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgInRyeWluZyB0byBhbGxvY2F0ZSByZXNvdXJjZSAyXG4iKTsKLQkJaWYgKGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczIsICZyZXEtPkJhc2VQb3J0MiwKLQkJCQkgICByZXEtPk51bVBvcnRzMiwgcmVxLT5JT0FkZHJMaW5lcykpIHsKKwkJcmV0ID0gYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMiwgJnJlcS0+QmFzZVBvcnQyLAorCQkJCSAgICAgcmVxLT5OdW1Qb3J0czIsIHJlcS0+SU9BZGRyTGluZXMpOworCQlpZiAocmV0KSB7CiAJCQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW9uIG9mIHJlc291cmNlIDIgZmFpbGVkXG4iKTsKIAkJCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDEsIHJlcS0+TnVtUG9ydHMxKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCWMtPmlvID0gKnJlcTsKIAljLT5zdGF0ZSB8PSBDT05GSUdfSU9fUkVROwogCXBfZGV2LT5faW8gPSAxOwotCXJldHVybiAwOworCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpbmcgcmVzb3VyY2VzIHN1Y2NlZWRlZDogJWRcbiIsIHJldCk7CisKK291dDoKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfSAvKiBwY21jaWFfcmVxdWVzdF9pbyAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF9pbyk7CiAKQEAgLTYzNiwxOCArNzI1LDIwIEBACiAJaW50IHJldCA9IC1FSU5WQUwsIGlycSA9IDA7CiAJaW50IHR5cGU7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiTm8gY2FyZCBwcmVzZW50XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0OwogCX0KIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXMgbG9ja2VkXG4iKTsKLQkJcmV0dXJuIC1FQUNDRVM7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSVJRX1JFUSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJJUlEgYWxyZWFkeSBjb25maWd1cmVkXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogRGVjaWRlIHdoYXQgdHlwZSBvZiBpbnRlcnJ1cHQgd2UgYXJlIHJlZ2lzdGVyaW5nICovCkBAIC03MDgsNyArNzk5LDcgQEAKIAlpZiAocmV0ICYmICFzLT5pcnEuQXNzaWduZWRJUlEpIHsKIAkJaWYgKCFzLT5wY2lfaXJxKSB7CiAJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnMtPmRldiwgIm5vIElSUSBmb3VuZFxuIik7Ci0JCQlyZXR1cm4gcmV0OworCQkJZ290byBvdXQ7CiAJCX0KIAkJdHlwZSA9IElSUUZfU0hBUkVEOwogCQlpcnEgPSBzLT5wY2lfaXJxOwpAQCAtNzIwLDcgKzgxMSw3IEBACiAJCWlmIChyZXQpIHsKIAkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcy0+ZGV2LAogCQkJCSJyZXF1ZXN0X2lycSgpIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gcmV0OworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKQEAgLTc0Myw3ICs4MzQsMTAgQEAKIAlwY21jaWFfdXNlZF9pcnFbaXJxXSsrOwogI2VuZGlmCiAKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwlyZXR1cm4gcmV0OwogfSAvKiBwY21jaWFfcmVxdWVzdF9pcnEgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaXJxKTsKIApAQCAtNzk2LDYgKzg5MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJd2luID0gJnMtPndpblt3XTsKIAogCWlmICghKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1NUQVRJQ19NQVApKSB7CkBAIC04MDMsNiArODk4LDcgQEAKIAkJCQkJCSAgICAgIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fTUFQX0JFTE9XXzFNQiksIHMpOwogCQlpZiAoIXdpbi0+cmVzKSB7CiAJCQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW5nIG1lbSByZWdpb24gZmFpbGVkXG4iKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtODIxLDggKzkxNywxMCBAQAogCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fVVNFX1dBSVQpCiAJCXdpbi0+ZmxhZ3MgfD0gTUFQX1VTRV9XQUlUOwogCXdpbi0+Y2FyZF9zdGFydCA9IDA7CisKIAlpZiAocy0+b3BzLT5zZXRfbWVtX21hcChzLCB3aW4pICE9IDApIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiZmFpbGVkIHRvIHNldCBtZW1vcnkgbWFwcGluZ1xuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXMtPnN0YXRlIHw9IFNPQ0tFVF9XSU5fUkVRKHcpOwpAQCAtODMzLDYgKzkzMSw3IEBACiAJZWxzZQogCQlyZXEtPkJhc2UgPSB3aW4tPnJlcy0+c3RhcnQ7CiAKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJKndoID0gdyArIDE7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCmluZGV4IDUyZGIxNzIuLmU2ZjdkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwpAQCAtMjEsNjAgKzIxLDEyIEBACiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCiAKLQotaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPnJlc291cmNlX29wcy0+dmFsaWRhdGVfbWVtKQotCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT52YWxpZGF0ZV9tZW0ocyk7Ci0JLyogaWYgdGhlcmUgaXMgbm8gY2FsbGJhY2ssIHdlIGNhbiBhc3N1bWUgdGhhdCBldmVyeXRoaW5nIGlzIE9LICovCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV92YWxpZGF0ZV9tZW0pOwotCi1pbnQgcGNtY2lhX2FkanVzdF9pb19yZWdpb24oc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKLQkJICAgICB1bnNpZ25lZCBsb25nIHJfZW5kLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT5hZGp1c3RfaW9fcmVnaW9uKQotCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT5hZGp1c3RfaW9fcmVnaW9uKHJlcywgcl9zdGFydCwgcl9lbmQsIHMpOwotCXJldHVybiAtRU5PTUVNOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbik7Ci0KLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfaW9fcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IG51bSwKLQkJICAgdW5zaWduZWQgbG9uZyBhbGlnbiwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPnJlc291cmNlX29wcy0+ZmluZF9pbykKLQkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+ZmluZF9pbyhiYXNlLCBudW0sIGFsaWduLCBzKTsKLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2ZpbmRfaW9fcmVnaW9uKTsKLQotc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9tZW1fcmVnaW9uKHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtLCB1X2xvbmcgYWxpZ24sCi0JCQkJIGludCBsb3csIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5yZXNvdXJjZV9vcHMtPmZpbmRfbWVtKQotCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT5maW5kX21lbShiYXNlLCBudW0sIGFsaWduLCBsb3csIHMpOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfZmluZF9tZW1fcmVnaW9uKTsKLQotdm9pZCByZWxlYXNlX3Jlc291cmNlX2RiKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5yZXNvdXJjZV9vcHMtPmV4aXQpCi0JCXMtPnJlc291cmNlX29wcy0+ZXhpdChzKTsKLX0KLQotCiBzdGF0aWMgaW50IHN0YXRpY19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAkvKiB0aGUgZ29vZCB0aGluZyBhYm91dCBTU19DQVBfU1RBVElDX01BUCBzb2NrZXRzIGlzCiAJICogdGhhdCB0aGV5IGRvbid0IG5lZWQgYSByZXNvdXJjZSBkYXRhYmFzZSAqLwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlzLT5yZXNvdXJjZV9zZXR1cF9kb25lID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNCwyMiArNjYsMjEgQEAKIAl1bnNpZ25lZCBsb25nCW9mZnNldDsKIH07CiAKLXN0YXRpYyB2b2lkIHBjbWNpYV9hbGlnbih2b2lkICphbGlnbl9kYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKK3N0YXRpYyByZXNvdXJjZV9zaXplX3QgcGNtY2lhX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsCisJCQkJY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgKmRhdGEgPSBhbGlnbl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0OwogCiAJc3RhcnQgPSAocmVzLT5zdGFydCAmIH5kYXRhLT5tYXNrKSArIGRhdGEtPm9mZnNldDsKIAlpZiAoc3RhcnQgPCByZXMtPnN0YXJ0KQogCQlzdGFydCArPSBkYXRhLT5tYXNrICsgMTsKLQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CiAKICNpZmRlZiBDT05GSUdfWDg2CiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CiAJCWlmIChzdGFydCAmIDB4MzAwKSB7CiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKIAkJfQogCX0KICNlbmRpZgpAQCAtMTM3LDkgKzg4LDExIEBACiAjaWZkZWYgQ09ORklHX002OEsKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJaWYgKChyZXMtPnN0YXJ0ICsgc2l6ZSAtIDEpID49IDEwMjQpCi0JCQlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQ7CisJCQlzdGFydCA9IHJlcy0+ZW5kOwogCX0KICNlbmRpZgorCisJcmV0dXJuIHN0YXJ0OwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCmluZGV4IDliMGRjNDMuLjQ2NjNiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwpAQCAtNTUsMTEgKzU1LDEwIEBACiAKIHN0cnVjdCBzb2NrZXRfZGF0YSB7CiAJc3RydWN0IHJlc291cmNlX21hcAkJbWVtX2RiOworCXN0cnVjdCByZXNvdXJjZV9tYXAJCW1lbV9kYl92YWxpZDsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwCQlpb19kYjsKLQl1bnNpZ25lZCBpbnQJCQlyc3JjX21lbV9wcm9iZTsKIH07CiAKLXN0YXRpYyBERUZJTkVfTVVURVgocnNyY19tdXRleCk7CiAjZGVmaW5lIE1FTV9QUk9CRV9MT1cJKDEgPDwgMCkKICNkZWZpbmUgTUVNX1BST0JFX0hJR0gJKDEgPDwgMSkKIApAQCAtMTI1LDggKzEyNCwxMCBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOwogCiAJZm9yIChwID0gbWFwOyA7IHAgPSBwLT5uZXh0KSB7Ci0JCWlmICgocCAhPSBtYXApICYmIChwLT5iYXNlK3AtPm51bS0xID49IGJhc2UpKQotCQkJcmV0dXJuIC0xOworCQlpZiAoKHAgIT0gbWFwKSAmJiAocC0+YmFzZStwLT5udW0gPj0gYmFzZSkpIHsKKwkJCXAtPm51bSA9IG1heChudW0gKyBiYXNlIC0gcC0+YmFzZSwgcC0+bnVtKTsKKwkJCXJldHVybiAwOworCQl9CiAJCWlmICgocC0+bmV4dCA9PSBtYXApIHx8IChwLT5uZXh0LT5iYXNlID4gYmFzZStudW0tMSkpCiAJCQlicmVhazsKIAl9CkBAIC0yNjQsMzYgKzI2NSw0NCBAQAogfQogI2VuZGlmCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotICAgIFRoaXMgaXMgdHJpY2t5Li4uIHdoZW4gd2Ugc2V0IHVwIENJUyBtZW1vcnksIHdlIHRyeSB0byB2YWxpZGF0ZQotICAgIHRoZSBtZW1vcnkgd2luZG93IHNwYWNlIGFsbG9jYXRpb25zLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgY2FyZHMgd2l0aCBhIHZhbGlkIENJUyAqLworLyoqCisgKiByZWFkYWJsZSgpIC0gaW9tZW0gdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgY2FyZHMgd2l0aCBhIHZhbGlkIENJUworICovCiBzdGF0aWMgaW50IHJlYWRhYmxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgIHVuc2lnbmVkIGludCAqY291bnQpCiB7Ci0JaW50IHJldCA9IC0xOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKHMtPmZha2VfY2lzKSB7CisJCWRldl9kYmcoJnMtPmRldiwgImZha2UgQ0lTIGlzIGJlaW5nIHVzZWQ6IGNhbid0IHZhbGlkYXRlIG1lbVxuIik7CisJCXJldHVybiAwOworCX0KIAogCXMtPmNpc19tZW0ucmVzID0gcmVzOwogCXMtPmNpc192aXJ0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzLT5tYXBfc2l6ZSk7CiAJaWYgKHMtPmNpc192aXJ0KSB7Ci0JCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgY291bnQpOwotCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmcgYW5kIENJUyBjYWNoZSAqLworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCS8qIGFzIHdlJ3JlIG9ubHkgY2FsbGVkIGZyb20gcGNtY2lhLmMsIHdlJ3JlIHNhZmUgKi8KKwkJaWYgKHMtPmNhbGxiYWNrLT52YWxpZGF0ZSkKKwkJCXJldCA9IHMtPmNhbGxiYWNrLT52YWxpZGF0ZShzLCBjb3VudCk7CisJCS8qIGludmFsaWRhdGUgbWFwcGluZyAqLworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlpb3VubWFwKHMtPmNpc192aXJ0KTsKIAkJcy0+Y2lzX3ZpcnQgPSBOVUxMOwotCQlkZXN0cm95X2Npc19jYWNoZShzKTsKIAl9CiAJcy0+Y2lzX21lbS5yZXMgPSBOVUxMOwotCWlmICgocmV0ICE9IDApIHx8ICgqY291bnQgPT0gMCkpCi0JCXJldHVybiAwOwotCXJldHVybiAxOworCWlmICgocmV0KSB8fCAoKmNvdW50ID09IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAotLyogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3Igc2ltcGxlIG1lbW9yeSBjYXJkcyAqLwotc3RhdGljIGludCBjaGVja3N1bShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHJlc291cmNlICpyZXMpCisvKioKKyAqIGNoZWNrc3VtKCkgLSBpb21lbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBzaW1wbGUgbWVtb3J5IGNhcmRzCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tzdW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkgICAgdW5zaWduZWQgaW50ICp2YWx1ZSkKIHsKIAlwY2NhcmRfbWVtX21hcCBtYXA7CiAJaW50IGksIGEgPSAwLCBiID0gLTEsIGQ7CkBAIC0zMjEsNjEgKzMzMCw5MCBAQAogCQlpb3VubWFwKHZpcnQpOwogCX0KIAotCXJldHVybiAoYiA9PSAtMSkgPyAtMSA6IChhPj4xKTsKKwlpZiAoYiA9PSAtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqdmFsdWUgPSBhOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWNpc19yZWFkYWJsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCisvKioKKyAqIGRvX3ZhbGlkYXRlX21lbSgpIC0gbG93IGxldmVsIHZhbGlkYXRlIGEgbWVtb3J5IHJlZ2lvbiBmb3IgUENNQ0lBIHVzZQorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAYmFzZToJc3RhcnQgYWRkcmVzcyBvZiByZXNvdXJjZSB0byBjaGVjaworICogQHNpemU6CXNpemUgb2YgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEB2YWxpZGF0ZToJdmFsaWRhdGlvbiBmdW5jdGlvbiB0byB1c2UKKyAqCisgKiBkb192YWxpZGF0ZV9tZW0oKSBzcGxpdHMgdXAgdGhlIG1lbW9yeSByZWdpb24gd2hpY2ggaXMgdG8gYmUgY2hlY2tlZAorICogaW50byB0d28gcGFydHMuIEJvdGggYXJlIHBhc3NlZCB0byB0aGUgQHZhbGlkYXRlKCkgZnVuY3Rpb24uIElmCisgKiBAdmFsaWRhdGUoKSByZXR1cm5zIG5vbi16ZXJvLCBvciB0aGUgdmFsdWUgcGFyYW1ldGVyIHRvIEB2YWxpZGF0ZSgpCisgKiBpcyB6ZXJvLCBvciB0aGUgdmFsdWUgcGFyYW1ldGVyIGlzIGRpZmZlcmVudCBiZXR3ZWVuIGJvdGggY2FsbHMsCisgKiB0aGUgY2hlY2sgZmFpbHMsIGFuZCAtRUlOVkFMIGlzIHJldHVybmVkLiBFbHNlLCAwIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW50IGRvX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgaW50IHZhbGlkYXRlIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkJIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCQkgdW5zaWduZWQgaW50ICp2YWx1ZSkpCiB7CisJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzMSwgKnJlczI7Ci0JdW5zaWduZWQgaW50IGluZm8xLCBpbmZvMjsKLQlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgaW5mbzEgPSAxLCBpbmZvMiA9IDE7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlyZXMxID0gY2xhaW1fcmVnaW9uKHMsIGJhc2UsIHNpemUvMiwgSU9SRVNPVVJDRV9NRU0sICJQQ01DSUEgbWVtcHJvYmUiKTsKIAlyZXMyID0gY2xhaW1fcmVnaW9uKHMsIGJhc2UgKyBzaXplLzIsIHNpemUvMiwgSU9SRVNPVVJDRV9NRU0sCiAJCQkiUENNQ0lBIG1lbXByb2JlIik7CiAKIAlpZiAocmVzMSAmJiByZXMyKSB7Ci0JCXJldCA9IHJlYWRhYmxlKHMsIHJlczEsICZpbmZvMSk7Ci0JCXJldCArPSByZWFkYWJsZShzLCByZXMyLCAmaW5mbzIpOworCQlyZXQgPSAwOworCQlpZiAodmFsaWRhdGUpIHsKKwkJCXJldCA9IHZhbGlkYXRlKHMsIHJlczEsICZpbmZvMSk7CisJCQlyZXQgKz0gdmFsaWRhdGUocywgcmVzMiwgJmluZm8yKTsKKwkJfQogCX0KIAogCWZyZWVfcmVnaW9uKHJlczIpOwogCWZyZWVfcmVnaW9uKHJlczEpOwogCi0JcmV0dXJuIChyZXQgPT0gMikgJiYgKGluZm8xID09IGluZm8yKTsKLX0KKwlkZXZfZGJnKCZzLT5kZXYsICJjczogbWVtb3J5IHByb2JlIDB4JTA2bHgtMHglMDZseDogJXAgJXAgJXUgJXUgJXUiLAorCQliYXNlLCBiYXNlK3NpemUtMSwgcmVzMSwgcmVzMiwgcmV0LCBpbmZvMSwgaW5mbzIpOwogCi1zdGF0aWMgaW50Ci1jaGVja3N1bV9tYXRjaChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZXMxLCAqcmVzMjsKLQlpbnQgYSA9IC0xLCBiID0gLTE7CisJaWYgKChyZXQpIHx8IChpbmZvMSAhPSBpbmZvMikgfHwgKGluZm8xID09IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlczEgPSBjbGFpbV9yZWdpb24ocywgYmFzZSwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwgIlBDTUNJQSBtZW1wcm9iZSIpOwotCXJlczIgPSBjbGFpbV9yZWdpb24ocywgYmFzZSArIHNpemUvMiwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwKLQkJCSJQQ01DSUEgbWVtcHJvYmUiKTsKLQotCWlmIChyZXMxICYmIHJlczIpIHsKLQkJYSA9IGNoZWNrc3VtKHMsIHJlczEpOwotCQliID0gY2hlY2tzdW0ocywgcmVzMik7CisJaWYgKHZhbGlkYXRlICYmICFzLT5mYWtlX2NpcykgeworCQkvKiBtb3ZlIGl0IHRvIHRoZSB2YWxpZGF0ZWQgZGF0YSBzZXQgKi8KKwkJYWRkX2ludGVydmFsKCZzX2RhdGEtPm1lbV9kYl92YWxpZCwgYmFzZSwgc2l6ZSk7CisJCXN1Yl9pbnRlcnZhbCgmc19kYXRhLT5tZW1fZGIsIGJhc2UsIHNpemUpOwogCX0KIAotCWZyZWVfcmVnaW9uKHJlczIpOwotCWZyZWVfcmVnaW9uKHJlczEpOwotCi0JcmV0dXJuIChhID09IGIpICYmIChhID49IDApOworCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIFRoZSBtZW1vcnkgcHJvYmUuICBJZiB0aGUgbWVtb3J5IGxpc3QgaW5jbHVkZXMgYSA2NEstYWxpZ25lZCBibG9jawotICAgIGJlbG93IDFNQiwgd2UgcHJvYmUgaW4gNjRLIGNodW5rcywgYW5kIGFzIHNvb24gYXMgd2UgYWNjdW11bGF0ZSBhdAotICAgIGxlYXN0IG1lbV9saW1pdCBmcmVlIHNwYWNlLCB3ZSBxdWl0LgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBkb19tZW1fcHJvYmUodV9sb25nIGJhc2UsIHVfbG9uZyBudW0sIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQorLyoqCisgKiBkb19tZW1fcHJvYmUoKSAtIHZhbGlkYXRlIGEgbWVtb3J5IHJlZ2lvbiBmb3IgUENNQ0lBIHVzZQorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAYmFzZToJc3RhcnQgYWRkcmVzcyBvZiByZXNvdXJjZSB0byBjaGVjaworICogQG51bToJc2l6ZSBvZiByZXNvdXJjZSB0byBjaGVjaworICogQHZhbGlkYXRlOgl2YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIHVzZQorICogQGZhbGxiYWNrOgl2YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIHVzZSBpZiB2YWxpZGF0ZSBmYWlscworICoKKyAqIGRvX21lbV9wcm9iZSgpIGNoZWNrcyBhIG1lbW9yeSByZWdpb24gZm9yIHVzZSBieSB0aGUgUENNQ0lBIHN1YnN5c3RlbS4KKyAqIFRvIGRvIHNvLCB0aGUgYXJlYSBpcyBzcGxpdCB1cCBpbnRvIHNlbnNpYmxlIHBhcnRzLCBhbmQgdGhlbiBwYXNzZWQKKyAqIGludG8gdGhlIEB2YWxpZGF0ZSgpIGZ1bmN0aW9uLiBPbmx5IGlmIEB2YWxpZGF0ZSgpIGFuZCBAZmFsbGJhY2soKSBmYWlsLAorICogdGhlIGFyZWEgaXMgbWFya2VkIGFzIHVuYXZhaWJhbGUgZm9yIHVzZSBieSB0aGUgUENNQ0lBIHN1YnN5c3RlbS4gVGhlCisgKiBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB1c2FibGUgbWVtb3J5IGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgZG9fbWVtX3Byb2JlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwKKwkJCWludCB2YWxpZGF0ZSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJICAgICAgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICp2YWx1ZSksCisJCQlpbnQgZmFsbGJhY2sgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCSAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdmFsdWUpKQogewogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAl1X2xvbmcgaSwgaiwgYmFkLCBmYWlsLCBzdGVwOwpAQCAtMzkzLDE1ICs0MzEsMTQgQEAKIAlmb3IgKGkgPSBqID0gYmFzZTsgaSA8IGJhc2UrbnVtOyBpID0gaiArIHN0ZXApIHsKIAkJaWYgKCFmYWlsKSB7CiAJCQlmb3IgKGogPSBpOyBqIDwgYmFzZStudW07IGogKz0gc3RlcCkgewotCQkJCWlmIChjaXNfcmVhZGFibGUocywgaiwgc3RlcCkpCisJCQkJaWYgKCFkb192YWxpZGF0ZV9tZW0ocywgaiwgc3RlcCwgdmFsaWRhdGUpKQogCQkJCQlicmVhazsKIAkJCX0KIAkJCWZhaWwgPSAoKGkgPT0gYmFzZSkgJiYgKGogPT0gYmFzZStudW0pKTsKIAkJfQotCQlpZiAoZmFpbCkgewotCQkJZm9yIChqID0gaTsgaiA8IGJhc2UrbnVtOyBqICs9IDIqc3RlcCkKLQkJCQlpZiAoY2hlY2tzdW1fbWF0Y2gocywgaiwgc3RlcCkgJiYKLQkJCQkJY2hlY2tzdW1fbWF0Y2gocywgaiArIHN0ZXAsIHN0ZXApKQorCQlpZiAoKGZhaWwpICYmIChmYWxsYmFjaykpIHsKKwkJCWZvciAoaiA9IGk7IGogPCBiYXNlK251bTsgaiArPSBzdGVwKQorCQkJCWlmICghZG9fdmFsaWRhdGVfbWVtKHMsIGosIHN0ZXAsIGZhbGxiYWNrKSkKIAkJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGkgIT0gaikgewpAQCAtNDE2LDggKzQ1MywxNCBAQAogCXJldHVybiBudW0gLSBiYWQ7CiB9CiAKKwogI2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkUKIAorLyoqCisgKiBpbnZfcHJvYmUoKSAtIHRvcC10by1ib3R0b20gc2VhcmNoIGZvciBvbmUgdXN1YWJsZSBoaWdoIG1lbW9yeSBhcmVhCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqIEBtOgkJcmVzb3VyY2VfbWFwIHRvIGNoZWNrCisgKi8KIHN0YXRpYyB1X2xvbmcgaW52X3Byb2JlKHN0cnVjdCByZXNvdXJjZV9tYXAgKm0sIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKQEAgLTQzMiw5ICs0NzUsMTggQEAKIAl9CiAJaWYgKG0tPmJhc2UgPCAweDEwMDAwMCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGRvX21lbV9wcm9iZShtLT5iYXNlLCBtLT5udW0sIHMpOworCXJldHVybiBkb19tZW1fcHJvYmUocywgbS0+YmFzZSwgbS0+bnVtLCByZWFkYWJsZSwgY2hlY2tzdW0pOwogfQogCisvKioKKyAqIHZhbGlkYXRlX21lbSgpIC0gbWVtb3J5IHByb2JlIGZ1bmN0aW9uCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqIEBwcm9iZV9tYXNrOiBNRU1fUFJPQkVfTE9XIHwgTUVNX1BST0JFX0hJR0gKKyAqCisgKiBUaGUgbWVtb3J5IHByb2JlLiAgSWYgdGhlIG1lbW9yeSBsaXN0IGluY2x1ZGVzIGEgNjRLLWFsaWduZWQgYmxvY2sKKyAqIGJlbG93IDFNQiwgd2UgcHJvYmUgaW4gNjRLIGNodW5rcywgYW5kIGFzIHNvb24gYXMgd2UgYWNjdW11bGF0ZSBhdAorICogbGVhc3QgbWVtX2xpbWl0IGZyZWUgc3BhY2UsIHdlIHF1aXQuIFJldHVybnMgMCBvbiB1c3VhYmxlIHBvcnRzLgorICovCiBzdGF0aWMgaW50IHZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IHByb2JlX21hc2spCiB7CiAJc3RydWN0IHJlc291cmNlX21hcCAqbSwgbW07CkBAIC00NDYsNiArNDk4LDggQEAKIAlpZiAocHJvYmVfbWFzayAmIE1FTV9QUk9CRV9ISUdIKSB7CiAJCWlmIChpbnZfcHJvYmUoc19kYXRhLT5tZW1fZGIubmV4dCwgcykgPiAwKQogCQkJcmV0dXJuIDA7CisJCWlmIChzX2RhdGEtPm1lbV9kYl92YWxpZC5uZXh0ICE9ICZzX2RhdGEtPm1lbV9kYl92YWxpZCkKKwkJCXJldHVybiAwOwogCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcy0+ZGV2LAogCQkJICAgImNzOiB3YXJuaW5nOiBubyBoaWdoIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00NTcsNyArNTExLDggQEAKIAkJaWYgKG1tLmJhc2UgPj0gMHgxMDAwMDApCiAJCQljb250aW51ZTsKIAkJaWYgKChtbS5iYXNlIHwgbW0ubnVtKSAmIDB4ZmZmZikgewotCQkJb2sgKz0gZG9fbWVtX3Byb2JlKG1tLmJhc2UsIG1tLm51bSwgcyk7CisJCQlvayArPSBkb19tZW1fcHJvYmUocywgbW0uYmFzZSwgbW0ubnVtLCByZWFkYWJsZSwKKwkJCQkJICAgY2hlY2tzdW0pOwogCQkJY29udGludWU7CiAJCX0KIAkJLyogU3BlY2lhbCBwcm9iZSBmb3IgNjRLLWFsaWduZWQgYmxvY2sgKi8KQEAgLTQ2Nyw3ICs1MjIsOCBAQAogCQkJCWlmIChvayA+PSBtZW1fbGltaXQpCiAJCQkJCXN1Yl9pbnRlcnZhbCgmc19kYXRhLT5tZW1fZGIsIGIsIDB4MTAwMDApOwogCQkJCWVsc2UKLQkJCQkJb2sgKz0gZG9fbWVtX3Byb2JlKGIsIDB4MTAwMDAsIHMpOworCQkJCQlvayArPSBkb19tZW1fcHJvYmUocywgYiwgMHgxMDAwMCwKKwkJCQkJCQkgICByZWFkYWJsZSwgY2hlY2tzdW0pOwogCQkJfQogCQl9CiAJfQpAQCAtNDgwLDYgKzUzNiwxMyBAQAogCiAjZWxzZSAvKiBDT05GSUdfUENNQ0lBX1BST0JFICovCiAKKy8qKgorICogdmFsaWRhdGVfbWVtKCkgLSBtZW1vcnkgcHJvYmUgZnVuY3Rpb24KKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICogQHByb2JlX21hc2s6IGlnbm9yZWQKKyAqCisgKiBSZXR1cm5zIDAgb24gdXN1YWJsZSBwb3J0cy4KKyAqLwogc3RhdGljIGludCB2YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBwcm9iZV9tYXNrKQogewogCXN0cnVjdCByZXNvdXJjZV9tYXAgKm0sIG1tOwpAQCAtNDg4LDcgKzU1MSw3IEBACiAKIAlmb3IgKG0gPSBzX2RhdGEtPm1lbV9kYi5uZXh0OyBtICE9ICZzX2RhdGEtPm1lbV9kYjsgbSA9IG1tLm5leHQpIHsKIAkJbW0gPSAqbTsKLQkJb2sgKz0gZG9fbWVtX3Byb2JlKG1tLmJhc2UsIG1tLm51bSwgcyk7CisJCW9rICs9IGRvX21lbV9wcm9iZShzLCBtbS5iYXNlLCBtbS5udW0sIHJlYWRhYmxlLCBjaGVja3N1bSk7CiAJfQogCWlmIChvayA+IDApCiAJCXJldHVybiAwOwpAQCAtNDk4LDMxICs1NjEsMzEgQEAKICNlbmRpZiAvKiBDT05GSUdfUENNQ0lBX1BST0JFICovCiAKIAotLyoKKy8qKgorICogcGNtY2lhX25vbnN0YXRpY192YWxpZGF0ZV9tZW0oKSAtIHRyeSB0byB2YWxpZGF0ZSBpb21lbSBmb3IgUENNQ0lBIHVzZQorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKgorICogVGhpcyBpcyB0cmlja3kuLi4gd2hlbiB3ZSBzZXQgdXAgQ0lTIG1lbW9yeSwgd2UgdHJ5IHRvIHZhbGlkYXRlCisgKiB0aGUgbWVtb3J5IHdpbmRvdyBzcGFjZSBhbGxvY2F0aW9ucy4KKyAqCiAgKiBMb2NraW5nIG5vdGU6IE11c3QgYmUgY2FsbGVkIHdpdGggc2t0X211dGV4IGhlbGQhCiAgKi8KIHN0YXRpYyBpbnQgcGNtY2lhX25vbnN0YXRpY192YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXVuc2lnbmVkIGludCBwcm9iZV9tYXNrID0gTUVNX1BST0JFX0xPVzsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JaWYgKCFwcm9iZV9tZW0pCisJaWYgKCFwcm9iZV9tZW0gfHwgIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKLQogCWlmIChzLT5mZWF0dXJlcyAmIFNTX0NBUF9QQUdFX1JFR1MpCiAJCXByb2JlX21hc2sgPSBNRU1fUFJPQkVfSElHSDsKIAotCWlmIChwcm9iZV9tYXNrICYgfnNfZGF0YS0+cnNyY19tZW1fcHJvYmUpIHsKLQkJaWYgKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpCi0JCQlyZXQgPSB2YWxpZGF0ZV9tZW0ocywgcHJvYmVfbWFzayk7Ci0JCWlmICghcmV0KQotCQkJc19kYXRhLT5yc3JjX21lbV9wcm9iZSB8PSBwcm9iZV9tYXNrOwotCX0KKwlyZXQgPSB2YWxpZGF0ZV9tZW0ocywgcHJvYmVfbWFzayk7CiAKLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOworCWlmIChzX2RhdGEtPm1lbV9kYl92YWxpZC5uZXh0ICE9ICZzX2RhdGEtPm1lbV9kYl92YWxpZCkKKwkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTMzLDggKzU5Niw4IEBACiAJc3RydWN0IHJlc291cmNlX21hcAkqbWFwOwogfTsKIAotc3RhdGljIHZvaWQKLXBjbWNpYV9jb21tb25fYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90CitwY21jaWFfY29tbW9uX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgKmRhdGEgPSBhbGlnbl9kYXRhOwpAQCAtNTQ1LDE3ICs2MDgsMTggQEAKIAlzdGFydCA9IChyZXMtPnN0YXJ0ICYgfmRhdGEtPm1hc2spICsgZGF0YS0+b2Zmc2V0OwogCWlmIChzdGFydCA8IHJlcy0+c3RhcnQpCiAJCXN0YXJ0ICs9IGRhdGEtPm1hc2sgKyAxOwotCXJlcy0+c3RhcnQgPSBzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1wY21jaWFfYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzaXplLAotCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24pCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90CitwY21jaWFfYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgKmRhdGEgPSBhbGlnbl9kYXRhOwogCXN0cnVjdCByZXNvdXJjZV9tYXAgKm07CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0OwogCi0JcGNtY2lhX2NvbW1vbl9hbGlnbihkYXRhLCByZXMsIHNpemUsIGFsaWduKTsKKwlzdGFydCA9IHBjbWNpYV9jb21tb25fYWxpZ24oZGF0YSwgcmVzLCBzaXplLCBhbGlnbik7CiAKIAlmb3IgKG0gPSBkYXRhLT5tYXAtPm5leHQ7IG0gIT0gZGF0YS0+bWFwOyBtID0gbS0+bmV4dCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbS0+YmFzZTsKQEAgLTU2Nyw4ICs2MzEsNyBAQAogCQkgKiBmaXQgaGVyZS4KIAkJICovCiAJCWlmIChyZXMtPnN0YXJ0IDwgc3RhcnQpIHsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJCXBjbWNpYV9jb21tb25fYWxpZ24oZGF0YSwgcmVzLCBzaXplLCBhbGlnbik7CisJCQlzdGFydCA9IHBjbWNpYV9jb21tb25fYWxpZ24oZGF0YSwgcmVzLCBzaXplLCBhbGlnbik7CiAJCX0KIAogCQkvKgpAQCAtNTg2LDcgKzY0OSw5IEBACiAJICogSWYgd2UgZmFpbGVkIHRvIGZpbmQgc29tZXRoaW5nIHN1aXRhYmxlLCBlbnN1cmUgd2UgZmFpbC4KIAkgKi8KIAlpZiAobSA9PSBkYXRhLT5tYXApCi0JCXJlcy0+c3RhcnQgPSByZXMtPmVuZDsKKwkJc3RhcnQgPSByZXMtPmVuZDsKKworCXJldHVybiBzdGFydDsKIH0KIAogLyoKQEAgLTYwMCw3ICs2NjUsNiBAQAogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCWZvciAobSA9IHNfZGF0YS0+aW9fZGIubmV4dDsgbSAhPSAmc19kYXRhLT5pb19kYjsgbSA9IG0tPm5leHQpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCA9IG0tPmJhc2U7CiAJCXVuc2lnbmVkIGxvbmcgZW5kID0gbS0+YmFzZSArIG0tPm51bSAtIDE7CkBAIC02MTEsNyArNjc1LDYgQEAKIAkJcmV0ID0gYWRqdXN0X3Jlc291cmNlKHJlcywgcl9zdGFydCwgcl9lbmQgLSByX3N0YXJ0ICsgMSk7CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY0NSw3ICs3MDgsNiBAQAogCWRhdGEub2Zmc2V0ID0gYmFzZSAmIGRhdGEubWFzazsKIAlkYXRhLm1hcCA9ICZzX2RhdGEtPmlvX2RiOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAjaWZkZWYgQ09ORklHX1BDSQogCWlmIChzLT5jYl9kZXYpIHsKIAkJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShzLT5jYl9kZXYtPmJ1cywgcmVzLCBudW0sIDEsCkBAIC02NTQsNyArNzE2LDYgQEAKICNlbmRpZgogCQlyZXQgPSBhbGxvY2F0ZV9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCByZXMsIG51bSwgbWluLCB+MFVMLAogCQkJCQkxLCBwY21jaWFfYWxpZ24sICZkYXRhKTsKLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJaWYgKHJldCAhPSAwKSB7CiAJCWtmcmVlKHJlcyk7CkBAIC02NzAsMTUgKzczMSwxNSBAQAogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgZGF0YTsKIAl1bnNpZ25lZCBsb25nIG1pbiwgbWF4OwotCWludCByZXQsIGk7CisJaW50IHJldCwgaSwgajsKIAogCWxvdyA9IGxvdyB8fCAhKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1BBR0VfUkVHUyk7CiAKIAlkYXRhLm1hc2sgPSBhbGlnbiAtIDE7CiAJZGF0YS5vZmZzZXQgPSBiYXNlICYgZGF0YS5tYXNrOwotCWRhdGEubWFwID0gJnNfZGF0YS0+bWVtX2RiOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlkYXRhLm1hcCA9ICZzX2RhdGEtPm1lbV9kYl92YWxpZDsKIAkJaWYgKGxvdykgewogCQkJbWF4ID0gMHgxMDAwMDBVTDsKIAkJCW1pbiA9IGJhc2UgPCBtYXggPyBiYXNlIDogMDsKQEAgLTY4NywxNyArNzQ4LDIzIEBACiAJCQltaW4gPSAweDEwMDAwMFVMICsgYmFzZTsKIAkJfQogCi0JCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CiAjaWZkZWYgQ09ORklHX1BDSQotCQlpZiAocy0+Y2JfZGV2KSB7Ci0JCQlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHMtPmNiX2Rldi0+YnVzLCByZXMsIG51bSwKLQkJCQkJCSAgICAgMSwgbWluLCAwLAotCQkJCQkJICAgICBwY21jaWFfYWxpZ24sICZkYXRhKTsKLQkJfSBlbHNlCisJCQlpZiAocy0+Y2JfZGV2KSB7CisJCQkJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShzLT5jYl9kZXYtPmJ1cywKKwkJCQkJCQlyZXMsIG51bSwgMSwgbWluLCAwLAorCQkJCQkJCXBjbWNpYV9hbGlnbiwgJmRhdGEpOworCQkJfSBlbHNlCiAjZW5kaWYKLQkJCXJldCA9IGFsbG9jYXRlX3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzLCBudW0sIG1pbiwKLQkJCQkJCW1heCwgMSwgcGNtY2lhX2FsaWduLCAmZGF0YSk7Ci0JCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CisJCQl7CisJCQkJcmV0ID0gYWxsb2NhdGVfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLAorCQkJCQkJCXJlcywgbnVtLCBtaW4sIG1heCwgMSwKKwkJCQkJCQlwY21jaWFfYWxpZ24sICZkYXRhKTsKKwkJCX0KKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlicmVhazsKKwkJCWRhdGEubWFwID0gJnNfZGF0YS0+bWVtX2RiOworCQl9CiAJCWlmIChyZXQgPT0gMCB8fCBsb3cpCiAJCQlicmVhazsKIAkJbG93ID0gMTsKQEAgLTcyMCwyNSArNzg3LDE4IEBACiAJaWYgKGVuZCA8IHN0YXJ0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBBRERfTUFOQUdFRF9SRVNPVVJDRToKIAkJcmV0ID0gYWRkX2ludGVydmFsKCZkYXRhLT5tZW1fZGIsIHN0YXJ0LCBzaXplKTsKKwkJaWYgKCFyZXQpCisJCQlkb19tZW1fcHJvYmUocywgc3RhcnQsIHNpemUsIE5VTEwsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIFJFTU9WRV9NQU5BR0VEX1JFU09VUkNFOgogCQlyZXQgPSBzdWJfaW50ZXJ2YWwoJmRhdGEtPm1lbV9kYiwgc3RhcnQsIHNpemUpOwotCQlpZiAoIXJldCkgewotCQkJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldDsKLQkJCWRvd25fcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc29ja2V0LCAmcGNtY2lhX3NvY2tldF9saXN0LCBzb2NrZXRfbGlzdCkKLQkJCQlyZWxlYXNlX2Npc19tZW0oc29ja2V0KTsKLQkJCXVwX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NTYsNyArODE2LDYgQEAKIAlpZiAoZW5kID4gSU9fU1BBQ0VfTElNSVQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEFERF9NQU5BR0VEX1JFU09VUkNFOgogCQlpZiAoYWRkX2ludGVydmFsKCZkYXRhLT5pb19kYiwgc3RhcnQsIHNpemUpICE9IDApIHsKQEAgLTc3NSw3ICs4MzQsNiBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04MDEsOCArODU5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlyZXMgPSBzLT5jYl9kZXYtPmJ1cy0+cmVzb3VyY2VbaV07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShzLT5jYl9kZXYtPmJ1cywgcmVzLCBpKSB7CiAJCWlmICghcmVzKQogCQkJY29udGludWU7CiAKQEAgLTg1OSw2ICs5MTYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRhdGEtPm1lbV9kYi5uZXh0ID0gJmRhdGEtPm1lbV9kYjsKKwlkYXRhLT5tZW1fZGJfdmFsaWQubmV4dCA9ICZkYXRhLT5tZW1fZGJfdmFsaWQ7CiAJZGF0YS0+aW9fZGIubmV4dCA9ICZkYXRhLT5pb19kYjsKIAogCXMtPnJlc291cmNlX2RhdGEgPSAodm9pZCAqKSBkYXRhOwpAQCAtODczLDcgKzkzMSwxMCBAQAogCXN0cnVjdCBzb2NrZXRfZGF0YSAqZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJc3RydWN0IHJlc291cmNlX21hcCAqcCwgKnE7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKKwlmb3IgKHAgPSBkYXRhLT5tZW1fZGJfdmFsaWQubmV4dDsgcCAhPSAmZGF0YS0+bWVtX2RiX3ZhbGlkOyBwID0gcSkgeworCQlxID0gcC0+bmV4dDsKKwkJa2ZyZWUocCk7CisJfQogCWZvciAocCA9IGRhdGEtPm1lbV9kYi5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGI7IHAgPSBxKSB7CiAJCXEgPSBwLT5uZXh0OwogCQlrZnJlZShwKTsKQEAgLTg4Miw3ICs5NDMsNiBAQAogCQlxID0gcC0+bmV4dDsKIAkJa2ZyZWUocCk7CiAJfQotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiB9CiAKIApAQCAtOTA5LDcgKzk2OSw3IEBACiAJc3RydWN0IHJlc291cmNlX21hcCAqcDsKIAlzc2l6ZV90IHJldCA9IDA7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCiAJZm9yIChwID0gZGF0YS0+aW9fZGIubmV4dDsgcCAhPSAmZGF0YS0+aW9fZGI7IHAgPSBwLT5uZXh0KSB7CkBAIC05MjEsNyArOTgxLDcgQEAKIAkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTQ5LDkgKzEwMDksMTEgQEAKIAlpZiAoZW5kX2FkZHIgPCBzdGFydF9hZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0ID0gYWRqdXN0X2lvKHMsIGFkZCwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwogCWlmICghcmV0KQogCQlzLT5yZXNvdXJjZV9zZXR1cF9uZXcgPSAxOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KQEAgLTk2NSw5ICsxMDI3LDE5IEBACiAJc3RydWN0IHJlc291cmNlX21hcCAqcDsKIAlzc2l6ZV90IHJldCA9IDA7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCisJZm9yIChwID0gZGF0YS0+bWVtX2RiX3ZhbGlkLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYl92YWxpZDsKKwkgICAgIHAgPSBwLT5uZXh0KSB7CisJCWlmIChyZXQgPiAoUEFHRV9TSVpFIC0gMTApKQorCQkJY29udGludWU7CisJCXJldCArPSBzbnByaW50ZigmYnVmW3JldF0sIChQQUdFX1NJWkUgLSByZXQgLSAxKSwKKwkJCQkiMHglMDhseCAtIDB4JTA4bHhcbiIsCisJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlKSwKKwkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CisJfQorCiAJZm9yIChwID0gZGF0YS0+bWVtX2RiLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYjsgcCA9IHAtPm5leHQpIHsKIAkJaWYgKHJldCA+IChQQUdFX1NJWkUgLSAxMCkpCiAJCQljb250aW51ZTsKQEAgLTk3Nyw3ICsxMDQ5LDcgQEAKIAkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwNSw5ICsxMDc3LDExIEBACiAJaWYgKGVuZF9hZGRyIDwgc3RhcnRfYWRkcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldCA9IGFkanVzdF9tZW1vcnkocywgYWRkLCBzdGFydF9hZGRyLCBlbmRfYWRkcik7CiAJaWYgKCFyZXQpCiAJCXMtPnJlc291cmNlX3NldHVwX25ldyA9IDE7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCA3YTQ1NjAwLi4wODI3ODAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwpAQCAtODgsMTUgKzg4LDE0IEBACiBzdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfaW5zZXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3NpemVfdCByZXQ7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoZGV2KTsKIAogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gcGNtY2lhX2luc2VydF9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfSU5TRVJUKTsKIAotCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKKwlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9pbnNlcnQsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9pbnNlcnQpOwogCkBAIC0xMTMsMTggKzExMiwyMiBAQAogCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChkZXYpOworCXNzaXplX3QgcmV0ID0gY291bnQ7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpICYmICFzdHJuY21wKGJ1ZiwgIm9mZiIsIDMpKQotCQlyZXQgPSBwY21jaWFfc3VzcGVuZF9jYXJkKHMpOwotCWVsc2UgaWYgKChzLT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSAmJiAhc3RybmNtcChidWYsICJvbiIsIDIpKQotCQlyZXQgPSBwY21jaWFfcmVzdW1lX2NhcmQocyk7CisJaWYgKCFzdHJuY21wKGJ1ZiwgIm9mZiIsIDMpKQorCQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1NVU1BFTkQpOworCWVsc2UgeworCQlpZiAoIXN0cm5jbXAoYnVmLCAib24iLCAyKSkKKwkJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVTVU1FKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwl9CiAKLQlyZXR1cm4gcmV0ID8gLUVOT0RFViA6IGNvdW50OworCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9wbV9zdGF0ZSwgMDY0NCwgcGNjYXJkX3Nob3dfY2FyZF9wbV9zdGF0ZSwgcGNjYXJkX3N0b3JlX2NhcmRfcG1fc3RhdGUpOwogCkBAIC0xMzIsMTUgKzEzNSwxNCBAQAogCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChkZXYpOwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBwY21jaWFfZWplY3RfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX0VKRUNUKTsKIAotCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKKwlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9lamVjdCwgMDIwMCwgTlVMTCwgcGNjYXJkX3N0b3JlX2VqZWN0KTsKIApAQCAtMTY3LDcgKzE2OSw5IEBACiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIjB4JXhcbiIsICZtYXNrKTsKIAogCWlmIChyZXQgPT0gMSkgeworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlzLT5pcnFfbWFzayAmPSBtYXNrOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldCA9IDA7CiAJfQogCkBAIC0xODcsMTY0ICsxOTEsMjIgQEAKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChkZXYpOwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJaWYgKCFzLT5yZXNvdXJjZV9zZXR1cF9kb25lKQogCQlzLT5yZXNvdXJjZV9zZXR1cF9kb25lID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCi0JbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKLQlpZiAoKHMtPmNhbGxiYWNrKSAmJgotCSAgICAocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkgJiYKLQkgICAgIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgewotCQlpZiAodHJ5X21vZHVsZV9nZXQocy0+Y2FsbGJhY2stPm93bmVyKSkgewotCQkJcy0+Y2FsbGJhY2stPnJlcXVlcnkocywgMCk7Ci0JCQltb2R1bGVfcHV0KHMtPmNhbGxiYWNrLT5vd25lcik7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3Jlc291cmNlc19zZXR1cF9kb25lLCAwNjAwLCBwY2NhcmRfc2hvd19yZXNvdXJjZSwgcGNjYXJkX3N0b3JlX3Jlc291cmNlKTsKIAotCi1zdGF0aWMgc3NpemVfdCBwY2NhcmRfZXh0cmFjdF9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXR1cGxlX3QgdHVwbGU7Ci0JaW50IHN0YXR1cywgaTsKLQlsb2ZmX3QgcG9pbnRlciA9IDA7Ci0Jc3NpemVfdCByZXQgPSAwOwotCXVfY2hhciAqdHVwbGVidWZmZXI7Ci0JdV9jaGFyICp0ZW1wYnVmZmVyOwotCi0JdHVwbGVidWZmZXIgPSBrbWFsbG9jKHNpemVvZih1X2NoYXIpICogMjU2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXR1cGxlYnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXRlbXBidWZmZXIgPSBrbWFsbG9jKHNpemVvZih1X2NoYXIpICogMjU4LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRlbXBidWZmZXIpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmcmVlX3R1cGxlOwotCX0KLQotCW1lbXNldCgmdHVwbGUsIDAsIHNpemVvZih0dXBsZV90KSk7Ci0KLQl0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0xJTksgfCBUVVBMRV9SRVRVUk5fQ09NTU9OOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLQlzdGF0dXMgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCAmdHVwbGUpOwotCXdoaWxlICghc3RhdHVzKSB7Ci0JCXR1cGxlLlR1cGxlRGF0YSA9IHR1cGxlYnVmZmVyOwotCQl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0JCW1lbXNldCh0dXBsZWJ1ZmZlciwgMCwgc2l6ZW9mKHVfY2hhcikgKiAyNTUpOwotCi0JCXN0YXR1cyA9IHBjY2FyZF9nZXRfdHVwbGVfZGF0YShzLCAmdHVwbGUpOwotCQlpZiAoc3RhdHVzKQotCQkJYnJlYWs7Ci0KLQkJaWYgKG9mZiA8IChwb2ludGVyICsgMiArIHR1cGxlLlR1cGxlRGF0YUxlbikpIHsKLQkJCXRlbXBidWZmZXJbMF0gPSB0dXBsZS5UdXBsZUNvZGUgJiAweGZmOwotCQkJdGVtcGJ1ZmZlclsxXSA9IHR1cGxlLlR1cGxlTGluayAmIDB4ZmY7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdHVwbGUuVHVwbGVEYXRhTGVuOyBpKyspCi0JCQkJdGVtcGJ1ZmZlcltpICsgMl0gPSB0dXBsZWJ1ZmZlcltpXSAmIDB4ZmY7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCAoMiArIHR1cGxlLlR1cGxlRGF0YUxlbik7IGkrKykgewotCQkJCWlmICgoKGkgKyBwb2ludGVyKSA+PSBvZmYpICYmCi0JCQkJICAgIChpICsgcG9pbnRlcikgPCAob2ZmICsgY291bnQpKSB7Ci0JCQkJCWJ1ZltyZXRdID0gdGVtcGJ1ZmZlcltpXTsKLQkJCQkJcmV0Kys7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcG9pbnRlciArPSAyICsgdHVwbGUuVHVwbGVEYXRhTGVuOwotCi0JCWlmIChwb2ludGVyID49IChvZmYgKyBjb3VudCkpCi0JCQlicmVhazsKLQotCQlpZiAodHVwbGUuVHVwbGVDb2RlID09IENJU1RQTF9FTkQpCi0JCQlicmVhazsKLQkJc3RhdHVzID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCAmdHVwbGUpOwotCX0KLQotCWtmcmVlKHRlbXBidWZmZXIpOwotIGZyZWVfdHVwbGU6Ci0Ja2ZyZWUodHVwbGVidWZmZXIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgcGNjYXJkX3Nob3dfY2lzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCSAgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDB4MjAwOwotCi0JaWYgKG9mZiA+PSBzaXplKQotCQljb3VudCA9IDA7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwotCQl1bnNpZ25lZCBpbnQgY2hhaW5zOwotCi0JCWlmIChvZmYgKyBjb3VudCA+IHNpemUpCi0JCQljb3VudCA9IHNpemUgLSBvZmY7Ci0KLQkJcyA9IHRvX3NvY2tldChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOwotCi0JCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZjaGFpbnMpKQotCQkJcmV0dXJuIC1FSU87Ci0JCWlmICghY2hhaW5zKQotCQkJcmV0dXJuIC1FTk9EQVRBOwotCi0JCWNvdW50ID0gcGNjYXJkX2V4dHJhY3RfY2lzKHMsIGJ1Ziwgb2ZmLCBjb3VudCk7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfY2lzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOwotCWludCBlcnJvcjsKLQotCWlmIChvZmYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvdW50ID49IENJU1RQTF9NQVhfQ0lTX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZXJyb3IgPSBwY21jaWFfcmVwbGFjZV9jaXMocywgYnVmLCBjb3VudCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gLUVJTzsKLQotCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7Ci0JaWYgKChzLT5jYWxsYmFjaykgJiYgKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpICYmCi0JICAgICEocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpIHsKLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KHMtPmNhbGxiYWNrLT5vd25lcikpIHsKLQkJCXMtPmNhbGxiYWNrLT5yZXF1ZXJ5KHMsIDEpOwotCQkJbW9kdWxlX3B1dChzLT5jYWxsYmFjay0+b3duZXIpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGNjYXJkX3NvY2tldF9hdHRyaWJ1dGVzW10gPSB7CiAJJmRldl9hdHRyX2NhcmRfdHlwZS5hdHRyLAogCSZkZXZfYXR0cl9jYXJkX3ZvbHRhZ2UuYXR0ciwKQEAgLTM2MiwyOCArMjI0LDEyIEBACiAJLmF0dHJzID0gcGNjYXJkX3NvY2tldF9hdHRyaWJ1dGVzLAogfTsKIAotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHBjY2FyZF9jaXNfYXR0ciA9IHsKLQkuYXR0ciA9IHsgLm5hbWUgPSAiY2lzIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaXplID0gMHgyMDAsCi0JLnJlYWQgPSBwY2NhcmRfc2hvd19jaXMsCi0JLndyaXRlID0gcGNjYXJkX3N0b3JlX2NpcywKLX07Ci0KIGludCBwY2NhcmRfc3lzZnNfYWRkX3NvY2tldChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldCA9IDA7Ci0KLQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnNvY2tldF9hdHRycyk7Ci0JaWYgKCFyZXQpIHsKLQkJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZkZXYtPmtvYmosICZwY2NhcmRfY2lzX2F0dHIpOwotCQlpZiAocmV0KQotCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZzb2NrZXRfYXR0cnMpOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnNvY2tldF9hdHRycyk7CiB9CiAKIHZvaWQgcGNjYXJkX3N5c2ZzX3JlbW92ZV9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCAmcGNjYXJkX2Npc19hdHRyKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnNvY2tldF9hdHRycyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMgYi9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1NjBjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYwpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqIFBDTUNJQSBzb2NrZXQgY29kZSBmb3IgdGhlIE15Q2FibGUgWFhTMTUwMCBzeXN0ZW0uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1hbnVlbCBMYXVzcyA8bWFudWVsLmxhdXNzQGdtYWlsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorCisjZGVmaW5lIE1FTV9NQVBfU0laRQkweDQwMDAwMAorI2RlZmluZSBJT19NQVBfU0laRQkweDEwMDAKKworCisvKgorICogMy4zViBjYXJkcyBvbmx5OyBhbGwgaW50ZXJmYWNpbmcgaXMgZG9uZSB2aWEgZ3Bpb3M6CisgKgorICogMC8xOiAgY2FyZGRldGVjdCAoMDAgPSBjYXJkIHByZXNlbnQsIHh4ID0gaHVoKQorICogNDoJIGNhcmQgaXJxCisgKiAyMDQ6ICByZXNldCAoaGlnaC1hY3QpCisgKiAyMDU6ICBidWZmZXIgZW5hYmxlIChsb3ctYWN0KQorICogMjA4LzIwOTogY2FyZCB2b2x0YWdlIGtleSAoMDAsMDEsMTAsMTEpCisgKiAyMTA6ICBiYXR0d2FybgorICogMjExOiAgYmF0ZGVhZAorICogMjE0OiAgcG93ZXIgKGxvdy1hY3QpCisgKi8KKyNkZWZpbmUgR1BJT19DREEJMAorI2RlZmluZSBHUElPX0NEQgkxCisjZGVmaW5lIEdQSU9fQ0FSRElSUQk0CisjZGVmaW5lIEdQSU9fUkVTRVQJMjA0CisjZGVmaW5lIEdQSU9fT1VURU4JMjA1CisjZGVmaW5lIEdQSU9fVlNMCTIwOAorI2RlZmluZSBHUElPX1ZTSAkyMDkKKyNkZWZpbmUgR1BJT19CQVRUREVBRAkyMTAKKyNkZWZpbmUgR1BJT19CQVRUV0FSTgkyMTEKKyNkZWZpbmUgR1BJT19QT1dFUgkyMTQKKworc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgeworCXN0cnVjdCBwY21jaWFfc29ja2V0CXNvY2tldDsKKwl2b2lkCQkqdmlydF9pbzsKKworCXBoeXNfYWRkcl90CXBoeXNfaW87CisJcGh5c19hZGRyX3QJcGh5c19hdHRyOworCXBoeXNfYWRkcl90CXBoeXNfbWVtOworCisJLyogcHJldmlvdXMgZmxhZ3MgZm9yIHNldF9zb2NrZXQoKSAqLworCXVuc2lnbmVkIGludCBvbGRfZmxhZ3M7Cit9OworCisjZGVmaW5lIHRvX3h4c19zb2NrZXQoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrLCBzb2NrZXQpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjZGlycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrID0gZGF0YTsKKworCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNvY2stPnNvY2tldCwgU1NfREVURUNUKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB4eHMxNTAwX3BjbWNpYV9jb25maWd1cmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgc3RydWN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IHRvX3h4c19zb2NrZXQoc2t0KTsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZDsKKworCS8qIHBvd2VyIGNvbnRyb2wgKi8KKwlzd2l0Y2ggKHN0YXRlLT5WY2MpIHsKKwljYXNlIDA6CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9XRVIsIDEpOwkvKiBwb3dlciBvZmYgKi8KKwkJYnJlYWs7CisJY2FzZSAzMzoKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1dFUiwgMCk7CS8qIHBvd2VyIG9uICovCisJCWJyZWFrOworCWNhc2UgNTA6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2hhbmdlZCA9IHN0YXRlLT5mbGFncyBeIHNvY2stPm9sZF9mbGFnczsKKworCWlmIChjaGFuZ2VkICYgU1NfUkVTRVQpIHsKKwkJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSB7CisJCQlncGlvX3NldF92YWx1ZShHUElPX1JFU0VULCAxKTsJLyogYXNzZXJ0IHJlc2V0ICovCisJCQlncGlvX3NldF92YWx1ZShHUElPX09VVEVOLCAxKTsJLyogYnVmZmVycyBvZmYgKi8KKwkJfSBlbHNlIHsKKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUkVTRVQsIDApOwkvKiBkZWFzc2VydCByZXNldCAqLworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19PVVRFTiwgMCk7CS8qIGJ1ZmZlcnMgb24gKi8KKwkJCW1zbGVlcCg1MDApOworCQl9CisJfQorCisJc29jay0+b2xkX2ZsYWdzID0gc3RhdGUtPmZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICAgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCWludCBpOworCisJc3RhdHVzID0gMDsKKworCS8qIGNoZWNrIGNhcmRkZXRlY3RzOiBHUElPWzA6MV0gbXVzdCBib3RoIGJlIGxvdyAqLworCWlmICghZ3Bpb19nZXRfdmFsdWUoR1BJT19DREEpICYmICFncGlvX2dldF92YWx1ZShHUElPX0NEQikpCisJCXN0YXR1cyB8PSBTU19ERVRFQ1Q7CisKKwkvKiBkZXRlcm1pbmUgY2FyZCB2b2x0YWdlOiBHUElPWzIwODoyMDldIGJpbmFyeSB2YWx1ZSAqLworCWkgPSAoISFncGlvX2dldF92YWx1ZShHUElPX1ZTTCkpIHwgKCghIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fVlNIKSkgPDwgMSk7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJc3RhdHVzIHw9IFNTXzNWQ0FSRDsJLyogM1YgY2FyZCAqLworCQlicmVhazsKKwljYXNlIDM6CQkJCS8qIDVWIGNhcmQsIHVuc3VwcG9ydGVkICovCisJZGVmYXVsdDoKKwkJc3RhdHVzIHw9IFNTX1hWQ0FSRDsJLyogdHJlYXRlZCBhcyB1bnN1cHBvcnRlZCBpbiBjb3JlICovCisJfQorCisJLyogR1BJTzIxNDogbG93IGFjdGl2ZSBwb3dlciBzd2l0Y2ggKi8KKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoR1BJT19QT1dFUikgPyAwIDogU1NfUE9XRVJPTjsKKworCS8qIEdQSU8yMDQ6IGhpZ2gtYWN0aXZlIHJlc2V0IGxpbmUgKi8KKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoR1BJT19SRVNFVCkgPyBTU19SRVNFVCA6IFNTX1JFQURZOworCisJLyogb3RoZXIgc3R1ZmYgKi8KKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoR1BJT19CQVRUREVBRCkgPyAwIDogU1NfQkFUREVBRDsKKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoR1BJT19CQVRUV0FSTikgPyAwIDogU1NfQkFUV0FSTjsKKworCSp2YWx1ZSA9IHN0YXR1czsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3NvY2tfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQoreworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fQ0RBKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0NEQik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19WU0wpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fVlNIKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0JBVFRERUFEKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0JBVFRXQVJOKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19SRVNFVCwgMSk7CS8qIGFzc2VydCByZXNldCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX09VVEVOLCAxKTsJLyogZGlzYWJsZSBidWZmZXJzICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9XRVIsIDEpOwkvKiBwb3dlciBvZmYgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3NvY2tfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1MXgwMF9wY21jaWFfc2V0X2lvX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqbWFwKQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrID0gdG9feHhzX3NvY2tldChza3QpOworCisJbWFwLT5zdGFydCA9ICh1MzIpc29jay0+dmlydF9pbzsKKwltYXAtPnN0b3AgPSBtYXAtPnN0YXJ0ICsgSU9fTUFQX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4MDBfcGNtY2lhX3NldF9tZW1fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgICBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IHRvX3h4c19zb2NrZXQoc2t0KTsKKworCWlmIChtYXAtPmZsYWdzICYgTUFQX0FUVFJJQikKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBzb2NrLT5waHlzX2F0dHIgKyBtYXAtPmNhcmRfc3RhcnQ7CisJZWxzZQorCQltYXAtPnN0YXRpY19zdGFydCA9IHNvY2stPnBoeXNfbWVtICsgbWFwLT5jYXJkX3N0YXJ0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgeHhzMTUwMF9wY21jaWFfb3BlcmF0aW9ucyA9IHsKKwkuaW5pdAkJCT0geHhzMTUwMF9wY21jaWFfc29ja19pbml0LAorCS5zdXNwZW5kCQk9IHh4czE1MDBfcGNtY2lhX3NvY2tfc3VzcGVuZCwKKwkuZ2V0X3N0YXR1cwkJPSB4eHMxNTAwX3BjbWNpYV9nZXRfc3RhdHVzLAorCS5zZXRfc29ja2V0CQk9IHh4czE1MDBfcGNtY2lhX2NvbmZpZ3VyZSwKKwkuc2V0X2lvX21hcAkJPSBhdTF4MDBfcGNtY2lhX3NldF9pb19tYXAsCisJLnNldF9tZW1fbWFwCQk9IGF1MXgwMF9wY21jaWFfc2V0X21lbV9tYXAsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB4eHMxNTAwX3BjbWNpYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgcmV0LCBpcnE7CisKKwlzb2NrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gLUVOT0RFVjsKKworCS8qCisJICogcHNldWRvLWF0dHI6ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIGF0dHJpYnV0ZSBzcGFjZQorCSAqIGZvciB0aGlzIHNvY2tldCAodXN1YWxseSB0aGUgMzZiaXQgYWRkcmVzcyBzaGlmdGVkIDQgdG8gdGhlCisJICogcmlnaHQpLgorCSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLWF0dHIiKTsKKwlpZiAoIXIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyAncGNtY2lhLWF0dHInIHJlc291cmNlIVxuIik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19hdHRyID0gci0+c3RhcnQ7CisKKwkvKgorCSAqIHBzZXVkby1tZW06ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIG1lbW9yeSBzcGFjZSBmb3IKKwkgKiB0aGlzIHNvY2tldCAodXN1YWxseSB0aGUgMzZiaXQgYWRkcmVzcyBzaGlmdGVkIDQgdG8gdGhlIHJpZ2h0KQorCSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLW1lbSIpOworCWlmICghcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nICdwY21jaWEtbWVtJyByZXNvdXJjZSFcbiIpOworCQlnb3RvIG91dDA7CisJfQorCXNvY2stPnBoeXNfbWVtID0gci0+c3RhcnQ7CisKKwkvKgorCSAqIHBzZXVkby1pbzogIFRoZSAzMmJpdCBhZGRyZXNzIG9mIHRoZSBQQ01DSUEgSU8gc3BhY2UgZm9yIHRoaXMKKwkgKiBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZSByaWdodCkuCisJICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtaW8iKTsKKwlpZiAoIXIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyAncGNtY2lhLWlvJyByZXNvdXJjZSFcbiIpOworCQlnb3RvIG91dDA7CisJfQorCXNvY2stPnBoeXNfaW8gPSByLT5zdGFydDsKKworCisJLyoKKwkgKiBQQ01DSUEgY2xpZW50IGRyaXZlcnMgdXNlIHRoZSBpbmIvb3V0YiBtYWNyb3MgdG8gYWNjZXNzCisJICogdGhlIElPIHJlZ2lzdGVycy4gIFNpbmNlIG1pcHNfaW9fcG9ydF9iYXNlIGlzIGFkZGVkCisJICogdG8gdGhlIGFjY2VzcyBhZGRyZXNzIG9mIHRoZSBtaXBzIGltcGxlbWVudGF0aW9uIG9mCisJICogaW5iL291dGIsIHdlIG5lZWQgdG8gc3VidHJhY3QgaXQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKKwkgKiB0byBhY2Nlc3MgdGhlIEkvTyBvciBNRU0gYWRkcmVzcyBkaXJlY3RseSwgd2l0aG91dAorCSAqIGdvaW5nIHRocm91Z2ggdGhpcyAibWlwc19pb19wb3J0X2Jhc2UiIG1lY2hhbmlzbS4KKwkgKi8KKwlzb2NrLT52aXJ0X2lvID0gKHZvaWQgKikoaW9yZW1hcChzb2NrLT5waHlzX2lvLCBJT19NQVBfU0laRSkgLQorCQkJCSBtaXBzX2lvX3BvcnRfYmFzZSk7CisKKwlpZiAoIXNvY2stPnZpcnRfaW8pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIElPIGFyZWFcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDA7CisJfQorCisJc29jay0+c29ja2V0Lm9wcwk9ICZ4eHMxNTAwX3BjbWNpYV9vcGVyYXRpb25zOworCXNvY2stPnNvY2tldC5vd25lcgk9IFRISVNfTU9EVUxFOworCXNvY2stPnNvY2tldC5wY2lfaXJxCT0gZ3Bpb190b19pcnEoR1BJT19DQVJESVJRKTsKKwlzb2NrLT5zb2NrZXQuZmVhdHVyZXMJPSBTU19DQVBfU1RBVElDX01BUCB8IFNTX0NBUF9QQ0NBUkQ7CisJc29jay0+c29ja2V0Lm1hcF9zaXplCT0gTUVNX01BUF9TSVpFOworCXNvY2stPnNvY2tldC5pb19vZmZzZXQJPSAodW5zaWduZWQgbG9uZylzb2NrLT52aXJ0X2lvOworCXNvY2stPnNvY2tldC5kZXYucGFyZW50CT0gJnBkZXYtPmRldjsKKwlzb2NrLT5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc29jayk7CisKKwkvKiBzZXR1cCBjYXJkZGV0ZWN0IGlycTogdXNlIG9uZSBvZiB0aGUgMiBHUElPcyBhcyBhbgorCSAqIGVkZ2UgZGV0ZWN0b3IuCisJICovCisJaXJxID0gZ3Bpb190b19pcnEoR1BJT19DREEpOworCXNldF9pcnFfdHlwZShpcnEsIElSUV9UWVBFX0VER0VfQk9USCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBjZGlycSwgMCwgInBjbWNpYV9jYXJkZGV0ZWN0Iiwgc29jayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgc2V0dXAgY2QgaXJxXG4iKTsKKwkJZ290byBvdXQxOworCX0KKworCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJnNvY2stPnNvY2tldCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOworCQlnb3RvIG91dDI7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiTXlDYWJsZSBYWFMxNTAwIFBDTUNJQSBzb2NrZXQgc2VydmljZXNcbiIpOworCisJcmV0dXJuIDA7CisKK291dDI6CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19DREEpLCBzb2NrKTsKK291dDE6CisJaW91bm1hcCgodm9pZCAqKShzb2NrLT52aXJ0X2lvICsgKHUzMiltaXBzX2lvX3BvcnRfYmFzZSkpOworb3V0MDoKKwlrZnJlZShzb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB4eHMxNTAwX3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fQ0RBKSwgc29jayk7CisJaW91bm1hcCgodm9pZCAqKShzb2NrLT52aXJ0X2lvICsgKHUzMiltaXBzX2lvX3BvcnRfYmFzZSkpOworCWtmcmVlKHNvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHh4czE1MDBfcGNtY2lhX3NvY2tldF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAieHhzMTUwMF9wY21jaWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB4eHMxNTAwX3BjbWNpYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHh4czE1MDBfcGNtY2lhX3JlbW92ZSksCit9OworCitpbnQgX19pbml0IHh4czE1MDBfcGNtY2lhX3NvY2tldF9sb2FkKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeHhzMTUwMF9wY21jaWFfc29ja2V0X2RyaXZlcik7Cit9CisKK3ZvaWQgIF9fZXhpdCB4eHMxNTAwX3BjbWNpYV9zb2NrZXRfdW5sb2FkKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnh4czE1MDBfcGNtY2lhX3NvY2tldF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh4eHMxNTAwX3BjbWNpYV9zb2NrZXRfbG9hZCk7Cittb2R1bGVfZXhpdCh4eHMxNTAwX3BjbWNpYV9zb2NrZXRfdW5sb2FkKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgU29ja2V0IFNlcnZpY2VzIGZvciBNeUNhYmxlIFhYUzE1MDAgc3lzdGVtcyIpOworTU9EVUxFX0FVVEhPUigiTWFudWVsIExhdXNzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCmluZGV4IGU0ZDEyYWMuLmI4NTM3NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCkBAIC0zNyw2ICszNywxMSBAQAogbW9kdWxlX3BhcmFtKHB3cl9pcnFzX29mZiwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHB3cl9pcnFzX29mZiwgIkZvcmNlIElSUXMgb2ZmIGR1cmluZyBwb3dlci1vbiBvZiBzbG90LiBVc2Ugb25seSB3aGVuIHNlZWluZyBJUlEgc3Rvcm1zISIpOwogCitzdGF0aWMgY2hhciBvMl9zcGVlZHVwW10gPSAiZGVmYXVsdCI7Cittb2R1bGVfcGFyYW1fc3RyaW5nKG8yX3NwZWVkdXAsIG8yX3NwZWVkdXAsIHNpemVvZihvMl9zcGVlZHVwKSwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG8yX3NwZWVkdXAsICJVc2UgcHJlZmV0Y2gvYnVyc3QgZm9yIE8yLWJyaWRnZXM6ICdvbicsICdvZmYnICIKKwkib3IgJ2RlZmF1bHQnICh1c2VzIHJlY29tbWVuZGVkIGJlaGF2aW91ciBmb3IgdGhlIGRldGVjdGVkIGJyaWRnZSkiKTsKKwogI2RlZmluZSBkZWJ1Zyh4LCBzLCBhcmdzLi4uKSBkZXZfZGJnKCZzLT5kZXYtPmRldiwgeCwgIyNhcmdzKQogCiAvKiBEb24ndCBhc2suLiAqLwpAQCAtNjQ5LDkgKzY1NCwxMCBAQAogc3RhdGljIGludCB5ZW50YV9zZWFyY2hfcmVzKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQkgICAgdTMyIG1pbikKIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJvb3Q7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcm9vdCA9IHNvY2tldC0+ZGV2LT5idXMtPnJlc291cmNlW2ldOworCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShzb2NrZXQtPmRldi0+YnVzLCByb290LCBpKSB7CiAJCWlmICghcm9vdCkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwppbmRleCBmNTI2ZTczLi42ODQ4ZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKQEAgLTc5LDYgKzc5LDcgQEAKIAlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZXBlbmRzIG9uIFJGS0lMTCB8fCBSRktJTEwgPSBuCiAJZGVwZW5kcyBvbiBQT1dFUl9TVVBQTFkKKwlkZXBlbmRzIG9uIFNFUklPX0k4MDQyCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCVRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgcmZraWxsIGFuZCBiYWNrbGlnaHQgY29udHJvbCB0byBEZWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwppbmRleCAwN2QxNGRmLi4yMjZiM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTkzNCw3ICs5MzQsNyBAQAogCWFjZXJfYmFja2xpZ2h0X2RldmljZSA9IGJkOwogCiAJYmQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IG1heF9icmlnaHRuZXNzOworCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gcmVhZF9icmlnaHRuZXNzKGJkKTsKIAliZC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYXhfYnJpZ2h0bmVzczsKIAliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKaW5kZXggZWQ5MDA4Mi4uOGNiMjBlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwpAQCAtMzQsNiArMzQsMTEgQEAKICNkZWZpbmUgQ01QQ19BQ0NFTF9TRU5TSVRJVklUWV9ERUZBVUxUCQk1CiAKIAorI2RlZmluZSBDTVBDX0FDQ0VMX0hJRAkJIkFDQ0UwMDAwIgorI2RlZmluZSBDTVBDX1RBQkxFVF9ISUQJCSJUQkxUMDAwMCIKKyNkZWZpbmUgQ01QQ19CTF9ISUQJCSJJUE1MMjAwIgorI2RlZmluZSBDTVBDX0tFWVNfSElECQkiRm5CVDAwMDAiCisKIC8qCiAgKiBHZW5lcmljIGlucHV0IGRldmljZSBjb2RlLgogICovCkBAIC0yODIsMTAgKzI4Nyw5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY19hY2NlbF9kZXZpY2VfaWRzW10gPSB7Ci0JeyJBQ0NFMDAwMCIsIDB9LAorCXtDTVBDX0FDQ0VMX0hJRCwgMH0sCiAJeyIiLCAwfQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY19hY2NlbF9kZXZpY2VfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBjbXBjX2FjY2VsX2FjcGlfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtMzY2LDEwICszNzAsOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfdGFibGV0X2RldmljZV9pZHNbXSA9IHsKLQl7IlRCTFQwMDAwIiwgMH0sCisJe0NNUENfVEFCTEVUX0hJRCwgMH0sCiAJeyIiLCAwfQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY190YWJsZXRfZGV2aWNlX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY190YWJsZXRfYWNwaV9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC00NzcsMTcgKzQ4MCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfZGV2aWNlX2lkc1tdID0gewotCXsiSVBNTDIwMCIsIDB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2JsX2RldmljZV9pZHNbXSA9IHsKKwl7Q01QQ19CTF9ISUQsIDB9LAogCXsiIiwgMH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfZGV2aWNlX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19ibF9hY3BpX2RyaXZlciA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJjbXBjIiwKIAkuY2xhc3MgPSAiY21wYyIsCi0JLmlkcyA9IGNtcGNfZGV2aWNlX2lkcywKKwkuaWRzID0gY21wY19ibF9kZXZpY2VfaWRzLAogCS5vcHMgPSB7CiAJCS5hZGQgPSBjbXBjX2JsX2FkZCwKIAkJLnJlbW92ZSA9IGNtcGNfYmxfcmVtb3ZlCkBAIC01NDAsMTAgKzU0Miw5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY19rZXlzX2RldmljZV9pZHNbXSA9IHsKLQl7IkZuQlQwMDAwIiwgMH0sCisJe0NNUENfS0VZU19ISUQsIDB9LAogCXsiIiwgMH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfa2V5c19kZXZpY2VfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBjbXBjX2tleXNfYWNwaV9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC02MDcsMyArNjA4LDEzIEBACiAKIG1vZHVsZV9pbml0KGNtcGNfaW5pdCk7CiBtb2R1bGVfZXhpdChjbXBjX2V4aXQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfZGV2aWNlX2lkc1tdID0geworCXtDTVBDX0FDQ0VMX0hJRCwgMH0sCisJe0NNUENfVEFCTEVUX0hJRCwgMH0sCisJe0NNUENfQkxfSElELCAwfSwKKwl7Q01QQ19LRVlTX0hJRCwgMH0sCisJeyIiLCAwfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2RldmljZV9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCmluZGV4IDFhMzg3ZTcuLjI3NDBiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKQEAgLTI2LDE3ICsyNiw4IEBACiAvKgogICogY29tYXBsLWxhcHRvcC5jIC0gQ29tcGFsIGxhcHRvcCBzdXBwb3J0LgogICoKLSAqIFRoaXMgZHJpdmVyIGV4cG9ydHMgYSBmZXcgZmlsZXMgaW4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2NvbXBhbC1sYXB0b3AvOgotICoKLSAqICAgd2xhbiAtIHdsYW4gc3Vic3lzdGVtIHN0YXRlOiBjb250YWlucyAwIG9yIDEgKHJ3KQotICoKLSAqICAgYmx1ZXRvb3RoIC0gQmx1ZXRvb3RoIHN1YnN5c3RlbSBzdGF0ZTogY29udGFpbnMgMCBvciAxIChydykKLSAqCi0gKiAgIHJhdyAtIHJhdyB2YWx1ZSB0YWtlbiBmcm9tIGVtYmVkZGVkIGNvbnRyb2xsZXIgcmVnaXN0ZXIgKHJvKQotICoKLSAqIEluIGFkZGl0aW9uIHRvIHRoZXNlIHBsYXRmb3JtIGRldmljZSBhdHRyaWJ1dGVzIHRoZSBkcml2ZXIKLSAqIHJlZ2lzdGVycyBpdHNlbGYgaW4gdGhlIExpbnV4IGJhY2tsaWdodCBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMKLSAqIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgdW5kZXIgL3N5cy9jbGFzcy9iYWNrbGlnaHQvY29tcGFsLWxhcHRvcC8uCisgKiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUgcmZraWxsIHN1YnN5c3RlbSBhbmQKKyAqIHRoZSBMaW51eCBiYWNrbGlnaHQgY29udHJvbCBzdWJzeXN0ZW0uCiAgKgogICogVGhpcyBkcml2ZXIgbWlnaHQgd29yayBvbiBvdGhlciBsYXB0b3BzIHByb2R1Y2VkIGJ5IENvbXBhbC4gSWYgeW91CiAgKiB3YW50IHRvIHRyeSBpdCB5b3UgY2FuIHBhc3MgZm9yY2U9MSBhcyBhcmd1bWVudCB0byB0aGUgbW9kdWxlIHdoaWNoCkBAIC01MSw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAKICNkZWZpbmUgQ09NUEFMX0RSSVZFUl9WRVJTSU9OICIwLjIuNiIKIApAQCAtNjMsNiArNTUsMTAgQEAKICNkZWZpbmUgV0xBTl9NQVNLCTB4MDEKICNkZWZpbmUgQlRfTUFTSyAJMHgwMgogCitzdGF0aWMgc3RydWN0IHJma2lsbCAqd2lmaV9yZmtpbGw7CitzdGF0aWMgc3RydWN0IHJma2lsbCAqYnRfcmZraWxsOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbXBhbF9kZXZpY2U7CisKIHN0YXRpYyBpbnQgZm9yY2U7CiBtb2R1bGVfcGFyYW0oZm9yY2UsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZSwgIkZvcmNlIGRyaXZlciBsb2FkLCBpZ25vcmUgRE1JIGRhdGEiKTsKQEAgLTg4LDY1ICs4NCw3NSBAQAogCXJldHVybiAoaW50KSByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3dsYW5fc3RhdGUoaW50IHN0YXRlKQorc3RhdGljIGludCBjb21wYWxfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7CisJdW5zaWduZWQgbG9uZyByYWRpbyA9ICh1bnNpZ25lZCBsb25nKSBkYXRhOwogCXU4IHJlc3VsdCwgdmFsdWU7CiAKIAllY19yZWFkKENPTVBBTF9FQ19DT01NQU5EX1dJUkVMRVNTLCAmcmVzdWx0KTsKIAotCWlmICgocmVzdWx0ICYgS0lMTFNXSVRDSF9NQVNLKSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIHsKLQkJaWYgKHN0YXRlKQotCQkJdmFsdWUgPSAodTgpIChyZXN1bHQgfCBXTEFOX01BU0spOwotCQllbHNlCi0JCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCAmIH5XTEFOX01BU0spOwotCQllY193cml0ZShDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgdmFsdWUpOwotCX0KKwlpZiAoIWJsb2NrZWQpCisJCXZhbHVlID0gKHU4KSAocmVzdWx0IHwgcmFkaW8pOworCWVsc2UKKwkJdmFsdWUgPSAodTgpIChyZXN1bHQgJiB+cmFkaW8pOworCWVjX3dyaXRlKENPTVBBTF9FQ19DT01NQU5EX1dJUkVMRVNTLCB2YWx1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfYmx1ZXRvb3RoX3N0YXRlKGludCBzdGF0ZSkKLXsKLQl1OCByZXN1bHQsIHZhbHVlOwotCi0JZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7Ci0KLQlpZiAoKHJlc3VsdCAmIEtJTExTV0lUQ0hfTUFTSykgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCWlmIChzdGF0ZSkKLQkJCXZhbHVlID0gKHU4KSAocmVzdWx0IHwgQlRfTUFTSyk7Ci0JCWVsc2UKLQkJCXZhbHVlID0gKHU4KSAocmVzdWx0ICYgfkJUX01BU0spOwotCQllY193cml0ZShDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgdmFsdWUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGdldF93aXJlbGVzc19zdGF0ZShpbnQgKndsYW4sIGludCAqYmx1ZXRvb3RoKQorc3RhdGljIHZvaWQgY29tcGFsX3Jma2lsbF9wb2xsKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSkKIHsKIAl1OCByZXN1bHQ7CisJYm9vbCBod19ibG9ja2VkOwogCiAJZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7CiAKLQlpZiAod2xhbikgewotCQlpZiAoKHJlc3VsdCAmIEtJTExTV0lUQ0hfTUFTSykgPT0gMCkKLQkJCSp3bGFuID0gMDsKLQkJZWxzZQotCQkJKndsYW4gPSByZXN1bHQgJiBXTEFOX01BU0s7Ci0JfQorCWh3X2Jsb2NrZWQgPSAhKHJlc3VsdCAmIEtJTExTV0lUQ0hfTUFTSyk7CisJcmZraWxsX3NldF9od19zdGF0ZShyZmtpbGwsIGh3X2Jsb2NrZWQpOworfQogCi0JaWYgKGJsdWV0b290aCkgewotCQlpZiAoKHJlc3VsdCAmIEtJTExTV0lUQ0hfTUFTSykgPT0gMCkKLQkJCSpibHVldG9vdGggPSAwOwotCQllbHNlCi0JCQkqYmx1ZXRvb3RoID0gKHJlc3VsdCAmIEJUX01BU0spID4+IDE7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJma2lsbF9vcHMgY29tcGFsX3Jma2lsbF9vcHMgPSB7CisJLnBvbGwgPSBjb21wYWxfcmZraWxsX3BvbGwsCisJLnNldF9ibG9jayA9IGNvbXBhbF9yZmtpbGxfc2V0LAorfTsKKworc3RhdGljIGludCBzZXR1cF9yZmtpbGwodm9pZCkKK3sKKwlpbnQgcmV0OworCisJd2lmaV9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImNvbXBhbC13aWZpIiwgJmNvbXBhbF9kZXZpY2UtPmRldiwKKwkJCQlSRktJTExfVFlQRV9XTEFOLCAmY29tcGFsX3Jma2lsbF9vcHMsCisJCQkJKHZvaWQgKikgV0xBTl9NQVNLKTsKKwlpZiAoIXdpZmlfcmZraWxsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHJma2lsbF9yZWdpc3Rlcih3aWZpX3Jma2lsbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfd2lmaTsKKworCWJ0X3Jma2lsbCA9IHJma2lsbF9hbGxvYygiY29tcGFsLWJsdWV0b290aCIsICZjb21wYWxfZGV2aWNlLT5kZXYsCisJCQkJUkZLSUxMX1RZUEVfQkxVRVRPT1RILCAmY29tcGFsX3Jma2lsbF9vcHMsCisJCQkJKHZvaWQgKikgQlRfTUFTSyk7CisJaWYgKCFidF9yZmtpbGwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NhdGVfYnQ7CiAJfQorCXJldCA9IHJma2lsbF9yZWdpc3RlcihidF9yZmtpbGwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlZ2lzdGVyX2J0OwogCiAJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3Rlcl9idDoKKwlyZmtpbGxfZGVzdHJveShidF9yZmtpbGwpOworCitlcnJfYWxsb2NhdGVfYnQ6CisJcmZraWxsX3VucmVnaXN0ZXIod2lmaV9yZmtpbGwpOworCitlcnJfd2lmaToKKwlyZmtpbGxfZGVzdHJveSh3aWZpX3Jma2lsbCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBCYWNrbGlnaHQgZGV2aWNlIHN0dWZmICovCkBAIC0xNjksODYgKzE3NSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqY29tcGFsYmxfZGV2aWNlOwogCi0vKiBQbGF0Zm9ybSBkZXZpY2UgKi8KLQotc3RhdGljIHNzaXplX3Qgc2hvd193bGFuKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCWludCByZXQsIGVuYWJsZWQ7Ci0KLQlyZXQgPSBnZXRfd2lyZWxlc3Nfc3RhdGUoJmVuYWJsZWQsIE5VTEwpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGVuYWJsZWQpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQl1OCByZXN1bHQ7Ci0KLQllY19yZWFkKENPTVBBTF9FQ19DT01NQU5EX1dJUkVMRVNTLCAmcmVzdWx0KTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCByZXN1bHQpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2JsdWV0b290aChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0LCBlbmFibGVkOwotCi0JcmV0ID0gZ2V0X3dpcmVsZXNzX3N0YXRlKE5VTEwsICZlbmFibGVkKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBlbmFibGVkKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfd2xhbl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCBzdGF0ZSwgcmV0OwotCi0JaWYgKHNzY2FuZihidWYsICIlaSIsICZzdGF0ZSkgIT0gMSB8fCAoc3RhdGUgPCAwIHx8IHN0YXRlID4gMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gc2V0X3dsYW5fc3RhdGUoc3RhdGUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9ibHVldG9vdGhfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgc3RhdGUsIHJldDsKLQotCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmc3RhdGUpICE9IDEgfHwgKHN0YXRlIDwgMCB8fCBzdGF0ZSA+IDEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IHNldF9ibHVldG9vdGhfc3RhdGUoc3RhdGUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoYmx1ZXRvb3RoLCAwNjQ0LCBzaG93X2JsdWV0b290aCwgc3RvcmVfYmx1ZXRvb3RoX3N0YXRlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih3bGFuLCAwNjQ0LCBzaG93X3dsYW4sIHN0b3JlX3dsYW5fc3RhdGUpOwotc3RhdGljIERFVklDRV9BVFRSKHJhdywgMDQ0NCwgc2hvd19yYXcsIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY29tcGFsX2F0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfYmx1ZXRvb3RoLmF0dHIsCi0JJmRldl9hdHRyX3dsYW4uYXR0ciwKLQkmZGV2X2F0dHJfcmF3LmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgY29tcGFsX2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkuYXR0cnMgPSBjb21wYWxfYXR0cmlidXRlcwotfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29tcGFsX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewpAQCAtMjU3LDggKzE4Myw2IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbXBhbF9kZXZpY2U7Ci0KIC8qIEluaXRpYWxpemF0aW9uICovCiAKIHN0YXRpYyBpbnQgZG1pX2NoZWNrX2NiKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKQEAgLTMxMCw2ICsyMzQsNDcgQEAKIAkJfSwKIAkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCiAJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgOSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDkxMCIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEwMTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTB2IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gMTAxMSIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgSW5zcGlyb24gMTF6IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gMTExMCIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEyMTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwogCXsgfQogfTsKIApAQCAtMzQ4LDIzICszMTMsMjEgQEAKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoY29tcGFsX2RldmljZSk7CiAJaWYgKHJldCkKLQkJZ290byBmYWlsX3BsYXRmb3JtX2RldmljZTE7CisJCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2U7CiAKLQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNvbXBhbF9kZXZpY2UtPmRldi5rb2JqLAotCQkmY29tcGFsX2F0dHJpYnV0ZV9ncm91cCk7CisJcmV0ID0gc2V0dXBfcmZraWxsKCk7CiAJaWYgKHJldCkKLQkJZ290byBmYWlsX3BsYXRmb3JtX2RldmljZTI7CisJCWdvdG8gZmFpbF9yZmtpbGw7CiAKIAlwcmludGsoS0VSTl9JTkZPICJjb21wYWwtbGFwdG9wOiBkcml2ZXIgIkNPTVBBTF9EUklWRVJfVkVSU0lPTgogCQkiIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iKTsKIAogCXJldHVybiAwOwogCi1mYWlsX3BsYXRmb3JtX2RldmljZTI6Ci0KK2ZhaWxfcmZraWxsOgogCXBsYXRmb3JtX2RldmljZV9kZWwoY29tcGFsX2RldmljZSk7CiAKLWZhaWxfcGxhdGZvcm1fZGV2aWNlMToKK2ZhaWxfcGxhdGZvcm1fZGV2aWNlOgogCiAJcGxhdGZvcm1fZGV2aWNlX3B1dChjb21wYWxfZGV2aWNlKTsKIApAQCAtMzgyLDEwICszNDUsMTMgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjb21wYWxfY2xlYW51cCh2b2lkKQogewogCi0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjb21wYWxfZGV2aWNlLT5kZXYua29iaiwgJmNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXApOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGNvbXBhbF9kZXZpY2UpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjb21wYWxfZHJpdmVyKTsKIAliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY29tcGFsYmxfZGV2aWNlKTsKKwlyZmtpbGxfdW5yZWdpc3Rlcih3aWZpX3Jma2lsbCk7CisJcmZraWxsX2Rlc3Ryb3kod2lmaV9yZmtpbGwpOworCXJma2lsbF91bnJlZ2lzdGVyKGJ0X3Jma2lsbCk7CisJcmZraWxsX2Rlc3Ryb3koYnRfcmZraWxsKTsKIAogCXByaW50ayhLRVJOX0lORk8gImNvbXBhbC1sYXB0b3A6IGRyaXZlciB1bmxvYWRlZC5cbiIpOwogfQpAQCAtNDAzLDMgKzM2OSw4IEBACiBNT0RVTEVfQUxJQVMoImRtaToqOnJuSUZMOTE6cnZySUZUMDA6KiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6KjpybkpGTDkyOnJ2cklGVDAwOioiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6cm5JRlQwMDpydnJJRlQwMDoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bkRlbGxJbmMuOnBuSW5zcGlyb245MTA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uMTAxMDoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bkRlbGxJbmMuOnBuSW5zcGlyb24xMDExOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjExMTA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uMTIxMDoqIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwppbmRleCAzNzgwOTk0Li5iN2Y0ZDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pODA0Mi5oPgogI2luY2x1ZGUgIi4uLy4uL2Zpcm13YXJlL2RjZGJhcy5oIgogCiAjZGVmaW5lIEJSSUdIVE5FU1NfVE9LRU4gMHg3ZApAQCAtNzksOSArODEsNzMgQEAKIAkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiOCIpLAogCQl9LAogCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBDb21wdXRlciBDb3Jwb3JhdGlvbiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBDb21wdXRlciBDb3Jwb3JhdGlvbiIpLAorCQkJRE1JX01BVENIKERNSV9DSEFTU0lTX1RZUEUsICI4IiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIGRlbGxfYmxhY2tsaXN0W10gPSB7CisJLyogU3VwcG9ydGVkIGJ5IGNvbXBhbC1sYXB0b3AgKi8KKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgOSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDkxMCIpLAorCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDEwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gMTAxMCIpLAorCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDEwdiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEwMTEiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgSW5zcGlyb24gMTF6IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gMTExMCIpLAorCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDEyIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gMTIxMCIpLAorCQl9LAorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyICpidWZmZXI7CitzdHJ1Y3QgcGFnZSAqYnVmZmVycGFnZTsKK0RFRklORV9NVVRFWChidWZmZXJfbXV0ZXgpOworCitzdGF0aWMgaW50IGh3c3dpdGNoX3N0YXRlOworCitzdGF0aWMgdm9pZCBnZXRfYnVmZmVyKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2J1ZmZlcih2b2lkKQoreworCW11dGV4X3VubG9jaygmYnVmZmVyX211dGV4KTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX2RhX3RhYmxlKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKIHsKIAkvKiBGaW5hbCB0b2tlbiBpcyBhIHRlcm1pbmF0b3IsIHNvIHdlIGRvbid0IHdhbnQgdG8gY29weSBpdCAqLwpAQCAtMTYwLDYgKzIyNiw4IEBACiAvKiBEZXJpdmVkIGZyb20gaW5mb3JtYXRpb24gaW4gRGVsbFdpcmVsZXNzQ3RsLmNwcDoKICAgIENsYXNzIDE3LCBzZWxlY3QgMTEgaXMgcmFkaW8gY29udHJvbC4gSXQgcmV0dXJucyBhbiBhcnJheSBvZiAzMi1iaXQgdmFsdWVzLgogCisgICBJbnB1dCBieXRlIDAgPSAwOiBXaXJlbGVzcyBpbmZvcm1hdGlvbgorCiAgICByZXN1bHRbMF06IHJldHVybiBjb2RlCiAgICByZXN1bHRbMV06CiAgICAgIEJpdCAwOiAgICAgIEhhcmR3YXJlIHN3aXRjaCBzdXBwb3J0ZWQKQEAgLTE4MCwzMyArMjQ4LDYyIEBACiAgICAgIEJpdHMgMjAtMzE6IFJlc2VydmVkCiAgICByZXN1bHRbMl06IE5WUkFNIHNpemUgaW4gYnl0ZXMKICAgIHJlc3VsdFszXTogTlZSQU0gZm9ybWF0IHZlcnNpb24gbnVtYmVyCisKKyAgIElucHV0IGJ5dGUgMCA9IDI6IFdpcmVsZXNzIHN3aXRjaCBjb25maWd1cmF0aW9uCisgICByZXN1bHRbMF06IHJldHVybiBjb2RlCisgICByZXN1bHRbMV06CisgICAgIEJpdCAwOiAgICAgIFdpZmkgY29udHJvbGxlZCBieSBzd2l0Y2gKKyAgICAgQml0IDE6ICAgICAgQmx1ZXRvb3RoIGNvbnRyb2xsZWQgYnkgc3dpdGNoCisgICAgIEJpdCAyOiAgICAgIFdXQU4gY29udHJvbGxlZCBieSBzd2l0Y2gKKyAgICAgQml0cyAzLTY6ICAgUmVzZXJ2ZWQKKyAgICAgQml0IDc6ICAgICAgV2lyZWxlc3Mgc3dpdGNoIGNvbmZpZyBsb2NrZWQKKyAgICAgQml0IDg6ICAgICAgV2lmaSBsb2NhdG9yIGVuYWJsZWQKKyAgICAgQml0cyA5LTE0OiAgUmVzZXJ2ZWQKKyAgICAgQml0IDE1OiAgICAgV2lmaSBsb2NhdG9yIHNldHRpbmcgbG9ja2VkCisgICAgIEJpdHMgMTYtMzE6IFJlc2VydmVkCiAqLwogCiBzdGF0aWMgaW50IGRlbGxfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CiAJaW50IGRpc2FibGUgPSBibG9ja2VkID8gMSA6IDA7CiAJdW5zaWduZWQgbG9uZyByYWRpbyA9ICh1bnNpZ25lZCBsb25nKWRhdGE7CisJaW50IGh3c3dpdGNoX2JpdCA9ICh1bnNpZ25lZCBsb25nKWRhdGEgLSAxOworCWludCByZXQgPSAwOwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JYnVmZmVyLmlucHV0WzBdID0gKDEgfCAocmFkaW88PDgpIHwgKGRpc2FibGUgPDwgMTYpKTsKLQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxNywgMTEpOworCWdldF9idWZmZXIoKTsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CiAKLQlyZXR1cm4gMDsKKwkvKiBJZiB0aGUgaGFyZHdhcmUgc3dpdGNoIGNvbnRyb2xzIHRoaXMgcmFkaW8sIGFuZCB0aGUgaGFyZHdhcmUKKwkgICBzd2l0Y2ggaXMgZGlzYWJsZWQsIGRvbid0IGFsbG93IGNoYW5naW5nIHRoZSBzb2Z0d2FyZSBzdGF0ZSAqLworCWlmICgoaHdzd2l0Y2hfc3RhdGUgJiBCSVQoaHdzd2l0Y2hfYml0KSkgJiYKKwkgICAgIShidWZmZXItPm91dHB1dFsxXSAmIEJJVCgxNikpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZmZlci0+aW5wdXRbMF0gPSAoMSB8IChyYWRpbzw8OCkgfCAoZGlzYWJsZSA8PCAxNikpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKworb3V0OgorCXJlbGVhc2VfYnVmZmVyKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZGVsbF9yZmtpbGxfcXVlcnkoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOwogCWludCBzdGF0dXM7CiAJaW50IGJpdCA9ICh1bnNpZ25lZCBsb25nKWRhdGEgKyAxNjsKKwlpbnQgaHdzd2l0Y2hfYml0ID0gKHVuc2lnbmVkIGxvbmcpZGF0YSAtIDE7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxNywgMTEpOwotCXN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07CisJZ2V0X2J1ZmZlcigpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKwlzdGF0dXMgPSBidWZmZXItPm91dHB1dFsxXTsKKwlyZWxlYXNlX2J1ZmZlcigpOwogCiAJcmZraWxsX3NldF9zd19zdGF0ZShyZmtpbGwsICEhKHN0YXR1cyAmIEJJVChiaXQpKSk7Ci0JcmZraWxsX3NldF9od19zdGF0ZShyZmtpbGwsICEoc3RhdHVzICYgQklUKDE2KSkpOworCisJaWYgKGh3c3dpdGNoX3N0YXRlICYgKEJJVChod3N3aXRjaF9iaXQpKSkKKwkJcmZraWxsX3NldF9od19zdGF0ZShyZmtpbGwsICEoc3RhdHVzICYgQklUKDE2KSkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJma2lsbF9vcHMgZGVsbF9yZmtpbGxfb3BzID0gewpAQCAtMjE0LDE1ICszMTEsMzYgQEAKIAkucXVlcnkgPSBkZWxsX3Jma2lsbF9xdWVyeSwKIH07CiAKK3N0YXRpYyB2b2lkIGRlbGxfdXBkYXRlX3Jma2lsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCit7CisJaWYgKHdpZmlfcmZraWxsKQorCQlkZWxsX3Jma2lsbF9xdWVyeSh3aWZpX3Jma2lsbCwgKHZvaWQgKikxKTsKKwlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKKwkJZGVsbF9yZmtpbGxfcXVlcnkoYmx1ZXRvb3RoX3Jma2lsbCwgKHZvaWQgKikyKTsKKwlpZiAod3dhbl9yZmtpbGwpCisJCWRlbGxfcmZraWxsX3F1ZXJ5KHd3YW5fcmZraWxsLCAodm9pZCAqKTMpOworfQorc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGRlbGxfcmZraWxsX3dvcmssIGRlbGxfdXBkYXRlX3Jma2lsbCk7CisKKwogc3RhdGljIGludCBfX2luaXQgZGVsbF9zZXR1cF9yZmtpbGwodm9pZCkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKIAlpbnQgc3RhdHVzOwogCWludCByZXQ7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxNywgMTEpOwotCXN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07CisJaWYgKGRtaV9jaGVja19zeXN0ZW0oZGVsbF9ibGFja2xpc3QpKSB7CisJCXByaW50ayhLRVJOX0lORk8gImRlbGwtbGFwdG9wOiBCbGFja2xpc3RlZCBoYXJkd2FyZSBkZXRlY3RlZCAtICIKKwkJCQkibm90IGVuYWJsaW5nIHJma2lsbFxuIik7CisJCXJldHVybiAwOworCX0KKworCWdldF9idWZmZXIoKTsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CisJc3RhdHVzID0gYnVmZmVyLT5vdXRwdXRbMV07CisJYnVmZmVyLT5pbnB1dFswXSA9IDB4MjsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CisJaHdzd2l0Y2hfc3RhdGUgPSBidWZmZXItPm91dHB1dFsxXTsKKwlyZWxlYXNlX2J1ZmZlcigpOwogCiAJaWYgKChzdGF0dXMgJiAoMTw8MnwxPDw4KSkgPT0gKDE8PDJ8MTw8OCkpIHsKIAkJd2lmaV9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImRlbGwtd2lmaSIsICZwbGF0Zm9ybV9kZXZpY2UtPmRldiwKQEAgLTI5OCwzOSArNDE2LDQ5IEBACiAKIHN0YXRpYyBpbnQgZGVsbF9zZW5kX2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CisJaW50IHJldCA9IDA7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlidWZmZXIuaW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOwotCWJ1ZmZlci5pbnB1dFsxXSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOworCWdldF9idWZmZXIoKTsKKwlidWZmZXItPmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKKwlidWZmZXItPmlucHV0WzFdID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CiAKLQlpZiAoYnVmZmVyLmlucHV0WzBdID09IC0xKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoYnVmZmVyLT5pbnB1dFswXSA9PSAtMSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAocG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCgpID4gMCkKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMSwgMik7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMSwgMik7CiAJZWxzZQotCQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxLCAxKTsKKwkJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxLCAxKTsKIAorb3V0OgorCXJlbGVhc2VfYnVmZmVyKCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZGVsbF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKKwlpbnQgcmV0ID0gMDsKIAotCW1lbXNldCgmYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOwotCWJ1ZmZlci5pbnB1dFswXSA9IGZpbmRfdG9rZW5fbG9jYXRpb24oQlJJR0hUTkVTU19UT0tFTik7CisJZ2V0X2J1ZmZlcigpOworCWJ1ZmZlci0+aW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOwogCi0JaWYgKGJ1ZmZlci5pbnB1dFswXSA9PSAtMSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGJ1ZmZlci0+aW5wdXRbMF0gPT0gLTEpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQoKSA+IDApCi0JCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDAsIDIpOworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDAsIDIpOwogCWVsc2UKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMCwgMSk7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMCwgMSk7CiAKLQlyZXR1cm4gYnVmZmVyLm91dHB1dFsxXTsKK291dDoKKwlyZWxlYXNlX2J1ZmZlcigpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGJ1ZmZlci0+b3V0cHV0WzFdOwogfQogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgZGVsbF9vcHMgPSB7CkBAIC0zMzgsOSArNDY2LDMyIEBACiAJLnVwZGF0ZV9zdGF0dXMgID0gZGVsbF9zZW5kX2ludGVuc2l0eSwKIH07CiAKK2Jvb2wgZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgY2hhciBzdHIsCisJCQkgICAgICBzdHJ1Y3Qgc2VyaW8gKnBvcnQpCit7CisJc3RhdGljIGJvb2wgZXh0ZW5kZWQ7CisKKwlpZiAoc3RyICYgMHgyMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHVubGlrZWx5KGRhdGEgPT0gMHhlMCkpIHsKKwkJZXh0ZW5kZWQgPSB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmICh1bmxpa2VseShleHRlbmRlZCkpIHsKKwkJc3dpdGNoIChkYXRhKSB7CisJCWNhc2UgMHg4OgorCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZWxsX3Jma2lsbF93b3JrLAorCQkJCQkgICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKSk7CisJCQlicmVhazsKKwkJfQorCQlleHRlbmRlZCA9IGZhbHNlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGludCBfX2luaXQgZGVsbF9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CiAJaW50IG1heF9pbnRlbnNpdHkgPSAwOwogCWludCByZXQ7CiAKQEAgLTM2Niw2ICs1MTcsMTcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjsKIAorCS8qCisJICogQWxsb2NhdGUgYnVmZmVyIGJlbG93IDRHQiBmb3IgU01JIGRhdGEtLW9ubHkgMzItYml0IHBoeXNpY2FsIGFkZHIKKwkgKiBpcyBwYXNzZWQgdG8gU01JIGhhbmRsZXIuCisJICovCisJYnVmZmVycGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMik7CisKKwlpZiAoIWJ1ZmZlcnBhZ2UpCisJCWdvdG8gZmFpbF9idWZmZXI7CisJYnVmZmVyID0gcGFnZV9hZGRyZXNzKGJ1ZmZlcnBhZ2UpOworCW11dGV4X2luaXQoJmJ1ZmZlcl9tdXRleCk7CisKIAlyZXQgPSBkZWxsX3NldHVwX3Jma2lsbCgpOwogCiAJaWYgKHJldCkgewpAQCAtMzczLDYgKzUzNSwxMyBAQAogCQlnb3RvIGZhaWxfcmZraWxsOwogCX0KIAorCXJldCA9IGk4MDQyX2luc3RhbGxfZmlsdGVyKGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiZGVsbC1sYXB0b3A6IFVuYWJsZSB0byBpbnN0YWxsIGtleSBmaWx0ZXJcbiIpOworCQlnb3RvIGZhaWxfZmlsdGVyOworCX0KKwogI2lmZGVmIENPTkZJR19BQ1BJCiAJLyogSW4gdGhlIGV2ZW50IG9mIGFuIEFDUEkgYmFja2xpZ2h0IGJlaW5nIGF2YWlsYWJsZSwgZG9uJ3QKIAkgKiByZWdpc3RlciB0aGUgcGxhdGZvcm0gY29udHJvbGxlci4KQEAgLTM4MSwxMyArNTUwLDEzIEBACiAJCXJldHVybiAwOwogI2VuZGlmCiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlidWZmZXIuaW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOwotCi0JaWYgKGJ1ZmZlci5pbnB1dFswXSAhPSAtMSkgewotCQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAwLCAyKTsKLQkJbWF4X2ludGVuc2l0eSA9IGJ1ZmZlci5vdXRwdXRbM107CisJZ2V0X2J1ZmZlcigpOworCWJ1ZmZlci0+aW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOworCWlmIChidWZmZXItPmlucHV0WzBdICE9IC0xKSB7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMCwgMik7CisJCW1heF9pbnRlbnNpdHkgPSBidWZmZXItPm91dHB1dFszXTsKIAl9CisJcmVsZWFzZV9idWZmZXIoKTsKIAogCWlmIChtYXhfaW50ZW5zaXR5KSB7CiAJCWRlbGxfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoCkBAIC00MTAsOCArNTc5LDEyIEBACiAJcmV0dXJuIDA7CiAKIGZhaWxfYmFja2xpZ2h0OgorCWk4MDQyX3JlbW92ZV9maWx0ZXIoZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKTsKK2ZhaWxfZmlsdGVyOgogCWRlbGxfY2xlYW51cF9yZmtpbGwoKTsKIGZhaWxfcmZraWxsOgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXJwYWdlKTsKK2ZhaWxfYnVmZmVyOgogCXBsYXRmb3JtX2RldmljZV9kZWwocGxhdGZvcm1fZGV2aWNlKTsKIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjoKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBsYXRmb3JtX2RldmljZSk7CkBAIC00MjQsOCArNTk3LDE2IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkZWxsX2V4aXQodm9pZCkKIHsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRlbGxfcmZraWxsX3dvcmspOworCWk4MDQyX3JlbW92ZV9maWx0ZXIoZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKTsKIAliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZGVsbF9iYWNrbGlnaHRfZGV2aWNlKTsKIAlkZWxsX2NsZWFudXBfcmZraWxsKCk7CisJaWYgKHBsYXRmb3JtX2RldmljZSkgeworCQlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBsYXRmb3JtX2RldmljZSk7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworCX0KKwlrZnJlZShkYV90b2tlbnMpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXIpOwogfQogCiBtb2R1bGVfaW5pdChkZWxsX2luaXQpOwpAQCAtNDM1LDMgKzYxNiw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRlbGwgbGFwdG9wIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJkbWk6KnN2bkRlbGxJbmMuOio6Y3Q4OioiKTsKK01PRFVMRV9BTElBUygiZG1pOipzdm5EZWxsQ29tcHV0ZXJDb3Jwb3JhdGlvbi46KjpjdDg6KiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwppbmRleCBhZDRjNDE0ZC4uM2FhNTdkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKQEAgLTg5LDYgKzg5LDcgQEAKIAl7S0VfS0VZLCAweDIwZTYsIEtFWV9QUk9HMX0sCiAJe0tFX0tFWSwgMHgyMTQyLCBLRVlfTUVESUF9LAogCXtLRV9LRVksIDB4MjEzYiwgS0VZX0lORk99LAorCXtLRV9LRVksIDB4MjE2OSwgS0VZX0RJUkVDVElPTn0sCiAJe0tFX0tFWSwgMHgyMzFiLCBLRVlfSEVMUH0sCiAJe0tFX0VORCwgMH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZTY3ZTRmZS4uZWI2MDNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtNTc3MSw3ICs1NzcxLDcgQEAKIAljYXNlIFRQQUNQSV9USEVSTUFMX0FDUElfVE1QMDc6CiAJY2FzZSBUUEFDUElfVEhFUk1BTF9BQ1BJX1VQRFQ6CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmdHBhY3BpX3NlbnNvcnNfcGRldi0+ZGV2LmtvYmosCi0JCQkJICAgJnRoZXJtYWxfdGVtcF9pbnB1dDE2X2dyb3VwKTsKKwkJCQkgICAmdGhlcm1hbF90ZW1wX2lucHV0OF9ncm91cCk7CiAJCWJyZWFrOwogCWNhc2UgVFBBQ1BJX1RIRVJNQUxfTk9ORToKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCA3N2JmNWQ4Li4yNmMyMTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC02Miw5ICs2MywxMCBAQAogCiAvKiBUb3NoaWJhIEFDUEkgbWV0aG9kIHBhdGhzICovCiAjZGVmaW5lIE1FVEhPRF9MQ0RfQlJJR0hUTkVTUwkiXFxfU0JfLlBDSTAuVkdBXy5MQ0RfLl9CQ00iCi0jZGVmaW5lIE1FVEhPRF9IQ0lfMQkJIlxcX1NCXy5WQUxELkdIQ0kiCi0jZGVmaW5lIE1FVEhPRF9IQ0lfMgkJIlxcX1NCXy5WQUxaLkdIQ0kiCisjZGVmaW5lIFRPU0hfSU5URVJGQUNFXzEJIlxcX1NCXy5WQUxEIgorI2RlZmluZSBUT1NIX0lOVEVSRkFDRV8yCSJcXF9TQl8uVkFMWiIKICNkZWZpbmUgTUVUSE9EX1ZJREVPX09VVAkiXFxfU0JfLlZBTFguRFNTWCIKKyNkZWZpbmUgR0hDSV9NRVRIT0QJCSIuR0hDSSIKIAogLyogVG9zaGliYSBIQ0kgaW50ZXJmYWNlIGRlZmluaXRpb25zCiAgKgpAQCAtMTE2LDYgKzExOCwzNiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgdG9zaGliYV9kZXZpY2VfaWRzKTsKIAorc3RydWN0IGtleV9lbnRyeSB7CisJY2hhciB0eXBlOworCXUxNiBjb2RlOworCXUxNiBrZXljb2RlOworfTsKKworZW51bSB7S0VfS0VZLCBLRV9FTkR9OworCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSB0b3NoaWJhX2FjcGlfa2V5bWFwW10gID0geworCXtLRV9LRVksIDB4MTAxLCBLRVlfTVVURX0sCisJe0tFX0tFWSwgMHgxM2IsIEtFWV9DT0ZGRUV9LAorCXtLRV9LRVksIDB4MTNjLCBLRVlfQkFUVEVSWX0sCisJe0tFX0tFWSwgMHgxM2QsIEtFWV9TTEVFUH0sCisJe0tFX0tFWSwgMHgxM2UsIEtFWV9TVVNQRU5EfSwKKwl7S0VfS0VZLCAweDEzZiwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCisJe0tFX0tFWSwgMHgxNDAsIEtFWV9CUklHSFRORVNTRE9XTn0sCisJe0tFX0tFWSwgMHgxNDEsIEtFWV9CUklHSFRORVNTVVB9LAorCXtLRV9LRVksIDB4MTQyLCBLRVlfV0xBTn0sCisJe0tFX0tFWSwgMHgxNDMsIEtFWV9QUk9HMX0sCisJe0tFX0tFWSwgMHhiMDUsIEtFWV9QUk9HMn0sCisJe0tFX0tFWSwgMHhiMDYsIEtFWV9XV1d9LAorCXtLRV9LRVksIDB4YjA3LCBLRVlfTUFJTH0sCisJe0tFX0tFWSwgMHhiMzAsIEtFWV9TVE9QfSwKKwl7S0VfS0VZLCAweGIzMSwgS0VZX1BSRVZJT1VTU09OR30sCisJe0tFX0tFWSwgMHhiMzIsIEtFWV9ORVhUU09OR30sCisJe0tFX0tFWSwgMHhiMzMsIEtFWV9QTEFZUEFVU0V9LAorCXtLRV9LRVksIDB4YjVhLCBLRVlfTUVESUF9LAorCXtLRV9FTkQsIDAsIDB9LAorfTsKKwogLyogdXRpbGl0eQogICovCiAKQEAgLTI1MSw2ICsyODMsOCBAQAogc3RydWN0IHRvc2hpYmFfYWNwaV9kZXYgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCByZmtpbGwgKmJ0X3JmazsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpob3RrZXlfZGV2OworCWFjcGlfaGFuZGxlIGhhbmRsZTsKIAogCWNvbnN0IGNoYXIgKmJ0X25hbWU7CiAKQEAgLTcxMSw4ICs3NDUsMTU5IEBACiAgICAgICAgIC51cGRhdGVfc3RhdHVzICA9IHNldF9sY2Rfc3RhdHVzLAogfTsKIAorc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKnRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUoaW50IGNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJZm9yIChrZXkgPSB0b3NoaWJhX2FjcGlfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKKwkJaWYgKGNvZGUgPT0ga2V5LT5jb2RlKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9rZXljb2RlKGludCBjb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gdG9zaGliYV9hY3BpX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspCisJCWlmIChjb2RlID09IGtleS0+a2V5Y29kZSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfYWNwaV9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLAorCQkJCSAgIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKKworCWlmIChrZXkgJiYga2V5LT50eXBlID09IEtFX0tFWSkgeworCQkqa2V5Y29kZSA9IGtleS0+a2V5Y29kZTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV9hY3BpX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsCisJCQkJICAgaW50IGtleWNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCWludCBvbGRfa2V5Y29kZTsKKworCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKKwlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKKwkJb2xkX2tleWNvZGUgPSBrZXktPmtleWNvZGU7CisJCWtleS0+a2V5Y29kZSA9IGtleWNvZGU7CisJCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlpZiAoIXRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfa2V5Y29kZShvbGRfa2V5Y29kZSkpCisJCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hpYmFfYWNwaV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmNvbnRleHQpCit7CisJdTMyIGhjaV9yZXN1bHQsIHZhbHVlOworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWlmIChldmVudCAhPSAweDgwKQorCQlyZXR1cm47CisJZG8geworCQloY2lfcmVhZDEoSENJX1NZU1RFTV9FVkVOVCwgJnZhbHVlLCAmaGNpX3Jlc3VsdCk7CisJCWlmIChoY2lfcmVzdWx0ID09IEhDSV9TVUNDRVNTKSB7CisJCQlpZiAodmFsdWUgPT0gMHgxMDApCisJCQkJY29udGludWU7CisJCQllbHNlIGlmICh2YWx1ZSAmIDB4ODApIHsKKwkJCQlrZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlCisJCQkJCSh2YWx1ZSAmIH4weDgwKTsKKwkJCQlpZiAoIWtleSkgeworCQkJCQlwcmludGsoTVlfSU5GTyAiVW5rbm93biBrZXkgJXhcbiIsCisJCQkJCSAgICAgICB2YWx1ZSAmIH4weDgwKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlucHV0X3JlcG9ydF9rZXkodG9zaGliYV9hY3BpLmhvdGtleV9kZXYsCisJCQkJCQkga2V5LT5rZXljb2RlLCAxKTsKKwkJCQlpbnB1dF9zeW5jKHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2KTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LAorCQkJCQkJIGtleS0+a2V5Y29kZSwgMCk7CisJCQkJaW5wdXRfc3luYyh0b3NoaWJhX2FjcGkuaG90a2V5X2Rldik7CisJCQl9CisJCX0gZWxzZSBpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfTk9UX1NVUFBPUlRFRCkgeworCQkJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGFuIHVucmVzb2x2ZWQgaXNzdWUgb24KKwkJCSAqIHNvbWUgbWFjaGluZXMgd2hlcmUgc3lzdGVtIGV2ZW50cyBzcG9yYWRpY2FsbHkKKwkJCSAqIGJlY29tZSBkaXNhYmxlZC4gKi8KKwkJCWhjaV93cml0ZTEoSENJX1NZU1RFTV9FVkVOVCwgMSwgJmhjaV9yZXN1bHQpOworCQkJcHJpbnRrKE1ZX05PVElDRSAiUmUtZW5hYmxlZCBob3RrZXlzXG4iKTsKKwkJfQorCX0gd2hpbGUgKGhjaV9yZXN1bHQgIT0gSENJX0VNUFRZKTsKK30KKworc3RhdGljIGludCB0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoY2hhciAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IHJlc3VsdDsKKwljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgZGV2aWNlLCAmaGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byBnZXQgbm90aWZpY2F0aW9uIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRvc2hpYmFfYWNwaS5oYW5kbGUgPSBoYW5kbGU7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJFTkFCIiwgTlVMTCwgTlVMTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gZW5hYmxlIGhvdGtleXNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoaGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgICAgIHRvc2hpYmFfYWNwaV9ub3RpZnksIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGluc3RhbGwgaG90a2V5IG5vdGlmaWNhdGlvblxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF0b3NoaWJhX2FjcGkuaG90a2V5X2RldikgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5uYW1lID0gIlRvc2hpYmEgaW5wdXQgZGV2aWNlIjsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+cGh5cyA9IGRldmljZTsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5nZXRrZXljb2RlID0gdG9zaGliYV9hY3BpX2dldGtleWNvZGU7CisJdG9zaGliYV9hY3BpLmhvdGtleV9kZXYtPnNldGtleWNvZGUgPSB0b3NoaWJhX2FjcGlfc2V0a2V5Y29kZTsKKworCWZvciAoa2V5ID0gdG9zaGliYV9hY3BpX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspIHsKKwkJc2V0X2JpdChFVl9LRVksIHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5ldmJpdCk7CisJCXNldF9iaXQoa2V5LT5rZXljb2RlLCB0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+a2V5Yml0KTsKKwl9CisKKwlyZXN1bHQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB0b3NoaWJhX2FjcGlfZXhpdCh2b2lkKQogeworCWlmICh0b3NoaWJhX2FjcGkuaG90a2V5X2RldikKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCiAJaWYgKHRvc2hpYmFfYWNwaS5idF9yZmspIHsKIAkJcmZraWxsX3VucmVnaXN0ZXIodG9zaGliYV9hY3BpLmJ0X3Jmayk7CiAJCXJma2lsbF9kZXN0cm95KHRvc2hpYmFfYWNwaS5idF9yZmspOwpAQCAtNzI2LDYgKzkxMSw5IEBACiAJaWYgKHRvc2hpYmFfcHJvY19kaXIpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfVE9TSElCQSwgYWNwaV9yb290X2Rpcik7CiAKKwlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcih0b3NoaWJhX2FjcGkuaGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJICAgdG9zaGliYV9hY3BpX25vdGlmeSk7CisKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b3NoaWJhX2FjcGkucF9kZXYpOwogCiAJcmV0dXJuOwpAQCAtNzQyLDExICs5MzAsMTUgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBzaW1wbGUgZGV2aWNlIGRldGVjdGlvbjogbG9vayBmb3IgSENJIG1ldGhvZCAqLwotCWlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8xKSkKLQkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMTsKLQllbHNlIGlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8yKSkKLQkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMjsKLQllbHNlCisJaWYgKGlzX3ZhbGlkX2FjcGlfcGF0aChUT1NIX0lOVEVSRkFDRV8xIEdIQ0lfTUVUSE9EKSkgeworCQltZXRob2RfaGNpID0gVE9TSF9JTlRFUkZBQ0VfMSBHSENJX01FVEhPRDsKKwkJaWYgKHRvc2hpYmFfYWNwaV9zZXR1cF9rZXlib2FyZChUT1NIX0lOVEVSRkFDRV8xKSkKKwkJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gYWN0aXZhdGUgaG90a2V5c1xuIik7CisJfSBlbHNlIGlmIChpc192YWxpZF9hY3BpX3BhdGgoVE9TSF9JTlRFUkZBQ0VfMiBHSENJX01FVEhPRCkpIHsKKwkJbWV0aG9kX2hjaSA9IFRPU0hfSU5URVJGQUNFXzIgR0hDSV9NRVRIT0Q7CisJCWlmICh0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoVE9TSF9JTlRFUkZBQ0VfMikpCisJCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGFjdGl2YXRlIGhvdGtleXNcbiIpOworCX0gZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByaW50ayhNWV9JTkZPICJUb3NoaWJhIExhcHRvcCBBQ1BJIEV4dHJhcyB2ZXJzaW9uICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jCmluZGV4IGZhMzllNzUuLjZlYTNjYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMKQEAgLTE3NSw4ICsxNzUsMTQgQEAKIAkJZGV2X2VycigmZGV2LT5kZXYsICJEbyBub3QgcGFzcyBwbGF0Zm9ybV9kYXRhIHRocm91Z2ggIgogCQkJIndtOTd4eF9iYXRfc2V0X3BkYXRhIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlwZGF0YSA9IHdtZGF0YS0+YmF0dF9wZGF0YTsKKwl9CisKKwlpZiAoIXdtZGF0YSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwZGF0YSA9IHdtZGF0YS0+YmF0dF9wZGF0YTsKIAogCWlmIChkZXYtPmlkICE9IC0xKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3BzM2F2LmMgYi9kcml2ZXJzL3BzMy9wczNhdi5jCmluZGV4IGU4MmQ4YzkuLjk1YTY4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3BzM2F2LmMKKysrIGIvZHJpdmVycy9wczMvcHMzYXYuYwpAQCAtNTMyLDcgKzUzMiw3IEBACiAJcmVzID0gcHMzYXZfY21kX2F2Yl9wYXJhbSgmYXZiX3BhcmFtLCBsZW4pOwogCWlmIChyZXMgPT0gUFMzQVZfU1RBVFVTX05PX1NZTkNfSEVBRCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBDb21tYW5kIGZhaWxlZC4gUGxlYXNlIHRyeSB5b3VyIHJlcXVlc3QgYWdhaW4uIFxuIiwKKwkJICAgICAgICIlczogQ29tbWFuZCBmYWlsZWQuIFBsZWFzZSB0cnkgeW91ciByZXF1ZXN0IGFnYWluLlxuIiwKIAkJICAgICAgIF9fZnVuY19fKTsKIAllbHNlIGlmIChyZXMpCiAJCWRldl9kYmcoJnBzM2F2LT5kZXYtPmNvcmUsICJwczNhdl9jbWRfYXZiX3BhcmFtIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggNjg2ZWYyNy4uYjYwYTRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiBzdGF0aWMgdm9pZCBwcmludF9jb25zdHJhaW50cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMgPSByZGV2LT5jb25zdHJhaW50czsKLQljaGFyIGJ1Zls4MF07CisJY2hhciBidWZbODBdID0gIiI7CiAJaW50IGNvdW50ID0gMDsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCmluZGV4IDc2ZDA4YzIuLjRmMzNhMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJaWYgKHZvbF9tYXBbdmFsXSA+PSBtaW5fdm9sKQogCQkJYnJlYWs7CiAKLQlpZiAodm9sX21hcFt2YWxdID4gbWF4X3ZvbCkKKwlpZiAodmFsID4gTERPX1ZPTF9NQVhfSURYIHx8IHZvbF9tYXBbdmFsXSA+IG1heF92b2wpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIGxwMzk3MV9zZXRfYml0cyhscDM5NzEsIExQMzk3MV9MRE9fVk9MX0NPTlRSX1JFRyhsZG8pLApAQCAtMjcyLDcgKzI3Miw3IEBACiAJCWlmICh2b2xfbWFwW3ZhbF0gPj0gbWluX3ZvbCkKIAkJCWJyZWFrOwogCi0JaWYgKHZvbF9tYXBbdmFsXSA+IG1heF92b2wpCisJaWYgKHZhbCA+IEJVQ0tfVEFSR0VUX1ZPTF9NQVhfSURYIHx8IHZvbF9tYXBbdmFsXSA+IG1heF92b2wpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gbHAzOTcxX3NldF9iaXRzKGxwMzk3MSwgTFAzOTcxX0JVQ0tfVEFSR0VUX1ZPTDFfUkVHKGJ1Y2spLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCmluZGV4IDFiYmZmMDkuLmU3Yjg5ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKQEAgLTE1MDQsNyArMTUwNCw4IEBACiAJbGVkLT5pc2lua19pbml0LmNvbnN1bWVyX3N1cHBsaWVzID0gJmxlZC0+aXNpbmtfY29uc3VtZXI7CiAJbGVkLT5pc2lua19pbml0LmNvbnN0cmFpbnRzLm1pbl91QSA9IDA7CiAJbGVkLT5pc2lua19pbml0LmNvbnN0cmFpbnRzLm1heF91QSA9IHBkYXRhLT5tYXhfdUE7Ci0JbGVkLT5pc2lua19pbml0LmNvbnN0cmFpbnRzLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5UOworCWxlZC0+aXNpbmtfaW5pdC5jb25zdHJhaW50cy52YWxpZF9vcHNfbWFzaworCQk9IFJFR1VMQVRPUl9DSEFOR0VfQ1VSUkVOVCB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTOwogCWxlZC0+aXNpbmtfaW5pdC5jb25zdHJhaW50cy52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMOwogCXJldCA9IHdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLCBpc2luaywgJmxlZC0+aXNpbmtfaW5pdCk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0xNTE3LDYgKzE1MTgsNyBAQAogCWxlZC0+ZGNkY19pbml0Lm51bV9jb25zdW1lcl9zdXBwbGllcyA9IDE7CiAJbGVkLT5kY2RjX2luaXQuY29uc3VtZXJfc3VwcGxpZXMgPSAmbGVkLT5kY2RjX2NvbnN1bWVyOwogCWxlZC0+ZGNkY19pbml0LmNvbnN0cmFpbnRzLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CisJbGVkLT5kY2RjX2luaXQuY29uc3RyYWludHMudmFsaWRfb3BzX21hc2sgPSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVM7CiAJcmV0ID0gd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIGRjZGMsICZsZWQtPmRjZGNfaW5pdCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCA4MTY3ZTllLi4yYmI4YThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTg2OCw0ICs4NjgsMTQgQEAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNQzEzNzgzIFBNSUMgUlRDCiAKK2NvbmZpZyBSVENfRFJWX01QQzUxMjEKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1QQzUxMjEgYnVpbHQtaW4gUlRDIgorCWRlcGVuZHMgb24gUFBDX01QQzUxMnggJiYgUlRDX0NMQVNTCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBidWlsdC1pbiBSVEMgTVBDNTEyMS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtbXBjNTEyMS4KKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggZTUxNjBmZC4uYjcxNDhhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTU1LDYgKzU1LDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDIpCSs9IHJ0Yy1tYXg2OTAyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01DMTM3ODMpCSs9IHJ0Yy1tYzEzNzgzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01TTTYyNDIpCSs9IHJ0Yy1tc202MjQyLm8KK29iai0kKENPTkZJR19SVENfRFJWX01QQzUxMjEpCSs9IHJ0Yy1tcGM1MTIxLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01WKQkrPSBydGMtbXYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTlVDOTAwKQkrPSBydGMtbnVjOTAwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX09NQVApCSs9IHJ0Yy1vbWFwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYwppbmRleCAzYTdiZTExLi44MTJjNjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCkBAIC0zNzYsMjAgKzM3NiwyMiBAQAogCX0KIAogCS8qIERpc2FibGluZyBjYWxpYnJhdGlvbiBtb2RlICovCi0JaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYgRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9DQUwpCisJaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYgRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9DQUwpIHsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEZNMzEzMF9SVENfQ09OVFJPTCwKIAkJCWZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYKIAkJCQl+KEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfQ0FMKSk7CiAJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkRpc2FibGluZyBjYWxpYnJhdGlvbiBtb2RlIVxuIik7CisJfQogCiAJLyogRGlzYWJsaW5nIHJlYWQgYW5kIHdyaXRlIG1vZGVzICovCiAJaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYgRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9XUklURSB8fAotCSAgICBmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSAmIEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfUkVBRCkKKwkgICAgZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0gJiBGTTMxMzBfUlRDX0NPTlRST0xfQklUX1JFQUQpIHsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEZNMzEzMF9SVENfQ09OVFJPTCwKIAkJCWZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYKIAkJCQl+KEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfUkVBRCB8CiAJCQkJCUZNMzEzMF9SVENfQ09OVFJPTF9CSVRfV1JJVEUpKTsKIAkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiRGlzYWJsaW5nIFJFQUQgb3IgV1JJVEUgbW9kZSFcbiIpOworCX0KIAogCS8qIG9zY2lsbGF0b3Igb2ZmPyAgdHVybiBpdCBvbiwgc28gY2xvY2sgY2FuIHRpY2suICovCiAJaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfQ0FMX0NPTlRST0xdICYgRk0zMTMwX0NBTF9DT05UUk9MX0JJVF9uT1NDRU4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXBjNTEyMS5jIGIvZHJpdmVycy9ydGMvcnRjLW1wYzUxMjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzEzY2EwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1wYzUxMjEuYwpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqIFJlYWwtdGltZSBjbG9jayBkcml2ZXIgZm9yIE1QQzUxMjEKKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgRG9tZW4gUHVuY2VyIDxkb21lbi5wdW5jZXJAdGVsYXJnby5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCitzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyB7CisJdTggc2V0X3RpbWU7CQkvKiBSVEMgKyAweDAwICovCisJdTggaG91cl9zZXQ7CQkvKiBSVEMgKyAweDAxICovCisJdTggbWludXRlX3NldDsJCS8qIFJUQyArIDB4MDIgKi8KKwl1OCBzZWNvbmRfc2V0OwkJLyogUlRDICsgMHgwMyAqLworCisJdTggc2V0X2RhdGU7CQkvKiBSVEMgKyAweDA0ICovCisJdTggbW9udGhfc2V0OwkJLyogUlRDICsgMHgwNSAqLworCXU4IHdlZWtkYXlfc2V0OwkJLyogUlRDICsgMHgwNiAqLworCXU4IGRhdGVfc2V0OwkJLyogUlRDICsgMHgwNyAqLworCisJdTggd3JpdGVfc3c7CQkvKiBSVEMgKyAweDA4ICovCisJdTggc3dfc2V0OwkJLyogUlRDICsgMHgwOSAqLworCXUxNiB5ZWFyX3NldDsJCS8qIFJUQyArIDB4MGEgKi8KKworCXU4IGFsbV9lbmFibGU7CQkvKiBSVEMgKyAweDBjICovCisJdTggYWxtX2hvdXJfc2V0OwkvKiBSVEMgKyAweDBkICovCisJdTggYWxtX21pbl9zZXQ7CQkvKiBSVEMgKyAweDBlICovCisJdTggaW50X2VuYWJsZTsJCS8qIFJUQyArIDB4MGYgKi8KKworCXU4IHJlc2VydmVkMTsKKwl1OCBob3VyOwkJLyogUlRDICsgMHgxMSAqLworCXU4IG1pbnV0ZTsJCS8qIFJUQyArIDB4MTIgKi8KKwl1OCBzZWNvbmQ7CQkvKiBSVEMgKyAweDEzICovCisKKwl1OCBtb250aDsJCS8qIFJUQyArIDB4MTQgKi8KKwl1OCB3ZGF5X21kYXk7CQkvKiBSVEMgKyAweDE1ICovCisJdTE2IHllYXI7CQkvKiBSVEMgKyAweDE2ICovCisKKwl1OCBpbnRfYWxtOwkJLyogUlRDICsgMHgxOCAqLworCXU4IGludF9zdzsJCS8qIFJUQyArIDB4MTkgKi8KKwl1OCBhbG1fc3RhdHVzOwkJLyogUlRDICsgMHgxYSAqLworCXU4IHN3X21pbnV0ZTsJCS8qIFJUQyArIDB4MWIgKi8KKworCXU4IGJ1c19lcnJvcl8xOwkJLyogUlRDICsgMHgxYyAqLworCXU4IGludF9kYXk7CQkvKiBSVEMgKyAweDFkICovCisJdTggaW50X21pbjsJCS8qIFJUQyArIDB4MWUgKi8KKwl1OCBpbnRfc2VjOwkJLyogUlRDICsgMHgxZiAqLworCisJLyoKKwkgKiB0YXJnZXRfdGltZToKKwkgKglpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBoaWJlcm5hdGlvbiBidXQgaGliZXJuYXRpb24KKwkgKglkb2VzIG5vdCB3b3JrIG9uIHNpbGljb24gcmV2IDEuNSBzbyB1c2UgaXQgZm9yIG5vbi12b2xhdGlsZQorCSAqCXN0b3JhZ2Ugb2Ygb2Zmc2V0IGJldHdlZW4gdGhlIGFjdHVhbF90aW1lIHJlZ2lzdGVyIGFuZCBsaW51eAorCSAqCXRpbWUKKwkgKi8KKwl1MzIgdGFyZ2V0X3RpbWU7CS8qIFJUQyArIDB4MjAgKi8KKwkvKgorCSAqIGFjdHVhbF90aW1lOgorCSAqIAlyZWFkb25seSB0aW1lIHNpbmNlIFZCQVRfUlRDIHdhcyBsYXN0IGNvbm5lY3RlZAorCSAqLworCXUzMiBhY3R1YWxfdGltZTsJLyogUlRDICsgMHgyNCAqLworCXUzMiBrZWVwX2FsaXZlOwkJLyogUlRDICsgMHgyOCAqLworfTsKKworc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgeworCXVuc2lnbmVkIGlycTsKKwl1bnNpZ25lZCBpcnFfcGVyaW9kaWM7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCBydGNfd2thbHJtIHdrYWxhcm07Cit9OworCisvKgorICogVXBkYXRlIHNlY29uZC9taW51dGUvaG91ciByZWdpc3RlcnMuCisgKgorICogVGhpcyBpcyBqdXN0IHNvIGFsYXJtIHdpbGwgd29yay4KKyAqLworc3RhdGljIHZvaWQgbXBjNTEyMV9ydGNfdXBkYXRlX3NtaChzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzLAorCQkJCSAgIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJb3V0XzgoJnJlZ3MtPnNlY29uZF9zZXQsIHRtLT50bV9zZWMpOworCW91dF84KCZyZWdzLT5taW51dGVfc2V0LCB0bS0+dG1fbWluKTsKKwlvdXRfOCgmcmVncy0+aG91cl9zZXQsIHRtLT50bV9ob3VyKTsKKworCS8qIHNldCB0aW1lIHNlcXVlbmNlICovCisJb3V0XzgoJnJlZ3MtPnNldF90aW1lLCAweDEpOworCW91dF84KCZyZWdzLT5zZXRfdGltZSwgMHgzKTsKKwlvdXRfOCgmcmVncy0+c2V0X3RpbWUsIDB4MSk7CisJb3V0XzgoJnJlZ3MtPnNldF90aW1lLCAweDApOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwkvKgorCSAqIGxpbnV4IHRpbWUgaXMgYWN0dWFsX3RpbWUgcGx1cyB0aGUgb2Zmc2V0IHNhdmVkIGluIHRhcmdldF90aW1lCisJICovCisJbm93ID0gaW5fYmUzMigmcmVncy0+YWN0dWFsX3RpbWUpICsgaW5fYmUzMigmcmVncy0+dGFyZ2V0X3RpbWUpOworCisJcnRjX3RpbWVfdG9fdG0obm93LCB0bSk7CisKKwkvKgorCSAqIHVwZGF0ZSBzZWNvbmQgbWludXRlIGhvdXIgcmVnaXN0ZXJzCisJICogc28gYWxhcm1zIHdpbGwgd29yaworCSAqLworCW1wYzUxMjFfcnRjX3VwZGF0ZV9zbWgocmVncywgdG0pOworCisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyMV9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwkvKgorCSAqIFRoZSBhY3R1YWxfdGltZSByZWdpc3RlciBpcyByZWFkIG9ubHkgc28gd2Ugd3JpdGUgdGhlIG9mZnNldAorCSAqIGJldHdlZW4gaXQgYW5kIGxpbnV4IHRpbWUgdG8gdGhlIHRhcmdldF90aW1lIHJlZ2lzdGVyLgorCSAqLworCXJldCA9IHJ0Y190bV90b190aW1lKHRtLCAmbm93KTsKKwlpZiAocmV0ID09IDApCisJCW91dF9iZTMyKCZyZWdzLT50YXJnZXRfdGltZSwgbm93IC0gaW5fYmUzMigmcmVncy0+YWN0dWFsX3RpbWUpKTsKKworCS8qCisJICogdXBkYXRlIHNlY29uZCBtaW51dGUgaG91ciByZWdpc3RlcnMKKwkgKiBzbyBhbGFybXMgd2lsbCB3b3JrCisJICovCisJbXBjNTEyMV9ydGNfdXBkYXRlX3NtaChyZWdzLCB0bSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCisJKmFsYXJtID0gcnRjLT53a2FsYXJtOworCisJYWxhcm0tPnBlbmRpbmcgPSBpbl84KCZyZWdzLT5hbG1fc3RhdHVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCS8qCisJICogdGhlIGFsYXJtIGhhcyBubyBzZWNvbmRzIHNvIGRlYWwgd2l0aCBpdAorCSAqLworCWlmIChhbGFybS0+dGltZS50bV9zZWMpIHsKKwkJYWxhcm0tPnRpbWUudG1fc2VjID0gMDsKKwkJYWxhcm0tPnRpbWUudG1fbWluKys7CisJCWlmIChhbGFybS0+dGltZS50bV9taW4gPj0gNjApIHsKKwkJCWFsYXJtLT50aW1lLnRtX21pbiA9IDA7CisJCQlhbGFybS0+dGltZS50bV9ob3VyKys7CisJCQlpZiAoYWxhcm0tPnRpbWUudG1faG91ciA+PSAyNCkKKwkJCQlhbGFybS0+dGltZS50bV9ob3VyID0gMDsKKwkJfQorCX0KKworCWFsYXJtLT50aW1lLnRtX21kYXkgPSAtMTsKKwlhbGFybS0+dGltZS50bV9tb24gPSAtMTsKKwlhbGFybS0+dGltZS50bV95ZWFyID0gLTE7CisKKwlvdXRfOCgmcmVncy0+YWxtX21pbl9zZXQsIGFsYXJtLT50aW1lLnRtX21pbik7CisJb3V0XzgoJnJlZ3MtPmFsbV9ob3VyX3NldCwgYWxhcm0tPnRpbWUudG1faG91cik7CisKKwlvdXRfOCgmcmVncy0+YWxtX2VuYWJsZSwgYWxhcm0tPmVuYWJsZWQpOworCisJcnRjLT53a2FsYXJtID0gKmFsYXJtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTEyMV9ydGNfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YSgoc3RydWN0IGRldmljZSAqKWRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCWlmIChpbl84KCZyZWdzLT5pbnRfYWxtKSkgeworCQkvKiBhY2tub3dsZWRnZSBhbmQgY2xlYXIgc3RhdHVzICovCisJCW91dF84KCZyZWdzLT5pbnRfYWxtLCAxKTsKKwkJb3V0XzgoJnJlZ3MtPmFsbV9zdGF0dXMsIDEpOworCisJCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjLCAxLCBSVENfSVJRRiB8IFJUQ19BRik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM1MTIxX3J0Y19oYW5kbGVyX3VwZChpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YSgoc3RydWN0IGRldmljZSAqKWRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCWlmIChpbl84KCZyZWdzLT5pbnRfc2VjKSAmJiAoaW5fOCgmcmVncy0+aW50X2VuYWJsZSkgJiAweDEpKSB7CisJCS8qIGFja25vd2xlZGdlICovCisJCW91dF84KCZyZWdzLT5pbnRfc2VjLCAxKTsKKworCQlydGNfdXBkYXRlX2lycShydGMtPnJ0YywgMSwgUlRDX0lSUUYgfCBSVENfVUYpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKwlpbnQgdmFsOworCisJaWYgKGVuYWJsZWQpCisJCXZhbCA9IDE7CisJZWxzZQorCQl2YWwgPSAwOworCisJb3V0XzgoJnJlZ3MtPmFsbV9lbmFibGUsIHZhbCk7CisJcnRjLT53a2FsYXJtLmVuYWJsZWQgPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKwlpbnQgdmFsOworCisJdmFsID0gaW5fOCgmcmVncy0+aW50X2VuYWJsZSk7CisKKwlpZiAoZW5hYmxlZCkKKwkJdmFsID0gKHZhbCAmIH4weDgpIHwgMHgxOworCWVsc2UKKwkJdmFsICY9IH4weDE7CisKKwlvdXRfOCgmcmVncy0+aW50X2VuYWJsZSwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbXBjNTEyMV9ydGNfb3BzID0geworCS5yZWFkX3RpbWUgPSBtcGM1MTIxX3J0Y19yZWFkX3RpbWUsCisJLnNldF90aW1lID0gbXBjNTEyMV9ydGNfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0gPSBtcGM1MTIxX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBtcGM1MTIxX3J0Y19zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBtcGM1MTIxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAorCS51cGRhdGVfaXJxX2VuYWJsZSA9IG1wYzUxMjFfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbXBjNTEyMV9ydGNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCisJCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGM7CisJaW50IGVyciA9IDA7CisJdTMyIGthOworCisJcnRjID0ga3phbGxvYyhzaXplb2YoKnJ0YyksIEdGUF9LRVJORUwpOworCWlmICghcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ0Yy0+cmVncyA9IG9mX2lvbWFwKG9wLT5ub2RlLCAwKTsKKwlpZiAoIXJ0Yy0+cmVncykgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiJXM6IGNvdWxkbid0IG1hcCBpbyBzcGFjZVxuIiwgX19mdW5jX18pOworCQllcnIgPSAtRU5PU1lTOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWRldmljZV9pbml0X3dha2V1cCgmb3AtPmRldiwgMSk7CisKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIHJ0Yyk7CisKKwlydGMtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAxKTsKKwllcnIgPSByZXF1ZXN0X2lycShydGMtPmlycSwgbXBjNTEyMV9ydGNfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJCSJtcGM1MTIxLXJ0YyIsICZvcC0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICIlczogY291bGQgbm90IHJlcXVlc3QgaXJxOiAlaVxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcnRjLT5pcnEpOworCQlnb3RvIG91dF9kaXNwb3NlOworCX0KKworCXJ0Yy0+aXJxX3BlcmlvZGljID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOworCWVyciA9IHJlcXVlc3RfaXJxKHJ0Yy0+aXJxX3BlcmlvZGljLCBtcGM1MTIxX3J0Y19oYW5kbGVyX3VwZCwKKwkJCQlJUlFGX0RJU0FCTEVELCAibXBjNTEyMS1ydGNfdXBkIiwgJm9wLT5kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIiVzOiBjb3VsZCBub3QgcmVxdWVzdCBpcnE6ICVpXG4iLAorCQkJCQkJX19mdW5jX18sIHJ0Yy0+aXJxX3BlcmlvZGljKTsKKwkJZ290byBvdXRfZGlzcG9zZTI7CisJfQorCisJa2EgPSBpbl9iZTMyKCZydGMtPnJlZ3MtPmtlZXBfYWxpdmUpOworCWlmIChrYSAmIDB4MDIpIHsKKwkJZGV2X3dhcm4oJm9wLT5kZXYsCisJCQkibXBjNTEyMS1ydGM6IEJhdHRlcnkgb3Igb3NjaWxsYXRvciBmYWlsdXJlIVxuIik7CisJCW91dF9iZTMyKCZydGMtPnJlZ3MtPmtlZXBfYWxpdmUsIGthKTsKKwl9CisKKwlydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoIm1wYzUxMjEtcnRjIiwgJm9wLT5kZXYsCisJCQkJCSZtcGM1MTIxX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0Yy0+cnRjKSkgeworCQllcnIgPSBQVFJfRVJSKHJ0Yy0+cnRjKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9mcmVlX2lycToKKwlmcmVlX2lycShydGMtPmlycV9wZXJpb2RpYywgJm9wLT5kZXYpOworb3V0X2Rpc3Bvc2UyOgorCWlycV9kaXNwb3NlX21hcHBpbmcocnRjLT5pcnFfcGVyaW9kaWMpOworCWZyZWVfaXJxKHJ0Yy0+aXJxLCAmb3AtPmRldik7CitvdXRfZGlzcG9zZToKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxKTsKKwlpb3VubWFwKHJ0Yy0+cmVncyk7CitvdXRfZnJlZToKKwlrZnJlZShydGMpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXBjNTEyMV9ydGNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdCwgc28gdGhlcmUgYXJlIG5vIG5hc3R5IHN1cnByaXNlcyAqLworCW91dF84KCZyZWdzLT5hbG1fZW5hYmxlLCAwKTsKKwlvdXRfOCgmcmVncy0+aW50X2VuYWJsZSwgaW5fOCgmcmVncy0+aW50X2VuYWJsZSkgJiB+MHgxKTsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMtPnJ0Yyk7CisJaW91bm1hcChydGMtPnJlZ3MpOworCWZyZWVfaXJxKHJ0Yy0+aXJxLCAmb3AtPmRldik7CisJZnJlZV9pcnEocnRjLT5pcnFfcGVyaW9kaWMsICZvcC0+ZGV2KTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxKTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxX3BlcmlvZGljKTsKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOworCWtmcmVlKHJ0Yyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTEyMV9ydGNfbWF0Y2hbXSBfX2RldmluaXRkYXRhID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcnRjIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzUxMjFfcnRjX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJtcGM1MTIxLXJ0YyIsCisJLm1hdGNoX3RhYmxlID0gbXBjNTEyMV9ydGNfbWF0Y2gsCisJLnByb2JlID0gbXBjNTEyMV9ydGNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1wYzUxMjFfcnRjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcGM1MTIxX3J0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTEyMV9ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1wYzUxMjFfcnRjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbXBjNTEyMV9ydGNfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1MTIxX3J0Y19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobXBjNTEyMV9ydGNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkpvaG4gUmlnYnkgPGpjcmlnYnlAZ21haWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggNTkwNTkzNi4uOWFiMWFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CkBAIC0xMTIsNiArMTEzLDcgQEAKIAlJTklUX1dPUksoJmRldmljZS0+cmVzdG9yZV9kZXZpY2UsIGRvX3Jlc3RvcmVfZGV2aWNlKTsKIAlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9ORVc7CiAJZGV2aWNlLT50YXJnZXQgPSBEQVNEX1NUQVRFX05FVzsKKwltdXRleF9pbml0KCZkZXZpY2UtPnN0YXRlX211dGV4KTsKIAogCXJldHVybiBkZXZpY2U7CiB9CkBAIC0zMjEsOCArMzIzLDggQEAKIAkJCWRldmljZS0+c3RhdGUgPSBEQVNEX1NUQVRFX1JFQURZOwogCQkJcmV0dXJuIHJjOwogCQl9Ci0JCWRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKGJsb2NrKTsKIAkJZGFzZF9mbHVzaF9yZXF1ZXN0X3F1ZXVlKGJsb2NrKTsKKwkJZGFzZF9kZXN0cm95X3BhcnRpdGlvbnMoYmxvY2spOwogCQlibG9jay0+YmxvY2tzID0gMDsKIAkJYmxvY2stPmJwX2Jsb2NrID0gMDsKIAkJYmxvY2stPnMyYl9zaGlmdCA9IDA7CkBAIC00ODQsMTAgKzQ4Niw4IEBACiAJaWYgKHJjKQogCQlkZXZpY2UtPnRhcmdldCA9IGRldmljZS0+c3RhdGU7CiAKLQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBkZXZpY2UtPnRhcmdldCkgeworCWlmIChkZXZpY2UtPnN0YXRlID09IGRldmljZS0+dGFyZ2V0KQogCQl3YWtlX3VwKCZkYXNkX2luaXRfd2FpdHEpOwotCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKLQl9CiAKIAkvKiBsZXQgdXNlci1zcGFjZSBrbm93IHRoYXQgdGhlIGRldmljZSBzdGF0dXMgY2hhbmdlZCAqLwogCWtvYmplY3RfdWV2ZW50KCZkZXZpY2UtPmNkZXYtPmRldi5rb2JqLCBLT0JKX0NIQU5HRSk7CkBAIC01MDIsNyArNTAyLDkgQEAKIHN0YXRpYyB2b2lkIGRvX2tpY2tfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGFzZF9kZXZpY2UsIGtpY2tfd29yayk7CisJbXV0ZXhfbG9jaygmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CiAJZGFzZF9jaGFuZ2Vfc3RhdGUoZGV2aWNlKTsKKwltdXRleF91bmxvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOwogCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CiAJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiB9CkBAIC01MzksMTggKzU0MSwxOSBAQAogdm9pZCBkYXNkX3NldF90YXJnZXRfc3RhdGUoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIGludCB0YXJnZXQpCiB7CiAJZGFzZF9nZXRfZGV2aWNlKGRldmljZSk7CisJbXV0ZXhfbG9jaygmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CiAJLyogSWYgd2UgYXJlIGluIHByb2Jlb25seSBtb2RlIHN0b3AgYXQgREFTRF9TVEFURV9SRUFEWS4gKi8KIAlpZiAoZGFzZF9wcm9iZW9ubHkgJiYgdGFyZ2V0ID4gREFTRF9TVEFURV9SRUFEWSkKIAkJdGFyZ2V0ID0gREFTRF9TVEFURV9SRUFEWTsKIAlpZiAoZGV2aWNlLT50YXJnZXQgIT0gdGFyZ2V0KSB7Ci0JCWlmIChkZXZpY2UtPnN0YXRlID09IHRhcmdldCkgeworCQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSB0YXJnZXQpCiAJCQl3YWtlX3VwKCZkYXNkX2luaXRfd2FpdHEpOwotCQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JCX0KIAkJZGV2aWNlLT50YXJnZXQgPSB0YXJnZXQ7CiAJfQogCWlmIChkZXZpY2UtPnN0YXRlICE9IGRldmljZS0+dGFyZ2V0KQogCQlkYXNkX2NoYW5nZV9zdGF0ZShkZXZpY2UpOworCW11dGV4X3VubG9jaygmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CisJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiB9CiAKIC8qCkBAIC0xMDAwLDEyICsxMDAzLDIwIEBACiAJCXJldHVybjsKIAl9CiAKLQlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7Ci0JaWYgKGRldmljZSA9PSBOVUxMIHx8Ci0JICAgIGRldmljZSAhPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpIHx8Ci0JICAgIHN0cm5jbXAoZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKKwlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpOworCWlmIChJU19FUlIoZGV2aWNlKSkgeworCQlEQkZfRVZFTlRfREVWSUQoREJGX0RFQlVHLCBjZGV2LCAiJXMiLAorCQkJCSJ1bmFibGUgdG8gZ2V0IGRldmljZSBmcm9tIGNkZXYiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghY3FyLT5zdGFydGRldiB8fAorCSAgICBkZXZpY2UgIT0gY3FyLT5zdGFydGRldiB8fAorCSAgICBzdHJuY21wKGNxci0+c3RhcnRkZXYtPmRpc2NpcGxpbmUtPmViY25hbWUsCisJCSAgICAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKIAkJREJGX0VWRU5UX0RFVklEKERCRl9ERUJVRywgY2RldiwgIiVzIiwKIAkJCQkiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdCIpOworCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTY5Miw3ICsxNzAzLDYgQEAKIAkJCQljcXIsIHJjKTsKIAkJfSBlbHNlIHsKIAkJCWNxci0+c3RvcGNsayA9IGdldF9jbG9jaygpOwotCQkJcmMgPSAxOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6IC8qIGFscmVhZHkgZmluaXNoZWQgb3IgY2xlYXIgcGVuZGluZyAtIGRvIG5vdGhpbmcgKi8KQEAgLTIxNzAsOSArMjE4MCwxMyBAQAogc3RhdGljIGludCBkYXNkX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2UgPSBibG9jay0+YmFzZTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAJaW50IHJjOwogCisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwliYXNlID0gYmxvY2stPmJhc2U7CiAJYXRvbWljX2luYygmYmxvY2stPm9wZW5fY291bnQpOwogCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfT0ZGTElORSwgJmJhc2UtPmZsYWdzKSkgewogCQlyYyA9IC1FTk9ERVY7CkBAIC0yMjg1LDExICsyMjk5LDYgQEAKIAlpZiAocmV0KQogCQlwcl93YXJuaW5nKCIlczogU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgZmFpbGVkIHdpdGggcmM9JWRcbiIsCiAJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgcmV0KTsKLQllbHNlIHsKLQkJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXYoY2Rldik7Ci0JCXdhaXRfZXZlbnQoZGFzZF9pbml0X3dhaXRxLCBfd2FpdF9mb3JfZGV2aWNlKGRldmljZSkpOwotCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKLQl9CiB9CiAKIC8qCkBAIC0yNDI0LDYgKzI0MzMsOSBAQAogCX0gZWxzZQogCQlwcl9kZWJ1ZygiZGFzZF9nZW5lcmljIGRldmljZSAlcyBmb3VuZFxuIiwKIAkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisKKwl3YWl0X2V2ZW50KGRhc2RfaW5pdF93YWl0cSwgX3dhaXRfZm9yX2RldmljZShkZXZpY2UpKTsKKwogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKaW5kZXggNGNhYzViNS4uZDQ5NzY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKQEAgLTg3NCwxMiArODc0LDE5IEBACiAJc3NpemVfdCBsZW47CiAKIAlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXYodG9fY2N3ZGV2KGRldikpOwotCWlmICghSVNfRVJSKGRldmljZSkgJiYgZGV2aWNlLT5kaXNjaXBsaW5lKSB7CisJaWYgKElTX0VSUihkZXZpY2UpKQorCQlnb3RvIG91dDsKKwllbHNlIGlmICghZGV2aWNlLT5kaXNjaXBsaW5lKSB7CisJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgewogCQlsZW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAogCQkJICAgICAgIGRldmljZS0+ZGlzY2lwbGluZS0+bmFtZSk7CiAJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwotCX0gZWxzZQotCQlsZW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIm5vbmVcbiIpOworCQlyZXR1cm4gbGVuOworCX0KK291dDoKKwlsZW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIm5vbmVcbiIpOwogCXJldHVybiBsZW47CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCmluZGV4IGQzMTk4MzAuLjk0ZjkyYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwpAQCAtODgsNiArODgsNyBAQAogCWlmIChibG9jay0+Z2RwKSB7CiAJCWRlbF9nZW5kaXNrKGJsb2NrLT5nZHApOwogCQlibG9jay0+Z2RwLT5xdWV1ZSA9IE5VTEw7CisJCWJsb2NrLT5nZHAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJCXB1dF9kaXNrKGJsb2NrLT5nZHApOwogCQlibG9jay0+Z2RwID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IGU0YzIxNDMuLmVkNzNjZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC0zNjgsNiArMzY4LDcgQEAKIAogCS8qIERldmljZSBzdGF0ZSBhbmQgdGFyZ2V0IHN0YXRlLiAqLwogCWludCBzdGF0ZSwgdGFyZ2V0OworCXN0cnVjdCBtdXRleCBzdGF0ZV9tdXRleDsKIAlpbnQgc3RvcHBlZDsJCS8qIGRldmljZSAoY2N3X2RldmljZV9zdGFydCkgd2FzIHN0b3BwZWQgKi8KIAogCS8qIHJlZmVyZW5jZSBjb3VudC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwppbmRleCA3MWY5NWY1Li5mMTNhMGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCkBAIC0xNjUsNTEgKzE2NSwzMiBAQAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgaW50Ci1kYXNkX2NhbGNfbWV0cmljcyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJICBpbnQgY291bnQsIGludCAqZW9mLCBpbnQgbGVuKQotewotCWxlbiA9IChsZW4gPiBvZmYpID8gbGVuIC0gb2ZmIDogMDsKLQlpZiAobGVuID4gY291bnQpCi0JCWxlbiA9IGNvdW50OwotCWlmIChsZW4gPCBjb3VudCkKLQkJKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gbGVuOwotfQotCiAjaWZkZWYgQ09ORklHX0RBU0RfUFJPRklMRQotc3RhdGljIGNoYXIgKgotZGFzZF9zdGF0aXN0aWNzX2FycmF5KGNoYXIgKnN0ciwgdW5zaWduZWQgaW50ICphcnJheSwgaW50IGZhY3RvcikKK3N0YXRpYyB2b2lkIGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGludCAqYXJyYXksIGludCBmYWN0b3IpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlN2QgIiwgYXJyYXlbaV0gLyBmYWN0b3IpOworCQlzZXFfcHJpbnRmKG0sICIlN2QgIiwgYXJyYXlbaV0gLyBmYWN0b3IpOwogCQlpZiAoaSA9PSAxNSkKLQkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7CisJCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAl9Ci0Jc3RyICs9IHNwcmludGYoc3RyLCJcbiIpOwotCXJldHVybiBzdHI7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0RBU0RfUFJPRklMRSAqLwogCi1zdGF0aWMgaW50Ci1kYXNkX3N0YXRpc3RpY3NfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBkYXNkX3N0YXRzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JdW5zaWduZWQgbG9uZyBsZW47CiAjaWZkZWYgQ09ORklHX0RBU0RfUFJPRklMRQogCXN0cnVjdCBkYXNkX3Byb2ZpbGVfaW5mb190ICpwcm9mOwotCWNoYXIgKnN0cjsKIAlpbnQgZmFjdG9yOwogCiAJLyogY2hlY2sgZm9yIGFjdGl2ZSBwcm9maWxpbmcgKi8KIAlpZiAoZGFzZF9wcm9maWxlX2xldmVsID09IERBU0RfUFJPRklMRV9PRkYpIHsKLQkJbGVuID0gc3ByaW50ZihwYWdlLCAiU3RhdGlzdGljcyBhcmUgb2ZmIC0gdGhleSBtaWdodCBiZSAiCisJCXNlcV9wcmludGYobSwgIlN0YXRpc3RpY3MgYXJlIG9mZiAtIHRoZXkgbWlnaHQgYmUgIgogCQkJCSAgICAic3dpdGNoZWQgb24gdXNpbmcgJ2VjaG8gc2V0IG9uID4gIgogCQkJCSAgICAiL3Byb2MvZGFzZC9zdGF0aXN0aWNzJ1xuIik7Ci0JCXJldHVybiBkYXNkX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCQlyZXR1cm4gMDsKIAl9CiAKIAlwcm9mID0gJmRhc2RfZ2xvYmFsX3Byb2ZpbGU7CkBAIC0yMTcsNDcgKzE5OCw0OSBAQAogCWZvciAoZmFjdG9yID0gMTsgKHByb2YtPmRhc2RfaW9fcmVxcyAvIGZhY3RvcikgPiA5OTk5OTk5OwogCSAgICAgZmFjdG9yICo9IDEwKTsKIAotCXN0ciA9IHBhZ2U7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiJWQgZGFzZCBJL08gcmVxdWVzdHNcbiIsIHByb2YtPmRhc2RfaW9fcmVxcyk7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAid2l0aCAldSBzZWN0b3JzKDUxMkIgZWFjaClcbiIsCisJc2VxX3ByaW50ZihtLCAiJWQgZGFzZCBJL08gcmVxdWVzdHNcbiIsIHByb2YtPmRhc2RfaW9fcmVxcyk7CisJc2VxX3ByaW50ZihtLCAid2l0aCAldSBzZWN0b3JzKDUxMkIgZWFjaClcbiIsCiAJCSAgICAgICBwcm9mLT5kYXNkX2lvX3NlY3RzKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJTY2FsZSBGYWN0b3IgaXMgICVkXG4iLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwKKwlzZXFfcHJpbnRmKG0sICJTY2FsZSBGYWN0b3IgaXMgICVkXG4iLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwKIAkJICAgICAgICIgICBfXzw0CSAgIF9fXzgJICAgX18xNgkgICBfXzMyCSAgIF9fNjQJICAgXzEyOAkiCiAJCSAgICAgICAiICAgXzI1NgkgICBfNTEyCSAgIF9fMWsJICAgX18yawkgICBfXzRrCSAgIF9fOGsJIgogCQkgICAgICAgIiAgIF8xNmsJICAgXzMyawkgICBfNjRrCSAgIDEyOGtcbiIpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwKKwlzZXFfcHJpbnRmKG0sCiAJCSAgICAgICAiICAgXzI1NgkgICBfNTEyCSAgIF9fMU0JICAgX18yTQkgICBfXzRNCSAgIF9fOE0JIgogCQkgICAgICAgIiAgIF8xNk0JICAgXzMyTQkgICBfNjRNCSAgIDEyOE0JICAgMjU2TQkgICA1MTJNCSIKIAkJICAgICAgICIgICBfXzFHCSAgIF9fMkcJICAgX180RyAiICIgICBfPjRHXG4iKTsKIAotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBzaXplcyAoNTEyQiBzZWNzKVxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb19zZWNzLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZXMgKG1pY3Jvc2Vjb25kcylcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltZXMsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lcyBwZXIgc2VjdG9yXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbXBzLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSB0aWxsIHNzY2hcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltZTEsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gc3NjaCBhbmQgaXJxXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbWUyLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSBiZXR3ZWVuIHNzY2ggIgorCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBzaXplcyAoNTEyQiBzZWNzKVxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fc2VjcywgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWVzIChtaWNyb3NlY29uZHMpXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1lcywgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWVzIHBlciBzZWN0b3JcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbXBzLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSB0aWxsIHNzY2hcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWUxLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSBiZXR3ZWVuIHNzY2ggYW5kIGlycVxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZTIsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gc3NjaCAiCiAJCQkgICAgImFuZCBpcnEgcGVyIHNlY3RvclxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lMnBzLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSBiZXR3ZWVuIGlycSBhbmQgZW5kXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbWUzLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIiMgb2YgcmVxIGluIGNoYW5xIGF0IGVucXVldWluZyAoMS4uMzIpIFxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb19ucl9yZXEsIGZhY3Rvcik7Ci0JbGVuID0gc3RyIC0gcGFnZTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1lMnBzLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSBiZXR3ZWVuIGlycSBhbmQgZW5kXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1lMywgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICIjIG9mIHJlcSBpbiBjaGFucSBhdCBlbnF1ZXVpbmcgKDEuLjMyKSBcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX25yX3JlcSwgZmFjdG9yKTsKICNlbHNlCi0JbGVuID0gc3ByaW50ZihwYWdlLCAiU3RhdGlzdGljcyBhcmUgbm90IGFjdGl2YXRlZCBpbiB0aGlzIGtlcm5lbFxuIik7CisJc2VxX3ByaW50ZihtLCAiU3RhdGlzdGljcyBhcmUgbm90IGFjdGl2YXRlZCBpbiB0aGlzIGtlcm5lbFxuIik7CiAjZW5kaWYKLQlyZXR1cm4gZGFzZF9jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotZGFzZF9zdGF0aXN0aWNzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgdXNlcl9sZW4sIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGRhc2Rfc3RhdHNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYXNkX3N0YXRzX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRhc2Rfc3RhdHNfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXplX3QgdXNlcl9sZW4sIGxvZmZfdCAqcG9zKQogewogI2lmZGVmIENPTkZJR19EQVNEX1BST0ZJTEUKIAljaGFyICpidWZmZXIsICpzdHI7CkBAIC0zMDgsNiArMjkxLDE1IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0RBU0RfUFJPRklMRSAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYXNkX3N0YXRzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFzZF9zdGF0c19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZGFzZF9zdGF0c19wcm9jX3dyaXRlLAorfTsKKwogLyoKICAqIENyZWF0ZSBkYXNkIHByb2MtZnMgZW50cmllcy4KICAqIEluIGNhc2UgY3JlYXRpb24gZmFpbGVkLCBjbGVhbnVwIGFuZCByZXR1cm4gLUVOT0VOVC4KQEAgLTMyNCwxMyArMzE2LDEyIEBACiAJCQkJCSAmZGFzZF9kZXZpY2VzX2ZpbGVfb3BzKTsKIAlpZiAoIWRhc2RfZGV2aWNlc19lbnRyeSkKIAkJZ290byBvdXRfbm9kZXZpY2VzOwotCWRhc2Rfc3RhdGlzdGljc19lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzdGF0aXN0aWNzIiwKLQkJCQkJCSAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAotCQkJCQkJICBkYXNkX3Byb2Nfcm9vdF9lbnRyeSk7CisJZGFzZF9zdGF0aXN0aWNzX2VudHJ5ID0gcHJvY19jcmVhdGUoInN0YXRpc3RpY3MiLAorCQkJCQkgICAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAorCQkJCQkgICAgZGFzZF9wcm9jX3Jvb3RfZW50cnksCisJCQkJCSAgICAmZGFzZF9zdGF0c19wcm9jX2ZvcHMpOwogCWlmICghZGFzZF9zdGF0aXN0aWNzX2VudHJ5KQogCQlnb3RvIG91dF9ub3N0YXRpc3RpY3M7Ci0JZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5yZWFkX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3NfcmVhZDsKLQlkYXNkX3N0YXRpc3RpY3NfZW50cnktPndyaXRlX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3Nfd3JpdGU7CiAJcmV0dXJuIDA7CiAKICBvdXRfbm9zdGF0aXN0aWNzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKaW5kZXggODJkYWEzYy4uMzQzODY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2lwbC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC00MCwxMiArNDEsMTIgQEAKIC8qIGR1bXAgc3lzdGVtIGluZm8gKi8KIAogc3RydWN0IHN5c19pbmZvIHsKLQllbnVtIGFyY2hfaWQJYXJjaDsKLQl1bnNpZ25lZCBsb25nCXNhX2Jhc2U7Ci0JdTMyCQlzYV9zaXplOwotCWludAkJY3B1X21hcFtOUl9DUFVTXTsKLQl1bnNpZ25lZCBsb25nCW1lbV9zaXplOwotCXVuaW9uIHNhdmVfYXJlYQlsY19tYXNrOworCWVudW0gYXJjaF9pZAkgYXJjaDsKKwl1bnNpZ25lZCBsb25nCSBzYV9iYXNlOworCXUzMgkJIHNhX3NpemU7CisJaW50CQkgY3B1X21hcFtOUl9DUFVTXTsKKwl1bnNpZ25lZCBsb25nCSBtZW1fc2l6ZTsKKwlzdHJ1Y3Qgc2F2ZV9hcmVhIGxjX21hc2s7CiB9OwogCiBzdHJ1Y3QgaXBpYl9pbmZvIHsKQEAgLTE4Myw1MiArMTg0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIF9fczM5MHhfXwotLyoKLSAqIENvbnZlcnQgczM5MHggKDY0IGJpdCkgY3B1IGluZm8gdG8gczM5MCAoMzIgYml0KSBjcHUgaW5mbwotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgczM5MHhfdG9fczM5MF9yZWdzKHVuaW9uIHNhdmVfYXJlYSAqb3V0LCB1bmlvbiBzYXZlX2FyZWEgKmluLAotCQkJCSAgICAgIGludCBjcHUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlvdXQtPnMzOTAuZ3BfcmVnc1tpXSA9IGluLT5zMzkweC5ncF9yZWdzW2ldICYgMHgwMDAwMDAwMGZmZmZmZmZmOwotCQlvdXQtPnMzOTAuYWNjX3JlZ3NbaV0gPSBpbi0+czM5MHguYWNjX3JlZ3NbaV07Ci0JCW91dC0+czM5MC5jdHJsX3JlZ3NbaV0gPQotCQkJaW4tPnMzOTB4LmN0cmxfcmVnc1tpXSAmIDB4MDAwMDAwMDBmZmZmZmZmZjsKLQl9Ci0JLyogbG9jb3JlIGZvciAzMSBiaXQgaGFzIG9ubHkgc3BhY2UgZm9yIGZwcmVncyAwLDIsNCw2ICovCi0Jb3V0LT5zMzkwLmZwX3JlZ3NbMF0gPSBpbi0+czM5MHguZnBfcmVnc1swXTsKLQlvdXQtPnMzOTAuZnBfcmVnc1sxXSA9IGluLT5zMzkweC5mcF9yZWdzWzJdOwotCW91dC0+czM5MC5mcF9yZWdzWzJdID0gaW4tPnMzOTB4LmZwX3JlZ3NbNF07Ci0Jb3V0LT5zMzkwLmZwX3JlZ3NbM10gPSBpbi0+czM5MHguZnBfcmVnc1s2XTsKLQltZW1jcHkoJihvdXQtPnMzOTAucHN3WzBdKSwgJihpbi0+czM5MHgucHN3WzBdKSwgNCk7Ci0Jb3V0LT5zMzkwLnBzd1sxXSB8PSAweDg7IC8qIHNldCBiaXQgMTIgKi8KLQltZW1jcHkoJihvdXQtPnMzOTAucHN3WzRdKSwmKGluLT5zMzkweC5wc3dbMTJdKSwgNCk7Ci0Jb3V0LT5zMzkwLnBzd1s0XSB8PSAweDgwOyAvKiBzZXQgKDMxYml0KSBhZGRyZXNzaW5nIGJpdCAqLwotCW91dC0+czM5MC5wcmVmX3JlZyA9IGluLT5zMzkweC5wcmVmX3JlZzsKLQlvdXQtPnMzOTAudGltZXIgPSBpbi0+czM5MHgudGltZXI7Ci0Jb3V0LT5zMzkwLmNsa19jbXAgPSBpbi0+czM5MHguY2xrX2NtcDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHMzOTB4X3RvX3MzOTBfc2F2ZV9hcmVhcyh2b2lkKQotewotCWludCBpID0gMTsKLQlzdGF0aWMgdW5pb24gc2F2ZV9hcmVhIHRtcDsKLQotCXdoaWxlICh6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldKSB7Ci0JCXMzOTB4X3RvX3MzOTBfcmVncygmdG1wLCB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLCBpKTsKLQkJbWVtY3B5KHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0sICZ0bXAsIHNpemVvZih0bXApKTsKLQkJaSsrOwotCX0KLX0KLQotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2NwdV9pbmZvKGVudW0gYXJjaF9pZCBhcmNoKQogewotCXVuaW9uIHNhdmVfYXJlYSAqc2E7CisJc3RydWN0IHNhdmVfYXJlYSAqc2E7CiAKIAkvKiBnZXQgaW5mbyBmb3IgYm9vdCBjcHUgZnJvbSBsb3djb3JlLCBzdG9yZWQgaW4gdGhlIEhTQSAqLwogCkBAIC0yNDEsMjAgKzE5OSwxMiBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJemZjcGR1bXBfc2F2ZV9hcmVhc1swXSA9IHNhOwotCi0jaWZkZWYgX19zMzkweF9fCi0JLyogY29udmVydCBzMzkweCByZWdzIHRvIHMzOTAsIGlmIHdlIGFyZSBkdW1waW5nIGFuIHMzOTAgTGludXggKi8KLQotCWlmIChhcmNoID09IEFSQ0hfUzM5MCkKLQkJczM5MHhfdG9fczM5MF9zYXZlX2FyZWFzKCk7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgREVGSU5FX01VVEVYKHpjb3JlX211dGV4KTsKIAotI2RlZmluZSBEVU1QX1ZFUlNJT04JMHgzCisjZGVmaW5lIERVTVBfVkVSU0lPTgkweDUKICNkZWZpbmUgRFVNUF9NQUdJQwkweGE4MTkwMTczNjE4ZjIzZmRVTEwKICNkZWZpbmUgRFVNUF9BUkNIX1MzOTBYCTIKICNkZWZpbmUgRFVNUF9BUkNIX1MzOTAJMQpAQCAtMjc5LDcgKzIyOSwxNCBAQAogCXUzMiB2b2xucjsKIAl1MzIgYnVpbGRfYXJjaDsKIAl1NjQgcm1lbV9zaXplOwotCWNoYXIgcGFkMls0MDE2XTsKKwl1OCBtdmR1bXA7CisJdTE2IGNwdV9jbnQ7CisJdTE2IHJlYWxfY3B1X2NudDsKKwl1OCBlbmRfcGFkMVsweDIwMC0weDA2MV07CisJdTY0IG12ZHVtcF9zaWduOworCXU2NCBtdmR1bXBfemlwbF90aW1lOworCXU4IGVuZF9wYWQyWzB4ODAwLTB4MjEwXTsKKwl1MzIgbGNfdmVjWzUxMl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCxfX2FsaWduZWRfXygxNikpKTsKIAogc3RhdGljIHN0cnVjdCB6Y29yZV9oZWFkZXIgemNvcmVfaGVhZGVyID0gewpAQCAtMjg5LDcgKzI0Niw3IEBACiAJLmR1bXBfbGV2ZWwJPSAwLAogCS5wYWdlX3NpemUJPSBQQUdFX1NJWkUsCiAJLm1lbV9zdGFydAk9IDAsCi0jaWZkZWYgX19zMzkweF9fCisjaWZkZWYgQ09ORklHXzY0QklUCiAJLmJ1aWxkX2FyY2gJPSBEVU1QX0FSQ0hfUzM5MFgsCiAjZWxzZQogCS5idWlsZF9hcmNoCT0gRFVNUF9BUkNIX1MzOTAsCkBAIC0zNDAsMTEgKzI5Nyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgcHJlZml4OwogCQl1bnNpZ25lZCBsb25nIHNhX29mZiwgbGVuLCBidWZfb2ZmOwogCi0JCWlmIChzeXNfaW5mby5hcmNoID09IEFSQ0hfUzM5MCkKLQkJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnMzOTAucHJlZl9yZWc7Ci0JCWVsc2UKLQkJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnMzOTB4LnByZWZfcmVnOwotCisJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnByZWZfcmVnOwogCQlzYV9zdGFydCA9IHByZWZpeCArIHN5c19pbmZvLnNhX2Jhc2U7CiAJCXNhX2VuZCA9IHByZWZpeCArIHN5c19pbmZvLnNhX2Jhc2UgKyBzeXNfaW5mby5zYV9zaXplOwogCkBAIC01NjEsMzQgKzUxNCwzOSBAQAogCS5yZWxlYXNlCT0gemNvcmVfcmVpcGxfcmVsZWFzZSwKIH07CiAKKyNpZmRlZiBDT05GSUdfMzJCSVQKIAotc3RhdGljIHZvaWQgX19pbml0IHNldF9zMzkwX2xjX21hc2sodW5pb24gc2F2ZV9hcmVhICptYXApCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2xjX21hc2soc3RydWN0IHNhdmVfYXJlYSAqbWFwKQogewotCW1lbXNldCgmbWFwLT5zMzkwLmV4dF9zYXZlLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmV4dF9zYXZlKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAudGltZXIsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAudGltZXIpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmNsa19jbXApKTsKLQltZW1zZXQoJm1hcC0+czM5MC5wc3csIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAucHN3KSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAucHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAucHJlZl9yZWcpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5hY2NfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5hY2NfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmZwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuZnBfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuZ3BfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmN0cmxfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5jdHJsX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+ZXh0X3NhdmUsIDB4ZmYsIHNpemVvZihtYXAtPmV4dF9zYXZlKSk7CisJbWVtc2V0KCZtYXAtPnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT50aW1lcikpOworCW1lbXNldCgmbWFwLT5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5jbGtfY21wKSk7CisJbWVtc2V0KCZtYXAtPnBzdywgMHhmZiwgc2l6ZW9mKG1hcC0+cHN3KSk7CisJbWVtc2V0KCZtYXAtPnByZWZfcmVnLCAweGZmLCBzaXplb2YobWFwLT5wcmVmX3JlZykpOworCW1lbXNldCgmbWFwLT5hY2NfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+YWNjX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+ZnBfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+ZnBfcmVncykpOworCW1lbXNldCgmbWFwLT5ncF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5ncF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmN0cmxfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+Y3RybF9yZWdzKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfczM5MHhfbGNfbWFzayh1bmlvbiBzYXZlX2FyZWEgKm1hcCkKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2xjX21hc2soc3RydWN0IHNhdmVfYXJlYSAqbWFwKQogewotCW1lbXNldCgmbWFwLT5zMzkweC5mcF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5mcF9yZWdzKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmdwX3JlZ3MpKTsKLQltZW1zZXQoJm1hcC0+czM5MHgucHN3LCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5wc3cpKTsKLQltZW1zZXQoJm1hcC0+czM5MHgucHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LnByZWZfcmVnKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmZwX2N0cmxfcmVnLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5mcF9jdHJsX3JlZykpOwotCW1lbXNldCgmbWFwLT5zMzkweC50b2RfcmVnLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC50b2RfcmVnKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC50aW1lcikpOwotCW1lbXNldCgmbWFwLT5zMzkweC5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5jbGtfY21wKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmFjY19yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5hY2NfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkweC5jdHJsX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmN0cmxfcmVncykpOworCW1lbXNldCgmbWFwLT5mcF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5mcF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmdwX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+cHN3LCAweGZmLCBzaXplb2YobWFwLT5wc3cpKTsKKwltZW1zZXQoJm1hcC0+cHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnByZWZfcmVnKSk7CisJbWVtc2V0KCZtYXAtPmZwX2N0cmxfcmVnLCAweGZmLCBzaXplb2YobWFwLT5mcF9jdHJsX3JlZykpOworCW1lbXNldCgmbWFwLT50b2RfcmVnLCAweGZmLCBzaXplb2YobWFwLT50b2RfcmVnKSk7CisJbWVtc2V0KCZtYXAtPnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT50aW1lcikpOworCW1lbXNldCgmbWFwLT5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5jbGtfY21wKSk7CisJbWVtc2V0KCZtYXAtPmFjY19yZWdzLCAweGZmLCBzaXplb2YobWFwLT5hY2NfcmVncykpOworCW1lbXNldCgmbWFwLT5jdHJsX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmN0cmxfcmVncykpOwogfQogCisjZW5kaWYgLyogQ09ORklHXzMyQklUICovCisKIC8qCiAgKiBJbml0aWFsaXplIGR1bXAgZ2xvYmFscyBmb3IgYSBnaXZlbiBhcmNoaXRlY3R1cmUKICAqLwpAQCAtNTk5LDIxICs1NTcsMTggQEAKIAlzd2l0Y2ggKGFyY2gpIHsKIAljYXNlIEFSQ0hfUzM5MFg6CiAJCXByX2FsZXJ0KCJERVRFQ1RFRCAnUzM5MFggKDY0IGJpdCkgT1MnXG4iKTsKLQkJc3lzX2luZm8uc2FfYmFzZSA9IFNBVkVfQVJFQV9CQVNFX1MzOTBYOwotCQlzeXNfaW5mby5zYV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgpOwotCQlzZXRfczM5MHhfbGNfbWFzaygmc3lzX2luZm8ubGNfbWFzayk7CiAJCWJyZWFrOwogCWNhc2UgQVJDSF9TMzkwOgogCQlwcl9hbGVydCgiREVURUNURUQgJ1MzOTAgKDMyIGJpdCkgT1MnXG4iKTsKLQkJc3lzX2luZm8uc2FfYmFzZSA9IFNBVkVfQVJFQV9CQVNFX1MzOTA7Ci0JCXN5c19pbmZvLnNhX3NpemUgPSBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkwKTsKLQkJc2V0X3MzOTBfbGNfbWFzaygmc3lzX2luZm8ubGNfbWFzayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2FsZXJ0KCIweCV4IGlzIGFuIHVua25vd24gYXJjaGl0ZWN0dXJlLlxuIixhcmNoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXN5c19pbmZvLnNhX2Jhc2UgPSBTQVZFX0FSRUFfQkFTRTsKKwlzeXNfaW5mby5zYV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWEpOwogCXN5c19pbmZvLmFyY2ggPSBhcmNoOworCXNldF9sY19tYXNrKCZzeXNfaW5mby5sY19tYXNrKTsKIAlyYyA9IGluaXRfY3B1X2luZm8oYXJjaCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC02NjAsOCArNjE1LDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgemNvcmVfaGVhZGVyX2luaXQoaW50IGFyY2gsIHN0cnVjdCB6Y29yZV9oZWFkZXIgKmhkcikKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBpOwogCXVuc2lnbmVkIGxvbmcgbWVtb3J5ID0gMDsKKwl1MzIgcHJlZml4OwogCiAJaWYgKGFyY2ggPT0gQVJDSF9TMzkwWCkKIAkJaGRyLT5hcmNoX2lkID0gRFVNUF9BUkNIX1MzOTBYOwpAQCAtNjc2LDYgKzYzMiwxNCBAQAogCWhkci0+bnVtX3BhZ2VzID0gbWVtb3J5IC8gUEFHRV9TSVpFOwogCWhkci0+dG9kID0gZ2V0X2Nsb2NrKCk7CiAJZ2V0X2NwdV9pZCgmaGRyLT5jcHVfaWQpOworCWZvciAoaSA9IDA7IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV07IGkrKykgeworCQlwcmVmaXggPSB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLT5wcmVmX3JlZzsKKwkJaGRyLT5yZWFsX2NwdV9jbnQrKzsKKwkJaWYgKCFwcmVmaXgpCisJCQljb250aW51ZTsKKwkJaGRyLT5sY192ZWNbaGRyLT5jcHVfY250XSA9IHByZWZpeDsKKwkJaGRyLT5jcHVfY250Kys7CisJfQogCXJldHVybiAwOwogfQogCkBAIC03NDEsMTQgKzcwNSwyMSBAQAogCWlmIChyYykKIAkJZ290byBmYWlsOwogCi0jaWZuZGVmIF9fczM5MHhfXworI2lmZGVmIENPTkZJR182NEJJVAorCWlmIChhcmNoID09IEFSQ0hfUzM5MCkgeworCQlwcl9hbGVydCgiVGhlIDY0LWJpdCBkdW1wIHRvb2wgY2Fubm90IGJlIHVzZWQgZm9yIGEgIgorCQkJICIzMi1iaXQgc3lzdGVtXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorI2Vsc2UgLyogQ09ORklHXzY0QklUICovCiAJaWYgKGFyY2ggPT0gQVJDSF9TMzkwWCkgewogCQlwcl9hbGVydCgiVGhlIDMyLWJpdCBkdW1wIHRvb2wgY2Fubm90IGJlIHVzZWQgZm9yIGEgIgogCQkJICI2NC1iaXQgc3lzdGVtXG4iKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWw7CiAJfQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKIAlyYyA9IHN5c19pbmZvX2luaXQoYXJjaCk7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKaW5kZXggN2EyOGEzMC4uMzdkZjQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCkBAIC0yMjQsOCArMjI0LDggQEAKICAqLwogdm9pZCBjY3dfcmVxdWVzdF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogeworCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJc3RydWN0IGNjd19yZXF1ZXN0ICpyZXEgPSAmY2Rldi0+cHJpdmF0ZS0+cmVxOwotCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOwogCWVudW0gaW9fc3RhdHVzIHN0YXR1czsKIAlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCAxZWNkM2U1Li40MDM4ZjViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTU3NCw3ICs1NzQsNyBAQAogCXNlY21fYXJlYS0+cmVxdWVzdC5sZW5ndGggPSAweDAwNTA7CiAJc2VjbV9hcmVhLT5yZXF1ZXN0LmNvZGUgPSAweDAwMTY7CiAKLQlzZWNtX2FyZWEtPmtleSA9IFBBR0VfREVGQVVMVF9LRVk7CisJc2VjbV9hcmVhLT5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAJc2VjbV9hcmVhLT5jdWJfYWRkcjEgPSAodTY0KSh1bnNpZ25lZCBsb25nKWNzcy0+Y3ViX2FkZHIxOwogCXNlY21fYXJlYS0+Y3ViX2FkZHIyID0gKHU2NCkodW5zaWduZWQgbG9uZyljc3MtPmN1Yl9hZGRyMjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IGM4NGFjOTQuLjg1MjYxMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTUxLDcgKzUxLDcgQEAKIHsKIAlzdHJ1Y3QgY2hzY19wcml2YXRlICpwcml2YXRlID0gc2NoLT5wcml2YXRlOwogCXN0cnVjdCBjaHNjX3JlcXVlc3QgKnJlcXVlc3QgPSBwcml2YXRlLT5yZXF1ZXN0OwotCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopX19MQ19JUkI7CisJc3RydWN0IGlyYiAqaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAogCUNIU0NfTE9HKDQsICJpcmIiKTsKIAlDSFNDX0xPR19IRVgoNCwgaXJiLCBzaXplb2YoKmlyYikpOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJaW50IHJldCA9IC1FTk9ERVY7CiAJY2hhciBkYmZbMTBdOwogCi0JY2hzY19hcmVhLT5oZWFkZXIua2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKKwljaHNjX2FyZWEtPmhlYWRlci5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAJd2hpbGUgKChzY2ggPSBjaHNjX2dldF9uZXh0X3N1YmNoYW5uZWwoc2NoKSkpIHsKIAkJc3Bpbl9sb2NrKHNjaC0+bG9jayk7CiAJCXByaXZhdGUgPSBzY2gtPnByaXZhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwppbmRleCAxMjZmMjQwLi5mNzM2Y2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKQEAgLTYyNSw4ICs2MjUsOCBAQAogCS8qCiAJICogR2V0IGludGVycnVwdCBpbmZvcm1hdGlvbiBmcm9tIGxvd2NvcmUKIAkgKi8KLQl0cGlfaW5mbyA9IChzdHJ1Y3QgdHBpX2luZm8gKikgX19MQ19TVUJDSEFOTkVMX0lEOwotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKKwlpcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCWRvIHsKIAkJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tJT19JTlRFUlJVUFRdKys7CiAJCS8qCkBAIC02NjEsNyArNjYxLDcgQEAKIAkJICogV2UgZG9uJ3QgZG8gdGhpcyBmb3IgVk0gYmVjYXVzZSBhIHRwaSBkcm9wcyB0aGUgY3B1CiAJCSAqIG91dCBvZiB0aGUgc2llIHdoaWNoIGNvc3RzIG1vcmUgY3ljbGVzIHRoYW4gaXQgc2F2ZXMuCiAJCSAqLwotCX0gd2hpbGUgKCFNQUNISU5FX0lTX1ZNICYmIHRwaSAoTlVMTCkgIT0gMCk7CisJfSB3aGlsZSAoTUFDSElORV9JU19MUEFSICYmIHRwaShOVUxMKSAhPSAwKTsKIAlpcnFfZXhpdCgpOwogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CkBAIC02ODIsMTAgKzY4MiwxMCBAQAogCXN0cnVjdCBpcmIgKmlyYjsKIAlpbnQgaXJxX2NvbnRleHQ7CiAKLQl0cGlfaW5mbyA9IChzdHJ1Y3QgdHBpX2luZm8gKikgX19MQ19TVUJDSEFOTkVMX0lEOworCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKIAlpZiAodHBpKE5VTEwpICE9IDEpCiAJCXJldHVybiAwOwotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCWlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJLyogU3RvcmUgaW50ZXJydXB0IHJlc3BvbnNlIGJsb2NrIHRvIGxvd2NvcmUuICovCiAJaWYgKHRzY2godHBpX2luZm8tPnNjaGlkLCBpcmIpICE9IDApCiAJCS8qIE5vdCBzdGF0dXMgcGVuZGluZyBvciBub3Qgb3BlcmF0aW9uYWwuICovCkBAIC04ODUsNyArODg1LDcgQEAKIAkJc3RydWN0IHRwaV9pbmZvIHRpOwogCiAJCWlmICh0cGkoJnRpKSkgewotCQkJdHNjaCh0aS5zY2hpZCwgKHN0cnVjdCBpcmIgKilfX0xDX0lSQik7CisJCQl0c2NoKHRpLnNjaGlkLCAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiKTsKIAkJCWlmIChzY2hpZF9lcXVhbCgmdGkuc2NoaWQsICZzY2hpZCkpCiAJCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTEwODMsNyArMTA4Myw3IEBACiAJc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQ7CiAJc3RydWN0IHNjaGliIHNjaGliOwogCi0Jc2NoaWQgPSAqKHN0cnVjdCBzdWJjaGFubmVsX2lkICopX19MQ19TVUJDSEFOTkVMX0lEOworCXNjaGlkID0gKihzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKIAlpZiAoIXNjaGlkLm9uZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKHN0c2NoKHNjaGlkLCAmc2NoaWIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jcncuYyBiL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMKaW5kZXggZDE1NzY2NS4uNDI1Zjc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jcncuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCkBAIC04LDE1ICs4LDE2IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGNyd19zZW1hcGhvcmU7CiBzdGF0aWMgREVGSU5FX01VVEVYKGNyd19oYW5kbGVyX211dGV4KTsKIHN0YXRpYyBjcndfaGFuZGxlcl90IGNyd19oYW5kbGVyc1tOUl9SU0NTXTsKK3N0YXRpYyBhdG9taWNfdCBjcndfbnJfcmVxID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoY3J3X2hhbmRsZXJfd2FpdF9xKTsKIAogLyoqCiAgKiBjcndfcmVnaXN0ZXJfaGFuZGxlcigpIC0gcmVnaXN0ZXIgYSBjaGFubmVsIHJlcG9ydCB3b3JkIGhhbmRsZXIKQEAgLTU5LDEyICs2MCwxNCBAQAogc3RhdGljIGludCBjcndfY29sbGVjdF9pbmZvKHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgY3J3IGNyd1syXTsKLQlpbnQgY2NvZGU7CisJaW50IGNjb2RlLCBzaWduYWw7CiAJdW5zaWduZWQgaW50IGNoYWluOwotCWludCBpZ25vcmU7CiAKIHJlcGVhdDoKLQlpZ25vcmUgPSBkb3duX2ludGVycnVwdGlibGUoJmNyd19zZW1hcGhvcmUpOworCXNpZ25hbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjcndfaGFuZGxlcl93YWl0X3EsCisJCQkJCSAgYXRvbWljX3JlYWQoJmNyd19ucl9yZXEpID4gMCk7CisJaWYgKHVubGlrZWx5KHNpZ25hbCkpCisJCWF0b21pY19pbmMoJmNyd19ucl9yZXEpOwogCWNoYWluID0gMDsKIAl3aGlsZSAoMSkgewogCQljcndfaGFuZGxlcl90IGhhbmRsZXI7CkBAIC0xMjIsMjUgKzEyNSwyMyBAQAogCQkvKiBjaGFpbiBpcyBhbHdheXMgMCBvciAxIGhlcmUuICovCiAJCWNoYWluID0gY3J3W2NoYWluXS5jaG4gPyBjaGFpbiArIDEgOiAwOwogCX0KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3J3X25yX3JlcSkpCisJCXdha2VfdXAoJmNyd19oYW5kbGVyX3dhaXRfcSk7CiAJZ290byByZXBlYXQ7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCh2b2lkKQogewotCXVwKCZjcndfc2VtYXBob3JlKTsKKwlhdG9taWNfaW5jKCZjcndfbnJfcmVxKTsKKwl3YWtlX3VwKCZjcndfaGFuZGxlcl93YWl0X3EpOwogfQogCi0vKgotICogU2VwYXJhdGUgaW5pdGNhbGwgbmVlZGVkIGZvciBzZW1hcGhvcmUgaW5pdGlhbGl6YXRpb24gc2luY2UKLSAqIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSBjcndfbWFjaGluZV9jaGVja19pbml0LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBjcndfaW5pdF9zZW1hcGhvcmUodm9pZCkKK3ZvaWQgY3J3X3dhaXRfZm9yX2NoYW5uZWxfcmVwb3J0KHZvaWQpCiB7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJmNyd19zZW1hcGhvcmUpOwotCXJldHVybiAwOworCWNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQoKTsKKwl3YWl0X2V2ZW50KGNyd19oYW5kbGVyX3dhaXRfcSwgYXRvbWljX3JlYWQoJmNyd19ucl9yZXEpID09IDApOwogfQotcHVyZV9pbml0Y2FsbChjcndfaW5pdF9zZW1hcGhvcmUpOwogCiAvKgogICogTWFjaGluZSBjaGVja3MgZm9yIHRoZSBjaGFubmVsIHN1YnN5c3RlbSBtdXN0IGJlIGVuYWJsZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDc2NzlhZWUuLjI3NjlkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGFzbS9pc2MuaD4KICNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKQEAgLTIzMiw3ICsyMzMsNyBAQAogCWlmICghZ2V0X2RldmljZSgmc2NoLT5kZXYpKQogCQlyZXR1cm47CiAJc2NoLT50b2RvID0gdG9kbzsKLQlpZiAoIXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2NoLT50b2RvX3dvcmspKSB7CisJaWYgKCFxdWV1ZV93b3JrKGNpb193b3JrX3EsICZzY2gtPnRvZG9fd29yaykpIHsKIAkJLyogQWxyZWFkeSBxdWV1ZWQsIHJlbGVhc2Ugd29ya3F1ZXVlIHJlZi4gKi8KIAkJcHV0X2RldmljZSgmc2NoLT5kZXYpOwogCX0KQEAgLTU0Myw3ICs1NDQsNyBAQAogfQogCiBzdGF0aWMgREVDTEFSRV9XT1JLKHNsb3dfcGF0aF93b3JrLCBjc3Nfc2xvd19wYXRoX2Z1bmMpOwotc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNsb3dfcGF0aF93cTsKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjaW9fd29ya19xOwogCiB2b2lkIGNzc19zY2hlZHVsZV9ldmFsKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkKQogewpAQCAtNTUyLDcgKzU1Myw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfc2NoX2FkZChzbG93X3N1YmNoYW5uZWxfc2V0LCBzY2hpZCk7CiAJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAxKTsKLQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJnNsb3dfcGF0aF93b3JrKTsKKwlxdWV1ZV93b3JrKGNpb193b3JrX3EsICZzbG93X3BhdGhfd29yayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtNTYzLDcgKzU2NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfZmlsbChzbG93X3N1YmNoYW5uZWxfc2V0KTsKIAlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOworCXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJnNsb3dfcGF0aF93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogfQogCkBAIC01OTQsMTQgKzU5NSwxNCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlkc2V0X2FkZF9zZXQoc2xvd19zdWJjaGFubmVsX3NldCwgdW5yZWdfc2V0KTsKIAlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOworCXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJnNsb3dfcGF0aF93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlkc2V0X2ZyZWUodW5yZWdfc2V0KTsKIH0KIAogdm9pZCBjc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKHZvaWQpCiB7Ci0JZmx1c2hfd29ya3F1ZXVlKHNsb3dfcGF0aF93cSk7CisJZmx1c2hfd29ya3F1ZXVlKGNpb193b3JrX3EpOwogfQogCiAvKiBTY2hlZHVsZSByZXByb2Jpbmcgb2YgYWxsIHVucmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KQEAgLTk5MiwxMiArOTkzLDIxIEBACiAJcmV0ID0gY3NzX2J1c19pbml0KCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQorCWNpb193b3JrX3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY2lvIik7CisJaWYgKCFjaW9fd29ya19xKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2J1czsKKwl9CiAJcmV0ID0gaW9fc3ViY2hhbm5lbF9pbml0KCk7CiAJaWYgKHJldCkKLQkJY3NzX2J1c19jbGVhbnVwKCk7CisJCWdvdG8gb3V0X3dxOwogCiAJcmV0dXJuIHJldDsKK291dF93cToKKwlkZXN0cm95X3dvcmtxdWV1ZShjaW9fd29ya19xKTsKK291dF9idXM6CisJY3NzX2J1c19jbGVhbnVwKCk7CisJcmV0dXJuIHJldDsKIH0KIHN1YnN5c19pbml0Y2FsbChjaGFubmVsX3N1YnN5c3RlbV9pbml0KTsKIApAQCAtMTAwNiwxMCArMTAxNiwyNSBAQAogCXN0cnVjdCBjc3NfZHJpdmVyICpjc3NkcnYgPSB0b19jc3Nkcml2ZXIoZHJ2KTsKIAogCWlmIChjc3NkcnYtPnNldHRsZSkKLQkJY3NzZHJ2LT5zZXR0bGUoKTsKKwkJcmV0dXJuIGNzc2Rydi0+c2V0dGxlKCk7CiAJcmV0dXJuIDA7CiB9CiAKK2ludCBjc3NfY29tcGxldGVfd29yayh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiBXYWl0IGZvciB0aGUgZXZhbHVhdGlvbiBvZiBzdWJjaGFubmVscyB0byBmaW5pc2guICovCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNzc19ldmFsX3dxLAorCQkJCSAgICAgICBhdG9taWNfcmVhZCgmY3NzX2V2YWxfc2NoZWR1bGVkKSA9PSAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlRSOworCWZsdXNoX3dvcmtxdWV1ZShjaW9fd29ya19xKTsKKwkvKiBXYWl0IGZvciB0aGUgc3ViY2hhbm5lbCB0eXBlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHRvIGZpbmlzaCAqLworCXJldHVybiBidXNfZm9yX2VhY2hfZHJ2KCZjc3NfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIGNzc19zZXR0bGUpOworfQorCisKIC8qCiAgKiBXYWl0IGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgZGV2aWNlcyB0byBmaW5pc2gsIHRvIG1ha2Ugc3VyZSB3ZSBhcmUKICAqIGRvbmUgd2l0aCBvdXIgc2V0dXAgaWYgdGhlIHNlYXJjaCBmb3IgdGhlIHJvb3QgZGV2aWNlIHN0YXJ0cy4KQEAgLTEwMTgsMTMgKzEwNDMsNDEgQEAKIHsKIAkvKiBTdGFydCBpbml0aWFsIHN1YmNoYW5uZWwgZXZhbHVhdGlvbi4gKi8KIAljc3Nfc2NoZWR1bGVfZXZhbF9hbGwoKTsKLQkvKiBXYWl0IGZvciB0aGUgZXZhbHVhdGlvbiBvZiBzdWJjaGFubmVscyB0byBmaW5pc2guICovCi0Jd2FpdF9ldmVudChjc3NfZXZhbF93cSwgYXRvbWljX3JlYWQoJmNzc19ldmFsX3NjaGVkdWxlZCkgPT0gMCk7Ci0JLyogV2FpdCBmb3IgdGhlIHN1YmNoYW5uZWwgdHlwZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0byBmaW5pc2ggKi8KLQlyZXR1cm4gYnVzX2Zvcl9lYWNoX2RydigmY3NzX2J1c190eXBlLCBOVUxMLCBOVUxMLCBjc3Nfc2V0dGxlKTsKKwljc3NfY29tcGxldGVfd29yaygpOworCXJldHVybiAwOwogfQogc3Vic3lzX2luaXRjYWxsX3N5bmMoY2hhbm5lbF9zdWJzeXN0ZW1faW5pdF9zeW5jKTsKIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgc3NpemVfdCBjaW9fc2V0dGxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCByZXQ7CisKKwkvKiBIYW5kbGUgcGVuZGluZyBDUlcncy4gKi8KKwljcndfd2FpdF9mb3JfY2hhbm5lbF9yZXBvcnQoKTsKKwlyZXQgPSBjc3NfY29tcGxldGVfd29yaygpOworCisJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaW9fc2V0dGxlX3Byb2NfZm9wcyA9IHsKKwkud3JpdGUgPSBjaW9fc2V0dGxlX3dyaXRlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2lvX3NldHRsZV9pbml0KHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGUoImNpb19zZXR0bGUiLCBTX0lXVVNSLCBOVUxMLAorCQkJICAgICZjaW9fc2V0dGxlX3Byb2NfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoY2lvX3NldHRsZV9pbml0KTsKKyNlbmRpZiAvKkNPTkZJR19QUk9DX0ZTKi8KKwogaW50IHNjaF9pc19wc2V1ZG9fc2NoKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7CiAJcmV0dXJuIHNjaCA9PSB0b19jc3Moc2NoLT5kZXYucGFyZW50KS0+cHNldWRvX3N1YmNoYW5uZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaAppbmRleCBmZTg0YjkyLi43ZTM3ODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKQEAgLTk1LDcgKzk1LDcgQEAKIAlpbnQgKCpmcmVlemUpKHN0cnVjdCBzdWJjaGFubmVsICopOwogCWludCAoKnRoYXcpIChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIAlpbnQgKCpyZXN0b3JlKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKLQl2b2lkICgqc2V0dGxlKSh2b2lkKTsKKwlpbnQgKCpzZXR0bGUpKHZvaWQpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC0xNDYsMTIgKzE0NiwxMyBAQAogLyogSGVscGVyIGZ1bmN0aW9ucyB0byBidWlsZCBsaXN0cyBmb3IgdGhlIHNsb3cgcGF0aC4gKi8KIHZvaWQgY3NzX3NjaGVkdWxlX2V2YWwoc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpOwogdm9pZCBjc3Nfc2NoZWR1bGVfZXZhbF9hbGwodm9pZCk7CitpbnQgY3NzX2NvbXBsZXRlX3dvcmsodm9pZCk7CiAKIGludCBzY2hfaXNfcHNldWRvX3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIHN0cnVjdCBzY2hpYjsKIGludCBjc3Nfc2NoX2lzX3ZhbGlkKHN0cnVjdCBzY2hpYiAqKTsKIAotZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzbG93X3BhdGhfd3E7CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNpb193b3JrX3E7CiB2b2lkIGNzc193YWl0X2Zvcl9zbG93X3BhdGgodm9pZCk7CiB2b2lkIGNzc19zY2hlZF9zY2hfdG9kbyhzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBlbnVtIHNjaF90b2RvIHRvZG8pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCBhNmM3ZDU0Li5jNmFiYjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTEzNiw3ICsxMzYsNiBAQAogc3RhdGljIGludCBpb19zdWJjaGFubmVsX2NocF9ldmVudChzdHJ1Y3Qgc3ViY2hhbm5lbCAqLCBzdHJ1Y3QgY2hwX2xpbmsgKiwKIAkJCQkgICBpbnQpOwogc3RhdGljIHZvaWQgcmVjb3ZlcnlfZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpOwotc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNjd19kZXZpY2Vfd29yazsKIHdhaXRfcXVldWVfaGVhZF90IGNjd19kZXZpY2VfaW5pdF93cTsKIGF0b21pY190IGNjd19kZXZpY2VfaW5pdF9jb3VudDsKIApAQCAtMTU5LDExICsxNTgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW9fc3ViY2hhbm5lbF9zZXR0bGUodm9pZCkKK3N0YXRpYyBpbnQgaW9fc3ViY2hhbm5lbF9zZXR0bGUodm9pZCkKIHsKLQl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKLQkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7Ci0JZmx1c2hfd29ya3F1ZXVlKGNjd19kZXZpY2Vfd29yayk7CisJaW50IHJldDsKKworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjY3dfZGV2aWNlX2luaXRfd3EsCisJCQkJYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5UUjsKKwlmbHVzaF93b3JrcXVldWUoY2lvX3dvcmtfcSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3NzX2RyaXZlciBpb19zdWJjaGFubmVsX2RyaXZlciA9IHsKQEAgLTE4OCwyNyArMTkyLDEzIEBACiAJYXRvbWljX3NldCgmY2N3X2RldmljZV9pbml0X2NvdW50LCAwKTsKIAlzZXR1cF90aW1lcigmcmVjb3ZlcnlfdGltZXIsIHJlY292ZXJ5X2Z1bmMsIDApOwogCi0JY2N3X2RldmljZV93b3JrID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImNpbyIpOwotCWlmICghY2N3X2RldmljZV93b3JrKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzbG93X3BhdGhfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3Nsb3djcnciKTsKLQlpZiAoIXNsb3dfcGF0aF93cSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9lcnI7Ci0JfQotCWlmICgocmV0ID0gYnVzX3JlZ2lzdGVyICgmY2N3X2J1c190eXBlKSkpCi0JCWdvdG8gb3V0X2VycjsKLQorCXJldCA9IGJ1c19yZWdpc3RlcigmY2N3X2J1c190eXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCXJldCA9IGNzc19kcml2ZXJfcmVnaXN0ZXIoJmlvX3N1YmNoYW5uZWxfZHJpdmVyKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9lcnI7CisJCWJ1c191bnJlZ2lzdGVyKCZjY3dfYnVzX3R5cGUpOwogCi0JcmV0dXJuIDA7Ci1vdXRfZXJyOgotCWlmIChjY3dfZGV2aWNlX3dvcmspCi0JCWRlc3Ryb3lfd29ya3F1ZXVlKGNjd19kZXZpY2Vfd29yayk7Ci0JaWYgKHNsb3dfcGF0aF93cSkKLQkJZGVzdHJveV93b3JrcXVldWUoc2xvd19wYXRoX3dxKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzQ4LDcgKzEzMzgsNyBAQAogCQkvKiBOb3Qgb3BlcmF0aW9uYWwuICovCiAJCWlmICghY2RldikKIAkJCXJldHVybiBJT19TQ0hfVU5SRUc7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpICE9IE5PVElGWV9PSykKIAkJCXJldHVybiBJT19TQ0hfVU5SRUc7CiAJCXJldHVybiBJT19TQ0hfT1JQSF9VTlJFRzsKIAl9CkBAIC0xMzU2LDEyICsxMzQ2LDEyIEBACiAJaWYgKCFjZGV2KQogCQlyZXR1cm4gSU9fU0NIX0FUVEFDSDsKIAlpZiAoc2NoLT5zY2hpYi5wbWN3LmRldiAhPSBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8pIHsKLQkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgIT0gTk9USUZZX09LKQogCQkJcmV0dXJuIElPX1NDSF9VTlJFR19BVFRBQ0g7CiAJCXJldHVybiBJT19TQ0hfT1JQSF9BVFRBQ0g7CiAJfQogCWlmICgoc2NoLT5zY2hpYi5wbWN3LnBhbSAmIHNjaC0+b3BtKSA9PSAwKSB7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpICE9IE5PVElGWV9PSykKIAkJCXJldHVybiBJT19TQ0hfVU5SRUc7CiAJCXJldHVybiBJT19TQ0hfRElTQzsKIAl9CkBAIC0xNDEwLDYgKzE0MDAsMTIgQEAKIAkJcmMgPSAwOwogCQlnb3RvIG91dF91bmxvY2s7CiAJY2FzZSBJT19TQ0hfVkVSSUZZOgorCQlpZiAoY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcgPT0gMSkgeworCQkJaWYgKGNpb19lbmFibGVfc3ViY2hhbm5lbChzY2gsICh1MzIpKGFkZHJfdClzY2gpKSB7CisJCQkJY2N3X2RldmljZV9zZXRfbm90b3BlcihjZGV2KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCQkvKiBUcmlnZ2VyIHBhdGggdmVyaWZpY2F0aW9uLiAqLwogCQlpb19zdWJjaGFubmVsX3ZlcmlmeShzY2gpOwogCQlyYyA9IDA7CkBAIC0xNDQ4LDcgKzE0NDQsOCBAQAogCQlicmVhazsKIAljYXNlIElPX1NDSF9VTlJFR19BVFRBQ0g6CiAJCS8qIFVucmVnaXN0ZXIgY2N3IGRldmljZS4gKi8KLQkJY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOworCQlpZiAoIWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlc3VtaW5nKQorCQkJY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTE0NTcsNyArMTQ1NCw4IEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIElPX1NDSF9PUlBIX1VOUkVHOgogCWNhc2UgSU9fU0NIX1VOUkVHOgotCQljc3Nfc2NoX2RldmljZV91bnJlZ2lzdGVyKHNjaCk7CisJCWlmICghY2RldiB8fCAhY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcpCisJCQljc3Nfc2NoX2RldmljZV91bnJlZ2lzdGVyKHNjaCk7CiAJCWJyZWFrOwogCWNhc2UgSU9fU0NIX09SUEhfQVRUQUNIOgogCWNhc2UgSU9fU0NIX1VOUkVHX0FUVEFDSDoKQEAgLTE3NzksMjYgKzE3NzcsNDIgQEAKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAotCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkKLQkJZ290byBvdXQ7CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOworCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkgeworCQljaW9fZW5hYmxlX3N1YmNoYW5uZWwoc2NoLCAodTMyKShhZGRyX3Qpc2NoKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAkvKgogCSAqIFdoaWxlIHdlIHdlcmUgc2xlZXBpbmcsIGRldmljZXMgbWF5IGhhdmUgZ29uZSBvciBiZWNvbWUKIAkgKiBhdmFpbGFibGUgYWdhaW4uIEtpY2sgcmUtZGV0ZWN0aW9uLgogCSAqLwotCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKIAljZGV2LT5wcml2YXRlLT5mbGFncy5yZXN1bWluZyA9IDE7CisJY3NzX3NjaGVkdWxlX2V2YWwoc2NoLT5zY2hpZCk7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CisJY3NzX2NvbXBsZXRlX3dvcmsoKTsKKworCS8qIGNkZXYgbWF5IGhhdmUgYmVlbiBtb3ZlZCB0byBhIGRpZmZlcmVudCBzdWJjaGFubmVsLiAqLworCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOworCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT05MSU5FICYmCisJICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PRkZMSU5FKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAljY3dfZGV2aWNlX3JlY29nbml0aW9uKGNkZXYpOwogCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCXdhaXRfZXZlbnQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLCBkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpIHx8CiAJCSAgIGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURUQpOwotb3V0OgorCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKworb3V0X3VubG9jazoKIAljZGV2LT5wcml2YXRlLT5mbGFncy5yZXN1bWluZyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcmVzdW1lX2hhbmRsZV9ib3hlZChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9CT1hFRDsKLQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSkKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSA9PSBOT1RJRllfT0spCiAJCXJldHVybiAwOwogCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCXJldHVybiAtRU5PREVWOwpAQCAtMTgwNyw3ICsxODIxLDcgQEAKIHN0YXRpYyBpbnQgcmVzdW1lX2hhbmRsZV9kaXNjKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRDsKLQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgPT0gTk9USUZZX09LKQogCQlyZXR1cm4gMDsKIAljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTE4MTYsNDAgKzE4MzAsMzEgQEAKIHN0YXRpYyBpbnQgY2N3X2RldmljZV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IHRvX2Njd2RldihkZXYpOwotCXN0cnVjdCBzdWJjaGFubmVsICpzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwotCWludCByZXQgPSAwLCBjbV9lbmFibGVkOworCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CisJaW50IHJldCA9IDA7CiAKIAlfX2Njd19kZXZpY2VfcG1fcmVzdG9yZShjZGV2KTsKKwlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKLQlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpIHsKLQkJY2lvX2VuYWJsZV9zdWJjaGFubmVsKHNjaCwgKHUzMikoYWRkcl90KXNjaCk7Ci0JCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOworCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkKIAkJZ290byBvdXRfcmVzdG9yZTsKLQl9Ci0JY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOworCiAJLyogY2hlY2sgcmVjb2duaXRpb24gcmVzdWx0cyAqLwogCXN3aXRjaCAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUpIHsKIAljYXNlIERFVl9TVEFURV9PRkZMSU5FOgorCWNhc2UgREVWX1NUQVRFX09OTElORToKKwkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOwogCQlicmVhazsKIAljYXNlIERFVl9TVEFURV9CT1hFRDoKIAkJcmV0ID0gcmVzdW1lX2hhbmRsZV9ib3hlZChjZGV2KTsKLQkJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJZ290byBvdXRfcmVzdG9yZTsKLQljYXNlIERFVl9TVEFURV9ESVNDT05ORUNURUQ6Ci0JCWdvdG8gb3V0X2Rpc2NfdW5sb2NrOwogCWRlZmF1bHQ6Ci0JCWdvdG8gb3V0X3VucmVnX3VubG9jazsKLQl9Ci0JLyogY2hlY2sgaWYgdGhlIGRldmljZSBpZCBoYXMgY2hhbmdlZCAqLwotCWlmIChzY2gtPnNjaGliLnBtY3cuZGV2ICE9IGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubykgewotCQlDSU9fTVNHX0VWRU5UKDAsICJyZXN1bWU6IHNjaCAwLiV4LiUwNHg6IGZhaWxlZCAoZGV2bm8gIgotCQkJICAgICAgImNoYW5nZWQgZnJvbSAlMDR4IHRvICUwNHgpXG4iLAotCQkJICAgICAgc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGlkLnNjaF9ubywKLQkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywKLQkJCSAgICAgIHNjaC0+c2NoaWIucG1jdy5kZXYpOwotCQlnb3RvIG91dF91bnJlZ191bmxvY2s7CisJCXJldCA9IHJlc3VtZV9oYW5kbGVfZGlzYyhjZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXRfcmVzdG9yZTsKIAl9CiAJLyogY2hlY2sgaWYgdGhlIGRldmljZSB0eXBlIGhhcyBjaGFuZ2VkICovCiAJaWYgKCFjY3dfZGV2aWNlX3Rlc3Rfc2Vuc2VfZGF0YShjZGV2KSkgewpAQCAtMTg1OCwyNCArMTg2MywzMCBAQAogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCWlmICghY2Rldi0+b25saW5lKSB7Ci0JCXJldCA9IDA7CisJaWYgKCFjZGV2LT5vbmxpbmUpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChjY3dfZGV2aWNlX29ubGluZShjZGV2KSkgeworCQlyZXQgPSByZXN1bWVfaGFuZGxlX2Rpc2MoY2Rldik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X3Jlc3RvcmU7CisJfQorCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOworCXdhaXRfZXZlbnQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLCBkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpKTsKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CisKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX09QRVIpID09IE5PVElGWV9CQUQpIHsKKwkJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CisJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JcmV0ID0gY2N3X2RldmljZV9vbmxpbmUoY2Rldik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZGlzY191bmxvY2s7CiAKLQljbV9lbmFibGVkID0gY2Rldi0+cHJpdmF0ZS0+Y21iICE9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7Ci0KLQl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSk7Ci0JaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PTkxJTkUpIHsKLQkJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwotCQlnb3RvIG91dF9kaXNjX3VubG9jazsKLQl9Ci0JaWYgKGNtX2VuYWJsZWQpIHsKKwkvKiByZWVuYWJsZSBjbWYsIGlmIG5lZWRlZCAqLworCWlmIChjZGV2LT5wcml2YXRlLT5jbWIpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJCXJldCA9IGNjd19zZXRfY21mKGNkZXYsIDEpOworCQlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CiAJCWlmIChyZXQpIHsKIAkJCUNJT19NU0dfRVZFTlQoMiwgInJlc3VtZTogY2RldiAwLiV4LiUwNHg6IGNtZiBmYWlsZWQgIgogCQkJCSAgICAgICIocmM9JWQpXG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKQEAgLTE4ODUsMjEgKzE4OTYsMTEgQEAKIAl9CiAKIG91dF9yZXN0b3JlOgorCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCWlmIChjZGV2LT5vbmxpbmUgJiYgY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+cmVzdG9yZSkKIAkJcmV0ID0gY2Rldi0+ZHJ2LT5yZXN0b3JlKGNkZXYpOwotb3V0OgogCXJldHVybiByZXQ7CiAKLW91dF9kaXNjX3VubG9jazoKLQlyZXQgPSByZXN1bWVfaGFuZGxlX2Rpc2MoY2Rldik7Ci0Jc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlnb3RvIG91dF9yZXN0b3JlOwotCi1vdXRfdW5yZWdfdW5sb2NrOgotCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUdfRVZBTCk7Ci0JcmV0ID0gLUVOT0RFVjsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTIwMjgsNyArMjAyOSw3IEBACiAJLyogR2V0IHdvcmtxdWV1ZSByZWYuICovCiAJaWYgKCFnZXRfZGV2aWNlKCZjZGV2LT5kZXYpKQogCQlyZXR1cm47Ci0JaWYgKCFxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJmNkZXYtPnByaXZhdGUtPnRvZG9fd29yaykpIHsKKwlpZiAoIXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJmNkZXYtPnByaXZhdGUtPnRvZG9fd29yaykpIHsKIAkJLyogQWxyZWFkeSBxdWV1ZWQsIHJlbGVhc2Ugd29ya3F1ZXVlIHJlZi4gKi8KIAkJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKIAl9CkBAIC0yMDQxLDUgKzIwNDIsNCBAQAogRVhQT1JUX1NZTUJPTChjY3dfZHJpdmVyX3VucmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChnZXRfY2N3ZGV2X2J5X2J1c2lkKTsKIEVYUE9SVF9TWU1CT0woY2N3X2J1c190eXBlKTsKLUVYUE9SVF9TWU1CT0woY2N3X2RldmljZV93b3JrKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNjd19kZXZpY2VfZ2V0X3N1YmNoYW5uZWxfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaCBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKaW5kZXggYmNmZTEzZS4uMzc5ZGUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlICJpb19zY2guaCIKIAogLyoKQEAgLTcxLDcgKzcxLDYgQEAKIAkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKTsKIH0KIAotZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjY3dfZGV2aWNlX3dvcms7CiBleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOwogZXh0ZXJuIGF0b21pY190IGNjd19kZXZpY2VfaW5pdF9jb3VudDsKIGludCBfX2luaXQgaW9fc3ViY2hhbm5lbF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCBhZTc2MDY1Li5jNTZhYjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtMzEzLDIxICszMTMsNDMgQEAKIAl9CiB9CiAKKy8qKgorICAqIGNjd19kZXZpY2Vfbm90aWZ5KCkgLSBpbmZvcm0gdGhlIGRldmljZSdzIGRyaXZlciBhYm91dCBhbiBldmVudAorICAqIEBjZGV2OiBkZXZpY2UgZm9yIHdoaWNoIGFuIGV2ZW50IG9jY3VyZWQKKyAgKiBAZXZlbnQ6IGV2ZW50IHRoYXQgb2NjdXJyZWQKKyAgKgorICAqIFJldHVybnM6CisgICogICAtJUVJTlZBTCBpZiB0aGUgZGV2aWNlIGlzIG9mZmxpbmUgb3IgaGFzIG5vIGRyaXZlci4KKyAgKiAgIC0lRU9QTk9UU1VQUCBpZiB0aGUgZGV2aWNlJ3MgZHJpdmVyIGhhcyBubyBub3RpZmllciByZWdpc3RlcmVkLgorICAqICAgJU5PVElGWV9PSyBpZiB0aGUgZHJpdmVyIHdhbnRzIHRvIGtlZXAgdGhlIGRldmljZS4KKyAgKiAgICVOT1RJRllfQkFEIGlmIHRoZSBkcml2ZXIgZG9lc24ndCB3YW50IHRvIGtlZXAgdGhlIGRldmljZS4KKyAgKi8KIGludCBjY3dfZGV2aWNlX25vdGlmeShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IGV2ZW50KQogeworCWludCByZXQgPSAtRUlOVkFMOworCiAJaWYgKCFjZGV2LT5kcnYpCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAlpZiAoIWNkZXYtPm9ubGluZSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCUNJT19NU0dfRVZFTlQoMiwgIm5vdGlmeSBjYWxsZWQgZm9yIDAuJXguJTA0eCwgZXZlbnQ9JWRcbiIsCiAJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sCiAJCSAgICAgIGV2ZW50KTsKLQlyZXR1cm4gY2Rldi0+ZHJ2LT5ub3RpZnkgPyBjZGV2LT5kcnYtPm5vdGlmeShjZGV2LCBldmVudCkgOiAwOworCWlmICghY2Rldi0+ZHJ2LT5ub3RpZnkpIHsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoY2Rldi0+ZHJ2LT5ub3RpZnkoY2RldiwgZXZlbnQpKQorCQlyZXQgPSBOT1RJRllfT0s7CisJZWxzZQorCQlyZXQgPSBOT1RJRllfQkFEOworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNjd19kZXZpY2Vfb3Blcl9ub3RpZnkoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7Ci0JaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19PUEVSKSkgeworCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fT1BFUikgPT0gTk9USUZZX09LKSB7CiAJCS8qIFJlZW5hYmxlIGNoYW5uZWwgbWVhc3VyZW1lbnRzLCBpZiBuZWVkZWQuICovCiAJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fRU5BQkxFX0NNRik7CiAJCXJldHVybjsKQEAgLTM2MSwxNCArMzgzLDE1IEBACiAJY2FzZSBERVZfU1RBVEVfQk9YRUQ6CiAJCUNJT19NU0dfRVZFTlQoMCwgIkJveGVkIGRldmljZSAlMDR4IG9uIHN1YmNoYW5uZWwgJTA0eFxuIiwKIAkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgc2NoLT5zY2hpZC5zY2hfbm8pOwotCQlpZiAoY2Rldi0+b25saW5lICYmICFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fQk9YRUQpKQorCQlpZiAoY2Rldi0+b25saW5lICYmCisJCSAgICBjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fQk9YRUQpICE9IE5PVElGWV9PSykKIAkJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgREVWX1NUQVRFX05PVF9PUEVSOgogCQlDSU9fTVNHX0VWRU5UKDAsICJEZXZpY2UgJTA0eCBnb25lIG9uIHN1YmNoYW5uZWwgJTA0eFxuIiwKIAkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgc2NoLT5zY2hpZC5zY2hfbm8pOwotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSAhPSBOT1RJRllfT0spCiAJCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAkJZWxzZQogCQkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwpAQCAtMzc4LDcgKzQwMSw3IEBACiAJCUNJT19NU0dfRVZFTlQoMCwgIkRpc2Nvbm5lY3RlZCBkZXZpY2UgJTA0eCBvbiBzdWJjaGFubmVsICIKIAkJCSAgICAgICIlMDR4XG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sCiAJCQkgICAgICBzY2gtPnNjaGlkLnNjaF9ubyk7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpICE9IE5PVElGWV9PSykKIAkJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCQllbHNlCiAJCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CkBAIC01ODYsNyArNjA5LDcgQEAKIHN0YXRpYyB2b2lkIGNjd19kZXZpY2VfZ2VuZXJpY19ub3RvcGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAogCQkJCSAgICAgICBlbnVtIGRldl9ldmVudCBkZXZfZXZlbnQpCiB7Ci0JaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSAhPSBOT1RJRllfT0spCiAJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCWVsc2UKIAkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwpAQCAtNjY3LDcgKzY5MCw3IEBACiAJc3RydWN0IGlyYiAqaXJiOwogCWludCBpc19jbWQ7CiAKLQlpcmIgPSAoc3RydWN0IGlyYiAqKSBfX0xDX0lSQjsKKwlpcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCWlzX2NtZCA9ICFzY3N3X2lzX3RtKCZpcmItPnNjc3cpOwogCS8qIENoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHQuICovCiAJaWYgKCFzY3N3X2lzX3NvbGljaXRlZCgmaXJiLT5zY3N3KSkgewpAQCAtNzMyLDcgKzc1NSw3IEBACiB7CiAJc3RydWN0IGlyYiAqaXJiOwogCi0JaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7CisJaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAkvKiBDaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0LiAqLwogCWlmIChzY3N3X3N0Y3RsKCZpcmItPnNjc3cpID09CiAJICAgIChTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EIHwgU0NTV19TVENUTF9BTEVSVF9TVEFUVVMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDQ0ZjJmNmEuLjQ4YWEwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0yMDgsMTggKzIwOCwyNyBAQAogCXVuc2lnbmVkIGludCBlcWJzX3BhcnRpYWw7CiAJdW5zaWduZWQgaW50IHNxYnM7CiAJdW5zaWduZWQgaW50IHNxYnNfcGFydGlhbDsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdHJ1Y3QgcWRpb19xdWV1ZV9wZXJmX3N0YXQgeworCS8qCisJICogU29ydGVkIGludG8gb3JkZXItMiBidWNrZXRzOiAxLCAyLTMsIDQtNywgLi4uIDY0LTEyNywgMTI4LgorCSAqIFNpbmNlIG1heC4gMTI3IFNCQUxzIGFyZSBzY2FubmVkIHJldXNlIGVudHJ5IGZvciAxMjggYXMgcXVldWUgZnVsbAorCSAqIGFrYSAxMjcgU0JBTHMgZm91bmQuCisJICovCisJdW5zaWduZWQgaW50IG5yX3NiYWxzWzhdOworCXVuc2lnbmVkIGludCBucl9zYmFsX2Vycm9yOworCXVuc2lnbmVkIGludCBucl9zYmFsX25vcDsKKwl1bnNpZ25lZCBpbnQgbnJfc2JhbF90b3RhbDsKIH07CiAKIHN0cnVjdCBxZGlvX2lucHV0X3EgewogCS8qIGlucHV0IGJ1ZmZlciBhY2tub3dsZWRnZW1lbnQgZmxhZyAqLwogCWludCBwb2xsaW5nOwotCiAJLyogZmlyc3QgQUNLJ2VkIGJ1ZmZlciAqLwogCWludCBhY2tfc3RhcnQ7Ci0KIAkvKiBob3cgbXVjaCBzYmFscyBhcmUgYWNrbm93bGVkZ2VkIHdpdGggcWVic20gKi8KIAlpbnQgYWNrX2NvdW50OwotCiAJLyogbGFzdCB0aW1lIG9mIG5vdGljaW5nIGluY29taW5nIGRhdGEgKi8KIAl1NjQgdGltZXN0YW1wOwogfTsKQEAgLTIyNywyMSArMjM2LDQ3IEBACiBzdHJ1Y3QgcWRpb19vdXRwdXRfcSB7CiAJLyogUENJcyBhcmUgZW5hYmxlZCBmb3IgdGhlIHF1ZXVlICovCiAJaW50IHBjaV9vdXRfZW5hYmxlZDsKLQogCS8qIElRRElPOiBvdXRwdXQgbXVsdGlwbGUgYnVmZmVycyAoZW5oYW5jZWQgU0lHQSkgKi8KIAlpbnQgdXNlX2VuaF9zaWdhOwotCiAJLyogdGltZXIgdG8gY2hlY2sgZm9yIG1vcmUgb3V0Ym91bmQgd29yayAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogfTsKIAorLyoKKyAqIE5vdGUgb24gY2FjaGUgYWxpZ25tZW50OiBncm91cGVkIHNsc2IgYW5kIHdyaXRlIG1vc3RseSBkYXRhIGF0IHRoZSBiZWdpbm5pbmcKKyAqIHNiYWxbXSBpcyByZWFkLW9ubHkgYW5kIHN0YXJ0cyBvbiBhIG5ldyBjYWNoZWxpbmUgZm9sbG93ZWQgYnkgcmVhZCBtb3N0bHkuCisgKi8KIHN0cnVjdCBxZGlvX3EgewogCXN0cnVjdCBzbHNiIHNsc2I7CisKIAl1bmlvbiB7CiAJCXN0cnVjdCBxZGlvX2lucHV0X3EgaW47CiAJCXN0cnVjdCBxZGlvX291dHB1dF9xIG91dDsKIAl9IHU7CiAKKwkvKgorCSAqIGluYm91bmQ6IG5leHQgYnVmZmVyIHRoZSBwcm9ncmFtIHNob3VsZCBjaGVjayBmb3IKKwkgKiBvdXRib3VuZDogbmV4dCBidWZmZXIgdG8gY2hlY2sgaWYgYWRhcHRlciBwcm9jZXNzZWQgaXQKKwkgKi8KKwlpbnQgZmlyc3RfdG9fY2hlY2s7CisKKwkvKiBmaXJzdF90b19jaGVjayBvZiB0aGUgbGFzdCB0aW1lICovCisJaW50IGxhc3RfbW92ZTsKKworCS8qIGJlZ2lubmluZyBwb3NpdGlvbiBmb3IgY2FsbGluZyB0aGUgcHJvZ3JhbSAqLworCWludCBmaXJzdF90b19raWNrOworCisJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdXNlIGJ5IHRoZSBhZGFwdGVyICovCisJYXRvbWljX3QgbnJfYnVmX3VzZWQ7CisKKwkvKiBlcnJvciBjb25kaXRpb24gZHVyaW5nIGEgZGF0YSB0cmFuc2ZlciAqLworCXVuc2lnbmVkIGludCBxZGlvX2Vycm9yOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CisJc3RydWN0IHFkaW9fcXVldWVfcGVyZl9zdGF0IHFfc3RhdHM7CisKKwlzdHJ1Y3QgcWRpb19idWZmZXIgKnNiYWxbUURJT19NQVhfQlVGRkVSU19QRVJfUV0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCiAJLyogcXVldWUgbnVtYmVyICovCiAJaW50IG5yOwogCkBAIC0yNTcsMzIgKzI5Miw5IEBACiAJLyogdXBwZXItbGF5ZXIgcHJvZ3JhbSBoYW5kbGVyICovCiAJcWRpb19oYW5kbGVyX3QgKCpoYW5kbGVyKTsKIAotCS8qCi0JICogaW5ib3VuZDogbmV4dCBidWZmZXIgdGhlIHByb2dyYW0gc2hvdWxkIGNoZWNrIGZvcgotCSAqIG91dGJvdW5kOiBuZXh0IGJ1ZmZlciB0byBjaGVjayBmb3IgaGF2aW5nIGJlZW4gcHJvY2Vzc2VkCi0JICogYnkgdGhlIGNhcmQKLQkgKi8KLQlpbnQgZmlyc3RfdG9fY2hlY2s7Ci0KLQkvKiBmaXJzdF90b19jaGVjayBvZiB0aGUgbGFzdCB0aW1lICovCi0JaW50IGxhc3RfbW92ZTsKLQotCS8qIGJlZ2lubmluZyBwb3NpdGlvbiBmb3IgY2FsbGluZyB0aGUgcHJvZ3JhbSAqLwotCWludCBmaXJzdF90b19raWNrOwotCi0JLyogbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdXNlIGJ5IHRoZSBhZGFwdGVyICovCi0JYXRvbWljX3QgbnJfYnVmX3VzZWQ7Ci0KLQlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHI7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19xOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwotCi0JLyogZXJyb3IgY29uZGl0aW9uIGR1cmluZyBhIGRhdGEgdHJhbnNmZXIgKi8KLQl1bnNpZ25lZCBpbnQgcWRpb19lcnJvcjsKLQorCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cjsKIAlzdHJ1Y3Qgc2wgKnNsOwotCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQogCS8qCiAJICogV2FybmluZzogTGVhdmUgdGhpcyBtZW1iZXIgYXQgdGhlIGVuZCBzbyBpdCB3b24ndCBiZSBjbGVhcmVkIGluCiAJICogcWRpb19maWxsX3FzLiBBIHBhZ2UgaXMgYWxsb2NhdGVkIHVuZGVyIHRoaXMgcG9pbnRlciBhbmQgdXNlZCBmb3IKQEAgLTMxNywxMiArMzI5LDggQEAKIAlzdHJ1Y3QgcWRpb19zc3FkX2Rlc2Mgc3NxZF9kZXNjOwogCXZvaWQgKCpvcmlnX2hhbmRsZXIpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgaXJiICopOwogCi0Jc3RydWN0IHFkaW9fZGV2X3BlcmZfc3RhdCBwZXJmX3N0YXQ7CiAJaW50IHBlcmZfc3RhdF9lbmFibGVkOwotCS8qCi0JICogV2FybmluZzogTGVhdmUgdGhlc2UgbWVtYmVycyB0b2dldGhlciBhdCB0aGUgZW5kIHNvIHRoZXkgd29uJ3QgYmUKLQkgKiBjbGVhcmVkIGluIHFkaW9fc2V0dXBfaXJxLgotCSAqLworCiAJc3RydWN0IHFkciAqcWRyOwogCXVuc2lnbmVkIGxvbmcgY2hzY19wYWdlOwogCkBAIC0zMzEsNiArMzM5LDcgQEAKIAogCWRlYnVnX2luZm9fdCAqZGVidWdfYXJlYTsKIAlzdHJ1Y3QgbXV0ZXggc2V0dXBfbXV0ZXg7CisJc3RydWN0IHFkaW9fZGV2X3BlcmZfc3RhdCBwZXJmX3N0YXQ7CiB9OwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCkBAIC0zNDEsOSArMzUwLDIwIEBACiAJKGlycS0+cWliLnFmbXQgPT0gUURJT19JUURJT19RRk1UIHx8IFwKIAkgY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmFpZl9vc2EpCiAKLSNkZWZpbmUgcXBlcmYocWRldixhdHRyKQlxZGV2LT5wZXJmX3N0YXQuYXR0cgotI2RlZmluZSBxcGVyZl9pbmMocSxhdHRyKQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpIFwKLQkJCQkJcS0+aXJxX3B0ci0+cGVyZl9zdGF0LmF0dHIrKworI2RlZmluZSBxcGVyZihfX3FkZXYsIF9fYXR0cikJKChfX3FkZXYpLT5wZXJmX3N0YXQuKF9fYXR0cikpCisKKyNkZWZpbmUgcXBlcmZfaW5jKF9fcSwgX19hdHRyKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXN0cnVjdCBxZGlvX2lycSAqcWRldiA9IChfX3EpLT5pcnFfcHRyOwkJCQlcCisJaWYgKHFkZXYtPnBlcmZfc3RhdF9lbmFibGVkKQkJCQkJXAorCQkocWRldi0+cGVyZl9zdGF0Ll9fYXR0cikrKzsJCQkJXAorfSkKKworc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2JhbHNfZXJyb3Ioc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQoreworCXEtPnFfc3RhdHMubnJfc2JhbF9lcnJvciArPSBjb3VudDsKKwlxLT5xX3N0YXRzLm5yX3NiYWxfdG90YWwgKz0gY291bnQ7Cit9CiAKIC8qIHRoZSBoaWdoZXN0IGlxZGlvIHF1ZXVlIGlzIHVzZWQgZm9yIG11bHRpY2FzdCAqLwogc3RhdGljIGlubGluZSBpbnQgbXVsdGljYXN0X291dGJvdW5kKHN0cnVjdCBxZGlvX3EgKnEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCmluZGV4IGY0OTc2MWYuLmM5NGViMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCkBAIC02MCw3ICs2MCw3IEBACiAJc2VxX3ByaW50ZihtLCAiZnRjOiAlZCAgbGFzdF9tb3ZlOiAlZFxuIiwgcS0+Zmlyc3RfdG9fY2hlY2ssIHEtPmxhc3RfbW92ZSk7CiAJc2VxX3ByaW50ZihtLCAicG9sbGluZzogJWQgIGFjayBzdGFydDogJWQgIGFjayBjb3VudDogJWRcbiIsCiAJCSAgIHEtPnUuaW4ucG9sbGluZywgcS0+dS5pbi5hY2tfc3RhcnQsIHEtPnUuaW4uYWNrX2NvdW50KTsKLQlzZXFfcHJpbnRmKG0sICJzbHNiIGJ1ZmZlciBzdGF0ZXM6XG4iKTsKKwlzZXFfcHJpbnRmKG0sICJTQkFMIHN0YXRlczpcbiIpOwogCXNlcV9wcmludGYobSwgInwwICAgICAgfDggICAgICB8MTYgICAgIHwyNCAgICAgfDMyICAgICB8NDAgICAgIHw0OCAgICAgfDU2ICA2M3xcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IGkrKykgewpAQCAtOTcsNiArOTcsMjAgQEAKIAl9CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJ8NjQgICAgIHw3MiAgICAgfDgwICAgICB8ODggICAgIHw5NiAgICAgfDEwNCAgICB8MTEyICAgIHwgICAxMjd8XG4iKTsKKworCXNlcV9wcmludGYobSwgIlxuU0JBTCBzdGF0aXN0aWNzOiIpOworCWlmICghcS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpIHsKKwkJc2VxX3ByaW50ZihtLCAiIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VxX3ByaW50ZihtLCAiXG4xICAgICAgICAgIDIuLiAgICAgICAgNC4uICAgICAgICA4Li4gICAgICAgICIKKwkJICAgIjE2Li4gICAgICAgMzIuLiAgICAgICA2NC4uICAgICAgIDEyN1xuIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocS0+cV9zdGF0cy5ucl9zYmFscyk7IGkrKykKKwkJc2VxX3ByaW50ZihtLCAiJS0xMHUgIiwgcS0+cV9zdGF0cy5ucl9zYmFsc1tpXSk7CisJc2VxX3ByaW50ZihtLCAiXG5FcnJvciAgICAgIE5PUCAgICAgICAgVG90YWxcbiUtMTB1ICUtMTB1ICUtMTB1XG5cbiIsCisJCSAgIHEtPnFfc3RhdHMubnJfc2JhbF9lcnJvciwgcS0+cV9zdGF0cy5ucl9zYmFsX25vcCwKKwkJICAgcS0+cV9zdGF0cy5ucl9zYmFsX3RvdGFsKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxLDkgKzE5NSwxMCBAQAogewogCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcWRpb19xICpxOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWNoYXIgYnVmWzhdOwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCWlmICghaXJxX3B0cikKIAkJcmV0dXJuIDA7CkBAIC0yMDEsNiArMjE2LDEwIEBACiAJY2FzZSAwOgogCQlpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCA9IDA7CiAJCW1lbXNldCgmaXJxX3B0ci0+cGVyZl9zdGF0LCAwLCBzaXplb2YoaXJxX3B0ci0+cGVyZl9zdGF0KSk7CisJCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCisJCQltZW1zZXQoJnEtPnFfc3RhdHMsIDAsIHNpemVvZihxLT5xX3N0YXRzKSk7CisJCWZvcl9lYWNoX291dHB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQorCQkJbWVtc2V0KCZxLT5xX3N0YXRzLCAwLCBzaXplb2YocS0+cV9zdGF0cykpOwogCQlicmVhazsKIAljYXNlIDE6CiAJCWlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDk5OWZlODAuLjIzMmVmMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtMzkyLDYgKzM5MiwyMCBAQAogCQlzZXRfYnVmX3N0YXRlKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zYmFscyhzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCit7CisJaW50IHBvcyA9IDA7CisKKwlxLT5xX3N0YXRzLm5yX3NiYWxfdG90YWwgKz0gY291bnQ7CisJaWYgKGNvdW50ID09IFFESU9fTUFYX0JVRkZFUlNfTUFTSykgeworCQlxLT5xX3N0YXRzLm5yX3NiYWxzWzddKys7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKGNvdW50ID4+PSAxKQorCQlwb3MrKzsKKwlxLT5xX3N0YXRzLm5yX3NiYWxzW3Bvc10rKzsKK30KKwogc3RhdGljIHZvaWQgYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKIHsKIAlxLT5xZGlvX2Vycm9yIHw9IFFESU9fRVJST1JfU0xTQl9TVEFURTsKQEAgLTQ4NywxNiArNTAxLDIyIEBACiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCQlpZiAoYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKSA9PSAwKQogCQkJcXBlcmZfaW5jKHEsIGluYm91bmRfcXVldWVfZnVsbCk7CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCWFjY291bnRfc2JhbHMocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9JTlBVVF9FUlJPUjoKIAkJYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKIAkJLyogcHJvY2VzcyB0aGUgYnVmZmVyLCB0aGUgdXBwZXIgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQgKi8KIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCWFjY291bnRfc2JhbHNfZXJyb3IocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfQ1VfSU5QVVRfRU1QVFk6CiAJY2FzZSBTTFNCX1BfSU5QVVRfTk9UX0lOSVQ6CiAJY2FzZSBTTFNCX1BfSU5QVVRfQUNLOgorCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlxLT5xX3N0YXRzLm5yX3NiYWxfbm9wKys7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJpbiBub3AiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTUxNCw3ICs1MzQsNyBAQAogCiAJaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmUpIHx8IHEtPnFkaW9fZXJyb3IpIHsKIAkJcS0+bGFzdF9tb3ZlID0gYnVmbnI7Ci0JCWlmICghaXNfdGhpbmludF9pcnEocS0+aXJxX3B0cikgJiYgIU1BQ0hJTkVfSVNfVk0pCisJCWlmICghaXNfdGhpbmludF9pcnEocS0+aXJxX3B0cikgJiYgTUFDSElORV9JU19MUEFSKQogCQkJcS0+dS5pbi50aW1lc3RhbXAgPSBnZXRfdXNlY3MoKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlCkBAIC01MzEsNyArNTUxLDcgQEAKIAlxZGlvX3NpZ2Ffc3luY19xKHEpOwogCWdldF9idWZfc3RhdGUocSwgcS0+Zmlyc3RfdG9fY2hlY2ssICZzdGF0ZSwgMCk7CiAKLQlpZiAoc3RhdGUgPT0gU0xTQl9QX0lOUFVUX1BSSU1FRCkKKwlpZiAoc3RhdGUgPT0gU0xTQl9QX0lOUFVUX1BSSU1FRCB8fCBzdGF0ZSA9PSBTTFNCX1BfSU5QVVRfRVJST1IpCiAJCS8qIG1vcmUgd29yayBjb21pbmcgKi8KIAkJcmV0dXJuIDA7CiAKQEAgLTY0MywxNSArNjYzLDIxIEBACiAKIAkJYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKTsKIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCWFjY291bnRfc2JhbHMocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9PVVRQVVRfRVJST1I6CiAJCWFubm91bmNlX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7CiAJCS8qIHByb2Nlc3MgdGhlIGJ1ZmZlciwgdGhlIHVwcGVyIGxheWVyIHdpbGwgdGFrZSBjYXJlIG9mIGl0ICovCiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOworCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlhY2NvdW50X3NiYWxzX2Vycm9yKHEsIGNvdW50KTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX0NVX09VVFBVVF9QUklNRUQ6CiAJCS8qIHRoZSBhZGFwdGVyIGhhcyBub3QgZmV0Y2hlZCB0aGUgb3V0cHV0IHlldCAqLworCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlxLT5xX3N0YXRzLm5yX3NiYWxfbm9wKys7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJvdXQgcHJpbWVkOiUxZCIsIHEtPm5yKTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX1BfT1VUUFVUX05PVF9JTklUOgpAQCAtOTYwLDYgKzk4Niw4IEBACiAJCQlxZGlvX2hhbmRsZV9hY3RpdmF0ZV9jaGVjayhjZGV2LCBpbnRwYXJtLCBjc3RhdCwKIAkJCQkJCSAgIGRzdGF0KTsKIAkJYnJlYWs7CisJY2FzZSBRRElPX0lSUV9TVEFURV9TVE9QUEVEOgorCQlicmVhazsKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKaW5kZXggOGMyZGVhNS4uN2Y0YTc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKQEAgLTMzMywxMCArMzMzLDEwIEBACiAJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uc2xzYmEgPQogCQkodW5zaWduZWQgbG9uZykmaXJxX3B0cl9xc1tpXS0+c2xzYi52YWxbMF07CiAKLQlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ha2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKLQlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ia2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKLQlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ja2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKLQlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ka2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKKwlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ha2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OworCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmJrZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CisJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uY2tleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKKwlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ka2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9xZHIoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLApAQCAtMzUwLDcgKzM1MCw3IEBACiAJaXJxX3B0ci0+cWRyLT5pcWRzeiA9IHNpemVvZihzdHJ1Y3QgcWRlc2ZtdDApIC8gNDsgLyogc2l6ZSBpbiB3b3JkcyAqLwogCWlycV9wdHItPnFkci0+b3Fkc3ogPSBzaXplb2Yoc3RydWN0IHFkZXNmbXQwKSAvIDQ7CiAJaXJxX3B0ci0+cWRyLT5xaWJhID0gKHVuc2lnbmVkIGxvbmcpJmlycV9wdHItPnFpYjsKLQlpcnFfcHRyLT5xZHItPnFrZXkgPSBQQUdFX0RFRkFVTFRfS0VZOworCWlycV9wdHItPnFkci0+cWtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKIAogCWZvciAoaSA9IDA7IGkgPCBxZGlvX2luaXQtPm5vX2lucHV0X3FzOyBpKyspCiAJCV9fcWRpb19hbGxvY2F0ZV9maWxsX3FkcihpcnFfcHRyLCBpcnFfcHRyLT5pbnB1dF9xcywgaSwgMCk7CkBAIC0zODIsNyArMzgyLDE1IEBACiAJc3RydWN0IHFkaW9faXJxICppcnFfcHRyID0gaW5pdF9kYXRhLT5jZGV2LT5wcml2YXRlLT5xZGlvX2RhdGE7CiAJaW50IHJjOwogCi0JbWVtc2V0KGlycV9wdHIsIDAsICgoY2hhciAqKSZpcnFfcHRyLT5xZHIpIC0gKChjaGFyICopaXJxX3B0cikpOworCW1lbXNldCgmaXJxX3B0ci0+cWliLCAwLCBzaXplb2YoaXJxX3B0ci0+cWliKSk7CisJbWVtc2V0KCZpcnFfcHRyLT5zaWdhX2ZsYWcsIDAsIHNpemVvZihpcnFfcHRyLT5zaWdhX2ZsYWcpKTsKKwltZW1zZXQoJmlycV9wdHItPmNjdywgMCwgc2l6ZW9mKGlycV9wdHItPmNjdykpOworCW1lbXNldCgmaXJxX3B0ci0+c3NxZF9kZXNjLCAwLCBzaXplb2YoaXJxX3B0ci0+c3NxZF9kZXNjKSk7CisJbWVtc2V0KCZpcnFfcHRyLT5wZXJmX3N0YXQsIDAsIHNpemVvZihpcnFfcHRyLT5wZXJmX3N0YXQpKTsKKworCWlycV9wdHItPmRlYnVnZnNfZGV2ID0gaXJxX3B0ci0+ZGVidWdmc19wZXJmID0gTlVMTDsKKwlpcnFfcHRyLT5zY2hfdG9rZW4gPSBpcnFfcHRyLT5zdGF0ZSA9IGlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkID0gMDsKKwogCS8qIHdpcGVzIHFpYi5hYywgcmVxdWlyZWQgYnkgYXI3MDYzICovCiAJbWVtc2V0KGlycV9wdHItPnFkciwgMCwgc2l6ZW9mKHN0cnVjdCBxZHIpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKaW5kZXggMDkxZDkwNC4uOTk0MmMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCkBAIC0xOTgsOCArMTk4LDggQEAKIAkJLmNvZGUJPSAweDAwMjEsCiAJfTsKIAlzY3NzY19hcmVhLT5vcGVyYXRpb25fY29kZSA9IDA7Ci0Jc2Nzc2NfYXJlYS0+a3MgPSBQQUdFX0RFRkFVTFRfS0VZOwotCXNjc3NjX2FyZWEtPmtjID0gUEFHRV9ERUZBVUxUX0tFWTsKKwlzY3NzY19hcmVhLT5rcyA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKKwlzY3NzY19hcmVhLT5rYyA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKIAlzY3NzY19hcmVhLT5pc2MgPSBRRElPX0FJUlFfSVNDOwogCXNjc3NjX2FyZWEtPnNjaGlkID0gaXJxX3B0ci0+c2NoaWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKaW5kZXggYzY4YmUyNC4uYmE1MGZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTkxMiwxMjYgKzkxMywxMDUgQEAKICAqLwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqemNyeXB0X2VudHJ5OwogCi1zdGF0aWMgaW50IHNwcmludGNsKHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCSAgICB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgc3ByaW50Y2woc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBobCwgaTsKKwlpbnQgaTsKIAotCWhsID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiUwMXgiLCAodW5zaWduZWQgaW50KSBhZGRyW2ldKTsKLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIgIik7Ci0JcmV0dXJuIGhsOworCQlzZXFfcHJpbnRmKG0sICIlMDF4IiwgKHVuc2lnbmVkIGludCkgYWRkcltpXSk7CisJc2VxX3B1dGMobSwgJyAnKTsKIH0KIAotc3RhdGljIGludCBzcHJpbnRydyh1bnNpZ25lZCBjaGFyICpvdXRhZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkgICAgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIHNwcmludHJ3KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQgaGwsIGlubCwgYywgY3g7CisJaW50IGlubCwgYywgY3g7CiAKLQlobCA9IHNwcmludGYob3V0YWRkciwgIgkgICAiKTsKKwlzZXFfcHJpbnRmKG0sICIJICAgIik7CiAJaW5sID0gMDsKIAlmb3IgKGMgPSAwOyBjIDwgKGxlbiAvIDE2KTsgYysrKSB7Ci0JCWhsICs9IHNwcmludGNsKG91dGFkZHIraGwsIGFkZHIraW5sLCAxNik7CisJCXNwcmludGNsKG0sIGFkZHIraW5sLCAxNik7CiAJCWlubCArPSAxNjsKIAl9CiAJY3ggPSBsZW4lMTY7CiAJaWYgKGN4KSB7Ci0JCWhsICs9IHNwcmludGNsKG91dGFkZHIraGwsIGFkZHIraW5sLCBjeCk7CisJCXNwcmludGNsKG0sIGFkZHIraW5sLCBjeCk7CiAJCWlubCArPSBjeDsKIAl9Ci0JaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiXG4iKTsKLQlyZXR1cm4gaGw7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiB9CiAKLXN0YXRpYyBpbnQgc3ByaW50aHgodW5zaWduZWQgY2hhciAqdGl0bGUsIHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsCi0JCSAgICB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgc3ByaW50aHgodW5zaWduZWQgY2hhciAqdGl0bGUsIHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBobCwgaW5sLCByLCByeDsKKwlpbnQgaW5sLCByLCByeDsKIAotCWhsID0gc3ByaW50ZihvdXRhZGRyLCAiXG4lc1xuIiwgdGl0bGUpOworCXNlcV9wcmludGYobSwgIlxuJXNcbiIsIHRpdGxlKTsKIAlpbmwgPSAwOwogCWZvciAociA9IDA7IHIgPCAobGVuIC8gNjQpOyByKyspIHsKLQkJaGwgKz0gc3ByaW50cncob3V0YWRkcitobCwgYWRkcitpbmwsIDY0KTsKKwkJc3ByaW50cncobSwgYWRkcitpbmwsIDY0KTsKIAkJaW5sICs9IDY0OwogCX0KIAlyeCA9IGxlbiAlIDY0OwogCWlmIChyeCkgewotCQlobCArPSBzcHJpbnRydyhvdXRhZGRyK2hsLCBhZGRyK2lubCwgcngpOworCQlzcHJpbnRydyhtLCBhZGRyK2lubCwgcngpOwogCQlpbmwgKz0gcng7CiAJfQotCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7Ci0JcmV0dXJuIGhsOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCi1zdGF0aWMgaW50IHNwcmludGh4NCh1bnNpZ25lZCBjaGFyICp0aXRsZSwgdW5zaWduZWQgY2hhciAqb3V0YWRkciwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgc3ByaW50aHg0KHVuc2lnbmVkIGNoYXIgKnRpdGxlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCisJCSAgICAgIHVuc2lnbmVkIGludCAqYXJyYXksIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaW50IGhsLCByOworCWludCByOwogCi0JaGwgPSBzcHJpbnRmKG91dGFkZHIsICJcbiVzXG4iLCB0aXRsZSk7CisJc2VxX3ByaW50ZihtLCAiXG4lc1xuIiwgdGl0bGUpOwogCWZvciAociA9IDA7IHIgPCBsZW47IHIrKykgewogCQlpZiAoKHIgJSA4KSA9PSAwKQotCQkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiICAgICIpOwotCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIlMDhYICIsIGFycmF5W3JdKTsKKwkJCXNlcV9wcmludGYobSwgIiAgICAiKTsKKwkJc2VxX3ByaW50ZihtLCAiJTA4WCAiLCBhcnJheVtyXSk7CiAJCWlmICgociAlIDgpID09IDcpCi0JCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQotCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7Ci0JcmV0dXJuIGhsOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCi1zdGF0aWMgaW50IHpjcnlwdF9zdGF0dXNfcmVhZChjaGFyICpyZXNwX2J1ZmYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgemNyeXB0X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JdW5zaWduZWQgY2hhciAqd29ya2FyZWE7Ci0JaW50IGxlbjsKKwljaGFyIHdvcmthcmVhW3NpemVvZihpbnQpICogQVBfREVWSUNFU107CiAKLQlsZW4gPSAwOwotCi0JLyogcmVzcF9idWZmIGlzIGEgcGFnZS4gVXNlIHRoZSByaWdodCBoYWxmIGZvciBhIHdvcmsgYXJlYSAqLwotCXdvcmthcmVhID0gcmVzcF9idWZmICsgMjAwMDsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJcbnpjcnlwdCB2ZXJzaW9uOiAlZC4lZC4lZFxuIiwKLQkJWkNSWVBUX1ZFUlNJT04sIFpDUllQVF9SRUxFQVNFLCBaQ1JZUFRfVkFSSUFOVCk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ3J5cHRvZ3JhcGhpYyBkb21haW46ICVkXG4iLAotCQkgICAgICAgYXBfZG9tYWluX2luZGV4KTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJUb3RhbCBkZXZpY2UgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2RldmljZV9jb3VudCk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiUENJQ0EgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNBKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiUENJQ0MgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNDKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiUENJWENDIE1DTDIgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSVhDQ19NQ0wyKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiUENJWENDIE1DTDMgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSVhDQ19NQ0wzKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ0VYMkMgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDJDKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ0VYMkEgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDJBKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ0VYM0MgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDNDKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ0VYM0EgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDNBKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAicmVxdWVzdHEgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X3JlcXVlc3RxX2NvdW50KCkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgInBlbmRpbmdxIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9wZW5kaW5ncV9jb3VudCgpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJUb3RhbCBvcGVuIGhhbmRsZXM6ICVkXG5cbiIsCi0JCSAgICAgICBhdG9taWNfcmVhZCgmemNyeXB0X29wZW5fY291bnQpKTsKKwlzZXFfcHJpbnRmKG0sICJcbnpjcnlwdCB2ZXJzaW9uOiAlZC4lZC4lZFxuIiwKKwkJICAgWkNSWVBUX1ZFUlNJT04sIFpDUllQVF9SRUxFQVNFLCBaQ1JZUFRfVkFSSUFOVCk7CisJc2VxX3ByaW50ZihtLCAiQ3J5cHRvZ3JhcGhpYyBkb21haW46ICVkXG4iLCBhcF9kb21haW5faW5kZXgpOworCXNlcV9wcmludGYobSwgIlRvdGFsIGRldmljZSBjb3VudDogJWRcbiIsIHpjcnlwdF9kZXZpY2VfY291bnQpOworCXNlcV9wcmludGYobSwgIlBDSUNBIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNBKSk7CisJc2VxX3ByaW50ZihtLCAiUENJQ0MgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0MpKTsKKwlzZXFfcHJpbnRmKG0sICJQQ0lYQ0MgTUNMMiBjb3VudDogJWRcbiIsCisJCSAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMikpOworCXNlcV9wcmludGYobSwgIlBDSVhDQyBNQ0wzIGNvdW50OiAlZFxuIiwKKwkJICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSVhDQ19NQ0wzKSk7CisJc2VxX3ByaW50ZihtLCAiQ0VYMkMgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYMkMpKTsKKwlzZXFfcHJpbnRmKG0sICJDRVgyQSBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQSkpOworCXNlcV9wcmludGYobSwgIkNFWDNDIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDNDKSk7CisJc2VxX3ByaW50ZihtLCAiQ0VYM0EgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYM0EpKTsKKwlzZXFfcHJpbnRmKG0sICJyZXF1ZXN0cSBjb3VudDogJWRcbiIsIHpjcnlwdF9yZXF1ZXN0cV9jb3VudCgpKTsKKwlzZXFfcHJpbnRmKG0sICJwZW5kaW5ncSBjb3VudDogJWRcbiIsIHpjcnlwdF9wZW5kaW5ncV9jb3VudCgpKTsKKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBvcGVuIGhhbmRsZXM6ICVkXG5cbiIsCisJCSAgIGF0b21pY19yZWFkKCZ6Y3J5cHRfb3Blbl9jb3VudCkpOwogCXpjcnlwdF9zdGF0dXNfbWFzayh3b3JrYXJlYSk7Ci0JbGVuICs9IHNwcmludGh4KCJPbmxpbmUgZGV2aWNlczogMT1QQ0lDQSAyPVBDSUNDIDM9UENJWENDKE1DTDIpICIKLQkJCSI0PVBDSVhDQyhNQ0wzKSA1PUNFWDJDIDY9Q0VYMkEgNz1DRVgzQyA4PUNFWDNBIiwKLQkJCXJlc3BfYnVmZitsZW4sIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKKwlzcHJpbnRoeCgiT25saW5lIGRldmljZXM6IDE9UENJQ0EgMj1QQ0lDQyAzPVBDSVhDQyhNQ0wyKSAiCisJCSAiND1QQ0lYQ0MoTUNMMykgNT1DRVgyQyA2PUNFWDJBIDc9Q0VYM0MgOD1DRVgzQSIsCisJCSBtLCB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CiAJemNyeXB0X3FkZXB0aF9tYXNrKHdvcmthcmVhKTsKLQlsZW4gKz0gc3ByaW50aHgoIldhaXRpbmcgd29yayBlbGVtZW50IGNvdW50cyIsCi0JCQlyZXNwX2J1ZmYrbGVuLCB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CisJc3ByaW50aHgoIldhaXRpbmcgd29yayBlbGVtZW50IGNvdW50cyIsIG0sIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKIAl6Y3J5cHRfcGVyZGV2X3JlcWNudCgoaW50ICopIHdvcmthcmVhKTsKLQlsZW4gKz0gc3ByaW50aHg0KCJQZXItZGV2aWNlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgcmVxdWVzdCBjb3VudHMiLAotCQkJIHJlc3BfYnVmZitsZW4sKHVuc2lnbmVkIGludCAqKSB3b3JrYXJlYSwgQVBfREVWSUNFUyk7Ci0JKmVvZiA9IDE7Ci0JbWVtc2V0KCh2b2lkICopIHdvcmthcmVhLCAweDAwLCBBUF9ERVZJQ0VTICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOwotCXJldHVybiBsZW47CisJc3ByaW50aHg0KCJQZXItZGV2aWNlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgcmVxdWVzdCBjb3VudHMiLAorCQkgIG0sICh1bnNpZ25lZCBpbnQgKikgd29ya2FyZWEsIEFQX0RFVklDRVMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpjcnlwdF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHpjcnlwdF9wcm9jX3Nob3csIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCB6Y3J5cHRfZGlzYWJsZV9jYXJkKGludCBpbmRleCkKQEAgLTEwNjEsMTEgKzEwNDEsMTEgQEAKIAlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKIH0KIAotc3RhdGljIGludCB6Y3J5cHRfc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3NpemVfdCB6Y3J5cHRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAl1bnNpZ25lZCBjaGFyICpsYnVmLCAqcHRyOwotCXVuc2lnbmVkIGxvbmcgbG9jYWxfY291bnQ7CisJc2l6ZV90IGxvY2FsX2NvdW50OwogCWludCBqOwogCiAJaWYgKGNvdW50IDw9IDApCkBAIC0xMTE1LDYgKzEwOTUsMTUgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpjcnlwdF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHpjcnlwdF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gemNyeXB0X3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgaW50IHpjcnlwdF9ybmdfZGV2aWNlX2NvdW50Owogc3RhdGljIHUzMiAqemNyeXB0X3JuZ19idWZmZXI7CiBzdGF0aWMgaW50IHpjcnlwdF9ybmdfYnVmZmVyX2luZGV4OwpAQCAtMTE5NywxNCArMTE4NiwxMSBAQAogCQlnb3RvIG91dDsKIAogCS8qIFNldCB1cCB0aGUgcHJvYyBmaWxlIHN5c3RlbSAqLwotCXpjcnlwdF9lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkcml2ZXIvejkwY3J5cHQiLCAwNjQ0LCBOVUxMKTsKKwl6Y3J5cHRfZW50cnkgPSBwcm9jX2NyZWF0ZSgiZHJpdmVyL3o5MGNyeXB0IiwgMDY0NCwgTlVMTCwgJnpjcnlwdF9wcm9jX2ZvcHMpOwogCWlmICghemNyeXB0X2VudHJ5KSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXRfbWlzYzsKIAl9Ci0JemNyeXB0X2VudHJ5LT5kYXRhID0gTlVMTDsKLQl6Y3J5cHRfZW50cnktPnJlYWRfcHJvYyA9IHpjcnlwdF9zdGF0dXNfcmVhZDsKLQl6Y3J5cHRfZW50cnktPndyaXRlX3Byb2MgPSB6Y3J5cHRfc3RhdHVzX3dyaXRlOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKaW5kZXggMjkzMGZjNy4uYjJmYzRmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKQEAgLTM0MCwxMSArMzQwLDExIEBACiAJCXJldHVybjsKIAogCS8qIFRoZSBMU0IgbWlnaHQgYmUgb3ZlcmxvYWRlZCwgd2UgaGF2ZSB0byBtYXNrIGl0ICovCi0JdnEgPSAoc3RydWN0IHZpcnRxdWV1ZSAqKSAoKCoobG9uZyAqKSBfX0xDX1BGQVVMVF9JTlRQQVJNKSAmIH4xVUwpOworCXZxID0gKHN0cnVjdCB2aXJ0cXVldWUgKikoUzM5MF9sb3djb3JlLmV4dF9wYXJhbXMyICYgfjFVTCk7CiAKIAkvKiBXZSB1c2UgdGhlIExTQiBvZiBleHRwYXJhbSwgdG8gZGVjaWRlLCBpZiB0aGlzIGludGVycnVwdCBpcyBhIGNvbmZpZwogCSAqIGNoYW5nZSBvciBhICJzdGFuZGFyZCIgaW50ZXJydXB0ICovCi0JY29uZmlnX2NoYW5nZWQgPSAgKCooaW50ICopICBfX0xDX0VYVF9QQVJBTVMgJiAxKTsKKwljb25maWdfY2hhbmdlZCA9IFMzOTBfbG93Y29yZS5leHRfcGFyYW1zICYgMTsKIAogCWlmIChjb25maWdfY2hhbmdlZCkgewogCQlzdHJ1Y3QgdmlydGlvX2RyaXZlciAqZHJ2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggOWQwYzk0MS4uNjZkNmMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIE1vZHVsZSBpbnRlcmZhY2UgYW5kIGhhbmRsaW5nIG9mIHpmY3AgZGF0YSBzdHJ1Y3R1cmVzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogLyoKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAjaW5jbHVkZSAiemZjcF9mYy5oIgorI2luY2x1ZGUgInpmY3BfcmVxbGlzdC5oIgogCiAjZGVmaW5lIFpGQ1BfQlVTX0lEX1NJWkUJMjAKIApAQCAtNDksMzYgKzUwLDYgQEAKIAlyZXR1cm4ga21lbV9jYWNoZV9jcmVhdGUobmFtZSwgc2l6ZSwgcm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpLCAwLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCB6ZmNwX3JlcWxpc3RfYWxsb2Moc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgaWR4OwotCi0JYWRhcHRlci0+cmVxX2xpc3QgPSBrY2FsbG9jKFJFUVVFU1RfTElTVF9TSVpFLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCi0JCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghYWRhcHRlci0+cmVxX2xpc3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBSRVFVRVNUX0xJU1RfU0laRTsgaWR4KyspCi0JCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5yZXFfbGlzdFtpZHhdKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiB6ZmNwX3JlcWxpc3RfaXNlbXB0eSAtIGlzIHRoZSByZXF1ZXN0IGxpc3QgZW1wdHkKLSAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2FkYXB0ZXIKLSAqCi0gKiBSZXR1cm5zOiB0cnVlIGlmIGxpc3QgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZQotICovCi1pbnQgemZjcF9yZXFsaXN0X2lzZW1wdHkoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBSRVFVRVNUX0xJU1RfU0laRTsgaWR4KyspCi0JCWlmICghbGlzdF9lbXB0eSgmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSkpCi0JCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHpmY3BfaW5pdF9kZXZpY2VfY29uZmlndXJlKGNoYXIgKmJ1c2lkLCB1NjQgd3dwbiwgdTY0IGx1bikKIHsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKQEAgLTExMCw3ICs4MSw3IEBACiAJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIAogb3V0X3VuaXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogb3V0X3BvcnQ6CiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7CiBvdXRfY2N3X2RldmljZToKQEAgLTI1NSw3ICsyMjYsNyBAQAogCXJlYWRfbG9ja19pcnFzYXZlKCZwb3J0LT51bml0X2xpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodW5pdCwgJnBvcnQtPnVuaXRfbGlzdCwgbGlzdCkKIAkJaWYgKHVuaXQtPmZjcF9sdW4gPT0gZmNwX2x1bikgewotCQkJaWYgKCFnZXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpKQorCQkJaWYgKCFnZXRfZGV2aWNlKCZ1bml0LT5kZXYpKQogCQkJCXVuaXQgPSBOVUxMOwogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+dW5pdF9saXN0X2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiB1bml0OwpAQCAtMjgwLDcgKzI1MSw3IEBACiAJcmVhZF9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnBvcnRfbGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0LCBsaXN0KQogCQlpZiAocG9ydC0+d3dwbiA9PSB3d3BuKSB7Ci0JCQlpZiAoIWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSkpCisJCQlpZiAoIWdldF9kZXZpY2UoJnBvcnQtPmRldikpCiAJCQkJcG9ydCA9IE5VTEw7CiAJCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5wb3J0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIHBvcnQ7CkBAIC0yOTgsMTAgKzI2OSw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHpmY3BfdW5pdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfdW5pdCwKLQkJCQkJICAgICAgc3lzZnNfZGV2aWNlKTsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfdW5pdCwgZGV2KTsKIAotCXB1dF9kZXZpY2UoJnVuaXQtPnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmdW5pdC0+cG9ydC0+ZGV2KTsKIAlrZnJlZSh1bml0KTsKIH0KIApAQCAtMzE4LDExICsyODgsMTEgQEAKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCiAJdW5pdCA9IHpmY3BfZ2V0X3VuaXRfYnlfbHVuKHBvcnQsIGZjcF9sdW4pOwogCWlmICh1bml0KSB7Ci0JCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCXJldHZhbCA9IC1FRVhJU1Q7CiAJCWdvdG8gZXJyX291dDsKIAl9CkBAIC0zMzMsMTAgKzMwMywxMCBAQAogCiAJdW5pdC0+cG9ydCA9IHBvcnQ7CiAJdW5pdC0+ZmNwX2x1biA9IGZjcF9sdW47Ci0JdW5pdC0+c3lzZnNfZGV2aWNlLnBhcmVudCA9ICZwb3J0LT5zeXNmc19kZXZpY2U7Ci0JdW5pdC0+c3lzZnNfZGV2aWNlLnJlbGVhc2UgPSB6ZmNwX3VuaXRfcmVsZWFzZTsKKwl1bml0LT5kZXYucGFyZW50ID0gJnBvcnQtPmRldjsKKwl1bml0LT5kZXYucmVsZWFzZSA9IHpmY3BfdW5pdF9yZWxlYXNlOwogCi0JaWYgKGRldl9zZXRfbmFtZSgmdW5pdC0+c3lzZnNfZGV2aWNlLCAiMHglMDE2bGx4IiwKKwlpZiAoZGV2X3NldF9uYW1lKCZ1bml0LT5kZXYsICIweCUwMTZsbHgiLAogCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGZjcF9sdW4pKSB7CiAJCWtmcmVlKHVuaXQpOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0zNTMsMTMgKzMyMywxMiBAQAogCXVuaXQtPmxhdGVuY2llcy5jbWQuY2hhbm5lbC5taW4gPSAweEZGRkZGRkZGOwogCXVuaXQtPmxhdGVuY2llcy5jbWQuZmFicmljLm1pbiA9IDB4RkZGRkZGRkY7CiAKLQlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UpKSB7Ci0JCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJaWYgKGRldmljZV9yZWdpc3RlcigmdW5pdC0+ZGV2KSkgeworCQlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmdW5pdC0+c3lzZnNfZGV2aWNlLmtvYmosCi0JCQkgICAgICAgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycykpCisJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmdW5pdC0+ZGV2LmtvYmosICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpKQogCQlnb3RvIGVycl9vdXRfcHV0OwogCiAJd3JpdGVfbG9ja19pcnEoJnBvcnQtPnVuaXRfbGlzdF9sb2NrKTsKQEAgLTM3MSw5ICszNDAsOSBAQAogCXJldHVybiB1bml0OwogCiBlcnJfb3V0X3B1dDoKLQlkZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+ZGV2KTsKIGVycl9vdXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CiB9CiAKQEAgLTUzOSw3ICs1MDgsOCBAQAogCWlmICh6ZmNwX2FsbG9jYXRlX2xvd19tZW1fYnVmZmVycyhhZGFwdGVyKSkKIAkJZ290byBmYWlsZWQ7CiAKLQlpZiAoemZjcF9yZXFsaXN0X2FsbG9jKGFkYXB0ZXIpKQorCWFkYXB0ZXItPnJlcV9saXN0ID0gemZjcF9yZXFsaXN0X2FsbG9jKCk7CisJaWYgKCFhZGFwdGVyLT5yZXFfbGlzdCkKIAkJZ290byBmYWlsZWQ7CiAKIAlpZiAoemZjcF9kYmZfYWRhcHRlcl9yZWdpc3RlcihhZGFwdGVyKSkKQEAgLTU2MCw4ICs1MzAsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmVycF9ydW5uaW5nX2hlYWQpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwotCiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmVycF9sb2NrKTsKIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+YWJvcnRfbG9jayk7CiAKQEAgLTY0MCw4ICs2MDgsNyBAQAogCiBzdGF0aWMgdm9pZCB6ZmNwX3BvcnRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsCi0JCQkJCSAgICAgIHN5c2ZzX2RldmljZSk7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsIGRldik7CiAKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChwb3J0LT5hZGFwdGVyKTsKIAlrZnJlZShwb3J0KTsKQEAgLTY2OSw3ICs2MzYsNyBAQAogCiAJcG9ydCA9IHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCB3d3BuKTsKIAlpZiAocG9ydCkgewotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCQlyZXR2YWwgPSAtRUVYSVNUOwogCQlnb3RvIGVycl9vdXQ7CiAJfQpAQCAtNjg5LDIyICs2NTYsMjEgQEAKIAlwb3J0LT5kX2lkID0gZF9pZDsKIAlwb3J0LT53d3BuID0gd3dwbjsKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfTk9ORTsKLQlwb3J0LT5zeXNmc19kZXZpY2UucGFyZW50ID0gJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldjsKLQlwb3J0LT5zeXNmc19kZXZpY2UucmVsZWFzZSA9IHpmY3BfcG9ydF9yZWxlYXNlOworCXBvcnQtPmRldi5wYXJlbnQgPSAmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2OworCXBvcnQtPmRldi5yZWxlYXNlID0gemZjcF9wb3J0X3JlbGVhc2U7CiAKLQlpZiAoZGV2X3NldF9uYW1lKCZwb3J0LT5zeXNmc19kZXZpY2UsICIweCUwMTZsbHgiLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd3dwbikpIHsKKwlpZiAoZGV2X3NldF9uYW1lKCZwb3J0LT5kZXYsICIweCUwMTZsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKXd3cG4pKSB7CiAJCWtmcmVlKHBvcnQpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCXJldHZhbCA9IC1FSU5WQUw7CiAKLQlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UpKSB7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJaWYgKGRldmljZV9yZWdpc3RlcigmcG9ydC0+ZGV2KSkgeworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+c3lzZnNfZGV2aWNlLmtvYmosCisJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+ZGV2LmtvYmosCiAJCQkgICAgICAgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycykpCiAJCWdvdG8gZXJyX291dF9wdXQ7CiAKQEAgLTcxNyw3ICs2ODMsNyBAQAogCXJldHVybiBwb3J0OwogCiBlcnJfb3V0X3B1dDoKLQlkZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+ZGV2KTsKIGVycl9vdXQ6CiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IGMyMmNiNzIuLmNlMWNjN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtMywxMyArMywxNCBAQAogICoKICAqIFJlZ2lzdHJhdGlvbiBhbmQgY2FsbGJhY2sgZm9yIHRoZSBzMzkwIGNvbW1vbiBJL08gbGF5ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgogI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCiAjaW5jbHVkZSAiemZjcF9leHQuaCIKKyNpbmNsdWRlICJ6ZmNwX3JlcWxpc3QuaCIKIAogI2RlZmluZSBaRkNQX01PREVMX1BSSVYgMHg0CiAKQEAgLTEyMiwxMiArMTIzLDEwIEBACiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7IC8qIHB1dCBmcm9tIHpmY3BfY2N3X2FkYXB0ZXJfYnlfY2RldiAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuaXQsIHUsICZ1bml0X3JlbW92ZV9saCwgbGlzdCkKLQkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+c3lzZnNfZGV2aWNlLAotCQkJCSAgICAgICAmemZjcF9zeXNmc191bml0X2F0dHJzKTsKKwkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+ZGV2LCAmemZjcF9zeXNmc191bml0X2F0dHJzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwLCAmcG9ydF9yZW1vdmVfbGgsIGxpc3QpCi0JCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSwKLQkJCQkgICAgICAgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CisJCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPmRldiwgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CiAKIAl6ZmNwX2FkYXB0ZXJfdW5yZWdpc3RlcihhZGFwdGVyKTsKIH0KQEAgLTE2Miw3ICsxNjEsNyBAQAogCX0KIAogCS8qIGluaXRpYWxpemUgcmVxdWVzdCBjb3VudGVyICovCi0JQlVHX09OKCF6ZmNwX3JlcWxpc3RfaXNlbXB0eShhZGFwdGVyKSk7CisJQlVHX09OKCF6ZmNwX3JlcWxpc3RfaXNlbXB0eShhZGFwdGVyLT5yZXFfbGlzdCkpOwogCWFkYXB0ZXItPnJlcV9ubyA9IDA7CiAKIAl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImNjc29ubDEiLCBOVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKaW5kZXggNzM2OWM4OS4uN2ExNDlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCkBAIC0xNDAsOSArMTQwLDkgQEAKIAltZW1jcHkocmVzcG9uc2UtPmZzZl9zdGF0dXNfcXVhbCwKIAkgICAgICAgZnNmX3N0YXR1c19xdWFsLCBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFKTsKIAlyZXNwb25zZS0+ZnNmX3JlcV9zdGF0dXMgPSBmc2ZfcmVxLT5zdGF0dXM7Ci0JcmVzcG9uc2UtPnNiYWxfZmlyc3QgPSBmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9maXJzdDsKLQlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfbGFzdDsKLQlyZXNwb25zZS0+c2JhbF9yZXNwb25zZSA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX3Jlc3BvbnNlOworCXJlc3BvbnNlLT5zYmFsX2ZpcnN0ID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9maXJzdDsKKwlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9sYXN0OworCXJlc3BvbnNlLT5zYmFsX3Jlc3BvbnNlID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9yZXNwb25zZTsKIAlyZXNwb25zZS0+cG9vbCA9IGZzZl9yZXEtPnBvb2wgIT0gTlVMTDsKIAlyZXNwb25zZS0+ZXJwX2FjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXEtPmVycF9hY3Rpb247CiAKQEAgLTU3Niw3ICs1NzYsOCBAQAogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYmYtPmFkYXB0ZXI7CiAKIAl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJmFkYXB0ZXItPnN0YXR1cywKLQkJCQkgICZhZGFwdGVyLT5lcnBfY291bnRlciwgMCwgMCwgMCk7CisJCQkgICAgJmFkYXB0ZXItPmVycF9jb3VudGVyLCAwLCAwLAorCQkJICAgIFpGQ1BfREJGX0lOVkFMSURfTFVOKTsKIH0KIAogLyoqCkBAIC01OTAsOCArNTkxLDggQEAKIAlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IHBvcnQtPmFkYXB0ZXItPmRiZjsKIAogCXpmY3BfZGJmX3JlY190YXJnZXQoaWQsIHJlZiwgZGJmLCAmcG9ydC0+c3RhdHVzLAotCQkJCSAgJnBvcnQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAotCQkJCSAgMCk7CisJCQkgICAgJnBvcnQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAorCQkJICAgIFpGQ1BfREJGX0lOVkFMSURfTFVOKTsKIH0KIAogLyoqCkBAIC02NDIsMTAgKzY0Myw5IEBACiAJCXItPnUudHJpZ2dlci5wcyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOwogCQlyLT51LnRyaWdnZXIud3dwbiA9IHBvcnQtPnd3cG47CiAJfQotCWlmICh1bml0KSB7CisJaWYgKHVuaXQpCiAJCXItPnUudHJpZ2dlci51cyA9IGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpOwotCQlyLT51LnRyaWdnZXIuZmNwX2x1biA9IHVuaXQtPmZjcF9sdW47Ci0JfQorCXItPnUudHJpZ2dlci5mY3BfbHVuID0gdW5pdCA/IHVuaXQtPmZjcF9sdW4gOiBaRkNQX0RCRl9JTlZBTElEX0xVTjsKIAlkZWJ1Z19ldmVudChkYmYtPnJlYywgYWN0aW9uID8gMSA6IDQsIHIsIHNpemVvZigqcikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTY2OCw3ICs2NjgsNyBAQAogCXItPnUuYWN0aW9uLmFjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWVycF9hY3Rpb247CiAJci0+dS5hY3Rpb24uc3RhdHVzID0gZXJwX2FjdGlvbi0+c3RhdHVzOwogCXItPnUuYWN0aW9uLnN0ZXAgPSBlcnBfYWN0aW9uLT5zdGVwOwotCXItPnUuYWN0aW9uLmZzZl9yZXEgPSAodW5zaWduZWQgbG9uZyllcnBfYWN0aW9uLT5mc2ZfcmVxOworCXItPnUuYWN0aW9uLmZzZl9yZXEgPSBlcnBfYWN0aW9uLT5mc2ZfcmVxX2lkOwogCWRlYnVnX2V2ZW50KGRiZi0+cmVjLCA1LCByLCBzaXplb2YoKnIpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAppbmRleCA4YjdmZDlhLi40NTdlMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKQEAgLTMwLDYgKzMwLDggQEAKICNkZWZpbmUgWkZDUF9EQkZfVEFHX1NJWkUgICAgICA0CiAjZGVmaW5lIFpGQ1BfREJGX0lEX1NJWkUgICAgICAgNwogCisjZGVmaW5lIFpGQ1BfREJGX0lOVkFMSURfTFVOCTB4RkZGRkZGRkZGRkZGRkZGRnVsbAorCiBzdHJ1Y3QgemZjcF9kYmZfZHVtcCB7CiAJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1MzIgdG90YWxfc2l6ZTsJCS8qIHNpemUgb2YgdG90YWwgZHVtcCBkYXRhICovCkBAIC0xOTIsMTAgKzE5NCwxMCBAQAogCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXNwb25zZSBjdF9yZXNwOwogCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9lbHMgZWxzOwogCX0gdTsKLSNkZWZpbmUgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEIDEwMjQKLQl1OCBwYXlsb2FkWzMyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIFpGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRCAxMDI0CisKIHN0cnVjdCB6ZmNwX2RiZl9zY3NpX3JlY29yZCB7CiAJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1OCB0YWcyW1pGQ1BfREJGX1RBR19TSVpFXTsKQEAgLTMwMSwxNyArMzAzLDMxIEBACiAKIC8qKgogICogemZjcF9kYmZfc2NzaV9yZXN1bHQgLSB0cmFjZSBldmVudCBmb3IgU0NTSSBjb21tYW5kIGNvbXBsZXRpb24KLSAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBTQ1NJIGNvbW1hbmQKLSAqIEBsZXZlbDogdHJhY2UgbGV2ZWwgYXBwbGljYWJsZSBmb3IgdGhpcyBldmVudAotICogQGFkYXB0ZXI6IGFkYXB0ZXIgdGhhdCBoYXMgYmVlbiB1c2VkIHRvIGlzc3VlIHRoZSBTQ1NJIGNvbW1hbmQKKyAqIEBkYmY6IGFkYXB0ZXIgZGJmIHRyYWNlCiAgKiBAc2NtZDogU0NTSSBjb21tYW5kIHBvaW50ZXIKLSAqIEBmc2ZfcmVxOiByZXF1ZXN0IHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kIChtaWdodCBiZSBOVUxMKQorICogQHJlcTogRlNGIHJlcXVlc3QgdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQKICAqLwogc3RhdGljIGlubGluZQotdm9pZCB6ZmNwX2RiZl9zY3NpX3Jlc3VsdChjb25zdCBjaGFyICp0YWcsIGludCBsZXZlbCwgc3RydWN0IHpmY3BfZGJmICpkYmYsCi0JCQkgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit2b2lkIHpmY3BfZGJmX3Njc2lfcmVzdWx0KHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAorCQkJICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7Ci0JemZjcF9kYmZfc2NzaSgicnNsdCIsIHRhZywgbGV2ZWwsIGRiZiwgc2NtZCwgZnNmX3JlcSwgMCk7CisJaWYgKHNjbWQtPnJlc3VsdCAhPSAwKQorCQl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgImVycm8iLCAzLCBkYmYsIHNjbWQsIHJlcSwgMCk7CisJZWxzZSBpZiAoc2NtZC0+cmV0cmllcyA+IDApCisJCXpmY3BfZGJmX3Njc2koInJzbHQiLCAicmV0ciIsIDQsIGRiZiwgc2NtZCwgcmVxLCAwKTsKKwllbHNlCisJCXpmY3BfZGJmX3Njc2koInJzbHQiLCAibm9ybSIsIDYsIGRiZiwgc2NtZCwgcmVxLCAwKTsKK30KKworLyoqCisgKiB6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZCAtIHRyYWNlIGV2ZW50IGZvciBmYWlsdXJlIHRvIHNlbmQgU0NTSSBjb21tYW5kCisgKiBAZGJmOiBhZGFwdGVyIGRiZiB0cmFjZQorICogQHNjbWQ6IFNDU0kgY29tbWFuZCBwb2ludGVyCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfc2NzaV9mYWlsX3NlbmQoc3RydWN0IHpmY3BfZGJmICpkYmYsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJemZjcF9kYmZfc2NzaSgicnNsdCIsICJmYWlsIiwgNCwgZGJmLCBzY21kLCBOVUxMLCAwKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAppbmRleCBlMWI1Yjg4Li43MTMxYzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKQEAgLTMsNyArMyw3IEBACiAgKgogICogR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgemZjcCBkZXZpY2UgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogI2lmbmRlZiBaRkNQX0RFRl9ICkBAIC0zMywxNSArMzMsMTMgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2JzZ19mYy5oPgogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KLSNpbmNsdWRlIDxhc20vcWRpby5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgogI2luY2x1ZGUgInpmY3BfZnNmLmgiCisjaW5jbHVkZSAiemZjcF9xZGlvLmgiCiAKLS8qKioqKioqKioqKioqKioqKioqKiogR0VORVJBTCBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBSRVFVRVNUX0xJU1RfU0laRSAxMjgKK3N0cnVjdCB6ZmNwX3JlcWxpc3Q7CiAKIC8qKioqKioqKioqKioqKioqKioqKiogU0NTSSBTUEVDSUZJQyBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgWkZDUF9TQ1NJX0VSX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICgxMCpIWikKQEAgLTEyOSwxMiArMTI3LDYgQEAKIAltZW1wb29sX3QgKnF0Y2JfcG9vbDsKIH07CiAKLXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgewotCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQl1OAkJICAgZmlyc3Q7CS8qIGluZGV4IG9mIG5leHQgZnJlZSBiZnIgaW4gcXVldWUgKi8KLQlhdG9taWNfdCAgICAgICAgICAgY291bnQ7CS8qIG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgaW4gcXVldWUgKi8KLX07Ci0KIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlpbnQgYWN0aW9uOwkgICAgICAgICAgICAgIC8qIHJlcXVlc3RlZCBhY3Rpb24gY29kZSAqLwpAQCAtMTQzLDggKzEzNSw3IEBACiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAl1MzIJCXN0YXR1czsJICAgICAgLyogcmVjb3Zlcnkgc3RhdHVzICovCiAJdTMyIHN0ZXA7CSAgICAgICAgICAgICAgLyogYWN0aXZlIHN0ZXAgb2YgdGhpcyBlcnAgYWN0aW9uICovCi0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsgLyogZnNmIHJlcXVlc3QgY3VycmVudGx5IHBlbmRpbmcKLQkJCQkJIGZvciB0aGlzIGFjdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJCWZzZl9yZXFfaWQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiB9OwogCkBAIC0xNjcsMjkgKzE1OCw2IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotLyoqIHN0cnVjdCB6ZmNwX3FkaW8gLSBiYXNpYyBRRElPIGRhdGEgc3RydWN0dXJlCi0gKiBAcmVzcF9xOiByZXNwb25zZSBxdWV1ZQotICogQHJlcV9xOiByZXF1ZXN0IHF1ZXVlCi0gKiBAc3RhdF9sb2NrOiBsb2NrIHRvIHByb3RlY3QgcmVxX3FfdXRpbCBhbmQgcmVxX3FfdGltZQotICogQHJlcV9xX2xvY2s7IGxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byByZXF1ZXN0IHF1ZXVlCi0gKiBAcmVxX3FfdGltZTogdGltZSBvZiBsYXN0IGZpbGwgbGV2ZWwgY2hhbmdlCi0gKiBAcmVxX3FfdXRpbDogdXNlZCBmb3IgYWNjb3VudGluZwotICogQHJlcV9xX2Z1bGw6IHF1ZXVlIGZ1bGwgaW5jaWRlbnRzCi0gKiBAcmVxX3Ffd3E6IHVzZWQgdG8gd2FpdCBmb3IgU0JBTCBhdmFpbGFiaWxpdHkKLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIFFESU8gc3RydWN0dXJlCi0gKi8KLXN0cnVjdCB6ZmNwX3FkaW8gewotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVzcF9xOwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7Ci0Jc3BpbmxvY2tfdAkJc3RhdF9sb2NrOwotCXNwaW5sb2NrX3QJCXJlcV9xX2xvY2s7Ci0JdW5zaWduZWQgbG9uZyBsb25nCXJlcV9xX3RpbWU7Ci0JdTY0CQkJcmVxX3FfdXRpbDsKLQlhdG9taWNfdAkJcmVxX3FfZnVsbDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAlyZXFfcV93cTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyCSphZGFwdGVyOwotfTsKLQogc3RydWN0IHpmY3BfYWRhcHRlciB7CiAJc3RydWN0IGtyZWYJCXJlZjsKIAl1NjQJCQlwZWVyX3d3bm47CSAgIC8qIFAyUCBwZWVyIFdXTk4gKi8KQEAgLTIwNyw4ICsxNzUsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcG9ydF9saXN0OwkgICAvKiByZW1vdGUgcG9ydCBsaXN0ICovCiAJcndsb2NrX3QJCXBvcnRfbGlzdF9sb2NrOyAgICAvKiBwb3J0IGxpc3QgbG9jayAqLwogCXVuc2lnbmVkIGxvbmcJCXJlcV9ubzsJCSAgIC8qIHVuaXF1ZSBGU0YgcmVxIG51bWJlciAqLwotCXN0cnVjdCBsaXN0X2hlYWQJKnJlcV9saXN0OwkgICAvKiBsaXN0IG9mIHBlbmRpbmcgcmVxcyAqLwotCXNwaW5sb2NrX3QJCXJlcV9saXN0X2xvY2s7CSAgIC8qIHJlcXVlc3QgbGlzdCBsb2NrICovCisJc3RydWN0IHpmY3BfcmVxbGlzdAkqcmVxX2xpc3Q7CiAJdTMyCQkJZnNmX3JlcV9zZXFfbm87CSAgIC8qIEZTRiBjbW5kIHNlcSBudW1iZXIgKi8KIAlyd2xvY2tfdAkJYWJvcnRfbG9jazsgICAgICAgIC8qIFByb3RlY3RzIGFnYWluc3QgU0NTSQogCQkJCQkJICAgICAgc3RhY2sgYWJvcnQvY29tbWFuZApAQCAtMjQxLDcgKzIwOCw3IEBACiB9OwogCiBzdHJ1Y3QgemZjcF9wb3J0IHsKLQlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIHN5c2ZzX2RldmljZTsgICAvKiBzeXNmcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIGRldjsKIAlzdHJ1Y3QgZmNfcnBvcnQgICAgICAgICpycG9ydDsgICAgICAgICAvKiBycG9ydCBvZiBmYyB0cmFuc3BvcnQgY2xhc3MgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CSAgICAgICAvKiBsaXN0IG9mIHJlbW90ZSBwb3J0cyAqLwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgICAgKmFkYXB0ZXI7ICAgICAgIC8qIGFkYXB0ZXIgdXNlZCB0byBhY2Nlc3MgcG9ydCAqLwpAQCAtMjYzLDcgKzIzMCw3IEBACiB9OwogCiBzdHJ1Y3QgemZjcF91bml0IHsKLQlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIHN5c2ZzX2RldmljZTsgICAvKiBzeXNmcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIGRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CSAgICAgICAvKiBsaXN0IG9mIGxvZ2ljYWwgdW5pdHMgKi8KIAlzdHJ1Y3QgemZjcF9wb3J0ICAgICAgICpwb3J0OwkgICAgICAgLyogcmVtb3RlIHBvcnQgb2YgdW5pdCAqLwogCWF0b21pY190CSAgICAgICBzdGF0dXM7CSAgICAgICAvKiBzdGF0dXMgb2YgdGhpcyBsb2dpY2FsIHVuaXQgKi8KQEAgLTI3NywzMyArMjQ0LDExIEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAtIHF1ZXVlIHJlbGF0ZWQgdmFsdWVzIGZvciBhIHJlcXVlc3QKLSAqIEBzYmFsX251bWJlcjogbnVtYmVyIG9mIGZyZWUgU0JBTHMKLSAqIEBzYmFsX2ZpcnN0OiBmaXJzdCBTQkFMIGZvciB0aGlzIHJlcXVlc3QKLSAqIEBzYmFsX2xhc3Q6IGxhc3QgU0JBTCBmb3IgdGhpcyByZXF1ZXN0Ci0gKiBAc2JhbF9saW1pdDogbGFzdCBwb3NzaWJsZSBTQkFMIGZvciB0aGlzIHJlcXVlc3QKLSAqIEBzYmFsZV9jdXJyOiBjdXJyZW50IFNCQUxFIGF0IGNyZWF0aW9uIG9mIHRoaXMgcmVxdWVzdAotICogQHNiYWxfcmVzcG9uc2U6IFNCQUwgdXNlZCBpbiBpbnRlcnJ1cHQKLSAqIEBxZGlvX291dGJfdXNhZ2U6IHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlCi0gKiBAcWRpb19pbmJfdXNhZ2U6IHVzYWdlIG9mIGluYm91bmQgcXVldWUKLSAqLwotc3RydWN0IHpmY3BfcXVldWVfcmVxIHsKLQl1OAkJICAgICAgIHNiYWxfbnVtYmVyOwotCXU4CQkgICAgICAgc2JhbF9maXJzdDsKLQl1OAkJICAgICAgIHNiYWxfbGFzdDsKLQl1OAkJICAgICAgIHNiYWxfbGltaXQ7Ci0JdTgJCSAgICAgICBzYmFsZV9jdXJyOwotCXU4CQkgICAgICAgc2JhbF9yZXNwb25zZTsKLQl1MTYJCSAgICAgICBxZGlvX291dGJfdXNhZ2U7Ci0JdTE2CQkgICAgICAgcWRpb19pbmJfdXNhZ2U7Ci19OwotCi0vKioKICAqIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgLSBiYXNpYyBGU0YgcmVxdWVzdCBzdHJ1Y3R1cmUKICAqIEBsaXN0OiBsaXN0IG9mIEZTRiByZXF1ZXN0cwogICogQHJlcV9pZDogdW5pcXVlIHJlcXVlc3QgSUQKICAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoaXMgcmVxdWVzdCBiZWxvbmdzIHRvCi0gKiBAcXVldWVfcmVxOiBxdWV1ZSByZWxhdGVkIHZhbHVlcworICogQHFkaW9fcmVxOiBxZGlvIHF1ZXVlIHJlbGF0ZWQgdmFsdWVzCiAgKiBAY29tcGxldGlvbjogdXNlZCB0byBzaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHJlcXVlc3QKICAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGUgcmVxdWVzdAogICogQGZzZl9jb21tYW5kOiBGU0YgY29tbWFuZCBpc3N1ZWQKQEAgLTMyMSw3ICsyNjYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1bnNpZ25lZCBsb25nCQlyZXFfaWQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlcgkqYWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEJcXVldWVfcmVxOworCXN0cnVjdCB6ZmNwX3FkaW9fcmVxCXFkaW9fcmVxOwogCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAJdTMyCQkJc3RhdHVzOwogCXUzMgkJCWZzZl9jb21tYW5kOwpAQCAtMzUyLDQ1ICsyOTcsNCBAQAogI2RlZmluZSBaRkNQX1NFVCAgICAgICAgICAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lIFpGQ1BfQ0xFQVIgICAgICAgICAgICAgIDB4MDAwMDAyMDAKIAotLyoKLSAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIHJlcXVlc3QgSUQgbWFuYWdlbWVudC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgemZjcF9yZXFsaXN0X2hhc2godW5zaWduZWQgbG9uZyByZXFfaWQpCi17Ci0JcmV0dXJuIHJlcV9pZCAlIFJFUVVFU1RfTElTVF9TSVpFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X3JlbW92ZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQotewotCWxpc3RfZGVsKCZmc2ZfcmVxLT5saXN0KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKLXpmY3BfcmVxbGlzdF9maW5kKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQotewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcXVlc3Q7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWlkeCA9IHpmY3BfcmVxbGlzdF9oYXNoKHJlcV9pZCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZXF1ZXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSwgbGlzdCkKLQkJaWYgKHJlcXVlc3QtPnJlcV9pZCA9PSByZXFfaWQpCi0JCQlyZXR1cm4gcmVxdWVzdDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKLXpmY3BfcmVxbGlzdF9maW5kX3NhZmUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQotewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcXVlc3Q7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgUkVRVUVTVF9MSVNUX1NJWkU7IGlkeCsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxdWVzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0sIGxpc3QpCi0JCQlpZiAocmVxdWVzdCA9PSByZXEpCi0JCQkJcmV0dXJuIHJlcXVlc3Q7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCiAjZW5kaWYgLyogWkZDUF9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggYjUxYTExYS4uMGJlNWU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEVycm9yIFJlY292ZXJ5IFByb2NlZHVyZXMgKEVSUCkuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKICNkZWZpbmUgWkZDUF9NQVhfRVJQUyAgICAgICAgICAgICAgICAgICAzCiAKQEAgLTE3NCw3ICsxNzUsNyBAQAogCiAJc3dpdGNoIChuZWVkKSB7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6Ci0JCWlmICghZ2V0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKSkKKwkJaWYgKCFnZXRfZGV2aWNlKCZ1bml0LT5kZXYpKQogCQkJcmV0dXJuIE5VTEw7CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmdW5pdC0+c3RhdHVzKTsKIAkJZXJwX2FjdGlvbiA9ICZ1bml0LT5lcnBfYWN0aW9uOwpAQCAtMTg0LDcgKzE4NSw3IEBACiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6Ci0JCWlmICghZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkKKwkJaWYgKCFnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKQogCQkJcmV0dXJuIE5VTEw7CiAJCXpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX3BvcnQocG9ydCk7CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmcG9ydC0+c3RhdHVzKTsKQEAgLTQ3OCwyNiArNDc5LDI3IEBACiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9zdHJhdGVneV9jaGVja19mc2ZyZXEoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBhY3QtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCi0JaWYgKCFhY3QtPmZzZl9yZXEpCisJaWYgKCFhY3QtPmZzZl9yZXFfaWQpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7Ci0JaWYgKHpmY3BfcmVxbGlzdF9maW5kX3NhZmUoYWRhcHRlciwgYWN0LT5mc2ZfcmVxKSAmJgotCSAgICBhY3QtPmZzZl9yZXEtPmVycF9hY3Rpb24gPT0gYWN0KSB7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdC0+bG9jayk7CisJcmVxID0gX3pmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXItPnJlcV9saXN0LCBhY3QtPmZzZl9yZXFfaWQpOworCWlmIChyZXEgJiYgcmVxLT5lcnBfYWN0aW9uID09IGFjdCkgewogCQlpZiAoYWN0LT5zdGF0dXMgJiAoWkZDUF9TVEFUVVNfRVJQX0RJU01JU1NFRCB8CiAJCQkJICAgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKSkgewotCQkJYWN0LT5mc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRDsKKwkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7CiAJCQl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcnNjZl8xIiwgYWN0KTsKLQkJCWFjdC0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IE5VTEw7CisJCQlyZXEtPmVycF9hY3Rpb24gPSBOVUxMOwogCQl9CiAJCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyc2NmXzIiLCBhY3QpOwotCQlpZiAoYWN0LT5mc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKQotCQkJYWN0LT5mc2ZfcmVxID0gTlVMTDsKKwkJaWYgKHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRCkKKwkJCWFjdC0+ZnNmX3JlcV9pZCA9IDA7CiAJfSBlbHNlCi0JCWFjdC0+ZnNmX3JlcSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOworCQlhY3QtPmZzZl9yZXFfaWQgPSAwOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdC0+bG9jayk7CiB9CiAKIC8qKgpAQCAtMTE3OSwxOSArMTE4MSwxOSBAQAogCXN3aXRjaCAoYWN0LT5hY3Rpb24pIHsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKIAkJaWYgKChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKSAmJiAhdW5pdC0+ZGV2aWNlKSB7Ci0JCQlnZXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQkJZ2V0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJCWlmIChzY3NpX3F1ZXVlX3dvcmsodW5pdC0+cG9ydC0+YWRhcHRlci0+c2NzaV9ob3N0LAogCQkJCQkgICAgJnVuaXQtPnNjc2lfd29yaykgPD0gMCkKLQkJCQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQkJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCX0KLQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQ6CiAJCWlmIChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKQogCQkJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOwotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggNjZiZGIzNC4uODc4NmE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC0yMSw3ICsyMSw2IEBACiBleHRlcm4gc3RydWN0IHpmY3BfcG9ydCAqemZjcF9wb3J0X2VucXVldWUoc3RydWN0IHpmY3BfYWRhcHRlciAqLCB1NjQsIHUzMiwKIAkJCQkJICAgdTMyKTsKIGV4dGVybiBzdHJ1Y3QgemZjcF91bml0ICp6ZmNwX3VuaXRfZW5xdWV1ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHU2NCk7Ci1leHRlcm4gaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX3NnX2ZyZWVfdGFibGUoc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gaW50IHpmY3Bfc2dfc2V0dXBfdGFibGUoc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gdm9pZCB6ZmNwX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKiwKQEAgLTE0NCwxMyArMTQzLDkgQEAKIC8qIHpmY3BfcWRpby5jICovCiBleHRlcm4gaW50IHpmY3BfcWRpb19zZXR1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2Rlc3Ryb3koc3RydWN0IHpmY3BfcWRpbyAqKTsKLWV4dGVybiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKik7Ci1leHRlcm4gc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQKLQkqemZjcF9xZGlvX3NiYWxlX3JlcShzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKLWV4dGVybiBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudAotCSp6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKK2V4dGVybiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqKTsKIGV4dGVybiBpbnQgemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coc3RydWN0IHpmY3BfcWRpbyAqLAotCQkJCSAgIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqLCB1bnNpZ25lZCBsb25nLAorCQkJCSAgIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICosIHVuc2lnbmVkIGxvbmcsCiAJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gaW50IHpmY3BfcWRpb19vcGVuKHN0cnVjdCB6ZmNwX3FkaW8gKik7CiBleHRlcm4gdm9pZCB6ZmNwX3FkaW9fY2xvc2Uoc3RydWN0IHpmY3BfcWRpbyAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCAwZjdiNDkzLi41MjE5NjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEZpYnJlIENoYW5uZWwgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIHRoZSB6ZmNwIGRldmljZSBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4LCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDgsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMzE2LDcgKzMxNiw3IEBACiAKIAl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZmNncG5fMyIsIE5VTEwpOwogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0zMjUsOSArMzI1LDkgQEAKICAqLwogdm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPmdpZF9wbl93b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0zODksNyArMzg5LDcgQEAKIAl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfcmVnaXN0ZXIocG9ydCk7CiAgb3V0OgogCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1BPUlRfTElOS19URVNULCAmcG9ydC0+c3RhdHVzKTsKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJa21lbV9jYWNoZV9mcmVlKHpmY3BfZGF0YS5hZGlzY19jYWNoZSwgYWRpc2MpOwogfQogCkBAIC00MzYsNyArNDM2LDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX3BvcnQsIHRlc3RfbGlua193b3JrKTsKIAlpbnQgcmV0dmFsOwogCi0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9ERUw7CiAJemZjcF9zY3NpX3Jwb3J0X3dvcmsoJnBvcnQtPnJwb3J0X3dvcmspOwogCkBAIC00NTUsNyArNDU1LDcgQEAKIAl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgImZjbHR3azEiLCBOVUxMKTsKIAogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC00NjgsOSArNDY4LDkgQEAKICAqLwogdm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPnRlc3RfbGlua193b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mcmVlX3NnX2VudihzdHJ1Y3QgemZjcF9mY19ncG5fZnQgKmdwbl9mdCwgaW50IGJ1Zl9udW0pCkBAIC02MTcsOCArNjE3LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCB0bXAsICZyZW1vdmVfbGgsIGxpc3QpIHsKIAkJemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAiZmNlZ3BmMiIsIE5VTEwpOwotCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UsCi0JCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOworCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC02NzEsMTIgKzY3MCwxMSBAQAogewogCXN0cnVjdCBmY19ic2dfam9iICpqb2IgPSBkYXRhOwogCXN0cnVjdCB6ZmNwX2ZzZl9jdF9lbHMgKnpmY3BfY3RfZWxzID0gam9iLT5kZF9kYXRhOwotCWludCBzdGF0dXMgPSB6ZmNwX2N0X2Vscy0+c3RhdHVzOwotCWludCByZXBseV9zdGF0dXM7CisJc3RydWN0IGZjX2JzZ19yZXBseSAqanIgPSBqb2ItPnJlcGx5OwogCi0JcmVwbHlfc3RhdHVzID0gc3RhdHVzID8gRkNfQ1RFTFNfU1RBVFVTX1JFSkVDVCA6IEZDX0NURUxTX1NUQVRVU19PSzsKLQlqb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5LnN0YXR1cyA9IHJlcGx5X3N0YXR1czsKLQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47CisJanItPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlqci0+cmVwbHlfZGF0YS5jdGVsc19yZXBseS5zdGF0dXMgPSBGQ19DVEVMU19TVEFUVVNfT0s7CisJanItPnJlc3VsdCA9IHpmY3BfY3RfZWxzLT5zdGF0dXMgPyAtRUlPIDogMDsKIAlqb2ItPmpvYl9kb25lKGpvYik7CiB9CiAKQEAgLTczMiw3ICs3MzAsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJZF9pZCA9IHBvcnQtPmRfaWQ7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJfSBlbHNlCiAJCWRfaWQgPSBudG9oMjQoam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMucG9ydF9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IGU4ZmI0ZDkuLjY1Mzg3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBGU0YgY29tbWFuZHMuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAjaW5jbHVkZSAiemZjcF9mYy5oIgogI2luY2x1ZGUgInpmY3BfZGJmLmgiCisjaW5jbHVkZSAiemZjcF9xZGlvLmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcXVlc3RfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTM5Myw3ICszOTUsNyBAQAogCWNhc2UgRlNGX1BST1RfTElOS19ET1dOOgogCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHJlcSwgImZzcHNlXzUiLAogCQkJCQkgICAgICZwc3EtPmxpbmtfZG93bl9pbmZvKTsKLQkJLyogRklYTUU6IHJlb3BlbmluZyBhZGFwdGVyIG5vdz8gYmV0dGVyIHdhaXQgZm9yIGxpbmsgdXAgKi8KKwkJLyogZ28gdGhyb3VnaCByZW9wZW4gdG8gZmx1c2ggcGVuZGluZyByZXF1ZXN0cyAqLwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNwc2VfNiIsIHJlcSk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BST1RfUkVFU1RfUVVFVUU6CkBAIC00NTcsMTUgKzQ1OSwxMCBAQAogdm9pZCB6ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlMSVNUX0hFQUQocmVtb3ZlX3F1ZXVlKTsKLQl1bnNpZ25lZCBpbnQgaTsKIAogCUJVR19PTihhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBSRVFVRVNUX0xJU1RfU0laRTsgaSsrKQotCQlsaXN0X3NwbGljZV9pbml0KCZhZGFwdGVyLT5yZXFfbGlzdFtpXSwgJnJlbW92ZV9xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCXpmY3BfcmVxbGlzdF9tb3ZlKGFkYXB0ZXItPnJlcV9saXN0LCAmcmVtb3ZlX3F1ZXVlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgJnJlbW92ZV9xdWV1ZSwgbGlzdCkgewogCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKQEAgLTQ5NSw4ICs0OTIsNiBAQAogCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPSBudG9oMjQoYm90dG9tLT5zX2lkKTsKIAlmY19ob3N0X3NwZWVkKHNob3N0KSA9IGJvdHRvbS0+ZmNfbGlua19zcGVlZDsKIAlmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKHNob3N0KSA9IEZDX0NPU19DTEFTUzIgfCBGQ19DT1NfQ0xBU1MzOwotCWZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoc2hvc3QpWzJdID0gMTsgLyogRkNQICovCi0JZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdClbMl0gPSAxOyAvKiBGQ1AgKi8KIAogCWFkYXB0ZXItPmh5ZHJhX3ZlcnNpb24gPSBib3R0b20tPmFkYXB0ZXJfdHlwZTsKIAlhZGFwdGVyLT50aW1lcl90aWNrcyA9IGJvdHRvbS0+dGltZXJfaW50ZXJ2YWw7CkBAIC02MTksNiArNjE0LDEwIEBACiAJCWZjX2hvc3RfcGVybWFuZW50X3BvcnRfbmFtZShzaG9zdCkgPSBmY19ob3N0X3BvcnRfbmFtZShzaG9zdCk7CiAJZmNfaG9zdF9tYXhmcmFtZV9zaXplKHNob3N0KSA9IGJvdHRvbS0+bWF4aW11bV9mcmFtZV9zaXplOwogCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhzaG9zdCkgPSBib3R0b20tPnN1cHBvcnRlZF9zcGVlZDsKKwltZW1jcHkoZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhzaG9zdCksIGJvdHRvbS0+c3VwcG9ydGVkX2ZjNF90eXBlcywKKwkgICAgICAgRkNfRkM0X0xJU1RfU0laRSk7CisJbWVtY3B5KGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpLCBib3R0b20tPmFjdGl2ZV9mYzRfdHlwZXMsCisJICAgICAgIEZDX0ZDNF9MSVNUX1NJWkUpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCkBAIC03MjUsMTIgKzcyNCwxMiBAQAogCXJlcS0+YWRhcHRlciA9IGFkYXB0ZXI7CiAJcmVxLT5mc2ZfY29tbWFuZCA9IGZzZl9jbWQ7CiAJcmVxLT5yZXFfaWQgPSBhZGFwdGVyLT5yZXFfbm87Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbF9udW1iZXIgPSAxOwotCXJlcS0+cXVldWVfcmVxLnNiYWxfZmlyc3QgPSByZXFfcS0+Zmlyc3Q7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbF9sYXN0ID0gcmVxX3EtPmZpcnN0OwotCXJlcS0+cXVldWVfcmVxLnNiYWxlX2N1cnIgPSAxOworCXJlcS0+cWRpb19yZXEuc2JhbF9udW1iZXIgPSAxOworCXJlcS0+cWRpb19yZXEuc2JhbF9maXJzdCA9IHJlcV9xLT5maXJzdDsKKwlyZXEtPnFkaW9fcmVxLnNiYWxfbGFzdCA9IHJlcV9xLT5maXJzdDsKKwlyZXEtPnFkaW9fcmVxLnNiYWxlX2N1cnIgPSAxOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5hZGRyID0gKHZvaWQgKikgcmVxLT5yZXFfaWQ7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfQ09NTUFORDsKIApAQCAtNzQ1LDYgKzc0NCw3IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJfQogCisJCXJlcS0+c2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CiAJCXJlcS0+cXRjYi0+cHJlZml4LnJlcV9zZXFfbm8gPSBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKIAkJcmVxLT5xdGNiLT5wcmVmaXgucmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAJCXJlcS0+cXRjYi0+cHJlZml4LnVscF9pbmZvID0gMjY7CkBAIC03NTIsOCArNzUyLDYgQEAKIAkJcmVxLT5xdGNiLT5wcmVmaXgucXRjYl92ZXJzaW9uID0gRlNGX1FUQ0JfQ1VSUkVOVF9WRVJTSU9OOwogCQlyZXEtPnF0Y2ItPmhlYWRlci5yZXFfaGFuZGxlID0gcmVxLT5yZXFfaWQ7CiAJCXJlcS0+cXRjYi0+aGVhZGVyLmZzZl9jb21tYW5kID0gcmVxLT5mc2ZfY29tbWFuZDsKLQkJcmVxLT5zZXFfbm8gPSBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKLQkJcmVxLT5xdGNiLT5wcmVmaXgucmVxX3NlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwogCQlzYmFsZVsxXS5hZGRyID0gKHZvaWQgKikgcmVxLT5xdGNiOwogCQlzYmFsZVsxXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGZzZl9xdGNiKTsKIAl9CkBAIC03NzAsMjUgKzc2OCwxNyBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSByZXEtPmFkYXB0ZXI7CiAJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGFkYXB0ZXItPnFkaW87Ci0JdW5zaWduZWQgbG9uZwkgICAgIGZsYWdzOwotCWludAkJICAgICBpZHg7Ci0JaW50CQkgICAgIHdpdGhfcXRjYiA9IChyZXEtPnF0Y2IgIT0gTlVMTCk7CisJaW50IHdpdGhfcXRjYiA9IChyZXEtPnF0Y2IgIT0gTlVMTCk7CisJaW50IHJlcV9pZCA9IHJlcS0+cmVxX2lkOwogCi0JLyogcHV0IGFsbG9jYXRlZCBGU0YgcmVxdWVzdCBpbnRvIGhhc2ggdGFibGUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCWlkeCA9IHpmY3BfcmVxbGlzdF9oYXNoKHJlcS0+cmVxX2lkKTsKLQlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZhZGFwdGVyLT5yZXFfbGlzdFtpZHhdKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisJemZjcF9yZXFsaXN0X2FkZChhZGFwdGVyLT5yZXFfbGlzdCwgcmVxKTsKIAotCXJlcS0+cXVldWVfcmVxLnFkaW9fb3V0Yl91c2FnZSA9IGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcS5jb3VudCk7CisJcmVxLT5xZGlvX3JlcS5xZGlvX291dGJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOwogCXJlcS0+aXNzdWVkID0gZ2V0X2Nsb2NrKCk7Ci0JaWYgKHpmY3BfcWRpb19zZW5kKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSkpIHsKKwlpZiAoemZjcF9xZGlvX3NlbmQocWRpbywgJnJlcS0+cWRpb19yZXEpKSB7CiAJCWRlbF90aW1lcigmcmVxLT50aW1lcik7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CiAJCS8qIGxvb2t1cCByZXF1ZXN0IGFnYWluLCBsaXN0IG1pZ2h0IGhhdmUgY2hhbmdlZCAqLwotCQlpZiAoemZjcF9yZXFsaXN0X2ZpbmRfc2FmZShhZGFwdGVyLCByZXEpKQotCQkJemZjcF9yZXFsaXN0X3JlbW92ZShhZGFwdGVyLCByZXEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisJCXpmY3BfcmVxbGlzdF9maW5kX3JtKGFkYXB0ZXItPnJlcV9saXN0LCByZXFfaWQpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNyc19fMSIsIHJlcSk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTgyNiw5ICs4MTYsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzJdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsZV9jdXJyID0gMjsKKwlyZXEtPnFkaW9fcmVxLnNiYWxlX2N1cnIgPSAyOwogCiAJc3JfYnVmID0gbWVtcG9vbF9hbGxvYyhhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX2RhdGEsIEdGUF9BVE9NSUMpOwogCWlmICghc3JfYnVmKSB7CkBAIC04MzcsNyArODI3LDcgQEAKIAl9CiAJbWVtc2V0KHNyX2J1ZiwgMCwgc2l6ZW9mKCpzcl9idWYpKTsKIAlyZXEtPmRhdGEgPSBzcl9idWY7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlLT5hZGRyID0gKHZvaWQgKikgc3JfYnVmOwogCXNiYWxlLT5sZW5ndGggPSBzaXplb2YoKnNyX2J1Zik7CiAKQEAgLTkzNCw3ICs5MjQsNyBAQAogCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCkpKQogCQlnb3RvIG91dF9lcnJvcl9mcmVlOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xMDI5LDcgKzEwMTksNyBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSByZXEtPmFkYXB0ZXI7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShhZGFwdGVyLT5xZGlvLAotCQkJCQkJCSAgICAgICAmcmVxLT5xdWV1ZV9yZXEpOworCQkJCQkJCSAgICAgICAmcmVxLT5xZGlvX3JlcSk7CiAJdTMyIGZlYXQgPSBhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzOwogCWludCBieXRlczsKIApAQCAtMTA0NywxNSArMTAzNywxNSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKKwlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnFkaW9fcmVxLAogCQkJCQlTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsCiAJCQkJCXNnX3JlcSwgbWF4X3NiYWxzKTsKIAlpZiAoYnl0ZXMgPD0gMCkKIAkJcmV0dXJuIC1FSU87CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5yZXFfYnVmX2xlbmd0aCA9IGJ5dGVzOwotCXJlcS0+cXVldWVfcmVxLnNiYWxlX2N1cnIgPSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUw7CisJcmVxLT5xZGlvX3JlcS5zYmFsZV9jdXJyID0gWkZDUF9MQVNUX1NCQUxFX1BFUl9TQkFMOwogCi0JYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCisJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xZGlvX3JlcSwKIAkJCQkJU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELAogCQkJCQlzZ19yZXNwLCBtYXhfc2JhbHMpOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVzcF9idWZfbGVuZ3RoID0gYnl0ZXM7CkBAIC0xMjUxLDcgKzEyNDEsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTI2MiwxMyArMTI1MiwxMyBAQAogCQkJRlNGX0ZFQVRVUkVfVVBEQVRFX0FMRVJUOwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfaGFuZGxlcjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTEyOTMsNyArMTI4Myw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfaGFuZGxlcjsKQEAgLTEzNDksMTkgKzEzMzksMTkgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfaGFuZGxlcjsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTM5OCw3ICsxMzg4LDcgQEAKIAlpZiAoZGF0YSkKIAkJcmVxLT5kYXRhID0gZGF0YTsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTQ4NCw3ICsxNDc0LDcgQEAKIAl9CiAKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIC8qKgpAQCAtMTUxMyw3ICsxNTAzLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogICAgICAgICBzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAgICAgICAgIHNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTUyMSwxNSArMTUxMSwxNSBAQAogCWh0b24yNChyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LmRfaWQsIHBvcnQtPmRfaWQpOwogCXJlcS0+ZGF0YSA9IHBvcnQ7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOwotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xNTgzLDcgKzE1NzMsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTU5MSwxMyArMTU4MSwxMyBAQAogCXJlcS0+ZGF0YSA9IGVycF9hY3Rpb24tPnBvcnQ7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAlyZXEtPnF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZSA9IGVycF9hY3Rpb24tPnBvcnQtPmhhbmRsZTsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTE2NjAsNyArMTY1MCw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNzE1LDcgKzE3MDUsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTgwOSw3ICsxNzk5LDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE4MTcsMTMgKzE4MDcsMTMgQEAKIAlyZXEtPnF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZSA9IGVycF9hY3Rpb24tPnBvcnQtPmhhbmRsZTsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2Nsb3NlX3BoeXNpY2FsX3BvcnRfaGFuZGxlcjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTE5ODIsNyArMTk3Miw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKICAgICAgICAgc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogICAgICAgICBzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE5OTEsNyArMTk4MSw3IEBACiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2Zfb3Blbl91bml0X2hhbmRsZXI7CiAJcmVxLT5kYXRhID0gZXJwX2FjdGlvbi0+dW5pdDsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJaWYgKCEoYWRhcHRlci0+Y29ubmVjdGlvbl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX05QSVZfTU9ERSkpCiAJCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQub3B0aW9uID0gRlNGX09QRU5fTFVOX1NVUFBSRVNTX0JPWElORzsKQEAgLTIwMDAsNyArMTk5MCw3IEBACiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMjA2OCw3ICsyMDU4LDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTIwNzcsMTMgKzIwNjcsMTMgQEAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9jbG9zZV91bml0X2hhbmRsZXI7CiAJcmVxLT5kYXRhID0gZXJwX2FjdGlvbi0+dW5pdDsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMjExMSw4ICsyMTAxLDggQEAKIAlibGt0cmMubWFnaWMgPSBaRkNQX0JMS19EUlZfREFUQV9NQUdJQzsKIAlpZiAocmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpCiAJCWJsa3RyYy5mbGFncyB8PSBaRkNQX0JMS19SRVFfRVJST1I7Ci0JYmxrdHJjLmluYl91c2FnZSA9IHJlcS0+cXVldWVfcmVxLnFkaW9faW5iX3VzYWdlOwotCWJsa3RyYy5vdXRiX3VzYWdlID0gcmVxLT5xdWV1ZV9yZXEucWRpb19vdXRiX3VzYWdlOworCWJsa3RyYy5pbmJfdXNhZ2UgPSByZXEtPnFkaW9fcmVxLnFkaW9faW5iX3VzYWdlOworCWJsa3RyYy5vdXRiX3VzYWdlID0gcmVxLT5xZGlvX3JlcS5xZGlvX291dGJfdXNhZ2U7CiAKIAlpZiAocmVxLT5hZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTUVBU1VSRU1FTlRfREFUQSkgewogCQlibGt0cmMuZmxhZ3MgfD0gWkZDUF9CTEtfTEFUX1ZBTElEOwpAQCAtMjE2OSwxMiArMjE1OSw3IEBACiAJemZjcF9mc2ZfcmVxX3RyYWNlKHJlcSwgc2NwbnQpOwogCiBza2lwX2ZzZnN0YXR1czoKLQlpZiAoc2NwbnQtPnJlc3VsdCAhPSAwKQotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZXJybyIsIDMsIHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKLQllbHNlIGlmIChzY3BudC0+cmV0cmllcyA+IDApCi0JCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJyZXRyIiwgNCwgcmVxLT5hZGFwdGVyLT5kYmYsIHNjcG50LCByZXEpOwotCWVsc2UKLQkJemZjcF9kYmZfc2NzaV9yZXN1bHQoIm5vcm0iLCA2LCByZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7CisJemZjcF9kYmZfc2NzaV9yZXN1bHQocmVxLT5hZGFwdGVyLT5kYmYsIHNjcG50LCByZXEpOwogCiAJc2NwbnQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCShzY3BudC0+c2NzaV9kb25lKSAoc2NwbnQpOwpAQCAtMjI3NCw3ICsyMjU5LDcgQEAKIAllbHNlIHsKIAkJemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF90YXNrX2hhbmRsZXIocmVxKTsKIAkJcmVxLT51bml0ID0gTlVMTDsKLQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAl9CiB9CiAKQEAgLTIzMTIsNyArMjI5Nyw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0JZ2V0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCXJlcS0+dW5pdCA9IHVuaXQ7CiAJcmVxLT5kYXRhID0gc2NzaV9jbW5kOwogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfaGFuZGxlcjsKQEAgLTIzNDYsMTEgKzIzMzEsMTEgQEAKIAlmY3BfY21uZCA9IChzdHJ1Y3QgZmNwX2NtbmQgKikgJnJlcS0+cXRjYi0+Ym90dG9tLmlvLmZjcF9jbW5kOwogCXpmY3BfZmNfc2NzaV90b19mY3AoZmNwX2NtbmQsIHNjc2lfY21uZCk7CiAKLQlyZWFsX2J5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocWRpbywgJnJlcS0+cXVldWVfcmVxLCBzYnR5cGUsCisJcmVhbF9ieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnFkaW9fcmVxLCBzYnR5cGUsCiAJCQkJCSAgICAgc2NzaV9zZ2xpc3Qoc2NzaV9jbW5kKSwKIAkJCQkJICAgICBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOwogCWlmICh1bmxpa2VseShyZWFsX2J5dGVzIDwgMCkpIHsKLQkJaWYgKHJlcS0+cXVldWVfcmVxLnNiYWxfbnVtYmVyID49IEZTRl9NQVhfU0JBTFNfUEVSX1JFUSkgeworCQlpZiAocmVxLT5xZGlvX3JlcS5zYmFsX251bWJlciA+PSBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpIHsKIAkJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCQkiT3ZlcnNpemUgZGF0YSBwYWNrYWdlLCB1bml0IDB4JTAxNkx4ICIKIAkJCQkib24gcG9ydCAweCUwMTZMeCBjbG9zZWRcbiIsCkBAIC0yMzY5LDcgKzIzNTQsNyBAQAogCWdvdG8gb3V0OwogCiBmYWlsZWRfc2NzaV9jbW5kOgotCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCXNjc2lfY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiBvdXQ6CkBAIC0yNDE1LDcgKzI0MDAsNyBAQAogCXJlcS0+cXRjYi0+Ym90dG9tLmlvLnNlcnZpY2VfY2xhc3MgPSBGU0ZfQ0xBU1NfMzsKIAlyZXEtPnF0Y2ItPmJvdHRvbS5pby5mY3BfY21uZF9sZW5ndGggPSBGQ1BfQ01ORF9MRU47CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfV1JJVEU7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0yNDc4LDE0ICsyNDYzLDE0IEBACiAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9jb250cm9sX2ZpbGVfaGFuZGxlcjsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gZGlyZWN0aW9uOwogCiAJYm90dG9tID0gJnJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQ7CiAJYm90dG9tLT5vcGVyYXRpb25fc3VidHlwZSA9IEZTRl9DRkRDX09QRVJBVElPTl9TVUJUWVBFOwogCWJvdHRvbS0+b3B0aW9uID0gZnNmX2NmZGMtPm9wdGlvbjsKIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocWRpbywgJnJlcS0+cXVldWVfcmVxLAorCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocWRpbywgJnJlcS0+cWRpb19yZXEsCiAJCQkJCWRpcmVjdGlvbiwgZnNmX2NmZGMtPnNnLAogCQkJCQlGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOwogCWlmIChieXRlcyAhPSBaRkNQX0NGRENfTUFYX1NJWkUpIHsKQEAgLTI1MTYsMTUgKzI1MDEsMTQgQEAKIAlzdHJ1Y3QgcWRpb19idWZmZXIgKnNiYWwgPSBxZGlvLT5yZXNwX3Euc2JhbFtzYmFsX2lkeF07CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcmVxX2lkOworCXVuc2lnbmVkIGxvbmcgcmVxX2lkOwogCWludCBpZHg7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IFFESU9fTUFYX0VMRU1FTlRTX1BFUl9CVUZGRVI7IGlkeCsrKSB7CiAKIAkJc2JhbGUgPSAmc2JhbC0+ZWxlbWVudFtpZHhdOwogCQlyZXFfaWQgPSAodW5zaWduZWQgbG9uZykgc2JhbGUtPmFkZHI7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWZzZl9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZChhZGFwdGVyLCByZXFfaWQpOworCQlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmRfcm0oYWRhcHRlci0+cmVxX2xpc3QsIHJlcV9pZCk7CiAKIAkJaWYgKCFmc2ZfcmVxKQogCQkJLyoKQEAgLTI1MzQsMTEgKzI1MTgsOCBAQAogCQkJcGFuaWMoImVycm9yOiB1bmtub3duIHJlcV9pZCAoJWx4KSBvbiBhZGFwdGVyICVzLlxuIiwKIAkJCSAgICAgIHJlcV9pZCwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOwogCi0JCWxpc3RfZGVsKCZmc2ZfcmVxLT5saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JCWZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX3Jlc3BvbnNlID0gc2JhbF9pZHg7Ci0JCWZzZl9yZXEtPnF1ZXVlX3JlcS5xZGlvX2luYl91c2FnZSA9CisJCWZzZl9yZXEtPnFkaW9fcmVxLnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKKwkJZnNmX3JlcS0+cWRpb19yZXEucWRpb19pbmJfdXNhZ2UgPQogCQkJYXRvbWljX3JlYWQoJnFkaW8tPnJlc3BfcS5jb3VudCk7CiAJCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCA2YzUyMjhiLi43MWI5N2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMTAsNiArMTAsNyBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCiAjaW5jbHVkZSAiemZjcF9leHQuaCIKKyNpbmNsdWRlICJ6ZmNwX3FkaW8uaCIKIAogI2RlZmluZSBRQlVGRl9QRVJfUEFHRQkJKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgcWRpb19idWZmZXIpKQogCkBAIC0yOCwxMiArMjksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgotemZjcF9xZGlvX3NiYWxlKHN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnEsIGludCBzYmFsX2lkeCwgaW50IHNiYWxlX2lkeCkKLXsKLQlyZXR1cm4gJnEtPnNiYWxbc2JhbF9pZHhdLT5lbGVtZW50W3NiYWxlX2lkeF07Ci19Ci0KIHN0YXRpYyB2b2lkIHpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIGNoYXIgKmlkKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxZGlvLT5hZGFwdGVyOwpAQCAtMTA2LDcgKzEwMSw3IEBACiAKIAlpZiAodW5saWtlbHkocmV0dmFsKSkgewogCQlhdG9taWNfc2V0KCZxdWV1ZS0+Y291bnQsIGNvdW50KTsKLQkJLyogRklYTUU6IFJlY292ZXIgdGhpcyB3aXRoIGFuIGFkYXB0ZXIgcmVvcGVuPyAqLworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihxZGlvLT5hZGFwdGVyLCAwLCAicWRycGJfMSIsIE5VTEwpOwogCX0gZWxzZSB7CiAJCXF1ZXVlLT5maXJzdCArPSBjb3VudDsKIAkJcXVldWUtPmZpcnN0ICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CkBAIC0xNDUsMzIgKzE0MCw4IEBACiAJemZjcF9xZGlvX3Jlc3BfcHV0X2JhY2socWRpbywgY291bnQpOwogfQogCi0vKioKLSAqIHpmY3BfcWRpb19zYmFsZV9yZXEgLSByZXR1cm4gcHRyIHRvIFNCQUxFIG9mIHJlcV9xIGZvciBhIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKLSAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KLSAqIEBxX3JlYzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xdWV1ZV9yZWMKLSAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoU0JBTEUpIHN0cnVjdHVyZQotICovCi1zdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqemZjcF9xZGlvX3NiYWxlX3JlcShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCQkJc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKLXsKLQlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwgMCk7Ci19Ci0KLS8qKgotICogemZjcF9xZGlvX3NiYWxlX2N1cnIgLSByZXR1cm4gY3VyciBTQkFMRSBvbiByZXFfcSBmb3IgYSBzdHJ1Y3QgemZjcF9mc2ZfcmVxCi0gKiBAZnNmX3JlcTogcG9pbnRlciB0byBzdHJ1Y3QgZnNmX3JlcQotICogUmV0dXJuczogcG9pbnRlciB0byBxZGlvX2J1ZmZlcl9lbGVtZW50IChTQkFMRSkgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICp6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCQkJIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEpCi17Ci0JcmV0dXJuIHpmY3BfcWRpb19zYmFsZSgmcWRpby0+cmVxX3EsIHFfcmVxLT5zYmFsX2xhc3QsCi0JCQkgICAgICAgcV9yZXEtPnNiYWxlX2N1cnIpOwotfQotCiBzdGF0aWMgdm9pZCB6ZmNwX3FkaW9fc2JhbF9saW1pdChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCSBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLCBpbnQgbWF4X3NiYWxzKQorCQkJCSBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsIGludCBtYXhfc2JhbHMpCiB7CiAJaW50IGNvdW50ID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKIAljb3VudCA9IG1pbihjb3VudCwgbWF4X3NiYWxzKTsKQEAgLTE3OSw3ICsxNTAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgotemZjcF9xZGlvX3NiYWxfY2hhaW4oc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKK3pmY3BfcWRpb19zYmFsX2NoYWluKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKIAkJICAgICB1bnNpZ25lZCBsb25nIHNidHlwZSkKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CkBAIC0yMTQsNyArMTg1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKLXpmY3BfcWRpb19zYmFsZV9uZXh0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsCit6ZmNwX3FkaW9fc2JhbGVfbmV4dChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCiAJCSAgICAgdW5zaWduZWQgaW50IHNidHlwZSkKIHsKIAlpZiAocV9yZXEtPnNiYWxlX2N1cnIgPT0gWkZDUF9MQVNUX1NCQUxFX1BFUl9TQkFMKQpAQCAtMjI0LDcgKzE5NSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfcWRpb191bmRvX3NiYWxzKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEpCisJCQkJIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXIgKipzYmFsID0gcWRpby0+cmVxX3Euc2JhbDsKIAlpbnQgZmlyc3QgPSBxX3JlcS0+c2JhbF9maXJzdDsKQEAgLTIzNSw3ICsyMDYsNyBAQAogfQogCiBzdGF0aWMgaW50IHpmY3BfcWRpb19maWxsX3NiYWxzKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKKwkJCQlzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCiAJCQkJdW5zaWduZWQgaW50IHNidHlwZSwgdm9pZCAqc3RhcnRfYWRkciwKIAkJCQl1bnNpZ25lZCBpbnQgdG90YWxfbGVuZ3RoKQogewpAQCAtMjcxLDggKzI0Miw3IEBACiAgKiBAbWF4X3NiYWxzOiB1cHBlciBib3VuZCBmb3IgbnVtYmVyIG9mIFNCQUxzIHRvIGJlIHVzZWQKICAqIFJldHVybnM6IG51bWJlciBvZiBieXRlcywgb3IgZXJyb3IgKG5lZ2F0aXYpCiAgKi8KLWludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJICAgIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsCitpbnQgemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgc2J0eXBlLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogCQkJICAgIGludCBtYXhfc2JhbHMpCiB7CkBAIC0zMDQsMTAgKzI3NCwxMCBAQAogLyoqCiAgKiB6ZmNwX3FkaW9fc2VuZCAtIHNldCBQQ0kgZmxhZyBpbiBmaXJzdCBTQkFMRSBhbmQgc2VuZCByZXEgdG8gUURJTwogICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbwotICogQHFfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcQorICogQHFfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW9fcmVxCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIG90aGVyd2lzZQogICovCi1pbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKK2ludCB6ZmNwX3FkaW9fc2VuZChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEpCiB7CiAJc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcmVxX3EgPSAmcWRpby0+cmVxX3E7CiAJaW50IGZpcnN0ID0gcV9yZXEtPnNiYWxfZmlyc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjY2E1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIHpmY3AgZGV2aWNlIGRyaXZlcgorICoKKyAqIEhlYWRlciBmaWxlIGZvciB6ZmNwIHFkaW8gaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDEwCisgKi8KKworI2lmbmRlZiBaRkNQX1FESU9fSAorI2RlZmluZSBaRkNQX1FESU9fSAorCisjaW5jbHVkZSA8YXNtL3FkaW8uaD4KKworLyoqCisgKiBzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlIC0gcWRpbyBxdWV1ZSBidWZmZXIsIHpmY3AgaW5kZXggYW5kIGZyZWUgY291bnQKKyAqIEBzYmFsOiBxZGlvIGJ1ZmZlcnMKKyAqIEBmaXJzdDogaW5kZXggb2YgbmV4dCBmcmVlIGJ1ZmZlciBpbiBxdWV1ZQorICogQGNvdW50OiBudW1iZXIgb2YgZnJlZSBidWZmZXJzIGluIHF1ZXVlCisgKi8KK3N0cnVjdCB6ZmNwX3FkaW9fcXVldWUgeworCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKKwl1OAkJICAgZmlyc3Q7CisJYXRvbWljX3QgICAgICAgICAgIGNvdW50OworfTsKKworLyoqCisgKiBzdHJ1Y3QgemZjcF9xZGlvIC0gYmFzaWMgcWRpbyBkYXRhIHN0cnVjdHVyZQorICogQHJlc3BfcTogcmVzcG9uc2UgcXVldWUKKyAqIEByZXFfcTogcmVxdWVzdCBxdWV1ZQorICogQHN0YXRfbG9jazogbG9jayB0byBwcm90ZWN0IHJlcV9xX3V0aWwgYW5kIHJlcV9xX3RpbWUKKyAqIEByZXFfcV9sb2NrOiBsb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gcmVxdWVzdCBxdWV1ZQorICogQHJlcV9xX3RpbWU6IHRpbWUgb2YgbGFzdCBmaWxsIGxldmVsIGNoYW5nZQorICogQHJlcV9xX3V0aWw6IHVzZWQgZm9yIGFjY291bnRpbmcKKyAqIEByZXFfcV9mdWxsOiBxdWV1ZSBmdWxsIGluY2lkZW50cworICogQHJlcV9xX3dxOiB1c2VkIHRvIHdhaXQgZm9yIFNCQUwgYXZhaWxhYmlsaXR5CisgKiBAYWRhcHRlcjogYWRhcHRlciB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBxZGlvIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgemZjcF9xZGlvIHsKKwlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlCXJlc3BfcTsKKwlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlCXJlcV9xOworCXNwaW5sb2NrX3QJCXN0YXRfbG9jazsKKwlzcGlubG9ja190CQlyZXFfcV9sb2NrOworCXVuc2lnbmVkIGxvbmcgbG9uZwlyZXFfcV90aW1lOworCXU2NAkJCXJlcV9xX3V0aWw7CisJYXRvbWljX3QJCXJlcV9xX2Z1bGw7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVxX3Ffd3E7CisJc3RydWN0IHpmY3BfYWRhcHRlcgkqYWRhcHRlcjsKK307CisKKy8qKgorICogc3RydWN0IHpmY3BfcWRpb19yZXEgLSBxZGlvIHF1ZXVlIHJlbGF0ZWQgdmFsdWVzIGZvciBhIHJlcXVlc3QKKyAqIEBzYmFsX251bWJlcjogbnVtYmVyIG9mIGZyZWUgc2JhbHMKKyAqIEBzYmFsX2ZpcnN0OiBmaXJzdCBzYmFsIGZvciB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsX2xhc3Q6IGxhc3Qgc2JhbCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAc2JhbF9saW1pdDogbGFzdCBwb3NzaWJsZSBzYmFsIGZvciB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsZV9jdXJyOiBjdXJyZW50IHNiYWxlIGF0IGNyZWF0aW9uIG9mIHRoaXMgcmVxdWVzdAorICogQHNiYWxfcmVzcG9uc2U6IHNiYWwgdXNlZCBpbiBpbnRlcnJ1cHQKKyAqIEBxZGlvX291dGJfdXNhZ2U6IHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlCisgKiBAcWRpb19pbmJfdXNhZ2U6IHVzYWdlIG9mIGluYm91bmQgcXVldWUKKyAqLworc3RydWN0IHpmY3BfcWRpb19yZXEgeworCXU4CXNiYWxfbnVtYmVyOworCXU4CXNiYWxfZmlyc3Q7CisJdTgJc2JhbF9sYXN0OworCXU4CXNiYWxfbGltaXQ7CisJdTgJc2JhbGVfY3VycjsKKwl1OAlzYmFsX3Jlc3BvbnNlOworCXUxNglxZGlvX291dGJfdXNhZ2U7CisJdTE2CXFkaW9faW5iX3VzYWdlOworfTsKKworLyoqCisgKiB6ZmNwX3FkaW9fc2JhbGUgLSByZXR1cm4gcG9pbnRlciB0byBzYmFsZSBpbiBxZGlvIHF1ZXVlCisgKiBAcTogcXVldWUgd2hlcmUgdG8gZmluZCBzYmFsCisgKiBAc2JhbF9pZHg6IHNiYWwgaW5kZXggaW4gcXVldWUKKyAqIEBzYmFsZV9pZHg6IHNiYWxlIGluZGV4IGluIHNiYWwKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCit6ZmNwX3FkaW9fc2JhbGUoc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcSwgaW50IHNiYWxfaWR4LCBpbnQgc2JhbGVfaWR4KQoreworCXJldHVybiAmcS0+c2JhbFtzYmFsX2lkeF0tPmVsZW1lbnRbc2JhbGVfaWR4XTsKK30KKworLyoqCisgKiB6ZmNwX3FkaW9fc2JhbGVfcmVxIC0gcmV0dXJuIHBvaW50ZXIgdG8gc2JhbGUgb24gcmVxX3EgZm9yIGEgcmVxdWVzdAorICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbworICogQHFfcmVjOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW9fcmVxCisgKiBSZXR1cm5zOiBwb2ludGVyIHRvIHFkaW9fYnVmZmVyX2VsZW1lbnQgKHNiYWxlKSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCit6ZmNwX3FkaW9fc2JhbGVfcmVxKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKK3sKKwlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwgMCk7Cit9CisKKy8qKgorICogemZjcF9xZGlvX3NiYWxlX2N1cnIgLSByZXR1cm4gY3VycmVudCBzYmFsZSBvbiByZXFfcSBmb3IgYSByZXF1ZXN0CisgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCisgKiBAZnNmX3JlcTogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9mc2ZfcmVxCisgKiBSZXR1cm5zOiBwb2ludGVyIHRvIHFkaW9fYnVmZmVyX2VsZW1lbnQgKHNiYWxlKSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCit6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEpCit7CisJcmV0dXJuIHpmY3BfcWRpb19zYmFsZSgmcWRpby0+cmVxX3EsIHFfcmVxLT5zYmFsX2xhc3QsCisJCQkgICAgICAgcV9yZXEtPnNiYWxlX2N1cnIpOworfQorCisjZW5kaWYgLyogWkZDUF9RRElPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcmVxbGlzdC5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9yZXFsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyZDFiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcmVxbGlzdC5oCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogemZjcCBkZXZpY2UgZHJpdmVyCisgKgorICogRGF0YSBzdHJ1Y3R1cmUgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRyYWNraW5nIHBlbmRpbmcgRlNGCisgKiByZXF1ZXN0cy4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDkKKyAqLworCisjaWZuZGVmIFpGQ1BfUkVRTElTVF9ICisjZGVmaW5lIFpGQ1BfUkVRTElTVF9ICisKKy8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi8KKyNkZWZpbmUgWkZDUF9SRVFfTElTVF9CVUNLRVRTIDEyOAorCisvKioKKyAqIHN0cnVjdCB6ZmNwX3JlcWxpc3QgLSBDb250YWluZXIgZm9yIHJlcXVlc3QgbGlzdCAocmVxbGlzdCkKKyAqIEBsb2NrOiBTcGlubG9jayBmb3IgcHJvdGVjdGluZyB0aGUgaGFzaCBsaXN0CisgKiBAbGlzdDogQXJyYXkgb2YgaGFzaGJ1Y2tldHMsIGVhY2ggaXMgYSBsaXN0IG9mIHJlcXVlc3RzIGluIHRoaXMgYnVja2V0CisgKi8KK3N0cnVjdCB6ZmNwX3JlcWxpc3QgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1Y2tldHNbWkZDUF9SRVFfTElTVF9CVUNLRVRTXTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHpmY3BfcmVxbGlzdF9oYXNoKHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXJldHVybiByZXFfaWQgJSBaRkNQX1JFUV9MSVNUX0JVQ0tFVFM7Cit9CisKKy8qKgorICogemZjcF9yZXFsaXN0X2FsbG9jIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcmVxbGlzdAorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgcmVxbGlzdCBvbiBzdWNjZXNzLCBvciBOVUxMIG9uCisgKiBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfcmVxbGlzdCAqemZjcF9yZXFsaXN0X2FsbG9jKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHpmY3BfcmVxbGlzdCAqcmw7CisKKwlybCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6ZmNwX3JlcWxpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJsKQorCQlyZXR1cm4gTlVMTDsKKworCXNwaW5fbG9ja19pbml0KCZybC0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgWkZDUF9SRVFfTElTVF9CVUNLRVRTOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZybC0+YnVja2V0c1tpXSk7CisKKwlyZXR1cm4gcmw7Cit9CisKKy8qKgorICogemZjcF9yZXFsaXN0X2lzZW1wdHkgLSBDaGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0IGxpc3QgZW1wdHkKKyAqIEBybDogcG9pbnRlciB0byByZXFsaXN0CisgKgorICogUmV0dXJuczogMSBpZiBsaXN0IGlzIGVtcHR5LCAwIGlmIG5vdAorICovCitzdGF0aWMgaW5saW5lIGludCB6ZmNwX3JlcWxpc3RfaXNlbXB0eShzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBaRkNQX1JFUV9MSVNUX0JVQ0tFVFM7IGkrKykKKwkJaWYgKCFsaXN0X2VtcHR5KCZybC0+YnVja2V0c1tpXSkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfZnJlZSAtIEZyZWUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgcmVxbGlzdAorICogQHJsOiBUaGUgcmVxbGlzdCB3aGVyZSB0byBmcmVlIG1lbW9yeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X2ZyZWUoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwpCit7CisJLyogc2FuaXR5IGNoZWNrICovCisJQlVHX09OKCF6ZmNwX3JlcWxpc3RfaXNlbXB0eShybCkpOworCisJa2ZyZWUocmwpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKgorX3pmY3BfcmVxbGlzdF9maW5kKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLCB1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3sKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CisJdW5zaWduZWQgaW50IGk7CisKKwlpID0gemZjcF9yZXFsaXN0X2hhc2gocmVxX2lkKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJnJsLT5idWNrZXRzW2ldLCBsaXN0KQorCQlpZiAocmVxLT5yZXFfaWQgPT0gcmVxX2lkKQorCQkJcmV0dXJuIHJlcTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfZmluZCAtIExvb2t1cCBGU0YgcmVxdWVzdCBieSBpdHMgcmVxdWVzdCBpZAorICogQHJsOiBUaGUgcmVxbGlzdCB3aGVyZSB0byBsb29rdXAgdGhlIEZTRiByZXF1ZXN0CisgKiBAcmVxX2lkOiBUaGUgcmVxdWVzdCBpZCB0byBsb29rIGZvcgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBGU0YgcmVxdWVzdCB3aXRoIHRoZSBzcGVjaWZpZWQgcmVxdWVzdCBpZAorICogb3IgTlVMTCBpZiB0aGVyZSBpcyBubyBrbm93biBGU0YgcmVxdWVzdCB3aXRoIHRoaXMgaWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfZnNmX3JlcSAqCit6ZmNwX3JlcWxpc3RfZmluZChzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCwgdW5zaWduZWQgbG9uZyByZXFfaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmwtPmxvY2ssIGZsYWdzKTsKKwlyZXEgPSBfemZjcF9yZXFsaXN0X2ZpbmQocmwsIHJlcV9pZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmwtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXE7Cit9CisKKy8qKgorICogemZjcF9yZXFsaXN0X2ZpbmRfcm0gLSBMb29rdXAgcmVxdWVzdCBieSBpZCBhbmQgcmVtb3ZlIGl0IGZyb20gcmVxbGlzdAorICogQHJsOiByZXFsaXN0IHdoZXJlIHRvIHNlYXJjaCBhbmQgcmVtb3ZlIGVudHJ5CisgKiBAcmVxX2lkOiBUaGUgcmVxdWVzdCBpZCBvZiB0aGUgcmVxdWVzdCB0byBsb29rIGZvcgorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHRyaWVzIHRvIGZpbmQgdGhlIEZTRiByZXF1ZXN0IHdpdGggdGhlIHNwZWNpZmllZAorICogaWQgYW5kIHRoZW4gcmVtb3ZlcyBpdCBmcm9tIHRoZSByZXFsaXN0LiBUaGUgcmVxbGlzdCBsb2NrIGlzIGhlbGQKKyAqIGR1cmluZyBib3RoIHN0ZXBzIG9mIHRoZSBvcGVyYXRpb24uCisgKgorICogUmV0dXJuczogUG9pbnRlciB0byB0aGUgRlNGIHJlcXVlc3QgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gZm91bmQsCisgKiBOVUxMIGlmIGl0IGhhcyBub3QgYmVlbiBmb3VuZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKK3pmY3BfcmVxbGlzdF9maW5kX3JtKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLCB1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZybC0+bG9jaywgZmxhZ3MpOworCXJlcSA9IF96ZmNwX3JlcWxpc3RfZmluZChybCwgcmVxX2lkKTsKKwlpZiAocmVxKQorCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlcTsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfYWRkIC0gQWRkIGVudHJ5IHRvIHJlcWxpc3QKKyAqIEBybDogcmVxbGlzdCB3aGVyZSB0byBhZGQgdGhlIGVudHJ5CisgKiBAcmVxOiBUaGUgZW50cnkgdG8gYWRkCisgKgorICogVGhlIHJlcXVlc3QgaWQgYWx3YXlzIGluY3JlYXNlcy4gQXMgYW4gb3B0aW1pemF0aW9uIG5ldyByZXF1ZXN0cworICogYXJlIGFkZGVkIGhlcmUgd2l0aCBsaXN0X2FkZF90YWlsIGF0IHRoZSBlbmQgb2YgdGhlIGJ1Y2tldCBsaXN0cworICogd2hpbGUgb2xkIHJlcXVlc3RzIGFyZSBsb29rZWQgdXAgc3RhcnRpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAqIGxpc3RzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X2FkZChzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCwKKwkJCQkgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpID0gemZjcF9yZXFsaXN0X2hhc2gocmVxLT5yZXFfaWQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJsLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmcmwtPmJ1Y2tldHNbaV0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJsLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogemZjcF9yZXFsaXN0X21vdmUgLSBNb3ZlIGFsbCBlbnRyaWVzIGZyb20gcmVxbGlzdCB0byBzaW1wbGUgbGlzdAorICogQHJsOiBUaGUgemZjcF9yZXFsaXN0IHdoZXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcworICogQGxpc3Q6IFRoZSBsaXN0IHdoZXJlIHRvIG1vdmUgYWxsIGVudHJpZXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHpmY3BfcmVxbGlzdF9tb3ZlKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLAorCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJsLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IFpGQ1BfUkVRX0xJU1RfQlVDS0VUUzsgaSsrKQorCQlsaXN0X3NwbGljZV9pbml0KCZybC0+YnVja2V0c1tpXSwgbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmwtPmxvY2ssIGZsYWdzKTsKK30KKworI2VuZGlmIC8qIFpGQ1BfUkVRTElTVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCmluZGV4IDhlNmZjNjguLmMzYzQxNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEludGVyZmFjZSB0byBMaW51eCBTQ1NJIG1pZGxheWVyLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgogI2luY2x1ZGUgInpmY3BfZGJmLmgiCiAjaW5jbHVkZSAiemZjcF9mYy5oIgorI2luY2x1ZGUgInpmY3BfcmVxbGlzdC5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfZGVwdGggPSAzMjsKIG1vZHVsZV9wYXJhbV9uYW1lZChxdWV1ZV9kZXB0aCwgZGVmYXVsdF9kZXB0aCwgdWludCwgMDYwMCk7CkBAIC00Myw3ICs0NCw3IEBACiB7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIHNkcG50LT5ob3N0ZGF0YTsKIAl1bml0LT5kZXZpY2UgPSBOVUxMOwotCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIH0KIAogc3RhdGljIGludCB6ZmNwX3Njc2lfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKQpAQCAtNTksMTAgKzYwLDkgQEAKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0KIAkJKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CisKIAlzZXRfaG9zdF9ieXRlKHNjcG50LCByZXN1bHQpOwotCWlmICgoc2NwbnQtPmRldmljZSAhPSBOVUxMKSAmJiAoc2NwbnQtPmRldmljZS0+aG9zdCAhPSBOVUxMKSkKLQkJemZjcF9kYmZfc2NzaV9yZXN1bHQoImZhaWwiLCA0LCBhZGFwdGVyLT5kYmYsIHNjcG50LCBOVUxMKTsKLQkvKiByZXR1cm4gZGlyZWN0bHkgKi8KKwl6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZChhZGFwdGVyLT5kYmYsIHNjcG50KTsKIAlzY3BudC0+c2NzaV9kb25lKHNjcG50KTsKIH0KIApAQCAtODYsMTggKzg2LDEwIEBACiAJYWRhcHRlciA9IChzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHNjcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwogCXVuaXQgPSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAotCUJVR19PTighYWRhcHRlciB8fCAoYWRhcHRlciAhPSB1bml0LT5wb3J0LT5hZGFwdGVyKSk7Ci0JQlVHX09OKCFzY3BudC0+c2NzaV9kb25lKTsKLQotCWlmICh1bmxpa2VseSghdW5pdCkpIHsKLQkJemZjcF9zY3NpX2NvbW1hbmRfZmFpbChzY3BudCwgRElEX05PX0NPTk5FQ1QpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlzY3NpX3Jlc3VsdCA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKIAlpZiAodW5saWtlbHkoc2NzaV9yZXN1bHQpKSB7CiAJCXNjcG50LT5yZXN1bHQgPSBzY3NpX3Jlc3VsdDsKLQkJemZjcF9kYmZfc2NzaV9yZXN1bHQoImZhaWwiLCA0LCBhZGFwdGVyLT5kYmYsIHNjcG50LCBOVUxMKTsKKwkJemZjcF9kYmZfc2NzaV9mYWlsX3NlbmQoYWRhcHRlci0+ZGJmLCBzY3BudCk7CiAJCXNjcG50LT5zY3NpX2RvbmUoc2NwbnQpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xODksOSArMTgxLDcgQEAKIAkvKiBhdm9pZCByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGxhdGUgbm9ybWFsIGNvbXBsZXRpb24gYW5kIGFib3J0ICovCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hYm9ydF9sb2NrLCBmbGFncyk7CiAKLQlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwotCW9sZF9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZChhZGFwdGVyLCBvbGRfcmVxaWQpOwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKKwlvbGRfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlci0+cmVxX2xpc3QsIG9sZF9yZXFpZCk7CiAJaWYgKCFvbGRfcmVxKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hYm9ydF9sb2NrLCBmbGFncyk7CiAJCXpmY3BfZGJmX3Njc2lfYWJvcnQoImx0ZTEiLCBhZGFwdGVyLT5kYmYsIHNjcG50LCBOVUxMLApAQCAtNTIxLDcgKzUxMSw3IEBACiAKIAlpZiAocG9ydCkgewogCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAic2N0cnBpMSIsIE5VTEwpOwotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCX0KIH0KIApAQCAtNTYzLDIzICs1NTMsMjMgQEAKIAogdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfcmVnaXN0ZXIoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0FERDsKIAogCWlmICghcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLCAmcG9ydC0+cnBvcnRfd29yaykpCi0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X2Jsb2NrKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7Ci0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9ERUw7CiAKIAlpZiAocG9ydC0+cnBvcnQgJiYgcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLAogCQkJCSAgICAgICZwb3J0LT5ycG9ydF93b3JrKSkKIAkJcmV0dXJuOwogCi0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiB2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydHNfYmxvY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKQEAgLTYwOCw3ICs1OTgsNyBAQAogCQl9CiAJfQogCi0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiAKQEAgLTYyNiw3ICs2MTYsNyBAQAogCQkJCSBzY3NpbHVuX3RvX2ludCgoc3RydWN0IHNjc2lfbHVuICopCiAJCQkJCQkmdW5pdC0+ZmNwX2x1biksIDApOwogCi0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogfQogCiBzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgemZjcF90cmFuc3BvcnRfZnVuY3Rpb25zID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IGY1MzllMDAuLmE0MzAzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogc3lzZnMgYXR0cmlidXRlcy4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDgsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOCwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0xOSw4ICsxOSw3IEBACiAJCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXQsXAogCQkJCQkJICAgY2hhciAqYnVmKQkJICAgICAgIFwKIHsJCQkJCQkJCQkgICAgICAgXAotCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwJICAgICAgIFwKLQkJCQkJICAgICAgIHN5c2ZzX2RldmljZSk7CQkgICAgICAgXAorCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwgZGV2KTsgICAgXAogCQkJCQkJCQkJICAgICAgIFwKIAlyZXR1cm4gc3ByaW50ZihidWYsIF9mb3JtYXQsIF92YWx1ZSk7CQkJCSAgICAgICBcCiB9CQkJCQkJCQkJICAgICAgIFwKQEAgLTg3LDggKzg2LDcgQEAKIAkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCiAJCQkJCQljaGFyICpidWYpCQkgICAgICAgXAogewkJCQkJCQkJCSAgICAgICBcCi0Jc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLAkgICAgICAgXAotCQkJCQkgICAgICAgc3lzZnNfZGV2aWNlKTsJCSAgICAgICBcCisJc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLCBkZXYpOyAgICBcCiAJCQkJCQkJCQkgICAgICAgXAogCWlmIChhdG9taWNfcmVhZCgmX2ZlYXQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkgICAgICAgXAogCQlyZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsJCQkJICAgICAgIFwKQEAgLTk5LDEyICs5NywxMSBAQAogCQkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFwKIAkJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcCiB7CQkJCQkJCQkJICAgICAgIFwKLQlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsCSAgICAgICBcCi0JCQkJCSAgICAgICBzeXNmc19kZXZpY2UpOwkJICAgICAgIFwKKwlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsIGRldik7ICAgIFwKIAl1bnNpZ25lZCBsb25nIHZhbDsJCQkJCQkgICAgICAgXAogCWludCByZXR2YWwgPSAwOwkJCQkJCQkgICAgICAgXAogCQkJCQkJCQkJICAgICAgIFwKLQlpZiAoIShfZmVhdCAmJiBnZXRfZGV2aWNlKCZfZmVhdC0+c3lzZnNfZGV2aWNlKSkpCQkgICAgICAgXAorCWlmICghKF9mZWF0ICYmIGdldF9kZXZpY2UoJl9mZWF0LT5kZXYpKSkJCQkgICAgICAgXAogCQlyZXR1cm4gLUVCVVNZOwkJCQkJCSAgICAgICBcCiAJCQkJCQkJCQkgICAgICAgXAogCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpIHx8IHZhbCAhPSAwKSB7CQkJICAgICAgIFwKQEAgLTExOCw3ICsxMTUsNyBAQAogCQkJCSAgX3Jlb3Blbl9pZCwgTlVMTCk7CQkJICAgICAgIFwKIAl6ZmNwX2VycF93YWl0KF9hZGFwdGVyKTsJCQkJCSAgICAgICBcCiBvdXQ6CQkJCQkJCQkJICAgICAgIFwKLQlwdXRfZGV2aWNlKCZfZmVhdC0+c3lzZnNfZGV2aWNlKTsJCQkJICAgICAgIFwKKwlwdXRfZGV2aWNlKCZfZmVhdC0+ZGV2KTsJCQkJCSAgICAgICBcCiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsJCQkgICAgICAgXAogfQkJCQkJCQkJCSAgICAgICBcCiBzdGF0aWMgWkZDUF9ERVZfQVRUUihfZmVhdCwgZmFpbGVkLCBTX0lXVVNSIHwgU19JUlVHTywJCQkgICAgICAgXApAQCAtMjI0LDEwICsyMjEsMTAgQEAKIAlsaXN0X2RlbCgmcG9ydC0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2spOwogCi0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCiAJemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAic3lwcnNfMSIsIE5VTEwpOwotCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSwgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CisJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+ZGV2LCAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKICBvdXQ6CiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKQEAgLTI1OCwxMyArMjU1LDEyIEBACiAJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF9wb3J0LAotCQkJCQkgICAgICBzeXNmc19kZXZpY2UpOworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF9wb3J0LCBkZXYpOwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAJdTY0IGZjcF9sdW47CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKLQlpZiAoIShwb3J0ICYmIGdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSkpKQorCWlmICghKHBvcnQgJiYgZ2V0X2RldmljZSgmcG9ydC0+ZGV2KSkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoc3RyaWN0X3N0cnRvdWxsKGJ1ZiwgMCwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSAmZmNwX2x1bikpCkBAIC0yODAsNyArMjc2LDcgQEAKIAl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOwogCWZsdXNoX3dvcmsoJnVuaXQtPnNjc2lfd29yayk7CiBvdXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiAoc3NpemVfdCkgY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIodW5pdF9hZGQsIFNfSVdVU1IsIE5VTEwsIHpmY3Bfc3lzZnNfdW5pdF9hZGRfc3RvcmUpOwpAQCAtMjg5LDEzICsyODUsMTIgQEAKIAkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsCi0JCQkJCSAgICAgIHN5c2ZzX2RldmljZSk7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsIGRldik7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAl1NjQgZmNwX2x1bjsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAotCWlmICghKHBvcnQgJiYgZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkpCisJaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAwLCAodW5zaWduZWQgbG9uZyBsb25nICopICZmY3BfbHVuKSkKQEAgLTMxNCwxMiArMzA5LDEyIEBACiAJbGlzdF9kZWwoJnVuaXQtPmxpc3QpOwogCXdyaXRlX3VubG9ja19pcnEoJnBvcnQtPnVuaXRfbGlzdF9sb2NrKTsKIAotCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAogCXpmY3BfZXJwX3VuaXRfc2h1dGRvd24odW5pdCwgMCwgInN5dXJzXzEiLCBOVUxMKTsKLQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UsICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpOworCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPmRldiwgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycyk7CiBvdXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiAoc3NpemVfdCkgY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIodW5pdF9yZW1vdmUsIFNfSVdVU1IsIE5VTEwsIHpmY3Bfc3lzZnNfdW5pdF9yZW1vdmVfc3RvcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKaW5kZXggNzVhYzE5Yi4uZmMyZjY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogCXBoID0gMDsKIAlpZiAoZHApCi0JCXBoID0gZHAtPm5vZGU7CisJCXBoID0gZHAtPnBoYW5kbGU7CiAKIAlkYXRhLT5jdXJyZW50X25vZGUgPSBkcDsKIAkqKChpbnQgKikgb3AtPm9wcm9tX2FycmF5KSA9IHBoOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAKIAkJZHAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CiAJCWRhdGEtPmN1cnJlbnRfbm9kZSA9IGRwOwotCQkqKChpbnQgKilvcC0+b3Byb21fYXJyYXkpID0gZHAtPm5vZGU7CisJCSooKGludCAqKW9wLT5vcHJvbV9hcnJheSkgPSBkcC0+cGhhbmRsZTsKIAkJb3AtPm9wcm9tX3NpemUgPSBzaXplb2YoaW50KTsKIAkJZXJyID0gY29weW91dChhcmdwLCBvcCwgYnVmc2l6ZSArIHNpemVvZihpbnQpKTsKIApAQCAtMjczLDcgKzI3Myw3IEBACiAKIAlkcCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKG9wLT5vcHJvbV9hcnJheSk7CiAJaWYgKGRwKQotCQlwaCA9IGRwLT5ub2RlOworCQlwaCA9IGRwLT5waGFuZGxlOwogCWRhdGEtPmN1cnJlbnRfbm9kZSA9IGRwOwogCSooKGludCAqKW9wLT5vcHJvbV9hcnJheSkgPSBwaDsKIAlvcC0+b3Byb21fc2l6ZSA9IHNpemVvZihpbnQpOwpAQCAtNTQwLDcgKzU0MCw3IEBACiAJCX0KIAl9CiAJaWYgKGRwKQotCQluZCA9IGRwLT5ub2RlOworCQluZCA9IGRwLT5waGFuZGxlOwogCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm5kLCBzaXplb2YocGhhbmRsZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtNTcwLDcgKzU3MCw3IEBACiAJY2FzZSBPUElPQ0dFVE9QVE5PREU6CiAJCUJVSUxEX0JVR19PTihzaXplb2YocGhhbmRsZSkgIT0gc2l6ZW9mKGludCkpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm9wdGlvbnNfbm9kZS0+bm9kZSwgc2l6ZW9mKHBoYW5kbGUpKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmb3B0aW9uc19ub2RlLT5waGFuZGxlLCBzaXplb2YocGhhbmRsZSkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jIGIvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYwppbmRleCBiODk4ZDM4Li5lNDBjZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCisrKyBiL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKQEAgLTM5MjQsNyArMzkyNCw3IEBACiB7CiAJc3RydWN0IHNjY2JfbWdyX3Rhcl9pbmZvICpjdXJyVGFyX0luZm87CiAKLQlpZiAoKHBfc2NjYi0+VGFyZ0lEID4gTUFYX1NDU0lfVEFSKSB8fCAocF9zY2NiLT5MdW4gPiBNQVhfTFVOKSkgeworCWlmICgocF9zY2NiLT5UYXJnSUQgPj0gTUFYX1NDU0lfVEFSKSB8fCAocF9zY2NiLT5MdW4gPj0gTUFYX0xVTikpIHsKIAkJcmV0dXJuOwogCX0KIAljdXJyVGFyX0luZm8gPSAmRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtwX3NjY2ItPlRhcmdJRF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jIGIvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYwppbmRleCA0Nzc1NDI2Li45ZTcxYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKQEAgLTI1MTYsNyArMjUxNiw3IEBACiAJCWlmIChpbmZvLT5zY3NpLnBoYXNlID09IFBIQVNFX0lETEUpCiAJCQlmYXMyMTZfa2ljayhpbmZvKTsKIAotCQltb2RfdGltZXIoJmluZm8tPmVoX3RpbWVyLCAzMCAqIEhaKTsKKwkJbW9kX3RpbWVyKCZpbmZvLT5laF90aW1lciwgamlmZmllcyArIDMwICogSFopOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAppbmRleCBhOTNhNTA0Li4xMzZiNDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsNiArMjQsMTAgQEAKICNkZWZpbmUgRldfVkVSX0xFTgkzMgogI2RlZmluZSBNQ0NfUV9MRU4JMTI4CiAjZGVmaW5lIE1DQ19DUV9MRU4JMjU2CisjZGVmaW5lIE1BWF9NQ0NfQ01ECTE2CisvKiBCbGFkZUVuZ2luZSBHZW5lcmF0aW9uIG51bWJlcnMgKi8KKyNkZWZpbmUgQkVfR0VOMiAyCisjZGVmaW5lIEJFX0dFTjMgMwogCiBzdHJ1Y3QgYmVfZG1hX21lbSB7CiAJdm9pZCAqdmE7CkBAIC01Nyw2ICs2MSwxMSBAQAogCXJldHVybiBxLT5kbWFfbWVtLnZhICsgcS0+aGVhZCAqIHEtPmVudHJ5X3NpemU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcXVldWVfZ2V0X3dyYihzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwgdW5zaWduZWQgaW50IHdyYl9udW0pCit7CisJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyB3cmJfbnVtICogcS0+ZW50cnlfc2l6ZTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkICpxdWV1ZV90YWlsX25vZGUoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCiB7CiAJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyBxLT50YWlsICogcS0+ZW50cnlfc2l6ZTsKQEAgLTEwNCwxNSArMTEzLDE5IEBACiAJc3BpbmxvY2tfdCBtY2NfbG9jazsJLyogRm9yIHNlcmlhbGl6aW5nIG1jYyBjbWRzIHRvIEJFIGNhcmQgKi8KIAlzcGlubG9ja190IG1jY19jcV9sb2NrOwogCi0JLyogTUNDIEFzeW5jIGNhbGxiYWNrICovCi0Jdm9pZCAoKmFzeW5jX2NiKSAodm9pZCAqYWRhcHRlciwgYm9vbCBsaW5rX3VwKTsKLQl2b2lkICphZGFwdGVyX2N0eHQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgbWNjX3dhaXRbTUFYX01DQ19DTUQgKyAxXTsKKwl1bnNpZ25lZCBpbnQgbWNjX3RhZ1tNQVhfTUNDX0NNRF07CisJdW5zaWduZWQgaW50IG1jY19udW10YWdbTUFYX01DQ19DTUQgKyAxXTsKKwl1bnNpZ25lZCBzaG9ydCBtY2NfYWxsb2NfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgbWNjX2ZyZWVfaW5kZXg7CisJdW5zaWduZWQgaW50IG1jY190YWdfYXZhaWxhYmxlOwogfTsKIAogI2luY2x1ZGUgImJlX2NtZHMuaCIKIAogI2RlZmluZSBQQUdFX1NISUZUXzRLIDEyCiAjZGVmaW5lIFBBR0VfU0laRV80SyAoMSA8PCBQQUdFX1NISUZUXzRLKQorI2RlZmluZSBtY2NfdGltZW91dAkJMTIwMDAwIC8qIDVzIHRpbWVvdXQgKi8KIAogLyogUmV0dXJucyBudW1iZXIgb2YgcGFnZXMgc3Bhbm5lZCBieSB0aGUgZGF0YSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkciAqLwogI2RlZmluZSBQQUdFU180S19TUEFOTkVEKF9hZGRyZXNzLCBzaXplKSAJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKaW5kZXggZjAwODcwOC4uNjcwOTg1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSAiYmVfbWdtdC5oIgogI2luY2x1ZGUgImJlX21haW4uaCIKIAotc3RhdGljIHZvaWQgYmVfbWNjX25vdGlmeShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit2b2lkIGJlX21jY19ub3RpZnkoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NxID0gJnBoYmEtPmN0cmwubWNjX29iai5xOwogCXUzMiB2YWwgPSAwOwpAQCAtMjksNiArMjksNTIgQEAKIAlpb3dyaXRlMzIodmFsLCBwaGJhLT5kYl92YSArIERCX01DQ1FfT0ZGU0VUKTsKIH0KIAordW5zaWduZWQgaW50IGFsbG9jX21jY190YWcoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIGludCB0YWcgPSAwOworCXVuc2lnbmVkIGludCBudW0gPSAwOworCittY2NfdGFnX3JkeToKKwlpZiAocGhiYS0+Y3RybC5tY2NfdGFnX2F2YWlsYWJsZSkgeworCQl0YWcgPSBwaGJhLT5jdHJsLm1jY190YWdbcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXhdOworCQlwaGJhLT5jdHJsLm1jY190YWdbcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXhdID0gMDsKKwkJcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gPSAwOworCX0gZWxzZSB7CisJCXVkZWxheSgxMDApOworCQludW0rKzsKKwkJaWYgKG51bSA8IG1jY190aW1lb3V0KQorCQkJZ290byBtY2NfdGFnX3JkeTsKKwl9CisJaWYgKHRhZykgeworCQlwaGJhLT5jdHJsLm1jY190YWdfYXZhaWxhYmxlLS07CisJCWlmIChwaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleCA9PSAoTUFYX01DQ19DTUQgLSAxKSkKKwkJCXBoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4ID0gMDsKKwkJZWxzZQorCQkJcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXgrKzsKKwl9CisJcmV0dXJuIHRhZzsKK30KKwordm9pZCBmcmVlX21jY190YWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdW5zaWduZWQgaW50IHRhZykKK3sKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJdGFnID0gdGFnICYgMHgwMDAwMDBGRjsKKwljdHJsLT5tY2NfdGFnW2N0cmwtPm1jY19mcmVlX2luZGV4XSA9IHRhZzsKKwlpZiAoY3RybC0+bWNjX2ZyZWVfaW5kZXggPT0gKE1BWF9NQ0NfQ01EIC0gMSkpCisJCWN0cmwtPm1jY19mcmVlX2luZGV4ID0gMDsKKwllbHNlCisJCWN0cmwtPm1jY19mcmVlX2luZGV4Kys7CisJY3RybC0+bWNjX3RhZ19hdmFpbGFibGUrKzsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKK30KKworYm9vbCBpc19saW5rX3N0YXRlX2V2dCh1MzIgdHJhaWxlcikKK3sKKwlyZXR1cm4gKCgodHJhaWxlciA+PiBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfU0hJRlQpICYKKwkJICBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfTUFTSykgPT0KKwkJICBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUpOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgYmVfbWNjX2NvbXBsX2lzX25ldyhzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKIHsKIAlpZiAoY29tcGwtPmZsYWdzICE9IDApIHsKQEAgLTY0LDEyICsxMTAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpCitpbnQgYmVfbWNjX2NvbXBsX3Byb2Nlc3NfaXNyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJICAgIHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQogewotCXJldHVybiAoKCh0cmFpbGVyID4+IEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9TSElGVCkgJgotCQkgIEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9NQVNLKSA9PQotCQkgIEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURSk7CisJdTE2IGNvbXBsX3N0YXR1cywgZXh0ZF9zdGF0dXM7CisJdW5zaWduZWQgc2hvcnQgdGFnOworCisJYmVfZHdzX2xlX3RvX2NwdShjb21wbCwgNCk7CisKKwljb21wbF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0NPTVBMX1NISUZUKSAmCisJCQkJCUNRRV9TVEFUVVNfQ09NUExfTUFTSzsKKwkvKiBUaGUgY3RybC5tY2NfbnVtdGFnW3RhZ10gaXMgZmlsbGVkIHdpdGgKKwkgKiBbMzFdID0gdmFsaWQsIFszMDoyNF0gPSBSc3ZkLCBbMjM6MTZdID0gd3JiLCBbMTU6OF0gPSBleHRkX3N0YXR1cywKKwkgKiBbNzowXSA9IGNvbXBsX3N0YXR1cworCSAqLworCXRhZyA9IChjb21wbC0+dGFnMCAmIDB4MDAwMDAwRkYpOworCWV4dGRfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19FWFREX1NISUZUKSAmCisJCQkJCUNRRV9TVEFUVVNfRVhURF9NQVNLOworCisJY3RybC0+bWNjX251bXRhZ1t0YWddICA9IDB4ODAwMDAwMDA7CisJY3RybC0+bWNjX251bXRhZ1t0YWddIHw9IChjb21wbC0+dGFnMCAmIDB4MDBGRjAwMDApOworCWN0cmwtPm1jY19udW10YWdbdGFnXSB8PSAoZXh0ZF9zdGF0dXMgJiAweDAwMDAwMEZGKSA8PCA4OworCWN0cmwtPm1jY19udW10YWdbdGFnXSB8PSAoY29tcGxfc3RhdHVzICYgMHgwMDAwMDBGRik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjdHJsLT5tY2Nfd2FpdFt0YWddKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9tY2NfY29tcGwgKmJlX21jY19jb21wbF9nZXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQpAQCAtODksNyArMTUzLDcgQEAKIAlpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoY2xzX3Nlc3Npb24tPmRkX2RhdGEsIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJlaXNjc2lfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKK3ZvaWQgYmVpc2NzaV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3Moc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAogCQlzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqZXZ0KQogewogCXN3aXRjaCAoZXZ0LT5wb3J0X2xpbmtfc3RhdHVzKSB7CkBAIC05NywxMyArMTYxLDEzIEBACiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIkxpbmsgRG93biBvbiBQaHlzaWNhbCBQb3J0ICVkIFxuIiwKIAkJCQkJCWV2dC0+cGh5c2ljYWxfcG9ydCk7CiAJCXBoYmEtPnN0YXRlIHw9IEJFX0FEQVBURVJfTElOS19ET1dOOworCQlpc2NzaV9ob3N0X2Zvcl9lYWNoX3Nlc3Npb24ocGhiYS0+c2hvc3QsCisJCQkJCSAgICBiZTJpc2NzaV9mYWlsX3Nlc3Npb24pOwogCQlicmVhazsKIAljYXNlIEFTWU5DX0VWRU5UX0xJTktfVVA6CiAJCXBoYmEtPnN0YXRlID0gQkVfQURBUFRFUl9VUDsKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiTGluayBVUCBvbiBQaHlzaWNhbCBQb3J0ICVkIFxuIiwKIAkJCQkJCWV2dC0+cGh5c2ljYWxfcG9ydCk7Ci0JCWlzY3NpX2hvc3RfZm9yX2VhY2hfc2Vzc2lvbihwaGJhLT5zaG9zdCwKLQkJCQkJICAgIGJlMmlzY3NpX2ZhaWxfc2Vzc2lvbik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIlVuZXhwZWN0ZWQgQXN5bmMgTm90aWZpY2F0aW9uICVkIG9uIgpAQCAtMTYyLDcgKzIyNiw2IEBACiAvKiBXYWl0IHRpbGwgbm8gbW9yZSBwZW5kaW5nIG1jYyByZXF1ZXN0cyBhcmUgcHJlc2VudCAqLwogc3RhdGljIGludCBiZV9tY2Nfd2FpdF9jb21wbChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCiB7Ci0jZGVmaW5lIG1jY190aW1lb3V0CQkxMjAwMDAgLyogNXMgdGltZW91dCAqLwogCWludCBpLCBzdGF0dXM7CiAJZm9yIChpID0gMDsgaSA8IG1jY190aW1lb3V0OyBpKyspIHsKIAkJc3RhdHVzID0gYmVpc2NzaV9wcm9jZXNzX21jYyhwaGJhKTsKQEAgLTM3Miw5ICs0MzUsMTAgQEAKIAogCUJVR19PTihhdG9taWNfcmVhZCgmbWNjcS0+dXNlZCkgPj0gbWNjcS0+bGVuKTsKIAl3cmIgPSBxdWV1ZV9oZWFkX25vZGUobWNjcSk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl3cmItPnRhZzAgPSAobWNjcS0+aGVhZCAmIDB4MDAwMDAwRkYpIDw8IDE2OwogCXF1ZXVlX2hlYWRfaW5jKG1jY3EpOwogCWF0b21pY19pbmMoJm1jY3EtPnVzZWQpOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAJcmV0dXJuIHdyYjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKaW5kZXggNWRlOGFjYi4uNDlmY2M3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00MjUsMTQgKzQyNSwyMCBAQAogaW50IGJlX3BvbGxfbWNjKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOwogdW5zaWduZWQgY2hhciBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAogCQkJCSAgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7Ci1pbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHU4ICptYWNfYWRkcik7Ci0KK3Vuc2lnbmVkIGludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7Cit2b2lkIGZyZWVfbWNjX3RhZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1bnNpZ25lZCBpbnQgdGFnKTsKIC8qSVNDU0kgRnVuY3R1aW9ucyAqLwogaW50IGJlX2NtZF9md19pbml0aWFsaXplKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOwogCiBzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiX2Zyb21fbWJveChzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW0pOwogc3RydWN0IGJlX21jY193cmIgKndyYl9mcm9tX21jY3Eoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKIGludCBiZV9tY2Nfbm90aWZ5X3dhaXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKK3ZvaWQgYmVfbWNjX25vdGlmeShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwordW5zaWduZWQgaW50IGFsbG9jX21jY190YWcoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKK3ZvaWQgYmVpc2NzaV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3Moc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQlzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqZXZ0KTsKK2ludCBiZV9tY2NfY29tcGxfcHJvY2Vzc19pc3Ioc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQkgICAgc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpOwogCiBpbnQgYmVfbWJveF9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CiAKQEAgLTQ0OCw2ICs0NTQsOCBAQAogaW50IGJlX2NtZF93cmJxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCiAJCSAgICAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqd3JicSk7CiAKK2Jvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpOworCiBzdHJ1Y3QgYmVfZGVmYXVsdF9wZHVfY29udGV4dCB7CiAJdTMyIGR3WzRdOwogfSBfX3BhY2tlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKaW5kZXggZDU4N2IwMy4uMjlhM2FhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTEwMSw2ICsxMDEsNyBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CiAJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzID0gc2Vzcy0+ZGRfZGF0YTsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfc2Vzc2lvbl9kZXN0cm95XG4iKTsKIAlwY2lfcG9vbF9kZXN0cm95KGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wpOwogCWlzY3NpX3Nlc3Npb25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOwogfQpAQCAtMjI0LDYgKzIyNSw3IEBACiAJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlpbnQgbGVuID0gMDsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9nZXRfcGFyYW0sIHBhcmFtPSAlZFxuIiwgcGFyYW0pOwogCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOwogCWlmICghYmVpc2NzaV9lcCkgewogCQlTRV9ERUJVRyhEQkdfTFZMXzEsCkBAIC0yNTQsNiArMjU2LDcgQEAKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAJaW50IHJldDsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zZXRfcGFyYW0sIHBhcmFtPSAlZFxuIiwgcGFyYW0pOwogCXJldCA9IGlzY3NpX3NldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1ZiwgYnVmbGVuKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjcxLDggKzI3NCw4IEBACiAJCQljb25uLT5tYXhfcmVjdl9kbGVuZ3RoID0gNjU1MzY7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfUEFSQU1fTUFYX0JVUlNUOgotCQlpZiAoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPiAyNjIxNDQpCi0JCQlzZXNzaW9uLT5maXJzdF9idXJzdCA9IDI2MjE0NDsKKwkJaWYgKHNlc3Npb24tPm1heF9idXJzdCA+IDI2MjE0NCkKKwkJCXNlc3Npb24tPm1heF9idXJzdCA9IDI2MjE0NDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CkBAIC0yOTMsMTIgKzI5Niw0MSBAQAogCQkJICAgZW51bSBpc2NzaV9ob3N0X3BhcmFtIHBhcmFtLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gKHN0cnVjdCBiZWlzY3NpX2hiYSAqKWlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciAqcmVzcDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXVuc2lnbmVkIGludCB0YWcsIHdyYl9udW07CiAJaW50IGxlbiA9IDA7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzLCBleHRkX3N0YXR1czsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0sIHBhcmFtPSAlZFxuIiwgcGFyYW0pOwogCXN3aXRjaCAocGFyYW0pIHsKIAljYXNlIElTQ1NJX0hPU1RfUEFSQU1fSFdBRERSRVNTOgotCQliZV9jbWRfZ2V0X21hY19hZGRyKHBoYmEsIHBoYmEtPm1hY19hZGRyZXNzKTsKLQkJbGVuID0gc3lzZnNfZm9ybWF0X21hYyhidWYsIHBoYmEtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJCXRhZyA9IGJlX2NtZF9nZXRfbWFjX2FkZHIocGhiYSk7CisJCWlmICghdGFnKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZV9jbWRfZ2V0X21hY19hZGRyIEZhaWxlZCBcbiIpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCisJCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCisJCXdyYl9udW0gPSAocGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwRkYwMDAwKSA+PiAxNjsKKwkJZXh0ZF9zdGF0dXMgPSAocGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwMDBGRjAwKSA+PiA4OworCQlzdGF0dXMgPSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMDAwRkY7CisJCWlmIChzdGF0dXMgfHwgZXh0ZF9zdGF0dXMpIHsKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlX2NtZF9nZXRfbWFjX2FkZHIgRmFpbGVkIgorCQkJCQkgICAgIiBzdGF0dXMgPSAlZCBleHRkX3N0YXR1cyA9ICVkIFxuIiwKKwkJCQkJICAgIHN0YXR1cywgZXh0ZF9zdGF0dXMpOworCQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJd3JiID0gcXVldWVfZ2V0X3dyYihtY2NxLCB3cmJfbnVtKTsKKwkJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKwkJCXJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJCQltZW1jcHkocGhiYS0+bWFjX2FkZHJlc3MsIHJlc3AtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJCQlsZW4gPSBzeXNmc19mb3JtYXRfbWFjKGJ1ZiwgcGhiYS0+bWFjX2FkZHJlc3MsCisJCQkJCSAgICAgICBFVEhfQUxFTik7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGlzY3NpX2hvc3RfZ2V0X3BhcmFtKHNob3N0LCBwYXJhbSwgYnVmKTsKQEAgLTM3OCw2ICs0MTAsNyBAQAogCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOwogCXN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zIHBhcmFtczsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdGFydFxuIik7CiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcykpOwogCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOwogCWlmICghYmVpc2NzaV9lcCkKQEAgLTQyMiw4ICs0NTUsMTQgQEAKIHsKIAlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY3EgPSAmcGhiYS0+Y3RybC5tY2Nfb2JqLnE7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0ICpwdGNwY25jdF9vdXQ7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzLCBleHRkX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgdGFnLCB3cmJfbnVtOwogCWludCByZXQgPSAtMTsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfb3Blbl9jb25uXG4iKTsKIAliZWlzY3NpX2VwLT5lcF9jaWQgPSBiZWlzY3NpX2dldF9jaWQocGhiYSk7CiAJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA9PSAweEZGRkYpIHsKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiTm8gZnJlZSBjaWQgYXZhaWxhYmxlXG4iKTsKQEAgLTQzMSwxNSArNDcwLDQ0IEBACiAJfQogCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfb3Blbl9jb25uLCBlcF9jaWQ9JWQgIiwKIAkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7Ci0JcGhiYS0+ZXBfYXJyYXlbYmVpc2NzaV9lcC0+ZXBfY2lkXSA9IGVwOwotCWlmIChiZWlzY3NpX2VwLT5lcF9jaWQgPgotCSAgICAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsKSkgeworCXBoYmEtPmVwX2FycmF5W2JlaXNjc2lfZXAtPmVwX2NpZCAtCisJCSAgICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XSA9IGVwOworCWlmIChiZWlzY3NpX2VwLT5lcF9jaWQgPiAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArCisJCQkJICBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDIpKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBhbGxvY2F0ZSBpc2NzaSBjaWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAwOwotCXJldHVybiBtZ210X29wZW5fY29ubmVjdGlvbihwaGJhLCBkc3RfYWRkciwgYmVpc2NzaV9lcCk7CisJdGFnID0gbWdtdF9vcGVuX2Nvbm5lY3Rpb24ocGhiYSwgZHN0X2FkZHIsIGJlaXNjc2lfZXApOworCWlmICghdGFnKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAibWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24gRmFpbGVkIGZvciBjaWQ9JWQgXG4iLAorCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJfSBlbHNlIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKwl9CisJd3JiX251bSA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDBGRjAwMDApID4+IDE2OworCWV4dGRfc3RhdHVzID0gKHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMDAwRkYwMCkgPj4gODsKKwlzdGF0dXMgPSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMDAwRkY7CisJaWYgKHN0YXR1cyB8fCBleHRkX3N0YXR1cykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X29wZW5fY29ubmVjdGlvbiBGYWlsZWQiCisJCQkJICAgICIgc3RhdHVzID0gJWQgZXh0ZF9zdGF0dXMgPSAlZCBcbiIsCisJCQkJICAgIHN0YXR1cywgZXh0ZF9zdGF0dXMpOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQl3cmIgPSBxdWV1ZV9nZXRfd3JiKG1jY3EsIHdyYl9udW0pOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisKKwkJcHRjcGNuY3Rfb3V0ID0gCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCQliZWlzY3NpX2VwLT5md19oYW5kbGUgPSBwdGNwY25jdF9vdXQtPmNvbm5lY3Rpb25faGFuZGxlOworCQliZWlzY3NpX2VwLT5jaWRfdmxkID0gMTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gU3VjY2Vzc1xuIik7CisJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTQ1OSwxNCArNTI3LDEyIEBACiAgKiBiZWlzY3NpX2ZyZWVfZXAgLSBmcmVlIGVuZHBvaW50CiAgKiBAZXA6CXBvaW50ZXIgdG8gaXNjc2kgZW5kcG9pbnQgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9lcChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwKQorc3RhdGljIHZvaWQgYmVpc2NzaV9mcmVlX2VwKHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwKQogewotCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKIAogCWJlaXNjc2lfcHV0X2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOwogCWJlaXNjc2lfZXAtPnBoYmEgPSBOVUxMOwotCWlzY3NpX2Rlc3Ryb3lfZW5kcG9pbnQoZXApOwogfQogCiAvKioKQEAgLTQ5NSw5ICs1NjEsOSBAQAogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIAotCWlmIChwaGJhLT5zdGF0ZSkgeworCWlmIChwaGJhLT5zdGF0ZSAhPSBCRV9BREFQVEVSX1VQKSB7CiAJCXJldCA9IC1FQlVTWTsKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiVGhlIEFkYXBldCBzdGF0ZSBpcyBOb3QgVVAgXG4iKTsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiVGhlIEFkYXB0ZXIgc3RhdGUgaXMgTm90IFVQIFxuIik7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCkBAIC01MDksOSArNTc1LDkgQEAKIAogCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKIAliZWlzY3NpX2VwLT5waGJhID0gcGhiYTsKLQorCWJlaXNjc2lfZXAtPm9wZW5pc2NzaV9lcCA9IGVwOwogCWlmIChiZWlzY3NpX29wZW5fY29ubihlcCwgTlVMTCwgZHN0X2FkZHIsIG5vbl9ibG9ja2luZykpIHsKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBiZWlzY3NpX29wZW5fY29ubiBcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWVfZXA7CiAJfQpAQCAtNTE5LDcgKzU4NSw3IEBACiAJcmV0dXJuIGVwOwogCiBmcmVlX2VwOgotCWJlaXNjc2lfZnJlZV9lcChlcCk7CisJYmVpc2NzaV9mcmVlX2VwKGJlaXNjc2lfZXApOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKQEAgLTU0NiwyMCArNjEyLDIyIEBACiAgKiBAZXA6IFRoZSBpc2NzaSBlbmRwb2ludAogICogQGZsYWc6IFRoZSB0eXBlIG9mIGNvbm5lY3Rpb24gY2xvc3VyZQogICovCi1zdGF0aWMgaW50IGJlaXNjc2lfY2xvc2VfY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLCBpbnQgZmxhZykKK3N0YXRpYyBpbnQgYmVpc2NzaV9jbG9zZV9jb25uKHN0cnVjdCAgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCwgaW50IGZsYWcpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwl1bnNpZ25lZCBpbnQgdGFnOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CiAKLQlpZiAoTUdNVF9TVEFUVVNfU1VDQ0VTUyAhPQotCSAgICBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCwKLQkJQ09OTkVDVElPTl9VUExPQURfR1JBQ0VGVUwpKSB7CisJdGFnID0gbWdtdF91cGxvYWRfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQsIGZsYWcpOworCWlmICghdGFnKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfOCwgInVwbG9hZCBmYWlsZWQgZm9yIGNpZCAweCV4IiwKIAkJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOwogCQlyZXQgPSAtMTsKKwl9IGVsc2UgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CiAJfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTc0LDE5ICs2NDIsMTcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CiAJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOwotCWludCBmbGFnID0gMDsKIAogCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKIAlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3RcbiIpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfZXBfZGlzY29ubmVjdCBmb3IgZXBfY2lkID0gJWRcbiIsCisJCQkgICAgIGJlaXNjc2lfZXAtPmVwX2NpZCk7CiAKIAlpZiAoYmVpc2NzaV9lcC0+Y29ubikgewogCQliZWlzY3NpX2Nvbm4gPSBiZWlzY3NpX2VwLT5jb25uOwogCQlpc2NzaV9zdXNwZW5kX3F1ZXVlKGJlaXNjc2lfY29ubi0+Y29ubik7Ci0JCWJlaXNjc2lfY2xvc2VfY29ubihlcCwgZmxhZyk7CiAJfQogCi0JYmVpc2NzaV9mcmVlX2VwKGVwKTsKIH0KIAogLyoqCkBAIC02MTksMjMgKzY4NSwzMSBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbi0+Y2xzX3Nlc3Npb24pOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgdGFnOwogCXVuc2lnbmVkIHNob3J0IHNhdmVjZmdfZmxhZyA9IENNRF9JU0NTSV9TRVNTSU9OX1NBVkVfQ0ZHX09OX0ZMQVNIOwogCi0JU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3BcbiIpOwogCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOwogCWlmICghYmVpc2NzaV9lcCkgewogCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RvcCAsIG5vIGJlaXNjc2lfZXBcbiIpOwogCQlyZXR1cm47CiAJfQotCXN0YXR1cyA9IG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAsCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3AgIGVwX2NpZCA9ICVkXG4iLAorCQkJICAgICBiZWlzY3NpX2VwLT5lcF9jaWQpOworCXRhZyA9IG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAsCiAJCQkJCSAgICBiZWlzY3NpX2VwLT5lcF9jaWQsIDEsCiAJCQkJCSAgICBzYXZlY2ZnX2ZsYWcpOwotCWlmIChzdGF0dXMgIT0gTUdNVF9TVEFUVVNfU1VDQ0VTUykgeworCWlmICghdGFnKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwKIAkJCSAibWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24gRmFpbGVkIGZvciBjaWQ9JWQgXG4iLAogCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJfSBlbHNlIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKwkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOwogCX0KKwliZWlzY3NpX2Nsb3NlX2Nvbm4oYmVpc2NzaV9lcCwgQ09OTkVDVElPTl9VUExPQURfR1JBQ0VGVUwpOworCWJlaXNjc2lfZnJlZV9lcChiZWlzY3NpX2VwKTsKKwlpc2NzaV9kZXN0cm95X2VuZHBvaW50KGJlaXNjc2lfZXAtPm9wZW5pc2NzaV9lcCk7CiAJYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKIAlpc2NzaV9jb25uX3N0b3AoY2xzX2Nvbm4sIGZsYWcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaAppbmRleCBmOTJmZmM1Li4xZjUxMmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKaW5kZXggMWE1NTdmYS4uN2MyMjYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00MCw3ICs0MCw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGJlX2lvcG9sbF9idWRnZXQgPSAxMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmVfbWF4X3BoeXNfc2l6ZSA9IDY0Owogc3RhdGljIHVuc2lnbmVkIGludCBlbmFibGVfbXNpeCA9IDE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJpbmdfbW9kZTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyAiICIgQlVJTERfU1RSKTsKQEAgLTYyLDEwICs2MSwxMCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tIFBDSSBEcml2ZXIgb3BlcmF0aW9ucyBhbmQgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGJlaXNjc2lfcGNpX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBCRV9ERVZJQ0VfSUQxKSB9LAorCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIEJFX0RFVklDRV9JRDIpIH0sCiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMSkgfSwKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQyKSB9LAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDMpIH0sCi0JeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lENCkgfSwKIAl7IDAgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZWlzY3NpX3BjaV9pZF90YWJsZSk7CkBAIC0xMTIsNiArMTExLDcgQEAKIAltZW1zZXQocGhiYSwgMCwgc2l6ZW9mKCpwaGJhKSk7CiAJcGhiYS0+c2hvc3QgPSBzaG9zdDsKIAlwaGJhLT5wY2lkZXYgPSBwY2lfZGV2X2dldChwY2lkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIHBoYmEpOwogCiAJaWYgKGlzY3NpX2hvc3RfYWRkKHNob3N0LCAmcGhiYS0+cGNpZGV2LT5kZXYpKQogCQlnb3RvIGZyZWVfZGV2aWNlczsKQEAgLTE0Myw2ICsxNDMsNyBAQAogCQkJCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCiB7CiAJdTggX19pb21lbSAqYWRkcjsKKwlpbnQgcGNpY2ZnX3JlZzsKIAogCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMiksCiAJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDIpKTsKQEAgLTE1OSwxMyArMTYwLDE5IEBACiAJcGhiYS0+ZGJfdmEgPSBhZGRyOwogCXBoYmEtPmRiX3BhLnUuYTY0LmFkZHJlc3MgPSAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgNCk7CiAKLQlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpLAotCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAxKSk7CisJaWYgKHBoYmEtPmdlbmVyYXRpb24gPT0gQkVfR0VOMikKKwkJcGNpY2ZnX3JlZyA9IDE7CisJZWxzZQorCQlwY2ljZmdfcmVnID0gMDsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgcGNpY2ZnX3JlZyksCisJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIHBjaWNmZ19yZWcpKTsKKwogCWlmIChhZGRyID09IE5VTEwpCiAJCWdvdG8gcGNpX21hcF9lcnI7CiAJcGhiYS0+Y3RybC5wY2ljZmcgPSBhZGRyOwogCXBoYmEtPnBjaV92YSA9IGFkZHI7Ci0JcGhiYS0+cGNpX3BhLnUuYTY0LmFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAxKTsKKwlwaGJhLT5wY2lfcGEudS5hNjQuYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIHBjaWNmZ19yZWcpOwogCXJldHVybiAwOwogCiBwY2lfbWFwX2VycjoKQEAgLTIzMCwyOSArMjM3LDI3IEBACiAKIHN0YXRpYyB2b2lkIGJlaXNjc2lfZ2V0X3BhcmFtcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCiB7Ci0JcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCA9IEJFMl9JT19ERVBUSDsKLQlwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCA9IEJFMl9NQVhfU0VTU0lPTlM7Ci0JcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCA9IEJFMl9BU1lOQ1BEVVM7Ci0JcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgPSBCRTJfTUFYX0lDRFMgLyAyOworCXBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgPSAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9jb3VudAorCQkJCSAgICAtIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50CisJCQkJICAgICsgQkUyX1RNRlMKKwkJCQkgICAgKyBCRTJfTk9QT1VUX1JFUSkpOworCXBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudDsKKwlwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudDs7CisJcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgPSBwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX2NvdW50OzsKIAlwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gPSBCRTJfU0dFOwogCXBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6ID0gQkUyX0RFRlBEVV9IRFJfU1o7CiAJcGhiYS0+cGFyYW1zLmRlZnBkdV9kYXRhX3N6ID0gQkUyX0RFRlBEVV9EQVRBX1NaOwogCXBoYmEtPnBhcmFtcy5lcV90aW1lciA9IDY0OwogCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9Ci0JICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9BU1lOQ1BEVVMpIC8KLQkJCQkJCQkJNTEyKSArIDEpICogNTEyOworCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgKiAyCisJCQkJICAgICsgQkUyX1RNRlMpIC8gNTEyKSArIDEpICogNTEyOwogCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9IChwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPCAxMDI0KQogCQkJCT8gMTAyNCA6IHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllczsKIAlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM9JWQgXG4iLAotCQkgcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzKTsKKwkJCSAgICAgcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzKTsKIAlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMgPQotCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfQVNZTkNQRFVTKSAvCi0JCQkJCQkJCTUxMikgKyAxKSAqIDUxMjsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsCi0JCSJwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXM9JWQgQkUyX0NNRFNfUEVSX0NYTj0lZCIKLQkJIkJFMl9MT0dPVVRTPSVkIEJFMl9UTUZTPSVkIEJFMl9BU1lOQ1BEVVM9JWQgXG4iLAotCQlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMsIEJFMl9DTURTX1BFUl9DWE4sCi0JCUJFMl9MT0dPVVRTLCBCRTJfVE1GUywgQkUyX0FTWU5DUERVUyk7CisJICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgKiAyCisJCQkJICAgICsgQkUyX1RNRlMpIC8gNTEyKSArIDEpICogNTEyOwogCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gPSAyNTY7CiB9CiAKQEAgLTQ0Myw3ICs0NDgsNyBAQAogCQkJaWYgKHBoYmEtPnRvZG9fbWNjX2NxKQogCQkJCXF1ZXVlX3dvcmsocGhiYS0+d3EsICZwaGJhLT53b3JrX2Nxcyk7CiAKLQkJaWYgKChudW1fbWNjZXFfcHJvY2Vzc2VkKSAmJiAoIW51bV9pb2VxX3Byb2Nlc3NlZCkpCisJCQlpZiAoKG51bV9tY2NlcV9wcm9jZXNzZWQpICYmICghbnVtX2lvZXFfcHJvY2Vzc2VkKSkKIAkJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsCiAJCQkJCSAgICAgIChudW1faW9lcV9wcm9jZXNzZWQgKwogCQkJCQkgICAgICAgbnVtX21jY2VxX3Byb2Nlc3NlZCkgLCAxLCAxKTsKQEAgLTU2MSw2ICs1NjYsNyBAQAogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbiBJU0NTSV9PUF9SRUpFQ1RcbiIpOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX0xPR0lOX1JTUDoKKwljYXNlIElTQ1NJX09QX1RFWFRfUlNQOgogCQl0YXNrID0gY29ubi0+bG9naW5fdGFzazsKIAkJaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CiAJCWxvZ2luX2hkciA9IChzdHJ1Y3QgaXNjc2lfaGRyICopcHBkdTsKQEAgLTYzMSwyOSArNjM3LDI5IEBACiAgKiBhbGxvY193cmJfaGFuZGxlIC0gVG8gYWxsb2NhdGUgYSB3cmIgaGFuZGxlCiAgKiBAcGhiYTogVGhlIGhiYSBwb2ludGVyCiAgKiBAY2lkOiBUaGUgY2lkIHRvIHVzZSBmb3IgYWxsb2NhdGlvbgotICogQGluZGV4OiBpbmRleCBhbGxvY2F0aW9uIGFuZCB3cmIgaW5kZXgKICAqCiAgKiBUaGlzIGhhcHBlbnMgdW5kZXIgc2Vzc2lvbl9sb2NrIHVudGlsIHN1Ym1pc3Npb24gdG8gY2hpcAogICovCi1zdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQsCi0JCQkJICAgIGludCBpbmRleCkKK3N0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCkKIHsKIAlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwotCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGUsICpwd3JiX2hhbmRsZV90bXA7CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKIAlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkXTsKLQlpZiAocHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUpIHsKKwlpZiAocHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUgPj0gMikgewogCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVsKIAkJCQkJICAgIHB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXhdOwogCQlwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZS0tOwotCQlwd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCA9IHB3cmJfaGFuZGxlLT53cmJfaW5kZXg7CiAJCWlmIChwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4ID09CiAJCQkJCQkocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAtIDEpKQogCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCA9IDA7CiAJCWVsc2UKIAkJCXB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXgrKzsKKwkJcHdyYl9oYW5kbGVfdG1wID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlWworCQkJCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleF07CisJCXB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4ID0gcHdyYl9oYW5kbGVfdG1wLT53cmJfaW5kZXg7CiAJfSBlbHNlCiAJCXB3cmJfaGFuZGxlID0gTlVMTDsKIAlyZXR1cm4gcHdyYl9oYW5kbGU7CkBAIC02NzEsOSArNjc3LDcgQEAKIGZyZWVfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dCwKIAkJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlKQogewotCWlmICghcmluZ19tb2RlKQotCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VbcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4XSA9Ci0JCQkJCSAgICAgICBwd3JiX2hhbmRsZTsKKwlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VbcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4XSA9IHB3cmJfaGFuZGxlOwogCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlKys7CiAJaWYgKHB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCA9PSAocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAtIDEpKQogCQlwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXggPSAwOwpAQCAtNzkwLDYgKzc5NCw3IEBACiAJCW1lbWNweSh0YXNrLT5zYy0+c2Vuc2VfYnVmZmVyLCBzZW5zZSwKIAkJICAgICAgIG1pbl90KHUxNiwgc2Vuc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpKTsKIAl9CisKIAlpZiAoaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLmZsYWdzICYgSVNDU0lfRkxBR19DTURfUkVBRCkgewogCQlpZiAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvIDMyXQogCQkJCQkJCSYgU09MX1JFU19DTlRfTUFTSykKQEAgLTgxMSw2ICs4MTYsNyBAQAogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOwogCiAJaGRyID0gKHN0cnVjdCBpc2NzaV9sb2dvdXRfcnNwICopdGFzay0+aGRyOworCWhkci0+b3Bjb2RlID0gSVNDU0lfT1BfTE9HT1VUX1JTUDsKIAloZHItPnQyd2FpdCA9IDU7CiAJaGRyLT50MnJldGFpbiA9IDA7CiAJaGRyLT5mbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KQEAgLTgyNSw2ICs4MzEsOSBAQAogCQkJCQkmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKIAkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQogCQkJCQkvIDMyXSAmIFNPTF9DTURfV05EX01BU0spID4+IDI0KSAtIDEpOworCWhkci0+ZGxlbmd0aFswXSA9IDA7CisJaGRyLT5kbGVuZ3RoWzFdID0gMDsKKwloZHItPmRsZW5ndGhbMl0gPSAwOwogCWhkci0+aGxlbmd0aCA9IDA7CiAJaGRyLT5pdHQgPSBpb190YXNrLT5saWJpc2NzaV9pdHQ7CiAJX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKiloZHIsIE5VTEwsIDApOwpAQCAtODM5LDYgKzg0OCw3IEBACiAJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CiAKIAloZHIgPSAoc3RydWN0IGlzY3NpX3RtX3JzcCAqKXRhc2stPmhkcjsKKwloZHItPm9wY29kZSA9IElTQ1NJX09QX1NDU0lfVE1GVU5DX1JTUDsKIAloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQogCQkJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOwogCWhkci0+cmVzcG9uc2UgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvCkBAIC04NTksNyArODY5LDYgQEAKIHsKIAlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CiAJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUgPSBOVUxMOwogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKIAlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrOwpAQCAtODY3LDIyICs4NzYsMTQgQEAKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQlpZiAocmluZ19tb2RlKSB7Ci0JCXBzZ2xfaGFuZGxlID0gcGhiYS0+c2dsX2huZGxfYXJyYXlbKChwc29sLT4KLQkJCSAgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWVfcmluZywgaWNkX2luZGV4KSAvCi0JCQkJMzJdICYgU09MX0lDRF9JTkRFWF9NQVNLKSA+PiA2KV07Ci0JCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtwc2dsX2hhbmRsZS0+Y2lkXTsKLQkJdGFzayA9IHBzZ2xfaGFuZGxlLT50YXNrOwotCQlwd3JiX2hhbmRsZSA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+CiAJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCi0JCQkJU09MX0NJRF9NQVNLKSA+PiA2KV07Ci0JCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CisJCQkJU09MX0NJRF9NQVNLKSA+PiA2KSAtCisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CisJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KIAkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB3cmJfaW5kZXgpIC8KIAkJCQkzMl0gJiBTT0xfV1JCX0lOREVYX01BU0spID4+IDE2KV07Ci0JCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKLQl9CisJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOwogCiAJaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CiAJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKQEAgLTkyMywzMSArOTI0LDIzIEBACiAJc3RydWN0IGlzY3NpX3dyYiAqcHdyYiA9IE5VTEw7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwotCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IHR5cGU7CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7Ci0JaWYgKHJpbmdfbW9kZSkgewotCQlwc2dsX2hhbmRsZSA9IHBoYmEtPnNnbF9obmRsX2FycmF5WygocHNvbC0+Ci0JCQkgICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlX3JpbmcsIGljZF9pbmRleCkgLwotCQkJICAgICAgMzJdICYgU09MX0lDRF9JTkRFWF9NQVNLKSA+PiA2KV07Ci0JCXRhc2sgPSBwc2dsX2hhbmRsZS0+dGFzazsKLQkJdHlwZSA9IHBzZ2xfaGFuZGxlLT50eXBlOwotCX0gZWxzZSB7Ci0JCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT4KLQkJCQl3cmJfY29udGV4dFsoKHBzb2wtPmR3W29mZnNldG9mCisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+ZHdbb2Zmc2V0b2YKIAkJCQkoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXQotCQkJCSYgU09MX0NJRF9NQVNLKSA+PiA2KV07Ci0JCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CisJCQkJJiBTT0xfQ0lEX01BU0spID4+IDYpIC0KKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgogCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHdyYl9pbmRleCkgLwogCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpXTsKLQkJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOwotCQlwd3JiID0gcHdyYl9oYW5kbGUtPnB3cmI7Ci0JCXR5cGUgPSAocHdyYi0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlKSAvIDMyXSAmCi0JCQkgV1JCX1RZUEVfTUFTSykgPj4gMjg7Ci0JfQorCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKKwlwd3JiID0gcHdyYl9oYW5kbGUtPnB3cmI7CisJdHlwZSA9IChwd3JiLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUpIC8gMzJdICYKKwkJCQkgV1JCX1RZUEVfTUFTSykgPj4gMjg7CisKIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSFdIX1RZUEVfSU86CkBAIC05NzgsMTUgKzk3MSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJCSJJbiBod2lfY29tcGxldGVfY21kLCB1bmtub3duIHR5cGUgPSAlZCIKLQkJCQkiaWNkX2luZGV4IDB4JXggQ0lEIDB4JXhcbiIsIHR5cGUsCi0JCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlX3JpbmcsCi0JCQkJaWNkX2luZGV4KSAvIDMyXSAmIFNPTF9JQ0RfSU5ERVhfTUFTSykgPj4gNiksCi0JCQkJcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCWVsc2UKLQkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKIAkJCQkiSW4gaHdpX2NvbXBsZXRlX2NtZCwgdW5rbm93biB0eXBlID0gJWQiCiAJCQkJIndyYl9pbmRleCAweCV4IENJRCAweCV4XG4iLCB0eXBlLAogCQkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLApAQCAtMTA3Nyw3ICsxMDYyLDggQEAKIAogCVdBUk5fT04oIXBhc3luY19oYW5kbGUpOwogCi0JcGFzeW5jX2hhbmRsZS0+Y3JpID0gKHVuc2lnbmVkIHNob3J0KWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZDsKKwlwYXN5bmNfaGFuZGxlLT5jcmkgPSAodW5zaWduZWQgc2hvcnQpYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCQkJICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0OwogCXBhc3luY19oYW5kbGUtPmlzX2hlYWRlciA9IGlzX2hlYWRlcjsKIAlwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuID0gKChwZHBkdV9jcWUtPgogCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBkcGwpIC8gMzJdCkBAIC0xMzI3LDkgKzEzMTMsMTAgQEAKIAl9CiAKIAlzdGF0dXMgPSBiZWlzY3NpX3Byb2Nlc3NfYXN5bmNfcGR1KGJlaXNjc2lfY29ubiwgcGhiYSwKLQkJCQkJICAgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAotCQkJCQkgICBwaGRyLCBoZHJfbGVuLCBwZmlyc3RfYnVmZmVyLAotCQkJCQkgICBidWZfbGVuKTsKKwkJCQkJICAgKGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJCSAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0KSwKKwkJCQkJICAgIHBoZHIsIGhkcl9sZW4sIHBmaXJzdF9idWZmZXIsCisJCQkJCSAgICBidWZfbGVuKTsKIAogCWlmIChzdGF0dXMgPT0gMCkKIAkJaHdpX2ZyZWVfYXN5bmNfbXNnKHBoYmEsIGNyaSk7CkBAIC0xNDIyLDYgKzE0MDksNDggQEAKIAlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcik7CiB9CiAKK3N0YXRpYyB2b2lkICBiZWlzY3NpX3Byb2Nlc3NfbWNjX2lzcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY19jcTsKKwlzdHJ1Y3QgIGJlX21jY19jb21wbCAqbWNjX2NvbXBsOworCXVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkID0gMDsKKworCW1jY19jcSA9ICZwaGJhLT5jdHJsLm1jY19vYmouY3E7CisJbWNjX2NvbXBsID0gcXVldWVfdGFpbF9ub2RlKG1jY19jcSk7CisJbWNjX2NvbXBsLT5mbGFncyA9IGxlMzJfdG9fY3B1KG1jY19jb21wbC0+ZmxhZ3MpOworCXdoaWxlIChtY2NfY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX1ZBTElEX01BU0spIHsKKworCQlpZiAobnVtX3Byb2Nlc3NlZCA+PSAzMikgeworCQkJaHdpX3JpbmdfY3FfZGIocGhiYSwgbWNjX2NxLT5pZCwKKwkJCQkJbnVtX3Byb2Nlc3NlZCwgMCwgMCk7CisJCQludW1fcHJvY2Vzc2VkID0gMDsKKwkJfQorCQlpZiAobWNjX2NvbXBsLT5mbGFncyAmIENRRV9GTEFHU19BU1lOQ19NQVNLKSB7CisJCQkvKiBJbnRlcnByZXQgZmxhZ3MgYXMgYW4gYXN5bmMgdHJhaWxlciAqLworCQkJaWYgKGlzX2xpbmtfc3RhdGVfZXZ0KG1jY19jb21wbC0+ZmxhZ3MpKQorCQkJCS8qIEludGVycHJldCBjb21wbCBhcyBhIGFzeW5jIGxpbmsgZXZ0ICovCisJCQkJYmVpc2NzaV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3MocGhiYSwKKwkJCQkoc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKikgbWNjX2NvbXBsKTsKKwkJCWVsc2UKKwkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJCSIgVW5zdXBwb3J0ZWQgQXN5bmMgRXZlbnQsIGZsYWdzIgorCQkJCQkiID0gMHglMDh4IFxuIiwgbWNjX2NvbXBsLT5mbGFncyk7CisJCX0gZWxzZSBpZiAobWNjX2NvbXBsLT5mbGFncyAmIENRRV9GTEFHU19DT01QTEVURURfTUFTSykgeworCQkJYmVfbWNjX2NvbXBsX3Byb2Nlc3NfaXNyKCZwaGJhLT5jdHJsLCBtY2NfY29tcGwpOworCQkJYXRvbWljX2RlYygmcGhiYS0+Y3RybC5tY2Nfb2JqLnEudXNlZCk7CisJCX0KKworCQltY2NfY29tcGwtPmZsYWdzID0gMDsKKwkJcXVldWVfdGFpbF9pbmMobWNjX2NxKTsKKwkJbWNjX2NvbXBsID0gcXVldWVfdGFpbF9ub2RlKG1jY19jcSk7CisJCW1jY19jb21wbC0+ZmxhZ3MgPSBsZTMyX3RvX2NwdShtY2NfY29tcGwtPmZsYWdzKTsKKwkJbnVtX3Byb2Nlc3NlZCsrOworCX0KKworCWlmIChudW1fcHJvY2Vzc2VkID4gMCkKKwkJaHdpX3JpbmdfY3FfZGIocGhiYSwgbWNjX2NxLT5pZCwgbnVtX3Byb2Nlc3NlZCwgMSwgMCk7CisKK30KIAogc3RhdGljIHVuc2lnbmVkIGludCBiZWlzY3NpX3Byb2Nlc3NfY3Eoc3RydWN0IGJlX2VxX29iaiAqcGJlX2VxKQogewpAQCAtMTQzMSw3ICsxNDYwLDggQEAKIAl1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdF9udW1wID0gMDsKIAlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47Ci0Jc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKIAogCWNxID0gcGJlX2VxLT5jcTsKQEAgLTE0NDIsMzIgKzE0NzIsMTMgQEAKIAkgICAgICAgQ1FFX1ZBTElEX01BU0spIHsKIAkJYmVfZHdzX2xlX3RvX2NwdShzb2wsIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSkpOwogCi0JCWlmIChyaW5nX21vZGUpIHsKLQkJCXBzZ2xfaGFuZGxlID0gcGhiYS0+c2dsX2huZGxfYXJyYXlbKChzb2wtPgotCQkJCSAgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWVfcmluZywKLQkJCQkgICAgICBpY2RfaW5kZXgpIC8gMzJdICYgU09MX0lDRF9JTkRFWF9NQVNLKQotCQkJCSAgICAgID4+IDYpXTsKLQkJCWJlaXNjc2lfY29ubiA9IHBoYmEtPmNvbm5fdGFibGVbcHNnbF9oYW5kbGUtPmNpZF07Ci0JCQlpZiAoIWJlaXNjc2lfY29ubiB8fCAhYmVpc2NzaV9jb25uLT5lcCkgewotCQkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJCSAgICAgIkNvbm5lY3Rpb24gdGFibGUgZW1wdHkgZm9yIGNpZCA9ICVkXG4iLAotCQkJCSAgICAgIHBzZ2xfaGFuZGxlLT5jaWQpOwotCQkJCXJldHVybiAwOwotCQkJfQorCQllcCA9IHBoYmEtPmVwX2FycmF5Wyh1MzIpICgoc29sLT4KKwkJCQkgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdICYKKwkJCQkgICBTT0xfQ0lEX01BU0spID4+IDYpIC0KKwkJCQkgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKIAotCQl9IGVsc2UgewotCQkJYmVpc2NzaV9jb25uID0gcGhiYS0+Y29ubl90YWJsZVsodTMyKSAoc29sLT4KLQkJCQkgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCi0JCQkJIFNPTF9DSURfTUFTSykgPj4gNl07Ci0KLQkJCWlmICghYmVpc2NzaV9jb25uIHx8ICFiZWlzY3NpX2Nvbm4tPmVwKSB7Ci0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkJICAgICAiQ29ubmVjdGlvbiB0YWJsZSBlbXB0eSBmb3IgY2lkID0gJWRcbiIsCi0JCQkJICAgICAodTMyKShzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsCi0JCQkJICAgICBjaWQpIC8gMzJdICYgU09MX0NJRF9NQVNLKSA+PiA2KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQorCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJCWJlaXNjc2lfY29ubiA9IGJlaXNjc2lfZXAtPmNvbm47CiAKIAkJaWYgKG51bV9wcm9jZXNzZWQgPj0gMzIpIHsKIAkJCWh3aV9yaW5nX2NxX2RiKHBoYmEsIGNxLT5pZCwKQEAgLTE1MTEsMjEgKzE1MjIsMTMgQEAKIAkJY2FzZSBDTURfQ1hOX0tJTExFRF9JVFRfSU5WQUxJRDoKIAkJY2FzZSBDTURfQ1hOX0tJTExFRF9TRVFfT1VUT0ZPUkRFUjoKIAkJY2FzZSBDTURfQ1hOX0tJTExFRF9JTlZBTElEX0RBVEFTTl9SQ1ZEOgotCQkJaWYgKHJpbmdfbW9kZSkgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwKLQkJCQkgIkNRIEVycm9yIG5vdGlmaWNhdGlvbiBmb3IgY21kLi4gIgotCQkJCSAiY29kZSAlZCBjaWQgMHgleFxuIiwKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCi0JCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssIHBzZ2xfaGFuZGxlLT5jaWQpOwotCQkJfSBlbHNlIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCiAJCQkJICJDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC4uICIKIAkJCQkgImNvZGUgJWQgY2lkIDB4JXhcbiIsCiAJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwogCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAogCQkJCSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KIAkJCQkgMzJdICYgU09MX0NJRF9NQVNLKSk7Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSBVTlNPTF9EQVRBX0RJR0VTVF9FUlJPUl9OT1RJRlk6CiAJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCkBAIC0xNTQ3LDM3ICsxNTUwLDIzIEBACiAJCWNhc2UgQ1hOX0tJTExFRF9PVkVSX1JVTl9SRVNJRFVBTDoKIAkJY2FzZSBDWE5fS0lMTEVEX1VOREVSX1JVTl9SRVNJRFVBTDoKIAkJY2FzZSBDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OOgotCQkJaWYgKHJpbmdfbW9kZSkgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCBDSUQgIgotCQkJCSAiMHgleC4uLlxuIiwKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCi0JCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssIHBzZ2xfaGFuZGxlLT5jaWQpOwotCQkJfSBlbHNlIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQgQ0lEICIKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCBDSUQgIgogCQkJCSAiMHgleC4uLlxuIiwKIAkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCiAJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCi0JCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7Ci0JCQl9CisJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spKTsKIAkJCWlzY3NpX2Nvbm5fZmFpbHVyZShiZWlzY3NpX2Nvbm4tPmNvbm4sCiAJCQkJCSAgIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJCQlicmVhazsKIAkJY2FzZSBDWE5fS0lMTEVEX1JTVF9TRU5UOgogCQljYXNlIENYTl9LSUxMRURfUlNUX1JDVkQ6Ci0JCQlpZiAocmluZ19tb2RlKSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IgotCQkJCSJyZWNlaXZlZC9zZW50IG9uIENJRCAweCV4Li4uXG4iLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KLQkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywgcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCQl9IGVsc2UgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCIKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCIKIAkJCQkicmVjZWl2ZWQvc2VudCBvbiBDSUQgMHgleC4uLlxuIiwKIAkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCiAJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCi0JCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7Ci0JCQl9CisJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spKTsKIAkJCWlzY3NpX2Nvbm5fZmFpbHVyZShiZWlzY3NpX2Nvbm4tPmNvbm4sCiAJCQkJCSAgIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJCQlicmVhazsKQEAgLTE1ODYsOCArMTU3NSw4IEBACiAJCQkJICJyZWNlaXZlZCBvbiBDSUQgMHgleC4uLlxuIiwKIAkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCiAJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCi0JCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE2MDQsNyArMTU5Myw3IEBACiAJcmV0dXJuIHRvdF9udW1wOwogfQogCi1zdGF0aWMgdm9pZCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2NxcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKQEAgLTE2MjQsNiArMTYxMyw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOwogCQlwaGJhLT50b2RvX21jY19jcSA9IDA7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCWJlaXNjc2lfcHJvY2Vzc19tY2NfaXNyKHBoYmEpOwogCX0KIAogCWlmIChwaGJhLT50b2RvX2NxKSB7CkBAIC0xNjY4LDcgKzE2NTgsOCBAQAogCQkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKIAogCWxfc2cgPSBzZzsKLQlmb3IgKGluZGV4ID0gMDsgKGluZGV4IDwgbnVtX3NnKSAmJiAoaW5kZXggPCAyKTsgaW5kZXgrKywgc2dfbmV4dChzZykpIHsKKwlmb3IgKGluZGV4ID0gMDsgKGluZGV4IDwgbnVtX3NnKSAmJiAoaW5kZXggPCAyKTsgaW5kZXgrKywKKwkJCQkJCQkgc2cgPSBzZ19uZXh0KHNnKSkgewogCQlpZiAoaW5kZXggPT0gMCkgewogCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CiAJCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwpAQCAtMTY3OSwxMSArMTY3MCw3IEBACiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sZW4sIHB3cmIsCiAJCQkJCQkJc2dfbGVuKTsKIAkJCXNnZV9sZW4gPSBzZ19sZW47Ci0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAotCQkJCQkJCTEpOwogCQl9IGVsc2UgewotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKLQkJCQkJCQkwKTsKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX3IydF9vZmZzZXQsCiAJCQkJCQkJcHdyYiwgc2dlX2xlbik7CiAJCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKQEAgLTE3MDYsMTMgKzE2OTMsMjcgQEAKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKIAkJCWlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2xvKTsKIAotCWlmIChudW1fc2cgPT0gMikKLQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfbGFzdCwgcHdyYiwgMSk7CisJaWYgKG51bV9zZyA9PSAxKSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJCTEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLAorCQkJCQkJCQkwKTsKKwl9IGVsc2UgaWYgKG51bV9zZyA9PSAyKSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJCTApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLAorCQkJCQkJCQkxKTsKKwl9IGVsc2UgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAorCQkJCQkJCQkwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMCk7CisJfQogCXNnID0gbF9zZzsKIAlwc2dsKys7CiAJcHNnbCsrOwogCW9mZnNldCA9IDA7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtX3NnOyBpbmRleCsrLCBzZ19uZXh0KHNnKSwgcHNnbCsrKSB7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtX3NnOyBpbmRleCsrLCBzZyA9IHNnX25leHQoc2cpLCBwc2dsKyspIHsKIAkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CiAJCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLApAQCAtMjA0OCwxMCArMjA0OSw5IEBACiAJfQogCWlkeCA9IDA7CiAJcHdyYiA9IG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKLQludW1fY3huX3dyYiA9Ci0JICAgICgobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLyAoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKSAqCi0JICAgICBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKLQorCW51bV9jeG5fd3JiID0gKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJICAgICAgKChzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikgKgorCQkJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpbmRleCArPSAyKSB7CiAJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CiAJCWlmIChudW1fY3huX3dyYikgewpAQCAtMjA2NCw5ICsyMDY0LDkgQEAKIAkJfSBlbHNlIHsKIAkJCWlkeCsrOwogCQkJcHdyYiA9IG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKLQkJCW51bV9jeG5fd3JiID0gKChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCi0JCQkJCShzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpICoKLQkJCQkJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bik7CisJCQludW1fY3huX3dyYiA9IChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCQkJICAgICAgKChzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKSk7CiAJCQlmb3IgKGogPSAwOyBqIDwgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsgaisrKSB7CiAJCQkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2Vbal07CiAJCQkJcHdyYl9oYW5kbGUtPnB3cmIgPSBwd3JiOwpAQCAtMjM4Myw3ICsyMzgzLDcgQEAKIAkJCQkJCSAgICAgJnBhZGRyKTsKIAkJaWYgKCFjcV92YWRkcmVzcykKIAkJCWdvdG8gY3JlYXRlX2NxX2Vycm9yOwotCQlyZXQgPSBiZV9maWxsX3F1ZXVlKGNxLCBwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCAvIDIsCisJCXJldCA9IGJlX2ZpbGxfcXVldWUoY3EsIHBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcywKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSwgY3FfdmFkZHJlc3MpOwogCQlpZiAocmV0KSB7CiAJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LApAQCAtMjYzNCw3ICsyNjM0LDggQEAKIAkJCQkgICAgICJ3cmJxIGNyZWF0ZSBmYWlsZWQuIik7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9Ci0JCXBod2lfY3RybHItPndyYl9jb250ZXh0W2ldLmNpZCA9IHBod2lfY29udGV4dC0+YmVfd3JicVtpXS5pZDsKKwkJcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaSAqIDJdLmNpZCA9IHBod2lfY29udGV4dC0+YmVfd3JicVtpXS4KKwkJCQkJCQkJICAgaWQ7CiAJfQogCWtmcmVlKHB3cmJfYXJyKTsKIAlyZXR1cm4gMDsKQEAgLTI4MDMsMTcgKzI4MDQsNiBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChwaGJhLT5md19jb25maWcuaXNjc2lfZmVhdHVyZXMgPT0gMHgxKQotCQlyaW5nX21vZGUgPSAxOwotCWVsc2UKLQkJcmluZ19tb2RlID0gMDsKLQlzdGF0dXMgPSBtZ210X2dldF9md19jb25maWcoY3RybCwgcGhiYSk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCi0JCQkgICAgICJFcnJvciBnZXR0aW5nIGZ3IGNvbmZpZ1xuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCiAJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfY3FzKHBoYmEsIHBod2lfY29udGV4dCk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJDUSBub3QgY3JlYXRlZFxuIik7CkBAIC0yOTQxLDE3ICsyOTMxLDYgQEAKIAlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsID0gMDsKIAlwaGJhLT5laF9zZ2xfaG5kbF9hdmJsID0gMDsKIAotCWlmIChyaW5nX21vZGUpIHsKLQkJcGhiYS0+c2dsX2huZGxfYXJyYXkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dsX2hhbmRsZSAqKSAqCi0JCQkJCSAgICAgIHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsLAotCQkJCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoIXBoYmEtPnNnbF9obmRsX2FycmF5KSB7Ci0JCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAotCQkJICAgICAiTWVtIEFsbG9jIEZhaWxlZC4gRmFpbGluZyB0byBsb2FkXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCiAJbWVtX2Rlc2NyX3NnbGggPSBwaGJhLT5pbml0X21lbTsKIAltZW1fZGVzY3Jfc2dsaCArPSBIV0lfTUVNX1NHTEg7CiAJaWYgKDEgPT0gbWVtX2Rlc2NyX3NnbGgtPm51bV9lbGVtZW50cykgewpAQCAtMjk1OSw4ICsyOTM4LDYgQEAKIAkJCQkJCSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsLAogCQkJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAoIXBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpIHsKLQkJCWlmIChyaW5nX21vZGUpCi0JCQkJa2ZyZWUocGhiYS0+c2dsX2huZGxfYXJyYXkpOwogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKIAkJCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMDMyLDcgKzMwMDksNyBAQAogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBmcmFnLCAwKTsKIAkJCXBmcmFnICs9IHBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbzsKIAkJCXBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXggPQotCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgKyBhcnJfaW5kZXgrKzsKKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX3N0YXJ0ICsgYXJyX2luZGV4Kys7CiAJCX0KIAkJaWR4Kys7CiAJfQpAQCAtMzA0Nyw3ICszMDI0LDcgQEAKIHsKIAlpbnQgaSwgbmV3X2NpZDsKIAotCXBoYmEtPmNpZF9hcnJheSA9IGttYWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCwKKwlwaGJhLT5jaWRfYXJyYXkgPSBremFsbG9jKHNpemVvZih2b2lkICopICogcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwsCiAJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoIXBoYmEtPmNpZF9hcnJheSkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LApAQCAtMzA1NSw3ICszMDMyLDcgQEAKIAkJCSAgICAgImhiYV9zZXR1cF9jaWRfdGJsc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlwaGJhLT5lcF9hcnJheSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqKSAqCisJcGhiYS0+ZXBfYXJyYXkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKikgKgogCQkJCSBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDIsIEdGUF9LRVJORUwpOwogCWlmICghcGhiYS0+ZXBfYXJyYXkpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKQEAgLTMwNjQsNyArMzA0MSw3IEBACiAJCWtmcmVlKHBoYmEtPmNpZF9hcnJheSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQluZXdfY2lkID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydDsKKwluZXdfY2lkID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydDsKIAlmb3IgKGkgPSAwOyBpIDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGkrKykgewogCQlwaGJhLT5jaWRfYXJyYXlbaV0gPSBuZXdfY2lkOwogCQluZXdfY2lkICs9IDI7CkBAIC0zMTQ1LDggKzMxMjIsNiBAQAogCWlmIChoYmFfc2V0dXBfY2lkX3RibHMocGhiYSkpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKIAkJCSAgICAgIkZhaWxlZCBpbiBoYmFfc2V0dXBfY2lkX3RibHNcbiIpOwotCQlpZiAocmluZ19tb2RlKQotCQkJa2ZyZWUocGhiYS0+c2dsX2huZGxfYXJyYXkpOwogCQlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKIAkJa2ZyZWUocGhiYS0+ZWhfc2dsX2huZGxfYmFzZSk7CiAJCWdvdG8gZG9fY2xlYW51cF9jdHJscjsKQEAgLTMxNjYsNiArMzE0MSw3IEBACiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOwogCXN0cnVjdCBiZV9lcV9lbnRyeSAqZXFlID0gTlVMTDsKIAlpbnQgaSwgZXFfbXNpeDsKKwl1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZDsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwogCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKQEAgLTMxNzcsMTMgKzMxNTMsMTcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKHBoYmEtPm51bV9jcHVzICsgZXFfbXNpeCk7IGkrKykgewogCQllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxW2ldLnE7CiAJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7Ci0KKwkJbnVtX3Byb2Nlc3NlZCA9IDA7CiAJCXdoaWxlIChlcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCkgLyAzMl0KIAkJCQkJJiBFUUVfVkFMSURfTUFTSykgewogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQsIGVxZSwgMCk7CiAJCQlxdWV1ZV90YWlsX2luYyhlcSk7CiAJCQllcWUgPSBxdWV1ZV90YWlsX25vZGUoZXEpOworCQkJbnVtX3Byb2Nlc3NlZCsrOwogCQl9CisKKwkJaWYgKG51bV9wcm9jZXNzZWQpCisJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDEsCW51bV9wcm9jZXNzZWQsIDEsIDEpOwogCX0KIH0KIApAQCAtMzE5NSwxMCArMzE3NSw5IEBACiAJaWYgKG1nbXRfc3RhdHVzKQogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKIAkJCSAgICAgIm1nbXRfZXBmd19jbGVhbnVwIEZBSUxFRCBcbiIpOwotCWh3aV9jbGVhbnVwKHBoYmEpOworCiAJaHdpX3B1cmdlX2VxKHBoYmEpOwotCWlmIChyaW5nX21vZGUpCi0JCWtmcmVlKHBoYmEtPnNnbF9obmRsX2FycmF5KTsKKwlod2lfY2xlYW51cChwaGJhKTsKIAlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKIAlrZnJlZShwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKTsKIAlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOwpAQCAtMzIxOSw3ICszMTk4LDggQEAKIAkgKiBXZSBjYW4gYWx3YXlzIHVzZSAwIGhlcmUgYmVjYXVzZSBpdCBpcyByZXNlcnZlZCBieSBsaWJpc2NzaSBmb3IKIAkgKiBsb2dpbi9zdGFydHVwIHJlbGF0ZWQgdGFza3MuCiAJICovCi0JcHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwgMCk7CisJcHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsIChiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQorCQkJCSAgICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0KSk7CiAJcHdyYiA9IChzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiAqKXB3cmJfaGFuZGxlLT5wd3JiOwogCW1lbXNldChwd3JiLCAwLCBzaXplb2YoKnB3cmIpKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCkBAIC0zMjgzLDggKzMyNjMsNyBAQAogCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiKSk7CiAKIAlkb29yYmVsbCB8PSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKLQlpZiAoIXJpbmdfbW9kZSkKLQkJZG9vcmJlbGwgfD0gKHB3cmJfaGFuZGxlLT53cmJfaW5kZXggJiBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKQorCWRvb3JiZWxsIHw9IChwd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykKIAkJCSAgICAgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CiAJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CiAKQEAgLTMzMjgsOCArMzMwNyw5IEBACiAJaW9fdGFzay0+YmhzX3BhLnUuYTY0LmFkZHJlc3MgPSBwYWRkcjsKIAlpb190YXNrLT5saWJpc2NzaV9pdHQgPSAoaXR0X3QpdGFzay0+aXR0OwogCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gYWxsb2Nfd3JiX2hhbmRsZShwaGJhLAotCQkJCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAotCQkJCQkJdGFzay0+aXR0KTsKKwkJCQkJCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0CisJCQkJCQkpOwogCWlvX3Rhc2stPmNvbm4gPSBiZWlzY3NpX2Nvbm47CiAKIAl0YXNrLT5oZHIgPSAoc3RydWN0IGlzY3NpX2hkciAqKSZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHI7CkBAIC0zMzQzLDcgKzMzMjMsNyBAQAogCQkJZ290byBmcmVlX2huZGxzOwogCX0gZWxzZSB7CiAJCWlvX3Rhc2stPnNjc2lfY21uZCA9IE5VTEw7Ci0JCWlmICgodGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgPT0gSVNDU0lfT1BfTE9HSU4pIHsKKwkJaWYgKChvcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgPT0gSVNDU0lfT1BfTE9HSU4pIHsKIAkJCWlmICghYmVpc2NzaV9jb25uLT5sb2dpbl9pbl9wcm9ncmVzcykgewogCQkJCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CiAJCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSAoc3RydWN0IHNnbF9oYW5kbGUgKikKQEAgLTMzNzAsMjEgKzMzNTAsMTYgQEAKIAlpdHQgPSAoaXR0X3QpIGNwdV90b19iZTMyKCgodW5zaWduZWQgaW50KWlvX3Rhc2stPnB3cmJfaGFuZGxlLT4KIAkJCQkgd3JiX2luZGV4IDw8IDE2KSB8ICh1bnNpZ25lZCBpbnQpCiAJCQkJKGlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgpKTsKLQlpZiAocmluZ19tb2RlKSB7Ci0JCXBoYmEtPnNnbF9obmRsX2FycmF5W2lvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXggLQotCQkJCSAgICAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF0gPQotCQkJCSAgICAgaW9fdGFzay0+cHNnbF9oYW5kbGU7Ci0JCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50YXNrID0gdGFzazsKLQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPmNpZCA9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZDsKLQl9IGVsc2UKLQkJaW9fdGFzay0+cHdyYl9oYW5kbGUtPnBpb19oYW5kbGUgPSB0YXNrOworCWlvX3Rhc2stPnB3cmJfaGFuZGxlLT5waW9faGFuZGxlID0gdGFzazsKIAogCWlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5pdHQgPSBpdHQ7CiAJcmV0dXJuIDA7CiAKIGZyZWVfaG5kbHM6CiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7Ci0JcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2JlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZF07CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WworCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOwogCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIGlvX3Rhc2stPnB3cmJfaGFuZGxlKTsKIAlpb190YXNrLT5wd3JiX2hhbmRsZSA9IE5VTEw7CiAJcGNpX3Bvb2xfZnJlZShiZWlzY3NpX3Nlc3MtPmJoc19wb29sLCBpb190YXNrLT5jbWRfYmhzLApAQCAtMzQwNCw3ICszMzc5LDggQEAKIAlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkXTsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkCisJCQktIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOwogCWlmIChpb190YXNrLT5wd3JiX2hhbmRsZSkgewogCQlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CiAJCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gTlVMTDsKQEAgLTM0NjAsMTggKzM0MzYsMTIgQEAKIAkJCSAgICAgIElTQ1NJX09QQ09ERV9TQ1NJX0RBVEFfT1VUKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGZpbmFsX2JpdCwKIAkJCSAgICAgICZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdSwgMSk7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IElOSV9XUl9DTUQ7Ci0JCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIElOSV9XUl9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIElOSV9XUl9DTUQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKIAl9IGVsc2UgewotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfUkRfQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfUkRfQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBJTklfUkRfQ01EKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMCk7CiAJfQogCW1lbWNweSgmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUuCkBAIC0zNDk2LDggKzM0NjYsNyBAQAogCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKIAogCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOwotCWlmICghcmluZ19tb2RlKQotCQlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCisJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgogCQkgICAgIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOwogCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOwogCkBAIC0zNTE5LDQ5ICszNDg4LDQ2IEBACiAJdW5zaWduZWQgaW50IGRvb3JiZWxsID0gMDsKIAl1bnNpZ25lZCBpbnQgaSwgY2lkOwogCXN0cnVjdCBpc2NzaV90YXNrICphYm9ydGVkX3Rhc2s7CisJdW5zaWduZWQgaW50IHRhZzsKIAogCWNpZCA9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZDsKIAlwd3JiID0gaW9fdGFzay0+cHdyYl9oYW5kbGUtPnB3cmI7CisJbWVtc2V0KHB3cmIsIDAsIHNpemVvZigqcHdyYikpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsCiAJCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmNtZHNuKSk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHdyYl9pZHgsIHB3cmIsCiAJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXgpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2xfaWNkX2lkeCwgcHdyYiwKIAkJICAgICAgaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCk7Ci0KIAlzd2l0Y2ggKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spIHsKIAljYXNlIElTQ1NJX09QX0xPR0lOOgotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBUR1RfRE1fQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBUR1RfRE1fQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBUR1RfRE1fQ01EKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLCAxKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9OT09QX09VVDoKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSU5JX1JEX0NNRDsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBJTklfUkRfQ01EKTsKKwkJaWYgKHRhc2stPmhkci0+dHR0ID09IElTQ1NJX1JFU0VSVkVEX1RBRykKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKIAkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1JEX0NNRCk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMSk7CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfVEVYVDoKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSU5JX1dSX0NNRDsKLQkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1dSX0NNRCk7Ci0JCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIFRHVF9ETV9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfU0NTSV9UTUZVTkM6CiAJCXNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCQlpID0gKChzdHJ1Y3QgaXNjc2lfdG0gKil0YXNrLT5oZHIpLT5ydHQ7CiAJCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwotCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkXTsKKwkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2NpZCAtCisJCQkJCSAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKIAkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbYmUzMl90b19jcHUoaSkKIAkJCQkJCQkJPj4gMTZdOwogCQlhYm9ydGVkX3Rhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKQEAgLTM1NzIsMjIgKzM1MzgsMjUgQEAKIAkJaWYgKCFhYm9ydGVkX2lvX3Rhc2stPnNjc2lfY21uZCkKIAkJCXJldHVybiAwOwogCi0JCW1nbXRfaW52YWxpZGF0ZV9pY2RzKHBoYmEsCisJCXRhZyA9IG1nbXRfaW52YWxpZGF0ZV9pY2RzKHBoYmEsCiAJCQkJICAgICBhYm9ydGVkX2lvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgsCiAJCQkJICAgICBjaWQpOwotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfVE1GX0NNRDsKLQkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1RNRl9DTUQpOworCQlpZiAoIXRhZykgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkJICAgICAibWdtdF9pbnZhbGlkYXRlX2ljZHMgY291bGQgbm90IGJlIgorCQkJCSAgICAgIiBzdWJtaXR0ZWRcbiIpOworCQl9IGVsc2UgeworCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CisJCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisJCX0KKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBJTklfVE1GX0NNRCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9MT0dPVVQ6CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSFdIX1RZUEVfTE9HT1VUOwotCQllbHNlCiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAogCQkJCUhXSF9UWVBFX0xPR09VVCk7CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CkBAIC0zNjAwLDE0ICszNTY5LDEzIEBACiAJfQogCiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHIydF9leHBfZHRsLCBwd3JiLAotCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5kYXRhX2NvdW50KSk7CisJCSAgICAgIHRhc2stPmRhdGFfY291bnQpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBwdHIybmV4dHdyYiwgcHdyYiwKIAkJICAgICAgaW9fdGFzay0+cHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXgpOwogCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKIAogCWRvb3JiZWxsIHw9IGNpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOwotCWlmICghcmluZ19tb2RlKQotCQlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCisJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgogCQkgICAgIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOwogCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOwogCWlvd3JpdGUzMihkb29yYmVsbCwgcGhiYS0+ZGJfdmEgKyBEQl9UWFVMUDBfT0ZGU0VUKTsKQEAgLTM2NDksNyArMzYxNyw2IEBACiAJcmV0dXJuIGJlaXNjc2lfaW90YXNrKHRhc2ssIHNnLCBudW1fc2csIHhmZXJsZW4sIHdyaXRlZGlyKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBiZWlzY3NpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQogewogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IE5VTEw7CkBAIC0zNzM0LDcgKzM3MDEsMjAgQEAKIAl9CiAJU0VfREVCVUcoREJHX0xWTF84LCAiIHBoYmEgPSAlcCBcbiIsIHBoYmEpOwogCi0JcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgcGhiYSk7CisJc3dpdGNoIChwY2lkZXYtPmRldmljZSkgeworCWNhc2UgQkVfREVWSUNFX0lEMToKKwljYXNlIE9DX0RFVklDRV9JRDE6CisJY2FzZSBPQ19ERVZJQ0VfSUQyOgorCQlwaGJhLT5nZW5lcmF0aW9uID0gQkVfR0VOMjsKKwkJYnJlYWs7CisJY2FzZSBCRV9ERVZJQ0VfSUQyOgorCWNhc2UgT0NfREVWSUNFX0lEMzoKKwkJcGhiYS0+Z2VuZXJhdGlvbiA9IEJFX0dFTjM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBoYmEtPmdlbmVyYXRpb24gPSAwOworCX0KKwogCWlmIChlbmFibGVfbXNpeCkKIAkJbnVtX2NwdXMgPSBmaW5kX251bV9jcHVzKCk7CiAJZWxzZQpAQCAtMzc1NCw3ICszNzM0LDE1IEBACiAJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlvX3NnbF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlzcl9sb2NrKTsKKwlyZXQgPSBtZ210X2dldF9md19jb25maWcoJnBoYmEtPmN0cmwsIHBoYmEpOworCWlmIChyZXQgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRXJyb3IgZ2V0dGluZyBmdyBjb25maWdcbiIpOworCQlnb3RvIGZyZWVfcG9ydDsKKwl9CisJcGhiYS0+c2hvc3QtPm1heF9pZCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQ7CiAJYmVpc2NzaV9nZXRfcGFyYW1zKHBoYmEpOworCXBoYmEtPnNob3N0LT5jYW5fcXVldWUgPSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsOwogCXJldCA9IGJlaXNjc2lfaW5pdF9wb3J0KHBoYmEpOwogCWlmIChyZXQgPCAwKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCkBAIC0zNzYyLDYgKzM3NTAsMTUgQEAKIAkJZ290byBmcmVlX3BvcnQ7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IE1BWF9NQ0NfQ01EIDsgaSsrKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBoYmEtPmN0cmwubWNjX3dhaXRbaSArIDFdKTsKKwkJcGhiYS0+Y3RybC5tY2NfdGFnW2ldID0gaSArIDE7CisJCXBoYmEtPmN0cmwubWNjX251bXRhZ1tpICsgMV0gPSAwOworCQlwaGJhLT5jdHJsLm1jY190YWdfYXZhaWxhYmxlKys7CisJfQorCisJcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXggPSBwaGJhLT5jdHJsLm1jY19mcmVlX2luZGV4ID0gMDsKKwogCXNucHJpbnRmKHBoYmEtPndxX25hbWUsIHNpemVvZihwaGJhLT53cV9uYW1lKSwgImJlaXNjc2lfcV9pcnEldSIsCiAJCSBwaGJhLT5zaG9zdC0+aG9zdF9ubyk7CiAJcGhiYS0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKHBoYmEtPndxX25hbWUpOwpAQCAtMzgzNiw3ICszODMzLDcgQEAKIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgPSBEUlZfTkFNRSwKLQkuY2FwcyA9IENBUF9SRUNPVkVSWV9MMCB8IENBUF9IRFJER1NUIHwKKwkuY2FwcyA9IENBUF9SRUNPVkVSWV9MMCB8IENBUF9IRFJER1NUIHwgQ0FQX1RFWFRfTkVHTyB8CiAJCUNBUF9NVUxUSV9SMlQgfCBDQVBfREFUQURHU1QgfCBDQVBfREFUQV9QQVRIX09GRkxPQUQsCiAJLnBhcmFtX21hc2sgPSBJU0NTSV9NQVhfUkVDVl9ETEVOR1RIIHwKIAkJSVNDU0lfTUFYX1hNSVRfRExFTkdUSCB8CkBAIC0zODU5LDcgKzM4NTYsNyBAQAogCQlJU0NTSV9VU0VSTkFNRSB8IElTQ1NJX1BBU1NXT1JEIHwKIAkJSVNDU0lfVVNFUk5BTUVfSU4gfCBJU0NTSV9QQVNTV09SRF9JTiB8CiAJCUlTQ1NJX0ZBU1RfQUJPUlQgfCBJU0NTSV9BQk9SVF9UTU8gfAotCQlJU0NTSV9MVV9SRVNFVF9UTU8gfCBJU0NTSV9UR1RfUkVTRVRfVE1PIHwKKwkJSVNDU0lfTFVfUkVTRVRfVE1PIHwKIAkJSVNDU0lfUElOR19UTU8gfCBJU0NTSV9SRUNWX1RNTyB8CiAJCUlTQ1NJX0lGQUNFX05BTUUgfCBJU0NTSV9JTklUSUFUT1JfTkFNRSwKIAkuaG9zdF9wYXJhbV9tYXNrID0gSVNDU0lfSE9TVF9IV0FERFJFU1MgfCBJU0NTSV9IT1NUX0lQQUREUkVTUyB8CkBAIC0zOTA1LDcgKzM5MDIsNyBAQAogCQlTRV9ERUJVRyhEQkdfTFZMXzEsCiAJCQkgImJlaXNjc2lfbW9kdWxlX2luaXQgLSBVbmFibGUgdG8gIHJlZ2lzdGVyIGJlaXNjc2kiCiAJCQkgInRyYW5zcG9ydC5cbiIpOwotCQlyZXQgPSAtRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9tb2R1bGVfaW5pdCwgdHQ9JXAgXG4iLAogCQkgJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0KTsKQEAgLTM5MTcsNyArMzkxNCw2IEBACiAJCQkgImJlaXNjc2kgcGNpIGRyaXZlci5cbiIpOwogCQlnb3RvIHVucmVnaXN0ZXJfaXNjc2lfdHJhbnNwb3J0OwogCX0KLQlyaW5nX21vZGUgPSAwOwogCXJldHVybiAwOwogCiB1bnJlZ2lzdGVyX2lzY3NpX3RyYW5zcG9ydDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCmluZGV4IDI1ZTZiMjAuLmM1M2E4MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDAsMzEgKzQwLDI5IEBACiAjZGVmaW5lIERSVl9ERVNDCQlCRV9OQU1FICIgIiAiRHJpdmVyIgogCiAjZGVmaW5lIEJFX1ZFTkRPUl9JRCAJCTB4MTlBMgorLyogREVWSUNFIElEJ3MgZm9yIEJFMiAqLwogI2RlZmluZSBCRV9ERVZJQ0VfSUQxCQkweDIxMgogI2RlZmluZSBPQ19ERVZJQ0VfSUQxCQkweDcwMgogI2RlZmluZSBPQ19ERVZJQ0VfSUQyCQkweDcwMwotI2RlZmluZSBPQ19ERVZJQ0VfSUQzCQkweDcxMgotI2RlZmluZSBPQ19ERVZJQ0VfSUQ0CQkweDIyMgogCi0jZGVmaW5lIEJFMl9NQVhfU0VTU0lPTlMJNjQKKy8qIERFVklDRSBJRCdzIGZvciBCRTMgKi8KKyNkZWZpbmUgQkVfREVWSUNFX0lEMgkJMHgyMjIKKyNkZWZpbmUgT0NfREVWSUNFX0lEMwkJMHg3MTIKKworI2RlZmluZSBCRTJfSU9fREVQVEgJCTEwMjQKKyNkZWZpbmUgQkUyX01BWF9TRVNTSU9OUwkyNTYKICNkZWZpbmUgQkUyX0NNRFNfUEVSX0NYTgkxMjgKLSNkZWZpbmUgQkUyX0xPR09VVFMJCUJFMl9NQVhfU0VTU0lPTlMKICNkZWZpbmUgQkUyX1RNRlMJCTE2CiAjZGVmaW5lIEJFMl9OT1BPVVRfUkVRCQkxNgotI2RlZmluZSBCRTJfQVNZTkNQRFVTCQlCRTJfTUFYX1NFU1NJT05TCi0jZGVmaW5lIEJFMl9NQVhfSUNEUwkJMjA0OAogI2RlZmluZSBCRTJfU0dFCQkJMzIKICNkZWZpbmUgQkUyX0RFRlBEVV9IRFJfU1oJNjQKICNkZWZpbmUgQkUyX0RFRlBEVV9EQVRBX1NaCTgxOTIKLSNkZWZpbmUgQkUyX0lPX0RFUFRIIFwKLQkoQkUyX01BWF9JQ0RTIC8gMiAtIChCRTJfTE9HT1VUUyArIEJFMl9UTUZTICsgQkUyX05PUE9VVF9SRVEpKQogCiAjZGVmaW5lIE1BWF9DUFVTCQkzMQotI2RlZmluZSBCRUlTQ1NJX1NHTElTVF9FTEVNRU5UUwlCRTJfU0dFCisjZGVmaW5lIEJFSVNDU0lfU0dMSVNUX0VMRU1FTlRTCTMwCiAKLSNkZWZpbmUgQkVJU0NTSV9NQVhfQ01ORFMJMTAyNAkvKiBNYXggSU8ncyBwZXIgQ3RybHIgc2h0LT5jYW5fcXVldWUgKi8KICNkZWZpbmUgQkVJU0NTSV9DTURfUEVSX0xVTgkxMjgJLyogc2NzaV9ob3N0LT5jbWRfcGVyX2x1biAqLwotI2RlZmluZSBCRUlTQ1NJX01BWF9TRUNUT1JTCTIwNDgJLyogc2NzaV9ob3N0LT5tYXhfc2VjdG9ycyAqLworI2RlZmluZSBCRUlTQ1NJX01BWF9TRUNUT1JTCTI1NgkvKiBzY3NpX2hvc3QtPm1heF9zZWN0b3JzICovCiAKICNkZWZpbmUgQkVJU0NTSV9NQVhfQ01EX0xFTgkxNgkvKiBzY3NpX2hvc3QtPm1heF9jbWRfbGVuICovCiAjZGVmaW5lIEJFSVNDU0lfTlVNX01BWF9MVU4JMjU2CS8qIHNjc2lfaG9zdC0+bWF4X2x1biAqLwpAQCAtMzMwLDYgKzMyOCw3IEBACiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwkvKiBUaGUgYWN0dWFrIHdvcmsgcXVldWUgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19jcXM7CS8qIFRoZSB3b3JrIGJlaW5nIHF1ZXVlZCAqLwogCXN0cnVjdCBiZV9jdHJsX2luZm8gY3RybDsKKwl1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbjsKIH07CiAKIHN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gewpAQCAtNjU2LDExICs2NTUsMTIgQEAKIAogfSBfX3BhY2tlZDsKIAotc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkLAotCQkJCSAgICBpbnQgaW5kZXgpOworc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkKTsKIHZvaWQKIGZyZWVfbWdtdF9zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKTsKIAordm9pZCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2NxcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCiBzdHJ1Y3QgcGR1X25vcF9vdXQgewogCXUzMiBkd1sxMl07CiB9OwpAQCAtODAyLDcgKzgwMiw2IEBACiAJc3RydWN0IGJlX3JpbmcgZGVmYXVsdF9wZHVfaGRyOwogCXN0cnVjdCBiZV9yaW5nIGRlZmF1bHRfcGR1X2RhdGE7CiAJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jdHh0OwotCXVuc2lnbmVkIHNob3J0IGNxX2Vycm9yc1tDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OXTsKIH07CiAKIGVudW0gaHdoX3R5cGVfZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwppbmRleCA3OWMyYmQ1Li4zMTdiY2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQ4LDYgKzQ4LDE0IEBACiAJCQkJCXBmd19jZmctPnVscFswXS5zcV9iYXNlOwogCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ID0KIAkJCQkJcGZ3X2NmZy0+dWxwWzBdLnNxX2NvdW50OworCQlpZiAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCA+IChCRTJfTUFYX1NFU1NJT05TIC8gMikpIHsKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCQkiRlcgcmVwb3J0ZWQgTUFYIENYTlMgYXMgJWQgXHQiCisJCQkJIk1heCBTdXBwb3J0ZWQgPSAlZC5cbiIsCisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCwKKwkJCQlCRTJfTUFYX1NFU1NJT05TKTsKKwkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgPSBCRTJfTUFYX1NFU1NJT05TIC8gMjsKKwkJfQogCX0gZWxzZSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAogCQkJICAgICAiRmFpbGVkIGluIG1nbXRfZ2V0X2Z3X2NvbmZpZyBcbiIpOwpAQCAtNzcsNiArODUsNyBAQAogCX0KIAlub25lbWJfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzKTsKIAlyZXEgPSBub25lbWJfY21kLnZhOworCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CiAJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSk7CkBAIC0xNDAsMTAgKzE0OSwxNyBAQAogewogCXN0cnVjdCBiZV9kbWFfbWVtIG5vbmVtYl9jbWQ7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGJlX3NnZSAqc2dlOwogCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiAqcmVxOwotCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCB0YWcgPSAwOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQogCiAJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCiAJCQkJc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiksCkBAIC0xNTYsOCArMTcyLDEwIEBACiAJfQogCW5vbmVtYl9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4pOwogCXJlcSA9IG5vbmVtYl9jbWQudmE7Ci0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCXdyYi0+dGFnMCB8PSB0YWc7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLApAQCAtMTcyLDE0ICsxOTAsMTIgQEAKIAlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5kbWEgJiAweEZGRkZGRkZGKTsKIAlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuc2l6ZSk7CiAKLQlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKHN0YXR1cykKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiSUNEUyBJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwogCWlmIChub25lbWJfY21kLnZhKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGN0cmwtPnBkZXYsIG5vbmVtYl9jbWQuc2l6ZSwKIAkJCQkgICAgbm9uZW1iX2NtZC52YSwgbm9uZW1iX2NtZC5kbWEpOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIAogdW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCkBAIC0xODksMTMgKzIwNSwxOSBAQAogCQkJCQkgdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnKQogewogCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKLQlzdHJ1Y3QgaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtc19pbiAqcmVxID0KLQkJCQkJCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKLQlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luICpyZXE7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CiAKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl0YWcgPSBhbGxvY19tY2NfdGFnKHBoYmEpOworCWlmICghdGFnKSB7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gdGFnOworCX0KKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXdyYi0+dGFnMCB8PSB0YWc7CisJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJX0lOSSwKQEAgLTIwOCwzNSArMjMwLDM3IEBACiAJZWxzZQogCQlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT05ORUNUSU9OX0lOVkFMSURBVEU7CiAJcmVxLT5zYXZlX2NmZyA9IHNhdmVjZmdfZmxhZzsKLQlzdGF0dXMgPSAgYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmIChzdGF0dXMpCi0JCVNFX0RFQlVHKERCR19MVkxfMSwgIkludmFsaWRhdGlvbiBGYWlsZWRcbiIpOwotCisJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0YWc7CiB9CiAKIHVuc2lnbmVkIGNoYXIgbWdtdF91cGxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCiAJCQkJdW5zaWduZWQgc2hvcnQgY2lkLCB1bnNpZ25lZCBpbnQgdXBsb2FkX2ZsYWcpCiB7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19pbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luICpyZXE7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CiAKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl0YWcgPSBhbGxvY19tY2NfdGFnKHBoYmEpOworCWlmICghdGFnKSB7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gdGFnOworCX0KKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwl3cmItPnRhZzAgfD0gdGFnOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfQ09NTU9OX1RDUF9VUExPQUQsCiAJCQkgICBPUENPREVfQ09NTU9OX1RDUF9VUExPQUQsIHNpemVvZigqcmVxKSk7CiAJcmVxLT5pZCA9ICh1bnNpZ25lZCBzaG9ydCljaWQ7CiAJcmVxLT51cGxvYWRfdHlwZSA9ICh1bnNpZ25lZCBjaGFyKXVwbG9hZF9mbGFnOwotCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChwaGJhKTsKLQlpZiAoc3RhdHVzKQotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X3VwbG9hZF9jb25uZWN0aW9uIEZhaWxlZFxuIik7CisJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0YWc7CiB9CiAKIGludCBtZ210X29wZW5fY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCkBAIC0yNDgsMTMgKzI3MiwxMyBAQAogCXN0cnVjdCBzb2NrYWRkcl9pbiAqZGFkZHJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopZHN0X2FkZHI7CiAJc3RydWN0IHNvY2thZGRyX2luNiAqZGFkZHJfaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilkc3RfYWRkcjsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW4gKnJlcTsKIAl1bnNpZ25lZCBzaG9ydCBkZWZfaGRyX2lkOwogCXVuc2lnbmVkIHNob3J0IGRlZl9kYXRhX2lkOwogCXN0cnVjdCBwaHlzX2FkZHIgdGVtcGxhdGVfYWRkcmVzcyA9IHsgMCwgMCB9OwogCXN0cnVjdCBwaHlzX2FkZHIgKnB0ZW1wbGF0ZV9hZGRyZXNzOwotCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCB0YWcgPSAwOwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIHNob3J0IGNpZCA9IGJlaXNjc2lfZXAtPmVwX2NpZDsKIApAQCAtMjY2LDcgKzI5MCwxNCBAQAogCXB0ZW1wbGF0ZV9hZGRyZXNzID0gJnRlbXBsYXRlX2FkZHJlc3M7CiAJSVNDU0lfR0VUX1BEVV9URU1QTEFURV9BRERSRVNTKHBoYmEsIHB0ZW1wbGF0ZV9hZGRyZXNzKTsKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl0YWcgPSBhbGxvY19tY2NfdGFnKHBoYmEpOworCWlmICghdGFnKSB7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gdGFnOworCX0KKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwl3cmItPnRhZzAgfD0gdGFnOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLApAQCAtMzExLDQ2ICszNDIsMzYgQEAKIAlyZXEtPmRvX29mZmxvYWQgPSAxOwogCXJlcS0+ZGF0YW91dF90ZW1wbGF0ZV9wYS5sbyA9IHB0ZW1wbGF0ZV9hZGRyZXNzLT5sbzsKIAlyZXEtPmRhdGFvdXRfdGVtcGxhdGVfcGEuaGkgPSBwdGVtcGxhdGVfYWRkcmVzcy0+aGk7Ci0Jc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmICghc3RhdHVzKSB7Ci0JCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7Ci0JCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dCA9Ci0JCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCi0JCWVwID0gcGhiYS0+ZXBfYXJyYXlbcHRjcGNuY3Rfb3V0LT5jaWRdOwotCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7Ci0JCWJlaXNjc2lfZXAtPmZ3X2hhbmRsZSA9IHB0Y3BjbmN0X291dC0+Y29ubmVjdGlvbl9oYW5kbGU7Ci0JCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAxOwotCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJtZ210X29wZW5fY29ubmVjdGlvbiBTdWNjZXNzXG4iKTsKLQl9IGVsc2UKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gRmFpbGVkXG4iKTsKKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIAotaW50IGJlX2NtZF9nZXRfbWFjX2FkZHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1OCAqbWFjX2FkZHIpCit1bnNpZ25lZCBpbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCiB7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCWludCBzdGF0dXM7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfbWFjX2FkZHIgKnJlcTsKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKIAogCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlX2NtZF9nZXRfbWFjX2FkZHJcbiIpOwogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQorCisJd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJd3JiLT50YWcwIHw9IHRhZzsKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCiAJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX05UV0tfR0VUX05JQ19DT05GSUcsCiAJCQkgICBzaXplb2YoKnJlcSkpOwogCi0Jc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmICghc3RhdHVzKSB7Ci0JCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfbWFjX2FkZHIgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0KLQkJbWVtY3B5KG1hY19hZGRyLCByZXNwLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOwotCX0KLQorCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gdGFnOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaAppbmRleCAyNGVhZmY5Li5lY2VhZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIzMSw2ICsyMzEsNyBAQAogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKIAlzdHJ1Y3QgYmVpc2NzaV9zZXNzICpzZXNzOwogCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmNvbm47CisJc3RydWN0IGlzY3NpX2VuZHBvaW50ICpvcGVuaXNjc2lfZXA7CiAJdW5zaWduZWQgc2hvcnQgaXBfdHlwZTsKIAljaGFyIGRzdDZfYWRkcltJU0NTSV9BRERSRVNTX0JVRl9MRU5dOwogCXVuc2lnbmVkIGxvbmcgZHN0X2FkZHI7CkBAIC0yNDksNyArMjUwLDQgQEAKIAkJCQkJIHVuc2lnbmVkIHNob3J0IGlzc3VlX3Jlc2V0LAogCQkJCQkgdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnKTsKIAotdW5zaWduZWQgY2hhciBtZ210X2Z3X2NtZChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAotCQkJICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCi0JCQkgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKaW5kZXggMzNiMjI5NC4uMWM0ZDEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKQEAgLTE0MjYsOCArMTQyNiw4IEBACiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfUEFSQU1fQ09OTl9BRERSRVNTOgogCQlpZiAoYm54MmlfY29ubi0+ZXApCi0JCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgTklQUVVBRF9GTVQgIlxuIiwKLQkJCQkgICAgICBOSVBRVUFEKGJueDJpX2Nvbm4tPmVwLT5jbV9zay0+ZHN0X2lwKSk7CisJCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTRcbiIsCisJCQkJICAgICAgJmJueDJpX2Nvbm4tPmVwLT5jbV9zay0+ZHN0X2lwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmKTsKQEAgLTE5OTAsNiArMTk5MCw3IEBACiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBpc2NzaV9laF9hYm9ydCwKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF9kZXZpY2VfcmVzZXQsCiAJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLmNhbl9xdWV1ZQkJPSAxMDI0LAogCS5tYXhfc2VjdG9ycwkJPSAxMjcsCiAJLmNtZF9wZXJfbHVuCQk9IDMyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IDkxMjliY2YuLmNkMDVlMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTIxOSwxOCArMjE5LDE1IEBACiAJCQlicmVhazsKIAkJfQogCQlzYSA9IChjZGJwWzhdIDw8IDgpICsgY2RicFs5XTsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKG1haW50X2luX2FyciwgTUFJTlRfSU5fU1osIHNhKTsKLQkJaWYgKG5hbWUpIHsKKwkJbmFtZSA9IGdldF9zYV9uYW1lKHZhcmlhYmxlX2xlbmd0aF9hcnIsIFZBUklBQkxFX0xFTkdUSF9TWiwgc2EpOworCQlpZiAobmFtZSkKIAkJCXByaW50aygiJXMiLCBuYW1lKTsKLQkJCWlmICgoY2RiX2xlbiA+IDApICYmIChsZW4gIT0gY2RiX2xlbikpCi0JCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLAotCQkJCSAgICAgICBsZW4sIGNkYl9sZW4pOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlwcmludGsoImNkYlswXT0weCV4LCBzYT0weCV4IiwgY2RiMCwgc2EpOwotCQkJaWYgKChjZGJfbGVuID4gMCkgJiYgKGxlbiAhPSBjZGJfbGVuKSkKLQkJCQlwcmludGsoIiwgaW5fY2RiX2xlbj0lZCwgZXh0X2xlbj0lZCIsCi0JCQkJICAgICAgIGxlbiwgY2RiX2xlbik7Ci0JCX0KKworCQlpZiAoKGNkYl9sZW4gPiAwKSAmJiAobGVuICE9IGNkYl9sZW4pKQorCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLCBsZW4sIGNkYl9sZW4pOworCiAJCWJyZWFrOwogCWNhc2UgTUFJTlRFTkFOQ0VfSU46CiAJCXNhID0gY2RicFsxXSAmIDB4MWY7CkBAIC0zNDksNiArMzQ2LDkgQEAKIHsKIAlpbnQgazsKIAorCWlmIChjbWQtPmNtbmQgPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICJDREI6ICIpOwogCXByaW50X29wY29kZV9uYW1lKGNtZC0+Y21uZCwgY21kLT5jbWRfbGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKaW5kZXggOTY5YzgzMS4uNDEyODUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCkBAIC01OTEsOCArNTkxLDcgQEAKIAljeGdiM2lfY29ubl9tYXhfcmVjdl9kbGVuZ3RoKGNvbm4pOwogCiAJc3Bpbl9sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKLQlzcHJpbnRmKGNvbm4tPnBvcnRhbF9hZGRyZXNzLCBOSVBRVUFEX0ZNVCwKLQkJTklQUVVBRChjM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIpKTsKKwlzcHJpbnRmKGNvbm4tPnBvcnRhbF9hZGRyZXNzLCAiJXBJNCIsICZjM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIpOwogCWNvbm4tPnBvcnRhbF9wb3J0ID0gbnRvaHMoYzNjbi0+ZGFkZHIuc2luX3BvcnQpOwogCXNwaW5fdW5sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKIApAQCAtNzA5LDYgKzcwOCwxMiBAQAogewogCXN0cnVjdCBjeGdiM2lfaGJhICpoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOwogCisJaWYgKCFoYmEtPm5kZXYpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaG9zdCwgIkNvdWxkIG5vdCBzZXQgaG9zdCBwYXJhbS4gIgorCQkJICAgICAiTmV0ZGV2IGZvciBob3N0IG5vdCBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJY3hnYjNpX2FwaV9kZWJ1ZygicGFyYW0gJWQsIGJ1ZiAlcy5cbiIsIHBhcmFtLCBidWYpOwogCiAJc3dpdGNoIChwYXJhbSkgewpAQCAtNzM5LDYgKzc0NCwxMiBAQAogCXN0cnVjdCBjeGdiM2lfaGJhICpoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOwogCWludCBsZW4gPSAwOwogCisJaWYgKCFoYmEtPm5kZXYpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaG9zdCwgIkNvdWxkIG5vdCBzZXQgaG9zdCBwYXJhbS4gIgorCQkJICAgICAiTmV0ZGV2IGZvciBob3N0IG5vdCBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJY3hnYjNpX2FwaV9kZWJ1ZygiaGJhICVzLCBwYXJhbSAlZC5cbiIsIGhiYS0+bmRldi0+bmFtZSwgcGFyYW0pOwogCiAJc3dpdGNoIChwYXJhbSkgewpAQCAtNzUzLDcgKzc2NCw3IEBACiAJCV9fYmUzMiBhZGRyOwogCiAJCWFkZHIgPSBjeGdiM2lfZ2V0X3ByaXZhdGVfaXB2NGFkZHIoaGJhLT5uZGV2KTsKLQkJbGVuID0gc3ByaW50ZihidWYsIE5JUFFVQURfRk1ULCBOSVBRVUFEKGFkZHIpKTsKKwkJbGVuID0gc3ByaW50ZihidWYsICIlcEk0IiwgJmFkZHIpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYwppbmRleCAxNWEwMGU4Li4zZTA4YzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCkBAIC0xNjc1LDEwICsxNjc1LDExIEBACiAJfSBlbHNlCiAJCWMzY24tPnNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHNpcHY0OwogCi0JYzNjbl9jb25uX2RlYnVnKCJjM2NuIDB4JXAsICV1LiV1LiV1LiV1LCV1LSV1LiV1LiV1LiV1LCV1IFNZTl9TRU5ULlxuIiwKLQkJCWMzY24sIE5JUFFVQUQoYzNjbi0+c2FkZHIuc2luX2FkZHIuc19hZGRyKSwKKwljM2NuX2Nvbm5fZGVidWcoImMzY24gMHglcCwgJXBJNCwldS0lcEk0LCV1IFNZTl9TRU5ULlxuIiwKKwkJCWMzY24sCisJCQkmYzNjbi0+c2FkZHIuc2luX2FkZHIuc19hZGRyLAogCQkJbnRvaHMoYzNjbi0+c2FkZHIuc2luX3BvcnQpLAotCQkJTklQUVVBRChjM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIpLAorCQkJJmMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCW50b2hzKGMzY24tPmRhZGRyLnNpbl9wb3J0KSk7CiAKIAljM2NuX3NldF9zdGF0ZShjM2NuLCBDM0NOX1NUQVRFX0NPTk5FQ1RJTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYwppbmRleCAxZmUzYjBmLi45YzM4NTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYwpAQCAtNDYxLDEwICs0NjEsOCBAQAogCQlza2IgPSBza2JfcGVlaygmYzNjbi0+cmVjZWl2ZV9xdWV1ZSk7CiAJfQogCXJlYWRfdW5sb2NrKCZjM2NuLT5jYWxsYmFja19sb2NrKTsKLQlpZiAoYzNjbikgewotCQljM2NuLT5jb3BpZWRfc2VxICs9IHJlYWQ7Ci0JCWN4Z2IzaV9jM2NuX3J4X2NyZWRpdHMoYzNjbiwgcmVhZCk7Ci0JfQorCWMzY24tPmNvcGllZF9zZXEgKz0gcmVhZDsKKwljeGdiM2lfYzNjbl9yeF9jcmVkaXRzKGMzY24sIHJlYWQpOwogCWNvbm4tPnJ4ZGF0YV9vY3RldHMgKz0gcmVhZDsKIAogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwppbmRleCA0ZjBkMDEzLi5iYzllOTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCkBAIC03MTcsNiArNzE3LDggQEAKIAl7IklCTSIsICIyMTQ1IiB9LAogCXsiUGlsbGFyIiwgIkF4aW9tIiB9LAogCXsiSW50ZWwiLCAiTXVsdGktRmxleCJ9LAorCXsiTkVUQVBQIiwgIkxVTiJ9LAorCXsiQUlYIiwgIk5WRElTSyJ9LAogCXtOVUxMLCBOVUxMfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VhdGEuYyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKaW5kZXggYzcwNzZjZS4uM2M1YWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VhdGEuYworKysgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCkBAIC0xNTA5LDcgKzE1MDksNyBAQAogCWNoYXIgKmN1ciA9IHN0cjsKIAlpbnQgaSA9IDE7CiAKLQl3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8PSBNQVhfSU5UX1BBUkFNKSB7CisJd2hpbGUgKGN1ciAmJiBpc2RpZ2l0KCpjdXIpICYmIGkgPCBNQVhfSU5UX1BBUkFNKSB7CiAJCWludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAKIAkJaWYgKChjdXIgPSBzdHJjaHIoY3VyLCAnLCcpKSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYwppbmRleCBhNjgwZTE4Li5lMmJjNzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYwpAQCAtMTQ0OSw5ICsxNDQ5LDYgQEAKIAlpZiAob2Zmc2V0ID4gMTUpCiAJCWdvdG8gZG9fcmVqZWN0OwogCi0JaWYgKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ESVNBQkxFX1NZTkMpCi0JCW9mZnNldCA9IDA7Ci0KIAlpZiAob2Zmc2V0KSB7CiAJCWludCBvbmVfY2xvY2s7CiAKQEAgLTI0MDUsMTIgKzI0MDIsNiBAQAogCXN0cnVjdCBlc3BfdGFyZ2V0X2RhdGEgKnRwID0gJmVzcC0+dGFyZ2V0W2Rldi0+aWRdOwogCWludCBnb2FsX3RhZ3MsIHF1ZXVlX2RlcHRoOwogCi0JaWYgKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ESVNBQkxFX1NZTkMpIHsKLQkJLyogQnlwYXNzIGFzeW5jIGRvbWFpbiB2YWxpZGF0aW9uICovCi0JCWRldi0+cHByICA9IDA7Ci0JCWRldi0+c2R0ciA9IDA7Ci0JfQotCiAJZ29hbF90YWdzID0gMDsKIAogCWlmIChkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKQEAgLTI2NjAsNyArMjY1MSwxMCBAQAogCXN0cnVjdCBlc3AgKmVzcCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJc3RydWN0IGVzcF90YXJnZXRfZGF0YSAqdHAgPSAmZXNwLT50YXJnZXRbdGFyZ2V0LT5pZF07CiAKLQl0cC0+bmVnb19nb2FsX29mZnNldCA9IG9mZnNldDsKKwlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX0RJU0FCTEVfU1lOQykKKwkJdHAtPm5lZ29fZ29hbF9vZmZzZXQgPSAwOworCWVsc2UKKwkJdHAtPm5lZ29fZ29hbF9vZmZzZXQgPSBvZmZzZXQ7CiAJdHAtPmZsYWdzIHw9IEVTUF9UR1RfQ0hFQ0tfTkVHTzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCmluZGV4IDEwYmU5ZjMuLjJmNDdhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKQEAgLTIwMDksNiArMjAwOSw4IEBACiAJZmNvZV9pbnRlcmZhY2VfY2xlYW51cChmY29lKTsKIAlydG5sX3VubG9jaygpOwogCWZjb2VfaWZfZGVzdHJveShmY29lLT5jdGxyLmxwKTsKKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwogb3V0X3B1dGRldjoKIAlkZXZfcHV0KG5ldGRldik7CiBvdXRfbm9kZXY6CkBAIC0yMDU5LDYgKzIwNjEsMTEgQEAKIAl9CiAjZW5kaWYKIAorCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXRfbm9tb2Q7CisJfQorCiAJcnRubF9sb2NrKCk7CiAJbmV0ZGV2ID0gZmNvZV9pZl90b19uZXRkZXYoYnVmZmVyKTsKIAlpZiAoIW5ldGRldikgewpAQCAtMjA5OSwxNyArMjEwNiwyNCBAQAogCWlmICghZmNvZV9saW5rX29rKGxwb3J0KSkKIAkJZmNvZV9jdGxyX2xpbmtfdXAoJmZjb2UtPmN0bHIpOwogCi0JcmMgPSAwOwotb3V0X2ZyZWU6CiAJLyoKIAkgKiBSZWxlYXNlIGZyb20gaW5pdCBpbiBmY29lX2ludGVyZmFjZV9jcmVhdGUoKSwgb24gc3VjY2VzcyBscG9ydAogCSAqIHNob3VsZCBiZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRha2VuIGluIGZjb2VfaWZfY3JlYXRlKCkuCiAJICovCiAJZmNvZV9pbnRlcmZhY2VfcHV0KGZjb2UpOworCWRldl9wdXQobmV0ZGV2KTsKKwlydG5sX3VubG9jaygpOworCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOworCisJcmV0dXJuIDA7CitvdXRfZnJlZToKKwlmY29lX2ludGVyZmFjZV9wdXQoZmNvZSk7CiBvdXRfcHV0ZGV2OgogCWRldl9wdXQobmV0ZGV2KTsKIG91dF9ub2RldjoKIAlydG5sX3VubG9jaygpOworCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworb3V0X25vbW9kOgogCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYwppbmRleCA5ODIzMjkxLi41MTFjYjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCkBAIC0xMTg3LDcgKzExODcsNyBAQAogCQkJbmV4dF90aW1lciA9IGZpcC0+Y3Rscl9rYV90aW1lOwogCiAJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGZpcC0+cG9ydF9rYV90aW1lKSkgewotCQkJZmlwLT5wb3J0X2thX3RpbWUgKz0gamlmZmllcyArCisJCQlmaXAtPnBvcnRfa2FfdGltZSA9IGppZmZpZXMgKwogCQkJCW1zZWNzX3RvX2ppZmZpZXMoRklQX1ZOX0tBX1BFUklPRCk7CiAJCQlmaXAtPnNlbmRfcG9ydF9rYSA9IDE7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaCBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaAppbmRleCBiYjIwOGE2Li4zOTY2YzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCkBAIC0zNiw3ICszNiw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJmbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyBGQ29FIEhCQSBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wLjAuMTEyMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjQuMC45OCIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIjogIgogI2RlZmluZSBERlggICAgICAgICAgICAgICAgICAgICBEUlZfTkFNRSAiJWQ6ICIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwppbmRleCBmZTFiMTAzMS4uNTA3ZTI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMKQEAgLTYyMCw2ICs2MjAsOCBAQAogCWlmIChmbmljLT5jb25maWcuZmxhZ3MgJiBWRkNGX0ZJUF9DQVBBQkxFKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGZuaWMtPmxwb3J0LT5ob3N0LAogCQkJICAgICAiZmlybXdhcmUgc3VwcG9ydHMgRklQXG4iKTsKKwkJLyogZW5hYmxlIGRpcmVjdGVkIGFuZCBtdWx0aWNhc3QgKi8KKwkJdm5pY19kZXZfcGFja2V0X2ZpbHRlcihmbmljLT52ZGV2LCAxLCAxLCAwLCAwLCAwKTsKIAkJdm5pY19kZXZfYWRkX2FkZHIoZm5pYy0+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+c2stPnNrX2VyciA9IEVJTzsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHNvY2stPnNrLT5za19zbGVlcCk7CisJfQorCiAJaXNjc2lfY29ubl9zdG9wKGNsc19jb25uLCBmbGFnKTsKIAlpc2NzaV9zd190Y3BfcmVsZWFzZV9jb25uKGNvbm4pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKaW5kZXggMTlkNzExYy4uN2Y0MzY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCkBAIC0xODkwLDcgKzE4OTAsNyBAQAogCWZjX2V4Y2hfc2V0dXBfaGRyKGVwLCBmcCwgZXAtPmZfY3RsKTsKIAlzcC0+Y250Kys7CiAKLQlpZiAoZXAtPnhpZCA8PSBscG9ydC0+bHJvX3hpZCkKKwlpZiAoZXAtPnhpZCA8PSBscG9ydC0+bHJvX3hpZCAmJiBmaC0+Zmhfcl9jdGwgPT0gRkNfUkNUTF9ERF9VTlNPTF9DTUQpCiAJCWZjX2ZjcF9kZHBfc2V0dXAoZnJfZnNwKGZwKSwgZXAtPnhpZCk7CiAKIAlpZiAodW5saWtlbHkobHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggODgxZDVkZi4uNmZkZTJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtMjk4LDkgKzI5OCw2IEBACiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKIAotCWlmICghZnNwKQotCQlyZXR1cm47Ci0KIAlscG9ydCA9IGZzcC0+bHA7CiAJaWYgKChmc3AtPnJlcV9mbGFncyAmIEZDX1NSQl9SRUFEKSAmJgogCSAgICAobHBvcnQtPmxyb19lbmFibGVkKSAmJiAobHBvcnQtPnR0LmRkcF9zZXR1cCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKaW5kZXggMGIxNjUwMi4uN2VjOGNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKQEAgLTE4MDAsNyArMTgwMCw4IEBACiAJdTMyIGRpZDsKIAogCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7Ci0JcnNwLT5yZXNpZF9sZW4gPSBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47CisJaWYgKHJzcCkKKwkJcnNwLT5yZXNpZF9sZW4gPSBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47CiAKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCmluZGV4IDAyMzAwNTIuLjk3OTIzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCkBAIC02MjMsNyArNjIzLDcgQEAKIAogCQl0b3YgPSBudG9obChwbHAtPmZsX2NzcC5zcF9lX2RfdG92KTsKIAkJaWYgKG50b2hzKHBscC0+ZmxfY3NwLnNwX2ZlYXR1cmVzKSAmIEZDX1NQX0ZUX0VEVFIpCi0JCQl0b3YgLz0gMTAwMDsKKwkJCXRvdiAvPSAxMDAwMDAwOwogCQlpZiAodG92ID4gcmRhdGEtPmVfZF90b3YpCiAJCQlyZGF0YS0+ZV9kX3RvdiA9IHRvdjsKIAkJY3NwX3NlcSA9IG50b2hzKHBscC0+ZmxfY3NwLnNwX3RvdF9zZXEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCBjMjhhNzEyLi43MDNlYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtMTkxOSwxMCArMTkxOSwxMSBAQAogc3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBpc2NzaV9laF9jbWRfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKQogewogCWVudW0gYmxrX2VoX3RpbWVyX3JldHVybiByYyA9IEJMS19FSF9OT1RfSEFORExFRDsKLQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IE5VTEw7CisJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBOVUxMLCAqcnVubmluZ190YXNrOwogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CisJaW50IGk7CiAKIAljbHNfc2Vzc2lvbiA9IHN0YXJnZXRfdG9fc2Vzc2lvbihzY3NpX3RhcmdldChzYy0+ZGV2aWNlKSk7CiAJc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwpAQCAtMTk0Nyw4ICsxOTQ4LDE1IEBACiAJfQogCiAJdGFzayA9IChzdHJ1Y3QgaXNjc2lfdGFzayAqKXNjLT5TQ3AucHRyOwotCWlmICghdGFzaykKKwlpZiAoIXRhc2spIHsKKwkJLyoKKwkJICogUmFjZWQgd2l0aCBjb21wbGV0aW9uLiBKdXN0IHJlc2V0IHRpbWVyLCBhbmQgbGV0IGl0CisJCSAqIGNvbXBsZXRlIG5vcm1hbGx5CisJCSAqLworCQlyYyA9IEJMS19FSF9SRVNFVF9USU1FUjsKIAkJZ290byBkb25lOworCX0KKwogCS8qCiAJICogSWYgd2UgaGF2ZSBzZW50IChhdCBsZWFzdCBxdWV1ZWQgdG8gdGhlIG5ldHdvcmsgbGF5ZXIpIGEgcGR1IG9yCiAJICogcmVjdmQgb25lIGZvciB0aGUgdGFzayBzaW5jZSB0aGUgbGFzdCB0aW1lb3V0IGFzayBmb3IKQEAgLTE5NTYsMTAgKzE5NjQsMTAgQEAKIAkgKiB3ZSBjYW4gY2hlY2sgaWYgaXQgaXMgdGhlIHRhc2sgb3IgY29ubmVjdGlvbiB3aGVuIHdlIHNlbmQgdGhlCiAJICogbm9wIGFzIGEgcGluZy4KIAkgKi8KLQlpZiAodGltZV9hZnRlcl9lcSh0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCkpIHsKKwlpZiAodGltZV9hZnRlcih0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCkpIHsKIAkJSVNDU0lfREJHX0VIKHNlc3Npb24sICJDb21tYW5kIG1ha2luZyBwcm9ncmVzcy4gQXNraW5nICIKIAkJCSAgICAgInNjc2ktbWwgZm9yIG1vcmUgdGltZSB0byBjb21wbGV0ZS4gIgotCQkJICAgICAiTGFzdCBkYXRhIHJlY3YgYXQgJWx1LiBMYXN0IHRpbWVvdXQgd2FzIGF0ICIKKwkJCSAgICAgIkxhc3QgZGF0YSB4ZmVyIGF0ICVsdS4gTGFzdCB0aW1lb3V0IHdhcyBhdCAiCiAJCQkgICAgICIlbHVcbi4iLCB0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCk7CiAJCXRhc2stPmhhdmVfY2hlY2tlZF9jb25uID0gZmFsc2U7CiAJCXJjID0gQkxLX0VIX1JFU0VUX1RJTUVSOwpAQCAtMTk3Nyw2ICsxOTg1LDQzIEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgY29ubi0+c2Vzc2lvbi0+Y21kc19tYXg7IGkrKykgeworCQlydW5uaW5nX3Rhc2sgPSBjb25uLT5zZXNzaW9uLT5jbWRzW2ldOworCQlpZiAoIXJ1bm5pbmdfdGFzay0+c2MgfHwgcnVubmluZ190YXNrID09IHRhc2sgfHwKKwkJICAgICBydW5uaW5nX3Rhc2stPnN0YXRlICE9IElTQ1NJX1RBU0tfUlVOTklORykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE9ubHkgY2hlY2sgaWYgY21kcyBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIG1hZGUKKwkJICogcHJvZ3Jlc3MsIG9yIHRoaXMgY291bGQgbmV2ZXIgZmFpbAorCQkgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIocnVubmluZ190YXNrLT5zYy0+amlmZmllc19hdF9hbGxvYywKKwkJCSAgICAgICB0YXNrLT5zYy0+amlmZmllc19hdF9hbGxvYykpCisJCQljb250aW51ZTsKKworCQlpZiAodGltZV9hZnRlcihydW5uaW5nX3Rhc2stPmxhc3RfeGZlciwgdGFzay0+bGFzdF90aW1lb3V0KSkgeworCQkJLyoKKwkJCSAqIFRoaXMgdGFzayBoYXMgbm90IG1hZGUgcHJvZ3Jlc3MsIGJ1dCBhIHRhc2sKKwkJCSAqIHN0YXJ0ZWQgYmVmb3JlIHVzIGhhcyB0cmFuc2ZlcnJlZCBkYXRhIHNpbmNlCisJCQkgKiB3ZSBzdGFydGVkL2xhc3QtY2hlY2tlZC4gV2UgY291bGQgYmUgcXVldWVpbmcKKwkJCSAqIHRvbyBtYW55IHRhc2tzIG9yIHRoZSBMVSBpcyBiYWQuCisJCQkgKgorCQkJICogSWYgdGhlIGRldmljZSBpcyBiYWQgdGhlIGNtZHMgYWhlYWQgb2YgdXMgb24KKwkJCSAqIG90aGVyIGRldnMgd2lsbCBjb21wbGV0ZSwgYW5kIHRoaXMgbG9vcCB3aWxsCisJCQkgKiBldmVudHVhbGx5IGZhaWwgc3RhcnRpbmcgdGhlIHNjc2kgZWguCisJCQkgKi8KKwkJCUlTQ1NJX0RCR19FSChzZXNzaW9uLCAiQ29tbWFuZCBoYXMgbm90IG1hZGUgcHJvZ3Jlc3MgIgorCQkJCSAgICAgImJ1dCBjb21tYW5kcyBhaGVhZCBvZiBpdCBoYXZlLiAiCisJCQkJICAgICAiQXNraW5nIHNjc2ktbWwgZm9yIG1vcmUgdGltZSB0byAiCisJCQkJICAgICAiY29tcGxldGUuIE91ciBsYXN0IHhmZXIgdnMgcnVubmluZyB0YXNrICIKKwkJCQkgICAgICJsYXN0IHhmZXIgJWx1LyVsdS4gTGFzdCBjaGVjayAlbHUuXG4iLAorCQkJCSAgICAgdGFzay0+bGFzdF94ZmVyLCBydW5uaW5nX3Rhc2stPmxhc3RfeGZlciwKKwkJCQkgICAgIHRhc2stPmxhc3RfdGltZW91dCk7CisJCQlyYyA9IEJMS19FSF9SRVNFVF9USU1FUjsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwogCS8qIEFzc3VtZXMgbm9wIHRpbWVvdXQgaXMgc2hvcnRlciB0aGFuIHNjc2kgY21kIHRpbWVvdXQgKi8KIAlpZiAodGFzay0+aGF2ZV9jaGVja2VkX2Nvbm4pCiAJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYwppbmRleCBkYjY4NTZjLi40YWQ4N2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jCkBAIC05OTIsMTIgKzk5MiwxMCBAQAogCQlpZiAocjJ0ID09IE5VTEwpIHsKIAkJCWlmIChrZmlmb19vdXQoJnRjcF90YXNrLT5yMnRxdWV1ZSwKIAkJCSAgICAodm9pZCAqKSZ0Y3BfdGFzay0+cjJ0LCBzaXplb2Yodm9pZCAqKSkgIT0KLQkJCSAgICBzaXplb2Yodm9pZCAqKSkgewotCQkJCVdBUk5fT05DRSgxLCAidW5leHBlY3RlZCBmaWZvIHN0YXRlIik7CisJCQkgICAgc2l6ZW9mKHZvaWQgKikpCiAJCQkJcjJ0ID0gTlVMTDsKLQkJCX0KLQotCQkJcjJ0ID0gdGNwX3Rhc2stPnIydDsKKwkJCWVsc2UKKwkJCQlyMnQgPSB0Y3BfdGFzay0+cjJ0OwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMgYi9kcml2ZXJzL3Njc2kvbGlic3JwLmMKaW5kZXggYWIxOWIzYi4uMjI3NzUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNycC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBTQ1NJIFJEQU0gUHJvdG9jb2wgbGliIGZ1bmN0aW9ucworICogU0NTSSBSRE1BIFByb3RvY29sIGxpYiBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRlVKSVRBIFRvbW9ub3JpIDx0b21vZkBhY20ub3JnPgogICoKQEAgLTMyOCw3ICszMjgsNyBAQAogCWludCBvZmZzZXQsIGVyciA9IDA7CiAJdTggZm9ybWF0OwogCi0Jb2Zmc2V0ID0gY21kLT5hZGRfY2RiX2xlbiAqIDQ7CisJb2Zmc2V0ID0gY21kLT5hZGRfY2RiX2xlbiAmIH4zOwogCiAJZGlyID0gc3JwX2NtZF9kaXJlY3Rpb24oY21kKTsKIAlpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSkKQEAgLTM2Niw3ICszNjYsNyBAQAogewogCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqbWQ7CiAJc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKmlkOwotCWludCBsZW4gPSAwLCBvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICogNDsKKwlpbnQgbGVuID0gMCwgb2Zmc2V0ID0gY21kLT5hZGRfY2RiX2xlbiAmIH4zOwogCXU4IGZtdDsKIAogCWlmIChkaXIgPT0gRE1BX1RPX0RFVklDRSkKQEAgLTQ0MCw2ICs0NDAsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3JwX2NtZF9xdWV1ZSk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiU0NTSSBSREFNIFByb3RvY29sIGxpYiBmdW5jdGlvbnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0NTSSBSRE1BIFByb3RvY29sIGxpYiBmdW5jdGlvbnMiKTsKIE1PRFVMRV9BVVRIT1IoIkZVSklUQSBUb21vbm9yaSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCmluZGV4IDFjYzIzYTYuLjg0YjY5NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTMxNSw2ICszMTUsOSBAQAogI2RlZmluZSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJCTB4ODAwMDAgIC8qIE5lZWRzIHRvIGhhdmUgaXRzIHZwaSByZWdpc3RlcmVkICovCiAjZGVmaW5lIEZDX1JTQ05fREVGRVJSRUQJMHgxMDAwMDAgLyogQSBkZWZlcnJlZCBSU0NOIGJlaW5nIHByb2Nlc3NlZCAqLwogI2RlZmluZSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSSAweDIwMDAwMCAvKiBOZWVkIHRvIElOSVRfVlBJIGJlZm9yZSBGRElTQyAqLworI2RlZmluZSBGQ19WUE9SVF9DVkxfUkNWRAkweDQwMDAwMCAvKiBWTGluayBmYWlsZWQgZHVlIHRvIENWTAkgKi8KKyNkZWZpbmUgRkNfVkZJX1JFR0lTVEVSRUQJMHg4MDAwMDAgLyogVkZJIGlzIHJlZ2lzdGVyZWQgKi8KKyNkZWZpbmUgRkNfRkRJU0NfQ09NUExFVEVECTB4MTAwMDAwMC8qIEZESVNDIGNvbXBsZXRlZCAqLwogCiAJdWludDMyX3QgY3RfZmxhZ3M7CiAjZGVmaW5lIEZDX0NUX1JGRl9JRAkJMHgxCSAvKiBSRkZfSUQgYWNjZXB0ZWQgYnkgc3dpdGNoICovCkBAIC00NDgsNiArNDUxLDggQEAKIAl1aW50MzJfdCBjdHh0X2lkOwogCXVpbnQzMl90IFNJRDsKIAl1aW50MzJfdCBveGlkOworCXVpbnQzMl90IGZsYWdzOworI2RlZmluZSBVTlNPTF9WQUxJRAkweDAwMDAwMDAxCiB9OwogCiBzdHJ1Y3QgbHBmY19oYmEgewpAQCAtNDk5LDYgKzUwNCwxMCBAQAogCQkoc3RydWN0IGxwZmNfaGJhICopOwogCXZvaWQgKCpscGZjX3N0b3BfcG9ydCkKIAkJKHN0cnVjdCBscGZjX2hiYSAqKTsKKwlpbnQgKCpscGZjX2hiYV9pbml0X2xpbmspCisJCShzdHJ1Y3QgbHBmY19oYmEgKik7CisJaW50ICgqbHBmY19oYmFfZG93bl9saW5rKQorCQkoc3RydWN0IGxwZmNfaGJhICopOwogCiAKIAkvKiBTTEk0IHNwZWNpZmljIEhCQSBkYXRhIHN0cnVjdHVyZSAqLwpAQCAtNjEzLDYgKzYyMiw3IEBACiAJdWludDMyX3QgY2ZnX2VuYWJsZV9iZzsKIAl1aW50MzJfdCBjZmdfbG9nX3ZlcmJvc2U7CiAJdWludDMyX3QgY2ZnX2Flcl9zdXBwb3J0OworCXVpbnQzMl90IGNmZ19zdXBwcmVzc19saW5rX3VwOwogCiAJbHBmY192cGRfdCB2cGQ7CQkvKiB2aXRhbCBwcm9kdWN0IGRhdGEgKi8KIApAQCAtNzkwLDcgKzgwMCw3IEBACiAJdWludDE2X3Qgdmxhbl9pZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZjZl9jb25uX3JlY19saXN0OwogCi0Jc3RydWN0IG11dGV4IGN0X2V2ZW50X211dGV4OyAvKiBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gY3RfZXZfd2FpdGVycyAqLworCXNwaW5sb2NrX3QgY3RfZXZfbG9jazsgLyogc3luY2hyb25pemUgYWNjZXNzIHRvIGN0X2V2X3dhaXRlcnMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGN0X2V2X3dhaXRlcnM7CiAJc3RydWN0IHVuc29sX3Jjdl9jdF9jdHggY3RfY3R4WzY0XTsKIAl1aW50MzJfdCBjdHhfaWR4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwppbmRleCA5MTU0MmY3Li5jOTkyZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwpAQCAtNDgyLDYgKzQ4Miw0MSBAQAogfQogCiAvKioKKyAqIGxwZmNfbGlua19zdGF0ZV9zdG9yZSAtIFRyYW5zaXRpb24gdGhlIGxpbmtfc3RhdGUgb24gYW4gSEJBIHBvcnQKKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb25lIG9yIG1vcmUgbHBmY19wb2xsaW5nX2ZsYWdzIHZhbHVlcy4KKyAqIEBjb3VudDogbm90IHVzZWQuCisgKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwgaWYgdGhlIGJ1ZmZlciBpcyBub3QgInVwIiBvciAiZG93biIKKyAqIHJldHVybiBmcm9tIGxpbmsgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGlmIG5vbi16ZXJvCisgKiBsZW5ndGggb2YgdGhlIGJ1ZiBvbiBzdWNjZXNzCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19saW5rX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOworCisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisKKwlpZiAoKHN0cm5jbXAoYnVmLCAidXAiLCBzaXplb2YoInVwIikgLSAxKSA9PSAwKSAmJgorCQkJKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19MSU5LX0RPV04pKQorCQlzdGF0dXMgPSBwaGJhLT5scGZjX2hiYV9pbml0X2xpbmsocGhiYSk7CisJZWxzZSBpZiAoKHN0cm5jbXAoYnVmLCAiZG93biIsIHNpemVvZigiZG93biIpIC0gMSkgPT0gMCkgJiYKKwkJCShwaGJhLT5saW5rX3N0YXRlID49IExQRkNfTElOS19VUCkpCisJCXN0YXR1cyA9IHBoYmEtPmxwZmNfaGJhX2Rvd25fbGluayhwaGJhKTsKKworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCWVsc2UKKwkJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiBscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3cgLSBSZXR1cm4gc3VtIG9mIG1hcHBlZCBhbmQgdW5tYXBwZWQgdnBvcnRzCiAgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KICAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KQEAgLTEyMTksNyArMTI1NCw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTtcCi0JaW50IHZhbCA9IDA7XAorCXVpbnQgdmFsID0gMDtcCiAJdmFsID0gcGhiYS0+Y2ZnXyMjYXR0cjtcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsXAogCQkJcGhiYS0+Y2ZnXyMjYXR0cik7XApAQCAtMTI0Nyw3ICsxMjgyLDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhO1wKLQlpbnQgdmFsID0gMDtcCisJdWludCB2YWwgPSAwO1wKIAl2YWwgPSBwaGJhLT5jZmdfIyNhdHRyO1wKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlI3hcbiIsXAogCQkJcGhiYS0+Y2ZnXyMjYXR0cik7XApAQCAtMTI3NCw3ICsxMzA5LDcgQEAKICAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9pbml0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKLWxwZmNfIyNhdHRyIyNfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCB2YWwpIFwKK2xwZmNfIyNhdHRyIyNfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAogCQlwaGJhLT5jZmdfIyNhdHRyID0gdmFsO1wKQEAgLTEzMDksNyArMTM0NCw3IEBACiAgKiovCiAjZGVmaW5lIGxwZmNfcGFyYW1fc2V0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKLWxwZmNfIyNhdHRyIyNfc2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50IHZhbCkgXAogeyBcCiAJaWYgKHZhbCA+PSBtaW52YWwgJiYgdmFsIDw9IG1heHZhbCkge1wKIAkJcGhiYS0+Y2ZnXyMjYXR0ciA9IHZhbDtcCkBAIC0xMzUwLDcgKzEzODUsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7XAotCWludCB2YWw9MDtcCisJdWludCB2YWwgPSAwO1wKIAlpZiAoIWlzZGlnaXQoYnVmWzBdKSlcCiAJCXJldHVybiAtRUlOVkFMO1wKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnZhbCkgIT0gMSlcCkBAIC0xMzgyLDcgKzE0MTcsNyBAQAogeyBcCiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCi0JaW50IHZhbCA9IDA7XAorCXVpbnQgdmFsID0gMDtcCiAJdmFsID0gdnBvcnQtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2cG9ydC0+Y2ZnXyMjYXR0cik7XAogfQpAQCAtMTQwOSw3ICsxNDQ0LDcgQEAKIHsgXAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAotCWludCB2YWwgPSAwO1wKKwl1aW50IHZhbCA9IDA7XAogCXZhbCA9IHZwb3J0LT5jZmdfIyNhdHRyO1wKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlI3hcbiIsIHZwb3J0LT5jZmdfIyNhdHRyKTtcCiB9CkBAIC0xNDM0LDcgKzE0NjksNyBAQAogICoqLwogI2RlZmluZSBscGZjX3Zwb3J0X3BhcmFtX2luaXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludCB2YWwpIFwKIHsgXAogCWlmICh2YWwgPj0gbWludmFsICYmIHZhbCA8PSBtYXh2YWwpIHtcCiAJCXZwb3J0LT5jZmdfIyNhdHRyID0gdmFsO1wKQEAgLTE0NjYsNyArMTUwMSw3IEBACiAgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1fc2V0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKLWxwZmNfIyNhdHRyIyNfc2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50IHZhbCkgXAogeyBcCiAJaWYgKHZhbCA+PSBtaW52YWwgJiYgdmFsIDw9IG1heHZhbCkge1wKIAkJdnBvcnQtPmNmZ18jI2F0dHIgPSB2YWw7XApAQCAtMTUwMiw3ICsxNTM3LDcgQEAKIHsgXAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAotCWludCB2YWw9MDtcCisJdWludCB2YWwgPSAwO1wKIAlpZiAoIWlzZGlnaXQoYnVmWzBdKSlcCiAJCXJldHVybiAtRUlOVkFMO1wKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnZhbCkgIT0gMSlcCkBAIC0xNTE1LDIyICsxNTUwLDIyIEBACiAKIAogI2RlZmluZSBMUEZDX0FUVFIobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCkKIAogI2RlZmluZSBMUEZDX0FUVFJfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1fc2hvdyhuYW1lKVwKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKIAogI2RlZmluZSBMUEZDX0FUVFJfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCkBAIC0xNTQwLDE2ICsxNTc1LDE2IEBACiAJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX0FUVFJfSEVYX1IobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY19wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfQVRUUl9IRVhfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY19wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXApAQCAtMTU1OSwyMiArMTU5NCwyMiBAQAogCQkgICBscGZjXyMjbmFtZSMjX3Nob3csIGxwZmNfIyNuYW1lIyNfc3RvcmUpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSX1IobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX3Nob3cobmFtZSlcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSX1JXKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXApAQCAtMTU4NCwxNiArMTYxOSwxNiBAQAogCQkgICBscGZjXyMjbmFtZSMjX3Nob3csIGxwZmNfIyNuYW1lIyNfc3RvcmUpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSX0hFWF9SKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9oZXhfc2hvdyhuYW1lKVwKIGxwZmNfdnBvcnRfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfSEVYX1JXKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9oZXhfc2hvdyhuYW1lKVwKIGxwZmNfdnBvcnRfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKQEAgLTE2MTQsNyArMTY0OSw4IEBACiBzdGF0aWMgREVWSUNFX0FUVFIocG9ydG51bSwgU19JUlVHTywgbHBmY192cG9ydG51bV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihmd3JldiwgU19JUlVHTywgbHBmY19md3Jldl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihoZHcsIFNfSVJVR08sIGxwZmNfaGR3X3Nob3csIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08sIGxwZmNfbGlua19zdGF0ZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsaW5rX3N0YXRlLCBTX0lSVUdPIHwgU19JV1VTUiwgbHBmY19saW5rX3N0YXRlX3Nob3csCisJCWxwZmNfbGlua19zdGF0ZV9zdG9yZSk7CiBzdGF0aWMgREVWSUNFX0FUVFIob3B0aW9uX3JvbV92ZXJzaW9uLCBTX0lSVUdPLAogCQkgICBscGZjX29wdGlvbl9yb21fdmVyc2lvbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihudW1fZGlzY292ZXJlZF9wb3J0cywgU19JUlVHTywKQEAgLTE4OTcsNiArMTkzMywxNSBAQAogCQkJIGxwZmNfZW5hYmxlX25waXZfc2hvdywgTlVMTCk7CiAKIC8qCisjIGxwZmNfc3VwcHJlc3NfbGlua191cDogIEJyaW5nIGxpbmsgdXAgYXQgaW5pdGlhbGl6YXRpb24KKyMgICAgICAgICAgICAweDAgID0gYnJpbmcgbGluayB1cCAoaXNzdWUgTUJYX0lOSVRfTElOSykKKyMgICAgICAgICAgICAweDEgID0gZG8gTk9UIGJyaW5nIGxpbmsgdXAgYXQgaW5pdGlhbGl6YXRpb24oTUJYX0lOSVRfTElOSykKKyMgICAgICAgICAgICAweDIgID0gbmV2ZXIgYnJpbmcgdXAgbGluaworIyBEZWZhdWx0IHZhbHVlIGlzIDAuCisqLworTFBGQ19BVFRSX1Ioc3VwcHJlc3NfbGlua191cCwgMCwgMCwgMiwgIlN1cHByZXNzIExpbmsgVXAgYXQgaW5pdGlhbGl6YXRpb24iKTsKKworLyoKICMgbHBmY19ub2Rldl90bW86IElmIHNldCwgaXQgd2lsbCBob2xkIGFsbCBJL08gZXJyb3JzIG9uIGRldmljZXMgdGhhdCBkaXNhcHBlYXIKICMgdW50aWwgdGhlIHRpbWVyIGV4cGlyZXMuIFZhbHVlIHJhbmdlIGlzIFswLDI1NV0uIERlZmF1bHQgdmFsdWUgaXMgMzAuCiAqLwpAQCAtMzExNCwxMiArMzE1OSwxMiBAQAogLyoKICMgbHBmY191c2VfbXNpOiBVc2UgTVNJIChNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMpIGluIHN5c3RlbXMgdGhhdAogIwkJc3VwcG9ydCB0aGlzIGZlYXR1cmUKLSMgICAgICAgMCAgPSBNU0kgZGlzYWJsZWQgKGRlZmF1bHQpCisjICAgICAgIDAgID0gTVNJIGRpc2FibGVkCiAjICAgICAgIDEgID0gTVNJIGVuYWJsZWQKLSMgICAgICAgMiAgPSBNU0ktWCBlbmFibGVkCi0jIFZhbHVlIHJhbmdlIGlzIFswLDJdLiBEZWZhdWx0IHZhbHVlIGlzIDAuCisjICAgICAgIDIgID0gTVNJLVggZW5hYmxlZCAoZGVmYXVsdCkKKyMgVmFsdWUgcmFuZ2UgaXMgWzAsMl0uIERlZmF1bHQgdmFsdWUgaXMgMi4KICovCi1MUEZDX0FUVFJfUih1c2VfbXNpLCAwLCAwLCAyLCAiVXNlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoMSkgb3IgIgorTFBGQ19BVFRSX1IodXNlX21zaSwgMiwgMCwgMiwgIlVzZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKDEpIG9yICIKIAkgICAgIk1TSS1YICgyKSwgaWYgcG9zc2libGUiKTsKIAogLyoKQEAgLTMyNzgsNiArMzMyMyw3IEBACiAJJmRldl9hdHRyX2xwZmNfcHJvdF9zZ19zZWdfY250LAogCSZkZXZfYXR0cl9scGZjX2Flcl9zdXBwb3J0LAogCSZkZXZfYXR0cl9scGZjX2Flcl9zdGF0ZV9jbGVhbnVwLAorCSZkZXZfYXR0cl9scGZjX3N1cHByZXNzX2xpbmtfdXAsCiAJTlVMTCwKIH07CiAKQEAgLTQ0NTYsNyArNDUwMiw3IEBACiAJbHBmY19oYmFfcXVldWVfZGVwdGhfaW5pdChwaGJhLCBscGZjX2hiYV9xdWV1ZV9kZXB0aCk7CiAJbHBmY19oYmFfbG9nX3ZlcmJvc2VfaW5pdChwaGJhLCBscGZjX2xvZ192ZXJib3NlKTsKIAlscGZjX2Flcl9zdXBwb3J0X2luaXQocGhiYSwgbHBmY19hZXJfc3VwcG9ydCk7Ci0KKwlscGZjX3N1cHByZXNzX2xpbmtfdXBfaW5pdChwaGJhLCBscGZjX3N1cHByZXNzX2xpbmtfdXApOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKaW5kZXggYTVkOTA0OC4uZjNmMWJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAibHBmY19zbGkuaCIKICNpbmNsdWRlICJscGZjX3NsaTQuaCIKICNpbmNsdWRlICJscGZjX25sLmgiCisjaW5jbHVkZSAibHBmY19ic2cuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC00MSwxNCArNDMsMTgzIEBACiAjaW5jbHVkZSAibHBmY192cG9ydC5oIgogI2luY2x1ZGUgImxwZmNfdmVyc2lvbi5oIgogCitzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXdhaXRfcXVldWVfaGVhZF90IHdxOworCisJLyogRXZlbnQgdHlwZSBhbmQgd2FpdGVyIGlkZW50aWZpZXJzICovCisJdWludDMyX3QgdHlwZV9tYXNrOworCXVpbnQzMl90IHJlcV9pZDsKKwl1aW50MzJfdCByZWdfaWQ7CisKKwkvKiBuZXh0IHR3byBmbGFncyBhcmUgaGVyZSBmb3IgdGhlIGF1dG8tZGVsZXRlIGxvZ2ljICovCisJdW5zaWduZWQgbG9uZyB3YWl0X3RpbWVfc3RhbXA7CisJaW50IHdhaXRpbmc7CisKKwkvKiBzZWVuIGFuZCBub3Qgc2VlbiBldmVudHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19nZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBldmVudHNfdG9fc2VlOworCisJLyogam9iIHdhaXRpbmcgZm9yIHRoaXMgZXZlbnQgdG8gZmluaXNoICovCisJc3RydWN0IGZjX2JzZ19qb2IgKnNldF9qb2I7Cit9OworCitzdHJ1Y3QgbHBmY19ic2dfaW9jYiB7CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxOworCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicTsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKworCS8qIGpvYiB3YWl0aW5nIGZvciB0aGlzIGlvY2IgdG8gZmluaXNoICovCisJc3RydWN0IGZjX2JzZ19qb2IgKnNldF9qb2I7Cit9OworCitzdHJ1Y3QgbHBmY19ic2dfbWJveCB7CisJTFBGQ19NQk9YUV90ICpwbWJveHE7CisJTUFJTEJPWF90ICptYjsKKworCS8qIGpvYiB3YWl0aW5nIGZvciB0aGlzIG1ib3ggY29tbWFuZCB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqc2V0X2pvYjsKK307CisKKyNkZWZpbmUgVFlQRV9FVlQgCTEKKyNkZWZpbmUgVFlQRV9JT0NCCTIKKyNkZWZpbmUgVFlQRV9NQk9YCTMKK3N0cnVjdCBic2dfam9iX2RhdGEgeworCXVpbnQzMl90IHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKKwkJc3RydWN0IGxwZmNfYnNnX2lvY2IgaW9jYjsKKwkJc3RydWN0IGxwZmNfYnNnX21ib3ggbWJveDsKKwl9IGNvbnRleHRfdW47Cit9OworCitzdHJ1Y3QgZXZlbnRfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXVpbnQzMl90IHR5cGU7CisJdWludDMyX3QgaW1tZWRfZGF0OworCXZvaWQgKmRhdGE7CisJdWludDMyX3QgbGVuOworfTsKKworI2RlZmluZSBCVUZfU1pfNEsgNDA5NgorI2RlZmluZSBTTElfQ1RfRUxYX0xPT1BCQUNLIDB4MTAKKworZW51bSBFTFhfTE9PUEJBQ0tfQ01EIHsKKwlFTFhfTE9PUEJBQ0tfWFJJX1NFVFVQLAorCUVMWF9MT09QQkFDS19EQVRBLAorfTsKKworI2RlZmluZSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaIFwKKwkoc2l6ZV90KSgmKChzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqKU5VTEwpLT51bikKKworc3RydWN0IGxwZmNfZG1hYnVmZXh0IHsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgZG1hOworCXVpbnQzMl90IHNpemU7CisJdWludDMyX3QgZmxhZzsKK307CisKIC8qKgotICogbHBmY19ic2dfcnBvcnRfY3QgLSBzZW5kIGEgQ1QgY29tbWFuZCBmcm9tIGEgYnNnIHJlcXVlc3QKLSAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCi0gKi8KLXN0YXRpYyBpbnQKLWxwZmNfYnNnX3Jwb3J0X2N0KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCisgKiBscGZjX2JzZ19zZW5kX21nbXRfY21kX2NtcCAtIGxwZmNfYnNnX3NlbmRfbWdtdF9jbWQncyBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicTogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2JzIGlzc3VlZCB1c2luZworICogbHBmY19ic2dfc2VuZF9tZ210X2NtZCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlCisgKiByaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2l0aG91dCBhbnkgbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB3b3JrZXIgdGhyZWFkIGNvbnRleHQgYW5kIGludGVycnVwdAorICogY29udGV4dC4gVGhpcyBmdW5jdGlvbiBhbHNvIGNhbiBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UgaW9jYiB0byB0aGUKKyAqIHJlc3BvbnNlIGlvY2IgbWVtb3J5IG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyIG9mCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQgYW5kIHRoZW4gd2FrZXMgdXAgdGhlIHRocmVhZCB3aGljaAorICogc2xlZXBzIGZvciB0aGUgaW9jYiBjb21wbGV0aW9uLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfYnNnX3NlbmRfbWdtdF9jbWRfY21wKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicSkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGpvYi0+c2hvc3Q7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iOworCUlPQ0JfdCAqcnNwOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYm1wOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBscGZjX2JzZ19pb2NiICppb2NiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJZGRfZGF0YSA9IGNtZGlvY2JxLT5jb250ZXh0MTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJaW9jYiA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2I7CisJam9iID0gaW9jYi0+c2V0X2pvYjsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOyAvKiBzbyB0aW1lb3V0IGhhbmRsZXIgZG9lcyBub3QgcmVwbHkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCWNtZGlvY2JxLT5pb2NiX2ZsYWcgfD0gTFBGQ19JT19XQUtFOworCWlmIChjbWRpb2NicS0+Y29udGV4dDIgJiYgcnNwaW9jYnEpCisJCW1lbWNweSgmKChzdHJ1Y3QgbHBmY19pb2NicSAqKWNtZGlvY2JxLT5jb250ZXh0MiktPmlvY2IsCisJCSAgICAgICAmcnNwaW9jYnEtPmlvY2IsIHNpemVvZihJT0NCX3QpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCisJYm1wID0gaW9jYi0+Ym1wOworCXJzcGlvY2JxID0gaW9jYi0+cnNwaW9jYnE7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCW5kbHAgPSBpb2NiLT5uZGxwOworCisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAocnNwLT51bHBTdGF0dXMpIHsKKwkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QpIHsKKwkJCXN3aXRjaCAocnNwLT51bi51bHBXb3JkWzRdICYgMHhmZikgeworCQkJY2FzZSBJT0VSUl9TRVFVRU5DRV9USU1FT1VUOgorCQkJCXJjID0gLUVUSU1FRE9VVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSU9FUlJfSU5WQUxJRF9SUEk6CisJCQkJcmMgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyYyA9IC1FQUNDRVM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZQorCQkJcmMgPSAtRUFDQ0VTOworCX0gZWxzZQorCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJcnNwLT51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZTsKKworCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJtcC0+dmlydCwgYm1wLT5waHlzKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlscGZjX25scF9wdXQobmRscCk7CisJa2ZyZWUoYm1wKTsKKwlrZnJlZShkZF9kYXRhKTsKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPmpvYl9kb25lKGpvYik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCXJldHVybjsKK30KKworLyoqCisgKiBscGZjX2JzZ19zZW5kX21nbXRfY21kIC0gc2VuZCBhIENUIGNvbW1hbmQgZnJvbSBhIGJzZyByZXF1ZXN0CisgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQorICoqLworc3RhdGljIGludAorbHBmY19ic2dfc2VuZF9tZ210X2NtZChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQorewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gam9iLT5ycG9ydC0+ZGRfZGF0YTsKQEAgLTY1LDU3ICsyMzYsNjAgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZWwgPSBOVUxMOwogCWludCBudW1iZGU7CiAJZG1hX2FkZHJfdCBidXNhZGRyOworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJdWludDMyX3QgY3JlZ192YWw7CiAJaW50IHJjID0gMDsKIAogCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyB0cmFuc2ZlcnJlZCAqLwogCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAKKwkvKiBhbGxvY2F0ZSBvdXIgYnNnIHRyYWNraW5nIHN0cnVjdHVyZSAqLworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZF9kYXRhKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzMgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBub19kZF9kYXRhOworCX0KKwogCWlmICghbHBmY19ubHBfZ2V0KG5kbHApKSB7Ci0JCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FTk9ERVY7Ci0JCXJldHVybiAwOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gbm9fbmRscDsKKwl9CisKKwlibXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJtcCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9uZGxwOwogCX0KIAogCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9FTFNfU05EX01BU0spIHsKIAkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfbmRscF9leGl0OworCQlnb3RvIGZyZWVfYm1wOwogCX0KIAotCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CiAJaWYgKCFjbWRpb2NicSkgewogCQlyYyA9IC1FTk9NRU07Ci0JCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJZ290byBmcmVlX25kbHBfZXhpdDsKKwkJZ290byBmcmVlX2JtcDsKIAl9Ci0JY21kID0gJmNtZGlvY2JxLT5pb2NiOwogCisJY21kID0gJmNtZGlvY2JxLT5pb2NiOwogCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOwogCWlmICghcnNwaW9jYnEpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWVfY21kaW9jYnE7CiAJfQotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKLQotCWJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOwotCWlmICghYm1wKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJZ290byBmcmVlX3JzcGlvY2JxOwotCX0KLQotCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJYm1wLT52aXJ0ID0gbHBmY19tYnVmX2FsbG9jKHBoYmEsIDAsICZibXAtPnBoeXMpOwogCWlmICghYm1wLT52aXJ0KSB7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBmcmVlX2JtcDsKKwkJZ290byBmcmVlX3JzcGlvY2JxOwogCX0KLQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAlJTklUX0xJU1RfSEVBRCgmYm1wLT5saXN0KTsKIAlicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSBibXAtPnZpcnQ7Ci0KIAlyZXF1ZXN0X25zZWcgPSBwY2lfbWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKIAkJCQkgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CiAJZm9yX2VhY2hfc2coam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVxdWVzdF9uc2VnLCBudW1iZGUpIHsKQEAgLTE1Nyw3OCArMzMxLDE1MiBAQAogCWNtZC0+dWxwQ29udGV4dCA9IG5kbHAtPm5scF9ycGk7CiAJY21kLT51bHBPd25lciA9IE9XTl9DSElQOwogCWNtZGlvY2JxLT52cG9ydCA9IHBoYmEtPnBwb3J0OwotCWNtZGlvY2JxLT5jb250ZXh0MSA9IE5VTEw7Ci0JY21kaW9jYnEtPmNvbnRleHQyID0gTlVMTDsKKwljbWRpb2NicS0+Y29udGV4dDMgPSBibXA7CiAJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKLQogCXRpbWVvdXQgPSBwaGJhLT5mY19yYXRvdiAqIDI7Ci0Jam9iLT5kZF9kYXRhID0gY21kaW9jYnE7CisJY21kLT51bHBUaW1lb3V0ID0gdGltZW91dDsKIAotCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCByc3Bpb2NicSwKLQkJCQkJdGltZW91dCArIExQRkNfRFJWUl9USU1FT1VUKTsKKwljbWRpb2NicS0+aW9jYl9jbXBsID0gbHBmY19ic2dfc2VuZF9tZ210X2NtZF9jbXA7CisJY21kaW9jYnEtPmNvbnRleHQxID0gZGRfZGF0YTsKKwljbWRpb2NicS0+Y29udGV4dDIgPSByc3Bpb2NicTsKKwlkZF9kYXRhLT50eXBlID0gVFlQRV9JT0NCOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5jbWRpb2NicSA9IGNtZGlvY2JxOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5yc3Bpb2NicSA9IHJzcGlvY2JxOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5zZXRfam9iID0gam9iOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5ibXAgPSBibXA7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLm5kbHAgPSBuZGxwOwogCi0JaWYgKHJjICE9IElPQ0JfVElNRURPVVQpIHsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKLQkJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCi0JCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpIHsKKwkJY3JlZ192YWwgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOworCQljcmVnX3ZhbCB8PSAoSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQl3cml0ZWwoY3JlZ192YWwsIHBoYmEtPkhDcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiAJfQogCi0JaWYgKHJjID09IElPQ0JfVElNRURPVVQpIHsKLQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7Ci0JCXJjID0gLUVBQ0NFUzsKLQkJZ290byBmcmVlX25kbHBfZXhpdDsKLQl9CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCAwKTsKIAotCWlmIChyYyAhPSBJT0NCX1NVQ0NFU1MpIHsKLQkJcmMgPSAtRUFDQ0VTOwotCQlnb3RvIGZyZWVfb3V0ZG1wOwotCX0KKwlpZiAocmMgPT0gSU9DQl9TVUNDRVNTKQorCQlyZXR1cm4gMDsgLyogZG9uZSBmb3Igbm93ICovCiAKLQlpZiAocnNwLT51bHBTdGF0dXMpIHsKLQkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QpIHsKLQkJCXN3aXRjaCAocnNwLT51bi51bHBXb3JkWzRdICYgMHhmZikgewotCQkJY2FzZSBJT0VSUl9TRVFVRU5DRV9USU1FT1VUOgotCQkJCXJjID0gLUVUSU1FRE9VVDsKLQkJCQlicmVhazsKLQkJCWNhc2UgSU9FUlJfSU5WQUxJRF9SUEk6Ci0JCQkJcmMgPSAtRUZBVUxUOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlyYyA9IC1FQUNDRVM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlnb3RvIGZyZWVfb3V0ZG1wOwotCQl9Ci0JfSBlbHNlCi0JCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9Ci0JCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOworCS8qIGlvY2IgZmFpbGVkIHNvIGNsZWFudXAgKi8KKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKIAotZnJlZV9vdXRkbXA6Ci0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAlscGZjX21idWZfZnJlZShwaGJhLCBibXAtPnZpcnQsIGJtcC0+cGh5cyk7Ci1mcmVlX2JtcDoKLQlrZnJlZShibXApOworCiBmcmVlX3JzcGlvY2JxOgogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOwogZnJlZV9jbWRpb2NicToKIAlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKLQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci1mcmVlX25kbHBfZXhpdDoKK2ZyZWVfYm1wOgorCWtmcmVlKGJtcCk7CitmcmVlX25kbHA6CiAJbHBmY19ubHBfcHV0KG5kbHApOwotCitub19uZGxwOgorCWtmcmVlKGRkX2RhdGEpOworbm9fZGRfZGF0YToKIAkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX3Jwb3J0X2Vsc19jbXAgLSBscGZjX2JzZ19ycG9ydF9lbHMncyBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicTogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2JzIGlzc3VlZCB1c2luZworICogbHBmY19ic2dfcnBvcnRfZWxzX2NtcCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlCisgKiByaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2l0aG91dCBhbnkgbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB3b3JrZXIgdGhyZWFkIGNvbnRleHQgYW5kIGludGVycnVwdAorICogY29udGV4dC4gVGhpcyBmdW5jdGlvbiBhbHNvIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aHJlYWQgd2hpY2gKKyAqIGNsZWFucyB1cCB0aGUgU0xJIGxheWVyIG9iamVjdHMuCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlIGlvY2IgdG8gdGhlCisgKiByZXNwb25zZSBpb2NiIG1lbW9yeSBvYmplY3QgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBvZgorICogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0IGFuZCB0aGVuIHdha2VzIHVwIHRoZSB0aHJlYWQgd2hpY2gKKyAqIHNsZWVwcyBmb3IgdGhlIGlvY2IgY29tcGxldGlvbi4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX2JzZ19ycG9ydF9lbHNfY21wKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicSkKK3sKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXN0cnVjdCBmY19ic2dfam9iICpqb2I7CisJSU9DQl90ICpyc3A7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IGxwZmNfZG1hYnVmICpwYnVmbGlzdCA9IE5VTEw7CisJc3RydWN0IGZjX2JzZ19jdGVsc19yZXBseSAqZWxzX3JlcGx5OworCXVpbnQ4X3QgKnJqdF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJZGRfZGF0YSA9IGNtZGlvY2JxLT5jb250ZXh0MTsKKwkvKiBub3JtYWwgY29tcGxldGlvbiBhbmQgdGltZW91dCBjcm9zc2VkIHBhdGhzLCBhbHJlYWR5IGRvbmUgKi8KKwlpZiAoIWRkX2RhdGEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX1dBS0U7CisJaWYgKGNtZGlvY2JxLT5jb250ZXh0MiAmJiByc3Bpb2NicSkKKwkJbWVtY3B5KCYoKHN0cnVjdCBscGZjX2lvY2JxICopY21kaW9jYnEtPmNvbnRleHQyKS0+aW9jYiwKKwkJICAgICAgICZyc3Bpb2NicS0+aW9jYiwgc2l6ZW9mKElPQ0JfdCkpOworCisJam9iID0gZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2I7CisJY21kaW9jYnEgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuY21kaW9jYnE7CisJcnNwaW9jYnEgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IucnNwaW9jYnE7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCW5kbHAgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscDsKKworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCisJaWYgKGpvYi0+cmVwbHktPnJlc3VsdCA9PSAtRUFHQUlOKQorCQlyYyA9IC1FQUdBSU47CisJZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX1NVQ0NFU1MpCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlyc3AtPnVuLmVsc3JlcTY0LmJkbC5iZGVTaXplOworCWVsc2UgaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MU19SSlQpIHsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfYnNnX2N0ZWxzX3JlcGx5KTsKKwkJLyogTFNfUkpUIGRhdGEgcmV0dXJuZWQgaW4gd29yZCA0ICovCisJCXJqdF9kYXRhID0gKHVpbnQ4X3QgKikmcnNwLT51bi51bHBXb3JkWzRdOworCQllbHNfcmVwbHkgPSAmam9iLT5yZXBseS0+cmVwbHlfZGF0YS5jdGVsc19yZXBseTsKKwkJZWxzX3JlcGx5LT5zdGF0dXMgPSBGQ19DVEVMU19TVEFUVVNfUkVKRUNUOworCQllbHNfcmVwbHktPnJqdF9kYXRhLmFjdGlvbiA9IHJqdF9kYXRhWzNdOworCQllbHNfcmVwbHktPnJqdF9kYXRhLnJlYXNvbl9jb2RlID0gcmp0X2RhdGFbMl07CisJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2V4cGxhbmF0aW9uID0gcmp0X2RhdGFbMV07CisJCWVsc19yZXBseS0+cmp0X2RhdGEudmVuZG9yX3VuaXF1ZSA9IHJqdF9kYXRhWzBdOworCX0gZWxzZQorCQlyYyA9IC1FSU87CisKKwlwYnVmbGlzdCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgY21kaW9jYnEtPmNvbnRleHQzOworCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIHBidWZsaXN0LT52aXJ0LCBwYnVmbGlzdC0+cGh5cyk7CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CisJbHBmY19ubHBfcHV0KG5kbHApOworCWtmcmVlKGRkX2RhdGEpOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKIAkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCiAJam9iLT5qb2JfZG9uZShqb2IpOwotCi0JcmV0dXJuIDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCXJldHVybjsKIH0KIAogLyoqCiAgKiBscGZjX2JzZ19ycG9ydF9lbHMgLSBzZW5kIGFuIEVMUyBjb21tYW5kIGZyb20gYSBic2cgcmVxdWVzdAogICogQGpvYjogZmNfYnNnX2pvYiB0byBoYW5kbGUKLSAqLworICoqLwogc3RhdGljIGludAogbHBmY19ic2dfcnBvcnRfZWxzKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CkBAIC0yMzYsNyArNDg0LDYgQEAKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlzdHJ1Y3QgbHBmY19ycG9ydF9kYXRhICpyZGF0YSA9IGpvYi0+cnBvcnQtPmRkX2RhdGE7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSByZGF0YS0+cG5vZGU7Ci0KIAl1aW50MzJfdCBlbHNjbWQ7CiAJdWludDMyX3QgY21kc2l6ZTsKIAl1aW50MzJfdCByc3BzaXplOwpAQCAtMjQ4LDIwICs0OTUsMzAgQEAKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKnByc3A7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpwYnVmbGlzdCA9IE5VTEw7CiAJc3RydWN0IHVscF9iZGU2NCAqYnBsOwotCWludCBpb2NiX3N0YXR1czsKIAlpbnQgcmVxdWVzdF9uc2VnOwogCWludCByZXBseV9uc2VnOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CiAJaW50IG51bWJkZTsKIAlkbWFfYWRkcl90IGJ1c2FkZHI7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1aW50MzJfdCBjcmVnX3ZhbDsKIAlpbnQgcmMgPSAwOwogCiAJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCiAJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAorCS8qIGFsbG9jYXRlIG91ciBic2cgdHJhY2tpbmcgc3RydWN0dXJlICovCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjczNSBGYWlsZWQgYWxsb2NhdGlvbiBvZiBkZF9kYXRhXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG5vX2RkX2RhdGE7CisJfQorCiAJaWYgKCFscGZjX25scF9nZXQobmRscCkpIHsKIAkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKKwkJZ290byBmcmVlX2RkX2RhdGE7CiAJfQogCiAJZWxzY21kID0gam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEucl9lbHMuZWxzX2NvZGU7CkBAIC0yNzEsMjQgKzUyOCwyNCBAQAogCWlmICghcnNwaW9jYnEpIHsKIAkJbHBmY19ubHBfcHV0KG5kbHApOwogCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfZGRfZGF0YTsKIAl9CiAKIAlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CiAJcnBpID0gbmRscC0+bmxwX3JwaTsKIAotCWNtZGlvY2JxID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEtPnBwb3J0LCAxLCBjbWRzaXplLCAwLCBuZGxwLAorCWNtZGlvY2JxID0gbHBmY19wcmVwX2Vsc19pb2NiKHZwb3J0LCAxLCBjbWRzaXplLCAwLCBuZGxwLAogCQkJCSAgICAgIG5kbHAtPm5scF9ESUQsIGVsc2NtZCk7Ci0KIAlpZiAoIWNtZGlvY2JxKSB7Ci0JCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGZyZWVfcnNwaW9jYnE7CiAJfQogCi0Jam9iLT5kZF9kYXRhID0gY21kaW9jYnE7CisJLyogcHJlcCBlbHMgaW9jYiBzZXQgY29udGV4dDEgdG8gdGhlIG5kbHAsIGNvbnRleHQyIHRvIHRoZSBjb21tYW5kCisJICogZG1hYnVmLCBjb250ZXh0MyBob2xkcyB0aGUgZGF0YSBkbWFidWYKKwkgKi8KIAlwY21kID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NicS0+Y29udGV4dDI7CiAJcHJzcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgcGNtZC0+bGlzdC5uZXh0OwotCiAJbHBmY19tYnVmX2ZyZWUocGhiYSwgcGNtZC0+dmlydCwgcGNtZC0+cGh5cyk7CiAJa2ZyZWUocGNtZCk7CiAJbHBmY19tYnVmX2ZyZWUocGhiYSwgcHJzcC0+dmlydCwgcHJzcC0+cGh5cyk7CkBAIC0zMDAsNyArNTU3LDYgQEAKIAogCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKLQogCWZvcl9lYWNoX3NnKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsIHNnZWwsIHJlcXVlc3RfbnNlZywgbnVtYmRlKSB7CiAJCWJ1c2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VsKTsKIAkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CkBAIC0zMjIsNyArNTc4LDYgQEAKIAkJYnBsLT5hZGRySGlnaCA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChidXNhZGRyKSk7CiAJCWJwbCsrOwogCX0KLQogCWNtZGlvY2JxLT5pb2NiLnVuLmVsc3JlcTY0LmJkbC5iZGVTaXplID0KIAkJKHJlcXVlc3RfbnNlZyArIHJlcGx5X25zZWcpICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpOwogCWNtZGlvY2JxLT5pb2NiLnVscENvbnRleHQgPSBycGk7CkBAIC0zMzAsMTAyICs1ODUsNjIgQEAKIAljbWRpb2NicS0+Y29udGV4dDEgPSBOVUxMOwogCWNtZGlvY2JxLT5jb250ZXh0MiA9IE5VTEw7CiAKLQlpb2NiX3N0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwKLQkJCQkJcnNwaW9jYnEsIChwaGJhLT5mY19yYXRvdiAqIDIpCi0JCQkJCSAgICAgICArIExQRkNfRFJWUl9USU1FT1VUKTsKKwljbWRpb2NicS0+aW9jYl9jbXBsID0gbHBmY19ic2dfcnBvcnRfZWxzX2NtcDsKKwljbWRpb2NicS0+Y29udGV4dDEgPSBkZF9kYXRhOworCWNtZGlvY2JxLT5jb250ZXh0MiA9IHJzcGlvY2JxOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX0lPQ0I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmNtZGlvY2JxID0gY21kaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gcnNwaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2IgPSBqb2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmJtcCA9IE5VTEw7OworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5uZGxwID0gbmRscDsKIAotCS8qIHJlbGVhc2UgdGhlIG5ldyBuZGxwIG9uY2UgdGhlIGlvY2IgY29tcGxldGVzICovCi0JbHBmY19ubHBfcHV0KG5kbHApOwotCWlmIChpb2NiX3N0YXR1cyAhPSBJT0NCX1RJTUVET1VUKSB7Ci0JCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCi0JCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7Ci0JCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAotCQkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChwaGJhLT5jZmdfcG9sbCAmIERJU0FCTEVfRkNQX1JJTkdfSU5UKSB7CisJCWNyZWdfdmFsID0gcmVhZGwocGhiYS0+SENyZWdhZGRyKTsKKwkJY3JlZ192YWwgfD0gKEhDX1IwSU5UX0VOQSA8PCBMUEZDX0ZDUF9SSU5HKTsKKwkJd3JpdGVsKGNyZWdfdmFsLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLwogCX0KKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIDApOworCWxwZmNfbmxwX3B1dChuZGxwKTsKKwlpZiAocmMgPT0gSU9DQl9TVUNDRVNTKQorCQlyZXR1cm4gMDsgLyogZG9uZSBmb3Igbm93ICovCiAKLQlpZiAoaW9jYl9zdGF0dXMgPT0gSU9DQl9TVUNDRVNTKSB7Ci0JCWlmIChyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfU1VDQ0VTUykgewotCQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KLQkJCQlyc3AtPnVuLmVsc3JlcTY0LmJkbC5iZGVTaXplOwotCQkJcmMgPSAwOwotCQl9IGVsc2UgaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MU19SSlQpIHsKLQkJCXN0cnVjdCBmY19ic2dfY3RlbHNfcmVwbHkgKmVsc19yZXBseTsKLQkJCS8qIExTX1JKVCBkYXRhIHJldHVybmVkIGluIHdvcmQgNCAqLwotCQkJdWludDhfdCAqcmp0X2RhdGEgPSAodWludDhfdCAqKSZyc3AtPnVuLnVscFdvcmRbNF07CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CiAKLQkJCWVsc19yZXBseSA9ICZqb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5OwotCQkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKLQkJCWVsc19yZXBseS0+c3RhdHVzID0gRkNfQ1RFTFNfU1RBVFVTX1JFSkVDVDsKLQkJCWVsc19yZXBseS0+cmp0X2RhdGEuYWN0aW9uID0gcmp0X2RhdGFbMF07Ci0JCQllbHNfcmVwbHktPnJqdF9kYXRhLnJlYXNvbl9jb2RlID0gcmp0X2RhdGFbMV07Ci0JCQllbHNfcmVwbHktPnJqdF9kYXRhLnJlYXNvbl9leHBsYW5hdGlvbiA9IHJqdF9kYXRhWzJdOwotCQkJZWxzX3JlcGx5LT5yanRfZGF0YS52ZW5kb3JfdW5pcXVlID0gcmp0X2RhdGFbM107Ci0JCX0gZWxzZQotCQkJcmMgPSAtRUlPOwotCX0gZWxzZQotCQlyYyA9IC1FSU87CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgcGJ1Zmxpc3QtPnZpcnQsIHBidWZsaXN0LT5waHlzKTsKIAotCWlmIChpb2NiX3N0YXR1cyAhPSBJT0NCX1RJTUVET1VUKQotCQlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgY21kaW9jYnEpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOwogCitmcmVlX3JzcGlvY2JxOgogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOwogCi1vdXQ6CitmcmVlX2RkX2RhdGE6CisJa2ZyZWUoZGRfZGF0YSk7CisKK25vX2RkX2RhdGE6CiAJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KIAlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKLQkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCi0Jam9iLT5qb2JfZG9uZShqb2IpOwotCi0JcmV0dXJuIDA7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmM7CiB9CiAKLXN0cnVjdCBscGZjX2N0X2V2ZW50IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JaW50IHJlZjsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKLQotCS8qIEV2ZW50IHR5cGUgYW5kIHdhaXRlciBpZGVudGlmaWVycyAqLwotCXVpbnQzMl90IHR5cGVfbWFzazsKLQl1aW50MzJfdCByZXFfaWQ7Ci0JdWludDMyX3QgcmVnX2lkOwotCi0JLyogbmV4dCB0d28gZmxhZ3MgYXJlIGhlcmUgZm9yIHRoZSBhdXRvLWRlbGV0ZSBsb2dpYyAqLwotCXVuc2lnbmVkIGxvbmcgd2FpdF90aW1lX3N0YW1wOwotCWludCB3YWl0aW5nOwotCi0JLyogc2VlbiBhbmQgbm90IHNlZW4gZXZlbnRzICovCi0Jc3RydWN0IGxpc3RfaGVhZCBldmVudHNfdG9fZ2V0OwotCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRzX3RvX3NlZTsKLX07Ci0KLXN0cnVjdCBldmVudF9kYXRhIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JdWludDMyX3QgdHlwZTsKLQl1aW50MzJfdCBpbW1lZF9kYXQ7Ci0Jdm9pZCAqZGF0YTsKLQl1aW50MzJfdCBsZW47Ci19OwotCi1zdGF0aWMgc3RydWN0IGxwZmNfY3RfZXZlbnQgKgotbHBmY19jdF9ldmVudF9uZXcoaW50IGV2X3JlZ19pZCwgdWludDMyX3QgZXZfcmVxX2lkKQotewotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQgPSBremFsbG9jKHNpemVvZigqZXZ0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFldnQpCi0JCXJldHVybiBOVUxMOwotCi0JSU5JVF9MSVNUX0hFQUQoJmV2dC0+ZXZlbnRzX3RvX2dldCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmV2dC0+ZXZlbnRzX3RvX3NlZSk7Ci0JZXZ0LT5yZXFfaWQgPSBldl9yZXFfaWQ7Ci0JZXZ0LT5yZWdfaWQgPSBldl9yZWdfaWQ7Ci0JZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmV2dC0+d3EpOwotCi0JcmV0dXJuIGV2dDsKLX0KLQorLyoqCisgKiBscGZjX2JzZ19ldmVudF9mcmVlIC0gZnJlZXMgYW4gYWxsb2NhdGVkIGV2ZW50IHN0cnVjdHVyZQorICogQGtyZWY6IFBvaW50ZXIgdG8gYSBrcmVmLgorICoKKyAqIENhbGxlZCBmcm9tIGtyZWZfcHV0LiBCYWNrIGNhc3QgdGhlIGtyZWYgaW50byBhbiBldmVudCBzdHJ1Y3R1cmUgYWRkcmVzcy4KKyAqIEZyZWUgYW55IGV2ZW50cyB0byBnZXQsIGRlbGV0ZSBhc3NvY2lhdGVkIG5vZGVzLCBmcmVlIGFueSBldmVudHMgdG8gc2VlLAorICogZnJlZSBhbnkgZGF0YSB0aGVuIGZyZWUgdGhlIGV2ZW50IGl0c2VsZi4KKyAqKi8KIHN0YXRpYyB2b2lkCi1scGZjX2N0X2V2ZW50X2ZyZWUoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK2xwZmNfYnNnX2V2ZW50X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCiB7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGxwZmNfYnNnX2V2ZW50LAorCQkJCQkJICBrcmVmKTsKIAlzdHJ1Y3QgZXZlbnRfZGF0YSAqZWQ7CiAKIAlsaXN0X2RlbCgmZXZ0LT5ub2RlKTsKQEAgLTQ0NywyNSArNjYyLDgyIEBACiAJa2ZyZWUoZXZ0KTsKIH0KIAorLyoqCisgKiBscGZjX2JzZ19ldmVudF9yZWYgLSBpbmNyZW1lbnRzIHRoZSBrcmVmIGZvciBhbiBldmVudAorICogQGV2dDogUG9pbnRlciB0byBhbiBldmVudCBzdHJ1Y3R1cmUuCisgKiovCiBzdGF0aWMgaW5saW5lIHZvaWQKLWxwZmNfY3RfZXZlbnRfcmVmKHN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQpCitscGZjX2JzZ19ldmVudF9yZWYoc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQpCiB7Ci0JZXZ0LT5yZWYrKzsKKwlrcmVmX2dldCgmZXZ0LT5rcmVmKTsKIH0KIAorLyoqCisgKiBscGZjX2JzZ19ldmVudF91bnJlZiAtIFVzZXMga3JlZl9wdXQgdG8gZnJlZSBhbiBldmVudCBzdHJ1Y3R1cmUKKyAqIEBldnQ6IFBvaW50ZXIgdG8gYW4gZXZlbnQgc3RydWN0dXJlLgorICoqLwogc3RhdGljIGlubGluZSB2b2lkCi1scGZjX2N0X2V2ZW50X3VucmVmKHN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQpCitscGZjX2JzZ19ldmVudF91bnJlZihzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCkKIHsKLQlpZiAoLS1ldnQtPnJlZiA8IDApCi0JCWxwZmNfY3RfZXZlbnRfZnJlZShldnQpOworCWtyZWZfcHV0KCZldnQtPmtyZWYsIGxwZmNfYnNnX2V2ZW50X2ZyZWUpOwogfQogCi0jZGVmaW5lIFNMSV9DVF9FTFhfTE9PUEJBQ0sgMHgxMAorLyoqCisgKiBscGZjX2JzZ19ldmVudF9uZXcgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGV2ZW50IHN0cnVjdHVyZQorICogQGV2X21hc2s6IE1hc2sgb2YgZXZlbnRzLgorICogQGV2X3JlZ19pZDogRXZlbnQgcmVnIGlkLgorICogQGV2X3JlcV9pZDogRXZlbnQgcmVxdWVzdCBpZC4KKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKgorbHBmY19ic2dfZXZlbnRfbmV3KHVpbnQzMl90IGV2X21hc2ssIGludCBldl9yZWdfaWQsIHVpbnQzMl90IGV2X3JlcV9pZCkKK3sKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCA9IGt6YWxsb2Moc2l6ZW9mKCpldnQpLCBHRlBfS0VSTkVMKTsKIAotZW51bSBFTFhfTE9PUEJBQ0tfQ01EIHsKLQlFTFhfTE9PUEJBQ0tfWFJJX1NFVFVQLAotCUVMWF9MT09QQkFDS19EQVRBLAotfTsKKwlpZiAoIWV2dCkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fc2VlKTsKKwlldnQtPnR5cGVfbWFzayA9IGV2X21hc2s7CisJZXZ0LT5yZXFfaWQgPSBldl9yZXFfaWQ7CisJZXZ0LT5yZWdfaWQgPSBldl9yZWdfaWQ7CisJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmV2dC0+d3EpOworCWtyZWZfaW5pdCgmZXZ0LT5rcmVmKTsKKwlyZXR1cm4gZXZ0OworfQorCisvKioKKyAqIGRpYWdfY21kX2RhdGFfZnJlZSAtIEZyZWVzIGFuIGxwZmMgZG1hIGJ1ZmZlciBleHRlbnNpb24KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBtbGlzdDogUG9pbnRlciB0byBhbiBscGZjIGRtYSBidWZmZXIgZXh0ZW5zaW9uLgorICoqLworc3RhdGljIGludAorZGlhZ19jbWRfZGF0YV9mcmVlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZG1hYnVmZXh0ICptbGlzdCkKK3sKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKm1sYXN0OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkLCAqY3VyciwgKm5leHQ7CisKKwlpZiAoKCFtbGlzdCkgfHwgKCFscGZjX2lzX2xpbmtfdXAocGhiYSkgJiYKKwkJKHBoYmEtPmxpbmtfZmxhZyAmIExTX0xPT1BCQUNLX01PREUpKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CisJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJm1saXN0LT5kbWEubGlzdCk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoY3VyciwgbmV4dCwgJmhlYWQpIHsKKwkJbWxhc3QgPSBsaXN0X2VudHJ5KGN1cnIsIHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAsIGRtYS5saXN0KTsKKwkJaWYgKG1sYXN0LT5kbWEudmlydCkKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZwY2lkZXYtPmRldiwKKwkJCQkJICBtbGFzdC0+c2l6ZSwKKwkJCQkJICBtbGFzdC0+ZG1hLnZpcnQsCisJCQkJCSAgbWxhc3QtPmRtYS5waHlzKTsKKwkJa2ZyZWUobWxhc3QpOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyoqCiAgKiBscGZjX2JzZ19jdF91bnNvbF9ldmVudCAtIHByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZApAQCAtNDc0LDkgKzc0Niw5IEBACiAgKiBAcGlvY2JxOgogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZCBpcyByZWNlaXZlZC4gIEl0Ci0gKiBmb3J3YXJkcyB0aGUgZXZlbnQgdG8gYW55IHByb2Nlc3NlcyByZWdpc3RlcmQgdG8gcmVjZWl2ZSBDVCBldmVudHMuCi0gKi8KLXZvaWQKKyAqIGZvcndhcmRzIHRoZSBldmVudCB0byBhbnkgcHJvY2Vzc2VzIHJlZ2lzdGVyZWQgdG8gcmVjZWl2ZSBDVCBldmVudHMuCisgKiovCitpbnQKIGxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NicSkKIHsKQEAgLTQ4NCw3ICs3NTYsNyBAQAogCXVpbnQzMl90IGNtZDsKIAl1aW50MzJfdCBsZW47CiAJc3RydWN0IGxwZmNfZG1hYnVmICpkbWFidWYgPSBOVUxMOwotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CiAJc3RydWN0IGV2ZW50X2RhdGEgKmV2dF9kYXQgPSBOVUxMOwogCXN0cnVjdCBscGZjX2lvY2JxICppb2NicTsKIAlzaXplX3Qgb2Zmc2V0ID0gMDsKQEAgLTQ5Niw2ICs3NjgsOSBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYmRlQnVmMiA9IHBpb2NicS0+Y29udGV4dDM7CiAJc3RydWN0IGxwZmNfaGJxX2VudHJ5ICpoYnFlOwogCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdF9yZXE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc2l6ZSA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmaGVhZCk7CiAJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJnBpb2NicS0+bGlzdCk7CkBAIC01MDQsNiArNzc5LDEwIEBACiAJICAgIHBpb2NicS0+aW9jYi51bi5jb250NjRbMF0udHVzLmYuYmRlU2l6ZSA9PSAwKQogCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CiAKKwlpZiAocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0hCQV9FUlJPUiB8fAorCQkoIShwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkKKwkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OworCiAJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkKIAkJZG1hYnVmID0gYmRlQnVmMTsKIAllbHNlIHsKQEAgLTUxMSw3ICs3OTAsOCBAQAogCQkJCSAgICBwaW9jYnEtPmlvY2IudW4uY29udDY0WzBdLmFkZHJMb3cpOwogCQlkbWFidWYgPSBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9nZXQocGhiYSwgcHJpbmcsIGRtYV9hZGRyKTsKIAl9Ci0KKwlpZiAoZG1hYnVmID09IE5VTEwpCisJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAljdF9yZXEgPSAoc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKilkbWFidWYtPnZpcnQ7CiAJZXZ0X3JlcV9pZCA9IGN0X3JlcS0+RnNUeXBlOwogCWNtZCA9IGN0X3JlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwOwpAQCAtNTE5LDI0ICs3OTksMjQgQEAKIAlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpKQogCQlscGZjX3NsaV9yaW5ncG9zdGJ1Zl9wdXQocGhiYSwgcHJpbmcsIGRtYWJ1Zik7CiAKLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2dCwgJnBoYmEtPmN0X2V2X3dhaXRlcnMsIG5vZGUpIHsKLQkJaWYgKGV2dC0+cmVxX2lkICE9IGV2dF9yZXFfaWQpCisJCWlmICghKGV2dC0+dHlwZV9tYXNrICYgRkNfUkVHX0NUX0VWRU5UKSB8fAorCQkJZXZ0LT5yZXFfaWQgIT0gZXZ0X3JlcV9pZCkKIAkJCWNvbnRpbnVlOwogCi0JCWxwZmNfY3RfZXZlbnRfcmVmKGV2dCk7Ci0KKwkJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJZXZ0X2RhdCA9IGt6YWxsb2Moc2l6ZW9mKCpldnRfZGF0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZXZ0X2RhdCkgewotCQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOworCQlpZiAoZXZ0X2RhdCA9PSBOVUxMKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJCSIyNjE0IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgIgogCQkJCQkiQ1QgZXZlbnRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAotCQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQogCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CiAJCQkvKiB0YWtlIGFjY3VtdWxhdGVkIGJ5dGUgY291bnQgZnJvbSB0aGUgbGFzdCBpb2NicSAqLwogCQkJaW9jYnEgPSBsaXN0X2VudHJ5KGhlYWQucHJldiwgdHlwZW9mKCppb2NicSksIGxpc3QpOwpAQCAtNTUwLDI1ICs4MzAsMjUgQEAKIAkJfQogCiAJCWV2dF9kYXQtPmRhdGEgPSBremFsbG9jKGV2dF9kYXQtPmxlbiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZXZ0X2RhdC0+ZGF0YSkgeworCQlpZiAoZXZ0X2RhdC0+ZGF0YSA9PSBOVUxMKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAogCQkJCQkiMjYxNSBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yICIKIAkJCQkJIkNUIGV2ZW50IGRhdGEsIHNpemUgJWRcbiIsCiAJCQkJCWV2dF9kYXQtPmxlbik7CiAJCQlrZnJlZShldnRfZGF0KTsKLQkJCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQkJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKLQkJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CiAJCX0KIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvY2JxLCAmaGVhZCwgbGlzdCkgeworCQkJc2l6ZSA9IDA7CiAJCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CiAJCQkJYmRlQnVmMSA9IGlvY2JxLT5jb250ZXh0MjsKIAkJCQliZGVCdWYyID0gaW9jYnEtPmNvbnRleHQzOwogCQkJfQogCQkJZm9yIChpID0gMDsgaSA8IGlvY2JxLT5pb2NiLnVscEJkZUNvdW50OyBpKyspIHsKLQkJCQlpbnQgc2l6ZSA9IDA7CiAJCQkJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmCiAJCQkJICAgIExQRkNfU0xJM19IQlFfRU5BQkxFRCkgewogCQkJCQlpZiAoaSA9PSAwKSB7CkBAIC02MDEsOSArODgxLDExIEBACiAJCQkJCQlpb2NicSk7CiAJCQkJCWtmcmVlKGV2dF9kYXQtPmRhdGEpOwogCQkJCQlrZnJlZShldnRfZGF0KTsKLQkJCQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQkJCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7Ci0JCQkJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywKKwkJCQkJCWZsYWdzKTsKKwkJCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJCSZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCQkJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAkJCQl9CiAJCQkJbWVtY3B5KChjaGFyICopKGV2dF9kYXQtPmRhdGEpICsgb2Zmc2V0LApAQCAtNjE2LDE1ICs4OTgsMjQgQEAKIAkJCQkJCQkJIGRtYWJ1Zik7CiAJCQkJfSBlbHNlIHsKIAkJCQkJc3dpdGNoIChjbWQpIHsKKwkJCQkJY2FzZSBFTFhfTE9PUEJBQ0tfREFUQToKKwkJCQkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLAorCQkJCQkJKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKQorCQkJCQkJCWRtYWJ1Zik7CisJCQkJCQlicmVhazsKIAkJCQkJY2FzZSBFTFhfTE9PUEJBQ0tfWFJJX1NFVFVQOgotCQkJCQkJaWYgKCEocGhiYS0+c2xpM19vcHRpb25zICYKLQkJCQkJCSAgICAgIExQRkNfU0xJM19IQlFfRU5BQkxFRCkpCisJCQkJCQlpZiAoKHBoYmEtPnNsaV9yZXYgPT0KKwkJCQkJCQlMUEZDX1NMSV9SRVYyKSB8fAorCQkJCQkJCShwaGJhLT5zbGkzX29wdGlvbnMgJgorCQkJCQkJCUxQRkNfU0xJM19IQlFfRU5BQkxFRAorCQkJCQkJCSkpIHsKKwkJCQkJCQlscGZjX2luX2J1Zl9mcmVlKHBoYmEsCisJCQkJCQkJCQlkbWFidWYpOworCQkJCQkJfSBlbHNlIHsKIAkJCQkJCQlscGZjX3Bvc3RfYnVmZmVyKHBoYmEsCiAJCQkJCQkJCQkgcHJpbmcsCiAJCQkJCQkJCQkgMSk7Ci0JCQkJCQllbHNlCi0JCQkJCQkJbHBmY19pbl9idWZfZnJlZShwaGJhLAotCQkJCQkJCQkJZG1hYnVmKTsKKwkJCQkJCX0KIAkJCQkJCWJyZWFrOwogCQkJCQlkZWZhdWx0OgogCQkJCQkJaWYgKCEocGhiYS0+c2xpM19vcHRpb25zICYKQEAgLTYzOCw3ICs5MjksNyBAQAogCQkJfQogCQl9CiAKLQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CiAJCQlldnRfZGF0LT5pbW1lZF9kYXQgPSBwaGJhLT5jdHhfaWR4OwogCQkJcGhiYS0+Y3R4X2lkeCA9IChwaGJhLT5jdHhfaWR4ICsgMSkgJSA2NDsKQEAgLTY1MSwxMjIgKzk0MiwxNDQgQEAKIAogCQlldnRfZGF0LT50eXBlID0gRkNfUkVHX0NUX0VWRU5UOwogCQlsaXN0X2FkZCgmZXZ0X2RhdC0+bm9kZSwgJmV2dC0+ZXZlbnRzX3RvX3NlZSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZXZ0LT53cSk7Ci0JCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKLQkJaWYgKGV2dF9yZXFfaWQgPT0gU0xJX0NUX0VMWF9MT09QQkFDSykKKwkJaWYgKGV2dF9yZXFfaWQgPT0gU0xJX0NUX0VMWF9MT09QQkFDSykgeworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZldnQtPndxKTsKKwkJCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7CiAJCQlicmVhazsKKwkJfQorCisJCWxpc3RfbW92ZShldnQtPmV2ZW50c190b19zZWUucHJldiwgJmV2dC0+ZXZlbnRzX3RvX2dldCk7CisJCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7CisKKwkJam9iID0gZXZ0LT5zZXRfam9iOworCQlldnQtPnNldF9qb2IgPSBOVUxMOworCQlpZiAoam9iKSB7CisJCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSBzaXplOworCQkJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwkJCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJCQlqb2ItPmRkX2RhdGEgPSBOVUxMOworCQkJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQkJam9iLT5qb2JfZG9uZShqb2IpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJfQogCX0KLQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAKIGVycm9yX2N0X3Vuc29sX2V4aXQ6CiAJaWYgKCFsaXN0X2VtcHR5KCZoZWFkKSkKIAkJbGlzdF9kZWwoJmhlYWQpOwotCi0JcmV0dXJuOworCWlmIChldnRfcmVxX2lkID09IFNMSV9DVF9FTFhfTE9PUEJBQ0spCisJCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiAvKioKLSAqIGxwZmNfYnNnX3NldF9ldmVudCAtIHByb2Nlc3MgYSBTRVRfRVZFTlQgYnNnIHZlbmRvciBjb21tYW5kCisgKiBscGZjX2JzZ19oYmFfc2V0X2V2ZW50IC0gcHJvY2VzcyBhIFNFVF9FVkVOVCBic2cgdmVuZG9yIGNvbW1hbmQKICAqIEBqb2I6IFNFVF9FVkVOVCBmY19ic2dfam9iCi0gKi8KKyAqKi8KIHN0YXRpYyBpbnQKLWxwZmNfYnNnX3NldF9ldmVudChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQorbHBmY19ic2dfaGJhX3NldF9ldmVudChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBzZXRfY3RfZXZlbnQgKmV2ZW50X3JlcTsKLQlzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0OworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OwogCWludCByYyA9IDA7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YSA9IE5VTEw7CisJdWludDMyX3QgZXZfbWFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAogCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3Qgc2V0X2N0X2V2ZW50KSkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAogCQkJCSIyNjEyIFJlY2VpdmVkIFNFVF9DVF9FVkVOVCBiZWxvdyBtaW5pbXVtICIKIAkJCQkic2l6ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRkX2RhdGEgPT0gTlVMTCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM0IEZhaWxlZCBhbGxvY2F0aW9uIG9mIGRkX2RhdGFcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gam9iX2Vycm9yOwogCX0KIAogCWV2ZW50X3JlcSA9IChzdHJ1Y3Qgc2V0X2N0X2V2ZW50ICopCiAJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7Ci0KLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJZXZfbWFzayA9ICgodWludDMyX3QpKHVuc2lnbmVkIGxvbmcpZXZlbnRfcmVxLT50eXBlX21hc2sgJgorCQkJCUZDX1JFR19FVkVOVF9NQVNLKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgewogCQlpZiAoZXZ0LT5yZWdfaWQgPT0gZXZlbnRfcmVxLT5ldl9yZWdfaWQpIHsKLQkJCWxwZmNfY3RfZXZlbnRfcmVmKGV2dCk7CisJCQlscGZjX2JzZ19ldmVudF9yZWYoZXZ0KTsKIAkJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKIAkJCWJyZWFrOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAogCWlmICgmZXZ0LT5ub2RlID09ICZwaGJhLT5jdF9ldl93YWl0ZXJzKSB7CiAJCS8qIG5vIGV2ZW50IHdhaXRpbmcgc3RydWN0IHlldCAtIGZpcnN0IGNhbGwgKi8KLQkJZXZ0ID0gbHBmY19jdF9ldmVudF9uZXcoZXZlbnRfcmVxLT5ldl9yZWdfaWQsCisJCWV2dCA9IGxwZmNfYnNnX2V2ZW50X25ldyhldl9tYXNrLCBldmVudF9yZXEtPmV2X3JlZ19pZCwKIAkJCQkJZXZlbnRfcmVxLT5ldl9yZXFfaWQpOwogCQlpZiAoIWV2dCkgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKIAkJCQkJIjI2MTcgRmFpbGVkIGFsbG9jYXRpb24gb2YgZXZlbnQgIgogCQkJCQkid2FpdGVyXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBqb2JfZXJyb3I7CiAJCX0KIAotCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkKCZldnQtPm5vZGUsICZwaGJhLT5jdF9ldl93YWl0ZXJzKTsKLQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKLQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOworCQlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWV2dC0+d2FpdGluZyA9IDE7Ci0JaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShldnQtPndxLAotCQkJCSAgICAgIWxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX3NlZSkpKSB7Ci0JCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOyAvKiByZWxlYXNlIHJlZiAqLwotCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIGRlbGV0ZSAqLwotCQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQkJcmMgPSAtRUlOVFI7Ci0JCWdvdG8gc2V0X2V2ZW50X291dDsKLQl9CisJZGRfZGF0YS0+dHlwZSA9IFRZUEVfRVZUOworCWRkX2RhdGEtPmNvbnRleHRfdW4uZXZ0ID0gZXZ0OworCWV2dC0+c2V0X2pvYiA9IGpvYjsgLyogZm9yIHVuc29saWNpdGVkIGNvbW1hbmQgKi8KKwlqb2ItPmRkX2RhdGEgPSBkZF9kYXRhOyAvKiBmb3IgZmMgdHJhbnNwb3J0IHRpbWVvdXQgY2FsbGJhY2sqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsgLyogY2FsbCBqb2IgZG9uZSBsYXRlciAqLwogCi0JZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwotCWV2dC0+d2FpdGluZyA9IDA7Citqb2JfZXJyb3I6CisJaWYgKGRkX2RhdGEgIT0gTlVMTCkKKwkJa2ZyZWUoZGRfZGF0YSk7CiAKLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0JbGlzdF9tb3ZlKGV2dC0+ZXZlbnRzX3RvX3NlZS5wcmV2LCAmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKLQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIHJlbGVhc2UgcmVmICovCi0JbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0KLXNldF9ldmVudF9vdXQ6Ci0JLyogc2V0X2V2ZW50IGNhcnJpZXMgbm8gcmVwbHkgcGF5bG9hZCAqLwotCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7Ci0JLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KLQlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKLQkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCi0Jam9iLT5qb2JfZG9uZShqb2IpOwotCi0JcmV0dXJuIDA7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgotICogbHBmY19ic2dfZ2V0X2V2ZW50IC0gcHJvY2VzcyBhIEdFVF9FVkVOVCBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIGxwZmNfYnNnX2hiYV9nZXRfZXZlbnQgLSBwcm9jZXNzIGEgR0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAogICogQGpvYjogR0VUX0VWRU5UIGZjX2JzZ19qb2IKLSAqLworICoqLwogc3RhdGljIGludAotbHBmY19ic2dfZ2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCitscGZjX2JzZ19oYmFfZ2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGdldF9jdF9ldmVudCAqZXZlbnRfcmVxOwogCXN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgKmV2ZW50X3JlcGx5OwotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CiAJc3RydWN0IGV2ZW50X2RhdGEgKmV2dF9kYXQgPSBOVUxMOwotCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1aW50MzJfdCByYyA9IDA7CiAKIAlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CiAJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBnZXRfY3RfZXZlbnQpKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJIjI2MTMgUmVjZWl2ZWQgR0VUX0NUX0VWRU5UIHJlcXVlc3QgYmVsb3cgIgogCQkJCSJtaW5pbXVtIHNpemVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKIAl9CiAKIAlldmVudF9yZXEgPSAoc3RydWN0IGdldF9jdF9ldmVudCAqKQpAQCAtNzc0LDEzICsxMDg3LDEyIEBACiAKIAlldmVudF9yZXBseSA9IChzdHJ1Y3QgZ2V0X2N0X2V2ZW50X3JlcGx5ICopCiAJCWpvYi0+cmVwbHktPnJlcGx5X2RhdGEudmVuZG9yX3JlcGx5LnZlbmRvcl9yc3A7Ci0KLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2dCwgJnBoYmEtPmN0X2V2X3dhaXRlcnMsIG5vZGUpIHsKIAkJaWYgKGV2dC0+cmVnX2lkID09IGV2ZW50X3JlcS0+ZXZfcmVnX2lkKSB7CiAJCQlpZiAobGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fZ2V0KSkKIAkJCQlicmVhazsKLQkJCWxwZmNfY3RfZXZlbnRfcmVmKGV2dCk7CisJCQlscGZjX2JzZ19ldmVudF9yZWYoZXZ0KTsKIAkJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKIAkJCWV2dF9kYXQgPSBsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5wcmV2LAogCQkJCQkgICAgIHN0cnVjdCBldmVudF9kYXRhLCBub2RlKTsKQEAgLTc4OCw0NSArMTEwMCwxNTM5IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWV2dF9kYXQpIHsKKwkvKiBUaGUgYXBwIG1heSBjb250aW51ZSB0byBhc2sgZm9yIGV2ZW50IGRhdGEgdW50aWwgaXQgZ2V0cworCSAqIGFuIGVycm9yIGluZGljYXRpbmcgdGhhdCB0aGVyZSBpc24ndCBhbnltb3JlCisJICovCisJaWYgKGV2dF9kYXQgPT0gTlVMTCkgewogCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCQlyYyA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyb3JfZ2V0X2V2ZW50X2V4aXQ7CisJCWdvdG8gam9iX2Vycm9yOwogCX0KIAotCWlmIChldnRfZGF0LT5sZW4gPiBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKLQkJZXZ0X2RhdC0+bGVuID0gam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOwotCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKLQkJCQkJIjI2MTggVHJ1bmNhdGVkIGV2ZW50IGRhdGEgYXQgJWQgIgotCQkJCQkiYnl0ZXNcbiIsCi0JCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbik7CisJaWYgKGV2dF9kYXQtPmxlbiA+IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuKSB7CisJCWV2dF9kYXQtPmxlbiA9IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNjE4IFRydW5jYXRlZCBldmVudCBkYXRhIGF0ICVkICIKKwkJCQkiYnl0ZXNcbiIsCisJCQkJam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pOwogCX0KIAorCWV2ZW50X3JlcGx5LT50eXBlID0gZXZ0X2RhdC0+dHlwZTsKIAlldmVudF9yZXBseS0+aW1tZWRfZGF0YSA9IGV2dF9kYXQtPmltbWVkX2RhdDsKLQogCWlmIChldnRfZGF0LT5sZW4gPiAwKQogCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQotCQkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKLQkJCQkJICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsCisJCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkJCSAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCiAJCQkJCSAgICBldnRfZGF0LT5kYXRhLCBldnRfZGF0LT5sZW4pOwogCWVsc2UKIAkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKLQlyYyA9IDA7CiAKLQlpZiAoZXZ0X2RhdCkKKwlpZiAoZXZ0X2RhdCkgewogCQlrZnJlZShldnRfZGF0LT5kYXRhKTsKLQlrZnJlZShldnRfZGF0KTsKLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0JbHBmY19jdF9ldmVudF91bnJlZihldnQpOwotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQlrZnJlZShldnRfZGF0KTsKKwl9CiAKLWVycm9yX2dldF9ldmVudF9leGl0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCWpvYi0+am9iX2RvbmUoam9iKTsKKwlyZXR1cm4gMDsKKworam9iX2Vycm9yOgorCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfaXNzdWVfY3RfcnNwX2NtcCAtIGxwZmNfaXNzdWVfY3RfcnNwJ3MgY29tcGxldGlvbiBoYW5kbGVyCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAY21kaW9jYnE6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiLgorICogQHJzcGlvY2JxOiBQb2ludGVyIHRvIHJlc3BvbnNlIGlvY2IuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGZvciBpb2NicyBpc3N1ZWQgdXNpbmcKKyAqIGxwZmNfaXNzdWVfY3RfcnNwX2NtcCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlCisgKiByaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2l0aG91dCBhbnkgbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB3b3JrZXIgdGhyZWFkIGNvbnRleHQgYW5kIGludGVycnVwdAorICogY29udGV4dC4gVGhpcyBmdW5jdGlvbiBhbHNvIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aHJlYWQgd2hpY2gKKyAqIGNsZWFucyB1cCB0aGUgU0xJIGxheWVyIG9iamVjdHMuCisgKiBUaGlzIGZ1bmN0aW9uIGNvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBpb2NiIHRvIHRoZQorICogcmVzcG9uc2UgaW9jYiBtZW1vcnkgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgb2YKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdCBhbmQgdGhlbiB3YWtlcyB1cCB0aGUgdGhyZWFkIHdoaWNoCisgKiBzbGVlcHMgZm9yIHRoZSBpb2NiIGNvbXBsZXRpb24uCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19pc3N1ZV9jdF9yc3BfY21wKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicSkKK3sKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXN0cnVjdCBmY19ic2dfam9iICpqb2I7CisJSU9DQl90ICpyc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpibXA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQxOworCS8qIG5vcm1hbCBjb21wbGV0aW9uIGFuZCB0aW1lb3V0IGNyb3NzZWQgcGF0aHMsIGFscmVhZHkgZG9uZSAqLworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlqb2IgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYjsKKwlibXAgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wOworCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKKwluZGxwID0gZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLm5kbHA7CisKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAocnNwLT51bHBTdGF0dXMpIHsKKwkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QpIHsKKwkJCXN3aXRjaCAocnNwLT51bi51bHBXb3JkWzRdICYgMHhmZikgeworCQkJY2FzZSBJT0VSUl9TRVFVRU5DRV9USU1FT1VUOgorCQkJCXJjID0gLUVUSU1FRE9VVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSU9FUlJfSU5WQUxJRF9SUEk6CisJCQkJcmMgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyYyA9IC1FQUNDRVM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZQorCQkJcmMgPSAtRUFDQ0VTOworCX0gZWxzZQorCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJcnNwLT51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZTsKKworCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJtcC0+dmlydCwgYm1wLT5waHlzKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlscGZjX25scF9wdXQobmRscCk7CisJa2ZyZWUoYm1wKTsKKwlrZnJlZShkZF9kYXRhKTsKIAkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CiAJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+am9iX2RvbmUoam9iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfaXNzdWVfY3RfcnNwIC0gaXNzdWUgYSBjdCByZXNwb25zZQorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGpvYjogUG9pbnRlciB0byB0aGUgam9iIG9iamVjdC4KKyAqIEB0YWc6IHRhZyBpbmRleCB2YWx1ZSBpbnRvIHRoZSBwb3J0cyBjb250ZXh0IGV4Y2hhbmdlIGFycmF5LgorICogQGJtcDogUG9pbnRlciB0byBhIGRtYSBidWZmZXIgZGVzY3JpcHRvci4KKyAqIEBudW1fZW50cnk6IE51bWJlciBvZiBlbnRpZXMgaW4gdGhlIGJkZS4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfaXNzdWVfY3RfcnNwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGZjX2JzZ19qb2IgKmpvYiwgdWludDMyX3QgdGFnLAorCQkgIHN0cnVjdCBscGZjX2RtYWJ1ZiAqYm1wLCBpbnQgbnVtX2VudHJ5KQoreworCUlPQ0JfdCAqaWNtZDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY3Rpb2NiID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVpbnQzMl90IGNyZWdfdmFsOworCisJLyogYWxsb2NhdGUgb3VyIGJzZyB0cmFja2luZyBzdHJ1Y3R1cmUgKi8KKwlkZF9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJzZ19qb2JfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGRfZGF0YSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM2IEZhaWxlZCBhbGxvY2F0aW9uIG9mIGRkX2RhdGFcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbm9fZGRfZGF0YTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yICBjb21tYW5kIGlvY2IgKi8KKwljdGlvY2IgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJaWYgKCFjdGlvY2IpIHsKKwkJcmMgPSBFTk9NRU07CisJCWdvdG8gbm9fY3Rpb2NiOworCX0KKworCWljbWQgPSAmY3Rpb2NiLT5pb2NiOworCWljbWQtPnVuLnhzZXE2NC5iZGwudWxwSW9UYWczMiA9IDA7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChibXAtPnBoeXMpOworCWljbWQtPnVuLnhzZXE2NC5iZGwuYWRkckxvdyA9IHB1dFBhZGRyTG93KGJtcC0+cGh5cyk7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVTaXplID0gKG51bV9lbnRyeSAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSk7CisJaWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRmN0bCA9IChMUyB8IExBKTsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5EZmN0bCA9IDA7CisJaWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuUmN0bCA9IEZDX1JDVExfRERfU09MX0NUTDsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5UeXBlID0gRkNfVFlQRV9DVDsKKworCS8qIEZpbGwgaW4gcmVzdCBvZiBpb2NiICovCisJaWNtZC0+dWxwQ29tbWFuZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1g7CisJaWNtZC0+dWxwQmRlQ291bnQgPSAxOworCWljbWQtPnVscExlID0gMTsKKwlpY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCS8qIERvIG5vdCBpc3N1ZSB1bnNvbCByZXNwb25zZSBpZiBveGlkIG5vdCBtYXJrZWQgYXMgdmFsaWQgKi8KKwkJaWYgKCEocGhiYS0+Y3RfY3R4W3RhZ10uZmxhZ3MgJiBVTlNPTF9WQUxJRCkpIHsKKwkJCXJjID0gSU9DQl9FUlJPUjsKKwkJCWdvdG8gaXNzdWVfY3RfcnNwX2V4aXQ7CisJCX0KKwkJaWNtZC0+dWxwQ29udGV4dCA9IHBoYmEtPmN0X2N0eFt0YWddLm94aWQ7CisJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLT5wcG9ydCwgcGhiYS0+Y3RfY3R4W3RhZ10uU0lEKTsKKwkJaWYgKCFuZGxwKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRUxTLAorCQkJCSAiMjcyMSBuZGxwIG51bGwgZm9yIG94aWQgJXggU0lEICV4XG4iLAorCQkJCQlpY21kLT51bHBDb250ZXh0LAorCQkJCQlwaGJhLT5jdF9jdHhbdGFnXS5TSUQpOworCQkJcmMgPSBJT0NCX0VSUk9SOworCQkJZ290byBpc3N1ZV9jdF9yc3BfZXhpdDsKKwkJfQorCQlpY21kLT51bi51bHBXb3JkWzNdID0gbmRscC0+bmxwX3JwaTsKKwkJLyogVGhlIGV4Y2hhbmdlIGlzIGRvbmUsIG1hcmsgdGhlIGVudHJ5IGFzIGludmFsaWQgKi8KKwkJcGhiYS0+Y3RfY3R4W3RhZ10uZmxhZ3MgJj0gflVOU09MX1ZBTElEOworCX0gZWxzZQorCQlpY21kLT51bHBDb250ZXh0ID0gKHVzaG9ydCkgdGFnOworCisJaWNtZC0+dWxwVGltZW91dCA9IHBoYmEtPmZjX3JhdG92ICogMjsKKworCS8qIFhtaXQgQ1QgcmVzcG9uc2Ugb24gZXhjaGFuZ2UgPHhpZD4gKi8KKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAorCQkJIjI3MjIgWG1pdCBDVCByZXNwb25zZSBvbiBleGNoYW5nZSB4JXggRGF0YTogeCV4IHgleFxuIiwKKwkJCWljbWQtPnVscENvbnRleHQsIGljbWQtPnVscElvVGFnLCBwaGJhLT5saW5rX3N0YXRlKTsKKworCWN0aW9jYi0+aW9jYl9jbXBsID0gTlVMTDsKKwljdGlvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKwljdGlvY2ItPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJY3Rpb2NiLT5jb250ZXh0MyA9IGJtcDsKKworCWN0aW9jYi0+aW9jYl9jbXBsID0gbHBmY19pc3N1ZV9jdF9yc3BfY21wOworCWN0aW9jYi0+Y29udGV4dDEgPSBkZF9kYXRhOworCWN0aW9jYi0+Y29udGV4dDIgPSBOVUxMOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX0lPQ0I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmNtZGlvY2JxID0gY3Rpb2NiOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5yc3Bpb2NicSA9IE5VTEw7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2IgPSBqb2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmJtcCA9IGJtcDsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscCA9IG5kbHA7CisKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgeworCQljcmVnX3ZhbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CisJCWNyZWdfdmFsIHw9IChIQ19SMElOVF9FTkEgPDwgTFBGQ19GQ1BfUklORyk7CisJCXdyaXRlbChjcmVnX3ZhbCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwl9CisKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY3Rpb2NiLCAwKTsKKworCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KKworaXNzdWVfY3RfcnNwX2V4aXQ6CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjdGlvY2IpOworbm9fY3Rpb2NiOgorCWtmcmVlKGRkX2RhdGEpOworbm9fZGRfZGF0YToKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfc2VuZF9tZ210X3JzcCAtIHByb2Nlc3MgYSBTRU5EX01HTVRfUkVTUCBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIEBqb2I6IFNFTkRfTUdNVF9SRVNQIGZjX2JzZ19qb2IKKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX3NlbmRfbWdtdF9yc3Aoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlzdHJ1Y3Qgc2VuZF9tZ210X3Jlc3AgKm1nbXRfcmVzcCA9IChzdHJ1Y3Qgc2VuZF9tZ210X3Jlc3AgKikKKwkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpicGw7CisJc3RydWN0IGxwZmNfZG1hYnVmICpibXAgPSBOVUxMOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CisJaW50IHJlcXVlc3RfbnNlZzsKKwlpbnQgbnVtYmRlOworCWRtYV9hZGRyX3QgYnVzYWRkcjsKKwl1aW50MzJfdCB0YWcgPSBtZ210X3Jlc3AtPnRhZzsKKwl1bnNpZ25lZCBsb25nIHJlcWJmcmNudCA9CisJCQkodW5zaWduZWQgbG9uZylqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlpbnQgcmMgPSAwOworCisJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKworCWlmICghcmVxYmZyY250IHx8IChyZXFiZnJjbnQgPiAoODAgKiBCVUZfU1pfNEspKSkgeworCQlyYyA9IC1FUkFOR0U7CisJCWdvdG8gc2VuZF9tZ210X3JzcF9leGl0OworCX0KKworCWJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghYm1wKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBzZW5kX21nbXRfcnNwX2V4aXQ7CisJfQorCisJYm1wLT52aXJ0ID0gbHBmY19tYnVmX2FsbG9jKHBoYmEsIDAsICZibXAtPnBoeXMpOworCWlmICghYm1wLT52aXJ0KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBzZW5kX21nbXRfcnNwX2ZyZWVfYm1wOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZibXAtPmxpc3QpOworCWJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIGJtcC0+dmlydDsKKwlyZXF1ZXN0X25zZWcgPSBwY2lfbWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZm9yX2VhY2hfc2coam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVxdWVzdF9uc2VnLCBudW1iZGUpIHsKKwkJYnVzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gc2dfZG1hX2xlbihzZ2VsKTsKKwkJYnBsLT50dXMudyA9IGNwdV90b19sZTMyKGJwbC0+dHVzLncpOworCQlicGwtPmFkZHJMb3cgPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhidXNhZGRyKSk7CisJCWJwbC0+YWRkckhpZ2ggPSBjcHVfdG9fbGUzMihwdXRQYWRkckhpZ2goYnVzYWRkcikpOworCQlicGwrKzsKKwl9CisKKwlyYyA9IGxwZmNfaXNzdWVfY3RfcnNwKHBoYmEsIGpvYiwgdGFnLCBibXAsIHJlcXVlc3RfbnNlZyk7CisKKwlpZiAocmMgPT0gSU9DQl9TVUNDRVNTKQorCQlyZXR1cm4gMDsgLyogZG9uZSBmb3Igbm93ICovCisKKwkvKiBUQkQgbmVlZCB0byBoYW5kbGUgYSB0aW1lb3V0ICovCisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlyYyA9IC1FQUNDRVM7CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworCitzZW5kX21nbXRfcnNwX2ZyZWVfYm1wOgorCWtmcmVlKGJtcCk7CitzZW5kX21nbXRfcnNwX2V4aXQ6CisJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ19kaWFnX21vZGUgLSBwcm9jZXNzIGEgTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERSBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIEBqb2I6IExQRkNfQlNHX1ZFTkRPUl9ESUFHX01PREUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwbGFjaW5nIGEgcG9ydCBpbnRvIGRpYWdub3N0aWMgbG9vcGJhY2sKKyAqIG1vZGUgaW4gb3JkZXIgdG8gcGVyZm9ybSBhIGRpYWdub3N0aWMgbG9vcGJhY2sgdGVzdC4KKyAqIEFsbCBuZXcgc2NzaSByZXF1ZXN0cyBhcmUgYmxvY2tlZCwgYSBzbWFsbCBkZWxheSBpcyB1c2VkIHRvIGFsbG93IHRoZQorICogc2NzaSByZXF1ZXN0cyB0byBjb21wbGV0ZSB0aGVuIHRoZSBsaW5rIGlzIGJyb3VnaHQgZG93bi4gSWYgdGhlIGxpbmsgaXMKKyAqIGlzIHBsYWNlZCBpbiBsb29wYmFjayBtb2RlIHRoZW4gc2NzaSByZXF1ZXN0cyBhcmUgYWdhaW4gYWxsb3dlZAorICogc28gdGhlIHNjc2kgbWlkLWxheWVyIGRvZXNuJ3QgZ2l2ZSB1cCBvbiB0aGUgcG9ydC4KKyAqIEFsbCBvZiB0aGlzIGlzIGRvbmUgaW4tbGluZS4KKyAqLworc3RhdGljIGludAorbHBmY19ic2dfZGlhZ19tb2RlKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBqb2ItPnNob3N0OworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBkaWFnX21vZGVfc2V0ICpsb29wYmFja19tb2RlOworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19GQ1BfUklOR107CisJdWludDMyX3QgbGlua19mbGFnczsKKwl1aW50MzJfdCB0aW1lb3V0OworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCUxQRkNfTUJPWFFfdCAqcG1ib3hxOworCWludCBtYnhzdGF0dXM7CisJaW50IGkgPSAwOworCWludCByYyA9IDA7CisKKwkvKiBubyBkYXRhIHRvIHJldHVybiBqdXN0IHRoZSByZXR1cm4gY29kZSAqLworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisKKwlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CisJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBkaWFnX21vZGVfc2V0KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM4IFJlY2VpdmVkIERJQUcgTU9ERSByZXF1ZXN0IGJlbG93IG1pbmltdW0gIgorCQkJCSJzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlsb29wYmFja19tb2RlID0gKHN0cnVjdCBkaWFnX21vZGVfc2V0ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisJbGlua19mbGFncyA9IGxvb3BiYWNrX21vZGUtPnR5cGU7CisJdGltZW91dCA9IGxvb3BiYWNrX21vZGUtPnRpbWVvdXQ7CisKKwlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19IQkFfRVJST1IpIHx8CisJICAgIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfQkxPQ0tfTUdNVF9JTykgfHwKKwkgICAgKCEocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkgeworCQlyYyA9IC1FQUNDRVM7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCXBtYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbWJveHEpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCWlmICh2cG9ydHMpIHsKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzY3NpX2Jsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwkJfQorCisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJfSBlbHNlIHsKKwkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCQlzY3NpX2Jsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwl9CisKKwl3aGlsZSAocHJpbmctPnR4Y21wbHFfY250KSB7CisJCWlmIChpKysgPiA1MDApCS8qIHdhaXQgdXAgdG8gNSBzZWNvbmRzICovCisJCQlicmVhazsKKworCQltc2xlZXAoMTApOworCX0KKworCW1lbXNldCgodm9pZCAqKXBtYm94cSwgMCwgc2l6ZW9mKExQRkNfTUJPWFFfdCkpOworCXBtYm94cS0+dS5tYi5tYnhDb21tYW5kID0gTUJYX0RPV05fTElOSzsKKwlwbWJveHEtPnUubWIubWJ4T3duZXIgPSBPV05fSE9TVDsKKworCW1ieHN0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBwbWJveHEsIExQRkNfTUJPWF9UTU8pOworCisJaWYgKChtYnhzdGF0dXMgPT0gTUJYX1NVQ0NFU1MpICYmIChwbWJveHEtPnUubWIubWJ4U3RhdHVzID09IDApKSB7CisJCS8qIHdhaXQgZm9yIGxpbmsgZG93biBiZWZvcmUgcHJvY2VlZGluZyAqLworCQlpID0gMDsKKwkJd2hpbGUgKHBoYmEtPmxpbmtfc3RhdGUgIT0gTFBGQ19MSU5LX0RPV04pIHsKKwkJCWlmIChpKysgPiB0aW1lb3V0KSB7CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWdvdG8gbG9vcGJhY2tfbW9kZV9leGl0OworCQkJfQorCisJCQltc2xlZXAoMTApOworCQl9CisKKwkJbWVtc2V0KCh2b2lkICopcG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJCWlmIChsaW5rX2ZsYWdzID09IElOVEVSTkFMX0xPT1BfQkFDSykKKwkJCXBtYm94cS0+dS5tYi51bi52YXJJbml0TG5rLmxpbmtfZmxhZ3MgPSBGTEFHU19MT0NBTF9MQjsKKwkJZWxzZQorCQkJcG1ib3hxLT51Lm1iLnVuLnZhckluaXRMbmsubGlua19mbGFncyA9CisJCQkJRkxBR1NfVE9QT0xPR1lfTU9ERV9MT09QOworCisJCXBtYm94cS0+dS5tYi5tYnhDb21tYW5kID0gTUJYX0lOSVRfTElOSzsKKwkJcG1ib3hxLT51Lm1iLm1ieE93bmVyID0gT1dOX0hPU1Q7CisKKwkJbWJ4c3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIHBtYm94cSwKKwkJCQkJCSAgICAgTFBGQ19NQk9YX1RNTyk7CisKKwkJaWYgKChtYnhzdGF0dXMgIT0gTUJYX1NVQ0NFU1MpIHx8IChwbWJveHEtPnUubWIubWJ4U3RhdHVzKSkKKwkJCXJjID0gLUVOT0RFVjsKKwkJZWxzZSB7CisJCQlwaGJhLT5saW5rX2ZsYWcgfD0gTFNfTE9PUEJBQ0tfTU9ERTsKKwkJCS8qIHdhaXQgZm9yIHRoZSBsaW5rIGF0dGVudGlvbiBpbnRlcnJ1cHQgKi8KKwkJCW1zbGVlcCgxMDApOworCisJCQlpID0gMDsKKwkJCXdoaWxlIChwaGJhLT5saW5rX3N0YXRlICE9IExQRkNfSEJBX1JFQURZKSB7CisJCQkJaWYgKGkrKyA+IHRpbWVvdXQpIHsKKwkJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQltc2xlZXAoMTApOworCQkJfQorCQl9CisKKwl9IGVsc2UKKwkJcmMgPSAtRU5PREVWOworCitsb29wYmFja19tb2RlX2V4aXQ6CisJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwlpZiAodnBvcnRzKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3ZwaSAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwkJfQorCQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCX0gZWxzZSB7CisJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHBoYmEtPnBwb3J0KTsKKwkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwl9CisKKwkvKgorCSAqIExldCBTTEkgbGF5ZXIgcmVsZWFzZSBtYm94cSBpZiBtYm94IGNvbW1hbmQgY29tcGxldGVkIGFmdGVyIHRpbWVvdXQuCisJICovCisJaWYgKG1ieHN0YXR1cyAhPSBNQlhfVElNRU9VVCkKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisKK2pvYl9lcnJvcjoKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgaWYgbm8gZXJyb3IgKi8KKwlpZiAocmMgPT0gMCkKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjZGlhZ19sb29wX3NlbGZfcmVnIC0gb2J0YWlucyBhIHJlbW90ZSBwb3J0IGxvZ2luIGlkCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QKKyAqIEBycGk6IFBvaW50ZXIgdG8gYSByZW1vdGUgcG9ydCBsb2dpbiBpZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gb2J0YWlucyBhIHJlbW90ZSBwb3J0IGxvZ2luIGlkIHNvIHRoZSBkaWFnIGxvb3BiYWNrIHRlc3QKKyAqIGNhbiBzZW5kIGFuZCByZWNlaXZlIGl0cyBvd24gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZC4KKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9zZWxmX3JlZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90ICogcnBpKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZmY7CisJaW50IHN0YXR1czsKKworCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveCkKKwkJcmV0dXJuIEVOT01FTTsKKworCXN0YXR1cyA9IGxwZmNfcmVnX3JwaShwaGJhLCAwLCBwaGJhLT5wcG9ydC0+ZmNfbXlESUQsCisJCQkJKHVpbnQ4X3QgKikmcGhiYS0+cHBvcnQtPmZjX3NwYXJhbSwgbWJveCwgMCk7CisJaWYgKHN0YXR1cykgeworCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiBFTk9NRU07CisJfQorCisJZG1hYnVmZiA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgbWJveC0+Y29udGV4dDE7CisJbWJveC0+Y29udGV4dDEgPSBOVUxMOworCXN0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBtYm94LCBMUEZDX01CT1hfVE1PKTsKKworCWlmICgoc3RhdHVzICE9IE1CWF9TVUNDRVNTKSB8fCAobWJveC0+dS5tYi5tYnhTdGF0dXMpKSB7CisJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGRtYWJ1ZmYtPnZpcnQsIGRtYWJ1ZmYtPnBoeXMpOworCQlrZnJlZShkbWFidWZmKTsKKwkJaWYgKHN0YXR1cyAhPSBNQlhfVElNRU9VVCkKKwkJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIEVOT0RFVjsKKwl9CisKKwkqcnBpID0gbWJveC0+dS5tYi51bi52YXJXb3Jkc1swXTsKKworCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGRtYWJ1ZmYtPnZpcnQsIGRtYWJ1ZmYtPnBoeXMpOworCWtmcmVlKGRtYWJ1ZmYpOworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcgLSB1bnJlZ3MgZnJvbSB0aGUgcnBpCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QKKyAqIEBycGk6IFJlbW90ZSBwb3J0IGxvZ2luIGlkCisgKgorICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyB0aGUgcnBpIG9idGFpbmVkIGluIGxwZmNkaWFnX2xvb3Bfc2VsZl9yZWcKKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgcnBpKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlpbnQgc3RhdHVzOworCisJLyogQWxsb2NhdGUgbWJveHEgc3RydWN0dXJlICovCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKG1ib3ggPT0gTlVMTCkKKwkJcmV0dXJuIEVOT01FTTsKKworCWxwZmNfdW5yZWdfbG9naW4ocGhiYSwgMCwgcnBpLCBtYm94KTsKKwlzdGF0dXMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgbWJveCwgTFBGQ19NQk9YX1RNTyk7CisKKwlpZiAoKHN0YXR1cyAhPSBNQlhfU1VDQ0VTUykgfHwgKG1ib3gtPnUubWIubWJ4U3RhdHVzKSkgeworCQlpZiAoc3RhdHVzICE9IE1CWF9USU1FT1VUKQorCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gRUlPOworCX0KKworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjZGlhZ19sb29wX2dldF94cmkgLSBvYnRhaW5zIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBpZHMKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJwaTogUmVtb3RlIHBvcnQgbG9naW4gaWQKKyAqIEB0eHhyaTogUG9pbnRlciB0byB0cmFuc21pdCBleGNoYW5nZSBpZAorICogQHJ4eHJpOiBQb2ludGVyIHRvIHJlc3BvbnNlIGV4Y2hhYmdlIGlkCisgKgorICogVGhpcyBmdW5jdGlvbiBvYnRhaW5zIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBpZHMgcmVxdWlyZWQgdG8gc2VuZAorICogYW4gdW5zb2xpY2l0ZWQgY3QgY29tbWFuZCB3aXRoIGEgcGF5bG9hZC4gQSBzcGVjaWFsIGxwZmMgRnNUeXBlIGFuZCBDbWRSc3AKKyAqIGZsYWdzIGFyZSB1c2VkIHRvIHRoZSB1bnNvbGljdGVkIHJlc3BvbnNlIGhhbmRsZXIgaXMgYWJsZSB0byBwcm9jZXNzCisgKiB0aGUgY3QgY29tbWFuZCBzZW50IG9uIHRoZSBzYW1lIHBvcnQuCisgKiovCitzdGF0aWMgaW50IGxwZmNkaWFnX2xvb3BfZ2V0X3hyaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHJwaSwKKwkJCSB1aW50MTZfdCAqdHh4cmksIHVpbnQxNl90ICogcnh4cmkpCit7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLCAqcnNwaW9jYnE7CisJSU9DQl90ICpjbWQsICpyc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpkbWFidWY7CisJc3RydWN0IHVscF9iZGU2NCAqYnBsID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqY3RyZXEgPSBOVUxMOworCWludCByZXRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJKnR4eHJpID0gMDsKKwkqcnh4cmkgPSAwOworCWV2dCA9IGxwZmNfYnNnX2V2ZW50X25ldyhGQ19SRUdfQ1RfRVZFTlQsIGN1cnJlbnQtPnBpZCwKKwkJCQlTTElfQ1RfRUxYX0xPT1BCQUNLKTsKKwlpZiAoIWV2dCkKKwkJcmV0dXJuIEVOT01FTTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmV2dC0+bm9kZSwgJnBoYmEtPmN0X2V2X3dhaXRlcnMpOworCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKworCWNtZGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCisJZG1hYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRtYWJ1ZikgeworCQlkbWFidWYtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmRtYWJ1Zi0+cGh5cyk7CisJCUlOSVRfTElTVF9IRUFEKCZkbWFidWYtPmxpc3QpOworCQlicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSBkbWFidWYtPnZpcnQ7CisJCW1lbXNldChicGwsIDAsIHNpemVvZigqYnBsKSk7CisJCWN0cmVxID0gKHN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICopKGJwbCArIDEpOworCQlicGwtPmFkZHJIaWdoID0KKwkJCWxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChkbWFidWYtPnBoeXMgKyBzaXplb2YoKmJwbCkpKTsKKwkJYnBsLT5hZGRyTG93ID0KKwkJCWxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KGRtYWJ1Zi0+cGh5cyArIHNpemVvZigqYnBsKSkpOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gMDsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gRUxYX0xPT1BCQUNLX0hFQURFUl9TWjsKKwkJYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCX0KKworCWlmIChjbWRpb2NicSA9PSBOVUxMIHx8IHJzcGlvY2JxID09IE5VTEwgfHwKKwkgICAgZG1hYnVmID09IE5VTEwgfHwgYnBsID09IE5VTEwgfHwgY3RyZXEgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gRU5PTUVNOworCQlnb3RvIGVycl9nZXRfeHJpX2V4aXQ7CisJfQorCisJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKKworCW1lbXNldChjdHJlcSwgMCwgRUxYX0xPT1BCQUNLX0hFQURFUl9TWik7CisKKwljdHJlcS0+UmV2aXNpb25JZC5iaXRzLlJldmlzaW9uID0gU0xJX0NUX1JFVklTSU9OOworCWN0cmVxLT5SZXZpc2lvbklkLmJpdHMuSW5JZCA9IDA7CisJY3RyZXEtPkZzVHlwZSA9IFNMSV9DVF9FTFhfTE9PUEJBQ0s7CisJY3RyZXEtPkZzU3ViVHlwZSA9IDA7CisJY3RyZXEtPkNvbW1hbmRSZXNwb25zZS5iaXRzLkNtZFJzcCA9IEVMWF9MT09QQkFDS19YUklfU0VUVVA7CisJY3RyZXEtPkNvbW1hbmRSZXNwb25zZS5iaXRzLlNpemUgPSAwOworCisKKwljbWQtPnVuLnhzZXE2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2goZG1hYnVmLT5waHlzKTsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYWRkckxvdyA9IHB1dFBhZGRyTG93KGRtYWJ1Zi0+cGh5cyk7CisJY21kLT51bi54c2VxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYmRlU2l6ZSA9IHNpemVvZigqYnBsKTsKKworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRmN0bCA9IExBOworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRGZjdGwgPSAwOworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuUmN0bCA9IEZDX1JDVExfRERfVU5TT0xfQ1RMOworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuVHlwZSA9IEZDX1RZUEVfQ1Q7CisKKwljbWQtPnVscENvbW1hbmQgPSBDTURfWE1JVF9TRVFVRU5DRTY0X0NSOworCWNtZC0+dWxwQmRlQ291bnQgPSAxOworCWNtZC0+dWxwTGUgPSAxOworCWNtZC0+dWxwQ2xhc3MgPSBDTEFTUzM7CisJY21kLT51bHBDb250ZXh0ID0gcnBpOworCisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKwljbWRpb2NicS0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKworCXJldF92YWwgPSBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsCisJCQkJcnNwaW9jYnEsCisJCQkJKHBoYmEtPmZjX3JhdG92ICogMikKKwkJCQkrIExQRkNfRFJWUl9USU1FT1VUKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBlcnJfZ2V0X3hyaV9leGl0OworCisJKnR4eHJpID0gIHJzcC0+dWxwQ29udGV4dDsKKworCWV2dC0+d2FpdGluZyA9IDE7CisJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOworCXJldF92YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJZXZ0LT53cSwgIWxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX3NlZSksCisJCSgocGhiYS0+ZmNfcmF0b3YgKiAyKSArIExQRkNfRFJWUl9USU1FT1VUKSAqIEhaKTsKKwlpZiAobGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkKKwkJcmV0X3ZhbCA9IChyZXRfdmFsKSA/IEVJTlRSIDogRVRJTUVET1VUOworCWVsc2UgeworCQlyZXRfdmFsID0gSU9DQl9TVUNDRVNTOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlsaXN0X21vdmUoZXZ0LT5ldmVudHNfdG9fc2VlLnByZXYsICZldnQtPmV2ZW50c190b19nZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCSpyeHhyaSA9IChsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5wcmV2LAorCQkJCSAgICAgdHlwZW9mKHN0cnVjdCBldmVudF9kYXRhKSwKKwkJCQkgICAgIG5vZGUpKS0+aW1tZWRfZGF0OworCX0KKwlldnQtPndhaXRpbmcgPSAwOworCitlcnJfZ2V0X3hyaV9leGl0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOyAvKiBkZWxldGUgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisKKwlpZiAoZG1hYnVmKSB7CisJCWlmIChkbWFidWYtPnZpcnQpCisJCQlscGZjX21idWZfZnJlZShwaGJhLCBkbWFidWYtPnZpcnQsIGRtYWJ1Zi0+cGh5cyk7CisJCWtmcmVlKGRtYWJ1Zik7CisJfQorCisJaWYgKGNtZGlvY2JxICYmIChyZXRfdmFsICE9IElPQ0JfVElNRURPVVQpKQorCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlpZiAocnNwaW9jYnEpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqIGRpYWdfY21kX2RhdGFfYWxsb2MgLSBmaWxscyBpbiBhIGJkZSBzdHJ1Y3Qgd2l0aCBkbWEgYnVmZmVycworICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAYnBsOiBQb2ludGVyIHRvIDY0IGJpdCBiZGUgc3RydWN0dXJlCisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIHByb2Nlc3MKKyAqIEBub2NvcHlkYXRhOiBGbGFnIHRvIGNvcHkgdXNlciBkYXRhIGludG8gdGhlIGFsbG9jYXRlZCBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBwYWdlIHNpemUgYnVmZmVycyBhbmQgcG9wdWxhdGVzIGFuIGxwZmNfZG1hYnVmZXh0LgorICogSWYgYWxsb3dlZCB0aGUgdXNlciBkYXRhIHBvaW50ZWQgdG8gd2l0aCBpbmRhdGFwdHIgaXMgY29waWVkIGludG8gdGhlIGtlcm5lbAorICogbWVtb3J5LiBUaGUgY2hhaW5lZCBsaXN0IG9mIHBhZ2Ugc2l6ZSBidWZmZXJzIGlzIHJldHVybmVkLgorICoqLworc3RhdGljIHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqCitkaWFnX2NtZF9kYXRhX2FsbG9jKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJICAgc3RydWN0IHVscF9iZGU2NCAqYnBsLCB1aW50MzJfdCBzaXplLAorCQkgICBpbnQgbm9jb3B5ZGF0YSkKK3sKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKm1saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKmRtcDsKKwlpbnQgY250LCBvZmZzZXQgPSAwLCBpID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCisJcGNpZGV2ID0gcGhiYS0+cGNpZGV2OworCisJd2hpbGUgKHNpemUpIHsKKwkJLyogV2UgZ2V0IGNodW5rcyBvZiA0SyAqLworCQlpZiAoc2l6ZSA+IEJVRl9TWl80SykKKwkJCWNudCA9IEJVRl9TWl80SzsKKwkJZWxzZQorCQkJY250ID0gc2l6ZTsKKworCQkvKiBhbGxvY2F0ZSBzdHJ1Y3QgbHBmY19kbWFidWZleHQgYnVmZmVyIGhlYWRlciAqLworCQlkbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWZleHQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkbXApCisJCQlnb3RvIG91dDsKKworCQlJTklUX0xJU1RfSEVBRCgmZG1wLT5kbWEubGlzdCk7CisKKwkJLyogUXVldWUgaXQgdG8gYSBsaW5rZWQgbGlzdCAqLworCQlpZiAobWxpc3QpCisJCQlsaXN0X2FkZF90YWlsKCZkbXAtPmRtYS5saXN0LCAmbWxpc3QtPmRtYS5saXN0KTsKKwkJZWxzZQorCQkJbWxpc3QgPSBkbXA7CisKKwkJLyogYWxsb2NhdGUgYnVmZmVyICovCisJCWRtcC0+ZG1hLnZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBjaWRldi0+ZGV2LAorCQkJCQkJICAgY250LAorCQkJCQkJICAgJihkbXAtPmRtYS5waHlzKSwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOworCisJCWlmICghZG1wLT5kbWEudmlydCkKKwkJCWdvdG8gb3V0OworCisJCWRtcC0+c2l6ZSA9IGNudDsKKworCQlpZiAobm9jb3B5ZGF0YSkgeworCQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IDA7CisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocGhiYS0+cGNpZGV2LAorCQkJCWRtcC0+ZG1hLnBoeXMsIExQRkNfQlBMX1NJWkUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCX0gZWxzZSB7CisJCQltZW1zZXQoKHVpbnQ4X3QgKilkbXAtPmRtYS52aXJ0LCAwLCBjbnQpOworCQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjRJOworCQl9CisKKwkJLyogYnVpbGQgYnVmZmVyIHB0ciBsaXN0IGZvciBJT0NCICovCisJCWJwbC0+YWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KGRtcC0+ZG1hLnBoeXMpKTsKKwkJYnBsLT5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChkbXAtPmRtYS5waHlzKSk7CisJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9ICh1c2hvcnQpIGNudDsKKwkJYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCQlicGwrKzsKKworCQlpKys7CisJCW9mZnNldCArPSBjbnQ7CisJCXNpemUgLT0gY250OworCX0KKworCW1saXN0LT5mbGFnID0gaTsKKwlyZXR1cm4gbWxpc3Q7CitvdXQ6CisJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsIG1saXN0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBscGZjZGlhZ19sb29wX3Bvc3RfcnhidWZzIC0gcG9zdCB0aGUgcmVjZWl2ZSBidWZmZXJzIGZvciBhbiB1bnNvbCBDVCBjbWQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJ4eHJpOiBSZWNlaXZlIGV4Y2hhbmdlIGlkCisgKiBAbGVuOiBOdW1iZXIgb2YgZGF0YSBieXRlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuZCBwb3N0cyBhIGRhdGEgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSB0byByZWNpZXZlCisgKiBhbiB1bnNvbGljdGVkIENUIGNvbW1hbmQuCisgKiovCitzdGF0aWMgaW50IGxwZmNkaWFnX2xvb3BfcG9zdF9yeGJ1ZnMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCByeHhyaSwKKwkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOworCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwc2xpLT5yaW5nW0xQRkNfRUxTX1JJTkddOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicTsKKwlJT0NCX3QgKmNtZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkLCAqY3VyciwgKm5leHQ7CisJc3RydWN0IGxwZmNfZG1hYnVmICpyeGJtcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wWzJdID0ge05VTEwsIE5VTEx9OworCXN0cnVjdCB1bHBfYmRlNjQgKnJ4YnBsID0gTlVMTDsKKwl1aW50MzJfdCBudW1fYmRlOworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqcnhidWZmZXIgPSBOVUxMOworCWludCByZXRfdmFsID0gMDsKKwlpbnQgaSA9IDA7CisKKwljbWRpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwlyeGJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmIChyeGJtcCAhPSBOVUxMKSB7CisJCXJ4Ym1wLT52aXJ0ID0gbHBmY19tYnVmX2FsbG9jKHBoYmEsIDAsICZyeGJtcC0+cGh5cyk7CisJCUlOSVRfTElTVF9IRUFEKCZyeGJtcC0+bGlzdCk7CisJCXJ4YnBsID0gKHN0cnVjdCB1bHBfYmRlNjQgKikgcnhibXAtPnZpcnQ7CisJCXJ4YnVmZmVyID0gZGlhZ19jbWRfZGF0YV9hbGxvYyhwaGJhLCByeGJwbCwgbGVuLCAwKTsKKwl9CisKKwlpZiAoIWNtZGlvY2JxIHx8ICFyeGJtcCB8fCAhcnhicGwgfHwgIXJ4YnVmZmVyKSB7CisJCXJldF92YWwgPSBFTk9NRU07CisJCWdvdG8gZXJyX3Bvc3RfcnhidWZzX2V4aXQ7CisJfQorCisJLyogUXVldWUgYnVmZmVycyBmb3IgdGhlIHJlY2VpdmUgZXhjaGFuZ2UgKi8KKwludW1fYmRlID0gKHVpbnQzMl90KXJ4YnVmZmVyLT5mbGFnOworCWRtcCA9ICZyeGJ1ZmZlci0+ZG1hOworCisJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCWkgPSAwOworCisJSU5JVF9MSVNUX0hFQUQoJmhlYWQpOworCWxpc3RfYWRkX3RhaWwoJmhlYWQsICZkbXAtPmxpc3QpOworCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJyLCBuZXh0LCAmaGVhZCkgeworCQltcFtpXSA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKKwkJbGlzdF9kZWwoY3Vycik7CisKKwkJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkgeworCQkJbXBbaV0tPmJ1ZmZlcl90YWcgPSBscGZjX3NsaV9nZXRfYnVmZmVyX3RhZyhwaGJhKTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJkZS5hZGRySGlnaCA9CisJCQkJcHV0UGFkZHJIaWdoKG1wW2ldLT5waHlzKTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJkZS5hZGRyTG93ID0KKwkJCQlwdXRQYWRkckxvdyhtcFtpXS0+cGh5cyk7CisJCQljbWQtPnVuLnF1ZXhyaTY0Y3guYnVmZi5iZGUudHVzLmYuYmRlU2l6ZSA9CisJCQkJKChzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFtpXSktPnNpemU7CisJCQljbWQtPnVuLnF1ZXhyaTY0Y3guYnVmZi5idWZmZXJfdGFnID0gbXBbaV0tPmJ1ZmZlcl90YWc7CisJCQljbWQtPnVscENvbW1hbmQgPSBDTURfUVVFX1hSSTY0X0NYOworCQkJY21kLT51bHBQVSA9IDA7CisJCQljbWQtPnVscExlID0gMTsKKwkJCWNtZC0+dWxwQmRlQ291bnQgPSAxOworCQkJY21kLT51bnNsaTMucXVlX3hyaTY0Y3hfZXh0X3dvcmRzLmViZGVfY291bnQgPSAwOworCisJCX0gZWxzZSB7CisJCQljbWQtPnVuLmNvbnQ2NFtpXS5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChtcFtpXS0+cGh5cyk7CisJCQljbWQtPnVuLmNvbnQ2NFtpXS5hZGRyTG93ID0gcHV0UGFkZHJMb3cobXBbaV0tPnBoeXMpOworCQkJY21kLT51bi5jb250NjRbaV0udHVzLmYuYmRlU2l6ZSA9CisJCQkJKChzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFtpXSktPnNpemU7CisJCQkJCWNtZC0+dWxwQmRlQ291bnQgPSArK2k7CisKKwkJCWlmICgoLS1udW1fYmRlID4gMCkgJiYgKGkgPCAyKSkKKwkJCQljb250aW51ZTsKKworCQkJY21kLT51bHBDb21tYW5kID0gQ01EX1FVRV9YUklfQlVGNjRfQ1g7CisJCQljbWQtPnVscExlID0gMTsKKwkJfQorCisJCWNtZC0+dWxwQ2xhc3MgPSBDTEFTUzM7CisJCWNtZC0+dWxwQ29udGV4dCA9IHJ4eHJpOworCisJCXJldF92YWwgPSBscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCAwKTsKKworCQlpZiAocmV0X3ZhbCA9PSBJT0NCX0VSUk9SKSB7CisJCQlkaWFnX2NtZF9kYXRhX2ZyZWUocGhiYSwKKwkJCQkoc3RydWN0IGxwZmNfZG1hYnVmZXh0ICopbXBbMF0pOworCQkJaWYgKG1wWzFdKQorCQkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLAorCQkJCQkgIChzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFsxXSk7CisJCQlkbXAgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBscGZjX2RtYWJ1ZiwgbGlzdCk7CisJCQlyZXRfdmFsID0gRUlPOworCQkJZ290byBlcnJfcG9zdF9yeGJ1ZnNfZXhpdDsKKwkJfQorCisJCWxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChwaGJhLCBwcmluZywgbXBbMF0pOworCQlpZiAobXBbMV0pIHsKKwkJCWxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChwaGJhLCBwcmluZywgbXBbMV0pOworCQkJbXBbMV0gPSBOVUxMOworCQl9CisKKwkJLyogVGhlIGlvY2Igd2FzIGZyZWVkIGJ5IGxwZmNfc2xpX2lzc3VlX2lvY2IgKi8KKwkJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJCWlmICghY21kaW9jYnEpIHsKKwkJCWRtcCA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKKwkJCXJldF92YWwgPSBFSU87CisJCQlnb3RvIGVycl9wb3N0X3J4YnVmc19leGl0OworCQl9CisKKwkJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCQlpID0gMDsKKwl9CisJbGlzdF9kZWwoJmhlYWQpOworCitlcnJfcG9zdF9yeGJ1ZnNfZXhpdDoKKworCWlmIChyeGJtcCkgeworCQlpZiAocnhibXAtPnZpcnQpCisJCQlscGZjX21idWZfZnJlZShwaGJhLCByeGJtcC0+dmlydCwgcnhibXAtPnBoeXMpOworCQlrZnJlZShyeGJtcCk7CisJfQorCisJaWYgKGNtZGlvY2JxKQorCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBscGZjX2JzZ19kaWFnX3Rlc3QgLSB3aXRoIGEgcG9ydCBpbiBsb29wYmFjayBpc3N1ZXMgYSBDdCBjbWQgdG8gaXRzZWxmCisgKiBAam9iOiBMUEZDX0JTR19WRU5ET1JfRElBR19URVNUIGZjX2JzZ19qb2IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGEgdXNlciBkYXRhIGJ1ZmZlciB0byBiZSB0cmFuc21pdHRlZCBhbmQgcmVjZWl2ZWQgb24KKyAqIHRoZSBzYW1lIHBvcnQsIHRoZSBsaW5rIG11c3QgYmUgdXAgYW5kIGluIGxvb3BiYWNrIG1vZGUgcHJpb3IKKyAqIHRvIGJlaW5nIGNhbGxlZC4KKyAqIDEuIEEga2VybmVsIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgdG8gY29weSB0aGUgdXNlciBkYXRhIGludG8uCisgKiAyLiBUaGUgcG9ydCByZWdpc3RlcnMgd2l0aCAiaXRzZWxmIi4KKyAqIDMuIFRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBleGNoYW5nZSBpZHMgYXJlIG9idGFpbmVkLgorICogNC4gVGhlIHJlY2VpdmUgZXhjaGFuZ2UgaWQgaXMgcG9zdGVkLgorICogNS4gQSBuZXcgZWxzIGxvb3BiYWNrIGV2ZW50IGlzIGNyZWF0ZWQuCisgKiA2LiBUaGUgY29tbWFuZCBhbmQgcmVzcG9uc2UgaW9jYnMgYXJlIGFsbG9jYXRlZC4KKyAqIDcuIFRoZSBjbWQgaW9jYiBGc1R5cGUgaXMgc2V0IHRvIGVseCBsb29wYmFjayBhbmQgdGhlIENtZFJzcCB0byBsb29wcGJhY2suCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBjYWxsZWQgbiB0aW1lcyB3aGlsZSB0aGUgcG9ydCBpcyBpbiBsb29wYmFjaworICogc28gaXQgaXMgdGhlIGFwcHMgcmVzcG9uc2liaWxpdHkgdG8gaXNzdWUgYSByZXNldCB0byB0YWtlIHRoZSBwb3J0IG91dAorICogb2YgbG9vcGJhY2sgbW9kZS4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX2RpYWdfdGVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBkaWFnX21vZGVfdGVzdCAqZGlhZ19tb2RlOworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OworCXN0cnVjdCBldmVudF9kYXRhICpldmRhdDsKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOworCXVpbnQzMl90IHNpemU7CisJdWludDMyX3QgZnVsbF9zaXplOworCXNpemVfdCBzZWdtZW50X2xlbiA9IDAsIHNlZ21lbnRfb2Zmc2V0ID0gMCwgY3VycmVudF9vZmZzZXQgPSAwOworCXVpbnQxNl90IHJwaTsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEsICpyc3Bpb2NicTsKKwlJT0NCX3QgKmNtZCwgKnJzcDsKKwlzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqY3RyZXE7CisJc3RydWN0IGxwZmNfZG1hYnVmICp0eGJtcDsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICp0eGJwbCA9IE5VTEw7CisJc3RydWN0IGxwZmNfZG1hYnVmZXh0ICp0eGJ1ZmZlciA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAgKmN1cnI7CisJdWludDE2X3QgdHh4cmksIHJ4eHJpOworCXVpbnQzMl90IG51bV9iZGU7CisJdWludDhfdCAqcHRyID0gTlVMTCwgKnJ4X2RhdGFidWYgPSBOVUxMOworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICpkYXRhb3V0ID0gTlVMTDsKKwl1aW50MzJfdCB0b3RhbF9tZW07CisKKwkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgcmV0dXJuZWQgcmV0dXJuIGp1c3QgdGhlIHJldHVybiBjb2RlICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGRpYWdfbW9kZV90ZXN0KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM5IFJlY2VpdmVkIERJQUcgVEVTVCByZXF1ZXN0IGJlbG93IG1pbmltdW0gIgorCQkJCSJzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlpZiAoam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4gIT0KKwkJam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJZGlhZ19tb2RlID0gKHN0cnVjdCBkaWFnX21vZGVfdGVzdCAqKQorCQlqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOworCisJaWYgKChwaGJhLT5saW5rX3N0YXRlID09IExQRkNfSEJBX0VSUk9SKSB8fAorCSAgICAocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX0JMT0NLX01HTVRfSU8pIHx8CisJICAgICghKHBzbGktPnNsaV9mbGFnICYgTFBGQ19TTElfQUNUSVZFKSkpIHsKKwkJcmMgPSAtRUFDQ0VTOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlpZiAoIWxwZmNfaXNfbGlua191cChwaGJhKSB8fCAhKHBoYmEtPmxpbmtfZmxhZyAmIExTX0xPT1BCQUNLX01PREUpKSB7CisJCXJjID0gLUVBQ0NFUzsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJc2l6ZSA9IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCWZ1bGxfc2l6ZSA9IHNpemUgKyBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOyAvKiBwbHVzIHRoZSBoZWFkZXIgKi8KKworCWlmICgoc2l6ZSA9PSAwKSB8fCAoc2l6ZSA+IDgwICogQlVGX1NaXzRLKSkgeworCQlyYyA9IC1FUkFOR0U7CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCWlmIChzaXplID49IEJVRl9TWl80SykgeworCQkvKgorCQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGlvY3RsIGRhdGEuIElmIGJ1ZmZlciBpcyBiaWdnZXIgdGhhbiA2NGssCisJCSAqIHRoZW4gd2UgYWxsb2NhdGUgNjRrIGFuZCByZS11c2UgdGhhdCBidWZmZXIgb3ZlciBhbmQgb3ZlciB0bworCQkgKiB4ZmVyIHRoZSB3aG9sZSBibG9jay4gVGhpcyBpcyBiZWNhdXNlIExpbnV4IGtlcm5lbCBoYXMgYQorCQkgKiBwcm9ibGVtIGFsbG9jYXRpbmcgbW9yZSB0aGFuIDEyMGsgb2Yga2VybmVsIHNwYWNlIG1lbW9yeS4gU2F3CisJCSAqIHByb2JsZW0gd2l0aCBHRVRfRkNQVEFSR0VUTUFQUElORy4uLgorCQkgKi8KKwkJaWYgKHNpemUgPD0gKDY0ICogMTAyNCkpCisJCQl0b3RhbF9tZW0gPSBzaXplOworCQllbHNlCisJCQl0b3RhbF9tZW0gPSA2NCAqIDEwMjQ7CisJfSBlbHNlCisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW9jdGwgZGF0YSAqLworCQl0b3RhbF9tZW0gPSBCVUZfU1pfNEs7CisKKwlkYXRhb3V0ID0ga21hbGxvYyh0b3RhbF9tZW0sIEdGUF9LRVJORUwpOworCWlmIChkYXRhb3V0ID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlwdHIgPSBkYXRhb3V0OworCXB0ciArPSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOworCXNnX2NvcHlfdG9fYnVmZmVyKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkJam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAorCQkJCXB0ciwgc2l6ZSk7CisKKwlyYyA9IGxwZmNkaWFnX2xvb3Bfc2VsZl9yZWcocGhiYSwgJnJwaSk7CisJaWYgKHJjKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJcmMgPSBscGZjZGlhZ19sb29wX2dldF94cmkocGhiYSwgcnBpLCAmdHh4cmksICZyeHhyaSk7CisJaWYgKHJjKSB7CisJCWxwZmNkaWFnX2xvb3Bfc2VsZl91bnJlZyhwaGJhLCBycGkpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCXJjID0gbHBmY2RpYWdfbG9vcF9wb3N0X3J4YnVmcyhwaGJhLCByeHhyaSwgZnVsbF9zaXplKTsKKwlpZiAocmMpIHsKKwkJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJZXZ0ID0gbHBmY19ic2dfZXZlbnRfbmV3KEZDX1JFR19DVF9FVkVOVCwgY3VycmVudC0+cGlkLAorCQkJCVNMSV9DVF9FTFhfTE9PUEJBQ0spOworCWlmICghZXZ0KSB7CisJCWxwZmNkaWFnX2xvb3Bfc2VsZl91bnJlZyhwaGJhLCBycGkpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmV2dC0+bm9kZSwgJnBoYmEtPmN0X2V2X3dhaXRlcnMpOworCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKworCWNtZGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXR4Ym1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAodHhibXApIHsKKwkJdHhibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJnR4Ym1wLT5waHlzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnR4Ym1wLT5saXN0KTsKKwkJdHhicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSB0eGJtcC0+dmlydDsKKwkJaWYgKHR4YnBsKQorCQkJdHhidWZmZXIgPSBkaWFnX2NtZF9kYXRhX2FsbG9jKHBoYmEsCisJCQkJCQkJdHhicGwsIGZ1bGxfc2l6ZSwgMCk7CisJfQorCisJaWYgKCFjbWRpb2NicSB8fCAhcnNwaW9jYnEgfHwgIXR4Ym1wIHx8ICF0eGJwbCB8fCAhdHhidWZmZXIpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9sb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKKworCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKKwlsaXN0X2FkZF90YWlsKCZoZWFkLCAmdHhidWZmZXItPmRtYS5saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cnIsICZoZWFkLCBsaXN0KSB7CisJCXNlZ21lbnRfbGVuID0gKChzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiljdXJyKS0+c2l6ZTsKKwkJaWYgKGN1cnJlbnRfb2Zmc2V0ID09IDApIHsKKwkJCWN0cmVxID0gY3Vyci0+dmlydDsKKwkJCW1lbXNldChjdHJlcSwgMCwgRUxYX0xPT1BCQUNLX0hFQURFUl9TWik7CisJCQljdHJlcS0+UmV2aXNpb25JZC5iaXRzLlJldmlzaW9uID0gU0xJX0NUX1JFVklTSU9OOworCQkJY3RyZXEtPlJldmlzaW9uSWQuYml0cy5JbklkID0gMDsKKwkJCWN0cmVxLT5Gc1R5cGUgPSBTTElfQ1RfRUxYX0xPT1BCQUNLOworCQkJY3RyZXEtPkZzU3ViVHlwZSA9IDA7CisJCQljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwID0gRUxYX0xPT1BCQUNLX0RBVEE7CisJCQljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuU2l6ZSAgID0gc2l6ZTsKKwkJCXNlZ21lbnRfb2Zmc2V0ID0gRUxYX0xPT1BCQUNLX0hFQURFUl9TWjsKKwkJfSBlbHNlCisJCQlzZWdtZW50X29mZnNldCA9IDA7CisKKwkJQlVHX09OKHNlZ21lbnRfb2Zmc2V0ID49IHNlZ21lbnRfbGVuKTsKKwkJbWVtY3B5KGN1cnItPnZpcnQgKyBzZWdtZW50X29mZnNldCwKKwkJCXB0ciArIGN1cnJlbnRfb2Zmc2V0LAorCQkJc2VnbWVudF9sZW4gLSBzZWdtZW50X29mZnNldCk7CisKKwkJY3VycmVudF9vZmZzZXQgKz0gc2VnbWVudF9sZW4gLSBzZWdtZW50X29mZnNldDsKKwkJQlVHX09OKGN1cnJlbnRfb2Zmc2V0ID4gc2l6ZSk7CisJfQorCWxpc3RfZGVsKCZoZWFkKTsKKworCS8qIEJ1aWxkIHRoZSBYTUlUX1NFUVVFTkNFIGlvY2IgKi8KKworCW51bV9iZGUgPSAodWludDMyX3QpdHhidWZmZXItPmZsYWc7CisKKwljbWQtPnVuLnhzZXE2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2godHhibXAtPnBoeXMpOworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3codHhibXAtPnBoeXMpOworCWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CisJY21kLT51bi54c2VxNjQuYmRsLmJkZVNpemUgPSAobnVtX2JkZSAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSk7CisKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LkZjdGwgPSAoTFMgfCBMQSk7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5EZmN0bCA9IDA7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5SY3RsID0gRkNfUkNUTF9ERF9VTlNPTF9DVEw7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5UeXBlID0gRkNfVFlQRV9DVDsKKworCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1g7CisJY21kLT51bHBCZGVDb3VudCA9IDE7CisJY21kLT51bHBMZSA9IDE7CisJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwljbWQtPnVscENvbnRleHQgPSB0eHhyaTsKKworCWNtZGlvY2JxLT5pb2NiX2ZsYWcgfD0gTFBGQ19JT19MSUJERkM7CisJY21kaW9jYnEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwgcnNwaW9jYnEsCisJCQkJICAgICAgKHBoYmEtPmZjX3JhdG92ICogMikgKyBMUEZDX0RSVlJfVElNRU9VVCk7CisKKwlpZiAoKHJjICE9IElPQ0JfU1VDQ0VTUykgfHwgKHJzcC0+dWxwU3RhdHVzICE9IElPQ0JfU1VDQ0VTUykpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9sb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJZXZ0LT53YWl0aW5nID0gMTsKKwlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQlldnQtPndxLCAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSwKKwkJKChwaGJhLT5mY19yYXRvdiAqIDIpICsgTFBGQ19EUlZSX1RJTUVPVVQpICogSFopOworCWV2dC0+d2FpdGluZyA9IDA7CisJaWYgKGxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX3NlZSkpCisJCXJjID0gKHJjKSA/IC1FSU5UUiA6IC1FVElNRURPVVQ7CisJZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCWxpc3RfbW92ZShldnQtPmV2ZW50c190b19zZWUucHJldiwgJmV2dC0+ZXZlbnRzX3RvX2dldCk7CisJCWV2ZGF0ID0gbGlzdF9lbnRyeShldnQtPmV2ZW50c190b19nZXQucHJldiwKKwkJCQkgICB0eXBlb2YoKmV2ZGF0KSwgbm9kZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJcnhfZGF0YWJ1ZiA9IGV2ZGF0LT5kYXRhOworCQlpZiAoZXZkYXQtPmxlbiAhPSBmdWxsX3NpemUpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJQkRGQywKKwkJCQkiMTYwMyBMb29wYmFjayB0ZXN0IGRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCAiCisJCQkJImRhdGEgbGVuZ3RoLiBhY3R1YWwgbGVuZ3RoIDB4JXggZXhwZWN0ZWQgIgorCQkJCSJsZW5ndGggMHgleFxuIiwKKwkJCQlldmRhdC0+bGVuLCBmdWxsX3NpemUpOworCQkJcmMgPSAtRUlPOworCQl9IGVsc2UgaWYgKHJ4X2RhdGFidWYgPT0gTlVMTCkKKwkJCXJjID0gLUVJTzsKKwkJZWxzZSB7CisJCQlyYyA9IElPQ0JfU1VDQ0VTUzsKKwkJCS8qIHNraXAgb3ZlciBlbHggbG9vcGJhY2sgaGVhZGVyICovCisJCQlyeF9kYXRhYnVmICs9IEVMWF9MT09QQkFDS19IRUFERVJfU1o7CisJCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJCXNnX2NvcHlfZnJvbV9idWZmZXIoam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCQkJCQkgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCQkJCSAgICByeF9kYXRhYnVmLCBzaXplKTsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IHNpemU7CisJCX0KKwl9CisKK2Vycl9sb29wYmFja190ZXN0X2V4aXQ6CisJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7IC8qIHJlbGVhc2UgcmVmICovCisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsgLyogZGVsZXRlICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCisJaWYgKGNtZGlvY2JxICE9IE5VTEwpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCisJaWYgKHJzcGlvY2JxICE9IE5VTEwpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCisJaWYgKHR4Ym1wICE9IE5VTEwpIHsKKwkJaWYgKHR4YnBsICE9IE5VTEwpIHsKKwkJCWlmICh0eGJ1ZmZlciAhPSBOVUxMKQorCQkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLCB0eGJ1ZmZlcik7CisJCQlscGZjX21idWZfZnJlZShwaGJhLCB0eGJtcC0+dmlydCwgdHhibXAtPnBoeXMpOworCQl9CisJCWtmcmVlKHR4Ym1wKTsKKwl9CisKK2xvb3BiYWNrX3Rlc3RfZXhpdDoKKwlrZnJlZShkYXRhb3V0KTsKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSBpZiBubyBlcnJvciAqLworCWlmIChyYyA9PSAwKQorCQlqb2ItPmpvYl9kb25lKGpvYik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX2dldF9kZmNfcmV2IC0gcHJvY2VzcyBhIEdFVF9ERkNfUkVWIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogR0VUX0RGQ19SRVYgZmNfYnNnX2pvYgorICoqLworc3RhdGljIGludAorbHBmY19ic2dfZ2V0X2RmY19yZXYoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlzdHJ1Y3QgZ2V0X21nbXRfcmV2ICpldmVudF9yZXE7CisJc3RydWN0IGdldF9tZ210X3Jldl9yZXBseSAqZXZlbnRfcmVwbHk7CisJaW50IHJjID0gMDsKKworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGdldF9tZ210X3JldikpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjc0MCBSZWNlaXZlZCBHRVRfREZDX1JFViByZXF1ZXN0IGJlbG93ICIKKwkJCQkibWluaW11bSBzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlldmVudF9yZXEgPSAoc3RydWN0IGdldF9tZ210X3JldiAqKQorCQlqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOworCisJZXZlbnRfcmVwbHkgPSAoc3RydWN0IGdldF9tZ210X3Jldl9yZXBseSAqKQorCQlqb2ItPnJlcGx5LT5yZXBseV9kYXRhLnZlbmRvcl9yZXBseS52ZW5kb3JfcnNwOworCisJaWYgKGpvYi0+cmVwbHlfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGdldF9tZ210X3Jldl9yZXBseSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjc0MSBSZWNlaXZlZCBHRVRfREZDX1JFViByZXBseSBiZWxvdyAiCisJCQkJIm1pbmltdW0gc2l6ZVxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJZXZlbnRfcmVwbHktPmluZm8uYV9NYWpvciA9IE1BTkFHRU1FTlRfTUFKT1JfUkVWOworCWV2ZW50X3JlcGx5LT5pbmZvLmFfTWlub3IgPSBNQU5BR0VNRU5UX01JTk9SX1JFVjsKK2pvYl9lcnJvcjoKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlpZiAocmMgPT0gMCkKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ193YWtlX21ib3hfd2FpdCAtIGxwZmNfYnNnX2lzc3VlX21ib3ggbWJveCBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwbWJveHE6IFBvaW50ZXIgdG8gbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgaXMgY29tcGxldGlvbiBoYW5kbGVyIGZ1bmN0aW9uIGZvciBtYWlsYm94IGNvbW1hbmRzIGlzc3VlZCBmcm9tCisgKiBscGZjX2JzZ19pc3N1ZV9tYm94IGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIG1haWxib3ggZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRoIG5vIGxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbgorICogd2lsbCB3YWtlIHVwIHRocmVhZCB3YWl0aW5nIG9uIHRoZSB3YWl0IHF1ZXVlIHBvaW50ZWQgYnkgY29udGV4dDEKKyAqIG9mIHRoZSBtYWlsYm94LgorICoqLwordm9pZAorbHBmY19ic2dfd2FrZV9tYm94X3dhaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYm94cSkKK3sKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCU1BSUxCT1hfdCAqcG1iOworCU1BSUxCT1hfdCAqbWI7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwl1aW50MzJfdCBzaXplOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWRkX2RhdGEgPSBwbWJveHEtPmNvbnRleHQxOworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlwbWIgPSAmZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnBtYm94cS0+dS5tYjsKKwltYiA9IGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5tYjsKKwlqb2IgPSBkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3guc2V0X2pvYjsKKwltZW1jcHkobWIsIHBtYiwgc2l6ZW9mKCpwbWIpKTsKKwlzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LAorCQkJCW1iLCBzaXplKTsKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCWRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5zZXRfam9iID0gTlVMTDsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCWpvYi0+am9iX2RvbmUoam9iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbWVtcG9vbF9mcmVlKGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5wbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCWtmcmVlKG1iKTsKKwlrZnJlZShkZF9kYXRhKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19ic2dfY2hlY2tfY21kX2FjY2VzcyAtIHRlc3QgZm9yIGEgc3VwcG9ydGVkIG1haWxib3ggY29tbWFuZAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1iOiBQb2ludGVyIHRvIGEgbWFpbGJveCBvYmplY3QuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gYSB2cG9ydCBvYmplY3QuCisgKgorICogU29tZSBjb21tYW5kcyByZXF1aXJlIHRoZSBwb3J0IHRvIGJlIG9mZmxpbmUsIHNvbWUgbWF5IG5vdCBiZSBjYWxsZWQgZnJvbQorICogdGhlIGFwcGxpY2F0aW9uLgorICoqLworc3RhdGljIGludCBscGZjX2JzZ19jaGVja19jbWRfYWNjZXNzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwlNQUlMQk9YX3QgKm1iLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJLyogcmV0dXJuIG5lZ2F0aXZlIGVycm9yIHZhbHVlcyBmb3IgYnNnIGpvYiAqLworCXN3aXRjaCAobWItPm1ieENvbW1hbmQpIHsKKwkvKiBPZmZsaW5lIG9ubHkgKi8KKwljYXNlIE1CWF9JTklUX0xJTks6CisJY2FzZSBNQlhfRE9XTl9MSU5LOgorCWNhc2UgTUJYX0NPTkZJR19MSU5LOgorCWNhc2UgTUJYX0NPTkZJR19SSU5HOgorCWNhc2UgTUJYX1JFU0VUX1JJTkc6CisJY2FzZSBNQlhfVU5SRUdfTE9HSU46CisJY2FzZSBNQlhfQ0xFQVJfTEE6CisJY2FzZSBNQlhfRFVNUF9DT05URVhUOgorCWNhc2UgTUJYX1JVTl9ESUFHUzoKKwljYXNlIE1CWF9SRVNUQVJUOgorCWNhc2UgTUJYX1NFVF9NQVNLOgorCQlpZiAoISh2cG9ydC0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3NDMgQ29tbWFuZCAweCV4IGlzIGlsbGVnYWwgaW4gb24tbGluZSAiCisJCQkJInN0YXRlXG4iLAorCQkJCW1iLT5tYnhDb21tYW5kKTsKKwkJCXJldHVybiAtRVBFUk07CisJCX0KKwljYXNlIE1CWF9XUklURV9OVjoKKwljYXNlIE1CWF9XUklURV9WUEFSTVM6CisJY2FzZSBNQlhfTE9BRF9TTToKKwljYXNlIE1CWF9SRUFEX05WOgorCWNhc2UgTUJYX1JFQURfQ09ORklHOgorCWNhc2UgTUJYX1JFQURfUkNPTkZJRzoKKwljYXNlIE1CWF9SRUFEX1NUQVRVUzoKKwljYXNlIE1CWF9SRUFEX1hSSToKKwljYXNlIE1CWF9SRUFEX1JFVjoKKwljYXNlIE1CWF9SRUFEX0xOS19TVEFUOgorCWNhc2UgTUJYX0RVTVBfTUVNT1JZOgorCWNhc2UgTUJYX0RPV05fTE9BRDoKKwljYXNlIE1CWF9VUERBVEVfQ0ZHOgorCWNhc2UgTUJYX0tJTExfQk9BUkQ6CisJY2FzZSBNQlhfTE9BRF9BUkVBOgorCWNhc2UgTUJYX0xPQURfRVhQX1JPTToKKwljYXNlIE1CWF9CRUFDT046CisJY2FzZSBNQlhfREVMX0xEX0VOVFJZOgorCWNhc2UgTUJYX1NFVF9ERUJVRzoKKwljYXNlIE1CWF9XUklURV9XV046CisJY2FzZSBNQlhfU0xJNF9DT05GSUc6CisJY2FzZSBNQlhfUkVBRF9FVkVOVF9MT0dfU1RBVFVTOgorCWNhc2UgTUJYX1dSSVRFX0VWRU5UX0xPRzoKKwljYXNlIE1CWF9QT1JUX0NBUEFCSUxJVElFUzoKKwljYXNlIE1CWF9QT1JUX0lPVl9DT05UUk9MOgorCQlicmVhazsKKwljYXNlIE1CWF9TRVRfVkFSSUFCTEU6CisJY2FzZSBNQlhfUlVOX0JJVV9ESUFHNjQ6CisJY2FzZSBNQlhfUkVBRF9FVkVOVF9MT0c6CisJY2FzZSBNQlhfUkVBRF9TUEFSTTY0OgorCWNhc2UgTUJYX1JFQURfTEE6CisJY2FzZSBNQlhfUkVBRF9MQTY0OgorCWNhc2UgTUJYX1JFR19MT0dJTjoKKwljYXNlIE1CWF9SRUdfTE9HSU42NDoKKwljYXNlIE1CWF9DT05GSUdfUE9SVDoKKwljYXNlIE1CWF9SVU5fQklVX0RJQUc6CisJZGVmYXVsdDoKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCSIyNzQyIFVua25vd24gQ29tbWFuZCAweCV4XG4iLAorCQkJbWItPm1ieENvbW1hbmQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXJldHVybiAwOyAvKiBvayAqLworfQorCisvKioKKyAqIGxwZmNfYnNnX2lzc3VlX21ib3ggLSBpc3N1ZXMgYSBtYWlsYm94IGNvbW1hbmQgb24gYmVoYWxmIG9mIGFuIGFwcAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1iOiBQb2ludGVyIHRvIGEgbWFpbGJveCBvYmplY3QuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gYSB2cG9ydCBvYmplY3QuCisgKgorICogQWxsb2NhdGUgYSB0cmFja2luZyBvYmplY3QsIG1haWxib3ggY29tbWFuZCBtZW1vcnksIGdldCBhIG1haWxib3gKKyAqIGZyb20gdGhlIG1haWxib3ggcG9vbCwgY29weSB0aGUgY2FsbGVyIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBJZiBvZmZsaW5lIGFuZCB0aGUgc2xpIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHBvbGwgZm9yIHRoZSBjb21tYW5kIChwb3J0IGlzCisgKiBiZWluZyByZXNldCkgYW5kIGNvbS1wbGV0ZSB0aGUgam9iLCBvdGhlcndpc2UgaXNzdWUgdGhlIG1haWxib3ggY29tbWFuZCBhbmQKKyAqIGxldCBvdXIgY29tcGxldGlvbiBoYW5kbGVyIGZpbmlzaCB0aGUgY29tbWFuZC4KKyAqKi8KK3N0YXRpYyB1aW50MzJfdAorbHBmY19ic2dfaXNzdWVfbWJveChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBmY19ic2dfam9iICpqb2IsCisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCUxQRkNfTUJPWFFfdCAqcG1ib3hxOworCU1BSUxCT1hfdCAqcG1iOworCU1BSUxCT1hfdCAqbWI7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1aW50MzJfdCBzaXplOworCWludCByYyA9IDA7CisKKwkvKiBhbGxvY2F0ZSBvdXIgYnNnIHRyYWNraW5nIHN0cnVjdHVyZSAqLworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZF9kYXRhKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MjcgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1iID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbWIpIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBtYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbWJveHEpIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2l6ZSA9IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCXNnX2NvcHlfdG9fYnVmZmVyKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkJam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAorCQkJCW1iLCBzaXplKTsKKworCXJjID0gbHBmY19ic2dfY2hlY2tfY21kX2FjY2VzcyhwaGJhLCBtYiwgdnBvcnQpOworCWlmIChyYyAhPSAwKSB7CisJCWtmcmVlKGRkX2RhdGEpOworCQlrZnJlZShtYik7CisJCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gcmM7IC8qIG11c3QgYmUgbmVnYXRpdmUgKi8KKwl9CisKKwltZW1zZXQocG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJcG1iID0gJnBtYm94cS0+dS5tYjsKKwltZW1jcHkocG1iLCBtYiwgc2l6ZW9mKCpwbWIpKTsKKwlwbWItPm1ieE93bmVyID0gT1dOX0hPU1Q7CisJcG1ib3hxLT5jb250ZXh0MSA9IE5VTEw7CisJcG1ib3hxLT52cG9ydCA9IHZwb3J0OworCisJaWYgKCh2cG9ydC0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkgfHwKKwkgICAgKCEocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19TTElfQUNUSVZFKSkpIHsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYm94cSwgTUJYX1BPTEwpOworCQlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKKwkJCWlmIChyYyAhPSBNQlhfVElNRU9VVCkgeworCQkJCWtmcmVlKGRkX2RhdGEpOworCQkJCWtmcmVlKG1iKTsKKwkJCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJCX0KKwkJCXJldHVybiAgKHJjID09IE1CWF9USU1FT1VUKSA/IC1FVElNRSA6IC1FTk9ERVY7CisJCX0KKworCQltZW1jcHkobWIsIHBtYiwgc2l6ZW9mKCpwbWIpKTsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXNnX2NvcHlfZnJvbV9idWZmZXIoam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsCisJCQkJCW1iLCBzaXplKTsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCS8qIG5vdCB3YWl0aW5nIG1ib3ggYWxyZWFkeSBkb25lICovCisJCXJldHVybiAwOworCX0KKworCS8qIHNldHVwIHdha2UgY2FsbCBhcyBJT0NCIGNhbGxiYWNrICovCisJcG1ib3hxLT5tYm94X2NtcGwgPSBscGZjX2JzZ193YWtlX21ib3hfd2FpdDsKKwkvKiBzZXR1cCBjb250ZXh0IGZpZWxkIHRvIHBhc3Mgd2FpdF9xdWV1ZSBwb2ludGVyIHRvIHdha2UgZnVuY3Rpb24gKi8KKwlwbWJveHEtPmNvbnRleHQxID0gZGRfZGF0YTsKKwlkZF9kYXRhLT50eXBlID0gVFlQRV9NQk9YOworCWRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5wbWJveHEgPSBwbWJveHE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94Lm1iID0gbWI7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnNldF9qb2IgPSBqb2I7CisJam9iLT5kZF9kYXRhID0gZGRfZGF0YTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1ib3hxLCBNQlhfTk9XQUlUKTsKKwlpZiAoKHJjICE9IE1CWF9TVUNDRVNTKSAmJiAocmMgIT0gTUJYX0JVU1kpKSB7CisJCWtmcmVlKGRkX2RhdGEpOworCQlrZnJlZShtYik7CisJCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBscGZjX2JzZ19tYm94X2NtZCAtIHByb2Nlc3MgYW4gZmMgYnNnIExQRkNfQlNHX1ZFTkRPUl9NQk9YIGNvbW1hbmQKKyAqIEBqb2I6IE1CT1ggZmNfYnNnX2pvYiBmb3IgTFBGQ19CU0dfVkVORE9SX01CT1guCisgKiovCitzdGF0aWMgaW50CitscGZjX2JzZ19tYm94X2NtZChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCWludCByYyA9IDA7CisKKwkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGRmY19tYm94X3JlcSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjczNyBSZWNlaXZlZCBNQk9YX1JFUSByZXF1ZXN0IGJlbG93ICIKKwkJCQkibWluaW11bSBzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlpZiAoam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4gIT0gUEFHRV9TSVpFKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJaWYgKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfQkxPQ0tfTUdNVF9JTykgeworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCXJjID0gbHBmY19ic2dfaXNzdWVfbWJveChwaGJhLCBqb2IsIHZwb3J0KTsKKworam9iX2Vycm9yOgorCWlmIChyYyA9PSAwKSB7CisJCS8qIGpvYiBkb25lICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCWpvYi0+am9iX2RvbmUoam9iKTsKKwl9IGVsc2UgaWYgKHJjID09IDEpCisJCS8qIGpvYiBzdWJtaXR0ZWQsIHdpbGwgY29tcGxldGUgbGF0ZXIqLworCQlyYyA9IDA7IC8qIHJldHVybiB6ZXJvLCBubyBlcnJvciAqLworCWVsc2UgeworCQkvKiBzb21lIGVycm9yIG9jY3VycmVkICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCQlqb2ItPmRkX2RhdGEgPSBOVUxMOworCX0KIAogCXJldHVybiByYzsKIH0KQEAgLTgzNCwzOCArMjY0MCw1NyBAQAogLyoqCiAgKiBscGZjX2JzZ19oc3RfdmVuZG9yIC0gcHJvY2VzcyBhIHZlbmRvci1zcGVjaWZpYyBmY19ic2dfam9iCiAgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQotICovCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2JzZ19oc3RfdmVuZG9yKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CiAJaW50IGNvbW1hbmQgPSBqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kWzBdOworCWludCByYzsKIAogCXN3aXRjaCAoY29tbWFuZCkgewogCWNhc2UgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVDoKLQkJcmV0dXJuIGxwZmNfYnNnX3NldF9ldmVudChqb2IpOworCQlyYyA9IGxwZmNfYnNnX2hiYV9zZXRfZXZlbnQoam9iKTsKIAkJYnJlYWs7Ci0KIAljYXNlIExQRkNfQlNHX1ZFTkRPUl9HRVRfQ1RfRVZFTlQ6Ci0JCXJldHVybiBscGZjX2JzZ19nZXRfZXZlbnQoam9iKTsKKwkJcmMgPSBscGZjX2JzZ19oYmFfZ2V0X2V2ZW50KGpvYik7CiAJCWJyZWFrOwotCisJY2FzZSBMUEZDX0JTR19WRU5ET1JfU0VORF9NR01UX1JFU1A6CisJCXJjID0gbHBmY19ic2dfc2VuZF9tZ210X3JzcChqb2IpOworCQlicmVhazsKKwljYXNlIExQRkNfQlNHX1ZFTkRPUl9ESUFHX01PREU6CisJCXJjID0gbHBmY19ic2dfZGlhZ19tb2RlKGpvYik7CisJCWJyZWFrOworCWNhc2UgTFBGQ19CU0dfVkVORE9SX0RJQUdfVEVTVDoKKwkJcmMgPSBscGZjX2JzZ19kaWFnX3Rlc3Qoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfR0VUX01HTVRfUkVWOgorCQlyYyA9IGxwZmNfYnNnX2dldF9kZmNfcmV2KGpvYik7CisJCWJyZWFrOworCWNhc2UgTFBGQ19CU0dfVkVORE9SX01CT1g6CisJCXJjID0gbHBmY19ic2dfbWJveF9jbWQoam9iKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJjID0gLUVJTlZBTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJCWJyZWFrOwogCX0KKworCXJldHVybiByYzsKIH0KIAogLyoqCiAgKiBscGZjX2JzZ19yZXF1ZXN0IC0gaGFuZGxlIGEgYnNnIHJlcXVlc3QgZnJvbSB0aGUgRkMgdHJhbnNwb3J0CiAgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQotICovCisgKiovCiBpbnQKIGxwZmNfYnNnX3JlcXVlc3Qoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAl1aW50MzJfdCBtc2djb2RlOwotCWludCByYyA9IC1FSU5WQUw7CisJaW50IHJjOwogCiAJbXNnY29kZSA9IGpvYi0+cmVxdWVzdC0+bXNnY29kZTsKLQogCXN3aXRjaCAobXNnY29kZSkgewogCWNhc2UgRkNfQlNHX0hTVF9WRU5ET1I6CiAJCXJjID0gbHBmY19ic2dfaHN0X3ZlbmRvcihqb2IpOwpAQCAtODc0LDkgKzI2OTksMTMgQEAKIAkJcmMgPSBscGZjX2JzZ19ycG9ydF9lbHMoam9iKTsKIAkJYnJlYWs7CiAJY2FzZSBGQ19CU0dfUlBUX0NUOgotCQlyYyA9IGxwZmNfYnNnX3Jwb3J0X2N0KGpvYik7CisJCXJjID0gbHBmY19ic2dfc2VuZF9tZ210X2NtZChqb2IpOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlyYyA9IC1FSU5WQUw7CisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOwogCQlicmVhazsKIAl9CiAKQEAgLTg4OSwxNyArMjcxOCw3MSBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24ganVzdCBhYm9ydHMgdGhlIGpvYidzIElPQ0IuICBUaGUgYWJvcnRlZCBJT0NCIHdpbGwgcmV0dXJuIHRvCiAgKiB0aGUgd2FpdGluZyBmdW5jdGlvbiB3aGljaCB3aWxsIGhhbmRsZSBwYXNzaW5nIHRoZSBlcnJvciBiYWNrIHRvIHVzZXJzcGFjZQotICovCisgKiovCiBpbnQKIGxwZmNfYnNnX3RpbWVvdXQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKLQlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKWpvYi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYjsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19ic2dfaW9jYiAqaW9jYjsKKwlzdHJ1Y3QgbHBmY19ic2dfbWJveCAqbWJveDsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR107CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGNtZGlvY2IpCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gKHN0cnVjdCBic2dfam9iX2RhdGEgKilqb2ItPmRkX2RhdGE7CisJLyogdGltZW91dCBhbmQgY29tcGxldGlvbiBjcm9zc2VkIHBhdGhzIGlmIG5vIGRkX2RhdGEgKi8KKwlpZiAoIWRkX2RhdGEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGRkX2RhdGEtPnR5cGUpIHsKKwljYXNlIFRZUEVfSU9DQjoKKwkJaW9jYiA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2I7CisJCWNtZGlvY2IgPSBpb2NiLT5jbWRpb2NicTsKKwkJLyogaGludCB0byBjb21wbGV0aW9uIGhhbmRsZXIgdGhhdCB0aGUgam9iIHRpbWVkIG91dCAqLworCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSAtRUFHQUlOOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCS8qIHRoaXMgd2lsbCBjYWxsIG91ciBjb21wbGV0aW9uIGhhbmRsZXIgKi8KKwkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCWxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnKHBoYmEsIHByaW5nLCBjbWRpb2NiKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBUWVBFX0VWVDoKKwkJZXZ0ID0gZGRfZGF0YS0+Y29udGV4dF91bi5ldnQ7CisJCS8qIHRoaXMgZXZlbnQgaGFzIG5vIGpvYiBhbnltb3JlICovCisJCWV2dC0+c2V0X2pvYiA9IE5VTEw7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCS8qIFJldHVybiAtRUFHQUlOIHdoaWNoIGlzIG91ciB3YXkgb2Ygc2lnbmFsbHlpbmcgdGhlCisJCSAqIGFwcCB0byByZXRyeS4KKwkJICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FQUdBSU47CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCQlicmVhazsKKwljYXNlIFRZUEVfTUJPWDoKKwkJbWJveCA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3g7CisJCS8qIHRoaXMgbWJveCBoYXMgbm8gam9iIGFueW1vcmUgKi8KKwkJbWJveC0+c2V0X2pvYiA9IE5VTEw7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FQUdBSU47CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCX0KIAorCS8qIHNjc2kgdHJhbnNwb3J0IGZjIGZjX2JzZ19qb2JfdGltZW91dCBleHBlY3RzIGEgemVybyByZXR1cm4gY29kZSwKKwkgKiBvdGhlcndpc2UgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgY29uc29sZQorCSAqIHNvIGFsd2F5cyByZXR1cm4gc3VjY2VzcyAoemVybykKKwkgKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOGY4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgorICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCisgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgorICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgKgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsICAgICAgICoKKyAqIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bC4gKgorICogQUxMIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5EICAgICAgICAgICoKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksICAqCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVCwgQVJFICAgICAgKgorICogRElTQ0xBSU1FRCwgRVhDRVBUIFRPIFRIRSBFWFRFTlQgVEhBVCBTVUNIIERJU0NMQUlNRVJTIEFSRSBIRUxEICoKKyAqIFRPIEJFIExFR0FMTFkgSU5WQUxJRC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yICAqCisgKiBtb3JlIGRldGFpbHMsIGEgY29weSBvZiB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGUgQ09QWUlORyAgKgorICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogYnNnIGRlZmluaXRpb25zCisgKiBObyBwb2ludGVycyB0byB1c2VyIGRhdGEgYXJlIGFsbG93ZWQsIGFsbCBhcHBsaWNhdGlvbiBidWZmZXJzIGFuZCBzaXplcyB3aWxsCisgKiBkZXJpdmVkIHRocm91Z2ggdGhlIGJzZyBpbnRlcmZhY2UuCisgKgorICogVGhlc2UgYXJlIHRoZSB2ZW5kb3IgdW5pcXVlIHN0cnVjdHVyZXMgcGFzc2VkIGluIHVzaW5nIHRoZSBic2cKKyAqIEZDX0JTR19IU1RfVkVORE9SIG1lc3NhZ2UgY29kZSB0eXBlLgorICovCisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9TRVRfQ1RfRVZFTlQJMQorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfR0VUX0NUX0VWRU5UCTIKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX1NFTkRfTUdNVF9SRVNQCTMKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERQk0CisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9ESUFHX1RFU1QJNQorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfR0VUX01HTVRfUkVWCTYKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX01CT1gJCTcKKworc3RydWN0IHNldF9jdF9ldmVudCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCB0eXBlX21hc2s7CisJdWludDMyX3QgZXZfcmVxX2lkOworCXVpbnQzMl90IGV2X3JlZ19pZDsKK307CisKK3N0cnVjdCBnZXRfY3RfZXZlbnQgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgZXZfcmVnX2lkOworCXVpbnQzMl90IGV2X3JlcV9pZDsKK307CisKK3N0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgeworCXVpbnQzMl90IGltbWVkX2RhdGE7CisJdWludDMyX3QgdHlwZTsKK307CisKK3N0cnVjdCBzZW5kX21nbXRfcmVzcCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCB0YWc7Cit9OworCisKKyNkZWZpbmUgSU5URVJOQUxfTE9PUF9CQUNLIDB4MSAvKiBhZGFwdGVyIHNob3J0IGN1dHMgdGhlIGxvb3AgaW50ZXJuYWxseSAqLworI2RlZmluZSBFWFRFUk5BTF9MT09QX0JBQ0sgMHgyIC8qIHJlcXVpcmVzIGFuIGV4dGVybmFsIGxvb3BiYWNrIHBsdWcgKi8KKworc3RydWN0IGRpYWdfbW9kZV9zZXQgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCB0aW1lb3V0OworfTsKKworc3RydWN0IGRpYWdfbW9kZV90ZXN0IHsKKwl1aW50MzJfdCBjb21tYW5kOworfTsKKworI2RlZmluZSBMUEZDX1dXTk5fVFlQRQkJMAorI2RlZmluZSBMUEZDX1dXUE5fVFlQRQkJMQorCitzdHJ1Y3QgZ2V0X21nbXRfcmV2IHsKKwl1aW50MzJfdCBjb21tYW5kOworfTsKKworI2RlZmluZSBNQU5BR0VNRU5UX01BSk9SX1JFViAgIDEKKyNkZWZpbmUgTUFOQUdFTUVOVF9NSU5PUl9SRVYgICAwCisKKy8qIHRoZSBNZ210UmV2SW5mbyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBNZ210UmV2SW5mbyB7CisJdWludDMyX3QgYV9NYWpvcjsKKwl1aW50MzJfdCBhX01pbm9yOworfTsKKworc3RydWN0IGdldF9tZ210X3Jldl9yZXBseSB7CisJc3RydWN0IE1nbXRSZXZJbmZvIGluZm87Cit9OworCitzdHJ1Y3QgZGZjX21ib3hfcmVxIHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IGluRXh0V0xlbjsKKwl1aW50MzJfdCBvdXRFeHRXTGVuOworCXVpbnQ4X3QgbWJPZmZzZXQ7Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IDY1MDQ5NGQuLjZmMGZiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC00NCwxOCArNDQsMjYgQEAKIHZvaWQgbHBmY191bnJlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QsIHVpbnQzMl90LCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfdW5yZWdfZGlkKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwgdWludDMyX3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19yZWdfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICosIExQRkNfTUJPWFFfdCAqKTsKK3ZvaWQgbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICosCisJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY191bnJlZ192cGkoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90LCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfaW5pdF9saW5rKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIHZvaWQgbHBmY19yZXF1ZXN0X2ZlYXR1cmVzKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY01ib3hxICopOwordm9pZCBscGZjX3N1cHBvcnRlZF9wYWdlcyhzdHJ1Y3QgbHBmY01ib3hxICopOwordm9pZCBscGZjX3NsaTRfcGFyYW1zKHN0cnVjdCBscGZjTWJveHEgKik7CitpbnQgbHBmY19wY19zbGk0X3BhcmFtc19nZXQoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIAogc3RydWN0IGxwZmNfdnBvcnQgKmxwZmNfZmluZF92cG9ydF9ieV9kaWQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19jbGVhbnVwX3Jjdl9idWZmZXJzKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX3Jjdl9zZXFfY2hlY2tfZWR0b3Yoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfY2xlYW51cF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICosIGludCk7Cit2b2lkIGxwZmNfY2xlYW51cF9wZW5kaW5nX21ib3goc3RydWN0IGxwZmNfdnBvcnQgKik7CiBpbnQgbHBmY19saW5rZG93bihzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfbGlua2Rvd25fcG9ydChzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19wb3J0X2xpbmtfZmFpbHVyZShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19tYnhfY21wbF9yZWFkX2xhKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Cit2b2lkIGxwZmNfaW5pdF92cGlfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwordm9pZCBscGZjX3JldHJ5X3Bwb3J0X2Rpc2NvdmVyeShzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIHZvaWQgbHBmY19tYnhfY21wbF9yZWdfbG9naW4oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19tYnhfY21wbF9kZmx0X3JwaShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwpAQCAtNzMsNiArODEsNyBAQAogaW50ICBscGZjX2Nhbl9kaXNjdG1vKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50ICBscGZjX3VucmVnX3JwaShzdHJ1Y3QgbHBmY192cG9ydCAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY191bnJlZ19hbGxfcnBpcyhzdHJ1Y3QgbHBmY192cG9ydCAqKTsKK3ZvaWQgbHBmY191bnJlZ19oYmFfcnBpcyhzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfdW5yZWdfZGVmYXVsdF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX2lzc3VlX3JlZ192cGkoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICopOwogCkBAIC05OSw3ICsxMDgsNyBAQAogCiB2b2lkIGxwZmNfZG9fc2NyX25zX3Bsb2dpKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIGludCBscGZjX2NoZWNrX3NwYXJtKHN0cnVjdCBscGZjX3Zwb3J0ICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosCi0JCSAgICAgc3RydWN0IHNlcnZfcGFybSAqLCB1aW50MzJfdCk7CisJCSAgICAgc3RydWN0IHNlcnZfcGFybSAqLCB1aW50MzJfdCwgaW50KTsKIGludCBscGZjX2Vsc19hYm9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiB2b2lkIGxwZmNfbW9yZV9wbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19tb3JlX2FkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICopOwpAQCAtMTk3LDYgKzIwNiw3IEBACiB2b2lkIGxwZmNfdW5yZWdfZmNmaShzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQxNl90KTsKIHZvaWQgbHBmY19yZXN1bWVfcnBpKHN0cnVjdCBscGZjTWJveHEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiBpbnQgbHBmY19jaGVja19wZW5kaW5nX2Zjb2VfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQ4X3QpOwordm9pZCBscGZjX2lzc3VlX2luaXRfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogCiB2b2lkIGxwZmNfY29uZmlnX2hicShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsIHN0cnVjdCBscGZjX2hicV9pbml0ICosCiAJdWludDMyX3QgLCBMUEZDX01CT1hRX3QgKik7CkBAIC0yMDYsNyArMjE2LDExIEBACiB2b2lkIGxwZmNfc2xpNF9yYl9mcmVlKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqKTsKIHZvaWQgbHBmY19zbGk0X2J1aWxkX2RmbHRfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGZjZl9yZWNvcmQgKiwKIAkJCXVpbnQxNl90KTsKK3ZvaWQgbHBmY191bnJlZ2lzdGVyX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcmVzY2FuKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2Yoc3RydWN0IGxwZmNfaGJhICopOworaW50IGxwZmNfc2xpNF9yZWRpc2NfZmNmX3RhYmxlKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIoc3RydWN0IGxwZmNfaGJhICopOwogCiBpbnQgbHBmY19tZW1fYWxsb2Moc3RydWN0IGxwZmNfaGJhICosIGludCBhbGlnbik7CiB2b2lkIGxwZmNfbWVtX2ZyZWUoc3RydWN0IGxwZmNfaGJhICopOwpAQCAtMzY1LDYgKzM3OSw4IEBACiB2b2lkIGxwZmNfY3JlYXRlX3N0YXRpY192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc3RvcF9oYmFfdGltZXJzKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zdG9wX3BvcnQoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBfX2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfcGFyc2VfZmNvZV9jb25mKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50OF90ICosIHVpbnQzMl90KTsKIGludCBscGZjX3BhcnNlX3ZwZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDhfdCAqLCBpbnQpOwogdm9pZCBscGZjX3N0YXJ0X2ZkaXNjcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpOwpAQCAtMzc4LDUgKzM5NCw1IEBACiAvKiBmdW5jdGlvbnMgdG8gc3VwcG9ydCBTR0lPdjQvYnNnIGludGVyZmFjZSAqLwogaW50IGxwZmNfYnNnX3JlcXVlc3Qoc3RydWN0IGZjX2JzZ19qb2IgKik7CiBpbnQgbHBmY19ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKLXZvaWQgbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCitpbnQgbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCiAJCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCmluZGV4IDBlYmNkOWIuLmM3ZTkyMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTk3LDcgKzk3LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWY7CiAKLQlscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKTsKKwlpZiAobHBmY19ic2dfY3RfdW5zb2xfZXZlbnQocGhiYSwgcHJpbmcsIHBpb2NicSkgPT0gMCkKKwkJcmV0dXJuOwogCiAJaWYgKHVubGlrZWx5KGljbWQtPnVscFN0YXR1cyA9PSBJT1NUQVRfTkVFRF9CVUZGRVIpKSB7CiAJCWxwZmNfc2xpX2hicWJ1Zl9hZGRfaGJxcyhwaGJhLCBMUEZDX0VMU19IQlEpOwpAQCAtMTgxLDcgKzE4Miw4IEBACiAJdWludDMyX3Qgc2l6ZTsKIAogCS8qIEZvcndhcmQgYWJvcnQgZXZlbnQgdG8gYW55IHByb2Nlc3MgcmVnaXN0ZXJlZCB0byByZWNlaXZlIGN0IGV2ZW50ICovCi0JbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQocGhiYSwgcHJpbmcsIHBpb2NicSk7CisJaWYgKGxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHBoYmEsIHByaW5nLCBwaW9jYnEpID09IDApCisJCXJldHVybjsKIAogCS8qIElmIHRoZXJlIGlzIG5vIEJERSBhc3NvY2lhdGVkIHdpdGggSU9DQiwgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqLwogCWlmIChpY21kLT51bHBCZGVDb3VudCA9PSAwKQpAQCAtMTg0MywxMiArMTg0NSw3IEBACiAJCWMgID0gKHJldiAmIDB4MDAwMGZmMDApID4+IDg7CiAJCWI0ID0gKHJldiAmIDB4MDAwMDAwZmYpOwogCi0JCWlmIChmbGFnKQotCQkJc3ByaW50Zihmd3JldmlzaW9uLCAiJWQuJWQlZCVjJWQgIiwgYjEsCi0JCQkJYjIsIGIzLCBjLCBiNCk7Ci0JCWVsc2UKLQkJCXNwcmludGYoZndyZXZpc2lvbiwgIiVkLiVkJWQlYyVkICIsIGIxLAotCQkJCWIyLCBiMywgYywgYjQpOworCQlzcHJpbnRmKGZ3cmV2aXNpb24sICIlZC4lZCVkJWMlZCIsIGIxLCBiMiwgYjMsIGMsIGI0KTsKIAl9CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggMmNjMzk2OC4uMDhiNjYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC01MCw5ICs1MCw2IEBACiAJCQkJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsIHVpbnQ4X3QgcmV0cnkpOwogc3RhdGljIGludCBscGZjX2lzc3VlX2ZhYnJpY19pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJCQkgIHN0cnVjdCBscGZjX2lvY2JxICppb2NiKTsKLXN0YXRpYyB2b2lkIGxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKLQkJCQkgICAgc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAotCQkJCSAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCk7CiAKIHN0YXRpYyBpbnQgbHBmY19tYXhfZWxzX3RyaWVzID0gMzsKIApAQCAtNTkyLDYgKzU4OSwxNSBAQAogCQkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJfQorCQkvKgorCQkgKiBJZiBWUEkgaXMgdW5yZWdlZCwgZHJpdmVyIG5lZWQgdG8gZG8gSU5JVF9WUEkKKwkJICogYmVmb3JlIHJlLXJlZ2lzdGVyaW5nCisJCSAqLworCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCX0KIAl9CiAKIAlpZiAocGhiYS0+c2xpX3JldiA8IExQRkNfU0xJX1JFVjQpIHsKQEAgLTYwNCwxMCArNjEwLDEzIEBACiAJfSBlbHNlIHsKIAkJbmRscC0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKIAkJbHBmY19ubHBfc2V0X3N0YXRlKHZwb3J0LCBuZGxwLCBOTFBfU1RFX1VOTUFQUEVEX05PREUpOwotCQlpZiAodnBvcnQtPnZwaV9zdGF0ZSAmIExQRkNfVlBJX1JFR0lTVEVSRUQpIHsKKwkJaWYgKCghKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkpICYmCisJCQkodnBvcnQtPnZwaV9zdGF0ZSAmIExQRkNfVlBJX1JFR0lTVEVSRUQpKSB7CiAJCQlscGZjX3N0YXJ0X2ZkaXNjcyhwaGJhKTsKIAkJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKLQkJfSBlbHNlCisJCX0gZWxzZSBpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19WRklfUkVHSVNURVJFRCkKKwkJCWxwZmNfaXNzdWVfaW5pdF92cGkodnBvcnQpOworCQllbHNlCiAJCQlscGZjX2lzc3VlX3JlZ192ZmkodnBvcnQpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTgwNCw2ICs4MTMsOSBAQAogCQkJCSBpcnNwLT51bHBUaW1lb3V0KTsKIAkJZ290byBmbG9naWZhaWw7CiAJfQorCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX0NWTF9SQ1ZEOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCS8qCiAJICogVGhlIEZMb2dJIHN1Y2NlZWRlZC4gIFN5bmMgdGhlIGRhdGEgZm9yIHRoZSBDUFUgYmVmb3JlCkBAIC0yNzIwLDcgKzI3MzIsNyBAQAogCWlmIChkaWQgPT0gRkRNSV9ESUQpCiAJCXJldHJ5ID0gMTsKIAotCWlmICgoY21kID09IEVMU19DTURfRkxPR0kpICYmCisJaWYgKCgoY21kID09IEVMU19DTURfRkxPR0kpIHx8IChjbWQgPT0gRUxTX0NNRF9GRElTQykpICYmCiAJICAgIChwaGJhLT5mY190b3BvbG9neSAhPSBUT1BPTE9HWV9MT09QKSAmJgogCSAgICAhbHBmY19lcnJvcl9sb3N0X2xpbmsoaXJzcCkpIHsKIAkJLyogRkxPR0kgcmV0cnkgcG9saWN5ICovCkBAIC00Mzg1LDcgKzQzOTcsNyBAQAogCiAJZGlkID0gRmFicmljX0RJRDsKIAotCWlmICgobHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMykpKSB7CisJaWYgKChscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzLCAxKSkpIHsKIAkJLyogRm9yIGEgRkxPR0kgd2UgYWNjZXB0LCB0aGVuIGlmIG91ciBwb3J0bmFtZSBpcyBncmVhdGVyCiAJCSAqIHRoZW4gdGhlIHJlbW90ZSBwb3J0bmFtZSB3ZSBpbml0aWF0ZSBOcG9ydCBsb2dpbi4KIAkJICovCkBAIC01OTE1LDYgKzU5MjcsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgcG1iLT5jb250ZXh0MjsKIAlNQUlMQk9YX3QgKm1iID0gJnBtYi0+dS5tYjsKKwlpbnQgcmM7CiAKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT5mY19mbGFnICY9IH5GQ19WUE9SVF9ORUVEU19SRUdfVlBJOwpAQCAtNTkzNiw2ICs1OTQ5LDI2IEBACiAJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKIAkJCWJyZWFrOworCQkvKiBJZiByZWdfdnBpIGZhaWwgd2l0aCBpbnZhbGlkIFZQSSBzdGF0dXMsIHJlLWluaXQgVlBJICovCisJCWNhc2UgMHgyMDoKKwkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJbHBmY19pbml0X3ZwaShwaGJhLCBwbWIsIHZwb3J0LT52cGkpOworCQkJcG1iLT52cG9ydCA9IHZwb3J0OworCQkJcG1iLT5tYm94X2NtcGwgPSBscGZjX2luaXRfdnBpX2NtcGw7CisJCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLAorCQkJCU1CWF9OT1dBSVQpOworCQkJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LAorCQkJCQlLRVJOX0VSUiwgTE9HX01CT1gsCisJCQkJCSIyNzMyIEZhaWxlZCB0byBpc3N1ZSBJTklUX1ZQSSIKKwkJCQkJIiBtYWlsYm94IGNvbW1hbmRcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlscGZjX25scF9wdXQobmRscCk7CisJCQkJcmV0dXJuOworCQkJfQorCiAJCWRlZmF1bHQ6CiAJCQkvKiBUcnkgdG8gcmVjb3ZlciBmcm9tIHRoaXMgZXJyb3IgKi8KIAkJCWxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydCk7CkBAIC01OTQ5LDEzICs1OTgyLDE3IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCXZwb3J0LT52cGlfc3RhdGUgfD0gTFBGQ19WUElfUkVHSVNURVJFRDsKLQkJaWYgKHZwb3J0ID09IHBoYmEtPnBwb3J0KQorCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCWlmICh2cG9ydCA9PSBwaGJhLT5wcG9ydCkgewogCQkJaWYgKHBoYmEtPnNsaV9yZXYgPCBMUEZDX1NMSV9SRVY0KQogCQkJCWxwZmNfaXNzdWVfZmFicmljX3JlZ2xvZ2luKHZwb3J0KTsKLQkJCWVsc2UKLQkJCQlscGZjX2lzc3VlX3JlZ192ZmkodnBvcnQpOwotCQllbHNlCisJCQllbHNlIHsKKwkJCQlscGZjX3N0YXJ0X2ZkaXNjcyhwaGJhKTsKKwkJCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7CisJCQl9CisJCX0gZWxzZQogCQkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwogCX0KIApAQCAtNTk3Nyw3ICs2MDE0LDcgQEAKICAqIFRoaXMgcm91dGluZSByZWdpc3RlcnMgdGhlIEB2cG9ydCBhcyBhIG5ldyB2aXJ0dWFsIHBvcnQgd2l0aCBhIEhCQS4KICAqIEl0IGlzIGRvbmUgdGhyb3VnaCBhIHJlZ2lzdGVyaW5nIHZwaSBtYWlsYm94IGNvbW1hbmQuCiAgKiovCi1zdGF0aWMgdm9pZAordm9pZAogbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCiAJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKIHsKQEAgLTYwMTgsNiArNjA1NSw3OCBAQAogfQogCiAvKioKKyAqIGxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5IC0gU3RhcnQgdGltZXIgdG8gcmV0cnkgRkxPR0kuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWJvcnQgYWxsIHBlbmRpbmcgZGlzY292ZXJ5IGNvbW1hbmRzIGFuZAorICogc3RhcnQgYSB0aW1lciB0byByZXRyeSBGTE9HSSBmb3IgdGhlIHBoeXNpY2FsIHBvcnQKKyAqIGRpc2NvdmVyeS4KKyAqKi8KK3ZvaWQKK2xwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CisJaW50IGk7CisJdWludDMyX3QgbGlua19zdGF0ZTsKKworCS8qIFRyZWF0IHRoaXMgZmFpbHVyZSBhcyBsaW5rZG93biBmb3IgYWxsIHZwb3J0cyAqLworCWxpbmtfc3RhdGUgPSBwaGJhLT5saW5rX3N0YXRlOworCWxwZmNfbGlua2Rvd24ocGhiYSk7CisJcGhiYS0+bGlua19zdGF0ZSA9IGxpbmtfc3RhdGU7CisKKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCisJaWYgKHZwb3J0cykgeworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHZwb3J0c1tpXSwgRmFicmljX0RJRCk7CisJCQlpZiAobmRscCkKKwkJCQlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8odnBvcnRzW2ldLCBuZGxwKTsKKwkJCWxwZmNfZWxzX2ZsdXNoX2NtZCh2cG9ydHNbaV0pOworCQl9CisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJfQorCisJLyogSWYgZmFicmljIHJlcXVpcmUgRkxPR0ksIHRoZW4gcmUtaW5zdGFudGlhdGUgcGh5c2ljYWwgbG9naW4gKi8KKwluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYS0+cHBvcnQsIEZhYnJpY19ESUQpOworCWlmICghbmRscCkKKwkJcmV0dXJuOworCisKKwlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydChwaGJhLT5wcG9ydCk7CisJbW9kX3RpbWVyKCZuZGxwLT5ubHBfZGVsYXlmdW5jLCBqaWZmaWVzICsgSFopOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gRUxTX0NNRF9GTE9HSTsKKwlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfRkxPR0k7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfZmFicmljX2xvZ2luX3JlcWQgLSBDaGVjayBpZiBGTE9HSSByZXF1aXJlZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gRkRJU0MgY29tbWFuZCBpb2NiLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gRkRJU0MgcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIGEgRkxPR0kgaXMgcmVndWlyZWQgZm9yIEZESVNDCisgKiB0byBzdWNjZWVkLgorICoqLworc3RhdGljIGludAorbHBmY19mYWJyaWNfbG9naW5fcmVxZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAorCQlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKK3sKKworCWlmICgocnNwaW9jYi0+aW9jYi51bHBTdGF0dXMgIT0gSU9TVEFUX0ZBQlJJQ19SSlQpIHx8CisJCShyc3Bpb2NiLT5pb2NiLnVuLnVscFdvcmRbNF0gIT0gUkpUX0xPR0lOX1JFUVVJUkVEKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworLyoqCiAgKiBscGZjX2NtcGxfZWxzX2ZkaXNjIC0gQ29tcGxldGlvbiBmdW5jdGlvbiBmb3IgZmRpc2MgaW9jYiBjb21tYW5kCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgpAQCAtNjA2Niw2ICs2MTc1LDEyIEBACiAJCWlyc3AtPnVscFN0YXR1cywgaXJzcC0+dW4udWxwV29yZFs0XSwgdnBvcnQtPmZjX3ByZXZESUQpOwogCiAJaWYgKGlyc3AtPnVscFN0YXR1cykgeworCisJCWlmIChscGZjX2ZhYnJpY19sb2dpbl9yZXFkKHBoYmEsIGNtZGlvY2IsIHJzcGlvY2IpKSB7CisJCQlscGZjX3JldHJ5X3Bwb3J0X2Rpc2NvdmVyeShwaGJhKTsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJLyogQ2hlY2sgZm9yIHJldHJ5ICovCiAJCWlmIChscGZjX2Vsc19yZXRyeShwaGJhLCBjbWRpb2NiLCByc3Bpb2NiKSkKIAkJCWdvdG8gb3V0OwpAQCAtNjA3Niw2ICs2MTkxLDcgQEAKIAkJZ290byBmZGlzY19mYWlsZWQ7CiAJfQogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX0NWTF9SQ1ZEOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX0ZBQlJJQzsKIAlpZiAodnBvcnQtPnBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApCiAJCXZwb3J0LT5mY19mbGFnIHw9ICBGQ19QVUJMSUNfTE9PUDsKQEAgLTYxMDMsMTAgKzYyMTksMTMgQEAKIAkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKIAkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CiAJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl9CiAKLQlpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKQorCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJKQorCQlscGZjX2lzc3VlX2luaXRfdnBpKHZwb3J0KTsKKwllbHNlIGlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpCiAJCWxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KHBoYmEsIHZwb3J0LCBuZGxwKTsKIAllbHNlCiAJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKaW5kZXggMjQ0NWUzOS4uMjM1OWQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKQEAgLTUyNSw2ICs1MjUsOCBAQAogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWxwZmNfc2xpX2hicWJ1Zl9hZGRfaGJxcyhwaGJhLCBMUEZDX0VMU19IQlEpOwogCQl9CisJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0VWVCkKKwkJCWxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2MocGhiYSk7CiAJfQogCiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKQEAgLTcwNiw2ICs3MDgsOCBAQAogdm9pZAogbHBmY19wb3J0X2xpbmtfZmFpbHVyZShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CisJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0xJTktET1dOKTsKKwogCS8qIENsZWFudXAgYW55IG91dHN0YW5kaW5nIHJlY2VpdmVkIGJ1ZmZlcnMgKi8KIAlscGZjX2NsZWFudXBfcmN2X2J1ZmZlcnModnBvcnQpOwogCkBAIC03NTIsMTIgKzc1NiwxNCBAQAogCWxwZmNfc2NzaV9kZXZfYmxvY2socGhiYSk7CiAKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfihGQ0ZfQVZBSUxBQkxFIHwgRkNGX0RJU0NPVkVSRUQpOworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfU0NBTl9ET05FKTsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCWlmIChwaGJhLT5saW5rX3N0YXRlID4gTFBGQ19MSU5LX0RPV04pIHsKIAkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfTElOS19ET1dOOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQlwaGJhLT5wcG9ydC0+ZmNfZmxhZyAmPSB+RkNfTEJJVDsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKQogCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgewpAQCAtMTAyMyw3ICsxMDI5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfSU5fVVNFKTsKKwlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gKEZDRl9TQ0FOX0RPTkUgfCBGQ0ZfSU5fVVNFKTsKIAlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJaWYgKHZwb3J0LT5wb3J0X3N0YXRlICE9IExQRkNfRkxPR0kpCkBAIC0xMDQ1LDI1ICsxMDUxLDIzIEBACiBzdGF0aWMgdWludDMyX3QKIGxwZmNfZmFiX25hbWVfbWF0Y2godWludDhfdCAqZmFiX25hbWUsIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKIHsKLQlpZiAoKGZhYl9uYW1lWzBdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbMV0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVsyXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzNdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbNF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV80LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVs1XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzZdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbN10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV83LCBuZXdfZmNmX3JlY29yZCkpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJaWYgKGZhYl9uYW1lWzBdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpKQogCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbMV0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVsyXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzNdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbNF0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV80LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVs1XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzZdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbN10gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV83LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTEwNzgsMzAgKzEwODIsMjggQEAKIHN0YXRpYyB1aW50MzJfdAogbHBmY19zd19uYW1lX21hdGNoKHVpbnQ4X3QgKnN3X25hbWUsIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKIHsKLQlpZiAoKHN3X25hbWVbMF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzFdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVsyXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbM10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzRdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVs1XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbNl0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzddID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQorCWlmIChzd19uYW1lWzBdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpKQogCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVsxXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbMl0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzNdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVs0XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbNV0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV81LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzZdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVs3XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgogICogbHBmY19tYWNfYWRkcl9tYXRjaCAtIENoZWNrIGlmIHRoZSBmY2YgbWFjIGFkZHJlc3MgbWF0Y2guCi0gKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBtYWNfYWRkcjogcG9pbnRlciB0byBtYWMgYWRkcmVzcy4KICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgogICoKICAqIFRoaXMgcm91dGluZSBjb21wYXJlIHRoZSBmY2YgcmVjb3JkJ3MgbWFjIGFkZHJlc3Mgd2l0aCBIQkEncwpAQCAtMTEwOSw4NSArMTExMSwxMTUgQEAKICAqIHJldHVybnMgMSBlbHNlIHJldHVybiAwLgogICoqLwogc3RhdGljIHVpbnQzMl90Ci1scGZjX21hY19hZGRyX21hdGNoKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQorbHBmY19tYWNfYWRkcl9tYXRjaCh1aW50OF90ICptYWNfYWRkciwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCWlmICgocGhiYS0+ZmNmLm1hY19hZGRyWzBdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzAsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkclsxXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18xLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChwaGJhLT5mY2YubWFjX2FkZHJbMl0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAocGhiYS0+ZmNmLm1hY19hZGRyWzNdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzMsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkcls0XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY180LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChwaGJhLT5mY2YubWFjX2FkZHJbNV0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNSwgbmV3X2ZjZl9yZWNvcmQpKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQorCWlmIChtYWNfYWRkclswXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18wLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiAwOworCWlmIChtYWNfYWRkclsxXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18xLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChtYWNfYWRkclsyXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18yLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChtYWNfYWRkclszXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18zLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChtYWNfYWRkcls0XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY180LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChtYWNfYWRkcls1XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY181LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgYm9vbAorbHBmY192bGFuX2lkX21hdGNoKHVpbnQxNl90IGN1cnJfdmxhbl9pZCwgdWludDE2X3QgbmV3X3ZsYW5faWQpCit7CisJcmV0dXJuIChjdXJyX3ZsYW5faWQgPT0gbmV3X3ZsYW5faWQpOwogfQogCiAvKioKICAqIGxwZmNfY29weV9mY2ZfcmVjb3JkIC0gQ29weSBmY2YgaW5mb3JtYXRpb24gdG8gbHBmY19oYmEuCi0gKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmY2Y6IHBvaW50ZXIgdG8gZHJpdmVyIGZjZiByZWNvcmQuCiAgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gZmNmIHJlY29yZC4KICAqCiAgKiBUaGlzIHJvdXRpbmUgY29waWVzIHRoZSBGQ0YgaW5mb3JtYXRpb24gZnJvbSB0aGUgRkNGCiAgKiByZWNvcmQgdG8gbHBmY19oYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiovCiBzdGF0aWMgdm9pZAotbHBmY19jb3B5X2ZjZl9yZWNvcmQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCitscGZjX2NvcHlfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19mY2ZfcmVjICpmY2ZfcmVjLAorCQkgICAgIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKIHsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbMF0gPQorCS8qIEZhYnJpYyBuYW1lICovCisJZmNmX3JlYy0+ZmFicmljX25hbWVbMF0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzAsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbMV0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzFdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzJdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVsyXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVszXSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbM10gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzMsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbNF0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzRdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV80LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzVdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVs1XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVs2XSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbNl0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzYsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbN10gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzddID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV83LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzBdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkclsxXSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbMl0gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18yLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzNdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMywgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkcls0XSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbNV0gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY181LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZjZl9pbmR4ID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mY2ZfaW5kZXgsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YucHJpb3JpdHkgPSBuZXdfZmNmX3JlY29yZC0+ZmlwX3ByaW9yaXR5OwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVswXSA9CisJLyogTWFjIGFkZHJlc3MgKi8KKwlmY2ZfcmVjLT5tYWNfYWRkclswXSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzAsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkclsxXSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkclsyXSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzIsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkclszXSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzMsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkcls0XSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkcls1XSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKTsKKwkvKiBGQ0YgcmVjb3JkIGluZGV4ICovCisJZmNmX3JlYy0+ZmNmX2luZHggPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwgbmV3X2ZjZl9yZWNvcmQpOworCS8qIEZDRiByZWNvcmQgcHJpb3JpdHkgKi8KKwlmY2ZfcmVjLT5wcmlvcml0eSA9IG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHk7CisJLyogU3dpdGNoIG5hbWUgKi8KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVswXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVsxXSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbMV0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbMl0gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzJdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzNdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVszXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs0XSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbNF0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbNV0gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzVdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV81LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzZdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVs2XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs3XSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbN10gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKTsKIH0KIAogLyoqCisgKiBscGZjX3VwZGF0ZV9mY2ZfcmVjb3JkIC0gVXBkYXRlIGRyaXZlciBmY2YgcmVjb3JkCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmY2ZfcmVjOiBwb2ludGVyIHRvIGRyaXZlciBmY2YgcmVjb3JkLgorICogQG5ld19mY2ZfcmVjb3JkOiBwb2ludGVyIHRvIGhiYSBmY2YgcmVjb3JkLgorICogQGFkZHJfbW9kZTogYWRkcmVzcyBtb2RlIHRvIGJlIHNldCB0byB0aGUgZHJpdmVyIGZjZiByZWNvcmQuCisgKiBAdmxhbl9pZDogdmxhbiB0YWcgdG8gYmUgc2V0IHRvIHRoZSBkcml2ZXIgZmNmIHJlY29yZC4KKyAqIEBmbGFnOiBmbGFnIGJpdHMgdG8gYmUgc2V0IHRvIHRoZSBkcml2ZXIgZmNmIHJlY29yZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgdXBkYXRlcyB0aGUgZHJpdmVyIEZDRiByZWNvcmQgZnJvbSB0aGUgbmV3IEhCQSBGQ0YgcmVjb3JkCisgKiB0b2dldGhlciB3aXRoIHRoZSBhZGRyZXNzIG1vZGUsIHZsYW5faWQsIGFuZCBvdGhlciBpbmZvcm1hdGlvbnMuIFRoaXMKKyAqIHJvdXRpbmUgaXMgY2FsbGVkIHdpdGggdGhlIGhvc3QgbG9jayBoZWxkLgorICoqLworc3RhdGljIHZvaWQKK19fbHBmY191cGRhdGVfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2ZjZl9yZWMgKmZjZl9yZWMsCisJCSAgICAgICBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQsIHVpbnQzMl90IGFkZHJfbW9kZSwKKwkJICAgICAgIHVpbnQxNl90IHZsYW5faWQsIHVpbnQzMl90IGZsYWcpCit7CisJLyogQ29weSB0aGUgZmllbGRzIGZyb20gdGhlIEhCQSdzIEZDRiByZWNvcmQgKi8KKwlscGZjX2NvcHlfZmNmX3JlY29yZChmY2ZfcmVjLCBuZXdfZmNmX3JlY29yZCk7CisJLyogVXBkYXRlIG90aGVyIGZpZWxkcyBvZiBkcml2ZXIgRkNGIHJlY29yZCAqLworCWZjZl9yZWMtPmFkZHJfbW9kZSA9IGFkZHJfbW9kZTsKKwlmY2ZfcmVjLT52bGFuX2lkID0gdmxhbl9pZDsKKwlmY2ZfcmVjLT5mbGFnIHw9IChmbGFnIHwgUkVDT1JEX1ZBTElEKTsKK30KKworLyoqCiAgKiBscGZjX3JlZ2lzdGVyX2ZjZiAtIFJlZ2lzdGVyIHRoZSBGQ0Ygd2l0aCBoYmEuCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqCkBAIC0xMjEyLDcgKzEyNDQsNyBAQAogCiAJLyogVGhlIEZDRiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIHN0YXJ0IGRpc2NvdmVyeSAqLwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVHSVNURVJFRCkgewotCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gKEZDRl9ESVNDT1ZFUkVEIHwgRkNGX0lOX1VTRSk7CisJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX1NDQU5fRE9ORSB8IEZDRl9JTl9VU0UpOwogCQlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCQlpZiAocGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19GTE9HSSkKQEAgLTEyNTAsNiArMTI4Miw3IEBACiAgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gZmNmIHJlY29yZC4KICAqIEBib290X2ZsYWc6IEluZGljYXRlcyBpZiB0aGlzIHJlY29yZCB1c2VkIGJ5IGJvb3QgYmlvcy4KICAqIEBhZGRyX21vZGU6IFRoZSBhZGRyZXNzIG1vZGUgdG8gYmUgdXNlZCBieSB0aGlzIEZDRgorICogQHZsYW5faWQ6IFRoZSB2bGFuIGlkIHRvIGJlIHVzZWQgYXMgdmxhbiB0YWdnaW5nIGJ5IHRoaXMgRkNGLgogICoKICAqIFRoaXMgcm91dGluZSBjb21wYXJlIHRoZSBmY2YgcmVjb3JkIHdpdGggY29ubmVjdCBsaXN0IG9idGFpbmVkIGZyb20gdGhlCiAgKiBjb25maWcgcmVnaW9uIHRvIGRlY2lkZSBpZiB0aGlzIEZDRiBjYW4gYmUgdXNlZCBmb3IgU0FOIGRpc2NvdmVyeS4gSXQgcmV0dXJucwpAQCAtMTMyMyw3ICsxMzU2LDggQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uX2VudHJ5LCAmcGhiYS0+ZmNmX2Nvbm5fcmVjX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5fZW50cnksCisJCQkgICAgJnBoYmEtPmZjZl9jb25uX3JlY19saXN0LCBsaXN0KSB7CiAJCWlmICghKGNvbm5fZW50cnktPmNvbm5fcmVjLmZsYWdzICYgRkNGQ05DVF9WQUxJRCkpCiAJCQljb250aW51ZTsKIApAQCAtMTQ3MCw2ICsxNTA0LDcgQEAKIAkJICovCiAJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKKwkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX0ZPVjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAl9CiAKQEAgLTE1MjQsMTEgKzE1NTksMTIgQEAKIAl1aW50MzJfdCBzaGRyX3N0YXR1cywgc2hkcl9hZGRfc3RhdHVzOwogCXVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkciAqc2hkcjsKIAlzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQ7Ci0JaW50IHJjOwogCXVpbnQzMl90IGJvb3RfZmxhZywgYWRkcl9tb2RlOwogCXVpbnQzMl90IG5leHRfZmNmX2luZGV4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxwZmNfZmNmX3JlYyAqZmNmX3JlYyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJdWludDE2X3Qgdmxhbl9pZDsKKwlpbnQgcmM7CiAKIAkvKiBJZiB0aGVyZSBpcyBwZW5kaW5nIEZDb0UgZXZlbnQgcmVzdGFydCBGQ0YgdGFibGUgc2NhbiAqLwogCWlmIChscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChwaGJhLCAwKSkgewpAQCAtMTU4Myw5ICsxNjE5LDggQEAKIAkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmNmX3JlY29yZCkpOwogCWJ5dGVwID0gdmlydF9hZGRyICsgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcik7CiAKLQlyYyA9IGxwZmNfbWF0Y2hfZmNmX2Nvbm5fbGlzdChwaGJhLCBuZXdfZmNmX3JlY29yZCwKLQkJCQkgICAgICAmYm9vdF9mbGFnLCAmYWRkcl9tb2RlLAotCQkJCQkmdmxhbl9pZCk7CisJcmMgPSBscGZjX21hdGNoX2ZjZl9jb25uX2xpc3QocGhiYSwgbmV3X2ZjZl9yZWNvcmQsICZib290X2ZsYWcsCisJCQkJICAgICAgJmFkZHJfbW9kZSwgJnZsYW5faWQpOwogCS8qCiAJICogSWYgdGhlIGZjZiByZWNvcmQgZG9lcyBub3QgbWF0Y2ggd2l0aCBjb25uZWN0IGxpc3QgZW50cmllcwogCSAqIHJlYWQgdGhlIG5leHQgZW50cnkuCkBAIC0xNTk0LDkwICsxNjI5LDE1OSBAQAogCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CiAJLyoKIAkgKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgRkNGIGRpc2NvdmVyeSBvZiB0aGUgSEJBLCB1c2UgbGFzdAotCSAqIEZDRiByZWNvcmQgZm9yIHRoZSBkaXNjb3ZlcnkuCisJICogRkNGIHJlY29yZCBmb3IgdGhlIGRpc2NvdmVyeS4gVGhlIGNvbmRpdGlvbiB0aGF0IGEgcmVzY2FuCisJICogbWF0Y2hlcyB0aGUgaW4tdXNlIEZDRiByZWNvcmQ6IGZhYnJpYyBuYW1lLCBzd2l0Y2ggbmFtZSwgbWFjCisJICogYWRkcmVzcywgYW5kIHZsYW5faWQuCiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0lOX1VTRSkgewotCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuZmFicmljX25hbWUsCisJCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5mYWJyaWNfbmFtZSwKIAkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICBscGZjX3N3X25hbWVfbWF0Y2gocGhiYS0+ZmNmLnN3aXRjaF9uYW1lLAorCQkgICAgbHBmY19zd19uYW1lX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5zd2l0Y2hfbmFtZSwKIAkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICBscGZjX21hY19hZGRyX21hdGNoKHBoYmEsIG5ld19mY2ZfcmVjb3JkKSkgeworCQkgICAgbHBmY19tYWNfYWRkcl9tYXRjaChwaGJhLT5mY2YuY3VycmVudF9yZWMubWFjX2FkZHIsCisJCQkJCW5ld19mY2ZfcmVjb3JkKSAmJgorCQkgICAgbHBmY192bGFuX2lkX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy52bGFuX2lkLAorCQkJCQl2bGFuX2lkKSkgewogCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9BVkFJTEFCTEU7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19QRU5EKQorCQkJCS8qIFN0b3AgRkNGIHJlZGlzYyB3YWl0IHRpbWVyIGlmIHBlbmRpbmcgKi8KKwkJCQlfX2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihwaGJhKTsKKwkJCWVsc2UgaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRk9WKQorCQkJCS8qIElmIGluIGZhc3QgZmFpbG92ZXIsIG1hcmsgaXQncyBjb21wbGV0ZWQgKi8KKwkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfRk9WOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKLQkJZ290byByZWFkX25leHRfZmNmOworCQkvKgorCQkgKiBSZWFkIG5leHQgRkNGIHJlY29yZCBmcm9tIEhCQSBzZWFyY2hpbmcgZm9yIHRoZSBtYXRjaGluZworCQkgKiB3aXRoIGluLXVzZSByZWNvcmQgb25seSBpZiBub3QgZHVyaW5nIHRoZSBmYXN0IGZhaWxvdmVyCisJCSAqIHBlcmlvZC4gSW4gY2FzZSBvZiBmYXN0IGZhaWxvdmVyIHBlcmlvZCwgaXQgc2hhbGwgdHJ5IHRvCisJCSAqIGRldGVybWluZSB3aGV0aGVyIHRoZSBGQ0YgcmVjb3JkIGp1c3QgcmVhZCBzaG91bGQgYmUgdGhlCisJCSAqIG5leHQgY2FuZGlkYXRlLgorCQkgKi8KKwkJaWYgKCEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJZ290byByZWFkX25leHRfZmNmOworCQl9CiAJfQorCS8qCisJICogVXBkYXRlIG9uIGZhaWxvdmVyIEZDRiByZWNvcmQgb25seSBpZiBpdCdzIGluIEZDRiBmYXN0LWZhaWxvdmVyCisJICogcGVyaW9kOyBvdGhlcndpc2UsIHVwZGF0ZSBvbiBjdXJyZW50IEZDRiByZWNvcmQuCisJICovCisJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRk9WKSB7CisJCS8qIEZhc3QgRkNGIGZhaWxvdmVyIG9ubHkgdG8gdGhlIHNhbWUgZmFicmljIG5hbWUgKi8KKwkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZhYnJpY19uYW1lLAorCQkJCQluZXdfZmNmX3JlY29yZCkpCisJCQlmY2ZfcmVjID0gJnBoYmEtPmZjZi5mYWlsb3Zlcl9yZWM7CisJCWVsc2UKKwkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKKwl9IGVsc2UKKwkJZmNmX3JlYyA9ICZwaGJhLT5mY2YuY3VycmVudF9yZWM7CisKIAlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0FWQUlMQUJMRSkgewogCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnCi0JCSAqIHNldCBhbmQgbmV3IGZjZiByZWNvcmQgaGFzIGJvb3QgZmxhZyBzZXQsIHVzZSB0aGUKLQkJICogbmV3IGZjZiByZWNvcmQuCisJCSAqIElmIHRoZSBkcml2ZXIgRkNGIHJlY29yZCBkb2VzIG5vdCBoYXZlIGJvb3QgZmxhZworCQkgKiBzZXQgYW5kIG5ldyBoYmEgZmNmIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCwgdXNlCisJCSAqIHRoZSBuZXcgaGJhIGZjZiByZWNvcmQuCiAJCSAqLwotCQlpZiAoYm9vdF9mbGFnICYmICEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0JPT1RfRU5BQkxFKSkgewotCQkJLyogVXNlIHRoaXMgRkNGIHJlY29yZCAqLwotCQkJbHBmY19jb3B5X2ZjZl9yZWNvcmQocGhiYSwgbmV3X2ZjZl9yZWNvcmQpOwotCQkJcGhiYS0+ZmNmLmFkZHJfbW9kZSA9IGFkZHJfbW9kZTsKLQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfQk9PVF9FTkFCTEU7Ci0JCQlpZiAodmxhbl9pZCAhPSAweEZGRkYpIHsKLQkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1ZBTElEX1ZMQU47Ci0JCQkJcGhiYS0+ZmNmLnZsYW5faWQgPSB2bGFuX2lkOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQlpZiAoYm9vdF9mbGFnICYmICEoZmNmX3JlYy0+ZmxhZyAmIEJPT1RfRU5BQkxFKSkgeworCQkJLyogQ2hvb3NlIHRoaXMgRkNGIHJlY29yZCAqLworCQkJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsIGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkLAorCQkJCQlhZGRyX21vZGUsIHZsYW5faWQsIEJPT1RfRU5BQkxFKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CiAJCX0KIAkJLyoKLQkJICogSWYgdGhlIGN1cnJlbnQgRkNGIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCBhbmQgdGhlCi0JCSAqIG5ldyBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnLCByZWFkIHRoZSBuZXh0Ci0JCSAqIEZDRiByZWNvcmQuCisJCSAqIElmIHRoZSBkcml2ZXIgRkNGIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCBhbmQgdGhlCisJCSAqIG5ldyBoYmEgRkNGIHJlY29yZCBkb2VzIG5vdCBoYXZlIGJvb3QgZmxhZywgcmVhZAorCQkgKiB0aGUgbmV4dCBGQ0YgcmVjb3JkLgogCQkgKi8KLQkJaWYgKCFib290X2ZsYWcgJiYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9CT09UX0VOQUJMRSkpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJaWYgKCFib290X2ZsYWcgJiYgKGZjZl9yZWMtPmZsYWcgJiBCT09UX0VOQUJMRSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CiAJCX0KIAkJLyoKLQkJICogSWYgdGhlcmUgaXMgYSByZWNvcmQgd2l0aCBsb3dlciBwcmlvcml0eSB2YWx1ZSBmb3IKLQkJICogdGhlIGN1cnJlbnQgRkNGLCB1c2UgdGhhdCByZWNvcmQuCisJCSAqIElmIHRoZSBuZXcgaGJhIEZDRiByZWNvcmQgaGFzIGxvd2VyIHByaW9yaXR5IHZhbHVlCisJCSAqIHRoYW4gdGhlIGRyaXZlciBGQ0YgcmVjb3JkLCB1c2UgdGhlIG5ldyByZWNvcmQuCiAJCSAqLwotCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuZmFicmljX25hbWUsCi0JCQkJCW5ld19mY2ZfcmVjb3JkKSAmJgotCQkgICAgKG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHkgPCBwaGJhLT5mY2YucHJpb3JpdHkpKSB7Ci0JCQkvKiBVc2UgdGhpcyBGQ0YgcmVjb3JkICovCi0JCQlscGZjX2NvcHlfZmNmX3JlY29yZChwaGJhLCBuZXdfZmNmX3JlY29yZCk7Ci0JCQlwaGJhLT5mY2YuYWRkcl9tb2RlID0gYWRkcl9tb2RlOwotCQkJaWYgKHZsYW5faWQgIT0gMHhGRkZGKSB7Ci0JCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9WQUxJRF9WTEFOOwotCQkJCXBoYmEtPmZjZi52bGFuX2lkID0gdmxhbl9pZDsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKLQkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKKwkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2goZmNmX3JlYy0+ZmFicmljX25hbWUsIG5ld19mY2ZfcmVjb3JkKSAmJgorCQkgICAgKG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHkgPCBmY2ZfcmVjLT5wcmlvcml0eSkpIHsKKwkJCS8qIENob29zZSB0aGlzIEZDRiByZWNvcmQgKi8KKwkJCV9fbHBmY191cGRhdGVfZmNmX3JlY29yZChwaGJhLCBmY2ZfcmVjLCBuZXdfZmNmX3JlY29yZCwKKwkJCQkJYWRkcl9tb2RlLCB2bGFuX2lkLCAwKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAl9CiAJLyoKLQkgKiBUaGlzIGlzIHRoZSBmaXJzdCBhdmFpbGFibGUgRkNGIHJlY29yZCwgdXNlIHRoaXMKLQkgKiByZWNvcmQuCisJICogVGhpcyBpcyB0aGUgZmlyc3Qgc3VpdGFibGUgRkNGIHJlY29yZCwgY2hvb3NlIHRoaXMgcmVjb3JkIGZvcgorCSAqIGluaXRpYWwgYmVzdC1maXQgRkNGLgogCSAqLwotCWxwZmNfY29weV9mY2ZfcmVjb3JkKHBoYmEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuYWRkcl9tb2RlID0gYWRkcl9tb2RlOwotCWlmIChib290X2ZsYWcpCi0JCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfQk9PVF9FTkFCTEU7Ci0JcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9BVkFJTEFCTEU7Ci0JaWYgKHZsYW5faWQgIT0gMHhGRkZGKSB7Ci0JCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfVkFMSURfVkxBTjsKLQkJcGhiYS0+ZmNmLnZsYW5faWQgPSB2bGFuX2lkOworCWlmIChmY2ZfcmVjKSB7CisJCV9fbHBmY191cGRhdGVfZmNmX3JlY29yZChwaGJhLCBmY2ZfcmVjLCBuZXdfZmNmX3JlY29yZCwKKwkJCQkJIGFkZHJfbW9kZSwgdmxhbl9pZCwgKGJvb3RfZmxhZyA/CisJCQkJCSBCT09UX0VOQUJMRSA6IDApKTsKKwkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9BVkFJTEFCTEU7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAogcmVhZF9uZXh0X2ZjZjoKIAlscGZjX3NsaTRfbWJveF9jbWRfZnJlZShwaGJhLCBtYm94cSk7Ci0JaWYgKG5leHRfZmNmX2luZGV4ID09IExQRkNfRkNPRV9GQ0ZfTkVYVF9OT05FIHx8IG5leHRfZmNmX2luZGV4ID09IDApCi0JCWxwZmNfcmVnaXN0ZXJfZmNmKHBoYmEpOwotCWVsc2UKKwlpZiAobmV4dF9mY2ZfaW5kZXggPT0gTFBGQ19GQ09FX0ZDRl9ORVhUX05PTkUgfHwgbmV4dF9mY2ZfaW5kZXggPT0gMCkgeworCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpIHsKKwkJCS8qCisJCQkgKiBDYXNlIG9mIEZDRiBmYXN0IGZhaWxvdmVyIHNjYW4KKwkJCSAqLworCisJCQkvKgorCQkJICogSXQgaGFzIG5vdCBmb3VuZCBhbnkgc3VpdGFibGUgRkNGIHJlY29yZCwgY2FuY2VsCisJCQkgKiBGQ0Ygc2NhbiBpbnByb2dyZXNzLCBhbmQgZG8gbm90aGluZworCQkJICovCisJCQlpZiAoIShwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLmZsYWcgJiBSRUNPUkRfVkFMSUQpKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQkJcGhiYS0+aGJhX2ZsYWcgJj0gfkZDRl9ESVNDX0lOUFJPR1JFU1M7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQkvKgorCQkJICogSXQgaGFzIGZvdW5kIGEgc3VpdGFibGUgRkNGIHJlY29yZCB0aGF0IGlzIG5vdAorCQkJICogdGhlIHNhbWUgYXMgaW4tdXNlIEZDRiByZWNvcmQsIHVucmVnaXN0ZXIgdGhlCisJCQkgKiBpbi11c2UgRkNGIHJlY29yZCwgcmVwbGFjZSB0aGUgaW4tdXNlIEZDRiByZWNvcmQKKwkJCSAqIHdpdGggdGhlIG5ldyBGQ0YgcmVjb3JkLCBtYXJrIEZDRiBmYXN0IGZhaWxvdmVyCisJCQkgKiBjb21wbGV0ZWQsIGFuZCB0aGVuIHN0YXJ0IHJlZ2lzdGVyIHRoZSBuZXcgRkNGCisJCQkgKiByZWNvcmQuCisJCQkgKi8KKworCQkJLyogdW5yZWdpc3RlciB0aGUgY3VycmVudCBpbi11c2UgRkNGIHJlY29yZCAqLworCQkJbHBmY191bnJlZ2lzdGVyX2ZjZihwaGJhKTsKKwkJCS8qIHJlcGxhY2UgaW4tdXNlIHJlY29yZCB3aXRoIHRoZSBuZXcgcmVjb3JkICovCisJCQltZW1jcHkoJnBoYmEtPmZjZi5jdXJyZW50X3JlYywKKwkJCSAgICAgICAmcGhiYS0+ZmNmLmZhaWxvdmVyX3JlYywKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGxwZmNfZmNmX3JlYykpOworCQkJLyogbWFyayB0aGUgRkNGIGZhc3QgZmFpbG92ZXIgY29tcGxldGVkICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19GT1Y7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJLyogUmVnaXN0ZXIgdG8gdGhlIG5ldyBGQ0YgcmVjb3JkICovCisJCQlscGZjX3JlZ2lzdGVyX2ZjZihwaGJhKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHBlcmlvZCB0byBmYXN0IEZDRiBmYWlsb3ZlciwKKwkJCSAqIGRvIG5vdGhpbmcgd2hlbiBzZWFyY2ggdG8gdGhlIGVuZCBvZiB0aGUgRkNGIHRhYmxlLgorCQkJICovCisJCQlpZiAoKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRVZUKSB8fAorCQkJICAgIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpKQorCQkJCXJldHVybjsKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UsIGluaXRpYWwgc2NhbiBvciBwb3N0IGxpbmtkb3duIHJlc2NhbiwKKwkJCSAqIHJlZ2lzdGVyIHdpdGggdGhlIGJlc3QgZml0IEZDRiByZWNvcmQgZm91bmQgc28KKwkJCSAqIGZhciB0aHJvdWdoIHRoZSBzY2FubmluZyBwcm9jZXNzLgorCQkJICovCisJCQlscGZjX3JlZ2lzdGVyX2ZjZihwaGJhKTsKKwkJfQorCX0gZWxzZQogCQlscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIG5leHRfZmNmX2luZGV4KTsKIAlyZXR1cm47CiAKQEAgLTE2OTUsMTAgKzE3OTksMTMgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgY29tcGxldGlvbiBvZiBpbml0IHZwaSBtYWlsYm94IGNvbW1hbmQuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBscGZjX2luaXRfdnBpX2NtcGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKm1ib3hxKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IG1ib3hxLT52cG9ydDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisKIAlpZiAobWJveHEtPnUubWIubWJ4U3RhdHVzKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAogCQkJCUxPR19NQk9YLApAQCAtMTcwOCw5ICsxODE1LDIzIEBACiAJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9GQUlMRUQpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX0lOSVRfVlBJOwotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCisJLyogSWYgdGhpcyBwb3J0IGlzIHBoeXNpY2FsIHBvcnQgb3IgRkRJU0MgaXMgZG9uZSwgZG8gcmVnX3ZwaSAqLworCWlmICgocGhiYS0+cHBvcnQgPT0gdnBvcnQpIHx8ICh2cG9ydC0+cG9ydF9zdGF0ZSA9PSBMUEZDX0ZESVNDKSkgeworCQkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHZwb3J0LCBGYWJyaWNfRElEKTsKKwkJCWlmICghbmRscCkKKwkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwKKwkJCQkJTE9HX0RJU0NPVkVSWSwKKwkJCQkJIjI3MzEgQ2Fubm90IGZpbmQgZmFicmljICIKKwkJCQkJImNvbnRyb2xsZXIgbm9kZVxuIik7CisJCQllbHNlCisJCQkJbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQocGhiYSwgdnBvcnQsIG5kbHApOworCQkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJCXJldHVybjsKKwl9CiAKIAlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTlBJVl9GQUJfU1VQUE9SVEVEKQogCQlscGZjX2luaXRpYWxfZmRpc2ModnBvcnQpOwpAQCAtMTcxOSwxMCArMTg0MCw0MiBAQAogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0VMUywKIAkJCQkgIjI2MDYgTm8gTlBJViBGYWJyaWMgc3VwcG9ydFxuIik7CiAJfQorCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuOwogfQogCiAvKioKKyAqIGxwZmNfaXNzdWVfaW5pdF92cGkgLSBJc3N1ZSBpbml0X3ZwaSBtYWlsYm94IGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gbHBmY192cG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlIGEgaW5pdF92cGkgbWFpbGJveCBjb21tYW5kIHRvIGluaXRpYWxpemUKKyAqIFZQSSBmb3IgdGhlIHZwb3J0LgorICovCit2b2lkCitscGZjX2lzc3VlX2luaXRfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwlMUEZDX01CT1hRX3QgKm1ib3hxOworCWludCByYzsKKworCW1ib3hxID0gbWVtcG9vbF9hbGxvYyh2cG9ydC0+cGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94cSkgeworCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwKKwkJCUxPR19NQk9YLCAiMjYwNyBGYWlsZWQgdG8gYWxsb2NhdGUgIgorCQkJImluaXRfdnBpIG1haWxib3hcbiIpOworCQlyZXR1cm47CisJfQorCWxwZmNfaW5pdF92cGkodnBvcnQtPnBoYmEsIG1ib3hxLCB2cG9ydC0+dnBpKTsKKwltYm94cS0+dnBvcnQgPSB2cG9ydDsKKwltYm94cS0+bWJveF9jbXBsID0gbHBmY19pbml0X3ZwaV9jbXBsOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveCh2cG9ydC0+cGhiYSwgbWJveHEsIE1CWF9OT1dBSVQpOworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJTE9HX01CT1gsICIyNjA4IEZhaWxlZCB0byBpc3N1ZSBpbml0X3ZwaSBtYWlsYm94XG4iKTsKKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCB2cG9ydC0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CisJfQorfQorCisvKioKICAqIGxwZmNfc3RhcnRfZmRpc2NzIC0gc2VuZCBmZGlzY3MgZm9yIGVhY2ggdnBvcnRzIG9uIHRoaXMgcG9ydC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTE3MzQsOCArMTg4Nyw2IEBACiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CiAJaW50IGk7Ci0JTFBGQ19NQk9YUV90ICptYm94cTsKLQlpbnQgcmM7CiAKIAl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwogCWlmICh2cG9ydHMgIT0gTlVMTCkgewpAQCAtMTc1NCwyNiArMTkwNSw3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAodnBvcnRzW2ldLT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEkpIHsKLQkJCQltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKCFtYm94cSkgewotCQkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0c1tpXSwgS0VSTl9FUlIsCi0JCQkJCUxPR19NQk9YLCAiMjYwNyBGYWlsZWQgdG8gYWxsb2NhdGUgIgotCQkJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlscGZjX2luaXRfdnBpKHBoYmEsIG1ib3hxLCB2cG9ydHNbaV0tPnZwaSk7Ci0JCQkJbWJveHEtPnZwb3J0ID0gdnBvcnRzW2ldOwotCQkJCW1ib3hxLT5tYm94X2NtcGwgPSBscGZjX2luaXRfdnBpX2NtcGw7Ci0JCQkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLAotCQkJCQlNQlhfTk9XQUlUKTsKLQkJCQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgewotCQkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0c1tpXSwgS0VSTl9FUlIsCi0JCQkJCUxPR19NQk9YLCAiMjYwOCBGYWlsZWQgdG8gaXNzdWUgIgotCQkJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7Ci0JCQkJCW1lbXBvb2xfZnJlZShtYm94cSwKLQkJCQkJCXBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQkJCX0KKwkJCQlscGZjX2lzc3VlX2luaXRfdnBpKHZwb3J0c1tpXSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTlBJVl9GQUJfU1VQUE9SVEVEKQpAQCAtMTc5Niw2ICsxOTI4LDcgQEAKIHsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZiA9IG1ib3hxLT5jb250ZXh0MTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBtYm94cS0+dnBvcnQ7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOwogCiAJaWYgKG1ib3hxLT51Lm1iLm1ieFN0YXR1cykgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX01CT1gsCkBAIC0xODEzLDcgKzE5NDYsMTEgQEAKIAkJZ290byBmYWlsX2ZyZWVfbWVtOwogCX0KIAkvKiBUaGUgVlBJIGlzIGltcGxpY2l0bHkgcmVnaXN0ZXJlZCB3aGVuIHRoZSBWRkkgaXMgcmVnaXN0ZXJlZCAqLworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPnZwaV9zdGF0ZSB8PSBMUEZDX1ZQSV9SRUdJU1RFUkVEOworCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZGSV9SRUdJU1RFUkVEOworCXZwb3J0LT5mY19mbGFnICY9IH5GQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA9PSBMUEZDX0ZBQlJJQ19DRkdfTElOSykgewogCQlscGZjX3N0YXJ0X2ZkaXNjcyhwaGJhKTsKQEAgLTIwNTAsOCArMjE4Nyw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsCi0JCQkJCUxQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKwkJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMjEzOSwxMCArMjI3NSwxMiBAQAogCX0KIAogCXBoYmEtPmZjX2V2ZW50VGFnID0gbGEtPmV2ZW50VGFnOworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCWlmIChsYS0+bW0pCiAJCXBoYmEtPnNsaS5zbGlfZmxhZyB8PSBMUEZDX01FTkxPX01BSU5UOwogCWVsc2UKIAkJcGhiYS0+c2xpLnNsaV9mbGFnICY9IH5MUEZDX01FTkxPX01BSU5UOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAKIAlwaGJhLT5saW5rX2V2ZW50cysrOwogCWlmIChsYS0+YXR0VHlwZSA9PSBBVF9MSU5LX1VQICYmICghbGEtPm1tKSkgewpAQCAtMjI3MSwxMCArMjQwOSwxMCBAQAogCQkJCSBtYi0+bWJ4U3RhdHVzKTsKIAkJYnJlYWs7CiAJfQotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPnZwaV9zdGF0ZSAmPSB+TFBGQ19WUElfUkVHSVNURVJFRDsKIAl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOwotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT51bnJlZ192cGlfY21wbCA9IFZQT1JUX09LOwogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCS8qCkBAIC0yMzMyLDcgKzI0NzAsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlIHw9IExQRkNfVlBJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT5udW1fZGlzY19ub2RlcyA9IDA7CiAJLyogZ28gdGhydSBOUFIgbGlzdCBhbmQgaXNzdWUgRUxTIFBMT0dJcyAqLwogCWlmICh2cG9ydC0+ZmNfbnByX2NudCkKQEAgLTMyMTgsNiArMzM1OSwzNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfdW5yZWdfaGJhX3JwaXMgLSBVbnJlZ2lzdGVyIHJwaXMgcmVnaXN0ZXJlZCB0byB0aGUgaGJhLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gdW5yZWdpc3RlciBhbGwgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIFJQSXMKKyAqIHRvIHRoZSBIQkEuCisgKiovCit2b2lkCitscGZjX3VucmVnX2hiYV9ycGlzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlpbnQgaTsKKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCAmdnBvcnRzW2ldLT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfUlBJX1ZBTElEKQorCQkJCWxwZmNfdW5yZWdfcnBpKHZwb3J0c1tpXSwgbmRscCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCX0KKwlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworfQorCiB2b2lkCiBscGZjX3VucmVnX2FsbF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTQ0NDgsNiArNDYxNywxOTUgQEAKIH0KIAogLyoqCisgKiBscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAgLSBVbnJlZ2lzdGVyIGZjZiByZWNvcmQgcHJlcGFyYXRpb24KKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmUgdGhlIEhCQSBmb3IgdW5yZWdpc3RlcmluZyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQKKyAqIEZDRiBmcm9tIHRoZSBIQkEuIEl0IHBlcmZvcm1zIHVucmVnaXN0ZXJpbmcsIGluIG9yZGVyLCBSUElzLCBWUElzLCBhbmQKKyAqIFZGSXMuCisgKi8KK2ludAorbHBmY191bnJlZ2lzdGVyX2ZjZl9wcmVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlMUEZDX01CT1hRX3QgKm1ib3g7CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJaW50IGksIHJjOworCisJLyogVW5yZWdpc3RlciBSUElzICovCisJaWYgKGxwZmNfZmNmX2ludXNlKHBoYmEpKQorCQlscGZjX3VucmVnX2hiYV9ycGlzKHBoYmEpOworCisJLyogQXQgdGhpcyBwb2ludCwgYWxsIGRpc2NvdmVyeSBpcyBhYm9ydGVkICovCisJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX1ZQT1JUX1VOS05PV047CisKKwkvKiBVbnJlZ2lzdGVyIFZQSXMgKi8KKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCWlmICh2cG9ydHMgJiYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpKQorCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJLyogU3RvcCBGTE9HSS9GRElTQyByZXRyaWVzICovCisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnRzW2ldLCBGYWJyaWNfRElEKTsKKwkJCWlmIChuZGxwKQorCQkJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3Rtbyh2cG9ydHNbaV0sIG5kbHApOworCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0c1tpXSk7CisJCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKKwkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQl9CisJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKworCS8qIENsZWFudXAgYW55IG91dHN0YW5kaW5nIEVMUyBjb21tYW5kcyAqLworCWxwZmNfZWxzX2ZsdXNoX2FsbF9jbWQocGhiYSk7CisKKwkvKiBVbnJlZ2lzdGVyIFZGSSAqLworCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCisJCQkJIjI1NTYgVU5SRUdfVkZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCisJCQkJIkhCQSBzdGF0ZSB4JXhcbiIsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbHBmY191bnJlZ192ZmkobWJveCwgcGhiYS0+cHBvcnQpOworCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX3ZmaV9jbXBsOworCisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQpOworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1NyBVTlJFR19WRkkgaXNzdWUgbWJveCBmYWlsZWQgcmMgeCV4ICIKKwkJCQkiSEJBIHN0YXRlIHgleFxuIiwKKwkJCQlyYywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOworCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHBoYmEtPnBwb3J0KTsKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXBoYmEtPnBwb3J0LT5mY19mbGFnICY9IH5GQ19WRklfUkVHSVNURVJFRDsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjX3NsaTRfdW5yZWdpc3Rlcl9mY2YgLSBVbnJlZ2lzdGVyIGN1cnJlbnRseSByZWdpc3RlcmVkIEZDRiByZWNvcmQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBzeW5jaHJvbm91cyB1bnJlZ2lzdGVyIEZDRiBtYWlsYm94IGNvbW1hbmQgdG8gSEJBIHRvCisgKiB1bnJlZ2lzdGVyIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBGQ0YgcmVjb3JkLiBUaGUgZHJpdmVyIGRvZXMgbm90IHJlc2V0CisgKiB0aGUgZHJpdmVyIEZDRiB1c2FnZSBzdGF0ZSBmbGFncy4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsbHkgaXNzdWVkLCBub25lLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQKK2xwZmNfc2xpNF91bnJlZ2lzdGVyX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCWludCByYzsKKworCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCisJCQkJIjI1NTEgVU5SRUdfRkNGSSBtYm94IGFsbG9jYXRpb24gZmFpbGVkIgorCQkJCSJIQkEgc3RhdGUgeCV4XG4iLCBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlscGZjX3VucmVnX2ZjZmkobWJveCwgcGhiYS0+ZmNmLmZjZmkpOworCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX2ZjZmlfY21wbDsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveCwgTUJYX05PV0FJVCk7CisKKwlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCisJCQkJIjI1NTIgVW5yZWdpc3RlciBGQ0ZJIGNvbW1hbmQgZmFpbGVkIHJjIHgleCAiCisJCQkJIkhCQSBzdGF0ZSB4JXhcbiIsCisJCQkJcmMsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcmVzY2FuIC0gVW5yZWdpc3RlciBjdXJyZW50bHkgcmVnaXN0ZXJlZCBmY2YgYW5kIHJlc2NhbgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgdGhlIGN1cnJlbnRseSByZWlnc3RlcmVkIEZDRi4gVGhpcyBmdW5jdGlvbgorICogYWxzbyB0cmllcyB0byBmaW5kIGFub3RoZXIgRkNGIGZvciBkaXNjb3ZlcnkgYnkgcmVzY2FuIHRoZSBIQkEgRkNGIHRhYmxlLgorICovCit2b2lkCitscGZjX3VucmVnaXN0ZXJfZmNmX3Jlc2NhbihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJaW50IHJjOworCisJLyogUHJlcGFyYXRpb24gZm9yIHVucmVnaXN0ZXJpbmcgZmNmICovCisJcmMgPSBscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAocGhiYSk7CisJaWYgKHJjKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKKwkJCQkiMjc0OCBGYWlsZWQgdG8gcHJlcGFyZSBmb3IgdW5yZWdpc3RlcmluZyAiCisJCQkJIkhCQSdzIEZDRiByZWNvcmQ6IHJjPSVkXG4iLCByYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3csIHVucmVnaXN0ZXIgRkNGIHJlY29yZCBhbmQgcmVzZXQgSEJBIEZDRiBzdGF0ZSAqLworCXJjID0gbHBmY19zbGk0X3VucmVnaXN0ZXJfZmNmKHBoYmEpOworCWlmIChyYykKKwkJcmV0dXJuOworCS8qIFJlc2V0IEhCQSBGQ0Ygc3RhdGVzIGFmdGVyIHN1Y2Nlc3NmdWwgdW5yZWdpc3RlciBGQ0YgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgPSAwOworCisJLyoKKwkgKiBJZiBkcml2ZXIgaXMgbm90IHVubG9hZGluZywgY2hlY2sgaWYgdGhlcmUgaXMgYW55IG90aGVyCisJICogRkNGIHJlY29yZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBkaXNjb3ZlcnkuCisJICovCisJaWYgKChwaGJhLT5wcG9ydC0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKSB8fAorCSAgICAocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19VUCkpCisJCXJldHVybjsKKworCXJjID0gbHBmY19zbGk0X3JlYWRfZmNmX3JlY29yZChwaGJhLCBMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7CisKKwlpZiAocmMpCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1MyBscGZjX3VucmVnaXN0ZXJfdW51c2VkX2ZjZiBmYWlsZWQgIgorCQkJCSJ0byByZWFkIEZDRiByZWNvcmQgSEJBIHN0YXRlIHgleFxuIiwKKwkJCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7Cit9CisKKy8qKgorICogbHBmY191bnJlZ2lzdGVyX2ZjZiAtIFVucmVnaXN0ZXIgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGZjZiByZWNvcmQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGp1c3QgdW5yZWdpc3RlcnMgdGhlIGN1cnJlbnRseSByZWlnc3RlcmVkIEZDRi4gSXQgZG9lcyBub3QKKyAqIHRyeSB0byBmaW5kIGFub3RoZXIgRkNGIGZvciBkaXNjb3ZlcnkuCisgKi8KK3ZvaWQKK2xwZmNfdW5yZWdpc3Rlcl9mY2Yoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCWludCByYzsKKworCS8qIFByZXBhcmF0aW9uIGZvciB1bnJlZ2lzdGVyaW5nIGZjZiAqLworCXJjID0gbHBmY191bnJlZ2lzdGVyX2ZjZl9wcmVwKHBoYmEpOworCWlmIChyYykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCisJCQkJIjI3NDkgRmFpbGVkIHRvIHByZXBhcmUgZm9yIHVucmVnaXN0ZXJpbmcgIgorCQkJCSJIQkEncyBGQ0YgcmVjb3JkOiByYz0lZFxuIiwgcmMpOworCQlyZXR1cm47CisJfQorCisJLyogTm93LCB1bnJlZ2lzdGVyIEZDRiByZWNvcmQgYW5kIHJlc2V0IEhCQSBGQ0Ygc3RhdGUgKi8KKwlyYyA9IGxwZmNfc2xpNF91bnJlZ2lzdGVyX2ZjZihwaGJhKTsKKwlpZiAocmMpCisJCXJldHVybjsKKwkvKiBTZXQgcHJvcGVyIEhCQSBGQ0Ygc3RhdGVzIGFmdGVyIHN1Y2Nlc3NmdWwgdW5yZWdpc3RlciBGQ0YgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRUdJU1RFUkVEOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CisKKy8qKgogICogbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2YgLSBVbnJlZ2lzdGVyIEZDRiBpZiBhbGwgZGV2aWNlcyBhcmUgZGlzY29ubmVjdGVkLgogICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgogICoKQEAgLTQ0NTgsMjEgKzQ4MTYsMTQgQEAKIHZvaWQKIGxwZmNfdW5yZWdpc3Rlcl91bnVzZWRfZmNmKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlMUEZDX01CT1hRX3QgKm1ib3g7Ci0JaW50IHJjOwotCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJLyoKLQkgKiBJZiBIQkEgaXMgbm90IHJ1bm5pbmcgaW4gRklQIG1vZGUgb3IKLQkgKiBJZiBIQkEgZG9lcyBub3Qgc3VwcG9ydCBGQ29FIG9yCi0JICogSWYgRkNGIGlzIG5vdCByZWdpc3RlcmVkLgotCSAqIGRvIG5vdGhpbmcuCisJICogSWYgSEJBIGlzIG5vdCBydW5uaW5nIGluIEZJUCBtb2RlIG9yIGlmIEhCQSBkb2VzIG5vdCBzdXBwb3J0CisJICogRkNvRSBvciBpZiBGQ0YgaXMgbm90IHJlZ2lzdGVyZWQsIGRvIG5vdGhpbmcuCiAJICovCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKCEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9TVVBQT1JUKSB8fAotCQkhKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRUdJU1RFUkVEKSB8fAotCQkoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVCkpKSB7CisJICAgICEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFR0lTVEVSRUQpIHx8CisJICAgICEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRklQX1NVUFBPUlQpKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC00NDgxLDkxICs0ODMyLDcgQEAKIAlpZiAobHBmY19mY2ZfaW51c2UocGhiYSkpCiAJCXJldHVybjsKIAotCS8qIEF0IHRoaXMgcG9pbnQsIGFsbCBkaXNjb3ZlcnkgaXMgYWJvcnRlZCAqLwotCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19WUE9SVF9VTktOT1dOOwotCi0JLyogVW5yZWdpc3RlciBWUElzICovCi0JdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKLQlpZiAodnBvcnRzICYmCi0JCShwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEKSkKLQkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKLQkJCWxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydHNbaV0pOwotCQkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCQl2cG9ydHNbaV0tPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7Ci0JCQl2cG9ydHNbaV0tPnZwaV9zdGF0ZSAmPSB+TFBGQ19WUElfUkVHSVNURVJFRDsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCX0KLQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwotCi0JLyogVW5yZWdpc3RlciBWRkkgKi8KLQltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1ib3gpIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAotCQkJIjI1NTYgVU5SRUdfVkZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCi0JCQkiSEJBIHN0YXRlIHgleFxuIiwKLQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotCWxwZmNfdW5yZWdfdmZpKG1ib3gsIHBoYmEtPnBwb3J0KTsKLQltYm94LT52cG9ydCA9IHBoYmEtPnBwb3J0OwotCW1ib3gtPm1ib3hfY21wbCA9IGxwZmNfdW5yZWdpc3Rlcl92ZmlfY21wbDsKLQotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKLQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1NyBVTlJFR19WRkkgaXNzdWUgbWJveCBmYWlsZWQgcmMgeCV4ICIKLQkJCSJIQkEgc3RhdGUgeCV4XG4iLAotCQkJcmMsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogVW5yZWdpc3RlciBGQ0YgKi8KLQltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1ib3gpIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAotCQkJIjI1NTEgVU5SRUdfRkNGSSBtYm94IGFsbG9jYXRpb24gZmFpbGVkIgotCQkJIkhCQSBzdGF0ZSB4JXhcbiIsCi0JCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlscGZjX3VucmVnX2ZjZmkobWJveCwgcGhiYS0+ZmNmLmZjZmkpOwotCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7Ci0JbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX2ZjZmlfY21wbDsKLQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveCwgTUJYX05PV0FJVCk7Ci0KLQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1MiBVTlJFR19GQ0ZJIGlzc3VlIG1ib3ggZmFpbGVkIHJjIHgleCAiCi0JCQkiSEJBIHN0YXRlIHgleFxuIiwKLQkJCXJjLCBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7Ci0JCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfUkVHSVNURVJFRCB8Ci0JCUZDRl9ESVNDT1ZFUkVEIHwgRkNGX0JPT1RfRU5BQkxFIHwgRkNGX0lOX1VTRSB8Ci0JCUZDRl9WQUxJRF9WTEFOKTsKLQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCi0JLyoKLQkgKiBJZiBkcml2ZXIgaXMgbm90IHVubG9hZGluZywgY2hlY2sgaWYgdGhlcmUgaXMgYW55IG90aGVyCi0JICogRkNGIHJlY29yZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBkaXNjb3ZlcnkuCi0JICovCi0JaWYgKChwaGJhLT5wcG9ydC0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKSB8fAotCQkocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19VUCkpCi0JCXJldHVybjsKLQotCXJjID0gbHBmY19zbGk0X3JlYWRfZmNmX3JlY29yZChwaGJhLCBMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7Ci0KLQlpZiAocmMpCi0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKLQkJCSIyNTUzIGxwZmNfdW5yZWdpc3Rlcl91bnVzZWRfZmNmIGZhaWxlZCB0byByZWFkIEZDRiIKLQkJCSIgcmVjb3JkIEhCQSBzdGF0ZSB4JXhcbiIsCi0JCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CisJbHBmY191bnJlZ2lzdGVyX2ZjZl9yZXNjYW4ocGhiYSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCmluZGV4IGM5ZmFhMWQuLjg5ZmY3YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTEzNDYsNiArMTM0Niw5IEBACiAjZGVmaW5lIE1CWF9IRUFSVEJFQVQgICAgICAgMHgzMQogI2RlZmluZSBNQlhfV1JJVEVfVlBBUk1TICAgIDB4MzIKICNkZWZpbmUgTUJYX0FTWU5DRVZUX0VOQUJMRSAweDMzCisjZGVmaW5lIE1CWF9SRUFEX0VWRU5UX0xPR19TVEFUVVMgMHgzNworI2RlZmluZSBNQlhfUkVBRF9FVkVOVF9MT0cgIDB4MzgKKyNkZWZpbmUgTUJYX1dSSVRFX0VWRU5UX0xPRyAweDM5CiAKICNkZWZpbmUgTUJYX1BPUlRfQ0FQQUJJTElUSUVTIDB4M0IKICNkZWZpbmUgTUJYX1BPUlRfSU9WX0NPTlRST0wgMHgzQwpAQCAtMTQ2NSwxNyArMTQ2OCwxMyBAQAogI2RlZmluZSBDTURfSU9DQl9MT0dFTlRSWV9DTgkJMHg5NAogI2RlZmluZSBDTURfSU9DQl9MT0dFTlRSWV9BU1lOQ19DTgkweDk2CiAKLS8qIFVuaGFuZGxlZCBEYXRhIFNlY3VyaXR5IFNMSSBDb21tYW5kcyAqLwotI2RlZmluZSBEU1NDTURfSVdSSVRFNjRfQ1IgCQkweEQ4Ci0jZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DWAkJMHhEOQotI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DUgkJMHhEQQotI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DWAkJMHhEQgotI2RlZmluZSBEU1NDTURfSU5WQUxJREFURV9ERUsJCTB4REMKLSNkZWZpbmUgRFNTQ01EX1NFVF9LRUsJCQkweERECi0jZGVmaW5lIERTU0NNRF9HRVRfS0VLX0lECQkweERFCi0jZGVmaW5lIERTU0NNRF9HRU5fWEZFUgkJCTB4REYKKy8qIERhdGEgU2VjdXJpdHkgU0xJIENvbW1hbmRzICovCisjZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DUgkJMHhGOAorI2RlZmluZSBEU1NDTURfSVdSSVRFNjRfQ1gJCTB4RjkKKyNkZWZpbmUgRFNTQ01EX0lSRUFENjRfQ1IJCTB4RkEKKyNkZWZpbmUgRFNTQ01EX0lSRUFENjRfQ1gJCTB4RkIKIAotI2RlZmluZSBDTURfTUFYX0lPQ0JfQ01EICAgICAgICAweEU2CisjZGVmaW5lIENNRF9NQVhfSU9DQl9DTUQgICAgICAgIDB4RkIKICNkZWZpbmUgQ01EX0lPQ0JfTUFTSyAgICAgICAgICAgMHhmZgogCiAjZGVmaW5lIE1BWF9NU0dfREFUQSAgICAgICAgICAgIDI4CS8qIG1heCBtc2cgZGF0YSBpbiBDTURfQURBUFRFUl9NU0cKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCmluZGV4IDhhMmExYzUuLjgyMDAxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaApAQCAtNTIsMzUgKzUyLDM3IEBACiAJdWludDMyX3QgYWRkcl9oaTsKIH07CiAKLSNkZWZpbmUgTFBGQ19TTElSRVZfQ09ORl9XT1JECTB4NTgKIHN0cnVjdCBscGZjX3NsaV9pbnRmIHsKIAl1aW50MzJfdCB3b3JkMDsKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZnR5cGVfTUFTSyAJMHgwMDAwMDAwNwotI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmdHlwZV9TSElGVAkwCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZ0eXBlX1dPUkQJd29yZDAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9yZXZfTUFTSyAJCTB4MDAwMDAwMGYKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9yZXZfU0hJRlQJCTQKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9yZXZfV09SRAkJd29yZDAKLSNkZWZpbmUgTFBGQ19TTElSRVZfQ09ORl9TTEk0CTQKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mYW1pbHlfTUFTSyAJMHgwMDAwMDBmZgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZhbWlseV9TSElGVAk4Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmFtaWx5X1dPUkQJd29yZDAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0MV9NQVNLIAkweDAwMDAwMGZmCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDFfU0hJRlQJMTYKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0MV9XT1JECXdvcmQwCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDJfTUFTSyAJMHgwMDAwMDAxZgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQyX1NISUZUCTI0Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDJfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX01BU0sgCTB4MDAwMDAwMDcKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9TSElGVAkyOQotI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9TSElGVAkJMjkKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9NQVNLCQkweDAwMDAwMDA3CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfV09SRAkJd29yZDAKICNkZWZpbmUgTFBGQ19TTElfSU5URl9WQUxJRAkJNgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfU0hJRlQJMjQKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwyX01BU0sJMHgwMDAwMDAxRgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfU0hJRlQJMTYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxX01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfV09SRAl3b3JkMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX0ZFQVRVUkVMRVZFTDFfMQkxCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8yCTIKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5X1NISUZUCQk4CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpX2ZhbWlseV9NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpX2ZhbWlseV9XT1JECQl3b3JkMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX0ZBTUlMWV9CRTIJMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX0ZBTUlMWV9CRTMJMQorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaXJldl9TSElGVAkJNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaXJldl9NQVNLCQkweDAwMDAwMDBGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfUkVWX1NMSTMJCTMKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9SRVZfU0xJNAkJNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZl90eXBlX01BU0sJCTB4MDAwMDAwMDcKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZl90eXBlX1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wCQkwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8xCQkxCiB9OwogCi0jZGVmaW5lIExQRkNfU0xJNF9CQVIwCQkxCi0jZGVmaW5lIExQRkNfU0xJNF9CQVIxCQkyCi0jZGVmaW5lIExQRkNfU0xJNF9CQVIyCQk0Ci0KICNkZWZpbmUgTFBGQ19TTEk0X01CWF9FTUJFRAl0cnVlCiAjZGVmaW5lIExQRkNfU0xJNF9NQlhfTkVNQkVECWZhbHNlCiAKQEAgLTE2MSw2ICsxNjMsOSBAQAogI2RlZmluZSBMUEZDX0ZQX0RFRl9JTUFYICAgICAgIDEwMDAwCiAjZGVmaW5lIExQRkNfU1BfREVGX0lNQVggICAgICAgMTAwMDAKIAorLyogUE9SVF9DQVBBQklMSVRJRVMgY29uc3RhbnRzLiAqLworI2RlZmluZSBMUEZDX01BWF9TVVBQT1JURURfUEFHRVMJOAorCiBzdHJ1Y3QgdWxwX2JkZTY0IHsKIAl1bmlvbiBVTFBfQkRFX1RVUyB7CiAJCXVpbnQzMl90IHc7CkBAIC01MTYsNyArNTIxLDcgQEAKICNkZWZpbmUgTFBGQ19VRVJSX1NUQVRVU19MTwkJMHgwMEEwCiAjZGVmaW5lIExQRkNfVUVfTUFTS19ISQkJCTB4MDBBQwogI2RlZmluZSBMUEZDX1VFX01BU0tfTE8JCQkweDAwQTgKLSNkZWZpbmUgTFBGQ19TQ1JBVENIUEFECQkJMHgwMDU4CisjZGVmaW5lIExQRkNfU0xJX0lOVEYJCQkweDAwNTgKIAogLyogQkFSMCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgTFBGQ19IU1RfU1RBVEUJCQkweDAwQUMKQEAgLTU3NiwxOSArNTgxLDYgQEAKICNkZWZpbmUgTFBGQ19QT1NUX1NUQUdFX0FSTUZXX1JFQURZCQkJMHhDMDAwCiAjZGVmaW5lIExQRkNfUE9TVF9TVEFHRV9BUk1GV19VRSAJCQkweEYwMDAKIAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfc2xpcmV2X1NISUZUCQkJNAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfc2xpcmV2X01BU0sJCQkweEYKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX3NsaXJldl9XT1JECQkJd29yZDAKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX2NoaXB0eXBlX1NISUZUCQkJOAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfY2hpcHR5cGVfTUFTSwkJCTB4RkYKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX2NoaXB0eXBlX1dPUkQJCQl3b3JkMAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMV9TSElGVAkJMTYKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX2ZlYXR1cmVsZXZlbDFfTUFTSwkJMHhGRgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMV9XT1JECQl3b3JkMAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMl9TSElGVAkJMjQKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX2ZlYXR1cmVsZXZlbDJfTUFTSwkJMHhGRgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMl9XT1JECQl3b3JkMAotCiAvKiBCQVIxIFJlZ2lzdGVycyAqLwogI2RlZmluZSBMUEZDX0lNUl9NQVNLX0FMTAkweEZGRkZGRkZGCiAjZGVmaW5lIExQRkNfSVNDUl9DTEVBUl9BTEwJMHhGRkZGRkZGRgpAQCAtODAxLDYgKzc5Myw3IEBACiAjZGVmaW5lIExQRkNfTUJPWF9PUENPREVfRkNPRV9BRERfRkNGCQkJMHgwOQogI2RlZmluZSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfREVMRVRFX0ZDRgkJMHgwQQogI2RlZmluZSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUE9TVF9IRFJfVEVNUExBVEUJCTB4MEIKKyNkZWZpbmUgTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFRElTQ09WRVJfRkNGCQkweDEwCiAKIC8qIE1haWxib3ggY29tbWFuZCBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3QgZXFfY29udGV4dCB7CkBAIC0xMTQ5LDEwICsxMTQyLDcgQEAKIAkJCQkJCXRoaXMgIGZsYWcgISEgKi8KICNkZWZpbmUgbHBmY19zbGk0X3NnZV9sYXN0X01BU0sJCTB4MDAwMDAwMDEKICNkZWZpbmUgbHBmY19zbGk0X3NnZV9sYXN0X1dPUkQJCXdvcmQyCi0JdWludDMyX3Qgd29yZDM7Ci0jZGVmaW5lIGxwZmNfc2xpNF9zZ2VfbGVuX1NISUZUCQkwCi0jZGVmaW5lIGxwZmNfc2xpNF9zZ2VfbGVuX01BU0sJCTB4MDAwMUZGRkYKLSNkZWZpbmUgbHBmY19zbGk0X3NnZV9sZW5fV09SRAkJd29yZDMKKwl1aW50MzJfdCBzZ2VfbGVuOwogfTsKIAogc3RydWN0IGZjZl9yZWNvcmQgewpAQCAtMTMwMSw2ICsxMjkxLDE5IEBACiAjZGVmaW5lIGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2luZGV4X1dPUkQJCXdvcmQxMAogfTsKIAorc3RydWN0IGxwZmNfbWJ4X3JlZGlzY19mY2ZfdGJsIHsKKwlzdHJ1Y3QgbWJveF9oZWFkZXIgaGVhZGVyOworCXVpbnQzMl90IHdvcmQxMDsKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9jb3VudF9TSElGVAkJMAorI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2NvdW50X01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9jb3VudF9XT1JECQl3b3JkMTAKKwl1aW50MzJfdCByZXN2ZDsKKwl1aW50MzJfdCB3b3JkMTI7CisjZGVmaW5lIGxwZmNfbWJ4X3JlZGlzY19mY2ZfaW5kZXhfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9pbmRleF9NQVNLCQkweDAwMDBGRkZGCisjZGVmaW5lIGxwZmNfbWJ4X3JlZGlzY19mY2ZfaW5kZXhfV09SRAkJd29yZDEyCit9OworCiBzdHJ1Y3QgbHBmY19tYnhfcXVlcnlfZndfY2ZnIHsKIAlzdHJ1Y3QgbWJveF9oZWFkZXIgaGVhZGVyOwogCXVpbnQzMl90IGNvbmZpZ19udW1iZXI7CkBAIC0xODM0LDYgKzE4MzcsMTc3IEBACiAjZGVmaW5lIGxwZmNfbWJ4X3JxX2Z0cl9yc3BfaWZpcF9XT1JECQl3b3JkMwogfTsKIAorc3RydWN0IGxwZmNfbWJ4X3N1cHBfcGFnZXMgeworCXVpbnQzMl90IHdvcmQxOworI2RlZmluZSBxc19TSElGVCAJCQkJMAorI2RlZmluZSBxc19NQVNLCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIHFzX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIHdyX1NISUZUCQkJCTEKKyNkZWZpbmUgd3JfTUFTSyAJCQkJMHgwMDAwMDAwMQorI2RlZmluZSB3cl9XT1JECQkJCQl3b3JkMQorI2RlZmluZSBwZl9TSElGVAkJCQk4CisjZGVmaW5lIHBmX01BU0sJCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcGZfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgY3BuX1NISUZUCQkJCTE2CisjZGVmaW5lIGNwbl9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgY3BuX1dPUkQJCQkJd29yZDEKKwl1aW50MzJfdCB3b3JkMjsKKyNkZWZpbmUgbGlzdF9vZmZzZXRfU0hJRlQgCQkJMAorI2RlZmluZSBsaXN0X29mZnNldF9NQVNLCQkJMHgwMDAwMDBmZgorI2RlZmluZSBsaXN0X29mZnNldF9XT1JECQkJd29yZDIKKyNkZWZpbmUgbmV4dF9vZmZzZXRfU0hJRlQJCQk4CisjZGVmaW5lIG5leHRfb2Zmc2V0X01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIG5leHRfb2Zmc2V0X1dPUkQJCQl3b3JkMgorI2RlZmluZSBlbGVtX2NudF9TSElGVAkJCQkxNgorI2RlZmluZSBlbGVtX2NudF9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgZWxlbV9jbnRfV09SRAkJCQl3b3JkMgorCXVpbnQzMl90IHdvcmQzOworI2RlZmluZSBwbl8wX1NISUZUCQkJCTI0CisjZGVmaW5lIHBuXzBfTUFTSyAgCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fMF9XT1JECQkJCXdvcmQzCisjZGVmaW5lIHBuXzFfU0hJRlQJCQkJMTYKKyNkZWZpbmUgcG5fMV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fMV9XT1JECQkJCXdvcmQzCisjZGVmaW5lIHBuXzJfU0hJRlQJCQkJOAorI2RlZmluZSBwbl8yX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl8yX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgcG5fM19TSElGVAkJCQkwCisjZGVmaW5lIHBuXzNfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzNfV09SRAkJCQl3b3JkMworCXVpbnQzMl90IHdvcmQ0OworI2RlZmluZSBwbl80X1NISUZUCQkJCTI0CisjZGVmaW5lIHBuXzRfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzRfV09SRAkJCQl3b3JkNAorI2RlZmluZSBwbl81X1NISUZUCQkJCTE2CisjZGVmaW5lIHBuXzVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzVfV09SRAkJCQl3b3JkNAorI2RlZmluZSBwbl82X1NISUZUCQkJCTgKKyNkZWZpbmUgcG5fNl9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fNl9XT1JECQkJCXdvcmQ0CisjZGVmaW5lIHBuXzdfU0hJRlQJCQkJMAorI2RlZmluZSBwbl83X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl83X1dPUkQJCQkJd29yZDQKKwl1aW50MzJfdCByc3ZkWzI3XTsKKyNkZWZpbmUgTFBGQ19TVVBQX1BBR0VTCQkJMAorI2RlZmluZSBMUEZDX0JMT0NLX0dVQVJEX1BST0ZJTEVTCTEKKyNkZWZpbmUgTFBGQ19TTEk0X1BBUkFNRVRFUlMJCTIKK307CisKK3N0cnVjdCBscGZjX21ieF9zbGk0X3BhcmFtcyB7CisJdWludDMyX3Qgd29yZDE7CisjZGVmaW5lIHFzX1NISUZUCQkJCTAKKyNkZWZpbmUgcXNfTUFTSwkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBxc19XT1JECQkJCQl3b3JkMQorI2RlZmluZSB3cl9TSElGVAkJCQkxCisjZGVmaW5lIHdyX01BU0sJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgd3JfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgcGZfU0hJRlQJCQkJOAorI2RlZmluZSBwZl9NQVNLCQkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBmX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIGNwbl9TSElGVAkJCQkxNgorI2RlZmluZSBjcG5fTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIGNwbl9XT1JECQkJCXdvcmQxCisJdWludDMyX3Qgd29yZDI7CisjZGVmaW5lIGlmX3R5cGVfU0hJRlQJCQkJMAorI2RlZmluZSBpZl90eXBlX01BU0sJCQkJMHgwMDAwMDAwNworI2RlZmluZSBpZl90eXBlX1dPUkQJCQkJd29yZDIKKyNkZWZpbmUgc2xpX3Jldl9TSElGVAkJCQk0CisjZGVmaW5lIHNsaV9yZXZfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIHNsaV9yZXZfV09SRAkJCQl3b3JkMgorI2RlZmluZSBzbGlfZmFtaWx5X1NISUZUCQkJOAorI2RlZmluZSBzbGlfZmFtaWx5X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBzbGlfZmFtaWx5X1dPUkQJCQkJd29yZDIKKyNkZWZpbmUgZmVhdHVyZWxldmVsXzFfU0hJRlQJCQkxNgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMV9NQVNLCQkJMHgwMDAwMDBmZgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMV9XT1JECQkJd29yZDIKKyNkZWZpbmUgZmVhdHVyZWxldmVsXzJfU0hJRlQJCQkyNAorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMl9NQVNLCQkJMHgwMDAwMDAxZgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMl9XT1JECQkJd29yZDIKKwl1aW50MzJfdCB3b3JkMzsKKyNkZWZpbmUgZmNvZV9TSElGVCAJCQkJMAorI2RlZmluZSBmY29lX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBmY29lX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgZmNfU0hJRlQJCQkJMQorI2RlZmluZSBmY19NQVNLCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIGZjX1dPUkQJCQkJCXdvcmQzCisjZGVmaW5lIG5pY19TSElGVAkJCQkyCisjZGVmaW5lIG5pY19NQVNLCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgbmljX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgaXNjc2lfU0hJRlQJCQkJMworI2RlZmluZSBpc2NzaV9NQVNLCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgaXNjc2lfV09SRAkJCQl3b3JkMworI2RlZmluZSByZG1hX1NISUZUCQkJCTQKKyNkZWZpbmUgcmRtYV9NQVNLCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgcmRtYV9XT1JECQkJCXdvcmQzCisJdWludDMyX3Qgc2dlX3N1cHBfbGVuOworCXVpbnQzMl90IHdvcmQ1OworI2RlZmluZSBpZl9wYWdlX3N6X1NISUZUCQkJMAorI2RlZmluZSBpZl9wYWdlX3N6X01BU0sJCQkJMHgwMDAwZmZmZgorI2RlZmluZSBpZl9wYWdlX3N6X1dPUkQJCQkJd29yZDUKKyNkZWZpbmUgbG9vcGJrX3Njb3BlX1NISUZUCQkJMjQKKyNkZWZpbmUgbG9vcGJrX3Njb3BlX01BU0sJCQkweDAwMDAwMDBmCisjZGVmaW5lIGxvb3Bia19zY29wZV9XT1JECQkJd29yZDUKKyNkZWZpbmUgcnFfZGJfd2luZG93X1NISUZUCQkJMjgKKyNkZWZpbmUgcnFfZGJfd2luZG93X01BU0sJCQkweDAwMDAwMDBmCisjZGVmaW5lIHJxX2RiX3dpbmRvd19XT1JECQkJd29yZDUKKwl1aW50MzJfdCB3b3JkNjsKKyNkZWZpbmUgZXFfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBlcV9wYWdlc19NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgZXFfcGFnZXNfV09SRAkJCQl3b3JkNgorI2RlZmluZSBlcWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIGVxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBlcWVfc2l6ZV9XT1JECQkJCXdvcmQ2CisJdWludDMyX3Qgd29yZDc7CisjZGVmaW5lIGNxX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgY3FfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIGNxX3BhZ2VzX1dPUkQJCQkJd29yZDcKKyNkZWZpbmUgY3FlX3NpemVfU0hJRlQJCQkJOAorI2RlZmluZSBjcWVfc2l6ZV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgY3FlX3NpemVfV09SRAkJCQl3b3JkNworCXVpbnQzMl90IHdvcmQ4OworI2RlZmluZSBtcV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIG1xX3BhZ2VzX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBtcV9wYWdlc19XT1JECQkJCXdvcmQ4CisjZGVmaW5lIG1xZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgbXFlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIG1xZV9zaXplX1dPUkQJCQkJd29yZDgKKyNkZWZpbmUgbXFfZWxlbV9jbnRfU0hJRlQJCQkxNgorI2RlZmluZSBtcV9lbGVtX2NudF9NQVNLCQkJMHgwMDAwMDBmZgorI2RlZmluZSBtcV9lbGVtX2NudF9XT1JECQkJd29yZDgKKwl1aW50MzJfdCB3b3JkOTsKKyNkZWZpbmUgd3FfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSB3cV9wYWdlc19NQVNLCQkJCTB4MDAwMGZmZmYKKyNkZWZpbmUgd3FfcGFnZXNfV09SRAkJCQl3b3JkOQorI2RlZmluZSB3cWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIHdxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSB3cWVfc2l6ZV9XT1JECQkJCXdvcmQ5CisJdWludDMyX3Qgd29yZDEwOworI2RlZmluZSBycV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIHJxX3BhZ2VzX01BU0sJCQkJMHgwMDAwZmZmZgorI2RlZmluZSBycV9wYWdlc19XT1JECQkJCXdvcmQxMAorI2RlZmluZSBycWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIHJxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBycWVfc2l6ZV9XT1JECQkJCXdvcmQxMAorCXVpbnQzMl90IHdvcmQxMTsKKyNkZWZpbmUgaGRyX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgaGRyX3BhZ2VzX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBoZHJfcGFnZXNfV09SRAkJCQl3b3JkMTEKKyNkZWZpbmUgaGRyX3NpemVfU0hJRlQJCQkJOAorI2RlZmluZSBoZHJfc2l6ZV9NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgaGRyX3NpemVfV09SRAkJCQl3b3JkMTEKKyNkZWZpbmUgaGRyX3BwX2FsaWduX1NISUZUCQkJMTYKKyNkZWZpbmUgaGRyX3BwX2FsaWduX01BU0sJCQkweDAwMDBmZmZmCisjZGVmaW5lIGhkcl9wcF9hbGlnbl9XT1JECQkJd29yZDExCisJdWludDMyX3Qgd29yZDEyOworI2RlZmluZSBzZ2xfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBzZ2xfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIHNnbF9wYWdlc19XT1JECQkJCXdvcmQxMgorI2RlZmluZSBzZ2xfcHBfYWxpZ25fU0hJRlQJCQkxNgorI2RlZmluZSBzZ2xfcHBfYWxpZ25fTUFTSwkJCTB4MDAwMGZmZmYKKyNkZWZpbmUgc2dsX3BwX2FsaWduX1dPUkQJCQl3b3JkMTIKKwl1aW50MzJfdCByc3ZkXzEzXzYzWzUxXTsKK307CisKIC8qIE1haWxib3ggQ29tcGxldGlvbiBRdWV1ZSBFcnJvciBNZXNzYWdlcyAqLwogI2RlZmluZSBNQl9DUUVfU1RBVFVTX1NVQ0NFU1MgCQkJMHgwCiAjZGVmaW5lIE1CX0NRRV9TVEFUVVNfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRVMJMHgxCkBAIC0xODYzLDYgKzIwMzcsNyBAQAogCQlzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsIHJlYWRfZmNmX3RibDsKIAkJc3RydWN0IGxwZmNfbWJ4X2FkZF9mY2ZfdGJsX2VudHJ5IGFkZF9mY2ZfZW50cnk7CiAJCXN0cnVjdCBscGZjX21ieF9kZWxfZmNmX3RibF9lbnRyeSBkZWxfZmNmX2VudHJ5OworCQlzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgcmVkaXNjX2ZjZl90Ymw7CiAJCXN0cnVjdCBscGZjX21ieF9yZWdfZmNmaSByZWdfZmNmaTsKIAkJc3RydWN0IGxwZmNfbWJ4X3VucmVnX2ZjZmkgdW5yZWdfZmNmaTsKIAkJc3RydWN0IGxwZmNfbWJ4X21xX2NyZWF0ZSBtcV9jcmVhdGU7CkBAIC0xODgzLDYgKzIwNTgsOCBAQAogCQlzdHJ1Y3QgbHBmY19tYnhfcmVxdWVzdF9mZWF0dXJlcyByZXFfZnRyczsKIAkJc3RydWN0IGxwZmNfbWJ4X3Bvc3RfaGRyX3RtcGwgaGRyX3RtcGw7CiAJCXN0cnVjdCBscGZjX21ieF9xdWVyeV9md19jZmcgcXVlcnlfZndfY2ZnOworCQlzdHJ1Y3QgbHBmY19tYnhfc3VwcF9wYWdlcyBzdXBwX3BhZ2VzOworCQlzdHJ1Y3QgbHBmY19tYnhfc2xpNF9wYXJhbXMgc2xpNF9wYXJhbXM7CiAJCXN0cnVjdCBscGZjX21ieF9ub3Agbm9wOwogCX0gdW47CiB9OwpAQCAtMTk1OSw2ICsyMTM2LDkgQEAKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX05PTkUJMHgwCiAjZGVmaW5lIExQRkNfQVNZTkNfTElOS19GQVVMVF9MT0NBTAkweDEKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX1JFTU9URQkweDIKKyNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX1NISUZUCTE2CisjZGVmaW5lIGxwZmNfYWNxZV9xb3NfbGlua19zcGVlZF9NQVNLCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX1dPUkQJd29yZDEKIAl1aW50MzJfdCBldmVudF90YWc7CiAJdWludDMyX3QgdHJhaWxlcjsKIH07CkBAIC0xOTc2LDYgKzIxNTYsNyBAQAogI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfVEFCTEVfRlVMTAkweDIKICNkZWZpbmUgTFBGQ19GQ09FX0VWRU5UX1RZUEVfRkNGX0RFQUQJCTB4MwogI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9DVkwJCTB4NAorI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfUEFSQU1fTU9ECTB4NQogCXVpbnQzMl90IGV2ZW50X3RhZzsKIAl1aW50MzJfdCB0cmFpbGVyOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggYjhlYjFiNi4uZDI5YWM3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTU0NCw3ICs1NDQsNyBAQAogCQkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChwaGJhLT5jZmdfc3VwcHJlc3NfbGlua191cCA9PSAwKSB7CiAJCWxwZmNfaW5pdF9saW5rKHBoYmEsIHBtYiwgcGhiYS0+Y2ZnX3RvcG9sb2d5LAogCQkJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOwogCQlwbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CkBAIC02MDMsNiArNjAzLDEwMiBAQAogfQogCiAvKioKKyAqIGxwZmNfaGJhX2luaXRfbGluayAtIEluaXRpYWxpemUgdGhlIEZDIGxpbmsKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGlzc3VlIHRoZSBJTklUX0xJTksgbWFpbGJveCBjb21tYW5kIGNhbGwuCisgKiBJdCBpcyBhdmFpbGFibGUgdG8gb3RoZXIgZHJpdmVycyB0aHJvdWdoIHRoZSBscGZjX2hiYSBkYXRhCisgKiBzdHJ1Y3R1cmUgZm9yIHVzZSBhcyBhIGRlbGF5ZWQgbGluayB1cCBtZWNoYW5pc20gd2l0aCB0aGUKKyAqIG1vZHVsZSBwYXJhbWV0ZXIgbHBmY19zdXBwcmVzc19saW5rX3VwLgorICoKKyAqIFJldHVybiBjb2RlCisgKgkJMCAtIHN1Y2Nlc3MKKyAqCQlBbnkgb3RoZXIgdmFsdWUgLSBlcnJvcgorICoqLworaW50CitscGZjX2hiYV9pbml0X2xpbmsoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IHBoYmEtPnBwb3J0OworCUxQRkNfTUJPWFFfdCAqcG1iOworCU1BSUxCT1hfdCAqbWI7CisJaW50IHJjOworCisJcG1iID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYikgeworCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltYiA9ICZwbWItPnUubWI7CisJcG1iLT52cG9ydCA9IHZwb3J0OworCisJbHBmY19pbml0X2xpbmsocGhiYSwgcG1iLCBwaGJhLT5jZmdfdG9wb2xvZ3ksCisJCXBoYmEtPmNmZ19saW5rX3NwZWVkKTsKKwlwbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CisJbHBmY19zZXRfbG9vcGJhY2tfZmxhZyhwaGJhKTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCSIwNDk4IEFkYXB0ZXIgZmFpbGVkIHRvIGluaXQsIG1ieENtZCB4JXggIgorCQkJIklOSVRfTElOSywgbWJ4U3RhdHVzIHgleFxuIiwKKwkJCW1iLT5tYnhDb21tYW5kLCBtYi0+bWJ4U3RhdHVzKTsKKwkJLyogQ2xlYXIgYWxsIGludGVycnVwdCBlbmFibGUgY29uZGl0aW9ucyAqLworCQl3cml0ZWwoMCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwkJLyogQ2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQl3cml0ZWwoMHhmZmZmZmZmZiwgcGhiYS0+SEFyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOworCQlpZiAocmMgIT0gTUJYX0JVU1kpCisJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXBoYmEtPmNmZ19zdXBwcmVzc19saW5rX3VwID0gMDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfaGJhX2Rvd25fbGluayAtIHRoaXMgcm91dGluZSBkb3ducyB0aGUgRkMgbGluaworICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGlzc3VlIHRoZSBET1dOX0xJTksgbWFpbGJveCBjb21tYW5kIGNhbGwuCisgKiBJdCBpcyBhdmFpbGFibGUgdG8gb3RoZXIgZHJpdmVycyB0aHJvdWdoIHRoZSBscGZjX2hiYSBkYXRhCisgKiBzdHJ1Y3R1cmUgZm9yIHVzZSB0byBzdG9wIHRoZSBsaW5rLgorICoKKyAqIFJldHVybiBjb2RlCisgKgkJMCAtIHN1Y2Nlc3MKKyAqCQlBbnkgb3RoZXIgdmFsdWUgLSBlcnJvcgorICoqLworaW50CitscGZjX2hiYV9kb3duX2xpbmsoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxQRkNfTUJPWFFfdCAqcG1iOworCWludCByYzsKKworCXBtYiA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbWIpIHsKKwkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwKKwkJS0VSTl9FUlIsIExPR19JTklULAorCQkiMDQ5MSBBZGFwdGVyIExpbmsgaXMgZGlzYWJsZWQuXG4iKTsKKwlscGZjX2Rvd25fbGluayhwaGJhLCBwbWIpOworCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwlpZiAoKHJjICE9IE1CWF9TVUNDRVNTKSAmJiAocmMgIT0gTUJYX0JVU1kpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAorCQlLRVJOX0VSUiwgTE9HX0lOSVQsCisJCSIyNTIyIEFkYXB0ZXIgZmFpbGVkIHRvIGlzc3VlIERPV05fTElOSyIKKwkJIiBtYm94IGNvbW1hbmQgcmMgMHgleFxuIiwgcmMpOworCisJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbHBmY19oYmFfZG93bl9wcmVwIC0gUGVyZm9ybSBscGZjIHVuaW5pdGlhbGl6YXRpb24gcHJpb3IgdG8gSEJBIHJlc2V0CiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIEhCQSBkYXRhIHN0cnVjdHVyZS4KICAqCkBAIC0yMDczLDYgKzIxNjksNDQgQEAKIH0KIAogLyoqCisgKiBfX2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lciAtIFN0b3AgRkNGIHJlZGlzY292ZXJ5IHdhaXQgdGltZXIKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyB0aGUgU0xJNCBGQ0YgcmVkaXNjb3ZlciB3YWl0IHRpbWVyIGlmIGl0J3Mgb24uIFRoZQorICogY2FsbGVyIG9mIHRoaXMgcm91dGluZSBzaG91bGQgYWxyZWFkeSBob2xkIHRoZSBob3N0IGxvY2suCisgKiovCit2b2lkCitfX2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJLyogQ2xlYXIgcGVuZGluZyBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lciAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19QRU5EOworCS8qIE5vdywgdHJ5IHRvIHN0b3AgdGhlIHRpbWVyICovCisJZGVsX3RpbWVyKCZwaGJhLT5mY2YucmVkaXNjX3dhaXQpOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lciAtIFN0b3AgRkNGIHJlZGlzY292ZXJ5IHdhaXQgdGltZXIKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyB0aGUgU0xJNCBGQ0YgcmVkaXNjb3ZlciB3YWl0IHRpbWVyIGlmIGl0J3Mgb24uIEl0CisgKiBjaGVja3Mgd2hldGhlciB0aGUgRkNGIHJlZGlzY292ZXJ5IHdhaXQgdGltZXIgaXMgcGVuZGluZyB3aXRoIHRoZSBob3N0CisgKiBsb2NrIGhlbGQgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBkaXNhYmxpbmcgdGhlIHRpbWVyIGFuZCBjbGVhcmluZyB0aGUKKyAqIHdhaXQgdGltZXIgcGVuZGlnIGZsYWcuCisgKiovCit2b2lkCitscGZjX3NsaTRfc3RvcF9mY2ZfcmVkaXNjX3dhaXRfdGltZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWlmICghKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfUEVORCkpIHsKKwkJLyogRkNGIHJlZGlzY292ZXJ5IHRpbWVyIGFscmVhZHkgZmlyZWQgb3Igc3RvcHBlZCAqLworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlyZXR1cm47CisJfQorCV9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHBoYmEpOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CisKKy8qKgogICogbHBmY19zdG9wX2hiYV90aW1lcnMgLSBTdG9wIGFsbCB0aGUgdGltZXJzIGFzc29jaWF0ZWQgd2l0aCBhbiBIQkEKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTIwOTYsNiArMjIzMCw3IEBACiAJCWJyZWFrOwogCWNhc2UgTFBGQ19QQ0lfREVWX09DOgogCQkvKiBTdG9wIGFueSBPbmVDb25uZWN0IGRldmljZSBzZXBjaWZpYyBkcml2ZXIgdGltZXJzICovCisJCWxwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihwaGJhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKQEAgLTIyMjgsNiArMjM2Myw3IEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gcGhiYS0+cHBvcnQ7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgICpuZGxwLCAqbmV4dF9uZGxwOwogCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCWludCBpOwogCiAJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKQpAQCAtMjI0MSwxMSArMjM3NywxNSBAQAogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKSB7CiAJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKLQogCQkJaWYgKHZwb3J0c1tpXS0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKQogCQkJCWNvbnRpbnVlOworCQkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCQl2cG9ydHNbaV0tPnZwaV9zdGF0ZSAmPSB+TFBGQ19WUElfUkVHSVNURVJFRDsKKwkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQkJdnBvcnRzW2ldLT5mY19mbGFnICY9IH5GQ19WRklfUkVHSVNURVJFRDsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwogCQkJc2hvc3QgPQlscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsCiAJCQkJCQkgJnZwb3J0c1tpXS0+ZmNfbm9kZXMsCkBAIC0yNDAxLDcgKzI1NDEsOCBAQAogCXNob3N0LT50aGlzX2lkID0gLTE7CiAJc2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CiAJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgewotCQlzaG9zdC0+ZG1hX2JvdW5kYXJ5ID0gTFBGQ19TTEk0X01BWF9TRUdNRU5UX1NJWkU7CisJCXNob3N0LT5kbWFfYm91bmRhcnkgPQorCQkJcGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMuc2dlX3N1cHBfbGVuOwogCQlzaG9zdC0+c2dfdGFibGVzaXplID0gcGhiYS0+Y2ZnX3NnX3NlZ19jbnQ7CiAJfQogCkBAIC0yNjUwLDggKzI3OTEsNiBAQAogCWxwZmNfc3RvcF9oYmFfdGltZXJzKHBoYmEpOwogCXBoYmEtPnBwb3J0LT53b3JrX3BvcnRfZXZlbnRzID0gMDsKIAlwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSA9IDA7Ci0JLyogSGFyZCBjbGVhciBpdCBmb3Igbm93LCBzaGFsbCBoYXZlIG1vcmUgZ3JhY2VmdWwgd2F5IHRvIHdhaXQgbGF0ZXIgKi8KLQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfU0xJX01CT1hfQUNUSVZFOwogfQogCiAvKioKQEAgLTI3MDMsNyArMjg0Miw3IEBACiAJZGVsX2ZjZl9yZWNvcmQgPSAmbWJveHEtPnUubXFlLnVuLmRlbF9mY2ZfZW50cnk7CiAJYmZfc2V0KGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2NvdW50LCBkZWxfZmNmX3JlY29yZCwgMSk7CiAJYmZfc2V0KGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2luZGV4LCBkZWxfZmNmX3JlY29yZCwKLQkgICAgICAgcGhiYS0+ZmNmLmZjZl9pbmR4KTsKKwkgICAgICAgcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4KTsKIAogCWlmICghcGhiYS0+c2xpNF9oYmEuaW50cl9lbmFibGUpCiAJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOwpAQCAtMjcyNyw2ICsyODY2LDU3IEBACiB9CiAKIC8qKgorICogbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIgLSBTdGFydCBmY2YgcmVkaXNjb3ZlciB3YWl0IHRpbWVyCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgZm9yIHdoaWNoIHRoaXMgY2FsbCBpcyBiZWluZyBleGVjdXRlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc3RhcnRzIHRoZSB0aW1lciB3YWl0aW5nIGZvciB0aGUgRkNGIHJlZGlzY292ZXJ5IHRvIGNvbXBsZXRlLgorICoqLwordm9pZAorbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIGxvbmcgZmNmX3JlZGlzY193YWl0X3RtbyA9CisJCShqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhMUEZDX0ZDRl9SRURJU0NPVkVSX1dBSVRfVE1PKSk7CisJLyogU3RhcnQgZmNmIHJlZGlzY292ZXJ5IHdhaXQgcGVyaW9kIHRpbWVyICovCisJbW9kX3RpbWVyKCZwaGJhLT5mY2YucmVkaXNjX3dhaXQsIGZjZl9yZWRpc2Nfd2FpdF90bW8pOworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCS8qIEFsbG93IGFjdGlvbiB0byBuZXcgZmNmIGFzeW5jaHJvbm91cyBldmVudCAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfU0NBTl9ET05FKTsKKwkvKiBNYXJrIHRoZSBGQ0YgcmVkaXNjb3ZlcnkgcGVuZGluZyBzdGF0ZSAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfUkVESVNDX1BFTkQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKworLyoqCisgKiBscGZjX3NsaTRfZmNmX3JlZGlzY193YWl0X3RtbyAtIEZDRiB0YWJsZSByZWRpc2NvdmVyIHdhaXQgdGltZW91dAorICogQHB0cjogTWFwIHRvIGxwZmNfaGJhIGRhdGEgc3RydWN0dXJlIHBvaW50ZXIuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgd2hlbiB3YWl0aW5nIGZvciBGQ0YgdGFibGUgcmVkaXNjb3ZlciBoYXMgYmVlbgorICogdGltZWQgb3V0LiBJZiBuZXcgRkNGIHJlY29yZChzKSBoYXMgKGhhdmUpIGJlZW4gZGlzY292ZXJlZCBkdXJpbmcgdGhlCisgKiB3YWl0IHBlcmlvZCwgYSBuZXcgRkNGIGV2ZW50IHNoYWxsIGJlIGFkZGVkIHRvIHRoZSBGQ09FIGFzeW5jIGV2ZW50CisgKiBsaXN0LCBhbmQgdGhlbiB3b3JrZXIgdGhyZWFkIHNoYWxsIGJlIHdha2VkIHVwIGZvciBwcm9jZXNzaW5nIGZyb20gdGhlCisgKiB3b3JrZXIgdGhyZWFkIGNvbnRleHQuCisgKiovCit2b2lkCitscGZjX3NsaTRfZmNmX3JlZGlzY193YWl0X3Rtbyh1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopcHRyOworCisJLyogRG9uJ3Qgc2VuZCBGQ0YgcmVkaXNjb3ZlcnkgZXZlbnQgaWYgdGltZXIgY2FuY2VsbGVkICovCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJaWYgKCEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19QRU5EKSkgeworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlyZXR1cm47CisJfQorCS8qIENsZWFyIEZDRiByZWRpc2NvdmVyeSB0aW1lciBwZW5kaW5nIGZsYWcgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfUEVORDsKKwkvKiBGQ0YgcmVkaXNjb3ZlcnkgZXZlbnQgdG8gd29ya2VyIHRocmVhZCAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfUkVESVNDX0VWVDsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCS8qIHdha2UgdXAgd29ya2VyIHRocmVhZCAqLworCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7Cit9CisKKy8qKgogICogbHBmY19zbGk0X2Z3X2NmZ19jaGVjayAtIFJlYWQgdGhlIGZpcm13YXJlIGNvbmZpZyBhbmQgdmVyaWZ5IEZDb0Ugc3VwcG9ydAogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMjk3OCw2ICszMTY4LDggQEAKIAkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfcGh5c2ljYWwsIGFjcWVfbGluayk7CiAJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5mYXVsdCA9CiAJCQkJYmZfZ2V0KGxwZmNfYWNxZV9saW5rX2ZhdWx0LCBhY3FlX2xpbmspOworCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubG9naWNhbF9zcGVlZCA9CisJCQkJYmZfZ2V0KGxwZmNfYWNxZV9xb3NfbGlua19zcGVlZCwgYWNxZV9saW5rKTsKIAogCS8qIEludm9rZSB0aGUgbHBmY19oYW5kbGVfbGF0dCBtYWlsYm94IGNvbW1hbmQgY2FsbGJhY2sgZnVuY3Rpb24gKi8KIAlscGZjX21ieF9jbXBsX3JlYWRfbGEocGhiYSwgcG1iKTsKQEAgLTMwMDcsMjIgKzMxOTksMzQgQEAKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CiAJdWludDMyX3QgbGlua19zdGF0ZTsKKwlpbnQgYWN0aXZlX3ZsaW5rX3ByZXNlbnQ7CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJaW50IGk7CiAKIAlwaGJhLT5mY19ldmVudFRhZyA9IGFjcWVfZmNvZS0+ZXZlbnRfdGFnOwogCXBoYmEtPmZjb2VfZXZlbnR0YWcgPSBhY3FlX2Zjb2UtPmV2ZW50X3RhZzsKIAlzd2l0Y2ggKGV2ZW50X3R5cGUpIHsKIAljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX05FV19GQ0Y6CisJY2FzZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfUEFSQU1fTU9EOgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCiAJCQkiMjU0NiBOZXcgRkNGIGZvdW5kIGluZGV4IDB4JXggdGFnIDB4JXhcbiIsCiAJCQlhY3FlX2Zjb2UtPmluZGV4LAogCQkJYWNxZV9mY29lLT5ldmVudF90YWcpOwotCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgaXMgaW4gZGlzY292ZXJlZCBzdGF0ZSwgb3IKLQkJICogRkNGIGRpc2NvdmVyeSBpcyBpbiBwcm9ncmVzcyBkbyBub3RoaW5nLgotCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCWlmICgocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0RJU0NPVkVSRUQpIHx8Ci0JCSAgIChwaGJhLT5oYmFfZmxhZyAmIEZDRl9ESVNDX0lOUFJPR1JFU1MpKSB7CisJCWlmICgocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1NDQU5fRE9ORSkgfHwKKwkJICAgIChwaGJhLT5oYmFfZmxhZyAmIEZDRl9ESVNDX0lOUFJPR1JFU1MpKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGN1cnJlbnQgRkNGIGlzIGluIGRpc2NvdmVyZWQgc3RhdGUgb3IKKwkJCSAqIEZDRiBkaXNjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MsIGRvIG5vdGhpbmcuCisJCQkgKi8KKwkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19FVlQpIHsKKwkJCS8qCisJCQkgKiBJZiBmYXN0IEZDRiBmYWlsb3ZlciByZXNjYW4gZXZlbnQgaXMgcGVuZGluZywKKwkJCSAqIGRvIG5vdGhpbmcuCisJCQkgKi8KIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCQlicmVhazsKIAkJfQpAQCAtMzA0OSw3ICszMjUzLDcgQEAKIAkJCSIgdGFnIDB4JXhcbiIsIGFjcWVfZmNvZS0+aW5kZXgsCiAJCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZyk7CiAJCS8qIElmIHRoZSBldmVudCBpcyBub3QgZm9yIGN1cnJlbnRseSB1c2VkIGZjZiBkbyBub3RoaW5nICovCi0JCWlmIChwaGJhLT5mY2YuZmNmX2luZHggIT0gYWNxZV9mY29lLT5pbmRleCkKKwkJaWYgKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCAhPSBhY3FlX2Zjb2UtPmluZGV4KQogCQkJYnJlYWs7CiAJCS8qCiAJCSAqIEN1cnJlbnRseSwgZHJpdmVyIHN1cHBvcnQgb25seSBvbmUgRkNGIC0gc28gdHJlYXQgdGhpcyBhcwpAQCAtMzA3NCwxNCArMzI3OCw1OCBAQAogCQlpZiAoIW5kbHApCiAJCQlicmVhazsKIAkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOworCQlpZiAocGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgPD0gTFBGQ19GTE9HSSkKKwkJCWJyZWFrOworCQkvKiBJZiB2aXJ0dWFsIGxpbmsgaXMgbm90IHlldCBpbnN0YW50aWF0ZWQgaWdub3JlIENWTCAqLworCQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPD0gTFBGQ19GRElTQykKKwkJCWJyZWFrOworCiAJCWxwZmNfbGlua2Rvd25fcG9ydCh2cG9ydCk7Ci0JCWlmICh2cG9ydC0+cG9ydF90eXBlICE9IExQRkNfTlBJVl9QT1JUKSB7CisJCWxwZmNfY2xlYW51cF9wZW5kaW5nX21ib3godnBvcnQpOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9DVkxfUkNWRDsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlhY3RpdmVfdmxpbmtfcHJlc2VudCA9IDA7CisKKwkJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwkJaWYgKHZwb3J0cykgeworCQkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOworCQkJCQlpKyspIHsKKwkJCQlpZiAoKCEodnBvcnRzW2ldLT5mY19mbGFnICYKKwkJCQkJRkNfVlBPUlRfQ1ZMX1JDVkQpKSAmJgorCQkJCQkodnBvcnRzW2ldLT5wb3J0X3N0YXRlID4gTFBGQ19GRElTQykpIHsKKwkJCQkJYWN0aXZlX3ZsaW5rX3ByZXNlbnQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCQl9CisKKwkJaWYgKGFjdGl2ZV92bGlua19wcmVzZW50KSB7CisJCQkvKgorCQkJICogSWYgdGhlcmUgYXJlIG90aGVyIGFjdGl2ZSBWTGlua3MgcHJlc2VudCwKKwkJCSAqIHJlLWluc3RhbnRpYXRlIHRoZSBWbGluayB1c2luZyBGRElTQy4KKwkJCSAqLwogCQkJbW9kX3RpbWVyKCZuZGxwLT5ubHBfZGVsYXlmdW5jLCBqaWZmaWVzICsgSFopOwogCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9ERUxBWV9UTU87CiAJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX0ZMT0dJOwotCQkJdnBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX0ZMT0dJOworCQkJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gRUxTX0NNRF9GRElTQzsKKwkJCXZwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19GRElTQzsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UsIHdlIHJlcXVlc3QgcG9ydCB0byByZWRpc2NvdmVyCisJCQkgKiB0aGUgZW50aXJlIEZDRiB0YWJsZSBmb3IgYSBmYXN0IHJlY292ZXJ5CisJCQkgKiBmcm9tIHBvc3NpYmxlIGNhc2UgdGhhdCB0aGUgY3VycmVudCBGQ0YKKwkJCSAqIGlzIG5vIGxvbmdlciB2YWxpZC4KKwkJCSAqLworCQkJcmMgPSBscGZjX3NsaTRfcmVkaXNjX2ZjZl90YWJsZShwaGJhKTsKKwkJCWlmIChyYykKKwkJCQkvKgorCQkJCSAqIExhc3QgcmVzb3J0IHdpbGwgYmUgcmUtdHJ5IG9uIHRoZQorCQkJCSAqIHRoZSBjdXJyZW50IHJlZ2lzdGVyZWQgRkNGIGVudHJ5LgorCQkJCSAqLworCQkJCWxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHBoYmEpOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zMTU4LDYgKzM0MDYsMzQgQEAKIH0KIAogLyoqCisgKiBscGZjX3NsaTRfZmNmX3JlZGlzY19ldmVudF9wcm9jIC0gUHJvY2VzcyBmY2YgdGFibGUgcmVkaXNjb3ZlcnkgZXZlbnQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkIHRvIHByb2Nlc3MgRkNGIHRhYmxlCisgKiByZWRpc2NvdmVyeSBwZW5kaW5nIGNvbXBsZXRpb24gZXZlbnQuCisgKiovCit2b2lkIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCWludCByYzsKKworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCS8qIENsZWFyIEZDRiByZWRpc2NvdmVyeSB0aW1lb3V0IGV2ZW50ICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX0VWVDsKKwkvKiBDbGVhciBkcml2ZXIgZmFzdCBmYWlsb3ZlciBGQ0YgcmVjb3JkIGZsYWcgKi8KKwlwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLmZsYWcgPSAwOworCS8qIFNldCBzdGF0ZSBmb3IgRkNGIGZhc3QgZmFpbG92ZXIgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1JFRElTQ19GT1Y7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKworCS8qIFNjYW4gRkNGIHRhYmxlIGZyb20gdGhlIGZpcnN0IGVudHJ5IHRvIHJlLWRpc2NvdmVyIFNBTiAqLworCXJjID0gbHBmY19zbGk0X3JlYWRfZmNmX3JlY29yZChwaGJhLCBMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7CisJaWYgKHJjKQorCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCisJCQkJIjI3NDcgUG9zdCBGQ0YgcmVkaXNjb3ZlcnkgcmVhZCBGQ0YgcmVjb3JkICIKKwkJCQkiZmFpbGVkIDB4JXhcbiIsIHJjKTsKK30KKworLyoqCiAgKiBscGZjX2FwaV90YWJsZV9zZXR1cCAtIFNldCB1cCBwZXIgaGJhIHBjaS1kZXZpY2UgZ3JvdXAgZnVuYyBhcGkganVtcCB0YWJsZQogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiBAZGV2X2dycDogVGhlIEhCQSBQQ0ktRGV2aWNlIGdyb3VwIG51bWJlci4KQEAgLTM0NDIsOCArMzcxOCwxMCBAQAogbHBmY19zbGk0X2RyaXZlcl9yZXNvdXJjZV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CiAJc3RydWN0IGxwZmNfc2xpICpwc2xpOwotCWludCByYzsKLQlpbnQgaSwgaGJxX2NvdW50OworCUxQRkNfTUJPWFFfdCAqbWJveHE7CisJaW50IHJjLCBpLCBoYnFfY291bnQsIGJ1Zl9zaXplLCBkbWFfYnVmX3NpemUsIG1heF9idWZfc2l6ZTsKKwl1aW50OF90IHBuX3BhZ2VbTFBGQ19NQVhfU1VQUE9SVEVEX1BBR0VTXSA9IHswfTsKKwlzdHJ1Y3QgbHBmY19tcWUgKm1xZTsKIAogCS8qIEJlZm9yZSBwcm9jZWVkLCB3YWl0IGZvciBQT1NUIGRvbmUgYW5kIGRldmljZSByZWFkeSAqLwogCXJjID0gbHBmY19zbGk0X3Bvc3Rfc3RhdHVzX2NoZWNrKHBoYmEpOwpAQCAtMzQ3Miw2ICszNzUwLDExIEBACiAJaW5pdF90aW1lcigmcGhiYS0+ZXJhdHRfcG9sbCk7CiAJcGhiYS0+ZXJhdHRfcG9sbC5mdW5jdGlvbiA9IGxwZmNfcG9sbF9lcmF0dDsKIAlwaGJhLT5lcmF0dF9wb2xsLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGhiYTsKKwkvKiBGQ0YgcmVkaXNjb3ZlciB0aW1lciAqLworCWluaXRfdGltZXIoJnBoYmEtPmZjZi5yZWRpc2Nfd2FpdCk7CisJcGhiYS0+ZmNmLnJlZGlzY193YWl0LmZ1bmN0aW9uID0gbHBmY19zbGk0X2ZjZl9yZWRpc2Nfd2FpdF90bW87CisJcGhiYS0+ZmNmLnJlZGlzY193YWl0LmRhdGEgPSAodW5zaWduZWQgbG9uZylwaGJhOworCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGRvIGEgUkVBRF9DT05GSUcgbWFpbGJveCBjb21tYW5kIGhlcmUgYmVmb3JlCiAJICogY2FsbGluZyBscGZjX2dldF9jZmdwYXJhbS4gRm9yIFZGcyB0aGlzIHdpbGwgcmVwb3J0IHRoZQpAQCAtMzQ5NiwzMSArMzc3OSwyNiBAQAogCSAqIHVzZWQgdG8gY3JlYXRlIHRoZSBzZ19kbWFfYnVmX3Bvb2wgbXVzdCBiZSBkeW5hbWljYWxseSBjYWxjdWxhdGVkLgogCSAqIDIgc2VnbWVudHMgYXJlIGFkZGVkIHNpbmNlIHRoZSBJT0NCIG5lZWRzIGEgY29tbWFuZCBhbmQgcmVzcG9uc2UgYmRlLgogCSAqIFRvIGluc3VyZSB0aGF0IHRoZSBzY3NpIHNnbCBkb2VzIG5vdCBjcm9zcyBhIDRrIHBhZ2UgYm91bmRhcnkgb25seQotCSAqIHNnbCBzaXplcyBvZiAxaywgMmssIDRrLCBhbmQgOGsgYXJlIHN1cHBvcnRlZC4KLQkgKiBUYWJsZSBvZiBzZ2wgc2l6ZXMgYW5kIHNlZ19jbnQ6Ci0JICogc2dsIHNpemUsIAlzZ19zZWdfY250CXRvdGFsIHNlZwotCSAqIDFrCQk1MAkJNTIKLQkgKiAyawkJMTE0CQkxMTYKLQkgKiA0awkJMjQyCQkyNDQKLQkgKiA4awkJNDk4CQk1MDAKLQkgKiBjbWQoMzIpICsgcnNwKDE2MCkgKyAoNTIgKiBzaXplb2Yoc2xpNF9zZ2UpKSA9IDEwMjQKLQkgKiBjbWQoMzIpICsgcnNwKDE2MCkgKyAoMTE2ICogc2l6ZW9mKHNsaTRfc2dlKSkgPSAyMDQ4Ci0JICogY21kKDMyKSArIHJzcCgxNjApICsgKDI0NCAqIHNpemVvZihzbGk0X3NnZSkpID0gNDA5NgotCSAqIGNtZCgzMikgKyByc3AoMTYwKSArICg1MDAgKiBzaXplb2Yoc2xpNF9zZ2UpKSA9IDgxOTIKKwkgKiBzZ2wgc2l6ZXMgb2YgbXVzdCBiZSBhIHBvd2VyIG9mIDIuCiAJICovCi0JaWYgKHBoYmEtPmNmZ19zZ19zZWdfY250IDw9IExQRkNfREVGQVVMVF9TR19TRUdfQ05UKQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDUwOwotCWVsc2UgaWYgKHBoYmEtPmNmZ19zZ19zZWdfY250IDw9IDExNCkKLQkJcGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPSAxMTQ7Ci0JZWxzZSBpZiAocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPD0gMjQyKQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDI0MjsKKwlidWZfc2l6ZSA9IChzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSArIHNpemVvZihzdHJ1Y3QgZmNwX3JzcCkgKworCQkgICAgKChwaGJhLT5jZmdfc2dfc2VnX2NudCArIDIpICogc2l6ZW9mKHN0cnVjdCBzbGk0X3NnZSkpKTsKKwkvKiBGZWF0dXJlIExldmVsIDEgaGFyZHdhcmUgaXMgbGltaXRlZCB0byAyIHBhZ2VzICovCisJaWYgKChiZl9nZXQobHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpID09CisJICAgICBMUEZDX1NMSV9JTlRGX0ZFQVRVUkVMRVZFTDFfMSkpCisJCW1heF9idWZfc2l6ZSA9IExQRkNfU0xJNF9GTDFfTUFYX0JVRl9TSVpFOwogCWVsc2UKLQkJcGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPSA0OTg7Ci0KLQlwaGJhLT5jZmdfc2dfZG1hX2J1Zl9zaXplID0gc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkKLQkJCQkJKyBzaXplb2Yoc3RydWN0IGZjcF9yc3ApOwotCXBoYmEtPmNmZ19zZ19kbWFfYnVmX3NpemUgKz0KLQkJKChwaGJhLT5jZmdfc2dfc2VnX2NudCArIDIpICogc2l6ZW9mKHN0cnVjdCBzbGk0X3NnZSkpOworCQltYXhfYnVmX3NpemUgPSBMUEZDX1NMSTRfTUFYX0JVRl9TSVpFOworCWZvciAoZG1hX2J1Zl9zaXplID0gTFBGQ19TTEk0X01JTl9CVUZfU0laRTsKKwkgICAgIGRtYV9idWZfc2l6ZSA8IG1heF9idWZfc2l6ZSAmJiBidWZfc2l6ZSA+IGRtYV9idWZfc2l6ZTsKKwkgICAgIGRtYV9idWZfc2l6ZSA9IGRtYV9idWZfc2l6ZSA8PCAxKQorCQk7CisJaWYgKGRtYV9idWZfc2l6ZSA9PSBtYXhfYnVmX3NpemUpCisJCXBoYmEtPmNmZ19zZ19zZWdfY250ID0gKGRtYV9idWZfc2l6ZSAtCisJCQlzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSAtIHNpemVvZihzdHJ1Y3QgZmNwX3JzcCkgLQorCQkJKDIgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSkpIC8KKwkJCQlzaXplb2Yoc3RydWN0IHNsaTRfc2dlKTsKKwlwaGJhLT5jZmdfc2dfZG1hX2J1Zl9zaXplID0gZG1hX2J1Zl9zaXplOwogCiAJLyogSW5pdGlhbGl6ZSBidWZmZXIgcXVldWUgbWFuYWdlbWVudCBmaWVsZHMgKi8KIAloYnFfY291bnQgPSBscGZjX3NsaV9oYnFfY291bnQoKTsKQEAgLTM2MzgsNiArMzkxNiw0MyBAQAogCQlnb3RvIG91dF9mcmVlX2ZjcF9lcV9oZGw7CiAJfQogCisJbWJveHEgPSAoTFBGQ19NQk9YUV90ICopIG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwKKwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3hxKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9mY3BfZXFfaGRsOworCX0KKworCS8qIEdldCB0aGUgU3VwcG9ydGVkIFBhZ2VzLiBJdCBpcyBhbHdheXMgYXZhaWxhYmxlLiAqLworCWxwZmNfc3VwcG9ydGVkX3BhZ2VzKG1ib3hxKTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsIE1CWF9QT0xMKTsKKwlpZiAodW5saWtlbHkocmMpKSB7CisJCXJjID0gLUVJTzsKKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJZ290byBvdXRfZnJlZV9mY3BfZXFfaGRsOworCX0KKworCW1xZSA9ICZtYm94cS0+dS5tcWU7CisJbWVtY3B5KCZwbl9wYWdlWzBdLCAoKHVpbnQ4X3QgKikmbXFlLT51bi5zdXBwX3BhZ2VzLndvcmQzKSwKKwkgICAgICAgTFBGQ19NQVhfU1VQUE9SVEVEX1BBR0VTKTsKKwlmb3IgKGkgPSAwOyBpIDwgTFBGQ19NQVhfU1VQUE9SVEVEX1BBR0VTOyBpKyspIHsKKwkJc3dpdGNoIChwbl9wYWdlW2ldKSB7CisJCWNhc2UgTFBGQ19TTEk0X1BBUkFNRVRFUlM6CisJCQlwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtcy5zdXBwb3J0ZWQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFJlYWQgdGhlIHBvcnQncyBTTEk0IFBhcmFtZXRlcnMgY2FwYWJpbGl0aWVzIGlmIHN1cHBvcnRlZC4gKi8KKwlpZiAocGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMuc3VwcG9ydGVkKQorCQlyYyA9IGxwZmNfcGNfc2xpNF9wYXJhbXNfZ2V0KHBoYmEsIG1ib3hxKTsKKwltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCWlmIChyYykgeworCQlyYyA9IC1FSU87CisJCWdvdG8gb3V0X2ZyZWVfZmNwX2VxX2hkbDsKKwl9CiAJcmV0dXJuIHJjOwogCiBvdXRfZnJlZV9mY3BfZXFfaGRsOgpAQCAtMzczMyw2ICs0MDQ4LDggQEAKIGludAogbHBmY19pbml0X2FwaV90YWJsZV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQ4X3QgZGV2X2dycCkKIHsKKwlwaGJhLT5scGZjX2hiYV9pbml0X2xpbmsgPSBscGZjX2hiYV9pbml0X2xpbms7CisJcGhiYS0+bHBmY19oYmFfZG93bl9saW5rID0gbHBmY19oYmFfZG93bl9saW5rOwogCXN3aXRjaCAoZGV2X2dycCkgewogCWNhc2UgTFBGQ19QQ0lfREVWX0xQOgogCQlwaGJhLT5scGZjX2hiYV9kb3duX3Bvc3QgPSBscGZjX2hiYV9kb3duX3Bvc3RfczM7CkBAIC00MjkxLDcgKzQ2MDgsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltdXRleF9pbml0KCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmN0X2V2X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5jdF9ldl93YWl0ZXJzKTsKIAogCXJldHVybiBwaGJhOwpAQCAtNDY0MSw3ICs0OTU4LDcgQEAKIGludAogbHBmY19zbGk0X3Bvc3Rfc3RhdHVzX2NoZWNrKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlzdHJ1Y3QgbHBmY19yZWdpc3RlciBzdGFfcmVnLCB1ZXJybG9fcmVnLCB1ZXJyaGlfcmVnLCBzY3JhdGNocGFkOworCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHN0YV9yZWcsIHVlcnJsb19yZWcsIHVlcnJoaV9yZWc7CiAJaW50IGksIHBvcnRfZXJyb3IgPSAtRU5PREVWOwogCiAJaWYgKCFwaGJhLT5zbGk0X2hiYS5TVEFyZWdhZGRyKQpAQCAtNDY3NywxNCArNDk5NCwyMSBAQAogCQkJYmZfZ2V0KGxwZmNfaHN0X3N0YXRlX3BvcnRfc3RhdHVzLCAmc3RhX3JlZykpOwogCiAJLyogTG9nIGRldmljZSBpbmZvcm1hdGlvbiAqLwotCXNjcmF0Y2hwYWQud29yZDAgPSAgcmVhZGwocGhiYS0+c2xpNF9oYmEuU0NSQVRDSFBBRHJlZ2FkZHIpOwotCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAotCQkJIjI1MzQgRGV2aWNlIEluZm86IENoaXBUeXBlPTB4JXgsIFNsaVJldj0weCV4LCAiCi0JCQkiRmVhdHVyZUwxPTB4JXgsIEZlYXR1cmVMMj0weCV4XG4iLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9jaGlwdHlwZSwgJnNjcmF0Y2hwYWQpLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9zbGlyZXYsICZzY3JhdGNocGFkKSwKLQkJCWJmX2dldChscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMSwgJnNjcmF0Y2hwYWQpLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyLCAmc2NyYXRjaHBhZCkpOworCXBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmLndvcmQwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuU0xJSU5URnJlZ2FkZHIpOworCWlmIChiZl9nZXQobHBmY19zbGlfaW50Zl92YWxpZCwKKwkJICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSA9PSBMUEZDX1NMSV9JTlRGX1ZBTElEKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCSIyNTM0IERldmljZSBJbmZvOiBDaGlwVHlwZT0weCV4LCBTbGlSZXY9MHgleCwgIgorCQkJCSJGZWF0dXJlTDE9MHgleCwgRmVhdHVyZUwyPTB4JXhcbiIsCisJCQkJYmZfZ2V0KGxwZmNfc2xpX2ludGZfc2xpX2ZhbWlseSwKKwkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9zbGlyZXYsCisJCQkJICAgICAgICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZiksCisJCQkJYmZfZ2V0KGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMSwKKwkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwyLAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpKTsKKwl9CiAJcGhiYS0+c2xpNF9oYmEudWVfbWFza19sbyA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlVFTUFTS0xPcmVnYWRkcik7CiAJcGhiYS0+c2xpNF9oYmEudWVfbWFza19oaSA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlVFTUFTS0hJcmVnYWRkcik7CiAJLyogV2l0aCB1bmNvdmVyYWJsZSBlcnJvciwgbG9nIHRoZSBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gZXJyb3IgKi8KQEAgLTQ3MjMsOCArNTA0Nyw4IEBACiAJCQkJCUxQRkNfVUVfTUFTS19MTzsKIAlwaGJhLT5zbGk0X2hiYS5VRU1BU0tISXJlZ2FkZHIgPSBwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKwogCQkJCQlMUEZDX1VFX01BU0tfSEk7Ci0JcGhiYS0+c2xpNF9oYmEuU0NSQVRDSFBBRHJlZ2FkZHIgPSBwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKwotCQkJCQlMUEZDX1NDUkFUQ0hQQUQ7CisJcGhiYS0+c2xpNF9oYmEuU0xJSU5URnJlZ2FkZHIgPSBwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKworCQkJCQlMUEZDX1NMSV9JTlRGOwogfQogCiAvKioKQEAgLTU5OTksNyArNjMyMyw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCS8qIE1hcmsgdGhlIEZDRkkgaXMgbm8gbG9uZ2VyIHJlZ2lzdGVyZWQgKi8KIAkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9Ci0JCQl+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfUkVHSVNURVJFRCB8IEZDRl9ESVNDT1ZFUkVEKTsKKwkJCX4oRkNGX0FWQUlMQUJMRSB8IEZDRl9SRUdJU1RFUkVEIHwgRkNGX1NDQU5fRE9ORSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAl9CiB9CkBAIC02MDM5LDE2ICs2MzYzLDIwIEBACiAKIAkvKiBHZXQgdGhlIGJ1cyBhZGRyZXNzIG9mIFNMSTQgZGV2aWNlIEJhcjAsIEJhcjEsIGFuZCBCYXIyIGFuZCB0aGUKIAkgKiBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgYnkgZWFjaCBtYXBwaW5nLiBUaGV5IGFyZSBhY3R1YWxseQotCSAqIG1hcHBpbmcgdG8gdGhlIFBDSSBCQVIgcmVnaW9ucyAxLCAyLCBhbmQgNCBieSB0aGUgU0xJNCBkZXZpY2UuCisJICogbWFwcGluZyB0byB0aGUgUENJIEJBUiByZWdpb25zIDAgb3IgMSwgMiwgYW5kIDQgYnkgdGhlIFNMSTQgZGV2aWNlLgogCSAqLwotCXBoYmEtPnBjaV9iYXIwX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBMUEZDX1NMSTRfQkFSMCk7Ci0JYmFyMG1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIExQRkNfU0xJNF9CQVIwKTsKKwlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApKSB7CisJCXBoYmEtPnBjaV9iYXIwX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwkJYmFyMG1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCX0gZWxzZSB7CisJCXBoYmEtPnBjaV9iYXIwX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwkJYmFyMG1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOworCX0KKwlwaGJhLT5wY2lfYmFyMV9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CisJYmFyMW1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpOwogCi0JcGhiYS0+cGNpX2JhcjFfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIExQRkNfU0xJNF9CQVIxKTsKLQliYXIxbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgTFBGQ19TTEk0X0JBUjEpOwotCi0JcGhiYS0+cGNpX2JhcjJfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIExQRkNfU0xJNF9CQVIyKTsKLQliYXIybWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgTFBGQ19TTEk0X0JBUjIpOworCXBoYmEtPnBjaV9iYXIyX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKKwliYXIybWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCk7CiAKIAkvKiBNYXAgU0xJNCBQQ0kgQ29uZmlnIFNwYWNlIFJlZ2lzdGVyIGJhc2UgdG8gYSBrZXJuZWwgdmlydHVhbCBhZGRyICovCiAJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wID0KQEAgLTY3OTMsNiArNzEyMSw3MyBAQAogCXBoYmEtPnBwb3J0LT53b3JrX3BvcnRfZXZlbnRzID0gMDsKIH0KIAorIC8qKgorICogbHBmY19wY19zbGk0X3BhcmFtc19nZXQgLSBHZXQgdGhlIFNMSTRfUEFSQU1TIHBvcnQgY2FwYWJpbGl0aWVzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1ib3hxOiBQb2ludGVyIHRvIHRoZSBtYWlsYm94cSBtZW1vcnkgZm9yIHRoZSBtYWlsYm94IGNvbW1hbmQgcmVzcG9uc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIFNMSTQgY29kZSBwYXRoIHRvIHJlYWQgdGhlIHBvcnQncworICogc2xpNCBjYXBhYmlsaXRpZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQgdGhhdCBjYW4gYmxvY2std2FpdAorICogZm9yIHRoZSBjb21wbGV0aW9uLiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyByb3V0aW5lIGlzIGNhbGxlZAorICogdHlwaWNhbGx5IGZyb20gcHJvYmVfb25lIG9yIGZyb20gdGhlIG9ubGluZSByb3V0aW5lLgorICoqLworaW50CitscGZjX3BjX3NsaTRfcGFyYW1zX2dldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveHEpCit7CisJaW50IHJjOworCXN0cnVjdCBscGZjX21xZSAqbXFlOworCXN0cnVjdCBscGZjX3BjX3NsaTRfcGFyYW1zICpzbGk0X3BhcmFtczsKKwl1aW50MzJfdCBtYm94X3RtbzsKKworCXJjID0gMDsKKwltcWUgPSAmbWJveHEtPnUubXFlOworCisJLyogUmVhZCB0aGUgcG9ydCdzIFNMSTQgUGFyYW1ldGVycyBwb3J0IGNhcGFiaWxpdGllcyAqLworCWxwZmNfc2xpNF9wYXJhbXMobWJveHEpOworCWlmICghcGhiYS0+c2xpNF9oYmEuaW50cl9lbmFibGUpCisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOworCWVsc2UgeworCQltYm94X3RtbyA9IGxwZmNfbWJveF90bW9fdmFsKHBoYmEsIE1CWF9QT1JUX0NBUEFCSUxJVElFUyk7CisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIG1ib3hxLCBtYm94X3Rtbyk7CisJfQorCisJaWYgKHVubGlrZWx5KHJjKSkKKwkJcmV0dXJuIDE7CisKKwlzbGk0X3BhcmFtcyA9ICZwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtczsKKwlzbGk0X3BhcmFtcy0+aWZfdHlwZSA9IGJmX2dldChpZl90eXBlLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNsaV9yZXYgPSBiZl9nZXQoc2xpX3JldiwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5zbGlfZmFtaWx5ID0gYmZfZ2V0KHNsaV9mYW1pbHksICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+ZmVhdHVyZWxldmVsXzEgPSBiZl9nZXQoZmVhdHVyZWxldmVsXzEsCisJCQkJCSAgICAgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5mZWF0dXJlbGV2ZWxfMiA9IGJmX2dldChmZWF0dXJlbGV2ZWxfMiwKKwkJCQkJICAgICAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnByb3RvX3R5cGVzID0gbXFlLT51bi5zbGk0X3BhcmFtcy53b3JkMzsKKwlzbGk0X3BhcmFtcy0+c2dlX3N1cHBfbGVuID0gbXFlLT51bi5zbGk0X3BhcmFtcy5zZ2Vfc3VwcF9sZW47CisJc2xpNF9wYXJhbXMtPmlmX3BhZ2Vfc3ogPSBiZl9nZXQoaWZfcGFnZV9zeiwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5ycV9kYl93aW5kb3cgPSBiZl9nZXQocnFfZGJfd2luZG93LCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmxvb3Bia19zY29wZSA9IGJmX2dldChsb29wYmtfc2NvcGUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+ZXFfcGFnZXNfbWF4ID0gYmZfZ2V0KGVxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmVxZV9zaXplID0gYmZfZ2V0KGVxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmNxX3BhZ2VzX21heCA9IGJmX2dldChjcV9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5jcWVfc2l6ZSA9IGJmX2dldChjcWVfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5tcV9wYWdlc19tYXggPSBiZl9nZXQobXFfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+bXFlX3NpemUgPSBiZl9nZXQobXFlX3NpemUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+bXFfZWxlbV9jbnQgPSBiZl9nZXQobXFfZWxlbV9jbnQsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+d3FfcGFnZXNfbWF4ID0gYmZfZ2V0KHdxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPndxZV9zaXplID0gYmZfZ2V0KHdxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnJxX3BhZ2VzX21heCA9IGJmX2dldChycV9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5ycWVfc2l6ZSA9IGJmX2dldChycWVfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5oZHJfcGFnZXNfbWF4ID0gYmZfZ2V0KGhkcl9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5oZHJfc2l6ZSA9IGJmX2dldChoZHJfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5oZHJfcHBfYWxpZ24gPSBiZl9nZXQoaGRyX3BwX2FsaWduLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNnbF9wYWdlc19tYXggPSBiZl9nZXQoc2dsX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNnbF9wcF9hbGlnbiA9IGJmX2dldChzZ2xfcHBfYWxpZ24sICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlyZXR1cm4gcmM7Cit9CisKIC8qKgogICogbHBmY19wY2lfcHJvYmVfb25lX3MzIC0gUENJIHByb2JlIGZ1bmMgdG8gcmVnIFNMSS0zIGRldmljZSB0byBQQ0kgc3Vic3lzdGVtLgogICogQHBkZXY6IHBvaW50ZXIgdG8gUENJIGRldmljZQpAQCAtNzEzNCw2ICs3NTI5LDEyIEBACiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCisJLyoKKwkgKiBBcyB0aGUgbmV3IGtlcm5lbCBiZWhhdmlvciBvZiBwY2lfcmVzdG9yZV9zdGF0ZSgpIEFQSSBjYWxsIGNsZWFycworCSAqIGRldmljZSBzYXZlZF9zdGF0ZSBmbGFnLCBuZWVkIHRvIHNhdmUgdGhlIHJlc3RvcmVkIHN0YXRlIGFnYWluLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKHBkZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTczMTcsNiArNzcxOCwxMyBAQAogCX0KIAogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyoKKwkgKiBBcyB0aGUgbmV3IGtlcm5lbCBiZWhhdmlvciBvZiBwY2lfcmVzdG9yZV9zdGF0ZSgpIEFQSSBjYWxsIGNsZWFycworCSAqIGRldmljZSBzYXZlZF9zdGF0ZSBmbGFnLCBuZWVkIHRvIHNhdmUgdGhlIHJlc3RvcmVkIHN0YXRlIGFnYWluLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKHBkZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTc3MjYsNiArODEzNCwxMyBAQAogCS8qIFJlc3RvcmUgZGV2aWNlIHN0YXRlIGZyb20gUENJIGNvbmZpZyBzcGFjZSAqLwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCS8qCisJICogQXMgdGhlIG5ldyBrZXJuZWwgYmVoYXZpb3Igb2YgcGNpX3Jlc3RvcmVfc3RhdGUoKSBBUEkgY2FsbCBjbGVhcnMKKwkgKiBkZXZpY2Ugc2F2ZWRfc3RhdGUgZmxhZywgbmVlZCB0byBzYXZlIHRoZSByZXN0b3JlZCBzdGF0ZSBhZ2Fpbi4KKwkgKi8KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwogCWlmIChwZGV2LT5pc19idXNtYXN0ZXIpCiAJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCkBAIC03ODQ1LDExICs4MjYwLDExIEBACiAJaW50IHJjOwogCXN0cnVjdCBscGZjX3NsaV9pbnRmIGludGY7CiAKLQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExQRkNfU0xJUkVWX0NPTkZfV09SRCwgJmludGYud29yZDApKQorCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTFBGQ19TTElfSU5URiwgJmludGYud29yZDApKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgoYmZfZ2V0KGxwZmNfc2xpX2ludGZfdmFsaWQsICZpbnRmKSA9PSBMUEZDX1NMSV9JTlRGX1ZBTElEKSAmJgotCQkoYmZfZ2V0KGxwZmNfc2xpX2ludGZfcmV2LCAmaW50ZikgPT0gTFBGQ19TTElSRVZfQ09ORl9TTEk0KSkKKwkgICAgKGJmX2dldChscGZjX3NsaV9pbnRmX3NsaXJldiwgJmludGYpID09IExQRkNfU0xJX0lOVEZfUkVWX1NMSTQpKQogCQlyYyA9IGxwZmNfcGNpX3Byb2JlX29uZV9zNChwZGV2LCBwaWQpOwogCWVsc2UKIAkJcmMgPSBscGZjX3BjaV9wcm9iZV9vbmVfczMocGRldiwgcGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggYTlhZmQ4Yi4uNmM0ZGNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTE3MDcsNyArMTcwNyw4IEBACiAJCQkJYWxsb2NfbGVuIC0gc2l6ZW9mKHVuaW9uICBscGZjX3NsaTRfY2ZnX3NoZHIpOwogCX0KIAkvKiBUaGUgc3ViLWhlYWRlciBpcyBpbiBETUEgbWVtb3J5LCB3aGljaCBuZWVkcyBlbmRpYW4gY29udmVyc3Rpb24gKi8KLQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoY2ZnX3NoZHIsIGNmZ19zaGRyLAorCWlmIChjZmdfc2hkcikKKwkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KGNmZ19zaGRyLCBjZmdfc2hkciwKIAkJCSAgICAgIHNpemVvZih1bmlvbiAgbHBmY19zbGk0X2NmZ19zaGRyKSk7CiAKIAlyZXR1cm4gYWxsb2NfbGVuOwpAQCAtMTc0Nyw2ICsxNzQ4LDY1IEBACiB9CiAKIC8qKgorICogbHBmY19zbGk0X21ieF9yZWFkX2ZjZl9yZWNvcmQgLSBBbGxvY2F0ZSBhbmQgY29uc3RydWN0IHJlYWQgZmNmIG1ib3ggY21kCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmY2ZfaW5kZXg6IGluZGV4IHRvIGZjZiB0YWJsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcm91dGluZSBhbGxvY2F0ZXMgYW5kIGNvbnN0cnVjdHMgbm9uLWVtYmVkZGVkIG1haWxib3ggY29tbWFuZAorICogZm9yIHJlYWRpbmcgYSBGQ0YgdGFibGUgZW50cnkgcmVmZXJlZCBieSBAZmNmX2luZGV4LgorICoKKyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgbWFpbGJveCBjb21tYW5kIGNvbnN0cnVjdGVkIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZQorICogTlVMTC4KKyAqKi8KK2ludAorbHBmY19zbGk0X21ieF9yZWFkX2ZjZl9yZWNvcmQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJICAgICAgc3RydWN0IGxwZmNNYm94cSAqbWJveHEsCisJCQkgICAgICB1aW50MTZfdCBmY2ZfaW5kZXgpCit7CisJdm9pZCAqdmlydF9hZGRyOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCXVpbnQ4X3QgKmJ5dGVwOworCXN0cnVjdCBscGZjX21ieF9zZ2Ugc2dlOworCXVpbnQzMl90IGFsbG9jX2xlbiwgcmVxX2xlbjsKKwlzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsICpyZWFkX2ZjZjsKKworCWlmICghbWJveHEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVxX2xlbiA9IHNpemVvZihzdHJ1Y3QgZmNmX3JlY29yZCkgKworCQkgIHNpemVvZih1bmlvbiBscGZjX3NsaTRfY2ZnX3NoZHIpICsgMiAqIHNpemVvZih1aW50MzJfdCk7CisKKwkvKiBTZXQgdXAgUkVBRF9GQ0YgU0xJNF9DT05GSUcgbWFpbGJveC1pb2N0bCBjb21tYW5kICovCisJYWxsb2NfbGVuID0gbHBmY19zbGk0X2NvbmZpZyhwaGJhLCBtYm94cSwgTFBGQ19NQk9YX1NVQlNZU1RFTV9GQ09FLAorCQkJTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFQURfRkNGX1RBQkxFLCByZXFfbGVuLAorCQkJTFBGQ19TTEk0X01CWF9ORU1CRUQpOworCisJaWYgKGFsbG9jX2xlbiA8IHJlcV9sZW4pIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCwKKwkJCQkiMDI5MSBBbGxvY2F0ZWQgRE1BIG1lbW9yeSBzaXplICh4JXgpIGlzICIKKwkJCQkibGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgRE1BIG1lbW9yeSAiCisJCQkJInNpemUgKHgleClcbiIsIGFsbG9jX2xlbiwgcmVxX2xlbik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEdldCB0aGUgZmlyc3QgU0dFIGVudHJ5IGZyb20gdGhlIG5vbi1lbWJlZGRlZCBETUEgbWVtb3J5LiBUaGlzCisJICogcm91dGluZSBvbmx5IHVzZXMgYSBzaW5nbGUgU0dFLgorCSAqLworCWxwZmNfc2xpNF9tYnhfc2dlX2dldChtYm94cSwgMCwgJnNnZSk7CisJcGh5c19hZGRyID0gZ2V0UGFkZHIoc2dlLnBhX2hpLCBzZ2UucGFfbG8pOworCXZpcnRfYWRkciA9IG1ib3hxLT5zZ2VfYXJyYXktPmFkZHJbMF07CisJcmVhZF9mY2YgPSAoc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCAqKXZpcnRfYWRkcjsKKworCS8qIFNldCB1cCBjb21tYW5kIGZpZWxkcyAqLworCWJmX3NldChscGZjX21ieF9yZWFkX2ZjZl90YmxfaW5keCwgJnJlYWRfZmNmLT51LnJlcXVlc3QsIGZjZl9pbmRleCk7CisJLyogUGVyZm9ybSBuZWNlc3NhcnkgZW5kaWFuIGNvbnZlcnNpb24gKi8KKwlieXRlcCA9IHZpcnRfYWRkciArIHNpemVvZih1bmlvbiBscGZjX3NsaTRfY2ZnX3NoZHIpOworCWxwZmNfc2xpX3BjaW1lbV9iY29weShieXRlcCwgYnl0ZXAsIHNpemVvZih1aW50MzJfdCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbHBmY19yZXF1ZXN0X2ZlYXR1cmVzOiBDb25maWd1cmUgU0xJNCBSRVFVRVNUX0ZFQVRVUkVTIG1haWxib3gKICAqIEBtYm94cTogcG9pbnRlciB0byBscGZjIG1ib3ggY29tbWFuZC4KICAqCkBAIC0xOTQ2LDEzICsyMDA2LDE0IEBACiAJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfcnFfaWQxLCByZWdfZmNmaSwgUkVHX0ZDRl9JTlZBTElEX1FJRCk7CiAJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfcnFfaWQyLCByZWdfZmNmaSwgUkVHX0ZDRl9JTlZBTElEX1FJRCk7CiAJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfcnFfaWQzLCByZWdfZmNmaSwgUkVHX0ZDRl9JTlZBTElEX1FJRCk7Ci0JYmZfc2V0KGxwZmNfcmVnX2ZjZmlfaW5mb19pbmRleCwgcmVnX2ZjZmksIHBoYmEtPmZjZi5mY2ZfaW5keCk7CisJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfaW5mb19pbmRleCwgcmVnX2ZjZmksCisJICAgICAgIHBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCk7CiAJLyogcmVnX2ZjZiBhZGRyIG1vZGUgaXMgYml0IHdpc2UgaW52ZXJ0ZWQgdmFsdWUgb2YgZmNmIGFkZHJfbW9kZSAqLwotCWJmX3NldChscGZjX3JlZ19mY2ZpX21hbSwgcmVnX2ZjZmksCi0JCSh+cGhiYS0+ZmNmLmFkZHJfbW9kZSkgJiAweDMpOwotCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfVkFMSURfVkxBTikgeworCWJmX3NldChscGZjX3JlZ19mY2ZpX21hbSwgcmVnX2ZjZmksICh+cGhiYS0+ZmNmLmFkZHJfbW9kZSkgJiAweDMpOworCWlmIChwaGJhLT5mY2YuY3VycmVudF9yZWMudmxhbl9pZCAhPSAweEZGRkYpIHsKIAkJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfdnYsIHJlZ19mY2ZpLCAxKTsKLQkJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfdmxhbl90YWcsIHJlZ19mY2ZpLCBwaGJhLT5mY2Yudmxhbl9pZCk7CisJCWJmX3NldChscGZjX3JlZ19mY2ZpX3ZsYW5fdGFnLCByZWdfZmNmaSwKKwkJICAgICAgIHBoYmEtPmZjZi5jdXJyZW50X3JlYy52bGFuX2lkKTsKIAl9CiB9CiAKQEAgLTE5OTIsMyArMjA1Myw0MSBAQAogCWJmX3NldChscGZjX3Jlc3VtZV9ycGlfaWksIHJlc3VtZV9ycGksIFJFU1VNRV9JTkRFWF9SUEkpOwogCXJlc3VtZV9ycGktPmV2ZW50X3RhZyA9IG5kbHAtPnBoYmEtPmZjX2V2ZW50VGFnOwogfQorCisvKioKKyAqIGxwZmNfc3VwcG9ydGVkX3BhZ2VzIC0gSW5pdGlhbGl6ZSB0aGUgUE9SVF9DQVBBQklMSVRJRVMgc3VwcG9ydGVkIHBhZ2VzCisgKiAgICAgICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZC4KKyAqIEBtYm94OiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kIHRvIGluaXRpYWxpemUuCisgKgorICogVGhlIFBPUlRfQ0FQQUJJTElUSUVTIHN1cHBvcnRlZCBwYWdlcyBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIHRvCisgKiByZXRyaWV2ZSB0aGUgcGFydGljdWxhciBmZWF0dXJlIHBhZ2VzIHN1cHBvcnRlZCBieSB0aGUgcG9ydC4KKyAqKi8KK3ZvaWQKK2xwZmNfc3VwcG9ydGVkX3BhZ2VzKHN0cnVjdCBscGZjTWJveHEgKm1ib3gpCit7CisJc3RydWN0IGxwZmNfbWJ4X3N1cHBfcGFnZXMgKnN1cHBfcGFnZXM7CisKKwltZW1zZXQobWJveCwgMCwgc2l6ZW9mKCptYm94KSk7CisJc3VwcF9wYWdlcyA9ICZtYm94LT51Lm1xZS51bi5zdXBwX3BhZ2VzOworCWJmX3NldChscGZjX21xZV9jb21tYW5kLCAmbWJveC0+dS5tcWUsIE1CWF9QT1JUX0NBUEFCSUxJVElFUyk7CisJYmZfc2V0KGNwbiwgc3VwcF9wYWdlcywgTFBGQ19TVVBQX1BBR0VTKTsKK30KKworLyoqCisgKiBscGZjX3NsaTRfcGFyYW1zIC0gSW5pdGlhbGl6ZSB0aGUgUE9SVF9DQVBBQklMSVRJRVMgU0xJNCBQYXJhbXMKKyAqICAgICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQuCisgKiBAbWJveDogcG9pbnRlciB0byBscGZjIG1ib3ggY29tbWFuZCB0byBpbml0aWFsaXplLgorICoKKyAqIFRoZSBQT1JUX0NBUEFCSUxJVElFUyBTTEk0IHBhcmFtZXRlcnMgbWFpbGJveCBjb21tYW5kIGlzIGlzc3VlZCB0bworICogcmV0cmlldmUgdGhlIHBhcnRpY3VsYXIgU0xJNCBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIHBvcnQuCisgKiovCit2b2lkCitscGZjX3NsaTRfcGFyYW1zKHN0cnVjdCBscGZjTWJveHEgKm1ib3gpCit7CisJc3RydWN0IGxwZmNfbWJ4X3NsaTRfcGFyYW1zICpzbGk0X3BhcmFtczsKKworCW1lbXNldChtYm94LCAwLCBzaXplb2YoKm1ib3gpKTsKKwlzbGk0X3BhcmFtcyA9ICZtYm94LT51Lm1xZS51bi5zbGk0X3BhcmFtczsKKwliZl9zZXQobHBmY19tcWVfY29tbWFuZCwgJm1ib3gtPnUubXFlLCBNQlhfUE9SVF9DQVBBQklMSVRJRVMpOworCWJmX3NldChjcG4sIHNsaTRfcGFyYW1zLCBMUEZDX1NMSTRfUEFSQU1FVEVSUyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKaW5kZXggZDY1NWVkMy4uZjNjZmJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTc3LDIzICsxNzcsMyBAQAogCXVpbnQzMl90IGRhdGE7CiB9OwogCi0vKiBic2cgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVAkxCi0jZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfQ1RfRVZFTlQJMgotCi1zdHJ1Y3Qgc2V0X2N0X2V2ZW50IHsKLQl1aW50MzJfdCBjb21tYW5kOwotCXVpbnQzMl90IGV2X3JlcV9pZDsKLQl1aW50MzJfdCBldl9yZWdfaWQ7Ci19OwotCi1zdHJ1Y3QgZ2V0X2N0X2V2ZW50IHsKLQl1aW50MzJfdCBjb21tYW5kOwotCXVpbnQzMl90IGV2X3JlZ19pZDsKLQl1aW50MzJfdCBldl9yZXFfaWQ7Ci19OwotCi1zdHJ1Y3QgZ2V0X2N0X2V2ZW50X3JlcGx5IHsKLQl1aW50MzJfdCBpbW1lZF9kYXRhOwotCXVpbnQzMl90IHR5cGU7Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKaW5kZXggMmVkNmFmMS4uZDIwYWU2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCkBAIC02Miw3ICs2Miw3IEBACiAKIGludAogbHBmY19jaGVja19zcGFybShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAotCQkgc3RydWN0IHNlcnZfcGFybSAqIHNwLCB1aW50MzJfdCBjbGFzcykKKwkJIHN0cnVjdCBzZXJ2X3Bhcm0gKnNwLCB1aW50MzJfdCBjbGFzcywgaW50IGZsb2dpKQogewogCXZvbGF0aWxlIHN0cnVjdCBzZXJ2X3Bhcm0gKmhzcCA9ICZ2cG9ydC0+ZmNfc3BhcmFtOwogCXVpbnQxNl90IGhzcF92YWx1ZSwgc3NwX3ZhbHVlID0gMDsKQEAgLTc1LDQ5ICs3NSw1NiBAQAogCSAqIGNvcnJlY3RpbmcgdGhlIGJ5dGUgdmFsdWVzLgogCSAqLwogCWlmIChzcC0+Y2xzMS5jbGFzc1ZhbGlkKSB7Ci0JCWhzcF92YWx1ZSA9IChoc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCWhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYjsKLQkJc3NwX3ZhbHVlID0gKHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQlzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYjsKLQkJaWYgKCFzc3BfdmFsdWUpCi0JCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7Ci0JCQlzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYiA9IGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYjsKLQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTXNiID0gaHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiOworCQlpZiAoIWZsb2dpKSB7CisJCQloc3BfdmFsdWUgPSAoKGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBoc3AtPmNsczEucmN2RGF0YVNpemVMc2IpOworCQkJc3NwX3ZhbHVlID0gKChzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYik7CisJCQlpZiAoIXNzcF92YWx1ZSkKKwkJCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOworCQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgeworCQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiID0KKwkJCQkJaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOworCQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTXNiID0KKwkJCQkJaHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiOworCQkJfQogCQl9Ci0JfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzEpIHsKKwl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMSkKIAkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQl9Ci0KIAlpZiAoc3AtPmNsczIuY2xhc3NWYWxpZCkgewotCQloc3BfdmFsdWUgPSAoaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQloc3AtPmNsczIucmN2RGF0YVNpemVMc2I7Ci0JCXNzcF92YWx1ZSA9IChzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJc3AtPmNsczIucmN2RGF0YVNpemVMc2I7Ci0JCWlmICghc3NwX3ZhbHVlKQotCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgewotCQkJc3AtPmNsczIucmN2RGF0YVNpemVMc2IgPSBoc3AtPmNsczIucmN2RGF0YVNpemVMc2I7Ci0JCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA9IGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYjsKKwkJaWYgKCFmbG9naSkgeworCQkJaHNwX3ZhbHVlID0gKChoc3AtPmNsczIucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgaHNwLT5jbHMyLnJjdkRhdGFTaXplTHNiKTsKKwkJCXNzcF92YWx1ZSA9ICgoc3AtPmNsczIucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgc3AtPmNsczIucmN2RGF0YVNpemVMc2IpOworCQkJaWYgKCFzc3BfdmFsdWUpCisJCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKKwkJCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKKwkJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYiA9CisJCQkJCWhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKKwkJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA9CisJCQkJCWhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYjsKKwkJCX0KIAkJfQotCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MyKSB7CisJfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzIpCiAJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JfQotCiAJaWYgKHNwLT5jbHMzLmNsYXNzVmFsaWQpIHsKLQkJaHNwX3ZhbHVlID0gKGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJaHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiOwotCQlzc3BfdmFsdWUgPSAoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCXNwLT5jbHMzLnJjdkRhdGFTaXplTHNiOwotCQlpZiAoIXNzcF92YWx1ZSkKLQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKLQkJCXNwLT5jbHMzLnJjdkRhdGFTaXplTHNiID0gaHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiOwotCQkJc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPSBoc3AtPmNsczMucmN2RGF0YVNpemVNc2I7CisJCWlmICghZmxvZ2kpIHsKKwkJCWhzcF92YWx1ZSA9ICgoaHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYik7CisJCQlzc3BfdmFsdWUgPSAoKHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiKTsKKwkJCWlmICghc3NwX3ZhbHVlKQorCQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07CisJCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7CisJCQkJc3AtPmNsczMucmN2RGF0YVNpemVMc2IgPQorCQkJCQloc3AtPmNsczMucmN2RGF0YVNpemVMc2I7CisJCQkJc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPQorCQkJCQloc3AtPmNsczMucmN2RGF0YVNpemVNc2I7CisJCQl9CiAJCX0KLQl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMykgeworCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MzKQogCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCX0KIAogCS8qCiAJICogUHJlc2VydmUgdGhlIHVwcGVyIGZvdXIgYml0cyBvZiB0aGUgTVNCIGZyb20gdGhlIFBMT0dJIHJlc3BvbnNlLgpAQCAtMjQ3LDcgKzI1NCw3IEBACiAJaW50IHJjOwogCiAJbWVtc2V0KCZzdGF0LCAwLCBzaXplb2YgKHN0cnVjdCBsc19yanQpKTsKLQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPD0gTFBGQ19GTE9HSSkgeworCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZESVNDKSB7CiAJCS8qIEJlZm9yZSByZXNwb25kaW5nIHRvIFBMT0dJLCBjaGVjayBmb3IgcHQycHQgbW9kZS4KIAkJICogSWYgd2UgYXJlIHB0MnB0LCB3aXRoIGFuIG91dHN0YW5kaW5nIEZMT0dJLCBhYm9ydAogCQkgKiB0aGUgRkxPR0kgYW5kIHJlc2VuZCBpdCBmaXJzdC4KQEAgLTI5NSw3ICszMDIsNyBAQAogCQkJTlVMTCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoKGxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMpID09IDApKSB7CisJaWYgKChscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzLCAwKSA9PSAwKSkgewogCQkvKiBSZWplY3QgdGhpcyByZXF1ZXN0IGJlY2F1c2UgaW52YWxpZCBwYXJhbWV0ZXJzICovCiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOwogCQlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfU1BBUk1fT1BUSU9OUzsKQEAgLTgzMSw3ICs4MzgsNyBAQAogCQkJCSAiMDE0MiBQTE9HSSBSU1A6IEludmFsaWQgV1dOLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoIWxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMpKQorCWlmICghbHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMywgMCkpCiAJCWdvdG8gb3V0OwogCS8qIFBMT0dJIGNoa3Bhcm0gT0sgKi8KIAlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19FTFMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IGEyNDY0MTAuLjdmMjFiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC02MjYsNiArNjI2LDcgQEAKIAkJJnBoYmEtPnNsaTRfaGJhLmxwZmNfYWJ0c19zY3NpX2J1Zl9saXN0LCBsaXN0KSB7CiAJCWlmIChwc2ItPmN1cl9pb2NicS5zbGk0X3hyaXRhZyA9PSB4cmkpIHsKIAkJCWxpc3RfZGVsKCZwc2ItPmxpc3QpOworCQkJcHNiLT5leGNoX2J1c3kgPSAwOwogCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCiAJCQkJJnBoYmEtPnNsaTRfaGJhLmFidHNfc2NzaV9idWZfbGlzdF9sb2NrLApAQCAtNjg4LDExICs2ODksMTIgQEAKIAkJCQkJIGxpc3QpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwotCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQlwc2ItPnJlc3VsdCA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDE7CiAJCQkJcmMrKzsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKKwkJCX0KIAkJCS8qIFB1dCBpdCBiYWNrIGludG8gdGhlIFNDU0kgYnVmZmVyIGxpc3QgKi8KIAkJCWxwZmNfcmVsZWFzZV9zY3NpX2J1Zl9zNChwaGJhLCBwc2IpOwogCQl9CkBAIC03OTYsMTkgKzc5OCwxNyBAQAogCQkgKi8KIAkJc2dsLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKHBkbWFfcGh5c19mY3BfY21kKSk7CiAJCXNnbC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KHBkbWFfcGh5c19mY3BfY21kKSk7Ci0JCWJmX3NldChscGZjX3NsaTRfc2dlX2xlbiwgc2dsLCBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSk7CiAJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMCk7CiAJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQlzZ2wtPnNnZV9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSk7CiAJCXNnbCsrOwogCiAJCS8qIFNldHVwIHRoZSBwaHlzaWNhbCByZWdpb24gZm9yIHRoZSBGQ1AgUlNQICovCiAJCXNnbC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChwZG1hX3BoeXNfZmNwX3JzcCkpOwogCQlzZ2wtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhwZG1hX3BoeXNfZmNwX3JzcCkpOwotCQliZl9zZXQobHBmY19zbGk0X3NnZV9sZW4sIHNnbCwgc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSk7CiAJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMSk7CiAJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQlzZ2wtPnNnZV9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IGZjcF9yc3ApKTsKIAogCQkvKgogCQkgKiBTaW5jZSB0aGUgSU9DQiBmb3IgdGhlIEZDUCBJL08gaXMgYnVpbHQgaW50byB0aGlzCkBAIC04MzksMTEgKzgzOSwxMiBAQAogCQkJCQkJcHNiLT5jdXJfaW9jYnEuc2xpNF94cml0YWcpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwotCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQlwc2ItPnJlc3VsdCA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDE7CiAJCQkJcmMrKzsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKKwkJCX0KIAkJCS8qIFB1dCBpdCBiYWNrIGludG8gdGhlIFNDU0kgYnVmZmVyIGxpc3QgKi8KIAkJCWxwZmNfcmVsZWFzZV9zY3NpX2J1Zl9zNChwaGJhLCBwc2IpOwogCQkJYnJlYWs7CkBAIC04NTcsMTEgKzg1OCwxMiBAQAogCQkJCSBsaXN0KTsKIAkJCWlmIChzdGF0dXMpIHsKIAkJCQkvKiBQdXQgdGhpcyBiYWNrIG9uIHRoZSBhYm9ydCBzY3NpIGxpc3QgKi8KLQkJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7Ci0JCQkJcHNiLT5yZXN1bHQgPSBJT0VSUl9BQk9SVF9SRVFVRVNURUQ7CisJCQkJcHNiLT5leGNoX2J1c3kgPSAxOwogCQkJCXJjKys7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSB7CisJCQkJcHNiLT5leGNoX2J1c3kgPSAwOwogCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX1NVQ0NFU1M7CisJCQl9CiAJCQkvKiBQdXQgaXQgYmFjayBpbnRvIHRoZSBTQ1NJIGJ1ZmZlciBsaXN0ICovCiAJCQlscGZjX3JlbGVhc2Vfc2NzaV9idWZfczQocGhiYSwgcHNiKTsKIAkJfQpAQCAtOTUxLDggKzk1Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZyA9IDA7CiAKLQlpZiAocHNiLT5zdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVAotCQkmJiBwc2ItPnJlc3VsdCA9PSBJT0VSUl9BQk9SVF9SRVFVRVNURUQpIHsKKwlpZiAocHNiLT5leGNoX2J1c3kpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPnNsaTRfaGJhLmFidHNfc2NzaV9idWZfbGlzdF9sb2NrLAogCQkJCQlpZmxhZyk7CiAJCXBzYi0+cENtZCA9IE5VTEw7CkBAIC0xODY5LDcgKzE4NzAsNiBAQAogCQlzY3NpX2Zvcl9lYWNoX3NnKHNjc2lfY21uZCwgc2dlbCwgbnNlZywgbnVtX2JkZSkgewogCQkJcGh5c2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VsKTsKIAkJCWRtYV9sZW4gPSBzZ19kbWFfbGVuKHNnZWwpOwotCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsIHNnX2RtYV9sZW4oc2dlbCkpOwogCQkJc2dsLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3cocGh5c2FkZHIpKTsKIAkJCXNnbC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChwaHlzYWRkcikpOwogCQkJaWYgKChudW1fYmRlICsgMSkgPT0gbnNlZykKQEAgLTE4NzgsNyArMTg3OCw3IEBACiAJCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAwKTsKIAkJCWJmX3NldChscGZjX3NsaTRfc2dlX29mZnNldCwgc2dsLCBkbWFfb2Zmc2V0KTsKIAkJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJCXNnbC0+d29yZDMgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQzKTsKKwkJCXNnbC0+c2dlX2xlbiA9IGNwdV90b19sZTMyKGRtYV9sZW4pOwogCQkJZG1hX29mZnNldCArPSBkbWFfbGVuOwogCQkJc2dsKys7CiAJCX0KQEAgLTIyMjEsNiArMjIyMSw5IEBACiAKIAlscGZjX2NtZC0+cmVzdWx0ID0gcElvY2JPdXQtPmlvY2IudW4udWxwV29yZFs0XTsKIAlscGZjX2NtZC0+c3RhdHVzID0gcElvY2JPdXQtPmlvY2IudWxwU3RhdHVzOworCS8qIHBpY2sgdXAgU0xJNCBleGhhbmdlIGJ1c3kgc3RhdHVzIGZyb20gSEJBICovCisJbHBmY19jbWQtPmV4Y2hfYnVzeSA9IHBJb2NiT3V0LT5pb2NiX2ZsYWcgJiBMUEZDX0VYQ0hBTkdFX0JVU1k7CisKIAlpZiAocG5vZGUgJiYgTkxQX0NIS19OT0RFX0FDVChwbm9kZSkpCiAJCWF0b21pY19kZWMoJnBub2RlLT5jbWRfcGVuZGluZyk7CiAKQEAgLTI2MzcsNiArMjY0MCw3IEBACiAJfQogCXBoYmEtPmxwZmNfZ2V0X3Njc2lfYnVmID0gbHBmY19nZXRfc2NzaV9idWY7CiAJcGhiYS0+bHBmY19yYW1wZG93bl9xdWV1ZV9kZXB0aCA9IGxwZmNfcmFtcGRvd25fcXVldWVfZGVwdGg7CisJcGhiYS0+bHBmY19zY3NpX2NtZF9pb2NiX2NtcGwgPSBscGZjX3Njc2lfY21kX2lvY2JfY21wbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY5NSw2ICsyNjk5LDEzIEBACiAJCQkJICIgcG9ydCAlcyIsCiAJCQkJIHBoYmEtPlBvcnQpOwogCQl9CisJCWxlbiA9IHN0cmxlbihscGZjaW5mb2J1Zik7CisJCWlmIChwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmxvZ2ljYWxfc3BlZWQpIHsKKwkJCXNucHJpbnRmKGxwZmNpbmZvYnVmICsgbGVuLAorCQkJCSAzODQtbGVuLAorCQkJCSAiIExvZ2ljYWwgTGluayBTcGVlZDogJWQgTWJwcyIsCisJCQkJIHBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubG9naWNhbF9zcGVlZCAqIDEwKTsKKwkJfQogCX0KIAlyZXR1cm4gbHBmY2luZm9idWY7CiB9CkBAIC0yOTkwLDYgKzMwMDEsNyBAQAogCiAJLyogQUJUUyBXUUUgbXVzdCBnbyB0byB0aGUgc2FtZSBXUSBhcyB0aGUgV1FFIHRvIGJlIGFib3J0ZWQgKi8KIAlhYnRzaW9jYi0+ZmNwX3dxaWR4ID0gaW9jYi0+ZmNwX3dxaWR4OworCWFidHNpb2NiLT5pb2NiX2ZsYWcgfD0gTFBGQ19VU0VfRkNQV1FJRFg7CiAKIAlpZiAobHBmY19pc19saW5rX3VwKHBoYmEpKQogCQlpY21kLT51bHBDb21tYW5kID0gQ01EX0FCT1JUX1hSSV9DTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKaW5kZXggNjVkZmM4Yi4uNTkzMjI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKQEAgLTExOCw2ICsxMTgsNyBAQAogCiAJdWludDMyX3QgdGltZW91dDsKIAorCXVpbnQxNl90IGV4Y2hfYnVzeTsgICAgIC8qIFNMSTQgaGJhIHJlcG9ydGVkIFhCIG9uIGNvbXBsZXRlIFdDUUUgKi8KIAl1aW50MTZfdCBzdGF0dXM7CS8qIEZyb20gSU9DQiBXb3JkIDctIHVscFN0YXR1cyAqLwogCXVpbnQzMl90IHJlc3VsdDsJLyogRnJvbSBJT0NCIFdvcmQgNC4gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKaW5kZXggNTg5NTQ5Yi4uMzVlM2I5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCkBAIC01ODAsMTAgKzU4MCw3IEBACiAJZWxzZQogCQlzZ2xxID0gX19scGZjX2NsZWFyX2FjdGl2ZV9zZ2xxKHBoYmEsIGlvY2JxLT5zbGk0X3hyaXRhZyk7CiAJaWYgKHNnbHEpICB7Ci0JCWlmIChpb2NicS0+aW9jYl9mbGFnICYgTFBGQ19EUklWRVJfQUJPUlRFRAotCQkJJiYgKChpb2NicS0+aW9jYi51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkKLQkJCSYmIChpb2NicS0+aW9jYi51bi51bHBXb3JkWzRdCi0JCQkJPT0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEKSkpIHsKKwkJaWYgKGlvY2JxLT5pb2NiX2ZsYWcgJiBMUEZDX0VYQ0hBTkdFX0JVU1kpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5zbGk0X2hiYS5hYnRzX3NnbF9saXN0X2xvY2ssCiAJCQkJCWlmbGFnKTsKIAkJCWxpc3RfYWRkKCZzZ2xxLT5saXN0LApAQCAtNzY0LDEwICs3NjEsNiBAQAogCWNhc2UgRFNTQ01EX0lXUklURTY0X0NYOgogCWNhc2UgRFNTQ01EX0lSRUFENjRfQ1I6CiAJY2FzZSBEU1NDTURfSVJFQUQ2NF9DWDoKLQljYXNlIERTU0NNRF9JTlZBTElEQVRFX0RFSzoKLQljYXNlIERTU0NNRF9TRVRfS0VLOgotCWNhc2UgRFNTQ01EX0dFVF9LRUtfSUQ6Ci0JY2FzZSBEU1NDTURfR0VOX1hGRVI6CiAJCXR5cGUgPSBMUEZDX1NPTF9JT0NCOwogCQlicmVhazsKIAljYXNlIENNRF9BQk9SVF9YUklfQ046CkBAIC0xNzE3LDYgKzE3MTAsNyBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXA7CiAJdWludDE2X3QgcnBpLCB2cGk7CiAJaW50IHJjOworCXN0cnVjdCBscGZjX3Zwb3J0ICAqdnBvcnQgPSBwbWItPnZwb3J0OwogCiAJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChwbWItPmNvbnRleHQxKTsKIApAQCAtMTc0NSw2ICsxNzM5LDE4IEBACiAJCQlyZXR1cm47CiAJfQogCisJLyogVW5yZWcgVlBJLCBpZiB0aGUgUkVHX1ZQSSBzdWNjZWVkIGFmdGVyIFZMaW5rIGZhaWx1cmUgKi8KKwlpZiAoKHBtYi0+dS5tYi5tYnhDb21tYW5kID09IE1CWF9SRUdfVlBJKSAmJgorCQkhKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpICYmCisJCSFwbWItPnUubWIubWJ4U3RhdHVzKSB7CisJCWxwZmNfdW5yZWdfdnBpKHBoYmEsIHBtYi0+dS5tYi51bi52YXJSZWdWcGkudnBpLCBwbWIpOworCQlwbWItPnZwb3J0ID0gdnBvcnQ7CisJCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CisJCWlmIChyYyAhPSBNQlhfTk9UX0ZJTklTSEVEKQorCQkJcmV0dXJuOworCX0KKwogCWlmIChiZl9nZXQobHBmY19tcWVfY29tbWFuZCwgJnBtYi0+dS5tcWUpID09IE1CWF9TTEk0X0NPTkZJRykKIAkJbHBmY19zbGk0X21ib3hfY21kX2ZyZWUocGhiYSwgcG1iKTsKIAllbHNlCkBAIC0yMjI4LDkgKzIyMzQsMTUgQEAKIAkJCSAqIEFsbCBvdGhlciBhcmUgcGFzc2VkIHRvIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrLgogCQkJICovCiAJCQlpZiAocHJpbmctPnJpbmdubyA9PSBMUEZDX0VMU19SSU5HKSB7Ci0JCQkJaWYgKGNtZGlvY2JwLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVEKSB7CisJCQkJaWYgKChwaGJhLT5zbGlfcmV2IDwgTFBGQ19TTElfUkVWNCkgJiYKKwkJCQkgICAgKGNtZGlvY2JwLT5pb2NiX2ZsYWcgJgorCQkJCQkJCUxQRkNfRFJJVkVSX0FCT1JURUQpKSB7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOwogCQkJCQljbWRpb2NicC0+aW9jYl9mbGFnICY9CiAJCQkJCQl+TFBGQ19EUklWRVJfQUJPUlRFRDsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgICAgICAgaWZsYWcpOwogCQkJCQlzYXZlcS0+aW9jYi51bHBTdGF0dXMgPQogCQkJCQkJSU9TVEFUX0xPQ0FMX1JFSkVDVDsKIAkJCQkJc2F2ZXEtPmlvY2IudW4udWxwV29yZFs0XSA9CkBAIC0yMjQwLDcgKzIyNTIsNDcgQEAKIAkJCQkJICogb2YgRE1BaW5nIHBheWxvYWQsIHNvIGRvbid0IGZyZWUgZGF0YQogCQkJCQkgKiBidWZmZXIgdGlsbCBhZnRlciBhIGhiZWF0LgogCQkJCQkgKi8KKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CiAJCQkJCXNhdmVxLT5pb2NiX2ZsYWcgfD0gTFBGQ19ERUxBWV9NRU1fRlJFRTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgICAgICAgaWZsYWcpOworCQkJCX0KKwkJCQlpZiAoKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgJiYKKwkJCQkgICAgKHNhdmVxLT5pb2NiX2ZsYWcgJiBMUEZDX0VYQ0hBTkdFX0JVU1kpKSB7CisJCQkJCS8qIFNldCBjbWRpb2NiIGZsYWcgZm9yIHRoZSBleGNoYW5nZQorCQkJCQkgKiBidXN5IHNvIHNnbCAoeHJpKSB3aWxsIG5vdCBiZQorCQkJCQkgKiByZWxlYXNlZCB1bnRpbCB0aGUgYWJvcnQgeHJpIGlzCisJCQkJCSAqIHJlY2VpdmVkIGZyb20gaGJhLCBjbGVhciB0aGUKKwkJCQkJICogTFBGQ19EUklWRVJfQUJPUlRFRCBiaXQgaW4gY2FzZQorCQkJCQkgKiBpdCB3YXMgZHJpdmVyIGluaXRpYXRlZCBhYm9ydC4KKwkJCQkJICovCisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOworCQkJCQljbWRpb2NicC0+aW9jYl9mbGFnICY9CisJCQkJCQl+TFBGQ19EUklWRVJfQUJPUlRFRDsKKwkJCQkJY21kaW9jYnAtPmlvY2JfZmxhZyB8PQorCQkJCQkJTFBGQ19FWENIQU5HRV9CVVNZOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgICAgICBpZmxhZyk7CisJCQkJCWNtZGlvY2JwLT5pb2NiLnVscFN0YXR1cyA9CisJCQkJCQlJT1NUQVRfTE9DQUxfUkVKRUNUOworCQkJCQljbWRpb2NicC0+aW9jYi51bi51bHBXb3JkWzRdID0KKwkJCQkJCUlPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQkJLyoKKwkJCQkJICogRm9yIFNMSTQsIGlyc2lvY2IgY29udGFpbnMgTk9fWFJJCisJCQkJCSAqIGluIHNsaV94cml0YWcsIGl0IHNoYWxsIG5vdCBhZmZlY3QKKwkJCQkJICogcmVsZWFzaW5nIHNnbCAoeHJpKSBwcm9jZXNzLgorCQkJCQkgKi8KKwkJCQkJc2F2ZXEtPmlvY2IudWxwU3RhdHVzID0KKwkJCQkJCUlPU1RBVF9MT0NBTF9SRUpFQ1Q7CisJCQkJCXNhdmVxLT5pb2NiLnVuLnVscFdvcmRbNF0gPQorCQkJCQkJSU9FUlJfU0xJX0FCT1JURUQ7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOworCQkJCQlzYXZlcS0+aW9jYl9mbGFnIHw9IExQRkNfREVMQVlfTUVNX0ZSRUU7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICAgICAgIGlmbGFnKTsKIAkJCQl9CiAJCQl9CiAJCQkoY21kaW9jYnAtPmlvY2JfY21wbCkgKHBoYmEsIGNtZGlvY2JwLCBzYXZlcSk7CkBAIC01Njg3LDE5ICs1NzM5LDE5IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IG51bUJkZXM7IGkrKykgewogCQkJLyogU2hvdWxkIGFscmVhZHkgYmUgYnl0ZSBzd2FwcGVkLiAqLwotCQkJc2dsLT5hZGRyX2hpID0gIGJwbC0+YWRkckhpZ2g7Ci0JCQlzZ2wtPmFkZHJfbG8gPSAgYnBsLT5hZGRyTG93OwotCQkJLyogc3dhcCB0aGUgc2l6ZSBmaWVsZCBiYWNrIHRvIHRoZSBjcHUgc28gd2UKLQkJCSAqIGNhbiBhc3NpZ24gaXQgdG8gdGhlIHNnbC4KLQkJCSAqLwotCQkJYmRlLnR1cy53ICA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwotCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsIGJkZS50dXMuZi5iZGVTaXplKTsKKwkJCXNnbC0+YWRkcl9oaSA9IGJwbC0+YWRkckhpZ2g7CisJCQlzZ2wtPmFkZHJfbG8gPSBicGwtPmFkZHJMb3c7CisKIAkJCWlmICgoaSsxKSA9PSBudW1CZGVzKQogCQkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMSk7CiAJCQllbHNlCiAJCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAwKTsKIAkJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJCXNnbC0+d29yZDMgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQzKTsKKwkJCS8qIHN3YXAgdGhlIHNpemUgZmllbGQgYmFjayB0byB0aGUgY3B1IHNvIHdlCisJCQkgKiBjYW4gYXNzaWduIGl0IHRvIHRoZSBzZ2wuCisJCQkgKi8KKwkJCWJkZS50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCQkJc2dsLT5zZ2VfbGVuID0gY3B1X3RvX2xlMzIoYmRlLnR1cy5mLmJkZVNpemUpOwogCQkJYnBsKys7CiAJCQlzZ2wrKzsKIAkJfQpAQCAtNTcxMiwxMSArNTc2NCwxMCBAQAogCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRySGlnaCk7CiAJCQlzZ2wtPmFkZHJfbG8gPQogCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRyTG93KTsKLQkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xlbiwgc2dsLAotCQkJCWljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplKTsKIAkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMSk7CiAJCQlzZ2wtPndvcmQyID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMik7Ci0JCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCQlzZ2wtPnNnZV9sZW4gPQorCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplKTsKIAl9CiAJcmV0dXJuIHNnbHEtPnNsaTRfeHJpdGFnOwogfQpAQCAtNTk4NywxMiArNjAzOCwxMCBAQAogCQllbHNlCiAJCQliZl9zZXQoYWJvcnRfY21kX2lhLCAmd3FlLT5hYm9ydF9jbWQsIDApOwogCQliZl9zZXQoYWJvcnRfY21kX2NyaXRlcmlhLCAmd3FlLT5hYm9ydF9jbWQsIFRfWFJJX1RBRyk7Ci0JCWFib3J0X3RhZyA9IGlvY2JxLT5pb2NiLnVuLmFjeHJpLmFib3J0SW9UYWc7CiAJCXdxZS0+d29yZHNbNV0gPSAwOwogCQliZl9zZXQobHBmY193cWVfZ2VuX2N0LCAmd3FlLT5nZW5lcmljLAogCQkJKChpb2NicS0+aW9jYi51bHBDdF9oIDw8IDEpIHwgaW9jYnEtPmlvY2IudWxwQ3RfbCkpOwogCQlhYm9ydF90YWcgPSBpb2NicS0+aW9jYi51bi5hY3hyaS5hYm9ydElvVGFnOwotCQl3cWUtPmdlbmVyaWMuYWJvcnRfdGFnID0gYWJvcnRfdGFnOwogCQkvKgogCQkgKiBUaGUgYWJvcnQgaGFuZGxlciB3aWxsIHNlbmQgdXMgQ01EX0FCT1JUX1hSSV9DTiBvcgogCQkgKiBDTURfQ0xPU0VfWFJJX0NOIGFuZCB0aGUgZncgb25seSBhY2NlcHRzIENNRF9BQk9SVF9YUklfQ1gKQEAgLTYxMjEsMTUgKzYxNzAsMTUgQEAKIAlpZiAobHBmY19zbGk0X2lvY2Iyd3FlKHBoYmEsIHBpb2NiLCAmd3FlKSkKIAkJcmV0dXJuIElPQ0JfRVJST1I7CiAKLQlpZiAocGlvY2ItPmlvY2JfZmxhZyAmICBMUEZDX0lPX0ZDUCkgeworCWlmICgocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKSB8fAorCQkocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfVVNFX0ZDUFdRSURYKSkgewogCQkvKgogCQkgKiBGb3IgRkNQIGNvbW1hbmQgSU9DQiwgZ2V0IGEgbmV3IFdRIGluZGV4IHRvIGRpc3RyaWJ1dGUKIAkJICogV1FFIGFjcm9zcyB0aGUgV1Fzci4gT24gdGhlIG90aGVyIGhhbmQsIGZvciBhYm9ydCBJT0NCLAogCQkgKiBpdCBjYXJyaWVzIHRoZSBzYW1lIFdRIGluZGV4IHRvIHRoZSBvcmlnaW5hbCBjb21tYW5kCiAJCSAqIElPQ0IuCiAJCSAqLwotCQlpZiAoKHBpb2NiLT5pb2NiLnVscENvbW1hbmQgIT0gQ01EX0FCT1JUX1hSSV9DTikgJiYKLQkJICAgIChwaW9jYi0+aW9jYi51bHBDb21tYW5kICE9IENNRF9DTE9TRV9YUklfQ04pKQorCQlpZiAocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQogCQkJcGlvY2ItPmZjcF93cWlkeCA9IGxwZmNfc2xpNF9zY21kX3RvX3dxaWR4X2Rpc3RyKHBoYmEpOwogCQlpZiAobHBmY19zbGk0X3dxX3B1dChwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbcGlvY2ItPmZjcF93cWlkeF0sCiAJCQkJICAgICAmd3FlKSkKQEAgLTcwMDQsNyArNzA1MywxNCBAQAogCQkgICAgYWJvcnRfaW9jYi0+aW9jYi51bHBDb250ZXh0ICE9IGFib3J0X2NvbnRleHQgfHwKIAkJICAgIChhYm9ydF9pb2NiLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVEKSA9PSAwKQogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJZWxzZSB7CisJCWVsc2UgaWYgKHBoYmEtPnNsaV9yZXYgPCBMUEZDX1NMSV9SRVY0KSB7CisJCQkvKgorCQkJICogbGVhdmUgdGhlIFNMSTQgYWJvcnRlZCBjb21tYW5kIG9uIHRoZSB0eGNtcGxxCisJCQkgKiBsaXN0IGFuZCB0aGUgY29tbWFuZCBjb21wbGV0ZSBXQ1FFJ3MgWEIgYml0CisJCQkgKiB3aWxsIHRlbGwgd2hldGhlciB0aGUgU0dMIChYUkkpIGNhbiBiZSByZWxlYXNlZAorCQkJICogaW1tZWRpYXRlbHkgb3IgdG8gdGhlIGFib3J0ZWQgU0dMIGxpc3QgZm9yIHRoZQorCQkJICogZm9sbG93aW5nIGFib3J0IFhSSSBmcm9tIHRoZSBIQkEuCisJCQkgKi8KIAkJCWxpc3RfZGVsX2luaXQoJmFib3J0X2lvY2ItPmxpc3QpOwogCQkJcHJpbmctPnR4Y21wbHFfY250LS07CiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtNzAxMywxMSArNzA2OSwxMyBAQAogCQkJICogcGF5bG9hZCwgc28gZG9uJ3QgZnJlZSBkYXRhIGJ1ZmZlciB0aWxsIGFmdGVyCiAJCQkgKiBhIGhiZWF0LgogCQkJICovCisJCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWFib3J0X2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0RFTEFZX01FTV9GUkVFOwotCiAJCQlhYm9ydF9pb2NiLT5pb2NiX2ZsYWcgJj0gfkxQRkNfRFJJVkVSX0FCT1JURUQ7CisJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCiAJCQlhYm9ydF9pb2NiLT5pb2NiLnVscFN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7Ci0JCQlhYm9ydF9pb2NiLT5pb2NiLnVuLnVscFdvcmRbNF0gPSBJT0VSUl9TTElfQUJPUlRFRDsKKwkJCWFib3J0X2lvY2ItPmlvY2IudW4udWxwV29yZFs0XSA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKIAkJCShhYm9ydF9pb2NiLT5pb2NiX2NtcGwpKHBoYmEsIGFib3J0X2lvY2IsIGFib3J0X2lvY2IpOwogCQl9CiAJfQpAQCAtNzEwNiw3ICs3MTY0LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBUaGlzIHNpZ25hbHMgdGhlIHJlc3BvbnNlIHRvIHNldCB0aGUgY29ycmVjdCBzdGF0dXMKLQkgKiBiZWZvcmUgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorCSAqIGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKIAkgKi8KIAljbWRpb2NiLT5pb2NiX2ZsYWcgfD0gTFBGQ19EUklWRVJfQUJPUlRFRDsKIApAQCAtNzEyNCw2ICs3MTgyLDggQEAKIAogCS8qIEFCVFMgV1FFIG11c3QgZ28gdG8gdGhlIHNhbWUgV1EgYXMgdGhlIFdRRSB0byBiZSBhYm9ydGVkICovCiAJYWJ0c2lvY2JwLT5mY3Bfd3FpZHggPSBjbWRpb2NiLT5mY3Bfd3FpZHg7CisJaWYgKGNtZGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQorCQlhYnRzaW9jYnAtPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCWlmIChwaGJhLT5saW5rX3N0YXRlID49IExQRkNfTElOS19VUCkKIAkJaWFidC0+dWxwQ29tbWFuZCA9IENNRF9BQk9SVF9YUklfQ047CkBAIC03MzMwLDYgKzczOTAsOCBAQAogCiAJCS8qIEFCVFMgV1FFIG11c3QgZ28gdG8gdGhlIHNhbWUgV1EgYXMgdGhlIFdRRSB0byBiZSBhYm9ydGVkICovCiAJCWFidHNpb2NiLT5mY3Bfd3FpZHggPSBpb2NicS0+ZmNwX3dxaWR4OworCQlpZiAoaW9jYnEtPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQorCQkJYWJ0c2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCQlpZiAobHBmY19pc19saW5rX3VwKHBoYmEpKQogCQkJYWJ0c2lvY2ItPmlvY2IudWxwQ29tbWFuZCA9IENNRF9BQk9SVF9YUklfQ047CkBAIC04MzU5LDExICs4NDIxLDI0IEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyIC0gVHJhbnNmZXIgcElvY2JPdXQgYW5kIGNtcGwgc3RhdHVzIHRvIHBJb2NiSW4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlCisgKiBAcElvY2JJbjogcG9pbnRlciB0byB0aGUgcnNwaW9jYnEKKyAqIEBwSW9jYk91dDogcG9pbnRlciB0byB0aGUgY21kaW9jYnEKKyAqIEB3Y3FlOiBwb2ludGVyIHRvIHRoZSBjb21wbGV0ZSB3Y3FlCisgKgorICogVGhpcyByb3V0aW5lIHRyYW5zZmVycyB0aGUgZmllbGRzIG9mIGEgY29tbWFuZCBpb2NicSB0byBhIHJlc3BvbnNlIGlvY2JxCisgKiBieSBjb3B5aW5nIGFsbCB0aGUgSU9DQiBmaWVsZHMgZnJvbSBjb21tYW5kIGlvY2JxIGFuZCB0cmFuc2ZlcnJpbmcgdGhlCisgKiBjb21wbGV0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjb21wbGV0ZSB3Y3FlLgorICoqLwogc3RhdGljIHZvaWQKLWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKHN0cnVjdCBscGZjX2lvY2JxICpwSW9jYkluLAorbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJICAgICAgc3RydWN0IGxwZmNfaW9jYnEgKnBJb2NiSW4sCiAJCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcElvY2JPdXQsCiAJCQkgICAgICBzdHJ1Y3QgbHBmY193Y3FlX2NvbXBsZXRlICp3Y3FlKQogeworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCXNpemVfdCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbHBmY19pb2NicSwgaW9jYik7CiAKIAltZW1jcHkoKGNoYXIgKilwSW9jYkluICsgb2Zmc2V0LCAoY2hhciAqKXBJb2NiT3V0ICsgb2Zmc2V0LApAQCAtODM3Nyw4ICs4NDUyLDE3IEBACiAJCQkJCXdjcWUtPnRvdGFsX2RhdGFfcGxhY2VkOwogCQllbHNlCiAJCQlwSW9jYkluLT5pb2NiLnVuLnVscFdvcmRbNF0gPSB3Y3FlLT5wYXJhbWV0ZXI7Ci0JZWxzZQorCWVsc2UgewogCQlwSW9jYkluLT5pb2NiLnVuLnVscFdvcmRbNF0gPSB3Y3FlLT5wYXJhbWV0ZXI7CisJCXBJb2NiSW4tPmlvY2IudW4uZ2VucmVxNjQuYmRsLmJkZVNpemUgPSB3Y3FlLT50b3RhbF9kYXRhX3BsYWNlZDsKKwl9CisKKwkvKiBQaWNrIHVwIEhCQSBleGNoYW5nZSBidXN5IGNvbmRpdGlvbiAqLworCWlmIChiZl9nZXQobHBmY193Y3FlX2NfeGIsIHdjcWUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQlwSW9jYkluLT5pb2NiX2ZsYWcgfD0gTFBGQ19FWENIQU5HRV9CVVNZOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCX0KIH0KIAogLyoqCkBAIC04NDE5LDcgKzg1MDMsNyBAQAogCX0KIAogCS8qIEZha2UgdGhlIGlyc3Bpb2NicSBhbmQgY29weSBuZWNlc3NhcnkgcmVzcG9uc2UgaW5mb3JtYXRpb24gKi8KLQlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKKwlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihwaGJhLCBpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKIAogCXJldHVybiBpcnNwaW9jYnE7CiB9CkBAIC04ODQ5LDggKzg5MzMsNyBAQAogCWludCBlY291bnQgPSAwOwogCXVpbnQxNl90IGNxaWQ7CiAKLQlpZiAoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCB8fAotCSAgICBiZl9nZXQobHBmY19lcWVfbWlub3JfY29kZSwgZXFlKSAhPSAwKSB7CisJaWYgKGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJCSIwMzU5IE5vdCBhIHZhbGlkIHNsb3ctcGF0aCBjb21wbGV0aW9uICIKIAkJCQkiZXZlbnQ6IG1ham9yY29kZT14JXgsIG1pbm9yY29kZT14JXhcbiIsCkBAIC04OTc2LDcgKzkwNTksNyBAQAogCX0KIAogCS8qIEZha2UgdGhlIGlyc3Bpb2NiIGFuZCBjb3B5IG5lY2Vzc2FyeSByZXNwb25zZSBpbmZvcm1hdGlvbiAqLwotCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKCZpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKKwlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihwaGJhLCAmaXJzcGlvY2JxLCBjbWRpb2NicSwgd2NxZSk7CiAKIAkvKiBQYXNzIHRoZSBjbWRfaW9jYiBhbmQgdGhlIHJzcCBzdGF0ZSB0byB0aGUgdXBwZXIgbGF5ZXIgKi8KIAkoY21kaW9jYnEtPmlvY2JfY21wbCkocGhiYSwgY21kaW9jYnEsICZpcnNwaW9jYnEpOwpAQCAtOTA4Miw4ICs5MTY1LDcgQEAKIAl1aW50MTZfdCBjcWlkOwogCWludCBlY291bnQgPSAwOwogCi0JaWYgKHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApIHx8Ci0JICAgIHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9taW5vcl9jb2RlLCBlcWUpICE9IDApKSB7CisJaWYgKHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKIAkJCQkiMDM2NiBOb3QgYSB2YWxpZCBmYXN0LXBhdGggY29tcGxldGlvbiAiCiAJCQkJImV2ZW50OiBtYWpvcmNvZGU9eCV4LCBtaW5vcmNvZGU9eCV4XG4iLApAQCAtMTE4NzEsMTIgKzExOTUzLDYgQEAKIHsKIAlpbnQgcmMgPSAwLCBlcnJvcjsKIAlMUEZDX01CT1hRX3QgKm1ib3hxOwotCXZvaWQgKnZpcnRfYWRkcjsKLQlkbWFfYWRkcl90IHBoeXNfYWRkcjsKLQl1aW50OF90ICpieXRlcDsKLQlzdHJ1Y3QgbHBmY19tYnhfc2dlIHNnZTsKLQl1aW50MzJfdCBhbGxvY19sZW4sIHJlcV9sZW47Ci0Jc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCAqcmVhZF9mY2Y7CiAKIAlwaGJhLT5mY29lX2V2ZW50dGFnX2F0X2ZjZl9zY2FuID0gcGhiYS0+ZmNvZV9ldmVudHRhZzsKIAltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CkBAIC0xMTg4Nyw0MyArMTE5NjMsMTkgQEAKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfZmNmc2NhbjsKIAl9Ci0KLQlyZXFfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSArCi0JCSAgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcikgKyAyICogc2l6ZW9mKHVpbnQzMl90KTsKLQotCS8qIFNldCB1cCBSRUFEX0ZDRiBTTEk0X0NPTkZJRyBtYWlsYm94LWlvY3RsIGNvbW1hbmQgKi8KLQlhbGxvY19sZW4gPSBscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3hxLCBMUEZDX01CT1hfU1VCU1lTVEVNX0ZDT0UsCi0JCQkgTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFQURfRkNGX1RBQkxFLCByZXFfbGVuLAotCQkJIExQRkNfU0xJNF9NQlhfTkVNQkVEKTsKLQotCWlmIChhbGxvY19sZW4gPCByZXFfbGVuKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjAyOTEgQWxsb2NhdGVkIERNQSBtZW1vcnkgc2l6ZSAoeCV4KSBpcyAiCi0JCQkJImxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIERNQSBtZW1vcnkgIgotCQkJCSJzaXplICh4JXgpXG4iLCBhbGxvY19sZW4sIHJlcV9sZW4pOwotCQllcnJvciA9IC1FTk9NRU07CisJLyogQ29uc3RydWN0IHRoZSByZWFkIEZDRiByZWNvcmQgbWFpbGJveCBjb21tYW5kICovCisJcmMgPSBscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZChwaGJhLCBtYm94cSwgZmNmX2luZGV4KTsKKwlpZiAocmMpIHsKKwkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWxfZmNmc2NhbjsKIAl9Ci0KLQkvKiBHZXQgdGhlIGZpcnN0IFNHRSBlbnRyeSBmcm9tIHRoZSBub24tZW1iZWRkZWQgRE1BIG1lbW9yeS4gVGhpcwotCSAqIHJvdXRpbmUgb25seSB1c2VzIGEgc2luZ2xlIFNHRS4KLQkgKi8KLQlscGZjX3NsaTRfbWJ4X3NnZV9nZXQobWJveHEsIDAsICZzZ2UpOwotCXBoeXNfYWRkciA9IGdldFBhZGRyKHNnZS5wYV9oaSwgc2dlLnBhX2xvKTsKLQl2aXJ0X2FkZHIgPSBtYm94cS0+c2dlX2FycmF5LT5hZGRyWzBdOwotCXJlYWRfZmNmID0gKHN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgKil2aXJ0X2FkZHI7Ci0KLQkvKiBTZXQgdXAgY29tbWFuZCBmaWVsZHMgKi8KLQliZl9zZXQobHBmY19tYnhfcmVhZF9mY2ZfdGJsX2luZHgsICZyZWFkX2ZjZi0+dS5yZXF1ZXN0LCBmY2ZfaW5kZXgpOwotCS8qIFBlcmZvcm0gbmVjZXNzYXJ5IGVuZGlhbiBjb252ZXJzaW9uICovCi0JYnl0ZXAgPSB2aXJ0X2FkZHIgKyBzaXplb2YodW5pb24gbHBmY19zbGk0X2NmZ19zaGRyKTsKLQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoYnl0ZXAsIGJ5dGVwLCBzaXplb2YodWludDMyX3QpKTsKKwkvKiBJc3N1ZSB0aGUgbWFpbGJveCBjb21tYW5kIGFzeW5jaHJvbm91c2x5ICovCiAJbWJveHEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CiAJbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfcmVhZF9mY2ZfcmVjb3JkOwogCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX05PV0FJVCk7Ci0JaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkKIAkJZXJyb3IgPSAtRUlPOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQlwaGJhLT5oYmFfZmxhZyB8PSBGQ0ZfRElTQ19JTlBST0dSRVNTOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtMTE5NDIsNiArMTE5OTQsOTAgQEAKIH0KIAogLyoqCisgKiBscGZjX21ieF9jbXBsX3JlZGlzY19mY2ZfdGFibGUgLSBjb21wbGV0aW9uIHJvdXRpbmUgZm9yIHJlZGlzY292ZXIgRkNGIHRhYmxlCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gcm91dGluZSBmb3IgdGhlIHJlZGlzY292ZXIgRkNGIHRhYmxlIG1haWxib3gKKyAqIGNvbW1hbmQuIElmIHRoZSBtYWlsYm94IGNvbW1hbmQgcmV0dXJuZWQgZmFpbHVyZSwgaXQgd2lsbCB0cnkgdG8gc3RvcCB0aGUKKyAqIEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIuCisgKiovCit2b2lkCitscGZjX21ieF9jbXBsX3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKm1ib3gpCit7CisJc3RydWN0IGxwZmNfbWJ4X3JlZGlzY19mY2ZfdGJsICpyZWRpc2NfZmNmOworCXVpbnQzMl90IHNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXM7CisKKwlyZWRpc2NfZmNmID0gJm1ib3gtPnUubXFlLnVuLnJlZGlzY19mY2ZfdGJsOworCisJc2hkcl9zdGF0dXMgPSBiZl9nZXQobHBmY19tYm94X2hkcl9zdGF0dXMsCisJCQkgICAgICZyZWRpc2NfZmNmLT5oZWFkZXIuY2ZnX3NoZHIucmVzcG9uc2UpOworCXNoZHJfYWRkX3N0YXR1cyA9IGJmX2dldChscGZjX21ib3hfaGRyX2FkZF9zdGF0dXMsCisJCQkgICAgICZyZWRpc2NfZmNmLT5oZWFkZXIuY2ZnX3NoZHIucmVzcG9uc2UpOworCWlmIChzaGRyX3N0YXR1cyB8fCBzaGRyX2FkZF9zdGF0dXMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyNzQ2IFJlcXVlc3RpbmcgZm9yIEZDRiByZWRpc2NvdmVyeSBmYWlsZWQgIgorCQkJCSJzdGF0dXMgeCV4IGFkZF9zdGF0dXMgeCV4XG4iLAorCQkJCXNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXMpOworCQkvKgorCQkgKiBSZXF1ZXN0IGZhaWxlZCwgbGFzdCByZXNvcnQgdG8gcmUtdHJ5IGN1cnJlbnQKKwkJICogcmVnaXN0ZXJlZCBGQ0YgZW50cnkKKwkJICovCisJCWxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHBoYmEpOworCX0gZWxzZQorCQkvKgorCQkgKiBTdGFydCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lciBmb3IgcGVuZGluZyBGQ0YKKwkJICogYmVmb3JlIHJlc2NhbiBGQ0YgcmVjb3JkIHRhYmxlLgorCQkgKi8KKwkJbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIocGhiYSk7CisKKwltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Cit9CisKKy8qKgorICogbHBmY19zbGk0X3JlZGlzY19hbGxfZmNmIC0gUmVxdWVzdCB0byByZWRpc2NvdmVyIGVudGlyZSBGQ0YgdGFibGUgYnkgcG9ydC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlcXVlc3QgZm9yIHJlZGlzY292ZXJ5IG9mIHRoZSBlbnRpcmUgRkNGIHRhYmxlCisgKiBieSB0aGUgcG9ydC4KKyAqKi8KK2ludAorbHBmY19zbGk0X3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgKnJlZGlzY19mY2Y7CisJaW50IHJjLCBsZW5ndGg7CisKKwltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3gpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyNzQ1IEZhaWxlZCB0byBhbGxvY2F0ZSBtYm94IGZvciAiCisJCQkJInJlcXVlc3RpbmcgRkNGIHJlZGlzY292ZXIuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwpIC0KKwkJICBzaXplb2Yoc3RydWN0IGxwZmNfc2xpNF9jZmdfbWhkcikpOworCWxwZmNfc2xpNF9jb25maWcocGhiYSwgbWJveCwgTFBGQ19NQk9YX1NVQlNZU1RFTV9GQ09FLAorCQkJIExQRkNfTUJPWF9PUENPREVfRkNPRV9SRURJU0NPVkVSX0ZDRiwKKwkJCSBsZW5ndGgsIExQRkNfU0xJNF9NQlhfRU1CRUQpOworCisJcmVkaXNjX2ZjZiA9ICZtYm94LT51Lm1xZS51bi5yZWRpc2NfZmNmX3RibDsKKwkvKiBTZXQgY291bnQgdG8gMCBmb3IgaW52YWxpZGF0aW5nIHRoZSBlbnRpcmUgRkNGIGRhdGFiYXNlICovCisJYmZfc2V0KGxwZmNfbWJ4X3JlZGlzY19mY2ZfY291bnQsIHJlZGlzY19mY2YsIDApOworCisJLyogSXNzdWUgdGhlIG1haWxib3ggY29tbWFuZCBhc3luY2hyb25vdXNseSAqLworCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJbWJveC0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9yZWRpc2NfZmNmX3RhYmxlOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKKworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKioKICAqIGxwZmNfc2xpX3JlYWRfbGlua19zdGUgLSBSZWFkIHJlZ2lvbiAyMyB0byBkZWNpZGUgaWYgbGluayBpcyBkaXNhYmxlZC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTEyMDY5LDMgKzEyMjA1LDQ4IEBACiAJa2ZyZWUocmduMjNfZGF0YSk7CiAJcmV0dXJuOwogfQorCisvKioKKyAqIGxwZmNfY2xlYW51cF9wZW5kaW5nX21ib3ggLSBGcmVlIHVwIHZwb3J0IGRpc2NvdmVyeSBtYWlsYm94IGNvbW1hbmRzLgorICogQHZwb3J0OiBwb2ludGVyIHRvIHZwb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYWlsYm94cSBhbmQgY2xlYW4gdXAgYWxsIFJFR19MT0dJTgorICogYW5kIFJFR19WUEkgbWFpbGJveCBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZwb3J0LiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgd2hlbiBkcml2ZXIgd2FudCB0byByZXN0YXJ0IGRpc2NvdmVyeSBvZiB0aGUgdnBvcnQgZHVlIHRvCisgKiBhIENsZWFyIFZpcnR1YWwgTGluayBldmVudC4KKyAqKi8KK3ZvaWQKK2xwZmNfY2xlYW51cF9wZW5kaW5nX21ib3goc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCUxQRkNfTUJPWFFfdCAqbWIsICpuZXh0bWI7CisJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKKworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYiwgbmV4dG1iLCAmcGhiYS0+c2xpLm1ib3hxLCBsaXN0KSB7CisJCWlmIChtYi0+dnBvcnQgIT0gdnBvcnQpCisJCQljb250aW51ZTsKKworCQlpZiAoKG1iLT51Lm1iLm1ieENvbW1hbmQgIT0gTUJYX1JFR19MT0dJTjY0KSAmJgorCQkJKG1iLT51Lm1iLm1ieENvbW1hbmQgIT0gTUJYX1JFR19WUEkpKQorCQkJY29udGludWU7CisKKwkJaWYgKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB7CisJCQltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgKG1iLT5jb250ZXh0MSk7CisJCQlpZiAobXApIHsKKwkJCQlfX2xwZmNfbWJ1Zl9mcmVlKHBoYmEsIG1wLT52aXJ0LCBtcC0+cGh5cyk7CisJCQkJa2ZyZWUobXApOworCQkJfQorCQl9CisJCWxpc3RfZGVsKCZtYi0+bGlzdCk7CisJCW1lbXBvb2xfZnJlZShtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJfQorCW1iID0gcGhiYS0+c2xpLm1ib3hfYWN0aXZlOworCWlmIChtYiAmJiAobWItPnZwb3J0ID09IHZwb3J0KSkgeworCQlpZiAoKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB8fAorCQkJKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19WUEkpKQorCQkJbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCmluZGV4IGJhMzhkZTMuLmRmY2Y1NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaApAQCAtNTMsMTcgKzUzLDE5IEBACiAKIAlJT0NCX3QgaW9jYjsJCS8qIElPQ0IgY21kICovCiAJdWludDhfdCByZXRyeTsJCS8qIHJldHJ5IGNvdW50ZXIgZm9yIElPQ0IgY21kIC0gaWYgbmVlZGVkICovCi0JdWludDhfdCBpb2NiX2ZsYWc7CisJdWludDE2X3QgaW9jYl9mbGFnOwogI2RlZmluZSBMUEZDX0lPX0xJQkRGQwkJMQkvKiBsaWJkZmMgaW9jYiAqLwogI2RlZmluZSBMUEZDX0lPX1dBS0UJCTIJLyogSGlnaCBQcmlvcml0eSBRdWV1ZSBzaWduYWwgZmxhZyAqLwogI2RlZmluZSBMUEZDX0lPX0ZDUAkJNAkvKiBGQ1AgY29tbWFuZCAtLSBpb2NicSBpbiBzY3NpX2J1ZiAqLwogI2RlZmluZSBMUEZDX0RSSVZFUl9BQk9SVEVECTgJLyogZHJpdmVyIGFib3J0ZWQgdGhpcyByZXF1ZXN0ICovCiAjZGVmaW5lIExQRkNfSU9fRkFCUklDCQkweDEwCS8qIElvY2Igc2VuZCB1c2luZyBmYWJyaWMgc2NoZWR1bGVyICovCiAjZGVmaW5lIExQRkNfREVMQVlfTUVNX0ZSRUUJMHgyMCAgICAvKiBEZWZlciBmcmVlJ2luZyBvZiBGQyBkYXRhICovCi0jZGVmaW5lIExQRkNfRklQX0VMU19JRF9NQVNLCTB4YzAJLyogRUxTX0lEIHJhbmdlIDAtMyAqLwotI2RlZmluZSBMUEZDX0ZJUF9FTFNfSURfU0hJRlQJNgorI2RlZmluZSBMUEZDX0VYQ0hBTkdFX0JVU1kJMHg0MCAgICAvKiBTTEk0IGhiYSByZXBvcnRlZCBYQiBpbiByZXNwb25zZSAqLworI2RlZmluZSBMUEZDX1VTRV9GQ1BXUUlEWAkweDgwICAgIC8qIFN1Ym1pdCB0byBzcGVjaWZpZWQgRkNQV1EgaW5kZXggKi8KIAotCXVpbnQ4X3QgYWJvcnRfY291bnQ7CisjZGVmaW5lIExQRkNfRklQX0VMU19JRF9NQVNLCTB4YzAwMAkvKiBFTFNfSUQgcmFuZ2UgMC0zLCBub24tc2hpZnRlZCBtYXNrICovCisjZGVmaW5lIExQRkNfRklQX0VMU19JRF9TSElGVAkxNAorCiAJdWludDhfdCByc3ZkMjsKIAl1aW50MzJfdCBkcnZyVGltZW91dDsJLyogZHJpdmVyIHRpbWVvdXQgaW4gc2Vjb25kcyAqLwogCXVpbnQzMl90IGZjcF93cWlkeDsJLyogaW5kZXggdG8gRkNQIHdvcmsgcXVldWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKaW5kZXggNDRlNWY1Ny4uODYzMDg4MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCkBAIC0yMiw2ICsyMiwxMCBAQAogI2RlZmluZSBMUEZDX1JFTEVBU0VfTk9USUZJQ0FUSU9OX0lOVEVSVkFMCTMyCiAjZGVmaW5lIExQRkNfR0VUX1FFX1JFTF9JTlQJCQkzMgogI2RlZmluZSBMUEZDX1JQSV9MT1dfV0FURVJfTUFSSwkJCTEwCisKKy8qIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgZm9yIHdhaXRpbmcgRkNGIHJlZGlzY292ZXJ5IHRvIGNvbXBsZXRlICovCisjZGVmaW5lIExQRkNfRkNGX1JFRElTQ09WRVJfV0FJVF9UTU8JCTIwMDAgLyogbXNlYyAqLworCiAvKiBOdW1iZXIgb2YgU0dMIGVudHJpZXMgY2FuIGJlIHBvc3RlZCBpbiBhIDRLQiBub25lbWJlZGRlZCBtYm94IGNvbW1hbmQgKi8KICNkZWZpbmUgTFBGQ19ORU1CRURfTUJPWF9TR0xfQ05UCQkyNTQKIApAQCAtMTI2LDI0ICsxMzAsMzYgQEAKIAl1aW50OF90IHN0YXR1czsKIAl1aW50OF90IHBoeXNpY2FsOwogCXVpbnQ4X3QgZmF1bHQ7CisJdWludDE2X3QgbG9naWNhbF9zcGVlZDsKK307CisKK3N0cnVjdCBscGZjX2ZjZl9yZWMgeworCXVpbnQ4X3QgIGZhYnJpY19uYW1lWzhdOworCXVpbnQ4X3QgIHN3aXRjaF9uYW1lWzhdOworCXVpbnQ4X3QgIG1hY19hZGRyWzZdOworCXVpbnQxNl90IGZjZl9pbmR4OworCXVpbnQzMl90IHByaW9yaXR5OworCXVpbnQxNl90IHZsYW5faWQ7CisJdWludDMyX3QgYWRkcl9tb2RlOworCXVpbnQzMl90IGZsYWc7CisjZGVmaW5lIEJPT1RfRU5BQkxFCTB4MDEKKyNkZWZpbmUgUkVDT1JEX1ZBTElECTB4MDIKIH07CiAKIHN0cnVjdCBscGZjX2ZjZiB7Ci0JdWludDhfdAkgZmFicmljX25hbWVbOF07Ci0JdWludDhfdAkgc3dpdGNoX25hbWVbOF07Ci0JdWludDhfdCAgbWFjX2FkZHJbNl07Ci0JdWludDE2X3QgZmNmX2luZHg7CiAJdWludDE2X3QgZmNmaTsKIAl1aW50MzJfdCBmY2ZfZmxhZzsKICNkZWZpbmUgRkNGX0FWQUlMQUJMRQkweDAxIC8qIEZDRiBhdmFpbGFibGUgZm9yIGRpc2NvdmVyeSAqLwogI2RlZmluZSBGQ0ZfUkVHSVNURVJFRAkweDAyIC8qIEZDRiByZWdpc3RlcmVkIHdpdGggRlcgKi8KLSNkZWZpbmUgRkNGX0RJU0NPVkVSRUQJMHgwNCAvKiBGQ0YgZGlzY292ZXJ5IHN0YXJ0ZWQgICovCi0jZGVmaW5lIEZDRl9CT09UX0VOQUJMRSAweDA4IC8qIEJvb3QgYmlvcyB1c2UgdGhpcyBGQ0YgKi8KLSNkZWZpbmUgRkNGX0lOX1VTRQkweDEwIC8qIEF0bGVhc3Qgb25lIGRpc2NvdmVyeSBjb21wbGV0ZWQgKi8KLSNkZWZpbmUgRkNGX1ZBTElEX1ZMQU4JMHgyMCAvKiBVc2UgdGhlIHZsYW4gaWQgc3BlY2lmaWVkICovCi0JdWludDMyX3QgcHJpb3JpdHk7CisjZGVmaW5lIEZDRl9TQ0FOX0RPTkUJMHgwNCAvKiBGQ0YgdGFibGUgc2NhbiBkb25lICovCisjZGVmaW5lIEZDRl9JTl9VU0UJMHgwOCAvKiBBdGxlYXN0IG9uZSBkaXNjb3ZlcnkgY29tcGxldGVkICovCisjZGVmaW5lIEZDRl9SRURJU0NfUEVORAkweDEwIC8qIEZDRiByZWRpc2NvdmVyeSBwZW5kaW5nICovCisjZGVmaW5lIEZDRl9SRURJU0NfRVZUCTB4MjAgLyogRkNGIHJlZGlzY292ZXJ5IGV2ZW50IHRvIHdvcmtlciB0aHJlYWQgKi8KKyNkZWZpbmUgRkNGX1JFRElTQ19GT1YJMHg0MCAvKiBQb3N0IEZDRiByZWRpc2NvdmVyeSBmYXN0IGZhaWxvdmVyICovCiAJdWludDMyX3QgYWRkcl9tb2RlOwotCXVpbnQxNl90IHZsYW5faWQ7CisJc3RydWN0IGxwZmNfZmNmX3JlYyBjdXJyZW50X3JlYzsKKwlzdHJ1Y3QgbHBmY19mY2ZfcmVjIGZhaWxvdmVyX3JlYzsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZWRpc2Nfd2FpdDsKIH07CiAKICNkZWZpbmUgTFBGQ19SRUdJT04yM19TSUdOQVRVUkUgIlJHMjMiCkBAIC0yNDgsNyArMjY0LDEwIEBACiAjZGVmaW5lIFNMSTRfQ1RfVkZJIDIKICNkZWZpbmUgU0xJNF9DVF9GQ0ZJIDMKIAotI2RlZmluZSBMUEZDX1NMSTRfTUFYX1NFR01FTlRfU0laRSAweDEwMDAwCisjZGVmaW5lIExQRkNfU0xJNF9GTDFfTUFYX1NFR01FTlRfU0laRQkweDEwMDAwCisjZGVmaW5lIExQRkNfU0xJNF9GTDFfTUFYX0JVRl9TSVpFCTBYMjAwMAorI2RlZmluZSBMUEZDX1NMSTRfTUlOX0JVRl9TSVpFCQkweDQwMAorI2RlZmluZSBMUEZDX1NMSTRfTUFYX0JVRl9TSVpFCQkweDIwMDAwCiAKIC8qCiAgKiBTTEk0IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcwpAQCAtMjgyLDYgKzMwMSw0MiBAQAogCXN0cnVjdCBscGZjX2hiYSAqcGhiYTsKIH07CiAKKy8qIFBvcnQgQ2FwYWJpbGl0aWVzIGZvciBTTEk0IFBhcmFtZXRlcnMgKi8KK3N0cnVjdCBscGZjX3BjX3NsaTRfcGFyYW1zIHsKKwl1aW50MzJfdCBzdXBwb3J0ZWQ7CisJdWludDMyX3QgaWZfdHlwZTsKKwl1aW50MzJfdCBzbGlfcmV2OworCXVpbnQzMl90IHNsaV9mYW1pbHk7CisJdWludDMyX3QgZmVhdHVyZWxldmVsXzE7CisJdWludDMyX3QgZmVhdHVyZWxldmVsXzI7CisJdWludDMyX3QgcHJvdG9fdHlwZXM7CisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19GQ09FCTB4MDAwMDAwMQorI2RlZmluZSBMUEZDX1NMSTRfUFJPVE9fRkMJMHgwMDAwMDAyCisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19OSUMJMHgwMDAwMDA0CisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19JU0NTSQkweDAwMDAwMDgKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX1JETUEJMHgwMDAwMDEwCisJdWludDMyX3Qgc2dlX3N1cHBfbGVuOworCXVpbnQzMl90IGlmX3BhZ2Vfc3o7CisJdWludDMyX3QgcnFfZGJfd2luZG93OworCXVpbnQzMl90IGxvb3Bia19zY29wZTsKKwl1aW50MzJfdCBlcV9wYWdlc19tYXg7CisJdWludDMyX3QgZXFlX3NpemU7CisJdWludDMyX3QgY3FfcGFnZXNfbWF4OworCXVpbnQzMl90IGNxZV9zaXplOworCXVpbnQzMl90IG1xX3BhZ2VzX21heDsKKwl1aW50MzJfdCBtcWVfc2l6ZTsKKwl1aW50MzJfdCBtcV9lbGVtX2NudDsKKwl1aW50MzJfdCB3cV9wYWdlc19tYXg7CisJdWludDMyX3Qgd3FlX3NpemU7CisJdWludDMyX3QgcnFfcGFnZXNfbWF4OworCXVpbnQzMl90IHJxZV9zaXplOworCXVpbnQzMl90IGhkcl9wYWdlc19tYXg7CisJdWludDMyX3QgaGRyX3NpemU7CisJdWludDMyX3QgaGRyX3BwX2FsaWduOworCXVpbnQzMl90IHNnbF9wYWdlc19tYXg7CisJdWludDMyX3Qgc2dsX3BwX2FsaWduOworfTsKKwogLyogU0xJNCBIQkEgZGF0YSBzdHJ1Y3R1cmUgZW50cmllcyAqLwogc3RydWN0IGxwZmNfc2xpNF9oYmEgewogCXZvaWQgX19pb21lbSAqY29uZl9yZWdzX21lbW1hcF9wOyAvKiBLZXJuZWwgbWVtb3J5IG1hcHBlZCBhZGRyZXNzIGZvcgpAQCAtMjk1LDcgKzM1MCw3IEBACiAJdm9pZCBfX2lvbWVtICpVRVJSSElyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFUlJfU1RBVFVTX0hJIHJlZ2lzdGVyICovCiAJdm9pZCBfX2lvbWVtICpVRU1BU0tMT3JlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gVUVfTUFTS19MTyByZWdpc3RlciAqLwogCXZvaWQgX19pb21lbSAqVUVNQVNLSElyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFX01BU0tfSEkgcmVnaXN0ZXIgKi8KLQl2b2lkIF9faW9tZW0gKlNDUkFUQ0hQQURyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIHNjcmF0Y2hwYWQgcmVnaXN0ZXIgKi8KKwl2b2lkIF9faW9tZW0gKlNMSUlOVEZyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFNMSV9JTlRGIHJlZ2lzdGVyICovCiAJLyogQkFSMSBGQ29FIGZ1bmN0aW9uIENTUiByZWdpc3RlciBtZW1vcnkgbWFwICovCiAJdm9pZCBfX2lvbWVtICpTVEFyZWdhZGRyOyAgICAvKiBBZGRyZXNzIHRvIEhTVF9TVEFURSByZWdpc3RlciAqLwogCXZvaWQgX19pb21lbSAqSVNScmVnYWRkcjsgICAgLyogQWRkcmVzcyB0byBIU1RfSVNSIHJlZ2lzdGVyICovCkBAIC0zMTAsNiArMzY1LDggQEAKIAogCXVpbnQzMl90IHVlX21hc2tfbG87CiAJdWludDMyX3QgdWVfbWFza19oaTsKKwlzdHJ1Y3QgbHBmY19yZWdpc3RlciBzbGlfaW50ZjsKKwlzdHJ1Y3QgbHBmY19wY19zbGk0X3BhcmFtcyBwY19zbGk0X3BhcmFtczsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzOwogCXVpbnQzMl90IGNmZ19lcW47CiAJc3RydWN0IGxwZmNfZmNwX2VxX2hkbCAqZmNwX2VxX2hkbDsgLyogRkNQIHBlci1XUSBoYW5kbGUgKi8KQEAgLTQwNiw2ICs0NjMsOCBAQAogdm9pZCBscGZjX3NsaTRfbWJ4X3NnZV9zZXQoc3RydWN0IGxwZmNNYm94cSAqLCB1aW50MzJfdCwgZG1hX2FkZHJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX3NsaTRfbWJ4X3NnZV9nZXQoc3RydWN0IGxwZmNNYm94cSAqLCB1aW50MzJfdCwKIAkJCSAgIHN0cnVjdCBscGZjX21ieF9zZ2UgKik7CitpbnQgbHBmY19zbGk0X21ieF9yZWFkX2ZjZl9yZWNvcmQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKiwKKwkJCQkgIHVpbnQxNl90KTsKIAogdm9pZCBscGZjX3NsaTRfaGJhX3Jlc2V0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHN0cnVjdCBscGZjX3F1ZXVlICpscGZjX3NsaTRfcXVldWVfYWxsb2Moc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90LApAQCAtNDQ4LDYgKzUwNyw3IEBACiB2b2lkIGxwZmNfc2xpNF9mcmVlX3JwaShzdHJ1Y3QgbHBmY19oYmEgKiwgaW50KTsKIHZvaWQgbHBmY19zbGk0X3JlbW92ZV9ycGlzKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zbGk0X2FzeW5jX2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX3NsaTRfZmNmX3JlZGlzY19ldmVudF9wcm9jKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaTRfcmVzdW1lX3JwaShzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19zbGk0X2ZjcF94cmlfYWJvcnRfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc2xpNF9lbHNfeHJpX2Fib3J0X2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAppbmRleCA3OTJmNzIyLi5hYzI3NmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTgsNyArMTgsNyBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy43IgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuOSIKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRQkJImxwZmMiCiAjZGVmaW5lIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpzcCIKICNkZWZpbmUgTFBGQ19GUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOmZwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCmluZGV4IGUzYzdmYTYuLmRjODZlODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKQEAgLTM4OSw3ICszODksNyBAQAogCSAqIGJ5IHRoZSBwb3J0LgogCSAqLwogCWlmICgocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSAmJgotCSAgICAocHBvcnQtPnZwaV9zdGF0ZSAmIExQRkNfVlBJX1JFR0lTVEVSRUQpKSB7CisJCShwcG9ydC0+ZmNfZmxhZyAmIEZDX1ZGSV9SRUdJU1RFUkVEKSkgewogCQlyYyA9IGxwZmNfc2xpNF9pbml0X3ZwaShwaGJhLCB2cGkpOwogCQlpZiAocmMpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1ZQT1JULApAQCAtNTA1LDYgKzUwNSw3IEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKihzdHJ1Y3QgbHBmY192cG9ydCAqKilmY192cG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfVVApIHx8CiAJICAgIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSkgewpAQCAtNTEyLDEwICs1MTMsMTAgQEAKIAkJcmV0dXJuIFZQT1JUX09LOwogCX0KIAotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPmxvYWRfZmxhZyB8PSBGQ19MT0FESU5HOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAkvKiBVc2UgdGhlIFBoeXNpY2FsIG5vZGVzIEZhYnJpYyBORExQIHRvIGRldGVybWluZSBpZiB0aGUgbGluayBpcwogCSAqIHVwIGFuZCByZWFkeSB0byBGRElTQy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMgYi9kcml2ZXJzL3Njc2kvbWFjX2VzcC5jCmluZGV4IGMyNGU4NmYuLjRhOTBlYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMKKysrIGIvZHJpdmVycy9zY3NpL21hY19lc3AuYwpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgogCkBAIC01Myw3ICs1Miw2IEBACiAJdm9pZCBfX2lvbWVtICpwZG1hX2lvOwogCWludCBlcnJvcjsKIH07Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW50ZXJuYWxfcGRldiwgKmV4dGVybmFsX3BkZXY7CiBzdGF0aWMgc3RydWN0IGVzcCAqZXNwX2NoaXBzWzJdOwogCiAjZGVmaW5lIE1BQ19FU1BfR0VUX1BSSVYoZXNwKSAoKHN0cnVjdCBtYWNfZXNwX3ByaXYgKikgXApAQCAtMjc5LDI0ICsyNzcsMjcgQEAKICAqIFByb2dyYW1tZWQgSU8gcm91dGluZXMgZm9sbG93LgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhzdHJ1Y3QgZXNwICplc3ApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYWNfZXNwX3dhaXRfZm9yX2ZpZm8oc3RydWN0IGVzcCAqZXNwKQogewogCWludCBpID0gNTAwMDAwOwogCiAJZG8gewotCQlpZiAoZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUykKLQkJCXJldHVybiAwOworCQl1bnNpZ25lZCBpbnQgZmJ5dGVzID0gZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUzsKKworCQlpZiAoZmJ5dGVzKQorCQkJcmV0dXJuIGZieXRlczsKIAogCQl1ZGVsYXkoMik7CiAJfSB3aGlsZSAoLS1pKTsKIAogCXByaW50ayhLRVJOX0VSUiBQRlggIkZJRk8gaXMgZW1wdHkgKHNyZWcgJTAyeClcbiIsCiAJICAgICAgIGVzcF9yZWFkOChFU1BfU1RBVFVTKSk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1hY19lc3Bfd2FpdF9mb3JfaW50cihzdHJ1Y3QgZXNwICplc3ApCiB7CisJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwID0gTUFDX0VTUF9HRVRfUFJJVihlc3ApOwogCWludCBpID0gNTAwMDAwOwogCiAJZG8gewpAQCAtMzA4LDYgKzMwOSw3IEBACiAJfSB3aGlsZSAoLS1pKTsKIAogCXByaW50ayhLRVJOX0VSUiBQRlggIklSUSB0aW1lb3V0IChzcmVnICUwMngpXG4iLCBlc3AtPnNyZWcpOworCW1lcC0+ZXJyb3IgPSAxOwogCXJldHVybiAxOwogfQogCkBAIC0zNDcsMTEgKzM0OSwxMCBAQAogc3RhdGljIHZvaWQgbWFjX2VzcF9zZW5kX3Bpb19jbWQoc3RydWN0IGVzcCAqZXNwLCB1MzIgYWRkciwgdTMyIGVzcF9jb3VudCwKIAkJCQkgdTMyIGRtYV9jb3VudCwgaW50IHdyaXRlLCB1OCBjbWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWFjX2VzcF9wcml2ICptZXAgPSBNQUNfRVNQX0dFVF9QUklWKGVzcCk7CiAJdTggKmZpZm8gPSBlc3AtPnJlZ3MgKyBFU1BfRkRBVEEgKiAxNjsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlkaXNhYmxlX2lycShlc3AtPmhvc3QtPmlycSk7CiAKIAljbWQgJj0gfkVTUF9DTURfRE1BOwogCW1lcC0+ZXJyb3IgPSAwOwpAQCAtMzU5LDExICszNjAsMzUgQEAKIAlpZiAod3JpdGUpIHsKIAkJc2NzaV9lc3BfY21kKGVzcCwgY21kKTsKIAotCQlpZiAoIW1hY19lc3Bfd2FpdF9mb3JfaW50cihlc3ApKSB7Ci0JCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9maWZvKGVzcCkpCi0JCQkJZXNwX2NvdW50ID0gMDsKLQkJfSBlbHNlIHsKLQkJCWVzcF9jb3VudCA9IDA7CisJCXdoaWxlICgxKSB7CisJCQl1bnNpZ25lZCBpbnQgbjsKKworCQkJbiA9IG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhlc3ApOworCQkJaWYgKCFuKQorCQkJCWJyZWFrOworCisJCQlpZiAobiA+IGVzcF9jb3VudCkKKwkJCQluID0gZXNwX2NvdW50OworCQkJZXNwX2NvdW50IC09IG47CisKKwkJCU1BQ19FU1BfUElPX0xPT1AoIiUyQCwlMEArIiwgbik7CisKKwkJCWlmICghZXNwX2NvdW50KQorCQkJCWJyZWFrOworCisJCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpCisJCQkJYnJlYWs7CisKKwkJCWlmICgoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSAhPSBFU1BfRElQKSAmJgorCQkJICAgICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NSVApKQorCQkJCWJyZWFrOworCisJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CisJCQlpZiAoKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9EQyB8IEVTUF9JTlRSX0JTRVJWKSkgIT0KKwkJCSAgICBFU1BfSU5UUl9CU0VSVikKKwkJCQlicmVhazsKKworCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7CiAJCX0KIAl9IGVsc2UgewogCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKQEAgLTM3NCw0NyArMzk5LDI0IEBACiAJCQlNQUNfRVNQX1BJT19MT09QKCIlMEArLCUyQCIsIGVzcF9jb3VudCk7CiAKIAkJc2NzaV9lc3BfY21kKGVzcCwgY21kKTsKLQl9CiAKLQl3aGlsZSAoZXNwX2NvdW50KSB7Ci0JCXVuc2lnbmVkIGludCBuOworCQl3aGlsZSAoZXNwX2NvdW50KSB7CisJCQl1bnNpZ25lZCBpbnQgbjsKIAotCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpIHsKLQkJCW1lcC0+ZXJyb3IgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZXNwLT5zcmVnICYgRVNQX1NUQVRfU1BBTSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZ3Jvc3MgZXJyb3JcbiIpOwotCQkJbWVwLT5lcnJvciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCW4gPSBlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTOwotCi0JCWlmICh3cml0ZSkgewotCQkJaWYgKG4gPiBlc3BfY291bnQpCi0JCQkJbiA9IGVzcF9jb3VudDsKLQkJCWVzcF9jb3VudCAtPSBuOwotCi0JCQlNQUNfRVNQX1BJT19MT09QKCIlMkAsJTBAKyIsIG4pOwotCi0JCQlpZiAoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSA9PSBFU1BfU1RBVFApCisJCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpCiAJCQkJYnJlYWs7CiAKLQkJCWlmIChlc3BfY291bnQpIHsKLQkJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0JCQkJaWYgKGVzcC0+aXJlZyAmIEVTUF9JTlRSX0RDKQotCQkJCQlicmVhazsKKwkJCWlmICgoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSAhPSBFU1BfRE9QKSAmJgorCQkJICAgICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NT1ApKQorCQkJCWJyZWFrOwogCi0JCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7Ci0JCQl9Ci0JCX0gZWxzZSB7CiAJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0JCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfREMpCisJCQlpZiAoKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9EQyB8IEVTUF9JTlRSX0JTRVJWKSkgIT0KKwkJCSAgICBFU1BfSU5UUl9CU0VSVikKIAkJCQlicmVhazsKIAotCQkJbiA9IE1BQ19FU1BfRklGT19TSVpFIC0gbjsKKwkJCW4gPSBNQUNfRVNQX0ZJRk9fU0laRSAtCisJCQkgICAgKGVzcF9yZWFkOChFU1BfRkZMQUdTKSAmIEVTUF9GRl9GQllURVMpOwogCQkJaWYgKG4gPiBlc3BfY291bnQpCiAJCQkJbiA9IGVzcF9jb3VudDsKIApAQCAtNDI5LDcgKzQzMSw3IEBACiAJCX0KIAl9CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZW5hYmxlX2lycShlc3AtPmhvc3QtPmlycSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFjX2VzcF9pcnFfcGVuZGluZyhzdHJ1Y3QgZXNwICplc3ApCkBAIC00OTIsMjkgKzQ5NCwxMiBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IGVzcCAqZXNwOwogCWludCBlcnI7Ci0JaW50IGNoaXBzX3ByZXNlbnQ7CiAJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwOwogCiAJaWYgKCFNQUNIX0lTX01BQykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPnNjc2lfdHlwZSkgewotCWNhc2UgTUFDX1NDU0lfUVVBRFJBOgotCWNhc2UgTUFDX1NDU0lfUVVBRFJBMzoKLQkJY2hpcHNfcHJlc2VudCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgTUFDX1NDU0lfUVVBRFJBMjoKLQkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTkwMCkgfHwKLQkJICAgIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTk1MCkpCi0JCQljaGlwc19wcmVzZW50ID0gMjsKLQkJZWxzZQotCQkJY2hpcHNfcHJlc2VudCA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWNoaXBzX3ByZXNlbnQgPSAwOwotCX0KLQotCWlmIChkZXYtPmlkICsgMSA+IGNoaXBzX3ByZXNlbnQpCisJaWYgKGRldi0+aWQgPiAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2ModHBudCwgc2l6ZW9mKHN0cnVjdCBlc3ApKTsKQEAgLTYzOSw1NSArNjI0LDI2IEBACiAJLnByb2JlICAgID0gZXNwX21hY19wcm9iZSwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChlc3BfbWFjX3JlbW92ZSksCiAJLmRyaXZlciAgID0gewotCQkubmFtZSAgICAgPSBEUlZfTU9EVUxFX05BTUUsCisJCS5uYW1lCT0gRFJWX01PRFVMRV9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjX2VzcF9pbml0KHZvaWQpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpbnRlcm5hbF9wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVl9NT0RVTEVfTkFNRSwgMCk7Ci0JaWYgKGludGVybmFsX3BkZXYgJiYgcGxhdGZvcm1fZGV2aWNlX2FkZChpbnRlcm5hbF9wZGV2KSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGludGVybmFsX3BkZXYpOwotCQlpbnRlcm5hbF9wZGV2ID0gTlVMTDsKLQl9Ci0JZXh0ZXJuYWxfcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZfTU9EVUxFX05BTUUsIDEpOwotCWlmIChleHRlcm5hbF9wZGV2ICYmIHBsYXRmb3JtX2RldmljZV9hZGQoZXh0ZXJuYWxfcGRldikpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChleHRlcm5hbF9wZGV2KTsKLQkJZXh0ZXJuYWxfcGRldiA9IE5VTEw7Ci0JfQotCi0JaWYgKGludGVybmFsX3BkZXYgfHwgZXh0ZXJuYWxfcGRldikgewotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX2VzcF9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVzcF9tYWNfZHJpdmVyKTsKLQotCWlmIChpbnRlcm5hbF9wZGV2KSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGludGVybmFsX3BkZXYpOwotCQlpbnRlcm5hbF9wZGV2ID0gTlVMTDsKLQl9Ci0JaWYgKGV4dGVybmFsX3BkZXYpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZXh0ZXJuYWxfcGRldik7Ci0JCWV4dGVybmFsX3BkZXYgPSBOVUxMOwotCX0KIH0KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYWMgRVNQIFNDU0kgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJGaW5uIFRoYWluIDxmdGhhaW5AdGVsZWdyYXBoaWNzLmNvbS5hdT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTU9EVUxFX05BTUUpOwogCiBtb2R1bGVfaW5pdChtYWNfZXNwX2luaXQpOwogbW9kdWxlX2V4aXQobWFjX2VzcF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCA3MDhlYTMxLi40MDk2NDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgkgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEZJTEUJCTogbWVnYXJhaWRfc2FzLmMKLSAqIFZlcnNpb24gICAgIDogdjAwLjAwLjA0LjEyLXJjMQorICogVmVyc2lvbiAgICAgOiB2MDAuMDAuMDQuMTcuMS1yYzEKICAqCiAgKiBBdXRob3JzOgogICoJKGVtYWlsLWlkIDogbWVnYXJhaWRsaW51eEBsc2kuY29tKQpAQCAtODQzLDYgKzg0Myw3IEBACiAJcHRocnUtPmx1biA9IHNjcC0+ZGV2aWNlLT5sdW47CiAJcHRocnUtPmNkYl9sZW4gPSBzY3AtPmNtZF9sZW47CiAJcHRocnUtPnRpbWVvdXQgPSAwOworCXB0aHJ1LT5wYWRfMCA9IDA7CiAJcHRocnUtPmZsYWdzID0gZmxhZ3M7CiAJcHRocnUtPmRhdGFfeGZlcl9sZW4gPSBzY3NpX2J1ZmZsZW4oc2NwKTsKIApAQCAtODc0LDYgKzg3NSwxMiBAQAogCQlwdGhydS0+c2dlX2NvdW50ID0gbWVnYXNhc19tYWtlX3NnbDMyKGluc3RhbmNlLCBzY3AsCiAJCQkJCQkgICAgICAmcHRocnUtPnNnbCk7CiAKKwlpZiAocHRocnUtPnNnZV9jb3VudCA+IGluc3RhbmNlLT5tYXhfbnVtX3NnZSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IERDREIgdHdvIG1hbnkgU0dFIE5VTT0leFxuIiwKKwkJCXB0aHJ1LT5zZ2VfY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIFNlbnNlIGluZm8gc3BlY2lmaWMKIAkgKi8KQEAgLTEwMDAsNiArMTAwNywxMiBAQAogCX0gZWxzZQogCQlsZGlvLT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsMzIoaW5zdGFuY2UsIHNjcCwgJmxkaW8tPnNnbCk7CiAKKwlpZiAobGRpby0+c2dlX2NvdW50ID4gaW5zdGFuY2UtPm1heF9udW1fc2dlKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogYnVpbGRfbGRfaW86IHNnZV9jb3VudCA9ICV4XG4iLAorCQkJbGRpby0+c2dlX2NvdW50KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBTZW5zZSBpbmZvIHNwZWNpZmljCiAJICovCkBAIC0yMjUwLDYgKzIyNjMsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDE7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBNRUdBU0FTX01BWF9QRCAqIHNpemVvZihzdHJ1Y3QgTVJfUERfTElTVCk7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9QRF9MSVNUX1FVRVJZOwogCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBjaV9oOwpAQCAtMjI5NCw2ICsyMzA4LDg2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIG1lZ2FzYXNfZ2V0X2xkX2xpc3RfaW5mbyAtCVJldHVybnMgRlcncyBsZF9saXN0IHN0cnVjdHVyZQorICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBsZF9saXN0OgkJCQlsZF9saXN0IHN0cnVjdHVyZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBQRAorICogbGlzdCBzdHJ1Y3R1cmUuICBUaGlzIGluZm9ybWF0aW9uIGlzIG1haW5seSB1c2VkIHRvIGZpbmQgb3V0IFNZU1RFTQorICogc3VwcG9ydGVkIGJ5IHRoZSBGVy4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19nZXRfbGRfbGlzdChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IHJldCA9IDAsIGxkX2luZGV4ID0gMCwgaWRzID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXN0cnVjdCBNUl9MRF9MSVNUICpjaTsKKwlkbWFfYWRkcl90IGNpX2ggPSAwOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzX2dldF9sZF9saXN0OiBGYWlsZWQgdG8gZ2V0IGNtZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKworCWNpID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKSwKKwkJCQkmY2lfaCk7CisKKwlpZiAoIWNpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2MgbWVtIGluIGdldF9sZF9saXN0XG4iKTsKKwkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoY2ksIDAsIHNpemVvZigqY2kpKTsKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKwlkY21kLT5zZ2VfY291bnQgPSAxOworCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOworCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfR0VUX0xJU1Q7CisJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7CisJZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCk7CisJZGNtZC0+cGFkXzAgID0gMDsKKworCWlmICghbWVnYXNhc19pc3N1ZV9wb2xsZWQoaW5zdGFuY2UsIGNtZCkpIHsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSAtMTsKKwl9CisKKwkvKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBpbnN0YW5jZSBQRCBMSVNUICovCisKKwlpZiAoKHJldCA9PSAwKSAmJiAoY2ktPmxkQ291bnQgPCBNQVhfTE9HSUNBTF9EUklWRVMpKSB7CisJCW1lbXNldChpbnN0YW5jZS0+bGRfaWRzLCAweGZmLCBNRUdBU0FTX01BWF9MRF9JRFMpOworCisJCWZvciAobGRfaW5kZXggPSAwOyBsZF9pbmRleCA8IGNpLT5sZENvdW50OyBsZF9pbmRleCsrKSB7CisJCQlpZiAoY2ktPmxkTGlzdFtsZF9pbmRleF0uc3RhdGUgIT0gMCkgeworCQkJCWlkcyA9IGNpLT5sZExpc3RbbGRfaW5kZXhdLnJlZi50YXJnZXRJZDsKKwkJCQlpbnN0YW5jZS0+bGRfaWRzW2lkc10gPQorCQkJCQljaS0+bGRMaXN0W2xkX2luZGV4XS5yZWYudGFyZ2V0SWQ7CisJCQl9CisJCX0KKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCksCisJCQkJY2ksCisJCQkJY2lfaCk7CisKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiBtZWdhc2FzX2dldF9jb250cm9sbGVyX2luZm8gLQlSZXR1cm5zIEZXJ3MgY29udHJvbGxlciBzdHJ1Y3R1cmUKICAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCkBAIC0yMzM5LDYgKzI0MzMsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDE7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKTsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfR0VUX0lORk87CiAJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7CkBAIC0yNTkwLDYgKzI2ODUsOSBAQAogCQkoTUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfcGRfbGlzdCkpKTsKIAltZWdhc2FzX2dldF9wZF9saXN0KGluc3RhbmNlKTsKIAorCW1lbXNldChpbnN0YW5jZS0+bGRfaWRzLCAweGZmLCBNRUdBU0FTX01BWF9MRF9JRFMpOworCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCiAJY3RybF9pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAKIAkvKgpAQCAtMjcxNCw2ICsyODEyLDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAxOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyk7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0VWRU5UX0dFVF9JTkZPOwogCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBlbF9pbmZvX2g7CkBAIC0yODI4LDYgKzI5MjcsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDE7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCk7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0VWRU5UX1dBSVQ7CiAJZGNtZC0+bWJveC53WzBdID0gc2VxX251bTsKQEAgLTMxNjYsNiArMzI2Niw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMDsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfTk9ORTsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IDA7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0NBQ0hFX0ZMVVNIOwogCWRjbWQtPm1ib3guYlswXSA9IE1SX0ZMVVNIX0NUUkxfQ0FDSEUgfCBNUl9GTFVTSF9ESVNLX0NBQ0hFOwpAQCAtMzIwNSw2ICszMzA2LDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAwOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9OT05FOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gMDsKIAlkY21kLT5vcGNvZGUgPSBvcGNvZGU7CiAKQEAgLTM3ODEsNiArMzg4Myw3IEBACiAJICAgIGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQpKTsKIAlpbnQgaTsKIAlpbnQgZXJyb3IgPSAwOworCWNvbXBhdF91cHRyX3QgcHRyOwogCiAJaWYgKGNsZWFyX3VzZXIoaW9jLCBzaXplb2YoKmlvYykpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM3OTMsOSArMzg5NiwyMiBAQAogCSAgICBjb3B5X2luX3VzZXIoJmlvYy0+c2dlX2NvdW50LCAmY2lvYy0+c2dlX2NvdW50LCBzaXplb2YodTMyKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9JT0NUTF9TR0U7IGkrKykgewotCQljb21wYXRfdXB0cl90IHB0cjsKKwkvKgorCSAqIFRoZSBzZW5zZV9wdHIgaXMgdXNlZCBpbiBtZWdhc2FzX21nbXRfZndfaW9jdGwgb25seSB3aGVuCisJICogc2Vuc2VfbGVuIGlzIG5vdCBudWxsLCBzbyBwcmVwYXJlIHRoZSA2NGJpdCB2YWx1ZSB1bmRlcgorCSAqIHRoZSBzYW1lIGNvbmRpdGlvbi4KKwkgKi8KKwlpZiAoaW9jLT5zZW5zZV9sZW4pIHsKKwkJdm9pZCBfX3VzZXIgKipzZW5zZV9pb2NfcHRyID0KKwkJCSh2b2lkIF9fdXNlciAqKikoaW9jLT5mcmFtZS5yYXcgKyBpb2MtPnNlbnNlX29mZik7CisJCWNvbXBhdF91cHRyX3QgKnNlbnNlX2Npb2NfcHRyID0KKwkJCShjb21wYXRfdXB0cl90ICopKGNpb2MtPmZyYW1lLnJhdyArIGNpb2MtPnNlbnNlX29mZik7CisJCWlmIChnZXRfdXNlcihwdHIsIHNlbnNlX2Npb2NfcHRyKSB8fAorCQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihwdHIpLCBzZW5zZV9pb2NfcHRyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KIAorCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9DVExfU0dFOyBpKyspIHsKIAkJaWYgKGdldF91c2VyKHB0ciwgJmNpb2MtPnNnbFtpXS5pb3ZfYmFzZSkgfHwKIAkJICAgIHB1dF91c2VyKGNvbXBhdF9wdHIocHRyKSwgJmlvYy0+c2dsW2ldLmlvdl9iYXNlKSB8fAogCQkgICAgY29weV9pbl91c2VyKCZpb2MtPnNnbFtpXS5pb3ZfbGVuLApAQCAtMzk3MCw2ICs0MDg2LDcgQEAKIAlzdHJ1Y3QgIFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgIHNjc2lfZGV2aWNlICpzZGV2MTsKIAl1MTYgICAgIHBkX2luZGV4ID0gMDsKKwl1MTYJbGRfaW5kZXggPSAwOwogCWludCAgICAgaSwgaiwgZG9zY2FuID0gMDsKIAl1MzIgc2VxX251bTsKIAlpbnQgZXJyb3I7CkBAIC0zOTg1LDggKzQxMDIsMTI0IEBACiAKIAkJc3dpdGNoIChpbnN0YW5jZS0+ZXZ0X2RldGFpbC0+Y29kZSkgewogCQljYXNlIE1SX0VWVF9QRF9JTlNFUlRFRDoKKwkJCWlmIChtZWdhc2FzX2dldF9wZF9saXN0KGluc3RhbmNlKSA9PSAwKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFM7IGkrKykgeworCQkJCWZvciAoaiA9IDA7CisJCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKKwkJCQlqKyspIHsKKworCQkJCXBkX2luZGV4ID0KKwkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJc2RldjEgPQorCQkJCXNjc2lfZGV2aWNlX2xvb2t1cChob3N0LCBpLCBqLCAwKTsKKworCQkJCWlmIChpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZQorCQkJCQkJPT0gTVJfUERfU1RBVEVfU1lTVEVNKSB7CisJCQkJCQlpZiAoIXNkZXYxKSB7CisJCQkJCQlzY3NpX2FkZF9kZXZpY2UoaG9zdCwgaSwgaiwgMCk7CisJCQkJCQl9CisKKwkJCQkJaWYgKHNkZXYxKQorCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKKwogCQljYXNlIE1SX0VWVF9QRF9SRU1PVkVEOgorCQkJaWYgKG1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpID09IDApIHsKKwkJCW1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpOworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCWogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJCQkJaisrKSB7CisKKwkJCQlwZF9pbmRleCA9CisJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCXNkZXYxID0KKwkJCQlzY3NpX2RldmljZV9sb29rdXAoaG9zdCwgaSwgaiwgMCk7CisKKwkJCQlpZiAoaW5zdGFuY2UtPnBkX2xpc3RbcGRfaW5kZXhdLmRyaXZlU3RhdGUKKwkJCQkJPT0gTVJfUERfU1RBVEVfU1lTVEVNKSB7CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYxKTsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9CisJCQkJfQorCQkJfQorCQkJfQorCQkJZG9zY2FuID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgTVJfRVZUX0xEX09GRkxJTkU6CisJCWNhc2UgTVJfRVZUX0xEX0RFTEVURUQ6CisJCQltZWdhc2FzX2dldF9sZF9saXN0KGluc3RhbmNlKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUzsgaSsrKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCWorKykgeworCisJCQkJbGRfaW5kZXggPQorCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQlzZGV2MSA9IHNjc2lfZGV2aWNlX2xvb2t1cChob3N0LAorCQkJCQlpICsgTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMsCisJCQkJCWosCisJCQkJCTApOworCisJCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9IDB4ZmYpIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCQl9CisJCQl9CisJCQlkb3NjYW4gPSAwOworCQkJYnJlYWs7CisJCWNhc2UgTVJfRVZUX0xEX0NSRUFURUQ6CisJCQltZWdhc2FzX2dldF9sZF9saXN0KGluc3RhbmNlKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUzsgaSsrKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKKwkJCQkJaisrKSB7CisJCQkJCWxkX2luZGV4ID0KKwkJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCQlzZGV2MSA9IHNjc2lfZGV2aWNlX2xvb2t1cChob3N0LAorCQkJCQkJaStNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywKKwkJCQkJCWosIDApOworCisJCQkJCWlmIChpbnN0YW5jZS0+bGRfaWRzW2xkX2luZGV4XSAhPQorCQkJCQkJCQkweGZmKSB7CisJCQkJCQlpZiAoIXNkZXYxKSB7CisJCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGhvc3QsCisJCQkJCQkJCWkgKyAyLAorCQkJCQkJCQlqLCAwKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlkb3NjYW4gPSAwOworCQkJYnJlYWs7CiAJCWNhc2UgTVJfRVZUX0NUUkxfSE9TVF9CVVNfU0NBTl9SRVFVRVNURUQ6CisJCWNhc2UgTVJfRVZUX0ZPUkVJR05fQ0ZHX0lNUE9SVEVEOgogCQkJZG9zY2FuID0gMTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNDAyMSw2ICs0MjU0LDMxIEBACiAJCQkJfQogCQkJfQogCQl9CisKKwkJbWVnYXNhc19nZXRfbGRfbGlzdChpbnN0YW5jZSk7CisJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUzsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOyBqKyspIHsKKwkJCQlsZF9pbmRleCA9CisJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCisJCQkJCWkrTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMsIGosIDApOworCQkJCWlmIChpbnN0YW5jZS0+bGRfaWRzW2xkX2luZGV4XSAhPSAweGZmKSB7CisJCQkJCWlmICghc2RldjEpIHsKKwkJCQkJCXNjc2lfYWRkX2RldmljZShob3N0LAorCQkJCQkJCQlpKzIsCisJCQkJCQkJCWosIDApOworCQkJCQl9IGVsc2UgeworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYxKTsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KIAl9CiAKIAlpZiAoIGluc3RhbmNlLT5hZW5fY21kICE9IE5VTEwgKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKaW5kZXggNzJiMjhlNC4uOWQ4YjZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaApAQCAtMTgsOSArMTgsOSBAQAogLyoKICAqIE1lZ2FSQUlEIFNBUyBEcml2ZXIgbWV0YSBkYXRhCiAgKi8KLSNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwMC4wMC4wNC4xMi1yYzEiCi0jZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCQkiU2VwLiAxNywgMjAwOSIKLSNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJUaHUgU2VwLiAxNyAxMTo0MTo1MSBQU1QgMjAwOSIKKyNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJIjAwLjAwLjA0LjE3LjEtcmMxIgorI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkiT2N0LiAyOSwgMjAwOSIKKyNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJIlRodS4gT2N0LiAyOSwgMTE6NDE6NTEgUFNUIDIwMDkiCiAKIC8qCiAgKiBEZXZpY2UgSURzCkBAIC0xMTcsNiArMTE3LDcgQEAKICNkZWZpbmUgTUZJX0NNRF9TVFAJCQkJMHgwOAogCiAjZGVmaW5lIE1SX0RDTURfQ1RSTF9HRVRfSU5GTwkJCTB4MDEwMTAwMDAKKyNkZWZpbmUgTVJfRENNRF9MRF9HRVRfTElTVAkJCTB4MDMwMTAwMDAKIAogI2RlZmluZSBNUl9EQ01EX0NUUkxfQ0FDSEVfRkxVU0gJCTB4MDExMDEwMDAKICNkZWZpbmUgTVJfRkxVU0hfQ1RSTF9DQUNIRQkJCTB4MDEKQEAgLTM0OSw2ICszNTAsMzIgQEAKIAl1OCAgICAgICAgICAgICBkcml2ZVN0YXRlOwogfSBfX3BhY2tlZDsKIAorIC8qCisgKiBkZWZpbmVzIHRoZSBsb2dpY2FsIGRyaXZlIHJlZmVyZW5jZSBzdHJ1Y3R1cmUKKyAqLwordW5pb24gIE1SX0xEX1JFRiB7CisJc3RydWN0IHsKKwkJdTggICAgICB0YXJnZXRJZDsKKwkJdTggICAgICByZXNlcnZlZDsKKwkJdTE2ICAgICBzZXFOdW07CisJfTsKKwl1MzIgICAgIHJlZjsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBkZWZpbmVzIHRoZSBsb2dpY2FsIGRyaXZlIGxpc3Qgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBNUl9MRF9MSVNUIHsKKwl1MzIgICAgIGxkQ291bnQ7CisJdTMyICAgICByZXNlcnZlZDsKKwlzdHJ1Y3QgeworCQl1bmlvbiBNUl9MRF9SRUYgICByZWY7CisJCXU4ICAgICAgICAgIHN0YXRlOworCQl1OCAgICAgICAgICByZXNlcnZlZFszXTsKKwkJdTY0ICAgICAgICAgc2l6ZTsKKwl9IGxkTGlzdFtNQVhfTE9HSUNBTF9EUklWRVNdOworfSBfX3BhY2tlZDsKKwogLyoKICAqIFNBUyBjb250cm9sbGVyIHByb3BlcnRpZXMKICAqLwpAQCAtNjM3LDYgKzY2NCw4IEBACiAjZGVmaW5lIE1FR0FTQVNfTUFYX0xECQkJCTY0CiAjZGVmaW5lIE1FR0FTQVNfTUFYX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAoTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMgKiBcCiAJCQkJCQlNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpCisjZGVmaW5lIE1FR0FTQVNfTUFYX0xEX0lEUwkJCShNRUdBU0FTX01BWF9MRF9DSEFOTkVMUyAqIFwKKwkJCQkJCU1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkKIAogI2RlZmluZSBNRUdBU0FTX0RCR19MVkwJCQkJMQogCkBAIC0xMTg3LDYgKzEyMTYsNyBAQAogCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdfc2V0OwogCiAJc3RydWN0IG1lZ2FzYXNfcGRfbGlzdCAgICAgICAgICBwZF9saXN0W01FR0FTQVNfTUFYX1BEXTsKKwl1OCAgICAgbGRfaWRzW01FR0FTQVNfTUFYX0xEX0lEU107CiAJczggaW5pdF9pZDsKIAogCXUxNiBtYXhfbnVtX3NnZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCmluZGV4IDcwYzRjMjQuLmJhOGUxMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZwpAQCAtNDQsNiArNDQsNyBAQAogCXRyaXN0YXRlICJMU0kgTVBUIEZ1c2lvbiBTQVMgMi4wIERldmljZSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQogCXNlbGVjdCBTQ1NJX1NBU19BVFRSUworCXNlbGVjdCBSQUlEX0FUVFJTCiAJLS0taGVscC0tLQogCVRoaXMgZHJpdmVyIHN1cHBvcnRzIFBDSS1FeHByZXNzIFNBUyA2R2IvcyBIb3N0IEFkYXB0ZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaAppbmRleCA5MTQxNjgxLi45OTU4ZDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgIHNjYXR0ZXIvZ2F0aGVyIGZvcm1hdHMuCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjEsIDIwMDYKICAqCi0gKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xMworICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMTQKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC01Myw2ICs1MywxMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSQUlEIEFjY2VsZXJhdG9yIGZ1bmN0aW9uYWxpdHkuCiAgKiAgMDctMzAtMDkgIDAyLjAwLjEzICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDEwLTI4LTA5ICAwMi4wMC4xNCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1TSS14IGluZGV4IG1hc2sgYW5kIHNoaWZ0IGZvciBSZXBseSBQb3N0IEhvc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIEluZGV4IHJlZ2lzdGVyLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZnVuY3Rpb24gY29kZSBmb3IgSG9zdCBCYXNlZCBEaXNjb3ZlcnkgQWN0aW9uLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtNzgsNyArODIsNyBAQAogI2RlZmluZSBNUEkyX1ZFUlNJT05fMDJfMDAgICAgICAgICAgICAgICAgICAoMHgwMjAwKQogCiAvKiB2ZXJzaW9uaW5nIGZvciB0aGlzIE1QSSBoZWFkZXIgc2V0ICovCi0jZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBEKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgwRSkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVYgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9NQVNLICAgICAgICgweEZGMDApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9TSElGVCAgICAgICg4KQpAQCAtMjMyLDkgKzIzNiwxMiBAQAogI2RlZmluZSBNUEkyX1JFUExZX0ZSRUVfSE9TVF9JTkRFWF9PRkZTRVQgICAgICAgKDB4MDAwMDAwNDgpCiAKIC8qCi0gKiBPZmZzZXQgZm9yIHRoZSBSZXBseSBEZXNjcmlwdG9yIFBvc3QgUXVldWUKKyAqIERlZmluZXMgZm9yIHRoZSBSZXBseSBEZXNjcmlwdG9yIFBvc3QgUXVldWUKICAqLwogI2RlZmluZSBNUEkyX1JFUExZX1BPU1RfSE9TVF9JTkRFWF9PRkZTRVQgICAgICAgKDB4MDAwMDAwNkMpCisjZGVmaW5lIE1QSTJfUkVQTFlfUE9TVF9IT1NUX0lOREVYX01BU0sgICAgICAgICAoMHgwMEZGRkZGRikKKyNkZWZpbmUgTVBJMl9SUEhJX01TSVhfSU5ERVhfTUFTSyAgICAgICAgICAgICAgICgweEZGMDAwMDAwKQorI2RlZmluZSBNUEkyX1JQSElfTVNJWF9JTkRFWF9TSElGVCAgICAgICAgICAgICAgKDI0KQogCiAvKgogICogRGVmaW5lcyBmb3IgdGhlIEhDQlNpemUgYW5kIGFkZHJlc3MKQEAgLTQ5NywxMiArNTA0LDEzIEBACiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX0NNRF9CVUZfQkFTRV9QT1NUICAgICAgKDB4MjQpIC8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBQb3N0IEJhc2UgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9MSVNUX1BPU1QgICAgICAoMHgyNSkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgTGlzdCAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1JBSURfQUNDRUxFUkFUT1IgICAgICAgICAgICAgICgweDJDKSAvKiBSQUlEIEFjY2VsZXJhdG9yKi8KKy8qIEhvc3QgQmFzZWQgRGlzY292ZXJ5IEFjdGlvbiAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0hPU1RfQkFTRURfRElTQ09WRVJZX0FDVElPTiAgICgweDJGKQogCiAKIAogLyogRG9vcmJlbGwgZnVuY3Rpb25zICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSU9DX01FU1NBR0VfVU5JVF9SRVNFVCAgICAgICAgKDB4NDApCi0vKiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSU9fVU5JVF9SRVNFVCAgICAgICAgICAgICAgICAgKDB4NDEpICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSEFORFNIQUtFICAgICAgICAgICAgICAgICAgICAgKDB4NDIpCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCmluZGV4IDE2MTFjNTcuLmNmMGFjOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBDb25maWd1cmF0aW9uIG1lc3NhZ2VzIGFuZCBwYWdlcwogICogIENyZWF0aW9uIERhdGU6ICBOb3ZlbWJlciAxMCwgMjAwNgogICoKLSAqICAgIG1waTJfY25mZy5oIFZlcnNpb246ICAwMi4wMC4xMgorICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjEzCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMTA3LDYgKzEwNyw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICB0byBTQVMgRGV2aWNlIFBhZ2UgMCBGbGFncyBmaWVsZC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBoeUluZm8gZGVmaW5lcyBmb3IgcG93ZXIgY29uZGl0aW9uLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgRXRoZXJuZXQgY29uZmlndXJhdGlvbiBwYWdlcy4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTMgIEFkZGVkIE1QSTJfSU9VTklUUEFHRTFfRU5BQkxFX0hPU1RfQkFTRURfRElTQ09WRVJZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBIWSBQYWdlIDQgc3RydWN0dXJlIGFuZCBkZWZpbmVzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtNzEyLDYgKzcxNCw3IEBACiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDA0KQogCiAvKiBJTyBVbml0IFBhZ2UgMSBGbGFncyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfRU5BQkxFX0hPU1RfQkFTRURfRElTQ09WRVJZICAgICgweDAwMDAwODAwKQogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX01BU0tfU0FUQV9XUklURV9DQUNIRSAgICAgICAgICAoMHgwMDAwMDYwMCkKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfU0FUQV9XUklURV9DQUNIRSAgICAgICAgKDB4MDAwMDAwMDApCiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9TQVRBX1dSSVRFX0NBQ0hFICAgICAgICgweDAwMDAwMjAwKQpAQCAtMjI5MSw2ICsyMjk0LDI2IEBACiAjZGVmaW5lIE1QSTJfU0FTUEhZM19QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAwKQogCiAKKy8qIFNBUyBQSFkgUGFnZSA0ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfNCB7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsRnJhbWVbMjhdOyAgICAgICAgICAgLyogMHgwQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfNCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfNCwKKyAgTXBpMlNhc1BoeVBhZ2U0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeVBhZ2U0X3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQSFk0X1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCisKKy8qIHZhbHVlcyBmb3IgdGhlIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZNF9GTEFHU19GUkFNRV9WQUxJRCAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZNF9GTEFHU19TQVRBX0ZSQU1FICAgICAgICAgKDB4MDEpCisKKworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgU0FTIFBvcnQgQ29uZmlnIFBhZ2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dAppbmRleCA2NWZjYWEzLi5jNGFkZjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dApAQCAtNSwyMyArNSwyNCBAQAogIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IExTSSBDb3Jwb3JhdGlvbi4KIAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEhlYWRlciBTZXQgUmVsZWFzZSBWZXJzaW9uOiAgICAwMi4wMC4xMgotIEhlYWRlciBTZXQgUmVsZWFzZSBEYXRlOiAgICAgICAwNS0wNi0wOQorIEhlYWRlciBTZXQgUmVsZWFzZSBWZXJzaW9uOiAgICAwMi4wMC4xNAorIEhlYWRlciBTZXQgUmVsZWFzZSBEYXRlOiAgICAgICAxMC0yOC0wOQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgRmlsZW5hbWUgICAgICAgICAgICAgICBDdXJyZW50IHZlcnNpb24gICAgIFByaW9yIHZlcnNpb24KICAtLS0tLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0tLQotIG1waTIuaCAgICAgICAgICAgICAgICAgMDIuMDAuMTIgICAgICAgICAgICAwMi4wMC4xMQotIG1waTJfY25mZy5oICAgICAgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMAotIG1waTJfaW5pdC5oICAgICAgICAgICAgMDIuMDAuMDcgICAgICAgICAgICAwMi4wMC4wNgotIG1waTJfaW9jLmggICAgICAgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMAotIG1waTJfcmFpZC5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMwotIG1waTJfc2FzLmggICAgICAgICAgICAgMDIuMDAuMDIgICAgICAgICAgICAwMi4wMC4wMgorIG1waTIuaCAgICAgICAgICAgICAgICAgMDIuMDAuMTQgICAgICAgICAgICAwMi4wMC4xMworIG1waTJfY25mZy5oICAgICAgICAgICAgMDIuMDAuMTMgICAgICAgICAgICAwMi4wMC4xMgorIG1waTJfaW5pdC5oICAgICAgICAgICAgMDIuMDAuMDggICAgICAgICAgICAwMi4wMC4wNworIG1waTJfaW9jLmggICAgICAgICAgICAgMDIuMDAuMTMgICAgICAgICAgICAwMi4wMC4xMgorIG1waTJfcmFpZC5oICAgICAgICAgICAgMDIuMDAuMDQgICAgICAgICAgICAwMi4wMC4wNAorIG1waTJfc2FzLmggICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMgogIG1waTJfdGFyZy5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMwotIG1waTJfdG9vbC5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMgorIG1waTJfdG9vbC5oICAgICAgICAgICAgMDIuMDAuMDQgICAgICAgICAgICAwMi4wMC4wNAogIG1waTJfdHlwZS5oICAgICAgICAgICAgMDIuMDAuMDAgICAgICAgICAgICAwMi4wMC4wMAotIG1waTJfcmEuaCAgICAgICAgICAgICAgMDIuMDAuMDAKLSBtcGkyX2hpc3RvcnkudHh0ICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTIKKyBtcGkyX3JhLmggICAgICAgICAgICAgIDAyLjAwLjAwICAgICAgICAgICAgMDIuMDAuMDAKKyBtcGkyX2hiZC5oICAgICAgICAgICAgIDAyLjAwLjAwCisgbXBpMl9oaXN0b3J5LnR4dCAgICAgICAwMi4wMC4xNCAgICAgICAgICAgIDAyLjAwLjEzCiAKIAogICogIERhdGUgICAgICBWZXJzaW9uICAgRGVzY3JpcHRpb24KQEAgLTY1LDYgKzY2LDExIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIGFuZCBtYWRlIHRob3NlCiAgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcyByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJBSUQgQWNjZWxlcmF0b3IgZnVuY3Rpb25hbGl0eS4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMTMgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjE0ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVNJLXggaW5kZXggbWFzayBhbmQgc2hpZnQgZm9yIFJlcGx5IFBvc3QgSG9zdAorICogICAgICAgICAgICAgICAgICAgICAgSW5kZXggcmVnaXN0ZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBmdW5jdGlvbiBjb2RlIGZvciBIb3N0IEJhc2VkIERpc2NvdmVyeSBBY3Rpb24uCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9jbmZnLmgKQEAgLTE1NSw2ICsxNjEsMTUgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGV4cGFuZGVyIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBkYXRhIHRvIFNBUwogICogICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXIgUGFnZSAwLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBIWSBQYWdlIDIgYW5kIFNBUyBQSFkgUGFnZSAzLgorICogIDA3LTMwLTA5ICAwMi4wMC4xMiAgQWRkZWQgSU8gVW5pdCBQYWdlIDcuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgZGV2aWNlIGlkcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBJTyBVbml0IFBhZ2UgNS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHBhcnRpYWwgYW5kIHNsdW1iZXIgcG93ZXIgbWFuYWdlbWVudCBjYXBhYmxlIGZsYWdzCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBTQVMgRGV2aWNlIFBhZ2UgMCBGbGFncyBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBoeUluZm8gZGVmaW5lcyBmb3IgcG93ZXIgY29uZGl0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgRXRoZXJuZXQgY29uZmlndXJhdGlvbiBwYWdlcy4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTMgIEFkZGVkIE1QSTJfSU9VTklUUEFHRTFfRU5BQkxFX0hPU1RfQkFTRURfRElTQ09WRVJZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBIWSBQYWdlIDQgc3RydWN0dXJlIGFuZCBkZWZpbmVzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfaW5pdC5oCkBAIC0xNzIsNiArMTg3LDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBRdWVyeSBBc3luY2hyb25vdXMgRXZlbnQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIHR3byBuZXcgYml0cyBpbiB0aGUgU2xvdFN0YXR1cyBmaWVsZCBvZiB0aGUgU0NTSQogICogICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlIFByb2Nlc3NvciBSZXF1ZXN0IGFuZCBSZXBseS4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMDggIEFkZGVkIGRlZmluZXMgZm9yIGRlY29kaW5nIHRoZSBSZXNwb25zZUluZm8gYnl0ZXMgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBib3RoIFNDU0kgSU8gRXJyb3IgUmVwbHkgYW5kIFNDU0kgVGFzayBNYW5hZ2VtZW50IFJlcGx5LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUmVzcG9uc2VJbmZvIGZpZWxkIHRvIE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9PVkVSTEFQUEVEX1RBRyBkZWZpbmUuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9pb2MuaApAQCAtMjQ2LDYgKzI2NSwyMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyByZWFzb24gY29kZXMgZm9yIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZQogICogICAgICAgICAgICAgICAgICAgICAgRXZlbnQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgZXZlbnQ6IFNBUyBQSFkgQ291bnRlci4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMTIgIEFkZGVkIEdQSU8gSW50ZXJydXB0IGV2ZW50IGRlZmluZSBhbmQgc3RydWN0dXJlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VYVEVOREVEX0JVRkZFUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgcHJvZHVjdCBpZCBmYW1pbHkgZm9yIDIyMDguCisgKiAgMTAtMjgtMDkgIDAyLjAwLjEzICBBZGRlZCBIb3N0TVNJeFZlY3RvcnMgZmllbGQgdG8gTVBJMl9JT0NfSU5JVF9SRVFVRVNULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWF4TVNJeFZlY3RvcnMgZmllbGQgdG8gTVBJMl9JT0NfRkFDVFNfUkVQTFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNaW5EZXZIYW5kbGUgZmllbGQgdG8gTVBJMl9JT0NfRkFDVFNfUkVQTFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSE9TVF9CQVNFRF9ESVNDT1ZFUlkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX0hPU1RfQkFTRURfRElTQ09WRVJZX1BIWSBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PX0VYUEFOREVSIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEhvc3QgQmFzZWQgRGlzY292ZXJ5IFBoeSBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lcyBmb3IgUHJvZHVjdElEIFByb2R1Y3QgZmllbGQKKyAqICAgICAgICAgICAgICAgICAgICAgIChNUEkyX0ZXX0hFQURFUl9QSURfKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIHZhbHVlcyBmb3IgU0FTIFByb2R1Y3RJRCBGYW1pbHkKKyAqICAgICAgICAgICAgICAgICAgICAgIChNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXykuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9yYWlkLmgKQEAgLTI1Niw2ICsyODksOCBAQAogICogIDA1LTIxLTA4ICAwMi4wMC4wMyAgQWRkZWQgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9OVU1fUEhZU0RJU0tTIHNvIHRoYXQKICAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBQaHlzRGlzayBhcnJheSBpbiBNUEkyX1JBSURfVk9MVU1FX0NSRUFUSU9OX1NUUlVDVAogICogICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHNpemVkIGJ5IHRoZSBidWlsZCBlbnZpcm9ubWVudC4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMDQgIEFkZGVkIHByb3BlciBkZWZpbmUgZm9yIHRoZSBVc2UgRGVmYXVsdCBTZXR0aW5ncyBiaXQgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZUNyZWF0aW9uRmxhZ3MgYW5kIG1hcmtlZCB0aGUgb2xkIG9uZSBhcyBvYnNvbGV0ZS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX3Nhcy5oCkBAIC0yNjQsNiArMjk5LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgUmVxdWVzdC4KICAqICAxMC0wMi0wOCAgMDIuMDAuMDIgIEFkZGVkIFNldCBJT0MgUGFyYW1ldGVyIE9wZXJhdGlvbiB0byBTQVMgSU8gVW5pdCBDb250cm9sCiAgKiAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LgorICogIDEwLTI4LTA5ICAwMi4wMC4wMyAgQ2hhbmdlZCB0aGUgdHlwZSBvZiBTR0wgaW4gTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIE1QSTJfU0dFX0lPX1VOSU9OIHNpbmNlIGl0IHN1cHBvcnRzIGNoYWluZWQgU0dMcy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX3RhcmcuaApAQCAtMjgzLDYgKzMyMCwxMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KICAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCiAgKiAgMDUtMDYtMDkgIDAyLjAwLjAzICBBZGRlZCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wgYW5kIERpYWdub3N0aWMgQ0xJIFRvb2wuCisgKiAgMDctMzAtMDkgIDAyLjAwLjA0ICBBZGRlZCBFeHRlbmRlZFR5cGUgZmllbGQgdG8gRGlhZ25vc3RpY0J1ZmZlclBvc3QgcmVxdWVzdAorICogICAgICAgICAgICAgICAgICAgICAgYW5kIHJlcGx5IG1lc3NhZ2VzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9ESUFHX0JVRl9UWVBFX0VYVEVOREVELgorICogICAgICAgICAgICAgICAgICAgICAgSW5jcmVtZW50ZWQgTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5ULgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfdHlwZS5oCkBAIC0yOTMsMjAgKzMzNCwyNiBAQAogICogIDA1LTA2LTA5ICAwMi4wMC4wMCAgSW5pdGlhbCB2ZXJzaW9uLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK21waTJfaGJkLmgKKyAqICAxMC0yOC0wOSAgMDIuMDAuMDAgIEluaXRpYWwgdmVyc2lvbi4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKIG1waTJfaGlzdG9yeS50eHQgICAgICAgICBQYXJ0cyBsaXN0IGhpc3RvcnkKIAotRmlsZW5hbWUgICAgIDAyLjAwLjEyCi0tLS0tLS0tLS0tICAgLS0tLS0tLS0KLW1waTIuaCAgICAgICAwMi4wMC4xMgotbXBpMl9jbmZnLmggIDAyLjAwLjExCi1tcGkyX2luaXQuaCAgMDIuMDAuMDcKLW1waTJfaW9jLmggICAwMi4wMC4xMQotbXBpMl9yYWlkLmggIDAyLjAwLjAzCi1tcGkyX3Nhcy5oICAgMDIuMDAuMDIKLW1waTJfdGFyZy5oICAwMi4wMC4wMwotbXBpMl90b29sLmggIDAyLjAwLjAzCi1tcGkyX3R5cGUuaCAgMDIuMDAuMDAKLW1waTJfcmEuaCAgICAwMi4wMC4wMAorRmlsZW5hbWUgICAgIDAyLjAwLjE0ICAwMi4wMC4xMyAgMDIuMDAuMTIKKy0tLS0tLS0tLS0gICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tCittcGkyLmggICAgICAgMDIuMDAuMTQgIDAyLjAwLjEzICAwMi4wMC4xMgorbXBpMl9jbmZnLmggIDAyLjAwLjEzICAwMi4wMC4xMiAgMDIuMDAuMTEKK21waTJfaW5pdC5oICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA3CittcGkyX2lvYy5oICAgMDIuMDAuMTMgIDAyLjAwLjEyICAwMi4wMC4xMQorbXBpMl9yYWlkLmggIDAyLjAwLjA0ICAwMi4wMC4wNCAgMDIuMDAuMDMKK21waTJfc2FzLmggICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAyCittcGkyX3RhcmcuaCAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMworbXBpMl90b29sLmggIDAyLjAwLjA0ICAwMi4wMC4wNCAgMDIuMDAuMDMKK21waTJfdHlwZS5oICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3JhLmggICAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl9oYmQuaCAgIDAyLjAwLjAwCiAKIEZpbGVuYW1lICAgICAwMi4wMC4xMSAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA2CiAtLS0tLS0tLS0tICAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCmluZGV4IDU2M2U1NmQuLjY1NDE5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBTQ1NJIGluaXRpYXRvciBtb2RlIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjMsIDIwMDYKICAqCi0gKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDcKKyAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wOAogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTI3LDYgKzI3LDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBRdWVyeSBBc3luY2hyb25vdXMgRXZlbnQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIHR3byBuZXcgYml0cyBpbiB0aGUgU2xvdFN0YXR1cyBmaWVsZCBvZiB0aGUgU0NTSQogICogICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlIFByb2Nlc3NvciBSZXF1ZXN0IGFuZCBSZXBseS4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMDggIEFkZGVkIGRlZmluZXMgZm9yIGRlY29kaW5nIHRoZSBSZXNwb25zZUluZm8gYnl0ZXMgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBib3RoIFNDU0kgSU8gRXJyb3IgUmVwbHkgYW5kIFNDU0kgVGFzayBNYW5hZ2VtZW50IFJlcGx5LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUmVzcG9uc2VJbmZvIGZpZWxkIHRvIE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9PVkVSTEFQUEVEX1RBRyBkZWZpbmUuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0yNTQsNiArMjU4LDExIEBACiAjZGVmaW5lIE1QSTJfU0NTSV9TVEFURV9BVVRPU0VOU0VfRkFJTEVEICAgICAgICAoMHgwMikKICNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCAgICAgICAgICgweDAxKQogCisvKiBtYXNrcyBhbmQgc2hpZnRzIGZvciB0aGUgUmVzcG9uc2VJbmZvIGZpZWxkICovCisKKyNkZWZpbmUgTVBJMl9TQ1NJX1JJX01BU0tfUkVBU09OQ09ERSAgICAgICAgICAgICgweDAwMDAwMEZGKQorI2RlZmluZSBNUEkyX1NDU0lfUklfU0hJRlRfUkVBU09OQ09ERSAgICAgICAgICAgKDApCisKICNkZWZpbmUgTVBJMl9TQ1NJX1RBU0tUQUdfVU5LTk9XTiAgICAgICAgICAgICAgICgweEZGRkYpCiAKIApAQCAtMzI3LDYgKzMzNiw3IEBACiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVGVybWluYXRpb25Db3VudDsgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VJbmZvOyAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCiB9IE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWSwKICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFksCiAgIE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJTQ1NJTWFuYWdlbWVudFJlcGx5X3Q7CkBAIC0zMzksOCArMzQ5LDIwIEBACiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9GQUlMRUQgICAgICAgICAgICAgICAgICgweDA1KQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fU1VDQ0VFREVEICAgICAgICAgICAgICAoMHgwOCkKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX0lOVkFMSURfTFVOICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9PVkVSTEFQUEVEX1RBRyAgICAgICAgICgweDBBKQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU9fUVVFVUVEX09OX0lPQyAgICAgICAgICAoMHg4MCkKIAorLyogbWFza3MgYW5kIHNoaWZ0cyBmb3IgdGhlIFJlc3BvbnNlSW5mbyBmaWVsZCAqLworCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX01BU0tfUkVBU09OQ09ERSAgICAgICAgICAgICgweDAwMDAwMEZGKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9TSElGVF9SRUFTT05DT0RFICAgICAgICAgICAoMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfTUFTS19BUkkyICAgICAgICAgICAgICAgICAgKDB4MDAwMEZGMDApCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX1NISUZUX0FSSTIgICAgICAgICAgICAgICAgICg4KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9NQVNLX0FSSTEgICAgICAgICAgICAgICAgICAoMHgwMEZGMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfU0hJRlRfQVJJMSAgICAgICAgICAgICAgICAgKDE2KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9NQVNLX0FSSTAgICAgICAgICAgICAgICAgICAoMHhGRjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfU0hJRlRfQVJJMCAgICAgICAgICAgICAgICAgKDI0KQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBTQ1NJIEVuY2xvc3VyZSBQcm9jZXNzb3IgbWVzc2FnZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKaW5kZXggZWE1MWNlOC4uNzU0OTM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBJT0MsIFBvcnQsIEV2ZW50LCBGVyBEb3dubG9hZCwgYW5kIEZXIFVwbG9hZCBtZXNzYWdlcwogICogIENyZWF0aW9uIERhdGU6ICBPY3RvYmVyIDExLCAyMDA2CiAgKgotICogIG1waTJfaW9jLmggVmVyc2lvbjogIDAyLjAwLjEyCisgKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTMKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC04Nyw2ICs4NywxNyBAQAogICogIDA3LTMwLTA5ICAwMi4wMC4xMiAgQWRkZWQgR1BJTyBJbnRlcnJ1cHQgZXZlbnQgZGVmaW5lIGFuZCBzdHJ1Y3R1cmUuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVhURU5ERURfQlVGRkVSIGRlZmluZS4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBwcm9kdWN0IGlkIGZhbWlseSBmb3IgMjIwOC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTMgIEFkZGVkIEhvc3RNU0l4VmVjdG9ycyBmaWVsZCB0byBNUEkyX0lPQ19JTklUX1JFUVVFU1QuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYXhNU0l4VmVjdG9ycyBmaWVsZCB0byBNUEkyX0lPQ19GQUNUU19SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1pbkRldkhhbmRsZSBmaWVsZCB0byBNUEkyX0lPQ19GQUNUU19SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9IT1NUX0JBU0VEX0RJU0NPVkVSWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfSE9TVF9CQVNFRF9ESVNDT1ZFUllfUEhZIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9fRVhQQU5ERVIgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgSG9zdCBCYXNlZCBEaXNjb3ZlcnkgUGh5IEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmVzIGZvciBQcm9kdWN0SUQgUHJvZHVjdCBmaWVsZAorICogICAgICAgICAgICAgICAgICAgICAgKE1QSTJfRldfSEVBREVSX1BJRF8pLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgdmFsdWVzIGZvciBTQVMgUHJvZHVjdElEIEZhbWlseQorICogICAgICAgICAgICAgICAgICAgICAgKE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfKS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTExOSw4ICsxMzAsMTAgQEAKICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNc2dWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBIZWFkZXJWZXJzaW9uOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KLSAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBIb3N0TVNJeFZlY3RvcnM7ICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1SZXF1ZXN0RnJhbWVTaXplOyAgICAgICAgIC8qIDB4MUEgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aDsgIC8qIDB4MUMgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXBseUZyZWVRdWV1ZURlcHRoOyAgICAgICAgICAgIC8qIDB4MUUgKi8KQEAgLTIxNSw3ICsyMjgsNyBAQAogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1heENoYWluRGVwdGg7ICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFdob0luaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mUG9ydHM7ICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLwotICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1heE1TSXhWZWN0b3JzOyAgICAgICAgICAgICAgICAgLyogMHgxNyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RDcmVkaXQ7ICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RJRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxQSAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0NhcGFiaWxpdGllczsgICAgICAgICAgICAgICAgLyogMHgxQyAqLwpAQCAtMjMzLDcgKzI0Niw4IEBACiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4Vm9sdW1lczsgICAgICAgICAgICAgICAgICAgICAvKiAweDM3ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4RGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiAweDM4ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4UGVyc2lzdGVudEVudHJpZXM7ICAgICAgICAgICAvKiAweDNBICovCi0gICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDNDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWluRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiAweDNDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDNFICovCiB9IE1QSTJfSU9DX0ZBQ1RTX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSU9DX0ZBQ1RTX1JFUExZLAogICBNcGkySU9DRmFjdHNSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJJT0NGYWN0c1JlcGx5X3Q7CiAKQEAgLTI2OSw2ICsyODMsNyBAQAogLyogUHJvZHVjdElEIGZpZWxkIHVzZXMgTVBJMl9GV19IRUFERVJfUElEXyAqLwogCiAvKiBJT0NDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0hPU1RfQkFTRURfRElTQ09WRVJZICAgKDB4MDAwMTAwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9NU0lfWF9JTkRFWCAgICAgICAgICAgICgweDAwMDA4MDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAoMHgwMDAwNDAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VWRU5UX1JFUExBWSAgICAgICAgICAgKDB4MDAwMDIwMDApCkBAIC00NTMsNiArNDY4LDcgQEAKICNkZWZpbmUgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQgICAgICAgICAgICAgICAgICAoMHgwMDIxKQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19QSFlfQ09VTlRFUiAgICAgICAgICAgICAgICAgICgweDAwMjIpCiAjZGVmaW5lIE1QSTJfRVZFTlRfR1BJT19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgKDB4MDAyMykKKyNkZWZpbmUgTVBJMl9FVkVOVF9IT1NUX0JBU0VEX0RJU0NPVkVSWV9QSFkgICAgICAgICAoMHgwMDI0KQogCiAKIC8qIExvZyBFbnRyeSBBZGRlZCBFdmVudCBkYXRhICovCkBAIC03OTMsNiArODA5LDcgQEAKICAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3Q7CiAKIC8qIHZhbHVlcyBmb3IgdGhlIEV4cFN0YXR1cyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PX0VYUEFOREVSICAgICAgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfQURERUQgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT1RfUkVTUE9ORElORyAgICAgICAgICAgICAgICgweDAyKQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX1JFU1BPTkRJTkcgICAgICAgICAgICAgICAgICAgKDB4MDMpCkBAIC04NzgsNiArODk1LDQ0IEBACiAgKiAqLwogCiAKKy8qIEhvc3QgQmFzZWQgRGlzY292ZXJ5IFBoeSBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0hCRF9QSFlfU0FTIHsKKyAgICBVOCAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgIE5lZ290aWF0ZWRMaW5rUmF0ZTsgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgUGh5TnVtOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgSW5pdGlhbEZyYW1lWzI4XTsgICAgICAgICAgIC8qIDB4MDggKi8KK30gTVBJMl9FVkVOVF9IQkRfUEhZX1NBUywgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0hCRF9QSFlfU0FTLAorICBNcGkyRXZlbnRIYmRQaHlTYXNfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnRIYmRQaHlTYXNfdDsKKworLyogdmFsdWVzIGZvciB0aGUgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9IQkRfU0FTX0ZMQUdTX0ZSQU1FX1ZBTElEICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9IQkRfU0FTX0ZMQUdTX1NBVEFfRlJBTUUgICAgICAgICAoMHgwMSkKKworLyogdXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfIGRlZmluZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IKKyAqIHRoZSBOZWdvdGlhdGVkTGlua1JhdGUgZmllbGQgKi8KKwordHlwZWRlZiB1bmlvbiBfTVBJMl9FVkVOVF9IQkRfREVTQ1JJUFRPUiB7CisgICAgTVBJMl9FVkVOVF9IQkRfUEhZX1NBUyAgICAgIFNhczsKK30gTVBJMl9FVkVOVF9IQkRfREVTQ1JJUFRPUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0hCRF9ERVNDUklQVE9SLAorICBNcGkyRXZlbnRIYmREZXNjcmlwdG9yX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50SGJkRGVzY3JpcHRvcl90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX0hCRF9QSFkgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZTsgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBNUEkyX0VWRU5UX0hCRF9ERVNDUklQVE9SICAgRGVzY3JpcHRvcjsgICAgICAgICAvKiAweDA4ICovCit9IE1QSTJfRVZFTlRfREFUQV9IQkRfUEhZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9IQkRfUEhZLAorICBNcGkyRXZlbnREYXRhSGJkUGh5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YU1waTJFdmVudERhdGFIYmRQaHlfdDsKKworLyogdmFsdWVzIGZvciB0aGUgRGVzY3JpcHRvclR5cGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9IQkRfRFRfU0FTICAgICAgICAgICAgICAgKDB4MDEpCisKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgRXZlbnRBY2sgbWVzc2FnZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExMjYsMTMgKzExODEsMTcgQEAKICNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1RZUEVfTUFTSyAgICAgICAgICAgICgweEYwMDApCiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9UWVBFX1NBUyAgICAgICAgICAgICAoMHgyMDAwKQogCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX01BU0sgICAgICAgICAgICAoMHgwRjAwKQotI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9BICAgICAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MEYwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfQSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MEYwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfVEFSR0VUX0lOSVRJQVRPUl9TQ1NJICAgKDB4MDIwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfSVJfU0NTSSAgICAgICAgICAgICAgICAgKDB4MDcwMCkKKwogCiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfTUFTSyAgICAgICAgICAoMHgwMEZGKQogLyogU0FTICovCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfMjEwOF9TQVMgICAgICAoMHgwMDEwKQotI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXzIyMDhfU0FTICAgICAgKDB4MDAxMSkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8yMTA4X1NBUyAgICAgICgweDAwMTMpCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfMjIwOF9TQVMgICAgICAoMHgwMDE0KQogCiAvKiB1c2UgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF8gZGVmaW5lcyBmb3IgUHJvdG9jb2xGbGFncyBmaWVsZCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oCmluZGV4IDhhNDJiMTMuLjJkOGFlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgU2VyaWFsIEF0dGFjaGVkIFNDU0kgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKICAqICBDcmVhdGlvbiBEYXRlOiAgRmVicnVhcnkgOSwgMjAwNwogICoKLSAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjAyCisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4wMwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTE4LDYgKzE4LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgUmVxdWVzdC4KICAqICAxMC0wMi0wOCAgMDIuMDAuMDIgIEFkZGVkIFNldCBJT0MgUGFyYW1ldGVyIE9wZXJhdGlvbiB0byBTQVMgSU8gVW5pdCBDb250cm9sCiAgKiAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LgorICogIDEwLTI4LTA5ICAwMi4wMC4wMyAgQ2hhbmdlZCB0aGUgdHlwZSBvZiBTR0wgaW4gTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIE1QSTJfU0dFX0lPX1VOSU9OIHNpbmNlIGl0IHN1cHBvcnRzIGNoYWluZWQgU0dMcy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTE2MCw3ICsxNjIsNyBAQAogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgxNCAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGg7ICAgICAgICAgLyogMHgxOCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGSVNbMjBdOyAgICAgLyogMHgxQyAqLwotICAgIE1QSTJfU0lNUExFX1NHRV9VTklPTiAgIFNHTDsgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIE1QSTJfU0dFX0lPX1VOSU9OICAgICAgIFNHTDsgICAgICAgICAgICAgICAgLyogMHgyMCAqLwogfSBNUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVCwKICAgTXBpMlNhdGFQYXNzdGhyb3VnaFJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2F0YVBhc3N0aHJvdWdoUmVxdWVzdF90OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IDg5ZDAyNDAuLjg4ZTZlZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0xMDcsOCArMTA3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAic2V0dGluZyBsb2dnaW5nX2xldmVsKDB4JTA4eClcbiIsCi0JCQkJbXB0MnNhc19md2ZhdWx0X2RlYnVnKTsKKwlwcmludGsoS0VSTl9JTkZPICJzZXR0aW5nIGZ3ZmF1bHRfZGVidWcoJWQpXG4iLCBtcHQyc2FzX2Z3ZmF1bHRfZGVidWcpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW9jLCAmbXB0MnNhc19pb2NfbGlzdCwgbGlzdCkKIAkJaW9jLT5md2ZhdWx0X2RlYnVnID0gbXB0MnNhc19md2ZhdWx0X2RlYnVnOwogCXJldHVybiAwOwpAQCAtMTIyMiw2ICsxMjIxLDggQEAKIAl1MzIgbWVtYXBfc3o7CiAJdTMyIHBpb19zejsKIAlpbnQgaSwgciA9IDA7CisJdTY0IHBpb19jaGlwID0gMDsKKwl1NjQgY2hpcF9waHlzID0gMDsKIAogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwKIAkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwpAQCAtMTI1NSwxMiArMTI1NiwxMyBAQAogCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgewogCQkJaWYgKHBpb19zeikKIAkJCQljb250aW51ZTsKLQkJCWlvYy0+cGlvX2NoaXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisJCQlwaW9fY2hpcCA9ICh1NjQpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOwogCQkJcGlvX3N6ID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChtZW1hcF9zeikKIAkJCQljb250aW51ZTsKIAkJCWlvYy0+Y2hpcF9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOworCQkJY2hpcF9waHlzID0gKHU2NClpb2MtPmNoaXBfcGh5czsKIAkJCW1lbWFwX3N6ID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKIAkJCWlvYy0+Y2hpcCA9IGlvcmVtYXAoaW9jLT5jaGlwX3BoeXMsIG1lbWFwX3N6KTsKIAkJCWlmIChpb2MtPmNoaXAgPT0gTlVMTCkgewpAQCAtMTI4MCwxMCArMTI4MiwxMCBAQAogCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogSVJRICVkXG4iLAogCSAgICBpb2MtPm5hbWUsICAoKGlvYy0+bXNpeF9lbmFibGUpID8gIlBDSS1NU0ktWCBlbmFibGVkIiA6CiAJICAgICJJTy1BUElDIGVuYWJsZWQiKSwgaW9jLT5wY2lfaXJxKTsKLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9tZW0oMHglbHgpLCBtYXBwZWQoMHglcCksIHNpemUoJWQpXG4iLAotCSAgICBpb2MtPm5hbWUsIGlvYy0+Y2hpcF9waHlzLCBpb2MtPmNoaXAsIG1lbWFwX3N6KTsKLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9wb3J0KDB4JWx4KSwgc2l6ZSglZClcbiIsCi0JICAgIGlvYy0+bmFtZSwgaW9jLT5waW9fY2hpcCwgcGlvX3N6KTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9tZW0oMHglMDE2bGx4KSwgbWFwcGVkKDB4JXApLCBzaXplKCVkKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWNoaXBfcGh5cywgaW9jLT5jaGlwLCBtZW1hcF9zeik7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlvcG9ydCgweCUwMTZsbHgpLCBzaXplKCVkKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBpb19jaGlwLCBwaW9fc3opOwogCiAJcmV0dXJuIDA7CiAKQEAgLTM1NzMsNiArMzU3NSw4IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpb2MtPnJlc2V0X3dxKTsKIAorCWlvYy0+ZndmYXVsdF9kZWJ1ZyA9IG1wdDJzYXNfZndmYXVsdF9kZWJ1ZzsKKwogCS8qIGJhc2UgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCiAJbXV0ZXhfaW5pdCgmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOwogCWlvYy0+YmFzZV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKaW5kZXggYmI0ZjE0Ni4uZTE4YjA1NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCkBAIC02OSwxMCArNjksMTAgQEAKICNkZWZpbmUgTVBUMlNBU19EUklWRVJfTkFNRQkJIm1wdDJzYXMiCiAjZGVmaW5lIE1QVDJTQVNfQVVUSE9SCSJMU0kgQ29ycG9yYXRpb24gPERMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20+IgogI2RlZmluZSBNUFQyU0FTX0RFU0NSSVBUSU9OCSJMU0kgTVBUIEZ1c2lvbiBTQVMgMi4wIERldmljZSBEcml2ZXIiCi0jZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwMy4xMDAuMDMuMDAiCi0jZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMDMKKyNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjA0LjEwMC4wMS4wMCIKKyNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwNAogI2RlZmluZSBNUFQyU0FTX01JTk9SX1ZFUlNJT04JCTEwMAotI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTAzCisjZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDEKICNkZWZpbmUgTVBUMlNBU19SRUxFQVNFX1ZFUlNJT04JCTAwCiAKIC8qCkBAIC0zMjMsNiArMzIzLDcgQEAKICAqIEBkZXZpY2VfaW5mbzogYml0ZmllbGQgcHJvdmlkZXMgZGV0YWlsZWQgaW5mbyBhYm91dCB0aGUgaGlkZGVuIGNvbXBvbmVudHMKICAqIEBudW1fcGRzOiBudW1iZXIgb2YgaGlkZGVuIHJhaWQgY29tcG9uZW50cwogICogQHJlc3BvbmRpbmc6IHVzZWQgaW4gX3Njc2loX3JhaWRfZGV2aWNlX21hcmtfcmVzcG9uZGluZworICogQHBlcmNlbnRfY29tcGxldGU6IHJlc3luYyBwZXJjZW50IGNvbXBsZXRlCiAgKi8KIHN0cnVjdCBfcmFpZF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTMzNiw2ICszMzcsNyBAQAogCXUzMglkZXZpY2VfaW5mbzsKIAl1OAludW1fcGRzOwogCXU4CXJlc3BvbmRpbmc7CisJdTgJcGVyY2VudF9jb21wbGV0ZTsKIH07CiAKIC8qKgpAQCAtNDY0LDcgKzQ2Niw2IEBACiAgKiBAcGRldjogcGNpIHBkZXYgb2JqZWN0CiAgKiBAY2hpcDogbWVtb3J5IG1hcHBlZCByZWdpc3RlciBzcGFjZQogICogQGNoaXBfcGh5czogcGh5c2ljYWwgYWRkcnNzIHByaW9yIHRvIG1hcHBpbmcKLSAqIEBwaW9fY2hpcDogSS9PIG1hcHBlZCByZWdpc3RlciBzcGFjZQogICogQGxvZ2dpbmdfbGV2ZWw6IHNlZSBtcHQyc2FzX2RlYnVnLmgKICAqIEBmd2ZhdWx0X2RlYnVnOiBkZWJ1Z2luZyBGVyB0aW1lb3V0cwogICogQGlyX2Zpcm13YXJlOiBJUiBmaXJtd2FyZSBwcmVzZW50CkBAIC01ODcsOCArNTg4LDcgQEAKIAljaGFyCQl0bXBfc3RyaW5nW01QVF9TVFJJTkdfTEVOR1RIXTsKIAlzdHJ1Y3QgcGNpX2RldgkqcGRldjsKIAlNcGkyU3lzdGVtSW50ZXJmYWNlUmVnc190IF9faW9tZW0gKmNoaXA7Ci0JdW5zaWduZWQgbG9uZwljaGlwX3BoeXM7Ci0JdW5zaWduZWQgbG9uZwlwaW9fY2hpcDsKKwlyZXNvdXJjZV9zaXplX3QJY2hpcF9waHlzOwogCWludAkJbG9nZ2luZ19sZXZlbDsKIAlpbnQJCWZ3ZmF1bHRfZGVidWc7CiAJdTgJCWlyX2Zpcm13YXJlOwpAQCAtODUzLDYgKzg1Myw4IEBACiAgICAgKm1waV9yZXBseSwgTXBpMklPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAogICAgICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSwgdTE2IHN6KTsKK2ludCBtcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSwgdTE2IHN6KTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfaW9jX3BnOChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CiAgICAgKm1waV9yZXBseSwgTXBpMklPQ1BhZ2U4X3QgKmNvbmZpZ19wYWdlKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCmluZGV4IDU5NGEzODkuLjQxMWMyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwpAQCAtMzI0LDcgKzMyNCw5IEBACiAJCWlmIChyICE9IDApCiAJCQlnb3RvIG91dDsKIAkJaWYgKG1waV9yZXF1ZXN0LT5BY3Rpb24gPT0KLQkJICAgIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQpIHsKKwkJICAgIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQgfHwKKwkJICAgIG1waV9yZXF1ZXN0LT5BY3Rpb24gPT0KKwkJICAgIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX05WUkFNKSB7CiAJCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QtPlBhZ2VCdWZmZXJTR0UsCiAJCQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1dSSVRFX1NHTEZMQUdTIHwgbWVtLnN6LAogCQkJICAgIG1lbS5wYWdlX2RtYSk7CkBAIC04ODIsNyArODg0LDcgQEAKIH0KIAogLyoqCi0gKiBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEgLSBvYnRhaW4gc2FzIGlvdW5pdCBwYWdlIDAKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMSAtIG9idGFpbiBzYXMgaW91bml0IHBhZ2UgMQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKICAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCkBAIC05MDcsNyArOTA5LDcgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKIAltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOwogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCiAJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKQEAgLTkyMiw2ICs5MjQsNDkgQEAKIH0KIAogLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEgLSBzZW5kIHNhcyBpb3VuaXQgcGFnZSAxCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBzejogc2l6ZSBvZiBidWZmZXIgcGFzc2VkIGluIGNvbmZpZ19wYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBjYWxsIGNvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzIHByaW9yIHRvCisgKiB0aGlzIGZ1bmN0aW9uLCBzbyBlbm91Z2ggbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgY29uZmlnX3BhZ2UuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSwgdTE2IHN6KQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0lPX1VOSVQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UOworCV9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsIHN6KTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9OVlJBTTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwgc3opOworIG91dDoKKwlyZXR1cm4gcjsKK30KKworLyoqCiAgKiBtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwIC0gb2J0YWluIGV4cGFuZGVyIHBhZ2UgMAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCmluZGV4IDg0YTEyNGYuLmZhOWJmODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwpAQCAtODkxLDYgKzg5MSw3IEBACiAKICBpc3N1ZV9ob3N0X3Jlc2V0OgogCWlmIChpc3N1ZV9yZXNldCkgeworCQlyZXQgPSAtRU5PREFUQTsKIAkJaWYgKChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QgfHwKIAkJICAgIG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PQogCQkgICAgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpKSB7CkBAIC0yMjAyLDE0ICsyMjAzLDEwIEBACiAJa2FyZy5kYXRhX291dF9zaXplID0ga2FyZzMyLmRhdGFfb3V0X3NpemU7CiAJa2FyZy5tYXhfc2Vuc2VfYnl0ZXMgPSBrYXJnMzIubWF4X3NlbnNlX2J5dGVzOwogCWthcmcuZGF0YV9zZ2Vfb2Zmc2V0ID0ga2FyZzMyLmRhdGFfc2dlX29mZnNldDsKLQltZW1jcHkoJmthcmcucmVwbHlfZnJhbWVfYnVmX3B0ciwgJmthcmczMi5yZXBseV9mcmFtZV9idWZfcHRyLAotCSAgICBzaXplb2YodWludDMyX3QpKTsKLQltZW1jcHkoJmthcmcuZGF0YV9pbl9idWZfcHRyLCAma2FyZzMyLmRhdGFfaW5fYnVmX3B0ciwKLQkgICAgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JbWVtY3B5KCZrYXJnLmRhdGFfb3V0X2J1Zl9wdHIsICZrYXJnMzIuZGF0YV9vdXRfYnVmX3B0ciwKLQkgICAgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JbWVtY3B5KCZrYXJnLnNlbnNlX2RhdGFfcHRyLCAma2FyZzMyLnNlbnNlX2RhdGFfcHRyLAotCSAgICBzaXplb2YodWludDMyX3QpKTsKKwlrYXJnLnJlcGx5X2ZyYW1lX2J1Zl9wdHIgPSBjb21wYXRfcHRyKGthcmczMi5yZXBseV9mcmFtZV9idWZfcHRyKTsKKwlrYXJnLmRhdGFfaW5fYnVmX3B0ciA9IGNvbXBhdF9wdHIoa2FyZzMyLmRhdGFfaW5fYnVmX3B0cik7CisJa2FyZy5kYXRhX291dF9idWZfcHRyID0gY29tcGF0X3B0cihrYXJnMzIuZGF0YV9vdXRfYnVmX3B0cik7CisJa2FyZy5zZW5zZV9kYXRhX3B0ciA9IGNvbXBhdF9wdHIoa2FyZzMyLnNlbnNlX2RhdGFfcHRyKTsKIAlzdGF0ZSA9IChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyBOT05fQkxPQ0tJTkcgOiBCTE9DS0lORzsKIAlyZXR1cm4gX2N0bF9kb19tcHRfY29tbWFuZChpb2MsIGthcmcsICZ1YXJnLT5tZiwgc3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IGVmYWJlYTEuLmM3ZWMzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWRfY2xhc3MuaD4KIAogI2luY2x1ZGUgIm1wdDJzYXNfYmFzZS5oIgogCkBAIC0xMzMsNiArMTM0LDkgQEAKIAl2b2lkCQkJKmV2ZW50X2RhdGE7CiB9OwogCisvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCitzdGF0aWMgc3RydWN0IHJhaWRfdGVtcGxhdGUgKm1wdDJzYXNfcmFpZF90ZW1wbGF0ZTsKKwogLyoqCiAgKiBzdHJ1Y3QgX3Njc2lfaW9fdHJhbnNmZXIgLSBzY3NpIGlvIHRyYW5zZmVyCiAgKiBAaGFuZGxlOiBzYXMgZGV2aWNlIGhhbmRsZSAoYXNzaWduZWQgYnkgZmlybXdhcmUpCkBAIC0xMzA1LDcgKzEzMDksNiBAQAogCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OwogCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOwotCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc2FzX2RldmljZV9wcml2X2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NzaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKQEAgLTEzMzIsMjEgKzEzMzUsOCBAQAogCQlpZiAocmFpZF9kZXZpY2UpCiAJCQlyYWlkX2RldmljZS0+c2RldiA9IHNkZXY7IC8qIHJhaWQgaXMgc2luZ2xlIGx1biAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQl9IGVsc2UgewotCQkvKiBzZXQgVExSIGJpdCBmb3IgU1NQIGRldmljZXMgKi8KLQkJaWYgKCEoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgotCQkgICAgIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIpKQotCQkJZ290byBvdXQ7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAotCQkgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+c2FzX2FkZHJlc3MpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQlpZiAoc2FzX2RldmljZSAmJiBzYXNfZGV2aWNlLT5kZXZpY2VfaW5mbyAmCi0JCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUKQotCQkJc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzIHw9IE1QVF9ERVZJQ0VfVExSX09OOwogCX0KIAotIG91dDoKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQxOSw2ICsxNDA5LDE0MCBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9pc19yYWlkIC0gcmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyBkZXZpY2UgaXMgcmFpZCB2b2x1bWUKKyAqIEBkZXYgdGhlIGRldmljZSBzdHJ1Y3Qgb2JqZWN0CisgKi8KK3N0YXRpYyBpbnQKK19zY3NpaF9pc19yYWlkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCisJcmV0dXJuIChzZGV2LT5jaGFubmVsID09IFJBSURfQ0hBTk5FTCkgPyAxIDogMDsKK30KKworLyoqCisgKiBfc2NzaWhfZ2V0X3Jlc3luYyAtIGdldCByYWlkIHZvbHVtZSByZXN5bmMgcGVyY2VudCBjb21wbGV0ZQorICogQGRldiB0aGUgZGV2aWNlIHN0cnVjdCBvYmplY3QKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9nZXRfcmVzeW5jKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CisJc3RhdGljIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTXBpMlJhaWRWb2xQYWdlMF90IHZvbF9wZzA7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUzMiB2b2x1bWVfc3RhdHVzX2ZsYWdzOworCXU4IHBlcmNlbnRfY29tcGxldGUgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaWQoaW9jLCBzZGV2LT5pZCwKKwkgICAgc2Rldi0+Y2hhbm5lbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIXJhaWRfZGV2aWNlKQorCQlnb3RvIG91dDsKKworCWlmIChtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwgJnZvbF9wZzAsCisJICAgICBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJICAgICBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMF90KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCXZvbHVtZV9zdGF0dXNfZmxhZ3MgPSBsZTMyX3RvX2NwdSh2b2xfcGcwLlZvbHVtZVN0YXR1c0ZsYWdzKTsKKwlpZiAodm9sdW1lX3N0YXR1c19mbGFncyAmIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfUkVTWU5DX0lOX1BST0dSRVNTKQorCQlwZXJjZW50X2NvbXBsZXRlID0gcmFpZF9kZXZpY2UtPnBlcmNlbnRfY29tcGxldGU7Cisgb3V0OgorCXJhaWRfc2V0X3Jlc3luYyhtcHQyc2FzX3JhaWRfdGVtcGxhdGUsIGRldiwgcGVyY2VudF9jb21wbGV0ZSk7Cit9CisKKy8qKgorICogX3Njc2loX2dldF9zdGF0ZSAtIGdldCByYWlkIHZvbHVtZSBsZXZlbAorICogQGRldiB0aGUgZGV2aWNlIHN0cnVjdCBvYmplY3QKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9nZXRfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKKwlzdGF0aWMgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlNcGkyUmFpZFZvbFBhZ2UwX3Qgdm9sX3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTMyIHZvbHN0YXRlOworCWVudW0gcmFpZF9zdGF0ZSBzdGF0ZSA9IFJBSURfU1RBVEVfVU5LTk9XTjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2lkKGlvYywgc2Rldi0+aWQsCisJICAgIHNkZXYtPmNoYW5uZWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaWYgKCFyYWlkX2RldmljZSkKKwkJZ290byBvdXQ7CisKKwlpZiAobXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMChpb2MsICZtcGlfcmVwbHksICZ2b2xfcGcwLAorCSAgICAgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fSEFORExFLCByYWlkX2RldmljZS0+aGFuZGxlLAorCSAgICAgc2l6ZW9mKE1waTJSYWlkVm9sUGFnZTBfdCkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisKKwl2b2xzdGF0ZSA9IGxlMzJfdG9fY3B1KHZvbF9wZzAuVm9sdW1lU3RhdHVzRmxhZ3MpOworCWlmICh2b2xzdGF0ZSAmIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfUkVTWU5DX0lOX1BST0dSRVNTKSB7CisJCXN0YXRlID0gUkFJRF9TVEFURV9SRVNZTkNJTkc7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAodm9sX3BnMC5Wb2x1bWVTdGF0ZSkgeworCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9PUFRJTUFMOgorCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9PTkxJTkU6CisJCXN0YXRlID0gUkFJRF9TVEFURV9BQ1RJVkU7CisJCWJyZWFrOworCWNhc2UgIE1QSTJfUkFJRF9WT0xfU1RBVEVfREVHUkFERUQ6CisJCXN0YXRlID0gUkFJRF9TVEFURV9ERUdSQURFRDsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX0ZBSUxFRDoKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfTUlTU0lORzoKKwkJc3RhdGUgPSBSQUlEX1NUQVRFX09GRkxJTkU7CisJCWJyZWFrOworCX0KKyBvdXQ6CisJcmFpZF9zZXRfc3RhdGUobXB0MnNhc19yYWlkX3RlbXBsYXRlLCBkZXYsIHN0YXRlKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2V0X2xldmVsIC0gc2V0IHJhaWQgbGV2ZWwKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqIEByYWlkX2RldmljZTogcmFpZF9kZXZpY2Ugb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2V0X2xldmVsKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UpCit7CisJZW51bSByYWlkX2xldmVsIGxldmVsID0gUkFJRF9MRVZFTF9VTktOT1dOOworCisJc3dpdGNoIChyYWlkX2RldmljZS0+dm9sdW1lX3R5cGUpIHsKKwljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMDoKKwkJbGV2ZWwgPSBSQUlEX0xFVkVMXzA7CisJCWJyZWFrOworCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxMDoKKwkJbGV2ZWwgPSBSQUlEX0xFVkVMXzEwOworCQlicmVhazsKKwljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMUU6CisJCWxldmVsID0gUkFJRF9MRVZFTF8xRTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDE6CisJCWxldmVsID0gUkFJRF9MRVZFTF8xOworCQlicmVhazsKKwl9CisKKwlyYWlkX3NldF9sZXZlbChtcHQyc2FzX3JhaWRfdGVtcGxhdGUsICZzZGV2LT5zZGV2X2dlbmRldiwgbGV2ZWwpOworfQorCisvKioKICAqIF9zY3NpaF9nZXRfdm9sdW1lX2NhcGFiaWxpdGllcyAtIHZvbHVtZSBjYXBhYmlsaXRpZXMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNhc19kZXZpY2U6IHRoZSByYWlkX2RldmljZSBvYmplY3QKQEAgLTE0NzksNiArMTYwMywzMiBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9lbmFibGVfdGxyIC0gc2V0dGluZyBUTFIgZmxhZ3MKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIEVuYWJsaW5nIFRyYW5zYWN0aW9uIExheWVyIFJldHJpZXMgZm9yIHRhcGUgZGV2aWNlcyB3aGVuCisgKiB2cGQgcGFnZSAweDkwIGlzIHByZXNlbnQKKyAqCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZW5hYmxlX3RscihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwkvKiBvbmx5IGZvciBUQVBFICovCisJaWYgKHNkZXYtPnR5cGUgIT0gVFlQRV9UQVBFKQorCQlyZXR1cm47CisKKwlpZiAoIShpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIpKQorCQlyZXR1cm47CisKKwlzYXNfZW5hYmxlX3RscihzZGV2KTsKKwlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJUTFIgJXNcbiIsCisJICAgIHNhc19pc190bHJfZW5hYmxlZChzZGV2KSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpOworCXJldHVybjsKKworfQorCisvKioKICAqIF9zY3NpaF9zbGF2ZV9jb25maWd1cmUgLSBkZXZpY2UgY29uZmlndXJlIHJvdXRpbmUuCiAgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CiAgKgpAQCAtMTU3NCw2ICsxNzI0LDggQEAKIAkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmFpZF9kZXZpY2UtPnd3aWQsCiAJCSAgICByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOwogCQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCS8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTYyMSw4ICsxNzczLDEwIEBACiAKIAlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CiAKLQlpZiAoc3NwX3RhcmdldCkKKwlpZiAoc3NwX3RhcmdldCkgewogCQlzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzZGV2KTsKKwkJX3Njc2loX2VuYWJsZV90bHIoaW9jLCBzZGV2KTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5MDgsOCArMzA2Miw5IEBACiAKIAl9IGVsc2UKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9TSU1QTEVROwotCi0JaWYgKChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX1RMUl9PTikpCisJLyogTWFrZSBzdXJlIERldmljZSBpcyBub3QgcmFpZCB2b2x1bWUgKi8KKwlpZiAoIV9zY3NpaF9pc19yYWlkKCZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2KSAmJgorCSAgICBzYXNfaXNfdGxyX2VuYWJsZWQoc2NtZC0+ZGV2aWNlKSkKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9UTFJfT047CiAKIAlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhpb2MsIGlvYy0+c2NzaV9pb19jYl9pZHgsIHNjbWQpOwpAQCAtMzI5OCwxMCArMzQ1MywxMiBAQAogCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZUluZm8pICYgMHhGRjsKIAlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhLT50bHJfc25vb3BfY2hlY2spIHsKIAkJc2FzX2RldmljZV9wcml2X2RhdGEtPnRscl9zbm9vcF9jaGVjaysrOwotCQlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSAmJgotCQkgICAgcmVzcG9uc2VfY29kZSA9PSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU5WQUxJRF9GUkFNRSkKLQkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmPQotCQkJICAgIH5NUFRfREVWSUNFX1RMUl9PTjsKKwlpZiAoIV9zY3NpaF9pc19yYWlkKCZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2KSAmJgorCQlzYXNfaXNfdGxyX2VuYWJsZWQoc2NtZC0+ZGV2aWNlKSAmJgorCQkgICAgcmVzcG9uc2VfY29kZSA9PSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU5WQUxJRF9GUkFNRSkgeworCQkJc2FzX2Rpc2FibGVfdGxyKHNjbWQtPmRldmljZSk7CisJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNjbWQtPmRldmljZSwgIlRMUiBkaXNhYmxlZFxuIik7CisJCX0KIAl9CiAKIAl4ZmVyX2NudCA9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VHJhbnNmZXJDb3VudCk7CkBAIC01MTcwLDExICs1MzI3LDMzIEBACiBfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKKwlNcGkyRXZlbnREYXRhSXJPcGVyYXRpb25TdGF0dXNfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOworCXN0YXRpYyBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBoYW5kbGU7CisKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKIAkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50X2RlYnVnKGlvYywKLQkJICAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCSAgICAgZXZlbnRfZGF0YSk7CiAjZW5kaWYKKworCS8qIGNvZGUgYWRkZWQgZm9yIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwlpZiAoZXZlbnRfZGF0YS0+UkFJRE9wZXJhdGlvbiA9PSBNUEkyX0VWRU5UX0lSX1JBSURPUF9SRVNZTkMpIHsKKworCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5Wb2xEZXZIYW5kbGUpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoIXJhaWRfZGV2aWNlKQorCQkJcmV0dXJuOworCisJCWlmIChldmVudF9kYXRhLT5SQUlET3BlcmF0aW9uID09IE1QSTJfRVZFTlRfSVJfUkFJRE9QX1JFU1lOQykKKwkJCXJhaWRfZGV2aWNlLT5wZXJjZW50X2NvbXBsZXRlID0KKwkJCSAgICBldmVudF9kYXRhLT5QZXJjZW50Q29tcGxldGU7CisJfQogfQogCiAvKioKQEAgLTU5OTgsNiArNjE3Nyw4IEBACiAJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0OwogCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKIAlzdHJ1Y3QgX3Nhc19ub2RlICpleHBhbmRlcl9zaWJsaW5nOworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlLCAqbmV4dDsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3cTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC02MDExLDYgKzYxOTIsMjEgQEAKIAlpZiAod3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHdxKTsKIAorCS8qIHJlbGVhc2UgYWxsIHRoZSB2b2x1bWVzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJhaWRfZGV2aWNlLCBuZXh0LCAmaW9jLT5yYWlkX2RldmljZV9saXN0LAorCSAgICBsaXN0KSB7CisJCWlmIChyYWlkX2RldmljZS0+c3RhcmdldCkgeworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPQorCQkJICAgIHJhaWRfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5kZWxldGVkID0gMTsKKwkJCXNjc2lfcmVtb3ZlX3RhcmdldCgmcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmRldik7CisJCX0KKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlbW92aW5nIGhhbmRsZSgweCUwNHgpLCB3d2lkIgorCQkgICAgIigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsICByYWlkX2RldmljZS0+aGFuZGxlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmFpZF9kZXZpY2UtPnd3aWQpOworCQlfc2NzaWhfcmFpZF9kZXZpY2VfcmVtb3ZlKGlvYywgcmFpZF9kZXZpY2UpOworCX0KKwogCS8qIGZyZWUgcG9ydHMgYXR0YWNoZWQgdG8gdGhlIHNhc19ob3N0ICovCiAgcmV0cnlfYWdhaW46CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsCkBAIC02MzczLDYgKzY1NjksMTMgQEAKICNlbmRpZgogfTsKIAorLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworc3RhdGljIHN0cnVjdCByYWlkX2Z1bmN0aW9uX3RlbXBsYXRlIG1wdDJzYXNfcmFpZF9mdW5jdGlvbnMgPSB7CisJLmNvb2tpZQkJPSAmc2NzaWhfZHJpdmVyX3RlbXBsYXRlLAorCS5pc19yYWlkCT0gX3Njc2loX2lzX3JhaWQsCisJLmdldF9yZXN5bmMJPSBfc2NzaWhfZ2V0X3Jlc3luYywKKwkuZ2V0X3N0YXRlCT0gX3Njc2loX2dldF9zdGF0ZSwKK307CiAKIC8qKgogICogX3Njc2loX2luaXQgLSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzIGRyaXZlci4KQEAgLTYzOTIsNiArNjU5NSwxMiBAQAogCSAgICBzYXNfYXR0YWNoX3RyYW5zcG9ydCgmbXB0MnNhc190cmFuc3BvcnRfZnVuY3Rpb25zKTsKIAlpZiAoIW1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKQogCQlyZXR1cm4gLUVOT0RFVjsKKwkvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCisJbXB0MnNhc19yYWlkX3RlbXBsYXRlID0gcmFpZF9jbGFzc19hdHRhY2goJm1wdDJzYXNfcmFpZF9mdW5jdGlvbnMpOworCWlmICghbXB0MnNhc19yYWlkX3RlbXBsYXRlKSB7CisJCXNhc19yZWxlYXNlX3RyYW5zcG9ydChtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCW1wdDJzYXNfYmFzZV9pbml0aWFsaXplX2NhbGxiYWNrX2hhbmRsZXIoKTsKIApAQCAtNjQyNiw4ICs2NjM1LDExIEBACiAJbXB0MnNhc19jdGxfaW5pdCgpOwogCiAJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzY3NpaF9kcml2ZXIpOwotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IpIHsKKwkJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCQlyYWlkX2NsYXNzX3JlbGVhc2UobXB0MnNhc19yYWlkX3RlbXBsYXRlKTsKIAkJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC02NDQ1LDcgKzY2NTcsOCBAQAogCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzY3NpaF9kcml2ZXIpOwogCi0Jc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwltcHQyc2FzX2N0bF9leGl0KCk7CisKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHNjc2lfaW9fY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX2NiX2lkeCk7CiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihiYXNlX2NiX2lkeCk7CkBAIC02NDU3LDcgKzY2NzAsMTAgQEAKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX3RyX2NiX2lkeCk7CiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV9zYXNfY29udHJvbF9jYl9pZHgpOwogCi0JbXB0MnNhc19jdGxfZXhpdCgpOworCS8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwlyYWlkX2NsYXNzX3JlbGVhc2UobXB0MnNhc19yYWlkX3RlbXBsYXRlKTsKKwlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCiB9CiAKIG1vZHVsZV9pbml0KF9zY3NpaF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCmluZGV4IDNhODI4NzIuLjc4OWY5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYwpAQCAtODU1LDYgKzg1NSwxNyBAQAogCXJldHVybiBzaG9zdF9wcml2KHNob3N0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBfc2FzX3BoeSAqCitfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHNhc19waHkgKnBoeSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXM7IGkrKykKKwkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ID09IHBoeSkKKwkJCXJldHVybigmaW9jLT5zYXNfaGJhLnBoeVtpXSk7CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qKgogICogX3RyYW5zcG9ydF9nZXRfbGlua2Vycm9ycyAtCiAgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKQEAgLTg3MCwxNCArODgxLDggQEAKIAlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OwogCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKIAlNcGkyU2FzUGh5UGFnZTFfdCBwaHlfcGcxOwotCWludCBpOwogCi0JZm9yIChpID0gMCwgbXB0MnNhc19waHkgPSBOVUxMOyBpIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzICYmCi0JICAgICFtcHQyc2FzX3BoeTsgaSsrKSB7Ci0JCWlmIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeSAhPSBwaHkpCi0JCQljb250aW51ZTsKLQkJbXB0MnNhc19waHkgPSAmaW9jLT5zYXNfaGJhLnBoeVtpXTsKLQl9CisJbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKIAogCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk3MSwxNCArOTc2LDggQEAKIAlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OwogCU1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCBtcGlfcmVwbHk7CiAJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7Ci0JaW50IGk7CiAKLQlmb3IgKGkgPSAwLCBtcHQyc2FzX3BoeSA9IE5VTEw7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMgJiYKLQkgICAgIW1wdDJzYXNfcGh5OyBpKyspIHsKLQkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ICE9IHBoeSkKLQkJCWNvbnRpbnVlOwotCQltcHQyc2FzX3BoeSA9ICZpb2MtPnNhc19oYmEucGh5W2ldOwotCX0KKwltcHQyc2FzX3BoeSA9IF90cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoaW9jLCBwaHkpOwogCiAJaWYgKCFtcHQyc2FzX3BoeSkgLyogdGhpcyBwaHkgbm90IG9uIHNhc19ob3N0ICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAwNiw2ICsxMDA1LDE3MyBAQAogfQogCiAvKioKKyAqIF90cmFuc3BvcnRfcGh5X2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIHBoeXMKKyAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdAorICogQGVuYWJsZTogZW5hYmxlIHBoeSB3aGVuIHRydWUKKyAqCisgKiBPbmx5IHN1cHBvcnQgc2FzX2hvc3QgZGlyZWN0IGF0dGFjaGVkIHBoeXMuCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfdHJhbnNwb3J0X3BoeV9lbmFibGUoc3RydWN0IHNhc19waHkgKnBoeSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBwaHlfdG9faW9jKHBoeSk7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKwlNcGkyU2FzSU9Vbml0UGFnZTFfdCAqc2FzX2lvdW5pdF9wZzEgPSBOVUxMOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MTYgaW9jX3N0YXR1czsKKwl1MTYgc3o7CisJaW50IHJjID0gMDsKKworCW1wdDJzYXNfcGh5ID0gX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShpb2MsIHBoeSk7CisKKwlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzYXNfaW91bml0IHBhZ2UgMSAqLworCXN6ID0gb2Zmc2V0b2YoTXBpMlNhc0lPVW5pdFBhZ2UxX3QsIFBoeURhdGEpICsgKGlvYy0+c2FzX2hiYS5udW1fcGh5cyAqCisJICAgIHNpemVvZihNcGkyU2FzSU9Vbml0MVBoeURhdGFfdCkpOworCXNhc19pb3VuaXRfcGcxID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXNfaW91bml0X3BnMSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LAorCSAgICBzYXNfaW91bml0X3BnMSwgc3opKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKwlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGVuYWJsZSkKKwkJc2FzX2lvdW5pdF9wZzEtPlBoeURhdGFbbXB0MnNhc19waHktPnBoeV9pZF0uUGh5RmxhZ3MKKwkJICAgICY9IH5NUEkyX1NBU0lPVU5JVDFfUEhZRkxBR1NfUEhZX0RJU0FCTEU7CisJZWxzZQorCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVttcHQyc2FzX3BoeS0+cGh5X2lkXS5QaHlGbGFncworCQkgICAgfD0gTVBJMl9TQVNJT1VOSVQxX1BIWUZMQUdTX1BIWV9ESVNBQkxFOworCisJbXB0MnNhc19jb25maWdfc2V0X3Nhc19pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgc2FzX2lvdW5pdF9wZzEsIHN6KTsKKworIG91dDoKKwlrZnJlZShzYXNfaW91bml0X3BnMSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF90cmFuc3BvcnRfcGh5X3NwZWVkIC0gc2V0IHBoeSBtaW4vbWF4IGxpbmsgcmF0ZXMKKyAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdAorICogQHJhdGVzOiByYXRlcyBkZWZpbmVkIGluIHNhc19waHlfbGlua3JhdGVzCisgKgorICogT25seSBzdXBwb3J0IHNhc19ob3N0IGRpcmVjdCBhdHRhY2hlZCBwaHlzLgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX3RyYW5zcG9ydF9waHlfc3BlZWQoc3RydWN0IHNhc19waHkgKnBoeSwgc3RydWN0IHNhc19waHlfbGlua3JhdGVzICpyYXRlcykKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBwaHlfdG9faW9jKHBoeSk7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKwlNcGkyU2FzSU9Vbml0UGFnZTFfdCAqc2FzX2lvdW5pdF9wZzEgPSBOVUxMOworCU1waTJTYXNQaHlQYWdlMF90IHBoeV9wZzA7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUxNiBpb2Nfc3RhdHVzOworCXUxNiBzejsKKwlpbnQgaTsKKwlpbnQgcmMgPSAwOworCisJbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKKworCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcmF0ZXMtPm1pbmltdW1fbGlua3JhdGUpCisJCXJhdGVzLT5taW5pbXVtX2xpbmtyYXRlID0gcGh5LT5taW5pbXVtX2xpbmtyYXRlOworCWVsc2UgaWYgKHJhdGVzLT5taW5pbXVtX2xpbmtyYXRlIDwgcGh5LT5taW5pbXVtX2xpbmtyYXRlX2h3KQorCQlyYXRlcy0+bWluaW11bV9saW5rcmF0ZSA9IHBoeS0+bWluaW11bV9saW5rcmF0ZV9odzsKKworCWlmICghcmF0ZXMtPm1heGltdW1fbGlua3JhdGUpCisJCXJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlID0gcGh5LT5tYXhpbXVtX2xpbmtyYXRlOworCWVsc2UgaWYgKHJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlID4gcGh5LT5tYXhpbXVtX2xpbmtyYXRlX2h3KQorCQlyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSA9IHBoeS0+bWF4aW11bV9saW5rcmF0ZV9odzsKKworCS8qIHNhc19pb3VuaXQgcGFnZSAxICovCisJc3ogPSBvZmZzZXRvZihNcGkyU2FzSU9Vbml0UGFnZTFfdCwgUGh5RGF0YSkgKyAoaW9jLT5zYXNfaGJhLm51bV9waHlzICoKKwkgICAgc2l6ZW9mKE1waTJTYXNJT1VuaXQxUGh5RGF0YV90KSk7CisJc2FzX2lvdW5pdF9wZzEgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19pb3VuaXRfcGcxKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksCisJICAgIHNhc19pb3VuaXRfcGcxLCBzeikpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzOyBpKyspIHsKKwkJaWYgKG1wdDJzYXNfcGh5LT5waHlfaWQgIT0gaSkgeworCQkJc2FzX2lvdW5pdF9wZzEtPlBoeURhdGFbaV0uTWF4TWluTGlua1JhdGUgPQorCQkJICAgIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeS0+bWluaW11bV9saW5rcmF0ZSArCisJCQkgICAgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5LT5tYXhpbXVtX2xpbmtyYXRlIDw8IDQpKTsKKwkJfSBlbHNlIHsKKwkJCXNhc19pb3VuaXRfcGcxLT5QaHlEYXRhW2ldLk1heE1pbkxpbmtSYXRlID0KKwkJCSAgICAocmF0ZXMtPm1pbmltdW1fbGlua3JhdGUgKworCQkJICAgIChyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSA8PCA0KSk7CisJCX0KKwl9CisKKwlpZiAobXB0MnNhc19jb25maWdfc2V0X3Nhc19pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgc2FzX2lvdW5pdF9wZzEsCisJICAgIHN6KSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCS8qIGxpbmsgcmVzZXQgKi8KKwlfdHJhbnNwb3J0X3BoeV9yZXNldChwaHksIDApOworCisJLyogcmVhZCBwaHkgcGFnZSAwLCB0aGVuIHVwZGF0ZSB0aGUgcmF0ZXMgaW4gdGhlIHNhcyB0cmFuc3BvcnQgcGh5ICovCisJaWYgKCFtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMChpb2MsICZtcGlfcmVwbHksICZwaHlfcGcwLAorCSAgICBtcHQyc2FzX3BoeS0+cGh5X2lkKSkgeworCQlwaHktPm1pbmltdW1fbGlua3JhdGUgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkJICAgIHBoeV9wZzAuUHJvZ3JhbW1lZExpbmtSYXRlICYgTVBJMl9TQVNfUFJBVEVfTUlOX1JBVEVfTUFTSyk7CisJCXBoeS0+bWF4aW11bV9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCQkgICAgcGh5X3BnMC5Qcm9ncmFtbWVkTGlua1JhdGUgPj4gNCk7CisJCXBoeS0+bmVnb3RpYXRlZF9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCQkgICAgcGh5X3BnMC5OZWdvdGlhdGVkTGlua1JhdGUgJgorCQkgICAgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9NQVNLX1BIWVNJQ0FMKTsKKwl9CisKKyBvdXQ6CisJa2ZyZWUoc2FzX2lvdW5pdF9wZzEpOworCXJldHVybiByYzsKK30KKworCisvKioKICAqIF90cmFuc3BvcnRfc21wX2hhbmRsZXIgLSB0cmFuc3BvcnQgcG9ydGFsIGZvciBzbXAgcGFzc3RocnUKICAqIEBzaG9zdDogc2hvc3Qgb2JqZWN0CiAgKiBAcnBoeTogc2FzIHRyYW5zcG9ydCBycGh5IG9iamVjdApAQCAtMTIwNyw2ICsxMzczLDggQEAKIAkuZ2V0X2VuY2xvc3VyZV9pZGVudGlmaWVyID0gX3RyYW5zcG9ydF9nZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIsCiAJLmdldF9iYXlfaWRlbnRpZmllcgk9IF90cmFuc3BvcnRfZ2V0X2JheV9pZGVudGlmaWVyLAogCS5waHlfcmVzZXQJCT0gX3RyYW5zcG9ydF9waHlfcmVzZXQsCisJLnBoeV9lbmFibGUJCT0gX3RyYW5zcG9ydF9waHlfZW5hYmxlLAorCS5zZXRfcGh5X3NwZWVkCQk9IF90cmFuc3BvcnRfcGh5X3NwZWVkLAogCS5zbXBfaGFuZGxlcgkJPSBfdHJhbnNwb3J0X3NtcF9oYW5kbGVyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCmluZGV4IGMyZjEwMzIuLmY4MGMxZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCkBAIC02NTQsNyArNjU0LDcgQEAKIAl9CiAJY2hpcCA9ICZwbTgwMDFfY2hpcHNbZW50LT5kcml2ZXJfZGF0YV07CiAJU0hPU1RfVE9fU0FTX0hBKHNob3N0KSA9Ci0JCWtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzYXNfaGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYXNfaGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFTSE9TVF9UT19TQVNfSEEoc2hvc3QpKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfaG9zdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCmluZGV4IDgzNzFkOTEuLjQ5YWM0MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTEyODAuYwpAQCAtMTY0MCw4ICsxNjQwLDEwIEBACiAJdWludDE2X3QgbWJbTUFJTEJPWF9SRUdJU1RFUl9DT1VOVF0sIGk7CiAJaW50IGVycjsKIAorCXNwaW5fdW5sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgcWwxMjgwX2JvYXJkX3RibFtoYS0+ZGV2bnVtXS5md25hbWUsCiAJCQkgICAgICAgJmhhLT5wZGV2LT5kZXYpOworCXNwaW5fbG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBsb2FkIGltYWdlIFwiJXNcIiBlcnIgJWRcbiIsCiAJCSAgICAgICBxbDEyODBfYm9hcmRfdGJsW2hhLT5kZXZudW1dLmZ3bmFtZSwgZXJyKTsKQEAgLTE2OTksOCArMTcwMSwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKICNlbmRpZgogCisJc3Bpbl91bmxvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBxbDEyODBfYm9hcmRfdGJsW2hhLT5kZXZudW1dLmZ3bmFtZSwKIAkJCSAgICAgICAmaGEtPnBkZXYtPmRldik7CisJc3Bpbl9sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGxvYWQgaW1hZ2UgXCIlc1wiIGVyciAlZFxuIiwKIAkJICAgICAgIHFsMTI4MF9ib2FyZF90YmxbaGEtPmRldm51bV0uZnduYW1lLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggM2E5ZjViMi4uOTBkMWUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCkBAIC0xMSw3ICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogc3RhdGljIGludCBxbGEyNHh4X3Zwb3J0X2Rpc2FibGUoc3RydWN0IGZjX3Zwb3J0ICosIGJvb2wpOwotCitzdGF0aWMgaW50IHFsYTg0eHhfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICosIHN0cnVjdCBtc2dfZWNob19sYiAqLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKK2ludCBxbGE4NHh4X3Jlc2V0X2NoaXAoc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90LCB1aW50MTZfdCAqKTsKK3N0YXRpYyBpbnQgcWxhODR4eF9tZ210X2NtZChzY3NpX3FsYV9ob3N0X3QgKiwgc3RydWN0IG1zZ19lY2hvX2xiICosIHN0cnVjdCBmY19ic2dfam9iICopOwogLyogU1lTRlMgYXR0cmlidXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHNzaXplX3QKQEAgLTExNjgsNiArMTE3MCwyOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAorcWxhMjR4eF84NHh4X2Z3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcnZhbCA9IFFMQV9TVUNDRVNTOworCXVpbnQxNl90IHN0YXR1c1syXSA9IHswLCAwfTsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlpZiAoSVNfUUxBODRYWChoYSkgJiYgaGEtPmNzODR4eCkgeworCQlpZiAoaGEtPmNzODR4eC0+b3BfZndfdmVyc2lvbiA9PSAwKSB7CisJCQlydmFsID0gcWxhODR4eF92ZXJpZnlfY2hpcCh2aGEsIHN0YXR1cyk7CisJfQorCisJaWYgKChydmFsID09IFFMQV9TVUNDRVNTKSAmJiAoc3RhdHVzWzBdID09IDApKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKKwkJCSh1aW50MzJfdCloYS0+Y3M4NHh4LT5vcF9md192ZXJzaW9uKTsKKwl9CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJcbiIpOworfQorCitzdGF0aWMgc3NpemVfdAogcWxhMngwMF9tcGlfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAgICAgY2hhciAqYnVmKQogewpAQCAtMTI4MSw2ICsxMzA1LDggQEAKIAkJICAgcWxhMngwMF9vcHRyb21fZmNvZGVfdmVyc2lvbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihvcHRyb21fZndfdmVyc2lvbiwgU19JUlVHTywgcWxhMngwMF9vcHRyb21fZndfdmVyc2lvbl9zaG93LAogCQkgICBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUig4NHh4X2Z3X3ZlcnNpb24sIFNfSVJVR08sIHFsYTI0eHhfODR4eF9md192ZXJzaW9uX3Nob3csCisJCSAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHRvdGFsX2lzcF9hYm9ydHMsIFNfSVJVR08sIHFsYTJ4MDBfdG90YWxfaXNwX2Fib3J0c19zaG93LAogCQkgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihtcGlfdmVyc2lvbiwgU19JUlVHTywgcWxhMngwMF9tcGlfdmVyc2lvbl9zaG93LCBOVUxMKTsKQEAgLTEzMTAsNiArMTMzNiw3IEBACiAJJmRldl9hdHRyX29wdHJvbV9lZmlfdmVyc2lvbiwKIAkmZGV2X2F0dHJfb3B0cm9tX2Zjb2RlX3ZlcnNpb24sCiAJJmRldl9hdHRyX29wdHJvbV9md192ZXJzaW9uLAorCSZkZXZfYXR0cl84NHh4X2Z3X3ZlcnNpb24sCiAJJmRldl9hdHRyX3RvdGFsX2lzcF9hYm9ydHMsCiAJJmRldl9hdHRyX21waV92ZXJzaW9uLAogCSZkZXZfYXR0cl9waHlfdmVyc2lvbiwKQEAgLTE1MDQsOCArMTUzMSw2IEBACiAJCWZjcG9ydC0+dmhhLT5ody0+aXNwX29wcy0+ZmFicmljX2xvZ291dChmY3BvcnQtPnZoYSwKIAkJCWZjcG9ydC0+bG9vcF9pZCwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLAogCQkJZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEpOwotCi0JcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY3BvcnQpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNzk1LDYgKzE4MjAsNTgxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEJTRyBzdXBwb3J0IGZvciBFTFMvQ1QgcGFzcyB0aHJvdWdoICovCitpbmxpbmUgc3JiX3QgKgorcWxhMngwMF9nZXRfY3R4X2JzZ19zcChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsIHNpemVfdCBzaXplKQoreworCXNyYl90ICpzcDsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzdHJ1Y3Qgc3JiX2JzZ19jdHggKmN0eDsKKworCXNwID0gbWVtcG9vbF9hbGxvYyhoYS0+c3JiX21lbXBvb2wsIEdGUF9LRVJORUwpOworCWlmICghc3ApCisJCWdvdG8gZG9uZTsKKwljdHggPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghY3R4KSB7CisJCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwkJZ290byBkb25lOworCX0KKworCW1lbXNldChzcCwgMCwgc2l6ZW9mKCpzcCkpOworCXNwLT5mY3BvcnQgPSBmY3BvcnQ7CisJc3AtPmN0eCA9IGN0eDsKK2RvbmU6CisJcmV0dXJuIHNwOworfQorCitzdGF0aWMgaW50CitxbGEyeDAwX3Byb2Nlc3NfZWxzKHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CisJZmNfcG9ydF90ICpmY3BvcnQ7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhOworCXNyYl90ICpzcDsKKwljb25zdCBjaGFyICp0eXBlOworCWludCByZXFfc2dfY250LCByc3Bfc2dfY250OworCWludCBydmFsID0gIChEUklWRVJfRVJST1IgPDwgMTYpOworCXVpbnQxNl90IG5leHRsaWQgPSAwOworCXN0cnVjdCBzcmJfYnNnICplbHM7CisKKwkvKiAgTXVsdGlwbGUgU0cncyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgRUxTIHJlcXVlc3RzICovCisgICAgICAgIGlmIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250ID4gMSB8fAorCQlic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCA+IDEpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KKwkJICAgICJtdWx0aXBsZSBTRydzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBFTFMgcmVxdWVzdHMiCisJCSAgICAiIFtyZXF1ZXN0X3NnX2NudDogJXggcmVwbHlfc2dfY250OiAleF1cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKTsKKwkJcnZhbCA9IC1FUEVSTTsKKwkJZ290byBkb25lOworICAgICAgICB9CisKKwkvKiBFTFMgcmVxdWVzdCBmb3IgcnBvcnQgKi8KKwlpZiAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfUlBUX0VMUykgeworCQlycG9ydCA9IGJzZ19qb2ItPnJwb3J0OworCQlmY3BvcnQgPSAqKGZjX3BvcnRfdCAqKikgcnBvcnQtPmRkX2RhdGE7CisJCWhvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CisJCXZoYSA9IHNob3N0X3ByaXYoaG9zdCk7CisJCWhhID0gdmhhLT5odzsKKwkJdHlwZSA9ICJGQ19CU0dfUlBUX0VMUyI7CisKKwkJLyogbWFrZSBzdXJlIHRoZSBycG9ydCBpcyBsb2dnZWQgaW4sCisJCSAqIGlmIG5vdCBwZXJmb3JtIGZhYnJpYyBsb2dpbgorCQkgKi8KKwkJaWYgKHFsYTJ4MDBfZmFicmljX2xvZ2luKHZoYSwgZmNwb3J0LCAmbmV4dGxpZCkpIHsKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgImZhaWxlZCB0byBsb2dpbiBwb3J0ICUwNlggZm9yIEVMUyBwYXNzdGhydVxuIiwKKwkJCSAgICBmY3BvcnQtPmRfaWQuYjI0KSk7CisJCQlydmFsID0gLUVJTzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWhvc3QgPSBic2dfam9iLT5zaG9zdDsKKwkJdmhhID0gc2hvc3RfcHJpdihob3N0KTsKKwkJaGEgPSB2aGEtPmh3OworCQl0eXBlID0gIkZDX0JTR19IU1RfRUxTX05PTE9HSU4iOworCisJCS8qIEFsbG9jYXRlIGEgZHVtbXkgZmNwb3J0IHN0cnVjdHVyZSwgc2luY2UgZnVuY3Rpb25zCisJCSAqIHByZXBhcmluZyB0aGUgSU9DQiBhbmQgbWFpbGJveCBjb21tYW5kIHJldHJpZXZlcyBwb3J0CisJCSAqIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gZmNwb3J0IHN0cnVjdHVyZS4gRm9yIEhvc3QgYmFzZWQKKwkJICogRUxTIGNvbW1hbmRzIHRoZXJlIHdpbGwgYmUgbm8gZmNwb3J0IHN0cnVjdHVyZSBhbGxvY2F0ZWQKKwkJICovCisJCWZjcG9ydCA9IHFsYTJ4MDBfYWxsb2NfZmNwb3J0KHZoYSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZmNwb3J0KSB7CisJCQlydmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIEluaXRpYWxpemUgYWxsIHJlcXVpcmVkICBmaWVsZHMgb2YgZmNwb3J0ICovCisJCWZjcG9ydC0+dmhhID0gdmhhOworCQlmY3BvcnQtPnZwX2lkeCA9IHZoYS0+dnBfaWR4OworCQlmY3BvcnQtPmRfaWQuYi5hbF9wYSA9CisJCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMucG9ydF9pZFswXTsKKwkJZmNwb3J0LT5kX2lkLmIuYXJlYSA9CisJCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMucG9ydF9pZFsxXTsKKwkJZmNwb3J0LT5kX2lkLmIuZG9tYWluID0KKwkJICAgIGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5wb3J0X2lkWzJdOworCQlmY3BvcnQtPmxvb3BfaWQgPQorCQkgICAgKGZjcG9ydC0+ZF9pZC5iLmFsX3BhID09IDB4RkQpID8KKwkJICAgIE5QSF9GQUJSSUNfQ09OVFJPTExFUiA6IE5QSF9GX1BPUlQ7CisJfQorCisJaWYgKCF2aGEtPmZsYWdzLm9ubGluZSkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgImhvc3Qgbm90IG9ubGluZVxuIikpOworCQlydmFsID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKworICAgICAgICByZXFfc2dfY250ID0KKwkgICAgZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworICAgICAgICBpZiAoIXJlcV9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZV9mcmVlX2ZjcG9ydDsKKwl9CisgICAgICAgIHJzcF9zZ19jbnQgPSBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworICAgICAgICBpZiAoIXJzcF9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBkb25lX2ZyZWVfZmNwb3J0OworCX0KKworCWlmICgocmVxX3NnX2NudCAhPSAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCkgfHwKKwkgICAgKHJzcF9zZ19jbnQgIT0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKQorCXsKKwkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KKwkJICAgICJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzIFwKKwkJICAgIFtyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleFwKKwkJICAgIHJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXhdXG4iLAorCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgcmVxX3NnX2NudCwKKwkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCByc3Bfc2dfY250KSk7CisJCXJ2YWwgPSAtRUFHQUlOOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwkvKiBBbGxvYyBTUkIgc3RydWN0dXJlICovCisJc3AgPSBxbGEyeDAwX2dldF9jdHhfYnNnX3NwKHZoYSwgZmNwb3J0LCBzaXplb2Yoc3RydWN0IHNyYl9ic2cpKTsKKwlpZiAoIXNwKSB7CisJCXJ2YWwgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwllbHMgPSBzcC0+Y3R4OworCWVscy0+Y3R4LnR5cGUgPQorCSAgICAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfUlBUX0VMUyA/CisJICAgIFNSQl9FTFNfQ01EX1JQVCA6IFNSQl9FTFNfQ01EX0hTVCk7CisJZWxzLT5ic2dfam9iID0gYnNnX2pvYjsKKworCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJICAgICJzY3NpKCVsZDoleCk6IGJzZyBycXN0IHR5cGU6ICVzIGVscyB0eXBlOiAleCAtIGxvb3AtaWQ9JXggIgorCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIHZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLmNvbW1hbmRfY29kZSwKKwkgICAgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisKKwlydmFsID0gcWxhMngwMF9zdGFydF9zcChzcCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJa2ZyZWUoc3AtPmN0eCk7CisJCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisJcmV0dXJuIHJ2YWw7CisKK2RvbmVfdW5tYXBfc2c6CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCWJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCWdvdG8gZG9uZV9mcmVlX2ZjcG9ydDsKKworZG9uZV9mcmVlX2ZjcG9ydDoKKwlpZiAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfSFNUX0VMU19OT0xPR0lOKQorCQlrZnJlZShmY3BvcnQpOworZG9uZToKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludAorcWxhMngwMF9wcm9jZXNzX2N0KHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCXNyYl90ICpzcDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gYnNnX2pvYi0+c2hvc3Q7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCWludCBydmFsID0gKERSSVZFUl9FUlJPUiA8PCAxNik7CisJaW50IHJlcV9zZ19jbnQsIHJzcF9zZ19jbnQ7CisJdWludDE2X3QgbG9vcF9pZDsKKwlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0OworCWNoYXIgICp0eXBlID0gIkZDX0JTR19IU1RfQ1QiOworCXN0cnVjdCBzcmJfYnNnICpjdDsKKworCS8qIHBhc3MgdGhyb3VnaCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgSVNQIDRHYiBvciBoaWdoZXIgKi8KKyAgICAgICAgaWYgKCFJU19GV0kyX0NBUEFCTEUoaGEpKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSAgICAic2NzaSglbGQpOkZpcm13YXJlIGlzIG5vdCBjYXBhYmxlIHRvIHN1cHBvcnQgRkMgIgorCQkgICAgIkNUIHBhc3MgdGhydVxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXJ2YWwgPSAtRVBFUk07CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKworICAgICAgICByZXFfc2dfY250ID0KKwkgICAgZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworICAgICAgICBpZiAoIXJlcV9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKyAgICAgICAgcnNwX3NnX2NudCA9IGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKyAgICAgICAgICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworICAgICAgICBpZiAoIXJzcF9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKworCWlmICgocmVxX3NnX2NudCAhPSAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCkgfHwKKwkJKHJzcF9zZ19jbnQgIT0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKQorCXsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzIFwKKwkJICAgIFtyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleFwKKwkJICAgIHJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXhdXG4iLAorCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgcmVxX3NnX2NudCwKKwkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCByc3Bfc2dfY250KSk7CisJCXJ2YWwgPSAtRUFHQUlOOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwlpZiAoIXZoYS0+ZmxhZ3Mub25saW5lKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiaG9zdCBub3Qgb25saW5lXG4iKSk7CisJCXJ2YWwgPSAtRUlPOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwlsb29wX2lkID0KKwkgICAgKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnByZWFtYmxlX3dvcmQxICYgMHhGRjAwMDAwMCkKKwkgICAgPj4gMjQ7CisJc3dpdGNoIChsb29wX2lkKSB7CisJCWNhc2UgMHhGQzoKKwkJCWxvb3BfaWQgPSBjcHVfdG9fbGUxNihOUEhfU05TKTsKKwkJCWJyZWFrOworCQljYXNlIDB4RkE6CisJCQlsb29wX2lkID0gdmhhLT5tZ210X3N2cl9sb29wX2lkOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJICAgICJVbmtub3duIGxvb3AgaWQ6ICV4XG4iLCBsb29wX2lkKSk7CisJCQlydmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGR1bW15IGZjcG9ydCBzdHJ1Y3R1cmUsIHNpbmNlIGZ1bmN0aW9ucyBwcmVwYXJpbmcgdGhlCisJICogSU9DQiBhbmQgbWFpbGJveCBjb21tYW5kIHJldHJpZXZlcyBwb3J0IHNwZWNpZmljIGluZm9ybWF0aW9uCisJICogZnJvbSBmY3BvcnQgc3RydWN0dXJlLiBGb3IgSG9zdCBiYXNlZCBFTFMgY29tbWFuZHMgdGhlcmUgd2lsbCBiZQorCSAqIG5vIGZjcG9ydCBzdHJ1Y3R1cmUgYWxsb2NhdGVkCisJICovCisJZmNwb3J0ID0gcWxhMngwMF9hbGxvY19mY3BvcnQodmhhLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZjcG9ydCkKKwl7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvICBkb25lX3VubWFwX3NnOworCX0KKworCS8qIEluaXRpYWxpemUgYWxsIHJlcXVpcmVkICBmaWVsZHMgb2YgZmNwb3J0ICovCisJZmNwb3J0LT52aGEgPSB2aGE7CisJZmNwb3J0LT52cF9pZHggPSB2aGEtPnZwX2lkeDsKKwlmY3BvcnQtPmRfaWQuYi5hbF9wYSA9IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnBvcnRfaWRbMF07CisJZmNwb3J0LT5kX2lkLmIuYXJlYSA9IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnBvcnRfaWRbMV07CisJZmNwb3J0LT5kX2lkLmIuZG9tYWluID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucG9ydF9pZFsyXTsKKwlmY3BvcnQtPmxvb3BfaWQgPSBsb29wX2lkOworCisJLyogQWxsb2MgU1JCIHN0cnVjdHVyZSAqLworCXNwID0gcWxhMngwMF9nZXRfY3R4X2JzZ19zcCh2aGEsIGZjcG9ydCwgc2l6ZW9mKHN0cnVjdCBzcmJfYnNnKSk7CisJaWYgKCFzcCkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lX2ZyZWVfZmNwb3J0OworCX0KKworCWN0ID0gc3AtPmN0eDsKKwljdC0+Y3R4LnR5cGUgPSBTUkJfQ1RfQ01EOworCWN0LT5ic2dfam9iID0gYnNnX2pvYjsKKworCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJICAgICJzY3NpKCVsZDoleCk6IGJzZyBycXN0IHR5cGU6ICVzIGVscyB0eXBlOiAleCAtIGxvb3AtaWQ9JXggIgorCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIHZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkgICAgKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnByZWFtYmxlX3dvcmQyID4+IDE2KSwKKwkgICAgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisKKwlydmFsID0gcWxhMngwMF9zdGFydF9zcChzcCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJa2ZyZWUoc3AtPmN0eCk7CisJCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZG9uZV9mcmVlX2ZjcG9ydDsKKwl9CisJcmV0dXJuIHJ2YWw7CisKK2RvbmVfZnJlZV9mY3BvcnQ6CisJa2ZyZWUoZmNwb3J0KTsKK2RvbmVfdW5tYXBfc2c6CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworZG9uZToKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludAorcWxhMngwMF9wcm9jZXNzX3ZlbmRvcl9zcGVjaWZpYyhzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gYnNnX2pvYi0+c2hvc3Q7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCWludCBydmFsOworCXVpbnQ4X3QgY29tbWFuZF9zZW50OworCXVpbnQzMl90IHZlbmRvcl9jbWQ7CisJY2hhciAqdHlwZTsKKwlzdHJ1Y3QgbXNnX2VjaG9fbGIgZWxyZXE7CisJdWludDE2X3QgcmVzcG9uc2VbTUFJTEJPWF9SRUdJU1RFUl9DT1VOVF07CisJdWludDhfdCogZndfc3RzX3B0cjsKKwl1aW50OF90ICpyZXFfZGF0YTsKKwlkbWFfYWRkcl90IHJlcV9kYXRhX2RtYTsKKwl1aW50MzJfdCByZXFfZGF0YV9sZW47CisJdWludDhfdCAqcnNwX2RhdGE7CisJZG1hX2FkZHJfdCByc3BfZGF0YV9kbWE7CisJdWludDMyX3QgcnNwX2RhdGFfbGVuOworCisJaWYgKHRlc3RfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChJU1BfQUJPUlRfUkVUUlksICZ2aGEtPmRwY19mbGFncykpIHsKKwkJcnZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghdmhhLT5mbGFncy5vbmxpbmUpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJob3N0IG5vdCBvbmxpbmVcbiIpKTsKKwkJcnZhbCA9IC1FSU87CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKworICAgICAgICBlbHJlcS5yZXFfc2dfY250ID0KKwkgICAgZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworICAgICAgICBpZiAoIWVscmVxLnJlcV9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisgICAgICAgIGVscmVxLnJzcF9zZ19jbnQgPQorCSAgICBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworICAgICAgICBpZiAoIWVscmVxLnJzcF9zZ19jbnQpIHsKKwkJcnZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKworCWlmICgoZWxyZXEucmVxX3NnX2NudCAhPSAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCkgfHwKKwkgICAgKGVscmVxLnJzcF9zZ19jbnQgIT0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKQorCXsKKwkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KKwkJICAgICJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzIFwKKwkJICAgIFtyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleFwKKwkJICAgIHJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXhdXG4iLAorCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgZWxyZXEucmVxX3NnX2NudCwKKwkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBlbHJlcS5yc3Bfc2dfY250KSk7CisJCXJ2YWwgPSAtRUFHQUlOOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV91bm1hcF9zZzsKKwl9CisJcmVxX2RhdGFfbGVuID0gcnNwX2RhdGFfbGVuID0gYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCXJlcV9kYXRhID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCByZXFfZGF0YV9sZW4sCisJICAgICZyZXFfZGF0YV9kbWEsIEdGUF9LRVJORUwpOworCisJcnNwX2RhdGEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHJzcF9kYXRhX2xlbiwKKwkgICAgJnJzcF9kYXRhX2RtYSwgR0ZQX0tFUk5FTCk7CisKKwkvKiBDb3B5IHRoZSByZXF1ZXN0IGJ1ZmZlciBpbiByZXFfZGF0YSBub3cgKi8KKwlzZ19jb3B5X3RvX2J1ZmZlcihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgcmVxX2RhdGEsCisJICAgIHJlcV9kYXRhX2xlbik7CisKKwllbHJlcS5zZW5kX2RtYSA9IHJlcV9kYXRhX2RtYTsKKwllbHJlcS5yY3ZfZG1hID0gcnNwX2RhdGFfZG1hOworCWVscmVxLnRyYW5zZmVyX3NpemUgPSByZXFfZGF0YV9sZW47CisKKwkvKiBWZW5kb3IgY21kIDogbG9vcGJhY2sgb3IgRUNITyBkaWFnbm9zdGljCisJICogT3B0aW9uczoKKwkgKiAJTG9vcGJhY2sgOiBFaXRoZXIgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgbG9vcGJhY2sKKwkgKiAJRUNITzogRUNITyBFTFMgb3IgVmVuZG9yIHNwZWNpZmljIEZDNCAgbGluayBkYXRhCisJICovCisJdmVuZG9yX2NtZCA9IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kWzBdOworCWVscmVxLm9wdGlvbnMgPQorCSAgICAqKCgodWludDMyX3QgKilic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCkKKwkgICAgKyAxKTsKKworCXN3aXRjaCAoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWRbMF0pIHsKKwljYXNlIFFMX1ZORF9MT09QQkFDSzoKKwkJaWYgKGhhLT5jdXJyZW50X3RvcG9sb2d5ICE9IElTUF9DRkdfRikgeworCQkJdHlwZSA9ICJGQ19CU0dfSFNUX1ZFTkRPUl9MT09QQkFDSyI7CisKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJInNjc2koJWxkKSBic2cgcnFzdCB0eXBlOiAlcyB2ZW5kb3IgcnFzdCB0eXBlOiAleCBvcHRpb25zOiAleC5cbiIsCisJCQkJdmhhLT5ob3N0X25vLCB0eXBlLCB2ZW5kb3JfY21kLCBlbHJlcS5vcHRpb25zKSk7CisKKwkJCWNvbW1hbmRfc2VudCA9IElOVF9ERUZfTEJfTE9PUEJBQ0tfQ01EOworCQkJcnZhbCA9IHFsYTJ4MDBfbG9vcGJhY2tfdGVzdCh2aGEsICZlbHJlcSwgcmVzcG9uc2UpOworCQkJaWYgKElTX1FMQTgxWFgoaGEpKSB7CisJCQkJaWYgKHJlc3BvbnNlWzBdID09IE1CU19DT01NQU5EX0VSUk9SICYmIHJlc3BvbnNlWzFdID09IE1CU19MQl9SRVNFVCkgeworCQkJCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlcyglbGQpOiBBQk9SVGluZyAiCisJCQkJCQkiSVNQXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCQkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJCQkJcWxhMnh4eF93YWtlX2RwYyh2aGEpOworCQkJCSB9CisJCQl9CisJCX0gZWxzZSB7CisJCQl0eXBlID0gIkZDX0JTR19IU1RfVkVORE9SX0VDSE9fRElBRyI7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCSJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXMgdmVuZG9yIHJxc3QgdHlwZTogJXggb3B0aW9uczogJXguXG4iLAorCQkJCXZoYS0+aG9zdF9ubywgdHlwZSwgdmVuZG9yX2NtZCwgZWxyZXEub3B0aW9ucykpOworCisJCQljb21tYW5kX3NlbnQgPSBJTlRfREVGX0xCX0VDSE9fQ01EOworCQkJcnZhbCA9IHFsYTJ4MDBfZWNob190ZXN0KHZoYSwgJmVscmVxLCByZXNwb25zZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9SRVNFVDoKKwkJaWYgKCFJU19RTEE4NFhYKHZoYS0+aHcpKSB7CisJCQlydmFsID0gLUVJTlZBTDsKKwkJCURFQlVHMTYocHJpbnRrKAorCQkJCSIlcyglbGQpOiA4eHh4IGV4aXRpbmcuXG4iLAorCQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXJldHVybiBydmFsOworCQl9CisJCXJ2YWwgPSBxbGE4NHh4X3Jlc2V0KHZoYSwgJmVscmVxLCBic2dfam9iKTsKKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9NR01UX0NNRDoKKwkJaWYgKCFJU19RTEE4NFhYKHZoYS0+aHcpKSB7CisJCQlydmFsID0gLUVJTlZBTDsKKwkJCURFQlVHMTYocHJpbnRrKAorCQkJCSIlcyglbGQpOiA4eHh4IGV4aXRpbmcuXG4iLAorCQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXJldHVybiBydmFsOworCQl9CisJCXJ2YWwgPSBxbGE4NHh4X21nbXRfY21kKHZoYSwgJmVscmVxLCBic2dfam9iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnZhbCA9IC1FTk9TWVM7CisJfQorCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSJzY3NpKCVsZCkgVmVuZG9yIHJlcXVlc3QgJXMgZmFpbGVkXG4iLCB2aGEtPmhvc3Rfbm8sIHR5cGUpKTsKKwkJcnZhbCA9IDA7CisJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKKwkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCWZ3X3N0c19wdHIgPSAoKHVpbnQ4X3QqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOworCQltZW1jcHkoIGZ3X3N0c19wdHIsIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKTsKKwkJZndfc3RzX3B0ciArPSBzaXplb2YocmVzcG9uc2UpOworICAgICAgICAgICAgICAgICpmd19zdHNfcHRyID0gY29tbWFuZF9zZW50OworCX0gZWxzZSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkic2NzaSglbGQpIFZlbmRvciByZXF1ZXN0ICVzIGNvbXBsZXRlZFxuIiwgdmhhLT5ob3N0X25vLCB0eXBlKSk7CisJCXJ2YWwgPSBic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJYnNnX2pvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpICsgc2l6ZW9mKHJlc3BvbnNlKSArIHNpemVvZih1aW50OF90KTsKKwkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47CisJCWZ3X3N0c19wdHIgPSAoKHVpbnQ4X3QqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOworCQltZW1jcHkoZndfc3RzX3B0ciwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOworCQlmd19zdHNfcHRyICs9IHNpemVvZihyZXNwb25zZSk7CisJCSpmd19zdHNfcHRyID0gY29tbWFuZF9zZW50OworCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHJzcF9kYXRhLAorCQlyc3BfZGF0YV9sZW4pOworCX0KKwlic2dfam9iLT5qb2JfZG9uZShic2dfam9iKTsKKworZG9uZV91bm1hcF9zZzoKKworCWlmKHJlcV9kYXRhKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgcmVxX2RhdGFfbGVuLAorCQkJcmVxX2RhdGEsIHJlcV9kYXRhX2RtYSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCitkb25lOgorICAgICAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludAorcWxhMjR4eF9ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKyAgICAgICAgaW50IHJldCA9IC1FSU5WQUw7CisKKyAgICAgICAgc3dpdGNoIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlKSB7CisJCWNhc2UgRkNfQlNHX1JQVF9FTFM6CisJCWNhc2UgRkNfQlNHX0hTVF9FTFNfTk9MT0dJTjoKKwkJCXJldCA9IHFsYTJ4MDBfcHJvY2Vzc19lbHMoYnNnX2pvYik7CisJCQlicmVhazsKKwkJY2FzZSBGQ19CU0dfSFNUX0NUOgorCQkJcmV0ID0gcWxhMngwMF9wcm9jZXNzX2N0KGJzZ19qb2IpOworCQkJYnJlYWs7CisJCWNhc2UgRkNfQlNHX0hTVF9WRU5ET1I6CisJCQlyZXQgPSBxbGEyeDAwX3Byb2Nlc3NfdmVuZG9yX3NwZWNpZmljKGJzZ19qb2IpOworCQkJYnJlYWs7CisJCWNhc2UgRkNfQlNHX0hTVF9BRERfUlBPUlQ6CisJCWNhc2UgRkNfQlNHX0hTVF9ERUxfUlBPUlQ6CisJCWNhc2UgRkNfQlNHX1JQVF9DVDoKKwkJZGVmYXVsdDoKKwkJCURFQlVHMihwcmludGsoInFsYTJ4eHg6IHVuc3VwcG9ydGVkIEJTRyByZXF1ZXN0XG4iKSk7CisJCQlicmVhazsKKyAgICAgICAgfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTI0eHhfYnNnX3RpbWVvdXQoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisgICAgICAgIHNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihic2dfam9iLT5zaG9zdCk7CisgICAgICAgIHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworICAgICAgICBzcmJfdCAqc3A7CisgICAgICAgIGludCBjbnQsIHF1ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgc3RydWN0IHJlcV9xdWUgKnJlcTsKKwlzdHJ1Y3Qgc3JiX2JzZyAqc3BfYnNnOworCisJLyogZmluZCB0aGUgYnNnIGpvYiBmcm9tIHRoZSBhY3RpdmUgbGlzdCBvZiBjb21tYW5kcyAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlmb3IgKHF1ZSA9IDA7IHF1ZSA8IGhhLT5tYXhfcmVxX3F1ZXVlczsgcXVlKyspIHsKKwkJcmVxID0gaGEtPnJlcV9xX21hcFtxdWVdOworCQlpZiAoIXJlcSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoY250ID0gMTsgY250IDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOyBjbnQrKyApIHsKKwkJCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2NudF07CisKKwkJCWlmIChzcCkgeworCQkJCXNwX2JzZyA9IChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eDsKKworCQkJCWlmICgoKHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0NUX0NNRCkgfHwKKwkJCQkgICAgKHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0VMU19DTURfUlBUKQorCQkJCSAgICB8fCAoIHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0VMU19DTURfSFNUKSkgJiYKKwkJCQkgICAgKHNwX2JzZy0+YnNnX2pvYiA9PSBic2dfam9iKSkgeworCQkJCQlpZiAoaGEtPmlzcF9vcHMtPmFib3J0X2NvbW1hbmQoc3ApKSB7CisJCQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCQkJInNjc2koJWxkKTogbWJ4IGFib3J0X2NvbW1hbmQgZmFpbGVkXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQkJCWJzZ19qb2ItPnJlcS0+ZXJyb3JzID0gYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IC1FSU87CisJCQkJCX0gZWxzZSB7CisJCQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCQkJInNjc2koJWxkKTogbWJ4IGFib3J0X2NvbW1hbmQgc3VjY2Vzc1xuIiwgdmhhLT5ob3N0X25vKSk7CisJCQkJCQlic2dfam9iLT5yZXEtPmVycm9ycyA9IGJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCQkJCQl9CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkic2NzaSglbGQpIFNSQiBub3QgZm91bmQgdG8gYWJvcnRcbiIsIHZoYS0+aG9zdF9ubykpOworCWJzZ19qb2ItPnJlcS0+ZXJyb3JzID0gYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IC1FTlhJTzsKKwlyZXR1cm4gMDsKKworZG9uZToKKwlpZiAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfSFNUX0NUKQorCQlrZnJlZShzcC0+ZmNwb3J0KTsKKwlrZnJlZShzcC0+Y3R4KTsKKwltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBxbGEyeHh4X3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CiAKIAkuc2hvd19ob3N0X25vZGVfbmFtZSA9IDEsCkBAIC0xODM4LDYgKzI0MzgsOCBAQAogCS52cG9ydF9jcmVhdGUgPSBxbGEyNHh4X3Zwb3J0X2NyZWF0ZSwKIAkudnBvcnRfZGlzYWJsZSA9IHFsYTI0eHhfdnBvcnRfZGlzYWJsZSwKIAkudnBvcnRfZGVsZXRlID0gcWxhMjR4eF92cG9ydF9kZWxldGUsCisJLmJzZ19yZXF1ZXN0ID0gcWxhMjR4eF9ic2dfcmVxdWVzdCwKKwkuYnNnX3RpbWVvdXQgPSBxbGEyNHh4X2JzZ190aW1lb3V0LAogfTsKIAogc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHFsYTJ4eHhfdHJhbnNwb3J0X3Zwb3J0X2Z1bmN0aW9ucyA9IHsKQEAgLTE4NzgsNiArMjQ4MCw4IEBACiAJLmRldl9sb3NzX3Rtb19jYWxsYmsgPSBxbGEyeDAwX2Rldl9sb3NzX3Rtb19jYWxsYmssCiAJLnRlcm1pbmF0ZV9ycG9ydF9pbyA9IHFsYTJ4MDBfdGVybWluYXRlX3Jwb3J0X2lvLAogCS5nZXRfZmNfaG9zdF9zdGF0cyA9IHFsYTJ4MDBfZ2V0X2ZjX2hvc3Rfc3RhdHMsCisJLmJzZ19yZXF1ZXN0ID0gcWxhMjR4eF9ic2dfcmVxdWVzdCwKKwkuYnNnX3RpbWVvdXQgPSBxbGEyNHh4X2JzZ190aW1lb3V0LAogfTsKIAogdm9pZApAQCAtMTkwNiwzICsyNTEwLDEyNSBAQAogCQlzcGVlZCA9IEZDX1BPUlRTUEVFRF8xR0JJVDsKIAlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHModmhhLT5ob3N0KSA9IHNwZWVkOwogfQorc3RhdGljIGludAorcWxhODR4eF9yZXNldChzY3NpX3FsYV9ob3N0X3QgKmhhLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKm1yZXEsIHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCWludCAgICAgICAgICAgICByZXQgPSAwOworCWludCAgICAgICAgICAgICBjbWQ7CisJdWludDE2X3QgICAgICAgIGNtZF9zdGF0dXM7CisKKwlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCisJY21kID0gKCooKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kKSArIDIpKQorCQkJPT0gQTg0X1JFU0VUX0ZMQUdfRU5BQkxFX0RJQUdfRlcgPworCQkJCUE4NF9JU1NVRV9SRVNFVF9ESUFHX0ZXIDogQTg0X0lTU1VFX1JFU0VUX09QX0ZXOworCXJldCA9IHFsYTg0eHhfcmVzZXRfY2hpcChoYSwgY21kID09IEE4NF9JU1NVRV9SRVNFVF9ESUFHX0ZXLAorCSZjbWRfc3RhdHVzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitxbGE4NHh4X21nbXRfY21kKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHN0cnVjdCBtc2dfZWNob19sYiAqbXJlcSwgc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJc3RydWN0IGFjY2Vzc19jaGlwXzg0eHggKm1uOworCWRtYV9hZGRyX3QgbW5fZG1hLCBtZ210X2RtYTsKKwl2b2lkICptZ210X2IgPSBOVUxMOworCWludCByZXQgPSAwOworCWludCByc3BfaGRyX2xlbiwgbGVuID0gMDsKKwlzdHJ1Y3QgcWxhODRfbXNnX21nbXQgKnFsODRfbWdtdDsKKworCXFsODRfbWdtdCA9IChzdHJ1Y3QgcWxhODRfbXNnX21nbXQgKikgdm1hbGxvYyhzaXplb2Yoc3RydWN0IHFsYTg0X21zZ19tZ210KSk7CisJcWw4NF9tZ210LT5jbWQgPQorCQkqKCh1aW50MTZfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDIpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUubWVtLnN0YXJ0X2FkZHIgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDMpKTsKKwlxbDg0X21nbXQtPmxlbiA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgNCkpOworCXFsODRfbWdtdC0+bWdtdHAudS5jb25maWcuaWQgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDUpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLnBhcmFtMCA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgNikpOworCXFsODRfbWdtdC0+bWdtdHAudS5jb25maWcucGFyYW0xID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA3KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmluZm8udHlwZSA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgOCkpOworCXFsODRfbWdtdC0+bWdtdHAudS5pbmZvLmNvbnRleHQgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDkpKTsKKworCXJzcF9oZHJfbGVuID0gYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCisJbW4gPSBkbWFfcG9vbF9hbGxvYyhoYS0+aHctPnNfZG1hX3Bvb2wsIEdGUF9LRVJORUwsICZtbl9kbWEpOworCWlmIChtbiA9PSBOVUxMKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzOiBkbWEgYWxsb2MgZm9yIGZ3IGJ1ZmZlciAiCisJCSJmYWlsZWQlbHVcbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQobW4sIDAsIHNpemVvZiAoc3RydWN0IGFjY2Vzc19jaGlwXzg0eHgpKTsKKworCW1uLT5lbnRyeV90eXBlID0gQUNDRVNTX0NISVBfSU9DQl9UWVBFOworCW1uLT5lbnRyeV9jb3VudCA9IDE7CisKKwlzd2l0Y2ggKHFsODRfbWdtdC0+Y21kKSB7CisJY2FzZSBRTEE4NF9NR01UX1JFQURfTUVNOgorCQltbi0+b3B0aW9ucyA9IGNwdV90b19sZTE2KEFDT19EVU1QX01FTU9SWSk7CisJCW1uLT5wYXJhbWV0ZXIxID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51Lm1lbS5zdGFydF9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9NR01UX1dSSVRFX01FTToKKwkJbW4tPm9wdGlvbnMgPSBjcHVfdG9fbGUxNihBQ09fTE9BRF9NRU1PUlkpOworCQltbi0+cGFyYW1ldGVyMSA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5tZW0uc3RhcnRfYWRkcik7CisJCWJyZWFrOworCWNhc2UgUUxBODRfTUdNVF9DSE5HX0NPTkZJRzoKKwkJbW4tPm9wdGlvbnMgPSBjcHVfdG9fbGUxNihBQ09fQ0hBTkdFX0NPTkZJR19QQVJBTSk7CisJCW1uLT5wYXJhbWV0ZXIxID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5pZCk7CisJCW1uLT5wYXJhbWV0ZXIyID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5wYXJhbTApOworCQltbi0+cGFyYW1ldGVyMyA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5jb25maWcucGFyYW0xKTsKKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9NR01UX0dFVF9JTkZPOgorCQltbi0+b3B0aW9ucyA9IGNwdV90b19sZTE2KEFDT19SRVFVRVNUX0lORk8pOworCQltbi0+cGFyYW1ldGVyMSA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5pbmZvLnR5cGUpOworCQltbi0+cGFyYW1ldGVyMiA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5pbmZvLmNvbnRleHQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXRfbWdtdDA7CisJfQorCisJaWYgKChsZW4gPT0gcWw4NF9tZ210LT5sZW4pICYmCisJCXFsODRfbWdtdC0+Y21kICE9IFFMQTg0X01HTVRfQ0hOR19DT05GSUcpIHsKKwkJbWdtdF9iID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+aHctPnBkZXYtPmRldiwgbGVuLAorCQkJCSZtZ210X2RtYSwgR0ZQX0tFUk5FTCk7CisJCWlmIChtZ210X2IgPT0gTlVMTCkgeworCQkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiJXM6IGRtYSBhbGxvYyBtZ210X2IgIgorCQkJImZhaWxlZCVsdVxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBleGl0X21nbXQwOworCQl9CisJCW1uLT50b3RhbF9ieXRlX2NudCA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bGVuKTsKKwkJbW4tPmRzZWdfY291bnQgPSBjcHVfdG9fbGUxNigxKTsKKwkJbW4tPmRzZWdfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChtZ210X2RtYSkpOworCQltbi0+ZHNlZ19hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKG1nbXRfZG1hKSk7CisJCW1uLT5kc2VnX2xlbmd0aCA9IGNwdV90b19sZTMyKGxlbik7CisKKwkJaWYgKHFsODRfbWdtdC0+Y21kID09IFFMQTg0X01HTVRfV1JJVEVfTUVNKSB7CisJCQltZW1jcHkobWdtdF9iLCBxbDg0X21nbXQtPnBheWxvYWQsIGxlbik7CisJCX0KKwl9CisKKwlyZXQgPSBxbGEyeDAwX2lzc3VlX2lvY2IoaGEsIG1uLCBtbl9kbWEsIDApOworCWlmICgocmV0ICE9IFFMQV9TVUNDRVNTKSB8fCAocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9XUklURV9NRU0pCisJCXx8IChxbDg0X21nbXQtPmNtZCA9PSBRTEE4NF9NR01UX0NITkdfQ09ORklHKSkgeworCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykKKwkJCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlcyglbHUpOiBmYWlsZWRcbiIsCisJCQkJCV9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCX0gZWxzZSBpZiAoKHFsODRfbWdtdC0+Y21kID09IFFMQTg0X01HTVRfUkVBRF9NRU0pIHx8CisJCQkocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9HRVRfSU5GTykpIHsKKwl9CisKKwlpZiAobWdtdF9iKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPmh3LT5wZGV2LT5kZXYsIGxlbiwgbWdtdF9iLCBtZ210X2RtYSk7CisKK2V4aXRfbWdtdDA6CisJZG1hX3Bvb2xfZnJlZShoYS0+aHctPnNfZG1hX3Bvb2wsIG1uLCBtbl9kbWEpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggMTI2M2Q5Ny4uYWZhOTU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfYnNnX2ZjLmg+CiAKICNkZWZpbmUgUUxBMlhYWF9EUklWRVJfTkFNRSAgInFsYTJ4eHgiCiAKQEAgLTIyOCw2ICsyMjksMjcgQEAKIAl1aW50MTZfdCBmbGFnczsKIH07CiAKK3N0cnVjdCBzcmJfYnNnX2N0eCB7CisjZGVmaW5lIFNSQl9FTFNfQ01EX1JQVCAzCisjZGVmaW5lIFNSQl9FTFNfQ01EX0hTVCA0CisjZGVmaW5lIFNSQl9DVF9DTUQgNQorCXVpbnQxNl90IHR5cGU7Cit9OworCitzdHJ1Y3Qgc3JiX2JzZyB7CisJc3RydWN0IHNyYl9ic2dfY3R4IGN0eDsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYjsKK307CisKK3N0cnVjdCBtc2dfZWNob19sYiB7CisJZG1hX2FkZHJfdCBzZW5kX2RtYTsKKwlkbWFfYWRkcl90IHJjdl9kbWE7CisJdWludDE2X3QgcmVxX3NnX2NudDsKKwl1aW50MTZfdCByc3Bfc2dfY250OworCXVpbnQxNl90IG9wdGlvbnM7CisJdWludDMyX3QgdHJhbnNmZXJfc2l6ZTsKK307CisKIC8qCiAgKiBJU1AgSS9PIFJlZ2lzdGVyIFNldCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCiAgKi8KQEAgLTUyMiw2ICs1NDQsOCBAQAogI2RlZmluZSBNQkFfRElTQ0FSRF9STkRfRlJBTUUJMHg4MDQ4CS8qIGRpc2NhcmQgUk5EIGZyYW1lIGR1ZSB0byBlcnJvci4gKi8KICNkZWZpbmUgTUJBX1JFSkVDVEVEX0ZDUF9DTUQJMHg4MDQ5CS8qIHJlamVjdGVkIEZDUF9DTUQuICovCiAKKy8qIElTUCBtYWlsYm94IGxvb3BiYWNrIGVjaG8gZGlhZ25vc3RpYyBlcnJvciBjb2RlICovCisjZGVmaW5lIE1CU19MQl9SRVNFVAkweDE3CiAvKgogICogRmlybXdhcmUgb3B0aW9ucyAxLCAyLCAzLgogICovCkBAIC0yMjMwLDYgKzIyNTQsMTMgQEAKIAlpbnQgbWF4X3FfZGVwdGg7CiB9OwogCisvKiBQbGFjZSBob2xkZXIgZm9yIEZXIGJ1ZmZlciBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgcWxmY19mdyB7CisJdm9pZCAqZndfYnVmOworCWRtYV9hZGRyX3QgZndfZG1hOworCXVpbnQzMl90IGxlbjsKK307CisKIC8qCiAgKiBRbG9naWMgaG9zdCBhZGFwdGVyIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLgogKi8KQEAgLTI1OTQsNiArMjYyNSw3IEBACiAJc3RydWN0IHFsYV9zdGF0aXN0aWNzIHFsYV9zdGF0czsKIAlzdHJ1Y3QgaXNwX29wZXJhdGlvbnMgKmlzcF9vcHM7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCXN0cnVjdCBxbGZjX2Z3IGZ3X2J1ZjsKIH07CiAKIC8qCkBAIC0yNzY2LDQgKzI3OTgsMTI3IEBACiAKICNkZWZpbmUgQ01EX1NQKENtbmQpCQkoKENtbmQpLT5TQ3AucHRyKQogCisvKgorICogQlNHIFZlbmRvciBzcGVjaWZpYyBjb21tYW5kcworICovCisKKyNkZWZpbmUgUUxfVk5EX0xPT1BCQUNLCQkweDAxCisjZGVmaW5lIFFMQTg0X1JFU0VUCQkweDAyCisjZGVmaW5lIFFMQTg0X1VQREFURV9GVwkJMHgwMworI2RlZmluZSBRTEE4NF9NR01UX0NNRAkJMHgwNAorCisvKiBCU0cgZGVmaW5hdGlvbnMgZm9yIGludGVycHJldGluZyBDb21tYW5kU2VudCBmaWVsZCAqLworI2RlZmluZSBJTlRfREVGX0xCX0xPT1BCQUNLX0NNRCAgICAgICAgIDAKKyNkZWZpbmUgSU5UX0RFRl9MQl9FQ0hPX0NNRCAgICAgICAgICAgICAxCisKKy8qIEJTRyBWZW5kb3Igc3BlY2lmaWMgZGVmaW5hdGlvbnMgKi8KK3R5cGVkZWYgc3RydWN0IF9BODRfUkVTRVQgeworCXVpbnQxNl90IEZsYWdzOworCXVpbnQxNl90IFJlc2VydmVkOworI2RlZmluZSBBODRfUkVTRVRfRkxBR19FTkFCTEVfRElBR19GVyAgIDEKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgQTg0X1JFU0VULCAqUEE4NF9SRVNFVDsKKworI2RlZmluZSBBODRfSVNTVUVfV1JJVEVfVFlQRV9DTUQgICAgICAgIDAKKyNkZWZpbmUgQTg0X0lTU1VFX1JFQURfVFlQRV9DTUQgICAgICAgICAxCisjZGVmaW5lIEE4NF9DTEVBTlVQX0NNRCAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBODRfSVNTVUVfUkVTRVRfT1BfRlcgICAgICAgICAgIDMKKyNkZWZpbmUgQTg0X0lTU1VFX1JFU0VUX0RJQUdfRlcgICAgICAgICA0CisjZGVmaW5lIEE4NF9JU1NVRV9VUERBVEVfT1BGV19DTUQgICAgICAgNQorI2RlZmluZSBBODRfSVNTVUVfVVBEQVRFX0RJQUdGV19DTUQgICAgIDYKKworc3RydWN0IHFsYTg0X21nbXRfcGFyYW0geworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IHN0YXJ0X2FkZHI7CisJCX0gbWVtOyAvKiBmb3IgUUxBODRfTUdNVF9SRUFEL1dSSVRFX01FTSAqLworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgaWQ7CisjZGVmaW5lIFFMQTg0X01HTVRfQ09ORklHX0lEX1VJRiAgICAgICAgMQorI2RlZmluZSBRTEE4NF9NR01UX0NPTkZJR19JRF9GQ09FX0NPUyAgIDIKKyNkZWZpbmUgUUxBODRfTUdNVF9DT05GSUdfSURfUEFVU0UgICAgICAzCisjZGVmaW5lIFFMQTg0X01HTVRfQ09ORklHX0lEX1RJTUVPVVRTICAgNAorCisJCXVpbnQzMl90IHBhcmFtMDsKKwkJdWludDMyX3QgcGFyYW0xOworCX0gY29uZmlnOyAvKiBmb3IgUUxBODRfTUdNVF9DSE5HX0NPTkZJRyAqLworCisJc3RydWN0IHsKKwkJdWludDMyX3QgdHlwZTsKKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX0NPTkZJR19MT0dfREFUQSAgICAgICAgIDEgLyogR2V0IENvbmZpZyBMb2cgRGF0YSAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fTE9HX0RBVEEgICAgICAgICAgICAgICAgMiAvKiBHZXQgTG9nIERhdGEgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX1BPUlRfU1RBVCAgICAgICAgICAgICAgIDMgLyogR2V0IFBvcnQgU3RhdGlzdGljcyAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fTElGX1NUQVQgICAgICAgICAgICAgICAgNCAvKiBHZXQgTElGIFN0YXRpc3RpY3MgICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19BU0lDX1NUQVQgICAgICAgICAgICAgICA1IC8qIEdldCBBU0lDIFN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX0NPTkZJR19QQVJBTVMgICAgICAgICAgIDYgLyogR2V0IENvbmZpZyBQYXJhbWV0ZXJzICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19QQU5JQ19MT0cgICAgICAgICAgICAgICA3IC8qIEdldCBQYW5pYyBMb2cgKi8KKworCQl1aW50MzJfdCBjb250ZXh0OworLyoKKyogY29udGV4dCBkZWZpbml0aW9ucyBmb3IgUUxBODRfTUdNVF9JTkZPX0NPTkZJR19MT0dfREFUQQorKi8KKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0RFQlVHX0xPRyAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfTEVBUk5fTE9HICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9GQ19BQ0xfSU5HUkVTU19MT0cgICAgICAgICAgIDIKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0ZDX0FDTF9FR1JFU1NfTE9HICAgICAgICAgICAgMworI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfRVRIRVJORVRfQUNMX0lOR1JFU1NfTE9HICAgICA0CisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9FVEhFUk5FVF9BQ0xfRUdSRVNTX0xPRyAgICAgIDUKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX01FU1NBR0VfVFJBTlNNSVRfTE9HICAgICAgICAgNgorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfTUVTU0FHRV9SRUNFSVZFX0xPRyAgICAgICAgICA3CisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9MSU5LX0VWRU5UX0xPRyAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0RDWF9MT0cgICAgICAgICAgICAgICAgICAgICAgOQorCisvKgorKiBjb250ZXh0IGRlZmluaXRpb25zIGZvciBRTEE4NF9NR01UX0lORk9fUE9SVF9TVEFUCisqLworI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfRVRIRVJORVRfUE9SVDAgICAwCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9FVEhFUk5FVF9QT1JUMSAgIDEKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX05TTF9QT1JUMCAgICAgICAgMgorI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfTlNMX1BPUlQxICAgICAgICAzCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9GQ19QT1JUMCAgICAgICAgIDQKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX0ZDX1BPUlQxICAgICAgICAgNQorCisKKy8qCisqIGNvbnRleHQgZGVmaW5pdGlvbnMgZm9yIFFMQTg0X01HTVRfSU5GT19MSUZfU1RBVAorKi8KKyNkZWZpbmUgSUNfTElGX1NUQVRJU1RJQ1NfTElGX05VTUJFUl9FVEhFUk5FVF9QT1JUMCAgICAgMAorI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0VUSEVSTkVUX1BPUlQxICAgICAxCisjZGVmaW5lIElDX0xJRl9TVEFUSVNUSUNTX0xJRl9OVU1CRVJfRkNfUE9SVDAgICAgICAgICAgIDIKKyNkZWZpbmUgSUNfTElGX1NUQVRJU1RJQ1NfTElGX05VTUJFUl9GQ19QT1JUMSAgICAgICAgICAgMworI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0NQVSAgICAgICAgICAgICAgICA2CisKKwkJfSBpbmZvOyAvKiBmb3IgUUxBODRfTUdNVF9HRVRfSU5GTyAqLworCX0gdTsKK307CisKK3N0cnVjdCBxbGE4NF9tc2dfbWdtdCB7CisJdWludDE2X3QgY21kOworI2RlZmluZSBRTEE4NF9NR01UX1JFQURfTUVNICAgICAweDAwCisjZGVmaW5lIFFMQTg0X01HTVRfV1JJVEVfTUVNICAgIDB4MDEKKyNkZWZpbmUgUUxBODRfTUdNVF9DSE5HX0NPTkZJRyAgMHgwMgorI2RlZmluZSBRTEE4NF9NR01UX0dFVF9JTkZPICAgICAweDAzCisJdWludDE2X3QgcnNydmQ7CisJc3RydWN0IHFsYTg0X21nbXRfcGFyYW0gbWdtdHA7LyogcGFyYW1ldGVycyBmb3IgY21kICovCisJdWludDMyX3QgbGVuOyAvKiBieXRlcyBpbiBwYXlsb2FkIGZvbGxvd2luZyB0aGlzIHN0cnVjdCAqLworCXVpbnQ4X3QgcGF5bG9hZFswXTsgLyogcGF5bG9hZCBmb3IgY21kICovCit9OworCitzdHJ1Y3QgbXNnX3VwZGF0ZV9mdyB7CisJLyoKKwkqIGRpYWdfZncgPSAwICBvcGVyYXRpb25hbCBmdworCSogICAgICBvdGhlcndpc2UgZGlhZ25vc3RpYyBmdworCSogb2Zmc2V0LCBsZW4sIGZ3X2xlbiBhcmUgcHJlc2VudCB0byBvdmVyY29tZSB0aGUgY3VycmVudCBsaW1pdGF0aW9uCisJKiBvZiAxMjhLYiB4ZmVyIHNpemUuIFRoZSBmdyBpcyBzZW50IGluIHNtYWxsZXIgY2h1bmtzLiBFYWNoIGNodW5rCisJKiBzcGVjaWZpZXMgdGhlIGJ5dGUgIm9mZnNldCIgd2hlcmUgaXQgZml0cyBpbiB0aGUgZncgYnVmZmVyLiBUaGUKKwkqIG51bWJlciBvZiBieXRlcyBpbiBlYWNoIGNodW5rIGlzIHNwZWNpZmllZCBpbiAibGVuIi4gImZ3X2xlbiIKKwkqIGlzIHRoZSB0b3RhbCBzaXplIG9mIGZ3LiBUaGUgZmlyc3QgY2h1bmsgc2hvdWxkIHN0YXJ0IGF0IG9mZnNldCA9IDAuCisJKiBXaGVuIG9mZnNldCtsZW4gPT0gZndfbGVuLCB0aGUgZncgaXMgd3JpdHRlbiB0byB0aGUgSEJBLgorCSovCisJdWludDMyX3QgZGlhZ19mdzsKKwl1aW50MzJfdCBvZmZzZXQ7Lyogc3RhcnQgb2Zmc2V0ICovCisJdWludDMyX3QgbGVuOyAgIC8qIG51bSBieXRlcyBpbiBjdXIgeGZlciAqLworCXVpbnQzMl90IGZ3X2xlbjsgLyogc2l6ZSBvZiBmdyBpbiBieXRlcyAqLworCXVpbnQ4X3QgZndfYnl0ZXNbMF07Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKaW5kZXggNjZhOGRhNS4uY2ViZjRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKQEAgLTYyNyw2ICs2MjcsMzkgQEAKIAl1aW50MzJfdCByeF9sZW47CQkvKiBEYXRhIHNlZ21lbnQgMSBsZW5ndGguICovCiB9OwogCitzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4IHsKKwl1aW50OF90IGVudHJ5X3R5cGU7CQkvKiBFbnRyeSB0eXBlLiAqLworCXVpbnQ4X3QgZW50cnlfY291bnQ7CQkvKiBFbnRyeSBjb3VudC4gKi8KKwl1aW50OF90IHN5c19kZWZpbmU7CQkvKiBTeXN0ZW0gRGVmaW5lZC4gKi8KKwl1aW50OF90IGVudHJ5X3N0YXR1czsJCS8qIEVudHJ5IFN0YXR1cy4gKi8KKworCXVpbnQzMl90IGhhbmRsZTsJCS8qIFN5c3RlbSBoYW5kbGUuICovCisKKwl1aW50MTZfdCBjb21wX3N0YXR1czsKKworCXVpbnQxNl90IG5wb3J0X2hhbmRsZTsJCS8qIE5fUE9SVCBoYW5kbGUuICovCisKKwl1aW50MTZfdCByZXNlcnZlZF8xOworCisJdWludDhfdCB2cF9pbmRleDsKKwl1aW50OF90IHNvZl90eXBlOworCisJdWludDMyX3QgcnhfeGNoZ19hZGRyZXNzOwkvKiBSZWNlaXZlIGV4Y2hhbmdlIGFkZHJlc3MuICovCisJdWludDE2X3QgcmVzZXJ2ZWRfMjsKKworCXVpbnQ4X3Qgb3Bjb2RlOworCXVpbnQ4X3QgcmVzZXJ2ZWRfMzsKKworCXVpbnQ4X3QgcG9ydF9pZFszXTsKKwl1aW50OF90IHJlc2VydmVkXzQ7CisKKwl1aW50MTZfdCByZXNlcnZlZF81OworCisJdWludDE2X3QgY29udHJvbF9mbGFnczsJCS8qIENvbnRyb2wgZmxhZ3MuICovCisJdWludDMyX3QgdG90YWxfYnl0ZV9jb3VudDsKKwl1aW50MzJfdCBlcnJvcl9zdWJjb2RlXzE7CisJdWludDMyX3QgZXJyb3Jfc3ViY29kZV8yOworfTsKIC8qCiAgKiBJU1AgcXVldWUgLSBNYWlsYm94IENvbW1hbmQgZW50cnkgc3RydWN0dXJlIGRlZmluaXRpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAppbmRleCBmNjFmYjhkLi4zYTg5YmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCkBAIC02MCw2ICs2MCw4IEBACiBleHRlcm4gaW50IHFsYTJ4MDBfYXN5bmNfbG9nb3V0X2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCiAgICAgdWludDE2X3QgKik7CiAKK2V4dGVybiBmY19wb3J0X3QgKgorcWxhMngwMF9hbGxvY19mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICosIGdmcF90ICk7CiAvKgogICogR2xvYmFsIERhdGEgaW4gcWxhX29zLmMgc291cmNlIGZpbGUuCiAgKi8KQEAgLTc2LDYgKzc4LDcgQEAKIGV4dGVybiBpbnQgcWwyeG1heHF1ZXVlczsKIGV4dGVybiBpbnQgcWwyeG11bHRpcXVlX3RhZzsKIGV4dGVybiBpbnQgcWwyeGZ3bG9hZGJpbjsKK2V4dGVybiBpbnQgcWwyeGV0c2VuYWJsZTsKIAogZXh0ZXJuIGludCBxbGEyeDAwX2xvb3BfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9hYm9ydF9hbGxfY21kcyhzY3NpX3FsYV9ob3N0X3QgKiwgaW50KTsKQEAgLTk0LDcgKzk3LDYgQEAKIAogZXh0ZXJuIGludCBxbGE4MXh4X3Jlc3RhcnRfbXBpX2Zpcm13YXJlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAotZXh0ZXJuIHZvaWQgcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY19wb3J0X3QgKik7CiBleHRlcm4gc3RydWN0IHNjc2lfcWxhX2hvc3QgKnFsYTJ4MDBfY3JlYXRlX2hvc3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqLAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfZnJlZV9ob3N0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwpAQCAtMTU0LDYgKzE1Niw3IEBACiBpbnQgX19xbGEyeDAwX21hcmtlcihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBzdHJ1Y3QgcmVxX3F1ZSAqLCBzdHJ1Y3QgcnNwX3F1ZSAqLAogCQkJCQkJdWludDE2X3QsIHVpbnQxNl90LCB1aW50OF90KTsKIGV4dGVybiBpbnQgcWxhMngwMF9zdGFydF9zcChzcmJfdCAqKTsKK2V4dGVybiB2b2lkIHFsYTJ4MDBfY3R4X3NwX2ZyZWUoc3JiX3QgKik7CiAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfbWJ4LmMgc291cmNlIGZpbGUuCkBAIC00MjYsNiArNDI5LDggQEAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfaW5pdF9ob3N0X2F0dHIoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9hbGxvY19zeXNmc19hdHRyKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfZnJlZV9zeXNmc19hdHRyKHNjc2lfcWxhX2hvc3RfdCAqKTsKK2V4dGVybiBpbnQgcWxhMngwMF9sb29wYmFja190ZXN0KHNjc2lfcWxhX2hvc3RfdCAqLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKiwgdWludDE2X3QgKik7CitleHRlcm4gaW50IHFsYTJ4MDBfZWNob190ZXN0KHNjc2lfcWxhX2hvc3RfdCAqLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKiwgdWludDE2X3QgKik7CiAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfZGZzLmMgc291cmNlIGZpbGUuCkBAIC00NTMsNiArNDU4LDUgQEAKIGV4dGVybiB2b2lkIHFsYTI1eHhfd3J0X3JlcV9yZWcoc3RydWN0IHFsYV9od19kYXRhICosIHVpbnQxNl90LCB1aW50MTZfdCk7CiBleHRlcm4gdm9pZCBxbGEyNXh4X3dydF9yc3BfcmVnKHN0cnVjdCBxbGFfaHdfZGF0YSAqLCB1aW50MTZfdCwgdWludDE2X3QpOwogZXh0ZXJuIHZvaWQgcWxhMjR4eF93cnRfcnNwX3JlZyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKiwgdWludDE2X3QsIHVpbnQxNl90KTsKLWV4dGVybiBzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIHFsYTI1eHhfZ2V0X2hvc3Qoc3RydWN0IHJzcF9xdWUgKik7CiAKICNlbmRpZiAvKiBfUUxBX0dCTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCAzZjhlODQ5Li5hNjdiMmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTYyLDcgKzYyLDcgQEAKIAljdHgtPmZyZWUoc3ApOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogcWxhMngwMF9jdHhfc3BfZnJlZShzcmJfdCAqc3ApCiB7CiAJc3RydWN0IHNyYl9jdHggKmN0eCA9IHNwLT5jdHg7CkBAIC0zMzgsNiArMzM4LDE2IEBACiAJcnZhbCA9IHFsYTJ4MDBfaW5pdF9yaW5ncyh2aGEpOwogCWhhLT5mbGFncy5jaGlwX3Jlc2V0X2RvbmUgPSAxOwogCisJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MgJiYgSVNfUUxBODRYWChoYSkpIHsKKwkvKiBJc3N1ZSB2ZXJpZnkgODR4eCBGVyBJT0NCIHRvIGNvbXBsZXRlIDg0eHggaW5pdGlhbGl6YXRpb24gKi8KKwkJcnZhbCA9IHFsYTg0eHhfaW5pdF9jaGlwKHZoYSk7CisJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKKwkJCQkiVW5hYmxlIHRvIGluaXRpYWxpemUgSVNQODRYWC5cbiIpOworCQlxbGE4NHh4X3B1dF9jaGlwKHZoYSk7CisJCX0KKwl9CisKIAlyZXR1cm4gKHJ2YWwpOwogfQogCkBAIC0yMjE2LDcgKzIyMjYsNyBAQAogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZmNwb3J0LCBvciBOVUxMLCBpZiBub25lIGF2YWlsYWJsZS4KICAqLwotc3RhdGljIGZjX3BvcnRfdCAqCitmY19wb3J0X3QgKgogcWxhMngwMF9hbGxvY19mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICp2aGEsIGdmcF90IGZsYWdzKQogewogCWZjX3BvcnRfdCAqZmNwb3J0OwpAQCAtMjkwMCw4ICsyOTEwLDEzIEBACiAJCWlmIChxbGEyeDAwX2lzX3Jlc2VydmVkX2lkKHZoYSwgbG9vcF9pZCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSB8fCBMT09QX1RSQU5TSVRJT04odmhhKSkKKwkJaWYgKGF0b21pY19yZWFkKCZ2aGEtPmxvb3BfZG93bl90aW1lcikgfHwKKwkJICAgIExPT1BfVFJBTlNJVElPTih2aGEpKSB7CisJCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3BfZG93bl90aW1lciwgMCk7CisJCQlzZXRfYml0KExPT1BfUkVTWU5DX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJCXNldF9iaXQoTE9DQUxfTE9PUF9VUERBVEUsICZ2aGEtPmRwY19mbGFncyk7CiAJCQlicmVhazsKKwkJfQogCiAJCWlmIChzd2wgIT0gTlVMTCkgewogCQkJaWYgKGxhc3RfZGV2KSB7CkBAIC00ODc3LDYgKzQ4OTIsMTUgQEAKIH0KIAogdm9pZAotcWxhODF4eF91cGRhdGVfZndfb3B0aW9ucyhzY3NpX3FsYV9ob3N0X3QgKmhhKQorcWxhODF4eF91cGRhdGVfZndfb3B0aW9ucyhzY3NpX3FsYV9ob3N0X3QgKnZoYSkKIHsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmICghcWwyeGV0c2VuYWJsZSkKKwkJcmV0dXJuOworCisJLyogRW5hYmxlIEVUUyBCdXJzdC4gKi8KKwltZW1zZXQoaGEtPmZ3X29wdGlvbnMsIDAsIHNpemVvZihoYS0+Zndfb3B0aW9ucykpOworCWhhLT5md19vcHRpb25zWzJdIHw9IEJJVF85OworCXFsYTJ4MDBfc2V0X2Z3X29wdGlvbnModmhhLCBoYS0+Zndfb3B0aW9ucyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwppbmRleCBjNWNjYWMwLi44Mjk5YTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKQEAgLTEwMjUsNiArMTAyNSwxMTkgQEAKIAkvKiBJbXBsaWNpdDogbWJ4LT5tYngxMCA9IDAuICovCiB9CiAKK3N0YXRpYyB2b2lkCitxbGEyNHh4X2Vsc19pb2NiKHNyYl90ICpzcCwgc3RydWN0IGVsc19lbnRyeV8yNHh4ICplbHNfaW9jYikKK3sKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYiA9ICgoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHgpLT5ic2dfam9iOworCisgICAgICAgIGVsc19pb2NiLT5lbnRyeV90eXBlID0gRUxTX0lPQ0JfVFlQRTsKKyAgICAgICAgZWxzX2lvY2ItPmVudHJ5X2NvdW50ID0gMTsKKyAgICAgICAgZWxzX2lvY2ItPnN5c19kZWZpbmUgPSAwOworICAgICAgICBlbHNfaW9jYi0+ZW50cnlfc3RhdHVzID0gMDsKKyAgICAgICAgZWxzX2lvY2ItPmhhbmRsZSA9IHNwLT5oYW5kbGU7CisgICAgICAgIGVsc19pb2NiLT5ucG9ydF9oYW5kbGUgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5sb29wX2lkKTsKKyAgICAgICAgZWxzX2lvY2ItPnR4X2RzZF9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCk7CisgICAgICAgIGVsc19pb2NiLT52cF9pbmRleCA9IHNwLT5mY3BvcnQtPnZwX2lkeDsKKyAgICAgICAgZWxzX2lvY2ItPnNvZl90eXBlID0gRVNUX1NPRkkzOworICAgICAgICBlbHNfaW9jYi0+cnhfZHNkX2NvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCk7CisKKyAgICAgICAgZWxzX2lvY2ItPm9wY29kZSA9KCgoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHgpLT5jdHgudHlwZSA9PSBTUkJfRUxTX0NNRF9SUFQpID8KKwkgICAgYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLnJfZWxzLmVsc19jb2RlIDogYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLmNvbW1hbmRfY29kZTsKKyAgICAgICAgZWxzX2lvY2ItPnBvcnRfaWRbMF0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuYWxfcGE7CisgICAgICAgIGVsc19pb2NiLT5wb3J0X2lkWzFdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmFyZWE7CisgICAgICAgIGVsc19pb2NiLT5wb3J0X2lkWzJdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmRvbWFpbjsKKyAgICAgICAgZWxzX2lvY2ItPmNvbnRyb2xfZmxhZ3MgPSAwOworICAgICAgICBlbHNfaW9jYi0+cnhfYnl0ZV9jb3VudCA9CisgICAgICAgICAgICBjcHVfdG9fbGUzMihic2dfam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKyAgICAgICAgZWxzX2lvY2ItPnR4X2J5dGVfY291bnQgPQorICAgICAgICAgICAgY3B1X3RvX2xlMzIoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKworICAgICAgICBlbHNfaW9jYi0+dHhfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBlbHNfaW9jYi0+dHhfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKE1TRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBlbHNfaW9jYi0+dHhfbGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbgorICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSk7CisKKyAgICAgICAgZWxzX2lvY2ItPnJ4X2FkZHJlc3NbMF0gPSBjcHVfdG9fbGUzMihMU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgIChic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGVsc19pb2NiLT5yeF9hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBlbHNfaW9jYi0+cnhfbGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbgorICAgICAgICAgICAgKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCkpOworfQorCitzdGF0aWMgdm9pZAorcWxhMjR4eF9jdF9pb2NiKHNyYl90ICpzcCwgc3RydWN0IGN0X2VudHJ5XzI0eHggKmN0X2lvY2IpCit7CisJdWludDE2X3QgICAgICAgIGF2YWlsX2RzZHM7CisJdWludDMyX3QgICAgICAgICpjdXJfZHNkOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGluZGV4OworCXVpbnQxNl90IHRvdF9kc2RzOworICAgICAgICBzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNwLT5mY3BvcnQtPnZoYTsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYiA9ICgoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHgpLT5ic2dfam9iOworCWludCBsb29wX2l0ZXJhcnRpb24gPSAwOworCWludCBjb250X2lvY2JfcHJzbnQgPSAwOworCWludCBlbnRyeV9jb3VudCA9IDE7CisKKwljdF9pb2NiLT5lbnRyeV90eXBlID0gQ1RfSU9DQl9UWVBFOworICAgICAgICBjdF9pb2NiLT5lbnRyeV9zdGF0dXMgPSAwOworICAgICAgICBjdF9pb2NiLT5zeXNfZGVmaW5lID0gMDsKKyAgICAgICAgY3RfaW9jYi0+aGFuZGxlID0gc3AtPmhhbmRsZTsKKworCWN0X2lvY2ItPm5wb3J0X2hhbmRsZSA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmxvb3BfaWQpOworCWN0X2lvY2ItPnZwX2luZGV4ID0gc3AtPmZjcG9ydC0+dnBfaWR4OworICAgICAgICBjdF9pb2NiLT5jb21wX3N0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7CisKKwljdF9pb2NiLT5jbWRfZHNkX2NvdW50ID0KKyAgICAgICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCk7CisgICAgICAgIGN0X2lvY2ItPnRpbWVvdXQgPSAwOworICAgICAgICBjdF9pb2NiLT5yc3BfZHNkX2NvdW50ID0KKyAgICAgICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpOworICAgICAgICBjdF9pb2NiLT5yc3BfYnl0ZV9jb3VudCA9CisgICAgICAgICAgICBjcHVfdG9fbGUzMihic2dfam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKyAgICAgICAgY3RfaW9jYi0+Y21kX2J5dGVfY291bnQgPQorICAgICAgICAgICAgY3B1X3RvX2xlMzIoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKyAgICAgICAgY3RfaW9jYi0+ZHNlZ18wX2FkZHJlc3NbMF0gPSBjcHVfdG9fbGUzMihMU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpKTsKKyAgICAgICAgY3RfaW9jYi0+ZHNlZ18wX2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMihNU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBjdF9pb2NiLT5kc2VnXzBfbGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbgorICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSk7CisKKwlhdmFpbF9kc2RzID0gMTsKKwljdXJfZHNkID0gKHVpbnQzMl90ICopY3RfaW9jYi0+ZHNlZ18xX2FkZHJlc3M7CisJaW5kZXggPSAwOworCXRvdF9kc2RzID0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQ7CisKKwlmb3JfZWFjaF9zZyhic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsIHNnLCB0b3RfZHNkcywgaW5kZXgpIHsKKwkJZG1hX2FkZHJfdCAgICAgICBzbGVfZG1hOworCQljb250X2E2NF9lbnRyeV90ICpjb250X3BrdDsKKworCQkvKiBBbGxvY2F0ZSBhZGRpdGlvbmFsIGNvbnRpbnVhdGlvbiBwYWNrZXRzPyAqLworCQlpZiAoYXZhaWxfZHNkcyA9PSAwKSB7CisJCQkvKgorCQkJKiBGaXZlIERTRHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgQ29udC4KKwkJCSogVHlwZSAxIElPQ0IuCisJCQkgICAgICAgKi8KKwkJCWNvbnRfcGt0ID0gcWxhMngwMF9wcmVwX2NvbnRfdHlwZTFfaW9jYih2aGEpOworCQkJY3VyX2RzZCA9ICh1aW50MzJfdCAqKSBjb250X3BrdC0+ZHNlZ18wX2FkZHJlc3M7CisJCQlhdmFpbF9kc2RzID0gNTsKKwkJCWNvbnRfaW9jYl9wcnNudCA9IDE7CisJCQllbnRyeV9jb3VudCsrOworCQl9CisKKwkJc2xlX2RtYSA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoTFNEKHNsZV9kbWEpKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoTVNEKHNsZV9kbWEpKTsKKwkJKmN1cl9kc2QrKyAgID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOworCQlsb29wX2l0ZXJhcnRpb24rKzsKKwkJYXZhaWxfZHNkcy0tOworCX0KKyAgICAgICAgY3RfaW9jYi0+ZW50cnlfY291bnQgPSBlbnRyeV9jb3VudDsKK30KKwogaW50CiBxbGEyeDAwX3N0YXJ0X3NwKHNyYl90ICpzcCkKIHsKQEAgLTEwNTIsNiArMTE2NSwxMyBAQAogCQkgICAgcWxhMjR4eF9sb2dvdXRfaW9jYihzcCwgcGt0KToKIAkJICAgIHFsYTJ4MDBfbG9nb3V0X2lvY2Ioc3AsIHBrdCk7CiAJCWJyZWFrOworCWNhc2UgU1JCX0VMU19DTURfUlBUOgorCWNhc2UgU1JCX0VMU19DTURfSFNUOgorCQlxbGEyNHh4X2Vsc19pb2NiKHNwLCBwa3QpOworCQlicmVhazsKKwljYXNlIFNSQl9DVF9DTUQ6CisJCXFsYTI0eHhfY3RfaW9jYihzcCwgcGt0KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IGZmZDBlZmQuLmFiOTAzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTgsNiArOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfYnNnX2ZjLmg+CiAKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfbWJ4X2NvbXBsZXRpb24oc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90KTsKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfcHJvY2Vzc19jb21wbGV0ZWRfcmVxdWVzdChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLApAQCAtODgxLDcgKzg4Miw5IEBACiAJCSAgICBpbmRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KKwogCXJlcS0+b3V0c3RhbmRpbmdfY21kc1tpbmRleF0gPSBOVUxMOworCiBkb25lOgogCXJldHVybiBzcDsKIH0KQEAgLTk4Miw2ICs5ODUsMTAwIEBACiB9CiAKIHN0YXRpYyB2b2lkCitxbGEyNHh4X2Vsc19jdF9lbnRyeShzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3RydWN0IHJlcV9xdWUgKnJlcSwKKyAgICBzdHJ1Y3Qgc3RzX2VudHJ5XzI0eHggKnBrdCwgaW50IGlvY2JfdHlwZSkKK3sKKwljb25zdCBjaGFyIGZ1bmNbXSA9ICJFTFNfQ1RfSU9DQiI7CisJY29uc3QgY2hhciAqdHlwZTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzcmJfdCAqc3A7CisJc3RydWN0IHNyYl9ic2cgKnNwX2JzZzsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYjsKKwl1aW50MTZfdCBjb21wX3N0YXR1czsKKwl1aW50MzJfdCBmd19zdGF0dXNbM107CisJdWludDhfdCogZndfc3RzX3B0cjsKKworCXNwID0gcWxhMngwMF9nZXRfc3BfZnJvbV9oYW5kbGUodmhhLCBmdW5jLCByZXEsIHBrdCk7CisJaWYgKCFzcCkKKwkJcmV0dXJuOworCXNwX2JzZyA9IChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eDsKKwlic2dfam9iID0gc3BfYnNnLT5ic2dfam9iOworCisJdHlwZSA9IE5VTEw7CisJc3dpdGNoIChzcF9ic2ctPmN0eC50eXBlKSB7CisJY2FzZSBTUkJfRUxTX0NNRF9SUFQ6CisJY2FzZSBTUkJfRUxTX0NNRF9IU1Q6CisJCXR5cGUgPSAiZWxzIjsKKwkJYnJlYWs7CisJY2FzZSBTUkJfQ1RfQ01EOgorCQl0eXBlID0gImN0IHBhc3MtdGhyb3VnaCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICIlczogVW5yZWNvZ25pemVkIFNSQjogKCVwKSB0eXBlPSVkLlxuIiwgZnVuYywgc3AsCisJCSAgICBzcF9ic2ctPmN0eC50eXBlKTsKKwkJcmV0dXJuOworCX0KKworCWNvbXBfc3RhdHVzID0gZndfc3RhdHVzWzBdID0gbGUxNl90b19jcHUocGt0LT5jb21wX3N0YXR1cyk7CisJZndfc3RhdHVzWzFdID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzEpOworCWZ3X3N0YXR1c1syXSA9IGxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+ZXJyb3Jfc3ViY29kZV8yKTsKKworCS8qIHJldHVybiBGQ19DVEVMU19TVEFUVVNfT0sgYW5kIGxlYXZlIHRoZSBkZWNvZGluZyBvZiB0aGUgRUxTL0NUCisJICogZmMgcGF5bG9hZCAgdG8gdGhlIGNhbGxlcgorCSAqLworCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5LnN0YXR1cyA9IEZDX0NURUxTX1NUQVRVU19PSzsKKwlic2dfam9iLT5yZXBseV9sZW4gPSBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSkgKyBzaXplb2YoZndfc3RhdHVzKTsKKworCWlmIChjb21wX3N0YXR1cyAhPSBDU19DT01QTEVURSkgeworCQlpZiAoY29tcF9zdGF0dXMgPT0gQ1NfREFUQV9VTkRFUlJVTikgeworCQkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsKKwkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJCWxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+dG90YWxfYnl0ZV9jb3VudCk7CisKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgInNjc2koJWxkOjB4JXgpOiBFTFMtQ1QgcGFzcy10aHJvdWdoLSVzIGVycm9yIGNvbXBfc3RhdHVzLXN0YXR1cz0weCV4ICIKKwkJCSAgICAiZXJyb3Igc3ViY29kZSAxPTB4JXggZXJyb3Igc3ViY29kZSAyPTB4JXggdG90YWxfYnl0ZSA9IDB4JXguXG4iLAorCQkJCXZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwgY29tcF9zdGF0dXMsIGZ3X3N0YXR1c1sxXSwgZndfc3RhdHVzWzJdLAorCQkJCWxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+dG90YWxfYnl0ZV9jb3VudCkpKTsKKwkJCWZ3X3N0c19wdHIgPSAoKHVpbnQ4X3QqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOworCQkJbWVtY3B5KCBmd19zdHNfcHRyLCBmd19zdGF0dXMsIHNpemVvZihmd19zdGF0dXMpKTsKKwkJfQorCQllbHNlIHsKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgInNjc2koJWxkOjB4JXgpOiBFTFMtQ1QgcGFzcy10aHJvdWdoLSVzIGVycm9yIGNvbXBfc3RhdHVzLXN0YXR1cz0weCV4ICIKKwkJCSAgICAiZXJyb3Igc3ViY29kZSAxPTB4JXggZXJyb3Igc3ViY29kZSAyPTB4JXguXG4iLAorCQkJCXZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwgY29tcF9zdGF0dXMsCisJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzEpLAorCQkJCWxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+ZXJyb3Jfc3ViY29kZV8yKSkpOworCQkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCQkJZndfc3RzX3B0ciA9ICgodWludDhfdCopYnNnX2pvYi0+cmVxLT5zZW5zZSkgKyBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisJCQltZW1jcHkoIGZ3X3N0c19wdHIsIGZ3X3N0YXR1cywgc2l6ZW9mKGZ3X3N0YXR1cykpOworCQl9CisJCURFQlVHMihxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopcGt0LCBzaXplb2YoKnBrdCkpKTsKKwl9CisJZWxzZSB7CisJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAgRElEX09LIDw8IDE2OzsKKwkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47CisJCWJzZ19qb2ItPnJlcGx5X2xlbiA9IDA7CisJfQorCisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NnKCZoYS0+cGRldi0+ZGV2LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmICgoc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfRUxTX0NNRF9IU1QpIHx8CisJICAgIChzcF9ic2ctPmN0eC50eXBlID09IFNSQl9DVF9DTUQpKQorCQlrZnJlZShzcC0+ZmNwb3J0KTsKKwlrZnJlZShzcC0+Y3R4KTsKKwltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJYnNnX2pvYi0+am9iX2RvbmUoYnNnX2pvYik7Cit9CisKK3N0YXRpYyB2b2lkCiBxbGEyNHh4X2xvZ2lvX2VudHJ5KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgcmVxX3F1ZSAqcmVxLAogICAgIHN0cnVjdCBsb2dpb19lbnRyeV8yNHh4ICpsb2dpbykKIHsKQEAgLTE3NDksNiArMTg0NiwxMyBAQAogCQkJcWxhMjR4eF9sb2dpb19lbnRyeSh2aGEsIHJzcC0+cmVxLAogCQkJICAgIChzdHJ1Y3QgbG9naW9fZW50cnlfMjR4eCAqKXBrdCk7CiAJCQlicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENUX0lPQ0JfVFlQRToKKwkJCXFsYTI0eHhfZWxzX2N0X2VudHJ5KHZoYSwgcnNwLT5yZXEsIHBrdCwgQ1RfSU9DQl9UWVBFKTsKKwkJCWNsZWFyX2JpdChNQlhfSU5URVJSVVBULCAmdmhhLT5ody0+bWJ4X2NtZF9mbGFncyk7CisJCQlicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVMU19JT0NCX1RZUEU6CisJCQlxbGEyNHh4X2Vsc19jdF9lbnRyeSh2aGEsIHJzcC0+cmVxLCBwa3QsIEVMU19JT0NCX1RZUEUpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBUeXBlIE5vdCBTdXBwb3J0ZWQuICovCiAJCQlERUJVRzQocHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTkxNyw2ICsyMDIxLDcgQEAKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwOwogCXN0cnVjdCBkZXZpY2VfcmVnXzI0eHggX19pb21lbSAqcmVnOwogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJzcCA9IChzdHJ1Y3QgcnNwX3F1ZSAqKSBkZXZfaWQ7CiAJaWYgKCFyc3ApIHsKQEAgLTE5MjcsMTUgKzIwMzIsMTUgQEAKIAloYSA9IHJzcC0+aHc7CiAJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OwogCi0Jc3Bpbl9sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCi0JdmhhID0gcWxhMjV4eF9nZXRfaG9zdChyc3ApOworCXZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHZoYSwgcnNwKTsKIAlpZiAoIWhhLT5mbGFncy5kaXNhYmxlX21zaXhfaGFuZHNoYWtlKSB7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKIAkJUkRfUkVHX0RXT1JEX1JFTEFYRUQoJnJlZy0+aGNjcik7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xOTQ2LDYgKzIwNTEsNyBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGE7CiAJc3RydWN0IHJzcF9xdWUgKnJzcDsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewpAQCAtMTk1OCwxMCArMjA2NCwxMCBAQAogCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQsIGlmIGVuYWJsZWQsIGZvciB0aGlzIHJlc3BvbnNlIHF1ZXVlICovCiAJaWYgKHJzcC0+b3B0aW9ucyAmIH5CSVRfNikgewogCQlyZWcgPSAmaGEtPmlvYmFzZS0+aXNwMjQ7Ci0JCXNwaW5fbG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKIAkJUkRfUkVHX0RXT1JEX1JFTEFYRUQoJnJlZy0+aGNjcik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCX0KIAlxdWV1ZV93b3JrX29uKChpbnQpIChyc3AtPmlkIC0gMSksIGhhLT53cSwgJnJzcC0+cV93b3JrKTsKIApAQCAtMTk3OSw2ICsyMDg1LDcgQEAKIAl1aW50MzJfdAlzdGF0OwogCXVpbnQzMl90CWhjY3I7CiAJdWludDE2X3QJbWJbNF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJzcCA9IChzdHJ1Y3QgcnNwX3F1ZSAqKSBkZXZfaWQ7CiAJaWYgKCFyc3ApIHsKQEAgLTE5OTAsNyArMjA5Nyw3IEBACiAJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OwogCXN0YXR1cyA9IDA7CiAKLQlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAlkbyB7CiAJCXN0YXQgPSBSRF9SRUdfRFdPUkQoJnJlZy0+aG9zdF9zdGF0dXMpOwpAQCAtMjAzOSwxNCArMjE0NiwxMyBAQAogCQl9CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKIAl9IHdoaWxlICgwKTsKLQlzcGluX3VubG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHRlc3RfYml0KE1CWF9JTlRSX1dBSVQsICZoYS0+bWJ4X2NtZF9mbGFncykgJiYKIAkgICAgKHN0YXR1cyAmIE1CWF9JTlRFUlJVUFQpICYmIGhhLT5mbGFncy5tYm94X2ludCkgewogCQlzZXRfYml0KE1CWF9JTlRFUlJVUFQsICZoYS0+bWJ4X2NtZF9mbGFncyk7CiAJCWNvbXBsZXRlKCZoYS0+bWJ4X2ludHJfY29tcCk7CiAJfQotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0yMjUyLDEwICsyMzU4LDExIEBACiAKIAlpZiAoaGEtPmZsYWdzLm1zaXhfZW5hYmxlZCkKIAkJcWxhMjR4eF9kaXNhYmxlX21zaXgoaGEpOwotCWVsc2UgaWYgKGhhLT5mbGFncy5pbnRhX2VuYWJsZWQpIHsKKwllbHNlIGlmIChoYS0+ZmxhZ3MubXNpX2VuYWJsZWQpIHsKIAkJZnJlZV9pcnEoaGEtPnBkZXYtPmlycSwgcnNwKTsKIAkJcGNpX2Rpc2FibGVfbXNpKGhhLT5wZGV2KTsKLQl9CisJfSBlbHNlCisJCWZyZWVfaXJxKGhhLT5wZGV2LT5pcnEsIHJzcCk7CiB9CiAKIApAQCAtMjI3NywzMCArMjM4NCwzIEBACiAJbXNpeC0+cnNwID0gcnNwOwogCXJldHVybiByZXQ7CiB9Ci0KLXN0cnVjdCBzY3NpX3FsYV9ob3N0ICoKLXFsYTI1eHhfZ2V0X2hvc3Qoc3RydWN0IHJzcF9xdWUgKnJzcCkKLXsKLQlzcmJfdCAqc3A7Ci0Jc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHJzcC0+aHc7Ci0Jc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSA9IE5VTEw7Ci0Jc3RydWN0IHN0c19lbnRyeV8yNHh4ICpwa3Q7Ci0Jc3RydWN0IHJlcV9xdWUgKnJlcTsKLQl1aW50MTZfdCBxdWU7Ci0JdWludDMyX3QgaGFuZGxlOwotCi0JcGt0ID0gKHN0cnVjdCBzdHNfZW50cnlfMjR4eCAqKSByc3AtPnJpbmdfcHRyOwotCXF1ZSA9IE1TVyhwa3QtPmhhbmRsZSk7Ci0JaGFuZGxlID0gKHVpbnQzMl90KSBMU1cocGt0LT5oYW5kbGUpOwotCXJlcSA9IGhhLT5yZXFfcV9tYXBbcXVlXTsKLQlpZiAoaGFuZGxlIDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKSB7Ci0JCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2hhbmRsZV07Ci0JCWlmIChzcCkKLQkJCXJldHVybiAgc3AtPmZjcG9ydC0+dmhhOwotCQllbHNlCi0JCQlnb3RvIGJhc2VfcXVlOwotCX0KLWJhc2VfcXVlOgotCXZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7Ci0JcmV0dXJuIHZoYTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwppbmRleCAwNTZlNGQ0Li42ZTUzYmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCkBAIC0zNjM2LDYgKzM2MzYsMTU3IEBACiB9CiAKIGludAorcWxhMngwMF9sb29wYmFja190ZXN0KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKm1yZXEsIHVpbnQxNl90ICptcmVzcCkKK3sKKwlpbnQgcnZhbDsKKwltYnhfY21kX3QgbWM7CisJbWJ4X2NtZF90ICptY3AgPSAmbWM7CisJdWludDMyX3QgaXRlcl9jbnQgPSAweDE7CisKKwlERUJVRzExKHByaW50aygic2NzaSglbGQpOiBlbnRlcmVkLlxuIiwgdmhhLT5ob3N0X25vKSk7CisKKwltZW1zZXQobWNwLT5tYiwgMCAsIHNpemVvZihtY3AtPm1iKSk7CisJbWNwLT5tYlswXSA9IE1CQ19ESUFHTk9TVElDX0xPT1BfQkFDSzsKKwltY3AtPm1iWzFdID0gbXJlcS0+b3B0aW9ucyB8IEJJVF82OwkvLyBCSVRfNiBzcGVjaWZpZXMgNjQgYml0IGFkZHJlc3NpbmcKKworCS8qIHRyYW5zZmVyIGNvdW50ICovCisJbWNwLT5tYlsxMF0gPSBMU1cobXJlcS0+dHJhbnNmZXJfc2l6ZSk7CisJbWNwLT5tYlsxMV0gPSBNU1cobXJlcS0+dHJhbnNmZXJfc2l6ZSk7CisKKwkvKiBzZW5kIGRhdGEgYWRkcmVzcyAqLworCW1jcC0+bWJbMTRdID0gTFNXKG1yZXEtPnNlbmRfZG1hKTsKKwltY3AtPm1iWzE1XSA9IE1TVyhtcmVxLT5zZW5kX2RtYSk7CisJbWNwLT5tYlsyMF0gPSBMU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CisJbWNwLT5tYlsyMV0gPSBNU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CisKKwkvKiByZWNpZXZlIGRhdGEgYWRkcmVzcyAqLworCW1jcC0+bWJbMTZdID0gTFNXKG1yZXEtPnJjdl9kbWEpOworCW1jcC0+bWJbMTddID0gTVNXKG1yZXEtPnJjdl9kbWEpOworCW1jcC0+bWJbNl0gPSBMU1coTVNEKG1yZXEtPnJjdl9kbWEpKTsKKwltY3AtPm1iWzddID0gTVNXKE1TRChtcmVxLT5yY3ZfZG1hKSk7CisKKwkvKiBJdGVyYXRpb24gY291bnQgKi8KKwltY3AtPm1iWzE4XSA9IExTVyhpdGVyX2NudCk7CisJbWNwLT5tYlsxOV0gPSBNU1coaXRlcl9jbnQpOworCisJbWNwLT5vdXRfbWIgPSBNQlhfMjF8TUJYXzIwfE1CWF8xOXxNQlhfMTh8TUJYXzE3fE1CWF8xNnxNQlhfMTV8CisJICAgIE1CWF8xNHxNQlhfMTN8TUJYXzEyfE1CWF8xMXxNQlhfMTB8TUJYXzd8TUJYXzZ8TUJYXzF8TUJYXzA7CisJaWYgKElTX1FMQTgxWFgodmhhLT5odykpCisJCW1jcC0+b3V0X21iIHw9IE1CWF8yOworCW1jcC0+aW5fbWIgPSBNQlhfMTl8TUJYXzE4fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOworCisJbWNwLT5idWZfc2l6ZSA9IG1yZXEtPnRyYW5zZmVyX3NpemU7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CisJbWNwLT5mbGFncyA9IE1CWF9ETUFfT1VUfE1CWF9ETUFfSU58SU9DVExfQ01EOworCisJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKKworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAiKCVsZCk6IGZhaWxlZD0leCBtYlswXT0weCV4ICIKKwkJCSJtYlsxXT0weCV4IG1iWzJdPTB4JXggbWJbM109MHgleCBtYlsxOF09MHgleCBtYlsxOV09MHgleC4gXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsCisJCQltY3AtPm1iWzBdLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzJdLCBtY3AtPm1iWzNdLCBtY3AtPm1iWzE4XSwgbWNwLT5tYlsxOV0pKTsKKwl9IGVsc2UgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgInNjc2koJWxkKTogZG9uZS5cbiIsIHZoYS0+aG9zdF9ubykpOworCX0KKworCS8qIENvcHkgbWFpbGJveCBpbmZvcm1hdGlvbiAqLworCW1lbWNweSggbXJlc3AsIG1jcC0+bWIsIDY0KTsKKwltcmVzcFszXSA9IG1jcC0+bWJbMThdOworCW1yZXNwWzRdID0gbWNwLT5tYlsxOV07CisJcmV0dXJuIHJ2YWw7Cit9CisKK2ludAorcWxhMngwMF9lY2hvX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCBtc2dfZWNob19sYiAqbXJlcSwgdWludDE2X3QgKm1yZXNwKQoreworCWludCBydmFsOworCW1ieF9jbWRfdCBtYzsKKwltYnhfY21kX3QgKm1jcCA9ICZtYzsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCURFQlVHMTEocHJpbnRrKCJzY3NpKCVsZCk6IGVudGVyZWQuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKworCW1lbXNldChtY3AtPm1iLCAwICwgc2l6ZW9mKG1jcC0+bWIpKTsKKwltY3AtPm1iWzBdID0gTUJDX0RJQUdOT1NUSUNfRUNITzsKKwltY3AtPm1iWzFdID0gbXJlcS0+b3B0aW9ucyB8IEJJVF82OwkvKiBCSVRfNiBzcGVjaWZpZXMgNjRiaXQgYWRkcmVzcyAqLworCWlmIChJU19RTEE4MVhYKGhhKSkKKwkJbWNwLT5tYlsxXSB8PSBCSVRfMTU7CisJbWNwLT5tYlsyXSA9IElTX1FMQTgxWFgoaGEpID8gdmhhLT5mY29lX2ZjZl9pZHggOiAwOworCW1jcC0+bWJbMTZdID0gTFNXKG1yZXEtPnJjdl9kbWEpOworCW1jcC0+bWJbMTddID0gTVNXKG1yZXEtPnJjdl9kbWEpOworCW1jcC0+bWJbNl0gPSBMU1coTVNEKG1yZXEtPnJjdl9kbWEpKTsKKwltY3AtPm1iWzddID0gTVNXKE1TRChtcmVxLT5yY3ZfZG1hKSk7CisKKwltY3AtPm1iWzEwXSA9IExTVyhtcmVxLT50cmFuc2Zlcl9zaXplKTsKKworCW1jcC0+bWJbMTRdID0gTFNXKG1yZXEtPnNlbmRfZG1hKTsKKwltY3AtPm1iWzE1XSA9IE1TVyhtcmVxLT5zZW5kX2RtYSk7CisJbWNwLT5tYlsyMF0gPSBMU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CisJbWNwLT5tYlsyMV0gPSBNU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CisKKwltY3AtPm91dF9tYiA9IE1CWF8yMXxNQlhfMjB8TUJYXzE3fE1CWF8xNnxNQlhfMTV8CisJICAgIE1CWF8xNHxNQlhfMTB8TUJYXzd8TUJYXzZ8TUJYXzF8TUJYXzA7CisJaWYgKElTX1FMQTgxWFgoaGEpKQorCQltY3AtPm91dF9tYiB8PSBNQlhfMjsKKworCW1jcC0+aW5fbWIgPSBNQlhfMDsKKwlpZiAoSVNfUUxBMjRYWF9UWVBFKGhhKSB8fCBJU19RTEEyNVhYKGhhKSB8fCBJU19RTEE4MVhYKGhhKSkKKwkJbWNwLT5pbl9tYiB8PSBNQlhfMTsKKwlpZiAoSVNfUUxBODFYWChoYSkpCisJCW1jcC0+aW5fbWIgfD0gTUJYXzM7CisKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKKwltY3AtPmZsYWdzID0gTUJYX0RNQV9PVVR8TUJYX0RNQV9JTnxJT0NUTF9DTUQ7CisJbWNwLT5idWZfc2l6ZSA9IG1yZXEtPnRyYW5zZmVyX3NpemU7CisKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOworCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICIoJWxkKTogZmFpbGVkPSV4IG1iWzBdPTB4JXggbWJbMV09MHgleC5cbiIsCisJCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pKTsKKwl9IGVsc2UgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgInNjc2koJWxkKTogZG9uZS5cbiIsIHZoYS0+aG9zdF9ubykpOworCX0KKworCS8qIENvcHkgbWFpbGJveCBpbmZvcm1hdGlvbiAqLworCW1lbWNweSggbXJlc3AsIG1jcC0+bWIsIDMyKTsKKwlyZXR1cm4gcnZhbDsKK30KK2ludAorcWxhODR4eF9yZXNldF9jaGlwKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQxNl90IGVuYWJsZV9kaWFnbm9zdGljLAorICAgIHVpbnQxNl90ICpjbWRfc3RhdHVzKQoreworCWludCBydmFsOworCW1ieF9jbWRfdCBtYzsKKwltYnhfY21kX3QgKm1jcCA9ICZtYzsKKworCURFQlVHMTYocHJpbnRrKCIlcyglbGQpOiBlbmFibGVfZGlhZz0lZCBlbnRlcmVkLlxuIiwgX19mdW5jX18sCisJCWhhLT5ob3N0X25vLCBlbmFibGVfZGlhZ25vc3RpYykpOworCisJbWNwLT5tYlswXSA9IE1CQ19JU1A4NFhYX1JFU0VUOworCW1jcC0+bWJbMV0gPSBlbmFibGVfZGlhZ25vc3RpYzsKKwltY3AtPm91dF9tYiA9IE1CWF8xfE1CWF8wOworCW1jcC0+aW5fbWIgPSBNQlhfMXxNQlhfMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKKwltY3AtPmZsYWdzID0gTUJYX0RNQV9PVVR8TUJYX0RNQV9JTnxJT0NUTF9DTUQ7CisJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOworCisJLyogUmV0dXJuIG1haWxib3ggc3RhdHVzZXMuICovCisJKmNtZF9zdGF0dXMgPSBtY3AtPm1iWzBdOworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQorCQlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLAorCQkJcnZhbCkpOworCWVsc2UKKwkJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKworCXJldHVybiBydmFsOworfQorCitpbnQKIHFsYTJ4MDBfd3JpdGVfcmFtX3dvcmQoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQzMl90IHJpc2NfYWRkciwgdWludDMyX3QgZGF0YSkKIHsKIAlpbnQgcnZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwppbmRleCBiOTAxYWEyLi5mZjE3ZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCkBAIC02MzYsMTMgKzYzNiwxNSBAQAogCiBzdGF0aWMgdm9pZCBxbGFfZG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByc3BfcXVlLCBxX3dvcmspOwogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGE7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHJzcC0+aHc7CiAKLQlzcGluX2xvY2tfaXJxKCZyc3AtPmh3LT5oYXJkd2FyZV9sb2NrKTsKLQl2aGEgPSBxbGEyNXh4X2dldF9ob3N0KHJzcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+aHctPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwl2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCXFsYTI0eHhfcHJvY2Vzc19yZXNwb25zZV9xdWV1ZSh2aGEsIHJzcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZyc3AtPmh3LT5oYXJkd2FyZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPmh3LT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qIGNyZWF0ZSByZXNwb25zZSBxdWV1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCA4NTI5ZWIxLi40NjcyMGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMTA3LDYgKzEwNywxMiBAQAogCQkiIDEgLS0gbG9hZCBmaXJtd2FyZSBmcm9tIGZsYXNoLlxuIgogCQkiIDAgLS0gdXNlIGRlZmF1bHQgc2VtYW50aWNzLlxuIik7CiAKK2ludCBxbDJ4ZXRzZW5hYmxlOworbW9kdWxlX3BhcmFtKHFsMnhldHNlbmFibGUsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocWwyeGV0c2VuYWJsZSwKKwkJIkVuYWJsZXMgZmlybXdhcmUgRVRTIGJ1cnN0LiIKKwkJIkRlZmF1bHQgaXMgMCAtIHNraXAgRVRTIGVuYWJsZW1lbnQuIik7CisKIC8qCiAgKiBTQ1NJIGhvc3QgdGVtcGxhdGUgZW50cnkgcG9pbnRzCiAgKi8KQEAgLTY4Miw0NCArNjg4LDYgQEAKIAlyZXR1cm4gKHJldHVybl9zdGF0dXMpOwogfQogCi12b2lkCi1xbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjX3BvcnRfdCAqZmNwb3J0KQotewotCWludCBjbnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcmJfdCAqc3A7Ci0Jc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBmY3BvcnQtPnZoYTsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKLQlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0JcmVxID0gdmhhLT5yZXE7Ci0JZm9yIChjbnQgPSAxOyBjbnQgPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFM7IGNudCsrKSB7Ci0JCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2NudF07Ci0JCWlmICghc3ApCi0JCQljb250aW51ZTsKLQkJaWYgKHNwLT5mY3BvcnQgIT0gZmNwb3J0KQotCQkJY29udGludWU7Ci0JCWlmIChzcC0+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+aG9zdF9ubywgX19mdW5jX18sIGV4dEh3Q29uZmlnLkFzdWludDMyX3QpKTsKQEAgLTg4NCw3ICs4ODIsNyBAQAogCXFsNHh4eF91bmxvY2tfbnZyYW0oaGEpOwogCXFsNHh4eF91bmxvY2tfZmxhc2goaGEpOwogCi0JcmV0dXJuIChRTEFfU1VDQ0VTUyk7CisJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCiBzdGF0aWMgdm9pZCBxbGE0eDAwX3BjaV9jb25maWcoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYyBiL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMKaW5kZXggOGU1YzE2OS4uYmQ4ODM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYworKysgYi9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jCkBAIC0xNDksNiArMTQ5LDcgQEAKIAl7IFJBSURfTEVWRUxfMCwgInJhaWQwIiB9LAogCXsgUkFJRF9MRVZFTF8xLCAicmFpZDEiIH0sCiAJeyBSQUlEX0xFVkVMXzEwLCAicmFpZDEwIiB9LAorCXsgUkFJRF9MRVZFTF8xRSwgInJhaWQxZSIgfSwKIAl7IFJBSURfTEVWRUxfMywgInJhaWQzIiB9LAogCXsgUkFJRF9MRVZFTF80LCAicmFpZDQiIH0sCiAJeyBSQUlEX0xFVkVMXzUsICJyYWlkNSIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGE2MGRhNTUuLjUxMzY2MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtMTAyNiw1NSArMTAyNiwzOSBAQAogICogcmVzcG9uc2libGUgZm9yIGNhbGxpbmcga2ZyZWUoKSBvbiB0aGlzIHBvaW50ZXIgd2hlbiBpdCBpcyBubyBsb25nZXIKICAqIG5lZWRlZC4gIElmIHdlIGNhbm5vdCByZXRyaWV2ZSB0aGUgVlBEIHBhZ2UgdGhpcyByb3V0aW5lIHJldHVybnMgJU5VTEwuCiAgKi8KLXVuc2lnbmVkIGNoYXIgKnNjc2lfZ2V0X3ZwZF9wYWdlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgdTggcGFnZSkKK2ludCBzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHU4IHBhZ2UsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgICAgaW50IGJ1Zl9sZW4pCiB7CiAJaW50IGksIHJlc3VsdDsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCWNvbnN0IHVuc2lnbmVkIGludCBpbml0X3ZwZF9sZW4gPSAyNTU7Ci0JdW5zaWduZWQgY2hhciAqYnVmID0ga21hbGxvYyhpbml0X3ZwZF9sZW4sIEdGUF9LRVJORUwpOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiBOVUxMOwogCiAJLyogQXNrIGZvciBhbGwgdGhlIHBhZ2VzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSAqLwotCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCAwLCBpbml0X3ZwZF9sZW4pOworCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCAwLCBidWZfbGVuKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWw7CiAKIAkvKiBJZiB0aGUgdXNlciBhY3R1YWxseSB3YW50ZWQgdGhpcyBwYWdlLCB3ZSBjYW4gc2tpcCB0aGUgcmVzdCAqLwogCWlmIChwYWdlID09IDApCi0JCXJldHVybiBidWY7CisJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpID0gMDsgaSA8IGJ1ZlszXTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBtaW4oKGludClidWZbM10sIGJ1Zl9sZW4gLSA0KTsgaSsrKQogCQlpZiAoYnVmW2kgKyA0XSA9PSBwYWdlKQogCQkJZ290byBmb3VuZDsKKworCWlmIChpIDwgYnVmWzNdICYmIGkgPiBidWZfbGVuKQorCQkvKiByYW4gb2ZmIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgZ2l2ZSB1cyBiZW5lZml0IG9mIGRvdWJ0ICovCisJCWdvdG8gZm91bmQ7CiAJLyogVGhlIGRldmljZSBjbGFpbXMgaXQgZG9lc24ndCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgcGFnZSAqLwogCWdvdG8gZmFpbDsKIAogIGZvdW5kOgotCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCBwYWdlLCAyNTUpOworCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCBwYWdlLCBidWZfbGVuKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWw7CiAKLQkvKgotCSAqIFNvbWUgcGFnZXMgYXJlIGxvbmdlciB0aGFuIDI1NSBieXRlcy4gIFRoZSBhY3R1YWwgbGVuZ3RoIG9mCi0JICogdGhlIHBhZ2UgaXMgcmV0dXJuZWQgaW4gdGhlIGhlYWRlci4KLQkgKi8KLQlsZW4gPSAoKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXSkgKyA0OwotCWlmIChsZW4gPD0gaW5pdF92cGRfbGVuKQotCQlyZXR1cm4gYnVmOwotCi0Ja2ZyZWUoYnVmKTsKLQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JcmVzdWx0ID0gc2NzaV92cGRfaW5xdWlyeShzZGV2LCBidWYsIHBhZ2UsIGxlbik7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsOwotCi0JcmV0dXJuIGJ1ZjsKKwlyZXR1cm4gMDsKIAogIGZhaWw6Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZ2V0X3ZwZF9wYWdlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCBjNjY0MjQyLi41Njk3NzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtNzczLDggKzc3MywxNCBAQAogCSAqIHdlIGFscmVhZHkgdG9vayBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGludG8gcnEtPmVycm9ycyB3aGljaAogCSAqIGlzIHdoYXQgZ2V0cyByZXR1cm5lZCB0byB0aGUgdXNlcgogCSAqLwotCWlmIChzZW5zZV92YWxpZCAmJiBzc2hkci5zZW5zZV9rZXkgPT0gUkVDT1ZFUkVEX0VSUk9SKSB7Ci0JCWlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKKwlpZiAoc2Vuc2VfdmFsaWQgJiYgKHNzaGRyLnNlbnNlX2tleSA9PSBSRUNPVkVSRURfRVJST1IpKSB7CisJCS8qIGlmIEFUQSBQQVNTLVRIUk9VR0ggSU5GT1JNQVRJT04gQVZBSUxBQkxFIHNraXAKKwkJICogcHJpbnQgc2luY2UgY2FsbGVyIHdhbnRzIEFUQSByZWdpc3RlcnMuIE9ubHkgb2NjdXJzIG9uCisJCSAqIFNDU0kgQVRBIFBBU1NfVEhST1VHSCBjb21tYW5kcyB3aGVuIENLX0NPTkQ9MQorCQkgKi8KKwkJaWYgKChzc2hkci5hc2MgPT0gMHgwKSAmJiAoc3NoZHIuYXNjcSA9PSAweDFkKSkKKwkJCTsKKwkJZWxzZSBpZiAoIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCiAJCQlzY3NpX3ByaW50X3NlbnNlKCIiLCBjbWQpOwogCQlyZXN1bHQgPSAwOwogCQkvKiBCTE9DS19QQyBtYXkgaGF2ZSBzZXQgZXJyb3IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oIGIvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmgKaW5kZXggOTk4Y2I1Yi4uNjI2NmE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmgKQEAgLTUsNyArNSw3IEBACiAjZGVmaW5lIFNBU19QSFlfQVRUUlMJCTE3CiAjZGVmaW5lIFNBU19QT1JUX0FUVFJTCQkxCiAjZGVmaW5lIFNBU19SUE9SVF9BVFRSUwkJNwotI2RlZmluZSBTQVNfRU5EX0RFVl9BVFRSUwkzCisjZGVmaW5lIFNBU19FTkRfREVWX0FUVFJTCTUKICNkZWZpbmUgU0FTX0VYUEFOREVSX0FUVFJTCTcKIAogc3RydWN0IHNhc19pbnRlcm5hbCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggMDEyZjczYS4uZjY5NzIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtMTMzOSw4ICsxMzM5LDEwIEBACiAJCXNkZXYgPSBzY3NpX2FsbG9jX3NkZXYoc3RhcmdldCwgMCwgTlVMTCk7CiAJCWlmICghc2RldikKIAkJCXJldHVybiAwOwotCQlpZiAoc2NzaV9kZXZpY2VfZ2V0KHNkZXYpKQorCQlpZiAoc2NzaV9kZXZpY2VfZ2V0KHNkZXYpKSB7CisJCQlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIAkJCXJldHVybiAwOworCQl9CiAJfQogCiAJc3ByaW50ZihkZXZuYW1lLCAiaG9zdCAlZCBjaGFubmVsICVkIGlkICVkIiwKQEAgLTE5MDcsMTAgKzE5MDksOSBAQAogCQlnb3RvIG91dDsKIAogCXNkZXYgPSBzY3NpX2FsbG9jX3NkZXYoc3RhcmdldCwgMCwgTlVMTCk7Ci0JaWYgKHNkZXYpIHsKLQkJc2Rldi0+c2Rldl9nZW5kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmc3RhcmdldC0+ZGV2KTsKKwlpZiAoc2RldikKIAkJc2Rldi0+Ym9ya2VuID0gMDsKLQl9IGVsc2UKKwllbHNlCiAJCXNjc2lfdGFyZ2V0X3JlYXAoc3RhcmdldCk7CiAJcHV0X2RldmljZSgmc3RhcmdldC0+ZGV2KTsKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCA1YTA2NTA1Li4xOWVjOWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTg0Nyw2ICs4NDcsOCBAQAogCWlmIChzdGFyZ2V0LT5zdGF0ZSAhPSBTVEFSR0VUX0NSRUFURUQpCiAJCXJldHVybiAwOwogCisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzdGFyZ2V0LT5kZXYpOworCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzdGFyZ2V0LT5kZXYpOwogCWlmIChlcnJvcikgewogCQlkZXZfZXJyKCZzdGFyZ2V0LT5kZXYsICJ0YXJnZXQgZGV2aWNlX2FkZCBmYWlsZWQsIGVycm9yICVkXG4iLCBlcnJvcik7CkBAIC04NzgsNyArODgwLDggQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOwogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNkZXYtPnNkZXZfdGFyZ2V0OwogCi0JaWYgKChlcnJvciA9IHNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX1JVTk5JTkcpKSAhPSAwKQorCWVycm9yID0gc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfUlVOTklORyk7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IHNjc2lfdGFyZ2V0X2FkZChzdGFyZ2V0KTsKQEAgLTg4NiwxNiArODg5LDE4IEBACiAJCXJldHVybiBlcnJvcjsKIAogCXRyYW5zcG9ydF9jb25maWd1cmVfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCWVycm9yID0gZGV2aWNlX2FkZCgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9JTkZPICJlcnJvciAxXG4iKTsKLQkJZ290byBvdXRfcmVtb3ZlOworCQlyZXR1cm4gZXJyb3I7CiAJfQorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmc2Rldi0+c2Rldl9kZXYpOwogCWVycm9yID0gZGV2aWNlX2FkZCgmc2Rldi0+c2Rldl9kZXYpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9JTkZPICJlcnJvciAyXG4iKTsKIAkJZGV2aWNlX2RlbCgmc2Rldi0+c2Rldl9nZW5kZXYpOwotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAl9CiAJdHJhbnNwb3J0X2FkZF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAlzZGV2LT5pc192aXNpYmxlID0gMTsKQEAgLTkxMCwxNCArOTE1LDE0IEBACiAJZWxzZQogCQllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZSgmc2Rldi0+c2Rldl9nZW5kZXYsICZkZXZfYXR0cl9xdWV1ZV9kZXB0aCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+Y2hhbmdlX3F1ZXVlX3R5cGUpCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJnNkZXZfYXR0cl9xdWV1ZV90eXBlX3J3KTsKIAllbHNlCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJmRldl9hdHRyX3F1ZXVlX3R5cGUpOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmVtb3ZlOworCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IGJzZ19yZWdpc3Rlcl9xdWV1ZShycSwgJnNkZXYtPnNkZXZfZ2VuZGV2LCBOVUxMLCBOVUxMKTsKIApAQCAtOTMzLDE2ICs5MzgsMTEgQEAKIAkJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwKIAkJCQkJc2Rldi0+aG9zdC0+aG9zdHQtPnNkZXZfYXR0cnNbaV0pOwogCQkJaWYgKGVycm9yKQotCQkJCWdvdG8gb3V0X3JlbW92ZTsKKwkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAl9CiAKLQlyZXR1cm4gMDsKLQotIG91dF9yZW1vdmU6Ci0JX19zY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CiAJcmV0dXJuIGVycm9yOwotCiB9CiAKIHZvaWQgX19zY3NpX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCA2NTNmMjJhLi43OTY2MGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtNDc1LDcgKzQ3NSw4IEBACiAJCSAiTWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IHRoZSBGQyB0cmFuc3BvcnQgc2hvdWxkIgogCQkgIiBpbnN1bGF0ZSB0aGUgbG9zcyBvZiBhIHJlbW90ZSBwb3J0LiBPbmNlIHRoaXMgdmFsdWUgaXMiCiAJCSAiIGV4Y2VlZGVkLCB0aGUgc2NzaSB0YXJnZXQgaXMgcmVtb3ZlZC4gVmFsdWUgc2hvdWxkIGJlIgotCQkgIiBiZXR3ZWVuIDEgYW5kIFNDU0lfREVWSUNFX0JMT0NLX01BWF9USU1FT1VULiIpOworCQkgIiBiZXR3ZWVuIDEgYW5kIFNDU0lfREVWSUNFX0JMT0NLX01BWF9USU1FT1VUIGlmIgorCQkgIiBmYXN0X2lvX2ZhaWxfdG1vIGlzIG5vdCBzZXQuIik7CiAKIC8qCiAgKiBOZXRsaW5rIEluZnJhc3RydWN0dXJlCkBAIC04NDIsOSArODQzLDE3IEBACiAJICAgIChycG9ydC0+cG9ydF9zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfTk9UUFJFU0VOVCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmY3AsIDApOwotCWlmICgoKmNwICYmICgqY3AgIT0gJ1xuJykpIHx8Ci0JICAgICh2YWwgPCAwKSB8fCAodmFsID4gU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQpKQorCWlmICgoKmNwICYmICgqY3AgIT0gJ1xuJykpIHx8ICh2YWwgPCAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIElmIGZhc3RfaW9fZmFpbCBpcyBvZmYgd2UgaGF2ZSB0byBjYXAKKwkgKiBkZXZfbG9zc190bW8gYXQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQKKwkgKi8KKwlpZiAocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPT0gLTEgJiYKKwkgICAgdmFsID4gU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQpCisJCXJldHVybiAtRUlOVkFMOworCiAJaS0+Zi0+c2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyhycG9ydCwgdmFsKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC05MjUsOSArOTM0LDE2IEBACiAJCXJwb3J0LT5mYXN0X2lvX2ZhaWxfdG1vID0gLTE7CiAJZWxzZSB7CiAJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmNwLCAwKTsKLQkJaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwKLQkJICAgICh2YWwgPCAwKSB8fCAodmFsID49IHJwb3J0LT5kZXZfbG9zc190bW8pKQorCQlpZiAoKCpjcCAmJiAoKmNwICE9ICdcbicpKSB8fCAodmFsIDwgMCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyoKKwkJICogQ2FwIGZhc3RfaW9fZmFpbCBieSBkZXZfbG9zc190bW8gb3IKKwkJICogU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQuCisJCSAqLworCQlpZiAoKHZhbCA+PSBycG9ydC0+ZGV2X2xvc3NfdG1vKSB8fAorCQkgICAgKHZhbCA+IFNDU0lfREVWSUNFX0JMT0NLX01BWF9USU1FT1VUKSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCXJwb3J0LT5mYXN0X2lvX2ZhaWxfdG1vID0gdmFsOwogCX0KIAlyZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKaW5kZXggZjI3ZTUyZC4uOTI3ZTk5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwpAQCAtMTU1LDYgKzE1NSwxNyBAQAogc2FzX2JpdGZpZWxkX25hbWVfc2VhcmNoKGxpbmtzcGVlZCwgc2FzX2xpbmtzcGVlZF9uYW1lcykKIHNhc19iaXRmaWVsZF9uYW1lX3NldChsaW5rc3BlZWQsIHNhc19saW5rc3BlZWRfbmFtZXMpCiAKK3N0YXRpYyBzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnNhc19zZGV2X3RvX3JkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRhcmdldF90b19ycGh5KHNkZXYtPnNkZXZfdGFyZ2V0KTsKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXY7CisKKwlCVUdfT04ocnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgIT0gU0FTX0VORF9ERVZJQ0UpOworCisJcmRldiA9IHJwaHlfdG9fZW5kX2RldmljZShycGh5KTsKKwlyZXR1cm4gcmRldjsKK30KKwogc3RhdGljIHZvaWQgc2FzX3NtcF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKIAkJCSAgICBzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkpCiB7CkBAIC0zNTgsNiArMzY5LDg1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNhc19yZW1vdmVfaG9zdCk7CiAKKy8qKgorICogc2FzX3Rscl9zdXBwb3J0ZWQgLSBjaGVja2luZyBUTFIgYml0IGluIHZwZCAweDkwCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogQ2hlY2sgVHJhbnNwb3J0IExheWVyIFJldHJpZXMgYXJlIHN1cHBvcnRlZCBvciBub3QuCisgKiBJZiB2cGQgcGFnZSAweDkwIGlzIHByZXNlbnQsIFRSTCBpcyBzdXBwb3J0ZWQuCisgKgorICovCit1bnNpZ25lZCBpbnQKK3Nhc190bHJfc3VwcG9ydGVkKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwljb25zdCBpbnQgdnBkX2xlbiA9IDMyOworCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldiA9IHNhc19zZGV2X3RvX3JkZXYoc2Rldik7CisJY2hhciAqYnVmZmVyID0ga3phbGxvYyh2cGRfbGVuLCBHRlBfS0VSTkVMKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDkwLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKKworCS8qCisJICogTWFnaWMgbnVtYmVyczogdGhlIFZQRCBQcm90b2NvbCBwYWdlICgweDkwKQorCSAqIGhhcyBhIDQgYnl0ZSBoZWFkZXIgYW5kIHRoZW4gb25lIGVudHJ5IHBlciBkZXZpY2UgcG9ydAorCSAqIHRoZSBUTFIgYml0IGlzIGF0IG9mZnNldCA4IG9uIGVhY2ggcG9ydCBlbnRyeQorCSAqIGlmIHdlIHRha2UgdGhlIGZpcnN0IHBvcnQsIHRoYXQncyBhdCB0b3RhbCBvZmZzZXQgMTIKKwkgKi8KKwlyZXQgPSBidWZmZXJbMTJdICYgMHgwMTsKKworIG91dDoKKwlrZnJlZShidWZmZXIpOworCXJkZXYtPnRscl9zdXBwb3J0ZWQgPSByZXQ7CisJcmV0dXJuIHJldDsKKworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX3Rscl9zdXBwb3J0ZWQpOworCisvKioKKyAqIHNhc19kaXNhYmxlX3RsciAtIHNldHRpbmcgVExSIGZsYWdzCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogU2V0aW5nIHRscl9lbmFibGVkIGZsYWcgdG8gMC4KKyAqCisgKi8KK3ZvaWQKK3Nhc19kaXNhYmxlX3RscihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKworCXJkZXYtPnRscl9lbmFibGVkID0gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhc19kaXNhYmxlX3Rscik7CisKKy8qKgorICogc2FzX2VuYWJsZV90bHIgLSBzZXR0aW5nIFRMUiBmbGFncworICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIFNldGluZyB0bHJfZW5hYmxlZCBmbGFnIDEuCisgKgorICovCit2b2lkIHNhc19lbmFibGVfdGxyKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBpbnQgdGxyX3N1cHBvcnRlZCA9IDA7CisJdGxyX3N1cHBvcnRlZCAgPSBzYXNfdGxyX3N1cHBvcnRlZChzZGV2KTsKKworCWlmICh0bHJfc3VwcG9ydGVkKSB7CisJCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldiA9IHNhc19zZGV2X3RvX3JkZXYoc2Rldik7CisKKwkJcmRldi0+dGxyX2VuYWJsZWQgPSAxOworCX0KKworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhc19lbmFibGVfdGxyKTsKKwordW5zaWduZWQgaW50IHNhc19pc190bHJfZW5hYmxlZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKwlyZXR1cm4gcmRldi0+dGxyX2VuYWJsZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXNfaXNfdGxyX2VuYWJsZWQpOwogCiAvKgogICogU0FTIFBoeSBhdHRyaWJ1dGVzCkBAIC0xMTQ2LDE1ICsxMjM2LDEwIEBACiBpbnQgc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCWNoYXIgKmJ1ZmZlciA9IGt6YWxsb2MoQlVGX1NJWkUsIEdGUF9LRVJORUwpLCAqbXNkYXRhOwotCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRhcmdldF90b19ycGh5KHNkZXYtPnNkZXZfdGFyZ2V0KTsKLQlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKIAlzdHJ1Y3Qgc2NzaV9tb2RlX2RhdGEgbW9kZV9kYXRhOwogCWludCByZXMsIGVycm9yOwogCi0JQlVHX09OKHJwaHktPmlkZW50aWZ5LmRldmljZV90eXBlICE9IFNBU19FTkRfREVWSUNFKTsKLQotCXJkZXYgPSBycGh5X3RvX2VuZF9kZXZpY2UocnBoeSk7Ci0KIAlpZiAoIWJ1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyMDcsNiArMTI5MiwxMCBAQAogCQkJIiVkXG4iLCBpbnQpOwogc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIoaW5pdGlhdG9yX3Jlc3BvbnNlX3RpbWVvdXQsIGluaXRpYXRvcl9yZXNwb25zZV90aW1lb3V0LAogCQkJIiVkXG4iLCBpbnQpOworc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIodGxyX3N1cHBvcnRlZCwgdGxyX3N1cHBvcnRlZCwKKwkJCSIlZFxuIiwgaW50KTsKK3Nhc19lbmRfZGV2X3NpbXBsZV9hdHRyKHRscl9lbmFibGVkLCB0bHJfZW5hYmxlZCwKKwkJCSIlZFxuIiwgaW50KTsKIAogc3RhdGljIERFQ0xBUkVfVFJBTlNQT1JUX0NMQVNTKHNhc19leHBhbmRlcl9jbGFzcywKIAkJCSAgICAgICAic2FzX2V4cGFuZGVyIiwgTlVMTCwgTlVMTCwgTlVMTCk7CkBAIC0xNzMzLDYgKzE4MjIsOCBAQAogCVNFVFVQX0VORF9ERVZfQVRUUklCVVRFKGVuZF9kZXZfcmVhZHlfbGVkX21lYW5pbmcpOwogCVNFVFVQX0VORF9ERVZfQVRUUklCVVRFKGVuZF9kZXZfSV9UX25leHVzX2xvc3NfdGltZW91dCk7CiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9pbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dCk7CisJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl90bHJfc3VwcG9ydGVkKTsKKwlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X3Rscl9lbmFibGVkKTsKIAlpLT5lbmRfZGV2X2F0dHJzW2NvdW50XSA9IE5VTEw7CiAKIAljb3VudCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IDI1NWRhNTMuLjFkZDRkODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0xMTk2LDE5ICsxMTk2LDEwIEBACiAJCVNDcG50LT5yZXN1bHQgPSAwOwogCQltZW1zZXQoU0NwbnQtPnNlbnNlX2J1ZmZlciwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKIAkJYnJlYWs7Ci0JY2FzZSBBQk9SVEVEX0NPTU1BTkQ6Ci0JCWlmIChzc2hkci5hc2MgPT0gMHgxMCkgeyAvKiBESUY6IERpc2sgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLwotCQkJc2NzaV9wcmludF9yZXN1bHQoU0NwbnQpOwotCQkJc2NzaV9wcmludF9zZW5zZSgic2QiLCBTQ3BudCk7CisJY2FzZSBBQk9SVEVEX0NPTU1BTkQ6IC8qIERJRjogVGFyZ2V0IGRldGVjdGVkIGNvcnJ1cHRpb24gKi8KKwljYXNlIElMTEVHQUxfUkVRVUVTVDogLyogRElYOiBIb3N0IGRldGVjdGVkIGNvcnJ1cHRpb24gKi8KKwkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKQogCQkJZ29vZF9ieXRlcyA9IHNkX2NvbXBsZXRlZF9ieXRlcyhTQ3BudCk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBJTExFR0FMX1JFUVVFU1Q6Ci0JCWlmIChzc2hkci5hc2MgPT0gMHgxMCkgeyAvKiBESVg6IEhCQSBkZXRlY3RlZCBjb3JydXB0aW9uICovCi0JCQlzY3NpX3ByaW50X3Jlc3VsdChTQ3BudCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKLQkJCWdvb2RfYnl0ZXMgPSBzZF9jb21wbGV0ZWRfYnl0ZXMoU0NwbnQpOwotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTIxOCw4ICsxMjA5LDE5IEBACiAJCXNkX2RpZl9jb21wbGV0ZShTQ3BudCwgZ29vZF9ieXRlcyk7CiAKIAlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNka3AtPmRldmljZS0+aG9zdCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlKQotCSAgICA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJiBTQ3BudC0+Y21uZCAhPSBTQ3BudC0+cmVxdWVzdC0+Y21kKQorCSAgICA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJiBTQ3BudC0+Y21uZCAhPSBTQ3BudC0+cmVxdWVzdC0+Y21kKSB7CisKKwkJLyogV2UgaGF2ZSB0byBwcmludCBhIGZhaWxlZCBjb21tYW5kIGhlcmUgYXMgdGhlCisJCSAqIGV4dGVuZGVkIENEQiBnZXRzIGZyZWVkIGJlZm9yZSBzY3NpX2lvX2NvbXBsZXRpb24oKQorCQkgKiBpcyBjYWxsZWQuCisJCSAqLworCQlpZiAocmVzdWx0KQorCQkJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKKwogCQltZW1wb29sX2ZyZWUoU0NwbnQtPmNtbmQsIHNkX2NkYl9wb29sKTsKKwkJU0NwbnQtPmNtbmQgPSBOVUxMOworCQlTQ3BudC0+Y21kX2xlbiA9IDA7CisJfQogCiAJcmV0dXJuIGdvb2RfYnl0ZXM7CiB9CkBAIC0xOTQ2LDEzICsxOTQ4LDEzIEBACiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGtwLT5kaXNrLT5xdWV1ZTsKIAl1bnNpZ25lZCBpbnQgc2VjdG9yX3N6ID0gc2RrcC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZTsKLQljaGFyICpidWZmZXI7CisJY29uc3QgaW50IHZwZF9sZW4gPSAzMjsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBrbWFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOwogCi0JLyogQmxvY2sgTGltaXRzIFZQRCAqLwotCWJ1ZmZlciA9IHNjc2lfZ2V0X3ZwZF9wYWdlKHNka3AtPmRldmljZSwgMHhiMCk7Ci0KLQlpZiAoYnVmZmVyID09IE5VTEwpCi0JCXJldHVybjsKKwlpZiAoIWJ1ZmZlciB8fAorCSAgICAvKiBCbG9jayBMaW1pdHMgVlBEICovCisJICAgIHNjc2lfZ2V0X3ZwZF9wYWdlKHNka3AtPmRldmljZSwgMHhiMCwgYnVmZmVyLCB2cGRfbGVuKSkKKwkJZ290byBvdXQ7CiAKIAlibGtfcXVldWVfaW9fbWluKHNka3AtPmRpc2stPnF1ZXVlLAogCQkJIGdldF91bmFsaWduZWRfYmUxNigmYnVmZmVyWzZdKSAqIHNlY3Rvcl9zeik7CkBAIC0xOTg0LDYgKzE5ODYsNyBAQAogCQkJCWdldF91bmFsaWduZWRfYmUzMigmYnVmZmVyWzMyXSkgJiB+KDEgPDwgMzEpOwogCX0KIAorIG91dDoKIAlrZnJlZShidWZmZXIpOwogfQogCkBAIC0xOTkzLDIwICsxOTk2LDIzIEBACiAgKi8KIHN0YXRpYyB2b2lkIHNkX3JlYWRfYmxvY2tfY2hhcmFjdGVyaXN0aWNzKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3ApCiB7Ci0JY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAl1MTYgcm90OworCWNvbnN0IGludCB2cGRfbGVuID0gMzI7CiAKLQkvKiBCbG9jayBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzIFZQRCAqLwotCWJ1ZmZlciA9IHNjc2lfZ2V0X3ZwZF9wYWdlKHNka3AtPmRldmljZSwgMHhiMSk7CisJYnVmZmVyID0ga21hbGxvYyh2cGRfbGVuLCBHRlBfS0VSTkVMKTsKIAotCWlmIChidWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOworCWlmICghYnVmZmVyIHx8CisJICAgIC8qIEJsb2NrIERldmljZSBDaGFyYWN0ZXJpc3RpY3MgVlBEICovCisJICAgIHNjc2lfZ2V0X3ZwZF9wYWdlKHNka3AtPmRldmljZSwgMHhiMSwgYnVmZmVyLCB2cGRfbGVuKSkKKwkJZ290byBvdXQ7CiAKIAlyb3QgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmJ1ZmZlcls0XSk7CiAKIAlpZiAocm90ID09IDEpCiAJCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfTk9OUk9ULCBzZGtwLT5kaXNrLT5xdWV1ZSk7CiAKKyBvdXQ6CiAJa2ZyZWUoYnVmZmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Nlcy5jIGIvZHJpdmVycy9zY3NpL3Nlcy5jCmluZGV4IDU1YjAzNGIuLjFkN2E4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2VzLmMKQEAgLTQ0OCwxMyArNDQ4LDE3IEBACiAJCS5hZGRyID0gMCwKIAl9OwogCi0JYnVmID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RldiwgMHg4Myk7Ci0JaWYgKCFidWYpCi0JCXJldHVybjsKKwlidWYgPSBrbWFsbG9jKElOSVRfQUxMT0NfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYgfHwgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RldiwgMHg4MywgYnVmLCBJTklUX0FMTE9DX1NJWkUpKQorCQlnb3RvIGZyZWU7CiAKIAlzZXNfZW5jbG9zdXJlX2RhdGFfcHJvY2VzcyhlZGV2LCB0b19zY3NpX2RldmljZShlZGV2LT5lZGV2LnBhcmVudCksIDApOwogCiAJdnBkX2xlbiA9ICgoYnVmWzJdIDw8IDgpIHwgYnVmWzNdKSArIDQ7CisJa2ZyZWUoYnVmKTsKKwlidWYgPSBrbWFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmIHx8c2NzaV9nZXRfdnBkX3BhZ2Uoc2RldiwgMHg4MywgYnVmLCB2cGRfbGVuKSkKKwkJZ290byBmcmVlOwogCiAJZGVzYyA9IGJ1ZiArIDQ7CiAJd2hpbGUgKGRlc2MgPCBidWYgKyB2cGRfbGVuKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwppbmRleCA1NDAyM2Q0MS4uMjZlOGUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYworKysgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogICAgY2hhciAqY3VyID0gc3RyOwogICAgaW50IGkgPSAxOwogCi0gICB3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8PSBNQVhfSU5UX1BBUkFNKSB7CisgICB3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8IE1BWF9JTlRfUEFSQU0pIHsKICAgICAgIGludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAKICAgICAgIGlmICgoY3VyID0gc3RyY2hyKGN1ciwgJywnKSkgIT0gTlVMTCkgY3VyKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jIGIvZHJpdmVycy9zY3NpL3Ztd19wdnNjc2kuYwppbmRleCBkMjYwNGM4Li5lNGFjNTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMKQEAgLTEwNjksNyArMTA2OSw4IEBACiAJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY3R4LT5zZ2wsIGdldF9vcmRlcihTR0xfU0laRSkpOwogfQogCi1zdGF0aWMgaW50IHB2c2NzaV9zZXR1cF9tc2l4KGNvbnN0IHN0cnVjdCBwdnNjc2lfYWRhcHRlciAqYWRhcHRlciwgaW50ICppcnEpCitzdGF0aWMgaW50IHB2c2NzaV9zZXR1cF9tc2l4KGNvbnN0IHN0cnVjdCBwdnNjc2lfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgdW5zaWduZWQgaW50ICppcnEpCiB7CiAJc3RydWN0IG1zaXhfZW50cnkgZW50cnkgPSB7IDAsIFBWU0NTSV9WRUNUT1JfQ09NUExFVElPTiB9OwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggYzNlMzdjOC4uYTgxZmY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtODMsNiArODMsOSBAQAogCiAjZGVmaW5lIFBBU1NfTElNSVQJMjU2CiAKKyNkZWZpbmUgQk9USF9FTVBUWSAJKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKQorCisKIC8qCiAgKiBXZSBkZWZhdWx0IHRvIElSUTAgZm9yIHRoZSAibm8gaXJxIiBoYWNrLiAgIFNvbWUKICAqIG1hY2hpbmUgdHlwZXMgd2FudCBvdGhlcnMgYXMgd2VsbCAtIHRoZXkncmUgZnJlZQpAQCAtMTIxNCwxMiArMTIxNyw2IEBACiAJfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwCi0JLyogaWYgYWNjZXNzIG1ldGhvZCBpcyBBVSwgaXQgaXMgYSAxNjU1MCB3aXRoIGEgcXVpcmsgKi8KLQlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUXzE2NTUwQSAmJiB1cC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKLQkJdXAtPmJ1Z3MgfD0gVUFSVF9CVUdfTk9NU1I7Ci0jZW5kaWYKLQogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgc2F2ZV9sY3IpOwogCiAJaWYgKHVwLT5jYXBhYmlsaXRpZXMgIT0gdWFydF9jb25maWdbdXAtPnBvcnQudHlwZV0uZmxhZ3MpIHsKQEAgLTE3OTIsNyArMTc4OSw3IEBACiAJdXAtPmxzcl9zYXZlZF9mbGFncyB8PSBsc3IgJiBMU1JfU0FWRV9GTEFHUzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gbHNyICYgVUFSVF9MU1JfVEVNVCA/IFRJT0NTRVJfVEVNVCA6IDA7CisJcmV0dXJuIChsc3IgJiBCT1RIX0VNUFRZKSA9PSBCT1RIX0VNUFRZID8gVElPQ1NFUl9URU1UIDogMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzZXJpYWw4MjUwX2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtMTg1MCw4ICsxODQ3LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiB9CiAKLSNkZWZpbmUgQk9USF9FTVBUWSAoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCi0KIC8qCiAgKglXYWl0IGZvciB0cmFuc21pdHRlciAmIGhvbGRpbmcgcmVnaXN0ZXIgdG8gZW1wdHkKICAqLwpAQCAtMjQyNyw3ICsyNDIyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsODI1MF9wb3J0X3NpemUoc3RydWN0IHVhcnRfODI1MF9wb3J0ICpwdCkKIHsKIAlpZiAocHQtPnBvcnQuaW90eXBlID09IFVQSU9fQVUpCi0JCXJldHVybiAweDEwMDAwMDsKKwkJcmV0dXJuIDB4MTAwMDsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQCiAJaWYgKGlzX29tYXBfcG9ydChwdCkpCiAJCXJldHVybiAweDE2IDw8IHB0LT5wb3J0LnJlZ3NoaWZ0OwpAQCAtMjU4NCw2ICsyNTc5LDEzIEBACiAKIAlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFKQogCQlhdXRvY29uZmlnKHVwLCBwcm9iZWZsYWdzKTsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDAKKwkvKiBpZiBhY2Nlc3MgbWV0aG9kIGlzIEFVLCBpdCBpcyBhIDE2NTUwIHdpdGggYSBxdWlyayAqLworCWlmICh1cC0+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/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMgYi9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jCmluZGV4IDM3N2YyNzEuLmFiMmFiM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgdWxpdGVfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1bGl0ZV9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCWludCBiYXVkID0gOTYwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvaW50Yy5jIGIvZHJpdmVycy9zaC9pbnRjLmMKaW5kZXggZDVkN2YyMy4uM2E1YTE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9pbnRjLmMKKysrIGIvZHJpdmVycy9zaC9pbnRjLmMKQEAgLTI1OSw2ICsyNTksNDMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkICgqaW50Y19lbmFibGVfbm9wcmlvX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJCQl2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyksCisJCQkJCXVuc2lnbmVkIGludCBpcnEpID0geworCVtNT0RFX0VOQUJMRV9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV96ZXJvLAorCVtNT0RFX0RVQUxfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9QUklPX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfUENMUl9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorfTsKKworc3RhdGljIHZvaWQgaW50Y19lbmFibGVfZGlzYWJsZShzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQl1bnNpZ25lZCBsb25nIGhhbmRsZSwgaW50IGRvX2VuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaW50IGNwdTsKKwl2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCSAgIHZvaWQgKCopKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpLAorCQkgICB1bnNpZ25lZCBpbnQpOworCisJaWYgKGRvX2VuYWJsZSkgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IFNNUF9OUihkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSk7IGNwdSsrKSB7CisJCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9FKGhhbmRsZSksIGNwdSk7CisJCQlmbiA9IGludGNfZW5hYmxlX25vcHJpb19mbnNbX0lOVENfTU9ERShoYW5kbGUpXTsKKwkJCWZuKGFkZHIsIGhhbmRsZSwgaW50Y19yZWdfZm5zW19JTlRDX0ZOKGhhbmRsZSldLCAwKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpKTsgY3B1KyspIHsKKwkJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0QoaGFuZGxlKSwgY3B1KTsKKwkJCWZuID0gaW50Y19kaXNhYmxlX2Zuc1tfSU5UQ19NT0RFKGhhbmRsZSldOworCQkJZm4oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNbX0lOVENfRk4oaGFuZGxlKV0sIDApOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IGludGNfc2V0X3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogewogCXJldHVybiAwOyAvKiBhbGxvdyB3YWtldXAsIGJ1dCBzZXR1cCBoYXJkd2FyZSBpbiBpbnRjX3N1c3BlbmQoKSAqLwpAQCAtNDAwLDExICs0MzcsMTEgQEAKIHN0YXRpYyBpbnRjX2VudW0gX19pbml0IGludGNfZ3JwX2lkKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCiAJCQkJICAgIGludGNfZW51bSBlbnVtX2lkKQogewotCXN0cnVjdCBpbnRjX2dyb3VwICpnID0gZGVzYy0+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+Y2xrKTsKIAogCXMzYzY0eHhfc3BpX2h3aW5pdChzZGQsIHBkZXYtPmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKaW5kZXggNTFlNWUxZC4uZDkzYjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKQEAgLTIwLDEyICsyMCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NoX21zaW9mLmg+CiAKLSNpbmNsdWRlIDxhc20vc3BpLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiBzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgewpAQCAtMTczLDE1ICsxNzMsMTIgQEAKIAlpbnQgZWRnZTsKIAogCS8qCi0JICogQ1BPTCBDUEhBICAgICBUU0NLSVogUlNDS0laIFRFREcgUkVERyghKQotCSAqICAgIDAgICAgMCAgICAgICAgIDEwICAgICAxMCAgICAxICAgIDAKLQkgKiAgICAwICAgIDEgICAgICAgICAxMCAgICAgMTAgICAgMCAgICAxCi0JICogICAgMSAgICAwICAgICAgICAgMTEgICAgIDExICAgIDAgICAgMQotCSAqICAgIDEgICAgMSAgICAgICAgIDExICAgICAxMSAgICAxICAgIDAKLQkgKgotCSAqICghKSBOb3RlOiBSRURHIGlzIGludmVydGVkIHJlY29tbWVuZGVkIGRhdGEgc2hlZXQgc2V0dGluZworCSAqIENQT0wgQ1BIQSAgICAgVFNDS0laIFJTQ0tJWiBURURHIFJFREcKKwkgKiAgICAwICAgIDAgICAgICAgICAxMCAgICAgMTAgICAgMSAgICAxCisJICogICAgMCAgICAxICAgICAgICAgMTAgICAgIDEwICAgIDAgICAgMAorCSAqICAgIDEgICAgMCAgICAgICAgIDExICAgICAxMSAgICAwICAgIDAKKwkgKiAgICAxICAgIDEgICAgICAgICAxMSAgICAgMTEgICAgMSAgICAxCiAJICovCi0KIAlzaF9tc2lvZl93cml0ZShwLCBGQ1RSLCAwKTsKIAlzaF9tc2lvZl93cml0ZShwLCBUTURSMSwgMHhlMjAwMDAwNSB8IChsc2JfZmlyc3QgPDwgMjQpKTsKIAlzaF9tc2lvZl93cml0ZShwLCBSTURSMSwgMHgyMjAwMDAwNSB8IChsc2JfZmlyc3QgPDwgMjQpKTsKQEAgLTE5Myw3ICsxOTAsNyBAQAogCWVkZ2UgPSBjcG9sID8gY3BoYSA6ICFjcGhhOwogCiAJdG1wIHw9IGVkZ2UgPDwgMjc7IC8qIFRFREcgKi8KLQl0bXAgfD0gIWVkZ2UgPDwgMjY7IC8qIFJFREcgKi8KKwl0bXAgfD0gZWRnZSA8PCAyNjsgLyogUkVERyAqLwogCXRtcCB8PSAodHhfaGlfeiA/IDIgOiAwKSA8PCAyMjsgLyogVFhESVogKi8KIAlzaF9tc2lvZl93cml0ZShwLCBDVFIsIHRtcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwppbmRleCAyNTUyYmIzLi5mYWRmZjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCWJyZWFrOwkJCQkJCVwKIAkJfQkJCQkJCQlcCiAJCWNwdV9yZWxheCgpOwkJCQkJCVwKLQl9IHdoaWxlICh0aW1lX2JlZm9yZShlbmRfamlmZmllcywgamlmZmllcykpOwkJCVwKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfamlmZmllcykpOwkJCVwKIAlzdWNjZWVkZWQ7CQkJCQkJCVwKIAl9KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKaW5kZXggOWYzODYzNy4uMWI0NzM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYwpAQCAtOTMsNiArOTMsMjYgQEAKIAl2b2lkICgqcnhfZm4pIChzdHJ1Y3QgeGlsaW54X3NwaSAqKTsKIH07CiAKK3N0YXRpYyB2b2lkIHhzcGlfd3JpdGUzMih1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW93cml0ZTMyKHZhbCwgYWRkcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHNwaV9yZWFkMzIodm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBpb3JlYWQzMihhZGRyKTsKK30KKworc3RhdGljIHZvaWQgeHNwaV93cml0ZTMyX2JlKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpb3dyaXRlMzJiZSh2YWwsIGFkZHIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHhzcGlfcmVhZDMyX2JlKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gaW9yZWFkMzJiZShhZGRyKTsKK30KKwogc3RhdGljIHZvaWQgeHNwaV90eDgoc3RydWN0IHhpbGlueF9zcGkgKnhzcGkpCiB7CiAJeHNwaS0+d3JpdGVfZm4oKnhzcGktPnR4X3B0ciwgeHNwaS0+cmVncyArIFhTUElfVFhEX09GRlNFVCk7CkBAIC0zNzQsMTEgKzM5NCwxMSBAQAogCXhzcGktPm1lbSA9ICptZW07CiAJeHNwaS0+aXJxID0gaXJxOwogCWlmIChwZGF0YS0+bGl0dGxlX2VuZGlhbikgewotCQl4c3BpLT5yZWFkX2ZuID0gaW9yZWFkMzI7Ci0JCXhzcGktPndyaXRlX2ZuID0gaW93cml0ZTMyOworCQl4c3BpLT5yZWFkX2ZuID0geHNwaV9yZWFkMzI7CisJCXhzcGktPndyaXRlX2ZuID0geHNwaV93cml0ZTMyOwogCX0gZWxzZSB7Ci0JCXhzcGktPnJlYWRfZm4gPSBpb3JlYWQzMmJlOwotCQl4c3BpLT53cml0ZV9mbiA9IGlvd3JpdGUzMmJlOworCQl4c3BpLT5yZWFkX2ZuID0geHNwaV9yZWFkMzJfYmU7CisJCXhzcGktPndyaXRlX2ZuID0geHNwaV93cml0ZTMyX2JlOwogCX0KIAl4c3BpLT5iaXRzX3Blcl93b3JkID0gcGRhdGEtPmJpdHNfcGVyX3dvcmQ7CiAJaWYgKHhzcGktPmJpdHNfcGVyX3dvcmQgPT0gOCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jCmluZGV4IDcxZGMzYWQuLmVkMzRhOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYworKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlyZXR1cm4geGlsaW54X3NwaV9yZW1vdmUob3ApOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfc3BpX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfc3BpX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5hIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXNwaS0yLjAwLmIiLCB9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9tYWluLmMgYi9kcml2ZXJzL3NzYi9tYWluLmMKaW5kZXggNTY4MWViZS4uMDNkZmQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvbWFpbi5jCisrKyBiL2RyaXZlcnMvc3NiL21haW4uYwpAQCAtNDk0LDggKzQ5NCw3IEBACiAjZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIFNTQl9CVVNUWVBFX1NESU86Ci0jaWZkZWYgQ09ORklHX1NTQl9TRElPCi0JCQlzZGV2LT5pcnEgPSBidXMtPmhvc3Rfc2Rpby0+ZGV2LmlycTsKKyNpZmRlZiBDT05GSUdfU1NCX1NESU9IT1NUCiAJCQlkZXYtPnBhcmVudCA9ICZidXMtPmhvc3Rfc2Rpby0+ZGV2OwogI2VuZGlmCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggOTRlYjg2My4uZmMyZTk2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTk5LDggKzk5LDYgQEAKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL29jdGVvbi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCmluZGV4IDhjZjdmMjcuLmMzMjRmNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwogCXN0cnVjdCBnbzcwMDdfdXNiICp1c2I7CiAJaW50IHJjOwotCWludCBkZXZfYWRkciA9IGNsaWVudC0+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+ZWNsb2NrX2h6IC8gKElOVEVSUlVQVF9MSU1JVCAqCi0JCQkJCQkJICAgICAxNiAqIDI1NikgPDwgOCk7CisJY3ZtX29jdF90eF9pbml0aWFsaXplKCk7CisJY3ZtX29jdF9yeF9pbml0aWFsaXplKCk7CiAKLQkJLyoKLQkJICogRW5hYmxlIFBPVyB0aW1lciBpbnRlcnJ1cHQuIEl0IHdpbGwgY291bnQgd2hlbgotCQkgKiB0aGVyZSBhcmUgcGFja2V0cyBhdmFpbGFibGUuCi0JCSAqLwotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksCi0JCQkgICAgICAgMHgxZnVsIDw8IDI0KTsKLQl9IGVsc2UgewotCQkvKiBFbmFibGUgUE9XIGludGVycnVwdCB3aGVuIG91ciBwb3J0IGhhcyBhdCBsZWFzdCBvbmUgcGFja2V0ICovCi0JCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1dRX0lOVF9USFJYKHBvd19yZWNlaXZlX2dyb3VwKSwgMHgxMDAxKTsKLQl9CisJLyoKKwkgKiAxNTAgdVM6IGFib3V0IDEwIDE1MDAtYnl0ZSBwYWNrdGVzIGF0IDFHRS4KKwkgKi8KKwljdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWwgPSAxNTAgKiAob2N0ZW9uX2dldF9jbG9ja19yYXRlKCkgLyAxMDAwMDAwKTsKIAotCS8qIEVuYWJsZSB0aGUgcG9sbCB0aW1lciBmb3IgY2hlY2tpbmcgUkdNSUkgc3RhdHVzICovCi0JaW5pdF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKLQljdm1fb2N0X3BvbGxfdGltZXIuZGF0YSA9IDA7Ci0JY3ZtX29jdF9wb2xsX3RpbWVyLmZ1bmN0aW9uID0gY3ZtX2RvX3RpbWVyOwotCW1vZF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyLCBqaWZmaWVzICsgSFopOworCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBNb2R1bGUgLyBkcml2ZXIgc2h1dGRvd24KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcwotICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3ZtX29jdF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBwb3J0OwpAQCAtODUzLDIyICs4MDAsMzEgQEAKIAkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXAsIGN2bV9vY3RfZGV2aWNlKTsKIAotCWRlbF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKKwlhdG9taWNfaW5jX3JldHVybigmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmN2bV9vY3RfcnhfcmVmaWxsX3dvcmspOworCiAJY3ZtX29jdF9yeF9zaHV0ZG93bigpOworCWN2bV9vY3RfdHhfc2h1dGRvd24oKTsKKwogCWN2bXhfcGtvX2Rpc2FibGUoKTsKIAogCS8qIEZyZWUgdGhlIGV0aGVybmV0IGRldmljZXMgKi8KIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKIAkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7Ci0JCQljdm1fb2N0X3R4X3NodXRkb3duKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCWtmcmVlKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjdm1fb2N0X2RldmljZVtwb3J0XTsKKwkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmspOworCisJCQljdm1fb2N0X3R4X3NodXRkb3duX2RldihkZXYpOworCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJCWtmcmVlKGRldik7CiAJCQljdm1fb2N0X2RldmljZVtwb3J0XSA9IE5VTEw7CiAJCX0KIAl9CiAKKwlkZXN0cm95X3dvcmtxdWV1ZShjdm1fb2N0X3BvbGxfcXVldWUpOworCiAJY3ZteF9wa29fc2h1dGRvd24oKTsKLQljdm1fb2N0X3Byb2Nfc2h1dGRvd24oKTsKIAogCWN2bXhfaXBkX2ZyZWVfcHRyKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL29jdGVvbi1ldGhlcm5ldC5oCmluZGV4IDQwMmExNWIuLmQ1ODE5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9vY3Rlb24tZXRoZXJuZXQuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTU3LDU4ICs1NywxMiBAQAogCXVpbnQ2NF90IGxpbmtfaW5mbzsKIAkvKiBDYWxsZWQgcGVyaW9kaWNhbGx5IHRvIGNoZWNrIGxpbmsgc3RhdHVzICovCiAJdm9pZCAoKnBvbGwpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXBvcnRfcGVyaW9kaWNfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcG9ydF93b3JrOwkvKiBtYXkgYmUgdW51c2VkLiAqLwogfTsKIAotLyoqCi0gKiBGcmVlIGEgd29yayBxdWV1ZSBlbnRyeSByZWNlaXZlZCBpbiBhIGludGVyY2VwdCBjYWxsYmFjay4KLSAqCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBmcmVlCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgTmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwogaW50IGN2bV9vY3RfZnJlZV93b3JrKHZvaWQgKndvcmtfcXVldWVfZW50cnkpOwogCi0vKioKLSAqIFRyYW5zbWl0IGEgd29yayBxdWV1ZSBlbnRyeSBvdXQgb2YgdGhlIGV0aGVybmV0IHBvcnQuIEJvdGgKLSAqIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCB0aGUgcGFja2V0IGRhdGEgY2FuIG9wdGlvbmFsbHkgYmUKLSAqIGZyZWVkLiBUaGUgd29yayB3aWxsIGJlIGZyZWVkIG9uIGVycm9yIGFzIHdlbGwuCi0gKgotICogQGRldjogICAgIERldmljZSB0byB0cmFuc21pdCBvdXQuCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gc2VuZAotICogQGRvX2ZyZWU6IFRydWUgaWYgdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHBhY2tldCBkYXRhIHNob3VsZCBiZQotICogICAgICAgICAgICAgICAgZnJlZWQuIElmIGZhbHNlLCBuZWl0aGVyIHdpbGwgYmUgZnJlZWQuCi0gKiBAcW9zOiAgICAgSW5kZXggaW50byB0aGUgcXVldWVzIGZvciB0aGlzIHBvcnQgdG8gdHJhbnNtaXQgb24uIFRoaXMKLSAqICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gaW1wbGVtZW50IFFvUyBpZiB0aGVpciBhcmUgbXVsdGlwbGUgcXVldWVzIHBlcgotICogICAgICAgICAgICAgICAgcG9ydC4gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YKLSAqICAgICAgICAgICAgICAgIHF1ZXVlcyBwZXIgcG9ydCBtaW51cyAxLiBWYWx1ZXMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIHdpbGwKLSAqICAgICAgICAgICAgICAgIGJlIGNoYW5nZSB0byB6ZXJvLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgotICovCi1pbnQgY3ZtX29jdF90cmFuc21pdF9xb3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqd29ya19xdWV1ZV9lbnRyeSwKLQkJCSBpbnQgZG9fZnJlZSwgaW50IHFvcyk7Ci0KLS8qKgotICogVHJhbnNtaXQgYSB3b3JrIHF1ZXVlIGVudHJ5IG91dCBvZiB0aGUgZXRoZXJuZXQgcG9ydC4gQm90aAotICogdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHRoZSBwYWNrZXQgZGF0YSBjYW4gb3B0aW9uYWxseSBiZQotICogZnJlZWQuIFRoZSB3b3JrIHdpbGwgYmUgZnJlZWQgb24gZXJyb3IgYXMgd2VsbC4gVGhpcyBzaW1wbHkKLSAqIHdyYXBzIGN2bXhfb2N0X3RyYW5zbWl0X3FvcygpIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4KLSAqCi0gKiBAZGV2OiAgICAgRGV2aWNlIHRvIHRyYW5zbWl0IG91dC4KLSAqIEB3b3JrX3F1ZXVlX2VudHJ5OgotICogICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBzZW5kCi0gKiBAZG9fZnJlZTogVHJ1ZSBpZiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgcGFja2V0IGRhdGEgc2hvdWxkIGJlCi0gKiAgICAgICAgICAgICAgICBmcmVlZC4gSWYgZmFsc2UsIG5laXRoZXIgd2lsbCBiZSBmcmVlZC4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgY3ZtX29jdF90cmFuc21pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHZvaWQgKndvcmtfcXVldWVfZW50cnksIGludCBkb19mcmVlKQotewotCXJldHVybiBjdm1fb2N0X3RyYW5zbWl0X3FvcyhkZXYsIHdvcmtfcXVldWVfZW50cnksIGRvX2ZyZWUsIDApOwotfQotCiBleHRlcm4gaW50IGN2bV9vY3RfcmdtaWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGN2bV9vY3RfcmdtaWlfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBjdm1fb2N0X3JnbWlpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzQsNSArODgsMTEgQEAKIGV4dGVybiBpbnQgcG93X3JlY2VpdmVfZ3JvdXA7CiBleHRlcm4gY2hhciBwb3dfc2VuZF9saXN0W107CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmN2bV9vY3RfZGV2aWNlW107CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKK2V4dGVybiBhdG9taWNfdCBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmc7CitleHRlcm4gdTY0IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKworZXh0ZXJuIGludCBtYXhfcnhfY3B1czsKK2V4dGVybiBpbnQgcnhfbmFwaV93ZWlnaHQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jCmluZGV4IDEzM2I4NmMuLjJmZmYwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3I6IEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaAppbmRleCAzOGQwYzMzLi4wMmI0ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwppbmRleCAxNjFkYmM5Li5hNGY2ZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC02LDcgKzYsNyBAQAogICogCSAgICBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKaW5kZXggN2YyYzM0MS4uN2VlNTY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApAQCAtNiw3ICs2LDcgQEAKICAqCSAJQm95b2QgYm95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IDZlOGJjZGYuLmE2NzgxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTEzMTIsOSArMTMxMiw5IEBACiAJdm9pZCBfX3VzZXIgKmFkZHIgPSBhcy0+dXNlcnVyYjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChhcy0+dXNlcmJ1ZmZlcikKKwlpZiAoYXMtPnVzZXJidWZmZXIgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKQogCQlpZiAoY29weV90b191c2VyKGFzLT51c2VyYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSkKKwkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoKSkKIAkJCWdvdG8gZXJyX291dDsKIAlpZiAocHV0X3VzZXIoYXMtPnN0YXR1cywgJnVzZXJ1cmItPnN0YXR1cykpCiAJCWdvdG8gZXJyX291dDsKQEAgLTEzMzQsMTQgKzEzMzQsMTEgQEAKIAkJfQogCX0KIAotCWZyZWVfYXN5bmMoYXMpOwotCiAJaWYgKHB1dF91c2VyKGFkZHIsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZykpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogCiBlcnJfb3V0OgotCWZyZWVfYXN5bmMoYXMpOwogCXJldHVybiAtRUZBVUxUOwogfQogCkBAIC0xMzcxLDggKzEzNjgsMTEgQEAKIHN0YXRpYyBpbnQgcHJvY19yZWFwdXJiKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQogewogCXN0cnVjdCBhc3luYyAqYXMgPSByZWFwX2FzKHBzKTsKLQlpZiAoYXMpCi0JCXJldHVybiBwcm9jZXNzY29tcGwoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CisJaWYgKGFzKSB7CisJCWludCByZXR2YWwgPSBwcm9jZXNzY29tcGwoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CisJCWZyZWVfYXN5bmMoYXMpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCXJldHVybiAtRUlOVFI7CiAJcmV0dXJuIC1FSU87CkBAIC0xMzgwLDExICsxMzgwLDE2IEBACiAKIHN0YXRpYyBpbnQgcHJvY19yZWFwdXJibm9uYmxvY2soc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCiB7CisJaW50IHJldHZhbDsKIAlzdHJ1Y3QgYXN5bmMgKmFzOwogCi0JaWYgKCEoYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JcmV0dXJuIHByb2Nlc3Njb21wbChhcywgKHZvaWQgX191c2VyICogX191c2VyICopYXJnKTsKKwlhcyA9IGFzeW5jX2dldGNvbXBsZXRlZChwcyk7CisJcmV0dmFsID0gLUVBR0FJTjsKKwlpZiAoYXMpIHsKKwkJcmV0dmFsID0gcHJvY2Vzc2NvbXBsKGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCQlmcmVlX2FzeW5jKGFzKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTE0NzUsOSArMTQ4MCw5IEBACiAJdm9pZCBfX3VzZXIgKmFkZHIgPSBhcy0+dXNlcnVyYjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChhcy0+dXNlcmJ1ZmZlcikKKwlpZiAoYXMtPnVzZXJidWZmZXIgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKQogCQlpZiAoY29weV90b191c2VyKGFzLT51c2VyYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSkKKwkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCWlmIChwdXRfdXNlcihhcy0+c3RhdHVzLCAmdXNlcnVyYi0+c3RhdHVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xNDk3LDcgKzE1MDIsNiBAQAogCQl9CiAJfQogCi0JZnJlZV9hc3luYyhhcyk7CiAJaWYgKHB1dF91c2VyKHB0cl90b19jb21wYXQoYWRkciksICh1MzIgX191c2VyICopYXJnKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CkBAIC0xNTA2LDggKzE1MTAsMTEgQEAKIHN0YXRpYyBpbnQgcHJvY19yZWFwdXJiX2NvbXBhdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlzdHJ1Y3QgYXN5bmMgKmFzID0gcmVhcF9hcyhwcyk7Ci0JaWYgKGFzKQotCQlyZXR1cm4gcHJvY2Vzc2NvbXBsX2NvbXBhdChhcywgKHZvaWQgX191c2VyICogX191c2VyICopYXJnKTsKKwlpZiAoYXMpIHsKKwkJaW50IHJldHZhbCA9IHByb2Nlc3Njb21wbF9jb21wYXQoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CisJCWZyZWVfYXN5bmMoYXMpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCXJldHVybiAtRUlOVFI7CiAJcmV0dXJuIC1FSU87CkBAIC0xNTE1LDExICsxNTIyLDE2IEBACiAKIHN0YXRpYyBpbnQgcHJvY19yZWFwdXJibm9uYmxvY2tfY29tcGF0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQogeworCWludCByZXR2YWw7CiAJc3RydWN0IGFzeW5jICphczsKIAotCWlmICghKGFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKSkpCi0JCXJldHVybiAtRUFHQUlOOwotCXJldHVybiBwcm9jZXNzY29tcGxfY29tcGF0KGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCXJldHZhbCA9IC1FQUdBSU47CisJYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpOworCWlmIChhcykgeworCQlyZXR2YWwgPSBwcm9jZXNzY29tcGxfY29tcGF0KGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCQlmcmVlX2FzeW5jKGFzKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCA2MGE0NWYxLi5mMmYwNTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKQEAgLTEwMjIsNiArMTAyMiwxNCBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJLyogTm9uLXJvb3QgZGV2aWNlcyBvbiBhIGZ1bGwvbG93LXNwZWVkIGJ1cyBtdXN0IHdhaXQgZm9yIHRoZWlyCisJICogY29tcGFuaW9uIGhpZ2gtc3BlZWQgcm9vdCBodWIsIGluIGNhc2UgYSBoYW5kb2ZmIGlzIG5lZWRlZC4KKwkgKi8KKwlpZiAoIShtc2cuZXZlbnQgJiBQTV9FVkVOVF9BVVRPKSAmJiB1ZGV2LT5wYXJlbnQgJiYKKwkJCXVkZXYtPmJ1cy0+aHNfY29tcGFuaW9uKQorCQlkZXZpY2VfcG1fd2FpdF9mb3JfZGV2KCZ1ZGV2LT5kZXYsCisJCQkJJnVkZXYtPmJ1cy0+aHNfY29tcGFuaW9uLT5yb290X2h1Yi0+ZGV2KTsKKwogCWlmICh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfUkVTRVRfUkVTVU1FKQogCQl1ZGV2LT5yZXNldF9yZXN1bWUgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggZmRmYWE3OC4uZDI2YjllYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJZXBfZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCWVwX2Rldi0+ZGV2LnJlbGVhc2UgPSBlcF9kZXZpY2VfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJmVwX2Rldi0+ZGV2LCAiZXBfJTAyeCIsIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmZXBfZGV2LT5kZXYpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZlcF9kZXYtPmRldik7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKaW5kZXggMmRjZjkwNi4uMTUyODY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTM3LDYgKzM4LDEyMiBAQAogCiAvKiBQQ0ktYmFzZWQgSENzIGFyZSBjb21tb24sIGJ1dCBwbGVudHkgb2Ygbm9uLVBDSSBIQ3MgYXJlIHVzZWQgdG9vICovCiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKworLyogQ29vcmRpbmF0ZSBoYW5kb2ZmcyBiZXR3ZWVuIEVIQ0kgYW5kIGNvbXBhbmlvbiBjb250cm9sbGVycworICogZHVyaW5nIHN5c3RlbSByZXN1bWUKKyAqLworCitzdGF0aWMgREVGSU5FX01VVEVYKGNvbXBhbmlvbnNfbXV0ZXgpOworCisjZGVmaW5lIENMX1VIQ0kJCVBDSV9DTEFTU19TRVJJQUxfVVNCX1VIQ0kKKyNkZWZpbmUgQ0xfT0hDSQkJUENJX0NMQVNTX1NFUklBTF9VU0JfT0hDSQorI2RlZmluZSBDTF9FSENJCQlQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9FSENJCisKK2VudW0gY29tcGFuaW9uX2FjdGlvbiB7CisJU0VUX0hTX0NPTVBBTklPTiwgQ0xFQVJfSFNfQ09NUEFOSU9OLCBXQUlUX0ZPUl9DT01QQU5JT05TCit9OworCitzdGF0aWMgdm9pZCBjb21wYW5pb25fY29tbW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorCQllbnVtIGNvbXBhbmlvbl9hY3Rpb24gYWN0aW9uKQoreworCXN0cnVjdCBwY2lfZGV2CQkqY29tcGFuaW9uOworCXN0cnVjdCB1c2JfaGNkCQkqY29tcGFuaW9uX2hjZDsKKwl1bnNpZ25lZCBpbnQJCXNsb3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggb3RoZXIgUENJIGZ1bmN0aW9ucyBpbiB0aGUgc2FtZSBzbG90LgorCSAqIElmIHBkZXYgaXMgT0hDSSBvciBVSENJIHRoZW4gd2UgYXJlIGxvb2tpbmcgZm9yIEVIQ0ksIGFuZAorCSAqIHZpY2UgdmVyc2EuCisJICovCisJY29tcGFuaW9uID0gTlVMTDsKKwlmb3IgKDs7KSB7CisJCWNvbXBhbmlvbiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGNvbXBhbmlvbik7CisJCWlmICghY29tcGFuaW9uKQorCQkJYnJlYWs7CisJCWlmIChjb21wYW5pb24tPmJ1cyAhPSBwZGV2LT5idXMgfHwKKwkJCQlQQ0lfU0xPVChjb21wYW5pb24tPmRldmZuKSAhPSBzbG90KQorCQkJY29udGludWU7CisKKwkJY29tcGFuaW9uX2hjZCA9IHBjaV9nZXRfZHJ2ZGF0YShjb21wYW5pb24pOworCQlpZiAoIWNvbXBhbmlvbl9oY2QpCisJCQljb250aW51ZTsKKworCQkvKiBGb3IgU0VUX0hTX0NPTVBBTklPTiwgc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBFSENJIGJ1cyBpbgorCQkgKiB0aGUgT0hDSS9VSENJIGNvbXBhbmlvbiBidXMgc3RydWN0dXJlLgorCQkgKiBGb3IgQ0xFQVJfSFNfQ09NUEFOSU9OLCBjbGVhciB0aGUgcG9pbnRlciB0byB0aGUgRUhDSSBidXMKKwkJICogaW4gdGhlIE9IQ0kvVUhDSSBjb21wYW5pb24gYnVzIHN0cnVjdHVyZS4KKwkJICogRm9yIFdBSVRfRk9SX0NPTVBBTklPTlMsIHdhaXQgdW50aWwgdGhlIE9IQ0kvVUhDSQorCQkgKiBjb21wYW5pb24gY29udHJvbGxlcnMgaGF2ZSBmdWxseSByZXN1bWVkLgorCQkgKi8KKworCQlpZiAoKHBkZXYtPmNsYXNzID09IENMX09IQ0kgfHwgcGRldi0+Y2xhc3MgPT0gQ0xfVUhDSSkgJiYKKwkJCQljb21wYW5pb24tPmNsYXNzID09IENMX0VIQ0kpIHsKKwkJCS8qIGFjdGlvbiBtdXN0IGJlIFNFVF9IU19DT01QQU5JT04gKi8KKwkJCWRldl9kYmcoJmNvbXBhbmlvbi0+ZGV2LCAiSFMgY29tcGFuaW9uIGZvciAlc1xuIiwKKwkJCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCQkJaGNkLT5zZWxmLmhzX2NvbXBhbmlvbiA9ICZjb21wYW5pb25faGNkLT5zZWxmOworCisJCX0gZWxzZSBpZiAocGRldi0+Y2xhc3MgPT0gQ0xfRUhDSSAmJgorCQkJCShjb21wYW5pb24tPmNsYXNzID09IENMX09IQ0kgfHwKKwkJCQljb21wYW5pb24tPmNsYXNzID09IENMX1VIQ0kpKSB7CisJCQlzd2l0Y2ggKGFjdGlvbikgeworCQkJY2FzZSBTRVRfSFNfQ09NUEFOSU9OOgorCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkhTIGNvbXBhbmlvbiBmb3IgJXNcbiIsCisJCQkJCQlkZXZfbmFtZSgmY29tcGFuaW9uLT5kZXYpKTsKKwkJCQljb21wYW5pb25faGNkLT5zZWxmLmhzX2NvbXBhbmlvbiA9ICZoY2QtPnNlbGY7CisJCQkJYnJlYWs7CisJCQljYXNlIENMRUFSX0hTX0NPTVBBTklPTjoKKwkJCQljb21wYW5pb25faGNkLT5zZWxmLmhzX2NvbXBhbmlvbiA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQljYXNlIFdBSVRfRk9SX0NPTVBBTklPTlM6CisJCQkJZGV2aWNlX3BtX3dhaXRfZm9yX2RldigmcGRldi0+ZGV2LAorCQkJCQkJJmNvbXBhbmlvbi0+ZGV2KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2hzX2NvbXBhbmlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwltdXRleF9sb2NrKCZjb21wYW5pb25zX211dGV4KTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaGNkKTsKKwljb21wYW5pb25fY29tbW9uKHBkZXYsIGhjZCwgU0VUX0hTX0NPTVBBTklPTik7CisJbXV0ZXhfdW5sb2NrKCZjb21wYW5pb25zX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfaHNfY29tcGFuaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCW11dGV4X2xvY2soJmNvbXBhbmlvbnNfbXV0ZXgpOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKKworCS8qIElmIHBkZXYgaXMgT0hDSSBvciBVSENJLCBqdXN0IGNsZWFyIGl0cyBoc19jb21wYW5pb24gcG9pbnRlciAqLworCWlmIChwZGV2LT5jbGFzcyA9PSBDTF9PSENJIHx8IHBkZXYtPmNsYXNzID09IENMX1VIQ0kpCisJCWhjZC0+c2VsZi5oc19jb21wYW5pb24gPSBOVUxMOworCisJLyogT3RoZXJ3aXNlIHNlYXJjaCBmb3IgY29tcGFuaW9uIGJ1c2VzIGFuZCBjbGVhciB0aGVpciBwb2ludGVycyAqLworCWVsc2UKKwkJY29tcGFuaW9uX2NvbW1vbihwZGV2LCBoY2QsIENMRUFSX0hTX0NPTVBBTklPTik7CisJbXV0ZXhfdW5sb2NrKCZjb21wYW5pb25zX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9mb3JfY29tcGFuaW9ucyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwkvKiBPbmx5IEVIQ0kgY29udHJvbGxlcnMgbmVlZCB0byB3YWl0LgorCSAqIE5vIGxvY2tpbmcgaXMgbmVlZGVkIGJlY2F1c2UgYSBjb250cm9sbGVyIGNhbm5vdCBiZSByZXN1bWVkCisJICogd2hpbGUgb25lIG9mIGl0cyBjb21wYW5pb25zIGlzIGdldHRpbmcgdW5ib3VuZC4KKwkgKi8KKwlpZiAocGRldi0+Y2xhc3MgPT0gQ0xfRUhDSSkKKwkJY29tcGFuaW9uX2NvbW1vbihwZGV2LCBoY2QsIFdBSVRfRk9SX0NPTVBBTklPTlMpOworfQorCisjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaHNfY29tcGFuaW9uKHN0cnVjdCBwY2lfZGV2ICpkLCBzdHJ1Y3QgdXNiX2hjZCAqaCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9oc19jb21wYW5pb24oc3RydWN0IHBjaV9kZXYgKmQsIHN0cnVjdCB1c2JfaGNkICpoKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2NvbXBhbmlvbnMoc3RydWN0IHBjaV9kZXYgKmQsIHN0cnVjdCB1c2JfaGNkICpoKSB7fQorCisjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMjMsNyArMjQwLDcgQEAKIAkJaWYgKHJlZ2lvbiA9PSBQQ0lfUk9NX1JFU09VUkNFKSB7CiAJCQlkZXZfZGJnKCZkZXYtPmRldiwgIm5vIGkvbyByZWdpb25zIGF2YWlsYWJsZVxuIik7CiAJCQlyZXR2YWwgPSAtRUJVU1k7Ci0JCQlnb3RvIGVycjE7CisJCQlnb3RvIGVycjI7CiAJCX0KIAl9CiAKQEAgLTEzMiw2ICsyNDksNyBAQAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5pcnEsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CiAJaWYgKHJldHZhbCAhPSAwKQogCQlnb3RvIGVycjQ7CisJc2V0X2hzX2NvbXBhbmlvbihkZXYsIGhjZCk7CiAJcmV0dXJuIHJldHZhbDsKIAogIGVycjQ6CkBAIC0xNDIsNiArMjYwLDcgQEAKIAl9IGVsc2UKIAkJcmVsZWFzZV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKICBlcnIyOgorCWNsZWFyX2hzX2NvbXBhbmlvbihkZXYsIGhjZCk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKICBlcnIxOgogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwpAQCAtMTgwLDYgKzI5OSw3IEBACiAJfSBlbHNlIHsKIAkJcmVsZWFzZV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAl9CisJY2xlYXJfaHNfY29tcGFuaW9uKGRldiwgaGNkKTsKIAl1c2JfcHV0X2hjZChoY2QpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogfQpAQCAtMzQ0LDYgKzQ2NCwxMSBAQAogCWNsZWFyX2JpdChIQ0RfRkxBR19TQVdfSVJRLCAmaGNkLT5mbGFncyk7CiAKIAlpZiAoaGNkLT5kcml2ZXItPnBjaV9yZXN1bWUpIHsKKwkJLyogVGhpcyBjYWxsIHNob3VsZCBiZSBtYWRlIG9ubHkgZHVyaW5nIHN5c3RlbSByZXN1bWUsCisJCSAqIG5vdCBkdXJpbmcgcnVudGltZSByZXN1bWUuCisJCSAqLworCQl3YWl0X2Zvcl9jb21wYW5pb25zKHBjaV9kZXYsIGhjZCk7CisKIAkJcmV0dmFsID0gaGNkLT5kcml2ZXItPnBjaV9yZXN1bWUoaGNkLCBoaWJlcm5hdGVkKTsKIAkJaWYgKHJldHZhbCkgewogCQkJZGV2X2VycihkZXYsICJQQ0kgcG9zdC1yZXN1bWUgZXJyb3IgJWQhXG4iLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggMzVjYzhiOS4uMjBlY2I0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0xODE3LDYgKzE4MTcsNyBAQAogCS8qIFRlbGwgdGhlIHdvcmxkISAqLwogCWFubm91bmNlX2RldmljZSh1ZGV2KTsKIAorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmdWRldi0+ZGV2KTsKIAkvKiBSZWdpc3RlciB0aGUgZGV2aWNlLiAgVGhlIGRldmljZSBkcml2ZXIgaXMgcmVzcG9uc2libGUKIAkgKiBmb3IgY29uZmlndXJpbmcgdGhlIGRldmljZSBhbmQgaW52b2tpbmcgdGhlIGFkZC1kZXZpY2UKIAkgKiBub3RpZmllciBjaGFpbiAodXNlZCBieSB1c2JmcyBhbmQgcG9zc2libHkgb3RoZXJzKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggOWJjOTVmZS4uZGY3MzU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTE4NjcsNiArMTg2Nyw3IEBACiAJCQkiYWRkaW5nICVzIChjb25maWcgIyVkLCBpbnRlcmZhY2UgJWQpXG4iLAogCQkJZGV2X25hbWUoJmludGYtPmRldiksIGNvbmZpZ3VyYXRpb24sCiAJCQlpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZpbnRmLT5kZXYpOwogCQlyZXQgPSBkZXZpY2VfYWRkKCZpbnRmLT5kZXYpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAiZGV2aWNlX2FkZCglcykgLS0+ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWVtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYwppbmRleCAwYTU3N2Q1Li5kNGYwZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJICogYjE1OgkJYm1UeXBlICgwID09IGRhdGEpCiAJICovCiAJbGVuID0gc2tiLT5sZW47Ci0JcHV0X3VuYWxpZ25lZF9sZTE2KChsZW4gJiAweDNGRkYpIHwgQklUKDE0KSwgc2tiX3B1c2goc2tiLCAyKSk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGxlbiAmIDB4M0ZGRiwgc2tiX3B1c2goc2tiLCAyKSk7CiAKIAkvKiBhZGQgYSB6ZXJvLWxlbmd0aCBFRU0gcGFja2V0LCBpZiBuZWVkZWQgKi8KIAlpZiAocGFkbGVuKQpAQCAtNDY0LDcgKzQ2NCw2IEBACiAJCQl9CiAKIAkJCS8qIHZhbGlkYXRlIENSQyAqLwotCQkJY3JjID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi0+ZGF0YSArIGxlbiAtIEVUSF9GQ1NfTEVOKTsKIAkJCWlmIChoZWFkZXIgJiBCSVQoMTQpKSB7CiAJCQkJY3JjID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi0+ZGF0YSArIGxlbgogCQkJCQkJCS0gRVRIX0ZDU19MRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L211bHRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbXVsdGkuYwppbmRleCA0Mjk1NjAxLi43NjQ5NmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbXVsdGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbXVsdGkuYwpAQCAtMjksNyArMjksNyBAQAogI2lmIGRlZmluZWQgVVNCX0VUSF9STkRJUwogIyAgdW5kZWYgVVNCX0VUSF9STkRJUwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKyNpZmRlZiBDT05GSUdfVVNCX0dfTVVMVElfUk5ESVMKICMgIGRlZmluZSBVU0JfRVRIX1JORElTIHkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKaW5kZXggZTIyMGZiOC4uOGI0NTE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCmluZGV4IDRiNWRiZDAuLjVmYzgwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKQEAgLTI1ODIsNiArMjU4Miw3IEBACiAJaHNvdGctPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CiAKIGludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IGM3NWQ5MjcuLjE5MzcyNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTE5Niw3ICsxOTYsOSBAQAogCQkJaWYgKGhvc3RwY19yZWcpIHsKIAkJCQl1MzIJdDM7CiAKKwkJCQlzcGluX3VubG9ja19pcnEoJmVoY2ktPmxvY2spOwogCQkJCW1zbGVlcCg1KTsvKiA1bXMgZm9yIEhDRCBlbnRlciBsb3cgcHdyIG1vZGUgKi8KKwkJCQlzcGluX2xvY2tfaXJxKCZlaGNpLT5sb2NrKTsKIAkJCQl0MyA9IGVoY2lfcmVhZGwoZWhjaSwgaG9zdHBjX3JlZyk7CiAJCQkJZWhjaV93cml0ZWwoZWhjaSwgdDMgfCBIT1NUUENfUEhDRCwgaG9zdHBjX3JlZyk7CiAJCQkJdDMgPSBlaGNpX3JlYWRsKGVoY2ksIGhvc3RwY19yZWcpOwpAQCAtOTA0LDE3ICs5MDYsMTggQEAKIAkJCWlmICgodGVtcCAmIFBPUlRfUEUpID09IDAKIAkJCQkJfHwgKHRlbXAgJiBQT1JUX1JFU0VUKSAhPSAwKQogCQkJCWdvdG8gZXJyb3I7Ci0JCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wIHwgUE9SVF9TVVNQRU5ELCBzdGF0dXNfcmVnKTsKKwogCQkJLyogQWZ0ZXIgYWJvdmUgY2hlY2sgdGhlIHBvcnQgbXVzdCBiZSBjb25uZWN0ZWQuCiAJCQkgKiBTZXQgYXBwcm9wcmlhdGUgYml0IHRodXMgY291bGQgcHV0IHBoeSBpbnRvIGxvdyBwb3dlcgogCQkJICogbW9kZSBpZiB3ZSBoYXZlIGhvc3RwYyBmZWF0dXJlCiAJCQkgKi8KKwkJCXRlbXAgJj0gflBPUlRfV0tDT05OX0U7CisJCQl0ZW1wIHw9IFBPUlRfV0tESVNDX0UgfCBQT1JUX1dLT0NfRTsKKwkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBQT1JUX1NVU1BFTkQsIHN0YXR1c19yZWcpOwogCQkJaWYgKGhvc3RwY19yZWcpIHsKLQkJCQl0ZW1wICY9IH5QT1JUX1dLQ09OTl9FOwotCQkJCXRlbXAgfD0gKFBPUlRfV0tESVNDX0UgfCBQT1JUX1dLT0NfRSk7Ci0JCQkJZWhjaV93cml0ZWwoZWhjaSwgdGVtcCB8IFBPUlRfU1VTUEVORCwKLQkJCQkJCQlzdGF0dXNfcmVnKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJCQkJbXNsZWVwKDUpOy8qIDVtcyBmb3IgSENEIGVudGVyIGxvdyBwd3IgbW9kZSAqLworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJCQkJdGVtcDEgPSBlaGNpX3JlYWRsKGVoY2ksIGhvc3RwY19yZWcpOwogCQkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAxIHwgSE9TVFBDX1BIQ0QsCiAJCQkJCWhvc3RwY19yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCmluZGV4IGQyMjRhYjQuLmUxMjMyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCQlpZiAoZXAtPnRkX2Jhc2UpCiAJCQljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT50ZF9iYXNlKSk7CiAKLQkJaWYgKGVwLT5jb25mX2ZyYW1lX1EpIHsKKwkJaWYgKGtmaWZvX2luaXRpYWxpemVkKCZlcC0+Y29uZl9mcmFtZV9RKSkgewogCQkJc2l6ZSA9IGNxX2hvd21hbnkoJmVwLT5jb25mX2ZyYW1lX1EpOwogCQkJZm9yICg7IHNpemU7IHNpemUtLSkgewogCQkJCXN0cnVjdCBwYWNrZXQgKnBrdCA9IGNxX2dldCgmZXAtPmNvbmZfZnJhbWVfUSk7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJCWNxX2RlbGV0ZSgmZXAtPmNvbmZfZnJhbWVfUSk7CiAJCX0KIAotCQlpZiAoZXAtPmVtcHR5X2ZyYW1lX1EpIHsKKwkJaWYgKGtmaWZvX2luaXRpYWxpemVkKCZlcC0+ZW1wdHlfZnJhbWVfUSkpIHsKIAkJCXNpemUgPSBjcV9ob3dtYW55KCZlcC0+ZW1wdHlfZnJhbWVfUSk7CiAJCQlmb3IgKDsgc2l6ZTsgc2l6ZS0tKSB7CiAJCQkJc3RydWN0IHBhY2tldCAqcGt0ID0gY3FfZ2V0KCZlcC0+ZW1wdHlfZnJhbWVfUSk7CkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJCWNxX2RlbGV0ZSgmZXAtPmVtcHR5X2ZyYW1lX1EpOwogCQl9CiAKLQkJaWYgKGVwLT5kdW1teV9wYWNrZXRzX1EpIHsKKwkJaWYgKGtmaWZvX2luaXRpYWxpemVkKCZlcC0+ZHVtbXlfcGFja2V0c19RKSkgewogCQkJc2l6ZSA9IGNxX2hvd21hbnkoJmVwLT5kdW1teV9wYWNrZXRzX1EpOwogCQkJZm9yICg7IHNpemU7IHNpemUtLSkgewogCQkJCXU4ICpidWZmID0gY3FfZ2V0KCZlcC0+ZHVtbXlfcGFja2V0c19RKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IGI3YTY2MWMuLmJlZTU1OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKQEAgLTM1LDcgKzM1LDkgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAjaW5jbHVkZSAicjhhNjY1OTcuaCIKQEAgLTIxNiw4ICsyMTgsMTcgQEAKIHsKIAlpbnQgcG9ydDsKIAorCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCAwLCBJTlRFTkIwKTsKLQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgMCwgSU5UU1RTMCk7CisJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIDAsIElOVEVOQjEpOworCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCAwLCBCUkRZRU5CKTsKKwlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgMCwgQkVNUEVOQik7CisJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIDAsIE5SRFlFTkIpOworCisJLyogY2xlYXIgc3RhdHVzICovCisJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIDAsIEJSRFlTVFMpOworCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCAwLCBOUkRZU1RTKTsKKwlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgMCwgQkVNUFNUUyk7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgcjhhNjY1OTctPm1heF9yb290X2h1YjsgcG9ydCsrKQogCQlyOGE2NjU5N19kaXNhYmxlX3BvcnQocjhhNjY1OTcsIHBvcnQpOwpAQCAtODExLDYgKzgyMiwyNiBAQAogCWVuYWJsZV9yOGE2NjU5N19waXBlX2RtYShyOGE2NjU5NywgZGV2LCBwaXBlLCB1cmIpOwogfQogCitzdGF0aWMgdm9pZCByOGE2NjU5N191cmJfZG9uZShzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3LCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkgICAgICBpbnQgc3RhdHVzKQorX19yZWxlYXNlcyhyOGE2NjU5Ny0+bG9jaykKK19fYWNxdWlyZXMocjhhNjY1OTctPmxvY2spCit7CisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJiB1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBQSVBFX0NPTlRST0wpIHsKKwkJdm9pZCAqcHRyOworCisJCWZvciAocHRyID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCSAgICAgcHRyIDwgdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCSAgICAgcHRyICs9IFBBR0VfU0laRSkKKwkJCWZsdXNoX2RjYWNoZV9wYWdlKHZpcnRfdG9fcGFnZShwdHIpKTsKKwl9CisKKwl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChyOGE2NjU5N190b19oY2QocjhhNjY1OTcpLCB1cmIpOworCXNwaW5fdW5sb2NrKCZyOGE2NjU5Ny0+bG9jayk7CisJdXNiX2hjZF9naXZlYmFja191cmIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSwgdXJiLCBzdGF0dXMpOworCXNwaW5fbG9jaygmcjhhNjY1OTctPmxvY2spOworfQorCiAvKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkICovCiBzdGF0aWMgdm9pZCBmb3JjZV9kZXF1ZXVlKHN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcsIHUxNiBwaXBlbnVtLCB1MTYgYWRkcmVzcykKIHsKQEAgLTgyOSwxNSArODYwLDkgQEAKIAkJbGlzdF9kZWwoJnRkLT5xdWV1ZSk7CiAJCWtmcmVlKHRkKTsKIAotCQlpZiAodXJiKSB7Ci0JCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChyOGE2NjU5N190b19oY2QocjhhNjY1OTcpLAotCQkJCQl1cmIpOworCQlpZiAodXJiKQorCQkJcjhhNjY1OTdfdXJiX2RvbmUocjhhNjY1OTcsIHVyYiwgLUVOT0RFVik7CiAKLQkJCXNwaW5fdW5sb2NrKCZyOGE2NjU5Ny0+bG9jayk7Ci0JCQl1c2JfaGNkX2dpdmViYWNrX3VyYihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpLCB1cmIsCi0JCQkJCS1FTk9ERVYpOwotCQkJc3Bpbl9sb2NrKCZyOGE2NjU5Ny0+bG9jayk7Ci0JCX0KIAkJYnJlYWs7CiAJfQogfQpAQCAtOTk3LDYgKzEwMjIsOCBAQAogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwogc3RhdGljIHZvaWQgcjhhNjY1OTdfY2hlY2tfc3lzc3RzKHN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcsIGludCBwb3J0LAogCQkJCQl1MTYgc3lzc3RzKQorX19yZWxlYXNlcyhyOGE2NjU5Ny0+bG9jaykKK19fYWNxdWlyZXMocjhhNjY1OTctPmxvY2spCiB7CiAJaWYgKHN5c3N0cyA9PSBTRTApIHsKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5BVFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwpAQCAtMTAxNCw3ICsxMDQxLDkgQEAKIAkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogCX0KIAorCXNwaW5fdW5sb2NrKCZyOGE2NjU5Ny0+bG9jayk7CiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyhyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKKwlzcGluX2xvY2soJnI4YTY2NTk3LT5sb2NrKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwpAQCAtMTI3NCwxMCArMTMwMyw3IEBACiAJCWlmICh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkKIAkJCXVyYi0+c3RhcnRfZnJhbWUgPSByOGE2NjU5N19nZXRfZnJhbWUoaGNkKTsKIAotCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChyOGE2NjU5N190b19oY2QocjhhNjY1OTcpLCB1cmIpOwotCQlzcGluX3VubG9jaygmcjhhNjY1OTctPmxvY2spOwotCQl1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgc3RhdHVzKTsKLQkJc3Bpbl9sb2NrKCZyOGE2NjU5Ny0+bG9jayk7CisJCXI4YTY2NTk3X3VyYl9kb25lKHI4YTY2NTk3LCB1cmIsIHN0YXR1cyk7CiAJfQogCiAJaWYgKHJlc3RhcnQpIHsKQEAgLTI0NjYsNiArMjQ5MiwxMiBAQAogCXI4YTY2NTk3LT5yaF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcjhhNjY1OTc7CiAJcjhhNjY1OTctPnJlZyA9ICh1bnNpZ25lZCBsb25nKXJlZzsKIAorCS8qIG1ha2Ugc3VyZSBubyBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nICovCisJcmV0ID0gcjhhNjY1OTdfY2xvY2tfZW5hYmxlKHI4YTY2NTk3KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBjbGVhbl91cDM7CisJZGlzYWJsZV9jb250cm9sbGVyKHI4YTY2NTk3KTsKKwogCWZvciAoaSA9IDA7IGkgPCBSOEE2NjU5N19NQVhfTlVNX1BJUEU7IGkrKykgewogCQlJTklUX0xJU1RfSEVBRCgmcjhhNjY1OTctPnBpcGVfcXVldWVbaV0pOwogCQlpbml0X3RpbWVyKCZyOGE2NjU5Ny0+dGRfdGltZXJbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwppbmRleCAwMDI1ODQ3Li44YjM3YTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwpAQCAtMzI0NSw2ICszMjQ1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNzExLCAweDA5MDIpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDcxMSwgMHgwOTAzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3MTEsIDB4MDkxOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzExLCAweDA5MjApIH0sCiAJeyBVU0JfREVWSUNFKDB4MTgyZCwgMHgwMjFjKSB9LAogCXsgVVNCX0RFVklDRSgweDE4MmQsIDB4MDI2OSkgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKaW5kZXggZGU1NmIzZC4uM2QyZDNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKQEAgLTQ0LDYgKzQ0LDcgQEAKIGNvbmZpZyBVU0JfVUxQSQogCWJvb2wgIkdlbmVyaWMgVUxQSSBUcmFuc2NlaXZlciBEcml2ZXIiCiAJZGVwZW5kcyBvbiBBUk0KKwlzZWxlY3QgVVNCX09UR19VVElMUwogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgVUxQSSBjb25uZWN0ZWQgVVNCIE9URyB0cmFuc2NlaXZlcnMgd2hpY2gKIAkgIGFyZSBsaWtlbHkgZm91bmQgb24gZW1iZWRkZWQgYm9hcmRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCAyMTZmMTg3Li43NjM4ODI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNTAsNyArNTAsNyBAQAogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS41LjAiCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LCBCaWxsIFJ5ZGVyIDxicnlkZXJAc2dpLmNvbT4sIEt1YmEgT2JlciA8a3ViYUBtYXJlaW1icml1bS5vcmc+IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiwgQmlsbCBSeWRlciA8YnJ5ZGVyQHNnaS5jb20+LCBLdWJhIE9iZXIgPGt1YmFAbWFyZWltYnJpdW0ub3JnPiwgQW5kcmVhcyBNb2hyIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEZUREkgU2VyaWFsIENvbnZlcnRlcnMgRHJpdmVyIgogCiBzdGF0aWMgaW50IGRlYnVnOwpAQCAtMTQ1LDEwICsxNDUsMTUgQEAKIAogCiAKKy8qCisgKiBEZXZpY2UgSUQgbm90IGxpc3RlZD8gVGVzdCB2aWEgbW9kdWxlIHBhcmFtcyBwcm9kdWN0L3ZlbmRvciBvcgorICogL3N5cy9idXMvdXNiL2Z0ZGlfc2lvL25ld19pZCwgdGhlbiBzZW5kIHBhdGNoL3JlcG9ydCEKKyAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0gewogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BTUMyMzJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQU5VU0JfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQU5EQVBURVJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9OWFRDQU1fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TQ1NfREVWSUNFXzBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TQ1NfREVWSUNFXzFfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TQ1NfREVWSUNFXzJfUElEKSB9LApAQCAtNTUyLDkgKzU1NywxNiBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9JQlNfUEVET19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0lCU19QUk9EX1BJRCkgfSwKIAkvKgotCSAqIER1ZSB0byBtYW55IHVzZXIgcmVxdWVzdHMgZm9yIG11bHRpcGxlIEVMViBkZXZpY2VzIHdlIGVuYWJsZQotCSAqIHRoZW0gYnkgZGVmYXVsdC4KKwkgKiBFTFYgZGV2aWNlczoKIAkgKi8KKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1VTUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9NU00xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0tMMTAwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1dTNTUwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0VDMzAwMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9XUzg4OF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9UV1M1NTBfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfRkVNX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0NMSTcwMDBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfUFBTNzMzMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9URk0xMDBfUElEKSB9LApAQCAtNTcxLDExICs1ODMsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1BDSzEwMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9SRlA1MDBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfRlMyMFNJR19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9VVFA4X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1dTMzAwUENfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfV1M0NDRQQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9GSFoxMzAwUENfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfRU0xMDEwUENfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfV1M1MDBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfSFM0ODVfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfVU1TMTAwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1RGRDEyOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9GTTNSWF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9XUzc3N19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBMSU5YX1NETVVTQlFTU19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBMSU5YX01BU1RFUkRFVkVMMl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBMSU5YX0ZVVFVSRV8wX1BJRCkgfSwKQEAgLTY5Nyw2ICs3MTUsNyBAQAogCXsgVVNCX0RFVklDRShSQVRPQ19WRU5ET1JfSUQsIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9SRVVfVElOWV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFBBUE9VQ0hfVklELCBQQVBPVUNIX1FVSURPNHg0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFQT1VDSF9WSUQsIFBBUE9VQ0hfQUQ0VVNCX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRE9NSU5URUxMX0RHUUdfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ET01JTlRFTExfRFVTQl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEFMVEkyX1ZJRCwgQUxUSTJfTjNfUElEKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IGRhOTJiNDkuLmM4OTUxYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTM4LDYgKzM4LDggQEAKIC8qIHd3dy5jYW5kYXB0ZXIuY29tIEV3ZXJ0IEVuZXJneSBTeXN0ZW1zIENBTmRhcHRlciBkZXZpY2UgKi8KICNkZWZpbmUgRlRESV9DQU5EQVBURVJfUElEIDB4OUY4MCAvKiBQcm9kdWN0IElkICovCiAKKyNkZWZpbmUgRlRESV9OWFRDQU1fUElECQkweEFCQjggLyogTlhUQ2FtIGZvciBNaW5kc3Rvcm1zIE5YVCAqLworCiAvKiBPT0NEbGluayBieSBKb2VybiBLYWlwZiA8am9lcm5rQHdlYi5kZT4KICAqIChodHRwOi8vd3d3LmpvZXJub25saW5lLmRlL2R3L2Rva3UucGhwP2lkPXN0YXJ0JmlkeD1wcm9qZWN0czpvb2NkbGluaykgKi8KICNkZWZpbmUgRlRESV9PT0NETElOS19QSUQJMHhiYWY4CS8qIEFtb250ZWMgSlRBR2tleSAqLwpAQCAtMTYxLDIyICsxNjMsMzcgQEAKIC8qCiAgKiBFTFYgVVNCIGRldmljZXMgc3VibWl0dGVkIGJ5IENocmlzdGlhbiBBYnQgb2YgRUxWICh3d3cuZWx2LmRlKS4KICAqIEFsbCBvZiB0aGVzZSBkZXZpY2VzIHVzZSBGVERJJ3MgdmVuZG9yIElEICgweDA0MDMpLgorICogRnVydGhlciBJRHMgdGFrZW4gZnJvbSBFTFYgV2luZG93cyAuaW5mIGZpbGUuCiAgKgogICogVGhlIHByZXZpb3VzbHkgaW5jbHVkZWQgUElEIGZvciB0aGUgVU8gMTAwIG1vZHVsZSB3YXMgaW5jb3JyZWN0LgogICogSW4gZmFjdCwgdGhhdCBQSUQgd2FzIGZvciBFTFYncyBVUiAxMDAgVVNCLVJTMjMyIGNvbnZlcnRlciAoMHhGQjU4KS4KICAqCiAgKiBBcm1pbiBMYWV1Z2VyIG9yaWdpbmFsbHkgc2VudCB0aGUgUElEIGZvciB0aGUgVU0gMTAwIG1vZHVsZS4KICAqLworI2RlZmluZSBGVERJX0VMVl9VU1JfUElECTB4RTAwMAkvKiBFTFYgVW5pdmVyc2FsLVNvdW5kLVJlY29yZGVyICovCisjZGVmaW5lIEZURElfRUxWX01TTTFfUElECTB4RTAwMQkvKiBFTFYgTWluaS1Tb3VuZC1Nb2R1bCAqLworI2RlZmluZSBGVERJX0VMVl9LTDEwMF9QSUQJMHhFMDAyCS8qIEVMViBLZnotTGVpc3R1bmdzbWVzc2VyIEtMIDEwMCAqLworI2RlZmluZSBGVERJX0VMVl9XUzU1MF9QSUQJMHhFMDA0CS8qIFdTIDU1MCAqLworI2RlZmluZSBGVERJX0VMVl9FQzMwMDBfUElECTB4RTAwNgkvKiBFTkVSR1kgQ09OVFJPTCAzMDAwIFVTQiAqLworI2RlZmluZSBGVERJX0VMVl9XUzg4OF9QSUQJMHhFMDA4CS8qIFdTIDg4OCAqLworI2RlZmluZSBGVERJX0VMVl9UV1M1NTBfUElECTB4RTAwOQkvKiBUZWNobm9saW5lIFdTIDU1MCAqLworI2RlZmluZSBGVERJX0VMVl9GRU1fUElECTB4RTAwQQkvKiBGdW5rIEVuZXJnaWUgTW9uaXRvciAqLwogI2RlZmluZSBGVERJX0VMVl9GSFoxMzAwUENfUElECTB4RTBFOAkvKiBGSFogMTMwMCBQQyAqLwogI2RlZmluZSBGVERJX0VMVl9XUzUwMF9QSUQJMHhFMEU5CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDUwMCkgKi8KICNkZWZpbmUgRlRESV9FTFZfSFM0ODVfUElECTB4RTBFQQkvKiBVU0IgdG8gUlMtNDg1IGFkYXB0ZXIgKi8KKyNkZWZpbmUgRlRESV9FTFZfVU1TMTAwX1BJRAkweEUwRUIJLyogRUxWIFVTQiBNYXN0ZXItU2xhdmUgU2NoYWx0c3RlY2tkb3NlIFVNUyAxMDAgKi8KKyNkZWZpbmUgRlRESV9FTFZfVEZEMTI4X1BJRAkweEUwRUMJLyogRUxWIFRlbXBlcmF0dXItRmV1Y2h0ZS1EYXRlbmxvZ2dlciBURkQgMTI4ICovCisjZGVmaW5lIEZURElfRUxWX0ZNM1JYX1BJRAkweEUwRUQJLyogRUxWIE1lc3N3ZXJ0dWViZXJ0cmFndW5nIEZNMyBSWCAqLworI2RlZmluZSBGVERJX0VMVl9XUzc3N19QSUQJMHhFMEVFCS8qIENvbnJhZCBXUyA3NzcgKi8KICNkZWZpbmUgRlRESV9FTFZfRU0xMDEwUENfUElECTB4RTBFRgkvKiBFbmdlcnkgbW9uaXRvciBFTSAxMDEwIFBDICovCiAjZGVmaW5lIEZURElfRUxWX0NTSThfUElECTB4RTBGMAkvKiBDb21wdXRlci1TY2hhbHQtSW50ZXJmYWNlIChDU0kgOCkgKi8KICNkZWZpbmUgRlRESV9FTFZfRU0xMDAwRExfUElECTB4RTBGMQkvKiBQQy1EYXRlbmxvZ2dlciBmdWVyIEVuZXJnaWVtb25pdG9yIChFTSAxMDAwIERMKSAqLwogI2RlZmluZSBGVERJX0VMVl9QQ0sxMDBfUElECTB4RTBGMgkvKiBQQy1LYWJlbHRlc3RlciAoUENLIDEwMCkgKi8KICNkZWZpbmUgRlRESV9FTFZfUkZQNTAwX1BJRAkweEUwRjMJLyogSEYtTGVpc3R1bmdzbWVzc2VyIChSRlAgNTAwKSAqLwogI2RlZmluZSBGVERJX0VMVl9GUzIwU0lHX1BJRAkweEUwRjQJLyogU2lnbmFsZ2ViZXIgKEZTIDIwIFNJRykgKi8KKyNkZWZpbmUgRlRESV9FTFZfVVRQOF9QSUQJMHhFMEY1CS8qIEVMViBVVFAgOCAqLwogI2RlZmluZSBGVERJX0VMVl9XUzMwMFBDX1BJRAkweEUwRjYJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgMzAwIFBDKSAqLworI2RlZmluZSBGVERJX0VMVl9XUzQ0NFBDX1BJRAkweEUwRjcJLyogQ29ucmFkIFdTIDQ0NCBQQyAqLwogI2RlZmluZSBGVERJX1BISV9GSVNDT19QSUQgICAgICAweEU0MEIgIC8qIFBISSBGaXNjbyBVU0IgdG8gU2VyaWFsIGNhYmxlICovCiAjZGVmaW5lIEZURElfRUxWX1VBRDhfUElECTB4RjA2OAkvKiBVU0ItQUQtV2FuZGxlciAoVUFEIDgpICovCiAjZGVmaW5lIEZURElfRUxWX1VEQTdfUElECTB4RjA2OQkvKiBVU0ItREEtV2FuZGxlciAoVURBIDcpICovCkBAIC05NjgsNiArOTg1LDcgQEAKICNkZWZpbmUgUEFQT1VDSF9WSUQJCQkweDUwNTAJLyogVmVuZG9yIElEICovCiAjZGVmaW5lIFBBUE9VQ0hfVE1VX1BJRAkJCTB4MDQwMAkvKiBUTVUgVVNCIFRoZXJtb21ldGVyICovCiAjZGVmaW5lIFBBUE9VQ0hfUVVJRE80eDRfUElECQkweDA5MDAJLyogUXVpZG8gNC80IE1vZHVsZSAqLworI2RlZmluZSBQQVBPVUNIX0FENFVTQl9QSUQJCTB4ODAwMwkvKiBBRDRVU0IgTWVhc3VyZW1lbnQgTW9kdWxlICovCiAKIC8qCiAgKiBNYXJ2ZWxsIFNoZWV2YVBsdWcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCBhYzFiNjQ0Li4zZWI2MTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0yOTgsNiArMjk4LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4QTMpLCAJLyogU2llcnJhIFdpcmVsZXNzIERpcmVjdCBJUCBtb2RlbXMgKi8KIAkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZGlyZWN0X2lwX2ludGVyZmFjZV9ibGFja2xpc3QKIAl9LAorICAgICAgIHsgVVNCX0RFVklDRSgweDQxM0MsIDB4MDgxMzMpIH0sIC8qIERlbGwgQ29tcHV0ZXIgQ29ycC4gV2lyZWxlc3MgNTcyMCBWWlcgTW9iaWxlIEJyb2FkYmFuZCAoRVZETyBSZXYtQSkgTWluaWNhcmQgR1BTIFBvcnQgKi8KIAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGM5MzJmOTAuLjQ5NTc1ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtOTQxLDcgKzk0MSw3IEBACiBVTlVTVUFMX0RFViggIDB4MDdhZiwgMHgwMDA0LCAweDAxMDAsIDB4MDEzMywKIAkJIk1pY3JvdGVjaCIsCiAJCSJVU0ItU0NTSS1EQjI1IiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKIAkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKIAogVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNSwgMHgwMTAwLCAweDAxMDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwppbmRleCBlOWY5OTU0Li5iYmVlYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTc4LDcgKzc4LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIgZm9yIExpbnV4Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsYXlfdXNlID0gNTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsYXlfdXNlID0gMTsKIG1vZHVsZV9wYXJhbShkZWxheV91c2UsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVsYXlfdXNlLCAic2Vjb25kcyB0byBkZWxheSBiZWZvcmUgdXNpbmcgYSBuZXcgZGV2aWNlIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCmluZGV4IGU0ZTRkNDMuLjllZTY3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwpAQCAtMTkzMSwyMiArMTkzMSwyMiBAQAogCQkJICogUG93ZXJNYWMyLDIgc3VtbWVyIDIwMDAgaU1hY3MKIAkJCSAqIFBvd2VyTWFjNCwxIGphbnVhcnkgMjAwMSBpTWFjcyAiZmxvd2VyIHBvd2VyIgogCQkJICovCi0JCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMSIpIHx8Ci0JCQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMiIpIHx8Ci0JCQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMSIpKQorCQkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSB8fAorCQkJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSB8fAorCQkJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKIAkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNzU7CiAKIAkJCS8qIGlCb29rIFNFICovCi0JCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDIiKSkKKwkJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMiIpKQogCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV84MDBfNjAwXzYwOwogCiAJCQkvKiBQb3dlckJvb2sgRmlyZXdpcmUgKFBpc21vKSwgaUJvb2sgRHVhbCBVU0IgKi8KLQkJCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpIHx8Ci0JCQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkKKwkJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpIHx8CisJCQkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkKIAkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNjA7CiAKIAkJCS8qIFBvd2VyQm9vayBUaXRhbml1bSAqLwotCQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpCisJCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkKIAkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTE1Ml83NjhfNjA7CiAJCiAJCQlpZiAoZGVmYXVsdF9jbW9kZSA+IDE2KSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwppbmRleCAxZGRlYjRjLi5lNDVhYjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCkBAIC0yNDM5LDcgKzI0MzksNyBAQAogCSAqIFRoZSBBcHBsZSBpQm9vazEgdXNlcyBub24tc3RhbmRhcmQgbWVtb3J5IGZyZXF1ZW5jaWVzLgogCSAqIFdlIGRldGVjdCBpdCBhbmQgc2V0IHRoZSBmcmVxdWVuY3kgbWFudWFsbHkuCiAJICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpIHsKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkgewogCQlwYXItPnBsbF9saW1pdHMubWNsayA9IDcwOwogCQlwYXItPnBsbF9saW1pdHMueGNsayA9IDUzOwogCX0KQEAgLTI2NTksNyArMjY1OSw3IEBACiAJCSAgICAgIEZCSU5GT19IV0FDQ0VMX1lQQU47CiAKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQlpZiAoTTY0X0hBUyhHM19QQl8xXzEpICYmIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpIHsKKwlpZiAoTTY0X0hBUyhHM19QQl8xXzEpICYmIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpIHsKIAkJLyoKIAkJICogdGhlc2UgYml0cyBsZXQgdGhlIDEwMSBwb3dlcmJvb2sKIAkJICogd2FrZSB1cCBmcm9tIHNsZWVwIC0tIHBhdWx1cwpAQCAtMjY5MCw5ICsyNjkwLDkgQEAKIAkJCQlpZiAoTTY0X0hBUyhHM19QQl8xMDI0eDc2OCkpCiAJCQkJCS8qIEczIFBvd2VyQm9vayB3aXRoIDEwMjR4NzY4IExDRCAqLwogCQkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNjA7Ci0JCQkJZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIikpCisJCQkJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIikpCiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMDI0Xzc2OF83NTsKLQkJCQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQorCQkJCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpCiAJCQkJCS8qIGlCb29rIHdpdGggODAweDYwMCBMQ0QgKi8KIAkJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzgwMF82MDBfNjA7CiAJCQkJZWxzZQpAQCAtMzEwNCw3ICszMTA0LDcgQEAKIAl9CiAKIAlkcCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKLQlpZiAobm9kZSA9PSBkcC0+bm9kZSkgeworCWlmIChub2RlID09IGRwLT5waGFuZGxlKSB7CiAJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmRlZmF1bHRfdmFyOwogCQl1bnNpZ25lZCBpbnQgTiwgUCwgUSwgTSwgVCwgUjsKIAkJdTMyIHZfdG90YWwsIGhfdG90YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKaW5kZXggMWEwNTZhZC4uZmExMTk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwpAQCAtMTc1LDkgKzE3NSw5IEBACiAKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKIAlwZGF0YS0+bmVnYXRpdmUgPSBwZGF0YS0+bmVnYXRpdmUgfHwKLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSB8fAotCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMyIpIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiw1Iik7CisJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwzIikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNSIpOwogI2VuZGlmCiAKIAlyaW5mby0+aW5mby0+YmxfZGV2ID0gYmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKaW5kZXggZWIxMjE4Mi4uZDI1ZGY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9lZmlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwpAQCAtMTYxLDggKzE2MSwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBlZmlmYl9kZXN0cm95KHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkKKwkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmFwZXJ0dXJlX2Jhc2UsIGluZm8tPmFwZXJ0dXJlX3NpemUpOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIGVmaWZiX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX2Rlc3Ryb3kJPSBlZmlmYl9kZXN0cm95LAogCS5mYl9zZXRjb2xyZWcJPSBlZmlmYl9zZXRjb2xyZWcsCiAJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKQEAgLTI4MSw3ICsyOTAsNyBAQAogCWluZm8tPnBhciA9IE5VTEw7CiAKIAlpbmZvLT5hcGVydHVyZV9iYXNlID0gZWZpZmJfZml4LnNtZW1fc3RhcnQ7Ci0JaW5mby0+YXBlcnR1cmVfc2l6ZSA9IHNpemVfdG90YWw7CisJaW5mby0+YXBlcnR1cmVfc2l6ZSA9IHNpemVfcmVtYXA7CiAKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoZWZpZmJfZml4LnNtZW1fc3RhcnQsIGVmaWZiX2ZpeC5zbWVtX2xlbik7CiAJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYwppbmRleCA3MmQ2OGIzLi40NjM3YmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYwpAQCAtMTYzMyw2ICsxNjMzLDExIEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNsX2RpdV9tYXRjaFtdID0geworI2lmZGVmIENPTkZJR19QUENfTVBDNTEyeAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZGl1IiwKKwl9LAorI2VuZGlmCiAJewogCQkuY29tcGF0aWJsZSA9ICJmc2wsZGl1IiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IDY2MzU4ZmEuLmI0YjZkZWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCkBAIC01OTMsNyArNTkzLDggQEAKICAqLwogc3RhdGljIGludCBpbXhmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCiAJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTYwMyw3ICs2MDQsOCBAQAogCiBzdGF0aWMgaW50IGlteGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CiAKIAlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYWNmYi5jIGIvZHJpdmVycy92aWRlby9tYWNmYi5jCmluZGV4IGQ2Njg4N2UuLjQzMjA3Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWFjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hY2ZiLmMKQEAgLTEsMjkgKzEsMzMgQEAKLS8qIG1hY2ZiLmM6IEdlbmVyaWMgZnJhbWVidWZmZXIgZm9yIE1hY3Mgd2hvc2UgY29sb3VybWFwcy9tb2RlcyB3ZQotICAgZG9uJ3Qga25vdyBob3cgdG8gc2V0ICovCi0KLS8qIChjKSAxOTk5IERhdmlkIEh1Z2dpbnMtRGFpbmVzIDxkaGRAZGViaWFuLm9yZz4KLQotICAgUHJpbWFyaWx5IGJhc2VkIG9uIHZlc2FmYi5jLCBieSBHZXJkIEtub3JyCi0gICAoYykgMTk5OCBHZXJkIEtub3JyIDxrcmF4ZWxAY3MudHUtYmVybGluLmRlPgotCi0gICBBbHNvIHVzZXMgaW5mb3JtYXRpb24gYW5kIGNvZGUgZnJvbToKLSAgIAotICAgVGhlIG9yaWdpbmFsIG1hY2ZiLmMgZnJvbSBMaW51eC9tYWM2OGsgMi4wLCBieSBBbGFuIENveCwgSnVlcmdlbgotICAgTWVsbGluZ2VyLCBNaWthZWwgRm9yc2VsaXVzLCBNaWNoYWVsIFNjaG1pdHosIGFuZCBvdGhlcnMuCi0KLSAgIHZhbGt5cmllZmIuYywgYnkgTWFydGluIENvc3RhYmVsLCBLZXZpbiBTY2hvZWRlbCwgQmFycnkgTmF0aGFuLCBEYW4KLSAgIEphY29ib3dpdHosIFBhdWwgTWFja2VycmFzLCBGYWJpbyBSaWNjYXJkaSwgYW5kIEdlZXJ0IFV5dHRlcmhvZXZlbi4KLSAgIAotICAgVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmUuICBZb3UgbWF5IGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUKLSAgIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYW55IGxhdGVyIHZlcnNpb24sIGF0IHlvdXIgY29udmVuaWVuY2UuICovCisvKgorICogbWFjZmIuYzogR2VuZXJpYyBmcmFtZWJ1ZmZlciBmb3IgTWFjcyB3aG9zZSBjb2xvdXJtYXBzL21vZGVzIHdlCisgKiBkb24ndCBrbm93IGhvdyB0byBzZXQuCisgKgorICogKGMpIDE5OTkgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPgorICoKKyAqIFByaW1hcmlseSBiYXNlZCBvbiB2ZXNhZmIuYywgYnkgR2VyZCBLbm9ycgorICogKGMpIDE5OTggR2VyZCBLbm9yciA8a3JheGVsQGNzLnR1LWJlcmxpbi5kZT4KKyAqCisgKiBBbHNvIHVzZXMgaW5mb3JtYXRpb24gYW5kIGNvZGUgZnJvbToKKyAqCisgKiBUaGUgb3JpZ2luYWwgbWFjZmIuYyBmcm9tIExpbnV4L21hYzY4ayAyLjAsIGJ5IEFsYW4gQ294LCBKdWVyZ2VuCisgKiBNZWxsaW5nZXIsIE1pa2FlbCBGb3JzZWxpdXMsIE1pY2hhZWwgU2NobWl0eiwgYW5kIG90aGVycy4KKyAqCisgKiB2YWxreXJpZWZiLmMsIGJ5IE1hcnRpbiBDb3N0YWJlbCwgS2V2aW4gU2Nob2VkZWwsIEJhcnJ5IE5hdGhhbiwgRGFuCisgKiBKYWNvYm93aXR6LCBQYXVsIE1hY2tlcnJhcywgRmFiaW8gUmljY2FyZGksIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4uCisgKgorICogVGhlIFZpZGVvVG9vbGJveCAiQnVncyIgd2ViIHBhZ2UgYXQKKyAqIGh0dHA6Ly9yYWpza3kucHN5Y2gubnl1LmVkdS9UaXBzL1ZpZGVvQnVncy5odG1sCisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmUuICBZb3UgbWF5IGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUKKyAqIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYW55IGxhdGVyIHZlcnNpb24sIGF0IHlvdXIgY29udmVuaWVuY2UuCisgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9udWJ1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTMxLDkgKzM1LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC00NCw3ICs0NSw3IEBACiAjZGVmaW5lIERBRkJfQkFTRSAweGY5ODAwMjAwCiAKIC8qIEFkZHJlc3MgZm9yIHRoZSBidWlsdC1pbiBDaXZpYyBmcmFtZWJ1ZmZlciBpbiBRdWFkcmEgQVZzICovCi0jZGVmaW5lIENJVklDX0JBU0UgMHg1MGYzMDgwMAkvKiBPbmx5IHRlc3RlZCBvbiA2NjBBViEgKi8KKyNkZWZpbmUgQ0lWSUNfQkFTRSAweDUwZjMwODAwCiAKIC8qIEdTQyAoR3JheSBTY2FsZSBDb250cm9sbGVyKSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgR1NDX0JBU0UgMHg1MEYyMDAwMApAQCAtNTIsMzcgKzUzLDkgQEAKIC8qIENTQyAoQ29sb3IgU2NyZWVuIENvbnRyb2xsZXIpIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBDU0NfQkFTRSAweDUwRjIwMDAwCiAKLXN0YXRpYyBpbnQgKCptYWNmYl9zZXRwYWxldHRlKSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJCXVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkJc3RydWN0IGZiX2luZm8gKmluZm8pID0gTlVMTDsKLXN0YXRpYyBpbnQgdmFsa3lyaWVfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJCXVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkJc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIGludCBkYWZiX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLXN0YXRpYyBpbnQgcmJ2X3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgaW50IG1kY19zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCB0b2J5X3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLXN0YXRpYyBpbnQgY2l2aWNfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgaW50IGNzY19zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotCi1zdGF0aWMgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIGFkZHI7Ci0JLyogTm90ZTogd29yZC1hbGlnbmVkICovCi0JY2hhciBwYWRbM107Ci0JdW5zaWduZWQgY2hhciBsdXQ7Ci19IF9faW9tZW0gKnZhbGt5cmllX2NtYXBfcmVnczsKK3N0YXRpYyBpbnQgKCptYWNmYl9zZXRwYWxldHRlKSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGNoYXIgYWRkcjsKQEAgLTExNiwxNSArODksMTUgQEAKIH0gX19pb21lbSAqY2l2aWNfY21hcF9yZWdzOwogCiBzdGF0aWMgc3RydWN0IHsKLQljaGFyICAgIHBhZDFbMHg0MF07Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIJY2x1dF93YWRkcjsJLyogMHg0MCAqLwotICAgICAgICBjaGFyICAgIHBhZDI7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIJY2x1dF9kYXRhOwkvKiAweDQyICovCi0gICAgICAgIGNoYXIJcGFkM1sweDNdOwotICAgICAgICB1bnNpZ25lZCBjaGFyCWNsdXRfcmFkZHI7CS8qIDB4NDYgKi8KKwljaGFyIHBhZDFbMHg0MF07CisJdW5zaWduZWQgY2hhciBjbHV0X3dhZGRyOwkvKiAweDQwICovCisJY2hhciBwYWQyOworCXVuc2lnbmVkIGNoYXIgY2x1dF9kYXRhOwkvKiAweDQyICovCisJY2hhciBwYWQzWzB4M107CisJdW5zaWduZWQgY2hhciBjbHV0X3JhZGRyOwkvKiAweDQ2ICovCiB9IF9faW9tZW0gKmNzY19jbWFwX3JlZ3M7CiAKLS8qIFdlIHdpbGwgbGVhdmUgdGhlc2UgdGhlIHdheSB0aGV5IGFyZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KKy8qIFRoZSByZWdpc3RlcnMgaW4gdGhlc2Ugc3RydWN0cyBhcmUgaW4gTnVCdXMgc2xvdCBzcGFjZSAqLwogc3RydWN0IG1kY19jbWFwX3JlZ3MgewogCWNoYXIgcGFkMVsweDIwMDIwMF07CiAJdW5zaWduZWQgY2hhciBhZGRyOwpAQCAtMTQ1LDEzICsxMTgsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIGx1dDsKIH07CiAKLSNkZWZpbmUgUElYRUxfVE9fTU0oYSkJKCgoYSkqMTApLzI4KQkvKiB3aWR0aCBpbiBtbSBhdCA3MiBkcGkgKi8JCi0KLS8qIG1vZGUgKi8KLXN0YXRpYyBpbnQgIHZpZGVvX3Nsb3QgPSAwOworI2RlZmluZSBQSVhFTF9UT19NTShhKQkoKChhKSoxMCkvMjgpCS8qIHdpZHRoIGluIG1tIGF0IDcyIGRwaSAqLwogCiBzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIG1hY2ZiX2RlZmluZWQgPSB7Ci0JLmJpdHNfcGVyX3BpeGVsCT0gOCwJCisJLmJpdHNfcGVyX3BpeGVsCT0gOCwKIAkuYWN0aXZhdGUJPSBGQl9BQ1RJVkFURV9OT1csCiAJLndpZHRoCQk9IC0xLAogCS5oZWlnaHQJCT0gLTEsCkBAIC0xNjcsMTgxICsxMzcsMTUyIEBACiAJLmFjY2VsCT0gRkJfQUNDRUxfTk9ORSwKIH07CiAKK3N0YXRpYyB2b2lkICpzbG90X2FkZHI7CiBzdGF0aWMgc3RydWN0IGZiX2luZm8gZmJfaW5mbzsKIHN0YXRpYyB1MzIgcHNldWRvX3BhbGV0dGVbMTZdOwotc3RhdGljIGludCBpbnZlcnNlICAgPSAwOwotc3RhdGljIGludCB2aWR0ZXN0ICAgPSAwOworc3RhdGljIGludCBpbnZlcnNlOworc3RhdGljIGludCB2aWR0ZXN0OwogCi1zdGF0aWMgaW50IHZhbGt5cmllX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCQl1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQorLyoKKyAqIFVubGlrZSB0aGUgVmFsa3lyaWUsIHRoZSBEQUZCIGNhbm5vdCBzZXQgaW5kaXZpZHVhbCBjb2xvcm1hcAorICogcmVnaXN0ZXJzLiAgVGhlcmVmb3JlLCB3ZSBkbyB3aGF0IHRoZSBNYWNPUyBkcml2ZXIgZG9lcyAobm8KKyAqIGtpZGRpbmchKSBhbmQgc2ltcGx5IHNldCB0aGVtIG9uZSBieSBvbmUgdW50aWwgd2UgaGl0IHRoZSBvbmUgd2UKKyAqIHdhbnQuCisgKi8KK3N0YXRpYyBpbnQgZGFmYl9zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQotCXJlZCA+Pj0gODsKLQlncmVlbiA+Pj0gODsKLQlibHVlID4+PSA4OwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQotCS8qIHRlbGwgY2x1dCB3aGljaCBhZGRyZXNzIHRvIGZpbGwgKi8KLQludWJ1c193cml0ZWIocmVnbm8sICZ2YWxreXJpZV9jbWFwX3JlZ3MtPmFkZHIpOwotCW5vcCgpOwotCi0JLyogc2VuZCBvbmUgY29sb3IgY2hhbm5lbCBhdCBhIHRpbWUgKi8KLQludWJ1c193cml0ZWIocmVkLCAmdmFsa3lyaWVfY21hcF9yZWdzLT5sdXQpOwotCW5vcCgpOwotCW51YnVzX3dyaXRlYihncmVlbiwgJnZhbGt5cmllX2NtYXBfcmVncy0+bHV0KTsKLQlub3AoKTsKLQludWJ1c193cml0ZWIoYmx1ZSwgJnZhbGt5cmllX2NtYXBfcmVncy0+bHV0KTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogVW5saWtlIHRoZSBWYWxreXJpZSwgdGhlIERBRkIgY2Fubm90IHNldCBpbmRpdmlkdWFsIGNvbG9ybWFwCi0gICByZWdpc3RlcnMuICBUaGVyZWZvcmUsIHdlIGRvIHdoYXQgdGhlIE1hY09TIGRyaXZlciBkb2VzIChubwotICAga2lkZGluZyEpIGFuZCBzaW1wbHkgc2V0IHRoZW0gb25lIGJ5IG9uZSB1bnRpbCB3ZSBoaXQgdGhlIG9uZSB3ZQotICAgd2FudC4gKi8KLXN0YXRpYyBpbnQgZGFmYl9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQkvKiBGSVhNRTogcmVhbGx5LCByZWFsbHkgbmVlZCB0byB1c2UgaW9yZW1hcCgpIGhlcmUsCi0gICAgICAgICAgIHBoeXNfdG9fdmlydCgpIGRvZXNuJ3Qgd29yayBhbnltb3JlICovCiAJc3RhdGljIGludCBsYXN0cmVnID0gLTE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKLQlyZWQgPj49IDg7Ci0JZ3JlZW4gPj49IDg7Ci0JYmx1ZSA+Pj0gODsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKLQkvKiBmYmRldiB3aWxsIHNldCBhbiBlbnRpcmUgY29sb3VybWFwLCBidXQgWCB3b24ndC4gIEhvcGVmdWxseQotCSAgIHRoaXMgc2hvdWxkIGFjY29tbW9kYXRlIGJvdGggb2YgdGhlbSAqLwotCWlmIChyZWdubyAhPSBsYXN0cmVnKzEpIHsKKworCS8qCisJICogZmJkZXYgd2lsbCBzZXQgYW4gZW50aXJlIGNvbG91cm1hcCwgYnV0IFggd29uJ3QuICBIb3BlZnVsbHkKKwkgKiB0aGlzIHNob3VsZCBhY2NvbW1vZGF0ZSBib3RoIG9mIHRoZW0KKwkgKi8KKwlpZiAocmVnbm8gIT0gbGFzdHJlZyArIDEpIHsKIAkJaW50IGk7Ci0JCQorCiAJCS8qIFN0YWIgaW4gdGhlIGRhcmsgdHJ5aW5nIHRvIHJlc2V0IHRoZSBDTFVUIHBvaW50ZXIgKi8KIAkJbnVidXNfd3JpdGVsKDAsICZkYWZiX2NtYXBfcmVncy0+cmVzZXQpOwogCQlub3AoKTsKLQkJCisKIAkJLyogTG9vcCB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlZ2lzdGVyIHdlIHdhbnQgKi8KIAkJZm9yIChpID0gMDsgaSA8IHJlZ25vOyBpKyspIHsKLQkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLnJlZFtpXSA+PiA4LCAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CisJCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5yZWRbaV0gPj4gOCwKKwkJCQkgICAgICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKIAkJCW5vcCgpOwotCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAuZ3JlZW5baV0gPj4gOCwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOworCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAuZ3JlZW5baV0gPj4gOCwKKwkJCQkgICAgICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKIAkJCW5vcCgpOwotCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAuYmx1ZVtpXSA+PiA4LCAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CisJCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5ibHVlW2ldID4+IDgsCisJCQkJICAgICAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CiAJCQlub3AoKTsKIAkJfQogCX0KLQkJCisKIAludWJ1c193cml0ZWIocmVkLCAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CiAJbm9wKCk7CiAJbnVidXNfd3JpdGViKGdyZWVuLCAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CiAJbm9wKCk7CiAJbnVidXNfd3JpdGViKGJsdWUsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKLQkKKwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlsYXN0cmVnID0gcmVnbm87CiAJcmV0dXJuIDA7CiB9CiAKIC8qIFY4IGFuZCBCcmF6aWwgc2VlbSB0byB1c2UgdGhlIHNhbWUgREFDLiAgU29ub3JhIGRvZXMgYXMgd2VsbC4gKi8KLXN0YXRpYyBpbnQgdjhfYnJhemlsX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCQkgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCQkgc3RydWN0IGZiX2luZm8gKmluZm8pCQorc3RhdGljIGludCB2OF9icmF6aWxfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkJdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOwotCXVuc2lnbmVkIGNoYXIgX3JlZCAgPXJlZD4+ODsKLQl1bnNpZ25lZCBjaGFyIF9ncmVlbj1ncmVlbj4+ODsKLQl1bnNpZ25lZCBjaGFyIF9ibHVlID1ibHVlPj44OwotCXVuc2lnbmVkIGNoYXIgX3JlZ25vOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoYnBwID4gOCkgcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCisJaWYgKGJwcCA+IDgpCisJCXJldHVybiAxOyAvKiBmYWlsc2FmZSAqLwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJLyogT24gdGhlc2UgY2hpcHMsIHRoZSBDTFVUIHJlZ2lzdGVyIG51bWJlcnMgYXJlIHNwcmVhZCBvdXQKLQkgICBhY3Jvc3MgdGhlIHJlZ2lzdGVyIHNwYWNlLiAgVGh1czoKLQotCSAgIEluIDhicHAsIGFsbCByZWdub3MgYXJlIHZhbGlkLgotCSAgIAotCSAgIEluIDRicHAsIHRoZSByZWdub3MgYXJlIDB4MGYsIDB4MWYsIDB4MmYsIGV0YywgZXRjCi0JICAgCi0JICAgSW4gMmJwcCwgdGhlIHJlZ25vcyBhcmUgMHgzZiwgMHg3ZiwgMHhiZiwgMHhmZiAqLwotICAJX3JlZ25vID0gKHJlZ25vIDw8ICg4IC0gYnBwKSkgfCAoMHhGRiA+PiBicHApOwotCW51YnVzX3dyaXRlYihfcmVnbm8sICZ2OF9icmF6aWxfY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7CisJICogYWNyb3NzIHRoZSByZWdpc3RlciBzcGFjZS4gIFRodXM6CisJICogSW4gOGJwcCwgYWxsIHJlZ25vcyBhcmUgdmFsaWQuCisJICogSW4gNGJwcCwgdGhlIHJlZ25vcyBhcmUgMHgwZiwgMHgxZiwgMHgyZiwgZXRjLCBldGMKKwkgKiBJbiAyYnBwLCB0aGUgcmVnbm9zIGFyZSAweDNmLCAweDdmLCAweGJmLCAweGZmCisJICovCisJcmVnbm8gPSAocmVnbm8gPDwgKDggLSBicHApKSB8ICgweEZGID4+IGJwcCk7CisJbnVidXNfd3JpdGViKHJlZ25vLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+YWRkcik7CisJbm9wKCk7CiAKIAkvKiBzZW5kIG9uZSBjb2xvciBjaGFubmVsIGF0IGEgdGltZSAqLwotCW51YnVzX3dyaXRlYihfcmVkLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ncmVlbiwgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfYmx1ZSwgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmx1dCk7CisJbnVidXNfd3JpdGViKHJlZCwgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGdyZWVuLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmx1dCk7CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYnZfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQorLyogUkFNLUJhc2VkIFZpZGVvICovCitzdGF0aWMgaW50IHJidl9zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0JLyogdXNlIE1TQnMgKi8KLQl1bnNpZ25lZCBjaGFyIF9yZWQgID1yZWQ+Pjg7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW49Z3JlZW4+Pjg7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSA9Ymx1ZT4+ODsKLQl1bnNpZ25lZCBjaGFyIF9yZWdubzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+IDgpIHJldHVybiAxOyAvKiBmYWlsc2FmZSAqLworCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPiA4KQorCQlyZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKKwogCS8qIEZyb20gdGhlIFZpZGVvVG9vbGJveCBkcml2ZXIuICBTZWVtcyB0byBiZSBzYXlpbmcgdGhhdAogCSAqIHJlZ25vICMyNTQgYW5kICMyNTUgYXJlIHRoZSBpbXBvcnRhbnQgb25lcyBmb3IgMS1iaXQgY29sb3IsCiAJICogcmVnbm8gIzI1Mi0yNTUgYXJlIHRoZSBpbXBvcnRhbnQgb25lcyBmb3IgMi1iaXQgY29sb3IsIGV0Yy4KIAkgKi8KLQlfcmVnbm8gPSByZWdubyArICgyNTYtKDEgPDwgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSk7CisJcmVnbm8gKz0gMjU2IC0gKDEgPDwgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKIAogCS8qIHJlc2V0IGNsdXQ/IChWaWRlb1Rvb2xib3ggc2V6ICJub3QgbmVjZXNzYXJ5IikgKi8KLQludWJ1c193cml0ZWIoMHhGRiwgJnJidl9jbWFwX3JlZ3MtPmNudGwpOyBub3AoKTsKLQkKKwludWJ1c193cml0ZWIoMHhGRiwgJnJidl9jbWFwX3JlZ3MtPmNudGwpOworCW5vcCgpOworCiAJLyogdGVsbCBjbHV0IHdoaWNoIGFkZHJlc3MgdG8gdXNlLiAqLwotCW51YnVzX3dyaXRlYihfcmVnbm8sICZyYnZfY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7Ci0JCisJbnVidXNfd3JpdGViKHJlZ25vLCAmcmJ2X2NtYXBfcmVncy0+YWRkcik7CisJbm9wKCk7CisKIAkvKiBzZW5kIG9uZSBjb2xvciBjaGFubmVsIGF0IGEgdGltZS4gKi8KLQludWJ1c193cml0ZWIoX3JlZCwgICAmcmJ2X2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ncmVlbiwgJnJidl9jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfYmx1ZSwgICZyYnZfY21hcF9yZWdzLT5sdXQpOwotCQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgLyogZG9uZS4gKi8KKwludWJ1c193cml0ZWIocmVkLCAmcmJ2X2NtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoZ3JlZW4sICZyYnZfY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihibHVlLCAmcmJ2X2NtYXBfcmVncy0+bHV0KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAotLyogTWFjaW50b3NoIERpc3BsYXkgQ2FyZCAoOHgyNCkgKi8KKy8qIE1hY2ludG9zaCBEaXNwbGF5IENhcmQgKDgqMjQpICovCiBzdGF0aWMgaW50IG1kY19zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKIAkJCSAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKIAkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jdm9sYXRpbGUgc3RydWN0IG1kY19jbWFwX3JlZ3MgKmNtYXBfcmVncyA9Ci0JCW51YnVzX3Nsb3RfYWRkcih2aWRlb19zbG90KTsKLQkvKiB1c2UgTVNCcyAqLwotCXVuc2lnbmVkIGNoYXIgX3JlZCAgPXJlZD4+ODsKLQl1bnNpZ25lZCBjaGFyIF9ncmVlbj1ncmVlbj4+ODsKLQl1bnNpZ25lZCBjaGFyIF9ibHVlID1ibHVlPj44OwotCXVuc2lnbmVkIGNoYXIgX3JlZ25vPXJlZ25vOworCXN0cnVjdCBtZGNfY21hcF9yZWdzICpjbWFwX3JlZ3MgPSBzbG90X2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKKwogCS8qIHRoZSBub3AncyBhcmUgdGhlcmUgdG8gb3JkZXIgd3JpdGVzLiAqLwotCW51YnVzX3dyaXRlYihfcmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX3JlZCwgJmNtYXBfcmVncy0+bHV0KTsgICAgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsgIG5vcCgpOwotCW51YnVzX3dyaXRlYihfYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKKwludWJ1c193cml0ZWIocmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihyZWQsICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGdyZWVuLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihibHVlLCAmY21hcF9yZWdzLT5sdXQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMzUwLDI0ICsyOTEsMjYgQEAKIC8qIFRvYnkgZnJhbWUgYnVmZmVyICovCiBzdGF0aWMgaW50IHRvYnlfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCiAJCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pIAorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jdm9sYXRpbGUgc3RydWN0IHRvYnlfY21hcF9yZWdzICpjbWFwX3JlZ3MgPQotCQludWJ1c19zbG90X2FkZHIodmlkZW9fc2xvdCk7CisJc3RydWN0IHRvYnlfY21hcF9yZWdzICpjbWFwX3JlZ3MgPSBzbG90X2FkZHI7CiAJdW5zaWduZWQgaW50IGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKLQkvKiB1c2UgTVNCcyAqLwotCXVuc2lnbmVkIGNoYXIgX3JlZCAgPX4ocmVkPj44KTsKLQl1bnNpZ25lZCBjaGFyIF9ncmVlbj1+KGdyZWVuPj44KTsKLQl1bnNpZ25lZCBjaGFyIF9ibHVlID1+KGJsdWU+PjgpOwotCXVuc2lnbmVkIGNoYXIgX3JlZ25vID0gKHJlZ25vIDw8ICg4IC0gYnBwKSkgfCAoMHhGRiA+PiBicHApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlyZWQgPSB+cmVkOworCWdyZWVuID0gfmdyZWVuOworCWJsdWUgPSB+Ymx1ZTsKKwlyZWdubyA9IChyZWdubyA8PCAoOCAtIGJwcCkpIHwgKDB4RkYgPj4gYnBwKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCi0JbnVidXNfd3JpdGViKF9yZWdubywgJmNtYXBfcmVncy0+YWRkcik7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfcmVkLCAmY21hcF9yZWdzLT5sdXQpOyAgICBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmY21hcF9yZWdzLT5sdXQpOyAgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAmY21hcF9yZWdzLT5sdXQpOworCisJbnVidXNfd3JpdGViKHJlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIocmVkLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTM3OCwyMCArMzIxLDE4IEBACiAJCQkgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCiAJCQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXZvbGF0aWxlIHN0cnVjdCBqZXRfY21hcF9yZWdzICpjbWFwX3JlZ3MgPQotCQludWJ1c19zbG90X2FkZHIodmlkZW9fc2xvdCk7Ci0JLyogdXNlIE1TQnMgKi8KLQl1bnNpZ25lZCBjaGFyIF9yZWQgICA9IChyZWQ+PjgpOwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuID0gKGdyZWVuPj44KTsKLQl1bnNpZ25lZCBjaGFyIF9ibHVlICA9IChibHVlPj44KTsKKwlzdHJ1Y3QgamV0X2NtYXBfcmVncyAqY21hcF9yZWdzID0gc2xvdF9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JbnVidXNfd3JpdGViKHJlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9yZWQsICZjbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKKworCW51YnVzX3dyaXRlYihyZWdubywgJmNtYXBfcmVncy0+YWRkcik7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKHJlZCwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC00MDAsNTMgKzM0MSwyNyBAQAogLyoKICAqIENpdmljIGZyYW1lYnVmZmVyIC0tIFF1YWRyYSBBViBidWlsdC1pbiB2aWRlby4gIEEgY2hpcAogICogY2FsbGVkIFNlYmFzdGlhbiBob2xkcyB0aGUgYWN0dWFsIGNvbG9yIHBhbGV0dGVzLCBhbmQKLSAqIGFwcGFyZW50bHksIHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGJhbmtzIG9mIDUxMksgUkFNIAorICogYXBwYXJlbnRseSwgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgYmFua3Mgb2YgNTEySyBSQU0KICAqIHdoaWNoIGNhbiBhY3QgYXMgc2VwYXJhdGUgZnJhbWVidWZmZXJzIGZvciBkb2luZyB2aWRlbwogICogaW5wdXQgYW5kIHZpZXdpbmcgdGhlIHNjcmVlbiBhdCB0aGUgc2FtZSB0aW1lISAgVGhlIDg0MEFWCi0gKiBDYW4gYWRkIGFub3RoZXIgMU1CIFJBTSB0byBnaXZlIHRoZSB0d28gZnJhbWVidWZmZXJzIAorICogQ2FuIGFkZCBhbm90aGVyIDFNQiBSQU0gdG8gZ2l2ZSB0aGUgdHdvIGZyYW1lYnVmZmVycwogICogMU1CIFJBTSBhcGllY2UuCi0gKgotICogRklYTUU6IHRoaXMgZG9lc24ndCBzZWVtIHRvIHdvcmsgYW55bW9yZS4KICAqLwotc3RhdGljIGludCBjaXZpY19zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCBjaXZpY19zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXN0YXRpYyBpbnQgbGFzdHJlZyA9IC0xOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNsdXRfc3RhdHVzOwogCQotCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPiA4KSByZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KLQotCXJlZCAgID4+PSA4OwotCWdyZWVuID4+PSA4OwotCWJsdWUgID4+PSA4OworCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPiA4KQorCQlyZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKLQkvKgotCSAqIFNldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcwotCSAqLwotCW51YnVzX3dyaXRlYihyZWdubywgJmNpdmljX2NtYXBfcmVncy0+YWRkcik7IG5vcCgpOwogCi0JLyoKLQkgKiBXYWl0IGZvciBWQkwgaW50ZXJydXB0IGhlcmU7Ci0JICogVGhleSdyZSB1c3VhbGx5IG5vdCBlbmFibGVkIGZyb20gUGVuZ3Vpbiwgc28gd2Ugd29uJ3QgY2hlY2sKLQkgKi8KLSNpZiAwCi0JewotI2RlZmluZSBDSVZJQ19WQkxfT0ZGU0VUCTB4MTIwCi0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnZibCA9IG51YnVzX3JlYWRsKGNpdmljX2NtYXBfcmVncy0+dmJsX2FkZHIgKyBDSVZJQ19WQkxfT0ZGU0VUKTsKLQkJLyogZG8gaW50ZXJydXB0IHNldHVwIHN0dWZmIGhlcmU/ICovCi0JCSp2YmwgPSAwTDsgbm9wKCk7CS8qIGNsZWFyICovCi0JCSp2YmwgPSAxTDsgbm9wKCk7CS8qIHNldCAqLwotCQl3aGlsZSAoKnZibCAhPSAwTCkJLyogd2FpdCBmb3IgbmV4dCB2YmwgKi8KLQkJewotCQkJdXNsZWVwKDEwKTsJLyogbmVlZGVkPyAqLwotCQl9Ci0JCS8qIGRvIGludGVycnVwdCBzaHV0ZG93biBzdHVmZiBoZXJlPyAqLwotCX0KLSNlbmRpZgorCS8qIFNldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyAqLworCW51YnVzX3dyaXRlYihyZWdubywgJmNpdmljX2NtYXBfcmVncy0+YWRkcik7CisJbm9wKCk7CiAKIAkvKgogCSAqIEdyYWIgYSBzdGF0dXMgd29yZCBhbmQgZG8gc29tZSBjaGVja2luZzsKQEAgLTQ1OSwzOSArMzc0LDUyIEBACiAjaWYgMAogCQlpZiAoKGNsdXRfc3RhdHVzICYgMHgwMDBEKSAhPSAwKQogCQl7Ci0JCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7CisJCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJCW5vcCgpOworCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCQlub3AoKTsKIAkJfQogI2VuZGlmCiAKLQkJbnVidXNfd3JpdGViKCAgcmVkLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKGdyZWVuLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKCBibHVlLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKCAweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJbnVidXNfd3JpdGViKHJlZCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYihncmVlbiwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYihibHVlLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CiAJfQogCWVsc2UKIAl7CiAJCXVuc2lnbmVkIGNoYXIganVuazsKIAotCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7CisJCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKIAogCQlpZiAoKGNsdXRfc3RhdHVzICYgMHgwMDBEKSAhPSAwKQogCQl7Ci0JCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7CisJCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJCW5vcCgpOworCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCQlub3AoKTsKIAkJfQogCi0JCW51YnVzX3dyaXRlYiggIHJlZCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYihncmVlbiwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYiggYmx1ZSwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYigganVuaywgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7CisJCW51YnVzX3dyaXRlYihyZWQsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoZ3JlZW4sICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoYmx1ZSwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYihqdW5rLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOwogCX0KIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlsYXN0cmVnID0gcmVnbm87CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwMCwxNiArNDI4LDIxIEBACiAgKiAoYW5kIHRoZSA1MzAwIHRvbywgYnV0IHRoYXQncyBhIFBvd2VyTWFjKS4gVGhpcyBmdW5jdGlvbgogICogYnJvdWdodCB0byB5b3UgaW4gcGFydCBieSB0aGUgRUNTQyBkcml2ZXIgZm9yIE1rTGludXguCiAgKi8KLQotc3RhdGljIGludCBjc2Nfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCBjc2Nfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCW1kZWxheSgxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJdWRlbGF5KDEpOyAvKiBta2xpbnV4IG9uIFBCIDUzMDAgd2FpdHMgZm9yIDI2MCBucyAqLwogCW51YnVzX3dyaXRlYihyZWdubywgJmNzY19jbWFwX3JlZ3MtPmNsdXRfd2FkZHIpOwotCW51YnVzX3dyaXRlYihyZWQsICAgJmNzY19jbWFwX3JlZ3MtPmNsdXRfZGF0YSk7CisJbnVidXNfd3JpdGViKHJlZCwgJmNzY19jbWFwX3JlZ3MtPmNsdXRfZGF0YSk7CiAJbnVidXNfd3JpdGViKGdyZWVuLCAmY3NjX2NtYXBfcmVncy0+Y2x1dF9kYXRhKTsKLQludWJ1c193cml0ZWIoYmx1ZSwgICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOworCW51YnVzX3dyaXRlYihibHVlLCAmY3NjX2NtYXBfcmVncy0+Y2x1dF9kYXRhKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTE4LDEwICs0NTEsMTAgQEAKIAkJCSAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQogewogCS8qCi0JICogIFNldCBhIHNpbmdsZSBjb2xvciByZWdpc3Rlci4gVGhlIHZhbHVlcyBzdXBwbGllZCBhcmUKLQkgKiAgYWxyZWFkeSByb3VuZGVkIGRvd24gdG8gdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzCi0JICogIChhY2NvcmRpbmcgdG8gdGhlIGVudHJpZXMgaW4gdGhlIGB2YXInIHN0cnVjdHVyZSkuIFJldHVybgotCSAqICAhPSAwIGZvciBpbnZhbGlkIHJlZ25vLgorCSAqIFNldCBhIHNpbmdsZSBjb2xvciByZWdpc3Rlci4gVGhlIHZhbHVlcyBzdXBwbGllZCBhcmUKKwkgKiBhbHJlYWR5IHJvdW5kZWQgZG93biB0byB0aGUgaGFyZHdhcmUncyBjYXBhYmlsaXRpZXMKKwkgKiAoYWNjb3JkaW5nIHRvIHRoZSBlbnRyaWVzIGluIHRoZSBgdmFyJyBzdHJ1Y3R1cmUpLgorCSAqIFJldHVybiBub24temVybyBmb3IgaW52YWxpZCByZWduby4KIAkgKi8KIAkKIAlpZiAocmVnbm8gPj0gZmJfaW5mby0+Y21hcC5sZW4pCkBAIC01MzYsOCArNDY5LDggQEAKIAkJY2FzZSA0OgogCQljYXNlIDg6CiAJCQlpZiAobWFjZmJfc2V0cGFsZXR0ZSkKLQkJCQltYWNmYl9zZXRwYWxldHRlKHJlZ25vLCByZWQsIGdyZWVuLCBibHVlLAotCQkJCQkJIGZiX2luZm8pOworCQkJCW1hY2ZiX3NldHBhbGV0dGUocmVnbm8sIHJlZCA+PiA4LCBncmVlbiA+PiA4LAorCQkJCQkJIGJsdWUgPj4gOCwgZmJfaW5mbyk7CiAJCQllbHNlCiAJCQkJcmV0dXJuIDE7CiAJCQlicmVhazsKQEAgLTU1NSwyOCArNDg4LDIyIEBACiAJCQl9IGVsc2UgewogCQkJCS8qIDA6NTo2OjUgKi8KIAkJCQkoKHUzMiopIChmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9Ci0JCQkJCSgocmVkICAgJiAweGY4MDApICAgICAgKSB8CisJCQkJCSgocmVkICAgJiAweGY4MDApID4+ICAwKSB8CiAJCQkJCSgoZ3JlZW4gJiAweGZjMDApID4+ICA1KSB8CiAJCQkJCSgoYmx1ZSAgJiAweGY4MDApID4+IDExKTsKIAkJCX0KIAkJCWJyZWFrOwotCQkJLyogSSdtIHByZXR0eSBzdXJlIHRoYXQgb25lIG9yIHRoZSBvdGhlciBvZiB0aGVzZQotCQkJICAgZG9lc24ndCBleGlzdCBvbiA2OGsgTWFjcyAqLworCQkvKgorCQkgKiAyNC1iaXQgY29sb3VyIGFsbW9zdCBkb2Vzbid0IGV4aXN0IG9uIDY4ayBNYWNzIC0tCisJCSAqIGh0dHA6Ly9zdXBwb3J0LmFwcGxlLmNvbS9rYi9UQTI4NjM0IChPbGQgQXJ0aWNsZTogMTA5OTIpCisJCSAqLwogCQljYXNlIDI0OgotCQkJcmVkICAgPj49IDg7Ci0JCQlncmVlbiA+Pj0gODsKLQkJCWJsdWUgID4+PSA4OwotCQkJKCh1MzIgKikoZmJfaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQotCQkJCShyZWQgICA8PCBmYl9pbmZvLT52YXIucmVkLm9mZnNldCkgICB8Ci0JCQkJKGdyZWVuIDw8IGZiX2luZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKLQkJCQkoYmx1ZSAgPDwgZmJfaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKLQkJCWJyZWFrOwogCQljYXNlIDMyOgogCQkJcmVkICAgPj49IDg7CiAJCQlncmVlbiA+Pj0gODsKIAkJCWJsdWUgID4+PSA4OwogCQkJKCh1MzIgKikoZmJfaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQotCQkJCShyZWQgICA8PCBmYl9pbmZvLT52YXIucmVkLm9mZnNldCkgICB8CisJCQkJKHJlZCAgIDw8IGZiX2luZm8tPnZhci5yZWQub2Zmc2V0KSB8CiAJCQkJKGdyZWVuIDw8IGZiX2luZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKIAkJCQkoYmx1ZSAgPDwgZmJfaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKIAkJCWJyZWFrOwpAQCAtNTk3LDI1ICs1MjQsMjQgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBtYWNmYl9zZXR1cChjaGFyICpvcHRpb25zKQogewogCWNoYXIgKnRoaXNfb3B0OwotCQorCiAJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKIAkJcmV0dXJuOwotCQorCiAJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewotCQlpZiAoISp0aGlzX29wdCkgY29udGludWU7Ci0JCQotCQlpZiAoISBzdHJjbXAodGhpc19vcHQsICJpbnZlcnNlIikpCi0JCQlpbnZlcnNlPTE7Ci0JCS8qIFRoaXMgbWVhbnMgInR1cm4gb24gZXhwZXJpbWVudGFsIENMVVQgY29kZSIgKi8KLQkJZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgInZpZHRlc3QiKSkKLQkJCXZpZHRlc3Q9MTsKKwkJaWYgKCEqdGhpc19vcHQpCisJCQljb250aW51ZTsKKworCQlpZiAoIXN0cmNtcCh0aGlzX29wdCwgImludmVyc2UiKSkKKwkJCWludmVyc2UgPSAxOworCQllbHNlCisJCQlpZiAoIXN0cmNtcCh0aGlzX29wdCwgInZpZHRlc3QiKSkKKwkJCQl2aWR0ZXN0ID0gMTsgLyogZW5hYmxlIGV4cGVyaW1lbnRhbCBDTFVUIGNvZGUgKi8KIAl9CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpb3VubWFwX21hY2ZiKHZvaWQpCiB7Ci0JaWYgKHZhbGt5cmllX2NtYXBfcmVncykKLQkJaW91bm1hcCh2YWxreXJpZV9jbWFwX3JlZ3MpOwogCWlmIChkYWZiX2NtYXBfcmVncykKIAkJaW91bm1hcChkYWZiX2NtYXBfcmVncyk7CiAJaWYgKHY4X2JyYXppbF9jbWFwX3JlZ3MpCkBAIC02NDIsNDggKzU2OCw1NSBAQAogCWlmICghTUFDSF9JU19NQUMpIAogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBpbnRlcm5hbCB2aWRlbyBjb250cm9sbGVyIGFueXdheSBzbwotCSAgIHdlJ3JlIG5vdCB0b28gd29ycmllZCBhYm91dCB0aGlzICovCisJaWYgKG1hY19iaV9kYXRhLmlkID09IE1BQ19NT0RFTF9RNjMwIHx8CisJICAgIG1hY19iaV9kYXRhLmlkID09IE1BQ19NT0RFTF9QNTg4KQorCQlyZXR1cm4gLUVOT0RFVjsgLyogU2VlIHZhbGt5cmllZmIuYyAqLworCiAJbWFjZmJfZGVmaW5lZC54cmVzID0gbWFjX2JpX2RhdGEuZGltZW5zaW9ucyAmIDB4RkZGRjsKIAltYWNmYl9kZWZpbmVkLnlyZXMgPSBtYWNfYmlfZGF0YS5kaW1lbnNpb25zID4+IDE2OwogCW1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPSBtYWNfYmlfZGF0YS52aWRlb2RlcHRoOworCiAJbWFjZmJfZml4LmxpbmVfbGVuZ3RoID0gbWFjX2JpX2RhdGEudmlkZW9yb3c7Ci0JbWFjZmJfZml4LnNtZW1fbGVuID0gbWFjZmJfZml4LmxpbmVfbGVuZ3RoICogbWFjZmJfZGVmaW5lZC55cmVzOworCW1hY2ZiX2ZpeC5zbWVtX2xlbiAgICA9IG1hY2ZiX2ZpeC5saW5lX2xlbmd0aCAqIG1hY2ZiX2RlZmluZWQueXJlczsKIAkvKiBOb3RlOiBwaHlzaWNhbCBhZGRyZXNzIChzaW5jZSAyLjEuMTI3KSAqLwotCW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0ID0gbWFjX2JpX2RhdGEudmlkZW9hZGRyOwotCS8qIFRoaXMgaXMgYWN0dWFsbHkgcmVkdW5kYW50IHdpdGggdGhlIGluaXRpYWwgbWFwcGluZ3MuCi0JICAgSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgbm9uLW9idmlvdXMgYXNwZWN0cyB0byB0aGUgd2F5Ci0JICAgdGhvc2UgbWFwcGluZ3MgYXJlIHNldCB1cCwgc28gdGhpcyBpcyBpbiBmYWN0IHRoZSBzYWZlc3QKLQkgICB3YXkgdG8gZW5zdXJlIHRoYXQgdGhpcyBkcml2ZXIgd2lsbCB3b3JrIG9uIGV2ZXJ5IHBvc3NpYmxlCi0JICAgTWFjICovCi0JZmJfaW5mby5zY3JlZW5fYmFzZSA9IGlvcmVtYXAobWFjX2JpX2RhdGEudmlkZW9hZGRyLCBtYWNmYl9maXguc21lbV9sZW4pOwotCQotCXByaW50aygibWFjZmI6IGZyYW1lYnVmZmVyIGF0IDB4JTA4bHgsIG1hcHBlZCB0byAweCVwLCBzaXplICVka1xuIiwKLQkgICAgICAgbWFjZmJfZml4LnNtZW1fc3RhcnQsIGZiX2luZm8uc2NyZWVuX2Jhc2UsIG1hY2ZiX2ZpeC5zbWVtX2xlbi8xMDI0KTsKLQlwcmludGsoIm1hY2ZiOiBtb2RlIGlzICVkeCVkeCVkLCBsaW5lbGVuZ3RoPSVkXG4iLAotCSAgICAgICBtYWNmYl9kZWZpbmVkLnhyZXMsIG1hY2ZiX2RlZmluZWQueXJlcywgbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCwgbWFjZmJfZml4LmxpbmVfbGVuZ3RoKTsKLQkKKwltYWNmYl9maXguc21lbV9zdGFydCAgPSBtYWNfYmlfZGF0YS52aWRlb2FkZHI7CisKIAkvKgotCSAqCUZpbGwgaW4gdGhlIGF2YWlsYWJsZSB2aWRlbyByZXNvbHV0aW9uCisJICogVGhpcyBpcyBhY3R1YWxseSByZWR1bmRhbnQgd2l0aCB0aGUgaW5pdGlhbCBtYXBwaW5ncy4KKwkgKiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBub24tb2J2aW91cyBhc3BlY3RzIHRvIHRoZSB3YXkKKwkgKiB0aG9zZSBtYXBwaW5ncyBhcmUgc2V0IHVwLCBzbyB0aGlzIGlzIGluIGZhY3QgdGhlIHNhZmVzdAorCSAqIHdheSB0byBlbnN1cmUgdGhhdCB0aGlzIGRyaXZlciB3aWxsIHdvcmsgb24gZXZlcnkgcG9zc2libGUgTWFjCiAJICovCi0JIAotCW1hY2ZiX2RlZmluZWQueHJlc192aXJ0dWFsICAgPSBtYWNmYl9kZWZpbmVkLnhyZXM7Ci0JbWFjZmJfZGVmaW5lZC55cmVzX3ZpcnR1YWwgICA9IG1hY2ZiX2RlZmluZWQueXJlczsKLQltYWNmYl9kZWZpbmVkLmhlaWdodCA9IFBJWEVMX1RPX01NKG1hY2ZiX2RlZmluZWQueXJlcyk7Ci0JbWFjZmJfZGVmaW5lZC53aWR0aCAgPSBQSVhFTF9UT19NTShtYWNmYl9kZWZpbmVkLnhyZXMpOwkgCisJZmJfaW5mby5zY3JlZW5fYmFzZSA9IGlvcmVtYXAobWFjX2JpX2RhdGEudmlkZW9hZGRyLAorCQkJCSAgICAgIG1hY2ZiX2ZpeC5zbWVtX2xlbik7CisJaWYgKCFmYl9pbmZvLnNjcmVlbl9iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50aygibWFjZmI6IHNjcm9sbGluZzogcmVkcmF3XG4iKTsKKwlwcmludGsoIm1hY2ZiOiBmcmFtZWJ1ZmZlciBhdCAweCUwOGx4LCBtYXBwZWQgdG8gMHglcCwgc2l6ZSAlZGtcbiIsCisJICAgICAgIG1hY2ZiX2ZpeC5zbWVtX3N0YXJ0LCBmYl9pbmZvLnNjcmVlbl9iYXNlLAorCSAgICAgICBtYWNmYl9maXguc21lbV9sZW4gLyAxMDI0KTsKKwlwcmludGsoIm1hY2ZiOiBtb2RlIGlzICVkeCVkeCVkLCBsaW5lbGVuZ3RoPSVkXG4iLAorCSAgICAgICBtYWNmYl9kZWZpbmVkLnhyZXMsIG1hY2ZiX2RlZmluZWQueXJlcywKKwkgICAgICAgbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCwgbWFjZmJfZml4LmxpbmVfbGVuZ3RoKTsKKworCS8qIEZpbGwgaW4gdGhlIGF2YWlsYWJsZSB2aWRlbyByZXNvbHV0aW9uICovCisJbWFjZmJfZGVmaW5lZC54cmVzX3ZpcnR1YWwgPSBtYWNmYl9kZWZpbmVkLnhyZXM7CiAJbWFjZmJfZGVmaW5lZC55cmVzX3ZpcnR1YWwgPSBtYWNmYl9kZWZpbmVkLnlyZXM7CisJbWFjZmJfZGVmaW5lZC5oZWlnaHQgICAgICAgPSBQSVhFTF9UT19NTShtYWNmYl9kZWZpbmVkLnlyZXMpOworCW1hY2ZiX2RlZmluZWQud2lkdGggICAgICAgID0gUElYRUxfVE9fTU0obWFjZmJfZGVmaW5lZC54cmVzKTsKIAotCS8qIHNvbWUgZHVtbXkgdmFsdWVzIGZvciB0aW1pbmcgdG8gbWFrZSBmYnNldCBoYXBweSAqLwotCW1hY2ZiX2RlZmluZWQucGl4Y2xvY2sgICAgID0gMTAwMDAwMDAgLyBtYWNmYl9kZWZpbmVkLnhyZXMgKiAxMDAwIC8gbWFjZmJfZGVmaW5lZC55cmVzOworCS8qIFNvbWUgZHVtbXkgdmFsdWVzIGZvciB0aW1pbmcgdG8gbWFrZSBmYnNldCBoYXBweSAqLworCW1hY2ZiX2RlZmluZWQucGl4Y2xvY2sgICAgID0gMTAwMDAwMDAgLyBtYWNmYl9kZWZpbmVkLnhyZXMgKgorCQkJCSAgICAgMTAwMCAvIG1hY2ZiX2RlZmluZWQueXJlczsKIAltYWNmYl9kZWZpbmVkLmxlZnRfbWFyZ2luICA9IChtYWNmYl9kZWZpbmVkLnhyZXMgLyA4KSAmIDB4Zjg7CiAJbWFjZmJfZGVmaW5lZC5oc3luY19sZW4gICAgPSAobWFjZmJfZGVmaW5lZC54cmVzIC8gOCkgJiAweGY4OwogCiAJc3dpdGNoIChtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsKSB7CiAJY2FzZSAxOgotCQkvKiBYWFg6IEkgdGhpbmsgdGhpcyB3aWxsIGNhdGNoIGFueSBwcm9ncmFtIHRoYXQgdHJpZXMKLQkJICAgdG8gZG8gRkJJT19QVVRDTUFQIHdoZW4gdGhlIHZpc3VhbCBpcyBtb25vY2hyb21lICovCisJCS8qCisJCSAqIFhYWDogSSB0aGluayB0aGlzIHdpbGwgY2F0Y2ggYW55IHByb2dyYW0gdGhhdCB0cmllcworCQkgKiB0byBkbyBGQklPX1BVVENNQVAgd2hlbiB0aGUgdmlzdWFsIGlzIG1vbm9jaHJvbWUuCisJCSAqLwogCQltYWNmYl9kZWZpbmVkLnJlZC5sZW5ndGggPSBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsOwogCQltYWNmYl9kZWZpbmVkLmdyZWVuLmxlbmd0aCA9IG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWw7CiAJCW1hY2ZiX2RlZmluZWQuYmx1ZS5sZW5ndGggPSBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsOwpAQCAtNzA4LDUzICs2NDEsNTIgQEAKIAkJbWFjZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSA1OwogCQltYWNmYl9kZWZpbmVkLmJsdWUub2Zmc2V0ID0gMDsKIAkJbWFjZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCA9IDU7Ci0JCXByaW50aygibWFjZmI6IGRpcmVjdGNvbG9yOiAiCi0JCSAgICAgICAic2l6ZT0xOjU6NTo1LCBzaGlmdD0xNToxMDo1OjBcbiIpOwogCQl2aWRlb19jbWFwX2xlbiA9IDE2OwotCQkvKiBTaG91bGQgYWN0dWFsbHkgYmUgRkJfVklTVUFMX0RJUkVDVENPTE9SLCBidXQgdGhpcwotCQkgICB3b3JrcyB0b28gKi8KKwkJLyoKKwkJICogU2hvdWxkIGFjdHVhbGx5IGJlIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUiwgYnV0IHRoaXMKKwkJICogd29ya3MgdG9vCisJCSAqLwogCQltYWNmYl9maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKIAkJYnJlYWs7CiAJY2FzZSAyNDoKIAljYXNlIDMyOgotCQkvKiBYWFg6IGhhdmUgdG8gdGVzdCB0aGVzZS4uLiBjYW4gYW55IDY4ayBNYWNzCi0JCSAgIGFjdHVhbGx5IGRvIHRoaXMgb24gaW50ZXJuYWwgdmlkZW8/ICovCiAJCW1hY2ZiX2RlZmluZWQucmVkLm9mZnNldCA9IDE2OwogCQltYWNmYl9kZWZpbmVkLnJlZC5sZW5ndGggPSA4OwogCQltYWNmYl9kZWZpbmVkLmdyZWVuLm9mZnNldCA9IDg7CiAJCW1hY2ZiX2RlZmluZWQuZ3JlZW4ubGVuZ3RoID0gODsKIAkJbWFjZmJfZGVmaW5lZC5ibHVlLm9mZnNldCA9IDA7CiAJCW1hY2ZiX2RlZmluZWQuYmx1ZS5sZW5ndGggPSA4OwotCQlwcmludGsoIm1hY2ZiOiB0cnVlY29sb3I6ICIKLQkJICAgICAgICJzaXplPTA6ODo4OjgsIHNoaWZ0PTA6MTY6ODowXG4iKTsKIAkJdmlkZW9fY21hcF9sZW4gPSAxNjsKIAkJbWFjZmJfZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXZpZGVvX2NtYXBfbGVuID0gMDsKIAkJbWFjZmJfZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9NT05PMDE7Ci0JCXByaW50aygibWFjZmI6IHVua25vd24gb3IgdW5zdXBwb3J0ZWQgYml0IGRlcHRoOiAlZFxuIiwgbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCk7CisJCXByaW50aygibWFjZmI6IHVua25vd24gb3IgdW5zdXBwb3J0ZWQgYml0IGRlcHRoOiAlZFxuIiwKKwkJICAgICAgIG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwpOwogCQlicmVhazsKIAl9CiAJCi0JLyogSGFyZHdhcmUgZGVwZW5kZW50IHN0dWZmICovCi0JLyogIFdlIHRha2UgYSB3aWxkIGd1ZXNzIHRoYXQgaWYgdGhlIHZpZGVvIHBoeXNpY2FsIGFkZHJlc3MgaXMKLQkgKiAgaW4gbnVidXMgc2xvdCBzcGFjZSwgdGhhdCB0aGUgbnVidXMgY2FyZCBpcyBkcml2aW5nIHZpZGVvLgotCSAqICBQZW5ndWluIHJlYWxseSBvdWdodCB0byB0ZWxsIHVzIHdoZXRoZXIgd2UgYXJlIHVzaW5nIGludGVybmFsCi0JICogIHZpZGVvIG9yIG5vdC4KKwkvKgorCSAqIFdlIHRha2UgYSB3aWxkIGd1ZXNzIHRoYXQgaWYgdGhlIHZpZGVvIHBoeXNpY2FsIGFkZHJlc3MgaXMKKwkgKiBpbiBudWJ1cyBzbG90IHNwYWNlLCB0aGF0IHRoZSBudWJ1cyBjYXJkIGlzIGRyaXZpbmcgdmlkZW8uCisJICogUGVuZ3VpbiByZWFsbHkgb3VnaHQgdG8gdGVsbCB1cyB3aGV0aGVyIHdlIGFyZSB1c2luZyBpbnRlcm5hbAorCSAqIHZpZGVvIG9yIG5vdC4KKwkgKiBIb3BlZnVsbHkgd2Ugb25seSBmaW5kIG9uZSBvZiB0aGVtLiAgT3RoZXJ3aXNlIG91ciBOdUJ1cworCSAqIGNvZGUgaXMgcmVhbGx5IGJyb2tlbiA6LSkKIAkgKi8KLQkvKiBIb3BlZnVsbHkgd2Ugb25seSBmaW5kIG9uZSBvZiB0aGVtLiAgT3RoZXJ3aXNlIG91ciBOdUJ1cwotICAgICAgICAgICBjb2RlIGlzIHJlYWxseSBicm9rZW4gOi0pICovCiAKLQl3aGlsZSAoKG5kZXYgPSBudWJ1c19maW5kX3R5cGUoTlVCVVNfQ0FUX0RJU1BMQVksIE5VQlVTX1RZUEVfVklERU8sIG5kZXYpKQotCQkhPSBOVUxMKQorCXdoaWxlICgobmRldiA9IG51YnVzX2ZpbmRfdHlwZShOVUJVU19DQVRfRElTUExBWSwKKwkJCQkgICAgICAgTlVCVVNfVFlQRV9WSURFTywgbmRldikpKQogCXsKLQkJaWYgKCEobWFjX2JpX2RhdGEudmlkZW9hZGRyID49IG5kZXYtPmJvYXJkLT5zbG90X2FkZHIKLQkJICAgICAgJiYgKG1hY19iaV9kYXRhLnZpZGVvYWRkciA8Ci0JCQkgICh1bnNpZ25lZCBsb25nKW51YnVzX3Nsb3RfYWRkcihuZGV2LT5ib2FyZC0+c2xvdCsxKSkpKQorCQl1bnNpZ25lZCBsb25nIGJhc2UgPSBuZGV2LT5ib2FyZC0+c2xvdF9hZGRyOworCisJCWlmIChtYWNfYmlfZGF0YS52aWRlb2FkZHIgPCBiYXNlIHx8CisJCSAgICBtYWNfYmlfZGF0YS52aWRlb2FkZHIgLSBiYXNlID4gMHhGRkZGRkYpCiAJCQljb250aW51ZTsKKwogCQl2aWRlb19pc19udWJ1cyA9IDE7Ci0JCS8qIFdlIHNob3VsZCBwcm9iYWJseSBqdXN0IHVzZSB0aGUgc2xvdCBhZGRyZXNzLi4uICovCi0JCXZpZGVvX3Nsb3QgPSBuZGV2LT5ib2FyZC0+c2xvdDsKKwkJc2xvdF9hZGRyID0gKHVuc2lnbmVkIGNoYXIgKiliYXNlOwogCiAJCXN3aXRjaChuZGV2LT5kcl9odykgewogCQljYXNlIE5VQlVTX0RSSFdfQVBQTEVfTURDOgpAQCAtNzcxLDcgKzcwMyw3IEBACiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiSmV0Iik7CiAJCQltYWNmYl9zZXRwYWxldHRlID0gamV0X3NldHBhbGV0dGU7CiAJCQltYWNmYl9kZWZpbmVkLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwotCQkJYnJlYWs7CQkJCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJHZW5lcmljIE51QnVzIik7CiAJCQlicmVhazsKQEAgLTc3OSwzMCArNzExLDE5IEBACiAJfQogCiAJLyogSWYgaXQncyBub3QgYSBOdUJ1cyBjYXJkLCBpdCBtdXN0IGJlIGludGVybmFsIHZpZGVvICovCi0JLyogRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgZ2V0dGluZyB3YXkgdG9vIGJpZy4gICh0aGlzIGRyaXZlcgotICAgICAgICAgICBpcyB0b28uLi4pICovCiAJaWYgKCF2aWRlb19pc19udWJ1cykKLQkJc3dpdGNoKCBtYWNfYmlfZGF0YS5pZCApCi0JCXsKLQkJCS8qIFZhbGt5cmllIFF1YWRyYXMgKi8KLQkJY2FzZSBNQUNfTU9ERUxfUTYzMDoKLQkJCS8qIEknbSBub3Qgc3VyZSBhYm91dCB0aGlzIG9uZSAqLwotCQljYXNlIE1BQ19NT0RFTF9QNTg4OgotCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIlZhbGt5cmllIik7Ci0JCQltYWNmYl9zZXRwYWxldHRlID0gdmFsa3lyaWVfc2V0cGFsZXR0ZTsKLQkJCW1hY2ZiX2RlZmluZWQuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7Ci0JCQl2YWxreXJpZV9jbWFwX3JlZ3MgPSBpb3JlbWFwKERBQ19CQVNFLCAweDEwMDApOwotCQkJYnJlYWs7Ci0KLQkJCS8qIERBRkIgUXVhZHJhcyAqLwotCQkJLyogTm90ZTogdGhlc2UgZmlyc3QgZm91ciBoYXZlIHRoZSB2NyBEQUZCLCB3aGljaCBpcwotCQkJICAga25vd24gdG8gYmUgcmF0aGVyIHVubGlrZSB0aGUgb25lcyB1c2VkIGluIHRoZQotCQkJICAgb3RoZXIgbW9kZWxzICovCisJCXN3aXRjaCAobWFjX2JpX2RhdGEuaWQpIHsKKwkJLyoKKwkJICogREFGQiBRdWFkcmFzCisJCSAqIE5vdGU6IHRoZXNlIGZpcnN0IGZvdXIgaGF2ZSB0aGUgdjcgREFGQiwgd2hpY2ggaXMKKwkJICoga25vd24gdG8gYmUgcmF0aGVyIHVubGlrZSB0aGUgb25lcyB1c2VkIGluIHRoZQorCQkgKiBvdGhlciBtb2RlbHMKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1A0NzU6CiAJCWNhc2UgTUFDX01PREVMX1A0NzVGOgogCQljYXNlIE1BQ19NT0RFTF9QNTc1OgogCQljYXNlIE1BQ19NT0RFTF9RNjA1OgotCQorCiAJCWNhc2UgTUFDX01PREVMX1E4MDA6CiAJCWNhc2UgTUFDX01PREVMX1E2NTA6CiAJCWNhc2UgTUFDX01PREVMX1E2MTA6CkBAIC04MTcsMTcgKzczOCwyMSBAQAogCQkJZGFmYl9jbWFwX3JlZ3MgPSBpb3JlbWFwKERBRkJfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBMQyBJSSB1c2VzIHRoZSBWOCBmcmFtZWJ1ZmZlciAqLworCQkvKgorCQkgKiBMQyBJSSB1c2VzIHRoZSBWOCBmcmFtZWJ1ZmZlcgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfTENJSToKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJWOCIpOwogCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IHY4X2JyYXppbF9zZXRwYWxldHRlOwogCQkJbWFjZmJfZGVmaW5lZC5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKIAkJCXY4X2JyYXppbF9jbWFwX3JlZ3MgPSBpb3JlbWFwKERBQ19CQVNFLCAweDEwMDApOwogCQkJYnJlYWs7Ci0JCQotCQkJLyogSUl2aSwgSUl2eCB1c2UgdGhlICJCcmF6aWwiIGZyYW1lYnVmZmVyICh3aGljaCBpcwotCQkJICAgdmVyeSBtdWNoIGxpa2UgdGhlIFY4LCBpdCBzZWVtcywgYW5kIHByb2JhYmx5IHVzZXMKLQkJCSAgIHRoZSBzYW1lIERBQykgKi8KKworCQkvKgorCQkgKiBJSXZpLCBJSXZ4IHVzZSB0aGUgIkJyYXppbCIgZnJhbWVidWZmZXIgKHdoaWNoIGlzCisJCSAqIHZlcnkgbXVjaCBsaWtlIHRoZSBWOCwgaXQgc2VlbXMsIGFuZCBwcm9iYWJseSB1c2VzCisJCSAqIHRoZSBzYW1lIERBQykKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0lJVkk6CiAJCWNhc2UgTUFDX01PREVMX0lJVlg6CiAJCWNhc2UgTUFDX01PREVMX1A2MDA6CkBAIC04MzYsMTIgKzc2MSwxNCBAQAogCQkJbWFjZmJfZGVmaW5lZC5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKIAkJCXY4X2JyYXppbF9jbWFwX3JlZ3MgPSBpb3JlbWFwKERBQ19CQVNFLCAweDEwMDApOwogCQkJYnJlYWs7Ci0JCQotCQkJLyogTEMgSUlJIChhbmQgZnJpZW5kcykgdXNlIHRoZSBTb25vcmEgZnJhbWVidWZmZXIgKi8KLQkJCS8qIEluY2lkZW50YWxseSB0aGlzIGlzIGFsc28gdXNlZCBpbiB0aGUgbm9uLUFWIG1vZGVscwotCQkJICAgb2YgdGhlIHgxMDAgUG93ZXJNYWNzICovCi0JCQkvKiBUaGVzZSBkbyBpbiBmYWN0IHNlZW0gdG8gdXNlIHRoZSBzYW1lIERBQyBpbnRlcmZhY2UKLQkJCSAgIGFzIHRoZSBMQyBJSS4gKi8KKworCQkvKgorCQkgKiBMQyBJSUkgKGFuZCBmcmllbmRzKSB1c2UgdGhlIFNvbm9yYSBmcmFtZWJ1ZmZlcgorCQkgKiBJbmNpZGVudGFsbHkgdGhpcyBpcyBhbHNvIHVzZWQgaW4gdGhlIG5vbi1BViBtb2RlbHMKKwkJICogb2YgdGhlIHgxMDAgUG93ZXJNYWNzCisJCSAqIFRoZXNlIGRvIGluIGZhY3Qgc2VlbSB0byB1c2UgdGhlIHNhbWUgREFDIGludGVyZmFjZQorCQkgKiBhcyB0aGUgTEMgSUkuCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9MQ0lJSToKIAkJY2FzZSBNQUNfTU9ERUxfUDUyMDoKIAkJY2FzZSBNQUNfTU9ERUxfUDU1MDoKQEAgLTg1Miw5ICs3NzksMTEgQEAKIAkJCXY4X2JyYXppbF9jbWFwX3JlZ3MgPSBpb3JlbWFwKERBQ19CQVNFLCAweDEwMDApOwogCQkJYnJlYWs7CiAKLQkJCS8qIElJY2kgYW5kIElJc2kgdXNlIHRoZSBpbmZhbW91cyBSQlYgY2hpcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoZSBJSXNpIGlzIGp1c3QgYSByZWJhZGdlZCBhbmQgY3JpcHBsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElJY2kgaW4gYSBkaWZmZXJlbnQgY2FzZSwgQlRXKSAqLworCQkvKgorCQkgKiBJSWNpIGFuZCBJSXNpIHVzZSB0aGUgaW5mYW1vdXMgUkJWIGNoaXAKKwkJICogKHRoZSBJSXNpIGlzIGp1c3QgYSByZWJhZGdlZCBhbmQgY3JpcHBsZWQKKwkJICogSUljaSBpbiBhIGRpZmZlcmVudCBjYXNlLCBCVFcpCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9JSUNJOgogCQljYXNlIE1BQ19NT0RFTF9JSVNJOgogCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IHJidl9zZXRwYWxldHRlOwpAQCAtODYzLDcgKzc5Miw5IEBACiAJCQlyYnZfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBBVnMgdXNlIHRoZSBDaXZpYyBmcmFtZWJ1ZmZlciAqLworCQkvKgorCQkgKiBBVnMgdXNlIHRoZSBDaXZpYyBmcmFtZWJ1ZmZlcgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUTg0MDoKIAkJY2FzZSBNQUNfTU9ERUxfQzY2MDoKIAkJCW1hY2ZiX3NldHBhbGV0dGUgPSBjaXZpY19zZXRwYWxldHRlOwpAQCAtODczLDE1ICs4MDQsMTAgQEAKIAkJCWJyZWFrOwogCiAJCQotCQkJLyogV3JpdGUgYSBzZXRwYWxldHRlIGZ1bmN0aW9uIGZvciB5b3VyIG1hY2hpbmUsIHRoZW4KLQkJCSAgIHlvdSBjYW4gYWRkIHNvbWV0aGluZyBzaW1pbGFyIGhlcmUuICBUaGVzZSBhcmUKLQkJCSAgIGdyb3VwZWQgYnkgY2xhc3NlcyBvZiB2aWRlbyBjaGlwc2V0cy4gIFNvbWUgb2YgdGhpcwotCQkJICAgaW5mb3JtYXRpb24gaXMgZnJvbSB0aGUgVmlkZW9Ub29sYm94ICJCdWdzIiB3ZWIKLQkJCSAgIHBhZ2UgYXQKLQkJCSAgIGh0dHA6Ly9yYWpza3kucHN5Y2gubnl1LmVkdS9UaXBzL1ZpZGVvQnVncy5odG1sICovCi0KLQkJCS8qIEFzc29ydGVkIHdlaXJkb3MgKi8KLQkJCS8qIFdlIHRoaW5rIHRoaXMgbWF5IGJlIGxpa2UgdGhlIExDIElJICovCisJCS8qCisJCSAqIEFzc29ydGVkIHdlaXJkb3MKKwkJICogV2UgdGhpbmsgdGhpcyBtYXkgYmUgbGlrZSB0aGUgTEMgSUkKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0xDOgogCQkJaWYgKHZpZHRlc3QpIHsKIAkJCQltYWNmYl9zZXRwYWxldHRlID0gdjhfYnJhemlsX3NldHBhbGV0dGU7CkBAIC04OTEsNyArODE3LDEwIEBACiAJCQl9CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiTEMiKTsKIAkJCWJyZWFrOwotCQkJLyogV2UgdGhpbmsgdGhpcyBtYXkgYmUgbGlrZSB0aGUgTEMgSUkgKi8KKworCQkvKgorCQkgKiBXZSB0aGluayB0aGlzIG1heSBiZSBsaWtlIHRoZSBMQyBJSQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfQ0NMOgogCQkJaWYgKHZpZHRlc3QpIHsKIAkJCQltYWNmYl9zZXRwYWxldHRlID0gdjhfYnJhemlsX3NldHBhbGV0dGU7CkBAIC05MDIsMzEgKzgzMSw0MiBAQAogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkNvbG9yIENsYXNzaWMiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBBbmQgd2UgKmRvKiBtZWFuICJ3ZWlyZG9zIiAqLworCQkvKgorCQkgKiBBbmQgd2UgKmRvKiBtZWFuICJ3ZWlyZG9zIgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfVFY6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiTWFjIFRWIik7CiAJCQlicmVhazsKIAotCQkJLyogVGhlc2UgZG9uJ3QgaGF2ZSBjb2xvdXIsIHNvIG5vIG5lZWQgdG8gd29ycnkgKi8KKwkJLyoKKwkJICogVGhlc2UgZG9uJ3QgaGF2ZSBjb2xvdXIsIHNvIG5vIG5lZWQgdG8gd29ycnkKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1NFMzA6CiAJCWNhc2UgTUFDX01PREVMX0NMSUk6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiTW9ub2Nocm9tZSIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIFBvd2VyYm9va3MgYXJlIHBhcnRpY3VsYXJseSBkaWZmaWN1bHQuICBNYW55IG9mCi0JCQkgICB0aGVtIGhhdmUgc2VwYXJhdGUgZnJhbWVidWZmZXJzIGZvciBleHRlcm5hbCBhbmQKLQkJCSAgIGludGVybmFsIHZpZGVvLCB3aGljaCBpcyBhZG1pdHRlZGx5IHByZXR0eSBjb29sLAotCQkJICAgYnV0IHdpbGwgYmUgYSBiaXQgb2YgYSBoZWFkYWNoZSB0byBzdXBwb3J0IGhlcmUuCi0JCQkgICBBbHNvLCBtYW55IG9mIHRoZW0gYXJlIGdyYXlzY2FsZSwgYW5kIHdlIGRvbid0Ci0JCQkgICByZWFsbHkgc3VwcG9ydCB0aGF0LiAqLworCQkvKgorCQkgKiBQb3dlcmJvb2tzIGFyZSBwYXJ0aWN1bGFybHkgZGlmZmljdWx0LiAgTWFueSBvZgorCQkgKiB0aGVtIGhhdmUgc2VwYXJhdGUgZnJhbWVidWZmZXJzIGZvciBleHRlcm5hbCBhbmQKKwkJICogaW50ZXJuYWwgdmlkZW8sIHdoaWNoIGlzIGFkbWl0dGVkbHkgcHJldHR5IGNvb2wsCisJCSAqIGJ1dCB3aWxsIGJlIGEgYml0IG9mIGEgaGVhZGFjaGUgdG8gc3VwcG9ydCBoZXJlLgorCQkgKiBBbHNvLCBtYW55IG9mIHRoZW0gYXJlIGdyYXlzY2FsZSwgYW5kIHdlIGRvbid0CisJCSAqIHJlYWxseSBzdXBwb3J0IHRoYXQuCisJCSAqLwogCisJCS8qCisJCSAqIFNsb3QgMCBST00gc2F5cyBUSU0uIE5vIGV4dGVybmFsIHZpZGVvLiBCJlcuCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE0MDoKIAkJY2FzZSBNQUNfTU9ERUxfUEIxNDU6CiAJCWNhc2UgTUFDX01PREVMX1BCMTcwOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkREQyIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIEludGVybmFsIGlzIEdTQywgRXh0ZXJuYWwgKGlmIHByZXNlbnQpIGlzIFZpU0MgKi8KKwkJLyoKKwkJICogSW50ZXJuYWwgaXMgR1NDLCBFeHRlcm5hbCAoaWYgcHJlc2VudCkgaXMgVmlTQworCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEIxNTA6CS8qIG5vIGV4dGVybmFsIHZpZGVvICovCiAJCWNhc2UgTUFDX01PREVMX1BCMTYwOgogCQljYXNlIE1BQ19NT0RFTF9QQjE2NToKQEAgLTkzNiwxMyArODc2LDE3IEBACiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiR1NDIik7CiAJCQlicmVhazsKIAotCQkJLyogSW50ZXJuYWwgaXMgVElNLCBFeHRlcm5hbCBpcyBWaVNDICovCisJCS8qCisJCSAqIEludGVybmFsIGlzIFRJTSwgRXh0ZXJuYWwgaXMgVmlTQworCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEIxNjVDOgogCQljYXNlIE1BQ19NT0RFTF9QQjE4MEM6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiVElNIik7CiAJCQlicmVhazsKIAotCQkJLyogSW50ZXJuYWwgaXMgQ1NDLCBFeHRlcm5hbCBpcyBLZXlzdG9uZStBcmllbC4gKi8KKwkJLyoKKwkJICogSW50ZXJuYWwgaXMgQ1NDLCBFeHRlcm5hbCBpcyBLZXlzdG9uZStBcmllbC4KKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1BCMTkwOgkvKiBleHRlcm5hbCB2aWRlbyBpcyBvcHRpb25hbCAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjUyMDoKIAkJY2FzZSBNQUNfTU9ERUxfUEIyNTA6CkBAIC05NTQsNyArODk4LDcgQEAKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJDU0MiKTsKIAkJCWNzY19jbWFwX3JlZ3MgPSBpb3JlbWFwKENTQ19CQVNFLCAweDEwMDApOwogCQkJYnJlYWs7Ci0JCQorCiAJCWRlZmF1bHQ6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiVW5rbm93biIpOwogCQkJYnJlYWs7CkBAIC05NjksNyArOTEzLDcgQEAKIAllcnIgPSBmYl9hbGxvY19jbWFwKCZmYl9pbmZvLmNtYXAsIHZpZGVvX2NtYXBfbGVuLCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxfdW5tYXA7Ci0JCisKIAllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbyk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsX2RlYWxsb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMgYi9kcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMKaW5kZXggMDgzZjYwMy4uYWY4NmMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWFjbW9kZXMuYwpAQCAtMzMsNiArMzMsMTAgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgbWFjX21vZGVkYltdID0gewogICAgIHsKKwkvKiA1MTJ4Mzg0LCA2MEh6LCBOb24tSW50ZXJsYWNlZCAoMTUuNjcgTUh6IGRvdCBjbG9jaykgKi8KKwkibWFjMiIsIDYwLCA1MTIsIDM4NCwgNjM4MjgsIDgwLCAxNiwgMTksIDEsIDMyLCAzLAorCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKKyAgICB9LCB7CiAJLyogNjQweDQ4MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgyNS4xNzUgTUh6IGRvdGNsb2NrKSAqLwogCSJtYWM1IiwgNjAsIDY0MCwgNDgwLCAzOTcyMiwgMzIsIDMyLCAzMywgMTAsIDk2LCAyLAogCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKQEAgLTQxLDYgKzQ1LDEwIEBACiAJIm1hYzYiLCA2NywgNjQwLCA0ODAsIDMzMzM0LCA4MCwgODAsIDM5LCAzLCA2NCwgMywKIAkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECiAgICAgfSwgeworCS8qIDY0MHg4NzAsIDc1SHogKHBvcnRyYWl0KSwgTm9uLUludGVybGFjZWQgKDU3LjI4IE1IeiBkb3QgY2xvY2spICovCisJIm1hYzciLCA3NSwgNjQwLCA4NzAsIDE3NDU3LCA4MCwgMzIsIDQyLCAzLCA4MCwgMywKKwkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECisgICAgfSwgewogCS8qIDgwMHg2MDAsIDU2IEh6LCBOb24tSW50ZXJsYWNlZCAoMzYuMDAgTUh6IGRvdGNsb2NrKSAqLwogCSJtYWM5IiwgNTYsIDgwMCwgNjAwLCAyNzc3OCwgMTEyLCA0MCwgMjIsIDEsIDcyLCAyLAogCUZCX1NZTkNfSE9SX0hJR0hfQUNUfEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRApAQCAtMTA1LDEwICsxMTMsNiBAQAogCSJtYWMxIiwgNjAsIDUxMiwgMzg0LCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAogCXN5bmMsIEZCX1ZNT0RFX0lOVEVSTEFDRUQKICAgICB9LCB7Ci0JLyogVk1PREVfNTEyXzM4NF82MDogNTEyeDM4NCwgNjBIeiwgTm9uLUludGVybGFjZWQgKi8KLSAgICAJIm1hYzIiLCA2MCwgNTEyLCAzODQsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCi0Jc3luYywgRkJfVk1PREVfTk9OSU5URVJMQUNFRAotICAgIH0sIHsKIAkvKiBWTU9ERV82NDBfNDgwXzUwSTogNjQweDQ4MCwgNTBIeiwgSW50ZXJsYWNlZCAoUEFMKSAqLwogCSJtYWMzIiwgNTAsIDY0MCwgNDgwLCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAogCXN5bmMsIEZCX1ZNT0RFX0lOVEVSTEFDRUQKQEAgLTExNywxMCArMTIxLDYgQEAKIAkibWFjNCIsIDYwLCA2NDAsIDQ4MCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKIAlzeW5jLCBGQl9WTU9ERV9JTlRFUkxBQ0VECiAgICAgfSwgewotCS8qIFZNT0RFXzY0MF84NzBfNzVQOiA2NDB4ODcwLCA3NUh6IChwb3J0cmFpdCksIE5vbi1JbnRlcmxhY2VkICovCi0JIm1hYzciLCA3NSwgNjQwLCA4NzAsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCi0Jc3luYywgRkJfVk1PREVfTk9OSU5URVJMQUNFRAotICAgIH0sIHsKIAkvKiBWTU9ERV83NjhfNTc2XzUwSTogNzY4eDU3NiwgNTBIeiAoUEFMIGZ1bGwgZnJhbWUpLCBJbnRlcmxhY2VkICovCiAJIm1hYzgiLCA1MCwgNzY4LCA1NzYsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCiAJc3luYywgRkJfVk1PREVfSU5URVJMQUNFRApAQCAtMTM0LDM4ICsxMzQsNDIgQEAKICAgICAgKgogICAgICAqICBUaGVzZSBNVVNUIGJlIG9yZGVyZWQgaW4KICAgICAgKiAgICAtIGluY3JlYXNpbmcgcmVzb2x1dGlvbgotICAgICAqICAgIC0gZGVjcmVhc2luZyByZWZyZXNoIHJhdGUKKyAgICAgKiAgICAtIGRlY3JlYXNpbmcgcGl4ZWwgY2xvY2sgcGVyaW9kCiAgICAgICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW9kZV9tYXAgewogICAgIGludCB2bW9kZTsKICAgICBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOwogfSBtYWNfbW9kZXNbXSA9IHsKKyAgICAvKiA1MTJ4Mzg0ICovCisgICAgeyBWTU9ERV81MTJfMzg0XzYwLCAmbWFjX21vZGVkYlswXSB9LAogICAgIC8qIDY0MHg0ODAgKi8KLSAgICB7IFZNT0RFXzY0MF80ODBfNjcsICZtYWNfbW9kZWRiWzFdIH0sCi0gICAgeyBWTU9ERV82NDBfNDgwXzYwLCAmbWFjX21vZGVkYlswXSB9LAorICAgIHsgVk1PREVfNjQwXzQ4MF82MCwgJm1hY19tb2RlZGJbMV0gfSwKKyAgICB7IFZNT0RFXzY0MF80ODBfNjcsICZtYWNfbW9kZWRiWzJdIH0sCisgICAgLyogNjQweDg3MCAqLworICAgIHsgVk1PREVfNjQwXzg3MF83NVAsICZtYWNfbW9kZWRiWzNdIH0sCiAgICAgLyogODAweDYwMCAqLwotICAgIHsgVk1PREVfODAwXzYwMF83NSwgJm1hY19tb2RlZGJbNV0gfSwKLSAgICB7IFZNT0RFXzgwMF82MDBfNzIsICZtYWNfbW9kZWRiWzRdIH0sCi0gICAgeyBWTU9ERV84MDBfNjAwXzYwLCAmbWFjX21vZGVkYlszXSB9LAotICAgIHsgVk1PREVfODAwXzYwMF81NiwgJm1hY19tb2RlZGJbMl0gfSwKKyAgICB7IFZNT0RFXzgwMF82MDBfNTYsICZtYWNfbW9kZWRiWzRdIH0sCisgICAgeyBWTU9ERV84MDBfNjAwXzYwLCAmbWFjX21vZGVkYls1XSB9LAorICAgIHsgVk1PREVfODAwXzYwMF83NSwgJm1hY19tb2RlZGJbN10gfSwKKyAgICB7IFZNT0RFXzgwMF82MDBfNzIsICZtYWNfbW9kZWRiWzZdIH0sCiAgICAgLyogODMyeDYyNCAqLwotICAgIHsgVk1PREVfODMyXzYyNF83NSwgJm1hY19tb2RlZGJbNl0gfSwKKyAgICB7IFZNT0RFXzgzMl82MjRfNzUsICZtYWNfbW9kZWRiWzhdIH0sCiAgICAgLyogMTAyNHg3NjggKi8KLSAgICB7IFZNT0RFXzEwMjRfNzY4Xzc1LCAmbWFjX21vZGVkYlsxMF0gfSwKLSAgICB7IFZNT0RFXzEwMjRfNzY4Xzc1ViwgJm1hY19tb2RlZGJbOV0gfSwKLSAgICB7IFZNT0RFXzEwMjRfNzY4XzcwLCAmbWFjX21vZGVkYls4XSB9LAotICAgIHsgVk1PREVfMTAyNF83NjhfNjAsICZtYWNfbW9kZWRiWzddIH0sCisgICAgeyBWTU9ERV8xMDI0Xzc2OF82MCwgJm1hY19tb2RlZGJbOV0gfSwKKyAgICB7IFZNT0RFXzEwMjRfNzY4XzcwLCAmbWFjX21vZGVkYlsxMF0gfSwKKyAgICB7IFZNT0RFXzEwMjRfNzY4Xzc1ViwgJm1hY19tb2RlZGJbMTFdIH0sCisgICAgeyBWTU9ERV8xMDI0Xzc2OF83NSwgJm1hY19tb2RlZGJbMTJdIH0sCiAgICAgLyogMTE1Mng3NjggKi8KLSAgICB7IFZNT0RFXzExNTJfNzY4XzYwLCAmbWFjX21vZGVkYlsxNF0gfSwKKyAgICB7IFZNT0RFXzExNTJfNzY4XzYwLCAmbWFjX21vZGVkYlsxNl0gfSwKICAgICAvKiAxMTUyeDg3MCAqLwotICAgIHsgVk1PREVfMTE1Ml84NzBfNzUsICZtYWNfbW9kZWRiWzExXSB9LAorICAgIHsgVk1PREVfMTE1Ml84NzBfNzUsICZtYWNfbW9kZWRiWzEzXSB9LAogICAgIC8qIDEyODB4OTYwICovCi0gICAgeyBWTU9ERV8xMjgwXzk2MF83NSwgJm1hY19tb2RlZGJbMTJdIH0sCisgICAgeyBWTU9ERV8xMjgwXzk2MF83NSwgJm1hY19tb2RlZGJbMTRdIH0sCiAgICAgLyogMTI4MHgxMDI0ICovCi0gICAgeyBWTU9ERV8xMjgwXzEwMjRfNzUsICZtYWNfbW9kZWRiWzEzXSB9LAorICAgIHsgVk1PREVfMTI4MF8xMDI0Xzc1LCAmbWFjX21vZGVkYlsxNV0gfSwKICAgICAvKiAxNjAweDEwMjQgKi8KLSAgICB7IFZNT0RFXzE2MDBfMTAyNF82MCwgJm1hY19tb2RlZGJbMTVdIH0sCisgICAgeyBWTU9ERV8xNjAwXzEwMjRfNjAsICZtYWNfbW9kZWRiWzE3XSB9LAogICAgIHsgLTEsIE5VTEwgfQogfTsKIApAQCAtMjk5LDcgKzMwMyw2IEBACiBpbnQgbWFjX3Zhcl90b192bW9kZShjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50ICp2bW9kZSwKIAkJICAgICBpbnQgKmNtb2RlKQogewotICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUgPSBOVUxMOwogICAgIGNvbnN0IHN0cnVjdCBtb2RlX21hcCAqbWFwOwogCiAgICAgaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPD0gOCkKQEAgLTMxMSw4ICszMTQsMTMgQEAKICAgICBlbHNlCiAJcmV0dXJuIC1FSU5WQUw7CiAKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIG1hY19tb2RlIHdpdGggYSBtYXRjaGluZyByZXNvbHV0aW9uIG9yIGZhaWxpbmcgdGhhdCwgdGhlCisgICAgICogY2xvc2VzdCBsYXJnZXIgcmVzb2x1dGlvbi4gU2tpcCBtb2RlcyB3aXRoIGEgc2hvcnRlciBwaXhlbCBjbG9jayBwZXJpb2QuCisgICAgICovCiAgICAgZm9yIChtYXAgPSBtYWNfbW9kZXM7IG1hcC0+dm1vZGUgIT0gLTE7IG1hcCsrKSB7Ci0JbW9kZSA9IG1hcC0+bW9kZTsKKwljb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlID0gbWFwLT5tb2RlOworCiAJaWYgKHZhci0+eHJlcyA+IG1vZGUtPnhyZXMgfHwgdmFyLT55cmVzID4gbW9kZS0+eXJlcykKIAkgICAgY29udGludWU7CiAJaWYgKHZhci0+eHJlc192aXJ0dWFsID4gbW9kZS0+eHJlcyB8fCB2YXItPnlyZXNfdmlydHVhbCA+IG1vZGUtPnlyZXMpCkBAIC0zMjIsNiArMzMwLDI0IEBACiAJaWYgKCh2YXItPnZtb2RlICYgRkJfVk1PREVfTUFTSykgIT0gbW9kZS0+dm1vZGUpCiAJICAgIGNvbnRpbnVlOwogCSp2bW9kZSA9IG1hcC0+dm1vZGU7CisKKwkvKgorCSAqIEhhdmluZyBmb3VuZCBhIGdvb2QgcmVzb2x1dGlvbiwgZmluZCB0aGUgbWF0Y2hpbmcgcGl4ZWwgY2xvY2sKKwkgKiBvciBmYWlsaW5nIHRoYXQsIHRoZSBjbG9zZXN0IGxvbmdlciBwaXhlbCBjbG9jayBwZXJpb2QuCisJICovCisJbWFwKys7CisJd2hpbGUgKG1hcC0+dm1vZGUgIT0gLTEpIHsKKwkgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqY2xrX21vZGUgPSBtYXAtPm1vZGU7CisKKwkgICAgaWYgKG1vZGUtPnhyZXMgIT0gY2xrX21vZGUtPnhyZXMgfHwgbW9kZS0+eXJlcyAhPSBjbGtfbW9kZS0+eXJlcykKKwkJYnJlYWs7CisJICAgIGlmICh2YXItPnBpeGNsb2NrID4gbW9kZS0+cGl4Y2xvY2spCisJICAgICAgICBicmVhazsKKwkgICAgaWYgKG1vZGUtPnZtb2RlICE9IGNsa19tb2RlLT52bW9kZSkKKwkJY29udGludWU7CisJICAgICp2bW9kZSA9IG1hcC0+dm1vZGU7CisJICAgIG1hcCsrOworCX0KIAlyZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL214M2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKaW5kZXggMDU0ZWYyOS4uNzcyYmEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9teDNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXgzZmIuYwpAQCAtMzI0LDggKzMyNCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJZG1hX2Nvb2tpZV90IGNvb2tpZTsKIAotCWRldl9kYmcobXgzZmItPmRldiwgIm14M2ZiaSAlcCwgZGVzYyAlcCwgc2cgJXBcbiIsIG14M19mYmksCi0JCXRvX3R4X2Rlc2MobXgzX2ZiaS0+dHhkKSwgdG9fdHhfZGVzYyhteDNfZmJpLT50eGQpLT5zZyk7CisJaWYgKG14M19mYmktPnR4ZCkKKwkJZGV2X2RiZyhteDNmYi0+ZGV2LCAibXgzZmJpICVwLCBkZXNjICVwLCBzZyAlcFxuIiwgbXgzX2ZiaSwKKwkJCXRvX3R4X2Rlc2MobXgzX2ZiaS0+dHhkKSwgdG9fdHhfZGVzYyhteDNfZmJpLT50eGQpLT5zZyk7CisJZWxzZQorCQlkZXZfZGJnKG14M2ZiLT5kZXYsICJteDNmYmkgJXAsIHR4ZCA9IE5VTExcbiIsIG14M19mYmkpOwogCiAJLyogVGhpcyBlbmFibGVzIHRoZSBjaGFubmVsICovCiAJaWYgKG14M19mYmktPmNvb2tpZSA8IDApIHsKQEAgLTY0Niw2ICs2NDksNyBAQAogCiBzdGF0aWMgdm9pZCBzZGNfc2V0X2JyaWdodG5lc3Moc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCB1aW50OF90IHZhbHVlKQogeworCWRldl9kYmcobXgzZmItPmRldiwgIiVzOiB2YWx1ZSA9ICVkXG4iLCBfX2Z1bmNfXywgdmFsdWUpOwogCS8qIFRoaXMgbWlnaHQgYmUgYm9hcmQtc3BlY2lmaWMgKi8KIAlteDNmYl93cml0ZV9yZWcobXgzZmIsIDB4MDMwMDAwMDBVTCB8IHZhbHVlIDw8IDE2LCBTRENfUFdNX0NUUkwpOwogCXJldHVybjsKQEAgLTE0ODYsMTIgKzE0OTAsMTIgQEAKIAkJZ290byBlcnNkYzA7CiAJfQogCisJbXgzZmItPmJhY2tsaWdodF9sZXZlbCA9IDI1NTsKKwogCXJldCA9IGluaXRfZmJfY2hhbihteDNmYiwgdG9faWRtYWNfY2hhbihjaGFuKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZWlzZGMwOwogCi0JbXgzZmItPmJhY2tsaWdodF9sZXZlbCA9IDI1NTsKLQogCXJldHVybiAwOwogCiBlaXNkYzA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwppbmRleCA1M2Y4ZjExLi5mOTk3NTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKQEAgLTgzMSw3ICs4MzEsNyBAQAogCXByaW50ayhLRVJOX05PVElDRSAiZmIlZDogcmVnaXN0ZXJpbmcgd2l0aCBTUSBBUElcbiIsIGZiX2luZm8tPm5vZGUpOwogCiAJcHZyMmZiX21hcCA9IHNxX3JlbWFwKGZiX2luZm8tPmZpeC5zbWVtX3N0YXJ0LCBmYl9pbmZvLT5maXguc21lbV9sZW4sCi0JCQkgICAgICBmYl9pbmZvLT5maXguaWQsIHBncHJvdF92YWwoUEFHRV9TSEFSRUQpKTsKKwkJCSAgICAgIGZiX2luZm8tPmZpeC5pZCwgUEFHRV9TSEFSRUQpOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJmYiVkOiBNYXBwZWQgdmlkZW8gbWVtb3J5IHRvIFNRIGFkZHIgMHglbHhcbiIsCiAJICAgICAgIGZiX2luZm8tPm5vZGUsIHB2cjJmYl9tYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwppbmRleCBhNjk4MzBkLi44ZDc2NTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTEwNiw2ICsxMDcsNyBAQAogI2RlZmluZSBMRFJDTlRSX1NSQwkweDAwMDEwMDAwCiAjZGVmaW5lIExEUkNOVFJfTVJTCTB4MDAwMDAwMDIKICNkZWZpbmUgTERSQ05UUl9NUkMJMHgwMDAwMDAwMQorI2RlZmluZSBMRFNSX01SUwkweDAwMDAwMTAwCiAKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2Owogc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gewpAQCAtMTIyLDggKzEyNCw4IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3Q7CiAJdW5zaWduZWQgbG9uZyBmcmFtZV9lbmQ7CiAJdW5zaWduZWQgbG9uZyBwYW5fb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgbmV3X3Bhbl9vZmZzZXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfZW5kX3dhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gdnN5bmNfY29tcGxldGlvbjsKIH07CiAKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2IHsKQEAgLTM2NiwxOSArMzY4LDggQEAKIAkJfQogCiAJCS8qIFZTWU5DIEVuZCAqLwotCQlpZiAobGRpbnRyICYgTERJTlRSX1ZFUykgewotCQkJdW5zaWduZWQgbG9uZyBsZHJjbnRyID0gbGNkY19yZWFkKHByaXYsIF9MRFJDTlRSKTsKLQkJCS8qIFNldCB0aGUgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IHJlZnJlc2ggKi8KLQkJCWxjZGNfd3JpdGVfY2hhbl9taXJyb3IoY2gsIExEU0ExUiwgY2gtPmRtYV9oYW5kbGUgKwotCQkJCQkgICAgICAgY2gtPm5ld19wYW5fb2Zmc2V0KTsKLQkJCWlmIChsY2RjX2NoYW5faXNfc3VibGNkKGNoKSkKLQkJCQlsY2RjX3dyaXRlKGNoLT5sY2RjLCBfTERSQ05UUiwKLQkJCQkJICAgbGRyY250ciBeIExEUkNOVFJfU1JTKTsKLQkJCWVsc2UKLQkJCQlsY2RjX3dyaXRlKGNoLT5sY2RjLCBfTERSQ05UUiwKLQkJCQkJICAgbGRyY250ciBeIExEUkNOVFJfTVJTKTsKLQkJCWNoLT5wYW5fb2Zmc2V0ID0gY2gtPm5ld19wYW5fb2Zmc2V0OwotCQl9CisJCWlmIChsZGludHIgJiBMRElOVFJfVkVTKQorCQkJY29tcGxldGUoJmNoLT52c3luY19jb21wbGV0aW9uKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC03NjcsMjUgKzc1OCw2OSBAQAogCQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoID0gaW5mby0+cGFyOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2ICpwcml2ID0gY2gtPmxjZGM7CisJdW5zaWduZWQgbG9uZyBsZHJjbnRyOworCXVuc2lnbmVkIGxvbmcgbmV3X3Bhbl9vZmZzZXQ7CiAKLQlpZiAoaW5mby0+dmFyLnhvZmZzZXQgPT0gdmFyLT54b2Zmc2V0ICYmCi0JICAgIGluZm8tPnZhci55b2Zmc2V0ID09IHZhci0+eW9mZnNldCkKLQkJcmV0dXJuIDA7CS8qIE5vIGNoYW5nZSwgZG8gbm90aGluZyAqLwotCi0JY2gtPm5ld19wYW5fb2Zmc2V0ID0gKHZhci0+eW9mZnNldCAqIGluZm8tPmZpeC5saW5lX2xlbmd0aCkgKworCW5ld19wYW5fb2Zmc2V0ID0gKHZhci0+eW9mZnNldCAqIGluZm8tPmZpeC5saW5lX2xlbmd0aCkgKwogCQkodmFyLT54b2Zmc2V0ICogKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAvIDgpKTsKIAotCWlmIChjaC0+bmV3X3Bhbl9vZmZzZXQgIT0gY2gtPnBhbl9vZmZzZXQpIHsKLQkJdW5zaWduZWQgbG9uZyBsZGludHI7Ci0JCWxkaW50ciA9IGxjZGNfcmVhZChjaC0+bGNkYywgX0xESU5UUik7Ci0JCWxkaW50ciB8PSBMRElOVFJfVkVFOwotCQlsY2RjX3dyaXRlKGNoLT5sY2RjLCBfTERJTlRSLCBsZGludHIpOwotCQlzaF9tb2JpbGVfbGNkY19kZWZlcnJlZF9pb190b3VjaChpbmZvKTsKLQl9CisJaWYgKG5ld19wYW5fb2Zmc2V0ID09IGNoLT5wYW5fb2Zmc2V0KQorCQlyZXR1cm4gMDsJLyogTm8gY2hhbmdlLCBkbyBub3RoaW5nICovCisKKwlsZHJjbnRyID0gbGNkY19yZWFkKHByaXYsIF9MRFJDTlRSKTsKKworCS8qIFNldCB0aGUgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXh0IHJlZnJlc2ggKi8KKwlsY2RjX3dyaXRlX2NoYW5fbWlycm9yKGNoLCBMRFNBMVIsIGNoLT5kbWFfaGFuZGxlICsgbmV3X3Bhbl9vZmZzZXQpOworCWlmIChsY2RjX2NoYW5faXNfc3VibGNkKGNoKSkKKwkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsIGxkcmNudHIgXiBMRFJDTlRSX1NSUyk7CisJZWxzZQorCQlsY2RjX3dyaXRlKGNoLT5sY2RjLCBfTERSQ05UUiwgbGRyY250ciBeIExEUkNOVFJfTVJTKTsKKworCWNoLT5wYW5fb2Zmc2V0ID0gbmV3X3Bhbl9vZmZzZXQ7CisKKwlzaF9tb2JpbGVfbGNkY19kZWZlcnJlZF9pb190b3VjaChpbmZvKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNoX21vYmlsZV93YWl0X2Zvcl92c3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiAqY2ggPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgbG9uZyBsZGludHI7CisJaW50IHJldDsKKworCS8qIEVuYWJsZSBWU3luYyBFbmQgaW50ZXJydXB0ICovCisJbGRpbnRyID0gbGNkY19yZWFkKGNoLT5sY2RjLCBfTERJTlRSKTsKKwlsZGludHIgfD0gTERJTlRSX1ZFRTsKKwlsY2RjX3dyaXRlKGNoLT5sY2RjLCBfTERJTlRSLCBsZGludHIpOworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmNoLT52c3luY19jb21wbGV0aW9uLAorCQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAtRVRJTUVET1VUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBGQklPX1dBSVRGT1JWU1lOQzoKKwkJcmV0dmFsID0gc2hfbW9iaWxlX3dhaXRfZm9yX3ZzeW5jKGluZm8pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKwogc3RhdGljIHN0cnVjdCBmYl9vcHMgc2hfbW9iaWxlX2xjZGNfb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5mYl9zZXRjb2xyZWcJPSBzaF9tb2JpbGVfbGNkY19zZXRjb2xyZWcsCkBAIC03OTUsNiArODMwLDcgQEAKIAkuZmJfY29weWFyZWEJPSBzaF9tb2JpbGVfbGNkY19jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0CT0gc2hfbW9iaWxlX2xjZGNfaW1hZ2VibGl0LAogCS5mYl9wYW5fZGlzcGxheSA9IHNoX21vYmlsZV9mYl9wYW5fZGlzcGxheSwKKwkuZmJfaW9jdGwgICAgICAgPSBzaF9tb2JpbGVfaW9jdGwsCiB9OwogCiBzdGF0aWMgaW50IHNoX21vYmlsZV9sY2RjX3NldF9icHAoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCBicHApCkBAIC05NjIsOCArOTk4LDggQEAKIAkJCWdvdG8gZXJyMTsKIAkJfQogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5jaFtpXS5mcmFtZV9lbmRfd2FpdCk7CisJCWluaXRfY29tcGxldGlvbigmcHJpdi0+Y2hbaV0udnN5bmNfY29tcGxldGlvbik7CiAJCXByaXYtPmNoW2pdLnBhbl9vZmZzZXQgPSAwOwotCQlwcml2LT5jaFtqXS5uZXdfcGFuX29mZnNldCA9IDA7CiAKIAkJc3dpdGNoIChwZGF0YS0+Y2hbaV0uY2hhbikgewogCQljYXNlIExDRENfQ0hBTl9NQUlOTENEOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuYwppbmRleCA0YmI5YTBiLi42YjUyYmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuYwpAQCAtNjksNyArNjksNyBAQAogI2lmZGVmIENPTkZJR19NQUMKIC8qIFdlIGRvbid0IHlldCBoYXZlIGZ1bmN0aW9ucyB0byByZWFkIHRoZSBQUkFNLi4uIHBlcmhhcHMgd2UgY2FuCiAgICBhZGFwdCB0aGVtIGZyb20gdGhlIFBQQyBjb2RlPyAqLwotc3RhdGljIGludCBkZWZhdWx0X3Ztb2RlID0gVk1PREVfNjQwXzQ4MF82NzsKK3N0YXRpYyBpbnQgZGVmYXVsdF92bW9kZSA9IFZNT0RFX0NIT09TRTsKIHN0YXRpYyBpbnQgZGVmYXVsdF9jbW9kZSA9IENNT0RFXzg7CiAjZWxzZQogc3RhdGljIGludCBkZWZhdWx0X3Ztb2RlID0gVk1PREVfTlZSQU07CkBAIC0zMjYsMTEgKzMyNiwxMSBAQAogCiAjaWZkZWYgQ09ORklHX01BQwogCWlmICghTUFDSF9JU19NQUMpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoIShtYWNfYmlfZGF0YS5pZCA9PSBNQUNfTU9ERUxfUTYzMAogCSAgICAgIC8qIEknbSBub3Qgc3VyZSBhYm91dCB0aGlzIG9uZSAqLwogCSAgICB8fCBtYWNfYmlfZGF0YS5pZCA9PSBNQUNfTU9ERUxfUDU4OCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIEhhcmRjb2RlZCBhZGRyZXNzZXMuLi4gd2VsY29tZSB0byA2OGsgTWFjaW50b3NoIGNvdW50cnkgOi0pICovCiAJZnJhbWVfYnVmZmVyX3BoeXMgPSAweGY5MDAwMDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmggYi9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuaAppbmRleCA5N2FhZjdiLi5kNzg3NDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuaApAQCAtMTM0LDE1ICsxMzQsNyBAQAogICAgIHsgMTAyNCwgMCB9LAogCTEwMjQsIDc2OAogfTsKLQotLyogUmVnaXN0ZXIgdmFsdWVzIGZvciA4MDB4NjAwLCA3Mkh6IG1vZGUgKDExKSAqLwotc3RhdGljIHN0cnVjdCB2YWxreXJpZV9yZWd2YWxzIHZhbGt5cmllX3JlZ19pbml0XzExID0gewotICAgIDEzLAotICAgIHsgMTcsIDI3LCAzIH0sICAvKiBwaXhlbCBjbG9jayA9IDQ5LjYzTUh6IGZvciBWPTcxLjY2SHogKi8KLSAgICB7IDgwMCwgMCB9LAotCTgwMCwgNjAwCi19OwotI2VuZGlmIC8qIENPTkZJR19NQUMgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBDT05GSUdfTUFDICovCiAKIC8qIFJlZ2lzdGVyIHZhbHVlcyBmb3IgODMyeDYyNCwgNzVIeiBtb2RlICgxMykgKi8KIHN0YXRpYyBzdHJ1Y3QgdmFsa3lyaWVfcmVndmFscyB2YWxreXJpZV9yZWdfaW5pdF8xMyA9IHsKQEAgLTE1Miw2ICsxNDQsMTQgQEAKIAk4MzIsIDYyNAogfTsKIAorLyogUmVnaXN0ZXIgdmFsdWVzIGZvciA4MDB4NjAwLCA3Mkh6IG1vZGUgKDExKSAqLworc3RhdGljIHN0cnVjdCB2YWxreXJpZV9yZWd2YWxzIHZhbGt5cmllX3JlZ19pbml0XzExID0geworICAgIDEzLAorICAgIHsgMTcsIDI3LCAzIH0sICAvKiBwaXhlbCBjbG9jayA9IDQ5LjYzTUh6IGZvciBWPTcxLjY2SHogKi8KKyAgICB7IDgwMCwgMCB9LAorCTgwMCwgNjAwCit9OworCiAvKiBSZWdpc3RlciB2YWx1ZXMgZm9yIDgwMHg2MDAsIDYwSHogbW9kZSAoMTApICovCiBzdGF0aWMgc3RydWN0IHZhbGt5cmllX3JlZ3ZhbHMgdmFsa3lyaWVfcmVnX2luaXRfMTAgPSB7CiAgICAgMTIsCkBAIC0xODgsMjQgKzE4OCwxMyBAQAogCU5VTEwsCiAJTlVMTCwKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTAsCi0jaWZkZWYgQ09ORklHX01BQwotCU5VTEwsCi0JTlVMTCwKLQkmdmFsa3lyaWVfcmVnX2luaXRfMTMsCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwsCi0JTlVMTCwKLSNlbHNlCiAJJnZhbGt5cmllX3JlZ19pbml0XzExLAogCU5VTEwsCiAJJnZhbGt5cmllX3JlZ19pbml0XzEzLAorI2lmbmRlZiBDT05GSUdfTUFDCiAJJnZhbGt5cmllX3JlZ19pbml0XzE0LAogCSZ2YWxreXJpZV9yZWdfaW5pdF8xNSwKIAlOVUxMLAogCSZ2YWxreXJpZV9yZWdfaW5pdF8xNywKICNlbmRpZgotCU5VTEwsCi0JTlVMTCwKLQlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKaW5kZXggNTA1YmU4OC4uMzY5ZjJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCkBAIC0yOCw3ICsyOCw3IEBACiBzdHJ1Y3QgdmlydGlvX2JhbGxvb24KIHsKIAlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKLQlzdHJ1Y3QgdmlydHF1ZXVlICppbmZsYXRlX3ZxLCAqZGVmbGF0ZV92cTsKKwlzdHJ1Y3QgdmlydHF1ZXVlICppbmZsYXRlX3ZxLCAqZGVmbGF0ZV92cSwgKnN0YXRzX3ZxOwogCiAJLyogV2hlcmUgdGhlIGJhbGxvb25pbmcgdGhyZWFkIHdhaXRzIGZvciBjb25maWcgdG8gY2hhbmdlLiAqLwogCXdhaXRfcXVldWVfaGVhZF90IGNvbmZpZ19jaGFuZ2U7CkBAIC00OSw2ICs0OSwxMCBAQAogCS8qIFRoZSBhcnJheSBvZiBwZm5zIHdlIHRlbGwgdGhlIEhvc3QgYWJvdXQuICovCiAJdW5zaWduZWQgaW50IG51bV9wZm5zOwogCXUzMiBwZm5zWzI1Nl07CisKKwkvKiBNZW1vcnkgc3RhdGlzdGljcyAqLworCWludCBuZWVkX3N0YXRzX3VwZGF0ZTsKKwlzdHJ1Y3QgdmlydGlvX2JhbGxvb25fc3RhdCBzdGF0c1tWSVJUSU9fQkFMTE9PTl9TX05SXTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewpAQCAtMTU0LDYgKzE1OCw3MiBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zdGF0KHN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIsIGludCBpZHgsCisJCQkgICAgICAgdTE2IHRhZywgdTY0IHZhbCkKK3sKKwlCVUdfT04oaWR4ID49IFZJUlRJT19CQUxMT09OX1NfTlIpOworCXZiLT5zdGF0c1tpZHhdLnRhZyA9IHRhZzsKKwl2Yi0+c3RhdHNbaWR4XS52YWwgPSB2YWw7Cit9CisKKyNkZWZpbmUgcGFnZXNfdG9fYnl0ZXMoeCkgKCh1NjQpKHgpIDw8IFBBR0VfU0hJRlQpCisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9iYWxsb29uX3N0YXRzKHN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIpCit7CisJdW5zaWduZWQgbG9uZyBldmVudHNbTlJfVk1fRVZFTlRfSVRFTVNdOworCXN0cnVjdCBzeXNpbmZvIGk7CisJaW50IGlkeCA9IDA7CisKKwlhbGxfdm1fZXZlbnRzKGV2ZW50cyk7CisJc2lfbWVtaW5mbygmaSk7CisKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfU1dBUF9JTiwKKwkJCQlwYWdlc190b19ieXRlcyhldmVudHNbUFNXUElOXSkpOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19TV0FQX09VVCwKKwkJCQlwYWdlc190b19ieXRlcyhldmVudHNbUFNXUE9VVF0pKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfTUFKRkxULCBldmVudHNbUEdNQUpGQVVMVF0pOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19NSU5GTFQsIGV2ZW50c1tQR0ZBVUxUXSk7CisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX01FTUZSRUUsCisJCQkJcGFnZXNfdG9fYnl0ZXMoaS5mcmVlcmFtKSk7CisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX01FTVRPVCwKKwkJCQlwYWdlc190b19ieXRlcyhpLnRvdGFscmFtKSk7Cit9CisKKy8qCisgKiBXaGlsZSBtb3N0IHZpcnRxdWV1ZXMgY29tbXVuaWNhdGUgZ3Vlc3QtaW5pdGlhdGVkIHJlcXVlc3RzIHRvIHRoZSBoeXBlcnZpc29yLAorICogdGhlIHN0YXRzIHF1ZXVlIG9wZXJhdGVzIGluIHJldmVyc2UuICBUaGUgZHJpdmVyIGluaXRpYWxpemVzIHRoZSB2aXJ0cXVldWUKKyAqIHdpdGggYSBzaW5nbGUgYnVmZmVyLiAgRnJvbSB0aGF0IHBvaW50IGZvcndhcmQsIGFsbCBjb252ZXJzYXRpb25zIGNvbnNpc3Qgb2YKKyAqIGEgaHlwZXJ2aXNvciByZXF1ZXN0IChhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbikgd2hpY2ggZGlyZWN0cyB1cyB0byByZWZpbGwKKyAqIHRoZSB2aXJ0cXVldWUgd2l0aCBhIGZyZXNoIHN0YXRzIGJ1ZmZlci4gIFNpbmNlIHN0YXRzIGNvbGxlY3Rpb24gY2FuIHNsZWVwLAorICogd2Ugbm90aWZ5IG91ciBrdGhyZWFkIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCB3b3JrIHZpYSBzdGF0c19oYW5kbGVfcmVxdWVzdCgpLgorICovCitzdGF0aWMgdm9pZCBzdGF0c19yZXF1ZXN0KHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmI7CisJdW5zaWduZWQgaW50IGxlbjsKKworCXZiID0gdnEtPnZxX29wcy0+Z2V0X2J1Zih2cSwgJmxlbik7CisJaWYgKCF2YikKKwkJcmV0dXJuOworCXZiLT5uZWVkX3N0YXRzX3VwZGF0ZSA9IDE7CisJd2FrZV91cCgmdmItPmNvbmZpZ19jaGFuZ2UpOworfQorCitzdGF0aWMgdm9pZCBzdGF0c19oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiKQoreworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCXZiLT5uZWVkX3N0YXRzX3VwZGF0ZSA9IDA7CisJdXBkYXRlX2JhbGxvb25fc3RhdHModmIpOworCisJdnEgPSB2Yi0+c3RhdHNfdnE7CisJc2dfaW5pdF9vbmUoJnNnLCB2Yi0+c3RhdHMsIHNpemVvZih2Yi0+c3RhdHMpKTsKKwlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgJnNnLCAxLCAwLCB2YikgPCAwKQorCQlCVUcoKTsKKwl2cS0+dnFfb3BzLT5raWNrKHZxKTsKK30KKwogc3RhdGljIHZvaWQgdmlydGJhbGxvb25fY2hhbmdlZChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiID0gdmRldi0+cHJpdjsKQEAgLTE5MCw4ICsyNjAsMTEgQEAKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodmItPmNvbmZpZ19jaGFuZ2UsCiAJCQkJCSAoZGlmZiA9IHRvd2FyZHNfdGFyZ2V0KHZiKSkgIT0gMAorCQkJCQkgfHwgdmItPm5lZWRfc3RhdHNfdXBkYXRlCiAJCQkJCSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkKIAkJCQkJIHx8IGZyZWV6aW5nKGN1cnJlbnQpKTsKKwkJaWYgKHZiLT5uZWVkX3N0YXRzX3VwZGF0ZSkKKwkJCXN0YXRzX2hhbmRsZV9yZXF1ZXN0KHZiKTsKIAkJaWYgKGRpZmYgPiAwKQogCQkJZmlsbF9iYWxsb29uKHZiLCBkaWZmKTsKIAkJZWxzZSBpZiAoZGlmZiA8IDApCkBAIC0yMDQsMTAgKzI3NywxMCBAQAogc3RhdGljIGludCB2aXJ0YmFsbG9vbl9wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiOwotCXN0cnVjdCB2aXJ0cXVldWUgKnZxc1syXTsKLQl2cV9jYWxsYmFja190ICpjYWxsYmFja3NbXSA9IHsgYmFsbG9vbl9hY2ssIGJhbGxvb25fYWNrIH07Ci0JY29uc3QgY2hhciAqbmFtZXNbXSA9IHsgImluZmxhdGUiLCAiZGVmbGF0ZSIgfTsKLQlpbnQgZXJyOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxc1szXTsKKwl2cV9jYWxsYmFja190ICpjYWxsYmFja3NbXSA9IHsgYmFsbG9vbl9hY2ssIGJhbGxvb25fYWNrLCBzdGF0c19yZXF1ZXN0IH07CisJY29uc3QgY2hhciAqbmFtZXNbXSA9IHsgImluZmxhdGUiLCAiZGVmbGF0ZSIsICJzdGF0cyIgfTsKKwlpbnQgZXJyLCBudnFzOwogCiAJdmRldi0+cHJpdiA9IHZiID0ga21hbGxvYyhzaXplb2YoKnZiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2YikgewpAQCAtMjE5LDE0ICsyOTIsMzEgQEAKIAl2Yi0+bnVtX3BhZ2VzID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2Yi0+Y29uZmlnX2NoYW5nZSk7CiAJdmItPnZkZXYgPSB2ZGV2OworCXZiLT5uZWVkX3N0YXRzX3VwZGF0ZSA9IDA7CiAKLQkvKiBXZSBleHBlY3QgdHdvIHZpcnRxdWV1ZXMuICovCi0JZXJyID0gdmRldi0+Y29uZmlnLT5maW5kX3Zxcyh2ZGV2LCAyLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMpOworCS8qIFdlIGV4cGVjdCB0d28gdmlydHF1ZXVlczogaW5mbGF0ZSBhbmQgZGVmbGF0ZSwKKwkgKiBhbmQgb3B0aW9uYWxseSBzdGF0LiAqLworCW52cXMgPSB2aXJ0aW9faGFzX2ZlYXR1cmUodmItPnZkZXYsIFZJUlRJT19CQUxMT09OX0ZfU1RBVFNfVlEpID8gMyA6IDI7CisJZXJyID0gdmRldi0+Y29uZmlnLT5maW5kX3Zxcyh2ZGV2LCBudnFzLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWVfdmI7CiAKIAl2Yi0+aW5mbGF0ZV92cSA9IHZxc1swXTsKIAl2Yi0+ZGVmbGF0ZV92cSA9IHZxc1sxXTsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZiLT52ZGV2LCBWSVJUSU9fQkFMTE9PTl9GX1NUQVRTX1ZRKSkgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJCXZiLT5zdGF0c192cSA9IHZxc1syXTsKKworCQkvKgorCQkgKiBQcmltZSB0aGlzIHZpcnRxdWV1ZSB3aXRoIG9uZSBidWZmZXIgc28gdGhlIGh5cGVydmlzb3IgY2FuCisJCSAqIHVzZSBpdCB0byBzaWduYWwgdXMgbGF0ZXIuCisJCSAqLworCQlzZ19pbml0X29uZSgmc2csIHZiLT5zdGF0cywgc2l6ZW9mIHZiLT5zdGF0cyk7CisJCWlmICh2Yi0+c3RhdHNfdnEtPnZxX29wcy0+YWRkX2J1Zih2Yi0+c3RhdHNfdnEsCisJCQkJCQkgICZzZywgMSwgMCwgdmIpIDwgMCkKKwkJCUJVRygpOworCQl2Yi0+c3RhdHNfdnEtPnZxX29wcy0+a2ljayh2Yi0+c3RhdHNfdnEpOworCX0KIAogCXZiLT50aHJlYWQgPSBrdGhyZWFkX3J1bihiYWxsb29uLCB2YiwgInZiYWxsb29uIik7CiAJaWYgKElTX0VSUih2Yi0+dGhyZWFkKSkgewpAQCAtMjY0LDcgKzM1NCwxMCBAQAogCWtmcmVlKHZiKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0geyBWSVJUSU9fQkFMTE9PTl9GX01VU1RfVEVMTF9IT1NUIH07CitzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CisJVklSVElPX0JBTExPT05fRl9NVVNUX1RFTExfSE9TVCwKKwlWSVJUSU9fQkFMTE9PTl9GX1NUQVRTX1ZRLAorfTsKIAogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19iYWxsb29uX2RyaXZlciA9IHsKIAkuZmVhdHVyZV90YWJsZSA9IGZlYXR1cmVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCmluZGV4IDI4ZDljZjcuLjFkNTE5MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKQEAgLTcwMiw3ICs3MDIsNyBAQAogCS5uYW1lCQk9ICJ2aXJ0aW8tcGNpIiwKIAkuaWRfdGFibGUJPSB2aXJ0aW9fcGNpX2lkX3RhYmxlLAogCS5wcm9iZQkJPSB2aXJ0aW9fcGNpX3Byb2JlLAotCS5yZW1vdmUJCT0gdmlydGlvX3BjaV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh2aXJ0aW9fcGNpX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSB2aXJ0aW9fcGNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSB2aXJ0aW9fcGNpX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCmluZGV4IGZiZDJlY2QuLjBkYjkwNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwpAQCAtMjEsNiArMjEsMjQgQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKKy8qIHZpcnRpbyBndWVzdCBpcyBjb21tdW5pY2F0aW5nIHdpdGggYSB2aXJ0dWFsICJkZXZpY2UiIHRoYXQgYWN0dWFsbHkgcnVucyBvbgorICogYSBob3N0IHByb2Nlc3Nvci4gIE1lbW9yeSBiYXJyaWVycyBhcmUgdXNlZCB0byBjb250cm9sIFNNUCBlZmZlY3RzLiAqLworI2lmZGVmIENPTkZJR19TTVAKKy8qIFdoZXJlIHBvc3NpYmxlLCB1c2UgU01QIGJhcnJpZXJzIHdoaWNoIGFyZSBtb3JlIGxpZ2h0d2VpZ2h0IHRoYW4gbWFuZGF0b3J5CisgKiBiYXJyaWVycywgYmVjYXVzZSBtYW5kYXRvcnkgYmFycmllcnMgY29udHJvbCBNTUlPIGVmZmVjdHMgb24gYWNjZXNzZXMKKyAqIHRocm91Z2ggcmVsYXhlZCBtZW1vcnkgSS9PIHdpbmRvd3MgKHdoaWNoIHZpcnRpbyBkb2VzIG5vdCB1c2UpLiAqLworI2RlZmluZSB2aXJ0aW9fbWIoKSBzbXBfbWIoKQorI2RlZmluZSB2aXJ0aW9fcm1iKCkgc21wX3JtYigpCisjZGVmaW5lIHZpcnRpb193bWIoKSBzbXBfd21iKCkKKyNlbHNlCisvKiBXZSBtdXN0IGZvcmNlIG1lbW9yeSBvcmRlcmluZyBldmVuIGlmIGd1ZXN0IGlzIFVQIHNpbmNlIGhvc3QgY291bGQgYmUKKyAqIHJ1bm5pbmcgb24gYW5vdGhlciBDUFUsIGJ1dCBTTVAgYmFycmllcnMgYXJlIGRlZmluZWQgdG8gYmFycmllcigpIGluIHRoYXQKKyAqIGNvbmZpZ3VyYXRpb24uIFNvIGZhbGwgYmFjayB0byBtYW5kYXRvcnkgYmFycmllcnMgaW5zdGVhZC4gKi8KKyNkZWZpbmUgdmlydGlvX21iKCkgbWIoKQorI2RlZmluZSB2aXJ0aW9fcm1iKCkgcm1iKCkKKyNkZWZpbmUgdmlydGlvX3dtYigpIHdtYigpCisjZW5kaWYKKwogI2lmZGVmIERFQlVHCiAvKiBGb3IgZGV2ZWxvcG1lbnQsIHdlIHdhbnQgdG8gY3Jhc2ggd2hlbmV2ZXIgdGhlIHJpbmcgaXMgc2NyZXdlZC4gKi8KICNkZWZpbmUgQkFEX1JJTkcoX3ZxLCBmbXQsIGFyZ3MuLi4pCQkJCVwKQEAgLTM2LDEwICs1NCw5IEBACiAJCQlwYW5pYygiJXM6aW5fdXNlID0gJWlcbiIsCQlcCiAJCQkgICAgICAoX3ZxKS0+dnEubmFtZSwgKF92cSktPmluX3VzZSk7CVwKIAkJKF92cSktPmluX3VzZSA9IF9fTElORV9fOwkJCVwKLQkJbWIoKTsJCQkJCQlcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgRU5EX1VTRShfdnEpIFwKLQlkbyB7IEJVR19PTighKF92cSktPmluX3VzZSk7IChfdnEpLT5pbl91c2UgPSAwOyBtYigpOyB9IHdoaWxlKDApCisJZG8geyBCVUdfT04oIShfdnEpLT5pbl91c2UpOyAoX3ZxKS0+aW5fdXNlID0gMDsgfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgQkFEX1JJTkcoX3ZxLCBmbXQsIGFyZ3MuLi4pCQkJCVwKIAlkbyB7CQkJCQkJCVwKQEAgLTIyMSwxMyArMjM4LDEzIEBACiAJU1RBUlRfVVNFKHZxKTsKIAkvKiBEZXNjcmlwdG9ycyBhbmQgYXZhaWxhYmxlIGFycmF5IG5lZWQgdG8gYmUgc2V0IGJlZm9yZSB3ZSBleHBvc2UgdGhlCiAJICogbmV3IGF2YWlsYWJsZSBhcnJheSBlbnRyaWVzLiAqLwotCXdtYigpOworCXZpcnRpb193bWIoKTsKIAogCXZxLT52cmluZy5hdmFpbC0+aWR4ICs9IHZxLT5udW1fYWRkZWQ7CiAJdnEtPm51bV9hZGRlZCA9IDA7CiAKIAkvKiBOZWVkIHRvIHVwZGF0ZSBhdmFpbCBpbmRleCBiZWZvcmUgY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIG5vdGlmeSAqLwotCW1iKCk7CisJdmlydGlvX21iKCk7CiAKIAlpZiAoISh2cS0+dnJpbmcudXNlZC0+ZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKSkKIAkJLyogUHJvZCBvdGhlciBzaWRlIHRvIHRlbGwgaXQgYWJvdXQgY2hhbmdlcy4gKi8KQEAgLTI4Niw3ICszMDMsNyBAQAogCX0KIAogCS8qIE9ubHkgZ2V0IHVzZWQgYXJyYXkgZW50cmllcyBhZnRlciB0aGV5IGhhdmUgYmVlbiBleHBvc2VkIGJ5IGhvc3QuICovCi0Jcm1iKCk7CisJdmlydGlvX3JtYigpOwogCiAJaSA9IHZxLT52cmluZy51c2VkLT5yaW5nW3ZxLT5sYXN0X3VzZWRfaWR4JXZxLT52cmluZy5udW1dLmlkOwogCSpsZW4gPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5sZW47CkBAIC0zMjQsNyArMzQxLDcgQEAKIAkvKiBXZSBvcHRpbWlzdGljYWxseSB0dXJuIGJhY2sgb24gaW50ZXJydXB0cywgdGhlbiBjaGVjayBpZiB0aGVyZSB3YXMKIAkgKiBtb3JlIHRvIGRvLiAqLwogCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgJj0gflZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUOwotCW1iKCk7CisJdmlydGlvX21iKCk7CiAJaWYgKHVubGlrZWx5KG1vcmVfdXNlZCh2cSkpKSB7CiAJCUVORF9VU0UodnEpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0zMzQsNiArMzUxLDMwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkICp2cmluZ19kZXRhY2hfdW51c2VkX2J1ZihzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCit7CisJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl2b2lkICpidWY7CisKKwlTVEFSVF9VU0UodnEpOworCisJZm9yIChpID0gMDsgaSA8IHZxLT52cmluZy5udW07IGkrKykgeworCQlpZiAoIXZxLT5kYXRhW2ldKQorCQkJY29udGludWU7CisJCS8qIGRldGFjaF9idWYgY2xlYXJzIGRhdGEsIHNvIGdyYWIgaXQgbm93LiAqLworCQlidWYgPSB2cS0+ZGF0YVtpXTsKKwkJZGV0YWNoX2J1Zih2cSwgaSk7CisJCUVORF9VU0UodnEpOworCQlyZXR1cm4gYnVmOworCX0KKwkvKiBUaGF0IHNob3VsZCBoYXZlIGZyZWVkIGV2ZXJ5dGhpbmcuICovCisJQlVHX09OKHZxLT5udW1fZnJlZSAhPSB2cS0+dnJpbmcubnVtKTsKKworCUVORF9VU0UodnEpOworCXJldHVybiBOVUxMOworfQorCiBpcnFyZXR1cm5fdCB2cmluZ19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX3ZxKQogewogCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7CkBAIC0zNjAsNiArNDAxLDcgQEAKIAkua2ljayA9IHZyaW5nX2tpY2ssCiAJLmRpc2FibGVfY2IgPSB2cmluZ19kaXNhYmxlX2NiLAogCS5lbmFibGVfY2IgPSB2cmluZ19lbmFibGVfY2IsCisJLmRldGFjaF91bnVzZWRfYnVmID0gdnJpbmdfZGV0YWNoX3VudXNlZF9idWYsCiB9OwogCiBzdHJ1Y3QgdmlydHF1ZXVlICp2cmluZ19uZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBudW0sCkBAIC00MDYsOCArNDQ4LDExIEBACiAJLyogUHV0IGV2ZXJ5dGhpbmcgaW4gZnJlZSBsaXN0cy4gKi8KIAl2cS0+bnVtX2ZyZWUgPSBudW07CiAJdnEtPmZyZWVfaGVhZCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG51bS0xOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG51bS0xOyBpKyspIHsKIAkJdnEtPnZyaW5nLmRlc2NbaV0ubmV4dCA9IGkrMTsKKwkJdnEtPmRhdGFbaV0gPSBOVUxMOworCX0KKwl2cS0+ZGF0YVtpXSA9IE5VTEw7CiAKIAlyZXR1cm4gJnZxLT52cTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYXI3X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hcjdfd2R0LmMKaW5kZXggMmU5NGI3MS4uMmJiOTVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hcjdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hcjdfd2R0LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CkBAIC04MCw2ICs4MSw4IEBACiAvKiBQb2ludGVyIHRvIHRoZSByZW1hcHBlZCBXRFQgSU8gc3BhY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgYXI3X3dkdCAqYXI3X3dkdDsKIAorc3RhdGljIHN0cnVjdCBjbGsgKnZidXNfY2xrOworCiBzdGF0aWMgdm9pZCBhcjdfd2R0X2tpY2sodTMyIHZhbHVlKQogewogCVdSSVRFX1JFRyhhcjdfd2R0LT5raWNrX2xvY2ssIDB4NTU1NSk7CkBAIC0xMzgsMTcgKzE0MSwxOSBAQAogc3RhdGljIHZvaWQgYXI3X3dkdF91cGRhdGVfbWFyZ2luKGludCBuZXdfbWFyZ2luKQogewogCXUzMiBjaGFuZ2U7CisJdTMyIHZidXNfcmF0ZTsKIAotCWNoYW5nZSA9IG5ld19tYXJnaW4gKiAoYXI3X3ZidXNfZnJlcSgpIC8gcHJlc2NhbGVfdmFsdWUpOworCXZidXNfcmF0ZSA9IGNsa19nZXRfcmF0ZSh2YnVzX2Nsayk7CisJY2hhbmdlID0gbmV3X21hcmdpbiAqICh2YnVzX3JhdGUgLyBwcmVzY2FsZV92YWx1ZSk7CiAJaWYgKGNoYW5nZSA8IDEpCiAJCWNoYW5nZSA9IDE7CiAJaWYgKGNoYW5nZSA+IDB4ZmZmZikKIAkJY2hhbmdlID0gMHhmZmZmOwogCWFyN193ZHRfY2hhbmdlKGNoYW5nZSk7Ci0JbWFyZ2luID0gY2hhbmdlICogcHJlc2NhbGVfdmFsdWUgLyBhcjdfdmJ1c19mcmVxKCk7CisJbWFyZ2luID0gY2hhbmdlICogcHJlc2NhbGVfdmFsdWUgLyB2YnVzX3JhdGU7CiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZOQU1FCiAJICAgICAgICI6IHRpbWVyIG1hcmdpbiAlZCBzZWNvbmRzIChwcmVzY2FsZSAlZCwgY2hhbmdlICVkLCBmcmVxICVkKVxuIiwKLQkgICAgICAgbWFyZ2luLCBwcmVzY2FsZV92YWx1ZSwgY2hhbmdlLCBhcjdfdmJ1c19mcmVxKCkpOworCSAgICAgICBtYXJnaW4sIHByZXNjYWxlX3ZhbHVlLCBjaGFuZ2UsIHZidXNfcmF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFyN193ZHRfZW5hYmxlX3dkdCh2b2lkKQpAQCAtMjk4LDYgKzMwMywxMyBAQAogCQlnb3RvIG91dF9tZW1fcmVnaW9uOwogCX0KIAorCXZidXNfY2xrID0gY2xrX2dldChOVUxMLCAidmJ1cyIpOworCWlmIChJU19FUlIodmJ1c19jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IGNvdWxkIG5vdCBnZXQgdmJ1cyBjbG9ja1xuIik7CisJCXJjID0gUFRSX0VSUih2YnVzX2Nsayk7CisJCWdvdG8gb3V0X21lbV9yZWdpb247CisJfQorCiAJYXI3X3dkdF9kaXNhYmxlX3dkdCgpOwogCWFyN193ZHRfcHJlc2NhbGUocHJlc2NhbGVfdmFsdWUpOwogCWFyN193ZHRfdXBkYXRlX21hcmdpbihtYXJnaW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9iZmluX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9iZmluX3dkdC5jCmluZGV4IGM3YjNmOWQuLjIxNTllNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYmZpbl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2JmaW5fd2R0LmMKQEAgLTEsOSArMSw4IEBACiAvKgogICogQmxhY2tmaW4gT24tQ2hpcCBXYXRjaGRvZyBEcml2ZXIKLSAqICBTdXBwb3J0cyBCRjUzWzEyM10vQkY1M1s0NjddL0JGNTRbMjQ4OV0vQkY1NjEKICAqCiAgKiBPcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnRkb2cuYwotICogQ29weXJpZ2h0IDIwMDYtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIENvcHlyaWdodCAyMDA2LTIwMDcgTWljaGVsZSBkJ0FtaWNvCiAgKiBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKQEAgLTEzNywxMyArMTM2LDE1IEBACiAgKi8KIHN0YXRpYyBpbnQgYmZpbl93ZHRfc2V0X3RpbWVvdXQodW5zaWduZWQgbG9uZyB0KQogewotCXUzMiBjbnQ7CisJdTMyIGNudCwgbWF4X3QsIHNjbGs7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXN0YW1waXQoKTsKKwlzY2xrID0gZ2V0X3NjbGsoKTsKKwltYXhfdCA9IC0xIC8gc2NsazsKKwljbnQgPSB0ICogc2NsazsKKwlzdGFtcCgibWF4dGltZW91dD0ldXMgbmV3dGltZW91dD0lbHVzIChjbnQ9JSN4KSIsIG1heF90LCB0LCBjbnQpOwogCi0JY250ID0gdCAqIGdldF9zY2xrKCk7Ci0JaWYgKGNudCA8IGdldF9zY2xrKCkpIHsKKwlpZiAodCA+IG1heF90KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBsYXJnZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuYyBiL2ZzLzlwL3Y5ZnMuYwppbmRleCBjZjYyYjA1Li43ZDZjMjEzIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmMKKysrIGIvZnMvOXAvdjlmcy5jCkBAIC04NCw3ICs4NCw3IEBACiAKIHN0YXRpYyBpbnQgdjlmc19wYXJzZV9vcHRpb25zKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIGNoYXIgKm9wdHMpCiB7Ci0JY2hhciAqb3B0aW9uczsKKwljaGFyICpvcHRpb25zLCAqdG1wX29wdGlvbnM7CiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwogCWNoYXIgKnA7CiAJaW50IG9wdGlvbiA9IDA7CkBAIC0xMDIsOSArMTAyLDEyIEBACiAJaWYgKCFvcHRzKQogCQlyZXR1cm4gMDsKIAotCW9wdGlvbnMgPSBrc3RyZHVwKG9wdHMsIEdGUF9LRVJORUwpOwotCWlmICghb3B0aW9ucykKKwl0bXBfb3B0aW9ucyA9IGtzdHJkdXAob3B0cywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBfb3B0aW9ucykgeworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfb3B0aW9uX2FsbG9jOworCX0KKwlvcHRpb25zID0gdG1wX29wdGlvbnM7CiAKIAl3aGlsZSAoKHAgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKIAkJaW50IHRva2VuOwpAQCAtMTU5LDggKzE2MiwxMiBAQAogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2NhY2hlOgogCQkJcyA9IG1hdGNoX3N0cmR1cCgmYXJnc1swXSk7Ci0JCQlpZiAoIXMpCi0JCQkJZ290byBmYWlsX29wdGlvbl9hbGxvYzsKKwkJCWlmICghcykgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkgICJwcm9ibGVtIGFsbG9jYXRpbmcgY29weSBvZiBjYWNoZSBhcmdcbiIpOworCQkJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOworCQkJfQogCiAJCQlpZiAoc3RyY21wKHMsICJsb29zZSIpID09IDApCiAJCQkJdjlzZXMtPmNhY2hlID0gQ0FDSEVfTE9PU0U7CkBAIC0xNzMsOCArMTgwLDEyIEBACiAKIAkJY2FzZSBPcHRfYWNjZXNzOgogCQkJcyA9IG1hdGNoX3N0cmR1cCgmYXJnc1swXSk7Ci0JCQlpZiAoIXMpCi0JCQkJZ290byBmYWlsX29wdGlvbl9hbGxvYzsKKwkJCWlmICghcykgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkgICJwcm9ibGVtIGFsbG9jYXRpbmcgY29weSBvZiBhY2Nlc3MgYXJnXG4iKTsKKwkJCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKKwkJCX0KIAogCQkJdjlzZXMtPmZsYWdzICY9IH5WOUZTX0FDQ0VTU19NQVNLOwogCQkJaWYgKHN0cmNtcChzLCAidXNlciIpID09IDApCkBAIC0xOTQsMTMgKzIwNSwxMSBAQAogCQkJY29udGludWU7CiAJCX0KIAl9Ci0Ja2ZyZWUob3B0aW9ucyk7Ci0JcmV0dXJuIHJldDsKIAorZnJlZV9hbmRfcmV0dXJuOgorCWtmcmVlKHRtcF9vcHRpb25zKTsKIGZhaWxfb3B0aW9uX2FsbG9jOgotCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCi0JCSAgICJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSBvZiBvcHRpb24gYXJndW1lbnRcbiIpOwotCXJldHVybiAtRU5PTUVNOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggM2E3NTYwZS4uZWQ4MzU4MyAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC02MCwzICs2MCw0IEBACiBpbnQgdjlmc191ZmxhZ3Myb21vZGUoaW50IHVmbGFncywgaW50IGV4dGVuZGVkKTsKIAogc3NpemVfdCB2OWZzX2ZpbGVfcmVhZG4oc3RydWN0IGZpbGUgKiwgY2hhciAqLCBjaGFyIF9fdXNlciAqLCB1MzIsIHU2NCk7Cit2b2lkIHY5ZnNfYmxhbmtfd3N0YXQoc3RydWN0IHA5X3dzdGF0ICp3c3RhdCk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCAzOTAyYmY0Li43NGEwNDYxIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTI1Nyw2ICsyNTcsMjMgQEAKIAlyZXR1cm4gdG90YWw7CiB9CiAKK3N0YXRpYyBpbnQgdjlmc19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCWludCBkYXRhc3luYykKK3sKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X3dzdGF0IHdzdGF0OworCWludCByZXR2YWw7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpbHAgJXAgZGVudHJ5ICVwIGRhdGFzeW5jICV4XG4iLCBmaWxwLAorCQkJCQkJZGVudHJ5LCBkYXRhc3luYyk7CisKKwlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdjlmc19ibGFua193c3RhdCgmd3N0YXQpOworCisJcmV0dmFsID0gcDlfY2xpZW50X3dzdGF0KGZpZCwgJndzdGF0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2NhY2hlZF9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCkBAIC0yNjYsNiArMjgzLDcgQEAKIAkucmVsZWFzZSA9IHY5ZnNfZGlyX3JlbGVhc2UsCiAJLmxvY2sgPSB2OWZzX2ZpbGVfbG9jaywKIAkubW1hcCA9IGdlbmVyaWNfZmlsZV9yZWFkb25seV9tbWFwLAorCS5mc3luYyA9IHY5ZnNfZmlsZV9mc3luYywKIH07CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjlmc19maWxlX29wZXJhdGlvbnMgPSB7CkBAIC0yNzYsNCArMjk0LDUgQEAKIAkucmVsZWFzZSA9IHY5ZnNfZGlyX3JlbGVhc2UsCiAJLmxvY2sgPSB2OWZzX2ZpbGVfbG9jaywKIAkubW1hcCA9IGdlbmVyaWNfZmlsZV9yZWFkb25seV9tbWFwLAorCS5mc3luYyA9IHY5ZnNfZmlsZV9mc3luYywKIH07CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IDlkMDNkMWUuLmE0MDdmYTMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC0xNzYsNyArMTc2LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQKK3ZvaWQKIHY5ZnNfYmxhbmtfd3N0YXQoc3RydWN0IHA5X3dzdGF0ICp3c3RhdCkKIHsKIAl3c3RhdC0+dHlwZSA9IH4wOwpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9saW51eHZmcy5jIGIvZnMvYmVmcy9saW51eHZmcy5jCmluZGV4IDMzYmFmMjcuLjM0ZGRkYTggMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvbGludXh2ZnMuYworKysgYi9mcy9iZWZzL2xpbnV4dmZzLmMKQEAgLTg3Myw2ICs4NzMsNyBAQAogCWJyZWxzZShiaCk7CiAKICAgICAgIHVuYWNxdWlyZV9wcml2X3NicDoKKwlrZnJlZShiZWZzX3NiLT5tb3VudF9vcHRzLmlvY2hhcnNldCk7CiAJa2ZyZWUoc2ItPnNfZnNfaW5mbyk7CiAKICAgICAgIHVuYWNxdWlyZV9ub25lOgpkaWZmIC0tZ2l0IGEvZnMvYmlvLWludGVncml0eS5jIGIvZnMvYmlvLWludGVncml0eS5jCmluZGV4IDQ5YTM0ZTcuLmExNmYyOWUgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby1pbnRlZ3JpdHkuYworKysgYi9mcy9iaW8taW50ZWdyaXR5LmMKQEAgLTYxLDcgKzYxLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgdXNlX2JpcF9wb29sKHVuc2lnbmVkIGludCBpZHgpCiB7Ci0JaWYgKGlkeCA9PSBCSU9WRUNfTlJfUE9PTFMpCisJaWYgKGlkeCA9PSBCSU9WRUNfTUFYX0lEWCkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKQEAgLTk1LDYgKzk1LDcgQEAKIAogCS8qIFVzZSBtZW1wb29sIGlmIGxvd2VyIG9yZGVyIGFsbG9jIGZhaWxlZCBvciBtYXggdmVjcyB3ZXJlIHJlcXVlc3RlZCAqLwogCWlmIChiaXAgPT0gTlVMTCkgeworCQlpZHggPSBCSU9WRUNfTUFYX0lEWDsgIC8qIHNvIHdlIGZyZWUgdGhlIHBheWxvYWQgcHJvcGVybHkgbGF0ZXIgKi8KIAkJYmlwID0gbWVtcG9vbF9hbGxvYyhicy0+YmlvX2ludGVncml0eV9wb29sLCBnZnBfbWFzayk7CiAKIAkJaWYgKHVubGlrZWx5KGJpcCA9PSBOVUxMKSkgewpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCAxMjQyOWM5Li44ODA5NGFmIDEwMDY0NAotLS0gYS9mcy9iaW8uYworKysgYi9mcy9iaW8uYwpAQCAtNTQyLDEzICs1NDIsMTggQEAKIAogCQlpZiAocGFnZSA9PSBwcmV2LT5idl9wYWdlICYmCiAJCSAgICBvZmZzZXQgPT0gcHJldi0+YnZfb2Zmc2V0ICsgcHJldi0+YnZfbGVuKSB7CisJCQl1bnNpZ25lZCBpbnQgcHJldl9idl9sZW4gPSBwcmV2LT5idl9sZW47CiAJCQlwcmV2LT5idl9sZW4gKz0gbGVuOwogCiAJCQlpZiAocS0+bWVyZ2VfYnZlY19mbikgewogCQkJCXN0cnVjdCBidmVjX21lcmdlX2RhdGEgYnZtID0geworCQkJCQkvKiBwcmV2X2J2ZWMgaXMgYWxyZWFkeSBjaGFyZ2VkIGluCisJCQkJCSAgIGJpX3NpemUsIGRpc2NoYXJnZSBpdCBpbiBvcmRlciB0bworCQkJCQkgICBzaW11bGF0ZSBtZXJnaW5nIHVwZGF0ZWQgcHJldl9idmVjCisJCQkJCSAgIGFzIG5ldyBidmVjLiAqLwogCQkJCQkuYmlfYmRldiA9IGJpby0+YmlfYmRldiwKIAkJCQkJLmJpX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yLAotCQkJCQkuYmlfc2l6ZSA9IGJpby0+Ymlfc2l6ZSwKKwkJCQkJLmJpX3NpemUgPSBiaW8tPmJpX3NpemUgLSBwcmV2X2J2X2xlbiwKIAkJCQkJLmJpX3J3ID0gYmlvLT5iaV9ydywKIAkJCQl9OwogCmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDczZDZhNzMuLmQxMWQwMjggMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0yNDYsNyArMjQ2LDggQEAKIAlpZiAoIXNiKQogCQlnb3RvIG91dDsKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHsKLQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpOworCQlzYi0+c19mcm96ZW4gPSBTQl9GUkVFWkVfVFJBTlM7CisJCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOwogCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKIAkJcmV0dXJuIHNiOwogCX0KQEAgLTMwNyw3ICszMDgsNyBAQAogCUJVR19PTihzYi0+c19iZGV2ICE9IGJkZXYpOwogCWRvd25fd3JpdGUoJnNiLT5zX3Vtb3VudCk7CiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQotCQlnb3RvIG91dF9kZWFjdGl2YXRlOworCQlnb3RvIG91dF91bmZyb3plbjsKIAogCWlmIChzYi0+c19vcC0+dW5mcmVlemVfZnMpIHsKIAkJZXJyb3IgPSBzYi0+c19vcC0+dW5mcmVlemVfZnMoc2IpOwpAQCAtMzIxLDExICszMjIsMTEgQEAKIAkJfQogCX0KIAorb3V0X3VuZnJvemVuOgogCXNiLT5zX2Zyb3plbiA9IFNCX1VORlJPWkVOOwogCXNtcF93bWIoKTsKIAl3YWtlX3VwKCZzYi0+c193YWl0X3VuZnJvemVuKTsKIAotb3V0X2RlYWN0aXZhdGU6CiAJaWYgKHNiKQogCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiBvdXRfdW5sb2NrOgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDg3YjI1NTQuLjJiNTkyMDEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTE5ODIsNyArMTk4MiwxMiBAQAogCiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCXJldCA9IGJ0cmZzX3JlY292ZXJfcmVsb2NhdGlvbih0cmVlX3Jvb3QpOwotCQlCVUdfT04ocmV0KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiYnRyZnM6IGZhaWxlZCB0byByZWNvdmVyIHJlbG9jYXRpb25cbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbF90cmFuc19rdGhyZWFkOworCQl9CiAJfQogCiAJbG9jYXRpb24ub2JqZWN0aWQgPSBCVFJGU19GU19UUkVFX09CSkVDVElEOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggNDMyYTJkYS4uNTU5ZjcyNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC01NDAyLDEwICs1NDAyLDYgQEAKIAlpbnQgcmV0OwogCiAJd2hpbGUgKGxldmVsID49IDApIHsKLQkJaWYgKHBhdGgtPnNsb3RzW2xldmVsXSA+PQotCQkgICAgYnRyZnNfaGVhZGVyX25yaXRlbXMocGF0aC0+bm9kZXNbbGV2ZWxdKSkKLQkJCWJyZWFrOwotCiAJCXJldCA9IHdhbGtfZG93bl9wcm9jKHRyYW5zLCByb290LCBwYXRoLCB3YywgbG9va3VwX2luZm8pOwogCQlpZiAocmV0ID4gMCkKIAkJCWJyZWFrOwpAQCAtNTQxMyw2ICs1NDA5LDEwIEBACiAJCWlmIChsZXZlbCA9PSAwKQogCQkJYnJlYWs7CiAKKwkJaWYgKHBhdGgtPnNsb3RzW2xldmVsXSA+PQorCQkgICAgYnRyZnNfaGVhZGVyX25yaXRlbXMocGF0aC0+bm9kZXNbbGV2ZWxdKSkKKwkJCWJyZWFrOworCiAJCXJldCA9IGRvX3dhbGtfZG93bih0cmFucywgcm9vdCwgcGF0aCwgd2MsICZsb29rdXBfaW5mbyk7CiAJCWlmIChyZXQgPiAwKSB7CiAJCQlwYXRoLT5zbG90c1tsZXZlbF0rKzsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggOTY1NzdlOC4uYjE3N2VkMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTMxNjUsMTAgKzMxNjUsOSBAQAogCQlzcGluX3VubG9jaygmdHJlZS0+YnVmZmVyX2xvY2spOwogCQlnb3RvIGZyZWVfZWI7CiAJfQotCXNwaW5fdW5sb2NrKCZ0cmVlLT5idWZmZXJfbG9jayk7Ci0KIAkvKiBhZGQgb25lIHJlZmVyZW5jZSBmb3IgdGhlIHRyZWUgKi8KIAlhdG9taWNfaW5jKCZlYi0+cmVmcyk7CisJc3Bpbl91bmxvY2soJnRyZWUtPmJ1ZmZlcl9sb2NrKTsKIAlyZXR1cm4gZWI7CiAKIGZyZWVfZWI6CmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLmMgYi9mcy9idHJmcy9maWxlLmMKaW5kZXggYzAyMDMzNS4uNmVkNDM0YSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUuYwpAQCAtNzIwLDEzICs3MjAsMTUgQEAKIAkJCQkJaW5vZGUtPmlfaW5vLCBvcmlnX29mZnNldCk7CiAJCUJVR19PTihyZXQpOwogCX0KLQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAotCQkJICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwogCWlmIChkZWxfbnIgPT0gMCkgeworCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwogCQlidHJmc19zZXRfZmlsZV9leHRlbnRfdHlwZShsZWFmLCBmaSwKIAkJCQkJICAgQlRSRlNfRklMRV9FWFRFTlRfUkVHKTsKIAkJYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7CiAJfSBlbHNlIHsKKwkJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBkZWxfc2xvdCAtIDEsCisJCQkgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CiAJCWJ0cmZzX3NldF9maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpLAogCQkJCQkgICBCVFJGU19GSUxFX0VYVEVOVF9SRUcpOwogCQlidHJmc19zZXRfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpLApAQCAtMTEzMyw3ICsxMTM1LDcgQEAKIAl9CiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIG91dDoKLQlyZXR1cm4gcmV0ID4gMCA/IEVJTyA6IHJldDsKKwlyZXR1cm4gcmV0ID4gMCA/IC1FSU8gOiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnRyZnNfZmlsZV92bV9vcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCA4Y2QxMDk5Li40ZGViMjgwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTE2ODEsMjQgKzE2ODEsNiBAQAogICogYmVmb3JlIHdlIHN0YXJ0IHRoZSB0cmFuc2FjdGlvbi4gIEl0IGxpbWl0cyB0aGUgYW1vdW50IG9mIGJ0cmVlCiAgKiByZWFkcyByZXF1aXJlZCB3aGlsZSBpbnNpZGUgdGhlIHRyYW5zYWN0aW9uLgogICovCi1zdGF0aWMgbm9pbmxpbmUgdm9pZCByZWFkYV9jc3VtKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCXN0cnVjdCBidHJmc19wYXRoICpwYXRoLAotCQkJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZF9leHRlbnQpCi17Ci0Jc3RydWN0IGJ0cmZzX29yZGVyZWRfc3VtICpzdW07Ci0JdTY0IGJ5dGVucjsKLQotCXN1bSA9IGxpc3RfZW50cnkob3JkZXJlZF9leHRlbnQtPmxpc3QubmV4dCwgc3RydWN0IGJ0cmZzX29yZGVyZWRfc3VtLAotCQkJIGxpc3QpOwotCWJ5dGVuciA9IHN1bS0+c3Vtc1swXS5ieXRlbnI7Ci0KLQkvKgotCSAqIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlc3VsdHMsIHRoZSBwb2ludCBvZiB0aGlzIHNlYXJjaCBpcwotCSAqIGp1c3QgdG8gZ2V0IHRoZSBidHJlZSBsZWF2ZXMgaW50byByYW0KLQkgKi8KLQlidHJmc19sb29rdXBfY3N1bShOVUxMLCByb290LT5mc19pbmZvLT5jc3VtX3Jvb3QsIHBhdGgsIGJ5dGVuciwgMCk7Ci19Ci0KIC8qIGFzIG9yZGVyZWQgZGF0YSBJTyBmaW5pc2hlcywgdGhpcyBnZXRzIGNhbGxlZCBzbyB3ZSBjYW4gZmluaXNoCiAgKiBhbiBvcmRlcmVkIGV4dGVudCBpZiB0aGUgcmFuZ2Ugb2YgYnl0ZXMgaW4gdGhlIGZpbGUgaXQgY292ZXJzIGFyZQogICogZnVsbHkgd3JpdHRlbi4KQEAgLTE3MDksNyArMTY5MSw2IEBACiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CiAJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkX2V4dGVudCA9IE5VTEw7CiAJc3RydWN0IGV4dGVudF9pb190cmVlICppb190cmVlID0gJkJUUkZTX0koaW5vZGUpLT5pb190cmVlOwotCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCBjb21wcmVzc2VkID0gMDsKIAlpbnQgcmV0OwogCkBAIC0xNzE3LDMyICsxNjk4LDkgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIGJlZm9yZSB3ZSBqb2luIHRoZSB0cmFuc2FjdGlvbiwgdHJ5IHRvIGRvIHNvbWUgb2Ygb3VyIElPLgotCSAqIFRoaXMgd2lsbCBsaW1pdCB0aGUgYW1vdW50IG9mIElPIHRoYXQgd2UgaGF2ZSB0byBkbyB3aXRoCi0JICogdGhlIHRyYW5zYWN0aW9uIHJ1bm5pbmcuICBXZSdyZSB1bmxpa2VseSB0byBuZWVkIHRvIGRvIGFueQotCSAqIElPIGlmIHRoZSBmaWxlIGV4dGVudHMgYXJlIG5ldywgdGhlIGRpc2tfaV9zaXplIGNoZWNrcwotCSAqIGNvdmVycyB0aGUgbW9zdCBjb21tb24gY2FzZS4KLQkgKi8KLQlpZiAoc3RhcnQgPCBCVFJGU19JKGlub2RlKS0+ZGlza19pX3NpemUpIHsKLQkJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQkJaWYgKHBhdGgpIHsKLQkJCXJldCA9IGJ0cmZzX2xvb2t1cF9maWxlX2V4dGVudChOVUxMLCByb290LCBwYXRoLAotCQkJCQkJICAgICAgIGlub2RlLT5pX2lubywKLQkJCQkJCSAgICAgICBzdGFydCwgMCk7Ci0JCQlvcmRlcmVkX2V4dGVudCA9IGJ0cmZzX2xvb2t1cF9vcmRlcmVkX2V4dGVudChpbm9kZSwKLQkJCQkJCQkJICAgICBzdGFydCk7Ci0JCQlpZiAoIWxpc3RfZW1wdHkoJm9yZGVyZWRfZXh0ZW50LT5saXN0KSkgewotCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKLQkJCQlyZWFkYV9jc3VtKHJvb3QsIHBhdGgsIG9yZGVyZWRfZXh0ZW50KTsKLQkJCX0KLQkJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQkJfQotCX0KLQotCWlmICghb3JkZXJlZF9leHRlbnQpCi0JCW9yZGVyZWRfZXh0ZW50ID0gYnRyZnNfbG9va3VwX29yZGVyZWRfZXh0ZW50KGlub2RlLCBzdGFydCk7CisJb3JkZXJlZF9leHRlbnQgPSBidHJmc19sb29rdXBfb3JkZXJlZF9leHRlbnQoaW5vZGUsIHN0YXJ0KTsKIAlCVUdfT04oIW9yZGVyZWRfZXh0ZW50KTsKKwogCWlmICh0ZXN0X2JpdChCVFJGU19PUkRFUkVEX05PQ09XLCAmb3JkZXJlZF9leHRlbnQtPmZsYWdzKSkgewogCQlCVUdfT04oIWxpc3RfZW1wdHkoJm9yZGVyZWRfZXh0ZW50LT5saXN0KSk7CiAJCXJldCA9IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgMCwgb3JkZXJlZF9leHRlbnQpOwpAQCAtNTg0MSw3ICs1Nzk5LDkgQEAKIAkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJCUJUUkZTX0koaW5vZGUpLT5mbGFncyB8PSBCVFJGU19JTk9ERV9QUkVBTExPQzsKIAkJaWYgKCEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpICYmCi0JCSAgICBjdXJfb2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkgeworCQkJKGFjdHVhbF9sZW4gPiBpbm9kZS0+aV9zaXplKSAmJgorCQkJKGN1cl9vZmZzZXQgPiBpbm9kZS0+aV9zaXplKSkgeworCiAJCQlpZiAoY3VyX29mZnNldCA+IGFjdHVhbF9sZW4pCiAJCQkJaV9zaXplICA9IGFjdHVhbF9sZW47CiAJCQllbHNlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKaW5kZXggZWQzZTRhMi4uYWI3YWI1MyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwpAQCAtMzc2NCw3ICszNzY0LDggQEAKIAkJCQkgICAgICAgQlRSRlNfREFUQV9SRUxPQ19UUkVFX09CSkVDVElEKTsKIAkJaWYgKElTX0VSUihmc19yb290KSkKIAkJCWVyciA9IFBUUl9FUlIoZnNfcm9vdCk7Ci0JCWJ0cmZzX29ycGhhbl9jbGVhbnVwKGZzX3Jvb3QpOworCQllbHNlCisJCQlidHJmc19vcnBoYW5fY2xlYW51cChmc19yb290KTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYwppbmRleCAxNGFjNDgwLi5lZWI0OTg2IDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL25hbWVpLmMKKysrIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCkBAIC0zNDgsNyArMzQ4LDE3IEBACiAJZGlyID0gZGdldF9wYXJlbnQob2JqZWN0LT5kZW50cnkpOwogCiAJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwotCXJldCA9IGNhY2hlZmlsZXNfYnVyeV9vYmplY3QoY2FjaGUsIGRpciwgb2JqZWN0LT5kZW50cnkpOworCisJLyogd2UgbmVlZCB0byBjaGVjayB0aGF0IG91ciBwYXJlbnQgaXMgX3N0aWxsXyBvdXIgcGFyZW50IC0gaXQgbWF5IGhhdmUKKwkgKiBiZWVuIHJlbmFtZWQgKi8KKwlpZiAoZGlyID09IG9iamVjdC0+ZGVudHJ5LT5kX3BhcmVudCkgeworCQlyZXQgPSBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBkaXIsIG9iamVjdC0+ZGVudHJ5KTsKKwl9IGVsc2UgeworCQkvKiBpdCBnb3QgbW92ZWQsIHByZXN1bWFibHkgYnkgY2FjaGVmaWxlc2QgY3VsbGluZyBpdCwgc28gaXQncworCQkgKiBubyBsb25nZXIgaW4gdGhlIGtleSBwYXRoIGFuZCB3ZSBjYW4gaWdub3JlIGl0ICovCisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJcmV0ID0gMDsKKwl9CiAKIAlkcHV0KGRpcik7CiAJX2xlYXZlKCIgPSAlZCIsIHJldCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL0NIQU5HRVMgYi9mcy9jaWZzL0NIQU5HRVMKaW5kZXggN2IyNjAwYi4uNDk1MDNkMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9DSEFOR0VTCisrKyBiL2ZzL2NpZnMvQ0hBTkdFUwpAQCAtMSwzICsxLDcgQEAKK1ZlcnNpb24gMS42MgorLS0tLS0tLS0tLS0tCitBZGQgc29ja29wdD1UQ1BfTk9ERUxBWSBtb3VudCBvcHRpb24uCisKIFZlcnNpb24gMS42MQogLS0tLS0tLS0tLS0tCiBGaXggYXBwZW5kIHByb2JsZW0gdG8gU2FtYmEgc2VydmVycyAoZmlsZXMgb3BlbmVkIHdpdGggT19BUFBFTkQgY291bGQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGFjMmIyNGMuLjc4YzFiODYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtMTEzLDUgKzExMyw1IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGNpZnNfZXhwb3J0X29wczsKICNlbmRpZiAvKiBFWFBFUklNRU5UQUwgKi8KIAotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS42MSIKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNjIiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggNGIzNWY3ZS4uZWQ3NTFiYiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMTQ5LDYgKzE0OSw3IEBACiAJYm9vbCBzdmxvY2FsOjE7CQkJLyogbG9jYWwgc2VydmVyIG9yIHJlbW90ZSAqLwogCWJvb2wgbm9ibG9ja3NuZDsJCS8qIHVzZSBibG9ja2luZyBzZW5kbXNnICovCiAJYm9vbCBub2F1dG90dW5lOwkJLyogZG8gbm90IGF1dG90dW5lIHNlbmQgYnVmIHNpemVzICovCisJYm9vbCB0Y3Bfbm9kZWxheTsKIAlhdG9taWNfdCBpbkZsaWdodDsgIC8qIG51bWJlciBvZiByZXF1ZXN0cyBvbiB0aGUgd2lyZSB0byBzZXJ2ZXIgKi8KICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAlhdG9taWNfdCBpblNlbmQ7IC8qIHJlcXVlc3RzIHRyeWluZyB0byBzZW5kICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDNiYmNhYTcuLjJlOWUwOWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC05OCw3ICs5OCw3IEBACiAJYm9vbCBub3N0cmljdHN5bmM6MTsgLyogZG8gbm90IGZvcmNlIGV4cGVuc2l2ZSBTTUJmbHVzaCBvbiBldmVyeSBzeW5jICovCiAJdW5zaWduZWQgaW50IHJzaXplOwogCXVuc2lnbmVkIGludCB3c2l6ZTsKLQl1bnNpZ25lZCBpbnQgc29ja29wdDsKKwlib29sIHNvY2tvcHRfdGNwX25vZGVsYXk6MTsKIAl1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydDsKIAljaGFyICpwcmVwYXRoOwogfTsKQEAgLTExNDIsOSArMTE0MiwxMSBAQAogCQkJCQlzaW1wbGVfc3RydG91bCh2YWx1ZSwgJnZhbHVlLCAwKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic29ja29wdCIsIDUpID09IDApIHsKLQkJCWlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKLQkJCQl2b2wtPnNvY2tvcHQgPQotCQkJCQlzaW1wbGVfc3RydG91bCh2YWx1ZSwgJnZhbHVlLCAwKTsKKwkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgeworCQkJCWNFUlJPUigxLCAoIm5vIHNvY2tldCBvcHRpb24gc3BlY2lmaWVkIikpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChzdHJuaWNtcCh2YWx1ZSwgIlRDUF9OT0RFTEFZIiwgMTEpID09IDApIHsKKwkJCQl2b2wtPnNvY2tvcHRfdGNwX25vZGVsYXkgPSAxOwogCQkJfQogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJuZXRiaW9zbmFtZSIsIDQpID09IDApIHsKIAkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSB8fCAoKnZhbHVlID09ICcgJykpIHsKQEAgLTE1MTQsNiArMTUxNiw3IEBACiAKIAl0Y3Bfc2VzLT5ub2Jsb2Nrc25kID0gdm9sdW1lX2luZm8tPm5vYmxvY2tzbmQ7CiAJdGNwX3Nlcy0+bm9hdXRvdHVuZSA9IHZvbHVtZV9pbmZvLT5ub2F1dG90dW5lOworCXRjcF9zZXMtPnRjcF9ub2RlbGF5ID0gdm9sdW1lX2luZm8tPnNvY2tvcHRfdGNwX25vZGVsYXk7CiAJYXRvbWljX3NldCgmdGNwX3Nlcy0+aW5GbGlnaHQsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRjcF9zZXMtPnJlc3BvbnNlX3EpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRjcF9zZXMtPnJlcXVlc3RfcSk7CkBAIC0xNzY0LDYgKzE3NjcsNyBAQAogaXB2NF9jb25uZWN0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKIHsKIAlpbnQgcmMgPSAwOworCWludCB2YWw7CiAJYm9vbCBjb25uZWN0ZWQgPSBmYWxzZTsKIAlfX2JlMTYgb3JpZ19wb3J0ID0gMDsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7CkBAIC0xODQ1LDYgKzE4NDksMTQgQEAKIAkJCXNvY2tldC0+c2stPnNrX3JjdmJ1ZiA9IDE0MCAqIDEwMjQ7CiAJfQogCisJaWYgKHNlcnZlci0+dGNwX25vZGVsYXkpIHsKKwkJdmFsID0gMTsKKwkJcmMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrZXQsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLAorCQkJCShjaGFyICopJnZhbCwgc2l6ZW9mKHZhbCkpOworCQlpZiAocmMpCisJCQljRllJKDEsICgic2V0IFRDUF9OT0RFTEFZIHNvY2tldCBvcHRpb24gZXJyb3IgJWQiLCByYykpOworCX0KKwogCSBjRllJKDEsICgic25kYnVmICVkIHJjdmJ1ZiAlZCByY3Z0aW1lbyAweCVseCIsCiAJCSBzb2NrZXQtPnNrLT5za19zbmRidWYsCiAJCSBzb2NrZXQtPnNrLT5za19yY3ZidWYsIHNvY2tldC0+c2stPnNrX3JjdnRpbWVvKSk7CkBAIC0xOTE2LDYgKzE5MjgsNyBAQAogaXB2Nl9jb25uZWN0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKIHsKIAlpbnQgcmMgPSAwOworCWludCB2YWw7CiAJYm9vbCBjb25uZWN0ZWQgPSBmYWxzZTsKIAlfX2JlMTYgb3JpZ19wb3J0ID0gMDsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7CkBAIC0xOTg3LDYgKzIwMDAsMTUgQEAKIAkgKi8KIAlzb2NrZXQtPnNrLT5za19yY3Z0aW1lbyA9IDcgKiBIWjsKIAlzb2NrZXQtPnNrLT5za19zbmR0aW1lbyA9IDUgKiBIWjsKKworCWlmIChzZXJ2ZXItPnRjcF9ub2RlbGF5KSB7CisJCXZhbCA9IDE7CisJCXJjID0ga2VybmVsX3NldHNvY2tvcHQoc29ja2V0LCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKKwkJCQkoY2hhciAqKSZ2YWwsIHNpemVvZih2YWwpKTsKKwkJaWYgKHJjKQorCQkJY0ZZSSgxLCAoInNldCBUQ1BfTk9ERUxBWSBzb2NrZXQgb3B0aW9uIGVycm9yICVkIiwgcmMpKTsKKwl9CisKIAlzZXJ2ZXItPnNzb2NrZXQgPSBzb2NrZXQ7CiAKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggY2YxOGVlNy4uZTNmZGE5NyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtMTc2Miw4ICsxNzYyLDE4IEBACiAJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAl9CiAKLQlpZiAoIXJjKQorCWlmICghcmMpIHsKIAkJcmMgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRycyk7CisKKwkJLyogZm9yY2UgcmV2YWxpZGF0ZSB3aGVuIGFueSBvZiB0aGVzZSB0aW1lcyBhcmUgc2V0IHNpbmNlIHNvbWUKKwkJICAgb2YgdGhlIGZzIHR5cGVzIChlZyBleHQzLCBmYXQpIGRvIG5vdCBoYXZlIGZpbmUgZW5vdWdoCisJCSAgIHRpbWUgZ3JhbnVsYXJpdHkgdG8gbWF0Y2ggcHJvdG9jb2wsIGFuZCB3ZSBkbyBub3QgaGF2ZSBhCisJCSAgIGEgd2F5ICh5ZXQpIHRvIHF1ZXJ5IHRoZSBzZXJ2ZXIgZnMncyB0aW1lIGdyYW51bGFyaXR5IChhbmQKKwkJICAgd2hldGhlciBpdCByb3VuZHMgdGltZXMgZG93bikuCisJCSovCisJCWlmICghcmMgJiYgKGF0dHJzLT5pYV92YWxpZCAmIChBVFRSX01USU1FIHwgQVRUUl9DVElNRSkpKQorCQkJY2lmc0lub2RlLT50aW1lID0gMDsKKwl9CiBvdXQ6CiAJa2ZyZWUoYXJncyk7CiAJa2ZyZWUoZnVsbF9wYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggZjg0MDYyZi4uYzM0M2IxNCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTc3LDYgKzc3LDExIEBACiAKIAljRllJKDEsICgiRm9yICVzIiwgbmFtZS0+bmFtZSkpOwogCisJaWYgKHBhcmVudC0+ZF9vcCAmJiBwYXJlbnQtPmRfb3AtPmRfaGFzaCkKKwkJcGFyZW50LT5kX29wLT5kX2hhc2gocGFyZW50LCBuYW1lKTsKKwllbHNlCisJCW5hbWUtPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOworCiAJZGVudHJ5ID0gZF9sb29rdXAocGFyZW50LCBuYW1lKTsKIAlpZiAoZGVudHJ5KSB7CiAJCS8qIEZJWE1FOiBjaGVjayBmb3IgaW5vZGUgbnVtYmVyIGNoYW5nZXM/ICovCkBAIC02NjYsMTIgKzY3MSwxMSBAQAogCQkJCQkgICBtaW4obGVuLCBtYXhfbGVuKSwgbmx0LAogCQkJCQkgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJCXBxc3QtPmxlbiAtPSBubHNfbnVsbHNpemUobmx0KTsKIAl9IGVsc2UgewogCQlwcXN0LT5uYW1lID0gZmlsZW5hbWU7CiAJCXBxc3QtPmxlbiA9IGxlbjsKIAl9Ci0JcHFzdC0+aGFzaCA9IGZ1bGxfbmFtZV9oYXNoKHBxc3QtPm5hbWUsIHBxc3QtPmxlbik7Ci0vKgljRllJKDEsICgiZmlsbGRpciBvbiAlcyIscHFzdC0+bmFtZSkpOyAgKi8KIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc2Vzcy5jIGIvZnMvY2lmcy9zZXNzLmMKaW5kZXggNzA4NWE2Mi4uYWFhOWMxYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zZXNzLmMKKysrIGIvZnMvY2lmcy9zZXNzLmMKQEAgLTIyMyw5ICsyMjMsOSBAQAogCQkvKiBudWxsIHVzZXIgbW91bnQgKi8KIAkJKmJjY19wdHIgPSAwOwogCQkqKGJjY19wdHIrMSkgPSAwOwotCX0gZWxzZSB7IC8qIDMwMCBzaG91bGQgYmUgbG9uZyBlbm91Z2ggZm9yIGFueSBjb25jZWl2YWJsZSB1c2VyIG5hbWUgKi8KKwl9IGVsc2UgewogCQlieXRlc19yZXQgPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgc2VzLT51c2VyTmFtZSwKLQkJCQkJICAzMDAsIG5sc19jcCk7CisJCQkJCSAgTUFYX1VTRVJOQU1FX1NJWkUsIG5sc19jcCk7CiAJfQogCWJjY19wdHIgKz0gMiAqIGJ5dGVzX3JldDsKIAliY2NfcHRyICs9IDI7IC8qIGFjY291bnQgZm9yIG51bGwgdGVybWluYXRpb24gKi8KQEAgLTI0NiwxMSArMjQ2LDEwIEBACiAJLyogY29weSB1c2VyICovCiAJaWYgKHNlcy0+dXNlck5hbWUgPT0gTlVMTCkgewogCQkvKiBCQiB3aGF0IGFib3V0IG51bGwgdXNlciBtb3VudHMgLSBjaGVjayB0aGF0IHdlIGRvIHRoaXMgQkIgKi8KLQl9IGVsc2UgeyAvKiAzMDAgc2hvdWxkIGJlIGxvbmcgZW5vdWdoIGZvciBhbnkgY29uY2VpdmFibGUgdXNlciBuYW1lICovCi0JCXN0cm5jcHkoYmNjX3B0ciwgc2VzLT51c2VyTmFtZSwgMzAwKTsKKwl9IGVsc2UgeworCQlzdHJuY3B5KGJjY19wdHIsIHNlcy0+dXNlck5hbWUsIE1BWF9VU0VSTkFNRV9TSVpFKTsKIAl9Ci0JLyogQkIgaW1wcm92ZSBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KLQliY2NfcHRyICs9IHN0cm5sZW4oc2VzLT51c2VyTmFtZSwgMzAwKTsKKwliY2NfcHRyICs9IHN0cm5sZW4oc2VzLT51c2VyTmFtZSwgTUFYX1VTRVJOQU1FX1NJWkUpOwogCSpiY2NfcHRyID0gMDsKIAliY2NfcHRyKys7IC8qIGFjY291bnQgZm9yIG51bGwgdGVybWluYXRpb24gKi8KIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCBjNWM0NWRlLi4wY2E5ZWM0IDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtMzAxLDYgKzMwMSwxMiBAQAogCXUzMiBkYXRhOwogCXZvaWQgX191c2VyICpkeGZlcnA7CiAJaW50IGVycjsKKwlpbnQgaW50ZXJmYWNlX2lkOworCisJaWYgKGdldF91c2VyKGludGVyZmFjZV9pZCwgJnNnaW8zMi0+aW50ZXJmYWNlX2lkKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGludGVyZmFjZV9pZCAhPSAnUycpCisJCXJldHVybiBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpc2dpbzMyKTsKIAogCWlmIChnZXRfdXNlcihpb3ZlY19jb3VudCwgJnNnaW8zMi0+aW92ZWNfY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTkzNiw2ICs5NDIsNyBAQAogQ09NUEFUSUJMRV9JT0NUTChUSU9DTElOVVgpCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NTQlJLKQogQ09NUEFUSUJMRV9JT0NUTChUSU9DQ0JSSykKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0dTSUQpCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NHSUNPVU5UKQogLyogTGl0dGxlIHQgKi8KIENPTVBBVElCTEVfSU9DVEwoVElPQ0dFVEQpCkBAIC0xMDM4LDYgKzEwNDUsOCBAQAogI2lmZGVmIENPTkZJR19CTE9DSwogLyogbG9vcCAqLwogSUdOT1JFX0lPQ1RMKExPT1BfQ0xSX0ZEKQorLyogbWQgY2FsbHMgdGhpcyBvbiByYW5kb20gYmxvY2tkZXZzICovCitJR05PUkVfSU9DVEwoUkFJRF9WRVJTSU9OKQogLyogU0cgc3R1ZmYgKi8KIENPTVBBVElCTEVfSU9DVEwoU0dfU0VUX1RJTUVPVVQpCiBDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9USU1FT1VUKQpkaWZmIC0tZ2l0IGEvZnMvZGxtL2FzdC5jIGIvZnMvZGxtL2FzdC5jCmluZGV4IGRjMmFkNjAuLjQzMTRmMGQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9hc3QuYworKysgYi9mcy9kbG0vYXN0LmMKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgogKiogIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywxMCBAQAogCXNwaW5fdW5sb2NrKCZhc3RfcXVldWVfbG9jayk7CiB9CiAKLXZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBiYXN0bW9kZSkKK3ZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKQogewogCWlmIChsa2ItPmxrYl9mbGFncyAmIERMTV9JRkxfVVNFUikgewotCQlkbG1fdXNlcl9hZGRfYXN0KGxrYiwgdHlwZSwgYmFzdG1vZGUpOworCQlkbG1fdXNlcl9hZGRfYXN0KGxrYiwgdHlwZSwgbW9kZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ0LDEwICs0NCwyMSBAQAogCWlmICghKGxrYi0+bGtiX2FzdF90eXBlICYgKEFTVF9DT01QIHwgQVNUX0JBU1QpKSkgewogCQlrcmVmX2dldCgmbGtiLT5sa2JfcmVmKTsKIAkJbGlzdF9hZGRfdGFpbCgmbGtiLT5sa2JfYXN0cXVldWUsICZhc3RfcXVldWUpOworCQlsa2ItPmxrYl9hc3RfZmlyc3QgPSB0eXBlOwogCX0KKworCS8qIHNhbml0eSBjaGVjaywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLworCisJaWYgKCh0eXBlID09IEFTVF9DT01QKSAmJiAobGtiLT5sa2JfYXN0X3R5cGUgJiBBU1RfQ09NUCkpCisJCWxvZ19wcmludCgicmVwZWF0IGNhc3QgJWQgY2FzdG1vZGUgJWQgbG9jayAleCAlcyIsCisJCQkgIG1vZGUsIGxrYi0+bGtiX2Nhc3Rtb2RlLAorCQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19uYW1lKTsKKwogCWxrYi0+bGtiX2FzdF90eXBlIHw9IHR5cGU7Ci0JaWYgKGJhc3Rtb2RlKQotCQlsa2ItPmxrYl9iYXN0bW9kZSA9IGJhc3Rtb2RlOworCWlmICh0eXBlID09IEFTVF9CQVNUKQorCQlsa2ItPmxrYl9iYXN0bW9kZSA9IG1vZGU7CisJZWxzZQorCQlsa2ItPmxrYl9jYXN0bW9kZSA9IG1vZGU7CiAJc3Bpbl91bmxvY2soJmFzdF9xdWV1ZV9sb2NrKTsKIAogCXNldF9iaXQoV0FLRV9BU1RTLCAmYXN0ZF93YWtlZmxhZ3MpOwpAQCAtNTksOSArNzAsOSBAQAogCXN0cnVjdCBkbG1fbHMgKmxzID0gTlVMTDsKIAlzdHJ1Y3QgZGxtX3JzYiAqciA9IE5VTEw7CiAJc3RydWN0IGRsbV9sa2IgKmxrYjsKLQl2b2lkICgqY2FzdCkgKHZvaWQgKmFzdHBhcmFtKTsKLQl2b2lkICgqYmFzdCkgKHZvaWQgKmFzdHBhcmFtLCBpbnQgbW9kZSk7Ci0JaW50IHR5cGUgPSAwLCBiYXN0bW9kZTsKKwl2b2lkICgqY2FzdGZuKSAodm9pZCAqYXN0cGFyYW0pOworCXZvaWQgKCpiYXN0Zm4pICh2b2lkICphc3RwYXJhbSwgaW50IG1vZGUpOworCWludCB0eXBlLCBmaXJzdCwgYmFzdG1vZGUsIGNhc3Rtb2RlLCBkb19iYXN0LCBkb19jYXN0LCBsYXN0X2Nhc3Rtb2RlOwogCiByZXBlYXQ6CiAJc3Bpbl9sb2NrKCZhc3RfcXVldWVfbG9jayk7CkBAIC03NSwxNyArODYsNDggQEAKIAkJbGlzdF9kZWwoJmxrYi0+bGtiX2FzdHF1ZXVlKTsKIAkJdHlwZSA9IGxrYi0+bGtiX2FzdF90eXBlOwogCQlsa2ItPmxrYl9hc3RfdHlwZSA9IDA7CisJCWZpcnN0ID0gbGtiLT5sa2JfYXN0X2ZpcnN0OworCQlsa2ItPmxrYl9hc3RfZmlyc3QgPSAwOwogCQliYXN0bW9kZSA9IGxrYi0+bGtiX2Jhc3Rtb2RlOwotCisJCWNhc3Rtb2RlID0gbGtiLT5sa2JfY2FzdG1vZGU7CisJCWNhc3RmbiA9IGxrYi0+bGtiX2FzdGZuOworCQliYXN0Zm4gPSBsa2ItPmxrYl9iYXN0Zm47CiAJCXNwaW5fdW5sb2NrKCZhc3RfcXVldWVfbG9jayk7Ci0JCWNhc3QgPSBsa2ItPmxrYl9hc3RmbjsKLQkJYmFzdCA9IGxrYi0+bGtiX2Jhc3RmbjsKIAotCQlpZiAoKHR5cGUgJiBBU1RfQ09NUCkgJiYgY2FzdCkKLQkJCWNhc3QobGtiLT5sa2JfYXN0cGFyYW0pOworCQlkb19jYXN0ID0gKHR5cGUgJiBBU1RfQ09NUCkgJiYgY2FzdGZuOworCQlkb19iYXN0ID0gKHR5cGUgJiBBU1RfQkFTVCkgJiYgYmFzdGZuOwogCi0JCWlmICgodHlwZSAmIEFTVF9CQVNUKSAmJiBiYXN0KQotCQkJYmFzdChsa2ItPmxrYl9hc3RwYXJhbSwgYmFzdG1vZGUpOworCQkvKiBTa2lwIGEgYmFzdCBpZiBpdHMgYmxvY2tpbmcgbW9kZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisJCSAgIGdyYW50ZWQgbW9kZSBvZiB0aGUgcHJlY2VkaW5nIGNhc3QuICovCisKKwkJaWYgKGRvX2Jhc3QpIHsKKwkJCWlmIChmaXJzdCA9PSBBU1RfQ09NUCkKKwkJCQlsYXN0X2Nhc3Rtb2RlID0gY2FzdG1vZGU7CisJCQllbHNlCisJCQkJbGFzdF9jYXN0bW9kZSA9IGxrYi0+bGtiX2Nhc3Rtb2RlX2RvbmU7CisJCQlpZiAoZGxtX21vZGVzX2NvbXBhdChiYXN0bW9kZSwgbGFzdF9jYXN0bW9kZSkpCisJCQkJZG9fYmFzdCA9IDA7CisJCX0KKworCQlpZiAoZmlyc3QgPT0gQVNUX0NPTVApIHsKKwkJCWlmIChkb19jYXN0KQorCQkJCWNhc3Rmbihsa2ItPmxrYl9hc3RwYXJhbSk7CisJCQlpZiAoZG9fYmFzdCkKKwkJCQliYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0sIGJhc3Rtb2RlKTsKKwkJfSBlbHNlIGlmIChmaXJzdCA9PSBBU1RfQkFTVCkgeworCQkJaWYgKGRvX2Jhc3QpCisJCQkJYmFzdGZuKGxrYi0+bGtiX2FzdHBhcmFtLCBiYXN0bW9kZSk7CisJCQlpZiAoZG9fY2FzdCkKKwkJCQljYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0pOworCQl9IGVsc2UgeworCQkJbG9nX2Vycm9yKGxzLCAiYmFkIGFzdF9maXJzdCAlZCBhc3RfdHlwZSAlZCIsCisJCQkJICBmaXJzdCwgdHlwZSk7CisJCX0KKworCQlpZiAoZG9fY2FzdCkKKwkJCWxrYi0+bGtiX2Nhc3Rtb2RlX2RvbmUgPSBjYXN0bW9kZTsKKwkJaWYgKGRvX2Jhc3QpCisJCQlsa2ItPmxrYl9iYXN0bW9kZV9kb25lID0gYmFzdG1vZGU7CiAKIAkJLyogdGhpcyByZW1vdmVzIHRoZSByZWZlcmVuY2UgYWRkZWQgYnkgZGxtX2FkZF9hc3QKIAkJICAgYW5kIG1heSByZXN1bHQgaW4gdGhlIGxrYiBiZWluZyBmcmVlZCAqLwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2FzdC5oIGIvZnMvZGxtL2FzdC5oCmluZGV4IDFiNWZjNWYuLmJjYjFhYWIgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9hc3QuaAorKysgYi9mcy9kbG0vYXN0LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgotKiogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTEzLDcgKzEzLDcgQEAKICNpZm5kZWYgX19BU1REX0RPVF9IX18KICNkZWZpbmUgX19BU1REX0RPVF9IX18KIAotdm9pZCBkbG1fYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IGJhc3Rtb2RlKTsKK3ZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKTsKIHZvaWQgZGxtX2RlbF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYik7CiAKIHZvaWQgZGxtX2FzdGRfd2FrZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9kZWJ1Z19mcy5jIGIvZnMvZGxtL2RlYnVnX2ZzLmMKaW5kZXggMzc1YTIzNS4uMjlkNjEzOSAxMDA2NDQKLS0tIGEvZnMvZGxtL2RlYnVnX2ZzLmMKKysrIGIvZnMvZGxtL2RlYnVnX2ZzLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQkJbGtiLT5sa2Jfc3RhdHVzLAogCQkJbGtiLT5sa2JfZ3Jtb2RlLAogCQkJbGtiLT5sa2JfcnFtb2RlLAotCQkJbGtiLT5sa2JfaGlnaGJhc3QsCisJCQlsa2ItPmxrYl9iYXN0bW9kZSwKIAkJCXJzYl9sb29rdXAsCiAJCQlsa2ItPmxrYl93YWl0X3R5cGUsCiAJCQlsa2ItPmxrYl9sdmJzZXEsCmRpZmYgLS1naXQgYS9mcy9kbG0vZGxtX2ludGVybmFsLmggYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKaW5kZXggODI2ZDNkYy4uZjYzMmI1OCAxMDA2NDQKLS0tIGEvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCisrKyBiL2ZzL2RsbS9kbG1faW50ZXJuYWwuaApAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqCiAqKiAgQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKioKICoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMjMyLDExICsyMzIsMTcgQEAKIAlpbnQ4X3QJCQlsa2Jfc3RhdHVzOyAgICAgLyogZ3JhbnRlZCwgd2FpdGluZywgY29udmVydCAqLwogCWludDhfdAkJCWxrYl9ycW1vZGU7CS8qIHJlcXVlc3RlZCBsb2NrIG1vZGUgKi8KIAlpbnQ4X3QJCQlsa2JfZ3Jtb2RlOwkvKiBncmFudGVkIGxvY2sgbW9kZSAqLwotCWludDhfdAkJCWxrYl9iYXN0bW9kZTsJLyogcmVxdWVzdGVkIG1vZGUgKi8KIAlpbnQ4X3QJCQlsa2JfaGlnaGJhc3Q7CS8qIGhpZ2hlc3QgbW9kZSBiYXN0IHNlbnQgZm9yICovCisKIAlpbnQ4X3QJCQlsa2Jfd2FpdF90eXBlOwkvKiB0eXBlIG9mIHJlcGx5IHdhaXRpbmcgZm9yICovCiAJaW50OF90CQkJbGtiX3dhaXRfY291bnQ7CiAJaW50OF90CQkJbGtiX2FzdF90eXBlOwkvKiB0eXBlIG9mIGFzdCBxdWV1ZWQgZm9yICovCisJaW50OF90CQkJbGtiX2FzdF9maXJzdDsJLyogdHlwZSBvZiBmaXJzdCBhc3QgcXVldWVkICovCisKKwlpbnQ4X3QJCQlsa2JfYmFzdG1vZGU7CS8qIHJlcSBtb2RlIG9mIHF1ZXVlZCBiYXN0ICovCisJaW50OF90CQkJbGtiX2Nhc3Rtb2RlOwkvKiBnciBtb2RlIG9mIHF1ZXVlZCBjYXN0ICovCisJaW50OF90CQkJbGtiX2Jhc3Rtb2RlX2RvbmU7IC8qIGxhc3QgZGVsaXZlcmVkIGJhc3Rtb2RlICovCisJaW50OF90CQkJbGtiX2Nhc3Rtb2RlX2RvbmU7IC8qIGxhc3QgZGVsaXZlcmVkIGNhc3Rtb2RlICovCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxrYl9pZHRibF9saXN0OwkvKiBsb2Nrc3BhY2UgbGtidGJsICovCiAJc3RydWN0IGxpc3RfaGVhZAlsa2Jfc3RhdGVxdWV1ZTsJLyogcnNiIGcvYy93IGxpc3QgKi8KZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2NrLmMgYi9mcy9kbG0vbG9jay5jCmluZGV4IDljMGMxZGIuLjQ2ZmZkM2UgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2NrLmMKKysrIGIvZnMvZGxtL2xvY2suYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqCi0qKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKioKICoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJbGtiLT5sa2JfbGtzYi0+c2Jfc3RhdHVzID0gcnY7CiAJbGtiLT5sa2JfbGtzYi0+c2JfZmxhZ3MgPSBsa2ItPmxrYl9zYmZsYWdzOwogCi0JZGxtX2FkZF9hc3QobGtiLCBBU1RfQ09NUCwgMCk7CisJZGxtX2FkZF9hc3QobGtiLCBBU1RfQ09NUCwgbGtiLT5sa2JfZ3Jtb2RlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX2Nhc3Rfb3ZlcmxhcChzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYikKQEAgLTMyMCwxMCArMzIwLDEyIEBACiB7CiAJbGtiLT5sa2JfdGltZV9iYXN0ID0ga3RpbWVfZ2V0KCk7CiAKLQlpZiAoaXNfbWFzdGVyX2NvcHkobGtiKSkKKwlpZiAoaXNfbWFzdGVyX2NvcHkobGtiKSkgeworCQlsa2ItPmxrYl9iYXN0bW9kZSA9IHJxbW9kZTsgLyogcHJpbnRlZCBieSBkZWJ1Z2ZzICovCiAJCXNlbmRfYmFzdChyLCBsa2IsIHJxbW9kZSk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWRsbV9hZGRfYXN0KGxrYiwgQVNUX0JBU1QsIHJxbW9kZSk7CisJfQogfQogCiAvKgpAQCAtMjI4MCwyMCArMjI4MiwzMCBAQAogCWlmIChjYW5fYmVfcXVldWVkKGxrYikpIHsKIAkJZXJyb3IgPSAtRUlOUFJPR1JFU1M7CiAJCWFkZF9sa2IociwgbGtiLCBETE1fTEtTVFNfV0FJVElORyk7Ci0JCXNlbmRfYmxvY2tpbmdfYXN0cyhyLCBsa2IpOwogCQlhZGRfdGltZW91dChsa2IpOwogCQlnb3RvIG91dDsKIAl9CiAKIAllcnJvciA9IC1FQUdBSU47Ci0JaWYgKGZvcmNlX2Jsb2NraW5nX2FzdHMobGtiKSkKLQkJc2VuZF9ibG9ja2luZ19hc3RzX2FsbChyLCBsa2IpOwogCXF1ZXVlX2Nhc3QociwgbGtiLCAtRUFHQUlOKTsKLQogIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX3JlcXVlc3RfZWZmZWN0cyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYiwKKwkJCSAgICAgICBpbnQgZXJyb3IpCit7CisJc3dpdGNoIChlcnJvcikgeworCWNhc2UgLUVBR0FJTjoKKwkJaWYgKGZvcmNlX2Jsb2NraW5nX2FzdHMobGtiKSkKKwkJCXNlbmRfYmxvY2tpbmdfYXN0c19hbGwociwgbGtiKTsKKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCXNlbmRfYmxvY2tpbmdfYXN0cyhyLCBsa2IpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZG9fY29udmVydChzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYikKIHsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtMjMwNCw3ICsyMzE2LDYgQEAKIAlpZiAoY2FuX2JlX2dyYW50ZWQociwgbGtiLCAxLCAmZGVhZGxrKSkgewogCQlncmFudF9sb2NrKHIsIGxrYik7CiAJCXF1ZXVlX2Nhc3QociwgbGtiLCAwKTsKLQkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMzM0LDcgKzIzNDUsNiBAQAogCQlpZiAoX2Nhbl9iZV9ncmFudGVkKHIsIGxrYiwgMSkpIHsKIAkJCWdyYW50X2xvY2sociwgbGtiKTsKIAkJCXF1ZXVlX2Nhc3QociwgbGtiLCAwKTsKLQkJCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQkvKiBlbHNlIGZhbGwgdGhyb3VnaCBhbmQgbW92ZSB0byBjb252ZXJ0IHF1ZXVlICovCkBAIC0yMzQ0LDI4ICsyMzU0LDQ3IEBACiAJCWVycm9yID0gLUVJTlBST0dSRVNTOwogCQlkZWxfbGtiKHIsIGxrYik7CiAJCWFkZF9sa2IociwgbGtiLCBETE1fTEtTVFNfQ09OVkVSVCk7Ci0JCXNlbmRfYmxvY2tpbmdfYXN0cyhyLCBsa2IpOwogCQlhZGRfdGltZW91dChsa2IpOwogCQlnb3RvIG91dDsKIAl9CiAKIAllcnJvciA9IC1FQUdBSU47Ci0JaWYgKGZvcmNlX2Jsb2NraW5nX2FzdHMobGtiKSkKLQkJc2VuZF9ibG9ja2luZ19hc3RzX2FsbChyLCBsa2IpOwogCXF1ZXVlX2Nhc3QociwgbGtiLCAtRUFHQUlOKTsKLQogIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX2NvbnZlcnRfZWZmZWN0cyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYiwKKwkJCSAgICAgICBpbnQgZXJyb3IpCit7CisJc3dpdGNoIChlcnJvcikgeworCWNhc2UgMDoKKwkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKKwkJLyogZ3JhbnRfcGVuZGluZ19sb2NrcyBhbHNvIHNlbmRzIGJhc3RzICovCisJCWJyZWFrOworCWNhc2UgLUVBR0FJTjoKKwkJaWYgKGZvcmNlX2Jsb2NraW5nX2FzdHMobGtiKSkKKwkJCXNlbmRfYmxvY2tpbmdfYXN0c19hbGwociwgbGtiKTsKKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCXNlbmRfYmxvY2tpbmdfYXN0cyhyLCBsa2IpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZG9fdW5sb2NrKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiKQogewogCXJlbW92ZV9sb2NrKHIsIGxrYik7CiAJcXVldWVfY2FzdChyLCBsa2IsIC1ETE1fRVVOTE9DSyk7Ci0JZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKIAlyZXR1cm4gLURMTV9FVU5MT0NLOwogfQogCitzdGF0aWMgdm9pZCBkb191bmxvY2tfZWZmZWN0cyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYiwKKwkJCSAgICAgIGludCBlcnJvcikKK3sKKwlncmFudF9wZW5kaW5nX2xvY2tzKHIpOworfQorCiAvKiByZXR1cm5zOiAwIGRpZCBub3RoaW5nLCAtRExNX0VDQU5DRUwgY2FuY2VsZWQgbG9jayAqLwogIAogc3RhdGljIGludCBkb19jYW5jZWwoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IpCkBAIC0yMzc1LDEyICsyNDA0LDE4IEBACiAJZXJyb3IgPSByZXZlcnRfbG9jayhyLCBsa2IpOwogCWlmIChlcnJvcikgewogCQlxdWV1ZV9jYXN0KHIsIGxrYiwgLURMTV9FQ0FOQ0VMKTsKLQkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKIAkJcmV0dXJuIC1ETE1fRUNBTkNFTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX2NhbmNlbF9lZmZlY3RzKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJICAgICAgaW50IGVycm9yKQoreworCWlmIChlcnJvcikKKwkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKK30KKwogLyoKICAqIEZvdXIgc3RhZ2UgMyB2YXJpZXRpZXM6CiAgKiBfcmVxdWVzdF9sb2NrKCksIF9jb252ZXJ0X2xvY2soKSwgX3VubG9ja19sb2NrKCksIF9jYW5jZWxfbG9jaygpCkBAIC0yNDAyLDExICsyNDM3LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChpc19yZW1vdGUocikpCisJaWYgKGlzX3JlbW90ZShyKSkgewogCQkvKiByZWNlaXZlX3JlcXVlc3QoKSBjYWxscyBkb19yZXF1ZXN0KCkgb24gcmVtb3RlIG5vZGUgKi8KIAkJZXJyb3IgPSBzZW5kX3JlcXVlc3QociwgbGtiKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZXJyb3IgPSBkb19yZXF1ZXN0KHIsIGxrYik7CisJCS8qIGZvciByZW1vdGUgbG9ja3MgdGhlIHJlcXVlc3RfcmVwbHkgaXMgc2VudAorCQkgICBiZXR3ZWVuIGRvX3JlcXVlc3QgYW5kIGRvX3JlcXVlc3RfZWZmZWN0cyAqLworCQlkb19yZXF1ZXN0X2VmZmVjdHMociwgbGtiLCBlcnJvcik7CisJfQogIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNDE3LDExICsyNDU2LDE1IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGlzX3JlbW90ZShyKSkKKwlpZiAoaXNfcmVtb3RlKHIpKSB7CiAJCS8qIHJlY2VpdmVfY29udmVydCgpIGNhbGxzIGRvX2NvbnZlcnQoKSBvbiByZW1vdGUgbm9kZSAqLwogCQllcnJvciA9IHNlbmRfY29udmVydChyLCBsa2IpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnJvciA9IGRvX2NvbnZlcnQociwgbGtiKTsKKwkJLyogZm9yIHJlbW90ZSBsb2NrcyB0aGUgY29udmVydF9yZXBseSBpcyBzZW50CisJCSAgIGJldHdlZW4gZG9fY29udmVydCBhbmQgZG9fY29udmVydF9lZmZlY3RzICovCisJCWRvX2NvbnZlcnRfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKKwl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNDMyLDExICsyNDc1LDE1IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGlzX3JlbW90ZShyKSkKKwlpZiAoaXNfcmVtb3RlKHIpKSB7CiAJCS8qIHJlY2VpdmVfdW5sb2NrKCkgY2FsbHMgZG9fdW5sb2NrKCkgb24gcmVtb3RlIG5vZGUgKi8KIAkJZXJyb3IgPSBzZW5kX3VubG9jayhyLCBsa2IpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnJvciA9IGRvX3VubG9jayhyLCBsa2IpOworCQkvKiBmb3IgcmVtb3RlIGxvY2tzIHRoZSB1bmxvY2tfcmVwbHkgaXMgc2VudAorCQkgICBiZXR3ZWVuIGRvX3VubG9jayBhbmQgZG9fdW5sb2NrX2VmZmVjdHMgKi8KKwkJZG9fdW5sb2NrX2VmZmVjdHMociwgbGtiLCBlcnJvcik7CisJfQogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjQ0NywxMSArMjQ5NCwxNSBAQAogewogCWludCBlcnJvcjsKIAotCWlmIChpc19yZW1vdGUocikpCisJaWYgKGlzX3JlbW90ZShyKSkgewogCQkvKiByZWNlaXZlX2NhbmNlbCgpIGNhbGxzIGRvX2NhbmNlbCgpIG9uIHJlbW90ZSBub2RlICovCiAJCWVycm9yID0gc2VuZF9jYW5jZWwociwgbGtiKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZXJyb3IgPSBkb19jYW5jZWwociwgbGtiKTsKKwkJLyogZm9yIHJlbW90ZSBsb2NrcyB0aGUgY2FuY2VsX3JlcGx5IGlzIHNlbnQKKwkJICAgYmV0d2VlbiBkb19jYW5jZWwgYW5kIGRvX2NhbmNlbF9lZmZlY3RzICovCisJCWRvX2NhbmNlbF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOworCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTMxOTEsNiArMzI0Miw3IEBACiAJYXR0YWNoX2xrYihyLCBsa2IpOwogCWVycm9yID0gZG9fcmVxdWVzdChyLCBsa2IpOwogCXNlbmRfcmVxdWVzdF9yZXBseShyLCBsa2IsIGVycm9yKTsKKwlkb19yZXF1ZXN0X2VmZmVjdHMociwgbGtiLCBlcnJvcik7CiAKIAl1bmxvY2tfcnNiKHIpOwogCXB1dF9yc2Iocik7CkBAIC0zMjI2LDE1ICszMjc4LDE5IEBACiAJCWdvdG8gb3V0OwogCiAJcmVjZWl2ZV9mbGFncyhsa2IsIG1zKTsKKwogCWVycm9yID0gcmVjZWl2ZV9jb252ZXJ0X2FyZ3MobHMsIGxrYiwgbXMpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmVwbHk7CisJaWYgKGVycm9yKSB7CisJCXNlbmRfY29udmVydF9yZXBseShyLCBsa2IsIGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmVwbHkgPSAhZG93bl9jb252ZXJzaW9uKGxrYik7CiAKIAllcnJvciA9IGRvX2NvbnZlcnQociwgbGtiKTsKLSBvdXRfcmVwbHk6CiAJaWYgKHJlcGx5KQogCQlzZW5kX2NvbnZlcnRfcmVwbHkociwgbGtiLCBlcnJvcik7CisJZG9fY29udmVydF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOwogIG91dDoKIAl1bmxvY2tfcnNiKHIpOwogCXB1dF9yc2Iocik7CkBAIC0zMjY2LDEzICszMzIyLDE2IEBACiAJCWdvdG8gb3V0OwogCiAJcmVjZWl2ZV9mbGFncyhsa2IsIG1zKTsKKwogCWVycm9yID0gcmVjZWl2ZV91bmxvY2tfYXJncyhscywgbGtiLCBtcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZXBseTsKKwlpZiAoZXJyb3IpIHsKKwkJc2VuZF91bmxvY2tfcmVwbHkociwgbGtiLCBlcnJvcik7CisJCWdvdG8gb3V0OworCX0KIAogCWVycm9yID0gZG9fdW5sb2NrKHIsIGxrYik7Ci0gb3V0X3JlcGx5OgogCXNlbmRfdW5sb2NrX3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCWRvX3VubG9ja19lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOwogIG91dDoKIAl1bmxvY2tfcnNiKHIpOwogCXB1dF9yc2Iocik7CkBAIC0zMzA3LDYgKzMzNjYsNyBAQAogCiAJZXJyb3IgPSBkb19jYW5jZWwociwgbGtiKTsKIAlzZW5kX2NhbmNlbF9yZXBseShyLCBsa2IsIGVycm9yKTsKKwlkb19jYW5jZWxfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKICBvdXQ6CiAJdW5sb2NrX3JzYihyKTsKIAlwdXRfcnNiKHIpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2tzcGFjZS5jIGIvZnMvZGxtL2xvY2tzcGFjZS5jCmluZGV4IGMwMTBlY2YuLjI2YThiZDQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2Nrc3BhY2UuYworKysgYi9mcy9kbG0vbG9ja3NwYWNlLmMKQEAgLTE5MSw2ICsxOTEsMTggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgZGxtX3VldmVudChzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCSAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKK3sKKwlzdHJ1Y3QgZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGxtX2xzLCBsc19rb2JqKTsKKworCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tTUEFDRT0lcyIsIGxzLT5sc19uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgZGxtX3VldmVudF9vcHMgPSB7CisJLnVldmVudCA9IGRsbV91ZXZlbnQsCit9OwogCiBpbnQgX19pbml0IGRsbV9sb2Nrc3BhY2VfaW5pdCh2b2lkKQogewpAQCAtMTk5LDcgKzIxMSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmxzbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmxzbGlzdF9sb2NrKTsKIAotCWRsbV9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgiZGxtIiwgTlVMTCwga2VybmVsX2tvYmopOworCWRsbV9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgiZGxtIiwgJmRsbV91ZXZlbnRfb3BzLCBrZXJuZWxfa29iaik7CiAJaWYgKCFkbG1fa3NldCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuIG5vdCBjcmVhdGUga3NldFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS91c2VyLmMgYi9mcy9kbG0vdXNlci5jCmluZGV4IGU3M2E0YmIuLmE0YmZkMzEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS91c2VyLmMKKysrIGIvZnMvZGxtL3VzZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0xNzMsNyArMTczLDcgQEAKIC8qIHdlIGNvdWxkIHBvc3NpYmx5IGNoZWNrIGlmIHRoZSBjYW5jZWwgb2YgYW4gb3JwaGFuIGhhcyByZXN1bHRlZCBpbiB0aGUgbGtiCiAgICBiZWluZyByZW1vdmVkIGFuZCB0aGVuIHJlbW92ZSB0aGF0IGxrYiBmcm9tIHRoZSBvcnBoYW5zIGxpc3QgYW5kIGZyZWUgaXQgKi8KIAotdm9pZCBkbG1fdXNlcl9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgYmFzdG1vZGUpCit2b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKQogewogCXN0cnVjdCBkbG1fbHMgKmxzOwogCXN0cnVjdCBkbG1fdXNlcl9hcmdzICp1YTsKQEAgLTIwNiw4ICsyMDYsMTAgQEAKIAogCWFzdF90eXBlID0gbGtiLT5sa2JfYXN0X3R5cGU7CiAJbGtiLT5sa2JfYXN0X3R5cGUgfD0gdHlwZTsKLQlpZiAoYmFzdG1vZGUpCi0JCWxrYi0+bGtiX2Jhc3Rtb2RlID0gYmFzdG1vZGU7CisJaWYgKHR5cGUgPT0gQVNUX0JBU1QpCisJCWxrYi0+bGtiX2Jhc3Rtb2RlID0gbW9kZTsKKwllbHNlCisJCWxrYi0+bGtiX2Nhc3Rtb2RlID0gbW9kZTsKIAogCWlmICghYXN0X3R5cGUpIHsKIAkJa3JlZl9nZXQoJmxrYi0+bGtiX3JlZik7CmRpZmYgLS1naXQgYS9mcy9kbG0vdXNlci5oIGIvZnMvZGxtL3VzZXIuaAppbmRleCAxYzk2ODY0Li5mMTk2MDkxIDEwMDY0NAotLS0gYS9mcy9kbG0vdXNlci5oCisrKyBiL2ZzL2RsbS91c2VyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtOSw3ICs5LDcgQEAKICNpZm5kZWYgX19VU0VSX0RPVF9IX18KICNkZWZpbmUgX19VU0VSX0RPVF9IX18KIAotdm9pZCBkbG1fdXNlcl9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgYmFzdG1vZGUpOwordm9pZCBkbG1fdXNlcl9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgbW9kZSk7CiBpbnQgZGxtX3VzZXJfaW5pdCh2b2lkKTsKIHZvaWQgZGxtX3VzZXJfZXhpdCh2b2lkKTsKIGludCBkbG1fZGV2aWNlX2RlcmVnaXN0ZXIoc3RydWN0IGRsbV9scyAqbHMpOwpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDY3NWMzZjQuLmNjZTZiYmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTU3MSw2ICs1NzEsOSBAQAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAl1bnNpZ25lZCBsb25nIHN0YWNrX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBzdGFja19zaXplOworCXVuc2lnbmVkIGxvbmcgc3RhY2tfZXhwYW5kOworCXVuc2lnbmVkIGxvbmcgcmxpbV9zdGFjazsKIAogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCiAJLyogTGltaXQgc3RhY2sgc2l6ZSB0byAxR0IgKi8KQEAgLTYyNywxMCArNjMwLDIzIEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCisJc3RhY2tfZXhwYW5kID0gRVhUUkFfU1RBQ0tfVk1fUEFHRVMgKiBQQUdFX1NJWkU7CisJc3RhY2tfc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwkvKgorCSAqIEFsaWduIHRoaXMgZG93biB0byBhIHBhZ2UgYm91bmRhcnkgYXMgZXhwYW5kX3N0YWNrCisJICogd2lsbCBhbGlnbiBpdCB1cC4KKwkgKi8KKwlybGltX3N0YWNrID0gcmxpbWl0KFJMSU1JVF9TVEFDSykgJiBQQUdFX01BU0s7CiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVAKLQlzdGFja19iYXNlID0gdm1hLT52bV9lbmQgKyBFWFRSQV9TVEFDS19WTV9QQUdFUyAqIFBBR0VfU0laRTsKKwlpZiAoc3RhY2tfc2l6ZSArIHN0YWNrX2V4cGFuZCA+IHJsaW1fc3RhY2spCisJCXN0YWNrX2Jhc2UgPSB2bWEtPnZtX3N0YXJ0ICsgcmxpbV9zdGFjazsKKwllbHNlCisJCXN0YWNrX2Jhc2UgPSB2bWEtPnZtX2VuZCArIHN0YWNrX2V4cGFuZDsKICNlbHNlCi0Jc3RhY2tfYmFzZSA9IHZtYS0+dm1fc3RhcnQgLSBFWFRSQV9TVEFDS19WTV9QQUdFUyAqIFBBR0VfU0laRTsKKwlpZiAoc3RhY2tfc2l6ZSArIHN0YWNrX2V4cGFuZCA+IHJsaW1fc3RhY2spCisJCXN0YWNrX2Jhc2UgPSB2bWEtPnZtX2VuZCAtIHJsaW1fc3RhY2s7CisJZWxzZQorCQlzdGFja19iYXNlID0gdm1hLT52bV9zdGFydCAtIHN0YWNrX2V4cGFuZDsKICNlbmRpZgogCXJldCA9IGV4cGFuZF9zdGFjayh2bWEsIHN0YWNrX2Jhc2UpOwogCWlmIChyZXQpCkBAIC05NjEsNiArOTc3LDExIEBACiAJCWdvdG8gb3V0OwogCiAJYnBybS0+bW0gPSBOVUxMOwkJLyogV2UncmUgdXNpbmcgaXQgbm93ICovCisKKwljdXJyZW50LT5mbGFncyAmPSB+UEZfUkFORE9NSVpFOworCWZsdXNoX3RocmVhZCgpOworCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5icHJtLT5wZXJfY2xlYXI7CisKIAlyZXR1cm4gMDsKIAogb3V0OgpAQCAtOTk3LDkgKzEwMTgsNiBAQAogCXRjb21tW2ldID0gJ1wwJzsKIAlzZXRfdGFza19jb21tKGN1cnJlbnQsIHRjb21tKTsKIAotCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9SQU5ET01JWkU7Ci0JZmx1c2hfdGhyZWFkKCk7Ci0KIAkvKiBTZXQgdGhlIG5ldyBtbSB0YXNrIHNpemUuIFdlIGhhdmUgdG8gZG8gdGhhdCBsYXRlIGJlY2F1c2UgaXQgbWF5CiAJICogZGVwZW5kIG9uIFRJRl8zMkJJVCB3aGljaCBpcyBvbmx5IHVwZGF0ZWQgaW4gZmx1c2hfdGhyZWFkKCkgb24KIAkgKiBzb21lIGFyY2hpdGVjdHVyZXMgbGlrZSBwb3dlcnBjCkBAIC0xMDE1LDggKzEwMzMsNiBAQAogCQlzZXRfZHVtcGFibGUoY3VycmVudC0+bW0sIHN1aWRfZHVtcGFibGUpOwogCX0KIAotCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5icHJtLT5wZXJfY2xlYXI7Ci0KIAkvKgogCSAqIEZsdXNoIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHdoZW4gY3Jvc3NpbmcgYQogCSAqIHNlY3VyaXR5IGRvbWFpbjoKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IDVlZjk1M2UuLjk3ZTAxZGMgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtMTk5LDkgKzE5OSw3IEBACiBzdGF0aWMgdm9pZCBmX21vZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHBpZCAqcGlkLCBlbnVtIHBpZF90eXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9yY2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZmlscC0+Zl9vd25lci5sb2NrLCBmbGFncyk7CisJd3JpdGVfbG9ja19pcnEoJmZpbHAtPmZfb3duZXIubG9jayk7CiAJaWYgKGZvcmNlIHx8ICFmaWxwLT5mX293bmVyLnBpZCkgewogCQlwdXRfcGlkKGZpbHAtPmZfb3duZXIucGlkKTsKIAkJZmlscC0+Zl9vd25lci5waWQgPSBnZXRfcGlkKHBpZCk7CkBAIC0yMTMsNyArMjExLDcgQEAKIAkJCWZpbHAtPmZfb3duZXIuZXVpZCA9IGNyZWQtPmV1aWQ7CiAJCX0KIAl9Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmZpbHAtPmZfb3duZXIubG9jaywgZmxhZ3MpOworCXdyaXRlX3VubG9ja19pcnEoJmZpbHAtPmZfb3duZXIubG9jayk7CiB9CiAKIGludCBfX2Zfc2V0b3duKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcGlkICpwaWQsIGVudW0gcGlkX3R5cGUgdHlwZSwKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCA4N2UxMjkwLi4zODAzOWFmIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAllcnJvciA9IGZkOwogI2lmIDEKIAkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAocmN1X2RlcmVmZXJlbmNlKGZkdC0+ZmRbZmRdKSAhPSBOVUxMKSB7CisJaWYgKHJjdV9kZXJlZmVyZW5jZV9yYXcoZmR0LT5mZFtmZF0pICE9IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWxsb2NfZmQ6IHNsb3QgJWQgbm90IE5VTEwhXG4iLCBmZCk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtPmZkW2ZkXSwgTlVMTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IDY5NjUyYzUuLmI5ODQwNGIgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTI1Myw2ICsyNTMsNyBAQAogCWlmIChmaWxlLT5mX29wICYmIGZpbGUtPmZfb3AtPnJlbGVhc2UpCiAJCWZpbGUtPmZfb3AtPnJlbGVhc2UoaW5vZGUsIGZpbGUpOwogCXNlY3VyaXR5X2ZpbGVfZnJlZShmaWxlKTsKKwlpbWFfZmlsZV9mcmVlKGZpbGUpOwogCWlmICh1bmxpa2VseShTX0lTQ0hSKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX2NkZXYgIT0gTlVMTCkpCiAJCWNkZXZfcHV0KGlub2RlLT5pX2NkZXYpOwogCWZvcHNfcHV0KGZpbGUtPmZfb3ApOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCBjMTg5MTNhLi5hOWY1ZTEzIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtODI4LDYgKzgyOCw5IEBACiAJCWlmICghcGFnZSkKIAkJCWJyZWFrOwogCisJCWlmIChtYXBwaW5nX3dyaXRhYmx5X21hcHBlZChtYXBwaW5nKSkKKwkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCiAJCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAJCXRtcCA9IGlvdl9pdGVyX2NvcHlfZnJvbV91c2VyX2F0b21pYyhwYWdlLCBpaSwgb2Zmc2V0LCBieXRlcyk7CiAJCXBhZ2VmYXVsdF9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYm1hcC5jIGIvZnMvZ2ZzMi9ibWFwLmMKaW5kZXggNmQ0NzM3OS4uNTgzZTgyMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9ibWFwLmMKKysrIGIvZnMvZ2ZzMi9ibWFwLmMKQEAgLTU0MSw3ICs1NDEsNyBAQAogCQkJCSpwdHIrKyA9IGNwdV90b19iZTY0KGJuKyspOwogCQkJYnJlYWs7CiAJCX0KLQl9IHdoaWxlIChzdGF0ZSAhPSBBTExPQ19EQVRBKTsKKwl9IHdoaWxlICgoc3RhdGUgIT0gQUxMT0NfREFUQSkgfHwgIWRibG9jayk7CiAKIAlpcC0+aV9oZWlnaHQgPSBoZWlnaHQ7CiAJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgYWxsb2NlZCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggZjQ1NWEwMy4uZjQyNjYzMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtNzY5LDYgKzc2OSw3IEBACiAJaWYgKCFnbCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlhdG9taWNfaW5jKCZzZHAtPnNkX2dsb2NrX2Rpc3Bvc2FsKTsKIAlnbC0+Z2xfZmxhZ3MgPSAwOwogCWdsLT5nbF9uYW1lID0gbmFtZTsKIAlhdG9taWNfc2V0KCZnbC0+Z2xfcmVmLCAxKTsKQEAgLTE1MzgsNiArMTUzOSw5IEBACiAJCXVwX3dyaXRlKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCQltc2xlZXAoMTApOwogCX0KKwlmbHVzaF93b3JrcXVldWUoZ2xvY2tfd29ya3F1ZXVlKTsKKwl3YWl0X2V2ZW50KHNkcC0+c2RfZ2xvY2tfd2FpdCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfZ2xvY2tfZGlzcG9zYWwpID09IDApOworCWdmczJfZHVtcF9sb2Nrc3RhdGUoc2RwKTsKIH0KIAogdm9pZCBnZnMyX2dsb2NrX2ZpbmlzaF90cnVuY2F0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmggYi9mcy9nZnMyL2dsb2NrLmgKaW5kZXggMTNmMGJkMi4uYzAyNjJmYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtMTIzLDcgKzEyMyw3IEBACiAJaW50ICgqbG1fbW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqZnNuYW1lKTsKICAJdm9pZCAoKmxtX3VubW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAJdm9pZCAoKmxtX3dpdGhkcmF3KSAoc3RydWN0IGdmczJfc2JkICpzZHApOwotCXZvaWQgKCpsbV9wdXRfbG9jaykgKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKmdsKTsKKwl2b2lkICgqbG1fcHV0X2xvY2spIChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogCXVuc2lnbmVkIGludCAoKmxtX2xvY2spIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCiAJCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncyk7CiAJdm9pZCAoKmxtX2NhbmNlbCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCA0NzkyMjAwLi5iYzBhZDE1IDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTU0NCw2ICs1NDQsOCBAQAogCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9saXZlX2doOwogCXN0cnVjdCBnZnMyX2dsb2NrICpzZF9yZW5hbWVfZ2w7CiAJc3RydWN0IGdmczJfZ2xvY2sgKnNkX3RyYW5zX2dsOworCXdhaXRfcXVldWVfaGVhZF90IHNkX2dsb2NrX3dhaXQ7CisJYXRvbWljX3Qgc2RfZ2xvY2tfZGlzcG9zYWw7CiAKIAkvKiBJbm9kZSBTdHVmZiAqLwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tfZGxtLmMgYi9mcy9nZnMyL2xvY2tfZGxtLmMKaW5kZXggNDZkZjk4OC4uMGU1ZTBlNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2NrX2RsbS5jCisrKyBiL2ZzL2dmczIvbG9ja19kbG0uYwpAQCAtMjEsNiArMjEsNyBAQAogewogCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IGFyZzsKIAl1bnNpZ25lZCByZXQgPSBnbC0+Z2xfc3RhdGU7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwogCiAJQlVHX09OKGdsLT5nbF9sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9ERU1PVEVEKTsKIApAQCAtMzAsNiArMzEsOCBAQAogCXN3aXRjaCAoZ2wtPmdsX2xrc2Iuc2Jfc3RhdHVzKSB7CiAJY2FzZSAtRExNX0VVTkxPQ0s6IC8qIFVubG9ja2VkLCBzbyBnbG9jayBjYW4gYmUgZnJlZWQgKi8KIAkJa21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzZHAtPnNkX2dsb2NrX2Rpc3Bvc2FsKSkKKwkJCXdha2VfdXAoJnNkcC0+c2RfZ2xvY2tfd2FpdCk7CiAJCXJldHVybjsKIAljYXNlIC1ETE1fRUNBTkNFTDogLyogQ2FuY2VsIHdoaWxlIGdldHRpbmcgbG9jayAqLwogCQlyZXQgfD0gTE1fT1VUX0NBTkNFTEVEOwpAQCAtMTY0LDE0ICsxNjcsMTYgQEAKIAlyZXR1cm4gTE1fT1VUX0FTWU5DOwogfQogCi1zdGF0aWMgdm9pZCBnZGxtX3B1dF9sb2NrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKnB0cikKK3N0YXRpYyB2b2lkIGdkbG1fcHV0X2xvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IHB0cjsKLQlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKIAlpbnQgZXJyb3I7CiAKIAlpZiAoZ2wtPmdsX2xrc2Iuc2JfbGtpZCA9PSAwKSB7CiAJCWttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdsKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNkcC0+c2RfZ2xvY2tfZGlzcG9zYWwpKQorCQkJd2FrZV91cCgmc2RwLT5zZF9nbG9ja193YWl0KTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCBlZGZlZTI0Li5hODZlZDYzIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtODIsNiArODIsOCBAQAogCiAJZ2ZzMl90dW5lX2luaXQoJnNkcC0+c2RfdHVuZSk7CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX2dsb2NrX3dhaXQpOworCWF0b21pY19zZXQoJnNkcC0+c2RfZ2xvY2tfZGlzcG9zYWwsIDApOwogCXNwaW5fbG9ja19pbml0KCZzZHAtPnNkX3N0YXRmc19zcGluKTsKIAogCXNwaW5fbG9ja19pbml0KCZzZHAtPnNkX3JpbmRleF9zcGluKTsKQEAgLTcyMyw3ICs3MjUsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JZXJyb3IgPSAtRUlOVkFMOworCWVycm9yID0gLUVVU0VSUzsKIAlpZiAoIWdmczJfamluZGV4X3NpemUoc2RwKSkgewogCQlmc19lcnIoc2RwLCAibm8gam91cm5hbHMhXG4iKTsKIAkJZ290byBmYWlsX2ppbmRleDsKQEAgLTk4Myw5ICs5ODUsMTcgQEAKIAl7IE9wdF9lcnIsIE5VTEwgfSwKIH07CiAKK3N0YXRpYyB2b2lkIG5vbG9ja19wdXRfbG9jayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOworCWttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdsKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2RwLT5zZF9nbG9ja19kaXNwb3NhbCkpCisJCXdha2VfdXAoJnNkcC0+c2RfZ2xvY2tfd2FpdCk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBub2xvY2tfb3BzID0gewogCS5sbV9wcm90b19uYW1lID0gImxvY2tfbm9sb2NrIiwKLQkubG1fcHV0X2xvY2sgPSBrbWVtX2NhY2hlX2ZyZWUsCisJLmxtX3B1dF9sb2NrID0gbm9sb2NrX3B1dF9sb2NrLAogCS5sbV90b2tlbnMgPSAmbm9sb2NrX3Rva2VucywKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmluZGV4IDc4ZjczY2EuLjg0MzUwZTEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpAQCAtMTA4OCw3ICsxMDg4LDggQEAKIAkJZXJyb3IgPSB2ZnNfZm9sbG93X2xpbmsobmQsIGJ1Zik7CiAJCWlmIChidWYgIT0gYXJyYXkpCiAJCQlrZnJlZShidWYpOwotCX0KKwl9IGVsc2UKKwkJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggMDYwOGY0OS4uNTAzYjg0MiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTU5MSwxMSArNTkxLDcgQEAKIAl1NjQgcmdycF9jb3VudCA9IGlwLT5pX2Rpc2tzaXplOwogCWludCBlcnJvcjsKIAotCWlmIChkb19kaXYocmdycF9jb3VudCwgc2l6ZW9mKHN0cnVjdCBnZnMyX3JpbmRleCkpKSB7Ci0JCWdmczJfY29uc2lzdF9pbm9kZShpcCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQorCWRvX2RpdihyZ3JwX2NvdW50LCBzaXplb2Yoc3RydWN0IGdmczJfcmluZGV4KSk7CiAJY2xlYXJfcmdycGRpKHNkcCk7CiAKIAlmaWxlX3JhX3N0YXRlX2luaXQoJnJhX3N0YXRlLCBpbm9kZS0+aV9tYXBwaW5nKTsKQEAgLTkxNSw3ICs5MTEsNyBAQAogc3RydWN0IGdmczJfYWxsb2MgKmdmczJfYWxsb2NfZ2V0KHN0cnVjdCBnZnMyX2lub2RlICppcCkKIHsKIAlCVUdfT04oaXAtPmlfYWxsb2MgIT0gTlVMTCk7Ci0JaXAtPmlfYWxsb2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2ZzMl9hbGxvYyksIEdGUF9LRVJORUwpOworCWlwLT5pX2FsbG9jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdmczJfYWxsb2MpLCBHRlBfTk9GUyk7CiAJcmV0dXJuIGlwLT5pX2FsbG9jOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggYzI4MmFkNC4uYjlkZDNkYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggOTRhNWU2MC4uYTQ4NTVhZiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC04MjMsNiArODIzLDE3IEBACiB9CiAKIC8qCisgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGtsdWRnZSB0byBkZWFsIHdpdGggImF1dG9tb3VudCIgc3ltbGlua3M7IHByb3BlcgorICogc29sdXRpb24gaXMgdG8gdHJpZ2dlciB0aGVtIG9uIGZvbGxvd19tb3VudCgpLCBzbyB0aGF0IGRvX2xvb2t1cCgpCisgKiB3b3VsZCBEVFJULiAgVG8gYmUga2lsbGVkIGJlZm9yZSAyLjYuMzQtZmluYWwuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZvbGxvd19vbl9maW5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb29rdXBfZmxhZ3MpCit7CisJcmV0dXJuIGlub2RlICYmIHVubGlrZWx5KGlub2RlLT5pX29wLT5mb2xsb3dfbGluaykgJiYKKwkJKChsb29rdXBfZmxhZ3MgJiBMT09LVVBfRk9MTE9XKSB8fCBTX0lTRElSKGlub2RlLT5pX21vZGUpKTsKK30KKworLyoKICAqIE5hbWUgcmVzb2x1dGlvbi4KICAqIFRoaXMgaXMgdGhlIGJhc2ljIG5hbWUgcmVzb2x1dGlvbiBmdW5jdGlvbiwgdHVybmluZyBhIHBhdGhuYW1lIGludG8KICAqIHRoZSBmaW5hbCBkZW50cnkuIFdlIGV4cGVjdCAnYmFzZScgdG8gYmUgcG9zaXRpdmUgYW5kIGEgZGlyZWN0b3J5LgpAQCAtOTQyLDggKzk1Myw3IEBACiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAkJaW5vZGUgPSBuZXh0LmRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKChsb29rdXBfZmxhZ3MgJiBMT09LVVBfRk9MTE9XKQotCQkgICAgJiYgaW5vZGUgJiYgaW5vZGUtPmlfb3AtPmZvbGxvd19saW5rKSB7CisJCWlmIChmb2xsb3dfb25fZmluYWwoaW5vZGUsIGxvb2t1cF9mbGFncykpIHsKIAkJCWVyciA9IGRvX2ZvbGxvd19saW5rKCZuZXh0LCBuZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gcmV0dXJuX2VycjsKQEAgLTE3MzYsOCArMTc0Niw3IEBACiAJCWlmIChuZC5yb290Lm1udCkKIAkJCXBhdGhfcHV0KCZuZC5yb290KTsKIAkJaWYgKCFJU19FUlIoZmlscCkpIHsKLQkJCWVycm9yID0gaW1hX3BhdGhfY2hlY2soJmZpbHAtPmZfcGF0aCwgZmlscC0+Zl9tb2RlICYKLQkJCQkgICAgICAgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKKwkJCWVycm9yID0gaW1hX2ZpbGVfY2hlY2soZmlscCwgYWNjX21vZGUpOwogCQkJaWYgKGVycm9yKSB7CiAJCQkJZnB1dChmaWxwKTsKIAkJCQlmaWxwID0gRVJSX1BUUihlcnJvcik7CkBAIC0xNzk3LDggKzE4MDYsNyBAQAogCX0KIAlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kKTsKIAlpZiAoIUlTX0VSUihmaWxwKSkgewotCQllcnJvciA9IGltYV9wYXRoX2NoZWNrKCZmaWxwLT5mX3BhdGgsIGZpbHAtPmZfbW9kZSAmCi0JCQkgICAgICAgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKKwkJZXJyb3IgPSBpbWFfZmlsZV9jaGVjayhmaWxwLCBhY2NfbW9kZSk7CiAJCWlmIChlcnJvcikgewogCQkJZnB1dChmaWxwKTsKIAkJCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9LY29uZmlnIGIvZnMvbmZzL0tjb25maWcKaW5kZXggNTllNTY3My4uYTQzZDA3ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL0tjb25maWcKKysrIGIvZnMvbmZzL0tjb25maWcKQEAgLTk1LDggKzk1LDcgQEAKIAkgIE1vc3QgcGVvcGxlIHNheSBOIGhlcmUuCiAKIGNvbmZpZyBORlNfRlNDQUNIRQotCWJvb2wgIlByb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlib29sICJQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkZTX0ZTPW0gJiYgRlNDQUNIRSB8fCBORlNfRlM9eSAmJiBGU0NBQ0hFPXkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IE5GUyBkYXRhIHRvIGJlIGNhY2hlZCBsb2NhbGx5IG9uIGRpc2MgdGhyb3VnaApkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IGUxZDQxNWUuLjBkMjg5ODIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTM0Miw2ICszNDIsNyBAQAogCQlkYXRhLT5yZXMuZmF0dHIgPSAmZGF0YS0+ZmF0dHI7CiAJCWRhdGEtPnJlcy5lb2YgPSAwOwogCQlkYXRhLT5yZXMuY291bnQgPSBieXRlczsKKwkJbmZzX2ZhdHRyX2luaXQoJmRhdGEtPmZhdHRyKTsKIAkJbXNnLnJwY19hcmdwID0gJmRhdGEtPmFyZ3M7CiAJCW1zZy5ycGNfcmVzcCA9ICZkYXRhLT5yZXM7CiAKQEAgLTU3NSw2ICs1NzYsNyBAQAogCWRhdGEtPnJlcy5jb3VudCA9IDA7CiAJZGF0YS0+cmVzLmZhdHRyID0gJmRhdGEtPmZhdHRyOwogCWRhdGEtPnJlcy52ZXJmID0gJmRhdGEtPnZlcmY7CisJbmZzX2ZhdHRyX2luaXQoJmRhdGEtPmZhdHRyKTsKIAogCU5GU19QUk9UTyhkYXRhLT5pbm9kZSktPmNvbW1pdF9zZXR1cChkYXRhLCAmbXNnKTsKIApAQCAtNzY2LDYgKzc2OCw3IEBACiAJCWRhdGEtPnJlcy5mYXR0ciA9ICZkYXRhLT5mYXR0cjsKIAkJZGF0YS0+cmVzLmNvdW50ID0gYnl0ZXM7CiAJCWRhdGEtPnJlcy52ZXJmID0gJmRhdGEtPnZlcmY7CisJCW5mc19mYXR0cl9pbml0KCZkYXRhLT5mYXR0cik7CiAKIAkJdGFza19zZXR1cF9kYXRhLnRhc2sgPSAmZGF0YS0+dGFzazsKIAkJdGFza19zZXR1cF9kYXRhLmNhbGxiYWNrX2RhdGEgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggNmI4OTEzMi4uNjNmMjA3MSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC00ODYsNiArNDg2LDggQEAKIHsKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IHJlbGVhc2VfcGFnZSglcClcbiIsIHBhZ2UpOwogCisJaWYgKGdmcCAmIF9fR0ZQX1dBSVQpCisJCW5mc193Yl9wYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOwogCS8qIElmIFBhZ2VQcml2YXRlKCkgaXMgc2V0LCB0aGVuIHRoZSBwYWdlIGlzIG5vdCBmcmVlYWJsZSAqLwogCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uZnMvZnNjYWNoZS5jIGIvZnMvbmZzL2ZzY2FjaGUuYwppbmRleCBmYTU4ODAwLi4yMzc4NzRmIDEwMDY0NAotLS0gYS9mcy9uZnMvZnNjYWNoZS5jCisrKyBiL2ZzL25mcy9mc2NhY2hlLmMKQEAgLTM1NCwxMiArMzU0LDExIEBACiAgKi8KIGludCBuZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKIHsKLQlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7Ci0Jc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBuZnNpLT5mc2NhY2hlOwotCi0JQlVHX09OKCFjb29raWUpOwotCiAJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KTsKKwkJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBuZnNpLT5mc2NhY2hlOworCisJCUJVR19PTighY29va2llKTsKIAkJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogZnNjYWNoZSByZWxlYXNlcGFnZSAoMHglcC8weCVwLzB4JXApXG4iLAogCQkJIGNvb2tpZSwgcGFnZSwgbmZzaSk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggZmFhMDkxOC4uZjE0MWJkZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTEyNjEsOCArMTI2MSwxMCBAQAogCiAJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX01PREUpIHsKIAkJaWYgKChpbm9kZS0+aV9tb2RlICYgU19JQUxMVUdPKSAhPSAoZmF0dHItPm1vZGUgJiBTX0lBTExVR08pKSB7CisJCQl1bW9kZV90IG5ld21vZGUgPSBpbm9kZS0+aV9tb2RlICYgU19JRk1UOworCQkJbmV3bW9kZSB8PSBmYXR0ci0+bW9kZSAmIFNfSUFMTFVHTzsKKwkJCWlub2RlLT5pX21vZGUgPSBuZXdtb2RlOwogCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7Ci0JCQlpbm9kZS0+aV9tb2RlID0gZmF0dHItPm1vZGU7CiAJCX0KIAl9IGVsc2UgaWYgKHNlcnZlci0+Y2FwcyAmIE5GU19DQVBfTU9ERSkKIAkJaW52YWxpZCB8PSBzYXZlX2NhY2hlX3ZhbGlkaXR5ICYgKE5GU19JTk9fSU5WQUxJRF9BVFRSCmRpZmYgLS1naXQgYS9mcy9uZnMvbW91bnRfY2xudC5jIGIvZnMvbmZzL21vdW50X2NsbnQuYwppbmRleCAwYWRlZmM0Li41OTA0N2Y4IDEwMDY0NAotLS0gYS9mcy9uZnMvbW91bnRfY2xudC5jCisrKyBiL2ZzL25mcy9tb3VudF9jbG50LmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXsgLnN0YXR1cyA9IE1OVDNFUlJfSU5WQUwsCQkuZXJybm8gPSAtRUlOVkFMLAl9LAogCXsgLnN0YXR1cyA9IE1OVDNFUlJfTkFNRVRPT0xPTkcsCS5lcnJubyA9IC1FTkFNRVRPT0xPTkcsCX0sCiAJeyAuc3RhdHVzID0gTU5UM0VSUl9OT1RTVVBQLAkJLmVycm5vID0gLUVOT1RTVVBQLAl9LAotCXsgLnN0YXR1cyA9IE1OVDNFUlJfU0VSVkVSRkFVTFQsCS5lcnJubyA9IC1FU0VSVkVSRkFVTFQsCX0sCisJeyAuc3RhdHVzID0gTU5UM0VSUl9TRVJWRVJGQVVMVCwJLmVycm5vID0gLUVSRU1PVEVJTywJfSwKIH07CiAKIHN0cnVjdCBtb3VudHJlcyB7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzMnhkci5jIGIvZnMvbmZzL25mczJ4ZHIuYwppbmRleCA1ZTA3OGIyLi43YmMyZGE4IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzMnhkci5jCisrKyBiL2ZzL25mcy9uZnMyeGRyLmMKQEAgLTY5OSw3ICs2OTksNyBAQAogCXsgTkZTRVJSX0JBRF9DT09LSUUsCS1FQkFEQ09PS0lFCX0sCiAJeyBORlNFUlJfTk9UU1VQUCwJLUVOT1RTVVBQCX0sCiAJeyBORlNFUlJfVE9PU01BTEwsCS1FVE9PU01BTEwJfSwKLQl7IE5GU0VSUl9TRVJWRVJGQVVMVCwJLUVTRVJWRVJGQVVMVAl9LAorCXsgTkZTRVJSX1NFUlZFUkZBVUxULAktRVJFTU9URUlPCX0sCiAJeyBORlNFUlJfQkFEVFlQRSwJLUVCQURUWVBFCX0sCiAJeyBORlNFUlJfSlVLRUJPWCwJLUVKVUtFQk9YCX0sCiAJeyAtMSwJCQktRUlPCQl9CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25mczRfZnMuaAppbmRleCA4NjUyNjViLi4wYzZmZGEzIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNF9mcy5oCisrKyBiL2ZzL25mcy9uZnM0X2ZzLmgKQEAgLTE0Niw2ICsxNDYsNyBAQAogCU5GU19PX1JEV1JfU1RBVEUsCQkvKiBPUEVOIHN0YXRlaWQgaGFzIHJlYWQvd3JpdGUgc3RhdGUgKi8KIAlORlNfU1RBVEVfUkVDTEFJTV9SRUJPT1QsCS8qIE9QRU4gc3RhdGVpZCBzZXJ2ZXIgcmVib290ZWQgKi8KIAlORlNfU1RBVEVfUkVDTEFJTV9OT0dSQUNFLAkvKiBPUEVOIHN0YXRlaWQgbmVlZHMgdG8gcmVjb3ZlciBzdGF0ZSAqLworCU5GU19TVEFURV9QT1NJWF9MT0NLUywJCS8qIFBvc2l4IGxvY2tzIGFyZSBzdXBwb3J0ZWQgKi8KIH07CiAKIHN0cnVjdCBuZnM0X3N0YXRlIHsKQEAgLTI3Nyw2ICsyNzgsNyBAQAogZXh0ZXJuIHZvaWQgbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShzdHJ1Y3QgbmZzX2NsaWVudCAqKTsKIGV4dGVybiB2b2lkIG5mczRfc2NoZWR1bGVfc3RhdGVfbWFuYWdlcihzdHJ1Y3QgbmZzX2NsaWVudCAqKTsKIGV4dGVybiBpbnQgbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fbm9ncmFjZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpOworZXh0ZXJuIGludCBuZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKTsKIGV4dGVybiB2b2lkIG5mczQxX2hhbmRsZV9zZXF1ZW5jZV9mbGFnX2Vycm9ycyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCB1MzIgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgbmZzNF9wdXRfbG9ja19zdGF0ZShzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3ApOwogZXh0ZXJuIGludCBuZnM0X3NldF9sb2NrX3N0YXRlKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCAxOThkNTFkLi4zNzVmMGZhIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMjQ5LDE5ICsyNDksMTUgQEAKIAkJCWlmIChzdGF0ZSA9PSBOVUxMKQogCQkJCWJyZWFrOwogCQkJbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fbm9ncmFjZShjbHAsIHN0YXRlKTsKLQkJY2FzZSAtTkZTNEVSUl9TVEFMRV9DTElFTlRJRDoKKwkJCWdvdG8gZG9fc3RhdGVfcmVjb3Zlcnk7CiAJCWNhc2UgLU5GUzRFUlJfU1RBTEVfU1RBVEVJRDoKLQkJY2FzZSAtTkZTNEVSUl9FWFBJUkVEOgotCQkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOwotCQkJcmV0ID0gbmZzNF93YWl0X2NsbnRfcmVjb3ZlcihjbHApOwotCQkJaWYgKHJldCA9PSAwKQotCQkJCWV4Y2VwdGlvbi0+cmV0cnkgPSAxOwotI2lmICFkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKLQkJCWJyZWFrOwotI2Vsc2UgLyogIWRlZmluZWQoQ09ORklHX05GU19WNF8xKSAqLwotCQkJaWYgKCFuZnM0X2hhc19zZXNzaW9uKHNlcnZlci0+bmZzX2NsaWVudCkpCisJCQlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJCQlicmVhazsKLQkJCS8qIEZBTExUSFJPVUdIICovCisJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3QoY2xwLCBzdGF0ZSk7CisJCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CisJCWNhc2UgLU5GUzRFUlJfRVhQSVJFRDoKKwkJCWdvdG8gZG9fc3RhdGVfcmVjb3Zlcnk7CisjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAJCWNhc2UgLU5GUzRFUlJfQkFEU0VTU0lPTjoKIAkJY2FzZSAtTkZTNEVSUl9CQURTTE9UOgogCQljYXNlIC1ORlM0RVJSX0JBRF9ISUdIX1NMT1Q6CkBAIC0yNzQsNyArMjcwLDcgQEAKIAkJCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVjb3ZlcnkoY2xwKTsKIAkJCWV4Y2VwdGlvbi0+cmV0cnkgPSAxOwogCQkJYnJlYWs7Ci0jZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX05GU19WNF8xKSAqLworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX05GU19WNF8xKSAqLwogCQljYXNlIC1ORlM0RVJSX0ZJTEVfT1BFTjoKIAkJCWlmIChleGNlcHRpb24tPnRpbWVvdXQgPiBIWikgewogCQkJCS8qIFdlIGhhdmUgcmV0cmllZCBhIGRlY2VudCBhbW91bnQsIHRpbWUgdG8KQEAgLTI5Myw2ICsyODksMTIgQEAKIAl9CiAJLyogV2UgZmFpbGVkIHRvIGhhbmRsZSB0aGUgZXJyb3IgKi8KIAlyZXR1cm4gbmZzNF9tYXBfZXJyb3JzKHJldCk7Citkb19zdGF0ZV9yZWNvdmVyeToKKwluZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KGNscCk7CisJcmV0ID0gbmZzNF93YWl0X2NsbnRfcmVjb3ZlcihjbHApOworCWlmIChyZXQgPT0gMCkKKwkJZXhjZXB0aW9uLT5yZXRyeSA9IDE7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0xNjU4LDYgKzE2NjAsOCBAQAogCXN0YXR1cyA9IFBUUl9FUlIoc3RhdGUpOwogCWlmIChJU19FUlIoc3RhdGUpKQogCQlnb3RvIGVycl9vcGVuZGF0YV9wdXQ7CisJaWYgKChvcGVuZGF0YS0+b19yZXMucmZsYWdzICYgTkZTNF9PUEVOX1JFU1VMVF9MT0NLVFlQRV9QT1NJWCkgIT0gMCkKKwkJc2V0X2JpdChORlNfU1RBVEVfUE9TSVhfTE9DS1MsICZzdGF0ZS0+ZmxhZ3MpOwogCW5mczRfb3BlbmRhdGFfcHV0KG9wZW5kYXRhKTsKIAluZnM0X3B1dF9zdGF0ZV9vd25lcihzcCk7CiAJKnJlcyA9IHN0YXRlOwpAQCAtMzQyMiwxNSArMzQyNiwxNCBAQAogCQkJaWYgKHN0YXRlID09IE5VTEwpCiAJCQkJYnJlYWs7CiAJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9ub2dyYWNlKGNscCwgc3RhdGUpOwotCQljYXNlIC1ORlM0RVJSX1NUQUxFX0NMSUVOVElEOgorCQkJZ290byBkb19zdGF0ZV9yZWNvdmVyeTsKIAkJY2FzZSAtTkZTNEVSUl9TVEFMRV9TVEFURUlEOgorCQkJaWYgKHN0YXRlID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3QoY2xwLCBzdGF0ZSk7CisJCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CiAJCWNhc2UgLU5GUzRFUlJfRVhQSVJFRDoKLQkJCXJwY19zbGVlcF9vbigmY2xwLT5jbF9ycGN3YWl0cSwgdGFzaywgTlVMTCk7Ci0JCQluZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KGNscCk7Ci0JCQlpZiAodGVzdF9iaXQoTkZTNENMTlRfTUFOQUdFUl9SVU5OSU5HLCAmY2xwLT5jbF9zdGF0ZSkgPT0gMCkKLQkJCQlycGNfd2FrZV91cF9xdWV1ZWRfdGFzaygmY2xwLT5jbF9ycGN3YWl0cSwgdGFzayk7Ci0JCQl0YXNrLT50a19zdGF0dXMgPSAwOwotCQkJcmV0dXJuIC1FQUdBSU47CisJCQlnb3RvIGRvX3N0YXRlX3JlY292ZXJ5OwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCQljYXNlIC1ORlM0RVJSX0JBRFNFU1NJT046CiAJCWNhc2UgLU5GUzRFUlJfQkFEU0xPVDoKQEAgLTM0NTgsNiArMzQ2MSwxMyBAQAogCX0KIAl0YXNrLT50a19zdGF0dXMgPSBuZnM0X21hcF9lcnJvcnModGFzay0+dGtfc3RhdHVzKTsKIAlyZXR1cm4gMDsKK2RvX3N0YXRlX3JlY292ZXJ5OgorCXJwY19zbGVlcF9vbigmY2xwLT5jbF9ycGN3YWl0cSwgdGFzaywgTlVMTCk7CisJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOworCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9NQU5BR0VSX1JVTk5JTkcsICZjbHAtPmNsX3N0YXRlKSA9PSAwKQorCQlycGNfd2FrZV91cF9xdWV1ZWRfdGFzaygmY2xwLT5jbF9ycGN3YWl0cSwgdGFzayk7CisJdGFzay0+dGtfc3RhdHVzID0gMDsKKwlyZXR1cm4gLUVBR0FJTjsKIH0KIAogc3RhdGljIGludApAQCAtNDA4OCw2ICs0MDk4LDI4IEBACiAJLnJwY19yZWxlYXNlID0gbmZzNF9sb2NrX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgdm9pZCBuZnM0X2hhbmRsZV9zZXRsa19lcnJvcihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3AsIGludCBuZXdfbG9ja19vd25lciwgaW50IGVycm9yKQoreworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzZXJ2ZXItPm5mc19jbGllbnQ7CisJc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlID0gbHNwLT5sc19zdGF0ZTsKKworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIC1ORlM0RVJSX0FETUlOX1JFVk9LRUQ6CisJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKKwljYXNlIC1ORlM0RVJSX0VYUElSRUQ6CisJCWlmIChuZXdfbG9ja19vd25lciAhPSAwIHx8CisJCSAgIChsc3AtPmxzX2ZsYWdzICYgTkZTX0xPQ0tfSU5JVElBTElaRUQpICE9IDApCisJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9ub2dyYWNlKGNscCwgc3RhdGUpOworCQlsc3AtPmxzX3NlcWlkLmZsYWdzICY9IH5ORlNfU0VRSURfQ09ORklSTUVEOworCQlicmVhazsKKwljYXNlIC1ORlM0RVJSX1NUQUxFX1NUQVRFSUQ6CisJCWlmIChuZXdfbG9ja19vd25lciAhPSAwIHx8CisJCSAgICAobHNwLT5sc19mbGFncyAmIE5GU19MT0NLX0lOSVRJQUxJWkVEKSAhPSAwKQorCQkJbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fcmVib290KGNscCwgc3RhdGUpOworCQlsc3AtPmxzX3NlcWlkLmZsYWdzICY9IH5ORlNfU0VRSURfQ09ORklSTUVEOworCX07Cit9CisKIHN0YXRpYyBpbnQgX25mczRfZG9fc2V0bGsoc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50IHJlY292ZXJ5X3R5cGUpCiB7CiAJc3RydWN0IG5mczRfbG9ja2RhdGEgKmRhdGE7CkBAIC00MTI2LDYgKzQxNTgsOSBAQAogCXJldCA9IG5mczRfd2FpdF9mb3JfY29tcGxldGlvbl9ycGNfdGFzayh0YXNrKTsKIAlpZiAocmV0ID09IDApIHsKIAkJcmV0ID0gZGF0YS0+cnBjX3N0YXR1czsKKwkJaWYgKHJldCkKKwkJCW5mczRfaGFuZGxlX3NldGxrX2Vycm9yKGRhdGEtPnNlcnZlciwgZGF0YS0+bHNwLAorCQkJCQlkYXRhLT5hcmcubmV3X2xvY2tfb3duZXIsIHJldCk7CiAJfSBlbHNlCiAJCWRhdGEtPmNhbmNlbGxlZCA9IDE7CiAJcnBjX3B1dF90YXNrKHRhc2spOwpAQCAtNDE4MSw4ICs0MjE2LDExIEBACiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKHN0YXRlLT5pbm9kZSk7CiAJdW5zaWduZWQgY2hhciBmbF9mbGFncyA9IHJlcXVlc3QtPmZsX2ZsYWdzOwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cyA9IC1FTk9MQ0s7CiAKKwlpZiAoKGZsX2ZsYWdzICYgRkxfUE9TSVgpICYmCisJCQkhdGVzdF9iaXQoTkZTX1NUQVRFX1BPU0lYX0xPQ0tTLCAmc3RhdGUtPmZsYWdzKSkKKwkJZ290byBvdXQ7CiAJLyogSXMgdGhpcyBhIGRlbGVnYXRlZCBvcGVuPyAqLwogCXN0YXR1cyA9IG5mczRfc2V0X2xvY2tfc3RhdGUoc3RhdGUsIHJlcXVlc3QpOwogCWlmIChzdGF0dXMgIT0gMCkKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCA2ZDI2M2VkLi5jMWUyNzMzIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC05MDEsNyArOTAxLDcgQEAKIAluZnM0X3NjaGVkdWxlX3N0YXRlX21hbmFnZXIoY2xwKTsKIH0KIAotc3RhdGljIGludCBuZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKQoraW50IG5mczRfc3RhdGVfbWFya19yZWNsYWltX3JlYm9vdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCiB7CiAKIAlzZXRfYml0KE5GU19TVEFURV9SRUNMQUlNX1JFQk9PVCwgJnN0YXRlLT5mbGFncyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCBlNDM3ZmQ2Li41Y2Q1MTg0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTQ2MzEsNyArNDYzMSw3IEBACiAJICogSWYgdGhlIHNlcnZlciByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHNlc3Npb25JRCwgc2xvdElEIG9yCiAJICogc2VxdWVuY2UgbnVtYmVyLCB0aGUgc2VydmVyIGlzIGxvb25leSB0dW5lcy4KIAkgKi8KLQlzdGF0dXMgPSAtRVNFUlZFUkZBVUxUOworCXN0YXR1cyA9IC1FUkVNT1RFSU87CiAKIAlpZiAobWVtY21wKGlkLmRhdGEsIHJlcy0+c3Jfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAogCQkgICBORlM0X01BWF9TRVNTSU9OSURfTEVOKSkgewpAQCAtNTc3NCw3ICs1Nzc0LDcgQEAKIAl7IE5GUzRFUlJfQkFEX0NPT0tJRSwJLUVCQURDT09LSUUJfSwKIAl7IE5GUzRFUlJfTk9UU1VQUCwJLUVOT1RTVVBQCX0sCiAJeyBORlM0RVJSX1RPT1NNQUxMLAktRVRPT1NNQUxMCX0sCi0JeyBORlM0RVJSX1NFUlZFUkZBVUxULAktRVNFUlZFUkZBVUxUCX0sCisJeyBORlM0RVJSX1NFUlZFUkZBVUxULAktRVJFTU9URUlPCX0sCiAJeyBORlM0RVJSX0JBRFRZUEUsCS1FQkFEVFlQRQl9LAogCXsgTkZTNEVSUl9MT0NLRUQsCS1FQUdBSU4JCX0sCiAJeyBORlM0RVJSX1NZTUxJTkssCS1FTE9PUAkJfSwKQEAgLTU4MDEsNyArNTgwMSw3IEBACiAJfQogCWlmIChzdGF0IDw9IDEwMDAwIHx8IHN0YXQgPiAxMDEwMCkgewogCQkvKiBUaGUgc2VydmVyIGlzIGxvb25leSB0dW5lcy4gKi8KLQkJcmV0dXJuIC1FU0VSVkVSRkFVTFQ7CisJCXJldHVybiAtRVJFTU9URUlPOwogCX0KIAkvKiBJZiB3ZSBjYW5ub3QgdHJhbnNsYXRlIHRoZSBlcnJvciwgdGhlIHJlY292ZXJ5IHJvdXRpbmVzIHNob3VsZAogCSAqIGhhbmRsZSBpdC4KZGlmZiAtLWdpdCBhL2ZzL25mcy9wYWdlbGlzdC5jIGIvZnMvbmZzL3BhZ2VsaXN0LmMKaW5kZXggZTI5NzU5My4uYTEyYzQ1YiAxMDA2NDQKLS0tIGEvZnMvbmZzL3BhZ2VsaXN0LmMKKysrIGIvZnMvbmZzL3BhZ2VsaXN0LmMKQEAgLTE3Niw2ICsxNzYsMTIgQEAKIAlrcmVmX3B1dCgmcmVxLT53Yl9rcmVmLCBuZnNfZnJlZV9yZXF1ZXN0KTsKIH0KIAorc3RhdGljIGludCBuZnNfd2FpdF9iaXRfdW5pbnRlcnJ1cHRpYmxlKHZvaWQgKndvcmQpCit7CisJaW9fc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBuZnNfd2FpdF9vbl9yZXF1ZXN0IC0gV2FpdCBmb3IgYSByZXF1ZXN0IHRvIGNvbXBsZXRlLgogICogQHJlcTogcmVxdWVzdCB0byB3YWl0IHVwb24uCkBAIC0xODYsMTQgKzE5Miw5IEBACiBpbnQKIG5mc193YWl0X29uX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlICpyZXEpCiB7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIXRlc3RfYml0KFBHX0JVU1ksICZyZXEtPndiX2ZsYWdzKSkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXQoJnJlcS0+d2JfZmxhZ3MsIFBHX0JVU1ksCi0JCQluZnNfd2FpdF9iaXRfa2lsbGFibGUsIFRBU0tfS0lMTEFCTEUpOwotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIHdhaXRfb25fYml0KCZyZXEtPndiX2ZsYWdzLCBQR19CVVNZLAorCQkJbmZzX3dhaXRfYml0X3VuaW50ZXJydXB0aWJsZSwKKwkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IGNlOTA3ZWYuLmYxYWZlZTQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC0yNDMsNiArMjQzLDcgQEAKIHN0YXRpYyBpbnQgbmZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgdmZzbW91bnQgKik7CiBzdGF0aWMgaW50IG5mc194ZGV2X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAkJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqcmF3X2RhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKK3N0YXRpYyB2b2lkIG5mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIHZvaWQgbmZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIGludCBuZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpyYXdfZGF0YSk7CiAKQEAgLTI2Niw2ICsyNjcsNyBAQAogCS5hbGxvY19pbm9kZQk9IG5mc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IG5mc19kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IG5mc193cml0ZV9pbm9kZSwKKwkucHV0X3N1cGVyCT0gbmZzX3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IG5mc19zdGF0ZnMsCiAJLmNsZWFyX2lub2RlCT0gbmZzX2NsZWFyX2lub2RlLAogCS51bW91bnRfYmVnaW4JPSBuZnNfdW1vdW50X2JlZ2luLApAQCAtMzM1LDYgKzMzNyw3IEBACiAJLmFsbG9jX2lub2RlCT0gbmZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gbmZzX2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gbmZzX3dyaXRlX2lub2RlLAorCS5wdXRfc3VwZXIJPSBuZnNfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gbmZzX3N0YXRmcywKIAkuY2xlYXJfaW5vZGUJPSBuZnM0X2NsZWFyX2lub2RlLAogCS51bW91bnRfYmVnaW4JPSBuZnNfdW1vdW50X2JlZ2luLApAQCAtMjI1OCw2ICsyMjYxLDE3IEBACiB9CiAKIC8qCisgKiBFbnN1cmUgdGhhdCB3ZSB1bnJlZ2lzdGVyIHRoZSBiZGkgYmVmb3JlIGtpbGxfYW5vbl9zdXBlcgorICogcmVsZWFzZXMgdGhlIGRldmljZSBuYW1lCisgKi8KK3N0YXRpYyB2b2lkIG5mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Iocyk7CisKKwliZGlfdW5yZWdpc3Rlcigmc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsKK30KKworLyoKICAqIERlc3Ryb3kgYW4gTkZTMi8zIHN1cGVyYmxvY2sKICAqLwogc3RhdGljIHZvaWQgbmZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQpAQCAtMjI2NSw3ICsyMjc5LDYgQEAKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NCKHMpOwogCiAJa2lsbF9hbm9uX3N1cGVyKHMpOwotCWJkaV91bnJlZ2lzdGVyKCZzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8pOwogCW5mc19mc2NhY2hlX3JlbGVhc2Vfc3VwZXJfY29va2llKHMpOwogCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3N5c2N0bC5jIGIvZnMvbmZzL3N5c2N0bC5jCmluZGV4IDcwZTFmYmIuLmFkNGQyZTcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zeXNjdGwuYworKysgYi9mcy9uZnMvc3lzY3RsLmMKQEAgLTE1LDggKzE1LDEwIEBACiAKICNpbmNsdWRlICJjYWxsYmFjay5oIgogCisjaWZkZWYgQ09ORklHX05GU19WNAogc3RhdGljIGNvbnN0IGludCBuZnNfc2V0X3BvcnRfbWluID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgbmZzX3NldF9wb3J0X21heCA9IDY1NTM1OworI2VuZGlmCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mc19jYWxsYmFja19zeXNjdGxfdGFibGU7CiAKIHN0YXRpYyBjdGxfdGFibGUgbmZzX2NiX3N5c2N0bHNbXSA9IHsKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggZDE3MTY5Ni4uZDYzZDk2NCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WMykgfHwgZGVmaW5lZChDT05GSUdfTkZTX1Y0KQotdm9pZCBuZnNfY29tbWl0ZGF0YV9yZWxlYXNlKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBuZnNfY29tbWl0ZGF0YV9yZWxlYXNlKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5mc193cml0ZV9kYXRhICp3ZGF0YSA9IGRhdGE7CiAKQEAgLTE1NDEsNiArMTU0MSw3IEBACiAJCQlicmVhazsKIAkJfQogCQlyZXQgPSBuZnNfd2FpdF9vbl9yZXF1ZXN0KHJlcSk7CisJCW5mc19yZWxlYXNlX3JlcXVlc3QocmVxKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0xNTk3LDggKzE1OTgsNyBAQAogCXN0cnVjdCBuZnNfcGFnZSAqcmVxOwogCWludCByZXQ7CiAKLQlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpCi0JCW5mc19mc2NhY2hlX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKTsKKwluZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCk7CiAKIAlyZXEgPSBuZnNfZmluZF9hbmRfbG9ja19yZXF1ZXN0KHBhZ2UpOwogCXJldCA9IFBUUl9FUlIocmVxKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvZXhwb3J0LmMgYi9mcy9uZnNkL2V4cG9ydC5jCmluZGV4IGM0ODc4MTAuLmEwYzQwMTYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvZXhwb3J0LmMKKysrIGIvZnMvbmZzZC9leHBvcnQuYwpAQCAtMTMxNiwxOSArMTMxNiwxMSBAQAogCiBzdGF0aWMgc3RydWN0IHN2Y19leHBvcnQgKmZpbmRfZnNpZHplcm9fZXhwb3J0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7Ci0Jc3RydWN0IHN2Y19leHBvcnQgKmV4cDsKIAl1MzIgZnNpZHZbMl07CiAKIAlta19mc2lkKEZTSURfTlVNLCBmc2lkdiwgMCwgMCwgMCwgTlVMTCk7CiAKLQlleHAgPSBycXN0X2V4cF9maW5kKHJxc3RwLCBGU0lEX05VTSwgZnNpZHYpOwotCS8qCi0JICogV2Ugc2hvdWxkbid0IGhhdmUgYWNjZXB0aW5nIGFuIG5mc3Y0IHJlcXVlc3QgYXQgYWxsIGlmIHdlCi0JICogZG9uJ3QgaGF2ZSBhIHBzZXVkb2V4cG9ydCE6Ci0JICovCi0JaWYgKElTX0VSUihleHApICYmIFBUUl9FUlIoZXhwKSA9PSAtRU5PRU5UKQotCQlleHAgPSBFUlJfUFRSKC1FU0VSVkVSRkFVTFQpOwotCXJldHVybiBleHA7CisJcmV0dXJuIHJxc3RfZXhwX2ZpbmQocnFzdHAsIEZTSURfTlVNLCBmc2lkdik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCBjMTk0NzkzLi44NzE1ZDE5IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTc1Miw2ICs3NTIsOCBAQAogCQkJICAgIGZsYWdzLCBjdXJyZW50X2NyZWQoKSk7CiAJaWYgKElTX0VSUigqZmlscCkpCiAJCWhvc3RfZXJyID0gUFRSX0VSUigqZmlscCk7CisJZWxzZQorCQlob3N0X2VyciA9IGltYV9maWxlX2NoZWNrKCpmaWxwLCBhY2Nlc3MpOwogb3V0X25mc2VycjoKIAllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CiBvdXQ6CkBAIC0yMTI3LDcgKzIxMjksNiBAQAogCSAqLwogCXBhdGgubW50ID0gZXhwLT5leF9wYXRoLm1udDsKIAlwYXRoLmRlbnRyeSA9IGRlbnRyeTsKLQllcnIgPSBpbWFfcGF0aF9jaGVjaygmcGF0aCwgYWNjICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKIG5mc2Rfb3V0OgogCXJldHVybiBlcnI/IG5mc2Vycm5vKGVycikgOiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggMTc1ODRjNS4uMTA1YjUwOCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC0yODI5LDcgKzI4MjksNyBAQAogCQl8fCBzY2ktPnNjX3NlcV9yZXF1ZXN0ICE9IHNjaS0+c2Nfc2VxX2RvbmUpOwogCXNwaW5fdW5sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwogCi0JaWYgKGZsYWcgfHwgbmlsZnNfc2VnY3Rvcl9jb25maXJtKHNjaSkpCisJaWYgKGZsYWcgfHwgIW5pbGZzX3NlZ2N0b3JfY29uZmlybShzY2kpKQogCQluaWxmc19zZWdjdG9yX3dyaXRlX291dChzY2kpOwogCiAJV0FSTl9PTighbGlzdF9lbXB0eSgmc2NpLT5zY19jb3BpZWRfYnVmZmVycykpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IDNkYWU0YTEuLjdlOWRmMTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTU5OSw3ICs1OTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIAorLyoKICAqIG9jZnMyX2Rpb19lbmRfaW8gaXMgY2FsbGVkIGJ5IHRoZSBkaW8gY29yZSB3aGVuIGEgZGlvIGlzIGZpbmlzaGVkLiAgV2UncmUKICAqIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBhaW8vZGlvIGNhc2UuICBMaWtlIHRoZSBjb3JlIHVzZXMKICAqIGlfYWxsb2Nfc2VtLCB3ZSB1c2UgdGhlIHJ3X2xvY2sgRExNIGxvY2sgdG8gcHJvdGVjdCBpbyBvbiBvbmUgbm9kZSBmcm9tCkBAIC02NzAsNyArNjcwLDcgQEAKIAogCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwKIAkJCQkJICAgIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwgb2Zmc2V0LAotCQkJCQkgICAgbnJfc2VncywgCisJCQkJCSAgICBucl9zZWdzLAogCQkJCQkgICAgb2NmczJfZGlyZWN0X0lPX2dldF9ibG9ja3MsCiAJCQkJCSAgICBvY2ZzMl9kaW9fZW5kX2lvKTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKaW5kZXggZDQzZDM0YS4uMjFjODA4ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYworKysgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCkBAIC0zNjgsNyArMzY4LDcgQEAKIAl9CiAJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fdW5sb2NrKGNpKTsKIAotCW1sb2coTUxfQkhfSU8sICJibG9jaz0oJWxsdSksIG5yPSglZCksIGNhY2hlZD0lcywgZmxhZ3M9MHgleFxuIiwgCisJbWxvZyhNTF9CSF9JTywgImJsb2NrPSglbGx1KSwgbnI9KCVkKSwgY2FjaGVkPSVzLCBmbGFncz0weCV4XG4iLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgbnIsCiAJICAgICAoKGZsYWdzICYgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKSB8fCBpZ25vcmVfY2FjaGUpID8gIm5vIiA6ICJ5ZXMiLAogCSAgICAgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggZWRhNWI4Yi4uNWM5ODkwMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC03OCw3ICs3OCw3IEBACiAKIHVuc2lnbmVkIGludCBvMmhiX2RlYWRfdGhyZXNob2xkID0gTzJIQl9ERUZBVUxUX0RFQURfVEhSRVNIT0xEOwogCi0vKiBPbmx5IHNldHMgYSBuZXcgdGhyZXNob2xkIGlmIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVnaW9ucy4gCisvKiBPbmx5IHNldHMgYSBuZXcgdGhyZXNob2xkIGlmIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVnaW9ucy4KICAqCiAgKiBObyBsb2NraW5nIG9yIG90aGVyd2lzZSBpbnRlcmVzdGluZyBjb2RlIGlzIHJlcXVpcmVkIGZvciByZWFkaW5nCiAgKiBvMmhiX2RlYWRfdGhyZXNob2xkIGFzIGl0IGNhbid0IGNoYW5nZSBvbmNlIHJlZ2lvbnMgYXJlIGFjdGl2ZSBhbmQKQEAgLTE3MCw3ICsxNzAsNyBAQAogCiAJbWxvZyhNTF9FUlJPUiwgIkhlYXJ0YmVhdCB3cml0ZSB0aW1lb3V0IHRvIGRldmljZSAlcyBhZnRlciAldSAiCiAJICAgICAibWlsbGlzZWNvbmRzXG4iLCByZWctPmhyX2Rldl9uYW1lLAotCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gcmVnLT5ocl9sYXN0X3RpbWVvdXRfc3RhcnQpKTsgCisJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSByZWctPmhyX2xhc3RfdGltZW91dF9zdGFydCkpOwogCW8ycXVvX2Rpc2tfdGltZW91dCgpOwogfQogCkBAIC02MjQsNyArNjI0LDcgQEAKIAkgICAgICJzZXEgJWxsdSBsYXN0ICVsbHUgY2hhbmdlZCAldSBlcXVhbCAldVxuIiwKIAkgICAgIHNsb3QtPmRzX25vZGVfbnVtLCAobG9uZyBsb25nKXNsb3QtPmRzX2xhc3RfZ2VuZXJhdGlvbiwKIAkgICAgIGxlMzJfdG9fY3B1KGhiX2Jsb2NrLT5oYl9ja3N1bSksCi0JICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGhiX2Jsb2NrLT5oYl9zZXEpLCAKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoaGJfYmxvY2stPmhiX3NlcSksCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNsb3QtPmRzX2xhc3RfdGltZSwgc2xvdC0+ZHNfY2hhbmdlZF9zYW1wbGVzLAogCSAgICAgc2xvdC0+ZHNfZXF1YWxfc2FtcGxlcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCmluZGV4IDMzNGYyMzEuLmQ4ZDBjNjUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJfQogCiAJaWYgKHdhc192YWxpZCAmJiAhdmFsaWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibzJuZXQ6IG5vIGxvbmdlciBjb25uZWN0ZWQgdG8gIgorCQlwcmludGsoS0VSTl9OT1RJQ0UgIm8ybmV0OiBubyBsb25nZXIgY29ubmVjdGVkIHRvICIKIAkJICAgICAgIFNDX05PREVGX0ZNVCAiXG4iLCBTQ19OT0RFRl9BUkdTKG9sZF9zYykpOwogCQlvMm5ldF9jb21wbGV0ZV9ub2Rlc19uc3cobm4pOwogCX0KQEAgLTQ5Myw3ICs0OTMsNyBAQAogCWlmICghd2FzX3ZhbGlkICYmIHZhbGlkKSB7CiAJCW8ycXVvX2Nvbm5fdXAobzJuZXRfbnVtX2Zyb21fbm4obm4pKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmbm4tPm5uX2Nvbm5lY3RfZXhwaXJlZCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIm8ybmV0OiAlcyAiIFNDX05PREVGX0ZNVCAiXG4iLAorCQlwcmludGsoS0VSTl9OT1RJQ0UgIm8ybmV0OiAlcyAiIFNDX05PREVGX0ZNVCAiXG4iLAogCQkgICAgICAgbzJubV90aGlzX25vZGUoKSA+IHNjLT5zY19ub2RlLT5uZF9udW0gPwogCQkgICAgICAgCQkiY29ubmVjdGVkIHRvIiA6ICJhY2NlcHRlZCBjb25uZWN0aW9uIGZyb20iLAogCQkgICAgICAgU0NfTk9ERUZfQVJHUyhzYykpOwpAQCAtOTMwLDcgKzkzMCw3IEBACiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCW1sb2coTUxfRVJST1IsICJzZW5kcGFnZSBvZiBzaXplICV6dSB0byAiIFNDX05PREVGX0ZNVCAKKwkJbWxvZyhNTF9FUlJPUiwgInNlbmRwYWdlIG9mIHNpemUgJXp1IHRvICIgU0NfTk9ERUZfRk1UCiAJCSAgICAgIiBmYWlsZWQgd2l0aCAlemRcbiIsIHNpemUsIFNDX05PREVGX0FSR1Moc2MpLCByZXQpOwogCQlvMm5ldF9lbnN1cmVfc2h1dGRvd24obm4sIHNjLCAwKTsKIAkJYnJlYWs7CkBAIC0xNDc2LDE0ICsxNDc2LDE0IEBACiAKIAlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJvMm5ldDogY29ubmVjdGlvbiB0byAiIFNDX05PREVGX0ZNVCAiIGhhcyBiZWVuIGlkbGUgZm9yICV1LiV1ICIKKwlwcmludGsoS0VSTl9OT1RJQ0UgIm8ybmV0OiBjb25uZWN0aW9uIHRvICIgU0NfTk9ERUZfRk1UICIgaGFzIGJlZW4gaWRsZSBmb3IgJXUuJXUgIgogCSAgICAgInNlY29uZHMsIHNodXR0aW5nIGl0IGRvd24uXG4iLCBTQ19OT0RFRl9BUkdTKHNjKSwKIAkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQoKSAvIDEwMDAsCiAJCSAgICAgbzJuZXRfaWRsZV90aW1lb3V0KCkgJSAxMDAwKTsKIAltbG9nKE1MX05PVElDRSwgImhlcmUgYXJlIHNvbWUgdGltZXMgdGhhdCBtaWdodCBoZWxwIGRlYnVnIHRoZSAiCiAJICAgICAic2l0dWF0aW9uOiAodG1yICVsZC4lbGQgbm93ICVsZC4lbGQgZHIgJWxkLiVsZCBhZHYgIgogCSAgICAgIiVsZC4lbGQ6JWxkLiVsZCBmdW5jICglMDh4OiV1KSAlbGQuJWxkOiVsZC4lbGQpXG4iLAotCSAgICAgc2MtPnNjX3R2X3RpbWVyLnR2X3NlYywgKGxvbmcpIHNjLT5zY190dl90aW1lci50dl91c2VjLCAKKwkgICAgIHNjLT5zY190dl90aW1lci50dl9zZWMsIChsb25nKSBzYy0+c2NfdHZfdGltZXIudHZfdXNlYywKIAkgICAgIG5vdy50dl9zZWMsIChsb25nKSBub3cudHZfdXNlYywKIAkgICAgIHNjLT5zY190dl9kYXRhX3JlYWR5LnR2X3NlYywgKGxvbmcpIHNjLT5zY190dl9kYXRhX3JlYWR5LnR2X3VzZWMsCiAJICAgICBzYy0+c2NfdHZfYWR2YW5jZV9zdGFydC50dl9zZWMsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oIGIvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaAppbmRleCA4ZDU4Y2ZlLi45NmZhN2ViIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwX2ludGVybmFsLmgKQEAgLTMyLDEwICszMiwxMCBAQAogICogb24gdGhlaXIgbnVtYmVyICovCiAjZGVmaW5lIE8yTkVUX1FVT1JVTV9ERUxBWV9NUwkoKG8yaGJfZGVhZF90aHJlc2hvbGQgKyAyKSAqIE8ySEJfUkVHSU9OX1RJTUVPVVRfTVMpCiAKLS8qIAorLyoKICAqIFRoaXMgdmVyc2lvbiBudW1iZXIgcmVwcmVzZW50cyBxdWl0ZSBhIGxvdCwgdW5mb3J0dW5hdGVseS4gIEl0IG5vdAogICogb25seSByZXByZXNlbnRzIHRoZSByYXcgbmV0d29yayBtZXNzYWdlIHByb3RvY29sIG9uIHRoZSB3aXJlIGJ1dCBhbHNvCi0gKiBsb2NraW5nIHNlbWFudGljcyBvZiB0aGUgZmlsZSBzeXN0ZW0gdXNpbmcgdGhlIHByb3RvY29sLiAgSXQgc2hvdWxkIAorICogbG9ja2luZyBzZW1hbnRpY3Mgb2YgdGhlIGZpbGUgc3lzdGVtIHVzaW5nIHRoZSBwcm90b2NvbC4gIEl0IHNob3VsZAogICogYmUgc29tZXdoZXJlIGVsc2UsIEknbSBzdXJlLCBidXQgcmlnaHQgbm93IGl0IGlzbid0LgogICoKICAqIFdpdGggdmVyc2lvbiAxMSwgd2Ugc2VwYXJhdGUgb3V0IHRoZSBmaWxlc3lzdGVtIGxvY2tpbmcgcG9ydGlvbi4gIFRoZQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWFwaS5oIGIvZnMvb2NmczIvZGxtL2RsbWFwaS5oCmluZGV4IGI1Nzg2YTcuLjNjZmExMTQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1hcGkuaAorKysgYi9mcy9vY2ZzMi9kbG0vZGxtYXBpLmgKQEAgLTk1LDcgKzk1LDcgQEAKIAkJbWxvZyhNTF9FUlJPUiwgImRsbSBzdGF0dXMgPSAlc1xuIiwgZGxtX2Vycm5hbWUoKHN0KSkpOwlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIERMTV9MS1NCX1VOVVNFRDEgICAgICAgICAgIDB4MDEgIAorI2RlZmluZSBETE1fTEtTQl9VTlVTRUQxICAgICAgICAgICAweDAxCiAjZGVmaW5lIERMTV9MS1NCX1BVVF9MVkIgICAgICAgICAgIDB4MDIKICNkZWZpbmUgRExNX0xLU0JfR0VUX0xWQiAgICAgICAgICAgMHgwNAogI2RlZmluZSBETE1fTEtTQl9VTlVTRUQyICAgICAgICAgICAweDA4CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtYXN0LmMgYi9mcy9vY2ZzMi9kbG0vZGxtYXN0LmMKaW5kZXggMDFjZjhjYy4uZGNjYzQzOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWFzdC5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1hc3QuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCWRsbV9sb2NrX3B1dChsb2NrKTsKIAkJLyogZnJlZSB1cCB0aGUgcmVzZXJ2ZWQgYmFzdCB0aGF0IHdlIGFyZSBjYW5jZWxsaW5nLgogCQkgKiBndWFyYW50ZWVkIHRoYXQgdGhpcyB3aWxsIG5vdCBiZSB0aGUgbGFzdCByZXNlcnZlZAotCQkgKiBhc3QgYmVjYXVzZSAqYm90aCogYW4gYXN0IGFuZCBhIGJhc3Qgd2VyZSByZXNlcnZlZCAKKwkJICogYXN0IGJlY2F1c2UgKmJvdGgqIGFuIGFzdCBhbmQgYSBiYXN0IHdlcmUgcmVzZXJ2ZWQKIAkJICogdG8gZ2V0IHRvIHRoaXMgcG9pbnQuICB0aGUgcmVzLT5zcGlubG9jayB3aWxsIG5vdCBiZQogCQkgKiB0YWtlbiBoZXJlICovCiAJCWRsbV9sb2NrcmVzX3JlbGVhc2VfYXN0KGRsbSwgcmVzKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1jb252ZXJ0LmMgYi9mcy9vY2ZzMi9kbG0vZGxtY29udmVydC5jCmluZGV4IGNhOTZiY2UuLmYyODNiY2UgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1jb252ZXJ0LmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWNvbnZlcnQuYwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJCQkvKiBpbnN0ZWFkIG9mIGxvZ2dpbmcgdGhlIHNhbWUgbmV0d29yayBlcnJvciBvdmVyCiAJCQkgKiBhbmQgb3Zlciwgc2xlZXAgaGVyZSBhbmQgd2FpdCBmb3IgdGhlIGhlYXJ0YmVhdAogCQkJICogdG8gbm90aWNlIHRoZSBub2RlIGlzIGRlYWQuICB0aW1lcyBvdXQgYWZ0ZXIgNXMuICovCi0JCQlkbG1fd2FpdF9mb3Jfbm9kZV9kZWF0aChkbG0sIHJlcy0+b3duZXIsIAorCQkJZGxtX3dhaXRfZm9yX25vZGVfZGVhdGgoZGxtLCByZXMtPm93bmVyLAogCQkJCQkJRExNX05PREVfREVBVEhfV0FJVF9NQVgpOwogCQkJcmV0ID0gRExNX1JFQ09WRVJJTkc7CiAJCQltbG9nKDAsICJub2RlICV1IGRpZWQgc28gcmV0dXJuaW5nIERMTV9SRUNPVkVSSU5HICIKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKaW5kZXggNDJiMGJhZC4uMGNkMjRjZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CiAKIAlzdHJpbmdpZnlfbG9ja25hbWUocmVzLT5sb2NrbmFtZS5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwKLQkJCSAgIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwkJCSAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCXByaW50aygibG9ja3JlczogJXMsIG93bmVyPSV1LCBzdGF0ZT0ldVxuIiwKIAkgICAgICAgYnVmLCByZXMtPm93bmVyLCByZXMtPnN0YXRlKTsKIAlwcmludGsoIiAgbGFzdCB1c2VkOiAlbHUsIHJlZmNudDogJXUsIG9uIHB1cmdlIGxpc3Q6ICVzXG4iLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCmluZGV4IDAzMzQwMDAuLjk4OGM5MDUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKQEAgLTgxNiw3ICs4MTYsNyBAQAogCX0KIAogCS8qIE9uY2UgdGhlIGRsbSBjdHh0IGlzIG1hcmtlZCBhcyBsZWF2aW5nIHRoZW4gd2UgZG9uJ3Qgd2FudAotCSAqIHRvIGJlIHB1dCBpbiBzb21lb25lJ3MgZG9tYWluIG1hcC4gCisJICogdG8gYmUgcHV0IGluIHNvbWVvbmUncyBkb21haW4gbWFwLgogCSAqIEFsc28sIGV4cGxpY2l0bHkgZGlzYWxsb3cgam9pbmluZyBhdCBjZXJ0YWluIHRyb3VibGVzb21lCiAJICogdGltZXMgKGllLiBkdXJpbmcgcmVjb3ZlcnkpLiAqLwogCWlmIChkbG0gJiYgZGxtLT5kbG1fc3RhdGUgIT0gRExNX0NUWFRfTEVBVklORykgewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWxvY2suYyBiL2ZzL29jZnMyL2RsbS9kbG1sb2NrLmMKaW5kZXggNDM3Njk4ZS4uNzMzMzM3NzcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1sb2NrLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWxvY2suYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJCX0KIAkJZGxtX3JldmVydF9wZW5kaW5nX2xvY2socmVzLCBsb2NrKTsKIAkJZGxtX2xvY2tfcHV0KGxvY2spOwotCX0gZWxzZSBpZiAoZGxtX2lzX3JlY292ZXJ5X2xvY2socmVzLT5sb2NrbmFtZS5uYW1lLCAKKwl9IGVsc2UgaWYgKGRsbV9pc19yZWNvdmVyeV9sb2NrKHJlcy0+bG9ja25hbWUubmFtZSwKIAkJCQkJcmVzLT5sb2NrbmFtZS5sZW4pKSB7CiAJCS8qIHNwZWNpYWwgY2FzZSBmb3IgdGhlICRSRUNPVkVSWSBsb2NrLgogCQkgKiB0aGVyZSB3aWxsIG5ldmVyIGJlIGFuIEFTVCBkZWxpdmVyZWQgdG8gcHV0CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKaW5kZXggMDNjY2Y5YS4uYTY1OTYwNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlOwogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPnNwaW5sb2NrKTsKLQkKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWxlLCAmZGxtLT5tbGVfaGJfZXZlbnRzLCBoYl9ldmVudHMpIHsKIAkJaWYgKG5vZGVfdXApCiAJCQlkbG1fbWxlX25vZGVfdXAoZGxtLCBtbGUsIE5VTEwsIGlkeCk7CkBAIC04MzMsNyArODMzLDcgQEAKIAkJX19kbG1faW5zZXJ0X21sZShkbG0sIG1sZSk7CiAKIAkJLyogc3RpbGwgaG9sZGluZyB0aGUgZGxtIHNwaW5sb2NrLCBjaGVjayB0aGUgcmVjb3ZlcnkgbWFwCi0JCSAqIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vZGVzIHRoYXQgc3RpbGwgbmVlZCB0byBiZSAKKwkJICogdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9kZXMgdGhhdCBzdGlsbCBuZWVkIHRvIGJlCiAJCSAqIGNvbnNpZGVyZWQuICB0aGVzZSB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG1sZSBub2RlbWFwCiAJCSAqIGJ1dCB0aGV5IG1pZ2h0IG93biB0aGlzIGxvY2tyZXMuICB3YWl0IG9uIHRoZW0uICovCiAJCWJpdCA9IGZpbmRfbmV4dF9iaXQoZGxtLT5yZWNvdmVyeV9tYXAsIE8yTk1fTUFYX05PREVTLCAwKTsKQEAgLTg4Myw3ICs4ODMsNyBAQAogCQkJCW1zbGVlcCg1MDApOwogCQkJfQogCQkJY29udGludWU7Ci0JCX0gCisJCX0KIAogCQlkbG1fa2lja19yZWNvdmVyeV90aHJlYWQoZGxtKTsKIAkJbXNsZWVwKDEwMDApOwpAQCAtOTM5LDggKzkzOSw4IEBACiAJCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lLCBibG9ja2VkKTsKIAkJaWYgKCsrdHJpZXMgPiAyMCkgewogCQkJbWxvZyhNTF9FUlJPUiwgIiVzOiUuKnM6IHNwaW5uaW5nIG9uICIKLQkJCSAgICAgImRsbV93YWl0X2Zvcl9sb2NrX21hc3RlcnksIGJsb2NrZWQ9JWRcbiIsIAotCQkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCAKKwkJCSAgICAgImRsbV93YWl0X2Zvcl9sb2NrX21hc3RlcnksIGJsb2NrZWQ9JWRcbiIsCisJCQkgICAgIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sCiAJCQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSwgYmxvY2tlZCk7CiAJCQlkbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKIAkJCWRsbV9wcmludF9vbmVfbWxlKG1sZSk7CkBAIC0xMDI5LDcgKzEwMjksNyBAQAogCQlyZXQgPSBkbG1fcmVzdGFydF9sb2NrX21hc3RlcnkoZGxtLCByZXMsIG1sZSwgKmJsb2NrZWQpOwogCQliID0gKG1sZS0+dHlwZSA9PSBETE1fTUxFX0JMT0NLKTsKIAkJaWYgKCgqYmxvY2tlZCAmJiAhYikgfHwgKCEqYmxvY2tlZCAmJiBiKSkgewotCQkJbWxvZygwLCAiJXM6JS4qczogc3RhdHVzIGNoYW5nZTogb2xkPSVkIG5ldz0lZFxuIiwgCisJCQltbG9nKDAsICIlczolLipzOiBzdGF0dXMgY2hhbmdlOiBvbGQ9JWQgbmV3PSVkXG4iLAogCQkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsCiAJCQkgICAgICpibG9ja2VkLCBiKTsKIAkJCSpibG9ja2VkID0gYjsKQEAgLTE2MDIsNyArMTYwMiw3IEBACiAJCX0KIAkJbWxvZygwLCAiJXUgaXMgdGhlIG93bmVyIG9mICUuKnMsIGNsZWFuaW5nIGV2ZXJ5b25lIGVsc2VcbiIsCiAJCQkgICAgIGRsbS0+bm9kZV9udW0sIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwotCQlyZXQgPSBkbG1fZGlzcGF0Y2hfYXNzZXJ0X21hc3RlcihkbG0sIHJlcywgMCwgcmVxdWVzdC0+bm9kZV9pZHgsIAorCQlyZXQgPSBkbG1fZGlzcGF0Y2hfYXNzZXJ0X21hc3RlcihkbG0sIHJlcywgMCwgcmVxdWVzdC0+bm9kZV9pZHgsCiAJCQkJCQkgRExNX0FTU0VSVF9NQVNURVJfTUxFX0NMRUFOVVApOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZyhNTF9FUlJPUiwgImZhaWxlZCB0byBkaXNwYXRjaCBhc3NlcnQgbWFzdGVyIHdvcmtcbiIpOwpAQCAtMTcwMSw3ICsxNzAxLDcgQEAKIAogCQlpZiAociAmIERMTV9BU1NFUlRfUkVTUE9OU0VfUkVBU1NFUlQpIHsKIAkJCW1sb2coMCwgIiUuKnM6IG5vZGUgJXUgY3JlYXRlIG1sZXMgb24gb3RoZXIgIgotCQkJICAgICAibm9kZXMgYW5kIHJlcXVlc3RzIGEgcmUtYXNzZXJ0XG4iLCAKKwkJCSAgICAgIm5vZGVzIGFuZCByZXF1ZXN0cyBhIHJlLWFzc2VydFxuIiwKIAkJCSAgICAgbmFtZWxlbiwgbG9ja25hbWUsIHRvKTsKIAkJCXJlYXNzZXJ0ID0gMTsKIAkJfQpAQCAtMTgxMiw3ICsxODEyLDcgQEAKIAkJCQlzcGluX3VubG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CiAJCQkJc3Bpbl91bmxvY2soJmRsbS0+c3BpbmxvY2spOwogCQkJCWdvdG8gZG9uZTsKLQkJCX0JCisJCQl9CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOwpAQCAtMTg4Myw3ICsxODgzLDcgQEAKIAkJaW50IGV4dHJhX3JlZiA9IDA7CiAJCWludCBubiA9IC0xOwogCQlpbnQgcnIsIGVyciA9IDA7Ci0JCQorCiAJCXNwaW5fbG9jaygmbWxlLT5zcGlubG9jayk7CiAJCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9CTE9DSyB8fCBtbGUtPnR5cGUgPT0gRExNX01MRV9NSUdSQVRJT04pCiAJCQlleHRyYV9yZWYgPSAxOwpAQCAtMTg5MSw3ICsxODkxLDcgQEAKIAkJCS8qIE1BU1RFUiBtbGU6IGlmIGFueSBiaXRzIHNldCBpbiB0aGUgcmVzcG9uc2UgbWFwCiAJCQkgKiB0aGVuIHRoZSBjYWxsaW5nIG5vZGUgbmVlZHMgdG8gcmUtYXNzZXJ0IHRvIGNsZWFyCiAJCQkgKiB1cCBub2RlcyB0aGF0IHRoaXMgbm9kZSBjb250YWN0ZWQgKi8KLQkJCXdoaWxlICgobm4gPSBmaW5kX25leHRfYml0IChtbGUtPnJlc3BvbnNlX21hcCwgTzJOTV9NQVhfTk9ERVMsIAorCQkJd2hpbGUgKChubiA9IGZpbmRfbmV4dF9iaXQgKG1sZS0+cmVzcG9uc2VfbWFwLCBPMk5NX01BWF9OT0RFUywKIAkJCQkJCSAgICBubisxKSkgPCBPMk5NX01BWF9OT0RFUykgewogCQkJCWlmIChubiAhPSBkbG0tPm5vZGVfbnVtICYmIG5uICE9IGFzc2VydC0+bm9kZV9pZHgpCiAJCQkJCW1hc3Rlcl9yZXF1ZXN0ID0gMTsKQEAgLTIwMDIsNyArMjAwMiw3IEBACiAJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKIAlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CiAJc3Bpbl91bmxvY2soJmRsbS0+c3BpbmxvY2spOwotCSpyZXRfZGF0YSA9ICh2b2lkICopcmVzOyAKKwkqcmV0X2RhdGEgPSAodm9pZCAqKXJlczsKIAlkbG1fcHV0KGRsbSk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDQwLDEwICsyMDQwLDEwIEBACiAJaXRlbS0+dS5hbS5yZXF1ZXN0X2Zyb20gPSByZXF1ZXN0X2Zyb207CiAJaXRlbS0+dS5hbS5mbGFncyA9IGZsYWdzOwogCi0JaWYgKGlnbm9yZV9oaWdoZXIpIAotCQltbG9nKDAsICJJR05PUkUgSElHSEVSOiAlLipzXG4iLCByZXMtPmxvY2tuYW1lLmxlbiwgCisJaWYgKGlnbm9yZV9oaWdoZXIpCisJCW1sb2coMCwgIklHTk9SRSBISUdIRVI6ICUuKnNcbiIsIHJlcy0+bG9ja25hbWUubGVuLAogCQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSk7Ci0JCQorCiAJc3Bpbl9sb2NrKCZkbG0tPndvcmtfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmaXRlbS0+bGlzdCwgJmRsbS0+d29ya19saXN0KTsKIAlzcGluX3VubG9jaygmZGxtLT53b3JrX2xvY2spOwpAQCAtMjEzMyw3ICsyMTMzLDcgQEAKICAqIHRoaW5rIHRoYXQgJFJFQ09WRVJZIGlzIGN1cnJlbnRseSBtYXN0ZXJlZCBieSBhIGRlYWQgbm9kZS4gIElmIHNvLAogICogd2Ugd2FpdCBhIHNob3J0IHRpbWUgdG8gYWxsb3cgdGhhdCBub2RlIHRvIGdldCBub3RpZmllZCBieSBpdHMgb3duCiAgKiBoZWFydGJlYXQgc3RhY2ssIHRoZW4gY2hlY2sgYWdhaW4uICBBbGwgJFJFQ09WRVJZIGxvY2sgcmVzb3VyY2VzCi0gKiBtYXN0ZXJlZCBieSBkZWFkIG5vZGVzIGFyZSBwdXJnZWQgd2hlbiB0aGUgaGVhcmJlYXQgY2FsbGJhY2sgaXMgCisgKiBtYXN0ZXJlZCBieSBkZWFkIG5vZGVzIGFyZSBwdXJnZWQgd2hlbiB0aGUgaGVhcmJlYXQgY2FsbGJhY2sgaXMKICAqIGZpcmVkLCBzbyB3ZSBjYW4ga25vdyBmb3Igc3VyZSB0aGF0IGl0IGlzIHNhZmUgdG8gY29udGludWUgb25jZQogICogdGhlIG5vZGUgcmV0dXJucyBhIGxpdmUgbm9kZSBvciBubyBub2RlLiAgKi8KIHN0YXRpYyBpbnQgZGxtX3ByZV9tYXN0ZXJfcmVjb19sb2NrcmVzKHN0cnVjdCBkbG1fY3R4dCAqZGxtLApAQCAtMjE3NCw3ICsyMTc0LDcgQEAKIAkJCQlyZXQgPSAtRUFHQUlOOwogCQkJfQogCQkJc3Bpbl91bmxvY2soJmRsbS0+c3BpbmxvY2spOwotCQkJbWxvZygwLCAiJXM6IHJlY28gbG9jayBtYXN0ZXIgaXMgJXVcbiIsIGRsbS0+bmFtZSwgCisJCQltbG9nKDAsICIlczogcmVjbyBsb2NrIG1hc3RlciBpcyAldVxuIiwgZGxtLT5uYW1lLAogCQkJICAgICBtYXN0ZXIpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI2MDIsNyArMjYwMiw3IEBACiAKIAkJCW1sb2coMCwgIiVzOiUuKnM6IHRpbWVkIG91dCBkdXJpbmcgbWlncmF0aW9uXG4iLAogCQkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwotCQkJLyogYXZvaWQgaGFuZyBkdXJpbmcgc2h1dGRvd24gd2hlbiBtaWdyYXRpbmcgbG9ja3JlcyAKKwkJCS8qIGF2b2lkIGhhbmcgZHVyaW5nIHNodXRkb3duIHdoZW4gbWlncmF0aW5nIGxvY2tyZXMKIAkJCSAqIHRvIGEgbm9kZSB3aGljaCBhbHNvIGdvZXMgZG93biAqLwogCQkJaWYgKGRsbV9pc19ub2RlX2RlYWQoZGxtLCB0YXJnZXQpKSB7CiAJCQkJbWxvZygwLCAiJXM6JS4qczogZXhwZWN0ZWQgbWlncmF0aW9uICIKQEAgLTI3MzgsNyArMjczOCw3IEBACiAJY2FuX3Byb2NlZWQgPSAhIShyZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX01JR1JBVElORyk7CiAJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCi0JLyogdGFyZ2V0IGhhcyBkaWVkLCBzbyBtYWtlIHRoZSBjYWxsZXIgYnJlYWsgb3V0IG9mIHRoZSAKKwkvKiB0YXJnZXQgaGFzIGRpZWQsIHNvIG1ha2UgdGhlIGNhbGxlciBicmVhayBvdXQgb2YgdGhlCiAJICogd2FpdF9ldmVudCwgYnV0IGNhbGxlciBtdXN0IHJlY2hlY2sgdGhlIGRvbWFpbl9tYXAgKi8KIAlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwogCWlmICghdGVzdF9iaXQobWlnX3RhcmdldCwgZGxtLT5kb21haW5fbWFwKSkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jIGIvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKaW5kZXggMmY5ZTRlMS4uMzQ0YmNmOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKQEAgLTEwNTAsNyArMTA1MCw3IEBACiAJCQkJaWYgKGxvY2stPm1sLm5vZGUgPT0gZGVhZF9ub2RlKSB7CiAJCQkJCW1sb2coMCwgIkFIQSEgdGhlcmUgd2FzICIKIAkJCQkJICAgICAiYSAkUkVDT1ZFUlkgbG9jayBmb3IgZGVhZCAiCi0JCQkJCSAgICAgIm5vZGUgJXUgKCVzKSFcbiIsIAorCQkJCQkgICAgICJub2RlICV1ICglcykhXG4iLAogCQkJCQkgICAgIGRlYWRfbm9kZSwgZGxtLT5uYW1lKTsKIAkJCQkJbGlzdF9kZWxfaW5pdCgmbG9jay0+bGlzdCk7CiAJCQkJCWRsbV9sb2NrX3B1dChsb2NrKTsKQEAgLTExNjQsNiArMTE2NCwzOSBAQAogCW1yZXMtPm1hc3RlciA9IG1hc3RlcjsKIH0KIAorc3RhdGljIHZvaWQgZGxtX3ByZXBhcmVfbHZiX2Zvcl9taWdyYXRpb24oc3RydWN0IGRsbV9sb2NrICpsb2NrLAorCQkJCQkgIHN0cnVjdCBkbG1fbWlncmF0YWJsZV9sb2NrcmVzICptcmVzLAorCQkJCQkgIGludCBxdWV1ZSkKK3sKKwlpZiAoIWxvY2stPmxrc2IpCisJICAgICAgIHJldHVybjsKKworCS8qIElnbm9yZSBsdmIgaW4gYWxsIGxvY2tzIGluIHRoZSBibG9ja2VkIGxpc3QgKi8KKwlpZiAocXVldWUgPT0gRExNX0JMT0NLRURfTElTVCkKKwkJcmV0dXJuOworCisJLyogT25seSBjb25zaWRlciBsdmJzIGluIGxvY2tzIHdpdGggZ3JhbnRlZCBFWCBvciBQUiBsb2NrIGxldmVscyAqLworCWlmIChsb2NrLT5tbC50eXBlICE9IExLTV9FWE1PREUgJiYgbG9jay0+bWwudHlwZSAhPSBMS01fUFJNT0RFKQorCQlyZXR1cm47CisKKwlpZiAoZGxtX2x2Yl9pc19lbXB0eShtcmVzLT5sdmIpKSB7CisJCW1lbWNweShtcmVzLT5sdmIsIGxvY2stPmxrc2ItPmx2YiwgRExNX0xWQl9MRU4pOworCQlyZXR1cm47CisJfQorCisJLyogRW5zdXJlIHRoZSBsdmIgY29waWVkIGZvciBtaWdyYXRpb24gbWF0Y2hlcyBpbiBvdGhlciB2YWxpZCBsb2NrcyAqLworCWlmICghbWVtY21wKG1yZXMtPmx2YiwgbG9jay0+bGtzYi0+bHZiLCBETE1fTFZCX0xFTikpCisJCXJldHVybjsKKworCW1sb2coTUxfRVJST1IsICJNaXNtYXRjaGVkIGx2YiBpbiBsb2NrIGNvb2tpZT0ldTolbGx1LCBuYW1lPSUuKnMsICIKKwkgICAgICJub2RlPSV1XG4iLAorCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpLAorCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9zZXEoYmU2NF90b19jcHUobG9jay0+bWwuY29va2llKSksCisJICAgICBsb2NrLT5sb2NrcmVzLT5sb2NrbmFtZS5sZW4sIGxvY2stPmxvY2tyZXMtPmxvY2tuYW1lLm5hbWUsCisJICAgICBsb2NrLT5tbC5ub2RlKTsKKwlkbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UobG9jay0+bG9ja3Jlcyk7CisJQlVHKCk7Cit9CiAKIC8qIHJldHVybnMgMSBpZiB0aGlzIGxvY2sgZmlsbHMgdGhlIG5ldHdvcmsgc3RydWN0dXJlLAogICogMCBvdGhlcndpc2UgKi8KQEAgLTExODEsMjAgKzEyMTQsNyBAQAogCW1sLT5saXN0ID0gcXVldWU7CiAJaWYgKGxvY2stPmxrc2IpIHsKIAkJbWwtPmZsYWdzID0gbG9jay0+bGtzYi0+ZmxhZ3M7Ci0JCS8qIHNlbmQgb3VyIGN1cnJlbnQgbHZiICovCi0JCWlmIChtbC0+dHlwZSA9PSBMS01fRVhNT0RFIHx8Ci0JCSAgICBtbC0+dHlwZSA9PSBMS01fUFJNT0RFKSB7Ci0JCQkvKiBpZiBpdCBpcyBhbHJlYWR5IHNldCwgdGhpcyBoYWQgYmV0dGVyIGJlIGEgUFIKLQkJCSAqIGFuZCBpdCBoYXMgdG8gbWF0Y2ggKi8KLQkJCWlmICghZGxtX2x2Yl9pc19lbXB0eShtcmVzLT5sdmIpICYmCi0JCQkgICAgKG1sLT50eXBlID09IExLTV9FWE1PREUgfHwKLQkJCSAgICAgbWVtY21wKG1yZXMtPmx2YiwgbG9jay0+bGtzYi0+bHZiLCBETE1fTFZCX0xFTikpKSB7Ci0JCQkJbWxvZyhNTF9FUlJPUiwgIm1pc21hdGNoZWQgbHZicyFcbiIpOwotCQkJCWRsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShsb2NrLT5sb2NrcmVzKTsKLQkJCQlCVUcoKTsKLQkJCX0KLQkJCW1lbWNweShtcmVzLT5sdmIsIGxvY2stPmxrc2ItPmx2YiwgRExNX0xWQl9MRU4pOwotCQl9CisJCWRsbV9wcmVwYXJlX2x2Yl9mb3JfbWlncmF0aW9uKGxvY2ssIG1yZXMsIHF1ZXVlKTsKIAl9CiAJbWwtPm5vZGUgPSBsb2NrLT5tbC5ub2RlOwogCW1yZXMtPm51bV9sb2NrcysrOwpAQCAtMTczMCw2ICsxNzUwLDcgQEAKIAlzdHJ1Y3QgZGxtX2xvY2sgKmxvY2sgPSBOVUxMOwogCXU4IGZyb20gPSBPMk5NX01BWF9OT0RFUzsKIAl1bnNpZ25lZCBpbnQgYWRkZWQgPSAwOworCV9fYmU2NCBjOwogCiAJbWxvZygwLCAicnVubmluZyAlZCBsb2NrcyBmb3IgdGhpcyBsb2NrcmVzXG4iLCBtcmVzLT5udW1fbG9ja3MpOwogCWZvciAoaT0wOyBpPG1yZXMtPm51bV9sb2NrczsgaSsrKSB7CkBAIC0xNzc3LDE5ICsxNzk4LDQ4IEBACiAJCQkvKiBsb2NrIGlzIGFsd2F5cyBjcmVhdGVkIGxvY2FsbHkgZmlyc3QsIGFuZAogCQkJICogZGVzdHJveWVkIGxvY2FsbHkgbGFzdC4gIGl0IG11c3QgYmUgb24gdGhlIGxpc3QgKi8KIAkJCWlmICghbG9jaykgewotCQkJCV9fYmU2NCBjID0gbWwtPmNvb2tpZTsKLQkJCQltbG9nKE1MX0VSUk9SLCAiY291bGQgbm90IGZpbmQgbG9jYWwgbG9jayAiCi0JCQkJCSAgICAgICAid2l0aCBjb29raWUgJXU6JWxsdSFcbiIsCisJCQkJYyA9IG1sLT5jb29raWU7CisJCQkJbWxvZyhNTF9FUlJPUiwgIkNvdWxkIG5vdCBmaW5kIGxvY2FsIGxvY2sgIgorCQkJCQkgICAgICAgIndpdGggY29va2llICV1OiVsbHUsIG5vZGUgJXUsICIKKwkJCQkJICAgICAgICJsaXN0ICV1LCBmbGFncyAweCV4LCB0eXBlICVkLCAiCisJCQkJCSAgICAgICAiY29udiAlZCwgaGlnaGVzdCBibG9ja2VkICVkXG4iLAogCQkJCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGJlNjRfdG9fY3B1KGMpKSwKLQkJCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKGJlNjRfdG9fY3B1KGMpKSk7CisJCQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICBtbC0+bm9kZSwgbWwtPmxpc3QsIG1sLT5mbGFncywgbWwtPnR5cGUsCisJCQkJICAgICBtbC0+Y29udmVydF90eXBlLCBtbC0+aGlnaGVzdF9ibG9ja2VkKTsKIAkJCQlfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOwogCQkJCUJVRygpOwogCQkJfQotCQkJQlVHX09OKGxvY2stPm1sLm5vZGUgIT0gbWwtPm5vZGUpOworCisJCQlpZiAobG9jay0+bWwubm9kZSAhPSBtbC0+bm9kZSkgeworCQkJCWMgPSBsb2NrLT5tbC5jb29raWU7CisJCQkJbWxvZyhNTF9FUlJPUiwgIk1pc21hdGNoZWQgbm9kZSMgaW4gbG9jayAiCisJCQkJICAgICAiY29va2llICV1OiVsbHUsIG5hbWUgJS4qcywgbm9kZSAldVxuIiwKKwkJCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkJCSAgICAgbG9jay0+bWwubm9kZSk7CisJCQkJYyA9IG1sLT5jb29raWU7CisJCQkJbWxvZyhNTF9FUlJPUiwgIk1pZ3JhdGUgbG9jayBjb29raWUgJXU6JWxsdSwgIgorCQkJCSAgICAgIm5vZGUgJXUsIGxpc3QgJXUsIGZsYWdzIDB4JXgsIHR5cGUgJWQsICIKKwkJCQkgICAgICJjb252ICVkLCBoaWdoZXN0IGJsb2NrZWQgJWRcbiIsCisJCQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX25vZGUoYmU2NF90b19jcHUoYykpLAorCQkJCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9zZXEoYmU2NF90b19jcHUoYykpLAorCQkJCSAgICAgbWwtPm5vZGUsIG1sLT5saXN0LCBtbC0+ZmxhZ3MsIG1sLT50eXBlLAorCQkJCSAgICAgbWwtPmNvbnZlcnRfdHlwZSwgbWwtPmhpZ2hlc3RfYmxvY2tlZCk7CisJCQkJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKKwkJCQlCVUcoKTsKKwkJCX0KIAogCQkJaWYgKHRtcHEgIT0gcXVldWUpIHsKLQkJCQltbG9nKDAsICJsb2NrIHdhcyBvbiAldSBpbnN0ZWFkIG9mICV1IGZvciAlLipzXG4iLAotCQkJCSAgICAgaiwgbWwtPmxpc3QsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOworCQkJCWMgPSBtbC0+Y29va2llOworCQkJCW1sb2coMCwgIkxvY2sgY29va2llICV1OiVsbHUgd2FzIG9uIGxpc3QgJXUgIgorCQkJCSAgICAgImluc3RlYWQgb2YgbGlzdCAldSBmb3IgJS4qc1xuIiwKKwkJCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICBqLCBtbC0+bGlzdCwgcmVzLT5sb2NrbmFtZS5sZW4sCisJCQkJICAgICByZXMtPmxvY2tuYW1lLm5hbWUpOworCQkJCV9fZGxtX3ByaW50X29uZV9sb2NrX3Jlc291cmNlKHJlcyk7CiAJCQkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMTgzOSw3ICsxODg5LDcgQEAKIAkJCQkgKiB0aGUgbHZiLiAqLwogCQkJCW1lbWNweShyZXMtPmx2YiwgbXJlcy0+bHZiLCBETE1fTFZCX0xFTik7CiAJCQl9IGVsc2UgewotCQkJCS8qIG90aGVyd2lzZSwgdGhlIG5vZGUgaXMgc2VuZGluZyBpdHMgCisJCQkJLyogb3RoZXJ3aXNlLCB0aGUgbm9kZSBpcyBzZW5kaW5nIGl0cwogCQkJCSAqIG1vc3QgcmVjZW50IHZhbGlkIGx2YiBpbmZvICovCiAJCQkJQlVHX09OKG1sLT50eXBlICE9IExLTV9FWE1PREUgJiYKIAkJCQkgICAgICAgbWwtPnR5cGUgIT0gTEtNX1BSTU9ERSk7CkBAIC0xODg2LDcgKzE5MzYsNyBAQAogCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2ssIHF1ZXVlLCBsaXN0KSB7CiAJCQlpZiAobG9jay0+bWwuY29va2llID09IG1sLT5jb29raWUpIHsKLQkJCQlfX2JlNjQgYyA9IGxvY2stPm1sLmNvb2tpZTsKKwkJCQljID0gbG9jay0+bWwuY29va2llOwogCQkJCW1sb2coTUxfRVJST1IsICIlczolLipzOiAldTolbGx1OiBsb2NrIGFscmVhZHkgIgogCQkJCSAgICAgImV4aXN0cyBvbiB0aGlzIGxvY2tyZXMhXG4iLCBkbG0tPm5hbWUsCiAJCQkJICAgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLApAQCAtMjExNCw3ICsyMTY0LDcgQEAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJlcy0+c3BpbmxvY2spOwogCiAJaWYgKHJlcy0+b3duZXIgPT0gZGxtLT5ub2RlX251bSkKLQkJLyogaWYgdGhpcyBub2RlIG93bmVkIHRoZSBsb2NrcmVzLCBhbmQgaWYgdGhlIGRlYWQgbm9kZSAKKwkJLyogaWYgdGhpcyBub2RlIG93bmVkIHRoZSBsb2NrcmVzLCBhbmQgaWYgdGhlIGRlYWQgbm9kZQogCQkgKiBoYWQgYW4gRVggd2hlbiBoZSBkaWVkLCBibGFuayBvdXQgdGhlIGx2YiAqLwogCQlzZWFyY2hfbm9kZSA9IGRlYWRfbm9kZTsKIAllbHNlIHsKQEAgLTIxNTIsNyArMjIwMiw3IEBACiAKIAkvKiB0aGlzIG5vZGUgaXMgdGhlIGxvY2tyZXMgbWFzdGVyOgogCSAqIDEpIHJlbW92ZSBhbnkgc3RhbGUgbG9ja3MgZm9yIHRoZSBkZWFkIG5vZGUKLQkgKiAyKSBpZiB0aGUgZGVhZCBub2RlIGhhZCBhbiBFWCB3aGVuIGhlIGRpZWQsIGJsYW5rIG91dCB0aGUgbHZiIAorCSAqIDIpIGlmIHRoZSBkZWFkIG5vZGUgaGFkIGFuIEVYIHdoZW4gaGUgZGllZCwgYmxhbmsgb3V0IHRoZSBsdmIKIAkgKi8KIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+c3BpbmxvY2spOwogCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CkBAIC0yMTkzLDcgKzIyNDMsMTIgQEAKIAkJbWxvZygwLCAiJXM6JS4qczogZnJlZWQgJXUgbG9ja3MgZm9yIGRlYWQgbm9kZSAldSwgIgogCQkgICAgICJkcm9wcGluZyByZWYgZnJvbSBsb2NrcmVzXG4iLCBkbG0tPm5hbWUsCiAJCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwgZnJlZWQsIGRlYWRfbm9kZSk7Ci0JCUJVR19PTighdGVzdF9iaXQoZGVhZF9ub2RlLCByZXMtPnJlZm1hcCkpOworCQlpZighdGVzdF9iaXQoZGVhZF9ub2RlLCByZXMtPnJlZm1hcCkpIHsKKwkJCW1sb2coTUxfRVJST1IsICIlczolLipzOiBmcmVlZCAldSBsb2NrcyBmb3IgZGVhZCBub2RlICV1LCAiCisJCQkgICAgICJidXQgcmVmIHdhcyBub3Qgc2V0XG4iLCBkbG0tPm5hbWUsCisJCQkgICAgIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsIGZyZWVkLCBkZWFkX25vZGUpOworCQkJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKKwkJfQogCQlkbG1fbG9ja3Jlc19jbGVhcl9yZWZtYXBfYml0KGRlYWRfbm9kZSwgcmVzKTsKIAl9IGVsc2UgaWYgKHRlc3RfYml0KGRlYWRfbm9kZSwgcmVzLT5yZWZtYXApKSB7CiAJCW1sb2coMCwgIiVzOiUuKnM6IGRlYWQgbm9kZSAldSBoYWQgYSByZWYsIGJ1dCBoYWQgIgpAQCAtMjI2MCw3ICsyMzE1LDcgQEAKIAkJCQl9CiAJCQkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCQkJCWNvbnRpbnVlOwotCQkJfQkJCQorCQkJfQogCQkJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAkJCS8qIHplcm8gdGhlIGx2YiBpZiBuZWNlc3NhcnkgKi8KIAkJCWRsbV9yZXZhbGlkYXRlX2x2YihkbG0sIHJlcywgZGVhZF9ub2RlKTsKQEAgLTI0MTEsNyArMjQ2Niw3IEBACiAgKiB0aGlzIGZ1bmN0aW9uIG9uIGVhY2ggbm9kZSByYWNpbmcgdG8gYmVjb21lIHRoZSByZWNvdmVyeQogICogbWFzdGVyIHdpbGwgbm90IHN0b3AgYXR0ZW1wdGluZyB0aGlzIHVudGlsIGVpdGhlcjoKICAqIGEpIHRoaXMgbm9kZSBnZXRzIHRoZSBFWCAoYW5kIGJlY29tZXMgdGhlIHJlY292ZXJ5IG1hc3RlciksCi0gKiBvciBiKSBkbG0tPnJlY28ubmV3X21hc3RlciBnZXRzIHNldCB0byBzb21lIG5vZGVudW0gCisgKiBvciBiKSBkbG0tPnJlY28ubmV3X21hc3RlciBnZXRzIHNldCB0byBzb21lIG5vZGVudW0KICAqICE9IE8yTk1fSU5WQUxJRF9OT0RFX05VTSAoYW5vdGhlciBub2RlIHdpbGwgZG8gdGhlIHJlY28pLgogICogc28gZWFjaCB0aW1lIGEgcmVjb3ZlcnkgbWFzdGVyIGlzIG5lZWRlZCwgdGhlIGVudGlyZSBjbHVzdGVyCiAgKiB3aWxsIHN5bmMgYXQgdGhpcyBwb2ludC4gIGlmIHRoZSBuZXcgbWFzdGVyIGRpZXMsIHRoYXQgd2lsbApAQCAtMjQyNCw3ICsyNDc5LDcgQEAKIAogCW1sb2coMCwgInN0YXJ0aW5nIHJlY292ZXJ5IG9mICVzIGF0ICVsdSwgZGVhZD0ldSwgdGhpcz0ldVxuIiwKIAkgICAgIGRsbS0+bmFtZSwgamlmZmllcywgZGxtLT5yZWNvLmRlYWRfbm9kZSwgZGxtLT5ub2RlX251bSk7Ci1hZ2FpbjoJCithZ2FpbjoKIAltZW1zZXQoJmxrc2IsIDAsIHNpemVvZihsa3NiKSk7CiAKIAlyZXQgPSBkbG1sb2NrKGRsbSwgTEtNX0VYTU9ERSwgJmxrc2IsIExLTV9OT1FVRVVFfExLTV9SRUNPVkVSWSwKQEAgLTI0MzcsOCArMjQ5Miw4IEBACiAJaWYgKHJldCA9PSBETE1fTk9STUFMKSB7CiAJCW1sb2coMCwgImRsbT0lcyBkbG1sb2NrIHNheXMgSSBnb3QgaXQgKHRoaXM9JXUpXG4iLAogCQkgICAgIGRsbS0+bmFtZSwgZGxtLT5ub2RlX251bSk7Ci0JCQotCQkvKiBnb3QgdGhlIEVYIGxvY2suICBjaGVjayB0byBzZWUgaWYgYW5vdGhlciBub2RlIAorCisJCS8qIGdvdCB0aGUgRVggbG9jay4gIGNoZWNrIHRvIHNlZSBpZiBhbm90aGVyIG5vZGUKIAkJICoganVzdCBiZWNhbWUgdGhlIHJlY28gbWFzdGVyICovCiAJCWlmIChkbG1fcmVjb19tYXN0ZXJfcmVhZHkoZGxtKSkgewogCQkJbWxvZygwLCAiJXM6IGdvdCByZWNvIEVYIGxvY2ssIGJ1dCAldSB3aWxsICIKQEAgLTI0NTEsMTIgKzI1MDYsMTIgQEAKIAkJCS8qIHNlZSBpZiByZWNvdmVyeSB3YXMgYWxyZWFkeSBmaW5pc2hlZCBlbHNld2hlcmUgKi8KIAkJCXNwaW5fbG9jaygmZGxtLT5zcGlubG9jayk7CiAJCQlpZiAoZGxtLT5yZWNvLmRlYWRfbm9kZSA9PSBPMk5NX0lOVkFMSURfTk9ERV9OVU0pIHsKLQkJCQlzdGF0dXMgPSAtRUlOVkFMOwkKKwkJCQlzdGF0dXMgPSAtRUlOVkFMOwogCQkJCW1sb2coMCwgIiVzOiBnb3QgcmVjbyBFWCBsb2NrLCBidXQgIgogCQkJCSAgICAgIm5vZGUgZ290IHJlY292ZXJlZCBhbHJlYWR5XG4iLCBkbG0tPm5hbWUpOwogCQkJCWlmIChkbG0tPnJlY28ubmV3X21hc3RlciAhPSBPMk5NX0lOVkFMSURfTk9ERV9OVU0pIHsKIAkJCQkJbWxvZyhNTF9FUlJPUiwgIiVzOiBuZXcgbWFzdGVyIGlzICV1ICIKLQkJCQkJICAgICAiYnV0IG5vIGRlYWQgbm9kZSFcbiIsIAorCQkJCQkgICAgICJidXQgbm8gZGVhZCBub2RlIVxuIiwKIAkJCQkJICAgICBkbG0tPm5hbWUsIGRsbS0+cmVjby5uZXdfbWFzdGVyKTsKIAkJCQkJQlVHKCk7CiAJCQkJfQpAQCAtMjQ2OCw3ICsyNTIzLDcgQEAKIAkJICogc2V0IHRoZSBtYXN0ZXIgYW5kIHNlbmQgdGhlIG1lc3NhZ2VzIHRvIGJlZ2luIHJlY292ZXJ5ICovCiAJCWlmICghc3RhdHVzKSB7CiAJCQltbG9nKDAsICIlczogZGVhZD0ldSwgdGhpcz0ldSwgc2VuZGluZyAiCi0JCQkgICAgICJiZWdpbl9yZWNvIG5vd1xuIiwgZGxtLT5uYW1lLCAKKwkJCSAgICAgImJlZ2luX3JlY28gbm93XG4iLCBkbG0tPm5hbWUsCiAJCQkgICAgIGRsbS0+cmVjby5kZWFkX25vZGUsIGRsbS0+bm9kZV9udW0pOwogCQkJc3RhdHVzID0gZGxtX3NlbmRfYmVnaW5fcmVjb19tZXNzYWdlKGRsbSwKIAkJCQkgICAgICBkbG0tPnJlY28uZGVhZF9ub2RlKTsKQEAgLTI1MDEsNyArMjU1Niw3IEBACiAJCW1sb2coMCwgImRsbT0lcyBkbG1sb2NrIHNheXMgYW5vdGhlciBub2RlIGdvdCBpdCAodGhpcz0ldSlcbiIsCiAJCSAgICAgZGxtLT5uYW1lLCBkbG0tPm5vZGVfbnVtKTsKIAkJLyogYW5vdGhlciBub2RlIGlzIG1hc3Rlci4gd2FpdCBvbgotCQkgKiByZWNvLm5ld19tYXN0ZXIgIT0gTzJOTV9JTlZBTElEX05PREVfTlVNIAorCQkgKiByZWNvLm5ld19tYXN0ZXIgIT0gTzJOTV9JTlZBTElEX05PREVfTlVNCiAJCSAqIGZvciBhdCBtb3N0IG9uZSBzZWNvbmQgKi8KIAkJd2FpdF9ldmVudF90aW1lb3V0KGRsbS0+ZGxtX3JlY29fdGhyZWFkX3dxLAogCQkJCQkgZGxtX3JlY29fbWFzdGVyX3JlYWR5KGRsbSksCkBAIC0yNTg5LDcgKzI2NDQsMTMgQEAKIAkJCSAgICAgImJlZ2luIHJlY28gbXNnICglZClcbiIsIGRsbS0+bmFtZSwgbm9kZW51bSwgcmV0KTsKIAkJCXJldCA9IDA7CiAJCX0KLQkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisKKwkJLyoKKwkJICogUHJpb3IgdG8gY29tbWl0IGFhZDFiMTUzMTBiOWJjZDU5ZmE4MWFiOGYyYjE1MTNiNTk1NTNlYTgsCisJCSAqIGRsbV9iZWdpbl9yZWNvX2hhbmRsZXIoKSByZXR1cm5lZCBFQUdBSU4gYW5kIG5vdCAtRUFHQUlOLgorCQkgKiBXZSBhcmUgaGFuZGxpbmcgYm90aCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgorCQkgKi8KKwkJaWYgKHJldCA9PSAtRUFHQUlOIHx8IHJldCA9PSBFQUdBSU4pIHsKIAkJCW1sb2coMCwgIiVzOiB0cnlpbmcgdG8gc3RhcnQgcmVjb3Zlcnkgb2Ygbm9kZSAiCiAJCQkgICAgICIldSwgYnV0IG5vZGUgJXUgaXMgd2FpdGluZyBmb3IgbGFzdCByZWNvdmVyeSAiCiAJCQkgICAgICJ0byBjb21wbGV0ZSwgYmFja29mZiBmb3IgYSBiaXRcbiIsIGRsbS0+bmFtZSwKQEAgLTI1OTksNyArMjY2MCw3IEBACiAJCX0KIAkJaWYgKHJldCA8IDApIHsKIAkJCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwotCQkJLyogdGhpcyBpcyBub3cgYSBzZXJpb3VzIHByb2JsZW0sIHBvc3NpYmx5IEVOT01FTSAKKwkJCS8qIHRoaXMgaXMgbm93IGEgc2VyaW91cyBwcm9ibGVtLCBwb3NzaWJseSBFTk9NRU0KIAkJCSAqIGluIHRoZSBuZXR3b3JrIHN0YWNrLiAgbXVzdCByZXRyeSAqLwogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJbWxvZyhNTF9FUlJPUiwgImJlZ2luIHJlY28gb2YgZGxtICVzIHRvIG5vZGUgJXUgIgpAQCAtMjYxMiw3ICsyNjczLDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJbWxvZyhNTF9FUlJPUiwgInJlY292ZXJ5IGxvY2sgbm90IGZvdW5kXG4iKTsKIAkJCX0KLQkJCS8qIHNsZWVwIGZvciBhIGJpdCBpbiBob3BlcyB0aGF0IHdlIGNhbiBhdm9pZCAKKwkJCS8qIHNsZWVwIGZvciBhIGJpdCBpbiBob3BlcyB0aGF0IHdlIGNhbiBhdm9pZAogCQkJICogYW5vdGhlciBFTk9NRU0gKi8KIAkJCW1zbGVlcCgxMDApOwogCQkJZ290byByZXRyeTsKQEAgLTI2NjQsNyArMjcyNSw3IEBACiAJfQogCWlmIChkbG0tPnJlY28uZGVhZF9ub2RlICE9IE8yTk1fSU5WQUxJRF9OT0RFX05VTSkgewogCQltbG9nKE1MX05PVElDRSwgIiVzOiBkZWFkX25vZGUgcHJldmlvdXNseSBzZXQgdG8gJXUsICIKLQkJICAgICAibm9kZSAldSBjaGFuZ2luZyBpdCB0byAldVxuIiwgZGxtLT5uYW1lLCAKKwkJICAgICAibm9kZSAldSBjaGFuZ2luZyBpdCB0byAldVxuIiwgZGxtLT5uYW1lLAogCQkgICAgIGRsbS0+cmVjby5kZWFkX25vZGUsIGJyLT5ub2RlX2lkeCwgYnItPmRlYWRfbm9kZSk7CiAJfQogCWRsbV9zZXRfcmVjb19tYXN0ZXIoZGxtLCBici0+bm9kZV9pZHgpOwpAQCAtMjczMCw4ICsyNzkxLDggQEAKIAkJaWYgKHJldCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWlmIChkbG1faXNfaG9zdF9kb3duKHJldCkpIHsKLQkJCQkvKiB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhpcyByZWNvdmVyeSAKLQkJCQkgKiBzZXNzaW9uLCBzbyBzZXQgdGhlIHN0YXR1cyB0byB6ZXJvIHRvIAorCQkJCS8qIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGlzIHJlY292ZXJ5CisJCQkJICogc2Vzc2lvbiwgc28gc2V0IHRoZSBzdGF0dXMgdG8gemVybyB0bwogCQkJCSAqIGZpbmlzaCBvdXQgdGhlIGxhc3QgcmVjb3ZlcnkgKi8KIAkJCQltbG9nKE1MX0VSUk9SLCAibm9kZSAldSB3ZW50IGRvd24gYWZ0ZXIgdGhpcyAiCiAJCQkJICAgICAibm9kZSBmaW5pc2hlZCByZWNvdmVyeS5cbiIsIG5vZGVudW0pOwpAQCAtMjc2OCw3ICsyODI5LDcgQEAKIAltbG9nKDAsICIlczogbm9kZSAldSBmaW5hbGl6aW5nIHJlY292ZXJ5IHN0YWdlJWQgb2YgIgogCSAgICAgIm5vZGUgJXUgKCV1OiV1KVxuIiwgZGxtLT5uYW1lLCBmci0+bm9kZV9pZHgsIHN0YWdlLAogCSAgICAgZnItPmRlYWRfbm9kZSwgZGxtLT5yZWNvLmRlYWRfbm9kZSwgZGxtLT5yZWNvLm5ld19tYXN0ZXIpOwotIAorCiAJc3Bpbl9sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIAogCWlmIChkbG0tPnJlY28ubmV3X21hc3RlciAhPSBmci0+bm9kZV9pZHgpIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG11bmxvY2suYyBiL2ZzL29jZnMyL2RsbS9kbG11bmxvY2suYwppbmRleCAwMGY1M2IyLi40OWUyOWVjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtdW5sb2NrLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXVubG9jay5jCkBAIC0xOTAsOCArMTkwLDggQEAKIAkJCWFjdGlvbnMgJj0gfihETE1fVU5MT0NLX1JFTU9WRV9MT0NLfAogCQkJCSAgICAgRExNX1VOTE9DS19SRUdSQU5UX0xPQ0t8CiAJCQkJICAgICBETE1fVU5MT0NLX0NMRUFSX0NPTlZFUlRfVFlQRSk7Ci0JCX0gZWxzZSBpZiAoc3RhdHVzID09IERMTV9SRUNPVkVSSU5HIHx8IAotCQkJICAgc3RhdHVzID09IERMTV9NSUdSQVRJTkcgfHwgCisJCX0gZWxzZSBpZiAoc3RhdHVzID09IERMTV9SRUNPVkVSSU5HIHx8CisJCQkgICBzdGF0dXMgPT0gRExNX01JR1JBVElORyB8fAogCQkJICAgc3RhdHVzID09IERMTV9GT1JXQVJEKSB7CiAJCQkvKiBtdXN0IGNsZWFyIHRoZSBhY3Rpb25zIGJlY2F1c2UgdGhpcyB1bmxvY2sKIAkJCSAqIGlzIGFib3V0IHRvIGJlIHJldHJpZWQuICBjYW5ub3QgZnJlZSBvciBkbwpAQCAtNjYxLDE0ICs2NjEsMTQgQEAKIAlpZiAoY2FsbF9hc3QpIHsKIAkJbWxvZygwLCAiY2FsbGluZyB1bmxvY2thc3QoJXAsICVkKVxuIiwgZGF0YSwgc3RhdHVzKTsKIAkJaWYgKGlzX21hc3RlcikgewotCQkJLyogaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBvbmUgbGFzdCBiYXN0IAorCQkJLyogaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBvbmUgbGFzdCBiYXN0CiAJCQkgKiBwZW5kaW5nLiAgbWFrZSBzdXJlIGl0IGlzIGZsdXNoZWQsIHRoZW4KIAkJCSAqIGNhbGwgdGhlIHVubG9ja2FzdC4KIAkJCSAqIG5vdCBhbiBpc3N1ZSBpZiB0aGlzIGlzIGEgbWFzdGVyZWQgcmVtb3RlbHksCiAJCQkgKiBzaW5jZSB0aGlzIGxvY2sgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQogCQkJICogbG9ja3JlcyBxdWV1ZXMgYW5kIGNhbm5vdCBiZSBmb3VuZC4gKi8KIAkJCWRsbV9raWNrX3RocmVhZChkbG0sIE5VTEwpOwotCQkJd2FpdF9ldmVudChkbG0tPmFzdF93cSwgCisJCQl3YWl0X2V2ZW50KGRsbS0+YXN0X3dxLAogCQkJCSAgIGRsbV9sb2NrX2Jhc3RzX2ZsdXNoZWQoZGxtLCBsb2NrKSk7CiAJCX0KIAkJKCp1bmxvY2thc3QpKGRhdGEsIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmMgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKaW5kZXggYzVlNGE0OS4uZTA0NDAxOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuYwpAQCAtODc1LDYgKzg3NSwxNCBAQAogCQlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfTkVFRFNfUkVGUkVTSCk7CiAKIAlsb2NrcmVzLT5sX2xldmVsID0gbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQ7CisKKwkvKgorCSAqIFdlIHNldCB0aGUgT0NGUzJfTE9DS19VUENPTlZFUlRfRklOSVNISU5HIGZsYWcgYmVmb3JlIGNsZWFyaW5nCisJICogdGhlIE9DRlMyX0xPQ0tfQlVTWSBmbGFnIHRvIHByZXZlbnQgdGhlIGRjIHRocmVhZCBmcm9tCisJICogZG93bmNvbnZlcnRpbmcgdGhlIGxvY2sgYmVmb3JlIHRoZSB1cGNvbnZlcnQgaGFzIGZ1bGx5IGNvbXBsZXRlZC4KKwkgKi8KKwlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfVVBDT05WRVJUX0ZJTklTSElORyk7CisKIAlsb2NrcmVzX2NsZWFyX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQlVTWSk7CiAKIAltbG9nX2V4aXRfdm9pZCgpOwpAQCAtOTA3LDggKzkxNSw2IEBACiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmxvY2tyZXMtPmxfbG9jayk7CiAKLQlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQkxPQ0tFRCk7Ci0KIAlpZiAobGV2ZWwgPiBsb2NrcmVzLT5sX2Jsb2NraW5nKSB7CiAJCS8qIG9ubHkgc2NoZWR1bGUgYSBkb3duY29udmVydCBpZiB3ZSBoYXZlbid0IGFscmVhZHkgc2NoZWR1bGVkCiAJCSAqIG9uZSB0aGF0IGdvZXMgbG93IGVub3VnaCB0byBzYXRpc2Z5IHRoZSBsZXZlbCB3ZSdyZQpAQCAtOTIxLDYgKzkyNyw5IEBACiAJCWxvY2tyZXMtPmxfYmxvY2tpbmcgPSBsZXZlbDsKIAl9CiAKKwlpZiAobmVlZHNfZG93bmNvbnZlcnQpCisJCWxvY2tyZXNfb3JfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19CTE9DS0VEKTsKKwogCW1sb2dfZXhpdChuZWVkc19kb3duY29udmVydCk7CiAJcmV0dXJuIG5lZWRzX2Rvd25jb252ZXJ0OwogfQpAQCAtMTEzMyw2ICsxMTQyLDcgQEAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JVU1kpOworCWxvY2tyZXNfY2xlYXJfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19VUENPTlZFUlRfRklOSVNISU5HKTsKIAlpZiAoY29udmVydCkKIAkJbG9ja3Jlcy0+bF9hY3Rpb24gPSBPQ0ZTMl9BU1RfSU5WQUxJRDsKIAllbHNlCkBAIC0xMzIzLDEzICsxMzMzLDEzIEBACiBhZ2FpbjoKIAl3YWl0ID0gMDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKKwogCWlmIChjYXRjaF9zaWduYWxzICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJZ290byBvdXQ7CisJCWdvdG8gdW5sb2NrOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKLQogCW1sb2dfYnVnX29uX21zZyhsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19GUkVFSU5HLAogCQkJIkNsdXN0ZXIgbG9jayBjYWxsZWQgb24gZnJlZWluZyBsb2NrcmVzICVzISBmbGFncyAiCiAJCQkiMHglbHhcbiIsIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CkBAIC0xMzQ2LDYgKzEzNTYsMjUgQEAKIAkJZ290byB1bmxvY2s7CiAJfQogCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcpIHsKKwkJLyoKKwkJICogV2UndmUgdXBjb252ZXJ0ZWQuIElmIHRoZSBsb2NrIG5vdyBoYXMgYSBsZXZlbCB3ZSBjYW4KKwkJICogd29yayB3aXRoLCB3ZSB0YWtlIGl0LiBJZiwgaG93ZXZlciwgdGhlIGxvY2sgaXMgbm90IGF0IHRoZQorCQkgKiByZXF1aXJlZCBsZXZlbCwgd2UgZ28gdGhydSB0aGUgZnVsbCBjeWNsZS4gT25lIHdheSB0aGlzIGNvdWxkCisJCSAqIGhhcHBlbiBpcyBpZiBhIHByb2Nlc3MgcmVxdWVzdGluZyBhbiB1cGNvbnZlcnQgdG8gUFIgaXMKKwkJICogY2xvc2VseSBmb2xsb3dlZCBieSBhbm90aGVyIHJlcXVlc3RpbmcgdXBjb252ZXJ0IHRvIGFuIEVYLgorCQkgKiBJZiB0aGUgcHJvY2VzcyByZXF1ZXN0aW5nIEVYIGxhbmRzIGhlcmUsIHdlIHdhbnQgaXQgdG8KKwkJICogY29udGludWUgYXR0ZW1wdGluZyB0byB1cGNvbnZlcnQgYW5kIGxldCB0aGUgcHJvY2VzcworCQkgKiByZXF1ZXN0aW5nIFBSIHRha2UgdGhlIGxvY2suCisJCSAqIElmIG11bHRpcGxlIHByb2Nlc3NlcyByZXF1ZXN0IHVwY29udmVydCB0byBQUiwgdGhlIGZpcnN0IG9uZQorCQkgKiBoZXJlIHdpbGwgdGFrZSB0aGUgbG9jay4gVGhlIG90aGVycyB3aWxsIGhhdmUgdG8gZ28gdGhydSB0aGUKKwkJICogT0NGUzJfTE9DS19CTE9DS0VEIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHBlbmRpbmcKKwkJICogZG93bmNvbnZlcnQgcmVxdWVzdC4KKwkJICovCisJCWlmIChsZXZlbCA8PSBsb2NrcmVzLT5sX2xldmVsKQorCQkJZ290byB1cGRhdGVfaG9sZGVyczsKKwl9CisKIAlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQkxPQ0tFRCAmJgogCSAgICAhb2NmczJfbWF5X2NvbnRpbnVlX29uX2Jsb2NrZWRfbG9jayhsb2NrcmVzLCBsZXZlbCkpIHsKIAkJLyogaXMgdGhlIGxvY2sgaXMgY3VycmVudGx5IGJsb2NrZWQgb24gYmVoYWxmIG9mCkBAIC0xNDE2LDExICsxNDQ1LDE0IEBACiAJCWdvdG8gYWdhaW47CiAJfQogCit1cGRhdGVfaG9sZGVyczoKIAkvKiBPaywgaWYgd2UgZ2V0IGhlcmUgdGhlbiB3ZSdyZSBnb29kIHRvIGdvLiAqLwogCW9jZnMyX2luY19ob2xkZXJzKGxvY2tyZXMsIGxldmVsKTsKIAogCXJldCA9IDA7CiB1bmxvY2s6CisJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiBvdXQ6CiAJLyoKQEAgLTMxNTUsNyArMzE4Nyw3IEBACiAvKiBNYXJrIHRoZSBsb2NrcmVzIGFzIGJlaW5nIGRyb3BwZWQuIEl0IHdpbGwgbm8gbG9uZ2VyIGJlCiAgKiBxdWV1ZWQgaWYgYmxvY2tpbmcsIGJ1dCB3ZSBzdGlsbCBtYXkgaGF2ZSB0byB3YWl0IG9uIGl0CiAgKiBiZWluZyBkZXF1ZXVlZCBmcm9tIHRoZSBkb3duY29udmVydCB0aHJlYWQgYmVmb3JlIHdlIGNhbiBjb25zaWRlcgotICogaXQgc2FmZSB0byBkcm9wLiAKKyAqIGl0IHNhZmUgdG8gZHJvcC4KICAqCiAgKiBZb3UgY2FuICpub3QqIGF0dGVtcHQgdG8gY2FsbCBjbHVzdGVyX2xvY2sgb24gdGhpcyBsb2NrcmVzIGFueW1vcmUuICovCiB2b2lkIG9jZnMyX21hcmtfbG9ja3Jlc19mcmVlaW5nKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKQEAgLTMzNTIsNiArMzM4NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYmxvY2tpbmc7CiAJaW50IG5ld19sZXZlbDsKKwlpbnQgbGV2ZWw7CiAJaW50IHJldCA9IDA7CiAJaW50IHNldF9sdmIgPSAwOwogCXVuc2lnbmVkIGludCBnZW47CkBAIC0zMzYwLDkgKzMzOTMsMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIAotCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JMT0NLRUQpKTsKLQogcmVjaGVjazoKKwkvKgorCSAqIElzIGl0IHN0aWxsIGJsb2NraW5nPyBJZiBub3QsIHdlIGhhdmUgbm8gbW9yZSB3b3JrIHRvIGRvLgorCSAqLworCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JMT0NLRUQpKSB7CisJCUJVR19PTihsb2NrcmVzLT5sX2Jsb2NraW5nICE9IERMTV9MT0NLX05MKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJCXJldCA9IDA7CisJCWdvdG8gbGVhdmU7CisJfQorCiAJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JVU1kpIHsKIAkJLyogWFhYCiAJCSAqIFRoaXMgaXMgYSAqYmlnKiByYWNlLiAgVGhlIE9DRlMyX0xPQ0tfUEVORElORyBmbGFnCkBAIC0zNDAxLDYgKzM0NDIsMzEgQEAKIAkJZ290byBsZWF2ZTsKIAl9CiAKKwkvKgorCSAqIFRoaXMgcHJldmVudHMgbGl2ZWxvY2tzLiBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcgZmxhZyBpcworCSAqIHNldCB3aGVuIHRoZSBhc3QgaXMgcmVjZWl2ZWQgZm9yIGFuIHVwY29udmVydCBqdXN0IGJlZm9yZSB0aGUKKwkgKiBPQ0ZTMl9MT0NLX0JVU1kgZmxhZyBpcyBjbGVhcmVkLiBOb3cgaWYgdGhlIGZzIHJlY2VpdmVkIGEgYmFzdAorCSAqIG9uIHRoZSBoZWVscyBvZiB0aGUgYXN0LCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBkb3duY29udmVydCBqdXN0CisJICogZW5vdWdoIHRvIGFsbG93IHRoZSB1cCByZXF1ZXN0b3IgdG8gZG8gaXRzIHRhc2suIEJlY2F1c2UgdGhpcworCSAqIGxvY2sgaXMgaW4gdGhlIGJsb2NrZWQgcXVldWUsIHRoZSBsb2NrIHdpbGwgYmUgZG93bmNvbnZlcnRlZAorCSAqIGFzIHNvb24gYXMgdGhlIHJlcXVlc3RvciBpcyBkb25lIHdpdGggdGhlIGxvY2suCisJICovCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcpCisJCWdvdG8gbGVhdmVfcmVxdWV1ZTsKKworCS8qCisJICogSG93IGNhbiB3ZSBibG9jayBhbmQgeWV0IGJlIGF0IE5MPyAgV2Ugd2VyZSB0cnlpbmcgdG8gdXBjb252ZXJ0CisJICogZnJvbSBOTCBhbmQgZ290IGNhbmNlbGVkLiAgVGhlIGNvZGUgY29tZXMgYmFjayBoZXJlLCBhbmQgbm93CisJICogd2Ugbm90aWNlIGFuZCBjbGVhciBCTE9DS0lORy4KKwkgKi8KKwlpZiAobG9ja3Jlcy0+bF9sZXZlbCA9PSBETE1fTE9DS19OTCkgeworCQlCVUdfT04obG9ja3Jlcy0+bF9leF9ob2xkZXJzIHx8IGxvY2tyZXMtPmxfcm9faG9sZGVycyk7CisJCWxvY2tyZXMtPmxfYmxvY2tpbmcgPSBETE1fTE9DS19OTDsKKwkJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JMT0NLRUQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKIAkvKiBpZiB3ZSdyZSBibG9ja2luZyBhbiBleGNsdXNpdmUgYW5kIHdlIGhhdmUgKmFueSogaG9sZGVycywKIAkgKiB0aGVuIHJlcXVldWUuICovCiAJaWYgKChsb2NrcmVzLT5sX2Jsb2NraW5nID09IERMTV9MT0NLX0VYKQpAQCAtMzQzOCw2ICszNTA0LDcgQEAKIAkgKiBtYXkgc2xlZXAsIHNvIHdlIHNhdmUgb2ZmIGEgY29weSBvZiB3aGF0IHdlJ3JlIGJsb2NraW5nIGFzCiAJICogaXQgbWF5IGNoYW5nZSB3aGlsZSB3ZSdyZSBub3QgaG9sZGluZyB0aGUgc3BpbiBsb2NrLiAqLwogCWJsb2NraW5nID0gbG9ja3Jlcy0+bF9ibG9ja2luZzsKKwlsZXZlbCA9IGxvY2tyZXMtPmxfbGV2ZWw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAKIAljdGwtPnVuYmxvY2tfYWN0aW9uID0gbG9ja3Jlcy0+bF9vcHMtPmRvd25jb252ZXJ0X3dvcmtlcihsb2NrcmVzLCBibG9ja2luZyk7CkBAIC0zNDQ2LDcgKzM1MTMsNyBAQAogCQlnb3RvIGxlYXZlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwotCWlmIChibG9ja2luZyAhPSBsb2NrcmVzLT5sX2Jsb2NraW5nKSB7CisJaWYgKChibG9ja2luZyAhPSBsb2NrcmVzLT5sX2Jsb2NraW5nKSB8fCAobGV2ZWwgIT0gbG9ja3Jlcy0+bF9sZXZlbCkpIHsKIAkJLyogSWYgdGhpcyBjaGFuZ2VkIHVuZGVybmVhdGggdXMsIHRoZW4gd2UgY2FuJ3QgZHJvcAogCQkgKiBpdCBqdXN0IHlldC4gKi8KIAkJZ290byByZWNoZWNrOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXhwb3J0LmMgYi9mcy9vY2ZzMi9leHBvcnQuYwppbmRleCAxNTcxM2NiLi4xOWFkMTQ1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHBvcnQuYworKysgYi9mcy9vY2ZzMi9leHBvcnQuYwpAQCAtMjM5LDcgKzIzOSw3IEBACiAJCW1sb2coMCwgIkVuY29kaW5nIHBhcmVudDogYmxrbm86ICVsbHUsIGdlbmVyYXRpb246ICV1XG4iLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8sIGdlbmVyYXRpb24pOwogCX0KLQkKKwogCSptYXhfbGVuID0gbGVuOwogCiBiYWlsOgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXh0ZW50X21hcC5jIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCmluZGV4IGQzNWEyN2YuLjUzMjg1MjkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYworKysgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQllbWktPmVpX2NsdXN0ZXJzICs9IGlucy0+ZWlfY2x1c3RlcnM7CiAJCXJldHVybiAxOwogCX0gZWxzZSBpZiAoKGlucy0+ZWlfcGh5cyArIGlucy0+ZWlfY2x1c3RlcnMpID09IGVtaS0+ZWlfcGh5cyAmJgotCQkgICAoaW5zLT5laV9jcG9zICsgaW5zLT5laV9jbHVzdGVycykgPT0gZW1pLT5laV9waHlzICYmCisJCSAgIChpbnMtPmVpX2Nwb3MgKyBpbnMtPmVpX2NsdXN0ZXJzKSA9PSBlbWktPmVpX2Nwb3MgJiYKIAkJICAgaW5zLT5laV9mbGFncyA9PSBlbWktPmVpX2ZsYWdzKSB7CiAJCWVtaS0+ZWlfcGh5cyA9IGlucy0+ZWlfcGh5czsKIAkJZW1pLT5laV9jcG9zID0gaW5zLT5laV9jcG9zOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IDA2Y2NmNmEuLjU1OGNlMDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTc0OSw3ICs3NDksNyBAQAogCWludCByZXQ7CiAKIAlvZmZzZXQgPSAoc2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUtMSkpOyAvKiBXaXRoaW4gcGFnZSAqLwotCS8qIHVnaC4gIGluIHByZXBhcmUvY29tbWl0X3dyaXRlLCBpZiBmcm9tPT10bz09c3RhcnQgb2YgYmxvY2ssIHdlIAorCS8qIHVnaC4gIGluIHByZXBhcmUvY29tbWl0X3dyaXRlLCBpZiBmcm9tPT10bz09c3RhcnQgb2YgYmxvY2ssIHdlCiAJKiogc2tpcCB0aGUgcHJlcGFyZS4gIG1ha2Ugc3VyZSB3ZSBuZXZlciBzZW5kIGFuIG9mZnNldCBmb3IgdGhlIHN0YXJ0CiAJKiogb2YgYSBibG9jawogCSovCkBAIC0xNzc5LDcgKzE3NzksNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJbG9mZl90IHNhdmVkX3BvcywgZW5kOwogCi0JLyogCisJLyoKIAkgKiBXZSBzdGFydCB3aXRoIGEgcmVhZCBsZXZlbCBtZXRhIGxvY2sgYW5kIG9ubHkganVtcCB0byBhbiBleAogCSAqIGlmIHdlIG5lZWQgdG8gbWFrZSBtb2RpZmljYXRpb25zIGhlcmUuCiAJICovCkBAIC0yMDEzLDggKzIwMTMsOCBAQAogCS8qIGJ1ZmZlcmVkIGFpbyB3b3VsZG4ndCBoYXZlIHByb3BlciBsb2NrIGNvdmVyYWdlIHRvZGF5ICovCiAJQlVHX09OKHJldCA9PSAtRUlPQ0JRVUVVRUQgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKTsKIAotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMgJiYgIWRpcmVjdF9pbykgfHwgSVNfU1lOQyhpbm9kZSkgfHwKLQkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCAmJiBoYXNfcmVmY291bnQpKSB7CisJaWYgKCgoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMpICYmICFkaXJlY3RfaW8pIHx8IElTX1NZTkMoaW5vZGUpIHx8CisJICAgICgoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSAmJiBoYXNfcmVmY291bnQpKSB7CiAJCXJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShmaWxlLT5mX21hcHBpbmcsIHBvcywKIAkJCQkJICAgICAgIHBvcyArIGNvdW50IC0gMSk7CiAJCWlmIChyZXQgPCAwKQpAQCAtMjAzMyw3ICsyMDMzLDcgQEAKIAkJCQkJCSAgICAgIHBvcyArIGNvdW50IC0gMSk7CiAJfQogCi0JLyogCisJLyoKIAkgKiBkZWVwIGluIGdfZl9hX3dfbigpLT5vY2ZzMl9kaXJlY3RfSU8gd2UgcGFzcyBpbiBhIG9jZnMyX2Rpb19lbmRfaW8KIAkgKiBmdW5jdGlvbiBwb2ludGVyIHdoaWNoIGlzIGNhbGxlZCB3aGVuIG9fZGlyZWN0IGlvIGNvbXBsZXRlcyBzbyB0aGF0CiAJICogaXQgY2FuIHVubG9jayBvdXIgcncgbG9jay4gIChpdCdzIHRoZSBjbHVzdGVyZWQgZXF1aXZhbGVudCBvZgpAQCAtMjE5OCw3ICsyMTk4LDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCS8qIAorCS8qCiAJICogYnVmZmVyZWQgcmVhZHMgcHJvdGVjdCB0aGVtc2VsdmVzIGluIC0+cmVhZHBhZ2UoKS4gIE9fRElSRUNUIHJlYWRzCiAJICogbmVlZCBsb2NrcyB0byBwcm90ZWN0IHBlbmRpbmcgcmVhZHMgZnJvbSByYWNpbmcgd2l0aCB0cnVuY2F0ZS4KIAkgKi8KQEAgLTIyMjAsMTAgKzIyMjAsMTAgQEAKIAkgKiBXZSdyZSBmaW5lIGxldHRpbmcgZm9sa3MgcmFjZSB0cnVuY2F0ZXMgYW5kIGV4dGVuZGluZwogCSAqIHdyaXRlcyB3aXRoIHJlYWQgYWNyb3NzIHRoZSBjbHVzdGVyLCBqdXN0IGxpa2UgdGhleSBjYW4KIAkgKiBsb2NhbGx5LiBIZW5jZSBubyByd19sb2NrIGR1cmluZyByZWFkLgotCSAqIAorCSAqCiAJICogVGFrZSBhbmQgZHJvcCB0aGUgbWV0YSBkYXRhIGxvY2sgdG8gdXBkYXRlIGlub2RlIGZpZWxkcwogCSAqIGxpa2UgaV9zaXplLiBUaGlzIGFsbG93cyB0aGUgY2hlY2tzIGRvd24gYmVsb3cKLQkgKiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoKSBhIGNoYW5jZSBvZiBhY3R1YWxseSB3b3JraW5nLiAKKwkgKiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoKSBhIGNoYW5jZSBvZiBhY3R1YWxseSB3b3JraW5nLgogCSAqLwogCXJldCA9IG9jZnMyX2lub2RlX2xvY2tfYXRpbWUoaW5vZGUsIGZpbHAtPmZfdmZzbW50LCAmbG9ja19sZXZlbCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTIyNDgsNyArMjI0OCw3IEBACiBiYWlsOgogCWlmIChoYXZlX2FsbG9jX3NlbSkKIAkJdXBfcmVhZCgmaW5vZGUtPmlfYWxsb2Nfc2VtKTsKLQlpZiAocndfbGV2ZWwgIT0gLTEpIAorCWlmIChyd19sZXZlbCAhPSAtMSkKIAkJb2NmczJfcndfdW5sb2NrKGlub2RlLCByd19sZXZlbCk7CiAJbWxvZ19leGl0KHJldCk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDAyOTdmYjguLjg4NDU5YmQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJaWYgKGFyZ3MtPmZpX2ZsYWdzICYgT0NGUzJfRklfRkxBR19PUlBIQU5fUkVDT1ZFUlkpIHsKIAkJc3RhdHVzID0gb2NmczJfdHJ5X29wZW5fbG9jayhpbm9kZSwgMCk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsJCisJCQltYWtlX2JhZF9pbm9kZShpbm9kZSk7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQpAQCAtNjg0LDcgKzY4NCw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogCisvKgogICogU2VyaWFsaXplIHdpdGggb3JwaGFuIGRpciByZWNvdmVyeS4gSWYgdGhlIHByb2Nlc3MgZG9pbmcKICAqIHJlY292ZXJ5IG9uIHRoaXMgb3JwaGFuIGRpciBkb2VzIGFuIGlnZXQoKSB3aXRoIHRoZSBkaXIKICAqIGlfbXV0ZXggaGVsZCwgd2UnbGwgZGVhZGxvY2sgaGVyZS4gSW5zdGVhZCB3ZSBkZXRlY3QgdGhpcwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW9jdGwuYyBiL2ZzL29jZnMyL2lvY3RsLmMKaW5kZXggMzFmYmIwNi4uN2Q5ZDljMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW9jdGwuYworKysgYi9mcy9vY2ZzMi9pb2N0bC5jCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiAjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfSU5PREUKICNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KQEAgLTE4MSw2ICsxODIsMTAgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBsb25nIG9jZnMyX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlib29sIHByZXNlcnZlOworCXN0cnVjdCByZWZsaW5rX2FyZ3VtZW50cyBhcmdzOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIE9DRlMyX0lPQzMyX0dFVEZMQUdTOgogCQljbWQgPSBPQ0ZTMl9JT0NfR0VURkxBR1M7CkBAIC0xOTUsOCArMjAwLDE1IEBACiAJY2FzZSBPQ0ZTMl9JT0NfR1JPVVBfRVhURU5EOgogCWNhc2UgT0NGUzJfSU9DX0dST1VQX0FERDoKIAljYXNlIE9DRlMyX0lPQ19HUk9VUF9BREQ2NDoKLQljYXNlIE9DRlMyX0lPQ19SRUZMSU5LOgogCQlicmVhazsKKwljYXNlIE9DRlMyX0lPQ19SRUZMSU5LOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIChzdHJ1Y3QgcmVmbGlua19hcmd1bWVudHMgKilhcmcsCisJCQkJICAgc2l6ZW9mKGFyZ3MpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwcmVzZXJ2ZSA9IChhcmdzLnByZXNlcnZlICE9IDApOworCisJCXJldHVybiBvY2ZzMl9yZWZsaW5rX2lvY3RsKGlub2RlLCBjb21wYXRfcHRyKGFyZ3Mub2xkX3BhdGgpLAorCQkJCQkgICBjb21wYXRfcHRyKGFyZ3MubmV3X3BhdGgpLCBwcmVzZXJ2ZSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggYmYzNGM0OS4uOTMzNmM2MCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtMjAzNCw3ICsyMDM0LDcgQEAKIAkJc3RhdHVzID0gLUVOT0VOVDsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlyZXR1cm4gc3RhdHVzOwotCX0JCisJfQogCiAJbXV0ZXhfbG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhvcnBoYW5fZGlyX2lub2RlLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IDkzNjJlZWEuLjc0MGY0NDggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtMTM2LDYgKzEzNiwxMCBAQAogI2RlZmluZSBPQ0ZTMl9MT0NLX1BFTkRJTkcgICAgICAgKDB4MDAwMDA0MDApIC8qIFRoaXMgbG9ja3JlcyBpcyBwZW5kaW5nIGEKIAkJCQkJCSBjYWxsIHRvIGRsbV9sb2NrLiAgT25seQogCQkJCQkJIGV4aXN0cyB3aXRoIEJVU1kgc2V0LiAqLworI2RlZmluZSBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcgKDB4MDAwMDA4MDApIC8qIGJsb2NrcyB0aGUgZGMgdGhyZWFkCisJCQkJCQkgICAgICogZnJvbSBkb3duY29udmVydGluZworCQkJCQkJICAgICAqIGJlZm9yZSB0aGUgdXBjb252ZXJ0CisJCQkJCQkgICAgICogaGFzIGNvbXBsZXRlZCAqLwogCiBzdHJ1Y3Qgb2NmczJfbG9ja19yZXNfb3BzOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oIGIvZnMvb2NmczIvb2NmczJfZnMuaAppbmRleCAxYTFhNjc5Li43NjM4YTM4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oCisrKyBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKQEAgLTE0MTcsOSArMTQxNywxNiBAQAogCXJldHVybiBibG9ja3NpemUgLSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIuaV9zeW1saW5rKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfbWF4X2lubGluZV9kYXRhKGludCBibG9ja3NpemUpCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9tYXhfaW5saW5lX2RhdGFfd2l0aF94YXR0cihpbnQgYmxvY2tzaXplLAorCQkJCQkJICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpCiB7Ci0JcmV0dXJuIGJsb2Nrc2l6ZSAtIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSk7CisJaWYgKGRpICYmIChkaS0+aV9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKQorCQlyZXR1cm4gYmxvY2tzaXplIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSkgLQorCQkJZGktPmlfeGF0dHJfaW5saW5lX3NpemU7CisJZWxzZQorCQlyZXR1cm4gYmxvY2tzaXplIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V4dGVudF9yZWNzX3Blcl9pbm9kZShpbnQgYmxvY2tzaXplKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwppbmRleCA3NGRiMmJlLi44YWU2NWM5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYworKysgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwpAQCAtMjk0NSw3ICsyOTQ1LDcgQEAKIAogCXdoaWxlIChvZmZzZXQgPCBlbmQpIHsKIAkJcGFnZV9pbmRleCA9IG9mZnNldCA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCQltYXBfZW5kID0gKHBhZ2VfaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOworCQltYXBfZW5kID0gKChsb2ZmX3QpcGFnZV9pbmRleCArIDEpIDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJCWlmIChtYXBfZW5kID4gZW5kKQogCQkJbWFwX2VuZCA9IGVuZDsKIApAQCAtMjk1Nyw4ICsyOTU3LDEyIEBACiAKIAkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlX2luZGV4KTsKIAotCQkvKiBUaGlzIHBhZ2UgY2FuJ3QgYmUgZGlydGllZCBiZWZvcmUgd2UgQ29XIGl0IG91dC4gKi8KLQkJQlVHX09OKFBhZ2VEaXJ0eShwYWdlKSk7CisJCS8qCisJCSAqIEluIGNhc2UgUEFHRV9DQUNIRV9TSVpFIDw9IENMVVNURVJfU0laRSwgVGhpcyBwYWdlCisJCSAqIGNhbid0IGJlIGRpcnRpZWQgYmVmb3JlIHdlIENvVyBpdCBvdXQuCisJCSAqLworCQlpZiAoUEFHRV9DQUNIRV9TSVpFIDw9IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZSkKKwkJCUJVR19PTihQYWdlRGlydHkocGFnZSkpOwogCiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCQlyZXQgPSBibG9ja19yZWFkX2Z1bGxfcGFnZShwYWdlLCBvY2ZzMl9nZXRfYmxvY2spOwpAQCAtMzE3MCw3ICszMTc0LDcgQEAKIAogCXdoaWxlIChvZmZzZXQgPCBlbmQpIHsKIAkJcGFnZV9pbmRleCA9IG9mZnNldCA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCQltYXBfZW5kID0gKHBhZ2VfaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOworCQltYXBfZW5kID0gKChsb2ZmX3QpcGFnZV9pbmRleCArIDEpIDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJCWlmIChtYXBfZW5kID4gZW5kKQogCQkJbWFwX2VuZCA9IGVuZDsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3RhY2tfbzJjYi5jIGIvZnMvb2NmczIvc3RhY2tfbzJjYi5jCmluZGV4IGU0OWM0MTAuLjMwMzhjOTIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N0YWNrX28yY2IuYworKysgYi9mcy9vY2ZzMi9zdGFja19vMmNiLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCXUzMiBkbG1fa2V5OwogCXN0cnVjdCBkbG1fY3R4dCAqZGxtOwogCXN0cnVjdCBvMmRsbV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBkbG1fcHJvdG9jb2xfdmVyc2lvbiBkbG1fdmVyc2lvbjsKKwlzdHJ1Y3QgZGxtX3Byb3RvY29sX3ZlcnNpb24gZnNfdmVyc2lvbjsKIAogCUJVR19PTihjb25uID09IE5VTEwpOwogCUJVR19PTihvMmNiX3N0YWNrLnNwX3Byb3RvID09IE5VTEwpOwpAQCAtMzA0LDE4ICszMDQsMTggQEAKIAkvKiB1c2VkIGJ5IHRoZSBkbG0gY29kZSB0byBtYWtlIG1lc3NhZ2UgaGVhZGVycyB1bmlxdWUsIGVhY2gKIAkgKiBub2RlIGluIHRoaXMgZG9tYWluIG11c3QgYWdyZWUgb24gdGhpcy4gKi8KIAlkbG1fa2V5ID0gY3JjMzJfbGUoMCwgY29ubi0+Y2NfbmFtZSwgY29ubi0+Y2NfbmFtZWxlbik7Ci0JZGxtX3ZlcnNpb24ucHZfbWFqb3IgPSBjb25uLT5jY192ZXJzaW9uLnB2X21ham9yOwotCWRsbV92ZXJzaW9uLnB2X21pbm9yID0gY29ubi0+Y2NfdmVyc2lvbi5wdl9taW5vcjsKKwlmc192ZXJzaW9uLnB2X21ham9yID0gY29ubi0+Y2NfdmVyc2lvbi5wdl9tYWpvcjsKKwlmc192ZXJzaW9uLnB2X21pbm9yID0gY29ubi0+Y2NfdmVyc2lvbi5wdl9taW5vcjsKIAotCWRsbSA9IGRsbV9yZWdpc3Rlcl9kb21haW4oY29ubi0+Y2NfbmFtZSwgZGxtX2tleSwgJmRsbV92ZXJzaW9uKTsKKwlkbG0gPSBkbG1fcmVnaXN0ZXJfZG9tYWluKGNvbm4tPmNjX25hbWUsIGRsbV9rZXksICZmc192ZXJzaW9uKTsKIAlpZiAoSVNfRVJSKGRsbSkpIHsKIAkJcmMgPSBQVFJfRVJSKGRsbSk7CiAJCW1sb2dfZXJybm8ocmMpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWNvbm4tPmNjX3ZlcnNpb24ucHZfbWFqb3IgPSBkbG1fdmVyc2lvbi5wdl9tYWpvcjsKLQljb25uLT5jY192ZXJzaW9uLnB2X21pbm9yID0gZGxtX3ZlcnNpb24ucHZfbWlub3I7CisJY29ubi0+Y2NfdmVyc2lvbi5wdl9tYWpvciA9IGZzX3ZlcnNpb24ucHZfbWFqb3I7CisJY29ubi0+Y2NfdmVyc2lvbi5wdl9taW5vciA9IGZzX3ZlcnNpb24ucHZfbWlub3I7CiAJY29ubi0+Y2NfbG9ja3NwYWNlID0gZGxtOwogCiAJZGxtX3JlZ2lzdGVyX2V2aWN0aW9uX2NiKGRsbSwgJnByaXYtPm9wX2V2aWN0aW9uX2NiKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDI2MDY5OTEuLjc1NWNkNDkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAKIAkJCQkgICAgICJmaWxlIHN5c3RlbSwgYnV0IHdyaXRlIGFjY2VzcyBpcyAiCiAJCQkJICAgICAidW5hdmFpbGFibGUuXG4iKTsKIAkJCWVsc2UKLQkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CQkJCisJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byByZWFkX3N1cGVyX2Vycm9yOwogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N5bWxpbmsuYyBiL2ZzL29jZnMyL3N5bWxpbmsuYwppbmRleCA0OWIxMzNjLi4zMjQ5OWQyMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ltbGluay5jCisrKyBiL2ZzL29jZnMyL3N5bWxpbmsuYwpAQCAtMTM3LDIwICsxMzcsMjAgQEAKIAl9CiAKIAltZW1jcHkobGluaywgdGFyZ2V0LCBsZW4pOwotCW5kX3NldF9saW5rKG5kLCBsaW5rKTsKIAogYmFpbDoKKwluZF9zZXRfbGluayhuZCwgc3RhdHVzID8gRVJSX1BUUihzdGF0dXMpIDogbGluayk7CiAJYnJlbHNlKGJoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwotCXJldHVybiBzdGF0dXMgPyBFUlJfUFRSKHN0YXR1cykgOiBsaW5rOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBvY2ZzMl9mYXN0X3B1dF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQsIHZvaWQgKmNvb2tpZSkKIHsKLQljaGFyICpsaW5rID0gY29va2llOwotCi0Ja2ZyZWUobGluayk7CisJY2hhciAqbGluayA9IG5kX2dldF9saW5rKG5kKTsKKwlpZiAoIUlTX0VSUihsaW5rKSkKKwkJa2ZyZWUobGluayk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3VwdG9kYXRlLmMgYi9mcy9vY2ZzMi91cHRvZGF0ZS5jCmluZGV4IGM2MTM2OTMuLmEwYTEyMGUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3VwdG9kYXRlLmMKKysrIGIvZnMvb2NmczIvdXB0b2RhdGUuYwpAQCAtMjY3LDggKzI2Nyw4IEBACiB9CiAKIC8qIFdhcm5pbmc6IGV2ZW4gaWYgaXQgcmV0dXJucyB0cnVlLCB0aGlzIGRvZXMgKm5vdCogZ3VhcmFudGVlIHRoYXQKLSAqIHRoZSBibG9jayBpcyBzdG9yZWQgaW4gb3VyIGlub2RlIG1ldGFkYXRhIGNhY2hlLiAKLSAqIAorICogdGhlIGJsb2NrIGlzIHN0b3JlZCBpbiBvdXIgaW5vZGUgbWV0YWRhdGEgY2FjaGUuCisgKgogICogVGhpcyBjYW4gYmUgY2FsbGVkIHVuZGVyIGxvY2tfYnVmZmVyKCkKICAqLwogaW50IG9jZnMyX2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCAxM2I1ZDA3Li4xOGUyMGZlIDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC0yNzAsNyArMjcwLDkgQEAKIAkJYmxvY2tlZCA9IHAtPmJsb2NrZWQ7CiAJCWNvbGxlY3Rfc2lnaWduX3NpZ2NhdGNoKHAsICZpZ25vcmVkLCAmY2F1Z2h0KTsKIAkJbnVtX3RocmVhZHMgPSBhdG9taWNfcmVhZCgmcC0+c2lnbmFsLT5jb3VudCk7CisJCXJjdV9yZWFkX2xvY2soKTsgIC8qIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3Q/ICovCiAJCXFzaXplID0gYXRvbWljX3JlYWQoJl9fdGFza19jcmVkKHApLT51c2VyLT5zaWdwZW5kaW5nKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXFsaW0gPSBwLT5zaWduYWwtPnJsaW1bUkxJTUlUX1NJR1BFTkRJTkddLnJsaW1fY3VyOwogCQl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCBlNDJiYmQ4Li42MjNlMmZmIDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMTA5NSw4ICsxMDk1LDEyIEBACiAJaWYgKCFjYXBhYmxlKENBUF9BVURJVF9DT05UUk9MKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChjdXJyZW50ICE9IHBpZF90YXNrKHByb2NfcGlkKGlub2RlKSwgUElEVFlQRV9QSUQpKQorCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAoY3VycmVudCAhPSBwaWRfdGFzayhwcm9jX3BpZChpbm9kZSksIFBJRFRZUEVfUElEKSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FUEVSTTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQogCQljb3VudCA9IFBBR0VfU0laRSAtIDE7CkBAIC0yMzY5LDE2ICsyMzczLDMwIEBACiB7CiAJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zID0gZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87CiAJcGlkX3QgdGdpZCA9IHRhc2tfdGdpZF9ucl9ucyhjdXJyZW50LCBucyk7Ci0JY2hhciB0bXBbUFJPQ19OVU1CVUZdOwotCWlmICghdGdpZCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Ci0Jc3ByaW50Zih0bXAsICIlZCIsIHRhc2tfdGdpZF9ucl9ucyhjdXJyZW50LCBucykpOwotCXJldHVybiBFUlJfUFRSKHZmc19mb2xsb3dfbGluayhuZCx0bXApKTsKKwljaGFyICpuYW1lID0gRVJSX1BUUigtRU5PRU5UKTsKKwlpZiAodGdpZCkgeworCQluYW1lID0gX19nZXRuYW1lKCk7CisJCWlmICghbmFtZSkKKwkJCW5hbWUgPSBFUlJfUFRSKC1FTk9NRU0pOworCQllbHNlCisJCQlzcHJpbnRmKG5hbWUsICIlZCIsIHRnaWQpOworCX0KKwluZF9zZXRfbGluayhuZCwgbmFtZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nfc2VsZl9wdXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kLAorCQkJCXZvaWQgKmNvb2tpZSkKK3sKKwljaGFyICpzID0gbmRfZ2V0X2xpbmsobmQpOworCWlmICghSVNfRVJSKHMpKQorCQlfX3B1dG5hbWUocyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX3NlbGZfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZGxpbmsJPSBwcm9jX3NlbGZfcmVhZGxpbmssCiAJLmZvbGxvd19saW5rCT0gcHJvY19zZWxmX2ZvbGxvd19saW5rLAorCS5wdXRfbGluawk9IHByb2Nfc2VsZl9wdXRfbGluaywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jIGIvZnMvcHJvYy9wcm9jX2RldnRyZWUuYwppbmRleCAxMjMyNTdiLi5mODY1MGRjIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCisrKyBiL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKQEAgLTEwLDE2ICsxMCwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLSNpZm5kZWYgSEFWRV9BUkNIX0RFVlRSRUVfRklYVVBTCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X25vZGVfcHJvY19lbnRyeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCSAgICAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQogewotfQorI2lmZGVmIEhBVkVfQVJDSF9ERVZUUkVFX0ZJWFVQUworCW5wLT5wZGUgPSBkZTsKICNlbmRpZgorfQogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2RldmljZV90cmVlOwogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pbm9kZS5jIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwppbmRleCA5MDg3YjEwLi4yZGYwZjVjIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKQEAgLTE0OTcsOSArMTQ5NywxMSBAQAogCiAJYXJncy5vYmplY3RpZCA9IGtleS0+b25fZGlza19rZXkua19vYmplY3RpZDsKIAlhcmdzLmRpcmlkID0ga2V5LT5vbl9kaXNrX2tleS5rX2Rpcl9pZDsKKwlyZWlzZXJmc193cml0ZV91bmxvY2socyk7CiAJaW5vZGUgPSBpZ2V0NV9sb2NrZWQocywga2V5LT5vbl9kaXNrX2tleS5rX29iamVjdGlkLAogCQkJICAgICByZWlzZXJmc19maW5kX2FjdG9yLCByZWlzZXJmc19pbml0X2xvY2tlZF9pbm9kZSwKIAkJCSAgICAgKHZvaWQgKikoJmFyZ3MpKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKHMpOwogCWlmICghaW5vZGUpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKaW5kZXggODNhYzRkMy4uYmE5ODU0NiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvam91cm5hbC5jCisrKyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwpAQCAtMjkxMyw3ICsyOTEzLDkgQEAKIAlqb3VybmFsLT5qX21vdW50X2lkID0gMTA7CiAJam91cm5hbC0+al9zdGF0ZSA9IDA7CiAJYXRvbWljX3NldCgmKGpvdXJuYWwtPmpfamxvY2spLCAwKTsKKwlyZWlzZXJmc193cml0ZV91bmxvY2soc2IpOwogCWpvdXJuYWwtPmpfY25vZGVfZnJlZV9saXN0ID0gYWxsb2NhdGVfY25vZGVzKG51bV9jbm9kZXMpOworCXJlaXNlcmZzX3dyaXRlX2xvY2soc2IpOwogCWpvdXJuYWwtPmpfY25vZGVfZnJlZV9vcmlnID0gam91cm5hbC0+al9jbm9kZV9mcmVlX2xpc3Q7CiAJam91cm5hbC0+al9jbm9kZV9mcmVlID0gam91cm5hbC0+al9jbm9kZV9mcmVlX2xpc3QgPyBudW1fY25vZGVzIDogMDsKIAlqb3VybmFsLT5qX2Nub2RlX3VzZWQgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvaW5vZGUuYyBiL2ZzL3N5c2ZzL2lub2RlLmMKaW5kZXggMjIwYjc1OC4uNmEwNmExZCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvaW5vZGUuYworKysgYi9mcy9zeXNmcy9pbm9kZS5jCkBAIC04MSwyNCArODEsMjMgQEAKIAkJaWYgKCFzZF9hdHRycykKIAkJCXJldHVybiAtRU5PTUVNOwogCQlzZC0+c19pYXR0ciA9IHNkX2F0dHJzOwotCX0gZWxzZSB7Ci0JCS8qIGF0dHJpYnV0ZXMgd2VyZSBjaGFuZ2VkIGF0IGxlYXN0IG9uY2UgaW4gcGFzdCAqLwotCQlpYXR0cnMgPSAmc2RfYXR0cnMtPmlhX2lhdHRyOworCX0KKwkvKiBhdHRyaWJ1dGVzIHdlcmUgY2hhbmdlZCBhdCBsZWFzdCBvbmNlIGluIHBhc3QgKi8KKwlpYXR0cnMgPSAmc2RfYXR0cnMtPmlhX2lhdHRyOwogCi0JCWlmIChpYV92YWxpZCAmIEFUVFJfVUlEKQotCQkJaWF0dHJzLT5pYV91aWQgPSBpYXR0ci0+aWFfdWlkOwotCQlpZiAoaWFfdmFsaWQgJiBBVFRSX0dJRCkKLQkJCWlhdHRycy0+aWFfZ2lkID0gaWF0dHItPmlhX2dpZDsKLQkJaWYgKGlhX3ZhbGlkICYgQVRUUl9BVElNRSkKLQkJCWlhdHRycy0+aWFfYXRpbWUgPSBpYXR0ci0+aWFfYXRpbWU7Ci0JCWlmIChpYV92YWxpZCAmIEFUVFJfTVRJTUUpCi0JCQlpYXR0cnMtPmlhX210aW1lID0gaWF0dHItPmlhX210aW1lOwotCQlpZiAoaWFfdmFsaWQgJiBBVFRSX0NUSU1FKQotCQkJaWF0dHJzLT5pYV9jdGltZSA9IGlhdHRyLT5pYV9jdGltZTsKLQkJaWYgKGlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7Ci0JCQl1bW9kZV90IG1vZGUgPSBpYXR0ci0+aWFfbW9kZTsKLQkJCWlhdHRycy0+aWFfbW9kZSA9IHNkLT5zX21vZGUgPSBtb2RlOwotCQl9CisJaWYgKGlhX3ZhbGlkICYgQVRUUl9VSUQpCisJCWlhdHRycy0+aWFfdWlkID0gaWF0dHItPmlhX3VpZDsKKwlpZiAoaWFfdmFsaWQgJiBBVFRSX0dJRCkKKwkJaWF0dHJzLT5pYV9naWQgPSBpYXR0ci0+aWFfZ2lkOworCWlmIChpYV92YWxpZCAmIEFUVFJfQVRJTUUpCisJCWlhdHRycy0+aWFfYXRpbWUgPSBpYXR0ci0+aWFfYXRpbWU7CisJaWYgKGlhX3ZhbGlkICYgQVRUUl9NVElNRSkKKwkJaWF0dHJzLT5pYV9tdGltZSA9IGlhdHRyLT5pYV9tdGltZTsKKwlpZiAoaWFfdmFsaWQgJiBBVFRSX0NUSU1FKQorCQlpYXR0cnMtPmlhX2N0aW1lID0gaWF0dHItPmlhX2N0aW1lOworCWlmIChpYV92YWxpZCAmIEFUVFJfTU9ERSkgeworCQl1bW9kZV90IG1vZGUgPSBpYXR0ci0+aWFfbW9kZTsKKwkJaWF0dHJzLT5pYV9tb2RlID0gc2QtPnNfbW9kZSA9IG1vZGU7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlCmluZGV4IDU2NjQxZmUuLjVjNWEzNjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZQorKysgYi9mcy94ZnMvTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDcgQEAKICMgSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAjCiAKLUVYVFJBX0NGTEFHUyArPQkgLUkkKHNyYykgLUkkKHNyYykvbGludXgtMi42IC1mdW5zaWduZWQtY2hhcgorRVhUUkFfQ0ZMQUdTICs9CSAtSSQoc3JjKSAtSSQoc3JjKS9saW51eC0yLjYKIAogWEZTX0xJTlVYIDo9IGxpbnV4LTIuNgogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L2ttZW0uYyBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCmluZGV4IDJkM2Y5MGEuLmJjNzQwNTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CkBAIC0yNCw4ICsyMywyNSBAQAogI2luY2x1ZGUgInRpbWUuaCIKICNpbmNsdWRlICJrbWVtLmgiCiAKLSNkZWZpbmUgTUFYX1ZNQUxMT0NTCTYKLSNkZWZpbmUgTUFYX1NMQUJfU0laRQkweDIwMDAwCisvKgorICogR3JlZWR5IGFsbG9jYXRpb24uICBNYXkgZmFpbCBhbmQgbWF5IHJldHVybiB2bWFsbG9jZWQgbWVtb3J5LgorICoKKyAqIE11c3QgYmUgZnJlZWQgdXNpbmcga21lbV9mcmVlX2xhcmdlLgorICovCit2b2lkICoKK2ttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKnNpemUsIHNpemVfdCBtaW5zaXplLCBzaXplX3QgbWF4c2l6ZSkKK3sKKwl2b2lkCQkqcHRyOworCXNpemVfdAkJa21zaXplID0gbWF4c2l6ZTsKKworCXdoaWxlICghKHB0ciA9IGttZW1femFsbG9jX2xhcmdlKGttc2l6ZSkpKSB7CisJCWlmICgoa21zaXplID4+PSAxKSA8PSBtaW5zaXplKQorCQkJa21zaXplID0gbWluc2l6ZTsKKwl9CisJaWYgKHB0cikKKwkJKnNpemUgPSBrbXNpemU7CisJcmV0dXJuIHB0cjsKK30KIAogdm9pZCAqCiBrbWVtX2FsbG9jKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgZmxhZ3MpCkBAIC0zNCwxOSArNTAsOCBAQAogCWdmcF90CWxmbGFncyA9IGttZW1fZmxhZ3NfY29udmVydChmbGFncyk7CiAJdm9pZAkqcHRyOwogCi0jaWZkZWYgREVCVUcKLQlpZiAodW5saWtlbHkoIShmbGFncyAmIEtNX0xBUkdFKSAmJiAoc2l6ZSA+IFBBR0VfU0laRSkpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkxhcmdlICVzIGF0dGVtcHQsIHNpemU9JWxkXG4iLAotCQkJX19mdW5jX18sIChsb25nKXNpemUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JfQotI2VuZGlmCi0KIAlkbyB7Ci0JCWlmIChzaXplIDwgTUFYX1NMQUJfU0laRSB8fCByZXRyaWVzID4gTUFYX1ZNQUxMT0NTKQotCQkJcHRyID0ga21hbGxvYyhzaXplLCBsZmxhZ3MpOwotCQllbHNlCi0JCQlwdHIgPSBfX3ZtYWxsb2Moc2l6ZSwgbGZsYWdzLCBQQUdFX0tFUk5FTCk7CisJCXB0ciA9IGttYWxsb2Moc2l6ZSwgbGZsYWdzKTsKIAkJaWYgKHB0ciB8fCAoZmxhZ3MgJiAoS01fTUFZRkFJTHxLTV9OT1NMRUVQKSkpCiAJCQlyZXR1cm4gcHRyOwogCQlpZiAoISgrK3JldHJpZXMgJSAxMDApKQpAQCAtNjgsMjcgKzczLDYgQEAKIAlyZXR1cm4gcHRyOwogfQogCi12b2lkICoKLWttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKnNpemUsIHNpemVfdCBtaW5zaXplLCBzaXplX3QgbWF4c2l6ZSwKLQkJICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQotewotCXZvaWQJCSpwdHI7Ci0Jc2l6ZV90CQlrbXNpemUgPSBtYXhzaXplOwotCXVuc2lnbmVkIGludAlrbWZsYWdzID0gKGZsYWdzICYgfktNX1NMRUVQKSB8IEtNX05PU0xFRVA7Ci0KLQl3aGlsZSAoIShwdHIgPSBrbWVtX3phbGxvYyhrbXNpemUsIGttZmxhZ3MpKSkgewotCQlpZiAoKGttc2l6ZSA8PSBtaW5zaXplKSAmJiAoZmxhZ3MgJiBLTV9OT1NMRUVQKSkKLQkJCWJyZWFrOwotCQlpZiAoKGttc2l6ZSA+Pj0gMSkgPD0gbWluc2l6ZSkgewotCQkJa21zaXplID0gbWluc2l6ZTsKLQkJCWttZmxhZ3MgPSBmbGFnczsKLQkJfQotCX0KLQlpZiAocHRyKQotCQkqc2l6ZSA9IGttc2l6ZTsKLQlyZXR1cm4gcHRyOwotfQotCiB2b2lkCiBrbWVtX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmggYi9mcy94ZnMvbGludXgtMi42L2ttZW0uaAppbmRleCAxNzljYmQ2Li5mN2M4ZjdhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L2ttZW0uaAorKysgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uaApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAvKgogICogR2VuZXJhbCBtZW1vcnkgYWxsb2NhdGlvbiBpbnRlcmZhY2VzCkBAIC0zMCw3ICszMSw2IEBACiAjZGVmaW5lIEtNX05PU0xFRVAJMHgwMDAydQogI2RlZmluZSBLTV9OT0ZTCQkweDAwMDR1CiAjZGVmaW5lIEtNX01BWUZBSUwJMHgwMDA4dQotI2RlZmluZSBLTV9MQVJHRQkweDAwMTB1CiAKIC8qCiAgKiBXZSB1c2UgYSBzcGVjaWFsIHByb2Nlc3MgZmxhZyB0byBhdm9pZCByZWN1cnNpdmUgY2FsbGJhY2tzIGludG8KQEAgLTQyLDcgKzQyLDcgQEAKIHsKIAlnZnBfdAlsZmxhZ3M7CiAKLQlCVUdfT04oZmxhZ3MgJiB+KEtNX1NMRUVQfEtNX05PU0xFRVB8S01fTk9GU3xLTV9NQVlGQUlMfEtNX0xBUkdFKSk7CisJQlVHX09OKGZsYWdzICYgfihLTV9TTEVFUHxLTV9OT1NMRUVQfEtNX05PRlN8S01fTUFZRkFJTCkpOwogCiAJaWYgKGZsYWdzICYgS01fTk9TTEVFUCkgewogCQlsZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOOwpAQCAtNTYsMTAgKzU2LDI1IEBACiAKIGV4dGVybiB2b2lkICprbWVtX2FsbG9jKHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICprbWVtX3phbGxvYyhzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7Ci1leHRlcm4gdm9pZCAqa21lbV96YWxsb2NfZ3JlZWR5KHNpemVfdCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICprbWVtX3JlYWxsb2MoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICBrbWVtX2ZyZWUoY29uc3Qgdm9pZCAqKTsKIAorc3RhdGljIGlubGluZSB2b2lkICprbWVtX3phbGxvY19sYXJnZShzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICpwdHI7CisKKwlwdHIgPSB2bWFsbG9jKHNpemUpOworCWlmIChwdHIpCisJCW1lbXNldChwdHIsIDAsIHNpemUpOworCXJldHVybiBwdHI7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQga21lbV9mcmVlX2xhcmdlKHZvaWQgKnB0cikKK3sKKwl2ZnJlZShwdHIpOworfQorCitleHRlcm4gdm9pZCAqa21lbV96YWxsb2NfZ3JlZWR5KHNpemVfdCAqLCBzaXplX3QsIHNpemVfdCk7CisKIC8qCiAgKiBab25lIGludGVyZmFjZXMKICAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYwppbmRleCA4ODNjYTVhLi5iZjg1YmJlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCXN0cnVjdCB4ZnNfYWNsICp4ZnNfYWNsOwogCWludCBsZW4gPSBzaXplb2Yoc3RydWN0IHhmc19hY2wpOwotCWNoYXIgKmVhX25hbWU7CisJdW5zaWduZWQgY2hhciAqZWFfbmFtZTsKIAlpbnQgZXJyb3I7CiAKIAlhY2wgPSBnZXRfY2FjaGVkX2FjbChpbm9kZSwgdHlwZSk7CkBAIC0xMzMsNyArMTMzLDggQEAKIAlpZiAoIXhmc19hY2wpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JZXJyb3IgPSAteGZzX2F0dHJfZ2V0KGlwLCBlYV9uYW1lLCAoY2hhciAqKXhmc19hY2wsICZsZW4sIEFUVFJfUk9PVCk7CisJZXJyb3IgPSAteGZzX2F0dHJfZ2V0KGlwLCBlYV9uYW1lLCAodW5zaWduZWQgY2hhciAqKXhmc19hY2wsCisJCQkJCQkJJmxlbiwgQVRUUl9ST09UKTsKIAlpZiAoZXJyb3IpIHsKIAkJLyoKIAkJICogSWYgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0IG1ha2Ugc3VyZSB3ZSBoYXZlIGEgbmVnYXRpdmUKQEAgLTE2Miw3ICsxNjMsNyBAQAogeGZzX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKLQljaGFyICplYV9uYW1lOworCXVuc2lnbmVkIGNoYXIgKmVhX25hbWU7CiAJaW50IGVycm9yOwogCiAJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpCkBAIC0xOTQsNyArMTk1LDcgQEAKIAkJCShzaXplb2Yoc3RydWN0IHhmc19hY2xfZW50cnkpICoKIAkJCSAoWEZTX0FDTF9NQVhfRU5UUklFUyAtIGFjbC0+YV9jb3VudCkpOwogCi0JCWVycm9yID0gLXhmc19hdHRyX3NldChpcCwgZWFfbmFtZSwgKGNoYXIgKil4ZnNfYWNsLAorCQllcnJvciA9IC14ZnNfYXR0cl9zZXQoaXAsIGVhX25hbWUsICh1bnNpZ25lZCBjaGFyICopeGZzX2FjbCwKIAkJCQlsZW4sIEFUVFJfUk9PVCk7CiAKIAkJa2ZyZWUoeGZzX2FjbCk7CkBAIC0yNjIsNyArMjYzLDcgQEAKIH0KIAogc3RhdGljIGludAoteGZzX2FjbF9leGlzdHMoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbmFtZSkKK3hmc19hY2xfZXhpc3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGNoYXIgKm5hbWUpCiB7CiAJaW50IGxlbiA9IHNpemVvZihzdHJ1Y3QgeGZzX2FjbCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggNzdiOGJlOC4uNmY3NmJhOCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdF9zb3J0Lmg+CiAKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfaW51bS5oIgpAQCAtNzYsNiArNzcsMjcgQEAKICNkZWZpbmUgeGZzX2J1Zl9kZWFsbG9jYXRlKGJwKSBcCiAJa21lbV96b25lX2ZyZWUoeGZzX2J1Zl96b25lLCAoYnApKTsKIAorc3RhdGljIGlubGluZSBpbnQKK3hmc19idWZfaXNfdm1hcHBlZCgKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJLyoKKwkgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIHZtYXBwZWQuCisJICoKKwkgKiBUaGUgWEJGX01BUFBFRCBmbGFnIGlzIHNldCBpZiB0aGUgYnVmZmVyIHNob3VsZCBiZSBtYXBwZWQsIGJ1dCB0aGUKKwkgKiBjb2RlIGlzIGNsZXZlciBlbm91Z2ggdG8ga25vdyBpdCBkb2Vzbid0IGhhdmUgdG8gbWFwIGEgc2luZ2xlIHBhZ2UsCisJICogc28gdGhlIGNoZWNrIGhhcyB0byBiZSBib3RoIGZvciBYQkZfTUFQUEVEIGFuZCBicC0+Yl9wYWdlX2NvdW50ID4gMS4KKwkgKi8KKwlyZXR1cm4gKGJwLT5iX2ZsYWdzICYgWEJGX01BUFBFRCkgJiYgYnAtPmJfcGFnZV9jb3VudCA+IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit4ZnNfYnVmX3ZtYXBfbGVuKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlyZXR1cm4gKGJwLT5iX3BhZ2VfY291bnQgKiBQQUdFX1NJWkUpIC0gYnAtPmJfb2Zmc2V0OworfQorCiAvKgogICoJUGFnZSBSZWdpb24gaW50ZXJmYWNlcy4KICAqCkBAIC0zMTQsNyArMzM2LDcgQEAKIAlpZiAoYnAtPmJfZmxhZ3MgJiAoX1hCRl9QQUdFX0NBQ0hFfF9YQkZfUEFHRVMpKSB7CiAJCXVpbnQJCWk7CiAKLQkJaWYgKChicC0+Yl9mbGFncyAmIFhCRl9NQVBQRUQpICYmIChicC0+Yl9wYWdlX2NvdW50ID4gMSkpCisJCWlmICh4ZnNfYnVmX2lzX3ZtYXBwZWQoYnApKQogCQkJZnJlZV9hZGRyZXNzKGJwLT5iX2FkZHIgLSBicC0+Yl9vZmZzZXQpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBicC0+Yl9wYWdlX2NvdW50OyBpKyspIHsKQEAgLTEwNTEsMjIgKzEwNzMsMzAgQEAKIH0KIAogaW50Ci14ZnNfYmF3cml0ZSgKLQl2b2lkCQkJKm1wLAoreGZzX2J3cml0ZSgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQogewotCXRyYWNlX3hmc19idWZfYmF3cml0ZShicCwgX1JFVF9JUF8pOworCWludAkJCWlvd2FpdCA9IChicC0+Yl9mbGFncyAmIFhCRl9BU1lOQykgPT0gMDsKKwlpbnQJCQllcnJvciA9IDA7CiAKLQlBU1NFUlQoYnAtPmJfYm4gIT0gWEZTX0JVRl9EQUREUl9OVUxMKTsKKwlicC0+Yl9zdHJhdCA9IHhmc19iZHN0cmF0X2NiOworCWJwLT5iX21vdW50ID0gbXA7CisJYnAtPmJfZmxhZ3MgfD0gWEJGX1dSSVRFOworCWlmICghaW93YWl0KQorCQlicC0+Yl9mbGFncyB8PSBfWEJGX1JVTl9RVUVVRVM7CiAKIAl4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKGJwKTsKKwl4ZnNfYnVmX2lvc3RyYXRlZ3koYnApOwogCi0JYnAtPmJfZmxhZ3MgJj0gfihYQkZfUkVBRCB8IFhCRl9ERUxXUkkgfCBYQkZfUkVBRF9BSEVBRCk7Ci0JYnAtPmJfZmxhZ3MgfD0gKFhCRl9XUklURSB8IFhCRl9BU1lOQyB8IF9YQkZfUlVOX1FVRVVFUyk7CisJaWYgKGlvd2FpdCkgeworCQllcnJvciA9IHhmc19idWZfaW93YWl0KGJwKTsKKwkJaWYgKGVycm9yKQorCQkJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9NRVRBX0lPX0VSUk9SKTsKKwkJeGZzX2J1Zl9yZWxzZShicCk7CisJfQogCi0JYnAtPmJfbW91bnQgPSBtcDsKLQlicC0+Yl9zdHJhdCA9IHhmc19iZHN0cmF0X2NiOwotCXJldHVybiB4ZnNfYmRzdHJhdF9jYihicCk7CisJcmV0dXJuIGVycm9yOwogfQogCiB2b2lkCkBAIC0xMDg1LDYgKzExMTUsMTI2IEBACiAJeGZzX2J1Zl9kZWx3cmlfcXVldWUoYnAsIDEpOwogfQogCisvKgorICogQ2FsbGVkIHdoZW4gd2Ugd2FudCB0byBzdG9wIGEgYnVmZmVyIGZyb20gZ2V0dGluZyB3cml0dGVuIG9yIHJlYWQuCisgKiBXZSBhdHRhY2ggdGhlIEVJTyBlcnJvciwgbXVjayB3aXRoIGl0cyBmbGFncywgYW5kIGNhbGwgYmlvZG9uZQorICogc28gdGhhdCB0aGUgcHJvcGVyIGlvZG9uZSBjYWxsYmFja3MgZ2V0IGNhbGxlZC4KKyAqLworU1RBVElDIGludAoreGZzX2Jpb2Vycm9yKAorCXhmc19idWZfdCAqYnApCit7CisjaWZkZWYgWEZTRVJST1JERUJVRworCUFTU0VSVChYRlNfQlVGX0lTUkVBRChicCkgfHwgYnAtPmJfaW9kb25lKTsKKyNlbmRpZgorCisJLyoKKwkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZCwgd2UgYXJlbid0IGZsdXNoaW5nIGl0LgorCSAqLworCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisKKwkvKgorCSAqIFdlJ3JlIGNhbGxpbmcgYmlvZG9uZSwgc28gZGVsZXRlIFhCRl9ET05FIGZsYWcuCisJICovCisJWEZTX0JVRl9VTlJFQUQoYnApOworCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKKwlYRlNfQlVGX1VORE9ORShicCk7CisJWEZTX0JVRl9TVEFMRShicCk7CisKKwlYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApOworCXhmc19iaW9kb25lKGJwKTsKKworCXJldHVybiBFSU87Cit9CisKKy8qCisgKiBTYW1lIGFzIHhmc19iaW9lcnJvciwgZXhjZXB0IHRoYXQgd2UgYXJlIHJlbGVhc2luZyB0aGUgYnVmZmVyCisgKiBoZXJlIG91cnNlbHZlcywgYW5kIGF2b2lkaW5nIHRoZSBiaW9kb25lIGNhbGwuCisgKiBUaGlzIGlzIG1lYW50IGZvciB1c2VyZGF0YSBlcnJvcnM7IG1ldGFkYXRhIGJ1ZnMgY29tZSB3aXRoCisgKiBpb2RvbmUgZnVuY3Rpb25zIGF0dGFjaGVkLCBzbyB0aGF0IHdlIGNhbiB0cmFjayBkb3duIGVycm9ycy4KKyAqLworU1RBVElDIGludAoreGZzX2Jpb2Vycm9yX3JlbHNlKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlpbnQ2NF90CQlmbCA9IFhGU19CVUZfQkZMQUdTKGJwKTsKKwkvKgorCSAqIE5vIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIGlzIHVucGlubmVkLgorCSAqIFdlIGFyZW4ndCBmbHVzaGluZyBpdC4KKwkgKgorCSAqIGNodW5raG9sZCBleHBlY3RzIEJfRE9ORSB0byBiZSBzZXQsIHdoZXRoZXIKKwkgKiB3ZSBhY3R1YWxseSBmaW5pc2ggdGhlIEkvTyBvciBub3QuIFdlIGRvbid0IHdhbnQgdG8KKwkgKiBjaGFuZ2UgdGhhdCBpbnRlcmZhY2UuCisJICovCisJWEZTX0JVRl9VTlJFQUQoYnApOworCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKKwlYRlNfQlVGX0RPTkUoYnApOworCVhGU19CVUZfU1RBTEUoYnApOworCVhGU19CVUZfQ0xSX0lPRE9ORV9GVU5DKGJwKTsKKwlYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApOworCWlmICghKGZsICYgWEJGX0FTWU5DKSkgeworCQkvKgorCQkgKiBNYXJrIGJfZXJyb3IgYW5kIEJfRVJST1IgX2JvdGhfLgorCQkgKiBMb3QncyBvZiBjaHVua2NhY2hlIGNvZGUgYXNzdW1lcyB0aGF0LgorCQkgKiBUaGVyZSdzIG5vIHJlYXNvbiB0byBtYXJrIGVycm9yIGZvcgorCQkgKiBBU1lOQyBidWZmZXJzLgorCQkgKi8KKwkJWEZTX0JVRl9FUlJPUihicCwgRUlPKTsKKwkJWEZTX0JVRl9GSU5JU0hfSU9XQUlUKGJwKTsKKwl9IGVsc2UgeworCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwl9CisKKwlyZXR1cm4gRUlPOworfQorCisKKy8qCisgKiBBbGwgeGZzIG1ldGFkYXRhIGJ1ZmZlcnMgZXhjZXB0IGxvZyBzdGF0ZSBtYWNoaW5lIGJ1ZmZlcnMKKyAqIGdldCB0aGlzIGF0dGFjaGVkIGFzIHRoZWlyIGJfYmRzdHJhdCBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gY2F0Y2ggYSBidWZmZXIKKyAqIGFmdGVyIHByZW1hdHVyZWx5IHVucGlubmluZyBpdCB0byBmb3JjaWJseSBzaHV0ZG93biB0aGUgZmlsZXN5c3RlbS4KKyAqLworaW50Cit4ZnNfYmRzdHJhdF9jYigKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJaWYgKFhGU19GT1JDRURfU0hVVERPV04oYnAtPmJfbW91bnQpKSB7CisJCXRyYWNlX3hmc19iZHN0cmF0X3NodXQoYnAsIF9SRVRfSVBfKTsKKwkJLyoKKwkJICogTWV0YWRhdGEgd3JpdGUgdGhhdCBkaWRuJ3QgZ2V0IGxvZ2dlZCBidXQKKwkJICogd3JpdHRlbiBkZWxheWVkIGFueXdheS4gVGhlc2UgYXJlbid0IGFzc29jaWF0ZWQKKwkJICogd2l0aCBhIHRyYW5zYWN0aW9uLCBhbmQgY2FuIGJlIGlnbm9yZWQuCisJCSAqLworCQlpZiAoIWJwLT5iX2lvZG9uZSAmJiAhWEZTX0JVRl9JU1JFQUQoYnApKQorCQkJcmV0dXJuIHhmc19iaW9lcnJvcl9yZWxzZShicCk7CisJCWVsc2UKKwkJCXJldHVybiB4ZnNfYmlvZXJyb3IoYnApOworCX0KKworCXhmc19idWZfaW9yZXF1ZXN0KGJwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyYXBwZXIgYXJvdW5kIGJkc3RyYXQgc28gdGhhdCB3ZSBjYW4gc3RvcCBkYXRhIGZyb20gZ29pbmcgdG8gZGlzayBpbiBjYXNlCisgKiB3ZSBhcmUgc2h1dHRpbmcgZG93biB0aGUgZmlsZXN5c3RlbS4gIFR5cGljYWxseSB1c2VyIGRhdGEgZ29lcyB0aHJ1IHRoaXMKKyAqIHBhdGg7IG9uZSBvZiB0aGUgZXhjZXB0aW9ucyBpcyB0aGUgc3VwZXJibG9jay4KKyAqLwordm9pZAoreGZzYmRzdHJhdCgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQoreworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgeworCQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7CisJCXhmc19iaW9lcnJvcl9yZWxzZShicCk7CisJCXJldHVybjsKKwl9CisKKwl4ZnNfYnVmX2lvcmVxdWVzdChicCk7Cit9CisKIFNUQVRJQyB2b2lkCiBfeGZzX2J1Zl9pb2VuZCgKIAl4ZnNfYnVmX3QJCSpicCwKQEAgLTExMDcsNiArMTI1Nyw5IEBACiAKIAl4ZnNfYnVmX2lvZXJyb3IoYnAsIC1lcnJvcik7CiAKKwlpZiAoIWVycm9yICYmIHhmc19idWZfaXNfdm1hcHBlZChicCkgJiYgKGJwLT5iX2ZsYWdzICYgWEJGX1JFQUQpKQorCQlpbnZhbGlkYXRlX2tlcm5lbF92bWFwX3JhbmdlKGJwLT5iX2FkZHIsIHhmc19idWZfdm1hcF9sZW4oYnApKTsKKwogCWRvIHsKIAkJc3RydWN0IHBhZ2UJKnBhZ2UgPSBidmVjLT5idl9wYWdlOwogCkBAIC0xMjE2LDYgKzEzNjksMTAgQEAKIAogc3VibWl0X2lvOgogCWlmIChsaWtlbHkoYmlvLT5iaV9zaXplKSkgeworCQlpZiAoeGZzX2J1Zl9pc192bWFwcGVkKGJwKSkgeworCQkJZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2UoYnAtPmJfYWRkciwKKwkJCQkJCXhmc19idWZfdm1hcF9sZW4oYnApKTsKKwkJfQogCQlzdWJtaXRfYmlvKHJ3LCBiaW8pOwogCQlpZiAoc2l6ZSkKIAkJCWdvdG8gbmV4dF9jaHVuazsKQEAgLTEyOTYsNyArMTQ1Myw3IEBACiAJeGZzX2J1Zl90CQkqYnAsCS8qIGJ1ZmZlciB0byBwcm9jZXNzCQkqLwogCXNpemVfdAkJCWJvZmYsCS8qIHN0YXJ0aW5nIGJ1ZmZlciBvZmZzZXQJKi8KIAlzaXplX3QJCQlic2l6ZSwJLyogbGVuZ3RoIHRvIGNvcHkJCSovCi0JY2FkZHJfdAkJCWRhdGEsCS8qIGRhdGEgYWRkcmVzcwkJCSovCisJdm9pZAkJCSpkYXRhLAkvKiBkYXRhIGFkZHJlc3MJCQkqLwogCXhmc19idWZfcndfdAkJbW9kZSkJLyogcmVhZC93cml0ZS96ZXJvIGZsYWcJCSovCiB7CiAJc2l6ZV90CQkJYmVuZCwgY3BvZmYsIGNzaXplOwpAQCAtMTM3OCw4ICsxNTM1LDggQEAKIAogCWJ0cC0+YnRfaGFzaHNoaWZ0ID0gZXh0ZXJuYWwgPyAzIDogODsJLyogOCBvciAyNTYgYnVja2V0cyAqLwogCWJ0cC0+YnRfaGFzaG1hc2sgPSAoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCkgLSAxOwotCWJ0cC0+YnRfaGFzaCA9IGttZW1femFsbG9jKCgxIDw8IGJ0cC0+YnRfaGFzaHNoaWZ0KSAqCi0JCQkJCXNpemVvZih4ZnNfYnVmaGFzaF90KSwgS01fU0xFRVAgfCBLTV9MQVJHRSk7CisJYnRwLT5idF9oYXNoID0ga21lbV96YWxsb2NfbGFyZ2UoKDEgPDwgYnRwLT5idF9oYXNoc2hpZnQpICoKKwkJCQkJIHNpemVvZih4ZnNfYnVmaGFzaF90KSk7CiAJZm9yIChpID0gMDsgaSA8ICgxIDw8IGJ0cC0+YnRfaGFzaHNoaWZ0KTsgaSsrKSB7CiAJCXNwaW5fbG9ja19pbml0KCZidHAtPmJ0X2hhc2hbaV0uYmhfbG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZidHAtPmJ0X2hhc2hbaV0uYmhfbGlzdCk7CkBAIC0xMzkwLDcgKzE1NDcsNyBAQAogeGZzX2ZyZWVfYnVmaGFzaCgKIAl4ZnNfYnVmdGFyZ190CQkqYnRwKQogewotCWttZW1fZnJlZShidHAtPmJ0X2hhc2gpOworCWttZW1fZnJlZV9sYXJnZShidHAtPmJ0X2hhc2gpOwogCWJ0cC0+YnRfaGFzaCA9IE5VTEw7CiB9CiAKQEAgLTE1OTUsNiArMTc1MiwxMSBAQAogCQlsaXN0X2RlbCgmYnAtPmJfbGlzdCk7CiAJfQogCisJaWYgKGxpc3RfZW1wdHkoZHdxKSkgeworCQkvKiBzdGFydCB4ZnNidWZkIGFzIGl0IGlzIGFib3V0IHRvIGhhdmUgc29tZXRoaW5nIHRvIGRvICovCisJCXdha2VfdXBfcHJvY2VzcyhicC0+Yl90YXJnZXQtPmJ0X3Rhc2spOworCX0KKwogCWJwLT5iX2ZsYWdzIHw9IF9YQkZfREVMV1JJX1E7CiAJbGlzdF9hZGRfdGFpbCgmYnAtPmJfbGlzdCwgZHdxKTsKIAlicC0+Yl9xdWV1ZXRpbWUgPSBqaWZmaWVzOwpAQCAtMTYyNiw2ICsxNzg4LDM1IEBACiAJdHJhY2VfeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCwgX1JFVF9JUF8pOwogfQogCisvKgorICogSWYgYSBkZWx3cmkgYnVmZmVyIG5lZWRzIHRvIGJlIHB1c2hlZCBiZWZvcmUgaXQgaGFzIGFnZWQgb3V0LCB0aGVuIHByb21vdGUKKyAqIGl0IHRvIHRoZSBoZWFkIG9mIHRoZSBkZWx3cmkgcXVldWUgc28gdGhhdCBpdCB3aWxsIGJlIGZsdXNoZWQgb24gdGhlIG5leHQKKyAqIHhmc2J1ZmQgcnVuLiBXZSBkbyB0aGlzIGJ5IHJlc2V0dGluZyB0aGUgcXVldWV0aW1lIG9mIHRoZSBidWZmZXIgdG8gYmUgb2xkZXIKKyAqIHRoYW4gdGhlIGFnZSBjdXJyZW50bHkgbmVlZGVkIHRvIGZsdXNoIHRoZSBidWZmZXIuIEhlbmNlIHRoZSBuZXh0IHRpbWUgdGhlCisgKiB4ZnNidWZkIHNlZXMgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSBjb25zaWRlcmVkIG9sZCBlbm91Z2ggdG8gZmx1c2guCisgKi8KK3ZvaWQKK3hmc19idWZfZGVsd3JpX3Byb21vdGUoCisJc3RydWN0IHhmc19idWYJKmJwKQoreworCXN0cnVjdCB4ZnNfYnVmdGFyZyAqYnRwID0gYnAtPmJfdGFyZ2V0OworCWxvbmcJCWFnZSA9IHhmc19idWZfYWdlX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApICsgMTsKKworCUFTU0VSVChicC0+Yl9mbGFncyAmIFhCRl9ERUxXUkkpOworCUFTU0VSVChicC0+Yl9mbGFncyAmIF9YQkZfREVMV1JJX1EpOworCisJLyoKKwkgKiBDaGVjayB0aGUgYnVmZmVyIGFnZSBiZWZvcmUgbG9ja2luZyB0aGUgZGVsYXllZCB3cml0ZSBxdWV1ZSBhcyB3ZQorCSAqIGRvbid0IG5lZWQgdG8gcHJvbW90ZSBidWZmZXJzIHRoYXQgYXJlIGFscmVhZHkgcGFzdCB0aGUgZmx1c2ggYWdlLgorCSAqLworCWlmIChicC0+Yl9xdWV1ZXRpbWUgPCBqaWZmaWVzIC0gYWdlKQorCQlyZXR1cm47CisJYnAtPmJfcXVldWV0aW1lID0gamlmZmllcyAtIGFnZTsKKwlzcGluX2xvY2soJmJ0cC0+YnRfZGVsd3JpdGVfbG9jayk7CisJbGlzdF9tb3ZlKCZicC0+Yl9saXN0LCAmYnRwLT5idF9kZWx3cml0ZV9xdWV1ZSk7CisJc3Bpbl91bmxvY2soJmJ0cC0+YnRfZGVsd3JpdGVfbG9jayk7Cit9CisKIFNUQVRJQyB2b2lkCiB4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKnF1ZXVlKQpAQCAtMTY0NCw2ICsxODM1LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ0cCwgJnhmc19idWZ0YXJnX2xpc3QsIGJ0X2xpc3QpIHsKIAkJaWYgKHRlc3RfYml0KFhCVF9GT1JDRV9TTEVFUCwgJmJ0cC0+YnRfZmxhZ3MpKQogCQkJY29udGludWU7CisJCWlmIChsaXN0X2VtcHR5KCZidHAtPmJ0X2RlbHdyaXRlX3F1ZXVlKSkKKwkJCWNvbnRpbnVlOwogCQlzZXRfYml0KFhCVF9GT1JDRV9GTFVTSCwgJmJ0cC0+YnRfZmxhZ3MpOwogCQl3YWtlX3VwX3Byb2Nlc3MoYnRwLT5idF90YXNrKTsKIAl9CkBAIC0xNjk0LDIwICsxODg3LDUzIEBACiAKIH0KIAorLyoKKyAqIENvbXBhcmUgZnVuY3Rpb24gaXMgbW9yZSBjb21wbGV4IHRoYW4gaXQgbmVlZHMgdG8gYmUgYmVjYXVzZQorICogdGhlIHJldHVybiB2YWx1ZSBpcyBvbmx5IDMyIGJpdHMgYW5kIHdlIGFyZSBkb2luZyBjb21wYXJpc29ucworICogb24gNjQgYml0IHZhbHVlcworICovCitzdGF0aWMgaW50Cit4ZnNfYnVmX2NtcCgKKwl2b2lkCQkqcHJpdiwKKwlzdHJ1Y3QgbGlzdF9oZWFkICphLAorCXN0cnVjdCBsaXN0X2hlYWQgKmIpCit7CisJc3RydWN0IHhmc19idWYJKmFwID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOworCXN0cnVjdCB4ZnNfYnVmCSpicCA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKKwl4ZnNfZGFkZHJfdAkJZGlmZjsKKworCWRpZmYgPSBhcC0+Yl9ibiAtIGJwLT5iX2JuOworCWlmIChkaWZmIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChkaWZmID4gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3hmc19idWZfZGVsd3JpX3NvcnQoCisJeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0LAorCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJbGlzdF9zb3J0KE5VTEwsIGxpc3QsIHhmc19idWZfY21wKTsKK30KKwogU1RBVElDIGludAogeGZzYnVmZCgKIAl2b2lkCQkqZGF0YSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcDsKLQl4ZnNfYnVmdGFyZ190CSp0YXJnZXQgPSAoeGZzX2J1ZnRhcmdfdCAqKWRhdGE7Ci0JaW50CQljb3VudDsKLQl4ZnNfYnVmX3QJKmJwOworCXhmc19idWZ0YXJnX3QgICAqdGFyZ2V0ID0gKHhmc19idWZ0YXJnX3QgKilkYXRhOwogCiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0M7CiAKIAlzZXRfZnJlZXphYmxlKCk7CiAKIAlkbyB7CisJCWxvbmcJYWdlID0geGZzX2J1Zl9hZ2VfY2VudGlzZWNzICogbXNlY3NfdG9famlmZmllcygxMCk7CisJCWxvbmcJdG91dCA9IHhmc19idWZfdGltZXJfY2VudGlzZWNzICogbXNlY3NfdG9famlmZmllcygxMCk7CisJCWludAljb3VudCA9IDA7CisJCXN0cnVjdCBsaXN0X2hlYWQgdG1wOworCiAJCWlmICh1bmxpa2VseShmcmVlemluZyhjdXJyZW50KSkpIHsKIAkJCXNldF9iaXQoWEJUX0ZPUkNFX1NMRUVQLCAmdGFyZ2V0LT5idF9mbGFncyk7CiAJCQlyZWZyaWdlcmF0b3IoKTsKQEAgLTE3MTUsMTcgKzE5NDEsMTYgQEAKIAkJCWNsZWFyX2JpdChYQlRfRk9SQ0VfU0xFRVAsICZ0YXJnZXQtPmJ0X2ZsYWdzKTsKIAkJfQogCi0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgKLQkJCXhmc19idWZfdGltZXJfY2VudGlzZWNzICogbXNlY3NfdG9famlmZmllcygxMCkpOworCQkvKiBzbGVlcCBmb3IgYSBsb25nIHRpbWUgaWYgdGhlcmUgaXMgbm90aGluZyB0byBkby4gKi8KKwkJaWYgKGxpc3RfZW1wdHkoJnRhcmdldC0+YnRfZGVsd3JpdGVfcXVldWUpKQorCQkJdG91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodG91dCk7CiAKLQkJeGZzX2J1Zl9kZWx3cmlfc3BsaXQodGFyZ2V0LCAmdG1wLAotCQkJCXhmc19idWZfYWdlX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKLQotCQljb3VudCA9IDA7CisJCXhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwgYWdlKTsKKwkJbGlzdF9zb3J0KE5VTEwsICZ0bXAsIHhmc19idWZfY21wKTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXApKSB7Ci0JCQlicCA9IGxpc3RfZW50cnkodG1wLm5leHQsIHhmc19idWZfdCwgYl9saXN0KTsKLQkJCUFTU0VSVCh0YXJnZXQgPT0gYnAtPmJfdGFyZ2V0KTsKLQorCQkJc3RydWN0IHhmc19idWYgKmJwOworCQkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0bXAsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOwogCQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7CiAJCQl4ZnNfYnVmX2lvc3RyYXRlZ3koYnApOwogCQkJY291bnQrKzsKQEAgLTE3NTEsNDIgKzE5NzYsNDUgQEAKIAl4ZnNfYnVmdGFyZ190CSp0YXJnZXQsCiAJaW50CQl3YWl0KQogewotCXN0cnVjdCBsaXN0X2hlYWQgdG1wOwotCXhmc19idWZfdAkqYnAsICpuOworCXhmc19idWZfdAkqYnA7CiAJaW50CQlwaW5jb3VudCA9IDA7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKwlMSVNUX0hFQUQod2FpdF9saXN0KTsKIAogCXhmc19idWZfcnVuYWxsX3F1ZXVlcyh4ZnNjb252ZXJ0ZF93b3JrcXVldWUpOwogCXhmc19idWZfcnVuYWxsX3F1ZXVlcyh4ZnNkYXRhZF93b3JrcXVldWUpOwogCXhmc19idWZfcnVuYWxsX3F1ZXVlcyh4ZnNsb2dkX3dvcmtxdWV1ZSk7CiAKIAlzZXRfYml0KFhCVF9GT1JDRV9GTFVTSCwgJnRhcmdldC0+YnRfZmxhZ3MpOwotCXBpbmNvdW50ID0geGZzX2J1Zl9kZWx3cmlfc3BsaXQodGFyZ2V0LCAmdG1wLCAwKTsKKwlwaW5jb3VudCA9IHhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcF9saXN0LCAwKTsKIAogCS8qCi0JICogRHJvcHBlZCB0aGUgZGVsYXllZCB3cml0ZSBsaXN0IGxvY2ssIG5vdyB3YWxrIHRoZSB0ZW1wb3JhcnkgbGlzdAorCSAqIERyb3BwZWQgdGhlIGRlbGF5ZWQgd3JpdGUgbGlzdCBsb2NrLCBub3cgd2FsayB0aGUgdGVtcG9yYXJ5IGxpc3QuCisJICogQWxsIEkvTyBpcyBpc3N1ZWQgYXN5bmMgYW5kIHRoZW4gaWYgd2UgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0aW9uCisJICogd2UgZG8gdGhhdCBhZnRlciBpc3N1aW5nIGFsbCB0aGUgSU8uCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJwLCBuLCAmdG1wLCBiX2xpc3QpIHsKKwlsaXN0X3NvcnQoTlVMTCwgJnRtcF9saXN0LCB4ZnNfYnVmX2NtcCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXBfbGlzdCkpIHsKKwkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0bXBfbGlzdCwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CiAJCUFTU0VSVCh0YXJnZXQgPT0gYnAtPmJfdGFyZ2V0KTsKLQkJaWYgKHdhaXQpCisJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOworCQlpZiAod2FpdCkgewogCQkJYnAtPmJfZmxhZ3MgJj0gflhCRl9BU1lOQzsKLQkJZWxzZQotCQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7Ci0KKwkJCWxpc3RfYWRkKCZicC0+Yl9saXN0LCAmd2FpdF9saXN0KTsKKwkJfQogCQl4ZnNfYnVmX2lvc3RyYXRlZ3koYnApOwogCX0KIAotCWlmICh3YWl0KQorCWlmICh3YWl0KSB7CisJCS8qIEV4cGVkaXRlIGFuZCB3YWl0IGZvciBJTyB0byBjb21wbGV0ZS4gKi8KIAkJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKHRhcmdldC0+YnRfbWFwcGluZyk7CisJCXdoaWxlICghbGlzdF9lbXB0eSgmd2FpdF9saXN0KSkgeworCQkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ3YWl0X2xpc3QsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOwogCi0JLyoKLQkgKiBSZW1haW5pbmcgbGlzdCBpdGVtcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIHJldHVybmluZwotCSAqLwotCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wKSkgewotCQlicCA9IGxpc3RfZW50cnkodG1wLm5leHQsIHhmc19idWZfdCwgYl9saXN0KTsKLQotCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9saXN0KTsKLQkJeGZzX2lvd2FpdChicCk7Ci0JCXhmc19idWZfcmVsc2UoYnApOworCQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7CisJCQl4ZnNfaW93YWl0KGJwKTsKKwkJCXhmc19idWZfcmVsc2UoYnApOworCQl9CiAJfQogCiAJcmV0dXJuIHBpbmNvdW50OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAppbmRleCBhMzRjN2I1Li4zODZlNzM2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaApAQCAtMjMyLDEzICsyMzIsMTcgQEAKIGV4dGVybiB2b2lkIHhmc19idWZfdW5sb2NrKHhmc19idWZfdCAqKTsKIAogLyogQnVmZmVyIFJlYWQgYW5kIFdyaXRlIFJvdXRpbmVzICovCi1leHRlcm4gaW50IHhmc19iYXdyaXRlKHZvaWQgKm1wLCB4ZnNfYnVmX3QgKmJwKTsKK2V4dGVybiBpbnQgeGZzX2J3cml0ZShzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHhmc19idWYgKmJwKTsKIGV4dGVybiB2b2lkIHhmc19iZHdyaXRlKHZvaWQgKm1wLCB4ZnNfYnVmX3QgKmJwKTsKKworZXh0ZXJuIHZvaWQgeGZzYmRzdHJhdChzdHJ1Y3QgeGZzX21vdW50ICosIHN0cnVjdCB4ZnNfYnVmICopOworZXh0ZXJuIGludCB4ZnNfYmRzdHJhdF9jYihzdHJ1Y3QgeGZzX2J1ZiAqKTsKKwogZXh0ZXJuIHZvaWQgeGZzX2J1Zl9pb2VuZCh4ZnNfYnVmX3QgKiwJaW50KTsKIGV4dGVybiB2b2lkIHhmc19idWZfaW9lcnJvcih4ZnNfYnVmX3QgKiwgaW50KTsKIGV4dGVybiBpbnQgeGZzX2J1Zl9pb3JlcXVlc3QoeGZzX2J1Zl90ICopOwogZXh0ZXJuIGludCB4ZnNfYnVmX2lvd2FpdCh4ZnNfYnVmX3QgKik7Ci1leHRlcm4gdm9pZCB4ZnNfYnVmX2lvbW92ZSh4ZnNfYnVmX3QgKiwgc2l6ZV90LCBzaXplX3QsIHhmc19jYWRkcl90LAorZXh0ZXJuIHZvaWQgeGZzX2J1Zl9pb21vdmUoeGZzX2J1Zl90ICosIHNpemVfdCwgc2l6ZV90LCB2b2lkICosCiAJCQkJeGZzX2J1Zl9yd190KTsKIAogc3RhdGljIGlubGluZSBpbnQgeGZzX2J1Zl9pb3N0cmF0ZWd5KHhmc19idWZfdCAqYnApCkBAIC0yNjEsNiArMjY1LDcgQEAKIAogLyogRGVsYXllZCBXcml0ZSBCdWZmZXIgUm91dGluZXMgKi8KIGV4dGVybiB2b2lkIHhmc19idWZfZGVsd3JpX2RlcXVldWUoeGZzX2J1Zl90ICopOworZXh0ZXJuIHZvaWQgeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZSh4ZnNfYnVmX3QgKik7CiAKIC8qIEJ1ZmZlciBEYWVtb24gU2V0dXAgUm91dGluZXMgKi8KIGV4dGVybiBpbnQgeGZzX2J1Zl9pbml0KHZvaWQpOwpAQCAtMjcwLDMzICsyNzUsMTkgQEAKIAkoeyBjaGFyIF9fYltCREVWTkFNRV9TSVpFXTsgYmRldm5hbWUoKHRhcmdldCktPmJ0X2JkZXYsIF9fYik7IF9fYjsgfSkKIAogCi0jZGVmaW5lIFhGU19CX0FTWU5DCQlYQkZfQVNZTkMKLSNkZWZpbmUgWEZTX0JfREVMV1JJCQlYQkZfREVMV1JJCi0jZGVmaW5lIFhGU19CX1JFQUQJCVhCRl9SRUFECi0jZGVmaW5lIFhGU19CX1dSSVRFCQlYQkZfV1JJVEUKLSNkZWZpbmUgWEZTX0JfU1RBTEUJCVhCRl9TVEFMRQotCi0jZGVmaW5lIFhGU19CVUZfVFJZTE9DSwkJWEJGX1RSWUxPQ0sKLSNkZWZpbmUgWEZTX0lOQ09SRV9UUllMT0NLCVhCRl9UUllMT0NLCi0jZGVmaW5lIFhGU19CVUZfTE9DSwkJWEJGX0xPQ0sKLSNkZWZpbmUgWEZTX0JVRl9NQVBQRUQJCVhCRl9NQVBQRUQKLQotI2RlZmluZSBCVUZfQlVTWQkJWEJGX0RPTlRfQkxPQ0sKLQogI2RlZmluZSBYRlNfQlVGX0JGTEFHUyhicCkJKChicCktPmJfZmxhZ3MpCiAjZGVmaW5lIFhGU19CVUZfWkVST0ZMQUdTKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSBcCiAJCX4oWEJGX1JFQUR8WEJGX1dSSVRFfFhCRl9BU1lOQ3xYQkZfREVMV1JJfFhCRl9PUkRFUkVEKSkKIAotI2RlZmluZSBYRlNfQlVGX1NUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyB8PSBYRlNfQl9TVEFMRSkKLSNkZWZpbmUgWEZTX0JVRl9VTlNUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEZTX0JfU1RBTEUpCi0jZGVmaW5lIFhGU19CVUZfSVNTVEFMRShicCkJKChicCktPmJfZmxhZ3MgJiBYRlNfQl9TVEFMRSkKKyNkZWZpbmUgWEZTX0JVRl9TVEFMRShicCkJKChicCktPmJfZmxhZ3MgfD0gWEJGX1NUQUxFKQorI2RlZmluZSBYRlNfQlVGX1VOU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICY9IH5YQkZfU1RBTEUpCisjZGVmaW5lIFhGU19CVUZfSVNTVEFMRShicCkJKChicCktPmJfZmxhZ3MgJiBYQkZfU1RBTEUpCiAjZGVmaW5lIFhGU19CVUZfU1VQRVJfU1RBTEUoYnApCWRvIHsJCQkJXAogCQkJCQlYRlNfQlVGX1NUQUxFKGJwKTsJXAogCQkJCQl4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKGJwKTsJXAogCQkJCQlYRlNfQlVGX0RPTkUoYnApOwlcCiAJCQkJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBYRlNfQlVGX01BTkFHRQkJWEJGX0ZTX01BTkFHRUQKICNkZWZpbmUgWEZTX0JVRl9VTk1BTkFHRShicCkJKChicCktPmJfZmxhZ3MgJj0gflhCRl9GU19NQU5BR0VEKQogCiAjZGVmaW5lIFhGU19CVUZfREVMQVlXUklURShicCkJCSgoYnApLT5iX2ZsYWdzIHw9IFhCRl9ERUxXUkkpCkBAIC0zODUsMzEgKzM3NiwxMSBAQAogCiAjZGVmaW5lIHhmc19iaW9tb3ZlKGJwLCBvZmYsIGxlbiwgZGF0YSwgcncpIFwKIAkgICAgeGZzX2J1Zl9pb21vdmUoKGJwKSwgKG9mZiksIChsZW4pLCAoZGF0YSksIFwKLQkJKChydykgPT0gWEZTX0JfV1JJVEUpID8gWEJSV19XUklURSA6IFhCUldfUkVBRCkKKwkJKChydykgPT0gWEJGX1dSSVRFKSA/IFhCUldfV1JJVEUgOiBYQlJXX1JFQUQpCiAKICNkZWZpbmUgeGZzX2Jpb3plcm8oYnAsIG9mZiwgbGVuKSBcCiAJICAgIHhmc19idWZfaW9tb3ZlKChicCksIChvZmYpLCAobGVuKSwgTlVMTCwgWEJSV19aRVJPKQogCi0KLXN0YXRpYyBpbmxpbmUgaW50IFhGU19id3JpdGUoeGZzX2J1Zl90ICpicCkKLXsKLQlpbnQJaW93YWl0ID0gKGJwLT5iX2ZsYWdzICYgWEJGX0FTWU5DKSA9PSAwOwotCWludAllcnJvciA9IDA7Ci0KLQlpZiAoIWlvd2FpdCkKLQkJYnAtPmJfZmxhZ3MgfD0gX1hCRl9SVU5fUVVFVUVTOwotCi0JeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCk7Ci0JeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKLQlpZiAoaW93YWl0KSB7Ci0JCWVycm9yID0geGZzX2J1Zl9pb3dhaXQoYnApOwotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQl9Ci0JcmV0dXJuIGVycm9yOwotfQotCi0jZGVmaW5lIFhGU19iZHN0cmF0KGJwKSB4ZnNfYnVmX2lvcmVxdWVzdChicCkKLQogI2RlZmluZSB4ZnNfaW93YWl0KGJwKQl4ZnNfYnVmX2lvd2FpdChicCkKIAogI2RlZmluZSB4ZnNfYmFyZWFkKHRhcmdldCwgcmFibGtubywgcmFsZW4pICBcCkBAIC00MjQsNiArMzk1LDcgQEAKIGV4dGVybiB2b2lkIHhmc193YWl0X2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqKTsKIGV4dGVybiBpbnQgeGZzX3NldHNpemVfYnVmdGFyZyh4ZnNfYnVmdGFyZ190ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgeGZzX2ZsdXNoX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqLCBpbnQpOworCiAjaWZkZWYgQ09ORklHX0tEQl9NT0RVTEVTCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqeGZzX2dldF9idWZ0YXJnX2xpc3Qodm9pZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwppbmRleCA3NTAxYjg1Li5iNjkxOGQ3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCkBAIC03OSw3ICs3OSw3IEBACiAJCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JVFJVTkNBVEVEKTsKIAkJcmV0ID0gLWZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKIAl9Ci0JaWYgKGZsYWdzICYgWEZTX0JfQVNZTkMpCisJaWYgKGZsYWdzICYgWEJGX0FTWU5DKQogCQlyZXR1cm4gcmV0OwogCXJldDIgPSB4ZnNfd2FpdF9vbl9wYWdlcyhpcCwgZmlyc3QsIGxhc3QpOwogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKaW5kZXggYTAzNGNmNi4uNGVhMWVlMSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCkBAIC00NDcsMTIgKzQ0NywxMiBAQAogaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfZ2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljaGFyCQkJX191c2VyICp1YnVmLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJCV9fdXNlciAqdWJ1ZiwKIAlfX3VpbnQzMl90CQkqbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKQogewotCWNoYXIJCQkqa2J1ZjsKKwl1bnNpZ25lZCBjaGFyCQkqa2J1ZjsKIAlpbnQJCQllcnJvciA9IEVGQVVMVDsKIAogCWlmICgqbGVuID4gWEFUVFJfU0laRV9NQVgpCkBAIC00NzYsMTIgKzQ3NiwxMiBAQAogaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfc2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljb25zdCBjaGFyCQlfX3VzZXIgKnVidWYsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhcglfX3VzZXIgKnVidWYsCiAJX191aW50MzJfdAkJbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKQogewotCWNoYXIJCQkqa2J1ZjsKKwl1bnNpZ25lZCBjaGFyCQkqa2J1ZjsKIAlpbnQJCQllcnJvciA9IEVGQVVMVDsKIAogCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCkBAIC01MDEsNyArNTAxLDcgQEAKIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX3JlbW92ZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCiAJX191aW50MzJfdAkJZmxhZ3MpCiB7CiAJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKQEAgLTUxOSw3ICs1MTksNyBAQAogCXhmc19mc29wX2F0dHJtdWx0aV9oYW5kbGVyZXFfdCBhbV9ocmVxOwogCXN0cnVjdCBkZW50cnkJCSpkZW50cnk7CiAJdW5zaWduZWQgaW50CQlpLCBzaXplOwotCWNoYXIJCQkqYXR0cl9uYW1lOworCXVuc2lnbmVkIGNoYXIJCSphdHRyX25hbWU7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVQRVJNKTsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCiAJZXJyb3IgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBhbV9ocmVxLm9wY291bnQ7IGkrKykgewotCQlvcHNbaV0uYW1fZXJyb3IgPSBzdHJuY3B5X2Zyb21fdXNlcihhdHRyX25hbWUsCisJCW9wc1tpXS5hbV9lcnJvciA9IHN0cm5jcHlfZnJvbV91c2VyKChjaGFyICopYXR0cl9uYW1lLAogCQkJCW9wc1tpXS5hbV9hdHRybmFtZSwgTUFYTkFNRUxFTik7CiAJCWlmIChvcHNbaV0uYW1fZXJyb3IgPT0gMCB8fCBvcHNbaV0uYW1fZXJyb3IgPT0gTUFYTkFNRUxFTikKIAkJCWVycm9yID0gLUVSQU5HRTsKQEAgLTE0MzEsNiArMTQzMSw5IEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKKwkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKKwkJCXJldHVybiAtWEZTX0VSUk9SKEVST0ZTKTsKKwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlub3V0LCBhcmcsIHNpemVvZihpbm91dCkpKQogCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmgKaW5kZXggN2JkN2M2YS4uZDU2MTczYiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5oCkBAIC00NSwyMyArNDUsMjMgQEAKIGV4dGVybiBpbnQKIHhmc19hdHRybXVsdGlfYXR0cl9nZXQoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JY2hhcgkJCSpuYW1lLAotCWNoYXIJCQlfX3VzZXIgKnVidWYsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkJX191c2VyICp1YnVmLAogCV9fdWludDMyX3QJCSpsZW4sCiAJX191aW50MzJfdAkJZmxhZ3MpOwogCiBleHRlcm4gaW50Ci0JeGZzX2F0dHJtdWx0aV9hdHRyX3NldCgKK3hmc19hdHRybXVsdGlfYXR0cl9zZXQoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JY2hhcgkJCSpuYW1lLAotCWNvbnN0IGNoYXIJCV9fdXNlciAqdWJ1ZiwKKwl1bnNpZ25lZCBjaGFyCQkqbmFtZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyCV9fdXNlciAqdWJ1ZiwKIAlfX3VpbnQzMl90CQlsZW4sCiAJX191aW50MzJfdAkJZmxhZ3MpOwogCiBleHRlcm4gaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfcmVtb3ZlKAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKKwl1bnNpZ25lZCBjaGFyCQkqbmFtZSwKIAlfX3VpbnQzMl90CQlmbGFncyk7CiAKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYwppbmRleCBiZTE1MjdiLi4wYmY2ZDYxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCkBAIC00MTEsNyArNDExLDcgQEAKIAljb21wYXRfeGZzX2Zzb3BfYXR0cm11bHRpX2hhbmRsZXJlcV90CWFtX2hyZXE7CiAJc3RydWN0IGRlbnRyeQkJCQkqZGVudHJ5OwogCXVuc2lnbmVkIGludAkJCQlpLCBzaXplOwotCWNoYXIJCQkJCSphdHRyX25hbWU7CisJdW5zaWduZWQgY2hhcgkJCQkqYXR0cl9uYW1lOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLVhGU19FUlJPUihFUEVSTSk7CkBAIC00NDAsNyArNDQwLDcgQEAKIAogCWVycm9yID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgYW1faHJlcS5vcGNvdW50OyBpKyspIHsKLQkJb3BzW2ldLmFtX2Vycm9yID0gc3RybmNweV9mcm9tX3VzZXIoYXR0cl9uYW1lLAorCQlvcHNbaV0uYW1fZXJyb3IgPSBzdHJuY3B5X2Zyb21fdXNlcigoY2hhciAqKWF0dHJfbmFtZSwKIAkJCQljb21wYXRfcHRyKG9wc1tpXS5hbV9hdHRybmFtZSksCiAJCQkJTUFYTkFNRUxFTik7CiAJCWlmIChvcHNbaV0uYW1fZXJyb3IgPT0gMCB8fCBvcHNbaV0uYW1fZXJyb3IgPT0gTUFYTkFNRUxFTikKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCAyMjU5NDYwLi5lODU2NmJiIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogCXN0cnVjdCB4ZnNfaW5vZGUgKmlwID0gWEZTX0koaW5vZGUpOwogCXNpemVfdAkJbGVuZ3RoOwogCXZvaWQJCSp2YWx1ZTsKLQljaGFyCQkqbmFtZTsKKwl1bnNpZ25lZCBjaGFyCSpuYW1lOwogCWludAkJZXJyb3I7CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgJm5hbWUsCisJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsIChjaGFyICoqKSZuYW1lLAogCQkJCQkgICAgICZ2YWx1ZSwgJmxlbmd0aCk7CiAJaWYgKGVycm9yKSB7CiAJCWlmIChlcnJvciA9PSAtRU9QTk9UU1VQUCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggMGQzMjQ1Ny4uZWFjNmY4MCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTYzMCwxOCArNjMwLDkgQEAKIAkgKiBieSByb290LiAgVGhpcyBrZWVwcyBwZW9wbGUgZnJvbSBtb2RpZnlpbmcgc2V0dWlkIGFuZAogCSAqIHNldGdpZCBiaW5hcmllcy4KIAkgKi8KLQotCWlmICgoKHhpcC0+aV9kLmRpX21vZGUgJiBTX0lTVUlEKSB8fAotCSAgICAoKHhpcC0+aV9kLmRpX21vZGUgJiAoU19JU0dJRCB8IFNfSVhHUlApKSA9PQotCQkoU19JU0dJRCB8IFNfSVhHUlApKSkgJiYKLQkgICAgICFjYXBhYmxlKENBUF9GU0VUSUQpKSB7Ci0JCWVycm9yID0geGZzX3dyaXRlX2NsZWFyX3NldHVpZCh4aXApOwotCQlpZiAobGlrZWx5KCFlcnJvcikpCi0JCQllcnJvciA9IC1maWxlX3JlbW92ZV9zdWlkKGZpbGUpOwotCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7Ci0JCX0KLQl9CisJZXJyb3IgPSAtZmlsZV9yZW1vdmVfc3VpZChmaWxlKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7CiAKIAkvKiBXZSBjYW4gd3JpdGUgYmFjayB0aGlzIHF1ZXVlIGluIHBhZ2UgcmVjbGFpbSAqLwogCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwpAQCAtNzg0LDUzICs3NzUsNiBAQAogfQogCiAvKgotICogQWxsIHhmcyBtZXRhZGF0YSBidWZmZXJzIGV4Y2VwdCBsb2cgc3RhdGUgbWFjaGluZSBidWZmZXJzCi0gKiBnZXQgdGhpcyBhdHRhY2hlZCBhcyB0aGVpciBiX2Jkc3RyYXQgY2FsbGJhY2sgZnVuY3Rpb24uCi0gKiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGEgYnVmZmVyCi0gKiBhZnRlciBwcmVtYXR1cmVseSB1bnBpbm5pbmcgaXQgdG8gZm9yY2libHkgc2h1dGRvd24gdGhlIGZpbGVzeXN0ZW0uCi0gKi8KLWludAoteGZzX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKmJwKQotewotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGJwLT5iX21vdW50KSkgewotCQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7Ci0JCS8qCi0JCSAqIE1ldGFkYXRhIHdyaXRlIHRoYXQgZGlkbid0IGdldCBsb2dnZWQgYnV0Ci0JCSAqIHdyaXR0ZW4gZGVsYXllZCBhbnl3YXkuIFRoZXNlIGFyZW4ndCBhc3NvY2lhdGVkCi0JCSAqIHdpdGggYSB0cmFuc2FjdGlvbiwgYW5kIGNhbiBiZSBpZ25vcmVkLgotCQkgKi8KLQkJaWYgKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApID09IE5VTEwgJiYKLQkJICAgIChYRlNfQlVGX0lTUkVBRChicCkpID09IDApCi0JCQlyZXR1cm4gKHhmc19iaW9lcnJvcl9yZWxzZShicCkpOwotCQllbHNlCi0JCQlyZXR1cm4gKHhmc19iaW9lcnJvcihicCkpOwotCX0KLQotCXhmc19idWZfaW9yZXF1ZXN0KGJwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFdyYXBwZXIgYXJvdW5kIGJkc3RyYXQgc28gdGhhdCB3ZSBjYW4gc3RvcCBkYXRhIGZyb20gZ29pbmcgdG8gZGlzayBpbiBjYXNlCi0gKiB3ZSBhcmUgc2h1dHRpbmcgZG93biB0aGUgZmlsZXN5c3RlbS4gIFR5cGljYWxseSB1c2VyIGRhdGEgZ29lcyB0aHJ1IHRoaXMKLSAqIHBhdGg7IG9uZSBvZiB0aGUgZXhjZXB0aW9ucyBpcyB0aGUgc3VwZXJibG9jay4KLSAqLwotdm9pZAoteGZzYmRzdHJhdCgKLQlzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQotewotCUFTU0VSVChtcCk7Ci0JaWYgKCFYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgewotCQl4ZnNfYnVmX2lvcmVxdWVzdChicCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7Ci0JeGZzX2Jpb2Vycm9yX3JlbHNlKGJwKTsKLX0KLQotLyoKICAqIElmIHRoZSB1bmRlcmx5aW5nIChkYXRhL2xvZy9ydCkgZGV2aWNlIGlzIHJlYWRvbmx5LCB0aGVyZSBhcmUgc29tZQogICogb3BlcmF0aW9ucyB0aGF0IGNhbm5vdCBwcm9jZWVkLgogICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCmluZGV4IGQxZjc3ODkuLjM0MmFlOGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCkBAIC0yMiw5ICsyMiw2IEBACiBzdHJ1Y3QgeGZzX2lub2RlOwogc3RydWN0IHhmc19idWY7CiAKLS8qIGVycm9ycyBmcm9tIHhmc2Jkc3RyYXQoKSBtdXN0IGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBidWZmZXIgKi8KLWV4dGVybiB2b2lkIHhmc2Jkc3RyYXQoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKLWV4dGVybiBpbnQgeGZzX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKik7CiBleHRlcm4gaW50IHhmc19kZXZfaXNfcmVhZF9vbmx5KHN0cnVjdCB4ZnNfbW91bnQgKiwgY2hhciAqKTsKIAogZXh0ZXJuIGludCB4ZnNfemVyb19lb2Yoc3RydWN0IHhmc19pbm9kZSAqLCB4ZnNfb2ZmX3QsIHhmc19mc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDc3NDE0ZGIuLjI1ZWEyNDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtODc3LDEyICs4NzcsMTEgQEAKIHsKIAlzdHJ1Y3QgeGZzX2FpbAkqYWlscCA9IGRhdGE7CiAJeGZzX2xzbl90CWxhc3RfcHVzaGVkX2xzbiA9IDA7Ci0JbG9uZwkJdG91dCA9IDA7CisJbG9uZwkJdG91dCA9IDA7IC8qIG1pbGxpc2Vjb25kcyAqLwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJaWYgKHRvdXQpCi0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyh0b3V0KSk7Ci0JCXRvdXQgPSAxMDAwOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodG91dCA/CisJCQkJbXNlY3NfdG9famlmZmllcyh0b3V0KSA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAogCQkvKiBzd3N1c3AgKi8KIAkJdHJ5X3RvX2ZyZWV6ZSgpOwpAQCAtMTAyMiwxMiArMTAyMSw0NSBAQAogCVhGU19JKGlub2RlKS0+aV91cGRhdGVfY29yZSA9IDE7CiB9CiAKLS8qCi0gKiBBdHRlbXB0IHRvIGZsdXNoIHRoZSBpbm9kZSwgdGhpcyB3aWxsIGFjdHVhbGx5IGZhaWwKLSAqIGlmIHRoZSBpbm9kZSBpcyBwaW5uZWQsIGJ1dCB3ZSBkaXJ0eSB0aGUgaW5vZGUgYWdhaW4KLSAqIGF0IHRoZSBwb2ludCB3aGVuIGl0IGlzIHVucGlubmVkIGFmdGVyIGEgbG9nIHdyaXRlLAotICogc2luY2UgdGhpcyBpcyB3aGVuIHRoZSBpbm9kZSBpdHNlbGYgYmVjb21lcyBmbHVzaGFibGUuCi0gKi8KK1NUQVRJQyBpbnQKK3hmc19sb2dfaW5vZGUoCisJc3RydWN0IHhmc19pbm9kZQkqaXApCit7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKKwlpbnQJCQllcnJvcjsKKworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0ZTWU5DX1RTKTsKKwllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLCBYRlNfRlNZTkNfVFNfTE9HX1JFUyhtcCksIDAsIDAsIDApOworCisJaWYgKGVycm9yKSB7CisJCXhmc190cmFuc19jYW5jZWwodHAsIDApOworCQkvKiB3ZSBuZWVkIHRvIHJldHVybiB3aXRoIHRoZSBsb2NrIGhvbGQgc2hhcmVkICovCisJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKworCS8qCisJICogTm90ZSAtIGl0J3MgcG9zc2libGUgdGhhdCB3ZSBtaWdodCBoYXZlIHB1c2hlZCBvdXJzZWx2ZXMgb3V0IG9mIHRoZQorCSAqIHdheSBkdXJpbmcgdHJhbnNfcmVzZXJ2ZSB3aGljaCB3b3VsZCBmbHVzaCB0aGUgaW5vZGUuICBCdXQgdGhlcmUncworCSAqIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBpbm9kZSBidWZmZXIgaGFzIGFjdHVhbGx5IGdvbmUgb3V0IHlldCAoaXQncworCSAqIGRlbHdyaSkuICBQbHVzIHRoZSBidWZmZXIgY291bGQgYmUgcGlubmVkIGFueXdheSBpZiBpdCdzIHBhcnQgb2YKKwkgKiBhbiBpbm9kZSBpbiBhbm90aGVyIHJlY2VudCB0cmFuc2FjdGlvbi4gIFNvIHdlIHBsYXkgaXQgc2FmZSBhbmQKKwkgKiBmaXJlIG9mZiB0aGUgdHJhbnNhY3Rpb24gYW55d2F5LgorCSAqLworCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKKwl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKKwl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CisJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOworCXhmc19pbG9ja19kZW1vdGUoaXAsIFhGU19JTE9DS19FWENMKTsKKworCXJldHVybiBlcnJvcjsKK30KKwogU1RBVElDIGludAogeGZzX2ZzX3dyaXRlX2lub2RlKAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLApAQCAtMTAzNSw3ICsxMDY3LDcgQEAKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwotCWludAkJCWVycm9yID0gMDsKKwlpbnQJCQllcnJvciA9IEVBR0FJTjsKIAogCXhmc19pdHJhY2VfZW50cnkoaXApOwogCkBAIC0xMDQ2LDM2ICsxMDc4LDU2IEBACiAJCWVycm9yID0geGZzX3dhaXRfb25fcGFnZXMoaXAsIDAsIC0xKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7Ci0JfQogCi0JLyoKLQkgKiBCeXBhc3MgaW5vZGVzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgYnkKLQkgKiB0aGUgaW5vZGUgZmx1c2ggY2x1c3RlcmluZyBjb2RlIGluc2lkZSB4ZnNfaWZsdXNoCi0JICovCi0JaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBXZSBtYWtlIHRoaXMgbm9uLWJsb2NraW5nIGlmIHRoZSBpbm9kZSBpcyBjb250ZW5kZWQsIHJldHVybgotCSAqIEVBR0FJTiB0byBpbmRpY2F0ZSB0byB0aGUgY2FsbGVyIHRoYXQgdGhleSBkaWQgbm90IHN1Y2NlZWQuCi0JICogVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUKLQkgKiBhbm90aGVyIG9wZXJhdGlvbiByaWdodCBub3csIHRoZXkgZ2V0IGNhdWdodCBsYXRlciBieSB4ZnNfc3luYy4KLQkgKi8KLQlpZiAoc3luYykgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGhhcyBoaXQgc3RhYmxlIHN0b3JhZ2UuICBCeSB1c2luZyB0aGUKKwkJICogbG9nIGFuZCB0aGUgZnN5bmMgdHJhbnNhY3Rpb25zIHdlIHJlZHVjZSB0aGUgSU9zIHdlIGhhdmUKKwkJICogdG8gZG8gaGVyZSBmcm9tIHR3byAobG9nIGFuZCBpbm9kZSkgdG8ganVzdCB0aGUgbG9nLgorCQkgKgorCQkgKiBOb3RlOiBXZSBzdGlsbCBuZWVkIHRvIGRvIGEgZGVsd3JpIHdyaXRlIG9mIHRoZSBpbm9kZSBhZnRlcgorCQkgKiB0aGlzIHRvIGZsdXNoIGl0IHRvIHRoZSBiYWNraW5nIGJ1ZmZlciBzbyB0aGF0IGJ1bGtzdGF0CisJCSAqIHdvcmtzIHByb3Blcmx5IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIGlub2RlIGhhcyBiZWVuCisJCSAqIHdyaXR0ZW4uICBCZWNhdXNlIHdlIGhvbGQgdGhlIGlsb2NrIGF0b21pY2FsbHkgb3ZlciB0aGUKKwkJICogdHJhbnNhY3Rpb24gY29tbWl0IGFuZCB0aGUgaW5vZGUgZmx1c2ggd2UgYXJlIGd1YXJhbnRlZWQKKwkJICogdGhhdCB0aGUgaW5vZGUgaXMgbm90IHBpbm5lZCB3aGVuIGl0IHJldHVybnMuIElmIHRoZSBmbHVzaAorCQkgKiBsb2NrIGlzIGFscmVhZHkgaGVsZCwgdGhlbiB0aGUgaW5vZGUgaGFzIGFscmVhZHkgYmVlbgorCQkgKiBmbHVzaGVkIG9uY2UgYW5kIHdlIGRvbid0IG5lZWQgdG8gZmx1c2ggaXQgYWdhaW4uICBIZW5jZQorCQkgKiB0aGUgY29kZSB3aWxsIG9ubHkgZmx1c2ggdGhlIGlub2RlIGlmIGl0IGlzbid0IGFscmVhZHkKKwkJICogYmVpbmcgZmx1c2hlZC4KKwkJICovCiAJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCXhmc19pZmxvY2soaXApOwotCi0JCWVycm9yID0geGZzX2lmbHVzaChpcCwgWEZTX0lGTFVTSF9TWU5DKTsKKwkJaWYgKGlwLT5pX3VwZGF0ZV9jb3JlKSB7CisJCQllcnJvciA9IHhmc19sb2dfaW5vZGUoaXApOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQogCX0gZWxzZSB7Ci0JCWVycm9yID0gRUFHQUlOOworCQkvKgorCQkgKiBXZSBtYWtlIHRoaXMgbm9uLWJsb2NraW5nIGlmIHRoZSBpbm9kZSBpcyBjb250ZW5kZWQsIHJldHVybgorCQkgKiBFQUdBSU4gdG8gaW5kaWNhdGUgdG8gdGhlIGNhbGxlciB0aGF0IHRoZXkgZGlkIG5vdCBzdWNjZWVkLgorCQkgKiBUaGlzIHByZXZlbnRzIHRoZSBmbHVzaCBwYXRoIGZyb20gYmxvY2tpbmcgb24gaW5vZGVzIGluc2lkZQorCQkgKiBhbm90aGVyIG9wZXJhdGlvbiByaWdodCBub3csIHRoZXkgZ2V0IGNhdWdodCBsYXRlciBieSB4ZnNfc3luYy4KKwkJICovCiAJCWlmICgheGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX1NIQVJFRCkpCiAJCQlnb3RvIG91dDsKLQkJaWYgKHhmc19pcGluY291bnQoaXApIHx8ICF4ZnNfaWZsb2NrX25vd2FpdChpcCkpCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkJZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOwogCX0KIAorCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKgorCSAqIE5vdyB3ZSBoYXZlIHRoZSBmbHVzaCBsb2NrIGFuZCB0aGUgaW5vZGUgaXMgbm90IHBpbm5lZCwgd2UgY2FuIGNoZWNrCisJICogaWYgdGhlIGlub2RlIGlzIHJlYWxseSBjbGVhbiBhcyB3ZSBrbm93IHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcKKwkgKiB0cmFuc2FjdGlvbiBjb21wbGV0aW9ucywgaXQgaXMgbm90IHdhaXRpbmcgb24gdGhlIGRlbGF5ZWQgd3JpdGUKKwkgKiBxdWV1ZSBhbmQgdGhlcmUgaXMgbm8gSU8gaW4gcHJvZ3Jlc3MuCisJICovCisJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKKwkJeGZzX2lmdW5sb2NrKGlwKTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWVycm9yID0geGZzX2lmbHVzaChpcCwgMCk7CisKICBvdXRfdW5sb2NrOgogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKICBvdXQ6CkBAIC0xMjU3LDYgKzEzMDksMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorU1RBVElDIHZvaWQKK3hmc19zYXZlX3Jlc3ZibGtzKHN0cnVjdCB4ZnNfbW91bnQgKm1wKQoreworCV9fdWludDY0X3QgcmVzYmxrcyA9IDA7CisKKwltcC0+bV9yZXNibGtzX3NhdmUgPSBtcC0+bV9yZXNibGtzOworCXhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOworfQorCitTVEFUSUMgdm9pZAoreGZzX3Jlc3RvcmVfcmVzdmJsa3Moc3RydWN0IHhmc19tb3VudCAqbXApCit7CisJX191aW50NjRfdCByZXNibGtzOworCisJaWYgKG1wLT5tX3Jlc2Jsa3Nfc2F2ZSkgeworCQlyZXNibGtzID0gbXAtPm1fcmVzYmxrc19zYXZlOworCQltcC0+bV9yZXNibGtzX3NhdmUgPSAwOworCX0gZWxzZQorCQlyZXNibGtzID0geGZzX2RlZmF1bHRfcmVzYmxrcyhtcCk7CisKKwl4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKK30KKwogU1RBVElDIGludAogeGZzX2ZzX3JlbW91bnQoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKQEAgLTEzMzYsMTEgKzE0MTEsMjcgQEAKIAkJCX0KIAkJCW1wLT5tX3VwZGF0ZV9mbGFncyA9IDA7CiAJCX0KKworCQkvKgorCQkgKiBGaWxsIG91dCB0aGUgcmVzZXJ2ZSBwb29sIGlmIGl0IGlzIGVtcHR5LiBVc2UgdGhlIHN0YXNoZWQKKwkJICogdmFsdWUgaWYgaXQgaXMgbm9uLXplcm8sIG90aGVyd2lzZSBnbyB3aXRoIHRoZSBkZWZhdWx0LgorCQkgKi8KKwkJeGZzX3Jlc3RvcmVfcmVzdmJsa3MobXApOwogCX0KIAogCS8qIHJ3IC0+IHJvICovCiAJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSAmJiAoKmZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkvKgorCQkgKiBBZnRlciB3ZSBoYXZlIHN5bmNlZCB0aGUgZGF0YSBidXQgYmVmb3JlIHdlIHN5bmMgdGhlCisJCSAqIG1ldGFkYXRhLCB3ZSBuZWVkIHRvIGZyZWUgdXAgdGhlIHJlc2VydmUgYmxvY2sgcG9vbCBzbyB0aGF0CisJCSAqIHRoZSB1c2VkIGJsb2NrIGNvdW50IGluIHRoZSBzdXBlcmJsb2NrIG9uIGRpc2sgaXMgY29ycmVjdCBhdAorCQkgKiB0aGUgZW5kIG9mIHRoZSByZW1vdW50LiBTdGFzaCB0aGUgY3VycmVudCByZXNlcnZlIHBvb2wgc2l6ZQorCQkgKiBzbyB0aGF0IGlmIHdlIGdldCByZW1vdW50ZWQgcncsIHdlIGNhbiByZXR1cm4gaXQgdG8gdGhlIHNhbWUKKwkJICogc2l6ZS4KKwkJICovCisKIAkJeGZzX3F1aWVzY2VfZGF0YShtcCk7CisJCXhmc19zYXZlX3Jlc3ZibGtzKG1wKTsKIAkJeGZzX3F1aWVzY2VfYXR0cihtcCk7CiAJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9SRE9OTFk7CiAJfQpAQCAtMTM1OSwxMSArMTQ1MCwyMiBAQAogewogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOwogCisJeGZzX3NhdmVfcmVzdmJsa3MobXApOwogCXhmc19xdWllc2NlX2F0dHIobXApOwogCXJldHVybiAteGZzX2ZzX2xvZ19kdW1teShtcCk7CiB9CiAKIFNUQVRJQyBpbnQKK3hmc19mc191bmZyZWV6ZSgKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOworCisJeGZzX3Jlc3RvcmVfcmVzdmJsa3MobXApOworCXJldHVybiAwOworfQorCitTVEFUSUMgaW50CiB4ZnNfZnNfc2hvd19vcHRpb25zKAogCXN0cnVjdCBzZXFfZmlsZQkJKm0sCiAJc3RydWN0IHZmc21vdW50CQkqbW50KQpAQCAtMTU4NSw2ICsxNjg3LDcgQEAKIAkucHV0X3N1cGVyCQk9IHhmc19mc19wdXRfc3VwZXIsCiAJLnN5bmNfZnMJCT0geGZzX2ZzX3N5bmNfZnMsCiAJLmZyZWV6ZV9mcwkJPSB4ZnNfZnNfZnJlZXplLAorCS51bmZyZWV6ZV9mcwkJPSB4ZnNfZnNfdW5mcmVlemUsCiAJLnN0YXRmcwkJCT0geGZzX2ZzX3N0YXRmcywKIAkucmVtb3VudF9mcwkJPSB4ZnNfZnNfcmVtb3VudCwKIAkuc2hvd19vcHRpb25zCQk9IHhmc19mc19zaG93X29wdGlvbnMsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKaW5kZXggMWY1ZTRiYi4uYTlmNmQyMCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpAQCAtOTAsMTQgKzkwLDEzIEBACiBTVEFUSUMgaW50CiB4ZnNfaW5vZGVfYWdfd2FsaygKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQl4ZnNfYWdudW1iZXJfdAkJYWcsCisJc3RydWN0IHhmc19wZXJhZwkqcGFnLAogCWludAkJCSgqZXhlY3V0ZSkoc3RydWN0IHhmc19pbm9kZSAqaXAsCiAJCQkJCSAgIHN0cnVjdCB4ZnNfcGVyYWcgKnBhZywgaW50IGZsYWdzKSwKIAlpbnQJCQlmbGFncywKIAlpbnQJCQl0YWcsCiAJaW50CQkJZXhjbHVzaXZlKQogewotCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZyA9ICZtcC0+bV9wZXJhZ1thZ107CiAJdWludDMyX3QJCWZpcnN0X2luZGV4OwogCWludAkJCWxhc3RfZXJyb3IgPSAwOwogCWludAkJCXNraXBwZWQ7CkBAIC0xNDEsOCArMTQwLDYgQEAKIAkJZGVsYXkoMSk7CiAJCWdvdG8gcmVzdGFydDsKIAl9Ci0KLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOwogCXJldHVybiBsYXN0X2Vycm9yOwogfQogCkBAIC0xNjAsMTAgKzE1NywxNiBAQAogCXhmc19hZ251bWJlcl90CQlhZzsKIAogCWZvciAoYWcgPSAwOyBhZyA8IG1wLT5tX3NiLnNiX2FnY291bnQ7IGFnKyspIHsKLQkJaWYgKCFtcC0+bV9wZXJhZ1thZ10ucGFnX2ljaV9pbml0KQorCQlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CisKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOworCQlpZiAoIXBhZy0+cGFnX2ljaV9pbml0KSB7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQljb250aW51ZTsKLQkJZXJyb3IgPSB4ZnNfaW5vZGVfYWdfd2FsayhtcCwgYWcsIGV4ZWN1dGUsIGZsYWdzLCB0YWcsCisJCX0KKwkJZXJyb3IgPSB4ZnNfaW5vZGVfYWdfd2FsayhtcCwgcGFnLCBleGVjdXRlLCBmbGFncywgdGFnLAogCQkJCQkJZXhjbHVzaXZlKTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWxhc3RfZXJyb3IgPSBlcnJvcjsKIAkJCWlmIChlcnJvciA9PSBFRlNDT1JSVVBURUQpCkBAIC0yMzEsNyArMjM0LDcgQEAKIAl9CiAKIAllcnJvciA9IHhmc19mbHVzaF9wYWdlcyhpcCwgMCwgLTEsIChmbGFncyAmIFNZTkNfV0FJVCkgPwotCQkJCTAgOiBYRlNfQl9BU1lOQywgRklfTk9ORSk7CisJCQkJMCA6IFhCRl9BU1lOQywgRklfTk9ORSk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKIAogIG91dF93YWl0OgpAQCAtMjY3LDggKzI3MCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQllcnJvciA9IHhmc19pZmx1c2goaXAsIChmbGFncyAmIFNZTkNfV0FJVCkgPwotCQkJICAgWEZTX0lGTFVTSF9TWU5DIDogWEZTX0lGTFVTSF9ERUxXUkkpOworCWVycm9yID0geGZzX2lmbHVzaChpcCwgZmxhZ3MpOwogCiAgb3V0X3VubG9jazoKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CkBAIC0yOTMsMTAgKzI5NSw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAotCXhmc19sb2dfZm9yY2UobXAsIDAsCi0JCSAgICAgIChmbGFncyAmIFNZTkNfV0FJVCkgPwotCQkgICAgICAgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQyA6Ci0JCSAgICAgICBYRlNfTE9HX0ZPUkNFKTsKKwl4ZnNfbG9nX2ZvcmNlKG1wLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8gWEZTX0xPR19TWU5DIDogMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyMiwxMCArMzIxLDYgQEAKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IG1wLT5tX3Jvb3RpcDsKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKIAlpbnQJCQllcnJvcjsKLQlpbnQJCQlsb2dfZmxhZ3MgPSBYRlNfTE9HX0ZPUkNFOwotCi0JaWYgKGZsYWdzICYgU1lOQ19XQUlUKQotCQlsb2dfZmxhZ3MgfD0gWEZTX0xPR19TWU5DOwogCiAJLyoKIAkgKiBQdXQgYSBkdW1teSB0cmFuc2FjdGlvbiBpbiB0aGUgbG9nIHRvIHRlbGwgcmVjb3ZlcnkKQEAgLTM0NywxMSArMzQyLDExIEBACiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAogCS8qIHRoZSBsb2cgZm9yY2UgZW5zdXJlcyB0aGlzIHRyYW5zYWN0aW9uIGlzIHB1c2hlZCB0byBkaXNrICovCi0JeGZzX2xvZ19mb3JjZShtcCwgMCwgbG9nX2ZsYWdzKTsKKwl4ZnNfbG9nX2ZvcmNlKG1wLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8gWEZTX0xPR19TWU5DIDogMCk7CiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19zeW5jX2ZzZGF0YSgKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAlpbnQJCQlmbGFncykKQEAgLTM2Nyw3ICszNjIsNyBAQAogCWlmIChmbGFncyAmIFNZTkNfVFJZTE9DSykgewogCQlBU1NFUlQoIShmbGFncyAmIFNZTkNfV0FJVCkpOwogCi0JCWJwID0geGZzX2dldHNiKG1wLCBYRlNfQlVGX1RSWUxPQ0spOworCQlicCA9IHhmc19nZXRzYihtcCwgWEJGX1RSWUxPQ0spOwogCQlpZiAoIWJwKQogCQkJZ290byBvdXQ7CiAKQEAgLTM4Nyw3ICszODIsNyBAQAogCQkgKiBiZWNvbWUgcGlubmVkIGluIGJldHdlZW4gdGhlcmUgYW5kIGhlcmUuCiAJCSAqLwogCQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCi0JCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwLCBYRlNfTE9HX0ZPUkNFKTsKKwkJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCX0KIAogCkBAIC00NDgsOSArNDQzLDYgQEAKIAl4ZnNfc3luY19kYXRhKG1wLCBTWU5DX1dBSVQpOwogCXhmc19xbV9zeW5jKG1wLCBTWU5DX1dBSVQpOwogCi0JLyogZHJvcCBpbm9kZSByZWZlcmVuY2VzIHBpbm5lZCBieSBmaWxlc3RyZWFtcyAqLwotCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKLQogCS8qIHdyaXRlIHN1cGVyYmxvY2sgYW5kIGhvb3ZlciB1cCBzaHV0ZG93biBlcnJvcnMgKi8KIAllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19XQUlUKTsKIApAQCAtNDY3LDE2ICs0NTksMTggQEAKIHsKIAlpbnQJY291bnQgPSAwLCBwaW5jb3VudDsKIAorCXhmc19yZWNsYWltX2lub2RlcyhtcCwgMCk7CiAJeGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMCk7Ci0JeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX0FTWU5DKTsKIAogCS8qCiAJICogVGhpcyBsb29wIG11c3QgcnVuIGF0IGxlYXN0IHR3aWNlLiAgVGhlIGZpcnN0IGluc3RhbmNlIG9mIHRoZSBsb29wCiAJICogd2lsbCBmbHVzaCBtb3N0IG1ldGEgZGF0YSBidXQgdGhhdCB3aWxsIGdlbmVyYXRlIG1vcmUgbWV0YSBkYXRhCiAJICogKHR5cGljYWxseSBkaXJlY3RvcnkgdXBkYXRlcykuICBXaGljaCB0aGVuIG11c3QgYmUgZmx1c2hlZCBhbmQKLQkgKiBsb2dnZWQgYmVmb3JlIHdlIGNhbiB3cml0ZSB0aGUgdW5tb3VudCByZWNvcmQuCisJICogbG9nZ2VkIGJlZm9yZSB3ZSBjYW4gd3JpdGUgdGhlIHVubW91bnQgcmVjb3JkLiBXZSBhbHNvIHNvIHN5bmMKKwkgKiByZWNsYWltIG9mIGlub2RlcyB0byBjYXRjaCBhbnkgdGhhdCB0aGUgYWJvdmUgZGVsd3JpIGZsdXNoIHNraXBwZWQuCiAJICovCiAJZG8geworCQl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIFNZTkNfV0FJVCk7CiAJCXhmc19zeW5jX2F0dHIobXAsIFNZTkNfV0FJVCk7CiAJCXBpbmNvdW50ID0geGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMSk7CiAJCWlmICghcGluY291bnQpIHsKQEAgLTU3NSw3ICs1NjksNyBAQAogCWlncmFiKGlub2RlKTsKIAl4ZnNfc3luY2RfcXVldWVfd29yayhpcC0+aV9tb3VudCwgaW5vZGUsIHhmc19mbHVzaF9pbm9kZXNfd29yaywgJmNvbXBsZXRpb24pOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRpb24pOwotCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIFhGU19MT0dfU1lOQyk7CiB9CiAKIC8qCkBAIC01OTEsOCArNTg1LDggQEAKIAlpbnQJCWVycm9yOwogCiAJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSkgewotCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UpOwotCQl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfQVNZTkMpOworCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKKwkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCAwKTsKIAkJLyogZGdjOiBlcnJvcnMgaWdub3JlZCBoZXJlICovCiAJCWVycm9yID0geGZzX3FtX3N5bmMobXAsIFNZTkNfVFJZTE9DSyk7CiAJCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCBTWU5DX1RSWUxPQ0spOwpAQCAtNjkwLDE2ICs2ODQsMTcgQEAKIHhmc19pbm9kZV9zZXRfcmVjbGFpbV90YWcoCiAJeGZzX2lub2RlX3QJKmlwKQogewotCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwotCXhmc19wZXJhZ190CSpwYWcgPSB4ZnNfZ2V0X3BlcmFnKG1wLCBpcC0+aV9pbm8pOworCXN0cnVjdCB4ZnNfbW91bnQgKm1wID0gaXAtPmlfbW91bnQ7CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgWEZTX0lOT19UT19BR05PKG1wLCBpcC0+aV9pbm8pKTsKIAlyZWFkX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCV9feGZzX2lub2RlX3NldF9yZWNsYWltX3RhZyhwYWcsIGlwKTsKIAlfX3hmc19pZmxhZ3Nfc2V0KGlwLCBYRlNfSVJFQ0xBSU1BQkxFKTsKIAlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIH0KIAogdm9pZApAQCAtNzEyLDEyICs3MDcsNjQgQEAKIAkJCVhGU19JTk9fVE9fQUdJTk8obXAsIGlwLT5pX2lubyksIFhGU19JQ0lfUkVDTEFJTV9UQUcpOwogfQogCisvKgorICogSW5vZGVzIGluIGRpZmZlcmVudCBzdGF0ZXMgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LCBhbmQgdGhlIHJldHVybgorICogdmFsdWUgb2YgeGZzX2lmbHVzaCBpcyBub3Qgc3VmZmljaWVudCB0byBnZXQgdGhpcyByaWdodC4gVGhlIGZvbGxvd2luZyB0YWJsZQorICogbGlzdHMgdGhlIGlub2RlIHN0YXRlcyBhbmQgdGhlIHJlY2xhaW0gYWN0aW9ucyBuZWNlc3NhcnkgZm9yIG5vbi1ibG9ja2luZworICogcmVjbGFpbToKKyAqCisgKgorICoJaW5vZGUgc3RhdGUJICAgICBpZmx1c2ggcmV0CQlyZXF1aXJlZCBhY3Rpb24KKyAqICAgICAgLS0tLS0tLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLSAgICAgICAgIC0tLS0tLS0tLS0tLS0tLQorICoJYmFkCQkJLQkJcmVjbGFpbQorICoJc2h1dGRvd24JCUVJTwkJdW5waW4gYW5kIHJlY2xhaW0KKyAqCWNsZWFuLCB1bnBpbm5lZAkJMAkJcmVjbGFpbQorICoJc3RhbGUsIHVucGlubmVkCQkwCQlyZWNsYWltCisgKgljbGVhbiwgcGlubmVkKCopCTAJCXJlcXVldWUKKyAqCXN0YWxlLCBwaW5uZWQJCUVBR0FJTgkJcmVxdWV1ZQorICoJZGlydHksIGRlbHdyaSBvawkwCQlyZXF1ZXVlCisgKglkaXJ0eSwgZGVsd3JpIGJsb2NrZWQJRUFHQUlOCQlyZXF1ZXVlCisgKglkaXJ0eSwgc3luYyBmbHVzaAkwCQlyZWNsYWltCisgKgorICogKCopIGRnYzogSSBkb24ndCB0aGluayB0aGUgY2xlYW4sIHBpbm5lZCBzdGF0ZSBpcyBwb3NzaWJsZSBidXQgaXQgZ2V0cworICogaGFuZGxlZCBhbnl3YXkgZ2l2ZW4gdGhlIG9yZGVyIG9mIGNoZWNrcyBpbXBsZW1lbnRlZC4KKyAqCisgKiBBcyBjYW4gYmUgc2VlbiBmcm9tIHRoZSB0YWJsZSwgdGhlIHJldHVybiB2YWx1ZSBvZiB4ZnNfaWZsdXNoKCkgaXMgbm90CisgKiBzdWZmaWNpZW50IHRvIGNvcnJlY3RseSBkZWNpZGUgdGhlIHJlY2xhaW0gYWN0aW9uIGhlcmUuIFRoZSBjaGVja3MgaW4KKyAqIHhmc19pZmx1c2goKSBtaWdodCBsb29rIGxpa2UgZHVwbGljYXRlcywgYnV0IHRoZXkgYXJlIG5vdC4KKyAqCisgKiBBbHNvLCBiZWNhdXNlIHdlIGdldCB0aGUgZmx1c2ggbG9jayBmaXJzdCwgd2Uga25vdyB0aGF0IGFueSBpbm9kZSB0aGF0IGhhcworICogYmVlbiBmbHVzaGVkIGRlbHdyaSBoYXMgaGFkIHRoZSBmbHVzaCBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgd2UgY2hlY2sgdGhhdAorICogdGhlIGlub2RlIGlzIGNsZWFuLiBUaGUgY2xlYW4gaW5vZGUgY2hlY2sgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgZmx1c2hpbmcKKyAqIHRoZSBpbm9kZSBkZWx3cmkgb3RoZXJ3aXNlIHdlIHdvdWxkIGxvb3AgZm9yZXZlciByZXF1ZXVpbmcgY2xlYW4gaW5vZGVzIGFzCisgKiB3ZSBjYW5ub3QgdGVsbCBhcGFydCBhIHN1Y2Nlc3NmdWwgZGVsd3JpIGZsdXNoIGFuZCBhIGNsZWFuIGlub2RlIGZyb20gdGhlCisgKiByZXR1cm4gdmFsdWUgb2YgeGZzX2lmbHVzaCgpLgorICoKKyAqIE5vdGUgdGhhdCBiZWNhdXNlIHRoZSBpbm9kZSBpcyBmbHVzaGVkIGRlbGF5ZWQgd3JpdGUgYnkgYmFja2dyb3VuZAorICogd3JpdGViYWNrLCB0aGUgZmx1c2ggbG9jayBtYXkgYWxyZWFkeSBiZSBoZWxkIGhlcmUgYW5kIHdhaXRpbmcgb24gaXQgY2FuCisgKiByZXN1bHQgaW4gdmVyeSBsb25nIGxhdGVuY2llcy4gSGVuY2UgZm9yIHN5bmMgcmVjbGFpbXMsIHdoZXJlIHdlIHdhaXQgb24gdGhlCisgKiBmbHVzaCBsb2NrLCB0aGUgY2FsbGVyIHNob3VsZCBwdXNoIG91dCBkZWxheWVkIHdyaXRlIGlub2RlcyBmaXJzdCBiZWZvcmUKKyAqIHRyeWluZyB0byByZWNsYWltIHRoZW0gdG8gbWluaW1pc2UgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IHdhaXRpbmcuIEZvcgorICogYmFja2dyb3VuZCByZWxhaW0sIHdlIGp1c3QgcmVxdWV1ZSB0aGUgaW5vZGUgZm9yIHRoZSBuZXh0IHBhc3MuCisgKgorICogSGVuY2UgdGhlIG9yZGVyIG9mIGFjdGlvbnMgYWZ0ZXIgZ2FpbmluZyB0aGUgbG9ja3Mgc2hvdWxkIGJlOgorICoJYmFkCQk9PiByZWNsYWltCisgKglzaHV0ZG93bgk9PiB1bnBpbiBhbmQgcmVjbGFpbQorICoJcGlubmVkLCBkZWx3cmkJPT4gcmVxdWV1ZQorICoJcGlubmVkLCBzeW5jCT0+IHVucGluCisgKglzdGFsZQkJPT4gcmVjbGFpbQorICoJY2xlYW4JCT0+IHJlY2xhaW0KKyAqCWRpcnR5LCBkZWx3cmkJPT4gZmx1c2ggYW5kIHJlcXVldWUKKyAqCWRpcnR5LCBzeW5jCT0+IGZsdXNoLCB3YWl0IGFuZCByZWNsYWltCisgKi8KIFNUQVRJQyBpbnQKIHhmc19yZWNsYWltX2lub2RlKAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAogCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZywKIAlpbnQJCQlzeW5jX21vZGUpCiB7CisJaW50CWVycm9yID0gMDsKKwogCS8qCiAJICogVGhlIHJhZGl4IHRyZWUgbG9jayBoZXJlIHByb3RlY3RzIGEgdGhyZWFkIGluIHhmc19pZ2V0IGZyb20gcmFjaW5nCiAJICogd2l0aCB1cyBzdGFydGluZyByZWNsYWltIG9uIHRoZSBpbm9kZS4gIE9uY2Ugd2UgaGF2ZSB0aGUKQEAgLTczNSwzMyArNzgyLDcwIEBACiAJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCi0JLyoKLQkgKiBJZiB0aGUgaW5vZGUgaXMgc3RpbGwgZGlydHksIHRoZW4gZmx1c2ggaXQgb3V0LiAgSWYgdGhlIGlub2RlCi0JICogaXMgbm90IGluIHRoZSBBSUwsIHRoZW4gaXQgd2lsbCBiZSBPSyB0byBmbHVzaCBpdCBkZWx3cmkgYXMKLQkgKiBsb25nIGFzIHhmc19pZmx1c2goKSBkb2VzIG5vdCBrZWVwIGFueSByZWZlcmVuY2VzIHRvIHRoZSBpbm9kZS4KLQkgKiBXZSBsZWF2ZSB0aGF0IGRlY2lzaW9uIHVwIHRvIHhmc19pZmx1c2goKSBzaW5jZSBpdCBoYXMgdGhlCi0JICoga25vd2xlZGdlIG9mIHdoZXRoZXIgaXQncyBPSyB0byBzaW1wbHkgZG8gYSBkZWx3cmkgZmx1c2ggb2YKLQkgKiB0aGUgaW5vZGUgb3Igd2hldGhlciB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGlub2RlIGlzCi0JICogcHVsbGVkIGZyb20gdGhlIEFJTC4KLQkgKiBXZSBnZXQgdGhlIGZsdXNoIGxvY2sgcmVnYXJkbGVzcywgdGhvdWdoLCBqdXN0IHRvIG1ha2Ugc3VyZQotCSAqIHdlIGRvbid0IGZyZWUgaXQgd2hpbGUgaXQgaXMgYmVpbmcgZmx1c2hlZC4KLQkgKi8KIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfaWZsb2NrKGlwKTsKLQotCS8qCi0JICogSW4gdGhlIGNhc2Ugb2YgYSBmb3JjZWQgc2h1dGRvd24gd2UgcmVseSBvbiB4ZnNfaWZsdXNoKCkgdG8KLQkgKiB3YWl0IGZvciB0aGUgaW5vZGUgdG8gYmUgdW5waW5uZWQgYmVmb3JlIHJldHVybmluZyBhbiBlcnJvci4KLQkgKi8KLQlpZiAoIWlzX2JhZF9pbm9kZShWRlNfSShpcCkpICYmIHhmc19pZmx1c2goaXAsIHN5bmNfbW9kZSkgPT0gMCkgewotCQkvKiBzeW5jaHJvbml6ZSB3aXRoIHhmc19pZmx1c2hfZG9uZSAqLworCWlmICgheGZzX2lmbG9ja19ub3dhaXQoaXApKSB7CisJCWlmICghKHN5bmNfbW9kZSAmIFNZTkNfV0FJVCkpCisJCQlnb3RvIG91dDsKIAkJeGZzX2lmbG9jayhpcCk7Ci0JCXhmc19pZnVubG9jayhpcCk7CiAJfQogCisJaWYgKGlzX2JhZF9pbm9kZShWRlNfSShpcCkpKQorCQlnb3RvIHJlY2xhaW07CisJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7CisJCXhmc19pdW5waW5fd2FpdChpcCk7CisJCWdvdG8gcmVjbGFpbTsKKwl9CisJaWYgKHhmc19pcGluY291bnQoaXApKSB7CisJCWlmICghKHN5bmNfbW9kZSAmIFNZTkNfV0FJVCkpIHsKKwkJCXhmc19pZnVubG9jayhpcCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQl4ZnNfaXVucGluX3dhaXQoaXApOworCX0KKwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfSVNUQUxFKSkKKwkJZ290byByZWNsYWltOworCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKQorCQlnb3RvIHJlY2xhaW07CisKKwkvKiBOb3cgd2UgaGF2ZSBhbiBpbm9kZSB0aGF0IG5lZWRzIGZsdXNoaW5nICovCisJZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCBzeW5jX21vZGUpOworCWlmIChzeW5jX21vZGUgJiBTWU5DX1dBSVQpIHsKKwkJeGZzX2lmbG9jayhpcCk7CisJCWdvdG8gcmVjbGFpbTsKKwl9CisKKwkvKgorCSAqIFdoZW4gd2UgaGF2ZSB0byBmbHVzaCBhbiBpbm9kZSBidXQgZG9uJ3QgaGF2ZSBTWU5DX1dBSVQgc2V0LCB3ZQorCSAqIGZsdXNoIHRoZSBpbm9kZSBvdXQgdXNpbmcgYSBkZWx3cmkgYnVmZmVyIGFuZCB3YWl0IGZvciB0aGUgbmV4dAorCSAqIGNhbGwgaW50byByZWNsYWltIHRvIGZpbmQgaXQgaW4gYSBjbGVhbiBzdGF0ZSBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yCisJICogaXQgbm93LiBXZSBhbHNvIGRvbid0IHJldHVybiBlcnJvcnMgaGVyZSAtIGlmIHRoZSBlcnJvciBpcyB0cmFuc2llbnQKKwkgKiB0aGVuIHRoZSBuZXh0IHJlY2xhaW0gcGFzcyB3aWxsIGZsdXNoIHRoZSBpbm9kZSwgYW5kIGlmIHRoZSBlcnJvcgorCSAqIGlzIHBlcm1hbmVudCB0aGVuIHRoZSBuZXh0IHN5bmMgcmVjbGFpbSB3aWxsIHJlbGNhaW0gdGhlIGlub2RlIGFuZAorCSAqIHBhc3Mgb24gdGhlIGVycm9yLgorCSAqLworCWlmIChlcnJvciAmJiAhWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpIHsKKwkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgaXAtPmlfbW91bnQsCisJCQkiaW5vZGUgMHglbGx4IGJhY2tncm91bmQgcmVjbGFpbSBmbHVzaCBmYWlsZWQgd2l0aCAlZCIsCisJCQkobG9uZyBsb25nKWlwLT5pX2lubywgZXJyb3IpOworCX0KK291dDoKKwl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVJFQ0xBSU0pOworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJLyoKKwkgKiBXZSBjb3VsZCByZXR1cm4gRUFHQUlOIGhlcmUgdG8gbWFrZSByZWNsYWltIHJlc2NhbiB0aGUgaW5vZGUgdHJlZSBpbgorCSAqIGEgc2hvcnQgd2hpbGUuIEhvd2V2ZXIsIHRoaXMganVzdCBidXJucyBDUFUgdGltZSBzY2FubmluZyB0aGUgdHJlZQorCSAqIHdhaXRpbmcgZm9yIElPIHRvIGNvbXBsZXRlIGFuZCB4ZnNzeW5jZCBuZXZlciBnb2VzIGJhY2sgdG8gdGhlIGlkbGUKKwkgKiBzdGF0ZS4gSW5zdGVhZCwgcmV0dXJuIDAgdG8gbGV0IHRoZSBuZXh0IHNjaGVkdWxlZCBiYWNrZ3JvdW5kIHJlY2xhaW0KKwkgKiBhdHRlbXB0IHRvIHJlY2xhaW0gdGhlIGlub2RlIGFnYWluLgorCSAqLworCXJldHVybiAwOworCityZWNsYWltOgorCXhmc19pZnVubG9jayhpcCk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAl4ZnNfaXJlY2xhaW0oaXApOwotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKKwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaAppbmRleCBlYTkzMmI0Li5kNDgwYzM0IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCkBAIC0zNyw3ICszNyw2IEBACiAKIGludCB4ZnNfc3luY19hdHRyKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgZmxhZ3MpOwogaW50IHhmc19zeW5jX2RhdGEoc3RydWN0IHhmc19tb3VudCAqbXAsIGludCBmbGFncyk7Ci1pbnQgeGZzX3N5bmNfZnNkYXRhKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgZmxhZ3MpOwogCiBpbnQgeGZzX3F1aWVzY2VfZGF0YShzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB2b2lkIHhmc19xdWllc2NlX2F0dHIoc3RydWN0IHhmc19tb3VudCAqbXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKaW5kZXggYzIyYTYwOC4uYTQ1NzRkYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCkBAIC03OCw2ICs3OCwzMyBAQAogCSkKICkKIAorI2RlZmluZSBERUZJTkVfUEVSQUdfUkVGX0VWRU5UKG5hbWUpIFwKK1RSQUNFX0VWRU5UKG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2FnbnVtYmVyX3QgYWdubywgaW50IHJlZmNvdW50LCBcCisJCSB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksIFwKKwlUUF9BUkdTKG1wLCBhZ25vLCByZWZjb3VudCwgY2FsbGVyX2lwKSwgXAorCVRQX1NUUlVDVF9fZW50cnkoIFwKKwkJX19maWVsZChkZXZfdCwgZGV2KSBcCisJCV9fZmllbGQoeGZzX2FnbnVtYmVyX3QsIGFnbm8pIFwKKwkJX19maWVsZChpbnQsIHJlZmNvdW50KSBcCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgY2FsbGVyX2lwKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IG1wLT5tX3N1cGVyLT5zX2RldjsgXAorCQlfX2VudHJ5LT5hZ25vID0gYWdubzsgXAorCQlfX2VudHJ5LT5yZWZjb3VudCA9IHJlZmNvdW50OyBcCisJCV9fZW50cnktPmNhbGxlcl9pcCA9IGNhbGxlcl9pcDsgXAorCSksIFwKKwlUUF9wcmludGsoImRldiAlZDolZCBhZ25vICV1IHJlZmNvdW50ICVkIGNhbGxlciAlcGYiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgIF9fZW50cnktPmFnbm8sIFwKKwkJICBfX2VudHJ5LT5yZWZjb3VudCwgXAorCQkgIChjaGFyICopX19lbnRyeS0+Y2FsbGVyX2lwKSBcCispOworCitERUZJTkVfUEVSQUdfUkVGX0VWRU5UKHhmc19wZXJhZ19nZXQpCitERUZJTkVfUEVSQUdfUkVGX0VWRU5UKHhmc19wZXJhZ19wdXQpCisKICNkZWZpbmUgREVGSU5FX0FUVFJfTElTVF9FVkVOVChuYW1lKSBcCiBERUZJTkVfRVZFTlQoeGZzX2F0dHJfbGlzdF9jbGFzcywgbmFtZSwgXAogCVRQX1BST1RPKHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmN0eCksIFwKQEAgLTQ1Niw2ICs0ODMsNyBAQAogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV91bmxvY2tfc3RhbGUpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV9jb21taXR0ZWQpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV9wdXNoKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fcHVzaGJ1Zik7CiBERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX3RyYW5zX2dldF9idWYpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19nZXRfYnVmX3JlY3VyKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfZ2V0c2IpOwpAQCAtMTQxNCw2ICsxNDQyLDU5IEBACiAJCSAgX19lbnRyeS0+Y291bnQpCiApOwogCisjZGVmaW5lIFhGU19TV0FQRVhUX0lOT0RFUyBcCisJeyAwLAkidGFyZ2V0IiB9LCBcCisJeyAxLAkidGVtcCIgfQorCisjZGVmaW5lIFhGU19JTk9ERV9GT1JNQVRfU1RSIFwKKwl7IDAsCSJpbnZhbGlkIiB9LCBcCisJeyAxLAkibG9jYWwiIH0sIFwKKwl7IDIsCSJleHRlbnQiIH0sIFwKKwl7IDMsCSJidHJlZSIgfQorCitERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19zd2FwX2V4dGVudF9jbGFzcywKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2lub2RlICppcCwgaW50IHdoaWNoKSwKKwlUUF9BUkdTKGlwLCB3aGljaCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKGludCwgd2hpY2gpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJCV9fZmllbGQoaW50LCBmb3JtYXQpCisJCV9fZmllbGQoaW50LCBuZXgpCisJCV9fZmllbGQoaW50LCBtYXhfbmV4KQorCQlfX2ZpZWxkKGludCwgYnJvb3Rfc2l6ZSkKKwkJX19maWVsZChpbnQsIGZvcmtfb2ZmKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IFZGU19JKGlwKS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPndoaWNoID0gd2hpY2g7CisJCV9fZW50cnktPmlubyA9IGlwLT5pX2lubzsKKwkJX19lbnRyeS0+Zm9ybWF0ID0gaXAtPmlfZC5kaV9mb3JtYXQ7CisJCV9fZW50cnktPm5leCA9IGlwLT5pX2QuZGlfbmV4dGVudHM7CisJCV9fZW50cnktPm1heF9uZXggPSBpcC0+aV9kZi5pZl9leHRfbWF4OworCQlfX2VudHJ5LT5icm9vdF9zaXplID0gaXAtPmlfZGYuaWZfYnJvb3RfYnl0ZXM7CisJCV9fZW50cnktPmZvcmtfb2ZmID0gWEZTX0lGT1JLX0JPRkYoaXApOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCAoJXMpLCAlcyBmb3JtYXQsIG51bV9leHRlbnRzICVkLCAiCisJCSAgIk1heCBpbi1mb3JrIGV4dGVudHMgJWQsIGJyb290IHNpemUgJWQsIGZvcmsgb2Zmc2V0ICVkIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmlubywKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPndoaWNoLCBYRlNfU1dBUEVYVF9JTk9ERVMpLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+Zm9ybWF0LCBYRlNfSU5PREVfRk9STUFUX1NUUiksCisJCSAgX19lbnRyeS0+bmV4LAorCQkgIF9fZW50cnktPm1heF9uZXgsCisJCSAgX19lbnRyeS0+YnJvb3Rfc2l6ZSwKKwkJICBfX2VudHJ5LT5mb3JrX29mZikKKykKKworI2RlZmluZSBERUZJTkVfU1dBUEVYVF9FVkVOVChuYW1lKSBcCitERUZJTkVfRVZFTlQoeGZzX3N3YXBfZXh0ZW50X2NsYXNzLCBuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIGludCB3aGljaCksIFwKKwlUUF9BUkdTKGlwLCB3aGljaCkpCisKK0RFRklORV9TV0FQRVhUX0VWRU5UKHhmc19zd2FwX2V4dGVudF9iZWZvcmUpOworREVGSU5FX1NXQVBFWFRfRVZFTlQoeGZzX3N3YXBfZXh0ZW50X2FmdGVyKTsKKwogI2VuZGlmIC8qIF9UUkFDRV9YRlNfSCAqLwogCiAjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYwppbmRleCAwYjE4Nzg4Li5mYTAxYjlkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3hhdHRyLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJdmFsdWUgPSBOVUxMOwogCX0KIAotCWVycm9yID0gLXhmc19hdHRyX2dldChpcCwgbmFtZSwgdmFsdWUsICZhc2l6ZSwgeGZsYWdzKTsKKwllcnJvciA9IC14ZnNfYXR0cl9nZXQoaXAsICh1bnNpZ25lZCBjaGFyICopbmFtZSwgdmFsdWUsICZhc2l6ZSwgeGZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlyZXR1cm4gYXNpemU7CkBAIC02Nyw4ICs2Nyw5IEBACiAJCXhmbGFncyB8PSBBVFRSX1JFUExBQ0U7CiAKIAlpZiAoIXZhbHVlKQotCQlyZXR1cm4gLXhmc19hdHRyX3JlbW92ZShpcCwgbmFtZSwgeGZsYWdzKTsKLQlyZXR1cm4gLXhmc19hdHRyX3NldChpcCwgbmFtZSwgKHZvaWQgKil2YWx1ZSwgc2l6ZSwgeGZsYWdzKTsKKwkJcmV0dXJuIC14ZnNfYXR0cl9yZW1vdmUoaXAsICh1bnNpZ25lZCBjaGFyICopbmFtZSwgeGZsYWdzKTsKKwlyZXR1cm4gLXhmc19hdHRyX3NldChpcCwgKHVuc2lnbmVkIGNoYXIgKiluYW1lLAorCQkJCSh2b2lkICopdmFsdWUsIHNpemUsIHhmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeGF0dHJfaGFuZGxlciB4ZnNfeGF0dHJfdXNlcl9oYW5kbGVyID0gewpAQCAtMTI0LDggKzEyNSwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci14ZnNfeGF0dHJfcHV0X2xpc3RlbnQoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwgaW50IGZsYWdzLAotCQljaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHZhbHVlbGVuLCBjaGFyICp2YWx1ZSkKK3hmc194YXR0cl9wdXRfbGlzdGVudCgKKwlzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjb250ZXh0LAorCWludAkJZmxhZ3MsCisJdW5zaWduZWQgY2hhcgkqbmFtZSwKKwlpbnQJCW5hbWVsZW4sCisJaW50CQl2YWx1ZWxlbiwKKwl1bnNpZ25lZCBjaGFyCSp2YWx1ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcHJlZml4X2xlbiA9IHhmc194YXR0cl9wcmVmaXhfbGVuKGZsYWdzKTsKIAljaGFyICpvZmZzZXQ7CkBAIC0xNDgsNyArMTU0LDcgQEAKIAlvZmZzZXQgPSAoY2hhciAqKWNvbnRleHQtPmFsaXN0ICsgY29udGV4dC0+Y291bnQ7CiAJc3RybmNweShvZmZzZXQsIHhmc194YXR0cl9wcmVmaXgoZmxhZ3MpLCBwcmVmaXhfbGVuKTsKIAlvZmZzZXQgKz0gcHJlZml4X2xlbjsKLQlzdHJuY3B5KG9mZnNldCwgbmFtZSwgbmFtZWxlbik7CQkJLyogcmVhbCBuYW1lICovCisJc3RybmNweShvZmZzZXQsIChjaGFyICopbmFtZSwgbmFtZWxlbik7CQkJLyogcmVhbCBuYW1lICovCiAJb2Zmc2V0ICs9IG5hbWVsZW47CiAJKm9mZnNldCA9ICdcMCc7CiAJY29udGV4dC0+Y291bnQgKz0gcHJlZml4X2xlbiArIG5hbWVsZW4gKyAxOwpAQCAtMTU2LDggKzE2MiwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci14ZnNfeGF0dHJfcHV0X2xpc3RlbnRfc2l6ZXMoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwgaW50IGZsYWdzLAotCQljaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHZhbHVlbGVuLCBjaGFyICp2YWx1ZSkKK3hmc194YXR0cl9wdXRfbGlzdGVudF9zaXplcygKKwlzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjb250ZXh0LAorCWludAkJZmxhZ3MsCisJdW5zaWduZWQgY2hhcgkqbmFtZSwKKwlpbnQJCW5hbWVsZW4sCisJaW50CQl2YWx1ZWxlbiwKKwl1bnNpZ25lZCBjaGFyCSp2YWx1ZSkKIHsKIAljb250ZXh0LT5jb3VudCArPSB4ZnNfeGF0dHJfcHJlZml4X2xlbihmbGFncykgKyBuYW1lbGVuICsgMTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwppbmRleCBkN2M3ZWVhLi41Zjc5ZGQ3IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCkBAIC0xMTg3LDcgKzExODcsNyBAQAogCSAqIGJsb2NrLCBuYWRhLgogCSAqLwogCWlmICghWEZTX0RRX0lTX0RJUlRZKGRxcCkgfHwKLQkgICAgKCEoZmxhZ3MgJiBYRlNfUU1PUFRfU1lOQykgJiYgYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPiAwKSkgeworCSAgICAoIShmbGFncyAmIFNZTkNfV0FJVCkgJiYgYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPiAwKSkgewogCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEyNDgsMjMgKzEyNDgsMjAgQEAKIAkgKi8KIAlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpIHsKIAkJdHJhY2VfeGZzX2RxZmx1c2hfZm9yY2UoZHFwKTsKLQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFKTsKKwkJeGZzX2xvZ19mb3JjZShtcCwgMCk7CiAJfQogCi0JaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RFTFdSSSkgewotCQl4ZnNfYmR3cml0ZShtcCwgYnApOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfQVNZTkMpIHsKLQkJZXJyb3IgPSB4ZnNfYmF3cml0ZShtcCwgYnApOwotCX0gZWxzZSB7CisJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQogCQllcnJvciA9IHhmc19id3JpdGUobXAsIGJwKTsKLQl9CisJZWxzZQorCQl4ZnNfYmR3cml0ZShtcCwgYnApOwogCiAJdHJhY2VfeGZzX2RxZmx1c2hfZG9uZShkcXApOwogCiAJLyoKIAkgKiBkcXAgaXMgc3RpbGwgbG9ja2VkLCBidXQgY2FsbGVyIGlzIGZyZWUgdG8gdW5sb2NrIGl0IG5vdy4KIAkgKi8KLQlyZXR1cm4gKGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7CiAKIH0KIApAQCAtMTQ0NSw3ICsxNDQyLDcgQEAKIAkJICogV2UgZG9uJ3QgY2FyZSBhYm91dCBnZXR0aW5nIGRpc2sgZXJyb3JzIGhlcmUuIFdlIG5lZWQKIAkJICogdG8gcHVyZ2UgdGhpcyBkcXVvdCBhbnl3YXksIHNvIHdlIGdvIGFoZWFkIHJlZ2FyZGxlc3MuCiAJCSAqLwotCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgWEZTX1FNT1BUX1NZTkMpOworCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgU1lOQ19XQUlUKTsKIAkJaWYgKGVycm9yKQogCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCiAJCQkJInhmc19xbV9kcXB1cmdlOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOwpAQCAtMTUyOSwyNSArMTUyNiwxNyBAQAogCSAqIHRoZSBmbHVzaCBsb2NrIHdoZW4gdGhlIEkvTyBjb21wbGV0ZXMuCiAJICovCiAJYnAgPSB4ZnNfaW5jb3JlKGRxcC0+cV9tb3VudC0+bV9kZGV2X3RhcmdwLCBkcXAtPnFfYmxrbm8sCi0JCSAgICBYRlNfUUlfRFFDSFVOS0xFTihkcXAtPnFfbW91bnQpLAotCQkgICAgWEZTX0lOQ09SRV9UUllMT0NLKTsKLQlpZiAoYnAgIT0gTlVMTCkgewotCQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCQlpbnQJZXJyb3I7Ci0JCQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpIHsKLQkJCQl4ZnNfbG9nX2ZvcmNlKGRxcC0+cV9tb3VudCwKLQkJCQkJICAgICAgKHhmc19sc25fdCkwLAotCQkJCQkgICAgICBYRlNfTE9HX0ZPUkNFKTsKLQkJCX0KLQkJCWVycm9yID0geGZzX2Jhd3JpdGUoZHFwLT5xX21vdW50LCBicCk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgZHFwLT5xX21vdW50LAotCQkJCQkieGZzX3FtX2RxZmxvY2tfcHVzaGJ1Zl93YWl0OiAiCi0JCQkJCSJwdXNoYnVmIGVycm9yICVkIG9uIGRxcCAlcCwgYnAgJXAiLAotCQkJCQllcnJvciwgZHFwLCBicCk7Ci0JCX0gZWxzZSB7Ci0JCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJfQorCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4oZHFwLT5xX21vdW50KSwgWEJGX1RSWUxPQ0spOworCWlmICghYnApCisJCWdvdG8gb3V0X2xvY2s7CisKKwlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7CisJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkKKwkJCXhmc19sb2dfZm9yY2UoZHFwLT5xX21vdW50LCAwKTsKKwkJeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZShicCk7CisJCXdha2VfdXBfcHJvY2VzcyhicC0+Yl90YXJnZXQtPmJ0X3Rhc2spOwogCX0KKwl4ZnNfYnVmX3JlbHNlKGJwKTsKK291dF9sb2NrOgogCXhmc19kcWZsb2NrKGRxcCk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCmluZGV4IGQwZDRhOWEuLjRlNGVlOWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCkBAIC03NCwxMSArNzQsMTEgQEAKIAogCWxvZ3ZlYy0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZsb2dpdGVtLT5xbGlfZm9ybWF0OwogCWxvZ3ZlYy0+aV9sZW4gID0gc2l6ZW9mKHhmc19kcV9sb2dmb3JtYXRfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9ndmVjLCBYTE9HX1JFR19UWVBFX1FGT1JNQVQpOworCWxvZ3ZlYy0+aV90eXBlID0gWExPR19SRUdfVFlQRV9RRk9STUFUOwogCWxvZ3ZlYysrOwogCWxvZ3ZlYy0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZsb2dpdGVtLT5xbGlfZHF1b3QtPnFfY29yZTsKIAlsb2d2ZWMtPmlfbGVuICA9IHNpemVvZih4ZnNfZGlza19kcXVvdF90KTsKLQlYTE9HX1ZFQ19TRVRfVFlQRShsb2d2ZWMsIFhMT0dfUkVHX1RZUEVfRFFVT1QpOworCWxvZ3ZlYy0+aV90eXBlID0gWExPR19SRUdfVFlQRV9EUVVPVDsKIAogCUFTU0VSVCgyID09IGxvZ2l0ZW0tPnFsaV9pdGVtLmxpX2Rlc2MtPmxpZF9zaXplKTsKIAlsb2dpdGVtLT5xbGlfZm9ybWF0LnFsZl9zaXplID0gMjsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCSAqIGxvY2sgd2l0aG91dCBzbGVlcGluZywgdGhlbiB0aGVyZSBtdXN0IG5vdCBoYXZlIGJlZW4KIAkgKiBhbnlvbmUgaW4gdGhlIHByb2Nlc3Mgb2YgZmx1c2hpbmcgdGhlIGRxdW90LgogCSAqLwotCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgMCk7CiAJaWYgKGVycm9yKQogCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBkcXAtPnFfbW91bnQsCiAJCQkieGZzX3FtX2RxdW90X2xvZ2l0ZW1fcHVzaDogcHVzaCBlcnJvciAlZCBvbiBkcXAgJXAiLApAQCAtMTkwLDcgKzE5MCw3IEBACiAJLyoKIAkgKiBHaXZlIHRoZSBsb2cgYSBwdXNoIHNvIHdlIGRvbid0IHdhaXQgaGVyZSB0b28gbG9uZy4KIAkgKi8KLQl4ZnNfbG9nX2ZvcmNlKGRxcC0+cV9tb3VudCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFKTsKKwl4ZnNfbG9nX2ZvcmNlKGRxcC0+cV9tb3VudCwgMCk7CiAJd2FpdF9ldmVudChkcXAtPnFfcGlud2FpdCwgKGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID09IDApKTsKIH0KIApAQCAtMjEyLDY4ICsyMTIsMzEgQEAKIAl4ZnNfZHF1b3RfdAkqZHFwOwogCXhmc19tb3VudF90CSptcDsKIAl4ZnNfYnVmX3QJKmJwOwotCXVpbnQJCWRvcHVzaDsKIAogCWRxcCA9IHFpcC0+cWxpX2RxdW90OwogCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwogCiAJLyoKLQkgKiBUaGUgcWxpX3B1c2hidWZfZmxhZyBrZWVwcyBvdGhlcnMgZnJvbQotCSAqIHRyeWluZyB0byBkdXBsaWNhdGUgb3VyIGVmZm9ydC4KLQkgKi8KLQlBU1NFUlQocWlwLT5xbGlfcHVzaGJ1Zl9mbGFnICE9IDApOwotCUFTU0VSVChxaXAtPnFsaV9wdXNoX293bmVyID09IGN1cnJlbnRfcGlkKCkpOwotCi0JLyoKIAkgKiBJZiBmbHVzaGxvY2sgaXNuJ3QgbG9ja2VkIGFueW1vcmUsIGNoYW5jZXMgYXJlIHRoYXQgdGhlCiAJICogaW5vZGUgZmx1c2ggY29tcGxldGVkIGFuZCB0aGUgaW5vZGUgd2FzIHRha2VuIG9mZiB0aGUgQUlMLgogCSAqIFNvLCBqdXN0IGdldCBvdXQuCiAJICovCiAJaWYgKGNvbXBsZXRpb25fZG9uZSgmZHFwLT5xX2ZsdXNoKSAgfHwKIAkgICAgKChxaXAtPnFsaV9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgPT0gMCkpIHsKLQkJcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMDsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCXJldHVybjsKIAl9CiAJbXAgPSBkcXAtPnFfbW91bnQ7CiAJYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIHFpcC0+cWxpX2Zvcm1hdC5xbGZfYmxrbm8sCi0JCSAgICBYRlNfUUlfRFFDSFVOS0xFTihtcCksCi0JCSAgICBYRlNfSU5DT1JFX1RSWUxPQ0spOwotCWlmIChicCAhPSBOVUxMKSB7Ci0JCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpIHsKLQkJCWRvcHVzaCA9ICgocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpICYmCi0JCQkJICAhY29tcGxldGlvbl9kb25lKCZkcXAtPnFfZmx1c2gpKTsKLQkJCXFpcC0+cWxpX3B1c2hidWZfZmxhZyA9IDA7Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQotCQkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7Ci0JCQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLAotCQkJCQkgICAgICBYRlNfTE9HX0ZPUkNFKTsKLQkJCX0KLQkJCWlmIChkb3B1c2gpIHsKLQkJCQlpbnQJZXJyb3I7Ci0jaWZkZWYgWEZTUkFDRURFQlVHCi0JCQkJZGVsYXlfZm9yX2ludHIoKTsKLQkJCQlkZWxheSgzMDApOwotI2VuZGlmCi0JCQkJZXJyb3IgPSB4ZnNfYmF3cml0ZShtcCwgYnApOwotCQkJCWlmIChlcnJvcikKLQkJCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCi0JInhmc19xbV9kcXVvdF9sb2dpdGVtX3B1c2hidWY6IHB1c2hidWYgZXJyb3IgJWQgb24gcWlwICVwLCBicCAlcCIsCi0JCQkJCQkJZXJyb3IsIHFpcCwgYnApOwotCQkJfSBlbHNlIHsKLQkJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXFpcC0+cWxpX3B1c2hidWZfZmxhZyA9IDA7Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJCXhmc19idWZfcmVsc2UoYnApOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOworCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4obXApLCBYQkZfVFJZTE9DSyk7CiAJeGZzX2RxdW5sb2NrKGRxcCk7CisJaWYgKCFicCkKKwkJcmV0dXJuOworCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpCisJCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOworCXhmc19idWZfcmVsc2UoYnApOworCXJldHVybjsKKwogfQogCiAvKgpAQCAtMjkxLDUwICsyNTQsMjQgQEAKIAl4ZnNfZHFfbG9naXRlbV90CSpxaXApCiB7CiAJeGZzX2RxdW90X3QJCSpkcXA7Ci0JdWludAkJCXJldHZhbDsKIAogCWRxcCA9IHFpcC0+cWxpX2RxdW90OwogCWlmIChhdG9taWNfcmVhZCgmZHFwLT5xX3BpbmNvdW50KSA+IDApCi0JCXJldHVybiAoWEZTX0lURU1fUElOTkVEKTsKKwkJcmV0dXJuIFhGU19JVEVNX1BJTk5FRDsKIAogCWlmICghIHhmc19xbV9kcWxvY2tfbm93YWl0KGRxcCkpCi0JCXJldHVybiAoWEZTX0lURU1fTE9DS0VEKTsKKwkJcmV0dXJuIFhGU19JVEVNX0xPQ0tFRDsKIAotCXJldHZhbCA9IFhGU19JVEVNX1NVQ0NFU1M7CiAJaWYgKCF4ZnNfZHFmbG9ja19ub3dhaXQoZHFwKSkgewogCQkvKgotCQkgKiBUaGUgZHF1b3QgaXMgYWxyZWFkeSBiZWluZyBmbHVzaGVkLglJdCBtYXkgaGF2ZSBiZWVuCi0JCSAqIGZsdXNoZWQgZGVsYXllZCB3cml0ZSwgaG93ZXZlciwgYW5kIHdlIGRvbid0IHdhbnQgdG8KLQkJICogZ2V0IHN0dWNrIHdhaXRpbmcgZm9yIHRoYXQgdG8gY29tcGxldGUuICBTbywgd2Ugd2FudCB0byBjaGVjawotCQkgKiB0byBzZWUgaWYgd2UgY2FuIGxvY2sgdGhlIGRxdW90J3MgYnVmZmVyIHdpdGhvdXQgc2xlZXBpbmcuCi0JCSAqIElmIHdlIGNhbiBhbmQgaXQgaXMgbWFya2VkIGZvciBkZWxheWVkIHdyaXRlLCB0aGVuIHdlCi0JCSAqIGhvbGQgaXQgYW5kIHNlbmQgaXQgb3V0IGZyb20gdGhlIHB1c2ggcm91dGluZS4gIFdlIGRvbid0Ci0JCSAqIHdhbnQgdG8gZG8gdGhhdCBub3cgc2luY2Ugd2UgbWlnaHQgc2xlZXAgaW4gdGhlIGRldmljZQotCQkgKiBzdHJhdGVneSByb3V0aW5lLiAgV2UgYWxzbyBkb24ndCB3YW50IHRvIGdyYWIgdGhlIGJ1ZmZlciBsb2NrCi0JCSAqIGhlcmUgYmVjYXVzZSB3ZSdkIGxpa2Ugbm90IHRvIGNhbGwgaW50byB0aGUgYnVmZmVyIGNhY2hlCi0JCSAqIHdoaWxlIGhvbGRpbmcgdGhlIEFJTCBsb2NrLgotCQkgKiBNYWtlIHN1cmUgdG8gb25seSByZXR1cm4gUFVTSEJVRiBpZiB3ZSBzZXQgcHVzaGJ1Zl9mbGFnCi0JCSAqIG91cnNlbHZlcy4gIElmIHNvbWVvbmUgZWxzZSBpcyBkb2luZyBpdCB0aGVuIHdlIGRvbid0Ci0JCSAqIHdhbnQgdG8gZ28gdG8gdGhlIHB1c2ggcm91dGluZSBhbmQgZHVwbGljYXRlIHRoZWlyIGVmZm9ydHMuCisJCSAqIGRxdW90IGhhcyBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0byB0aGUgYmFja2luZyBidWZmZXIsCisJCSAqIGxlYXZlIGl0IGxvY2tlZCwgcHVzaGJ1ZiByb3V0aW5lIHdpbGwgdW5sb2NrIGl0LgogCQkgKi8KLQkJaWYgKHFpcC0+cWxpX3B1c2hidWZfZmxhZyA9PSAwKSB7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAxOwotCQkJQVNTRVJUKHFpcC0+cWxpX2Zvcm1hdC5xbGZfYmxrbm8gPT0gZHFwLT5xX2Jsa25vKTsKLSNpZmRlZiBERUJVRwotCQkJcWlwLT5xbGlfcHVzaF9vd25lciA9IGN1cnJlbnRfcGlkKCk7Ci0jZW5kaWYKLQkJCS8qCi0JCQkgKiBUaGUgZHF1b3QgaXMgbGVmdCBsb2NrZWQuCi0JCQkgKi8KLQkJCXJldHZhbCA9IFhGU19JVEVNX1BVU0hCVUY7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSBYRlNfSVRFTV9GTFVTSElORzsKLQkJCXhmc19kcXVubG9ja19ub25vdGlmeShkcXApOwotCQl9CisJCXJldHVybiBYRlNfSVRFTV9QVVNIQlVGOwogCX0KIAogCUFTU0VSVChxaXAtPnFsaV9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCk7Ci0JcmV0dXJuIChyZXR2YWwpOworCXJldHVybiBYRlNfSVRFTV9TVUNDRVNTOwogfQogCiAKQEAgLTQ2Nyw3ICs0MDQsNyBAQAogCiAJbG9nX3ZlY3Rvci0+aV9hZGRyID0gKHhmc19jYWRkcl90KSYocWYtPnFxbF9mb3JtYXQpOwogCWxvZ192ZWN0b3ItPmlfbGVuID0gc2l6ZW9mKHhmc19xb2ZmX2xvZ2l0ZW1fdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9nX3ZlY3RvciwgWExPR19SRUdfVFlQRV9RVU9UQU9GRik7CisJbG9nX3ZlY3Rvci0+aV90eXBlID0gWExPR19SRUdfVFlQRV9RVU9UQU9GRjsKIAlxZi0+cXFsX2Zvcm1hdC5xZl9zaXplID0gMTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmggYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uaAppbmRleCA1YTYzMjUzLi41YWNhZTJhIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uaAorKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uaApAQCAtMjcsMTAgKzI3LDYgQEAKIAl4ZnNfbG9nX2l0ZW1fdAkJIHFsaV9pdGVtOwkgICAvKiBjb21tb24gcG9ydGlvbiAqLwogCXN0cnVjdCB4ZnNfZHF1b3QJKnFsaV9kcXVvdDsJICAgLyogZHF1b3QgcHRyICovCiAJeGZzX2xzbl90CQkgcWxpX2ZsdXNoX2xzbjsJICAgLyogbHNuIGF0IGxhc3QgZmx1c2ggKi8KLQl1bnNpZ25lZCBzaG9ydAkJIHFsaV9wdXNoYnVmX2ZsYWc7IC8qIDEgYml0IHVzZWQgaW4gcHVzaF9haWwgKi8KLSNpZmRlZiBERUJVRwotCXVpbnQ2NF90CQkgcWxpX3B1c2hfb3duZXI7Ci0jZW5kaWYKIAl4ZnNfZHFfbG9nZm9ybWF0X3QJIHFsaV9mb3JtYXQ7CSAgIC8qIGxvZ2dlZCBzdHJ1Y3R1cmUgKi8KIH0geGZzX2RxX2xvZ2l0ZW1fdDsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5jIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCmluZGV4IDllNjI3YTguLjQxN2U2MWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTExOCw5ICsxMTgsMTQgQEAKIAkgKi8KIAl1ZHFoYXNoID0ga21lbV96YWxsb2NfZ3JlZWR5KCZoc2l6ZSwKIAkJCQkgICAgIFhGU19RTV9IQVNIU0laRV9MT1cgKiBzaXplb2YoeGZzX2RxaGFzaF90KSwKLQkJCQkgICAgIFhGU19RTV9IQVNIU0laRV9ISUdIICogc2l6ZW9mKHhmc19kcWhhc2hfdCksCi0JCQkJICAgICBLTV9TTEVFUCB8IEtNX01BWUZBSUwgfCBLTV9MQVJHRSk7Ci0JZ2RxaGFzaCA9IGttZW1femFsbG9jKGhzaXplLCBLTV9TTEVFUCB8IEtNX0xBUkdFKTsKKwkJCQkgICAgIFhGU19RTV9IQVNIU0laRV9ISUdIICogc2l6ZW9mKHhmc19kcWhhc2hfdCkpOworCWlmICghdWRxaGFzaCkKKwkJZ290byBvdXQ7CisKKwlnZHFoYXNoID0ga21lbV96YWxsb2NfbGFyZ2UoaHNpemUpOworCWlmICghZ2RxaGFzaCkKKwkJZ290byBvdXRfZnJlZV91ZHFoYXNoOworCiAJaHNpemUgLz0gc2l6ZW9mKHhmc19kcWhhc2hfdCk7CiAJbmRxdW90ID0gaHNpemUgPDwgODsKIApAQCAtMTcwLDYgKzE3NSwxMSBAQAogCW11dGV4X2luaXQoJnFjaGVja19sb2NrKTsKICNlbmRpZgogCXJldHVybiB4cW07CisKKyBvdXRfZnJlZV91ZHFoYXNoOgorCWttZW1fZnJlZV9sYXJnZSh1ZHFoYXNoKTsKKyBvdXQ6CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC0xODksOCArMTk5LDggQEAKIAkJeGZzX3FtX2xpc3RfZGVzdHJveSgmKHhxbS0+cW1fdXNyX2RxaHRhYmxlW2ldKSk7CiAJCXhmc19xbV9saXN0X2Rlc3Ryb3koJih4cW0tPnFtX2dycF9kcWh0YWJsZVtpXSkpOwogCX0KLQlrbWVtX2ZyZWUoeHFtLT5xbV91c3JfZHFodGFibGUpOwotCWttZW1fZnJlZSh4cW0tPnFtX2dycF9kcWh0YWJsZSk7CisJa21lbV9mcmVlX2xhcmdlKHhxbS0+cW1fdXNyX2RxaHRhYmxlKTsKKwlrbWVtX2ZyZWVfbGFyZ2UoeHFtLT5xbV9ncnBfZHFodGFibGUpOwogCXhxbS0+cW1fdXNyX2RxaHRhYmxlID0gTlVMTDsKIAl4cW0tPnFtX2dycF9kcWh0YWJsZSA9IE5VTEw7CiAJeHFtLT5xbV9kcWhhc2htYXNrID0gMDsKQEAgLTIxOSw4ICsyMjksMTIgQEAKIAkgKi8KIAltdXRleF9sb2NrKCZ4ZnNfR3FtX2xvY2spOwogCi0JaWYgKHhmc19HcW0gPT0gTlVMTCkKKwlpZiAoIXhmc19HcW0pIHsKIAkJeGZzX0dxbSA9IHhmc19HcW1faW5pdCgpOworCQlpZiAoIXhmc19HcW0pCisJCQlyZXR1cm4gRU5PTUVNOworCX0KKwogCS8qCiAJICogV2UgY2FuIGtlZXAgYSBsaXN0IG9mIGFsbCBmaWxlc3lzdGVtcyB3aXRoIHF1b3RhcyBtb3VudGVkIGZvcgogCSAqIGRlYnVnZ2luZyBhbmQgc3RhdGlzdGljYWwgcHVycG9zZXMsIGJ1dCAuLi4KQEAgLTQzNiw3ICs0NTAsNyBAQAogU1RBVElDIGludAogeGZzX3FtX2RxZmx1c2hfYWxsKAogCXhmc19tb3VudF90CSptcCwKLQlpbnQJCWZsYWdzKQorCWludAkJc3luY19tb2RlKQogewogCWludAkJcmVjbDsKIAl4ZnNfZHF1b3RfdAkqZHFwOwpAQCAtNDcyLDcgKzQ4Niw3IEBACiAJCSAqIGFjcm9zcyBhIGRpc2sgd3JpdGUuCiAJCSAqLwogCQl4ZnNfcW1fbXBsaXN0X3VubG9jayhtcCk7Ci0JCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBmbGFncyk7CisJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBzeW5jX21vZGUpOwogCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwpAQCAtOTEyLDEzICs5MjYsMTEgQEAKIHsKIAlpbnQJCXJlY2wsIHJlc3RhcnRzOwogCXhmc19kcXVvdF90CSpkcXA7Ci0JdWludAkJZmx1c2hfZmxhZ3M7CiAJaW50CQllcnJvcjsKIAogCWlmICghWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApIHx8ICFYRlNfSVNfUVVPVEFfT04obXApKQogCQlyZXR1cm4gMDsKIAotCWZsdXNoX2ZsYWdzID0gKGZsYWdzICYgU1lOQ19XQUlUKSA/IFhGU19RTU9QVF9TWU5DIDogWEZTX1FNT1BUX0RFTFdSSTsKIAlyZXN0YXJ0cyA9IDA7CiAKICAgYWdhaW46CkBAIC05NzgsNyArOTkwLDcgQEAKIAkJICogYWNyb3NzIGEgZGlzayB3cml0ZQogCQkgKi8KIAkJeGZzX3FtX21wbGlzdF91bmxvY2sobXApOwotCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgZmx1c2hfZmxhZ3MpOworCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgZmxhZ3MpOwogCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJaWYgKGVycm9yICYmIFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQkJcmV0dXJuIDA7CS8qIE5lZWQgdG8gcHJldmVudCB1bW91bnQgZmFpbHVyZSAqLwpAQCAtMTc4Miw3ICsxNzk0LDcgQEAKIAkgKiBzdWNjZXNzZnVsbHkuCiAJICovCiAJaWYgKCFlcnJvcikKLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaF9hbGwobXAsIFhGU19RTU9QVF9ERUxXUkkpOworCQllcnJvciA9IHhmc19xbV9kcWZsdXNoX2FsbChtcCwgMCk7CiAKIAkvKgogCSAqIFdlIGNhbiBnZXQgdGhpcyBlcnJvciBpZiB3ZSBjb3VsZG4ndCBkbyBhIGRxdW90IGFsbG9jYXRpb24gaW5zaWRlCkBAIC0yMDA0LDcgKzIwMTYsNyBAQAogCQkJICogV2UgZmx1c2ggaXQgZGVsYXllZCB3cml0ZSwgc28gZG9uJ3QgYm90aGVyCiAJCQkgKiByZWxlYXNpbmcgdGhlIG1wbG9jay4KIAkJCSAqLwotCQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFhGU19RTU9QVF9ERUxXUkkpOworCQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIDApOwogCQkJaWYgKGVycm9yKSB7CiAJCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgZHFwLT5xX21vdW50LAogCQkJInhmc19xbV9kcWZsdXNoX2FsbDogZHF1b3QgJXAgZmx1c2ggZmFpbGVkIiwgZHFwKTsKQEAgLTIxODcsNyArMjE5OSw3IEBACiAJCQkgKiBXZSBmbHVzaCBpdCBkZWxheWVkIHdyaXRlLCBzbyBkb24ndCBib3RoZXIKIAkJCSAqIHJlbGVhc2luZyB0aGUgZnJlZWxpc3QgbG9jay4KIAkJCSAqLwotCQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFhGU19RTU9QVF9ERUxXUkkpOworCQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIDApOwogCQkJaWYgKGVycm9yKSB7CiAJCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgZHFwLT5xX21vdW50LAogCQkJInhmc19xbV9kcXJlY2xhaW06IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYwppbmRleCBhNTM0NjYzLi45N2I0MTBjIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKQEAgLTU5LDcgKzU5LDcgQEAKIAkJYmU2NF90b19jcHUoZHAtPmRfYmxrX2hhcmRsaW1pdCk7CiAJaWYgKGxpbWl0ICYmIHN0YXRwLT5mX2Jsb2NrcyA+IGxpbWl0KSB7CiAJCXN0YXRwLT5mX2Jsb2NrcyA9IGxpbWl0OwotCQlzdGF0cC0+Zl9iZnJlZSA9CisJCXN0YXRwLT5mX2JmcmVlID0gc3RhdHAtPmZfYmF2YWlsID0KIAkJCShzdGF0cC0+Zl9ibG9ja3MgPiBiZTY0X3RvX2NwdShkcC0+ZF9iY291bnQpKSA/CiAJCQkgKHN0YXRwLT5mX2Jsb2NrcyAtIGJlNjRfdG9fY3B1KGRwLT5kX2Jjb3VudCkpIDogMDsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggODczZTA3ZS4uNWQwZWU4ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtMTE5Miw5ICsxMTkyLDkgQEAKIAlpZiAoISBYRlNfSVNfUVVPVEFfT04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVTUkNIKTsKIAotCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQyk7CisJeGZzX2xvZ19mb3JjZShtcCwgWEZTX0xPR19TWU5DKTsKIAlYRlNfYmZsdXNoKG1wLT5tX2RkZXZfdGFyZ3ApOwotCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQyk7CisJeGZzX2xvZ19mb3JjZShtcCwgWEZTX0xPR19TWU5DKTsKIAlYRlNfYmZsdXNoKG1wLT5tX2RkZXZfdGFyZ3ApOwogCiAJbXV0ZXhfbG9jaygmcWNoZWNrX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCmluZGV4IDk3YWM5NjQuLmMzYWI3NWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKQEAgLTU4OSwxMiArNTg5LDE4IEBACiAJfQogfQogCi1TVEFUSUMgaW50Ci14ZnNfcXVvdGFfZXJyb3IodWludCBmbGFncykKK1NUQVRJQyB2b2lkCit4ZnNfcXVvdGFfd2FybigKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlzdHJ1Y3QgeGZzX2RxdW90CSpkcXAsCisJaW50CQkJdHlwZSkKIHsKLQlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRU5PU1BDKQotCQlyZXR1cm4gRU5PU1BDOwotCXJldHVybiBFRFFVT1Q7CisJLyogbm8gd2FybmluZ3MgZm9yIHByb2plY3QgcXVvdGFzIC0gd2UganVzdCByZXR1cm4gRU5PU1BDIGxhdGVyICovCisJaWYgKGRxcC0+ZHFfZmxhZ3MgJiBYRlNfRFFfUFJPSikKKwkJcmV0dXJuOworCXF1b3RhX3NlbmRfd2FybmluZygoZHFwLT5kcV9mbGFncyAmIFhGU19EUV9VU0VSKSA/IFVTUlFVT1RBIDogR1JQUVVPVEEsCisJCQkgICBiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2lkKSwgbXAtPm1fc3VwZXItPnNfZGV2LAorCQkJICAgdHlwZSk7CiB9CiAKIC8qCkBAIC02MTIsNyArNjE4LDYgQEAKIAlsb25nCQluaW5vcywKIAl1aW50CQlmbGFncykKIHsKLQlpbnQJCWVycm9yOwogCXhmc19xY250X3QJaGFyZGxpbWl0OwogCXhmc19xY250X3QJc29mdGxpbWl0OwogCXRpbWVfdAkJdGltZXI7CkBAIC02NDksNyArNjU0LDYgQEAKIAkJd2FybmxpbWl0ID0gWEZTX1FJX1JUQldBUk5MSU1JVChkcXAtPnFfbW91bnQpOwogCQlyZXNiY291bnRwID0gJmRxcC0+cV9yZXNfcnRiY291bnQ7CiAJfQotCWVycm9yID0gMDsKIAogCWlmICgoZmxhZ3MgJiBYRlNfUU1PUFRfRk9SQ0VfUkVTKSA9PSAwICYmCiAJICAgIGRxcC0+cV9jb3JlLmRfaWQgJiYKQEAgLTY2NywxOCArNjcxLDIwIEBACiAJCQkgKiBuYmxrcy4KIAkJCSAqLwogCQkJaWYgKGhhcmRsaW1pdCA+IDBVTEwgJiYKLQkJCSAgICAgKGhhcmRsaW1pdCA8PSBuYmxrcyArICpyZXNiY291bnRwKSkgewotCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCSAgICBoYXJkbGltaXQgPD0gbmJsa3MgKyAqcmVzYmNvdW50cCkgeworCQkJCXhmc19xdW90YV93YXJuKG1wLCBkcXAsIFFVT1RBX05MX0JIQVJEV0FSTik7CiAJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQl9Ci0KIAkJCWlmIChzb2Z0bGltaXQgPiAwVUxMICYmCi0JCQkgICAgIChzb2Z0bGltaXQgPD0gbmJsa3MgKyAqcmVzYmNvdW50cCkpIHsKKwkJCSAgICBzb2Z0bGltaXQgPD0gbmJsa3MgKyAqcmVzYmNvdW50cCkgewogCQkJCWlmICgodGltZXIgIT0gMCAmJiBnZXRfc2Vjb25kcygpID4gdGltZXIpIHx8CiAJCQkJICAgICh3YXJucyAhPSAwICYmIHdhcm5zID49IHdhcm5saW1pdCkpIHsKLQkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOworCQkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLAorCQkJCQkJICAgICAgIFFVT1RBX05MX0JTT0ZUTE9OR1dBUk4pOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CisKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9CU09GVFdBUk4pOwogCQkJfQogCQl9CiAJCWlmIChuaW5vcyA+IDApIHsKQEAgLTY5MiwxNSArNjk4LDE5IEBACiAJCQlzb2Z0bGltaXQgPSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19zb2Z0bGltaXQpOwogCQkJaWYgKCFzb2Z0bGltaXQpCiAJCQkJc29mdGxpbWl0ID0gcS0+cWlfaXNvZnRsaW1pdDsKKwogCQkJaWYgKGhhcmRsaW1pdCA+IDBVTEwgJiYgY291bnQgPj0gaGFyZGxpbWl0KSB7Ci0JCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOworCQkJCXhmc19xdW90YV93YXJuKG1wLCBkcXAsIFFVT1RBX05MX0lIQVJEV0FSTik7CiAJCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCQl9IGVsc2UgaWYgKHNvZnRsaW1pdCA+IDBVTEwgJiYgY291bnQgPj0gc29mdGxpbWl0KSB7Ci0JCQkJaWYgKCh0aW1lciAhPSAwICYmIGdldF9zZWNvbmRzKCkgPiB0aW1lcikgfHwKKwkJCX0KKwkJCWlmIChzb2Z0bGltaXQgPiAwVUxMICYmIGNvdW50ID49IHNvZnRsaW1pdCkgeworCQkJCWlmICAoKHRpbWVyICE9IDAgJiYgZ2V0X3NlY29uZHMoKSA+IHRpbWVyKSB8fAogCQkJCSAgICAgKHdhcm5zICE9IDAgJiYgd2FybnMgPj0gd2FybmxpbWl0KSkgewotCQkJCQllcnJvciA9IHhmc19xdW90YV9lcnJvcihmbGFncyk7CisJCQkJCXhmc19xdW90YV93YXJuKG1wLCBkcXAsCisJCQkJCQkgICAgICAgUVVPVEFfTkxfSVNPRlRMT05HV0FSTik7CiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJCX0KKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9JU09GVFdBUk4pOwogCQkJfQogCQl9CiAJfQpAQCAtNzM2LDkgKzc0NiwxNCBAQAogCUFTU0VSVChkcXAtPnFfcmVzX3J0YmNvdW50ID49IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfcnRiY291bnQpKTsKIAlBU1NFUlQoZHFwLT5xX3Jlc19pY291bnQgPj0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pY291bnQpKTsKIAorCXhmc19kcXVubG9jayhkcXApOworCXJldHVybiAwOworCiBlcnJvcl9yZXR1cm46CiAJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JcmV0dXJuIGVycm9yOworCWlmIChmbGFncyAmIFhGU19RTU9QVF9FTk9TUEMpCisJCXJldHVybiBFTk9TUEM7CisJcmV0dXJuIEVEUVVPVDsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FjbC5oIGIvZnMveGZzL3hmc19hY2wuaAppbmRleCAwMGZkMzU3Yy4uZDEzZWViYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hY2wuaAorKysgYi9mcy94ZnMveGZzX2FjbC5oCkBAIC0zNiw4ICszNiw4IEBACiB9OwogCiAvKiBPbi1kaXNrIFhGUyBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMgKi8KLSNkZWZpbmUgU0dJX0FDTF9GSUxFCQkiU0dJX0FDTF9GSUxFIgotI2RlZmluZSBTR0lfQUNMX0RFRkFVTFQJCSJTR0lfQUNMX0RFRkFVTFQiCisjZGVmaW5lIFNHSV9BQ0xfRklMRQkJKHVuc2lnbmVkIGNoYXIgKikiU0dJX0FDTF9GSUxFIgorI2RlZmluZSBTR0lfQUNMX0RFRkFVTFQJCSh1bnNpZ25lZCBjaGFyICopIlNHSV9BQ0xfREVGQVVMVCIKICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkUJKHNpemVvZihTR0lfQUNMX0ZJTEUpLTEpCiAjZGVmaW5lIFNHSV9BQ0xfREVGQVVMVF9TSVpFCShzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FnLmggYi9mcy94ZnMveGZzX2FnLmgKaW5kZXggNjcwMmJkOC4uYjFhNWExZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hZy5oCisrKyBiL2ZzL3hmcy94ZnNfYWcuaApAQCAtMTg3LDE3ICsxODcsMTMgQEAKIC8qCiAgKiBQZXItYWcgaW5jb3JlIHN0cnVjdHVyZSwgY29waWVzIG9mIGluZm9ybWF0aW9uIGluIGFnZiBhbmQgYWdpLAogICogdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgYWxsb2NhdGlvbiBncm91cCBzZWxlY3Rpb24uCi0gKgotICogcGljayBzaXplcyB3aGljaCBmaXQgaW4gYWxsb2NhdGlvbiBidWNrZXRzIHdlbGwKICAqLwotI2lmIChCSVRTX1BFUl9MT05HID09IDMyKQotI2RlZmluZSBYRlNfUEFHQl9OVU1fU0xPVFMJODQKLSNlbGlmIChCSVRTX1BFUl9MT05HID09IDY0KQogI2RlZmluZSBYRlNfUEFHQl9OVU1fU0xPVFMJMTI4Ci0jZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgeGZzX3BlcmFnCi17Cit0eXBlZGVmIHN0cnVjdCB4ZnNfcGVyYWcgeworCXN0cnVjdCB4ZnNfbW91bnQgKnBhZ19tb3VudDsJLyogb3duZXIgZmlsZXN5c3RlbSAqLworCXhmc19hZ251bWJlcl90CXBhZ19hZ25vOwkvKiBBRyB0aGlzIHN0cnVjdHVyZSBiZWxvbmdzIHRvICovCisJYXRvbWljX3QJcGFnX3JlZjsJLyogcGVyYWcgcmVmZXJlbmNlIGNvdW50ICovCiAJY2hhcgkJcGFnZl9pbml0OwkvKiB0aGlzIGFnZidzIGVudHJ5IGlzIGluaXRpYWxpemVkICovCiAJY2hhcgkJcGFnaV9pbml0OwkvKiB0aGlzIGFnaSdzIGVudHJ5IGlzIGluaXRpYWxpemVkICovCiAJY2hhcgkJcGFnZl9tZXRhZGF0YTsJLyogdGhlIGFnZiBpcyBwcmVmZXJyZWQgdG8gYmUgbWV0YWRhdGEgKi8KQEAgLTIxMCw4ICsyMDYsNiBAQAogCV9fdWludDMyX3QJcGFnZl9idHJlZWJsa3M7CS8qICMgb2YgYmxvY2tzIGhlbGQgaW4gQUdGIGJ0cmVlcyAqLwogCXhmc19hZ2lub190CXBhZ2lfZnJlZWNvdW50OwkvKiBudW1iZXIgb2YgZnJlZSBpbm9kZXMgKi8KIAl4ZnNfYWdpbm9fdAlwYWdpX2NvdW50OwkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIGlub2RlcyAqLwotCWludAkJcGFnYl9jb3VudDsJLyogcGFnYiBzbG90cyBpbiB1c2UgKi8KLQl4ZnNfcGVyYWdfYnVzeV90ICpwYWdiX2xpc3Q7CS8qIHVuc3RhYmxlIGJsb2NrcyAqLwogCiAJLyoKIAkgKiBJbm9kZSBhbGxvY2F0aW9uIHNlYXJjaCBsb29rdXAgb3B0aW1pc2F0aW9uLgpAQCAtMjMwLDYgKzIyNCw4IEBACiAJcndsb2NrX3QJcGFnX2ljaV9sb2NrOwkvKiBpbmNvcmUgaW5vZGUgbG9jayAqLwogCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgcGFnX2ljaV9yb290OwkvKiBpbmNvcmUgaW5vZGUgY2FjaGUgcm9vdCAqLwogI2VuZGlmCisJaW50CQlwYWdiX2NvdW50OwkvKiBwYWdiIHNsb3RzIGluIHVzZSAqLworCXhmc19wZXJhZ19idXN5X3QgcGFnYl9saXN0W1hGU19QQUdCX05VTV9TTE9UU107CS8qIHVuc3RhYmxlIGJsb2NrcyAqLwogfSB4ZnNfcGVyYWdfdDsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuYyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwppbmRleCAyNzViMWY0Li45NGNkZGJmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jLmMKKysrIGIvZnMveGZzL3hmc19hbGxvYy5jCkBAIC0xNjYyLDExICsxNjYyLDEzIEBACiAJCXhmc19hZ2ZfdAkqYWdmOwogCQl4ZnNfcGVyYWdfdAkqcGFnOwkJLyogcGVyIGFsbG9jYXRpb24gZ3JvdXAgZGF0YSAqLwogCisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOworCQlwYWctPnBhZ2ZfZnJlZWJsa3MgKz0gbGVuOworCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisKIAkJYWdmID0gWEZTX0JVRl9UT19BR0YoYWdicCk7Ci0JCXBhZyA9ICZtcC0+bV9wZXJhZ1thZ25vXTsKIAkJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9mcmVlYmxrcywgbGVuKTsKIAkJeGZzX3RyYW5zX2FnYmxvY2tzX2RlbHRhKHRwLCBsZW4pOwotCQlwYWctPnBhZ2ZfZnJlZWJsa3MgKz0gbGVuOwogCQlYRlNfV0FOVF9DT1JSVVBURURfR09UTygKIAkJCWJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZyZWVibGtzKSA8PQogCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGVuZ3RoKSwKQEAgLTE5NjksMTAgKzE5NzEsMTIgQEAKIAl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBhZ2ZsYnApOwogCWlmIChiZTMyX3RvX2NwdShhZ2YtPmFnZl9mbGZpcnN0KSA9PSBYRlNfQUdGTF9TSVpFKG1wKSkKIAkJYWdmLT5hZ2ZfZmxmaXJzdCA9IDA7Ci0JcGFnID0gJm1wLT5tX3BlcmFnW2JlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKV07CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBiZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubykpOwogCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZmxjb3VudCwgLTEpOwogCXhmc190cmFuc19hZ2ZsaXN0X2RlbHRhKHRwLCAtMSk7CiAJcGFnLT5wYWdmX2ZsY291bnQtLTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAKIAlsb2dmbGFncyA9IFhGU19BR0ZfRkxGSVJTVCB8IFhGU19BR0ZfRkxDT1VOVDsKIAlpZiAoYnRyZWVibGspIHsKQEAgLTIwNzgsNyArMjA4Miw4IEBACiAJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9mbGxhc3QsIDEpOwogCWlmIChiZTMyX3RvX2NwdShhZ2YtPmFnZl9mbGxhc3QpID09IFhGU19BR0ZMX1NJWkUobXApKQogCQlhZ2YtPmFnZl9mbGxhc3QgPSAwOwotCXBhZyA9ICZtcC0+bV9wZXJhZ1tiZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubyldOworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pKTsKIAliZTMyX2FkZF9jcHUoJmFnZi0+YWdmX2ZsY291bnQsIDEpOwogCXhmc190cmFuc19hZ2ZsaXN0X2RlbHRhKHRwLCAxKTsKIAlwYWctPnBhZ2ZfZmxjb3VudCsrOwpAQCAtMjA4OSw2ICsyMDk0LDcgQEAKIAkJcGFnLT5wYWdmX2J0cmVlYmxrcy0tOwogCQlsb2dmbGFncyB8PSBYRlNfQUdGX0JUUkVFQkxLUzsKIAl9CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCiAJeGZzX2FsbG9jX2xvZ19hZ2YodHAsIGFnYnAsIGxvZ2ZsYWdzKTsKIApAQCAtMjE1Miw3ICsyMTU4LDYgQEAKIAkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgKmJwcCk7CiAJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAl9Ci0KIAlYRlNfQlVGX1NFVF9WVFlQRV9SRUYoKmJwcCwgQl9GU19BR0YsIFhGU19BR0ZfUkVGKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNzUsNyArMjE4MCw3IEBACiAJQVNTRVJUKGFnbm8gIT0gTlVMTEFHTlVNQkVSKTsKIAogCWVycm9yID0geGZzX3JlYWRfYWdmKG1wLCB0cCwgYWdubywKLQkJCShmbGFncyAmIFhGU19BTExPQ19GTEFHX1RSWUxPQ0spID8gWEZTX0JVRl9UUllMT0NLIDogMCwKKwkJCShmbGFncyAmIFhGU19BTExPQ19GTEFHX1RSWUxPQ0spID8gWEJGX1RSWUxPQ0sgOiAwLAogCQkJYnBwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTIxODQsNyArMjE4OSw3IEBACiAJQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKCpicHApKTsKIAogCWFnZiA9IFhGU19CVUZfVE9fQUdGKCpicHApOwotCXBhZyA9ICZtcC0+bV9wZXJhZ1thZ25vXTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKIAlpZiAoIXBhZy0+cGFnZl9pbml0KSB7CiAJCXBhZy0+cGFnZl9mcmVlYmxrcyA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZyZWVibGtzKTsKIAkJcGFnLT5wYWdmX2J0cmVlYmxrcyA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX2J0cmVlYmxrcyk7CkBAIC0yMTk1LDggKzIyMDAsOCBAQAogCQlwYWctPnBhZ2ZfbGV2ZWxzW1hGU19CVE5VTV9DTlRpXSA9CiAJCQliZTMyX3RvX2NwdShhZ2YtPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldKTsKIAkJc3Bpbl9sb2NrX2luaXQoJnBhZy0+cGFnYl9sb2NrKTsKLQkJcGFnLT5wYWdiX2xpc3QgPSBrbWVtX3phbGxvYyhYRlNfUEFHQl9OVU1fU0xPVFMgKgotCQkJCQlzaXplb2YoeGZzX3BlcmFnX2J1c3lfdCksIEtNX1NMRUVQKTsKKwkJcGFnLT5wYWdiX2NvdW50ID0gMDsKKwkJbWVtc2V0KHBhZy0+cGFnYl9saXN0LCAwLCBzaXplb2YocGFnLT5wYWdiX2xpc3QpKTsKIAkJcGFnLT5wYWdmX2luaXQgPSAxOwogCX0KICNpZmRlZiBERUJVRwpAQCAtMjIxMSw2ICsyMjE2LDcgQEAKIAkJICAgICAgIGJlMzJfdG9fY3B1KGFnZi0+YWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0pKTsKIAl9CiAjZW5kaWYKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNzAsOCArMjI3Niw3IEBACiAJCSAqIFRoZXNlIHRocmVlIGZvcmNlIHVzIGludG8gYSBzaW5nbGUgYS5nLgogCQkgKi8KIAkJYXJncy0+YWdubyA9IFhGU19GU0JfVE9fQUdOTyhtcCwgYXJncy0+ZnNibm8pOwotCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7Ci0JCWFyZ3MtPnBhZyA9ICZtcC0+bV9wZXJhZ1thcmdzLT5hZ25vXTsKKwkJYXJncy0+cGFnID0geGZzX3BlcmFnX2dldChtcCwgYXJncy0+YWdubyk7CiAJCWFyZ3MtPm1pbmxlZnQgPSAwOwogCQllcnJvciA9IHhmc19hbGxvY19maXhfZnJlZWxpc3QoYXJncywgMCk7CiAJCWFyZ3MtPm1pbmxlZnQgPSBtaW5sZWZ0OwpAQCAtMjI4MCwxNCArMjI4NSwxMiBAQAogCQkJZ290byBlcnJvcjA7CiAJCX0KIAkJaWYgKCFhcmdzLT5hZ2JwKSB7Ci0JCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQkJdHJhY2VfeGZzX2FsbG9jX3ZleHRlbnRfbm9hZ2JwKGFyZ3MpOwogCQkJYnJlYWs7CiAJCX0KIAkJYXJncy0+YWdibm8gPSBYRlNfRlNCX1RPX0FHQk5PKG1wLCBhcmdzLT5mc2Jubyk7CiAJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfYWdfdmV4dGVudChhcmdzKSkpCiAJCQlnb3RvIGVycm9yMDsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBYRlNfQUxMT0NUWVBFX1NUQVJUX0JOTzoKIAkJLyoKQEAgLTIzMzksOSArMjM0Miw4IEBACiAJCSAqIExvb3Agb3ZlciBhbGxvY2F0aW9uIGdyb3VwcyB0d2ljZTsgZmlyc3QgdGltZSB3aXRoCiAJCSAqIHRyeWxvY2sgc2V0LCBzZWNvbmQgdGltZSB3aXRob3V0LgogCQkgKi8KLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQlmb3IgKDs7KSB7Ci0JCQlhcmdzLT5wYWcgPSAmbXAtPm1fcGVyYWdbYXJncy0+YWdub107CisJCQlhcmdzLT5wYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhcmdzLT5hZ25vKTsKIAkJCWlmIChub19taW4pIGFyZ3MtPm1pbmxlZnQgPSAwOwogCQkJZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KGFyZ3MsIGZsYWdzKTsKIAkJCWFyZ3MtPm1pbmxlZnQgPSBtaW5sZWZ0OwpAQCAtMjQwMCw4ICsyNDAyLDggQEAKIAkJCQkJfQogCQkJCX0KIAkJCX0KKwkJCXhmc19wZXJhZ19wdXQoYXJncy0+cGFnKTsKIAkJfQotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQlpZiAoYnVtcF9yb3RvciB8fCAodHlwZSA9PSBYRlNfQUxMT0NUWVBFX0FOWV9BRykpIHsKIAkJCWlmIChhcmdzLT5hZ25vID09IHNhZ25vKQogCQkJCW1wLT5tX2FnZnJvdG9yID0gKG1wLT5tX2FnZnJvdG9yICsgMSkgJQpAQCAtMjQyNyw5ICsyNDI5LDEwIEBACiAJCQlhcmdzLT5sZW4pOwogI2VuZGlmCiAJfQorCXhmc19wZXJhZ19wdXQoYXJncy0+cGFnKTsKIAlyZXR1cm4gMDsKIGVycm9yMDoKLQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCXhmc19wZXJhZ19wdXQoYXJncy0+cGFnKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI0NTQsOCArMjQ1Nyw3IEBACiAJYXJncy5hZ25vID0gWEZTX0ZTQl9UT19BR05PKGFyZ3MubXAsIGJubyk7CiAJQVNTRVJUKGFyZ3MuYWdubyA8IGFyZ3MubXAtPm1fc2Iuc2JfYWdjb3VudCk7CiAJYXJncy5hZ2JubyA9IFhGU19GU0JfVE9fQUdCTk8oYXJncy5tcCwgYm5vKTsKLQlkb3duX3JlYWQoJmFyZ3MubXAtPm1fcGVyYWdsb2NrKTsKLQlhcmdzLnBhZyA9ICZhcmdzLm1wLT5tX3BlcmFnW2FyZ3MuYWdub107CisJYXJncy5wYWcgPSB4ZnNfcGVyYWdfZ2V0KGFyZ3MubXAsIGFyZ3MuYWdubyk7CiAJaWYgKChlcnJvciA9IHhmc19hbGxvY19maXhfZnJlZWxpc3QoJmFyZ3MsIFhGU19BTExPQ19GTEFHX0ZSRUVJTkcpKSkKIAkJZ290byBlcnJvcjA7CiAjaWZkZWYgREVCVUcKQEAgLTI0NjUsNyArMjQ2Nyw3IEBACiAjZW5kaWYKIAllcnJvciA9IHhmc19mcmVlX2FnX2V4dGVudCh0cCwgYXJncy5hZ2JwLCBhcmdzLmFnbm8sIGFyZ3MuYWdibm8sIGxlbiwgMCk7CiBlcnJvcjA6Ci0JdXBfcmVhZCgmYXJncy5tcC0+bV9wZXJhZ2xvY2spOworCXhmc19wZXJhZ19wdXQoYXJncy5wYWcpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjQ4NiwxNSArMjQ4OCwxNSBAQAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCiAJCSAgICB4ZnNfZXh0bGVuX3QgbGVuKQogewotCXhmc19tb3VudF90CQkqbXA7CiAJeGZzX3BlcmFnX2J1c3lfdAkqYnN5OworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKIAlpbnQJCQluOwogCi0JbXAgPSB0cC0+dF9tb3VudHA7Ci0Jc3Bpbl9sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOworCXBhZyA9IHhmc19wZXJhZ19nZXQodHAtPnRfbW91bnRwLCBhZ25vKTsKKwlzcGluX2xvY2soJnBhZy0+cGFnYl9sb2NrKTsKIAogCS8qIHNlYXJjaCBwYWdiX2xpc3QgZm9yIGFuIG9wZW4gc2xvdCAqLwotCWZvciAoYnN5ID0gbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0LCBuID0gMDsKKwlmb3IgKGJzeSA9IHBhZy0+cGFnYl9saXN0LCBuID0gMDsKIAkgICAgIG4gPCBYRlNfUEFHQl9OVU1fU0xPVFM7CiAJICAgICBic3krKywgbisrKSB7CiAJCWlmIChic3ktPmJ1c3lfdHAgPT0gTlVMTCkgewpAQCAtMjUwMiwxMSArMjUwNCwxMSBAQAogCQl9CiAJfQogCi0JdHJhY2VfeGZzX2FsbG9jX2J1c3kobXAsIGFnbm8sIGJubywgbGVuLCBuKTsKKwl0cmFjZV94ZnNfYWxsb2NfYnVzeSh0cC0+dF9tb3VudHAsIGFnbm8sIGJubywgbGVuLCBuKTsKIAogCWlmIChuIDwgWEZTX1BBR0JfTlVNX1NMT1RTKSB7Ci0JCWJzeSA9ICZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3Rbbl07Ci0JCW1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQrKzsKKwkJYnN5ID0gJnBhZy0+cGFnYl9saXN0W25dOworCQlwYWctPnBhZ2JfY291bnQrKzsKIAkJYnN5LT5idXN5X3N0YXJ0ID0gYm5vOwogCQlic3ktPmJ1c3lfbGVuZ3RoID0gbGVuOwogCQlic3ktPmJ1c3lfdHAgPSB0cDsKQEAgLTI1MjEsNyArMjUyMyw4IEBACiAJCXhmc190cmFuc19zZXRfc3luYyh0cCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIHZvaWQKQEAgLTI1MjksMjQgKzI1MzIsMjMgQEAKIAkJICAgICB4ZnNfYWdudW1iZXJfdCBhZ25vLAogCQkgICAgIGludCBpZHgpCiB7Ci0JeGZzX21vdW50X3QJCSptcDsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJeGZzX3BlcmFnX2J1c3lfdAkqbGlzdDsKIAotCW1wID0gdHAtPnRfbW91bnRwOwotCi0Jc3Bpbl9sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOwotCWxpc3QgPSBtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3Q7Ci0KIAlBU1NFUlQoaWR4IDwgWEZTX1BBR0JfTlVNX1NMT1RTKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KHRwLT50X21vdW50cCwgYWdubyk7CisJc3Bpbl9sb2NrKCZwYWctPnBhZ2JfbG9jayk7CisJbGlzdCA9IHBhZy0+cGFnYl9saXN0OwogCi0JdHJhY2VfeGZzX2FsbG9jX3VuYnVzeShtcCwgYWdubywgaWR4LCBsaXN0W2lkeF0uYnVzeV90cCA9PSB0cCk7CisJdHJhY2VfeGZzX2FsbG9jX3VuYnVzeSh0cC0+dF9tb3VudHAsIGFnbm8sIGlkeCwgbGlzdFtpZHhdLmJ1c3lfdHAgPT0gdHApOwogCiAJaWYgKGxpc3RbaWR4XS5idXN5X3RwID09IHRwKSB7CiAJCWxpc3RbaWR4XS5idXN5X3RwID0gTlVMTDsKLQkJbXAtPm1fcGVyYWdbYWdub10ucGFnYl9jb3VudC0tOworCQlwYWctPnBhZ2JfY291bnQtLTsKIAl9CiAKLQlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKKwlzcGluX3VubG9jaygmcGFnLT5wYWdiX2xvY2spOworCXhmc19wZXJhZ19wdXQocGFnKTsKIH0KIAogCkBAIC0yNTYwLDE3ICsyNTYyLDE1IEBACiAJCSAgICB4ZnNfYWdibG9ja190IGJubywKIAkJICAgIHhmc19leHRsZW5fdCBsZW4pCiB7Ci0JeGZzX21vdW50X3QJCSptcDsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJeGZzX3BlcmFnX2J1c3lfdAkqYnN5OwogCXhmc19hZ2Jsb2NrX3QJCXVlbmQsIGJlbmQ7CiAJeGZzX2xzbl90CQlsc24gPSAwOwogCWludAkJCWNudDsKIAotCW1wID0gdHAtPnRfbW91bnRwOwotCi0Jc3Bpbl9sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOwotCi0JdWVuZCA9IGJubyArIGxlbiAtIDE7CisJcGFnID0geGZzX3BlcmFnX2dldCh0cC0+dF9tb3VudHAsIGFnbm8pOworCXNwaW5fbG9jaygmcGFnLT5wYWdiX2xvY2spOworCWNudCA9IHBhZy0+cGFnYl9jb3VudDsKIAogCS8qCiAJICogc2VhcmNoIHBhZ2JfbGlzdCBmb3IgdGhpcyBzbG90LCBza2lwcGluZyBvcGVuIHNsb3RzLiBXZSBoYXZlIHRvCkBAIC0yNTc4LDggKzI1NzgsOSBAQAogCSAqIHdlIGhhdmUgdG8gZ2V0IHRoZSBtb3N0IHJlY2VudCBMU04gZm9yIHRoZSBsb2cgZm9yY2UgdG8gcHVzaCBvdXQKIAkgKiBhbGwgdGhlIHRyYW5zYWN0aW9ucyB0aGF0IHNwYW4gdGhlIHJhbmdlLgogCSAqLwotCWZvciAoY250ID0gMDsgY250IDwgbXAtPm1fcGVyYWdbYWdub10ucGFnYl9jb3VudDsgY250KyspIHsKLQkJYnN5ID0gJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdFtjbnRdOworCXVlbmQgPSBibm8gKyBsZW4gLSAxOworCWZvciAoY250ID0gMDsgY250IDwgcGFnLT5wYWdiX2NvdW50OyBjbnQrKykgeworCQlic3kgPSAmcGFnLT5wYWdiX2xpc3RbY250XTsKIAkJaWYgKCFic3ktPmJ1c3lfdHApCiAJCQljb250aW51ZTsKIApAQCAtMjU5MSw3ICsyNTkyLDggQEAKIAkJaWYgKFhGU19MU05fQ01QKGJzeS0+YnVzeV90cC0+dF9jb21taXRfbHNuLCBsc24pID4gMCkKIAkJCWxzbiA9IGJzeS0+YnVzeV90cC0+dF9jb21taXRfbHNuOwogCX0KLQlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKKwlzcGluX3VubG9jaygmcGFnLT5wYWdiX2xvY2spOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAl0cmFjZV94ZnNfYWxsb2NfYnVzeXNlYXJjaCh0cC0+dF9tb3VudHAsIGFnbm8sIGJubywgbGVuLCBsc24pOwogCiAJLyoKQEAgLTI1OTksNSArMjYwMSw1IEBACiAJICogdHJhbnNhY3Rpb24gdGhhdCBmcmVlZCB0aGUgYmxvY2sKIAkgKi8KIAlpZiAobHNuKQotCQl4ZnNfbG9nX2ZvcmNlKG1wLCBsc24sIFhGU19MT0dfRk9SQ0V8WEZTX0xPR19TWU5DKTsKKwkJeGZzX2xvZ19mb3JjZV9sc24odHAtPnRfbW91bnRwLCBsc24sIFhGU19MT0dfU1lOQyk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMgYi9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMKaW5kZXggYWRiZDkxNC4uYjcyNmUxMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYwpAQCAtNjEsMTIgKzYxLDE0IEBACiAJc3RydWN0IHhmc19hZ2YJCSphZ2YgPSBYRlNfQlVGX1RPX0FHRihhZ2JwKTsKIAl4ZnNfYWdudW1iZXJfdAkJc2Vxbm8gPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubyk7CiAJaW50CQkJYnRudW0gPSBjdXItPmJjX2J0bnVtOworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZyA9IHhmc19wZXJhZ19nZXQoY3VyLT5iY19tcCwgc2Vxbm8pOwogCiAJQVNTRVJUKHB0ci0+cyAhPSAwKTsKIAogCWFnZi0+YWdmX3Jvb3RzW2J0bnVtXSA9IHB0ci0+czsKIAliZTMyX2FkZF9jcHUoJmFnZi0+YWdmX2xldmVsc1tidG51bV0sIGluYyk7Ci0JY3VyLT5iY19tcC0+bV9wZXJhZ1tzZXFub10ucGFnZl9sZXZlbHNbYnRudW1dICs9IGluYzsKKwlwYWctPnBhZ2ZfbGV2ZWxzW2J0bnVtXSArPSBpbmM7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCiAJeGZzX2FsbG9jX2xvZ19hZ2YoY3VyLT5iY190cCwgYWdicCwgWEZTX0FHRl9ST09UUyB8IFhGU19BR0ZfTEVWRUxTKTsKIH0KQEAgLTE1MCw2ICsxNTIsNyBAQAogewogCXN0cnVjdCB4ZnNfYWdmCQkqYWdmID0gWEZTX0JVRl9UT19BR0YoY3VyLT5iY19wcml2YXRlLmEuYWdicCk7CiAJeGZzX2FnbnVtYmVyX3QJCXNlcW5vID0gYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pOworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKIAlfX2JlMzIJCQlsZW47CiAJaW50CQkJbnVtcmVjczsKIApAQCAtMTkzLDcgKzE5Niw5IEBACiAJfQogCiAJYWdmLT5hZ2ZfbG9uZ2VzdCA9IGxlbjsKLQljdXItPmJjX21wLT5tX3BlcmFnW3NlcW5vXS5wYWdmX2xvbmdlc3QgPSBiZTMyX3RvX2NwdShsZW4pOworCXBhZyA9IHhmc19wZXJhZ19nZXQoY3VyLT5iY19tcCwgc2Vxbm8pOworCXBhZy0+cGFnZl9sb25nZXN0ID0gYmUzMl90b19jcHUobGVuKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJeGZzX2FsbG9jX2xvZ19hZ2YoY3VyLT5iY190cCwgY3VyLT5iY19wcml2YXRlLmEuYWdicCwgWEZTX0FHRl9MT05HRVNUKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyLmMgYi9mcy94ZnMveGZzX2F0dHIuYwppbmRleCBlOTUzYjZjZi4uYjljMTk2YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyLmMKKysrIGIvZnMveGZzL3hmc19hdHRyLmMKQEAgLTkzLDEyICs5MywxMiBAQAogU1RBVElDIGludAogeGZzX2F0dHJfbmFtZV90b194bmFtZSgKIAlzdHJ1Y3QgeGZzX25hbWUJKnhuYW1lLAotCWNvbnN0IGNoYXIJKmFuYW1lKQorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFuYW1lKQogewogCWlmICghYW5hbWUpCiAJCXJldHVybiBFSU5WQUw7CiAJeG5hbWUtPm5hbWUgPSBhbmFtZTsKLQl4bmFtZS0+bGVuID0gc3RybGVuKGFuYW1lKTsKKwl4bmFtZS0+bGVuID0gc3RybGVuKChjaGFyICopYW5hbWUpOwogCWlmICh4bmFtZS0+bGVuID49IE1BWE5BTUVMRU4pCiAJCXJldHVybiBFRkFVTFQ7CQkvKiBtYXRjaCBJUklYIGJlaGF2aW91ciAqLwogCkBAIC0xMjQsNyArMTI0LDcgQEAKIHhmc19hdHRyX2dldF9pbnQoCiAJc3RydWN0IHhmc19pbm9kZQkqaXAsCiAJc3RydWN0IHhmc19uYW1lCQkqbmFtZSwKLQljaGFyCQkJKnZhbHVlLAorCXVuc2lnbmVkIGNoYXIJCSp2YWx1ZSwKIAlpbnQJCQkqdmFsdWVsZW5wLAogCWludAkJCWZsYWdzKQogewpAQCAtMTcxLDggKzE3MSw4IEBACiBpbnQKIHhmc19hdHRyX2dldCgKIAl4ZnNfaW5vZGVfdAkqaXAsCi0JY29uc3QgY2hhcgkqbmFtZSwKLQljaGFyCQkqdmFsdWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwl1bnNpZ25lZCBjaGFyCSp2YWx1ZSwKIAlpbnQJCSp2YWx1ZWxlbnAsCiAJaW50CQlmbGFncykKIHsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogLyoKICAqIENhbGN1bGF0ZSBob3cgbWFueSBibG9ja3Mgd2UgbmVlZCBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUsCiAgKi8KLWludAorU1RBVElDIGludAogeGZzX2F0dHJfY2FsY19zaXplKAogCXN0cnVjdCB4ZnNfaW5vZGUgCSppcCwKIAlpbnQJCQluYW1lbGVuLApAQCAtMjM1LDggKzIzNSwxMiBAQAogfQogCiBTVEFUSUMgaW50Ci14ZnNfYXR0cl9zZXRfaW50KHhmc19pbm9kZV90ICpkcCwgc3RydWN0IHhmc19uYW1lICpuYW1lLAotCQljaGFyICp2YWx1ZSwgaW50IHZhbHVlbGVuLCBpbnQgZmxhZ3MpCit4ZnNfYXR0cl9zZXRfaW50KAorCXN0cnVjdCB4ZnNfaW5vZGUgKmRwLAorCXN0cnVjdCB4ZnNfbmFtZQkqbmFtZSwKKwl1bnNpZ25lZCBjaGFyCSp2YWx1ZSwKKwlpbnQJCXZhbHVlbGVuLAorCWludAkJZmxhZ3MpCiB7CiAJeGZzX2RhX2FyZ3NfdAlhcmdzOwogCXhmc19mc2Jsb2NrX3QJZmlyc3RibG9jazsKQEAgLTQ1Miw4ICs0NTYsOCBAQAogaW50CiB4ZnNfYXR0cl9zZXQoCiAJeGZzX2lub2RlX3QJKmRwLAotCWNvbnN0IGNoYXIJKm5hbWUsCi0JY2hhcgkJKnZhbHVlLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJdW5zaWduZWQgY2hhcgkqdmFsdWUsCiAJaW50CQl2YWx1ZWxlbiwKIAlpbnQJCWZsYWdzKQogewpAQCAtNjAwLDcgKzYwNCw3IEBACiBpbnQKIHhmc19hdHRyX3JlbW92ZSgKIAl4ZnNfaW5vZGVfdAkqZHAsCi0JY29uc3QgY2hhcgkqbmFtZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAogCWludAkJZmxhZ3MpCiB7CiAJaW50CQllcnJvcjsKQEAgLTY2OSw5ICs2NzMsMTMgQEAKICAqLwogLypBUkdTVVNFRCovCiBTVEFUSUMgaW50Ci14ZnNfYXR0cl9wdXRfbGlzdGVudCh4ZnNfYXR0cl9saXN0X2NvbnRleHRfdCAqY29udGV4dCwgaW50IGZsYWdzLAotCQkgICAgIGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkgICAgIGludCB2YWx1ZWxlbiwgY2hhciAqdmFsdWUpCit4ZnNfYXR0cl9wdXRfbGlzdGVudCgKKwl4ZnNfYXR0cl9saXN0X2NvbnRleHRfdCAqY29udGV4dCwKKwlpbnQJCWZsYWdzLAorCXVuc2lnbmVkIGNoYXIJKm5hbWUsCisJaW50CQluYW1lbGVuLAorCWludAkJdmFsdWVsZW4sCisJdW5zaWduZWQgY2hhcgkqdmFsdWUpCiB7CiAJc3RydWN0IGF0dHJsaXN0ICphbGlzdCA9IChzdHJ1Y3QgYXR0cmxpc3QgKiljb250ZXh0LT5hbGlzdDsKIAlhdHRybGlzdF9lbnRfdCAqYWVwOwpAQCAtMTk4MCw3ICsxOTg4LDcgQEAKIAl4ZnNfYm1idF9pcmVjX3QgbWFwW0FUVFJfUk1UVkFMVUVfTUFQU0laRV07CiAJeGZzX21vdW50X3QgKm1wOwogCXhmc19kYWRkcl90IGRibGtubzsKLQl4ZnNfY2FkZHJfdCBkc3Q7CisJdm9pZCAqZHN0OwogCXhmc19idWZfdCAqYnA7CiAJaW50IG5tYXAsIGVycm9yLCB0bXAsIHZhbHVlbGVuLCBibGtjbnQsIGk7CiAJeGZzX2RhYmxrX3QgbGJsa25vOwpAQCAtMjAwNywxNSArMjAxNSwxNCBAQAogCQkJZGJsa25vID0gWEZTX0ZTQl9UT19EQUREUihtcCwgbWFwW2ldLmJyX3N0YXJ0YmxvY2spOwogCQkJYmxrY250ID0gWEZTX0ZTQl9UT19CQihtcCwgbWFwW2ldLmJyX2Jsb2NrY291bnQpOwogCQkJZXJyb3IgPSB4ZnNfcmVhZF9idWYobXAsIG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywKLQkJCQkJICAgICBibGtjbnQsCi0JCQkJCSAgICAgWEZTX0JVRl9MT0NLIHwgWEJGX0RPTlRfQkxPQ0ssCisJCQkJCSAgICAgYmxrY250LCBYQkZfTE9DSyB8IFhCRl9ET05UX0JMT0NLLAogCQkJCQkgICAgICZicCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJcmV0dXJuKGVycm9yKTsKIAogCQkJdG1wID0gKHZhbHVlbGVuIDwgWEZTX0JVRl9TSVpFKGJwKSkKIAkJCQk/IHZhbHVlbGVuIDogWEZTX0JVRl9TSVpFKGJwKTsKLQkJCXhmc19iaW9tb3ZlKGJwLCAwLCB0bXAsIGRzdCwgWEZTX0JfUkVBRCk7CisJCQl4ZnNfYmlvbW92ZShicCwgMCwgdG1wLCBkc3QsIFhCRl9SRUFEKTsKIAkJCXhmc19idWZfcmVsc2UoYnApOwogCQkJZHN0ICs9IHRtcDsKIAkJCXZhbHVlbGVuIC09IHRtcDsKQEAgLTIwMzksNyArMjA0Niw3IEBACiAJeGZzX2lub2RlX3QgKmRwOwogCXhmc19ibWJ0X2lyZWNfdCBtYXA7CiAJeGZzX2RhZGRyX3QgZGJsa25vOwotCXhmc19jYWRkcl90IHNyYzsKKwl2b2lkICpzcmM7CiAJeGZzX2J1Zl90ICpicDsKIAl4ZnNfZGFibGtfdCBsYmxrbm87CiAJaW50IGJsa2NudCwgdmFsdWVsZW4sIG5tYXAsIGVycm9yLCB0bXAsIGNvbW1pdHRlZDsKQEAgLTIxNDEsMTMgKzIxNDgsMTMgQEAKIAkJYmxrY250ID0gWEZTX0ZTQl9UT19CQihtcCwgbWFwLmJyX2Jsb2NrY291bnQpOwogCiAJCWJwID0geGZzX2J1Zl9nZXQobXAtPm1fZGRldl90YXJncCwgZGJsa25vLCBibGtjbnQsCi0JCQkJIFhGU19CVUZfTE9DSyB8IFhCRl9ET05UX0JMT0NLKTsKKwkJCQkgWEJGX0xPQ0sgfCBYQkZfRE9OVF9CTE9DSyk7CiAJCUFTU0VSVChicCk7CiAJCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUihicCkpOwogCiAJCXRtcCA9ICh2YWx1ZWxlbiA8IFhGU19CVUZfU0laRShicCkpID8gdmFsdWVsZW4gOgogCQkJCQkJCVhGU19CVUZfU0laRShicCk7Ci0JCXhmc19iaW9tb3ZlKGJwLCAwLCB0bXAsIHNyYywgWEZTX0JfV1JJVEUpOworCQl4ZnNfYmlvbW92ZShicCwgMCwgdG1wLCBzcmMsIFhCRl9XUklURSk7CiAJCWlmICh0bXAgPCBYRlNfQlVGX1NJWkUoYnApKQogCQkJeGZzX2Jpb3plcm8oYnAsIHRtcCwgWEZTX0JVRl9TSVpFKGJwKSAtIHRtcCk7CiAJCWlmICgoZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCkpKSB7LyogR1JPVDogTk9URTogc3luY2hyb25vdXMgd3JpdGUgKi8KQEAgLTIyMDgsOCArMjIxNSw3IEBACiAJCS8qCiAJCSAqIElmIHRoZSAicmVtb3RlIiB2YWx1ZSBpcyBpbiB0aGUgY2FjaGUsIHJlbW92ZSBpdC4KIAkJICovCi0JCWJwID0geGZzX2luY29yZShtcC0+bV9kZGV2X3RhcmdwLCBkYmxrbm8sIGJsa2NudCwKLQkJCQlYRlNfSU5DT1JFX1RSWUxPQ0spOworCQlicCA9IHhmc19pbmNvcmUobXAtPm1fZGRldl90YXJncCwgZGJsa25vLCBibGtjbnQsIFhCRl9UUllMT0NLKTsKIAkJaWYgKGJwKSB7CiAJCQlYRlNfQlVGX1NUQUxFKGJwKTsKIAkJCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0ci5oIGIvZnMveGZzL3hmc19hdHRyLmgKaW5kZXggNTliNDEwYy4uZTkyMGQ2OCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyLmgKKysrIGIvZnMveGZzL3hmc19hdHRyLmgKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAKIHR5cGVkZWYgaW50ICgqcHV0X2xpc3RlbnRfZnVuY190KShzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICosIGludCwKLQkJCQkgICAgICBjaGFyICosIGludCwgaW50LCBjaGFyICopOworCQkJICAgICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqKTsKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0IHsKIAlzdHJ1Y3QgeGZzX2lub2RlCQkqZHA7CQkvKiBpbm9kZSAqLwpAQCAtMTM5LDcgKzEzOSw2IEBACiAvKgogICogT3ZlcmFsbCBleHRlcm5hbCBpbnRlcmZhY2Ugcm91dGluZXMuCiAgKi8KLWludCB4ZnNfYXR0cl9jYWxjX3NpemUoc3RydWN0IHhmc19pbm9kZSAqLCBpbnQsIGludCwgaW50ICopOwogaW50IHhmc19hdHRyX2luYWN0aXZlKHN0cnVjdCB4ZnNfaW5vZGUgKmRwKTsKIGludCB4ZnNfYXR0cl9ybXR2YWxfZ2V0KHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncyk7CiBpbnQgeGZzX2F0dHJfbGlzdF9pbnQoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCmluZGV4IGJhZjQxYjUuLmE5MGNlNzQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwpAQCAtNTIxLDExICs1MjEsMTEgQEAKIAogCXNmZSA9ICZzZi0+bGlzdFswXTsKIAlmb3IgKGkgPSAwOyBpIDwgc2YtPmhkci5jb3VudDsgaSsrKSB7Ci0JCW5hcmdzLm5hbWUgPSAoY2hhciAqKXNmZS0+bmFtZXZhbDsKKwkJbmFyZ3MubmFtZSA9IHNmZS0+bmFtZXZhbDsKIAkJbmFyZ3MubmFtZWxlbiA9IHNmZS0+bmFtZWxlbjsKLQkJbmFyZ3MudmFsdWUgPSAoY2hhciAqKSZzZmUtPm5hbWV2YWxbbmFyZ3MubmFtZWxlbl07CisJCW5hcmdzLnZhbHVlID0gJnNmZS0+bmFtZXZhbFtuYXJncy5uYW1lbGVuXTsKIAkJbmFyZ3MudmFsdWVsZW4gPSBzZmUtPnZhbHVlbGVuOwotCQluYXJncy5oYXNodmFsID0geGZzX2RhX2hhc2huYW1lKChjaGFyICopc2ZlLT5uYW1ldmFsLAorCQluYXJncy5oYXNodmFsID0geGZzX2RhX2hhc2huYW1lKHNmZS0+bmFtZXZhbCwKIAkJCQkJCXNmZS0+bmFtZWxlbik7CiAJCW5hcmdzLmZsYWdzID0gWEZTX0FUVFJfTlNQX09ORElTS19UT19BUkdTKHNmZS0+ZmxhZ3MpOwogCQllcnJvciA9IHhmc19hdHRyX2xlYWZfbG9va3VwX2ludChicCwgJm5hcmdzKTsgLyogc2V0IGEtPmluZGV4ICovCkBAIC02MTIsMTAgKzYxMiwxMCBAQAogCQlmb3IgKGkgPSAwLCBzZmUgPSAmc2YtPmxpc3RbMF07IGkgPCBzZi0+aGRyLmNvdW50OyBpKyspIHsKIAkJCWVycm9yID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKIAkJCQkJICAgc2ZlLT5mbGFncywKLQkJCQkJICAgKGNoYXIgKilzZmUtPm5hbWV2YWwsCisJCQkJCSAgIHNmZS0+bmFtZXZhbCwKIAkJCQkJICAgKGludClzZmUtPm5hbWVsZW4sCiAJCQkJCSAgIChpbnQpc2ZlLT52YWx1ZWxlbiwKLQkJCQkJICAgKGNoYXIqKSZzZmUtPm5hbWV2YWxbc2ZlLT5uYW1lbGVuXSk7CisJCQkJCSAgICZzZmUtPm5hbWV2YWxbc2ZlLT5uYW1lbGVuXSk7CiAKIAkJCS8qCiAJCQkgKiBFaXRoZXIgc2VhcmNoIGNhbGxiYWNrIGZpbmlzaGVkIGVhcmx5IG9yCkBAIC02NTksOCArNjU5LDggQEAKIAkJfQogCiAJCXNicC0+ZW50bm8gPSBpOwotCQlzYnAtPmhhc2ggPSB4ZnNfZGFfaGFzaG5hbWUoKGNoYXIgKilzZmUtPm5hbWV2YWwsIHNmZS0+bmFtZWxlbik7Ci0JCXNicC0+bmFtZSA9IChjaGFyICopc2ZlLT5uYW1ldmFsOworCQlzYnAtPmhhc2ggPSB4ZnNfZGFfaGFzaG5hbWUoc2ZlLT5uYW1ldmFsLCBzZmUtPm5hbWVsZW4pOworCQlzYnAtPm5hbWUgPSBzZmUtPm5hbWV2YWw7CiAJCXNicC0+bmFtZWxlbiA9IHNmZS0+bmFtZWxlbjsKIAkJLyogVGhlc2UgYXJlIGJ5dGVzLCBhbmQgYm90aCBvbi1kaXNrLCBkb24ndCBlbmRpYW4tZmxpcCAqLwogCQlzYnAtPnZhbHVlbGVuID0gc2ZlLT52YWx1ZWxlbjsKQEAgLTgxOCw5ICs4MTgsOSBAQAogCQkJY29udGludWU7CiAJCUFTU0VSVChlbnRyeS0+ZmxhZ3MgJiBYRlNfQVRUUl9MT0NBTCk7CiAJCW5hbWVfbG9jID0geGZzX2F0dHJfbGVhZl9uYW1lX2xvY2FsKGxlYWYsIGkpOwotCQluYXJncy5uYW1lID0gKGNoYXIgKiluYW1lX2xvYy0+bmFtZXZhbDsKKwkJbmFyZ3MubmFtZSA9IG5hbWVfbG9jLT5uYW1ldmFsOwogCQluYXJncy5uYW1lbGVuID0gbmFtZV9sb2MtPm5hbWVsZW47Ci0JCW5hcmdzLnZhbHVlID0gKGNoYXIgKikmbmFtZV9sb2MtPm5hbWV2YWxbbmFyZ3MubmFtZWxlbl07CisJCW5hcmdzLnZhbHVlID0gJm5hbWVfbG9jLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOwogCQluYXJncy52YWx1ZWxlbiA9IGJlMTZfdG9fY3B1KG5hbWVfbG9jLT52YWx1ZWxlbik7CiAJCW5hcmdzLmhhc2h2YWwgPSBiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCk7CiAJCW5hcmdzLmZsYWdzID0gWEZTX0FUVFJfTlNQX09ORElTS19UT19BUkdTKGVudHJ5LT5mbGFncyk7CkBAIC0yMzcwLDEwICsyMzcwLDEwIEBACiAKIAkJCXJldHZhbCA9IGNvbnRleHQtPnB1dF9saXN0ZW50KGNvbnRleHQsCiAJCQkJCQllbnRyeS0+ZmxhZ3MsCi0JCQkJCQkoY2hhciAqKW5hbWVfbG9jLT5uYW1ldmFsLAorCQkJCQkJbmFtZV9sb2MtPm5hbWV2YWwsCiAJCQkJCQkoaW50KW5hbWVfbG9jLT5uYW1lbGVuLAogCQkJCQkJYmUxNl90b19jcHUobmFtZV9sb2MtPnZhbHVlbGVuKSwKLQkJCQkJCShjaGFyICopJm5hbWVfbG9jLT5uYW1ldmFsW25hbWVfbG9jLT5uYW1lbGVuXSk7CisJCQkJCQkmbmFtZV9sb2MtPm5hbWV2YWxbbmFtZV9sb2MtPm5hbWVsZW5dKTsKIAkJCWlmIChyZXR2YWwpCiAJCQkJcmV0dXJuIHJldHZhbDsKIAkJfSBlbHNlIHsKQEAgLTIzOTcsMTUgKzIzOTcsMTUgQEAKIAkJCQkJcmV0dXJuIHJldHZhbDsKIAkJCQlyZXR2YWwgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAogCQkJCQkJZW50cnktPmZsYWdzLAotCQkJCQkJKGNoYXIgKiluYW1lX3JtdC0+bmFtZSwKKwkJCQkJCW5hbWVfcm10LT5uYW1lLAogCQkJCQkJKGludCluYW1lX3JtdC0+bmFtZWxlbiwKIAkJCQkJCXZhbHVlbGVuLAotCQkJCQkJKGNoYXIqKWFyZ3MudmFsdWUpOworCQkJCQkJYXJncy52YWx1ZSk7CiAJCQkJa21lbV9mcmVlKGFyZ3MudmFsdWUpOwogCQkJfSBlbHNlIHsKIAkJCQlyZXR2YWwgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAogCQkJCQkJZW50cnktPmZsYWdzLAotCQkJCQkJKGNoYXIgKiluYW1lX3JtdC0+bmFtZSwKKwkJCQkJCW5hbWVfcm10LT5uYW1lLAogCQkJCQkJKGludCluYW1lX3JtdC0+bmFtZWxlbiwKIAkJCQkJCXZhbHVlbGVuLAogCQkJCQkJTlVMTCk7CkBAIC0yOTUwLDcgKzI5NTAsNyBAQAogCQkJCQkJbWFwLmJyX2Jsb2NrY291bnQpOwogCQkJYnAgPSB4ZnNfdHJhbnNfZ2V0X2J1ZigqdHJhbnMsCiAJCQkJCWRwLT5pX21vdW50LT5tX2RkZXZfdGFyZ3AsCi0JCQkJCWRibGtubywgZGJsa2NudCwgWEZTX0JVRl9MT0NLKTsKKwkJCQkJZGJsa25vLCBkYmxrY250LCBYQkZfTE9DSyk7CiAJCQl4ZnNfdHJhbnNfYmludmFsKCp0cmFucywgYnApOwogCQkJLyoKIAkJCSAqIFJvbGwgdG8gbmV4dCB0cmFuc2FjdGlvbi4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9zZi5oIGIvZnMveGZzL3hmc19hdHRyX3NmLmgKaW5kZXggNzZhYjdiMC4uOTE5NzU2ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyX3NmLmgKKysrIGIvZnMveGZzL3hmc19hdHRyX3NmLmgKQEAgLTUyLDcgKzUyLDcgQEAKIAlfX3VpbnQ4X3QJdmFsdWVsZW47CS8qIGxlbmd0aCBvZiB2YWx1ZSAqLwogCV9fdWludDhfdAlmbGFnczsJCS8qIGZsYWdzIGJpdHMgKHNlZSB4ZnNfYXR0cl9sZWFmLmgpICovCiAJeGZzX2RhaGFzaF90CWhhc2g7CQkvKiB0aGlzIGVudHJ5J3MgaGFzaCB2YWx1ZSAqLwotCWNoYXIJCSpuYW1lOwkJLyogbmFtZSB2YWx1ZSwgcG9pbnRlciBpbnRvIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIJKm5hbWU7CQkvKiBuYW1lIHZhbHVlLCBwb2ludGVyIGludG8gYnVmZmVyICovCiB9IHhmc19hdHRyX3NmX3NvcnRfdDsKIAogI2RlZmluZSBYRlNfQVRUUl9TRl9FTlRTSVpFX0JZTkFNRShubGVuLHZsZW4pCS8qIHNwYWNlIG5hbWUvdmFsdWUgdXNlcyAqLyBcCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IDk4MjUxY2QuLjE4NjlmYjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC0yNjI5LDEzICsyNjI5LDEyIEBACiAJCWlmIChzdGFydGFnID09IE5VTExBR05VTUJFUikKIAkJCXN0YXJ0YWcgPSBhZyA9IDA7CiAJCW5vdGluaXQgPSAwOwotCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKIAkJd2hpbGUgKGJsZW4gPCBhcC0+YWxlbikgewotCQkJcGFnID0gJm1wLT5tX3BlcmFnW2FnXTsKIAkJCWlmICghcGFnLT5wYWdmX2luaXQgJiYKIAkJCSAgICAoZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBhcmdzLnRwLAogCQkJCSAgICBhZywgWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSykpKSB7Ci0JCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQkJcmV0dXJuIGVycm9yOwogCQkJfQogCQkJLyoKQEAgLTI2NjcsMTMgKzI2NjYsMTMgQEAKIAkJCQkJCWJyZWFrOwogCiAJCQkJCWVycm9yID0geGZzX2ZpbGVzdHJlYW1fbmV3X2FnKGFwLCAmYWcpOwotCQkJCQlpZiAoZXJyb3IpIHsKLQkJCQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCQkJCXhmc19wZXJhZ19wdXQocGFnKTsKKwkJCQkJaWYgKGVycm9yKQogCQkJCQkJcmV0dXJuIGVycm9yOwotCQkJCQl9CiAKIAkJCQkJLyogbG9vcCBhZ2FpbiB0byBzZXQgJ2JsZW4nKi8KIAkJCQkJc3RhcnRhZyA9IE5VTExBR05VTUJFUjsKKwkJCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQl9CkBAIC0yNjgxLDggKzI2ODAsMTAgQEAKIAkJCQlhZyA9IDA7CiAJCQlpZiAoYWcgPT0gc3RhcnRhZykKIAkJCQlicmVhazsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKKwkJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKIAkJfQotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCS8qCiAJCSAqIFNpbmNlIHRoZSBhYm92ZSBsb29wIGRpZCBhIEJVRl9UUllMT0NLLCBpdCBpcwogCQkgKiBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIHNwYWNlIGZvciB0aGlzIHJlcXVlc3QuCkBAIC00NDcwLDcgKzQ0NzEsNyBAQAogCXhmc19mc2Jsb2NrX3QJYWJubzsJCS8qIGFsbG9jYXRlZCBibG9jayBudW1iZXIgKi8KIAl4ZnNfZXh0bGVuX3QJYWxlbjsJCS8qIGFsbG9jYXRlZCBleHRlbnQgbGVuZ3RoICovCiAJeGZzX2ZpbGVvZmZfdAlhb2ZmOwkJLyogYWxsb2NhdGVkIGZpbGUgb2Zmc2V0ICovCi0JeGZzX2JtYWxsb2NhX3QJYm1hOwkJLyogYXJncyBmb3IgeGZzX2JtYXBfYWxsb2MgKi8KKwl4ZnNfYm1hbGxvY2FfdAlibWEgPSB7IDAgfTsJLyogYXJncyBmb3IgeGZzX2JtYXBfYWxsb2MgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJKmN1cjsJCS8qIGJtYXAgYnRyZWUgY3Vyc29yICovCiAJeGZzX2ZpbGVvZmZfdAllbmQ7CQkvKiBlbmQgb2YgbWFwcGVkIGZpbGUgcmVnaW9uICovCiAJaW50CQllb2Y7CQkvKiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiBleHRlbnRzICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCmluZGV4IDM4NzUxZDUuLjQxNmU0N2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIC8qCiAgKiBTZXQgYWxsIHRoZSBmaWVsZHMgaW4gYSBibWFwIGV4dGVudCByZWNvcmQgZnJvbSB0aGUgdW5jb21wcmVzc2VkIGZvcm0uCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfYm1idF9kaXNrX3NldF9hbGwoCiAJeGZzX2JtYnRfcmVjX3QJKnIsCiAJeGZzX2JtYnRfaXJlY190ICpzKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmggYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaAppbmRleCBjZjA3Y2E3Li4wZTY2YzRlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaApAQCAtMjIzLDcgKzIyMyw2IEBACiBleHRlcm4gdm9pZCB4ZnNfYm1idF9zZXRfc3RhcnRvZmYoeGZzX2JtYnRfcmVjX2hvc3RfdCAqciwgeGZzX2ZpbGVvZmZfdCB2KTsKIGV4dGVybiB2b2lkIHhmc19ibWJ0X3NldF9zdGF0ZSh4ZnNfYm1idF9yZWNfaG9zdF90ICpyLCB4ZnNfZXhudHN0X3Qgdik7CiAKLWV4dGVybiB2b2lkIHhmc19ibWJ0X2Rpc2tfc2V0X2FsbCh4ZnNfYm1idF9yZWNfdCAqciwgeGZzX2JtYnRfaXJlY190ICpzKTsKIGV4dGVybiB2b2lkIHhmc19ibWJ0X2Rpc2tfc2V0X2FsbGYoeGZzX2JtYnRfcmVjX3QgKnIsIHhmc19maWxlb2ZmX3QgbywKIAkJCXhmc19mc2Jsb2NrX3QgYiwgeGZzX2ZpbGJsa3NfdCBjLCB4ZnNfZXhudHN0X3Qgdik7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfYnRyZWUuYwppbmRleCAzNmEwOTkyLi45NmJlNGIwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19idHJlZS5jCkBAIC05NzcsNyArOTc3LDcgQEAKIAl4ZnNfZGFkZHJfdAkJZDsKIAogCS8qIG5lZWQgdG8gc29ydCBvdXQgaG93IGNhbGxlcnMgZGVhbCB3aXRoIGZhaWx1cmVzIGZpcnN0ICovCi0JQVNTRVJUKCEoZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spKTsKKwlBU1NFUlQoIShmbGFncyAmIFhCRl9UUllMT0NLKSk7CiAKIAlkID0geGZzX2J0cmVlX3B0cl90b19kYWRkcihjdXIsIHB0cik7CiAJKmJwcCA9IHhmc190cmFuc19nZXRfYnVmKGN1ci0+YmNfdHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGQsCkBAIC0xMDA4LDcgKzEwMDgsNyBAQAogCWludAkJCWVycm9yOwogCiAJLyogbmVlZCB0byBzb3J0IG91dCBob3cgY2FsbGVycyBkZWFsIHdpdGggZmFpbHVyZXMgZmlyc3QgKi8KLQlBU1NFUlQoIShmbGFncyAmIFhGU19CVUZfVFJZTE9DSykpOworCUFTU0VSVCghKGZsYWdzICYgWEJGX1RSWUxPQ0spKTsKIAogCWQgPSB4ZnNfYnRyZWVfcHRyX3RvX2RhZGRyKGN1ciwgcHRyKTsKIAllcnJvciA9IHhmc190cmFuc19yZWFkX2J1ZihtcCwgY3VyLT5iY190cCwgbXAtPm1fZGRldl90YXJncCwgZCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCBhMzBmN2U5Li5mM2M0OWU2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJICAgICAgICgoYmlwLT5ibGlfZm9ybWF0LmJsZl9tYXBfc2l6ZSAtIDEpICogc2l6ZW9mKHVpbnQpKSk7CiAJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZiaXAtPmJsaV9mb3JtYXQ7CiAJdmVjcC0+aV9sZW4gPSBiYXNlX3NpemU7Ci0JWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9CRk9STUFUKTsKKwl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0JGT1JNQVQ7CiAJdmVjcCsrOwogCW52ZWNzID0gMTsKIApAQCAtMjk3LDE0ICsyOTcsMTQgQEAKIAkJCWJ1ZmZlcl9vZmZzZXQgPSBmaXJzdF9iaXQgKiBYRlNfQkxJX0NIVU5LOwogCQkJdmVjcC0+aV9hZGRyID0geGZzX2J1Zl9vZmZzZXQoYnAsIGJ1ZmZlcl9vZmZzZXQpOwogCQkJdmVjcC0+aV9sZW4gPSBuYml0cyAqIFhGU19CTElfQ0hVTks7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0JDSFVOSyk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0JDSFVOSzsKIAkJCW52ZWNzKys7CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmIChuZXh0X2JpdCAhPSBsYXN0X2JpdCArIDEpIHsKIAkJCWJ1ZmZlcl9vZmZzZXQgPSBmaXJzdF9iaXQgKiBYRlNfQkxJX0NIVU5LOwogCQkJdmVjcC0+aV9hZGRyID0geGZzX2J1Zl9vZmZzZXQoYnAsIGJ1ZmZlcl9vZmZzZXQpOwogCQkJdmVjcC0+aV9sZW4gPSBuYml0cyAqIFhGU19CTElfQ0hVTks7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0JDSFVOSyk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0JDSFVOSzsKIAkJCW52ZWNzKys7CiAJCQl2ZWNwKys7CiAJCQlmaXJzdF9iaXQgPSBuZXh0X2JpdDsKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkJYnVmZmVyX29mZnNldCA9IGZpcnN0X2JpdCAqIFhGU19CTElfQ0hVTks7CiAJCQl2ZWNwLT5pX2FkZHIgPSB4ZnNfYnVmX29mZnNldChicCwgYnVmZmVyX29mZnNldCk7CiAJCQl2ZWNwLT5pX2xlbiA9IG5iaXRzICogWEZTX0JMSV9DSFVOSzsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfQkNIVU5LKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQkNIVU5LOwogLyogWW91IHdvdWxkIHRoaW5rIHdlIG5lZWQgdG8gYnVtcCB0aGUgbnZlY3MgaGVyZSB0b28sIGJ1dCB3ZSBkbyBub3QKICAqIHRoaXMgbnVtYmVyIGlzIHVzZWQgYnkgcmVjb3ZlcnksIGFuZCBpdCBnZXRzIGNvbmZ1c2VkIGJ5IHRoZSBib3VuZGFyeQogICogc3BsaXQgaGVyZQpAQCAtNDY3LDggKzQ2NywxMCBAQAogLyoKICAqIFRoaXMgaXMgY2FsbGVkIHRvIGF0dGVtcHQgdG8gbG9jayB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzCiAgKiBidWYgbG9nIGl0ZW0uICBEb24ndCBzbGVlcCBvbiB0aGUgYnVmZmVyIGxvY2suICBJZiB3ZSBjYW4ndCBnZXQKLSAqIHRoZSBsb2NrIHJpZ2h0IGF3YXksIHJldHVybiAwLiAgSWYgd2UgY2FuIGdldCB0aGUgbG9jaywgcHVsbCB0aGUKLSAqIGJ1ZmZlciBmcm9tIHRoZSBmcmVlIGxpc3QsIG1hcmsgaXQgYnVzeSwgYW5kIHJldHVybiAxLgorICogdGhlIGxvY2sgcmlnaHQgYXdheSwgcmV0dXJuIDAuICBJZiB3ZSBjYW4gZ2V0IHRoZSBsb2NrLCB0YWtlIGEKKyAqIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyLiBJZiB0aGlzIGlzIGEgZGVsYXllZCB3cml0ZSBidWZmZXIgdGhhdAorICogbmVlZHMgQUlMIGhlbHAgdG8gYmUgd3JpdHRlbiBiYWNrLCBpbnZva2UgdGhlIHB1c2hidWYgcm91dGluZQorICogcmF0aGVyIHRoYW4gdGhlIG5vcm1hbCBzdWNjZXNzIHBhdGguCiAgKi8KIFNUQVRJQyB1aW50CiB4ZnNfYnVmX2l0ZW1fdHJ5bG9jaygKQEAgLTQ3NywyNCArNDc5LDE4IEBACiAJeGZzX2J1Zl90CSpicDsKIAogCWJwID0gYmlwLT5ibGlfYnVmOwotCi0JaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7CisJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKQogCQlyZXR1cm4gWEZTX0lURU1fUElOTkVEOwotCX0KLQotCWlmICghWEZTX0JVRl9DUFNFTUEoYnApKSB7CisJaWYgKCFYRlNfQlVGX0NQU0VNQShicCkpCiAJCXJldHVybiBYRlNfSVRFTV9MT0NLRUQ7Ci0JfQogCi0JLyoKLQkgKiBSZW1vdmUgdGhlIGJ1ZmZlciBmcm9tIHRoZSBmcmVlIGxpc3QuICBPbmx5IGRvIHRoaXMKLQkgKiBpZiBpdCdzIG9uIHRoZSBmcmVlIGxpc3QuICBQcml2YXRlIGJ1ZmZlcnMgbGlrZSB0aGUKLQkgKiBzdXBlcmJsb2NrIGJ1ZmZlciBhcmUgbm90LgotCSAqLworCS8qIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlci4gICovCiAJWEZTX0JVRl9IT0xEKGJwKTsKIAogCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwogCXRyYWNlX3hmc19idWZfaXRlbV90cnlsb2NrKGJpcCk7CisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKKwkJcmV0dXJuIFhGU19JVEVNX1BVU0hCVUY7CiAJcmV0dXJuIFhGU19JVEVNX1NVQ0NFU1M7CiB9CiAKQEAgLTYyNiwxMSArNjIyLDkgQEAKIH0KIAogLyoKLSAqIFRoaXMgaXMgY2FsbGVkIHRvIGFzeW5jaHJvbm91c2x5IHdyaXRlIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAqIGJ1ZiBsb2cgaXRlbSBvdXQgdG8gZGlzay4gVGhlIGJ1ZmZlciB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGxvY2tlZCBieQotICogYSBzdWNjZXNzZnVsIGNhbGwgdG8geGZzX2J1Zl9pdGVtX3RyeWxvY2soKS4gIElmIHRoZSBidWZmZXIgc3RpbGwgaGFzCi0gKiBCX0RFTFdSSSBzZXQsIHRoZW4gZ2V0IGl0IGdvaW5nIG91dCB0byBkaXNrIHdpdGggYSBjYWxsIHRvIGJhd3JpdGUoKS4KLSAqIElmIG5vdCwgdGhlbiBqdXN0IHJlbGVhc2UgdGhlIGJ1ZmZlci4KKyAqIFRoZSBidWZmZXIgaXMgbG9ja2VkLCBidXQgaXMgbm90IGEgZGVsYXllZCB3cml0ZSBidWZmZXIuIFRoaXMgaGFwcGVucworICogaWYgd2UgcmFjZSB3aXRoIElPIGNvbXBsZXRpb24gYW5kIGhlbmNlIHdlIGRvbid0IHdhbnQgdG8gdHJ5IHRvIHdyaXRlIGl0CisgKiBhZ2Fpbi4gSnVzdCByZWxlYXNlIHRoZSBidWZmZXIuCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfYnVmX2l0ZW1fcHVzaCgKQEAgLTY0MiwxNyArNjM2LDI5IEBACiAJdHJhY2VfeGZzX2J1Zl9pdGVtX3B1c2goYmlwKTsKIAogCWJwID0gYmlwLT5ibGlfYnVmOworCUFTU0VSVCghWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKK30KIAotCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpIHsKLQkJaW50CWVycm9yOwotCQllcnJvciA9IHhmc19iYXdyaXRlKGJpcC0+YmxpX2l0ZW0ubGlfbW91bnRwLCBicCk7Ci0JCWlmIChlcnJvcikKLQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGJpcC0+YmxpX2l0ZW0ubGlfbW91bnRwLAotCQkJInhmc19idWZfaXRlbV9wdXNoOiBwdXNoYnVmIGVycm9yICVkIG9uIGJpcCAlcCwgYnAgJXAiLAotCQkJCQllcnJvciwgYmlwLCBicCk7Ci0JfSBlbHNlIHsKLQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JfQorLyoKKyAqIFRoZSBidWZmZXIgaXMgbG9ja2VkIGFuZCBpcyBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyLiBQcm9tb3RlIHRoZSBidWZmZXIKKyAqIGluIHRoZSBkZWxheWVkIHdyaXRlIHF1ZXVlIGFzIHRoZSBjYWxsZXIga25vd3MgdGhhdCB0aGV5IG11c3QgaW52b2tlCisgKiB0aGUgeGZzYnVmZCB0byBnZXQgdGhpcyBidWZmZXIgd3JpdHRlbi4gV2UgaGF2ZSB0byB1bmxvY2sgdGhlIGJ1ZmZlcgorICogdG8gYWxsb3cgdGhlIHhmc2J1ZmQgdG8gd3JpdGUgaXQsIHRvby4KKyAqLworU1RBVElDIHZvaWQKK3hmc19idWZfaXRlbV9wdXNoYnVmKAorCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwKQoreworCXhmc19idWZfdAkqYnA7CisKKwlBU1NFUlQoIShiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpKTsKKwl0cmFjZV94ZnNfYnVmX2l0ZW1fcHVzaGJ1ZihiaXApOworCisJYnAgPSBiaXAtPmJsaV9idWY7CisJQVNTRVJUKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSk7CisJeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZShicCk7CisJeGZzX2J1Zl9yZWxzZShicCk7CiB9CiAKIC8qIEFSR1NVU0VEICovCkBAIC02NzcsNyArNjgzLDcgQEAKIAkuaW9wX2NvbW1pdHRlZAk9ICh4ZnNfbHNuX3QoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQogCQkJCQl4ZnNfYnVmX2l0ZW1fY29tbWl0dGVkLAogCS5pb3BfcHVzaAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2J1Zl9pdGVtX3B1c2gsCi0JLmlvcF9wdXNoYnVmCT0gTlVMTCwKKwkuaW9wX3B1c2hidWYJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19idWZfaXRlbV9wdXNoYnVmLAogCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX2J1Zl9pdGVtX2NvbW1pdHRpbmcKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKaW5kZXggYzBjODg2OS4uMGNhNTU2YiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwpAQCAtMTUzNCw4ICsxNTM0LDggQEAKIGVudW0geGZzX2RhY21wCiB4ZnNfZGFfY29tcG5hbWUoCiAJc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAotCWNvbnN0IGNoYXIgCSpuYW1lLAotCWludCAJCWxlbikKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCWludAkJbGVuKQogewogCXJldHVybiAoYXJncy0+bmFtZWxlbiA9PSBsZW4gJiYgbWVtY21wKGFyZ3MtPm5hbWUsIG5hbWUsIGxlbikgPT0gMCkgPwogCQkJCQlYRlNfQ01QX0VYQUNUIDogWEZTX0NNUF9ESUZGRVJFTlQ7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmggYi9mcy94ZnMveGZzX2RhX2J0cmVlLmgKaW5kZXggMzBjZDA4Zi4uZmU5ZjVhOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaApAQCAtMjA5LDcgKzIwOSw4IEBACiAgKi8KIHN0cnVjdCB4ZnNfbmFtZW9wcyB7CiAJeGZzX2RhaGFzaF90CSgqaGFzaG5hbWUpKHN0cnVjdCB4ZnNfbmFtZSAqKTsKLQllbnVtIHhmc19kYWNtcAkoKmNvbXBuYW1lKShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCWVudW0geGZzX2RhY21wCSgqY29tcG5hbWUpKHN0cnVjdCB4ZnNfZGFfYXJncyAqLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICosIGludCk7CiB9OwogCiAKQEAgLTI2MCw3ICsyNjEsNyBAQAogCiB1aW50IHhmc19kYV9oYXNobmFtZShjb25zdCBfX3VpbnQ4X3QgKm5hbWVfc3RyaW5nLCBpbnQgbmFtZV9sZW5ndGgpOwogZW51bSB4ZnNfZGFjbXAgeGZzX2RhX2NvbXBuYW1lKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQkJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKIAogCiB4ZnNfZGFfc3RhdGVfdCAqeGZzX2RhX3N0YXRlX2FsbG9jKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kZnJhZy5jIGIvZnMveGZzL3hmc19kZnJhZy5jCmluZGV4IDg0Y2ExY2YuLmNkMjdjOWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGZyYWcuYworKysgYi9mcy94ZnMveGZzX2RmcmFnLmMKQEAgLTQ1LDE1ICs0NSwyMSBAQAogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCisKK3N0YXRpYyBpbnQgeGZzX3N3YXBfZXh0ZW50cygKKwl4ZnNfaW5vZGVfdAkqaXAsCS8qIHRhcmdldCBpbm9kZSAqLworCXhmc19pbm9kZV90CSp0aXAsCS8qIHRtcCBpbm9kZSAqLworCXhmc19zd2FwZXh0X3QJKnN4cCk7CisKIC8qCi0gKiBTeXNzZ2kgaW50ZXJmYWNlIGZvciBzd2FwZXh0CisgKiBpb2N0bCBpbnRlcmZhY2UgZm9yIHN3YXBleHQKICAqLwogaW50CiB4ZnNfc3dhcGV4dCgKIAl4ZnNfc3dhcGV4dF90CSpzeHApCiB7CiAJeGZzX2lub2RlX3QgICAgICppcCwgKnRpcDsKLQlzdHJ1Y3QgZmlsZQkqZmlsZSwgKnRhcmdldF9maWxlOworCXN0cnVjdCBmaWxlCSpmaWxlLCAqdG1wX2ZpbGU7CiAJaW50CQllcnJvciA9IDA7CiAKIAkvKiBQdWxsIGluZm9ybWF0aW9uIGZvciB0aGUgdGFyZ2V0IGZkICovCkBAIC02OCw0NiArNzQsNDYgQEAKIAkJZ290byBvdXRfcHV0X2ZpbGU7CiAJfQogCi0JdGFyZ2V0X2ZpbGUgPSBmZ2V0KChpbnQpc3hwLT5zeF9mZHRtcCk7Ci0JaWYgKCF0YXJnZXRfZmlsZSkgeworCXRtcF9maWxlID0gZmdldCgoaW50KXN4cC0+c3hfZmR0bXApOworCWlmICghdG1wX2ZpbGUpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKIAkJZ290byBvdXRfcHV0X2ZpbGU7CiAJfQogCi0JaWYgKCEodGFyZ2V0X2ZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB8fAotCSAgICAodGFyZ2V0X2ZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkpIHsKKwlpZiAoISh0bXBfZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHx8CisJICAgICh0bXBfZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSkgewogCQllcnJvciA9IFhGU19FUlJPUihFQkFERik7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWlmIChJU19TV0FQRklMRShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSB8fAotCSAgICBJU19TV0FQRklMRSh0YXJnZXRfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpIHsKKwkgICAgSVNfU1dBUEZJTEUodG1wX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWlwID0gWEZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0JdGlwID0gWEZTX0kodGFyZ2V0X2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCXRpcCA9IFhGU19JKHRtcF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAogCWlmIChpcC0+aV9tb3VudCAhPSB0aXAtPmlfbW91bnQpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJaWYgKGlwLT5pX2lubyA9PSB0aXAtPmlfaW5vKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU8pOwotCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CisJCWdvdG8gb3V0X3B1dF90bXBfZmlsZTsKIAl9CiAKIAllcnJvciA9IHhmc19zd2FwX2V4dGVudHMoaXAsIHRpcCwgc3hwKTsKIAotIG91dF9wdXRfdGFyZ2V0X2ZpbGU6Ci0JZnB1dCh0YXJnZXRfZmlsZSk7Cisgb3V0X3B1dF90bXBfZmlsZToKKwlmcHV0KHRtcF9maWxlKTsKICBvdXRfcHV0X2ZpbGU6CiAJZnB1dChmaWxlKTsKICBvdXQ6CkBAIC0xODYsNyArMTkyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50CitzdGF0aWMgaW50CiB4ZnNfc3dhcF9leHRlbnRzKAogCXhmc19pbm9kZV90CSppcCwJLyogdGFyZ2V0IGlub2RlICovCiAJeGZzX2lub2RlX3QJKnRpcCwJLyogdG1wIGlub2RlICovCkBAIC0yNTQsNiArMjYwLDkgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAorCXRyYWNlX3hmc19zd2FwX2V4dGVudF9iZWZvcmUoaXAsIDApOworCXRyYWNlX3hmc19zd2FwX2V4dGVudF9iZWZvcmUodGlwLCAxKTsKKwogCS8qIGNoZWNrIGlub2RlIGZvcm1hdHMgbm93IHRoYXQgZGF0YSBpcyBmbHVzaGVkICovCiAJZXJyb3IgPSB4ZnNfc3dhcF9leHRlbnRzX2NoZWNrX2Zvcm1hdChpcCwgdGlwKTsKIAlpZiAoZXJyb3IpIHsKQEAgLTQyMSw2ICs0MzAsOCBAQAogCiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfU1dBUEVYVCk7CiAKKwl0cmFjZV94ZnNfc3dhcF9leHRlbnRfYWZ0ZXIoaXAsIDApOworCXRyYWNlX3hmc19zd2FwX2V4dGVudF9hZnRlcih0aXAsIDEpOwogb3V0OgogCWttZW1fZnJlZSh0ZW1waWZwKTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RmcmFnLmggYi9mcy94ZnMveGZzX2RmcmFnLmgKaW5kZXggNGY1NWE2My4uMjBiZGQ5MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kZnJhZy5oCisrKyBiL2ZzL3hmcy94ZnNfZGZyYWcuaApAQCAtNDgsOSArNDgsNiBAQAogICovCiBpbnQJeGZzX3N3YXBleHQoc3RydWN0IHhmc19zd2FwZXh0ICpzeCk7CiAKLWludAl4ZnNfc3dhcF9leHRlbnRzKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBzdHJ1Y3QgeGZzX2lub2RlICp0aXAsCi0JCXN0cnVjdCB4ZnNfc3dhcGV4dCAqc3hwKTsKLQogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCS8qIF9fWEZTX0RGUkFHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyLmMgYi9mcy94ZnMveGZzX2RpcjIuYwppbmRleCA5MzYzNGE3Li40MjUyMGYwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjIuYworKysgYi9mcy94ZnMveGZzX2RpcjIuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCi1zdHJ1Y3QgeGZzX25hbWUgeGZzX25hbWVfZG90ZG90ID0geyIuLiIsIDJ9Oworc3RydWN0IHhmc19uYW1lIHhmc19uYW1lX2RvdGRvdCA9IHsgKHVuc2lnbmVkIGNoYXIgKikiLi4iLCAyfTsKIAogLyoKICAqIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgKGllLiBBLVopIHN1cHBvcnQgZm9yIGRpcmVjdG9yaWVzIHRoYXQgd2FzCkBAIC02Niw4ICs2Niw4IEBACiBTVEFUSUMgZW51bSB4ZnNfZGFjbXAKIHhmc19hc2NpaV9jaV9jb21wbmFtZSgKIAlzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCi0JY29uc3QgY2hhcgkqbmFtZSwKLQlpbnQgCQlsZW4pCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwlpbnQJCWxlbikKIHsKIAllbnVtIHhmc19kYWNtcAlyZXN1bHQ7CiAJaW50CQlpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiBpbnQKIHhmc19kaXJfY2lsb29rdXBfcmVzdWx0KAogCXN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQljb25zdCBjaGFyCSpuYW1lLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCiAJaW50CQlsZW4pCiB7CiAJaWYgKGFyZ3MtPmNtcHJlc3VsdCA9PSBYRlNfQ01QX0RJRkZFUkVOVCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMi5oIGIvZnMveGZzL3hmc19kaXIyLmgKaW5kZXggMWQ5ZWY5Ni4uNzRhM2IxMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyLmgKKysrIGIvZnMveGZzL3hmc19kaXIyLmgKQEAgLTEwMCw3ICsxMDAsNyBAQAogZXh0ZXJuIGludCB4ZnNfZGlyMl9zaHJpbmtfaW5vZGUoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLCB4ZnNfZGlyMl9kYl90IGRiLAogCQkJCXN0cnVjdCB4ZnNfZGFidWYgKmJwKTsKIAotZXh0ZXJuIGludCB4ZnNfZGlyX2NpbG9va3VwX3Jlc3VsdChzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJaW50IGxlbik7CitleHRlcm4gaW50IHhmc19kaXJfY2lsb29rdXBfcmVzdWx0KHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKIAogI2VuZGlmCS8qIF9fWEZTX0RJUjJfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfYmxvY2suYyBiL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCmluZGV4IGRkYzRlY2MuLjc3OWEyNjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCkBAIC01Nyw4ICs1Nyw4IEBACiB2b2lkCiB4ZnNfZGlyX3N0YXJ0dXAodm9pZCkKIHsKLQl4ZnNfZGlyX2hhc2hfZG90ID0geGZzX2RhX2hhc2huYW1lKCIuIiwgMSk7Ci0JeGZzX2Rpcl9oYXNoX2RvdGRvdCA9IHhmc19kYV9oYXNobmFtZSgiLi4iLCAyKTsKKwl4ZnNfZGlyX2hhc2hfZG90ID0geGZzX2RhX2hhc2huYW1lKCh1bnNpZ25lZCBjaGFyICopIi4iLCAxKTsKKwl4ZnNfZGlyX2hhc2hfZG90ZG90ID0geGZzX2RhX2hhc2huYW1lKCh1bnNpZ25lZCBjaGFyICopIi4uIiwgMik7CiB9CiAKIC8qCkBAIC01MTMsOCArNTEzLDkgQEAKIAkJLyoKIAkJICogSWYgaXQgZGlkbid0IGZpdCwgc2V0IHRoZSBmaW5hbCBvZmZzZXQgdG8gaGVyZSAmIHJldHVybi4KIAkJICovCi0JCWlmIChmaWxsZGlyKGRpcmVudCwgZGVwLT5uYW1lLCBkZXAtPm5hbWVsZW4sIGNvb2sgJiAweDdmZmZmZmZmLAotCQkJICAgIGJlNjRfdG9fY3B1KGRlcC0+aW51bWJlciksIERUX1VOS05PV04pKSB7CisJCWlmIChmaWxsZGlyKGRpcmVudCwgKGNoYXIgKilkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwKKwkJCSAgICBjb29rICYgMHg3ZmZmZmZmZiwgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwKKwkJCSAgICBEVF9VTktOT1dOKSkgewogCQkJKm9mZnNldCA9IGNvb2sgJiAweDdmZmZmZmZmOwogCQkJeGZzX2RhX2JyZWxzZShOVUxMLCBicCk7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCmluZGV4IDI5ZjQ4NGMuLmUyZDg5ODUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwpAQCAtMTA4MSw3ICsxMDgxLDcgQEAKIAkJZGVwID0gKHhmc19kaXIyX2RhdGFfZW50cnlfdCAqKXB0cjsKIAkJbGVuZ3RoID0geGZzX2RpcjJfZGF0YV9lbnRzaXplKGRlcC0+bmFtZWxlbik7CiAKLQkJaWYgKGZpbGxkaXIoZGlyZW50LCBkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAoY2hhciAqKWRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLAogCQkJICAgIHhmc19kaXIyX2J5dGVfdG9fZGF0YXB0cihtcCwgY3Vyb2ZmKSAmIDB4N2ZmZmZmZmYsCiAJCQkgICAgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwgRFRfVU5LTk9XTikpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCmluZGV4IGNlNmUzNTUuLjc4ZmM0ZDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwpAQCAtNjUsNyArNjUsNyBAQAogLyoKICAqIExvZyBlbnRyaWVzIGZyb20gYSBmcmVlc3BhY2UgYmxvY2suCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfZGlyMl9mcmVlX2xvZ19iZXN0cygKIAl4ZnNfdHJhbnNfdAkJKnRwLAkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCXhmc19kYWJ1Zl90CQkqYnAsCQkvKiBmcmVlc3BhY2UgYnVmZmVyICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5oIGIvZnMveGZzL3hmc19kaXIyX25vZGUuaAppbmRleCBkZGU3MmRiLi44MmRmZTcxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmgKQEAgLTc1LDggKzc1LDYgQEAKIAlyZXR1cm4gKChkYikgJSBYRlNfRElSMl9NQVhfRlJFRV9CRVNUUyhtcCkpOwogfQogCi1leHRlcm4gdm9pZCB4ZnNfZGlyMl9mcmVlX2xvZ19iZXN0cyhzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgc3RydWN0IHhmc19kYWJ1ZiAqYnAsCi0JCQkJICAgIGludCBmaXJzdCwgaW50IGxhc3QpOwogZXh0ZXJuIGludCB4ZnNfZGlyMl9sZWFmX3RvX25vZGUoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAogCQkJCSBzdHJ1Y3QgeGZzX2RhYnVmICpsYnApOwogZXh0ZXJuIHhmc19kYWhhc2hfdCB4ZnNfZGlyMl9sZWFmbl9sYXN0aGFzaChzdHJ1Y3QgeGZzX2RhYnVmICpicCwgaW50ICpjb3VudCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfc2YuYyBiL2ZzL3hmcy94ZnNfZGlyMl9zZi5jCmluZGV4IDlkNGYxN2EuLmMxYTU5NDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9zZi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9zZi5jCkBAIC03ODIsNyArNzgyLDcgQEAKIAkJfQogCiAJCWlubyA9IHhmc19kaXIyX3NmX2dldF9pbnVtYmVyKHNmcCwgeGZzX2RpcjJfc2ZfaW51bWJlcnAoc2ZlcCkpOwotCQlpZiAoZmlsbGRpcihkaXJlbnQsIHNmZXAtPm5hbWUsIHNmZXAtPm5hbWVsZW4sCisJCWlmIChmaWxsZGlyKGRpcmVudCwgKGNoYXIgKilzZmVwLT5uYW1lLCBzZmVwLT5uYW1lbGVuLAogCQkJICAgIG9mZiAmIDB4N2ZmZmZmZmYsIGlubywgRFRfVU5LTk9XTikpIHsKIAkJCSpvZmZzZXQgPSBvZmYgJiAweDdmZmZmZmZmOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwppbmRleCAwNWE0YmRkLi42ZjM1ZWQxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAogCWxvZ192ZWN0b3ItPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmKGVmaXAtPmVmaV9mb3JtYXQpOwogCWxvZ192ZWN0b3ItPmlfbGVuID0gc2l6ZTsKLQlYTE9HX1ZFQ19TRVRfVFlQRShsb2dfdmVjdG9yLCBYTE9HX1JFR19UWVBFX0VGSV9GT1JNQVQpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfRUZJX0ZPUk1BVDsKIAlBU1NFUlQoc2l6ZSA+PSBzaXplb2YoeGZzX2VmaV9sb2dfZm9ybWF0X3QpKTsKIH0KIApAQCAtNDA2LDcgKzQwNiw3IEBACiAKIAlsb2dfdmVjdG9yLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJihlZmRwLT5lZmRfZm9ybWF0KTsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemU7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9nX3ZlY3RvciwgWExPR19SRUdfVFlQRV9FRkRfRk9STUFUKTsKKwlsb2dfdmVjdG9yLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0VGRF9GT1JNQVQ7CiAJQVNTRVJUKHNpemUgPj0gc2l6ZW9mKHhmc19lZmRfbG9nX2Zvcm1hdF90KSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jIGIvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKaW5kZXggYTYzMWUxNC4uMzkwODUwZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKKysrIGIvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKQEAgLTE0MCw2ICsxNDAsNyBAQAogCWludAkJZmxhZ3MsCiAJeGZzX2V4dGxlbl90CW1pbmxlbikKIHsKKwlpbnQJCXN0cmVhbXMsIG1heF9zdHJlYW1zOwogCWludAkJZXJyLCB0cnlsb2NrLCBuc2NhbjsKIAl4ZnNfZXh0bGVuX3QJbG9uZ2VzdCwgZnJlZSwgbWluZnJlZSwgbWF4ZnJlZSA9IDA7CiAJeGZzX2FnbnVtYmVyX3QJYWcsIG1heF9hZyA9IE5VTExBR05VTUJFUjsKQEAgLTE1NSwxNSArMTU2LDE1IEBACiAJdHJ5bG9jayA9IFhGU19BTExPQ19GTEFHX1RSWUxPQ0s7CiAKIAlmb3IgKG5zY2FuID0gMDsgMTsgbnNjYW4rKykgewotCi0JCVRSQUNFX0FHX1NDQU4obXAsIGFnLCB4ZnNfZmlsZXN0cmVhbV9wZWVrX2FnKG1wLCBhZykpOwotCi0JCXBhZyA9IG1wLT5tX3BlcmFnICsgYWc7CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKKwkJVFJBQ0VfQUdfU0NBTihtcCwgYWcsIGF0b21pY19yZWFkKCZwYWctPnBhZ2ZfZnN0cm1zKSk7CiAKIAkJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQkJZXJyID0geGZzX2FsbG9jX3BhZ2ZfaW5pdChtcCwgTlVMTCwgYWcsIHRyeWxvY2spOwotCQkJaWYgKGVyciAmJiAhdHJ5bG9jaykKKwkJCWlmIChlcnIgJiYgIXRyeWxvY2spIHsKKwkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQkJcmV0dXJuIGVycjsKKwkJCX0KIAkJfQogCiAJCS8qIE1pZ2h0IGZhaWwgc29tZXRpbWVzIGR1cmluZyB0aGUgMXN0IHBhc3Mgd2l0aCB0cnlsb2NrIHNldC4gKi8KQEAgLTE3Myw2ICsxNzQsNyBAQAogCQkvKiBLZWVwIHRyYWNrIG9mIHRoZSBBRyB3aXRoIHRoZSBtb3N0IGZyZWUgYmxvY2tzLiAqLwogCQlpZiAocGFnLT5wYWdmX2ZyZWVibGtzID4gbWF4ZnJlZSkgewogCQkJbWF4ZnJlZSA9IHBhZy0+cGFnZl9mcmVlYmxrczsKKwkJCW1heF9zdHJlYW1zID0gYXRvbWljX3JlYWQoJnBhZy0+cGFnZl9mc3RybXMpOwogCQkJbWF4X2FnID0gYWc7CiAJCX0KIApAQCAtMTk1LDYgKzE5Nyw4IEBACiAKIAkJCS8qIEJyZWFrIG91dCwgcmV0YWluaW5nIHRoZSByZWZlcmVuY2Ugb24gdGhlIEFHLiAqLwogCQkJZnJlZSA9IHBhZy0+cGFnZl9mcmVlYmxrczsKKwkJCXN0cmVhbXMgPSBhdG9taWNfcmVhZCgmcGFnLT5wYWdmX2ZzdHJtcyk7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQkqYWdwID0gYWc7CiAJCQlicmVhazsKIAkJfQpAQCAtMjAyLDYgKzIwNiw3IEBACiAJCS8qIERyb3AgdGhlIHJlZmVyZW5jZSBvbiB0aGlzIEFHLCBpdCdzIG5vdCB1c2FibGUuICovCiAJCXhmc19maWxlc3RyZWFtX3B1dF9hZyhtcCwgYWcpOwogbmV4dF9hZzoKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkvKiBNb3ZlIHRvIHRoZSBuZXh0IEFHLCB3cmFwcGluZyB0byBBRyAwIGlmIG5lY2Vzc2FyeS4gKi8KIAkJaWYgKCsrYWcgPj0gbXAtPm1fc2Iuc2JfYWdjb3VudCkKIAkJCWFnID0gMDsKQEAgLTIyOSw2ICsyMzQsNyBAQAogCQlpZiAobWF4X2FnICE9IE5VTExBR05VTUJFUikgewogCQkJeGZzX2ZpbGVzdHJlYW1fZ2V0X2FnKG1wLCBtYXhfYWcpOwogCQkJVFJBQ0VfQUdfUElDSzEobXAsIG1heF9hZywgbWF4ZnJlZSk7CisJCQlzdHJlYW1zID0gbWF4X3N0cmVhbXM7CiAJCQlmcmVlID0gbWF4ZnJlZTsKIAkJCSphZ3AgPSBtYXhfYWc7CiAJCQlicmVhazsKQEAgLTI0MCwxNiArMjQ2LDE0IEBACiAJCXJldHVybiAwOwogCX0KIAotCVRSQUNFX0FHX1BJQ0syKG1wLCBzdGFydGFnLCAqYWdwLCB4ZnNfZmlsZXN0cmVhbV9wZWVrX2FnKG1wLCAqYWdwKSwKLQkJCWZyZWUsIG5zY2FuLCBmbGFncyk7CisJVFJBQ0VfQUdfUElDSzIobXAsIHN0YXJ0YWcsICphZ3AsIHN0cmVhbXMsIGZyZWUsIG5zY2FuLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKICAqIFNldCB0aGUgYWxsb2NhdGlvbiBncm91cCBudW1iZXIgZm9yIGEgZmlsZSBvciBhIGRpcmVjdG9yeSwgdXBkYXRpbmcgaW5vZGUKLSAqIHJlZmVyZW5jZXMgYW5kIHBlci1BRyByZWZlcmVuY2VzIGFzIGFwcHJvcHJpYXRlLiAgTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUKLSAqIG1fcGVyYWdsb2NrIGhlbGQgaW4gcmVhZCBtb2RlLgorICogcmVmZXJlbmNlcyBhbmQgcGVyLUFHIHJlZmVyZW5jZXMgYXMgYXBwcm9wcmlhdGUuCiAgKi8KIHN0YXRpYyBpbnQKIF94ZnNfZmlsZXN0cmVhbV91cGRhdGVfYWcoCkBAIC00NTEsMjAgKzQ1NSw2IEBACiB9CiAKIC8qCi0gKiBJZiB0aGUgbW91bnQgcG9pbnQncyBtX3BlcmFnIGFycmF5IGlzIGdvaW5nIHRvIGJlIHJlYWxsb2NhdGVkLCBhbGwKLSAqIG91dHN0YW5kaW5nIGNhY2hlIGVudHJpZXMgbXVzdCBiZSBmbHVzaGVkIHRvIGF2b2lkIGFjY2Vzc2luZyByZWZlcmVuY2UgY291bnQKLSAqIGFkZHJlc3NlcyB0aGF0IGhhdmUgYmVlbiBmcmVlZC4gIFRoZSBjYWxsIHRvIHhmc19maWxlc3RyZWFtX2ZsdXNoKCkgbXVzdCBiZQotICogbWFkZSBpbnNpZGUgdGhlIGJsb2NrIHRoYXQgaG9sZHMgdGhlIG1fcGVyYWdsb2NrIGluIHdyaXRlIG1vZGUgdG8gZG8gdGhlCi0gKiByZWFsbG9jYXRpb24uCi0gKi8KLXZvaWQKLXhmc19maWxlc3RyZWFtX2ZsdXNoKAotCXhmc19tb3VudF90CSptcCkKLXsKLQl4ZnNfbXJ1X2NhY2hlX2ZsdXNoKG1wLT5tX2ZpbGVzdHJlYW0pOwotfQotCi0vKgogICogUmV0dXJuIHRoZSBBRyBvZiB0aGUgZmlsZXN0cmVhbSB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYmVsb25ncyB0bywgb3IKICAqIE5VTExBR05VTUJFUiBvdGhlcndpc2UuCiAgKi8KQEAgLTUyNiw3ICs1MTYsNiBAQAogCiAJbXAgPSBwaXAtPmlfbW91bnQ7CiAJY2FjaGUgPSBtcC0+bV9maWxlc3RyZWFtOwotCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAogCS8qCiAJICogV2UgaGF2ZSBhIHByb2JsZW0sIEhvdXN0b24uCkBAIC01NDMsMTAgKzUzMiw4IEBACiAJICoKIAkgKiBTbywgaWYgd2UgY2FuJ3QgZ2V0IHRoZSBpb2xvY2sgd2l0aG91dCBzbGVlcGluZyB0aGVuIGp1c3QgZ2l2ZSB1cAogCSAqLwotCWlmICgheGZzX2lsb2NrX25vd2FpdChwaXAsIFhGU19JT0xPQ0tfRVhDTCkpIHsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwlpZiAoIXhmc19pbG9ja19ub3dhaXQocGlwLCBYRlNfSU9MT0NLX0VYQ0wpKQogCQlyZXR1cm4gMTsKLQl9CiAKIAkvKiBJZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBpcyBhbHJlYWR5IGluIHRoZSBjYWNoZSwgdXNlIGl0cyBBRy4gKi8KIAlpdGVtID0geGZzX21ydV9jYWNoZV9sb29rdXAoY2FjaGUsIHBpcC0+aV9pbm8pOwpAQCAtNjAxLDcgKzU4OCw2IEBACiAKIGV4aXQ6CiAJeGZzX2l1bmxvY2socGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwotCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJcmV0dXJuIC1lcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5oIGIvZnMveGZzL3hmc19maWxlc3RyZWFtLmgKaW5kZXggNGFiYTY3Yy4uMjYwZjc1NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmgKKysrIGIvZnMveGZzL3hmc19maWxlc3RyZWFtLmgKQEAgLTc5LDEyICs3OSwyMSBAQAogICogdGhlIGNhY2hlIHRoYXQgcmVmZXJlbmNlIHBlci1hZyBhcnJheSBlbGVtZW50cyB0aGF0IGhhdmUgc2luY2UgYmVlbgogICogcmVhbGxvY2F0ZWQuCiAgKi8KKy8qCisgKiB4ZnNfZmlsZXN0cmVhbV9wZWVrX2FnIGlzIG9ubHkgdXNlZCBpbiB0cmFjaW5nIGNvZGUKKyAqLwogc3RhdGljIGlubGluZSBpbnQKIHhmc19maWxlc3RyZWFtX3BlZWtfYWcoCiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19hZ251bWJlcl90CWFnbm8pCiB7Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdmX2ZzdHJtcyk7CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOworCWludAkJcmV0OworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJcmV0ID0gYXRvbWljX3JlYWQoJnBhZy0+cGFnZl9mc3RybXMpOworCXhmc19wZXJhZ19wdXQocGFnKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtOTIsNyArMTAxLDEzIEBACiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19hZ251bWJlcl90CWFnbm8pCiB7Ci0JcmV0dXJuIGF0b21pY19pbmNfcmV0dXJuKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdmX2ZzdHJtcyk7CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOworCWludAkJcmV0OworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJcmV0ID0gYXRvbWljX2luY19yZXR1cm4oJnBhZy0+cGFnZl9mc3RybXMpOworCXhmc19wZXJhZ19wdXQocGFnKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTAwLDcgKzExNSwxMyBAQAogCXhmc19tb3VudF90CSptcCwKIAl4ZnNfYWdudW1iZXJfdAlhZ25vKQogewotCXJldHVybiBhdG9taWNfZGVjX3JldHVybigmbXAtPm1fcGVyYWdbYWdub10ucGFnZl9mc3RybXMpOworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKKwlpbnQJCXJldDsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOworCXJldCA9IGF0b21pY19kZWNfcmV0dXJuKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJcmV0dXJuIHJldDsKIH0KIAogLyogYWxsb2NhdGlvbiBzZWxlY3Rpb24gZmxhZ3MgKi8KQEAgLTExNCw3ICsxMzUsNiBAQAogdm9pZCB4ZnNfZmlsZXN0cmVhbV91bmluaXQodm9pZCk7CiBpbnQgeGZzX2ZpbGVzdHJlYW1fbW91bnQoc3RydWN0IHhmc19tb3VudCAqbXApOwogdm9pZCB4ZnNfZmlsZXN0cmVhbV91bm1vdW50KHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKLXZvaWQgeGZzX2ZpbGVzdHJlYW1fZmx1c2goc3RydWN0IHhmc19tb3VudCAqbXApOwogeGZzX2FnbnVtYmVyX3QgeGZzX2ZpbGVzdHJlYW1fbG9va3VwX2FnKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIGludCB4ZnNfZmlsZXN0cmVhbV9hc3NvY2lhdGUoc3RydWN0IHhmc19pbm9kZSAqZGlwLCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiB2b2lkIHhmc19maWxlc3RyZWFtX2RlYXNzb2NpYXRlKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCBhMTM5MTlhLi4zN2E2ZjYyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC0xNjcsMjcgKzE2NywxNCBAQAogCX0KIAluZXcgPSBuYiAtIG1wLT5tX3NiLnNiX2RibG9ja3M7CiAJb2FnY291bnQgPSBtcC0+bV9zYi5zYl9hZ2NvdW50OworCisJLyogYWxsb2NhdGUgdGhlIG5ldyBwZXItYWcgc3RydWN0dXJlcyAqLwogCWlmIChuYWdjb3VudCA+IG9hZ2NvdW50KSB7Ci0JCXZvaWQgKm5ld19wZXJhZywgKm9sZF9wZXJhZzsKLQotCQl4ZnNfZmlsZXN0cmVhbV9mbHVzaChtcCk7Ci0KLQkJbmV3X3BlcmFnID0ga21lbV96YWxsb2Moc2l6ZW9mKHhmc19wZXJhZ190KSAqIG5hZ2NvdW50LAotCQkJCQlLTV9NQVlGQUlMKTsKLQkJaWYgKCFuZXdfcGVyYWcpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVOT01FTSk7Ci0KLQkJZG93bl93cml0ZSgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJbWVtY3B5KG5ld19wZXJhZywgbXAtPm1fcGVyYWcsIHNpemVvZih4ZnNfcGVyYWdfdCkgKiBvYWdjb3VudCk7Ci0JCW9sZF9wZXJhZyA9IG1wLT5tX3BlcmFnOwotCQltcC0+bV9wZXJhZyA9IG5ld19wZXJhZzsKLQotCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfMzJCSVRJTk9ERVM7Ci0JCW5hZ2ltYXggPSB4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhtcCwgbmFnY291bnQpOwotCQl1cF93cml0ZSgmbXAtPm1fcGVyYWdsb2NrKTsKLQotCQlrbWVtX2ZyZWUob2xkX3BlcmFnKTsKKwkJZXJyb3IgPSB4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhtcCwgbmFnY291bnQsICZuYWdpbWF4KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCX0KKwogCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfR1JPV0ZTKTsKIAl0cC0+dF9mbGFncyB8PSBYRlNfVFJBTlNfUkVTRVJWRTsKIAlpZiAoKGVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIFhGU19HUk9XRlNfU1BBQ0VfUkVTKG1wKSwKQEAgLTE5Niw2ICsxODMsMTEgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAorCS8qCisJICogV3JpdGUgbmV3IEFHIGhlYWRlcnMgdG8gZGlzay4gTm9uLXRyYW5zYWN0aW9uYWwsIGJ1dCB3cml0dGVuCisJICogc3luY2hyb25vdXNseSBzbyB0aGV5IGFyZSBjb21wbGV0ZWQgcHJpb3IgdG8gdGhlIGdyb3dmcyB0cmFuc2FjdGlvbgorCSAqIGJlaW5nIGxvZ2dlZC4KKwkgKi8KIAluZnJlZSA9IDA7CiAJZm9yIChhZ25vID0gbmFnY291bnQgLSAxOyBhZ25vID49IG9hZ2NvdW50OyBhZ25vLS0sIG5ldyAtPSBhZ3NpemUpIHsKIAkJLyoKQEAgLTM1OSw2ICszNTEsMTIgQEAKIAkJCWdvdG8gZXJyb3IwOwogCQl9CiAJfQorCisJLyoKKwkgKiBVcGRhdGUgY2hhbmdlZCBzdXBlcmJsb2NrIGZpZWxkcyB0cmFuc2FjdGlvbmFsbHkuIFRoZXNlIGFyZSBub3QKKwkgKiBzZWVuIGJ5IHRoZSByZXN0IG9mIHRoZSB3b3JsZCB1bnRpbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0IGFwcGxpZXMKKwkgKiB0aGVtIGF0b21pY2FsbHkgdG8gdGhlIHN1cGVyYmxvY2suCisJICovCiAJaWYgKG5hZ2NvdW50ID4gb2FnY291bnQpCiAJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9BR0NPVU5ULCBuYWdjb3VudCAtIG9hZ2NvdW50KTsKIAlpZiAobmIgPiBtcC0+bV9zYi5zYl9kYmxvY2tzKQpAQCAtMzY5LDkgKzM2Nyw5IEBACiAJaWYgKGRwY3QpCiAJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9JTUFYUENULCBkcGN0KTsKIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwotCWlmIChlcnJvcikgeworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCX0KKwogCS8qIE5ldyBhbGxvY2F0aW9uIGdyb3VwcyBmdWxseSBpbml0aWFsaXplZCwgc28gdXBkYXRlIG1vdW50IHN0cnVjdCAqLwogCWlmIChuYWdpbWF4KQogCQltcC0+bV9tYXhhZ2kgPSBuYWdpbWF4OwpAQCAtMzgxLDYgKzM3OSw4IEBACiAJCW1wLT5tX21heGljb3VudCA9IGljb3VudCA8PCBtcC0+bV9zYi5zYl9pbm9wYmxvZzsKIAl9IGVsc2UKIAkJbXAtPm1fbWF4aWNvdW50ID0gMDsKKworCS8qIHVwZGF0ZSBzZWNvbmRhcnkgc3VwZXJibG9ja3MuICovCiAJZm9yIChhZ25vID0gMTsgYWdubyA8IG5hZ2NvdW50OyBhZ25vKyspIHsKIAkJZXJyb3IgPSB4ZnNfcmVhZF9idWYobXAsIG1wLT5tX2RkZXZfdGFyZ3AsCiAJCQkJICBYRlNfQUdCX1RPX0RBRERSKG1wLCBhZ25vLCBYRlNfU0JfQkxPQ0sobXApKSwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IGNiOTA3YmEuLjlkODg0YzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJCWQgPSBYRlNfQUdCX1RPX0RBRERSKG1wLCBhZ25vLCBhZ2JubyArIChqICogYmxrc19wZXJfY2x1c3RlcikpOwogCQlmYnVmID0geGZzX3RyYW5zX2dldF9idWYodHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGQsCiAJCQkJCSBtcC0+bV9ic2l6ZSAqIGJsa3NfcGVyX2NsdXN0ZXIsCi0JCQkJCSBYRlNfQlVGX0xPQ0spOworCQkJCQkgWEJGX0xPQ0spOwogCQlBU1NFUlQoZmJ1Zik7CiAJCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUihmYnVmKSk7CiAKQEAgLTI1Myw2ICsyNTMsNyBAQAogCXhmc19hZ2lub190CXRoaXNpbm87CS8qIGN1cnJlbnQgaW5vZGUgbnVtYmVyLCBmb3IgbG9vcCAqLwogCWludAkJaXNhbGlnbmVkID0gMDsJLyogaW5vZGUgYWxsb2NhdGlvbiBhdCBzdHJpcGUgdW5pdCAqLwogCQkJCQkvKiBib3VuZGFyeSAqLworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAogCWFyZ3MudHAgPSB0cDsKIAlhcmdzLm1wID0gdHAtPnRfbW91bnRwOwpAQCAtMzgyLDkgKzM4Myw5IEBACiAJbmV3aW5vID0gWEZTX09GRkJOT19UT19BR0lOTyhhcmdzLm1wLCBhcmdzLmFnYm5vLCAwKTsKIAliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2NvdW50LCBuZXdsZW4pOwogCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfZnJlZWNvdW50LCBuZXdsZW4pOwotCWRvd25fcmVhZCgmYXJncy5tcC0+bV9wZXJhZ2xvY2spOwotCWFyZ3MubXAtPm1fcGVyYWdbYWdub10ucGFnaV9mcmVlY291bnQgKz0gbmV3bGVuOwotCXVwX3JlYWQoJmFyZ3MubXAtPm1fcGVyYWdsb2NrKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KGFyZ3MubXAsIGFnbm8pOworCXBhZy0+cGFnaV9mcmVlY291bnQgKz0gbmV3bGVuOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAlhZ2ktPmFnaV9uZXdpbm8gPSBjcHVfdG9fYmUzMihuZXdpbm8pOwogCiAJLyoKQEAgLTQ4Niw5ICs0ODcsOCBAQAogCSAqLwogCWFnbm8gPSBwYWdubzsKIAlmbGFncyA9IFhGU19BTExPQ19GTEFHX1RSWUxPQ0s7Ci0JZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCWZvciAoOzspIHsKLQkJcGFnID0gJm1wLT5tX3BlcmFnW2Fnbm9dOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKIAkJaWYgKCFwYWctPnBhZ2lfaW5pdCkgewogCQkJaWYgKHhmc19pYWxsb2NfcmVhZF9hZ2kobXAsIHRwLCBhZ25vLCAmYWdicCkpIHsKIAkJCQlhZ2JwID0gTlVMTDsKQEAgLTUyNyw3ICs1MjcsNyBAQAogCQkJCQlhZ2JwID0gTlVMTDsKIAkJCQkJZ290byBuZXh0YWc7CiAJCQkJfQotCQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJCXJldHVybiBhZ2JwOwogCQkJfQogCQl9CkBAIC01MzUsMjIgKzUzNSwxOSBAQAogCQlpZiAoYWdicCkKIAkJCXhmc190cmFuc19icmVsc2UodHAsIGFnYnApOwogbmV4dGFnOgorCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCS8qCiAJCSAqIE5vIHBvaW50IGluIGl0ZXJhdGluZyBvdmVyIHRoZSByZXN0LCBpZiB3ZSdyZSBzaHV0dGluZwogCQkgKiBkb3duLgogCQkgKi8KLQkJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKSB7Ci0JCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCiAJCQlyZXR1cm4gTlVMTDsKLQkJfQogCQlhZ25vKys7CiAJCWlmIChhZ25vID49IGFnY291bnQpCiAJCQlhZ25vID0gMDsKIAkJaWYgKGFnbm8gPT0gcGFnbm8pIHsKLQkJCWlmIChmbGFncyA9PSAwKSB7Ci0JCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJCWlmIChmbGFncyA9PSAwKQogCQkJCXJldHVybiBOVUxMOwotCQkJfQogCQkJZmxhZ3MgPSAwOwogCQl9CiAJfQpAQCAtNjcyLDYgKzY2OSw3IEBACiAJeGZzX2FnbnVtYmVyX3QJdGFnbm87CQkvKiB0ZXN0aW5nIGFsbG9jYXRpb24gZ3JvdXAgbnVtYmVyICovCiAJeGZzX2J0cmVlX2N1cl90CSp0Y3VyOwkJLyogdGVtcCBjdXJzb3IgKi8KIAl4ZnNfaW5vYnRfcmVjX2luY29yZV90IHRyZWM7CS8qIHRlbXAgaW5vZGUgYWxsb2NhdGlvbiByZWNvcmQgKi8KKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKIAogCWlmICgqSU9fYWdicCA9PSBOVUxMKSB7CkBAIC03NzEsMTMgKzc2OSwxMyBAQAogCQkJKmlub3AgPSBOVUxMRlNJTk87CiAJCQlyZXR1cm4gbm9yb29tID8gRU5PU1BDIDogMDsKIAkJfQotCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7Ci0JCWlmIChtcC0+bV9wZXJhZ1t0YWdub10ucGFnaV9pbm9kZW9rID09IDApIHsKLQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIHRhZ25vKTsKKwkJaWYgKHBhZy0+cGFnaV9pbm9kZW9rID09IDApIHsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCWdvdG8gbmV4dGFnOwogCQl9CiAJCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIHRhZ25vLCAmYWdicCk7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBuZXh0YWc7CiAJCWFnaSA9IFhGU19CVUZfVE9fQUdJKGFnYnApOwpAQCAtNzkwLDYgKzc4OCw3IEBACiAJICovCiAJYWdubyA9IHRhZ25vOwogCSpJT19hZ2JwID0gTlVMTDsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKIAogIHJlc3RhcnRfcGFnbm86CiAJY3VyID0geGZzX2lub2J0X2luaXRfY3Vyc29yKG1wLCB0cCwgYWdicCwgYmUzMl90b19jcHUoYWdpLT5hZ2lfc2Vxbm8pKTsKQEAgLTgwOCw3ICs4MDcsNiBAQAogCSAqIElmIGluIHRoZSBzYW1lIEFHIGFzIHRoZSBwYXJlbnQsIHRyeSB0byBnZXQgbmVhciB0aGUgcGFyZW50LgogCSAqLwogCWlmIChwYWdubyA9PSBhZ25vKSB7Ci0JCXhmc19wZXJhZ190CSpwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CiAJCWludAkJZG9uZWxlZnQ7CS8qIGRvbmUsIHRvIHRoZSBsZWZ0ICovCiAJCWludAkJZG9uZXJpZ2h0OwkvKiBkb25lLCB0byB0aGUgcmlnaHQgKi8KIAkJaW50CQlzZWFyY2hkaXN0YW5jZSA9IDEwOwpAQCAtMTAwNiw5ICsxMDA0LDcgQEAKIAkJZ290byBlcnJvcjA7CiAJYmUzMl9hZGRfY3B1KCZhZ2ktPmFnaV9mcmVlY291bnQsIC0xKTsKIAl4ZnNfaWFsbG9jX2xvZ19hZ2kodHAsIGFnYnAsIFhGU19BR0lfRlJFRUNPVU5UKTsKLQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7Ci0JbXAtPm1fcGVyYWdbdGFnbm9dLnBhZ2lfZnJlZWNvdW50LS07Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwlwYWctPnBhZ2lfZnJlZWNvdW50LS07CiAKIAllcnJvciA9IHhmc19jaGVja19hZ2lfZnJlZWNvdW50KGN1ciwgYWdpKTsKIAlpZiAoZXJyb3IpCkBAIC0xMDE2LDEyICsxMDEyLDE0IEBACiAKIAl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUZSRUUsIC0xKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJKmlub3AgPSBpbm87CiAJcmV0dXJuIDA7CiBlcnJvcjE6CiAJeGZzX2J0cmVlX2RlbF9jdXJzb3IodGN1ciwgWEZTX0JUUkVFX0VSUk9SKTsKIGVycm9yMDoKIAl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjdXIsIFhGU19CVFJFRV9FUlJPUik7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTA1Miw2ICsxMDUwLDcgQEAKIAl4ZnNfbW91bnRfdAkqbXA7CS8qIG1vdW50IHN0cnVjdHVyZSBmb3IgZmlsZXN5c3RlbSAqLwogCWludAkJb2ZmOwkvKiBvZmZzZXQgb2YgaW5vZGUgaW4gaW5vZGUgY2h1bmsgKi8KIAl4ZnNfaW5vYnRfcmVjX2luY29yZV90IHJlYzsJLyogYnRyZWUgcmVjb3JkICovCisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCiAJbXAgPSB0cC0+dF9tb3VudHA7CiAKQEAgLTEwODgsOSArMTA4Nyw3IEBACiAJLyoKIAkgKiBHZXQgdGhlIGFsbG9jYXRpb24gZ3JvdXAgaGVhZGVyLgogCSAqLwotCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAllcnJvciA9IHhmc19pYWxsb2NfcmVhZF9hZ2kobXAsIHRwLCBhZ25vLCAmYWdicCk7Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAlpZiAoZXJyb3IpIHsKIAkJY21uX2VycihDRV9XQVJOLAogCQkJInhmc19kaWZyZWU6IHhmc19pYWxsb2NfcmVhZF9hZ2koKSByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLApAQCAtMTE1Nyw5ICsxMTU0LDkgQEAKIAkJYmUzMl9hZGRfY3B1KCZhZ2ktPmFnaV9jb3VudCwgLWlsZW4pOwogCQliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2ZyZWVjb3VudCwgLShpbGVuIC0gMSkpOwogCQl4ZnNfaWFsbG9jX2xvZ19hZ2kodHAsIGFnYnAsIFhGU19BR0lfQ09VTlQgfCBYRlNfQUdJX0ZSRUVDT1VOVCk7Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJbXAtPm1fcGVyYWdbYWdub10ucGFnaV9mcmVlY291bnQgLT0gaWxlbiAtIDE7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOworCQlwYWctPnBhZ2lfZnJlZWNvdW50IC09IGlsZW4gLSAxOworCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9JQ09VTlQsIC1pbGVuKTsKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lGUkVFLCAtKGlsZW4gLSAxKSk7CiAKQEAgLTExODgsOSArMTE4NSw5IEBACiAJCSAqLwogCQliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2ZyZWVjb3VudCwgMSk7CiAJCXhmc19pYWxsb2NfbG9nX2FnaSh0cCwgYWdicCwgWEZTX0FHSV9GUkVFQ09VTlQpOwotCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7Ci0JCW1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2lfZnJlZWNvdW50Kys7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOworCQlwYWctPnBhZ2lfZnJlZWNvdW50Kys7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lGUkVFLCAxKTsKIAl9CiAKQEAgLTEzMTIsOSArMTMwOSw3IEBACiAJCXhmc19idWZfdAkqYWdicDsJLyogYWdpIGJ1ZmZlciAqLwogCQlpbnQJCWk7CS8qIHRlbXAgc3RhdGUgKi8KIAotCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIGFnbm8sICZhZ2JwKTsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJaWYgKGVycm9yKSB7CiAJCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsICJ4ZnNfaW1hcDogIgogCQkJCQkieGZzX2lhbGxvY19yZWFkX2FnaSgpIHJldHVybmVkICIKQEAgLTEzNzksNyArMTM3NCw2IEBACiAJCQlYRlNfRlNCX1RPX0JCKG1wLCBtcC0+bV9zYi5zYl9kYmxvY2tzKSk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUyMyw4ICsxNTE3LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJYWdpID0gWEZTX0JVRl9UT19BR0koKmJwcCk7Ci0JcGFnID0gJm1wLT5tX3BlcmFnW2Fnbm9dOwotCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CiAJaWYgKCFwYWctPnBhZ2lfaW5pdCkgewogCQlwYWctPnBhZ2lfZnJlZWNvdW50ID0gYmUzMl90b19jcHUoYWdpLT5hZ2lfZnJlZWNvdW50KTsKIAkJcGFnLT5wYWdpX2NvdW50ID0gYmUzMl90b19jcHUoYWdpLT5hZ2lfY291bnQpOwpAQCAtMTUzNyw2ICsxNTMwLDcgQEAKIAkgKi8KIAlBU1NFUlQocGFnLT5wYWdpX2ZyZWVjb3VudCA9PSBiZTMyX3RvX2NwdShhZ2ktPmFnaV9mcmVlY291bnQpIHx8CiAJCVhGU19GT1JDRURfU0hVVERPV04obXApKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWdldC5jIGIvZnMveGZzL3hmc19pZ2V0LmMKaW5kZXggMTU1ZTc5OC4uZTI4MWViNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pZ2V0LmMKKysrIGIvZnMveGZzL3hmc19pZ2V0LmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCQlyZXR1cm4gRUlOVkFMOwogCiAJLyogZ2V0IHRoZSBwZXJhZyBzdHJ1Y3R1cmUgYW5kIGVuc3VyZSB0aGF0IGl0J3MgaW5vZGUgY2FwYWJsZSAqLwotCXBhZyA9IHhmc19nZXRfcGVyYWcobXAsIGlubyk7CisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgWEZTX0lOT19UT19BR05PKG1wLCBpbm8pKTsKIAlpZiAoIXBhZy0+cGFnaV9pbm9kZW9rKQogCQlyZXR1cm4gRUlOVkFMOwogCUFTU0VSVChwYWctPnBhZ19pY2lfaW5pdCk7CkBAIC0zOTgsNyArMzk4LDcgQEAKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfZXJyb3Jfb3JfYWdhaW47CiAJfQotCXhmc19wdXRfcGVyYWcobXAsIHBhZyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCiAJKmlwcCA9IGlwOwogCkBAIC00MTcsNyArNDE3LDcgQEAKIAkJZGVsYXkoMSk7CiAJCWdvdG8gYWdhaW47CiAJfQotCXhmc19wdXRfcGVyYWcobXAsIHBhZyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNDg4LDEyICs0ODgsMTIgQEAKIAkgKiBhZGRlZCB0byB0aGUgdHJlZSBhc3NlcnQgdGhhdCBpdCdzIGJlZW4gdGhlcmUgYmVmb3JlIHRvIGNhdGNoCiAJICogcHJvYmxlbXMgd2l0aCB0aGUgaW5vZGUgbGlmZSB0aW1lIGVhcmx5IG9uLgogCSAqLwotCXBhZyA9IHhmc19nZXRfcGVyYWcobXAsIGlwLT5pX2lubyk7CisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgWEZTX0lOT19UT19BR05PKG1wLCBpcC0+aV9pbm8pKTsKIAl3cml0ZV9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJaWYgKCFyYWRpeF90cmVlX2RlbGV0ZSgmcGFnLT5wYWdfaWNpX3Jvb3QsIGFnaW5vKSkKIAkJQVNTRVJUKDApOwogCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwotCXhmc19wdXRfcGVyYWcobXAsIHBhZyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCiAJLyoKIAkgKiBIZXJlIHdlIGRvIGFuIChhbG1vc3QpIHNwdXJpb3VzIGlub2RlIGxvY2sgaW4gb3JkZXIgdG8gY29vcmRpbmF0ZQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5jIGIvZnMveGZzL3hmc19pbm9kZS5jCmluZGV4IGVmNzdmZDguLmZhMzEzNjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQkJCSJhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLAogCQkJCWVycm9yLCBtcC0+bV9mc25hbWUpOwogCQl9IGVsc2UgewotCQkJQVNTRVJUKGJ1Zl9mbGFncyAmIFhGU19CVUZfVFJZTE9DSyk7CisJCQlBU1NFUlQoYnVmX2ZsYWdzICYgWEJGX1RSWUxPQ0spOwogCQl9CiAJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0yMzksNyArMjM5LDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0geGZzX2ltYXBfdG9fYnAobXAsIHRwLCAmaW1hcCwgJmJwLCBYRlNfQlVGX0xPQ0ssIGltYXBfZmxhZ3MpOworCWVycm9yID0geGZzX2ltYXBfdG9fYnAobXAsIHRwLCAmaW1hcCwgJmJwLCBYQkZfTE9DSywgaW1hcF9mbGFncyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTI4NSw3ICsyODUsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoIWJwKSB7Ci0JCUFTU0VSVChidWZfZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spOworCQlBU1NFUlQoYnVmX2ZsYWdzICYgWEJGX1RSWUxPQ0spOwogCQlBU1NFUlQodHAgPT0gTlVMTCk7CiAJCSpicHAgPSBOVUxMOwogCQlyZXR1cm4gRUFHQUlOOwpAQCAtODA3LDcgKzgwNyw3IEBACiAJICogR2V0IHBvaW50ZXJzIHRvIHRoZSBvbi1kaXNrIGlub2RlIGFuZCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgaXQuCiAJICovCiAJZXJyb3IgPSB4ZnNfaW1hcF90b19icChtcCwgdHAsICZpcC0+aV9pbWFwLCAmYnAsCi0JCQkgICAgICAgWEZTX0JVRl9MT0NLLCBpZ2V0X2ZsYWdzKTsKKwkJCSAgICAgICBYQkZfTE9DSywgaWdldF9mbGFncyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZGlwID0gKHhmc19kaW5vZGVfdCAqKXhmc19idWZfb2Zmc2V0KGJwLCBpcC0+aV9pbWFwLmltX2JvZmZzZXQpOwpAQCAtMTc1MSw3ICsxNzUxLDcgQEAKIAkJICogSGVyZSB3ZSBwdXQgdGhlIGhlYWQgcG9pbnRlciBpbnRvIG91ciBuZXh0IHBvaW50ZXIsCiAJCSAqIGFuZCB0aGVuIHdlIGZhbGwgdGhyb3VnaCB0byBwb2ludCB0aGUgaGVhZCBhdCB1cy4KIAkJICovCi0JCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIFhGU19CVUZfTE9DSyk7CisJCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIFhCRl9MT0NLKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCkBAIC0xODMzLDcgKzE4MzMsNyBAQAogCQkgKiBvZiBkZWFsaW5nIHdpdGggdGhlIGJ1ZmZlciB3aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8KIAkJICogY2hhbmdlIGl0LgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCQlpZiAoZXJyb3IpIHsKIAkJCWNtbl9lcnIoQ0VfV0FSTiwKIAkJCQkieGZzX2l1bmxpbmtfcmVtb3ZlOiB4ZnNfaXRvYnAoKSAgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKQEAgLTE4OTUsNyArMTg5NSw3IEBACiAJCSAqIE5vdyBsYXN0X2licCBwb2ludHMgdG8gdGhlIGJ1ZmZlciBwcmV2aW91cyB0byB1cyBvbgogCQkgKiB0aGUgdW5saW5rZWQgbGlzdC4gIFB1bGwgdXMgZnJvbSB0aGUgbGlzdC4KIAkJICovCi0JCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIFhGU19CVUZfTE9DSyk7CisJCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIFhCRl9MT0NLKTsKIAkJaWYgKGVycm9yKSB7CiAJCQljbW5fZXJyKENFX1dBUk4sCiAJCQkJInhmc19pdW5saW5rX3JlbW92ZTogeGZzX2l0b2JwKCkgIHJldHVybmVkIGFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCkBAIC0xOTQ2LDggKzE5NDYsOSBAQAogCXhmc19pbm9kZV90CQkqaXAsICoqaXBfZm91bmQ7CiAJeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcDsKIAl4ZnNfbG9nX2l0ZW1fdAkJKmxpcDsKLQl4ZnNfcGVyYWdfdAkJKnBhZyA9IHhmc19nZXRfcGVyYWcobXAsIGludW0pOworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKIAorCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIFhGU19JTk9fVE9fQUdOTyhtcCwgaW51bSkpOwogCWlmIChtcC0+bV9zYi5zYl9ibG9ja3NpemUgPj0gWEZTX0lOT0RFX0NMVVNURVJfU0laRShtcCkpIHsKIAkJYmxrc19wZXJfY2x1c3RlciA9IDE7CiAJCW5pbm9kZXMgPSBtcC0+bV9zYi5zYl9pbm9wYmxvY2s7CkBAIC0yMDM5LDcgKzIwNDAsNyBAQAogCiAJCWJwID0geGZzX3RyYW5zX2dldF9idWYodHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGJsa25vLCAKIAkJCQkJbXAtPm1fYnNpemUgKiBibGtzX3Blcl9jbHVzdGVyLAotCQkJCQlYRlNfQlVGX0xPQ0spOworCQkJCQlYQkZfTE9DSyk7CiAKIAkJcHJlX2ZsdXNoZWQgPSAwOwogCQlsaXAgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2xvZ19pdGVtX3QgKik7CkBAIC0yMDg4LDcgKzIwODksNyBAQAogCX0KIAogCWttZW1fZnJlZShpcF9mb3VuZCk7Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIC8qCkBAIC0yMTUwLDcgKzIxNTEsNyBAQAogCiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwogCi0JZXJyb3IgPSB4ZnNfaXRvYnAoaXAtPmlfbW91bnQsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwllcnJvciA9IHhmc19pdG9icChpcC0+aV9tb3VudCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTI0ODMsMTMgKzI0ODQsMTYgQEAKIAkJcmV0dXJuOwogCiAJLyogR2l2ZSB0aGUgbG9nIGEgcHVzaCB0byBzdGFydCB0aGUgdW5waW5uaW5nIEkvTyAqLwotCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIChpaXAgJiYgaWlwLT5pbGlfbGFzdF9sc24pID8KLQkJCQlpaXAtPmlsaV9sYXN0X2xzbiA6IDAsIFhGU19MT0dfRk9SQ0UpOworCWlmIChpaXAgJiYgaWlwLT5pbGlfbGFzdF9sc24pCisJCXhmc19sb2dfZm9yY2VfbHNuKGlwLT5pX21vdW50LCBpaXAtPmlsaV9sYXN0X2xzbiwgMCk7CisJZWxzZQorCQl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCAwKTsKKwogCWlmICh3YWl0KQogCQl3YWl0X2V2ZW50KGlwLT5pX2lwaW5fd2FpdCwgKGF0b21pY19yZWFkKCZpcC0+aV9waW5jb3VudCkgPT0gMCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3ZvaWQKIHhmc19pdW5waW5fd2FpdCgKIAl4ZnNfaW5vZGVfdAkqaXApCiB7CkBAIC0yNjc1LDcgKzI2NzksNyBAQAogCXhmc19idWZfdAkqYnApCiB7CiAJeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OwotCXhmc19wZXJhZ190CQkqcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJdW5zaWduZWQgbG9uZwkJZmlyc3RfaW5kZXgsIG1hc2s7CiAJdW5zaWduZWQgbG9uZwkJaW5vZGVzX3Blcl9jbHVzdGVyOwogCWludAkJCWlsaXN0X3NpemU7CkBAIC0yNjg2LDYgKzI2OTAsNyBAQAogCWludAkJCWJ1Zndhc2RlbHdyaTsKIAlpbnQJCQlpOwogCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgWEZTX0lOT19UT19BR05PKG1wLCBpcC0+aV9pbm8pKTsKIAlBU1NFUlQocGFnLT5wYWdpX2lub2Rlb2spOwogCUFTU0VSVChwYWctPnBhZ19pY2lfaW5pdCk7CiAKQEAgLTI2OTMsNyArMjY5OCw3IEBACiAJaWxpc3Rfc2l6ZSA9IGlub2Rlc19wZXJfY2x1c3RlciAqIHNpemVvZih4ZnNfaW5vZGVfdCAqKTsKIAlpbGlzdCA9IGttZW1fYWxsb2MoaWxpc3Rfc2l6ZSwgS01fTUFZRkFJTHxLTV9OT0ZTKTsKIAlpZiAoIWlsaXN0KQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXRfcHV0OwogCiAJbWFzayA9IH4oKChYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZykpIC0gMSk7CiAJZmlyc3RfaW5kZXggPSBYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8pICYgbWFzazsKQEAgLTI3NjIsNiArMjc2Nyw4IEBACiBvdXRfZnJlZToKIAlyZWFkX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCWttZW1fZnJlZShpbGlzdCk7CitvdXRfcHV0OgorCXhmc19wZXJhZ19wdXQocGFnKTsKIAlyZXR1cm4gMDsKIAogCkBAIC0yODA1LDYgKzI4MTIsNyBAQAogCSAqLwogCXhmc19pZmx1c2hfYWJvcnQoaXEpOwogCWttZW1fZnJlZShpbGlzdCk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIH0KIApAQCAtMjgyNyw4ICsyODM1LDYgQEAKIAl4ZnNfZGlub2RlX3QJCSpkaXA7CiAJeGZzX21vdW50X3QJCSptcDsKIAlpbnQJCQllcnJvcjsKLQlpbnQJCQlub2Jsb2NrID0gKGZsYWdzID09IFhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSyk7Ci0JZW51bSB7IElOVF9ERUxXUkkgPSAoMSA8PCAwKSwgSU5UX0FTWU5DID0gKDEgPDwgMSkgfTsKIAogCVhGU19TVEFUU19JTkMoeHNfaWZsdXNoX2NvdW50KTsKIApAQCAtMjg0MSwxNSArMjg0Nyw2IEBACiAJbXAgPSBpcC0+aV9tb3VudDsKIAogCS8qCi0JICogSWYgdGhlIGlub2RlIGlzbid0IGRpcnR5LCB0aGVuIGp1c3QgcmVsZWFzZSB0aGUgaW5vZGUgZmx1c2ggbG9jayBhbmQKLQkgKiBkbyBub3RoaW5nLgotCSAqLwotCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKSB7Ci0JCXhmc19pZnVubG9jayhpcCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCiAJICogV2UgY2FuJ3QgZmx1c2ggdGhlIGlub2RlIHVudGlsIGl0IGlzIHVucGlubmVkLCBzbyB3YWl0IGZvciBpdCBpZiB3ZQogCSAqIGFyZSBhbGxvd2VkIHRvIGJsb2NrLiAgV2Uga25vdyBub29uZSBuZXcgY2FuIHBpbiBpdCwgYmVjYXVzZSB3ZSBhcmUKIAkgKiBob2xkaW5nIHRoZSBpbm9kZSBsb2NrIHNoYXJlZCBhbmQgeW91IG5lZWQgdG8gaG9sZCBpdCBleGNsdXNpdmVseSB0bwpAQCAtMjg2MCw3ICsyODU3LDcgQEAKIAkgKiBpbiB0aGUgc2FtZSBjbHVzdGVyIGFyZSBkaXJ0eSwgdGhleSB3aWxsIHByb2JhYmx5IHdyaXRlIHRoZSBpbm9kZQogCSAqIG91dCBmb3IgdXMgaWYgdGhleSBvY2N1ciBhZnRlciB0aGUgbG9nIGZvcmNlIGNvbXBsZXRlcy4KIAkgKi8KLQlpZiAobm9ibG9jayAmJiB4ZnNfaXBpbmNvdW50KGlwKSkgeworCWlmICghKGZsYWdzICYgU1lOQ19XQUlUKSAmJiB4ZnNfaXBpbmNvdW50KGlwKSkgewogCQl4ZnNfaXVucGluX25vd2FpdChpcCk7CiAJCXhmc19pZnVubG9jayhpcCk7CiAJCXJldHVybiBFQUdBSU47CkBAIC0yODk0LDYwICsyODkxLDEwIEBACiAJfQogCiAJLyoKLQkgKiBEZWNpZGUgaG93IGJ1ZmZlciB3aWxsIGJlIGZsdXNoZWQgb3V0LiAgVGhpcyBpcyBkb25lIGJlZm9yZQotCSAqIHRoZSBjYWxsIHRvIHhmc19pZmx1c2hfaW50IGJlY2F1c2UgdGhpcyBmaWVsZCBpcyB6ZXJvZWQgYnkgaXQuCi0JICovCi0JaWYgKGlpcCAhPSBOVUxMICYmIGlpcC0+aWxpX2Zvcm1hdC5pbGZfZmllbGRzICE9IDApIHsKLQkJLyoKLQkJICogRmx1c2ggb3V0IHRoZSBpbm9kZSBidWZmZXIgYWNjb3JkaW5nIHRvIHRoZSBkaXJlY3Rpb25zCi0JCSAqIG9mIHRoZSBjYWxsZXIuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhlIGNhbGxlciBoYXMgZ2l2ZW4KLQkJICogdXMgYSBjaG9pY2UgY2hvb3NlIHRoZSBub24tZGVsd3JpIGNhc2UuICBUaGlzIGlzIGJlY2F1c2UKLQkJICogdGhlIGlub2RlIGlzIGluIHRoZSBBSUwgYW5kIHdlIG5lZWQgdG8gZ2V0IGl0IG91dCBzb29uLgotCQkgKi8KLQkJc3dpdGNoIChmbGFncykgewotCQljYXNlIFhGU19JRkxVU0hfU1lOQzoKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX1NZTkM6Ci0JCQlmbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0s6Ci0JCWNhc2UgWEZTX0lGTFVTSF9BU1lOQzoKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX0FTWU5DOgotCQkJZmxhZ3MgPSBJTlRfQVNZTkM7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSToKLQkJCWZsYWdzID0gSU5UX0RFTFdSSTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJZmxhZ3MgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKGZsYWdzKSB7Ci0JCWNhc2UgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9TWU5DOgotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfQVNZTkM6Ci0JCWNhc2UgWEZTX0lGTFVTSF9ERUxXUkk6Ci0JCQlmbGFncyA9IElOVF9ERUxXUkk7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0s6Ci0JCWNhc2UgWEZTX0lGTFVTSF9BU1lOQzoKLQkJCWZsYWdzID0gSU5UX0FTWU5DOwotCQkJYnJlYWs7Ci0JCWNhc2UgWEZTX0lGTFVTSF9TWU5DOgotCQkJZmxhZ3MgPSAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7Ci0JCQlmbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qCiAJICogR2V0IHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgb24tZGlzayBpbm9kZS4KIAkgKi8KIAllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsICZicCwKLQkJCQlub2Jsb2NrID8gWEZTX0JVRl9UUllMT0NLIDogWEZTX0JVRl9MT0NLKTsKKwkJCQkoZmxhZ3MgJiBTWU5DX1dBSVQpID8gWEJGX0xPQ0sgOiBYQkZfVFJZTE9DSyk7CiAJaWYgKGVycm9yIHx8ICFicCkgewogCQl4ZnNfaWZ1bmxvY2soaXApOwogCQlyZXR1cm4gZXJyb3I7CkBAIC0yOTY1LDcgKzI5MTIsNyBAQAogCSAqIGdldCBzdHVjayB3YWl0aW5nIGluIHRoZSB3cml0ZSBmb3IgdG9vIGxvbmcuCiAJICovCiAJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKQotCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UpOworCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKIAogCS8qCiAJICogaW5vZGUgY2x1c3RlcmluZzoKQEAgLTI5NzUsMTMgKzI5MjIsMTAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gY2x1c3Rlcl9jb3JydXB0X291dDsKIAotCWlmIChmbGFncyAmIElOVF9ERUxXUkkpIHsKLQkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgaWYgKGZsYWdzICYgSU5UX0FTWU5DKSB7Ci0JCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgeworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKIAkJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7Ci0JfQorCWVsc2UKKwkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKIAlyZXR1cm4gZXJyb3I7CiAKIGNvcnJ1cHRfb3V0OgpAQCAtMzAxNiwxNiArMjk2MCw2IEBACiAJaWlwID0gaXAtPmlfaXRlbXA7CiAJbXAgPSBpcC0+aV9tb3VudDsKIAotCi0JLyoKLQkgKiBJZiB0aGUgaW5vZGUgaXNuJ3QgZGlydHksIHRoZW4ganVzdCByZWxlYXNlIHRoZSBpbm9kZQotCSAqIGZsdXNoIGxvY2sgYW5kIGRvIG5vdGhpbmcuCi0JICovCi0JaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKLQkJeGZzX2lmdW5sb2NrKGlwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJLyogc2V0ICpkaXAgPSBpbm9kZSdzIHBsYWNlIGluIHRoZSBidWZmZXIgKi8KIAlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsIGlwLT5pX2ltYXAuaW1fYm9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCBlYzFmMjhjLi42YzkxMmIwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC00MjAsMTYgKzQyMCw2IEBACiAjZGVmaW5lIFhGU19JTE9DS19ERVAoZmxhZ3MpCSgoKGZsYWdzKSAmIFhGU19JTE9DS19ERVBfTUFTSykgPj4gWEZTX0lMT0NLX1NISUZUKQogCiAvKgotICogRmxhZ3MgZm9yIHhmc19pZmx1c2goKQotICovCi0jZGVmaW5lCVhGU19JRkxVU0hfREVMV1JJX0VMU0VfU1lOQwkxCi0jZGVmaW5lCVhGU19JRkxVU0hfREVMV1JJX0VMU0VfQVNZTkMJMgotI2RlZmluZQlYRlNfSUZMVVNIX1NZTkMJCQkzCi0jZGVmaW5lCVhGU19JRkxVU0hfQVNZTkMJCTQKLSNkZWZpbmUJWEZTX0lGTFVTSF9ERUxXUkkJCTUKLSNkZWZpbmUJWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLCTYKLQotLyoKICAqIEZsYWdzIGZvciB4ZnNfaXRydW5jYXRlX3N0YXJ0KCkuCiAgKi8KICNkZWZpbmUJWEZTX0lUUlVOQ19ERUZJTklURQkweDEKQEAgLTQ4Myw2ICs0NzMsNyBAQAogdm9pZAkJeGZzX2lleHRfcmVhbGxvYyh4ZnNfaW5vZGVfdCAqLCBpbnQsIGludCk7CiB2b2lkCQl4ZnNfaXBpbih4ZnNfaW5vZGVfdCAqKTsKIHZvaWQJCXhmc19pdW5waW4oeGZzX2lub2RlX3QgKik7Cit2b2lkCQl4ZnNfaXVucGluX3dhaXQoeGZzX2lub2RlX3QgKik7CiBpbnQJCXhmc19pZmx1c2goeGZzX2lub2RlX3QgKiwgdWludCk7CiB2b2lkCQl4ZnNfaWNoZ3RpbWUoeGZzX2lub2RlX3QgKiwgaW50KTsKIHZvaWQJCXhmc19sb2NrX2lub2Rlcyh4ZnNfaW5vZGVfdCAqKiwgaW50LCB1aW50KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKaW5kZXggZjM4ODU1ZC4uZDRkYzA2MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCiAJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZpaXAtPmlsaV9mb3JtYXQ7CiAJdmVjcC0+aV9sZW4gID0gc2l6ZW9mKHhmc19pbm9kZV9sb2dfZm9ybWF0X3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUZPUk1BVCk7CisJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JRk9STUFUOwogCXZlY3ArKzsKIAludmVjcwkgICAgID0gMTsKIApAQCAtMjc5LDcgKzI3OSw3IEBACiAKIAl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJmlwLT5pX2Q7CiAJdmVjcC0+aV9sZW4gID0gc2l6ZW9mKHN0cnVjdCB4ZnNfaWNkaW5vZGUpOwotCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUNPUkUpOworCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUNPUkU7CiAJdmVjcCsrOwogCW52ZWNzKys7CiAJaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgfD0gWEZTX0lMT0dfQ09SRTsKQEAgLTMzNiw3ICszMzYsNyBAQAogCQkJCXZlY3AtPmlfYWRkciA9CiAJCQkJCShjaGFyICopKGlwLT5pX2RmLmlmX3UxLmlmX2V4dGVudHMpOwogCQkJCXZlY3AtPmlfbGVuID0gaXAtPmlfZGYuaWZfYnl0ZXM7Ci0JCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JRVhUKTsKKwkJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lFWFQ7CiAJCQl9IGVsc2UKICNlbmRpZgogCQkJewpAQCAtMzU1LDcgKzM1NSw3IEBACiAJCQkJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KWV4dF9idWZmZXI7CiAJCQkJdmVjcC0+aV9sZW4gPSB4ZnNfaWV4dGVudHNfY29weShpcCwgZXh0X2J1ZmZlciwKIAkJCQkJCVhGU19EQVRBX0ZPUkspOwotCQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUVYVCk7CisJCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JRVhUOwogCQkJfQogCQkJQVNTRVJUKHZlY3AtPmlfbGVuIDw9IGlwLT5pX2RmLmlmX2J5dGVzKTsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfZHNpemUgPSB2ZWNwLT5pX2xlbjsKQEAgLTM3Myw3ICszNzMsNyBAQAogCQkJQVNTRVJUKGlwLT5pX2RmLmlmX2Jyb290ICE9IE5VTEwpOwogCQkJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KWlwLT5pX2RmLmlmX2Jyb290OwogCQkJdmVjcC0+aV9sZW4gPSBpcC0+aV9kZi5pZl9icm9vdF9ieXRlczsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUJST09UKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUJST09UOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfZHNpemUgPSBpcC0+aV9kZi5pZl9icm9vdF9ieXRlczsKQEAgLTM5OSw3ICszOTksNyBAQAogCQkJQVNTRVJUKChpcC0+aV9kZi5pZl9yZWFsX2J5dGVzID09IDApIHx8CiAJCQkgICAgICAgKGlwLT5pX2RmLmlmX3JlYWxfYnl0ZXMgPT0gZGF0YV9ieXRlcykpOwogCQkJdmVjcC0+aV9sZW4gPSAoaW50KWRhdGFfYnl0ZXM7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lMT0NBTCk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lMT0NBTDsKIAkJCXZlY3ArKzsKIAkJCW52ZWNzKys7CiAJCQlpaXAtPmlsaV9mb3JtYXQuaWxmX2RzaXplID0gKHVuc2lnbmVkKWRhdGFfYnl0ZXM7CkBAIC00NzcsNyArNDc3LDcgQEAKIAkJCXZlY3AtPmlfbGVuID0geGZzX2lleHRlbnRzX2NvcHkoaXAsIGV4dF9idWZmZXIsCiAJCQkJCVhGU19BVFRSX0ZPUkspOwogI2VuZGlmCi0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lBVFRSX0VYVCk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lBVFRSX0VYVDsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfYXNpemUgPSB2ZWNwLT5pX2xlbjsKIAkJCXZlY3ArKzsKIAkJCW52ZWNzKys7CkBAIC00OTIsNyArNDkyLDcgQEAKIAkJCUFTU0VSVChpcC0+aV9hZnAtPmlmX2Jyb290ICE9IE5VTEwpOwogCQkJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KWlwLT5pX2FmcC0+aWZfYnJvb3Q7CiAJCQl2ZWNwLT5pX2xlbiA9IGlwLT5pX2FmcC0+aWZfYnJvb3RfYnl0ZXM7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lBVFRSX0JST09UKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUFUVFJfQlJPT1Q7CiAJCQl2ZWNwKys7CiAJCQludmVjcysrOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9hc2l6ZSA9IGlwLT5pX2FmcC0+aWZfYnJvb3RfYnl0ZXM7CkBAIC01MTYsNyArNTE2LDcgQEAKIAkJCUFTU0VSVCgoaXAtPmlfYWZwLT5pZl9yZWFsX2J5dGVzID09IDApIHx8CiAJCQkgICAgICAgKGlwLT5pX2FmcC0+aWZfcmVhbF9ieXRlcyA9PSBkYXRhX2J5dGVzKSk7CiAJCQl2ZWNwLT5pX2xlbiA9IChpbnQpZGF0YV9ieXRlczsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUFUVFJfTE9DQUwpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQVRUUl9MT0NBTDsKIAkJCXZlY3ArKzsKIAkJCW52ZWNzKys7CiAJCQlpaXAtPmlsaV9mb3JtYXQuaWxmX2FzaXplID0gKHVuc2lnbmVkKWRhdGFfYnl0ZXM7CkBAIC02MDIsMzMgKzYwMiwyMCBAQAogCiAJaWYgKCF4ZnNfaWZsb2NrX25vd2FpdChpcCkpIHsKIAkJLyoKLQkJICogSWYgc29tZW9uZSBlbHNlIGlzbid0IGFscmVhZHkgdHJ5aW5nIHRvIHB1c2ggdGhlIGlub2RlCi0JCSAqIGJ1ZmZlciwgd2UgZ2V0IHRvIGRvIGl0LgorCQkgKiBpbm9kZSBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQgdG8gdGhlIGJhY2tpbmcgYnVmZmVyLAorCQkgKiBsZWF2ZSBpdCBsb2NrZWQgaW4gc2hhcmVkIG1vZGUsIHB1c2hidWYgcm91dGluZSB3aWxsCisJCSAqIHVubG9jayBpdC4KIAkJICovCi0JCWlmIChpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPT0gMCkgewotCQkJaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMTsKLSNpZmRlZiBERUJVRwotCQkJaWlwLT5pbGlfcHVzaF9vd25lciA9IGN1cnJlbnRfcGlkKCk7Ci0jZW5kaWYKLQkJCS8qCi0JCQkgKiBJbm9kZSBpcyBsZWZ0IGxvY2tlZCBpbiBzaGFyZWQgbW9kZS4KLQkJCSAqIFB1c2hidWYgcm91dGluZSBnZXRzIHRvIHVubG9jayBpdC4KLQkJCSAqLwotCQkJcmV0dXJuIFhGU19JVEVNX1BVU0hCVUY7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogV2UgaG9sZCB0aGUgQUlMIGxvY2ssIHNvIHdlIG11c3Qgc3BlY2lmeSB0aGUKLQkJCSAqIE5PTk9USUZZIGZsYWcgc28gdGhhdCB3ZSB3b24ndCBkb3VibGUgdHJpcC4KLQkJCSAqLwotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUR8WEZTX0lVTkxPQ0tfTk9OT1RJRlkpOwotCQkJcmV0dXJuIFhGU19JVEVNX0ZMVVNISU5HOwotCQl9Ci0JCS8qIE5PVFJFQUNIRUQgKi8KKwkJcmV0dXJuIFhGU19JVEVNX1BVU0hCVUY7CiAJfQogCiAJLyogU3RhbGUgaXRlbXMgc2hvdWxkIGZvcmNlIG91dCB0aGUgaWNsb2cgKi8KIAlpZiAoaXAtPmlfZmxhZ3MgJiBYRlNfSVNUQUxFKSB7CiAJCXhmc19pZnVubG9jayhpcCk7CisJCS8qCisJCSAqIHdlIGhvbGQgdGhlIEFJTCBsb2NrIC0gbm90aWZ5IHRoZSB1bmxvY2sgcm91dGluZSBvZiB0aGlzCisJCSAqIHNvIGl0IGRvZXNuJ3QgdHJ5IHRvIGdldCB0aGUgbG9jayBhZ2Fpbi4KKwkJICovCiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEfFhGU19JVU5MT0NLX05PTk9USUZZKTsKIAkJcmV0dXJuIFhGU19JVEVNX1BJTk5FRDsKIAl9CkBAIC03NDYsMTEgKzczMyw4IEBACiAgKiBUaGlzIGdldHMgY2FsbGVkIGJ5IHhmc190cmFuc19wdXNoX2FpbCgpLCB3aGVuIElPUF9UUllMT0NLCiAgKiBmYWlsZWQgdG8gZ2V0IHRoZSBpbm9kZSBmbHVzaCBsb2NrIGJ1dCBkaWQgZ2V0IHRoZSBpbm9kZSBsb2NrZWQgU0hBUkVELgogICogSGVyZSB3ZSdyZSB0cnlpbmcgdG8gc2VlIGlmIHRoZSBpbm9kZSBidWZmZXIgaXMgaW5jb3JlLCBhbmQgaWYgc28gd2hldGhlciBpdCdzCi0gKiBtYXJrZWQgZGVsYXllZCB3cml0ZS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB3ZSdsbCBpbml0aWF0ZSBhIGJhd3JpdGUgb24gdGhhdAotICogYnVmZmVyIHRvIGV4cGVkaXRlIHRoZSBwcm9jZXNzLgotICoKLSAqIFdlIGFyZW4ndCBob2xkaW5nIHRoZSBBSUwgbG9jayAob3IgdGhlIGZsdXNoIGxvY2spIHdoZW4gdGhpcyBnZXRzIGNhbGxlZCwKLSAqIHNvIGl0IGlzIGluaGVyZW50bHkgcmFjZS15LgorICogbWFya2VkIGRlbGF5ZWQgd3JpdGUuIElmIHRoYXQncyB0aGUgY2FzZSwgd2UnbGwgcHJvbW90ZSBpdCBhbmQgdGhhdCB3aWxsCisgKiBhbGxvdyB0aGUgY2FsbGVyIHRvIHdyaXRlIHRoZSBidWZmZXIgYnkgdHJpZ2dlcmluZyB0aGUgeGZzYnVmZCB0byBydW4uCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfaW5vZGVfaXRlbV9wdXNoYnVmKApAQCAtNzU5LDgyICs3NDMsMzAgQEAKIAl4ZnNfaW5vZGVfdAkqaXA7CiAJeGZzX21vdW50X3QJKm1wOwogCXhmc19idWZfdAkqYnA7Ci0JdWludAkJZG9wdXNoOwogCiAJaXAgPSBpaXAtPmlsaV9pbm9kZTsKLQogCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKSk7CiAKIAkvKgotCSAqIFRoZSBpbGlfcHVzaGJ1Zl9mbGFnIGtlZXBzIG90aGVycyBmcm9tCi0JICogdHJ5aW5nIHRvIGR1cGxpY2F0ZSBvdXIgZWZmb3J0LgotCSAqLwotCUFTU0VSVChpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgIT0gMCk7Ci0JQVNTRVJUKGlpcC0+aWxpX3B1c2hfb3duZXIgPT0gY3VycmVudF9waWQoKSk7Ci0KLQkvKgogCSAqIElmIGEgZmx1c2ggaXMgbm90IGluIHByb2dyZXNzIGFueW1vcmUsIGNoYW5jZXMgYXJlIHRoYXQgdGhlCiAJICogaW5vZGUgd2FzIHRha2VuIG9mZiB0aGUgQUlMLiBTbywganVzdCBnZXQgb3V0LgogCSAqLwogCWlmIChjb21wbGV0aW9uX2RvbmUoJmlwLT5pX2ZsdXNoKSB8fAogCSAgICAoKGlpcC0+aWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSA9PSAwKSkgewotCQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiAJCXJldHVybjsKIAl9CiAKIAltcCA9IGlwLT5pX21vdW50OwogCWJwID0geGZzX2luY29yZShtcC0+bV9kZGV2X3RhcmdwLCBpaXAtPmlsaV9mb3JtYXQuaWxmX2Jsa25vLAotCQkgICAgaWlwLT5pbGlfZm9ybWF0LmlsZl9sZW4sIFhGU19JTkNPUkVfVFJZTE9DSyk7CisJCSAgICBpaXAtPmlsaV9mb3JtYXQuaWxmX2xlbiwgWEJGX1RSWUxPQ0spOwogCi0JaWYgKGJwICE9IE5VTEwpIHsKLQkJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgewotCQkJLyoKLQkJCSAqIFdlIHdlcmUgcmFjaW5nIHdpdGggaWZsdXNoIGJlY2F1c2Ugd2UgZG9uJ3QgaG9sZAotCQkJICogdGhlIEFJTCBsb2NrIG9yIHRoZSBmbHVzaCBsb2NrLiBIb3dldmVyLCBhdCB0aGlzIHBvaW50LAotCQkJICogd2UgaGF2ZSB0aGUgYnVmZmVyLCBhbmQgd2Uga25vdyB0aGF0IGl0J3MgZGlydHkuCi0JCQkgKiBTbywgaXQncyBwb3NzaWJsZSB0aGF0IGlmbHVzaCByYWNlZCB3aXRoIHVzLCBhbmQKLQkJCSAqIHRoaXMgaXRlbSBpcyBhbHJlYWR5IHRha2VuIG9mZiB0aGUgQUlMLgotCQkJICogSWYgbm90LCB3ZSBjYW4gZmx1c2ggaXQgYXN5bmMuCi0JCQkgKi8KLQkJCWRvcHVzaCA9ICgoaWlwLT5pbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpICYmCi0JCQkJICAhY29tcGxldGlvbl9kb25lKCZpcC0+aV9mbHVzaCkpOwotCQkJaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQotCQkJdHJhY2VfeGZzX2lub2RlX2l0ZW1fcHVzaChicCwgX1JFVF9JUF8pOwotCi0JCQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpIHsKLQkJCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsCi0JCQkJCSAgICAgIFhGU19MT0dfRk9SQ0UpOwotCQkJfQotCQkJaWYgKGRvcHVzaCkgewotCQkJCWludAllcnJvcjsKLQkJCQllcnJvciA9IHhmc19iYXdyaXRlKG1wLCBicCk7Ci0JCQkJaWYgKGVycm9yKQotCQkJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKLQkJInhmc19pbm9kZV9pdGVtX3B1c2hidWY6IHB1c2hidWYgZXJyb3IgJWQgb24gaWlwICVwLCBicCAlcCIsCi0JCQkJCQkJZXJyb3IsIGlpcCwgYnApOwotCQkJfSBlbHNlIHsKLQkJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlpcC0+aWxpX3B1c2hidWZfZmxhZyA9IDA7Ci0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCS8qCi0JICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIGFib3V0IHJlc2V0dGluZyBwdXNoYnVmIGZsYWcgdG9vIGVhcmx5IChhYm92ZSkuCi0JICogRXZlbiB0aG91Z2ggaW4gdGhlb3J5IHdlIGNhbiBkbyBpdCBhcyBzb29uIGFzIHdlIGhhdmUgdGhlIGJ1ZmxvY2ssCi0JICogd2UgZG9uJ3Qgd2FudCBvdGhlcnMgdG8gYmUgZG9pbmcgd29yayBuZWVkbGVzc2x5LiBUaGV5J2xsIGNvbWUgdG8KLQkgKiB0aGlzIGZ1bmN0aW9uIHRoaW5raW5nIHRoYXQgcHVzaGluZyB0aGUgYnVmZmVyIGlzIHRoZWlyCi0JICogcmVzcG9uc2liaWxpdHkgb25seSB0byBmaW5kIHRoYXQgdGhlIGJ1ZmZlciBpcyBzdGlsbCBsb2NrZWQgYnkKLQkgKiBhbm90aGVyIGRvaW5nIHRoZSBzYW1lIHRoaW5nCi0JICovCi0JaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJaWYgKCFicCkKKwkJcmV0dXJuOworCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpCisJCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOworCXhmc19idWZfcmVsc2UoYnApOwogCXJldHVybjsKIH0KIApAQCAtODY3LDEwICs3OTksMTQgQEAKIAkgICAgICAgaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgIT0gMCk7CiAKIAkvKgotCSAqIFdyaXRlIG91dCB0aGUgaW5vZGUuICBUaGUgY29tcGxldGlvbiByb3V0aW5lICgnaWZsdXNoX2RvbmUnKSB3aWxsCi0JICogcHVsbCBpdCBmcm9tIHRoZSBBSUwsIG1hcmsgaXQgY2xlYW4sIHVubG9jayB0aGUgZmx1c2ggbG9jay4KKwkgKiBQdXNoIHRoZSBpbm9kZSB0byBpdCdzIGJhY2tpbmcgYnVmZmVyLiBUaGlzIHdpbGwgbm90IHJlbW92ZSB0aGUKKwkgKiBpbm9kZSBmcm9tIHRoZSBBSUwgLSBhIGZ1cnRoZXIgcHVzaCB3aWxsIGJlIHJlcXVpcmVkIHRvIHRyaWdnZXIgYQorCSAqIGJ1ZmZlciBwdXNoLiBIb3dldmVyLCB0aGlzIGFsbG93cyBhbGwgdGhlIGRpcnR5IGlub2RlcyB0byBiZSBwdXNoZWQKKwkgKiB0byB0aGUgYnVmZmVyIGJlZm9yZSBpdCBpcyBwdXNoZWQgdG8gZGlzay4gVEhlIGJ1ZmZlciBJTyBjb21wbGV0aW9uCisJICogd2lsbCBwdWxsIHRoIGVpbm9kZSBmcm9tIHRoZSBBSUwsIG1hcmsgaXQgY2xlYW4gYW5kIHVubG9jayB0aGUgZmx1c2gKKwkgKiBsb2NrLgogCSAqLwotCSh2b2lkKSB4ZnNfaWZsdXNoKGlwLCBYRlNfSUZMVVNIX0FTWU5DKTsKKwkodm9pZCkgeGZzX2lmbHVzaChpcCwgMCk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwogCiAJcmV0dXJuOwpAQCAtOTM0LDcgKzg3MCw2IEBACiAJLyoKIAkgICBXZSBoYXZlIHplcm9lZCBtZW1vcnkuIE5vIG5lZWQgLi4uCiAJICAgaWlwLT5pbGlfZXh0ZW50c19idWYgPSBOVUxMOwotCSAgIGlpcC0+aWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJICovCiAKIAlpaXAtPmlsaV9mb3JtYXQuaWxmX3R5cGUgPSBYRlNfTElfSU5PREU7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaCBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCmluZGV4IGNjOGRmMWEuLjlhNDY3OTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCkBAIC0xNDQsMTIgKzE0NCw2IEBACiAJCQkJCQkgICAgICBkYXRhIGV4dHMgKi8KIAlzdHJ1Y3QgeGZzX2JtYnRfcmVjCSppbGlfYWV4dGVudHNfYnVmOyAvKiBhcnJheSBvZiBsb2dnZWQKIAkJCQkJCSAgICAgIGF0dHIgZXh0cyAqLwotCXVuc2lnbmVkIGludCAgICAgICAgICAgIGlsaV9wdXNoYnVmX2ZsYWc7ICAvKiBvbmUgYml0IHVzZWQgaW4gcHVzaF9haWwgKi8KLQotI2lmZGVmIERFQlVHCi0JdWludDY0X3QgICAgICAgICAgICAgICAgaWxpX3B1c2hfb3duZXI7ICAgIC8qIG9uZSB3aG8gc2V0cyBwdXNoYnVmX2ZsYWcKLQkJCQkJCSAgICAgIGFib3ZlIGdldHMgdG8gcHVzaCB0aGUgYnVmICovCi0jZW5kaWYKICNpZmRlZiBYRlNfVFJBTlNfREVCVUcKIAlpbnQJCQlpbGlfcm9vdF9zaXplOwogCWNoYXIJCQkqaWxpX29yaWdfcm9vdDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IDYyZWZhYjIuLjNhZjAyMzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtNDA4LDggKzQwOCwxMCBAQAogCQkoWEZTX0lOT0RFX0NMVVNURVJfU0laRShtcCkgPj4gbXAtPm1fc2Iuc2JfaW5vZGVsb2cpOwogCW5pbWFzayA9IH4obmljbHVzdGVyIC0gMSk7CiAJbmJjbHVzdGVyID0gbmljbHVzdGVyID4+IG1wLT5tX3NiLnNiX2lub3BibG9nOwotCWlyYnVmID0ga21lbV96YWxsb2NfZ3JlZWR5KCZpcmJzaXplLCBQQUdFX1NJWkUsIFBBR0VfU0laRSAqIDQsCi0JCQkJICAgS01fU0xFRVAgfCBLTV9NQVlGQUlMIHwgS01fTEFSR0UpOworCWlyYnVmID0ga21lbV96YWxsb2NfZ3JlZWR5KCZpcmJzaXplLCBQQUdFX1NJWkUsIFBBR0VfU0laRSAqIDQpOworCWlmICghaXJidWYpCisJCXJldHVybiBFTk9NRU07CisKIAluaXJidWYgPSBpcmJzaXplIC8gc2l6ZW9mKCppcmJ1Zik7CiAKIAkvKgpAQCAtNDIwLDkgKzQyMiw3IEBACiAJd2hpbGUgKFhGU19CVUxLU1RBVF9VQkxFRlQodWJsZWZ0KSAmJiBhZ25vIDwgbXAtPm1fc2Iuc2JfYWdjb3VudCkgewogCQljb25kX3Jlc2NoZWQoKTsKIAkJYnAgPSBOVUxMOwotCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgTlVMTCwgYWdubywgJmFnYnApOwotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQlpZiAoZXJyb3IpIHsKIAkJCS8qCiAJCQkgKiBTa2lwIHRoaXMgYWxsb2NhdGlvbiBncm91cCBhbmQgZ28gdG8gdGhlIG5leHQgb25lLgpAQCAtNzI5LDcgKzcyOSw3IEBACiAJLyoKIAkgKiBEb25lLCB3ZSdyZSBlaXRoZXIgb3V0IG9mIGZpbGVzeXN0ZW0gb3Igc3BhY2UgdG8gcHV0IHRoZSBkYXRhLgogCSAqLwotCWttZW1fZnJlZShpcmJ1Zik7CisJa21lbV9mcmVlX2xhcmdlKGlyYnVmKTsKIAkqdWJjb3VudHAgPSB1YmVsZW07CiAJLyoKIAkgKiBGb3VuZCBzb21lIGlub2RlcywgcmV0dXJuIHRoZW0gbm93IGFuZCByZXR1cm4gdGhlIGVycm9yIG5leHQgdGltZS4KQEAgLTg0OSw5ICs4NDksNyBAQAogCWFnYnAgPSBOVUxMOwogCXdoaWxlIChsZWZ0ID4gMCAmJiBhZ25vIDwgbXAtPm1fc2Iuc2JfYWdjb3VudCkgewogCQlpZiAoYWdicCA9PSBOVUxMKSB7Ci0JCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCQllcnJvciA9IHhmc19pYWxsb2NfcmVhZF9hZ2kobXAsIE5VTEwsIGFnbm8sICZhZ2JwKTsKLQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCQlpZiAoZXJyb3IpIHsKIAkJCQkvKgogCQkJCSAqIElmIHdlIGNhbid0IHJlYWQgdGhlIEFHSSBvZiB0aGlzIGFnLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuYyBiL2ZzL3hmcy94ZnNfbG9nLmMKaW5kZXggNjAwYjViMC4uNGYxNmJlNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuYworKysgYi9mcy94ZnMveGZzX2xvZy5jCkBAIC01MCw3ICs1MCw2IEBACiAJICAob2ZmKSArPSAoYnl0ZXMpO30KIAogLyogTG9jYWwgbWlzY2VsbGFuZW91cyBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1TVEFUSUMgaW50CSB4bG9nX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKik7CiBTVEFUSUMgaW50CSB4bG9nX2NvbW1pdF9yZWNvcmQoeGZzX21vdW50X3QgKm1wLCB4bG9nX3RpY2tldF90ICp0aWNrZXQsCiAJCQkJICAgIHhsb2dfaW5fY29yZV90ICoqLCB4ZnNfbHNuX3QgKik7CiBTVEFUSUMgeGxvZ190ICogIHhsb2dfYWxsb2NfbG9nKHhmc19tb3VudF90CSptcCwKQEAgLTgwLDExICs3OSw2IEBACiBTVEFUSUMgdm9pZCB4bG9nX3N0YXRlX3N3aXRjaF9pY2xvZ3MoeGxvZ190CQkqbG9nLAogCQkJCSAgICAgeGxvZ19pbl9jb3JlX3QgKmljbG9nLAogCQkJCSAgICAgaW50CQlldmVudHVhbF9zaXplKTsKLVNUQVRJQyBpbnQgIHhsb2dfc3RhdGVfc3luYyh4bG9nX3QJCQkqbG9nLAotCQkJICAgIHhmc19sc25fdCAJCQlsc24sCi0JCQkgICAgdWludAkJCWZsYWdzLAotCQkJICAgIGludAkJCQkqbG9nX2ZsdXNoZWQpOwotU1RBVElDIGludCAgeGxvZ19zdGF0ZV9zeW5jX2FsbCh4bG9nX3QgKmxvZywgdWludCBmbGFncywgaW50ICpsb2dfZmx1c2hlZCk7CiBTVEFUSUMgdm9pZCB4bG9nX3N0YXRlX3dhbnRfc3luYyh4bG9nX3QJKmxvZywgeGxvZ19pbl9jb3JlX3QgKmljbG9nKTsKIAogLyogbG9jYWwgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgZ3JhbnQgaGVhZCAqLwpAQCAtMjk3LDY1ICsyOTEsNiBAQAogCXJldHVybiBsc247CiB9CS8qIHhmc19sb2dfZG9uZSAqLwogCi0KLS8qCi0gKiBGb3JjZSB0aGUgaW4tY29yZSBsb2cgdG8gZGlzay4gIElmIGZsYWdzID09IFhGU19MT0dfU1lOQywKLSAqCXRoZSBmb3JjZSBpcyBkb25lIHN5bmNocm9ub3VzbHkuCi0gKgotICogQXN5bmNocm9ub3VzIGZvcmNlcyBhcmUgaW1wbGVtZW50ZWQgYnkgc2V0dGluZyB0aGUgV0FOVF9TWU5DCi0gKiBiaXQgaW4gdGhlIGFwcHJvcHJpYXRlIGluLWNvcmUgbG9nIGFuZCB0aGVuIHJldHVybmluZy4KLSAqCi0gKiBTeW5jaHJvbm91cyBmb3JjZXMgYXJlIGltcGxlbWVudGVkIHdpdGggYSBzaWduYWwgdmFyaWFibGUuIEFsbCBjYWxsZXJzCi0gKiB0byBmb3JjZSBhIGdpdmVuIGxzbiB0byBkaXNrIHdpbGwgd2FpdCBvbiBhIHRoZSBzdiBhdHRhY2hlZCB0byB0aGUKLSAqIHNwZWNpZmljIGluLWNvcmUgbG9nLiAgV2hlbiBnaXZlbiBpbi1jb3JlIGxvZyBmaW5hbGx5IGNvbXBsZXRlcyBpdHMKLSAqIHdyaXRlIHRvIGRpc2ssIHRoYXQgdGhyZWFkIHdpbGwgd2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoZQotICogc3YuCi0gKi8KLWludAotX3hmc19sb2dfZm9yY2UoCi0JeGZzX21vdW50X3QJKm1wLAotCXhmc19sc25fdAlsc24sCi0JdWludAkJZmxhZ3MsCi0JaW50CQkqbG9nX2ZsdXNoZWQpCi17Ci0JeGxvZ190CQkqbG9nID0gbXAtPm1fbG9nOwotCWludAkJZHVtbXk7Ci0KLQlpZiAoIWxvZ19mbHVzaGVkKQotCQlsb2dfZmx1c2hlZCA9ICZkdW1teTsKLQotCUFTU0VSVChmbGFncyAmIFhGU19MT0dfRk9SQ0UpOwotCi0JWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2UpOwotCi0JaWYgKGxvZy0+bF9mbGFncyAmIFhMT0dfSU9fRVJST1IpCi0JCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQlpZiAobHNuID09IDApCi0JCXJldHVybiB4bG9nX3N0YXRlX3N5bmNfYWxsKGxvZywgZmxhZ3MsIGxvZ19mbHVzaGVkKTsKLQllbHNlCi0JCXJldHVybiB4bG9nX3N0YXRlX3N5bmMobG9nLCBsc24sIGZsYWdzLCBsb2dfZmx1c2hlZCk7Ci19CS8qIF94ZnNfbG9nX2ZvcmNlICovCi0KLS8qCi0gKiBXcmFwcGVyIGZvciBfeGZzX2xvZ19mb3JjZSgpLCB0byBiZSB1c2VkIHdoZW4gY2FsbGVyIGRvZXNuJ3QgY2FyZQotICogYWJvdXQgZXJyb3JzIG9yIHdoZXRoZXIgdGhlIGxvZyB3YXMgZmx1c2hlZCBvciBub3QuIFRoaXMgaXMgdGhlIG5vcm1hbAotICogaW50ZXJmYWNlIHRvIHVzZSB3aGVuIHRyeWluZyB0byB1bnBpbiBpdGVtcyBvciBtb3ZlIHRoZSBsb2cgZm9yd2FyZC4KLSAqLwotdm9pZAoteGZzX2xvZ19mb3JjZSgKLQl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX2xzbl90CWxzbiwKLQl1aW50CQlmbGFncykKLXsKLQlpbnQJZXJyb3I7Ci0JZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgbHNuLCBmbGFncywgTlVMTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLCAieGZzX2xvZ19mb3JjZTogIgotCQkJImVycm9yICVkIHJldHVybmVkLiIsIGVycm9yKTsKLQl9Ci19Ci0KLQogLyoKICAqIEF0dGFjaGVzIGEgbmV3IGljbG9nIEkvTyBjb21wbGV0aW9uIGNhbGxiYWNrIHJvdXRpbmUgZHVyaW5nCiAgKiB0cmFuc2FjdGlvbiBjb21taXQuICBJZiB0aGUgbG9nIGlzIGluIGVycm9yIHN0YXRlLCBhIG5vbi16ZXJvCkBAIC02MDIsNyArNTM3LDcgQEAKIAlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQogCQlyZXR1cm4gMDsKIAotCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsIDAsIFhGU19MT0dfRk9SQ0V8WEZTX0xPR19TWU5DLCBOVUxMKTsKKwllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKG1wLCBYRlNfTE9HX1NZTkMsIE5VTEwpOwogCUFTU0VSVChlcnJvciB8fCAhKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpKTsKIAogI2lmZGVmIERFQlVHCkBAIC02MTgsNyArNTUzLDcgQEAKIAlpZiAoISAoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkpIHsKIAkJcmVnWzBdLmlfYWRkciA9ICh2b2lkKikmbWFnaWM7CiAJCXJlZ1swXS5pX2xlbiAgPSBzaXplb2YobWFnaWMpOwotCQlYTE9HX1ZFQ19TRVRfVFlQRSgmcmVnWzBdLCBYTE9HX1JFR19UWVBFX1VOTU9VTlQpOworCQlyZWdbMF0uaV90eXBlID0gWExPR19SRUdfVFlQRV9VTk1PVU5UOwogCiAJCWVycm9yID0geGZzX2xvZ19yZXNlcnZlKG1wLCA2MDAsIDEsICZ0aWMsCiAJCQkJCVhGU19MT0csIDAsIFhMT0dfVU5NT1VOVF9SRUNfVFlQRSk7CkBAIC05ODgsMzUgKzkyMyw2IEBACiB9CS8qIHhsb2dfaW9kb25lICovCiAKIC8qCi0gKiBUaGUgYmRzdHJhdCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbG9nIGJ1ZnMuIFRoaXMgZ2l2ZXMgdXMgYSBjZW50cmFsCi0gKiBwbGFjZSB0byB0cmFwIGJ1ZnMgaW4gY2FzZSB3ZSBnZXQgaGl0IGJ5IGEgbG9nIEkvTyBlcnJvciBhbmQgbmVlZCB0bwotICogc2h1dGRvd24uIEFjdHVhbGx5LCBpbiBwcmFjdGljZSwgZXZlbiB3aGVuIHdlIGRpZG4ndCBnZXQgYSBsb2cgZXJyb3IsCi0gKiB3ZSB0cmFuc2l0aW9uIHRoZSBpY2xvZ3MgdG8gSU9FUlJPUiBzdGF0ZSAqYWZ0ZXIqIGZsdXNoaW5nIGFsbCBleGlzdGluZwotICogaWNsb2dzIHRvIGRpc2suIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueW1vcmUgbmV3IHRyYW5zYWN0aW9ucyB0byBiZQotICogc3RhcnRlZCBvciBjb21wbGV0ZWQgYWZ0ZXJ3YXJkcy4KLSAqLwotU1RBVElDIGludAoteGxvZ19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICpicCkKLXsKLQl4bG9nX2luX2NvcmVfdCAqaWNsb2c7Ci0KLQlpY2xvZyA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4bG9nX2luX2NvcmVfdCAqKTsKLQotCWlmICgoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSA9PSAwKSB7Ci0JICAvKiBub3RlIGZvciBpcml4IGJzdHJhdCB3aWxsIG5lZWQgIHN0cnVjdCBiZGV2c3cgcGFzc2VkCi0JICAgKiBGaXggdGhlIGZvbGxvd2luZyBtYWNybyBpZiB0aGUgY29kZSBldmVyIGlzIG1lcmdlZAotCSAgICovCi0JICAgIFhGU19iZHN0cmF0KGJwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JWEZTX0JVRl9FUlJPUihicCwgRUlPKTsKLQlYRlNfQlVGX1NUQUxFKGJwKTsKLQl4ZnNfYmlvZG9uZShicCk7Ci0JcmV0dXJuIFhGU19FUlJPUihFSU8pOwotfQotCi0vKgogICogUmV0dXJuIHNpemUgb2YgZWFjaCBpbi1jb3JlIGxvZyByZWNvcmQgYnVmZmVyLgogICoKICAqIEFsbCBtYWNoaW5lcyBnZXQgOCB4IDMya0IgYnVmZmVycyBieSBkZWZhdWx0LCB1bmxlc3MgdHVuZWQgb3RoZXJ3aXNlLgpAQCAtMTE1OCw3ICsxMDY0LDYgQEAKIAlpZiAoIWJwKQogCQlnb3RvIG91dF9mcmVlX2xvZzsKIAlYRlNfQlVGX1NFVF9JT0RPTkVfRlVOQyhicCwgeGxvZ19pb2RvbmUpOwotCVhGU19CVUZfU0VUX0JEU1RSQVRfRlVOQyhicCwgeGxvZ19iZHN0cmF0X2NiKTsKIAlYRlNfQlVGX1NFVF9GU1BSSVZBVEUyKGJwLCAodW5zaWduZWQgbG9uZykxKTsKIAlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKIAlBU1NFUlQoWEZTX0JVRl9WQUxVU0VNQShicCkgPD0gMCk7CkBAIC0xMTk2LDcgKzExMDEsNiBAQAogCQlpZiAoIVhGU19CVUZfQ1BTRU1BKGJwKSkKIAkJCUFTU0VSVCgwKTsKIAkJWEZTX0JVRl9TRVRfSU9ET05FX0ZVTkMoYnAsIHhsb2dfaW9kb25lKTsKLQkJWEZTX0JVRl9TRVRfQkRTVFJBVF9GVU5DKGJwLCB4bG9nX2Jkc3RyYXRfY2IpOwogCQlYRlNfQlVGX1NFVF9GU1BSSVZBVEUyKGJwLCAodW5zaWduZWQgbG9uZykxKTsKIAkJaWNsb2ctPmljX2JwID0gYnA7CiAJCWljbG9nLT5pY19kYXRhID0gYnAtPmJfYWRkcjsKQEAgLTEyNjgsNyArMTE3Miw3IEBACiAKIAlyZWdbMF0uaV9hZGRyID0gTlVMTDsKIAlyZWdbMF0uaV9sZW4gPSAwOwotCVhMT0dfVkVDX1NFVF9UWVBFKCZyZWdbMF0sIFhMT0dfUkVHX1RZUEVfQ09NTUlUKTsKKwlyZWdbMF0uaV90eXBlID0gWExPR19SRUdfVFlQRV9DT01NSVQ7CiAKIAlBU1NFUlRfQUxXQVlTKGljbG9nKTsKIAlpZiAoKGVycm9yID0geGxvZ193cml0ZShtcCwgcmVnLCAxLCB0aWNrZXQsIGNvbW1pdGxzbnAsCkBAIC0xMzQzLDYgKzEyNDcsMzcgQEAKIAkgICAgeGZzX3RyYW5zX2FpbF9wdXNoKGxvZy0+bF9haWxwLCB0aHJlc2hvbGRfbHNuKTsKIH0JLyogeGxvZ19ncmFudF9wdXNoX2FpbCAqLwogCisvKgorICogVGhlIGJkc3RyYXQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGxvZyBidWZzLiBUaGlzIGdpdmVzIHVzIGEgY2VudHJhbAorICogcGxhY2UgdG8gdHJhcCBidWZzIGluIGNhc2Ugd2UgZ2V0IGhpdCBieSBhIGxvZyBJL08gZXJyb3IgYW5kIG5lZWQgdG8KKyAqIHNodXRkb3duLiBBY3R1YWxseSwgaW4gcHJhY3RpY2UsIGV2ZW4gd2hlbiB3ZSBkaWRuJ3QgZ2V0IGEgbG9nIGVycm9yLAorICogd2UgdHJhbnNpdGlvbiB0aGUgaWNsb2dzIHRvIElPRVJST1Igc3RhdGUgKmFmdGVyKiBmbHVzaGluZyBhbGwgZXhpc3RpbmcKKyAqIGljbG9ncyB0byBkaXNrLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhbnltb3JlIG5ldyB0cmFuc2FjdGlvbnMgdG8gYmUKKyAqIHN0YXJ0ZWQgb3IgY29tcGxldGVkIGFmdGVyd2FyZHMuCisgKi8KK1NUQVRJQyBpbnQKK3hsb2dfYmRzdHJhdCgKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQoreworCXN0cnVjdCB4bG9nX2luX2NvcmUJKmljbG9nOworCisJaWNsb2cgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGxvZ19pbl9jb3JlX3QgKik7CisJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikgeworCQlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOworCQlYRlNfQlVGX1NUQUxFKGJwKTsKKwkJeGZzX2Jpb2RvbmUoYnApOworCQkvKgorCQkgKiBJdCB3b3VsZCBzZWVtIGxvZ2ljYWwgdG8gcmV0dXJuIEVJTyBoZXJlLCBidXQgd2UgcmVseSBvbgorCQkgKiB0aGUgbG9nIHN0YXRlIG1hY2hpbmUgdG8gcHJvcGFnYXRlIEkvTyBlcnJvcnMgaW5zdGVhZCBvZgorCQkgKiBkb2luZyBpdCBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJYnAtPmJfZmxhZ3MgfD0gX1hCRl9SVU5fUVVFVUVTOworCXhmc19idWZfaW9yZXF1ZXN0KGJwKTsKKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIEZsdXNoIG91dCB0aGUgaW4tY29yZSBsb2cgKGljbG9nKSB0byB0aGUgb24tZGlzayBsb2cgaW4gYW4gYXN5bmNocm9ub3VzIApAQCAtMTQ2Miw3ICsxMzk3LDcgQEAKIAkgKi8KIAlYRlNfQlVGX1dSSVRFKGJwKTsKIAotCWlmICgoZXJyb3IgPSBYRlNfYndyaXRlKGJwKSkpIHsKKwlpZiAoKGVycm9yID0geGxvZ19iZHN0cmF0KGJwKSkpIHsKIAkJeGZzX2lvZXJyb3JfYWxlcnQoInhsb2dfc3luYyIsIGxvZy0+bF9tcCwgYnAsCiAJCQkJICBYRlNfQlVGX0FERFIoYnApKTsKIAkJcmV0dXJuIGVycm9yOwpAQCAtMTUwMiw3ICsxNDM3LDcgQEAKIAkJLyogYWNjb3VudCBmb3IgaW50ZXJuYWwgbG9nIHdoaWNoIGRvZXNuJ3Qgc3RhcnQgYXQgYmxvY2sgIzAgKi8KIAkJWEZTX0JVRl9TRVRfQUREUihicCwgWEZTX0JVRl9BRERSKGJwKSArIGxvZy0+bF9sb2dCQnN0YXJ0KTsKIAkJWEZTX0JVRl9XUklURShicCk7Ci0JCWlmICgoZXJyb3IgPSBYRlNfYndyaXRlKGJwKSkpIHsKKwkJaWYgKChlcnJvciA9IHhsb2dfYmRzdHJhdChicCkpKSB7CiAJCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19zeW5jIChzcGxpdCkiLCBsb2ctPmxfbXAsCiAJCQkJCSAgYnAsIFhGU19CVUZfQUREUihicCkpOwogCQkJcmV0dXJuIGVycm9yOwpAQCAtMjg1NCw3ICsyNzg5LDYgQEAKIAlsb2ctPmxfaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKIH0JLyogeGxvZ19zdGF0ZV9zd2l0Y2hfaWNsb2dzICovCiAKLQogLyoKICAqIFdyaXRlIG91dCBhbGwgZGF0YSBpbiB0aGUgaW4tY29yZSBsb2cgYXMgb2YgdGhpcyBleGFjdCBtb21lbnQgaW4gdGltZS4KICAqCkBAIC0yODgyLDExICsyODE2LDE3IEBACiAgKgkgICBiKSB3aGVuIHdlIHJldHVybiBmcm9tIGZsdXNoaW5nIG91dCB0aGlzIGljbG9nLCBpdCBpcyBzdGlsbAogICoJCW5vdCBpbiB0aGUgYWN0aXZlIG5vciBkaXJ0eSBzdGF0ZS4KICAqLwotU1RBVElDIGludAoteGxvZ19zdGF0ZV9zeW5jX2FsbCh4bG9nX3QgKmxvZywgdWludCBmbGFncywgaW50ICpsb2dfZmx1c2hlZCkKK2ludAorX3hmc19sb2dfZm9yY2UoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJdWludAkJCWZsYWdzLAorCWludAkJCSpsb2dfZmx1c2hlZCkKIHsKLQl4bG9nX2luX2NvcmVfdAkqaWNsb2c7Ci0JeGZzX2xzbl90CWxzbjsKKwlzdHJ1Y3QgbG9nCQkqbG9nID0gbXAtPm1fbG9nOworCXN0cnVjdCB4bG9nX2luX2NvcmUJKmljbG9nOworCXhmc19sc25fdAkJbHNuOworCisJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2UpOwogCiAJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIApAQCAtMjkzMiw3ICsyODcyLDkgQEAKIAogCQkJCWlmICh4bG9nX3N0YXRlX3JlbGVhc2VfaWNsb2cobG9nLCBpY2xvZykpCiAJCQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJCQkqbG9nX2ZsdXNoZWQgPSAxOworCisJCQkJaWYgKGxvZ19mbHVzaGVkKQorCQkJCQkqbG9nX2ZsdXNoZWQgPSAxOwogCQkJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCQkJaWYgKGJlNjRfdG9fY3B1KGljbG9nLT5pY19oZWFkZXIuaF9sc24pID09IGxzbiAmJgogCQkJCSAgICBpY2xvZy0+aWNfc3RhdGUgIT0gWExPR19TVEFURV9ESVJUWSkKQEAgLTI5NzYsMTkgKzI5MTgsMzcgQEAKIAkJICovCiAJCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0JCSpsb2dfZmx1c2hlZCA9IDE7Ci0KKwkJaWYgKGxvZ19mbHVzaGVkKQorCQkJKmxvZ19mbHVzaGVkID0gMTsKIAl9IGVsc2UgewogCiBub19zbGVlcDoKIAkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCX0KIAlyZXR1cm4gMDsKLX0JLyogeGxvZ19zdGF0ZV9zeW5jX2FsbCAqLwotCit9CiAKIC8qCi0gKiBVc2VkIGJ5IGNvZGUgd2hpY2ggaW1wbGVtZW50cyBzeW5jaHJvbm91cyBsb2cgZm9yY2VzLgorICogV3JhcHBlciBmb3IgX3hmc19sb2dfZm9yY2UoKSwgdG8gYmUgdXNlZCB3aGVuIGNhbGxlciBkb2Vzbid0IGNhcmUKKyAqIGFib3V0IGVycm9ycyBvciB3aGV0aGVyIHRoZSBsb2cgd2FzIGZsdXNoZWQgb3Igbm90LiBUaGlzIGlzIHRoZSBub3JtYWwKKyAqIGludGVyZmFjZSB0byB1c2Ugd2hlbiB0cnlpbmcgdG8gdW5waW4gaXRlbXMgb3IgbW92ZSB0aGUgbG9nIGZvcndhcmQuCisgKi8KK3ZvaWQKK3hmc19sb2dfZm9yY2UoCisJeGZzX21vdW50X3QJKm1wLAorCXVpbnQJCWZsYWdzKQoreworCWludAllcnJvcjsKKworCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsIGZsYWdzLCBOVUxMKTsKKwlpZiAoZXJyb3IpIHsKKwkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsICJ4ZnNfbG9nX2ZvcmNlOiAiCisJCQkiZXJyb3IgJWQgcmV0dXJuZWQuIiwgZXJyb3IpOworCX0KK30KKworLyoKKyAqIEZvcmNlIHRoZSBpbi1jb3JlIGxvZyB0byBkaXNrIGZvciBhIHNwZWNpZmljIExTTi4KICAqCiAgKiBGaW5kIGluLWNvcmUgbG9nIHdpdGggbHNuLgogICoJSWYgaXQgaXMgaW4gdGhlIERJUlRZIHN0YXRlLCBqdXN0IHJldHVybi4KQEAgLTI5OTYsMTA5ICsyOTU2LDE0MiBAQAogICoJCXN0YXRlIGFuZCBnbyB0byBzbGVlcCBvciByZXR1cm4uCiAgKglJZiBpdCBpcyBpbiBhbnkgb3RoZXIgc3RhdGUsIGdvIHRvIHNsZWVwIG9yIHJldHVybi4KICAqCi0gKiBJZiBmaWxlc3lzdGVtIGFjdGl2aXR5IGdvZXMgdG8gemVybywgdGhlIGljbG9nIHdpbGwgZ2V0IGZsdXNoZWQgb25seSBieQotICogYmRmbHVzaCgpLgorICogU3luY2hyb25vdXMgZm9yY2VzIGFyZSBpbXBsZW1lbnRlZCB3aXRoIGEgc2lnbmFsIHZhcmlhYmxlLiBBbGwgY2FsbGVycworICogdG8gZm9yY2UgYSBnaXZlbiBsc24gdG8gZGlzayB3aWxsIHdhaXQgb24gYSB0aGUgc3YgYXR0YWNoZWQgdG8gdGhlCisgKiBzcGVjaWZpYyBpbi1jb3JlIGxvZy4gIFdoZW4gZ2l2ZW4gaW4tY29yZSBsb2cgZmluYWxseSBjb21wbGV0ZXMgaXRzCisgKiB3cml0ZSB0byBkaXNrLCB0aGF0IHRocmVhZCB3aWxsIHdha2UgdXAgYWxsIHRocmVhZHMgd2FpdGluZyBvbiB0aGUKKyAqIHN2LgogICovCi1TVEFUSUMgaW50Ci14bG9nX3N0YXRlX3N5bmMoeGxvZ190CSAgKmxvZywKLQkJeGZzX2xzbl90IGxzbiwKLQkJdWludAkgIGZsYWdzLAotCQlpbnQJICAqbG9nX2ZsdXNoZWQpCitpbnQKK194ZnNfbG9nX2ZvcmNlX2xzbigKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwl4ZnNfbHNuX3QJCWxzbiwKKwl1aW50CQkJZmxhZ3MsCisJaW50CQkJKmxvZ19mbHVzaGVkKQogewotICAgIHhsb2dfaW5fY29yZV90CSppY2xvZzsKLSAgICBpbnQJCQlhbHJlYWR5X3NsZXB0ID0gMDsKKwlzdHJ1Y3QgbG9nCQkqbG9nID0gbXAtPm1fbG9nOworCXN0cnVjdCB4bG9nX2luX2NvcmUJKmljbG9nOworCWludAkJCWFscmVhZHlfc2xlcHQgPSAwOworCisJQVNTRVJUKGxzbiAhPSAwKTsKKworCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlKTsKIAogdHJ5X2FnYWluOgotICAgIHNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7Ci0gICAgaWNsb2cgPSBsb2ctPmxfaWNsb2c7Ci0KLSAgICBpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7Ci0JICAgIHNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQkgICAgcmV0dXJuIFhGU19FUlJPUihFSU8pOwotICAgIH0KLQotICAgIGRvIHsKLQlpZiAoYmU2NF90b19jcHUoaWNsb2ctPmljX2hlYWRlci5oX2xzbikgIT0gbHNuKSB7Ci0JCWljbG9nID0gaWNsb2ctPmljX25leHQ7Ci0JCWNvbnRpbnVlOwotCX0KLQotCWlmIChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9ESVJUWSkgeworCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJaWNsb2cgPSBsb2ctPmxfaWNsb2c7CisJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikgewogCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJfQogCi0JaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0FDVElWRSkgewotCQkvKgotCQkgKiBXZSBzbGVlcCBoZXJlIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBzbGVwdCAoZS5nLgotCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIGxvb2tlZCBhdCB0aGUgY29ycmVjdAotCQkgKiBpY2xvZyBidWYpIGFuZCB0aGUgYnVmZmVyIGJlZm9yZSB1cyBpcyBnb2luZyB0bwotCQkgKiBiZSBzeW5jJ2VkLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaWYgd2UKLQkJICogYXJlIGRvaW5nIHN5bmMgdHJhbnNhY3Rpb25zIGhlcmUsIGJ5IHdhaXRpbmcgZm9yCi0JCSAqIHRoZSBwcmV2aW91cyBJL08gdG8gY29tcGxldGUsIHdlIGNhbiBhbGxvdyBhIGZldwotCQkgKiBtb3JlIHRyYW5zYWN0aW9ucyBpbnRvIHRoaXMgaWNsb2cgYmVmb3JlIHdlIGNsb3NlCi0JCSAqIGl0IGRvd24uCi0JCSAqCi0JCSAqIE90aGVyd2lzZSwgd2UgbWFyayB0aGUgYnVmZmVyIFdBTlRfU1lOQywgYW5kIGJ1bXAKLQkJICogdXAgdGhlIHJlZmNudCBzbyB3ZSBjYW4gcmVsZWFzZSB0aGUgbG9nICh3aGljaCBkcm9wcwotCQkgKiB0aGUgcmVmIGNvdW50KS4gIFRoZSBzdGF0ZSBzd2l0Y2gga2VlcHMgbmV3IHRyYW5zYWN0aW9uCi0JCSAqIGNvbW1pdHMgZnJvbSB1c2luZyB0aGlzIGJ1ZmZlci4gIFdoZW4gdGhlIGN1cnJlbnQgY29tbWl0cwotCQkgKiBmaW5pc2ggd3JpdGluZyBpbnRvIHRoZSBidWZmZXIsIHRoZSByZWZjb3VudCB3aWxsIGRyb3AgdG8KLQkJICogemVybyBhbmQgdGhlIGJ1ZmZlciB3aWxsIGdvIG91dCB0aGVuLgotCQkgKi8KLQkJaWYgKCFhbHJlYWR5X3NsZXB0ICYmCi0JCSAgICAoaWNsb2ctPmljX3ByZXYtPmljX3N0YXRlICYgKFhMT0dfU1RBVEVfV0FOVF9TWU5DIHwKLQkJCQkJCSBYTE9HX1NUQVRFX1NZTkNJTkcpKSkgewotCQkJQVNTRVJUKCEoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSk7Ci0JCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZV9zbGVlcCk7Ci0JCQlzdl93YWl0KCZpY2xvZy0+aWNfcHJldi0+aWNfd3JpdGVfd2FpdCwgUFNXUCwKLQkJCQkmbG9nLT5sX2ljbG9nbG9jaywgcyk7Ci0JCQkqbG9nX2ZsdXNoZWQgPSAxOwotCQkJYWxyZWFkeV9zbGVwdCA9IDE7Ci0JCQlnb3RvIHRyeV9hZ2FpbjsKLQkJfSBlbHNlIHsKKwlkbyB7CisJCWlmIChiZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSAhPSBsc24pIHsKKwkJCWljbG9nID0gaWNsb2ctPmljX25leHQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9ESVJUWSkgeworCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfQUNUSVZFKSB7CisJCQkvKgorCQkJICogV2Ugc2xlZXAgaGVyZSBpZiB3ZSBoYXZlbid0IGFscmVhZHkgc2xlcHQgKGUuZy4KKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgbG9va2VkIGF0IHRoZSBjb3JyZWN0CisJCQkgKiBpY2xvZyBidWYpIGFuZCB0aGUgYnVmZmVyIGJlZm9yZSB1cyBpcyBnb2luZyB0bworCQkJICogYmUgc3luYydlZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGlmIHdlCisJCQkgKiBhcmUgZG9pbmcgc3luYyB0cmFuc2FjdGlvbnMgaGVyZSwgYnkgd2FpdGluZyBmb3IKKwkJCSAqIHRoZSBwcmV2aW91cyBJL08gdG8gY29tcGxldGUsIHdlIGNhbiBhbGxvdyBhIGZldworCQkJICogbW9yZSB0cmFuc2FjdGlvbnMgaW50byB0aGlzIGljbG9nIGJlZm9yZSB3ZSBjbG9zZQorCQkJICogaXQgZG93bi4KKwkJCSAqCisJCQkgKiBPdGhlcndpc2UsIHdlIG1hcmsgdGhlIGJ1ZmZlciBXQU5UX1NZTkMsIGFuZCBidW1wCisJCQkgKiB1cCB0aGUgcmVmY250IHNvIHdlIGNhbiByZWxlYXNlIHRoZSBsb2cgKHdoaWNoCisJCQkgKiBkcm9wcyB0aGUgcmVmIGNvdW50KS4gIFRoZSBzdGF0ZSBzd2l0Y2gga2VlcHMgbmV3CisJCQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIGZyb20gdXNpbmcgdGhpcyBidWZmZXIuICBXaGVuCisJCQkgKiB0aGUgY3VycmVudCBjb21taXRzIGZpbmlzaCB3cml0aW5nIGludG8gdGhlIGJ1ZmZlciwKKwkJCSAqIHRoZSByZWZjb3VudCB3aWxsIGRyb3AgdG8gemVybyBhbmQgdGhlIGJ1ZmZlciB3aWxsCisJCQkgKiBnbyBvdXQgdGhlbi4KKwkJCSAqLworCQkJaWYgKCFhbHJlYWR5X3NsZXB0ICYmCisJCQkgICAgKGljbG9nLT5pY19wcmV2LT5pY19zdGF0ZSAmCisJCQkgICAgIChYTE9HX1NUQVRFX1dBTlRfU1lOQyB8IFhMT0dfU1RBVEVfU1lOQ0lORykpKSB7CisJCQkJQVNTRVJUKCEoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSk7CisKKwkJCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZV9zbGVlcCk7CisKKwkJCQlzdl93YWl0KCZpY2xvZy0+aWNfcHJldi0+aWNfd3JpdGVfd2FpdCwKKwkJCQkJUFNXUCwgJmxvZy0+bF9pY2xvZ2xvY2ssIHMpOworCQkJCWlmIChsb2dfZmx1c2hlZCkKKwkJCQkJKmxvZ19mbHVzaGVkID0gMTsKKwkJCQlhbHJlYWR5X3NsZXB0ID0gMTsKKwkJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJCX0KIAkJCWF0b21pY19pbmMoJmljbG9nLT5pY19yZWZjbnQpOwogCQkJeGxvZ19zdGF0ZV9zd2l0Y2hfaWNsb2dzKGxvZywgaWNsb2csIDApOwogCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQkJaWYgKHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhsb2csIGljbG9nKSkKIAkJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0JCQkqbG9nX2ZsdXNoZWQgPSAxOworCQkJaWYgKGxvZ19mbHVzaGVkKQorCQkJCSpsb2dfZmx1c2hlZCA9IDE7CiAJCQlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQl9Ci0JfQogCi0JaWYgKChmbGFncyAmIFhGU19MT0dfU1lOQykgJiYgLyogc2xlZXAgKi8KLQkgICAgIShpY2xvZy0+aWNfc3RhdGUgJiAoWExPR19TVEFURV9BQ1RJVkUgfCBYTE9HX1NUQVRFX0RJUlRZKSkpIHsKKwkJaWYgKChmbGFncyAmIFhGU19MT0dfU1lOQykgJiYgLyogc2xlZXAgKi8KKwkJICAgICEoaWNsb2ctPmljX3N0YXRlICYKKwkJICAgICAgKFhMT0dfU1RBVEVfQUNUSVZFIHwgWExPR19TVEFURV9ESVJUWSkpKSB7CisJCQkvKgorCQkJICogRG9uJ3Qgd2FpdCBvbiBjb21wbGV0aW9uIGlmIHdlIGtub3cgdGhhdCB3ZSd2ZQorCQkJICogZ290dGVuIGEgbG9nIHdyaXRlIGVycm9yLgorCQkJICovCisJCQlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7CisJCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOworCQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKKwkJCX0KKwkJCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlX3NsZWVwKTsKKwkJCXN2X3dhaXQoJmljbG9nLT5pY19mb3JjZV93YWl0LCBQU1dQLCAmbG9nLT5sX2ljbG9nbG9jaywgcyk7CisJCQkvKgorCQkJICogTm8gbmVlZCB0byBncmFiIHRoZSBsb2cgbG9jayBoZXJlIHNpbmNlIHdlJ3JlCisJCQkgKiBvbmx5IGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiBFSU8KKwkJCSAqIGFuZCB0aGUgbWVtb3J5IHJlYWQgc2hvdWxkIGJlIGF0b21pYy4KKwkJCSAqLworCQkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikKKwkJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKLQkJLyoKLQkJICogRG9uJ3Qgd2FpdCBvbiBjb21wbGV0aW9uIGlmIHdlIGtub3cgdGhhdCB3ZSd2ZQotCQkgKiBnb3R0ZW4gYSBsb2cgd3JpdGUgZXJyb3IuCi0JCSAqLwotCQlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7CisJCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkJKmxvZ19mbHVzaGVkID0gMTsKKwkJfSBlbHNlIHsJCS8qIGp1c3QgcmV0dXJuICovCiAJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7Ci0JCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJCX0KLQkJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2Vfc2xlZXApOwotCQlzdl93YWl0KCZpY2xvZy0+aWNfZm9yY2Vfd2FpdCwgUFNXUCwgJmxvZy0+bF9pY2xvZ2xvY2ssIHMpOwotCQkvKgotCQkgKiBObyBuZWVkIHRvIGdyYWIgdGhlIGxvZyBsb2NrIGhlcmUgc2luY2Ugd2UncmUKLQkJICogb25seSBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gRUlPCi0JCSAqIGFuZCB0aGUgbWVtb3J5IHJlYWQgc2hvdWxkIGJlIGF0b21pYy4KLQkJICovCi0JCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0JCSpsb2dfZmx1c2hlZCA9IDE7Ci0JfSBlbHNlIHsJCS8qIGp1c3QgcmV0dXJuICovCi0JCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQl9CisKKwkJcmV0dXJuIDA7CisJfSB3aGlsZSAoaWNsb2cgIT0gbG9nLT5sX2ljbG9nKTsKKworCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAlyZXR1cm4gMDsKK30KIAotICAgIH0gd2hpbGUgKGljbG9nICE9IGxvZy0+bF9pY2xvZyk7CisvKgorICogV3JhcHBlciBmb3IgX3hmc19sb2dfZm9yY2VfbHNuKCksIHRvIGJlIHVzZWQgd2hlbiBjYWxsZXIgZG9lc24ndCBjYXJlCisgKiBhYm91dCBlcnJvcnMgb3Igd2hldGhlciB0aGUgbG9nIHdhcyBmbHVzaGVkIG9yIG5vdC4gVGhpcyBpcyB0aGUgbm9ybWFsCisgKiBpbnRlcmZhY2UgdG8gdXNlIHdoZW4gdHJ5aW5nIHRvIHVucGluIGl0ZW1zIG9yIG1vdmUgdGhlIGxvZyBmb3J3YXJkLgorICovCit2b2lkCit4ZnNfbG9nX2ZvcmNlX2xzbigKKwl4ZnNfbW91bnRfdAkqbXAsCisJeGZzX2xzbl90CWxzbiwKKwl1aW50CQlmbGFncykKK3sKKwlpbnQJZXJyb3I7CiAKLSAgICBzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7Ci0gICAgcmV0dXJuIDA7Ci19CS8qIHhsb2dfc3RhdGVfc3luYyAqLwotCisJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZV9sc24obXAsIGxzbiwgZmxhZ3MsIE5VTEwpOworCWlmIChlcnJvcikgeworCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwgInhmc19sb2dfZm9yY2U6ICIKKwkJCSJlcnJvciAlZCByZXR1cm5lZC4iLCBlcnJvcik7CisJfQorfQogCiAvKgogICogQ2FsbGVkIHdoZW4gd2Ugd2FudCB0byBtYXJrIHRoZSBjdXJyZW50IGljbG9nIGFzIGJlaW5nIHJlYWR5IHRvIHN5bmMgdG8KQEAgLTM0NjMsNyArMzQ1Niw2IEBACiAJeGxvZ190aWNrZXRfdAkqdGljOwogCXhsb2dfdAkJKmxvZzsKIAlpbnQJCXJldHZhbDsKLQlpbnQJCWR1bW15OwogCiAJbG9nID0gbXAtPm1fbG9nOwogCkBAIC0zNTM3LDEzICszNTI5LDE0IEBACiAJfQogCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CiAKLQlpZiAoISAobG9nLT5sX2ljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikpIHsKKwlpZiAoIShsb2ctPmxfaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSkgewogCQlBU1NFUlQoIWxvZ2Vycm9yKTsKIAkJLyoKIAkJICogRm9yY2UgdGhlIGluY29yZSBsb2dzIHRvIGRpc2sgYmVmb3JlIHNodXR0aW5nIHRoZQogCQkgKiBsb2cgZG93biBjb21wbGV0ZWx5LgogCQkgKi8KLQkJeGxvZ19zdGF0ZV9zeW5jX2FsbChsb2csIFhGU19MT0dfRk9SQ0V8WEZTX0xPR19TWU5DLCAmZHVtbXkpOworCQlfeGZzX2xvZ19mb3JjZShtcCwgWEZTX0xPR19TWU5DLCBOVUxMKTsKKwogCQlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQlyZXR2YWwgPSB4bG9nX3N0YXRlX2lvZXJyb3IobG9nKTsKIAkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuaCBiL2ZzL3hmcy94ZnNfbG9nLmgKaW5kZXggZDBjOWJhYS4uNzA3NGJlOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuaAorKysgYi9mcy94ZnMveGZzX2xvZy5oCkBAIC03MCwxNCArNzAsOCBAQAogICogRmxhZ3MgdG8geGZzX2xvZ19mb3JjZSgpCiAgKgogICoJWEZTX0xPR19TWU5DOglTeW5jaHJvbm91cyBmb3JjZSBpbi1jb3JlIGxvZyB0byBkaXNrCi0gKglYRlNfTE9HX0ZPUkNFOglTdGFydCBpbi1jb3JlIGxvZyB3cml0ZSBub3cuCi0gKglYRlNfTE9HX1VSR0U6CVN0YXJ0IHdyaXRlIHdpdGhpbiBzb21lIHdpbmRvdyBvZiB0aW1lLgotICoKLSAqIE5vdGU6IEVpdGhlciBYRlNfTE9HX0ZPUkNFIG9yIFhGU19MT0dfVVJHRSBtdXN0IGJlIHNldC4KICAqLwogI2RlZmluZSBYRlNfTE9HX1NZTkMJCTB4MQotI2RlZmluZSBYRlNfTE9HX0ZPUkNFCQkweDIKLSNkZWZpbmUgWEZTX0xPR19VUkdFCQkweDQKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIApAQCAtMTEwLDEwICsxMDQsOCBAQAogI2RlZmluZSBYTE9HX1JFR19UWVBFX1RSQU5TSERSCQkxOQogI2RlZmluZSBYTE9HX1JFR19UWVBFX01BWAkJMTkKIAotI2RlZmluZSBYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCB0KSAoKHZlY3ApLT5pX3R5cGUgPSAodCkpCi0KIHR5cGVkZWYgc3RydWN0IHhmc19sb2dfaW92ZWMgewotCXhmc19jYWRkcl90CQlpX2FkZHI7CQkvKiBiZWdpbm5pbmcgYWRkcmVzcyBvZiByZWdpb24gKi8KKwl4ZnNfY2FkZHJfdAlpX2FkZHI7CQkvKiBiZWdpbm5pbmcgYWRkcmVzcyBvZiByZWdpb24gKi8KIAlpbnQJCWlfbGVuOwkJLyogbGVuZ3RoIGluIGJ5dGVzIG9mIHJlZ2lvbiAqLwogCXVpbnQJCWlfdHlwZTsJCS8qIHR5cGUgb2YgcmVnaW9uICovCiB9IHhmc19sb2dfaW92ZWNfdDsKQEAgLTE0MCwxMiArMTMyLDE3IEBACiAJCSAgICAgICB2b2lkCQkqKmljbG9nLAogCQkgICAgICAgdWludAkJZmxhZ3MpOwogaW50CSAgX3hmc19sb2dfZm9yY2Uoc3RydWN0IHhmc19tb3VudCAqbXAsCi0JCQkgeGZzX2xzbl90CWxzbiwKIAkJCSB1aW50CQlmbGFncywKIAkJCSBpbnQJCSpsb2dfZm9yY2VkKTsKIHZvaWQJICB4ZnNfbG9nX2ZvcmNlKHN0cnVjdCB4ZnNfbW91bnQJKm1wLAotCQkJeGZzX2xzbl90CQlsc24sCiAJCQl1aW50CQkJZmxhZ3MpOworaW50CSAgX3hmc19sb2dfZm9yY2VfbHNuKHN0cnVjdCB4ZnNfbW91bnQgKm1wLAorCQkJICAgICB4ZnNfbHNuX3QJCWxzbiwKKwkJCSAgICAgdWludAkJZmxhZ3MsCisJCQkgICAgIGludAkJKmxvZ19mb3JjZWQpOwordm9pZAkgIHhmc19sb2dfZm9yY2VfbHNuKHN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCQkJICAgIHhmc19sc25fdAkJbHNuLAorCQkJICAgIHVpbnQJCWZsYWdzKTsKIGludAkgIHhmc19sb2dfbW91bnQoc3RydWN0IHhmc19tb3VudAkqbXAsCiAJCQlzdHJ1Y3QgeGZzX2J1ZnRhcmcJKmxvZ190YXJnZXQsCiAJCQl4ZnNfZGFkZHJfdAkJc3RhcnRfYmxvY2ssCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19wcml2LmggYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKaW5kZXggZDU1NjYyZC4uZmQwMmExOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcHJpdi5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaApAQCAtNDQzLDE0ICs0NDMsOSBAQAogCiAvKiBjb21tb24gcm91dGluZXMgKi8KIGV4dGVybiB4ZnNfbHNuX3QgeGxvZ19hc3NpZ25fdGFpbF9sc24oc3RydWN0IHhmc19tb3VudCAqbXApOwotZXh0ZXJuIGludAkgeGxvZ19maW5kX3RhaWwoeGxvZ190CSpsb2csCi0JCQkJeGZzX2RhZGRyX3QgKmhlYWRfYmxrLAotCQkJCXhmc19kYWRkcl90ICp0YWlsX2Jsayk7CiBleHRlcm4gaW50CSB4bG9nX3JlY292ZXIoeGxvZ190ICpsb2cpOwogZXh0ZXJuIGludAkgeGxvZ19yZWNvdmVyX2ZpbmlzaCh4bG9nX3QgKmxvZyk7CiBleHRlcm4gdm9pZAkgeGxvZ19wYWNrX2RhdGEoeGxvZ190ICpsb2csIHhsb2dfaW5fY29yZV90ICppY2xvZywgaW50KTsKLWV4dGVybiBzdHJ1Y3QgeGZzX2J1ZiAqeGxvZ19nZXRfYnAoeGxvZ190ICosIGludCk7Ci1leHRlcm4gdm9pZAkgeGxvZ19wdXRfYnAoc3RydWN0IHhmc19idWYgKik7CiAKIGV4dGVybiBrbWVtX3pvbmVfdAkqeGZzX2xvZ190aWNrZXRfem9uZTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCmluZGV4IDY5YWMyZTUuLjIyZTZlZmQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYworKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKQEAgLTUwLDggKzUwLDYgQEAKIAogU1RBVElDIGludAl4bG9nX2ZpbmRfemVyb2VkKHhsb2dfdCAqLCB4ZnNfZGFkZHJfdCAqKTsKIFNUQVRJQyBpbnQJeGxvZ19jbGVhcl9zdGFsZV9ibG9ja3MoeGxvZ190ICosIHhmc19sc25fdCk7Ci1TVEFUSUMgdm9pZAl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EoeGxvZ19yZWNvdmVyX2l0ZW1fdCAqKnEsCi0JCQkJCSAgICAgICB4bG9nX3JlY292ZXJfaXRlbV90ICppdGVtKTsKICNpZiBkZWZpbmVkKERFQlVHKQogU1RBVElDIHZvaWQJeGxvZ19yZWNvdmVyX2NoZWNrX3N1bW1hcnkoeGxvZ190ICopOwogI2Vsc2UKQEAgLTY4LDcgKzY2LDcgQEAKIAkoKGJicyArIChsb2cpLT5sX3NlY3RiYl9tYXNrICsgMSkgJiB+KGxvZyktPmxfc2VjdGJiX21hc2spIDogKGJicykgKQogI2RlZmluZSBYTE9HX1NFQ1RPUl9ST1VORERPV05fQkxLTk8obG9nLCBibm8pCSgoYm5vKSAmIH4obG9nKS0+bF9zZWN0YmJfbWFzaykKIAoteGZzX2J1Zl90ICoKK1NUQVRJQyB4ZnNfYnVmX3QgKgogeGxvZ19nZXRfYnAoCiAJeGxvZ190CQkqbG9nLAogCWludAkJbmJibGtzKQpAQCAtODgsNyArODYsNyBAQAogCXJldHVybiB4ZnNfYnVmX2dldF9ub2FkZHIoQkJUT0IobmJibGtzKSwgbG9nLT5sX21wLT5tX2xvZ2Rldl90YXJncCk7CiB9CiAKLXZvaWQKK1NUQVRJQyB2b2lkCiB4bG9nX3B1dF9icCgKIAl4ZnNfYnVmX3QJKmJwKQogewpAQCAtODA1LDcgKzgwMyw3IEBACiAgKiBXZSBjb3VsZCBzcGVlZCB1cCBzZWFyY2ggYnkgdXNpbmcgY3VycmVudCBoZWFkX2JsayBidWZmZXIsIGJ1dCBpdCBpcyBub3QKICAqIGF2YWlsYWJsZS4KICAqLwotaW50CitTVEFUSUMgaW50CiB4bG9nX2ZpbmRfdGFpbCgKIAl4bG9nX3QJCQkqbG9nLAogCXhmc19kYWRkcl90CQkqaGVhZF9ibGssCkBAIC0xMzY3LDM2ICsxMzY1LDQ1IEBACiAKIFNUQVRJQyB4bG9nX3JlY292ZXJfdCAqCiB4bG9nX3JlY292ZXJfZmluZF90aWQoCi0JeGxvZ19yZWNvdmVyX3QJCSpxLAorCXN0cnVjdCBobGlzdF9oZWFkCSpoZWFkLAogCXhsb2dfdGlkX3QJCXRpZCkKIHsKLQl4bG9nX3JlY292ZXJfdAkJKnAgPSBxOworCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnM7CisJc3RydWN0IGhsaXN0X25vZGUJKm47CiAKLQl3aGlsZSAocCAhPSBOVUxMKSB7Ci0JCWlmIChwLT5yX2xvZ190aWQgPT0gdGlkKQotCQkgICAgYnJlYWs7Ci0JCXAgPSBwLT5yX25leHQ7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsIG4sIGhlYWQsIHJfbGlzdCkgeworCQlpZiAodHJhbnMtPnJfbG9nX3RpZCA9PSB0aWQpCisJCQlyZXR1cm4gdHJhbnM7CiAJfQotCXJldHVybiBwOworCXJldHVybiBOVUxMOwogfQogCiBTVEFUSUMgdm9pZAoteGxvZ19yZWNvdmVyX3B1dF9oYXNocSgKLQl4bG9nX3JlY292ZXJfdAkJKipxLAotCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnMpCit4bG9nX3JlY292ZXJfbmV3X3RpZCgKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkqaGVhZCwKKwl4bG9nX3RpZF90CQl0aWQsCisJeGZzX2xzbl90CQlsc24pCiB7Ci0JdHJhbnMtPnJfbmV4dCA9ICpxOwotCSpxID0gdHJhbnM7CisJeGxvZ19yZWNvdmVyX3QJCSp0cmFuczsKKworCXRyYW5zID0ga21lbV96YWxsb2Moc2l6ZW9mKHhsb2dfcmVjb3Zlcl90KSwgS01fU0xFRVApOworCXRyYW5zLT5yX2xvZ190aWQgICA9IHRpZDsKKwl0cmFucy0+cl9sc24JICAgPSBsc247CisJSU5JVF9MSVNUX0hFQUQoJnRyYW5zLT5yX2l0ZW1xKTsKKworCUlOSVRfSExJU1RfTk9ERSgmdHJhbnMtPnJfbGlzdCk7CisJaGxpc3RfYWRkX2hlYWQoJnRyYW5zLT5yX2xpc3QsIGhlYWQpOwogfQogCiBTVEFUSUMgdm9pZAogeGxvZ19yZWNvdmVyX2FkZF9pdGVtKAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKippdGVtcSkKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpoZWFkKQogewogCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW07CiAKIAlpdGVtID0ga21lbV96YWxsb2Moc2l6ZW9mKHhsb2dfcmVjb3Zlcl9pdGVtX3QpLCBLTV9TTEVFUCk7Ci0JeGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2JhY2txKGl0ZW1xLCBpdGVtKTsKKwlJTklUX0xJU1RfSEVBRCgmaXRlbS0+cmlfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmaXRlbS0+cmlfbGlzdCwgaGVhZCk7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTE0MDksOCArMTQxNiw3IEBACiAJeGZzX2NhZGRyX3QJCXB0ciwgb2xkX3B0cjsKIAlpbnQJCQlvbGRfbGVuOwogCi0JaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWlmIChpdGVtID09IE5VTEwpIHsKKwlpZiAobGlzdF9lbXB0eSgmdHJhbnMtPnJfaXRlbXEpKSB7CiAJCS8qIGZpbmlzaCBjb3B5aW5nIHJlc3Qgb2YgdHJhbnMgaGVhZGVyICovCiAJCXhsb2dfcmVjb3Zlcl9hZGRfaXRlbSgmdHJhbnMtPnJfaXRlbXEpOwogCQlwdHIgPSAoeGZzX2NhZGRyX3QpICZ0cmFucy0+cl90aGVhZGVyICsKQEAgLTE0MTgsNyArMTQyNCw4IEBACiAJCW1lbWNweShwdHIsIGRwLCBsZW4pOyAvKiBkLCBzLCBsICovCiAJCXJldHVybiAwOwogCX0KLQlpdGVtID0gaXRlbS0+cmlfcHJldjsKKwkvKiB0YWtlIHRoZSB0YWlsIGVudHJ5ICovCisJaXRlbSA9IGxpc3RfZW50cnkodHJhbnMtPnJfaXRlbXEucHJldiwgeGxvZ19yZWNvdmVyX2l0ZW1fdCwgcmlfbGlzdCk7CiAKIAlvbGRfcHRyID0gaXRlbS0+cmlfYnVmW2l0ZW0tPnJpX2NudC0xXS5pX2FkZHI7CiAJb2xkX2xlbiA9IGl0ZW0tPnJpX2J1ZltpdGVtLT5yaV9jbnQtMV0uaV9sZW47CkBAIC0xNDU1LDggKzE0NjIsNyBAQAogCiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwotCWl0ZW0gPSB0cmFucy0+cl9pdGVtcTsKLQlpZiAoaXRlbSA9PSBOVUxMKSB7CisJaWYgKGxpc3RfZW1wdHkoJnRyYW5zLT5yX2l0ZW1xKSkgewogCQkvKiB3ZSBuZWVkIHRvIGNhdGNoIGxvZyBjb3JydXB0aW9ucyBoZXJlICovCiAJCWlmICgqKHVpbnQgKilkcCAhPSBYRlNfVFJBTlNfSEVBREVSX01BR0lDKSB7CiAJCQl4bG9nX3dhcm4oIlhGUzogeGxvZ19yZWNvdmVyX2FkZF90b190cmFuczogIgpAQCAtMTQ3NCwxMiArMTQ4MCwxNSBAQAogCW1lbWNweShwdHIsIGRwLCBsZW4pOwogCWluX2YgPSAoeGZzX2lub2RlX2xvZ19mb3JtYXRfdCAqKXB0cjsKIAotCWlmIChpdGVtLT5yaV9wcmV2LT5yaV90b3RhbCAhPSAwICYmCi0JICAgICBpdGVtLT5yaV9wcmV2LT5yaV90b3RhbCA9PSBpdGVtLT5yaV9wcmV2LT5yaV9jbnQpIHsKKwkvKiB0YWtlIHRoZSB0YWlsIGVudHJ5ICovCisJaXRlbSA9IGxpc3RfZW50cnkodHJhbnMtPnJfaXRlbXEucHJldiwgeGxvZ19yZWNvdmVyX2l0ZW1fdCwgcmlfbGlzdCk7CisJaWYgKGl0ZW0tPnJpX3RvdGFsICE9IDAgJiYKKwkgICAgIGl0ZW0tPnJpX3RvdGFsID09IGl0ZW0tPnJpX2NudCkgeworCQkvKiB0YWlsIGl0ZW0gaXMgaW4gdXNlLCBnZXQgYSBuZXcgb25lICovCiAJCXhsb2dfcmVjb3Zlcl9hZGRfaXRlbSgmdHJhbnMtPnJfaXRlbXEpOworCQlpdGVtID0gbGlzdF9lbnRyeSh0cmFucy0+cl9pdGVtcS5wcmV2LAorCQkJCQl4bG9nX3JlY292ZXJfaXRlbV90LCByaV9saXN0KTsKIAl9Ci0JaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWl0ZW0gPSBpdGVtLT5yaV9wcmV2OwogCiAJaWYgKGl0ZW0tPnJpX3RvdGFsID09IDApIHsJCS8qIGZpcnN0IHJlZ2lvbiB0byBiZSBhZGRlZCAqLwogCQlpZiAoaW5fZi0+aWxmX3NpemUgPT0gMCB8fApAQCAtMTUwNCw5NiArMTUxMywyOSBAQAogCXJldHVybiAwOwogfQogCi1TVEFUSUMgdm9pZAoteGxvZ19yZWNvdmVyX25ld190aWQoCi0JeGxvZ19yZWNvdmVyX3QJCSoqcSwKLQl4bG9nX3RpZF90CQl0aWQsCi0JeGZzX2xzbl90CQlsc24pCi17Ci0JeGxvZ19yZWNvdmVyX3QJCSp0cmFuczsKLQotCXRyYW5zID0ga21lbV96YWxsb2Moc2l6ZW9mKHhsb2dfcmVjb3Zlcl90KSwgS01fU0xFRVApOwotCXRyYW5zLT5yX2xvZ190aWQgICA9IHRpZDsKLQl0cmFucy0+cl9sc24JICAgPSBsc247Ci0JeGxvZ19yZWNvdmVyX3B1dF9oYXNocShxLCB0cmFucyk7Ci19Ci0KLVNUQVRJQyBpbnQKLXhsb2dfcmVjb3Zlcl91bmxpbmtfdGlkKAotCXhsb2dfcmVjb3Zlcl90CQkqKnEsCi0JeGxvZ19yZWNvdmVyX3QJCSp0cmFucykKLXsKLQl4bG9nX3JlY292ZXJfdAkJKnRwOwotCWludAkJCWZvdW5kID0gMDsKLQotCUFTU0VSVCh0cmFucyAhPSBOVUxMKTsKLQlpZiAodHJhbnMgPT0gKnEpIHsKLQkJKnEgPSAoKnEpLT5yX25leHQ7Ci0JfSBlbHNlIHsKLQkJdHAgPSAqcTsKLQkJd2hpbGUgKHRwKSB7Ci0JCQlpZiAodHAtPnJfbmV4dCA9PSB0cmFucykgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXRwID0gdHAtPnJfbmV4dDsKLQkJfQotCQlpZiAoIWZvdW5kKSB7Ci0JCQl4bG9nX3dhcm4oCi0JCQkgICAgICJYRlM6IHhsb2dfcmVjb3Zlcl91bmxpbmtfdGlkOiB0cmFucyBub3QgZm91bmQiKTsKLQkJCUFTU0VSVCgwKTsKLQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJfQotCQl0cC0+cl9uZXh0ID0gdHAtPnJfbmV4dC0+cl9uZXh0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotU1RBVElDIHZvaWQKLXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9iYWNrcSgKLQl4bG9nX3JlY292ZXJfaXRlbV90CSoqcSwKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtKQotewotCWlmICgqcSA9PSBOVUxMKSB7Ci0JCWl0ZW0tPnJpX3ByZXYgPSBpdGVtLT5yaV9uZXh0ID0gaXRlbTsKLQkJKnEgPSBpdGVtOwotCX0gZWxzZSB7Ci0JCWl0ZW0tPnJpX25leHQJCT0gKnE7Ci0JCWl0ZW0tPnJpX3ByZXYJCT0gKCpxKS0+cmlfcHJldjsKLQkJKCpxKS0+cmlfcHJldgkJPSBpdGVtOwotCQlpdGVtLT5yaV9wcmV2LT5yaV9uZXh0CT0gaXRlbTsKLQl9Ci19Ci0KLVNUQVRJQyB2b2lkCi14bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fZnJvbnRxKAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKipxLAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0pCi17Ci0JeGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2JhY2txKHEsIGl0ZW0pOwotCSpxID0gaXRlbTsKLX0KLQorLyoKKyAqIFNvcnQgdGhlIGxvZyBpdGVtcyBpbiB0aGUgdHJhbnNhY3Rpb24uIENhbmNlbGxlZCBidWZmZXJzIG5lZWQKKyAqIHRvIGJlIHB1dCBmaXJzdCBzbyB0aGV5IGFyZSBwcm9jZXNzZWQgYmVmb3JlIGFueSBpdGVtcyB0aGF0IG1pZ2h0CisgKiBtb2RpZnkgdGhlIGJ1ZmZlcnMuIElmIHRoZXkgYXJlIGNhbmNlbGxlZCwgdGhlbiB0aGUgbW9kaWZpY2F0aW9ucworICogZG9uJ3QgbmVlZCB0byBiZSByZXBsYXllZC4KKyAqLwogU1RBVElDIGludAogeGxvZ19yZWNvdmVyX3Jlb3JkZXJfdHJhbnMoCiAJeGxvZ19yZWNvdmVyX3QJCSp0cmFucykKIHsKLQl4bG9nX3JlY292ZXJfaXRlbV90CSpmaXJzdF9pdGVtLCAqaXRlbXEsICppdGVtcV9uZXh0OwotCXhmc19idWZfbG9nX2Zvcm1hdF90CSpidWZfZjsKLQl1c2hvcnQJCQlmbGFncyA9IDA7CisJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSwgKm47CisJTElTVF9IRUFEKHNvcnRfbGlzdCk7CiAKLQlmaXJzdF9pdGVtID0gaXRlbXEgPSB0cmFucy0+cl9pdGVtcTsKLQl0cmFucy0+cl9pdGVtcSA9IE5VTEw7Ci0JZG8gewotCQlpdGVtcV9uZXh0ID0gaXRlbXEtPnJpX25leHQ7Ci0JCWJ1Zl9mID0gKHhmc19idWZfbG9nX2Zvcm1hdF90ICopaXRlbXEtPnJpX2J1ZlswXS5pX2FkZHI7CisJbGlzdF9zcGxpY2VfaW5pdCgmdHJhbnMtPnJfaXRlbXEsICZzb3J0X2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVtLCBuLCAmc29ydF9saXN0LCByaV9saXN0KSB7CisJCXhmc19idWZfbG9nX2Zvcm1hdF90CSpidWZfZjsKIAotCQlzd2l0Y2ggKElURU1fVFlQRShpdGVtcSkpIHsKKwkJYnVmX2YgPSAoeGZzX2J1Zl9sb2dfZm9ybWF0X3QgKilpdGVtLT5yaV9idWZbMF0uaV9hZGRyOworCisJCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW0pKSB7CiAJCWNhc2UgWEZTX0xJX0JVRjoKLQkJCWZsYWdzID0gYnVmX2YtPmJsZl9mbGFnczsKLQkJCWlmICghKGZsYWdzICYgWEZTX0JMSV9DQU5DRUwpKSB7Ci0JCQkJeGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2Zyb250cSgmdHJhbnMtPnJfaXRlbXEsCi0JCQkJCQkJCWl0ZW1xKTsKKwkJCWlmICghKGJ1Zl9mLT5ibGZfZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCkpIHsKKwkJCQlsaXN0X21vdmUoJml0ZW0tPnJpX2xpc3QsICZ0cmFucy0+cl9pdGVtcSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgWEZTX0xJX0lOT0RFOgpAQCAtMTYwMSw3ICsxNTQzLDcgQEAKIAkJY2FzZSBYRlNfTElfUVVPVEFPRkY6CiAJCWNhc2UgWEZTX0xJX0VGRDoKIAkJY2FzZSBYRlNfTElfRUZJOgotCQkJeGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2JhY2txKCZ0cmFucy0+cl9pdGVtcSwgaXRlbXEpOworCQkJbGlzdF9tb3ZlX3RhaWwoJml0ZW0tPnJpX2xpc3QsICZ0cmFucy0+cl9pdGVtcSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXhsb2dfd2FybigKQEAgLTE2MDksOCArMTU1MSw4IEBACiAJCQlBU1NFUlQoMCk7CiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJCX0KLQkJaXRlbXEgPSBpdGVtcV9uZXh0OwotCX0gd2hpbGUgKGZpcnN0X2l0ZW0gIT0gaXRlbXEpOworCX0KKwlBU1NFUlQobGlzdF9lbXB0eSgmc29ydF9saXN0KSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNDIsOSArMjE4NCw5IEBACiAJfQogCiAJbXAgPSBsb2ctPmxfbXA7Ci0JYnVmX2ZsYWdzID0gWEZTX0JVRl9MT0NLOworCWJ1Zl9mbGFncyA9IFhCRl9MT0NLOwogCWlmICghKGZsYWdzICYgWEZTX0JMSV9JTk9ERV9CVUYpKQotCQlidWZfZmxhZ3MgfD0gWEZTX0JVRl9NQVBQRUQ7CisJCWJ1Zl9mbGFncyB8PSBYQkZfTUFQUEVEOwogCiAJYnAgPSB4ZnNfYnVmX3JlYWQobXAtPm1fZGRldl90YXJncCwgYmxrbm8sIGxlbiwgYnVmX2ZsYWdzKTsKIAlpZiAoWEZTX0JVRl9JU0VSUk9SKGJwKSkgewpAQCAtMjM0Niw3ICsyMjg4LDcgQEAKIAl9CiAKIAlicCA9IHhmc19idWZfcmVhZChtcC0+bV9kZGV2X3RhcmdwLCBpbl9mLT5pbGZfYmxrbm8sIGluX2YtPmlsZl9sZW4sCi0JCQkgIFhGU19CVUZfTE9DSyk7CisJCQkgIFhCRl9MT0NLKTsKIAlpZiAoWEZTX0JVRl9JU0VSUk9SKGJwKSkgewogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19yZWNvdmVyX2RvLi4ocmVhZCMyKSIsIG1wLAogCQkJCSAgYnAsIGluX2YtPmlsZl9ibGtubyk7CkBAIC0yODE0LDE0ICsyNzU2LDEzIEBACiAJaW50CQkJcGFzcykKIHsKIAlpbnQJCQllcnJvciA9IDA7Ci0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSwgKmZpcnN0X2l0ZW07CisJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbTsKIAogCWVycm9yID0geGxvZ19yZWNvdmVyX3Jlb3JkZXJfdHJhbnModHJhbnMpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZmlyc3RfaXRlbSA9IGl0ZW0gPSB0cmFucy0+cl9pdGVtcTsKLQlkbyB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVtLCAmdHJhbnMtPnJfaXRlbXEsIHJpX2xpc3QpIHsKIAkJc3dpdGNoIChJVEVNX1RZUEUoaXRlbSkpIHsKIAkJY2FzZSBYRlNfTElfQlVGOgogCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9fYnVmZmVyX3RyYW5zKGxvZywgaXRlbSwgcGFzcyk7CkBAIC0yODU0LDggKzI3OTUsNyBAQAogCiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJaXRlbSA9IGl0ZW0tPnJpX25leHQ7Ci0JfSB3aGlsZSAoZmlyc3RfaXRlbSAhPSBpdGVtKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NjksMjEgKzI4MDksMTggQEAKIHhsb2dfcmVjb3Zlcl9mcmVlX3RyYW5zKAogCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnMpCiB7Ci0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqZmlyc3RfaXRlbSwgKml0ZW0sICpmcmVlX2l0ZW07CisJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSwgKm47CiAJaW50CQkJaTsKIAotCWl0ZW0gPSBmaXJzdF9pdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JZG8gewotCQlmcmVlX2l0ZW0gPSBpdGVtOwotCQlpdGVtID0gaXRlbS0+cmlfbmV4dDsKLQkJIC8qIEZyZWUgdGhlIHJlZ2lvbnMgaW4gdGhlIGl0ZW0uICovCi0JCWZvciAoaSA9IDA7IGkgPCBmcmVlX2l0ZW0tPnJpX2NudDsgaSsrKSB7Ci0JCQlrbWVtX2ZyZWUoZnJlZV9pdGVtLT5yaV9idWZbaV0uaV9hZGRyKTsKLQkJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVtLCBuLCAmdHJhbnMtPnJfaXRlbXEsIHJpX2xpc3QpIHsKKwkJLyogRnJlZSB0aGUgcmVnaW9ucyBpbiB0aGUgaXRlbS4gKi8KKwkJbGlzdF9kZWwoJml0ZW0tPnJpX2xpc3QpOworCQlmb3IgKGkgPSAwOyBpIDwgaXRlbS0+cmlfY250OyBpKyspCisJCQlrbWVtX2ZyZWUoaXRlbS0+cmlfYnVmW2ldLmlfYWRkcik7CiAJCS8qIEZyZWUgdGhlIGl0ZW0gaXRzZWxmICovCi0JCWttZW1fZnJlZShmcmVlX2l0ZW0tPnJpX2J1Zik7Ci0JCWttZW1fZnJlZShmcmVlX2l0ZW0pOwotCX0gd2hpbGUgKGZpcnN0X2l0ZW0gIT0gaXRlbSk7CisJCWttZW1fZnJlZShpdGVtLT5yaV9idWYpOworCQlrbWVtX2ZyZWUoaXRlbSk7CisJfQogCS8qIEZyZWUgdGhlIHRyYW5zYWN0aW9uIHJlY292ZXIgc3RydWN0dXJlICovCiAJa21lbV9mcmVlKHRyYW5zKTsKIH0KQEAgLTI4OTEsMTQgKzI4MjgsMTIgQEAKIFNUQVRJQyBpbnQKIHhsb2dfcmVjb3Zlcl9jb21taXRfdHJhbnMoCiAJeGxvZ190CQkJKmxvZywKLQl4bG9nX3JlY292ZXJfdAkJKipxLAogCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnMsCiAJaW50CQkJcGFzcykKIHsKIAlpbnQJCQllcnJvcjsKIAotCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfdW5saW5rX3RpZChxLCB0cmFucykpKQotCQlyZXR1cm4gZXJyb3I7CisJaGxpc3RfZGVsKCZ0cmFucy0+cl9saXN0KTsKIAlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX3RyYW5zKGxvZywgdHJhbnMsIHBhc3MpKSkKIAkJcmV0dXJuIGVycm9yOwogCXhsb2dfcmVjb3Zlcl9mcmVlX3RyYW5zKHRyYW5zKTsJCQkvKiBubyBlcnJvciAqLwpAQCAtMjkyNiw3ICsyODYxLDcgQEAKIFNUQVRJQyBpbnQKIHhsb2dfcmVjb3Zlcl9wcm9jZXNzX2RhdGEoCiAJeGxvZ190CQkJKmxvZywKLQl4bG9nX3JlY292ZXJfdAkJKnJoYXNoW10sCisJc3RydWN0IGhsaXN0X2hlYWQJcmhhc2hbXSwKIAl4bG9nX3JlY19oZWFkZXJfdAkqcmhlYWQsCiAJeGZzX2NhZGRyX3QJCWRwLAogCWludAkJCXBhc3MpCkBAIC0yOTYwLDcgKzI4OTUsNyBAQAogCQl9CiAJCXRpZCA9IGJlMzJfdG9fY3B1KG9oZWFkLT5vaF90aWQpOwogCQloYXNoID0gWExPR19SSEFTSCh0aWQpOwotCQl0cmFucyA9IHhsb2dfcmVjb3Zlcl9maW5kX3RpZChyaGFzaFtoYXNoXSwgdGlkKTsKKwkJdHJhbnMgPSB4bG9nX3JlY292ZXJfZmluZF90aWQoJnJoYXNoW2hhc2hdLCB0aWQpOwogCQlpZiAodHJhbnMgPT0gTlVMTCkgewkJICAgLyogbm90IGZvdW5kOyBhZGQgbmV3IHRpZCAqLwogCQkJaWYgKG9oZWFkLT5vaF9mbGFncyAmIFhMT0dfU1RBUlRfVFJBTlMpCiAJCQkJeGxvZ19yZWNvdmVyX25ld190aWQoJnJoYXNoW2hhc2hdLCB0aWQsCkBAIC0yOTc4LDcgKzI5MTMsNyBAQAogCQkJc3dpdGNoIChmbGFncykgewogCQkJY2FzZSBYTE9HX0NPTU1JVF9UUkFOUzoKIAkJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9jb21taXRfdHJhbnMobG9nLAotCQkJCQkJJnJoYXNoW2hhc2hdLCB0cmFucywgcGFzcyk7CisJCQkJCQkJCXRyYW5zLCBwYXNzKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgWExPR19VTk1PVU5UX1RSQU5TOgogCQkJCWVycm9yID0geGxvZ19yZWNvdmVyX3VubW91bnRfdHJhbnModHJhbnMpOwpAQCAtMzIxMSw3ICszMTQ2LDcgQEAKIAkvKgogCSAqIEdldCB0aGUgb24gZGlzayBpbm9kZSB0byBmaW5kIHRoZSBuZXh0IGlub2RlIGluIHRoZSBidWNrZXQuCiAJICovCi0JZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCWVycm9yID0geGZzX2l0b2JwKG1wLCBOVUxMLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2lwdXQ7CiAKQEAgLTM1MTcsNyArMzQ1Miw3IEBACiAJaW50CQkJZXJyb3IgPSAwLCBoX3NpemU7CiAJaW50CQkJYmJsa3MsIHNwbGl0X2JibGtzOwogCWludAkJCWhibGtzLCBzcGxpdF9oYmxrcywgd3JhcHBlZF9oYmxrczsKLQl4bG9nX3JlY292ZXJfdAkJKnJoYXNoW1hMT0dfUkhBU0hfU0laRV07CisJc3RydWN0IGhsaXN0X2hlYWQJcmhhc2hbWExPR19SSEFTSF9TSVpFXTsKIAogCUFTU0VSVChoZWFkX2JsayAhPSB0YWlsX2Jsayk7CiAKQEAgLTM5NzgsOCArMzkxMyw3IEBACiAJCSAqIGNhc2UgdGhlIHVubGluayB0cmFuc2FjdGlvbnMgd291bGQgaGF2ZSBwcm9ibGVtcwogCQkgKiBwdXNoaW5nIHRoZSBFRklzIG91dCBvZiB0aGUgd2F5LgogCQkgKi8KLQkJeGZzX2xvZ19mb3JjZShsb2ctPmxfbXAsICh4ZnNfbHNuX3QpMCwKLQkJCSAgICAgIChYRlNfTE9HX0ZPUkNFIHwgWEZTX0xPR19TWU5DKSk7CisJCXhmc19sb2dfZm9yY2UobG9nLT5sX21wLCBYRlNfTE9HX1NZTkMpOwogCiAJCXhsb2dfcmVjb3Zlcl9wcm9jZXNzX2l1bmxpbmtzKGxvZyk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuaCBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuaAppbmRleCBiMjI1NDU1Li43NWQ3NDkyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmgKKysrIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5oCkBAIC0zNSwyMiArMzUsMjEgQEAKICAqIGl0ZW0gaGVhZGVycyBhcmUgaW4gcmlfYnVmWzBdLiAgQWRkaXRpb25hbCBidWZmZXJzIGZvbGxvdy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGxvZ19yZWNvdmVyX2l0ZW0gewotCXN0cnVjdCB4bG9nX3JlY292ZXJfaXRlbSAqcmlfbmV4dDsKLQlzdHJ1Y3QgeGxvZ19yZWNvdmVyX2l0ZW0gKnJpX3ByZXY7Ci0JaW50CQkJIHJpX3R5cGU7Ci0JaW50CQkJIHJpX2NudDsJLyogY291bnQgb2YgcmVnaW9ucyBmb3VuZCAqLwotCWludAkJCSByaV90b3RhbDsJLyogdG90YWwgcmVnaW9ucyAqLwotCXhmc19sb2dfaW92ZWNfdAkJICpyaV9idWY7CS8qIHB0ciB0byByZWdpb25zIGJ1ZmZlciAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmlfbGlzdDsKKwlpbnQJCQlyaV90eXBlOworCWludAkJCXJpX2NudDsJLyogY291bnQgb2YgcmVnaW9ucyBmb3VuZCAqLworCWludAkJCXJpX3RvdGFsOwkvKiB0b3RhbCByZWdpb25zICovCisJeGZzX2xvZ19pb3ZlY190CQkqcmlfYnVmOwkvKiBwdHIgdG8gcmVnaW9ucyBidWZmZXIgKi8KIH0geGxvZ19yZWNvdmVyX2l0ZW1fdDsKIAogc3RydWN0IHhsb2dfdGlkOwogdHlwZWRlZiBzdHJ1Y3QgeGxvZ19yZWNvdmVyIHsKLQlzdHJ1Y3QgeGxvZ19yZWNvdmVyICpyX25leHQ7Ci0JeGxvZ190aWRfdAkgICAgcl9sb2dfdGlkOwkJLyogbG9nJ3MgdHJhbnNhY3Rpb24gaWQgKi8KLQl4ZnNfdHJhbnNfaGVhZGVyX3QgIHJfdGhlYWRlcjsJCS8qIHRyYW5zIGhlYWRlciBmb3IgcGFydGlhbCAqLwotCWludAkJICAgIHJfc3RhdGU7CQkvKiBub3QgbmVlZGVkICovCi0JeGZzX2xzbl90CSAgICByX2xzbjsJCS8qIHhhY3QgbHNuICovCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdCAqcl9pdGVtcTsJCS8qIHEgZm9yIGl0ZW1zICovCisJc3RydWN0IGhsaXN0X25vZGUJcl9saXN0OworCXhsb2dfdGlkX3QJCXJfbG9nX3RpZDsJLyogbG9nJ3MgdHJhbnNhY3Rpb24gaWQgKi8KKwl4ZnNfdHJhbnNfaGVhZGVyX3QJcl90aGVhZGVyOwkvKiB0cmFucyBoZWFkZXIgZm9yIHBhcnRpYWwgKi8KKwlpbnQJCQlyX3N0YXRlOwkvKiBub3QgbmVlZGVkICovCisJeGZzX2xzbl90CQlyX2xzbjsJCS8qIHhhY3QgbHNuICovCisJc3RydWN0IGxpc3RfaGVhZAlyX2l0ZW1xOwkvKiBxIGZvciBpdGVtcyAqLwogfSB4bG9nX3JlY292ZXJfdDsKIAogI2RlZmluZSBJVEVNX1RZUEUoaSkJKCoodXNob3J0ICopKGkpLT5yaV9idWZbMF0uaV9hZGRyKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IGViNDAzYjQuLjZhZmFhZWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTIwMSw2ICsyMDEsMzggQEAKIAogCiAvKgorICogUmVmZXJlbmNlIGNvdW50aW5nIGFjY2VzcyB3cmFwcGVycyB0byB0aGUgcGVyYWcgc3RydWN0dXJlcy4KKyAqLworc3RydWN0IHhmc19wZXJhZyAqCit4ZnNfcGVyYWdfZ2V0KHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfYWdudW1iZXJfdCBhZ25vKQoreworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKKwlpbnQJCQlyZWYgPSAwOworCisJc3Bpbl9sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwlwYWcgPSByYWRpeF90cmVlX2xvb2t1cCgmbXAtPm1fcGVyYWdfdHJlZSwgYWdubyk7CisJaWYgKHBhZykgeworCQlBU1NFUlQoYXRvbWljX3JlYWQoJnBhZy0+cGFnX3JlZikgPj0gMCk7CisJCS8qIGNhdGNoIGxlYWtzIGluIHRoZSBwb3NpdGl2ZSBkaXJlY3Rpb24gZHVyaW5nIHRlc3RpbmcgKi8KKwkJQVNTRVJUKGF0b21pY19yZWFkKCZwYWctPnBhZ19yZWYpIDwgMTAwMCk7CisJCXJlZiA9IGF0b21pY19pbmNfcmV0dXJuKCZwYWctPnBhZ19yZWYpOworCX0KKwlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJdHJhY2VfeGZzX3BlcmFnX2dldChtcCwgYWdubywgcmVmLCBfUkVUX0lQXyk7CisJcmV0dXJuIHBhZzsKK30KKwordm9pZAoreGZzX3BlcmFnX3B1dChzdHJ1Y3QgeGZzX3BlcmFnICpwYWcpCit7CisJaW50CXJlZjsKKworCUFTU0VSVChhdG9taWNfcmVhZCgmcGFnLT5wYWdfcmVmKSA+IDApOworCXJlZiA9IGF0b21pY19kZWNfcmV0dXJuKCZwYWctPnBhZ19yZWYpOworCXRyYWNlX3hmc19wZXJhZ19wdXQocGFnLT5wYWdfbW91bnQsIHBhZy0+cGFnX2Fnbm8sIHJlZiwgX1JFVF9JUF8pOworfQorCisvKgogICogRnJlZSB1cCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIG1vdW50IHN0cnVjdHVyZS4gIEFzc3VtZSB0aGF0CiAgKiB0aGUgc3RydWN0dXJlIHdhcyBpbml0aWFsbHkgemVyb2VkLCBzbyB3ZSBjYW4gdGVsbCB3aGljaCBmaWVsZHMgZ290CiAgKiBpbml0aWFsaXplZC4KQEAgLTIwOSwxMyArMjQxLDE2IEBACiB4ZnNfZnJlZV9wZXJhZygKIAl4ZnNfbW91bnRfdAkqbXApCiB7Ci0JaWYgKG1wLT5tX3BlcmFnKSB7Ci0JCWludAlhZ25vOworCXhmc19hZ251bWJlcl90CWFnbm87CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCi0JCWZvciAoYWdubyA9IDA7IGFnbm8gPCBtcC0+bV9tYXhhZ2k7IGFnbm8rKykKLQkJCWlmIChtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3QpCi0JCQkJa21lbV9mcmVlKG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCk7Ci0JCWttZW1fZnJlZShtcC0+bV9wZXJhZyk7CisJZm9yIChhZ25vID0gMDsgYWdubyA8IG1wLT5tX3NiLnNiX2FnY291bnQ7IGFnbm8rKykgeworCQlzcGluX2xvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlwYWcgPSByYWRpeF90cmVlX2RlbGV0ZSgmbXAtPm1fcGVyYWdfdHJlZSwgYWdubyk7CisJCUFTU0VSVChwYWcpOworCQlBU1NFUlQoYXRvbWljX3JlYWQoJnBhZy0+cGFnX3JlZikgPT0gMCk7CisJCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJa21lbV9mcmVlKHBhZyk7CiAJfQogfQogCkBAIC0zODksMjIgKzQyNCw1NyBAQAogCX0KIH0KIAoteGZzX2FnbnVtYmVyX3QKK2ludAogeGZzX2luaXRpYWxpemVfcGVyYWcoCiAJeGZzX21vdW50X3QJKm1wLAotCXhmc19hZ251bWJlcl90CWFnY291bnQpCisJeGZzX2FnbnVtYmVyX3QJYWdjb3VudCwKKwl4ZnNfYWdudW1iZXJfdAkqbWF4YWdpKQogewogCXhmc19hZ251bWJlcl90CWluZGV4LCBtYXhfbWV0YWRhdGE7CisJeGZzX2FnbnVtYmVyX3QJZmlyc3RfaW5pdGlhbGlzZWQgPSAwOwogCXhmc19wZXJhZ190CSpwYWc7CiAJeGZzX2FnaW5vX3QJYWdpbm87CiAJeGZzX2lub190CWlubzsKIAl4ZnNfc2JfdAkqc2JwID0gJm1wLT5tX3NiOwogCXhmc19pbm9fdAltYXhfaW51bSA9IFhGU19NQVhJTlVNQkVSXzMyOworCWludAkJZXJyb3IgPSAtRU5PTUVNOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlc3lzdGVtIGNhbiBvdmVyZmxvdyAzMiBiaXQgaW5vZGVzICovCiAJYWdpbm8gPSBYRlNfT0ZGQk5PX1RPX0FHSU5PKG1wLCBzYnAtPnNiX2FnYmxvY2tzIC0gMSwgMCk7CiAJaW5vID0gWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdjb3VudCAtIDEsIGFnaW5vKTsKIAorCS8qCisJICogV2FsayB0aGUgY3VycmVudCBwZXItYWcgdHJlZSBzbyB3ZSBkb24ndCB0cnkgdG8gaW5pdGlhbGlzZSBBR3MKKwkgKiB0aGF0IGFscmVhZHkgZXhpc3QgKGdyb3dmcyBjYXNlKS4gQWxsb2NhdGUgYW5kIGluc2VydCBhbGwgdGhlCisJICogQUdzIHdlIGRvbid0IGZpbmQgcmVhZHkgZm9yIGluaXRpYWxpc2F0aW9uLgorCSAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFnY291bnQ7IGluZGV4KyspIHsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgaW5kZXgpOworCQlpZiAocGFnKSB7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWZpcnN0X2luaXRpYWxpc2VkKQorCQkJZmlyc3RfaW5pdGlhbGlzZWQgPSBpbmRleDsKKwkJcGFnID0ga21lbV96YWxsb2Moc2l6ZW9mKCpwYWcpLCBLTV9NQVlGQUlMKTsKKwkJaWYgKCFwYWcpCisJCQlnb3RvIG91dF91bndpbmQ7CisJCWlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PRlMpKQorCQkJZ290byBvdXRfdW53aW5kOworCQlzcGluX2xvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJm1wLT5tX3BlcmFnX3RyZWUsIGluZGV4LCBwYWcpKSB7CisJCQlCVUcoKTsKKwkJCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwkJCWVycm9yID0gLUVFWElTVDsKKwkJCWdvdG8gb3V0X3Vud2luZDsKKwkJfQorCQlwYWctPnBhZ19hZ25vID0gaW5kZXg7CisJCXBhZy0+cGFnX21vdW50ID0gbXA7CisJCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCX0KKwogCS8qIENsZWFyIHRoZSBtb3VudCBmbGFnIGlmIG5vIGlub2RlIGNhbiBvdmVyZmxvdyAzMiBiaXRzCiAJICogb24gdGhpcyBmaWxlc3lzdGVtLCBvciBpZiBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkLi4KIAkgKi8KQEAgLTQzOCwyMSArNTA4LDMzIEBACiAJCQl9CiAKIAkJCS8qIFRoaXMgYWcgaXMgcHJlZmVycmVkIGZvciBpbm9kZXMgKi8KLQkJCXBhZyA9ICZtcC0+bV9wZXJhZ1tpbmRleF07CisJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBpbmRleCk7CiAJCQlwYWctPnBhZ2lfaW5vZGVvayA9IDE7CiAJCQlpZiAoaW5kZXggPCBtYXhfbWV0YWRhdGEpCiAJCQkJcGFnLT5wYWdmX21ldGFkYXRhID0gMTsKIAkJCXhmc19pbml0aWFsaXplX3BlcmFnX2ljYWNoZShwYWcpOworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogU2V0dXAgZGVmYXVsdCBiZWhhdmlvciBmb3Igc21hbGxlciBmaWxlc3lzdGVtcyAqLwogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhZ2NvdW50OyBpbmRleCsrKSB7Ci0JCQlwYWcgPSAmbXAtPm1fcGVyYWdbaW5kZXhdOworCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgaW5kZXgpOwogCQkJcGFnLT5wYWdpX2lub2Rlb2sgPSAxOwogCQkJeGZzX2luaXRpYWxpemVfcGVyYWdfaWNhY2hlKHBhZyk7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCX0KIAl9Ci0JcmV0dXJuIGluZGV4OworCWlmIChtYXhhZ2kpCisJCSptYXhhZ2kgPSBpbmRleDsKKwlyZXR1cm4gMDsKKworb3V0X3Vud2luZDoKKwlrbWVtX2ZyZWUocGFnKTsKKwlmb3IgKDsgaW5kZXggPiBmaXJzdF9pbml0aWFsaXNlZDsgaW5kZXgtLSkgeworCQlwYWcgPSByYWRpeF90cmVlX2RlbGV0ZSgmbXAtPm1fcGVyYWdfdHJlZSwgaW5kZXgpOworCQlrbWVtX2ZyZWUocGFnKTsKKwl9CisJcmV0dXJuIGVycm9yOwogfQogCiB2b2lkCkBAIC01ODMsNyArNjY1LDcgQEAKIAkgKiBhY2Nlc3MgdG8gdGhlIHN1cGVyYmxvY2suCiAJICovCiAJc2VjdG9yX3NpemUgPSB4ZnNfZ2V0c2l6ZV9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3ApOwotCWV4dHJhX2ZsYWdzID0gWEZTX0JVRl9MT0NLIHwgWEZTX0JVRl9NQU5BR0UgfCBYRlNfQlVGX01BUFBFRDsKKwlleHRyYV9mbGFncyA9IFhCRl9MT0NLIHwgWEJGX0ZTX01BTkFHRUQgfCBYQkZfTUFQUEVEOwogCiAJYnAgPSB4ZnNfYnVmX3JlYWQobXAtPm1fZGRldl90YXJncCwgWEZTX1NCX0RBRERSLCBCVE9CQihzZWN0b3Jfc2l6ZSksCiAJCQkgIGV4dHJhX2ZsYWdzKTsKQEAgLTczMSwxMiArODEzLDEzIEBACiAJCWVycm9yID0geGZzX2lhbGxvY19wYWdpX2luaXQobXAsIE5VTEwsIGluZGV4KTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQlwYWcgPSAmbXAtPm1fcGVyYWdbaW5kZXhdOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBpbmRleCk7CiAJCWlmcmVlICs9IHBhZy0+cGFnaV9mcmVlY291bnQ7CiAJCWlhbGxvYyArPSBwYWctPnBhZ2lfY291bnQ7CiAJCWJmcmVlICs9IHBhZy0+cGFnZl9mcmVlYmxrczsKIAkJYmZyZWVsc3QgKz0gcGFnLT5wYWdmX2ZsY291bnQ7CiAJCWJ0cmVlICs9IHBhZy0+cGFnZl9idHJlZWJsa3M7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAl9CiAJLyoKIAkgKiBPdmVyd3JpdGUgaW5jb3JlIHN1cGVyYmxvY2sgY291bnRlcnMgd2l0aCBqdXN0LXJlYWQgZGF0YQpAQCAtMTAwOCw2ICsxMDkxLDIyIEBACiAJcmV0dXJuIHhmc190cmFuc19jb21taXQodHAsIDApOwogfQogCitfX3VpbnQ2NF90Cit4ZnNfZGVmYXVsdF9yZXNibGtzKHhmc19tb3VudF90ICptcCkKK3sKKwlfX3VpbnQ2NF90IHJlc2Jsa3M7CisKKwkvKgorCSAqIFdlIGRlZmF1bHQgdG8gNSUgb3IgMTAyNCBmc2JzIG9mIHNwYWNlIHJlc2VydmVkLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKwkgKiBUaGlzIG1heSBkcml2ZSB1cyBzdHJhaWdodCB0byBFTk9TUEMgb24gbW91bnQsIGJ1dCB0aGF0IGltcGxpZXMKKwkgKiB3ZSB3ZXJlIGFscmVhZHkgdGhlcmUgb24gdGhlIGxhc3QgdW5tb3VudC4gV2FybiBpZiB0aGlzIG9jY3Vycy4KKwkgKi8KKwlyZXNibGtzID0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKKwlkb19kaXYocmVzYmxrcywgMjApOworCXJlc2Jsa3MgPSBtaW5fdChfX3VpbnQ2NF90LCByZXNibGtzLCAxMDI0KTsKKwlyZXR1cm4gcmVzYmxrczsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgZm9sbG93aW5nIG9uIGFuIGluaXRpYWwgbW91bnQgb2YgYSBmaWxlIHN5c3RlbToKICAqCS0gcmVhZHMgdGhlIHN1cGVyYmxvY2sgZnJvbSBkaXNrIGFuZCBpbml0IHRoZSBtb3VudCBzdHJ1Y3QKQEAgLTExNTIsMTMgKzEyNTEsMTMgQEAKIAkvKgogCSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwZXItYWcgZGF0YS4KIAkgKi8KLQlpbml0X3J3c2VtKCZtcC0+bV9wZXJhZ2xvY2spOwotCW1wLT5tX3BlcmFnID0ga21lbV96YWxsb2Moc2JwLT5zYl9hZ2NvdW50ICogc2l6ZW9mKHhmc19wZXJhZ190KSwKLQkJCQkgIEtNX01BWUZBSUwpOwotCWlmICghbXAtPm1fcGVyYWcpCisJc3Bpbl9sb2NrX2luaXQoJm1wLT5tX3BlcmFnX2xvY2spOworCUlOSVRfUkFESVhfVFJFRSgmbXAtPm1fcGVyYWdfdHJlZSwgR0ZQX05PRlMpOworCWVycm9yID0geGZzX2luaXRpYWxpemVfcGVyYWcobXAsIHNicC0+c2JfYWdjb3VudCwgJm1wLT5tX21heGFnaSk7CisJaWYgKGVycm9yKSB7CisJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogRmFpbGVkIHBlci1hZyBpbml0OiAlZCIsIGVycm9yKTsKIAkJZ290byBvdXRfcmVtb3ZlX3V1aWQ7Ci0KLQltcC0+bV9tYXhhZ2kgPSB4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhtcCwgc2JwLT5zYl9hZ2NvdW50KTsKKwl9CiAKIAlpZiAoIXNicC0+c2JfbG9nYmxvY2tzKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbm8gbG9nIGRlZmluZWQiKTsKQEAgLTEzMTgsMTggKzE0MTcsMTQgQEAKIAkgKiB3aGVuIGF0IEVOT1NQQy4gVGhpcyBpcyBuZWVkZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBjcmVhdGUgd2l0aAogCSAqIGF0dHIsIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiBhdCBFTk9TUEMsIGV0Yy4gRGF0YSBhbGxvY2F0aW9ucwogCSAqIGFyZSBub3QgYWxsb3dlZCB0byB1c2UgdGhpcyByZXNlcnZlZCBzcGFjZS4KLQkgKgotCSAqIFdlIGRlZmF1bHQgdG8gNSUgb3IgMTAyNCBmc2JzIG9mIHNwYWNlIHJlc2VydmVkLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KLQkgKiBUaGlzIG1heSBkcml2ZSB1cyBzdHJhaWdodCB0byBFTk9TUEMgb24gbW91bnQsIGJ1dCB0aGF0IGltcGxpZXMKLQkgKiB3ZSB3ZXJlIGFscmVhZHkgdGhlcmUgb24gdGhlIGxhc3QgdW5tb3VudC4gV2FybiBpZiB0aGlzIG9jY3Vycy4KIAkgKi8KLQlyZXNibGtzID0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKLQlkb19kaXYocmVzYmxrcywgMjApOwotCXJlc2Jsa3MgPSBtaW5fdChfX3VpbnQ2NF90LCByZXNibGtzLCAxMDI0KTsKLQllcnJvciA9IHhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOwotCWlmIChlcnJvcikKLQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBVbmFibGUgdG8gYWxsb2NhdGUgcmVzZXJ2ZSBibG9ja3MuICIKLQkJCQkiQ29udGludWluZyB3aXRob3V0IGEgcmVzZXJ2ZSBwb29sLiIpOworCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKKwkJcmVzYmxrcyA9IHhmc19kZWZhdWx0X3Jlc2Jsa3MobXApOworCQllcnJvciA9IHhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOworCQlpZiAoZXJyb3IpCisJCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFVuYWJsZSB0byBhbGxvY2F0ZSByZXNlcnZlICIKKwkJCQkiYmxvY2tzLiBDb250aW51aW5nIHdpdGhvdXQgYSByZXNlcnZlIHBvb2wuIik7CisJfQogCiAJcmV0dXJuIDA7CiAKQEAgLTEzNzIsOCArMTQ2NywxOSBAQAogCSAqIHB1c2ggb3V0IHRoZSBpY2xvZyB3ZSB3aWxsIG5ldmVyIGdldCB0aGF0IHVubG9ja2VkLiBoZW5jZSB3ZQogCSAqIG5lZWQgdG8gZm9yY2UgdGhlIGxvZyBmaXJzdC4KIAkgKi8KLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOwotCXhmc19yZWNsYWltX2lub2RlcyhtcCwgWEZTX0lGTFVTSF9BU1lOQyk7CisJeGZzX2xvZ19mb3JjZShtcCwgWEZTX0xPR19TWU5DKTsKKworCS8qCisJICogRG8gYSBkZWx3cmkgcmVjbGFpbSBwYXNzIGZpcnN0IHNvIHRoYXQgYXMgbWFueSBkaXJ0eSBpbm9kZXMgYXJlCisJICogcXVldWVkIHVwIGZvciBJTyBhcyBwb3NzaWJsZS4gVGhlbiBmbHVzaCB0aGUgYnVmZmVycyBiZWZvcmUgbWFraW5nCisJICogYSBzeW5jaHJvbm91cyBwYXRoIHRvIGNhdGNoIGFsbCB0aGUgcmVtYWluaW5nIGlub2RlcyBhcmUgcmVjbGFpbWVkLgorCSAqIFRoaXMgbWFrZXMgdGhlIHJlY2xhaW0gcHJvY2VzcyBhcyBxdWljayBhcyBwb3NzaWJsZSBieSBhdm9pZGluZworCSAqIHN5bmNocm9ub3VzIHdyaXRlb3V0IGFuZCBibG9ja2luZyBvbiBpbm9kZXMgYWxyZWFkeSBpbiB0aGUgZGVsd3JpCisJICogc3RhdGUgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkgKi8KKwl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIDApOworCVhGU19iZmx1c2gobXAtPm1fZGRldl90YXJncCk7CisJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBTWU5DX1dBSVQpOwogCiAJeGZzX3FtX3VubW91bnQobXApOwogCkBAIC0xMzgyLDcgKzE0ODgsNyBAQAogCSAqIHRoYXQgbm90aGluZyBpcyBwaW5uZWQuICBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGJmbHVzaCgpCiAJICogd2lsbCBza2lwIHBpbm5lZCBidWZmZXJzLgogCSAqLwotCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQyk7CisJeGZzX2xvZ19mb3JjZShtcCwgWEZTX0xPR19TWU5DKTsKIAogCXhmc19iaW52YWwobXAtPm1fZGRldl90YXJncCk7CiAJaWYgKG1wLT5tX3J0ZGV2X3RhcmdwKSB7CkBAIC0xNTQ4LDE1ICsxNjU0LDE0IEBACiAJeGZzX3NiX3RvX2Rpc2soWEZTX0JVRl9UT19TQlAoYnApLCAmbXAtPm1fc2IsIGZpZWxkcyk7CiAKIAkvKiBmaW5kIG1vZGlmaWVkIHJhbmdlICovCisJZiA9ICh4ZnNfc2JfZmllbGRfdCl4ZnNfaGlnaGJpdDY0KChfX3VpbnQ2NF90KWZpZWxkcyk7CisJQVNTRVJUKCgxTEwgPDwgZikgJiBYRlNfU0JfTU9EX0JJVFMpOworCWxhc3QgPSB4ZnNfc2JfaW5mb1tmICsgMV0ub2Zmc2V0IC0gMTsKIAogCWYgPSAoeGZzX3NiX2ZpZWxkX3QpeGZzX2xvd2JpdDY0KChfX3VpbnQ2NF90KWZpZWxkcyk7CiAJQVNTRVJUKCgxTEwgPDwgZikgJiBYRlNfU0JfTU9EX0JJVFMpOwogCWZpcnN0ID0geGZzX3NiX2luZm9bZl0ub2Zmc2V0OwogCi0JZiA9ICh4ZnNfc2JfZmllbGRfdCl4ZnNfaGlnaGJpdDY0KChfX3VpbnQ2NF90KWZpZWxkcyk7Ci0JQVNTRVJUKCgxTEwgPDwgZikgJiBYRlNfU0JfTU9EX0JJVFMpOwotCWxhc3QgPSB4ZnNfc2JfaW5mb1tmICsgMV0ub2Zmc2V0IC0gMTsKLQogCXhmc190cmFuc19sb2dfYnVmKHRwLCBicCwgZmlyc3QsIGxhc3QpOwogfQogCkBAIC0xODg3LDcgKzE5OTIsNyBAQAogCiAJQVNTRVJUKG1wLT5tX3NiX2JwICE9IE5VTEwpOwogCWJwID0gbXAtPm1fc2JfYnA7Ci0JaWYgKGZsYWdzICYgWEZTX0JVRl9UUllMT0NLKSB7CisJaWYgKGZsYWdzICYgWEJGX1RSWUxPQ0spIHsKIAkJaWYgKCFYRlNfQlVGX0NQU0VNQShicCkpIHsKIAkJCXJldHVybiBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggMWRmN2U0NS4uNzA1MDRmYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtNzgsNyArNzgsOCBAQAogdHlwZWRlZiBpbnQJKCp4ZnNfc2VuZF9uYW1lc3BfdCkoZG1fZXZlbnR0eXBlX3QsIHN0cnVjdCB4ZnNfbW91bnQgKiwKIAkJCXN0cnVjdCB4ZnNfaW5vZGUgKiwgZG1fcmlnaHRfdCwKIAkJCXN0cnVjdCB4ZnNfaW5vZGUgKiwgZG1fcmlnaHRfdCwKLQkJCWNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBtb2RlX3QsIGludCwgaW50KTsKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorCQkJbW9kZV90LCBpbnQsIGludCk7CiB0eXBlZGVmIGludAkoKnhmc19zZW5kX21vdW50X3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwgZG1fcmlnaHRfdCwKIAkJCWNoYXIgKiwgY2hhciAqKTsKIHR5cGVkZWYgdm9pZAkoKnhmc19zZW5kX3VubW91bnRfdCkoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX2lub2RlICosCkBAIC0yMDcsOCArMjA4LDggQEAKIAl1aW50CQkJbV9hZ19tYXhsZXZlbHM7CS8qIFhGU19BR19NQVhMRVZFTFMgKi8KIAl1aW50CQkJbV9ibV9tYXhsZXZlbHNbMl07IC8qIFhGU19CTV9NQVhMRVZFTFMgKi8KIAl1aW50CQkJbV9pbl9tYXhsZXZlbHM7CS8qIG1heCBpbm9idCBidHJlZSBsZXZlbHMuICovCi0Jc3RydWN0IHhmc19wZXJhZwkqbV9wZXJhZzsJLyogcGVyLWFnIGFjY291bnRpbmcgaW5mbyAqLwotCXN0cnVjdCByd19zZW1hcGhvcmUJbV9wZXJhZ2xvY2s7CS8qIGxvY2sgZm9yIG1fcGVyYWcgKHBvaW50ZXIpICovCisJc3RydWN0IHJhZGl4X3RyZWVfcm9vdAltX3BlcmFnX3RyZWU7CS8qIHBlci1hZyBhY2NvdW50aW5nIGluZm8gKi8KKwlzcGlubG9ja190CQltX3BlcmFnX2xvY2s7CS8qIGxvY2sgZm9yIG1fcGVyYWdfdHJlZSAqLwogCXN0cnVjdCBtdXRleAkJbV9ncm93bG9jazsJLyogZ3Jvd2ZzIG11dGV4ICovCiAJaW50CQkJbV9maXhlZGZzaWRbMl07CS8qIHVuY2hhbmdlZCBmb3IgbGlmZSBvZiBGUyAqLwogCXVpbnQJCQltX2RtZXZtYXNrOwkvKiBETUkgZXZlbnRzIGZvciB0aGlzIEZTICovCkBAIC0yMjQsNiArMjI1LDcgQEAKIAlfX3VpbnQ2NF90CQltX21heGlvZmZzZXQ7CS8qIG1heGltdW0gaW5vZGUgb2Zmc2V0ICovCiAJX191aW50NjRfdAkJbV9yZXNibGtzOwkvKiB0b3RhbCByZXNlcnZlZCBibG9ja3MgKi8KIAlfX3VpbnQ2NF90CQltX3Jlc2Jsa3NfYXZhaWw7LyogYXZhaWxhYmxlIHJlc2VydmVkIGJsb2NrcyAqLworCV9fdWludDY0X3QJCW1fcmVzYmxrc19zYXZlOwkvKiByZXNlcnZlZCBibGtzIEAgcmVtb3VudCxybyAqLwogCWludAkJCW1fZGFsaWduOwkvKiBzdHJpcGUgdW5pdCAqLwogCWludAkJCW1fc3dpZHRoOwkvKiBzdHJpcGUgd2lkdGggKi8KIAlpbnQJCQltX3Npbm9hbGlnbjsJLyogc3RyaXBlIHVuaXQgaW5vZGUgYWxpZ25tZW50ICovCkBAIC0zODQsMTkgKzM4NiwxMCBAQAogfQogCiAvKgotICogcGVyYWcgZ2V0L3B1dCB3cmFwcGVycyBmb3IgZXZlbnR1YWwgcmVmIGNvdW50aW5nCisgKiBwZXJhZyBnZXQvcHV0IHdyYXBwZXJzIGZvciByZWYgY291bnRpbmcKICAqLwotc3RhdGljIGlubGluZSB4ZnNfcGVyYWdfdCAqCi14ZnNfZ2V0X3BlcmFnKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfaW5vX3QgaW5vKQotewotCXJldHVybiAmbXAtPm1fcGVyYWdbWEZTX0lOT19UT19BR05PKG1wLCBpbm8pXTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi14ZnNfcHV0X3BlcmFnKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfcGVyYWdfdCAqcGFnKQotewotCS8qIG5vdGhpbmcgdG8gc2VlIGhlcmUsIG1vdmUgYWxvbmcgKi8KLX0KK3N0cnVjdCB4ZnNfcGVyYWcgKnhmc19wZXJhZ19nZXQoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8pOwordm9pZAl4ZnNfcGVyYWdfcHV0KHN0cnVjdCB4ZnNfcGVyYWcgKnBhZyk7CiAKIC8qCiAgKiBQZXItY3B1IHN1cGVyYmxvY2sgbG9ja2luZyBmdW5jdGlvbnMKQEAgLTQyOCw2ICs0MjEsNyBAQAogfSB4ZnNfbW9kX3NiX3Q7CiAKIGV4dGVybiBpbnQJeGZzX2xvZ19zYmNvdW50KHhmc19tb3VudF90ICosIHVpbnQpOworZXh0ZXJuIF9fdWludDY0X3QgeGZzX2RlZmF1bHRfcmVzYmxrcyh4ZnNfbW91bnRfdCAqbXApOwogZXh0ZXJuIGludAl4ZnNfbW91bnRmcyh4ZnNfbW91bnRfdCAqbXApOwogCiBleHRlcm4gdm9pZAl4ZnNfdW5tb3VudGZzKHhmc19tb3VudF90ICopOwpAQCAtNDUwLDcgKzQ0NCw4IEBACiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiBleHRlcm4gdm9pZAl4ZnNfbW9kX3NiKHN0cnVjdCB4ZnNfdHJhbnMgKiwgX19pbnQ2NF90KTsKLWV4dGVybiB4ZnNfYWdudW1iZXJfdAl4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhzdHJ1Y3QgeGZzX21vdW50ICosIHhmc19hZ251bWJlcl90KTsKK2V4dGVybiBpbnQJeGZzX2luaXRpYWxpemVfcGVyYWcoc3RydWN0IHhmc19tb3VudCAqLCB4ZnNfYWdudW1iZXJfdCwKKwkJCQkJeGZzX2FnbnVtYmVyX3QgKik7CiBleHRlcm4gdm9pZAl4ZnNfc2JfZnJvbV9kaXNrKHN0cnVjdCB4ZnNfc2IgKiwgc3RydWN0IHhmc19kc2IgKik7CiBleHRlcm4gdm9pZAl4ZnNfc2JfdG9fZGlzayhzdHJ1Y3QgeGZzX2RzYiAqLCBzdHJ1Y3QgeGZzX3NiICosIF9faW50NjRfdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmMgYi9mcy94ZnMveGZzX21ydV9jYWNoZS5jCmluZGV4IDRiMDYxM2QuLjQ1Y2UxNWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmMKKysrIGIvZnMveGZzL3hmc19tcnVfY2FjaGUuYwpAQCAtMzk4LDcgKzM5OCw3IEBACiAgKiBndWFyYW50ZWVkIHRoYXQgYWxsIHRoZSBmcmVlIGZ1bmN0aW9ucyBmb3IgYWxsIHRoZSBlbGVtZW50cyBoYXZlIGZpbmlzaGVkCiAgKiBleGVjdXRpbmcgYW5kIHRoZSByZWFwZXIgaXMgbm90IHJ1bm5pbmcuCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiB4ZnNfbXJ1X2NhY2hlX2ZsdXNoKAogCXhmc19tcnVfY2FjaGVfdAkJKm1ydSkKIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmggYi9mcy94ZnMveGZzX21ydV9jYWNoZS5oCmluZGV4IDVkNDM5ZjMuLjM2ZGQzZWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmgKKysrIGIvZnMveGZzL3hmc19tcnVfY2FjaGUuaApAQCAtNDIsNyArNDIsNiBAQAogaW50IHhmc19tcnVfY2FjaGVfY3JlYXRlKHN0cnVjdCB4ZnNfbXJ1X2NhY2hlICoqbXJ1cCwgdW5zaWduZWQgaW50IGxpZmV0aW1lX21zLAogCQkJICAgICB1bnNpZ25lZCBpbnQgZ3JwX2NvdW50LAogCQkJICAgICB4ZnNfbXJ1X2NhY2hlX2ZyZWVfZnVuY190IGZyZWVfZnVuYyk7Ci12b2lkIHhmc19tcnVfY2FjaGVfZmx1c2goeGZzX21ydV9jYWNoZV90ICptcnUpOwogdm9pZCB4ZnNfbXJ1X2NhY2hlX2Rlc3Ryb3koc3RydWN0IHhmc19tcnVfY2FjaGUgKm1ydSk7CiBpbnQgeGZzX21ydV9jYWNoZV9pbnNlcnQoc3RydWN0IHhmc19tcnVfY2FjaGUgKm1ydSwgdW5zaWduZWQgbG9uZyBrZXksCiAJCQkJdm9pZCAqdmFsdWUpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19xdW90YS5oIGIvZnMveGZzL3hmc19xdW90YS5oCmluZGV4IDkxYmZkNjAuLmZkY2FiM2YgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcXVvdGEuaAorKysgYi9mcy94ZnMveGZzX3F1b3RhLmgKQEAgLTIyMywxNiArMjIzLDkgQEAKICNkZWZpbmUgWEZTX1FNT1BUX1JFU19JTk9TCTB4MDgwMDAwMAogCiAvKgotICogZmxhZ3MgZm9yIGRxZmx1c2ggYW5kIGRxZmx1c2hfYWxsLgotICovCi0jZGVmaW5lIFhGU19RTU9QVF9TWU5DCQkweDEwMDAwMDAKLSNkZWZpbmUgWEZTX1FNT1BUX0FTWU5DCQkweDIwMDAwMDAKLSNkZWZpbmUgWEZTX1FNT1BUX0RFTFdSSQkweDQwMDAwMDAKLQotLyoKICAqIGZsYWdzIGZvciBkcWFsbG9jLgogICovCi0jZGVmaW5lIFhGU19RTU9QVF9JTkhFUklUCTB4ODAwMDAwMAorI2RlZmluZSBYRlNfUU1PUFRfSU5IRVJJVAkweDEwMDAwMDAKIAogLyoKICAqIGZsYWdzIHRvIHhmc190cmFuc19tb2RfZHF1b3QuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J3LmMgYi9mcy94ZnMveGZzX3J3LmMKaW5kZXggNWFhMDdjYS4uZTMzNjc0MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydy5jCisrKyBiL2ZzL3hmcy94ZnNfcncuYwpAQCAtNDcsNDggKzQ3LDYgQEAKICNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKLSAqIFRoaXMgaXMgYSBzdWJyb3V0aW5lIGZvciB4ZnNfd3JpdGUoKSBhbmQgb3RoZXIgd3JpdGVycyAoeGZzX2lvY3RsKQotICogd2hpY2ggY2xlYXJzIHRoZSBzZXR1aWQgYW5kIHNldGdpZCBiaXRzIHdoZW4gYSBmaWxlIGlzIHdyaXR0ZW4uCi0gKi8KLWludAoteGZzX3dyaXRlX2NsZWFyX3NldHVpZCgKLQl4ZnNfaW5vZGVfdAkqaXApCi17Ci0JeGZzX21vdW50X3QJKm1wOwotCXhmc190cmFuc190CSp0cDsKLQlpbnQJCWVycm9yOwotCi0JbXAgPSBpcC0+aV9tb3VudDsKLQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1dSSVRFSUQpOwotCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwKLQkJCQkgICAgICBYRlNfV1JJVEVJRF9MT0dfUkVTKG1wKSwKLQkJCQkgICAgICAwLCAwLCAwKSkpIHsKLQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19paG9sZCh0cCwgaXApOwotCWlwLT5pX2QuZGlfbW9kZSAmPSB+U19JU1VJRDsKLQotCS8qCi0JICogTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgbWFuZGF0b3J5Ci0JICogZmlsZSBsb2NraW5nIGJlaW5nIGRpc2FibGVkIGhlcmUgYmVjYXVzZSB3ZSBvbmx5Ci0JICogY2xlYXIgdGhlIFNfSVNHSUQgYml0IGlmIHRoZSBHcm91cCBleGVjdXRlIGJpdCBpcwotCSAqIG9uLCBidXQgaWYgaXQgd2FzIG9uIHRoZW4gbWFuZGF0b3J5IGxvY2tpbmcgd291bGRuJ3QKLQkgKiBoYXZlIGJlZW4gZW5hYmxlZC4KLQkgKi8KLQlpZiAoaXAtPmlfZC5kaV9tb2RlICYgU19JWEdSUCkgewotCQlpcC0+aV9kLmRpX21vZGUgJj0gflNfSVNHSUQ7Ci0JfQotCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKLQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0JeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIEZvcmNlIGEgc2h1dGRvd24gb2YgdGhlIGZpbGVzeXN0ZW0gaW5zdGFudGx5IHdoaWxlIGtlZXBpbmcKICAqIHRoZSBmaWxlc3lzdGVtIGNvbnNpc3RlbnQuIFdlIGRvbid0IGRvIGFuIHVubW91bnQgaGVyZTsganVzdCBzaHV0ZG93bgogICogdGhlIHNob3AsIG1ha2Ugc3VyZSB0aGF0IGFic29sdXRlbHkgbm90aGluZyBwZXJzaXN0ZW50IGhhcHBlbnMgdG8KQEAgLTE1Myw4OCArMTExLDYgQEAKIAl9CiB9CiAKLQotLyoKLSAqIENhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3RvcCBhIGJ1ZmZlciBmcm9tIGdldHRpbmcgd3JpdHRlbiBvciByZWFkLgotICogV2UgYXR0YWNoIHRoZSBFSU8gZXJyb3IsIG11Y2sgd2l0aCBpdHMgZmxhZ3MsIGFuZCBjYWxsIGJpb2RvbmUKLSAqIHNvIHRoYXQgdGhlIHByb3BlciBpb2RvbmUgY2FsbGJhY2tzIGdldCBjYWxsZWQuCi0gKi8KLWludAoteGZzX2Jpb2Vycm9yKAotCXhmc19idWZfdCAqYnApCi17Ci0KLSNpZmRlZiBYRlNFUlJPUkRFQlVHCi0JQVNTRVJUKFhGU19CVUZfSVNSRUFEKGJwKSB8fCBicC0+Yl9pb2RvbmUpOwotI2VuZGlmCi0KLQkvKgotCSAqIE5vIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIGlzIHVucGlubmVkLgotCSAqIFdlIGFyZW4ndCBmbHVzaGluZyBpdC4KLQkgKi8KLQlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOwotCS8qCi0JICogV2UncmUgY2FsbGluZyBiaW9kb25lLCBzbyBkZWxldGUgQl9ET05FIGZsYWcuIEVpdGhlciB3YXkKLQkgKiB3ZSBoYXZlIHRvIGNhbGwgdGhlIGlvZG9uZSBjYWxsYmFjaywgYW5kIGNhbGxpbmcgYmlvZG9uZQotCSAqIHByb2JhYmx5IGlzIHRoZSBiZXN0IHdheSBzaW5jZSBpdCB0YWtlcyBjYXJlIG9mCi0JICogR1JJTyBhcyB3ZWxsLgotCSAqLwotCVhGU19CVUZfVU5SRUFEKGJwKTsKLQlYRlNfQlVGX1VOREVMQVlXUklURShicCk7Ci0JWEZTX0JVRl9VTkRPTkUoYnApOwotCVhGU19CVUZfU1RBTEUoYnApOwotCi0JWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKLQl4ZnNfYmlvZG9uZShicCk7Ci0KLQlyZXR1cm4gKEVJTyk7Ci19Ci0KLS8qCi0gKiBTYW1lIGFzIHhmc19iaW9lcnJvciwgZXhjZXB0IHRoYXQgd2UgYXJlIHJlbGVhc2luZyB0aGUgYnVmZmVyCi0gKiBoZXJlIG91cnNlbHZlcywgYW5kIGF2b2lkaW5nIHRoZSBiaW9kb25lIGNhbGwuCi0gKiBUaGlzIGlzIG1lYW50IGZvciB1c2VyZGF0YSBlcnJvcnM7IG1ldGFkYXRhIGJ1ZnMgY29tZSB3aXRoCi0gKiBpb2RvbmUgZnVuY3Rpb25zIGF0dGFjaGVkLCBzbyB0aGF0IHdlIGNhbiB0cmFjayBkb3duIGVycm9ycy4KLSAqLwotaW50Ci14ZnNfYmlvZXJyb3JfcmVsc2UoCi0JeGZzX2J1Zl90ICpicCkKLXsKLQlpbnQ2NF90IGZsOwotCi0JQVNTRVJUKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApICE9IHhmc19idWZfaW9kb25lX2NhbGxiYWNrcyk7Ci0JQVNTRVJUKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApICE9IHhsb2dfaW9kb25lKTsKLQotCWZsID0gWEZTX0JVRl9CRkxBR1MoYnApOwotCS8qCi0JICogTm8gbmVlZCB0byB3YWl0IHVudGlsIHRoZSBidWZmZXIgaXMgdW5waW5uZWQuCi0JICogV2UgYXJlbid0IGZsdXNoaW5nIGl0LgotCSAqCi0JICogY2h1bmtob2xkIGV4cGVjdHMgQl9ET05FIHRvIGJlIHNldCwgd2hldGhlcgotCSAqIHdlIGFjdHVhbGx5IGZpbmlzaCB0aGUgSS9PIG9yIG5vdC4gV2UgZG9uJ3Qgd2FudCB0bwotCSAqIGNoYW5nZSB0aGF0IGludGVyZmFjZS4KLQkgKi8KLQlYRlNfQlVGX1VOUkVBRChicCk7Ci0JWEZTX0JVRl9VTkRFTEFZV1JJVEUoYnApOwotCVhGU19CVUZfRE9ORShicCk7Ci0JWEZTX0JVRl9TVEFMRShicCk7Ci0JWEZTX0JVRl9DTFJfSU9ET05FX0ZVTkMoYnApOwotCVhGU19CVUZfQ0xSX0JEU1RSQVRfRlVOQyhicCk7Ci0JaWYgKCEoZmwgJiBYRlNfQl9BU1lOQykpIHsKLQkJLyoKLQkJICogTWFyayBiX2Vycm9yIGFuZCBCX0VSUk9SIF9ib3RoXy4KLQkJICogTG90J3Mgb2YgY2h1bmtjYWNoZSBjb2RlIGFzc3VtZXMgdGhhdC4KLQkJICogVGhlcmUncyBubyByZWFzb24gdG8gbWFyayBlcnJvciBmb3IKLQkJICogQVNZTkMgYnVmZmVycy4KLQkJICovCi0JCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7Ci0JCVhGU19CVUZfRklOSVNIX0lPV0FJVChicCk7Ci0JfSBlbHNlIHsKLQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JfQotCXJldHVybiAoRUlPKTsKLX0KLQogLyoKICAqIFByaW50cyBvdXQgYW4gQUxFUlQgbWVzc2FnZSBhYm91dCBJL08gZXJyb3IuCiAgKi8KQEAgLTMwNiwzNyArMTgyLDYgQEAKIH0KIAogLyoKLSAqIFdyYXBwZXIgYXJvdW5kIGJ3cml0ZSgpIHNvIHRoYXQgd2UgY2FuIHRyYXAKLSAqIHdyaXRlIGVycm9ycywgYW5kIGFjdCBhY2NvcmRpbmdseS4KLSAqLwotaW50Ci14ZnNfYndyaXRlKAotCXN0cnVjdCB4ZnNfbW91bnQgKm1wLAotCXN0cnVjdCB4ZnNfYnVmCSAqYnApCi17Ci0JaW50CWVycm9yOwotCi0JLyoKLQkgKiBYWFhzdXAgaG93IGRvZXMgdGhpcyB3b3JrIGZvciBxdW90YXMuCi0JICovCi0JWEZTX0JVRl9TRVRfQkRTVFJBVF9GVU5DKGJwLCB4ZnNfYmRzdHJhdF9jYik7Ci0JYnAtPmJfbW91bnQgPSBtcDsKLQlYRlNfQlVGX1dSSVRFKGJwKTsKLQotCWlmICgoZXJyb3IgPSBYRlNfYndyaXRlKGJwKSkpIHsKLQkJQVNTRVJUKG1wKTsKLQkJLyoKLQkJICogQ2Fubm90IHB1dCBhIGJ1ZnRyYWNlIGhlcmUgc2luY2UgaWYgdGhlIGJ1ZmZlciBpcyBub3QKLQkJICogQl9IT0xEIHRoZW4gd2Ugd2lsbCBicmVsc2UoKSB0aGUgYnVmZmVyIGJlZm9yZSByZXR1cm5pbmcKLQkJICogZnJvbSBid3JpdGUgYW5kIHdlIGNvdWxkIGJlIHRyYWNpbmcgYSBidWZmZXIgdGhhdCBoYXMKLQkJICogYmVlbiByZXVzZWQuCi0JCSAqLwotCQl4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX01FVEFfSU9fRVJST1IpOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotLyoKICAqIGhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IGV4dGVudCBzaXplIGhpbnQgZnJvbSBpbm9kZQogICovCiB4ZnNfZXh0bGVuX3QKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcncuaCBiL2ZzL3hmcy94ZnNfcncuaAppbmRleCA1NzFmMjE3Li4xMWM0MWVjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J3LmgKKysrIGIvZnMveGZzL3hmc19ydy5oCkBAIC0zOSwxMCArMzksNiBAQAogLyoKICAqIFByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiB4ZnNfcncuYy4KICAqLwotZXh0ZXJuIGludCB4ZnNfd3JpdGVfY2xlYXJfc2V0dWlkKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKLWV4dGVybiBpbnQgeGZzX2J3cml0ZShzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHhmc19idWYgKmJwKTsKLWV4dGVybiBpbnQgeGZzX2Jpb2Vycm9yKHN0cnVjdCB4ZnNfYnVmICpicCk7Ci1leHRlcm4gaW50IHhmc19iaW9lcnJvcl9yZWxzZShzdHJ1Y3QgeGZzX2J1ZiAqYnApOwogZXh0ZXJuIGludCB4ZnNfcmVhZF9idWYoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19idWZ0YXJnX3QgKmJ0cCwKIAkJCXhmc19kYWRkcl90IGJsa25vLCBpbnQgbGVuLCB1aW50IGZsYWdzLAogCQkJc3RydWN0IHhmc19idWYgKipicHApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5jIGIvZnMveGZzL3hmc190cmFucy5jCmluZGV4IDIzN2JhZGMuLmJlOTQyZDQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuYworKysgYi9mcy94ZnMveGZzX3RyYW5zLmMKQEAgLTk4MSw5ICs5ODEsOCBAQAogCSAqLwogCWlmIChzeW5jKSB7CiAJCWlmICghZXJyb3IpIHsKLQkJCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsIGNvbW1pdF9sc24sCi0JCQkJICAgICAgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQywKLQkJCQkgICAgICBsb2dfZmx1c2hlZCk7CisJCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihtcCwgY29tbWl0X2xzbiwKKwkJCQkgICAgICBYRlNfTE9HX1NZTkMsIGxvZ19mbHVzaGVkKTsKIAkJfQogCQlYRlNfU1RBVFNfSU5DKHhzX3RyYW5zX3N5bmMpOwogCX0gZWxzZSB7CkBAIC0xMTIxLDcgKzExMjAsNyBAQAogCXRwLT50X2hlYWRlci50aF9udW1faXRlbXMgPSBuaXRlbXM7CiAJbG9nX3ZlY3Rvci0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZ0cC0+dF9oZWFkZXI7CiAJbG9nX3ZlY3Rvci0+aV9sZW4gPSBzaXplb2YoeGZzX3RyYW5zX2hlYWRlcl90KTsKLQlYTE9HX1ZFQ19TRVRfVFlQRShsb2dfdmVjdG9yLCBYTE9HX1JFR19UWVBFX1RSQU5TSERSKTsKKwlsb2dfdmVjdG9yLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX1RSQU5TSERSOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuaCBiL2ZzL3hmcy94ZnNfdHJhbnMuaAppbmRleCBjYTY0ZjMzLi5jOTNlM2ExIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmgKKysrIGIvZnMveGZzL3hmc190cmFucy5oCkBAIC04NjEsOCArODYxLDcgQEAKICNkZWZpbmUJWEZTX0lURU1fU1VDQ0VTUwkwCiAjZGVmaW5lCVhGU19JVEVNX1BJTk5FRAkJMQogI2RlZmluZQlYRlNfSVRFTV9MT0NLRUQJCTIKLSNkZWZpbmUJWEZTX0lURU1fRkxVU0hJTkcJMwotI2RlZmluZSBYRlNfSVRFTV9QVVNIQlVGCTQKKyNkZWZpbmUgWEZTX0lURU1fUFVTSEJVRgkzCiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBibG9jayByYW5nZXMgdGhhdCBoYXZlIGJlZW4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IDJmZmM1NzAuLmU3OTk4MjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtMjM3LDE0ICsyMzcsMTUgQEAKIH0KIAogLyoKLSAqIEZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgd29yayBvZiBwdXNoaW5nIG9uIHRoZSBBSUwKKyAqIHhmc2FpbGRfcHVzaCBkb2VzIHRoZSB3b3JrIG9mIHB1c2hpbmcgb24gdGhlIEFJTC4gIFJldHVybmluZyBhIHRpbWVvdXQgb2YKKyAqIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgc2xlZXAgdW50aWwgd29rZW4uCiAgKi8KIGxvbmcKIHhmc2FpbGRfcHVzaCgKIAlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKIAl4ZnNfbHNuX3QJKmxhc3RfbHNuKQogewotCWxvbmcJCXRvdXQgPSAxMDAwOyAvKiBtaWxsaXNlY29uZHMgKi8KKwlsb25nCQl0b3V0ID0gMDsKIAl4ZnNfbHNuX3QJbGFzdF9wdXNoZWRfbHNuID0gKmxhc3RfbHNuOwogCXhmc19sc25fdAl0YXJnZXQgPSAgYWlscC0+eGFfdGFyZ2V0OwogCXhmc19sc25fdAlsc247CkBAIC0yNTIsNiArMjUzLDcgQEAKIAlpbnQJCWZsdXNoX2xvZywgY291bnQsIHN0dWNrOwogCXhmc19tb3VudF90CSptcCA9IGFpbHAtPnhhX21vdW50OwogCXN0cnVjdCB4ZnNfYWlsX2N1cnNvcgkqY3VyID0gJmFpbHAtPnhhX2N1cnNvcnM7CisJaW50CQlwdXNoX3hmc2J1ZmQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9pbml0KGFpbHAsIGN1cik7CkBAIC0yNjIsNyArMjY0LDcgQEAKIAkJICovCiAJCXhmc190cmFuc19haWxfY3Vyc29yX2RvbmUoYWlscCwgY3VyKTsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwotCQlsYXN0X3B1c2hlZF9sc24gPSAwOworCQkqbGFzdF9sc24gPSAwOwogCQlyZXR1cm4gdG91dDsKIAl9CiAKQEAgLTI3OSw3ICsyODEsNiBAQAogCSAqIHByZXZlbnRzIHVzZSBmcm9tIHNwaW5uaW5nIHdoZW4gd2UgY2FuJ3QgZG8gYW55dGhpbmcgb3IgdGhlcmUgaXMKIAkgKiBsb3RzIG9mIGNvbnRlbnRpb24gb24gdGhlIEFJTCBsaXN0cy4KIAkgKi8KLQl0b3V0ID0gMTA7CiAJbHNuID0gbGlwLT5saV9sc247CiAJZmx1c2hfbG9nID0gc3R1Y2sgPSBjb3VudCA9IDA7CiAJd2hpbGUgKChYRlNfTFNOX0NNUChsaXAtPmxpX2xzbiwgdGFyZ2V0KSA8IDApKSB7CkBAIC0zMDgsNiArMzA5LDcgQEAKIAkJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfcHVzaGJ1Zik7CiAJCQlJT1BfUFVTSEJVRihsaXApOwogCQkJbGFzdF9wdXNoZWRfbHNuID0gbHNuOworCQkJcHVzaF94ZnNidWZkID0gMTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgWEZTX0lURU1fUElOTkVEOgpAQCAtMzIyLDEyICszMjQsNiBAQAogCQkJc3R1Y2srKzsKIAkJCWJyZWFrOwogCi0JCWNhc2UgWEZTX0lURU1fRkxVU0hJTkc6Ci0JCQlYRlNfU1RBVFNfSU5DKHhzX3B1c2hfYWlsX2ZsdXNoaW5nKTsKLQkJCWxhc3RfcHVzaGVkX2xzbiA9IGxzbjsKLQkJCXN0dWNrKys7Ci0JCQlicmVhazsKLQogCQlkZWZhdWx0OgogCQkJQVNTRVJUKDApOwogCQkJYnJlYWs7CkBAIC0zNzEsMTkgKzM2NywyNCBAQAogCQkgKiBtb3ZlIGZvcndhcmQgaW4gdGhlIEFJTC4KIAkJICovCiAJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfZmx1c2gpOwotCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UpOworCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKKwl9CisKKwlpZiAocHVzaF94ZnNidWZkKSB7CisJCS8qIHdlJ3ZlIGdvdCBkZWxheWVkIHdyaXRlIGJ1ZmZlcnMgdG8gZmx1c2ggKi8KKwkJd2FrZV91cF9wcm9jZXNzKG1wLT5tX2RkZXZfdGFyZ3AtPmJ0X3Rhc2spOwogCX0KIAogCWlmICghY291bnQpIHsKIAkJLyogV2UncmUgcGFzdCBvdXIgdGFyZ2V0IG9yIGVtcHR5LCBzbyBpZGxlICovCi0JCXRvdXQgPSAxMDAwOworCQlsYXN0X3B1c2hlZF9sc24gPSAwOwogCX0gZWxzZSBpZiAoWEZTX0xTTl9DTVAobHNuLCB0YXJnZXQpID49IDApIHsKIAkJLyoKIAkJICogV2UgcmVhY2hlZCB0aGUgdGFyZ2V0IHNvIHdhaXQgYSBiaXQgbG9uZ2VyIGZvciBJL08gdG8KIAkJICogY29tcGxldGUgYW5kIHJlbW92ZSBwdXNoZWQgaXRlbXMgZnJvbSB0aGUgQUlMIGJlZm9yZSB3ZQogCQkgKiBzdGFydCB0aGUgbmV4dCBzY2FuIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBBSUwuCiAJCSAqLwotCQl0b3V0ICs9IDIwOworCQl0b3V0ID0gNTA7CiAJCWxhc3RfcHVzaGVkX2xzbiA9IDA7CiAJfSBlbHNlIGlmICgoc3R1Y2sgKiAxMDApIC8gY291bnQgPiA5MCkgewogCQkvKgpAQCAtMzk1LDExICszOTYsMTQgQEAKIAkJICogQmFja29mZiBhIGJpdCBtb3JlIHRvIGFsbG93IHNvbWUgSS9PIHRvIGNvbXBsZXRlIGJlZm9yZQogCQkgKiBjb250aW51aW5nIGZyb20gd2hlcmUgd2Ugd2VyZS4KIAkJICovCi0JCXRvdXQgKz0gMTA7CisJCXRvdXQgPSAyMDsKKwl9IGVsc2UgeworCQkvKiBtb3JlIHRvIGRvLCBidXQgd2FpdCBhIHNob3J0IHdoaWxlIGJlZm9yZSBjb250aW51aW5nICovCisJCXRvdXQgPSAxMDsKIAl9CiAJKmxhc3RfbHNuID0gbGFzdF9wdXNoZWRfbHNuOwogCXJldHVybiB0b3V0OwotfQkvKiB4ZnNhaWxkX3B1c2ggKi8KK30KIAogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19idWYuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKaW5kZXggNDkxMzA2Mi4uNWZmZDU0NCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19idWYuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCkBAIC03NSwxMyArNzUsMTQgQEAKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcDsKIAogCWlmIChmbGFncyA9PSAwKQotCQlmbGFncyA9IFhGU19CVUZfTE9DSyB8IFhGU19CVUZfTUFQUEVEOworCQlmbGFncyA9IFhCRl9MT0NLIHwgWEJGX01BUFBFRDsKIAogCS8qCiAJICogRGVmYXVsdCB0byBhIG5vcm1hbCBnZXRfYnVmKCkgY2FsbCBpZiB0aGUgdHAgaXMgTlVMTC4KIAkgKi8KIAlpZiAodHAgPT0gTlVMTCkKLQkJcmV0dXJuIHhmc19idWZfZ2V0KHRhcmdldF9kZXYsIGJsa25vLCBsZW4sIGZsYWdzIHwgQlVGX0JVU1kpOworCQlyZXR1cm4geGZzX2J1Zl9nZXQodGFyZ2V0X2RldiwgYmxrbm8sIGxlbiwKKwkJCQkgICBmbGFncyB8IFhCRl9ET05UX0JMT0NLKTsKIAogCS8qCiAJICogSWYgd2UgZmluZCB0aGUgYnVmZmVyIGluIHRoZSBjYWNoZSB3aXRoIHRoaXMgdHJhbnNhY3Rpb24KQEAgLTExNywxNCArMTE4LDE0IEBACiAJfQogCiAJLyoKLQkgKiBXZSBhbHdheXMgc3BlY2lmeSB0aGUgQlVGX0JVU1kgZmxhZyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBzbwotCSAqIHRoYXQgZ2V0X2J1ZiBkb2VzIG5vdCB0cnkgdG8gcHVzaCBvdXQgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlcgorCSAqIFdlIGFsd2F5cyBzcGVjaWZ5IHRoZSBYQkZfRE9OVF9CTE9DSyBmbGFnIHdpdGhpbiBhIHRyYW5zYWN0aW9uCisJICogc28gdGhhdCBnZXRfYnVmIGRvZXMgbm90IHRyeSB0byBwdXNoIG91dCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyCiAJICogd2hpY2ggbWlnaHQgY2F1c2UgYW5vdGhlciB0cmFuc2FjdGlvbiB0byB0YWtlIHBsYWNlIChpZiB0aGUKIAkgKiBidWZmZXIgd2FzIGRlbGF5ZWQgYWxsb2MpLiAgU3VjaCByZWN1cnNpdmUgdHJhbnNhY3Rpb25zIGNhbgogCSAqIGVhc2lseSBkZWFkbG9jayB3aXRoIG91ciBjdXJyZW50IHRyYW5zYWN0aW9uIGFzIHdlbGwgYXMgY2F1c2UKIAkgKiB1cyB0byBydW4gb3V0IG9mIHN0YWNrIHNwYWNlLgogCSAqLwotCWJwID0geGZzX2J1Zl9nZXQodGFyZ2V0X2RldiwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CisJYnAgPSB4ZnNfYnVmX2dldCh0YXJnZXRfZGV2LCBibGtubywgbGVuLCBmbGFncyB8IFhCRl9ET05UX0JMT0NLKTsKIAlpZiAoYnAgPT0gTlVMTCkgewogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0yOTAsMTUgKzI5MSwxNSBAQAogCWludAkJCWVycm9yOwogCiAJaWYgKGZsYWdzID09IDApCi0JCWZsYWdzID0gWEZTX0JVRl9MT0NLIHwgWEZTX0JVRl9NQVBQRUQ7CisJCWZsYWdzID0gWEJGX0xPQ0sgfCBYQkZfTUFQUEVEOwogCiAJLyoKIAkgKiBEZWZhdWx0IHRvIGEgbm9ybWFsIGdldF9idWYoKSBjYWxsIGlmIHRoZSB0cCBpcyBOVUxMLgogCSAqLwogCWlmICh0cCA9PSBOVUxMKSB7Ci0JCWJwID0geGZzX2J1Zl9yZWFkKHRhcmdldCwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CisJCWJwID0geGZzX2J1Zl9yZWFkKHRhcmdldCwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBYQkZfRE9OVF9CTE9DSyk7CiAJCWlmICghYnApCi0JCQlyZXR1cm4gKGZsYWdzICYgWEZTX0JVRl9UUllMT0NLKSA/CisJCQlyZXR1cm4gKGZsYWdzICYgWEJGX1RSWUxPQ0spID8KIAkJCQkJRUFHQUlOIDogWEZTX0VSUk9SKEVOT01FTSk7CiAKIAkJaWYgKFhGU19CVUZfR0VURVJST1IoYnApICE9IDApIHsKQEAgLTM4NSwxNCArMzg2LDE0IEBACiAJfQogCiAJLyoKLQkgKiBXZSBhbHdheXMgc3BlY2lmeSB0aGUgQlVGX0JVU1kgZmxhZyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBzbwotCSAqIHRoYXQgZ2V0X2J1ZiBkb2VzIG5vdCB0cnkgdG8gcHVzaCBvdXQgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlcgorCSAqIFdlIGFsd2F5cyBzcGVjaWZ5IHRoZSBYQkZfRE9OVF9CTE9DSyBmbGFnIHdpdGhpbiBhIHRyYW5zYWN0aW9uCisJICogc28gdGhhdCBnZXRfYnVmIGRvZXMgbm90IHRyeSB0byBwdXNoIG91dCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyCiAJICogd2hpY2ggbWlnaHQgY2F1c2UgYW5vdGhlciB0cmFuc2FjdGlvbiB0byB0YWtlIHBsYWNlIChpZiB0aGUKIAkgKiBidWZmZXIgd2FzIGRlbGF5ZWQgYWxsb2MpLiAgU3VjaCByZWN1cnNpdmUgdHJhbnNhY3Rpb25zIGNhbgogCSAqIGVhc2lseSBkZWFkbG9jayB3aXRoIG91ciBjdXJyZW50IHRyYW5zYWN0aW9uIGFzIHdlbGwgYXMgY2F1c2UKIAkgKiB1cyB0byBydW4gb3V0IG9mIHN0YWNrIHNwYWNlLgogCSAqLwotCWJwID0geGZzX2J1Zl9yZWFkKHRhcmdldCwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CisJYnAgPSB4ZnNfYnVmX3JlYWQodGFyZ2V0LCBibGtubywgbGVuLCBmbGFncyB8IFhCRl9ET05UX0JMT0NLKTsKIAlpZiAoYnAgPT0gTlVMTCkgewogCQkqYnBwID0gTlVMTDsKIAkJcmV0dXJuIDA7CkBAIC00NzIsOCArNDczLDggQEAKIAlpZiAoWEZTX0JVRl9JU1NUQUxFKGJwKSAmJiBYRlNfQlVGX0lTREVMQVlXUklURShicCkpCiAJCWNtbl9lcnIoQ0VfTk9URSwgImFib3V0IHRvIHBvcCBhc3NlcnQsIGJwID09IDB4JXAiLCBicCk7CiAjZW5kaWYKLQlBU1NFUlQoKFhGU19CVUZfQkZMQUdTKGJwKSAmIChYRlNfQl9TVEFMRXxYRlNfQl9ERUxXUkkpKSAhPQotCQkJCQkJKFhGU19CX1NUQUxFfFhGU19CX0RFTFdSSSkpOworCUFTU0VSVCgoWEZTX0JVRl9CRkxBR1MoYnApICYgKFhCRl9TVEFMRXxYQkZfREVMV1JJKSkgIT0KKwkJCQkgICAgIChYQkZfU1RBTEV8WEJGX0RFTFdSSSkpOwogCiAJdHJhY2VfeGZzX3RyYW5zX3JlYWRfYnVmX3NodXQoYnAsIF9SRVRfSVBfKTsKIAl4ZnNfYnVmX3JlbHNlKGJwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHlwZXMuaCBiL2ZzL3hmcy94ZnNfdHlwZXMuaAppbmRleCBkNzI1NDI4Li5iMDk5MDQ1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3R5cGVzLmgKKysrIGIvZnMveGZzL3hmc190eXBlcy5oCkBAIC0xNTEsOCArMTUxLDggQEAKIH0geGZzX2J0bnVtX3Q7CiAKIHN0cnVjdCB4ZnNfbmFtZSB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQlpbnQJCWxlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyCSpuYW1lOworCWludAkJCWxlbjsKIH07CiAKICNlbmRpZgkvKiBfX1hGU19UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCA2ZjI2ODc1Li5kZGQyYzVkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJICAgIGlhdHRyLT5pYV9zaXplID4gaXAtPmlfZC5kaV9zaXplKSB7CiAJCQljb2RlID0geGZzX2ZsdXNoX3BhZ2VzKGlwLAogCQkJCQlpcC0+aV9kLmRpX3NpemUsIGlhdHRyLT5pYV9zaXplLAotCQkJCQlYRlNfQl9BU1lOQywgRklfTk9ORSk7CisJCQkJCVhCRl9BU1lOQywgRklfTk9ORSk7CiAJCX0KIAogCQkvKiB3YWl0IGZvciBhbGwgSS9PIHRvIGNvbXBsZXRlICovCkBAIC01OTcsNyArNTk3LDcgQEAKIHsKIAl4ZnNfdHJhbnNfdAkqdHA7CiAJaW50CQllcnJvciA9IDA7Ci0JaW50CQlsb2dfZmx1c2hlZCA9IDAsIGNoYW5nZWQgPSAxOworCWludAkJbG9nX2ZsdXNoZWQgPSAwOwogCiAJeGZzX2l0cmFjZV9lbnRyeShpcCk7CiAKQEAgLTYyNywxOSArNjI3LDE2IEBACiAJCSAqIGRpc2sgeWV0LCB0aGUgaW5vZGUgd2lsbCBiZSBzdGlsbCBiZSBwaW5uZWQuICBJZiBpdCBpcywKIAkJICogZm9yY2UgdGhlIGxvZy4KIAkJICovCi0KIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCiAJCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgewotCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwgKHhmc19sc25fdCkwLAotCQkJCSAgICAgIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMsCi0JCQkJICAgICAgJmxvZ19mbHVzaGVkKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgaW5vZGUgaXMgbm90IHBpbm5lZCBhbmQgbm90aGluZyBoYXMgY2hhbmdlZAotCQkJICogd2UgZG9uJ3QgbmVlZCB0byBmbHVzaCB0aGUgY2FjaGUuCi0JCQkgKi8KLQkJCWNoYW5nZWQgPSAwOworCQkJaWYgKGlwLT5pX2l0ZW1wLT5pbGlfbGFzdF9sc24pIHsKKwkJCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihpcC0+aV9tb3VudCwKKwkJCQkJCWlwLT5pX2l0ZW1wLT5pbGlfbGFzdF9sc24sCisJCQkJCQlYRlNfTE9HX1NZTkMsICZsb2dfZmx1c2hlZCk7CisJCQl9IGVsc2UgeworCQkJCWVycm9yID0gX3hmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsCisJCQkJCQlYRlNfTE9HX1NZTkMsICZsb2dfZmx1c2hlZCk7CisJCQl9CiAJCX0KIAl9IGVsc2UJewogCQkvKgpAQCAtNjc0LDcgKzY3MSw3IEBACiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJfQogCi0JaWYgKChpcC0+aV9tb3VudC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKSAmJiBjaGFuZ2VkKSB7CisJaWYgKGlwLT5pX21vdW50LT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpIHsKIAkJLyoKIAkJICogSWYgdGhlIGxvZyB3cml0ZSBkaWRuJ3QgaXNzdWUgYW4gb3JkZXJlZCB0YWcgd2UgbmVlZAogCQkgKiB0byBmbHVzaCB0aGUgZGlzayBjYWNoZSBmb3IgdGhlIGRhdGEgZGV2aWNlIG5vdy4KQEAgLTEwOTYsNyArMTA5Myw3IEBACiAJCSAqLwogCQl0cnVuY2F0ZWQgPSB4ZnNfaWZsYWdzX3Rlc3RfYW5kX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7CiAJCWlmICh0cnVuY2F0ZWQgJiYgVk5fRElSVFkoVkZTX0koaXApKSAmJiBpcC0+aV9kZWxheWVkX2Jsa3MgPiAwKQotCQkJeGZzX2ZsdXNoX3BhZ2VzKGlwLCAwLCAtMSwgWEZTX0JfQVNZTkMsIEZJX05PTkUpOworCQkJeGZzX2ZsdXNoX3BhZ2VzKGlwLCAwLCAtMSwgWEJGX0FTWU5DLCBGSV9OT05FKTsKIAl9CiAKIAlpZiAoaXAtPmlfZC5kaV9ubGluayAhPSAwKSB7CkBAIC0yMTk5LDcgKzIxOTYsOCBAQAogCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9TWU1MSU5LKSkgewogCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfU1lNTElOSywgZHAsCiAJCQkJCURNX1JJR0hUX05VTEwsIE5VTEwsIERNX1JJR0hUX05VTEwsCi0JCQkJCWxpbmtfbmFtZS0+bmFtZSwgdGFyZ2V0X3BhdGgsIDAsIDAsIDApOworCQkJCQlsaW5rX25hbWUtPm5hbWUsCisJCQkJCSh1bnNpZ25lZCBjaGFyICopdGFyZ2V0X3BhdGgsIDAsIDAsIDApOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMjM5NSw3ICsyMzkzLDggQEAKIAkJCQkJZHAsIERNX1JJR0hUX05VTEwsCiAJCQkJCWVycm9yID8gTlVMTCA6IGlwLAogCQkJCQlETV9SSUdIVF9OVUxMLCBsaW5rX25hbWUtPm5hbWUsCi0JCQkJCXRhcmdldF9wYXRoLCAwLCBlcnJvciwgMCk7CisJCQkJCSh1bnNpZ25lZCBjaGFyICopdGFyZ2V0X3BhdGgsCisJCQkJCTAsIGVycm9yLCAwKTsKIAl9CiAKIAlpZiAoIWVycm9yKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5oIGIvZnMveGZzL3hmc192bm9kZW9wcy5oCmluZGV4IDE2N2E0NjcuLjc3NGY0MDcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAorKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKQEAgLTQzLDExICs0MywxMSBAQAogaW50IHhmc19yZW5hbWUoc3RydWN0IHhmc19pbm9kZSAqc3JjX2RwLCBzdHJ1Y3QgeGZzX25hbWUgKnNyY19uYW1lLAogCQlzdHJ1Y3QgeGZzX2lub2RlICpzcmNfaXAsIHN0cnVjdCB4ZnNfaW5vZGUgKnRhcmdldF9kcCwKIAkJc3RydWN0IHhmc19uYW1lICp0YXJnZXRfbmFtZSwgc3RydWN0IHhmc19pbm9kZSAqdGFyZ2V0X2lwKTsKLWludCB4ZnNfYXR0cl9nZXQoc3RydWN0IHhmc19pbm9kZSAqaXAsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlLAotCQlpbnQgKnZhbHVlbGVucCwgaW50IGZsYWdzKTsKLWludCB4ZnNfYXR0cl9zZXQoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlLAotCQlpbnQgdmFsdWVsZW4sIGludCBmbGFncyk7Ci1pbnQgeGZzX2F0dHJfcmVtb3ZlKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOworaW50IHhmc19hdHRyX2dldChzdHJ1Y3QgeGZzX2lub2RlICppcCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwkJdW5zaWduZWQgY2hhciAqdmFsdWUsIGludCAqdmFsdWVsZW5wLCBpbnQgZmxhZ3MpOworaW50IHhmc19hdHRyX3NldChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwkJdW5zaWduZWQgY2hhciAqdmFsdWUsIGludCB2YWx1ZWxlbiwgaW50IGZsYWdzKTsKK2ludCB4ZnNfYXR0cl9yZW1vdmUoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBmbGFncyk7CiBpbnQgeGZzX2F0dHJfbGlzdChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSwKIAkJaW50IGZsYWdzLCBzdHJ1Y3QgYXR0cmxpc3RfY3Vyc29yX2tlcm4gKmN1cnNvcik7CiBzc2l6ZV90IHhmc19yZWFkKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCmluZGV4IDNjZDljY2QuLjU0NTA4Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCkBAIC0yNDIsNiArMjQyLDggQEAKIHN0cnVjdCBhY3BpX2RldmljZV93YWtldXBfZmxhZ3MgewogCXU4IHZhbGlkOjE7CQkvKiBDYW4gc3VjY2Vzc2Z1bGx5IGVuYWJsZSB3YWtldXA/ICovCiAJdTggcnVuX3dha2U6MTsJCS8qIFJ1bi1XYWtlIEdQRSBkZXZpY2VzICovCisJdTggYWx3YXlzX2VuYWJsZWQ6MTsJLyogUnVuLXdha2UgZGV2aWNlcyB0aGF0IGFyZSBhbHdheXMgZW5hYmxlZCAqLworCXU4IG5vdGlmaWVyX3ByZXNlbnQ6MTsgIC8qIFdha2UtdXAgbm90aWZ5IGhhbmRsZXIgaGFzIGJlZW4gaW5zdGFsbGVkICovCiB9OwogCiBzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX3N0YXRlIHsKQEAgLTI1Niw2ICsyNTgsNyBAQAogCXN0cnVjdCBhY3BpX2RldmljZV93YWtldXBfc3RhdGUgc3RhdGU7CiAJc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9mbGFncyBmbGFnczsKIAlpbnQgcHJlcGFyZV9jb3VudDsKKwlpbnQgcnVuX3dha2VfY291bnQ7CiB9OwogCiAvKiBEZXZpY2UgKi8KQEAgLTM4Niw2ICszODksOSBAQAogc3RydWN0IGFjcGlfcGNpX3Jvb3QgKmFjcGlfcGNpX2ZpbmRfcm9vdChhY3BpX2hhbmRsZSBoYW5kbGUpOwogI2RlZmluZSBERVZJQ0VfQUNQSV9IQU5ETEUoZGV2KSAoKGFjcGlfaGFuZGxlKSgoZGV2KS0+YXJjaGRhdGEuYWNwaV9oYW5kbGUpKQogCitpbnQgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgaW50IHN0YXRlKTsKK2ludCBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7CisKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIGludCBhY3BpX3BtX2RldmljZV9zbGVlcF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICosIGludCAqKTsKIGludCBhY3BpX3BtX2RldmljZV9zbGVlcF93YWtlKHN0cnVjdCBkZXZpY2UgKiwgYm9vbCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKaW5kZXggZjQ5MDZmNi4uM2E0NzY3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaApAQCAtMTA0LDYgKzEwNCw3IEBACiAKIHN0cnVjdCBwY2lfYnVzICpwY2lfYWNwaV9zY2FuX3Jvb3Qoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCBkb21haW4sCiAJCQkJICAgaW50IGJ1cyk7Cit2b2lkIHBjaV9hY3BpX2Nyc19xdWlya3Modm9pZCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAppbmRleCA4NmU5NzM1Li4zOTg4ZjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCkBAIC0yODEsMTEgKzI4MSwxMSBAQAogLyoKICAqIEdQRSBJbnRlcmZhY2VzCiAgKi8KLWFjcGlfc3RhdHVzIGFjcGlfc2V0X2dwZV90eXBlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKTsKK2FjcGlfc3RhdHVzIGFjcGlfc2V0X2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggYWN0aW9uKTsKIAotYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKTsKK2FjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpOworYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfY2xlYXJfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1MzIgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAppbmRleCAxNTNmMTJkLi43M2FmNDA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTY2OCwxNSArNjY4LDE2IEBACiAKIC8qCiAgKiBHUEUgaW5mbyBmbGFncyAtIFBlciBHUEUKLSAqICstKy0rLSstLS0rLS0tKy0rCi0gKiB8N3w2fDV8NDozfDI6MXwwfAotICogKy0rLSstKy0tLSstLS0rLSsKLSAqICB8IHwgfCAgfCAgIHwgIHwKLSAqICB8IHwgfCAgfCAgIHwgICstLS0gSW50ZXJydXB0IHR5cGU6IEVkZ2Ugb3IgTGV2ZWwgVHJpZ2dlcmVkCi0gKiAgfCB8IHwgIHwgICArLS0tIFR5cGU6IFdha2Utb25seSwgUnVudGltZS1vbmx5LCBvciB3YWtlL3J1bnRpbWUKKyAqICstKy0rLSstLS0rLSstKy0rCisgKiB8N3w2fDV8NDozfDJ8MXwwfAorICogKy0rLSstKy0tLSstKy0rLSsKKyAqICB8IHwgfCAgfCAgfCB8IHwKKyAqICB8IHwgfCAgfCAgfCB8ICstLS0gSW50ZXJydXB0IHR5cGU6IEVkZ2Ugb3IgTGV2ZWwgVHJpZ2dlcmVkCisgKiAgfCB8IHwgIHwgIHwgKy0tLSBHUEUgY2FuIHdha2UgdGhlIHN5c3RlbQorICogIHwgfCB8ICB8ICArLS0tIFVudXNlZAogICogIHwgfCB8ICArLS0tIFR5cGUgb2YgZGlzcGF0Y2ggLS0gdG8gbWV0aG9kLCBoYW5kbGVyLCBvciBub25lCi0gKiAgfCB8ICstLS0gRW5hYmxlZCBmb3IgcnVudGltZT8KLSAqICB8ICstLS0gRW5hYmxlZCBmb3Igd2FrZT8KKyAqICB8IHwgKy0tLSBVbnVzZWQKKyAqICB8ICstLS0gVW51c2VkCiAgKiAgKy0tLSBVbnVzZWQKICAqLwogI2RlZmluZSBBQ1BJX0dQRV9YUlVQVF9UWVBFX01BU0sgICAgICAgICh1OCkgMHgwMQpAQCAtNjg3LDIyICs2ODgsMTMgQEAKICNkZWZpbmUgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTiAgICAgICAgICAodTgpIDB4MDYKICNkZWZpbmUgQUNQSV9HUEVfVFlQRV9XQUtFICAgICAgICAgICAgICAodTgpIDB4MDIKICNkZWZpbmUgQUNQSV9HUEVfVFlQRV9SVU5USU1FICAgICAgICAgICAodTgpIDB4MDQJLyogRGVmYXVsdCAqLworI2RlZmluZSBBQ1BJX0dQRV9DQU5fV0FLRQkJKHU4KSAweDAyCiAKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSyAgICAgICAgICAodTgpIDB4MTgKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUiAgICAgICAodTgpIDB4MDgKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EICAgICAgICAodTgpIDB4MTAKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTk9UX1VTRUQgICAgICAodTgpIDB4MDAJLyogRGVmYXVsdCAqLwogCi0jZGVmaW5lIEFDUElfR1BFX1JVTl9FTkFCTEVfTUFTSyAgICAgICAgKHU4KSAweDIwCi0jZGVmaW5lIEFDUElfR1BFX1JVTl9FTkFCTEVEICAgICAgICAgICAgKHU4KSAweDIwCi0jZGVmaW5lIEFDUElfR1BFX1JVTl9ESVNBQkxFRCAgICAgICAgICAgKHU4KSAweDAwCS8qIERlZmF1bHQgKi8KLQotI2RlZmluZSBBQ1BJX0dQRV9XQUtFX0VOQUJMRV9NQVNLICAgICAgICh1OCkgMHg0MAotI2RlZmluZSBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQgICAgICAgICAgICh1OCkgMHg0MAotI2RlZmluZSBBQ1BJX0dQRV9XQUtFX0RJU0FCTEVEICAgICAgICAgICh1OCkgMHgwMAkvKiBEZWZhdWx0ICovCi0KLSNkZWZpbmUgQUNQSV9HUEVfRU5BQkxFX01BU0sgICAgICAgICAgICAodTgpIDB4NjAJLyogQm90aCBydW4vd2FrZSAqLwotCiAvKgogICogRmxhZ3MgZm9yIEdQRSBhbmQgTG9jayBpbnRlcmZhY2VzCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL21kNS5oIGIvaW5jbHVkZS9jcnlwdG8vbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmMjk5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL21kNS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX0NSWVBUT19NRDVfSAorI2RlZmluZSBfQ1JZUFRPX01ENV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE1ENV9ESUdFU1RfU0laRQkJMTYKKyNkZWZpbmUgTUQ1X0hNQUNfQkxPQ0tfU0laRQk2NAorI2RlZmluZSBNRDVfQkxPQ0tfV09SRFMJCTE2CisjZGVmaW5lIE1ENV9IQVNIX1dPUkRTCQk0CisKK3N0cnVjdCBtZDVfc3RhdGUgeworCXUzMiBoYXNoW01ENV9IQVNIX1dPUkRTXTsKKwl1MzIgYmxvY2tbTUQ1X0JMT0NLX1dPUkRTXTsKKwl1NjQgYnl0ZV9jb3VudDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vcGNyeXB0LmggYi9pbmNsdWRlL2NyeXB0by9wY3J5cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q4YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vcGNyeXB0LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIHBjcnlwdCAtIFBhcmFsbGVsIGNyeXB0byBlbmdpbmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX1BDUllQVF9ICisjZGVmaW5lIF9DUllQVE9fUENSWVBUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZGF0YS5oPgorCitzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgeworCXN0cnVjdCBwYWRhdGFfcHJpdglwYWRhdGE7CisJdm9pZAkJCSpkYXRhOworCXZvaWQJCQkqX19jdHhbXSBDUllQVE9fTUlOQUxJR05fQVRUUjsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGNyeXB0X3JlcXVlc3RfY3R4KHN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiByZXEtPl9fY3R4OworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBjcnlwdF9yZXF1ZXN0X3BhZGF0YShzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gJnJlcS0+cGFkYXRhOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnBjcnlwdF9wYWRhdGFfcmVxdWVzdChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBhZGF0YSwgc3RydWN0IHBjcnlwdF9yZXF1ZXN0LCBwYWRhdGEpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tb2RlLmggYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCmluZGV4IGJjNGZkZjIuLmM1YmExNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21vZGUuaApAQCAtODUsNyArODUsNyBAQAogCV9fdTE2IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OwogCV9fdTE2IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOwogCi0JX191MzIgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCisJX191MzIgdnJlZnJlc2g7CiAKIAlfX3UzMiBmbGFnczsKIAlfX3UzMiB0eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vbm91dmVhdV9kcm0uaCBiL2luY2x1ZGUvZHJtL25vdXZlYXVfZHJtLmgKaW5kZXggMWU2N2M0NC4uZjc0NTk0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vbm91dmVhdV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9ub3V2ZWF1X2RybS5oCkBAIC03Nyw2ICs3Nyw3IEBACiAjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fUENJX1BIWVNJQ0FMICAgIDEwCiAjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fQ0hJUFNFVF9JRCAgICAgIDExCiAjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fVk1fVlJBTV9CQVNFICAgIDEyCisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fR1JBUEhfVU5JVFMgICAgIDEzCiBzdHJ1Y3QgZHJtX25vdXZlYXVfZ2V0cGFyYW0gewogCXVpbnQ2NF90IHBhcmFtOwogCXVpbnQ2NF90IHZhbHVlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdm13Z2Z4X2RybS5oIGIvaW5jbHVkZS9kcm0vdm13Z2Z4X2RybS5oCmluZGV4IDJiZTdlMTIuLmM3NjQ1ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3Ztd2dmeF9kcm0uaAorKysgYi9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmgKQEAgLTY4LDcgKzY4LDggQEAKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9OVU1fRlJFRV9TVFJFQU1TIDEKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV8zRCAgICAgICAgICAgICAgIDIKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9GSUZPX09GRlNFVCAgICAgIDMKLQorI2RlZmluZSBEUk1fVk1XX1BBUkFNX0hXX0NBUFMgICAgICAgICAgNAorI2RlZmluZSBEUk1fVk1XX1BBUkFNX0ZJRk9fQ0FQUyAgICAgICAgNQogCiAvKioKICAqIHN0cnVjdCBkcm1fdm13X2dldHBhcmFtX2FyZwpAQCAtMTgxLDYgKzE4Miw4IEBACiAgKiBUaGUgc2l6ZSBvZiB0aGUgYXJyYXkgc2hvdWxkIGVxdWFsIHRoZSB0b3RhbCBudW1iZXIgb2YgbWlwbWFwIGxldmVscy4KICAqIEBzaGFyZWFibGU6IEJvb2xlYW4gd2hldGhlciBvdGhlciBjbGllbnRzIChhcyBpZGVudGlmaWVkIGJ5IGZpbGUgZGVzY3JpcHRvcnMpCiAgKiBtYXkgcmVmZXJlbmNlIHRoaXMgc3VyZmFjZS4KKyAqIEBzY2Fub3V0OiBCb29sZWFuIHdoZXRoZXIgdGhlIHN1cmZhY2UgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhCisgKiBzY2Fub3V0LgogICoKICAqIElucHV0IGRhdGEgdG8gdGhlIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgSW9jdGwuCiAgKiBPdXRwdXQgZGF0YSBmcm9tIHRoZSBEUk1fVk1XX1JFRl9TVVJGQUNFIElvY3RsLgpAQCAtMTkyLDcgKzE5NSw3IEBACiAJdWludDMyX3QgbWlwX2xldmVsc1tEUk1fVk1XX01BWF9TVVJGQUNFX0ZBQ0VTXTsKIAl1aW50NjRfdCBzaXplX2FkZHI7CiAJaW50MzJfdCBzaGFyZWFibGU7Ci0JdWludDMyX3QgcGFkNjQ7CisJaW50MzJfdCBzY2Fub3V0OwogfTsKIAogLyoqCkBAIC0yOTUsMTcgKzI5OCwyOCBAQAogICoKICAqIEBjb21tYW5kczogVXNlci1zcGFjZSBhZGRyZXNzIG9mIGEgY29tbWFuZCBidWZmZXIgY2FzdCB0byBhbiB1aW50NjRfdC4KICAqIEBjb21tYW5kLXNpemU6IFNpemUgaW4gYnl0ZXMgb2YgdGhlIGNvbW1hbmQgYnVmZmVyLgorICogQHRocm90dGxlLXVzOiBTbGVlcCB1bnRpbCBzb2Z0d2FyZSBpcyBsZXNzIHRoYW4gQHRocm90dGxlX3VzCisgKiBtaWNyb3NlY29uZHMgYWhlYWQgb2YgaGFyZHdhcmUuIFRoZSBkcml2ZXIgbWF5IHJvdW5kIHRoaXMgdmFsdWUKKyAqIHRvIHRoZSBuZWFyZXN0IGtlcm5lbCB0aWNrLgogICogQGZlbmNlX3JlcDogVXNlci1zcGFjZSBhZGRyZXNzIG9mIGEgc3RydWN0IGRybV92bXdfZmVuY2VfcmVwIGNhc3QgdG8gYW4KICAqIHVpbnQ2NF90LgorICogQHZlcnNpb246IEFsbG93cyBleHBhbmRpbmcgdGhlIGV4ZWNidWYgaW9jdGwgcGFyYW1ldGVycyB3aXRob3V0IGJyZWFraW5nCisgKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgc2luY2UgdXNlci1zcGFjZSB3aWxsIGFsd2F5cyB0ZWxsIHRoZSBrZXJuZWwKKyAqIHdoaWNoIHZlcnNpb24gaXQgdXNlcy4KKyAqIEBmbGFnczogRXhlY2J1ZiBmbGFncy4gTm9uZSBjdXJyZW50bHkuCiAgKgogICogQXJndW1lbnQgdG8gdGhlIERSTV9WTVdfRVhFQ0JVRiBJb2N0bC4KICAqLwogCisjZGVmaW5lIERSTV9WTVdfRVhFQ0JVRl9WRVJTSU9OIDAKKwogc3RydWN0IGRybV92bXdfZXhlY2J1Zl9hcmcgewogCXVpbnQ2NF90IGNvbW1hbmRzOwogCXVpbnQzMl90IGNvbW1hbmRfc2l6ZTsKLQl1aW50MzJfdCBwYWQ2NDsKKwl1aW50MzJfdCB0aHJvdHRsZV91czsKIAl1aW50NjRfdCBmZW5jZV9yZXA7CisJIHVpbnQzMl90IHZlcnNpb247CisJIHVpbnQzMl90IGZsYWdzOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmgKaW5kZXggYWI5NDMzNS4uNjgxNmJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9idXMuaApAQCAtMSw1ICsxLDkgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FtYmEuaAorICogIGxpbnV4L2luY2x1ZGUvYW1iYS9idXMuaAorICoKKyAqICBUaGlzIGRldmljZSB0eXBlIGRlYWxzIHdpdGggQVJNIFByaW1lQ2VsbHMgYW5kIGFueXRoaW5nIGVsc2UgdGhhdAorICogIHByZXNlbnRzIGEgcHJvcGVyIENJRCAoMHhCMTA1RjAwRCkgYXQgdGhlIGVuZCBvZiB0aGUgSS9PIHJlZ2lzdGVyCisgKiAgcmVnaW9uIG9yIHRoYXQgaXMgZGVyaXZlZCBmcm9tIGEgUHJpbWVDZWxsLgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggMzhhNjk0OC4uMjBmMzE1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC02NDcsOSArNjQ3LDkgQEAKIAlyZXR1cm4gaWRbQVRBX0lEX1NFQ1RPUl9TSVpFXSAmICgxIDw8IDEzKTsKIH0KIAotc3RhdGljIGlubGluZSB1OCBhdGFfaWRfbG9naWNhbF9wZXJfcGh5c2ljYWxfc2VjdG9ycyhjb25zdCB1MTYgKmlkKQorc3RhdGljIGlubGluZSB1MTYgYXRhX2lkX2xvZ2ljYWxfcGVyX3BoeXNpY2FsX3NlY3RvcnMoY29uc3QgdTE2ICppZCkKIHsKLQlyZXR1cm4gaWRbQVRBX0lEX1NFQ1RPUl9TSVpFXSAmIDB4ZjsKKwlyZXR1cm4gMSA8PCAoaWRbQVRBX0lEX1NFQ1RPUl9TSVpFXSAmIDB4Zik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGF0YV9pZF9oYXNfbGJhNDgoY29uc3QgdTE2ICppZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0b3BzLmggYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCmluZGV4IGMwNWEyOWMuLjI1YjhiMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMjUsNyArMjUsNyBAQAogc3RhdGljIF9faW5saW5lX18gaW50IGdldF9iaXRtYXNrX29yZGVyKHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpbnQgb3JkZXI7Ci0JCisKIAlvcmRlciA9IGZscyhjb3VudCk7CiAJcmV0dXJuIG9yZGVyOwkvKiBXZSBjb3VsZCBiZSBzbGlnaHRseSBtb3JlIGNsZXZlciB3aXRoIC0xIGhlcmUuLi4gKi8KIH0KQEAgLTMzLDcgKzMzLDcgQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCBnZXRfY291bnRfb3JkZXIodW5zaWduZWQgaW50IGNvdW50KQogewogCWludCBvcmRlcjsKLQkKKwogCW9yZGVyID0gZmxzKGNvdW50KSAtIDE7CiAJaWYgKGNvdW50ICYgKGNvdW50IC0gMSkpCiAJCW9yZGVyKys7CkBAIC00NSw2ICs0NSwzMSBAQAogCXJldHVybiBzaXplb2YodykgPT0gNCA/IGh3ZWlnaHQzMih3KSA6IGh3ZWlnaHQ2NCh3KTsKIH0KIAorLyoKKyAqIENsZWFybHkgc2xvdyB2ZXJzaW9ucyBvZiB0aGUgaHdlaWdodE4oKSBmdW5jdGlvbnMsIHRoZWlyIGJlbmVmaXQgaXMKKyAqIG9mIGNvdXJzZSBjb21waWxlIHRpbWUgZXZhbHVhdGlvbiBvZiBjb25zdGFudCBhcmd1bWVudHMuCisgKi8KKyNkZWZpbmUgSFdFSUdIVDgodykJCQkJCVwKKyAgICAgICgJQlVJTERfQlVHX09OX1pFUk8oIV9fYnVpbHRpbl9jb25zdGFudF9wKHcpKSArCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgMCkpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCAxKSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDIpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgMykpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCA0KSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDUpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgNikpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCA3KSkpCSkKKworI2RlZmluZSBIV0VJR0hUMTYodykgKEhXRUlHSFQ4KHcpICArIEhXRUlHSFQ4KCh3KSA+PiA4KSkKKyNkZWZpbmUgSFdFSUdIVDMyKHcpIChIV0VJR0hUMTYodykgKyBIV0VJR0hUMTYoKHcpID4+IDE2KSkKKyNkZWZpbmUgSFdFSUdIVDY0KHcpIChIV0VJR0hUMzIodykgKyBIV0VJR0hUMzIoKHcpID4+IDMyKSkKKworLyoKKyAqIFR5cGUgaW52YXJpYW50IHZlcnNpb24gdGhhdCBzaW1wbHkgY2FzdHMgdGhpbmdzIHRvIHRoZQorICogbGFyZ2VzdCB0eXBlLgorICovCisjZGVmaW5lIEhXRUlHSFQodykgICBIV0VJR0hUNjQoKHU2NCkodykpCisKIC8qKgogICogcm9sMzIgLSByb3RhdGUgYSAzMi1iaXQgdmFsdWUgbGVmdAogICogQHdvcmQ6IHZhbHVlIHRvIHJvdGF0ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNWM4MDE4OS4uMTg5NmU4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC00NjEsOCArNDYxLDcgQEAKICNkZWZpbmUgUVVFVUVfRkxBR19OT05ST1QgICAgICAxNAkvKiBub24tcm90YXRpb25hbCBkZXZpY2UgKFNTRCkgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19WSVJUICAgICAgICBRVUVVRV9GTEFHX05PTlJPVCAvKiBwYXJhdmlydCBkZXZpY2UgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19JT19TVEFUICAgICAxNQkvKiBkbyBJTyBzdGF0cyAqLwotI2RlZmluZSBRVUVVRV9GTEFHX0NRCSAgICAgICAxNgkvKiBoYXJkd2FyZSBkb2VzIHF1ZXVpbmcgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNwkvKiBzdXBwb3J0cyBESVNDQVJEICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTYJLyogc3VwcG9ydHMgRElTQ0FSRCAqLwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVGQVVMVAkoKDEgPDwgUVVFVUVfRkxBR19JT19TVEFUKSB8CQlcCiAJCQkJICgxIDw8IFFVRVVFX0ZMQUdfQ0xVU1RFUikgfAkJXApAQCAtNTg2LDcgKzU4NSw2IEBACiAKICNkZWZpbmUgYmxrX3F1ZXVlX3BsdWdnZWQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19QTFVHR0VELCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX3RhZ2dlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1FVRVVFRCwgJihxKS0+cXVldWVfZmxhZ3MpCi0jZGVmaW5lIGJsa19xdWV1ZV9xdWV1aW5nKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfQ1EsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfc3RvcHBlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1NUT1BQRUQsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfbm9tZXJnZXMocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19OT01FUkdFUywgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9ub25yb3QocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19OT05ST1QsICYocSktPnF1ZXVlX2ZsYWdzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggMDAwOGRlZS4uYzliYmNiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC0yOCw2ICsyOCw3IEBACiBleHRlcm4gaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpOwogZXh0ZXJuIGludCBjZ3JvdXBfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNncm91cF9sb2NrKHZvaWQpOworZXh0ZXJuIGludCBjZ3JvdXBfbG9ja19pc19oZWxkKHZvaWQpOwogZXh0ZXJuIGJvb2wgY2dyb3VwX2xvY2tfbGl2ZV9ncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIGV4dGVybiB2b2lkIGNncm91cF91bmxvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBjZ3JvdXBfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwpAQCAtNDg2LDcgKzQ4Nyw5IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICp0YXNrX3N1YnN5c19zdGF0ZSgKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzdWJzeXNfaWQpCiB7Ci0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5jZ3JvdXBzLT5zdWJzeXNbc3Vic3lzX2lkXSk7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayh0YXNrLT5jZ3JvdXBzLT5zdWJzeXNbc3Vic3lzX2lkXSwKKwkJCQkgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJICAgICBjZ3JvdXBfbG9ja19pc19oZWxkKCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXAqIHRhc2tfY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCA1YmUzZGFiLi4xODhmY2FlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0xNSw2ICsxNSw3IEBACiAjIGRlZmluZSBfX2FjcXVpcmUoeCkJX19jb250ZXh0X18oeCwxKQogIyBkZWZpbmUgX19yZWxlYXNlKHgpCV9fY29udGV4dF9fKHgsLTEpCiAjIGRlZmluZSBfX2NvbmRfbG9jayh4LGMpCSgoYykgPyAoeyBfX2FjcXVpcmUoeCk7IDE7IH0pIDogMCkKKyMgZGVmaW5lIF9fcGVyY3B1CV9fYXR0cmlidXRlX18oKG5vZGVyZWYsIGFkZHJlc3Nfc3BhY2UoMykpKQogZXh0ZXJuIHZvaWQgX19jaGtfdXNlcl9wdHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX3VzZXIgKik7CiBleHRlcm4gdm9pZCBfX2Noa19pb19wdHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICopOwogI2Vsc2UKQEAgLTMyLDYgKzMzLDcgQEAKICMgZGVmaW5lIF9fYWNxdWlyZSh4KSAodm9pZCkwCiAjIGRlZmluZSBfX3JlbGVhc2UoeCkgKHZvaWQpMAogIyBkZWZpbmUgX19jb25kX2xvY2soeCxjKSAoYykKKyMgZGVmaW5lIF9fcGVyY3B1CiAjZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IDcyYmE2M2UuLjNhNzc5ZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMjQsOSArMjQsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2RlZmluZSBDTl9JRFhfQ09OTkVDVE9SCQkweGZmZmZmZmZmCi0jZGVmaW5lIENOX1ZBTF9DT05ORUNUT1IJCTB4ZmZmZmZmZmYKLQogLyoKICAqIFByb2Nlc3MgRXZlbnRzIGNvbm5lY3RvciB1bmlxdWUgaWRzIC0tIHVzZWQgZm9yIG1lc3NhZ2Ugcm91dGluZwogICovCkBAIC03NSwzMCArNzIsNiBAQAogCV9fdTggZGF0YVswXTsKIH07CiAKLS8qCi0gKiBOb3RpZnkgc3RydWN0dXJlIC0gcmVxdWVzdHMgbm90aWZpY2F0aW9uIGFib3V0Ci0gKiByZWdpc3RlcmluZy91bnJlZ2lzdGVyaW5nIGlkeC92YWwgaW4gcmFuZ2UgW2ZpcnN0LCBmaXJzdCtyYW5nZV0uCi0gKi8KLXN0cnVjdCBjbl9ub3RpZnlfcmVxIHsKLQlfX3UzMiBmaXJzdDsKLQlfX3UzMiByYW5nZTsKLX07Ci0KLS8qCi0gKiBNYWluIG5vdGlmaWNhdGlvbiBjb250cm9sIG1lc3NhZ2UKLSAqICpfbm90aWZ5X251bSAJLSBudW1iZXIgb2YgYXBwcm9wcmlhdGUgY25fbm90aWZ5X3JlcSBzdHJ1Y3R1cmVzIGFmdGVyIAotICoJCQkJdGhpcyBzdHJ1Y3QuCi0gKiBncm91cCAJCS0gbm90aWZpY2F0aW9uIHJlY2VpdmVyJ3MgaWR4LgotICogbGVuIAkJCS0gdG90YWwgbGVuZ3RoIG9mIHRoZSBhdHRhY2hlZCBkYXRhLgotICovCi1zdHJ1Y3QgY25fY3RsX21zZyB7Ci0JX191MzIgaWR4X25vdGlmeV9udW07Ci0JX191MzIgdmFsX25vdGlmeV9udW07Ci0JX191MzIgZ3JvdXA7Ci0JX191MzIgbGVuOwotCV9fdTggZGF0YVswXTsKLX07Ci0KICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC0xNTEsMTEgKzEyNCw2IEBACiAJdTMyIHNlcSwgZ3JvdXA7CiB9OwogCi1zdHJ1Y3QgY25fY3RsX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vdGlmeV9lbnRyeTsKLQlzdHJ1Y3QgY25fY3RsX21zZyAqbXNnOwotfTsKLQogc3RydWN0IGNuX2RldiB7CiAJc3RydWN0IGNiX2lkIGlkOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaCBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCmluZGV4IGQ3N2I1NDcuLmRiY2VlNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCkBAIC0xNDMsNiArMTQzLDggQEAKIAogI2RlZmluZSBmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKQkJCVwKIAlmb3IgKChjcHUpID0gMDsgKGNwdSkgPCAxOyAoY3B1KSsrLCAodm9pZCltYXNrKQorI2RlZmluZSBmb3JfZWFjaF9jcHVfbm90KGNwdSwgbWFzaykJCVwKKwlmb3IgKChjcHUpID0gMDsgKGNwdSkgPCAxOyAoY3B1KSsrLCAodm9pZCltYXNrKQogI2RlZmluZSBmb3JfZWFjaF9jcHVfYW5kKGNwdSwgbWFzaywgYW5kKQlcCiAJZm9yICgoY3B1KSA9IDA7IChjcHUpIDwgMTsgKGNwdSkrKywgKHZvaWQpbWFzaywgKHZvaWQpYW5kKQogI2Vsc2UKQEAgLTIwMyw2ICsyMDUsMTggQEAKIAkJKGNwdSkgPCBucl9jcHVfaWRzOykKIAogLyoqCisgKiBmb3JfZWFjaF9jcHVfbm90IC0gaXRlcmF0ZSBvdmVyIGV2ZXJ5IGNwdSBpbiBhIGNvbXBsZW1lbnRlZCBtYXNrCisgKiBAY3B1OiB0aGUgKG9wdGlvbmFsbHkgdW5zaWduZWQpIGludGVnZXIgaXRlcmF0b3IKKyAqIEBtYXNrOiB0aGUgY3B1bWFzayBwb2ludGVyCisgKgorICogQWZ0ZXIgdGhlIGxvb3AsIGNwdSBpcyA+PSBucl9jcHVfaWRzLgorICovCisjZGVmaW5lIGZvcl9lYWNoX2NwdV9ub3QoY3B1LCBtYXNrKQkJCQlcCisJZm9yICgoY3B1KSA9IC0xOwkJCQkJXAorCQkoY3B1KSA9IGNwdW1hc2tfbmV4dF96ZXJvKChjcHUpLCAobWFzaykpLAlcCisJCShjcHUpIDwgbnJfY3B1X2lkczspCisKKy8qKgogICogZm9yX2VhY2hfY3B1X2FuZCAtIGl0ZXJhdGUgb3ZlciBldmVyeSBjcHUgaW4gYm90aCBtYXNrcwogICogQGNwdTogdGhlIChvcHRpb25hbGx5IHVuc2lnbmVkKSBpbnRlZ2VyIGl0ZXJhdG9yCiAgKiBAbWFzazogdGhlIGZpcnN0IGNwdW1hc2sgcG9pbnRlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmVkLmggYi9pbmNsdWRlL2xpbnV4L2NyZWQuaAppbmRleCA0ZTMzODdhLi40ZGIwOWY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyZWQuaApAQCAtMjgwLDcgKzI4MCw3IEBACiAgKiB0YXNrIG9yIGJ5IGhvbGRpbmcgdGFza2xpc3RfbG9jayB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgdW5saW5rZWQuCiAgKi8KICNkZWZpbmUgX190YXNrX2NyZWQodGFzaykgXAotCSgoY29uc3Qgc3RydWN0IGNyZWQgKikocmN1X2RlcmVmZXJlbmNlKCh0YXNrKS0+cmVhbF9jcmVkKSkpCisJKChjb25zdCBzdHJ1Y3QgY3JlZCAqKShyY3VfZGVyZWZlcmVuY2VfY2hlY2soKHRhc2spLT5yZWFsX2NyZWQsIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IGxvY2tkZXBfaXNfaGVsZCgmdGFza2xpc3RfbG9jaykpKSkKIAogLyoqCiAgKiBnZXRfdGFza19jcmVkIC0gR2V0IGFub3RoZXIgdGFzaydzIG9iamVjdGl2ZSBjcmVkZW50aWFscwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggYTYyNzk5Zi4uYjMwNTI3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC00NzIsNiArNDcyLDIzIEBACiAJcmV0dXJuIGRldi0+a29iai5zdGF0ZV9pbl9zeXNmczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cG93ZXIuc3RhdHVzID09IERQTV9PTikKKwkJZGV2LT5wb3dlci5hc3luY19zdXNwZW5kID0gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9kaXNhYmxlX2FzeW5jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA9PSBEUE1fT04pCisJCWRldi0+cG93ZXIuYXN5bmNfc3VzcGVuZCA9IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZGV2aWNlX2FzeW5jX3N1c3BlbmRfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICEhZGV2LT5wb3dlci5hc3luY19zdXNwZW5kOworfQorCiB2b2lkIGRyaXZlcl9pbml0KHZvaWQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGYuaCBiL2luY2x1ZGUvbGludXgvZWxmLmgKaW5kZXggMGNjNGQ1NS4uMzlhZDRiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi5oCkBAIC0zNjIsNiArMzYyLDExIEBACiAjZGVmaW5lIE5UXzM4Nl9UTFMJMHgyMDAJCS8qIGkzODYgVExTIHNsb3RzIChzdHJ1Y3QgdXNlcl9kZXNjKSAqLwogI2RlZmluZSBOVF8zODZfSU9QRVJNCTB4MjAxCQkvKiB4ODYgaW8gcGVybWlzc2lvbiBiaXRtYXAgKDE9ZGVueSkgKi8KICNkZWZpbmUgTlRfUzM5MF9ISUdIX0dQUlMJMHgzMDAJLyogczM5MCB1cHBlciByZWdpc3RlciBoYWx2ZXMgKi8KKyNkZWZpbmUgTlRfUzM5MF9USU1FUgkweDMwMQkJLyogczM5MCB0aW1lciByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX1RPRENNUAkweDMwMgkJLyogczM5MCBUT0QgY2xvY2sgY29tcGFyYXRvciByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX1RPRFBSRUcJMHgzMDMJCS8qIHMzOTAgVE9EIHByb2dyYW1tYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBOVF9TMzkwX0NUUlMJMHgzMDQJCS8qIHMzOTAgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTlRfUzM5MF9QUkVGSVgJMHgzMDUJCS8qIHMzOTAgcHJlZml4IHJlZ2lzdGVyICovCiAKIAogLyogTm90ZSBoZWFkZXIgaW4gYSBQVF9OT1RFIHNlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmR0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9mZHRhYmxlLmgKaW5kZXggYTJlYzc0Yi4uMDEzZGM1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mZHRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mZHRhYmxlLmgKQEAgLTU3LDcgKzU3LDE0IEBACiAJc3RydWN0IGZpbGUgKiBmZF9hcnJheVtOUl9PUEVOX0RFRkFVTFRdOwogfTsKIAotI2RlZmluZSBmaWxlc19mZHRhYmxlKGZpbGVzKSAocmN1X2RlcmVmZXJlbmNlKChmaWxlcyktPmZkdCkpCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9jaGVja19mZHRhYmxlKGZpbGVzLCBmZHRmZCkgXAorCShyY3VfZGVyZWZlcmVuY2VfY2hlY2soKGZkdGZkKSwgXAorCQkJICAgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IFwKKwkJCSAgICAgICBsb2NrZGVwX2lzX2hlbGQoJihmaWxlcyktPmZpbGVfbG9jaykgfHwgXAorCQkJICAgICAgIGF0b21pY19yZWFkKCYoZmlsZXMpLT5jb3VudCkgPT0gMSkpCisKKyNkZWZpbmUgZmlsZXNfZmR0YWJsZShmaWxlcykgXAorCQkocmN1X2RlcmVmZXJlbmNlX2NoZWNrX2ZkdGFibGUoKGZpbGVzKSwgKGZpbGVzKS0+ZmR0KSkKIAogc3RydWN0IGZpbGVfb3BlcmF0aW9uczsKIHN0cnVjdCB2ZnNtb3VudDsKQEAgLTc4LDcgKzg1LDcgQEAKIAlzdHJ1Y3QgZmR0YWJsZSAqZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CiAKIAlpZiAoZmQgPCBmZHQtPm1heF9mZHMpCi0JCWZpbGUgPSByY3VfZGVyZWZlcmVuY2UoZmR0LT5mZFtmZF0pOworCQlmaWxlID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrX2ZkdGFibGUoZmlsZXMsIGZkdC0+ZmRbZmRdKTsKIAlyZXR1cm4gZmlsZTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGIxYmNiMjcuLmViYjFjZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTcyOSw2ICs3MjksNyBAQAogCXVpZF90CQkJaV91aWQ7CiAJZ2lkX3QJCQlpX2dpZDsKIAlkZXZfdAkJCWlfcmRldjsKKwl1bnNpZ25lZCBpbnQJCWlfYmxrYml0czsKIAl1NjQJCQlpX3ZlcnNpb247CiAJbG9mZl90CQkJaV9zaXplOwogI2lmZGVmIF9fTkVFRF9JX1NJWkVfT1JERVJFRApAQCAtNzM4LDcgKzczOSw2IEBACiAJc3RydWN0IHRpbWVzcGVjCQlpX210aW1lOwogCXN0cnVjdCB0aW1lc3BlYwkJaV9jdGltZTsKIAlibGtjbnRfdAkJaV9ibG9ja3M7Ci0JdW5zaWduZWQgaW50CQlpX2Jsa2JpdHM7CiAJdW5zaWduZWQgc2hvcnQgICAgICAgICAgaV9ieXRlczsKIAl1bW9kZV90CQkJaV9tb2RlOwogCXNwaW5sb2NrX3QJCWlfbG9jazsJLyogaV9ibG9ja3MsIGlfYnl0ZXMsIG1heWJlIGlfc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKaW5kZXggMGI0Zjk3ZC4uMDFlNmFkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCkBAIC0xMzQsNiArMTM0LDggQEAKIHVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlX2Z1bmMoY2hhciAqZ2xvYiwgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcyk7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZV9hbGwoY2hhciAqZ2xvYik7CiAKK2V4dGVybiBpbnQgZnRyYWNlX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7CisKIGVudW0gewogCUZUUkFDRV9GTF9GUkVFCQk9ICgxIDw8IDApLAogCUZUUkFDRV9GTF9GQUlMRUQJPSAoMSA8PCAxKSwKQEAgLTE0MSw3ICsxNDMsNiBAQAogCUZUUkFDRV9GTF9FTkFCTEVECT0gKDEgPDwgMyksCiAJRlRSQUNFX0ZMX05PVFJBQ0UJPSAoMSA8PCA0KSwKIAlGVFJBQ0VfRkxfQ09OVkVSVEVECT0gKDEgPDwgNSksCi0JRlRSQUNFX0ZMX0ZST1pFTgk9ICgxIDw8IDYpLAogfTsKIAogc3RydWN0IGR5bl9mdHJhY2UgewpAQCAtMjUwLDYgKzI1MSwxMCBAQAogewogCXJldHVybiAtRUlOVkFMOwogfQorc3RhdGljIGlubGluZSBpbnQgZnRyYWNlX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAogLyogdG90YWxseSBkaXNhYmxlIGZ0cmFjZSAtIGNhbiBub3QgcmUtZW5hYmxlIGFmdGVyIHRoaXMgKi8KQEAgLTUxMSw0ICs1MTYsMTAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19IV19CUkFOQ0hfVFJBQ0VSICovCiAKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCisKK3Vuc2lnbmVkIGxvbmcgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKTsKKworI2VuZGlmIC8qIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgKi8KKwogI2VuZGlmIC8qIF9MSU5VWF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKaW5kZXggMjIzM2M5OC4uNmI3YzQ0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlX3NlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAKIHN0cnVjdCB0cmFjZV9hcnJheTsKIHN0cnVjdCB0cmFjZXI7CkBAIC0xMjEsOSArMTIyLDggQEAKIAlpbnQJCQkoKnJlZ2Z1bmMpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKIAl2b2lkCQkJKCp1bnJlZ2Z1bmMpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKIAlpbnQJCQlpZDsKKwljb25zdCBjaGFyCQkqcHJpbnRfZm10OwogCWludAkJCSgqcmF3X2luaXQpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKLQlpbnQJCQkoKnNob3dfZm9ybWF0KShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKiwKLQkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKik7CiAJaW50CQkJKCpkZWZpbmVfZmllbGRzKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiAJc3RydWN0IGxpc3RfaGVhZAlmaWVsZHM7CiAJaW50CQkJZmlsdGVyX2FjdGl2ZTsKQEAgLTEzOCw5ICsxMzgsNiBAQAogCiAjZGVmaW5lIEZUUkFDRV9NQVhfUFJPRklMRV9TSVpFCTIwNDgKIAotZXh0ZXJuIGNoYXIgKnBlcmZfdHJhY2VfYnVmOwotZXh0ZXJuIGNoYXIgKnBlcmZfdHJhY2VfYnVmX25taTsKLQogI2RlZmluZSBNQVhfRklMVEVSX1BSRUQJCTMyCiAjZGVmaW5lIE1BWF9GSUxURVJfU1RSX1ZBTAkyNTYJLyogU2hvdWxkIGhhbmRsZSBLU1lNX1NZTUJPTF9MRU4gKi8KIApAQCAtMTg4LDEzICsxODUsMjcgQEAKIAkJX190cmFjZV9wcmludGsoaXAsIGZtdCwgIyNhcmdzKTsJCQlcCiB9IHdoaWxlICgwKQogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIHN0cnVjdCBwZXJmX2V2ZW50OwogZXh0ZXJuIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGUoaW50IGV2ZW50X2lkKTsKIGV4dGVybiB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGUoaW50IGV2ZW50X2lkKTsKIGV4dGVybiBpbnQgZnRyYWNlX3Byb2ZpbGVfc2V0X2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBldmVudF9pZCwKIAkJCQkgICAgIGNoYXIgKmZpbHRlcl9zdHIpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZnJlZV9maWx0ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKK2V4dGVybiB2b2lkICoKK2Z0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKGludCBzaXplLCB1bnNpZ25lZCBzaG9ydCB0eXBlLCBpbnQgKnJjdHhwLAorCQkJIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdCh2b2lkICpyYXdfZGF0YSwgaW50IHNpemUsIGludCByY3R4LCB1NjQgYWRkciwKKwkJICAgICAgIHU2NCBjb3VudCwgdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MpCit7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IHJhd19kYXRhOworCisJcGVyZl90cF9ldmVudChlbnRyeS0+dHlwZSwgYWRkciwgY291bnQsIHJhd19kYXRhLCBzaXplKTsKKwlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOworCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9GVFJBQ0VfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggODcwOTM2NS4uYjEzNDRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC01MDEsNyArNTAxLDcgQEAKIAl2b2lkICgqaGlkZGV2X3JlcG9ydF9ldmVudCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfcmVwb3J0ICopOwogCiAJLyogaGFuZGxlciBmb3IgcmF3IG91dHB1dCBkYXRhLCB1c2VkIGJ5IGhpZHJhdyAqLwotCWludCAoKmhpZF9vdXRwdXRfcmF3X3JlcG9ydCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIF9fdTggKiwgc2l6ZV90KTsKKwlpbnQgKCpoaWRfb3V0cHV0X3Jhd19yZXBvcnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBfX3U4ICosIHNpemVfdCwgdW5zaWduZWQgY2hhcik7CiAKIAkvKiBkZWJ1Z2dpbmcgc3VwcG9ydCB2aWEgZGVidWdmcyAqLwogCXVuc2lnbmVkIHNob3J0IGRlYnVnOwpAQCAtNjYzLDcgKzY2Myw3IEBACiAKIC8qIEFwcGxpY2F0aW9ucyBmcm9tIEhJRCBVc2FnZSBUYWJsZXMgNC84Lzk5IFZlcnNpb24gMS4xICovCiAvKiBXZSBpZ25vcmUgYSBmZXcgaW5wdXQgYXBwbGljYXRpb25zIHRoYXQgYXJlIG5vdCB3aWRlbHkgdXNlZCAqLwotI2RlZmluZSBJU19JTlBVVF9BUFBMSUNBVElPTihhKSAoKChhID49IDB4MDAwMTAwMDApICYmIChhIDw9IDB4MDAwMTAwMDgpKSB8fCAoYSA9PSAweDAwMDEwMDgwKSB8fCAoYSA9PSAweDAwMGMwMDAxKSB8fCAoYSA9PSAweDAwMGQwMDAyKSkKKyNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkgfHwgKChhID49IDB4MDAwZDAwMDIpICYmIChhIDw9IDB4MDAwZDAwMDYpKSkKIAogLyogSElEIGNvcmUgQVBJICovCiAKQEAgLTY5MCw2ICs2OTAsNyBAQAogaW50IGhpZGlucHV0X2ZpbmRfZmllbGQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBzdHJ1Y3QgaGlkX2ZpZWxkICoqZmllbGQpOwogdm9pZCBoaWRfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCBfX3U4ICpkYXRhKTsKIHN0cnVjdCBoaWRfZGV2aWNlICpoaWRfYWxsb2NhdGVfZGV2aWNlKHZvaWQpOworc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9yZWdpc3Rlcl9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaWQpOwogaW50IGhpZF9wYXJzZV9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCAqc3RhcnQsIHVuc2lnbmVkIHNpemUpOwogaW50IGhpZF9jaGVja19rZXlzX3ByZXNzZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiBpbnQgaGlkX2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IGNvbm5lY3RfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCmluZGV4IGFiMmNjMjAuLjc0MTUyYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCkBAIC0xNyw2ICsxNywxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICp2YWRkciwgaW50IHNpemUpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICp2YWRkciwgaW50IHNpemUpCit7Cit9CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h3X2JyZWFrcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oCmluZGV4IDQxMjM1YzkuLjU5NzdiNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oCkBAIC00NCw3ICs0NCw3IEBACiAJcmV0dXJuIGJwLT5hdHRyLmJwX3R5cGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGh3X2JyZWFrcG9pbnRfbGVuKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBod19icmVha3BvaW50X2xlbihzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCiB7CiAJcmV0dXJuIGJwLT5hdHRyLmJwX2xlbjsKIH0KQEAgLTc1LDYgKzc1LDggQEAKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKipjcHVfZXZlbnRzKTsKIAorZXh0ZXJuIGludCBkYmdfcmVzZXJ2ZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CitleHRlcm4gaW50IGRiZ19yZWxlYXNlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKIGV4dGVybiBpbnQgcmVzZXJ2ZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CiBleHRlcm4gdm9pZCByZWxlYXNlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbWEuaCBiL2luY2x1ZGUvbGludXgvaW1hLmgKaW5kZXggOTlkYzZkNS4uOTc1ODM3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ltYS5oCkBAIC0xNyw3ICsxNyw3IEBACiBleHRlcm4gaW50IGltYV9icHJtX2NoZWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwogZXh0ZXJuIGludCBpbWFfaW5vZGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gdm9pZCBpbWFfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWV4dGVybiBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKTsKK2V4dGVybiBpbnQgaW1hX2ZpbGVfY2hlY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKTsKIGV4dGVybiB2b2lkIGltYV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBpbWFfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpOwogZXh0ZXJuIHZvaWQgaW1hX2NvdW50c19nZXQoc3RydWN0IGZpbGUgKmZpbGUpOwpAQCAtMzgsNyArMzgsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKQorc3RhdGljIGlubGluZSBpbnQgaW1hX2ZpbGVfY2hlY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDczNWNlYWYuLmY0NGVlOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTM3Niw2ICszNzYsNyBAQAogI2RlZmluZSBLRVlfRElTUExBWV9PRkYJCTI0NQkvKiBkaXNwbGF5IGRldmljZSB0byBvZmYgc3RhdGUgKi8KIAogI2RlZmluZSBLRVlfV0lNQVgJCTI0NgorI2RlZmluZSBLRVlfUkZLSUxMCQkyNDcJLyogS2V5IHRoYXQgY29udHJvbHMgYWxsIHJhZGlvcyAqLwogCiAvKiBSYW5nZSAyNDggLSAyNTUgaXMgcmVzZXJ2ZWQgZm9yIHNwZWNpYWwgbmVlZHMgb2YgQVQga2V5Ym9hcmQgZHJpdmVyICovCiAKQEAgLTU5Nyw2ICs1OTgsNDggQEAKIAogI2RlZmluZSBLRVlfQ0FNRVJBX0ZPQ1VTCTB4MjEwCiAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkJCTB4MmMwCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMQkJMHgyYzAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyCQkweDJjMQorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMJCTB4MmMyCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNAkJMHgyYzMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk1CQkweDJjNAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTYJCTB4MmM1CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNwkJMHgyYzYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk4CQkweDJjNworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTkJCTB4MmM4CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTAJCTB4MmM5CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTEJCTB4MmNhCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTIJCTB4MmNiCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTMJCTB4MmNjCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTQJCTB4MmNkCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTUJCTB4MmNlCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTYJCTB4MmNmCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTcJCTB4MmQwCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTgJCTB4MmQxCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTkJCTB4MmQyCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjAJCTB4MmQzCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjEJCTB4MmQ0CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjIJCTB4MmQ1CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjMJCTB4MmQ2CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjQJCTB4MmQ3CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjUJCTB4MmQ4CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjYJCTB4MmQ5CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjcJCTB4MmRhCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjgJCTB4MmRiCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjkJCTB4MmRjCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzAJCTB4MmRkCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzEJCTB4MmRlCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzIJCTB4MmRmCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzMJCTB4MmUwCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzQJCTB4MmUxCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzUJCTB4MmUyCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzYJCTB4MmUzCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzcJCTB4MmU0CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzgJCTB4MmU1CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzkJCTB4MmU2CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNDAJCTB4MmU3CisKIC8qIFdlIGF2b2lkIGxvdyBjb21tb24ga2V5cyBpbiBtb2R1bGUgYWxpYXNlcyBzbyB0aGV5IGRvbid0IGdldCBodWdlLiAqLwogI2RlZmluZSBLRVlfTUlOX0lOVEVSRVNUSU5HCUtFWV9NVVRFCiAjZGVmaW5lIEtFWV9NQVgJCQkweDJmZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaCBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKaW5kZXggNzEyOTUwNC4uZGRhOTg0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogZXh0ZXJuIGludCByZXF1ZXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIGludCByZWxlYXNlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKK3ZvaWQgcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9yZWdpb25fd2l0aF9zcGxpdChzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGVuZCwKIAkJCSAgICAgY29uc3QgY2hhciAqbmFtZSk7CkBAIC0xMjAsOCArMTIxLDEwIEBACiBleHRlcm4gaW50IGFsbG9jYXRlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJICAgICByZXNvdXJjZV9zaXplX3QgbWF4LCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCi0JCQkgICAgIHZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJCSAgICByZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCisJCQkgICAgIHJlc291cmNlX3NpemVfdCAoKmFsaWduZikodm9pZCAqLAorCQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJICAgICAgIHJlc291cmNlX3NpemVfdCwKKwkJCQkJCSAgICAgICByZXNvdXJjZV9zaXplX3QpLAogCQkJICAgICB2b2lkICphbGlnbmZfZGF0YSk7CiBpbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCAzMjhiY2E2Li4xMjIxZDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTEyNCw3ICsxMjQsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAKLSAgdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpOworICB2b2lkIF9fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCk7CiAvKioKICAqIG1pZ2h0X3NsZWVwIC0gYW5ub3RhdGlvbiBmb3IgZnVuY3Rpb25zIHRoYXQgY2FuIHNsZWVwCiAgKgpAQCAtMTM4LDcgKzEzOCw4IEBACiAjIGRlZmluZSBtaWdodF9zbGVlcCgpIFwKIAlkbyB7IF9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCAwKTsgbWlnaHRfcmVzY2hlZCgpOyB9IHdoaWxlICgwKQogI2Vsc2UKLSAgc3RhdGljIGlubGluZSB2b2lkIF9fbWlnaHRfc2xlZXAoY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCkgeyB9CisgIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgIGludCBwcmVlbXB0X29mZnNldCkgeyB9CiAjIGRlZmluZSBtaWdodF9zbGVlcCgpIGRvIHsgbWlnaHRfcmVzY2hlZCgpOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZpZm8uaCBiL2luY2x1ZGUvbGludXgva2ZpZm8uaAppbmRleCA2ZjZjNWYzLi5iYzBmYzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZmlmby5oCkBAIC0xMjQsNyArMTI0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBib29sIGtmaWZvX2luaXRpYWxpemVkKHN0cnVjdCBrZmlmbyAqZmlmbykKIHsKLQlyZXR1cm4gZmlmby0+YnVmZmVyICE9IDA7CisJcmV0dXJuIGZpZm8tPmJ1ZmZlciAhPSBOVUxMOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggOTY5ZjZlOS4uNWQ5YzY1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0LmgKQEAgLTIwNiw2ICsyMDYsMjAgQEAKIH0KIAogLyoqCisgKiBsaXN0X3JvdGF0ZV9sZWZ0IC0gcm90YXRlIHRoZSBsaXN0IHRvIHRoZSBsZWZ0CisgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGxpc3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfcm90YXRlX2xlZnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdDsKKworCWlmICghbGlzdF9lbXB0eShoZWFkKSkgeworCQlmaXJzdCA9IGhlYWQtPm5leHQ7CisJCWxpc3RfbW92ZV90YWlsKGZpcnN0LCBoZWFkKTsKKwl9Cit9CisKKy8qKgogICogbGlzdF9pc19zaW5ndWxhciAtIHRlc3RzIHdoZXRoZXIgYSBsaXN0IGhhcyBqdXN0IG9uZSBlbnRyeS4KICAqIEBoZWFkOiB0aGUgbGlzdCB0byB0ZXN0LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xtYi5oIGIvaW5jbHVkZS9saW51eC9sbWIuaAppbmRleCBlZjgyYjhmLi5mM2QxNDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xtYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbG1iLmgKQEAgLTQyLDYgKzQyLDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBsbWJfYW5hbHl6ZSh2b2lkKTsKIGV4dGVybiBsb25nIGxtYl9hZGQodTY0IGJhc2UsIHU2NCBzaXplKTsKIGV4dGVybiBsb25nIGxtYl9yZW1vdmUodTY0IGJhc2UsIHU2NCBzaXplKTsKK2V4dGVybiBsb25nIF9faW5pdCBsbWJfZnJlZSh1NjQgYmFzZSwgdTY0IHNpemUpOwogZXh0ZXJuIGxvbmcgX19pbml0IGxtYl9yZXNlcnZlKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CiBleHRlcm4gdTY0IF9faW5pdCBsbWJfYWxsb2NfbmlkKHU2NCBzaXplLCB1NjQgYWxpZ24sIGludCBuaWQsCiAJCQkJdTY0ICgqbmlkX3JhbmdlKSh1NjQsIHU2NCwgaW50ICopKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKaW5kZXggOWNjZjBlMi4uMTAyMDZhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTUzNCw0ICs1MzQsOCBAQAogIyBkZWZpbmUgbWlnaHRfbG9ja19yZWFkKGxvY2spIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BST1ZFX1JDVQorZXh0ZXJuIHZvaWQgbG9ja2RlcF9yY3VfZGVyZWZlcmVuY2UoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50IGxpbmUpOworI2VuZGlmCisKICNlbmRpZiAvKiBfX0xJTlVYX0xPQ0tERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDYwYzQ2N2IuLjhiMmZhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI2NSw2ICsyNjUsOCBAQAogCXJldHVybiBhdG9taWNfaW5jX25vdF96ZXJvKCZwYWdlLT5fY291bnQpOwogfQogCitleHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGZuKTsKKwogLyogU3VwcG9ydCBmb3IgdmlydHVhbGx5IG1hcHBlZCBwYWdlcyAqLwogc3RydWN0IHBhZ2UgKnZtYWxsb2NfdG9fcGFnZShjb25zdCB2b2lkICphZGRyKTsKIHVuc2lnbmVkIGxvbmcgdm1hbGxvY190b19wZm4oY29uc3Qgdm9pZCAqYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oIGIvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaAppbmRleCBlNzdjMWNlLi5hYjc3NjA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKQEAgLTUxLDYgKzUxLDggQEAKICNkZWZpbmUgXzRFQ0NDTlRFTgkoMHgxIDw8IDI0KQogI2RlZmluZSBfNEVDQ0VOCQkoMHgxIDw8IDIzKQogI2RlZmluZSBfNEVDQ0NPUlJFQ1QJKDB4MSA8PCAyMikKKyNkZWZpbmUgU0hCVVNTRUwJKDB4MSA8PCAyMCkKKyNkZWZpbmUgU0VMXzE2QklUCSgweDEgPDwgMTkpCiAjZGVmaW5lIFNOQU5EX0UJCSgweDEgPDwgMTgpCS8qIFNOQU5EICgwPTUxMiAxPTIwNDgpKi8KICNkZWZpbmUgUVRTRUxfRQkJKDB4MSA8PCAxNykKICNkZWZpbmUgRU5ESUFOCQkoMHgxIDw8IDE2KQkvKiAxID0gbGl0dGxlIGVuZGlhbiAqLwpAQCAtOTYsNiArOTgsNyBAQAogc3RydWN0IHNoX2ZsY3RsIHsKIAlzdHJ1Y3QgbXRkX2luZm8JCW10ZDsKIAlzdHJ1Y3QgbmFuZF9jaGlwCWNoaXA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKIAl2b2lkIF9faW9tZW0JCSpyZWc7CiAKIAl1aW50OF90CWRvbmVfYnVmZlsyMDQ4ICsgNjRdOwkvKiBtYXggc2l6ZSAyMDQ4ICsgNjQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2YuaCBiL2luY2x1ZGUvbGludXgvb2YuaAppbmRleCBlN2ZhY2Q4Li5mNmQ5Y2JjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZi5oCkBAIC0xOSw2ICsxOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZkZWYgQ09ORklHX09GCiAKIHR5cGVkZWYgdTMyIHBoYW5kbGU7CiB0eXBlZGVmIHUzMiBpaGFuZGxlOwpAQCAtMzksMTAgKzQ0LDcgQEAKIHN0cnVjdCBkZXZpY2Vfbm9kZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICp0eXBlOwotCXBoYW5kbGUJbm9kZTsKLSNpZiAhZGVmaW5lZChDT05GSUdfU1BBUkMpCi0JcGhhbmRsZSBsaW51eF9waGFuZGxlOwotI2VuZGlmCisJcGhhbmRsZSBwaGFuZGxlOwogCWNoYXIJKmZ1bGxfbmFtZTsKIAogCXN0cnVjdAlwcm9wZXJ0eSAqcHJvcGVydGllczsKQEAgLTYzLDYgKzY1LDExIEBACiAjZW5kaWYKIH07CiAKKy8qIFBvaW50ZXIgZm9yIGZpcnN0IGVudHJ5IGluIGNoYWluIG9mIGFsbCBub2Rlcy4gKi8KK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOworZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsKKwogc3RhdGljIGlubGluZSBpbnQgb2Zfbm9kZV9jaGVja19mbGFnKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbiwgdW5zaWduZWQgbG9uZyBmbGFnKQogewogCXJldHVybiB0ZXN0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKQEAgLTczLDEyICs4MCw2IEBACiAJc2V0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1zZXRfbm9kZV9wcm9jX2VudHJ5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCi17Ci0JZG4tPnBkZSA9IGRlOwotfQotCiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX2FsbF9ub2RlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXYpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpCkBAIC0xMDEsMjYgKzEwMiwzNiBAQAogICovCiAKIC8qIEhlbHBlciB0byByZWFkIGEgYmlnIG51bWJlcjsgc2l6ZSBpcyBpbiBjZWxscyAobm90IGJ5dGVzKSAqLwotc3RhdGljIGlubGluZSB1NjQgb2ZfcmVhZF9udW1iZXIoY29uc3QgdTMyICpjZWxsLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdTY0IG9mX3JlYWRfbnVtYmVyKGNvbnN0IF9fYmUzMiAqY2VsbCwgaW50IHNpemUpCiB7CiAJdTY0IHIgPSAwOwogCXdoaWxlIChzaXplLS0pCi0JCXIgPSAociA8PCAzMikgfCAqKGNlbGwrKyk7CisJCXIgPSAociA8PCAzMikgfCBiZTMyX3RvX2NwdSgqKGNlbGwrKykpOwogCXJldHVybiByOwogfQogCiAvKiBMaWtlIG9mX3JlYWRfbnVtYmVyLCBidXQgd2Ugd2FudCBhbiB1bnNpZ25lZCBsb25nIHJlc3VsdCAqLwotI2lmZGVmIENPTkZJR19QUEMzMgotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9mX3JlYWRfdWxvbmcoY29uc3QgdTMyICpjZWxsLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvZl9yZWFkX3Vsb25nKGNvbnN0IF9fYmUzMiAqY2VsbCwgaW50IHNpemUpCiB7Ci0JcmV0dXJuIGNlbGxbc2l6ZS0xXTsKKwkvKiB0b3NzIGF3YXkgdXBwZXIgYml0cyBpZiB1bnNpZ25lZCBsb25nIGlzIHNtYWxsZXIgdGhhbiB1NjQgKi8KKwlyZXR1cm4gb2ZfcmVhZF9udW1iZXIoY2VsbCwgc2l6ZSk7CiB9Ci0jZWxzZQotI2RlZmluZSBvZl9yZWFkX3Vsb25nKGNlbGwsIHNpemUpCW9mX3JlYWRfbnVtYmVyKGNlbGwsIHNpemUpCi0jZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKKy8qIERlZmF1bHQgI2FkZHJlc3MgYW5kICNzaXplIGNlbGxzLiAgQWxsb3cgYXJjaCBhc20vcHJvbS5oIHRvIG92ZXJyaWRlICovCisjaWYgIWRlZmluZWQoT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVCkKKyNkZWZpbmUgT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVCAxCisjZGVmaW5lIE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQgMQorI2VuZGlmCisKKy8qIERlZmF1bHQgc3RyaW5nIGNvbXBhcmUgZnVuY3Rpb25zLCBBbGxvdyBhcmNoIGFzbS9wcm9tLmggdG8gb3ZlcnJpZGUgKi8KKyNpZiAhZGVmaW5lZChvZl9jb21wYXRfY21wKQorI2RlZmluZSBvZl9jb21wYXRfY21wKHMxLCBzMiwgbCkJc3RybmNhc2VjbXAoKHMxKSwgKHMyKSwgKGwpKQorI2RlZmluZSBvZl9wcm9wX2NtcChzMSwgczIpCQlzdHJjbXAoKHMxKSwgKHMyKSkKKyNkZWZpbmUgb2Zfbm9kZV9jbXAoczEsIHMyKQkJc3RyY2FzZWNtcCgoczEpLCAoczIpKQorI2VuZGlmCisKIC8qIGZsYWcgZGVzY3JpcHRpb25zICovCiAjZGVmaW5lIE9GX0RZTkFNSUMJMSAvKiBub2RlIGFuZCBwcm9wZXJ0aWVzIHdlcmUgYWxsb2NhdGVkIHZpYSBrbWFsbG9jICovCiAjZGVmaW5lIE9GX0RFVEFDSEVECTIgLyogbm9kZSBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZSAqLwpAQCAtMTg3LDQgKzE5OCwxOSBAQAogCWNvbnN0IGNoYXIgKmxpc3RfbmFtZSwgY29uc3QgY2hhciAqY2VsbHNfbmFtZSwgaW50IGluZGV4LAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKm91dF9ub2RlLCBjb25zdCB2b2lkICoqb3V0X2FyZ3MpOwogCitleHRlcm4gaW50IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpOworCitleHRlcm4gaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCk7CitleHRlcm4gaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7CitleHRlcm4gaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAorCQkJCXN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9EWU5BTUlDKQorLyogRm9yIHVwZGF0aW5nIHRoZSBkZXZpY2UgdHJlZSBhdCBydW50aW1lICovCitleHRlcm4gdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CitleHRlcm4gdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19PRiAqLwogI2VuZGlmIC8qIF9MSU5VWF9PRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2ZkdC5oIGIvaW5jbHVkZS9saW51eC9vZl9mZHQuaAppbmRleCA0MWQ0MzJiLi5hMWNhOTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2ZkdC5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfZmR0LmgKQEAgLTQyLDQ1ICs0Miw2MiBAQAogICogZW5kcyB3aGVuIHNpemUgaXMgMAogICovCiBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgewotCXUzMgltYWdpYzsJCQkvKiBtYWdpYyB3b3JkIE9GX0RUX0hFQURFUiAqLwotCXUzMgl0b3RhbHNpemU7CQkvKiB0b3RhbCBzaXplIG9mIERUIGJsb2NrICovCi0JdTMyCW9mZl9kdF9zdHJ1Y3Q7CQkvKiBvZmZzZXQgdG8gc3RydWN0dXJlICovCi0JdTMyCW9mZl9kdF9zdHJpbmdzOwkJLyogb2Zmc2V0IHRvIHN0cmluZ3MgKi8KLQl1MzIJb2ZmX21lbV9yc3ZtYXA7CQkvKiBvZmZzZXQgdG8gbWVtb3J5IHJlc2VydmUgbWFwICovCi0JdTMyCXZlcnNpb247CQkvKiBmb3JtYXQgdmVyc2lvbiAqLwotCXUzMglsYXN0X2NvbXBfdmVyc2lvbjsJLyogbGFzdCBjb21wYXRpYmxlIHZlcnNpb24gKi8KKwlfX2JlMzIJbWFnaWM7CQkJLyogbWFnaWMgd29yZCBPRl9EVF9IRUFERVIgKi8KKwlfX2JlMzIJdG90YWxzaXplOwkJLyogdG90YWwgc2l6ZSBvZiBEVCBibG9jayAqLworCV9fYmUzMglvZmZfZHRfc3RydWN0OwkJLyogb2Zmc2V0IHRvIHN0cnVjdHVyZSAqLworCV9fYmUzMglvZmZfZHRfc3RyaW5nczsJCS8qIG9mZnNldCB0byBzdHJpbmdzICovCisJX19iZTMyCW9mZl9tZW1fcnN2bWFwOwkJLyogb2Zmc2V0IHRvIG1lbW9yeSByZXNlcnZlIG1hcCAqLworCV9fYmUzMgl2ZXJzaW9uOwkJLyogZm9ybWF0IHZlcnNpb24gKi8KKwlfX2JlMzIJbGFzdF9jb21wX3ZlcnNpb247CS8qIGxhc3QgY29tcGF0aWJsZSB2ZXJzaW9uICovCiAJLyogdmVyc2lvbiAyIGZpZWxkcyBiZWxvdyAqLwotCXUzMglib290X2NwdWlkX3BoeXM7CS8qIFBoeXNpY2FsIENQVSBpZCB3ZSdyZSBib290aW5nIG9uICovCisJX19iZTMyCWJvb3RfY3B1aWRfcGh5czsJLyogUGh5c2ljYWwgQ1BVIGlkIHdlJ3JlIGJvb3Rpbmcgb24gKi8KIAkvKiB2ZXJzaW9uIDMgZmllbGRzIGJlbG93ICovCi0JdTMyCWR0X3N0cmluZ3Nfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgRFQgc3RyaW5ncyBibG9jayAqLworCV9fYmUzMglkdF9zdHJpbmdzX3NpemU7CS8qIHNpemUgb2YgdGhlIERUIHN0cmluZ3MgYmxvY2sgKi8KIAkvKiB2ZXJzaW9uIDE3IGZpZWxkcyBiZWxvdyAqLwotCXUzMglkdF9zdHJ1Y3Rfc2l6ZTsJCS8qIHNpemUgb2YgdGhlIERUIHN0cnVjdHVyZSBibG9jayAqLworCV9fYmUzMglkdF9zdHJ1Y3Rfc2l6ZTsJCS8qIHNpemUgb2YgdGhlIERUIHN0cnVjdHVyZSBibG9jayAqLwogfTsKIAorLyogVEJEOiBUZW1wb3JhcnkgZXhwb3J0IG9mIGZkdCBnbG9iYWxzIC0gcmVtb3ZlIHdoZW4gY29kZSBmdWxseSBtZXJnZWQgKi8KK2V4dGVybiBpbnQgX19pbml0ZGF0YSBkdF9yb290X2FkZHJfY2VsbHM7CitleHRlcm4gaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOworZXh0ZXJuIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqaW5pdGlhbF9ib290X3BhcmFtczsKKwogLyogRm9yIHNjYW5uaW5nIHRoZSBmbGF0IGRldmljZS10cmVlIGF0IGJvb3QgdGltZSAqLwotZXh0ZXJuIGludCBfX2luaXQgb2Zfc2Nhbl9mbGF0X2R0KGludCAoKml0KSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLAotCQkJCQkgICAgdm9pZCAqZGF0YSksCi0JCQkJICB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIF9faW5pdCAqb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnNpemUpOwotZXh0ZXJuIGludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKTsKK2V4dGVybiBjaGFyICpmaW5kX2ZsYXRfZHRfc3RyaW5nKHUzMiBvZmZzZXQpOworZXh0ZXJuIGludCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpLAorCQkJICAgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCAqb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpOworZXh0ZXJuIGludCBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9mX2dldF9mbGF0X2R0X3Jvb3Qodm9pZCk7CitleHRlcm4gdm9pZCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX2FyY2godW5zaWduZWQgbG9uZyBub2RlKTsKK2V4dGVybiBpbnQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbih1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgICAgaW50IGRlcHRoLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpOworZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKTsKK2V4dGVybiB1NjQgZWFybHlfaW5pdF9kdF9hbGxvY19tZW1vcnlfYXJjaCh1NjQgc2l6ZSwgdTY0IGFsaWduKTsKK2V4dGVybiB1NjQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgX19iZTMyICoqY2VsbHApOworCisvKgorICogSWYgQkxLX0RFVl9JTklUUkQsIHRoZSBmZHQgZWFybHkgaW5pdCBjb2RlIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLAorICogdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGFyY2ggY29kZS4gc3RhcnQgYW5kIGVuZCBhcmUgc3BlY2lmaWVkIGFzCisgKiBwaHlzaWNhbCBhZGRyZXNzZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZHRfc2V0dXBfaW5pdHJkX2FyY2godW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbmRpZgorCisvKiBFYXJseSBmbGF0IHRyZWUgc2NhbiBob29rcyAqLworZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSk7CiAKIC8qIE90aGVyIFByb3RvdHlwZXMgKi8KLWV4dGVybiB2b2lkIGZpbmlzaF9kZXZpY2VfdHJlZSh2b2lkKTsKIGV4dGVybiB2b2lkIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKTsKIGV4dGVybiB2b2lkIGVhcmx5X2luaXRfZGV2dHJlZSh2b2lkICopOwotZXh0ZXJuIGludCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KTsKLWV4dGVybiB2b2lkIHByaW50X3Byb3BlcnRpZXMoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKLWV4dGVybiBpbnQgcHJvbV9uX2ludHJfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlKiBucCk7Ci1leHRlcm4gdm9pZCBwcm9tX2dldF9pcnFfc2Vuc2VzKHVuc2lnbmVkIGNoYXIgKnNlbnNlcywgaW50IG9mZiwgaW50IG1heCk7Ci1leHRlcm4gaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCk7Ci1leHRlcm4gaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7Ci1leHRlcm4gaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAotCQkJCXN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCk7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfTElOVVhfT0ZfRkRUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFkYXRhLmggYi9pbmNsdWRlL2xpbnV4L3BhZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjExZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZGF0YS5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBwYWRhdGEuaCAtIGhlYWRlciBmb3IgdGhlIHBhZGF0YSBwYXJhbGxlbGl6YXRpb24gaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBQQURBVEFfSAorI2RlZmluZSBQQURBVEFfSAorCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCBwYWRhdGFfcHJpdiB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBwYXJhbGxlbF9kYXRhCSpwZDsKKwlpbnQJCQljYl9jcHU7CisJaW50CQkJc2VxX25yOworCWludAkJCWluZm87CisJdm9pZCAgICAgICAgICAgICAgICAgICAgKCpwYXJhbGxlbCkoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpOworCXZvaWQgICAgICAgICAgICAgICAgICAgICgqc2VyaWFsKShzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSk7Cit9OworCitzdHJ1Y3QgcGFkYXRhX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7CisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKK307CisKK3N0cnVjdCBwYWRhdGFfcXVldWUgeworCXN0cnVjdCBwYWRhdGFfbGlzdAlwYXJhbGxlbDsKKwlzdHJ1Y3QgcGFkYXRhX2xpc3QJcmVvcmRlcjsKKwlzdHJ1Y3QgcGFkYXRhX2xpc3QJc2VyaWFsOworCXN0cnVjdCB3b3JrX3N0cnVjdAlwd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc3dvcms7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgICAgKnBkOworCWF0b21pY190CQludW1fb2JqOworCWludAkJCWNwdV9pbmRleDsKK307CisKK3N0cnVjdCBwYXJhbGxlbF9kYXRhIHsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlCSpwaW5zdDsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlCSpxdWV1ZTsKKwlhdG9taWNfdAkJc2VxX25yOworCWF0b21pY190CQlyZW9yZGVyX29iamVjdHM7CisJYXRvbWljX3QgICAgICAgICAgICAgICAgcmVmY250OworCXVuc2lnbmVkIGludAkJbWF4X3NlcV9ucjsKKwljcHVtYXNrX3Zhcl90CQljcHVtYXNrOworCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7Cit9OworCitzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlIHsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgICBjcHVfbm90aWZpZXI7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhCSpwZDsKKwljcHVtYXNrX3Zhcl90ICAgICAgICAgICBjcHVtYXNrOworCXN0cnVjdCBtdXRleAkJbG9jazsKKwl1OAkJCWZsYWdzOworI2RlZmluZQlQQURBVEFfSU5JVAkJMQorI2RlZmluZQlQQURBVEFfUkVTRVQJCTIKK307CisKK2V4dGVybiBzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwYWRhdGFfYWxsb2MoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkJCSAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOworZXh0ZXJuIHZvaWQgcGFkYXRhX2ZyZWUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpOworZXh0ZXJuIGludCBwYWRhdGFfZG9fcGFyYWxsZWwoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQkgICAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSwgaW50IGNiX2NwdSk7CitleHRlcm4gdm9pZCBwYWRhdGFfZG9fc2VyaWFsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKTsKK2V4dGVybiBpbnQgcGFkYXRhX3NldF9jcHVtYXNrKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJICAgICAgY3B1bWFza192YXJfdCBjcHVtYXNrKTsKK2V4dGVybiBpbnQgcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpOworZXh0ZXJuIGludCBwYWRhdGFfcmVtb3ZlX2NwdShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdSk7CitleHRlcm4gdm9pZCBwYWRhdGFfc3RhcnQoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpOworZXh0ZXJuIHZvaWQgcGFkYXRhX3N0b3Aoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKaW5kZXggOTNhN2MwOC4uYzhiNjQ3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaApAQCAtMTEsNiArMTEsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAKICNpZmRlZiBDT05GSUdfQUNQSQorZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9hY3BpX2FkZF9idXNfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IHBjaV9idXMgKnBjaV9idXMpOworZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9hY3BpX3JlbW92ZV9idXNfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpOworZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9hY3BpX2FkZF9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldik7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfcmVtb3ZlX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKKwogc3RhdGljIGlubGluZSBhY3BpX2hhbmRsZSBhY3BpX2ZpbmRfcm9vdF9icmlkZ2VfaGFuZGxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBwY2lfYnVzICpwYnVzID0gcGRldi0+YnVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNWRhMTY2ZS4uMjU4MTM3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0xODcsNiArMTg3LDMzIEBACiAJUENJX0JVU19GTEFHU19OT19NTVJCQyA9IChfX2ZvcmNlIHBjaV9idXNfZmxhZ3NfdCkgMiwKIH07CiAKKy8qIEJhc2VkIG9uIHRoZSBQQ0kgSG90cGx1ZyBTcGVjLCBidXQgc29tZSB2YWx1ZXMgYXJlIG1hZGUgdXAgYnkgdXMgKi8KK2VudW0gcGNpX2J1c19zcGVlZCB7CisJUENJX1NQRUVEXzMzTUh6CQkJPSAweDAwLAorCVBDSV9TUEVFRF82Nk1IegkJCT0gMHgwMSwKKwlQQ0lfU1BFRURfNjZNSHpfUENJWAkJPSAweDAyLAorCVBDSV9TUEVFRF8xMDBNSHpfUENJWAkJPSAweDAzLAorCVBDSV9TUEVFRF8xMzNNSHpfUENJWAkJPSAweDA0LAorCVBDSV9TUEVFRF82Nk1Iel9QQ0lYX0VDQwk9IDB4MDUsCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQwk9IDB4MDYsCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYX0VDQwk9IDB4MDcsCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2CT0gMHgwOSwKKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2CT0gMHgwYSwKKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2CT0gMHgwYiwKKwlBR1BfVU5LTk9XTgkJCT0gMHgwYywKKwlBR1BfMVgJCQkJPSAweDBkLAorCUFHUF8yWAkJCQk9IDB4MGUsCisJQUdQXzRYCQkJCT0gMHgwZiwKKwlBR1BfOFgJCQkJPSAweDEwLAorCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMwk9IDB4MTEsCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYXzUzMwk9IDB4MTIsCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMwk9IDB4MTMsCisJUENJRV9TUEVFRF8yXzVHVAkJPSAweDE0LAorCVBDSUVfU1BFRURfNV8wR1QJCT0gMHgxNSwKKwlQQ0lFX1NQRUVEXzhfMEdUCQk9IDB4MTYsCisJUENJX1NQRUVEX1VOS05PV04JCT0gMHhmZiwKK307CisKIHN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBuZXh0OwogCWNoYXIgY2FwX25yOwpAQCAtMjM5LDYgKzI2Niw3IEBACiAJCQkJCSAgIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KIAl1bnNpZ25lZCBpbnQJcG1lX3N1cHBvcnQ6NTsJLyogQml0bWFzayBvZiBzdGF0ZXMgZnJvbSB3aGljaCBQTUUjCiAJCQkJCSAgIGNhbiBiZSBnZW5lcmF0ZWQgKi8KKwl1bnNpZ25lZCBpbnQJcG1lX2ludGVycnVwdDoxOwogCXVuc2lnbmVkIGludAlkMV9zdXBwb3J0OjE7CS8qIExvdyBwb3dlciBzdGF0ZSBEMSBpcyBzdXBwb3J0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJZDJfc3VwcG9ydDoxOwkvKiBMb3cgcG93ZXIgc3RhdGUgRDIgaXMgc3VwcG9ydGVkICovCiAJdW5zaWduZWQgaW50CW5vX2QxZDI6MTsJLyogT25seSBhbGxvdyBEMCBhbmQgRDMgKi8KQEAgLTI3NSw3ICszMDMsOCBAQAogCXVuc2lnbmVkIGludAltc2l4X2VuYWJsZWQ6MTsKIAl1bnNpZ25lZCBpbnQJYXJpX2VuYWJsZWQ6MTsJLyogQVJJIGZvcndhcmRpbmcgKi8KIAl1bnNpZ25lZCBpbnQJaXNfbWFuYWdlZDoxOwotCXVuc2lnbmVkIGludAlpc19wY2llOjE7CisJdW5zaWduZWQgaW50CWlzX3BjaWU6MTsJLyogT2Jzb2xldGUuIFdpbGwgYmUgcmVtb3ZlZC4KKwkJCQkJICAgVXNlIHBjaV9pc19wY2llKCkgaW5zdGVhZCAqLwogCXVuc2lnbmVkIGludCAgICBuZWVkc19mcmVzZXQ6MTsgLyogRGV2IHJlcXVpcmVzIGZ1bmRhbWVudGFsIHJlc2V0ICovCiAJdW5zaWduZWQgaW50CXN0YXRlX3NhdmVkOjE7CiAJdW5zaWduZWQgaW50CWlzX3BoeXNmbjoxOwpAQCAtMzM1LDkgKzM2NCwyNiBAQAogCWhsaXN0X2FkZF9oZWFkKCZuZXdfY2FwLT5uZXh0LCAmcGNpX2Rldi0+c2F2ZWRfY2FwX3NwYWNlKTsKIH0KIAotI2lmbmRlZiBQQ0lfQlVTX05VTV9SRVNPVVJDRVMKLSNkZWZpbmUgUENJX0JVU19OVU1fUkVTT1VSQ0VTCTE2Ci0jZW5kaWYKKy8qCisgKiBUaGUgZmlyc3QgUENJX0JSSURHRV9SRVNPVVJDRV9OVU0gUENJIGJ1cyByZXNvdXJjZXMgKHRob3NlIHRoYXQgY29ycmVzcG9uZAorICogdG8gUDJQIG9yIENhcmRCdXMgYnJpZGdlIHdpbmRvd3MpIGdvIGluIGEgdGFibGUuICBBZGRpdGlvbmFsIG9uZXMgKGZvcgorICogYnVzZXMgYmVsb3cgaG9zdCBicmlkZ2VzIG9yIHN1YnRyYWN0aXZlIGRlY29kZSBicmlkZ2VzKSBnbyBpbiB0aGUgbGlzdC4KKyAqIFVzZSBwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKCkgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgcmVzb3VyY2VzLgorICovCisKKy8qCisgKiBQQ0lfU1VCVFJBQ1RJVkVfREVDT0RFIG1lYW5zIHRoZSBicmlkZ2UgZm9yd2FyZHMgdGhlIHdpbmRvdyBpbXBsaWNpdGx5CisgKiBhbmQgdGhlcmUncyBubyB3YXkgdG8gcHJvZ3JhbSB0aGUgYnJpZGdlIHdpdGggdGhlIGRldGFpbHMgb2YgdGhlIHdpbmRvdy4KKyAqIFRoaXMgZG9lcyBub3QgYXBwbHkgdG8gQUNQSSBfQ1JTIHdpbmRvd3MsIGV2ZW4gd2l0aCB0aGUgX0RFQyBzdWJ0cmFjdGl2ZS0KKyAqIGRlY29kZSBiaXQgc2V0LCBiZWNhdXNlIHRoZXkgYXJlIGV4cGxpY2l0IGFuZCBjYW4gYmUgcHJvZ3JhbW1lZCB3aXRoIF9TUlMuCisgKi8KKyNkZWZpbmUgUENJX1NVQlRSQUNUSVZFX0RFQ09ERQkweDEKKworc3RydWN0IHBjaV9idXNfcmVzb3VyY2UgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OwogCiAjZGVmaW5lIFBDSV9SRUdJT05fRkxBR19NQVNLCTB4MGZVCS8qIFRoZXNlIGJpdHMgb2YgcmVzb3VyY2UgZmxhZ3MgdGVsbCB1cyB0aGUgUENJIHJlZ2lvbiBmbGFncyAqLwogCkBAIC0zNDgsOCArMzk0LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7CS8qIGxpc3Qgb2YgZGV2aWNlcyBvbiB0aGlzIGJ1cyAqLwogCXN0cnVjdCBwY2lfZGV2CSpzZWxmOwkJLyogYnJpZGdlIGRldmljZSBhcyBzZWVuIGJ5IHBhcmVudCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgc2xvdHM7CQkvKiBsaXN0IG9mIHNsb3RzIG9uIHRoaXMgYnVzICovCi0Jc3RydWN0IHJlc291cmNlCSpyZXNvdXJjZVtQQ0lfQlVTX05VTV9SRVNPVVJDRVNdOwotCQkJCQkvKiBhZGRyZXNzIHNwYWNlIHJvdXRlZCB0byB0aGlzIGJ1cyAqLworCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRV9OVU1dOworCXN0cnVjdCBsaXN0X2hlYWQgcmVzb3VyY2VzOwkvKiBhZGRyZXNzIHNwYWNlIHJvdXRlZCB0byB0aGlzIGJ1cyAqLwogCiAJc3RydWN0IHBjaV9vcHMJKm9wczsJCS8qIGNvbmZpZ3VyYXRpb24gYWNjZXNzIGZ1bmN0aW9ucyAqLwogCXZvaWQJCSpzeXNkYXRhOwkvKiBob29rIGZvciBzeXMtc3BlY2lmaWMgZXh0ZW5zaW9uICovCkBAIC0zNTksNiArNDA1LDggQEAKIAl1bnNpZ25lZCBjaGFyCXByaW1hcnk7CS8qIG51bWJlciBvZiBwcmltYXJ5IGJyaWRnZSAqLwogCXVuc2lnbmVkIGNoYXIJc2Vjb25kYXJ5OwkvKiBudW1iZXIgb2Ygc2Vjb25kYXJ5IGJyaWRnZSAqLwogCXVuc2lnbmVkIGNoYXIJc3Vib3JkaW5hdGU7CS8qIG1heCBudW1iZXIgb2Ygc3Vib3JkaW5hdGUgYnVzZXMgKi8KKwl1bnNpZ25lZCBjaGFyCW1heF9idXNfc3BlZWQ7CS8qIGVudW0gcGNpX2J1c19zcGVlZCAqLworCXVuc2lnbmVkIGNoYXIJY3VyX2J1c19zcGVlZDsJLyogZW51bSBwY2lfYnVzX3NwZWVkICovCiAKIAljaGFyCQluYW1lWzQ4XTsKIApAQCAtNTYzLDcgKzYxMSw4IEBACiBjaGFyICpwY2liaW9zX3NldHVwKGNoYXIgKnN0cik7CiAKIC8qIFVzZWQgb25seSB3aGVuIGRyaXZlcnMvcGNpL3NldHVwLmMgaXMgdXNlZCAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosIHJlc291cmNlX3NpemVfdCwKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKiwgY29uc3Qgc3RydWN0IHJlc291cmNlICosCisJCQkJcmVzb3VyY2Vfc2l6ZV90LAogCQkJCXJlc291cmNlX3NpemVfdCk7CiB2b2lkIHBjaWJpb3NfdXBkYXRlX2lycShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgaXJxKTsKIApAQCAtNTg5LDYgKzYzOCw3IEBACiAJCQkgICAgICAgc3RydWN0IHBjaV9vcHMgKm9wcywgdm9pZCAqc3lzZGF0YSk7CiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2FkZF9uZXdfYnVzKHN0cnVjdCBwY2lfYnVzICpwYXJlbnQsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJaW50IGJ1c25yKTsKK3ZvaWQgcGNpZV91cGRhdGVfbGlua19zcGVlZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MTYgbGlua19zdGF0dXMpOwogc3RydWN0IHBjaV9zbG90ICpwY2lfY3JlYXRlX3Nsb3Qoc3RydWN0IHBjaV9idXMgKnBhcmVudCwgaW50IHNsb3RfbnIsCiAJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJIHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWcpOwpAQCAtNjE1LDEyICs2NjUsNiBAQAogCiAvKiBHZW5lcmljIFBDSSBmdW5jdGlvbnMgZXhwb3J0ZWQgdG8gY2FyZCBkcml2ZXJzICovCiAKLSNpZmRlZiBDT05GSUdfUENJX0xFR0FDWQotc3RydWN0IHBjaV9kZXYgX19kZXByZWNhdGVkICpwY2lfZmluZF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGV2aWNlLAotCQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKLSNlbmRpZiAvKiBDT05GSUdfUENJX0xFR0FDWSAqLwotCiBlbnVtIHBjaV9sb3N0X2ludGVycnVwdF9yZWFzb24gewogCVBDSV9MT1NUX0lSUV9OT19JTkZPUk1BVElPTiA9IDAsCiAJUENJX0xPU1RfSVJRX0RJU0FCTEVfTVNJLApAQCAtNzUwLDExICs3OTQsMjMgQEAKIHBjaV9wb3dlcl90IHBjaV9jaG9vc2Vfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIGJvb2wgcGNpX3BtZV9jYXBhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTsKIHZvaWQgcGNpX3BtZV9hY3RpdmUoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpOwotaW50IHBjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSwgYm9vbCBlbmFibGUpOworaW50IF9fcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLAorCQkgICAgICBib29sIHJ1bnRpbWUsIGJvb2wgZW5hYmxlKTsKIGludCBwY2lfd2FrZV9mcm9tX2QzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKIHBjaV9wb3dlcl90IHBjaV90YXJnZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3ByZXBhcmVfdG9fc2xlZXAoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX2JhY2tfZnJvbV9zbGVlcChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2Jvb2wgcGNpX2Rldl9ydW5fd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLAorCQkJCSAgYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIF9fcGNpX2VuYWJsZV93YWtlKGRldiwgc3RhdGUsIGZhbHNlLCBlbmFibGUpOworfQorCisvKiBGb3IgdXNlIGJ5IGFyY2ggd2l0aCBjdXN0b20gcHJvYmUgY29kZSAqLwordm9pZCBzZXRfcGNpZV9wb3J0X3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwordm9pZCBzZXRfcGNpZV9ob3RwbHVnX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKIC8qIEZ1bmN0aW9ucyBmb3IgUENJIEhvdHBsdWcgZHJpdmVycyB0byB1c2UgKi8KIGludCBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCBjYXApOwpAQCAtNzcyLDYgKzgyOCw3IEBACiB2b2lkIHBjaV9idXNfc2l6ZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogaW50IHBjaV9jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQpOwogdm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKHZvaWQpOwordm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfYnJpZGdlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKTsKIHZvaWQgcGRldl9lbmFibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICopOwogdm9pZCBwZGV2X3NvcnRfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCByZXNvdXJjZV9saXN0ICopOwogaW50IHBjaV9lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICosIGludCBtYXNrKTsKQEAgLTc4OSwxMiArODQ2LDIzIEBACiB2b2lkIHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIAogLyogZHJpdmVycy9wY2kvYnVzLmMgKi8KK3ZvaWQgcGNpX2J1c19hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBmbGFncyk7CitzdHJ1Y3QgcmVzb3VyY2UgKnBjaV9idXNfcmVzb3VyY2Vfbihjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgbik7Cit2b2lkIHBjaV9idXNfcmVtb3ZlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKKworI2RlZmluZSBwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpKQkJCQlcCisJZm9yIChpID0gMDsJCQkJCQkJXAorCSAgICAocmVzID0gcGNpX2J1c19yZXNvdXJjZV9uKGJ1cywgaSkpIHx8IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTTsgXAorCSAgICAgaSsrKQorCiBpbnQgX19tdXN0X2NoZWNrIHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKIAkJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKIAkJCXJlc291cmNlX3NpemVfdCBhbGlnbiwgcmVzb3VyY2Vfc2l6ZV90IG1pbiwKIAkJCXVuc2lnbmVkIGludCB0eXBlX21hc2ssCi0JCQl2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAotCQkJCXJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKKwkJCXJlc291cmNlX3NpemVfdCAoKmFsaWduZikodm9pZCAqLAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkJICByZXNvdXJjZV9zaXplX3QpLAogCQkJdm9pZCAqYWxpZ25mX2RhdGEpOwogdm9pZCBwY2lfZW5hYmxlX2JyaWRnZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiAKQEAgLTk3OCwxMyArMTA0Niw2IEBACiBfUENJX05PUF9BTEwocmVhZCwgKikKIF9QQ0lfTk9QX0FMTCh3cml0ZSwpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZGV2aWNlLAotCQkJCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGV2aWNlLAogCQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQpAQCAtMTI0Miw4ICsxMzAzLDEyIEBACiAJREVDTEFSRV9QQ0lfRklYVVBfU0VDVElPTigucGNpX2ZpeHVwX3N1c3BlbmQsCQkJXAogCQkJc3VzcGVuZCMjdmVuZG9yIyNkZXZpY2UjI2hvb2ssIHZlbmRvciwgZGV2aWNlLCBob29rKQogCi0KKyNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLAorCQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorI2VuZGlmCiAKIHZvaWQgX19pb21lbSAqcGNpbV9pb21hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXhsZW4pOwogdm9pZCBwY2ltX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmgKaW5kZXggNjUyYmE3OS4uNWQwOWNiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2hvdHBsdWcuaApAQCAtMjgsMjYgKzI4LDYgQEAKICNpZm5kZWYgX1BDSV9IT1RQTFVHX0gKICNkZWZpbmUgX1BDSV9IT1RQTFVHX0gKIAotCi0vKiBUaGVzZSB2YWx1ZXMgY29tZSBmcm9tIHRoZSBQQ0kgSG90cGx1ZyBTcGVjICovCi1lbnVtIHBjaV9idXNfc3BlZWQgewotCVBDSV9TUEVFRF8zM01IegkJCT0gMHgwMCwKLQlQQ0lfU1BFRURfNjZNSHoJCQk9IDB4MDEsCi0JUENJX1NQRUVEXzY2TUh6X1BDSVgJCT0gMHgwMiwKLQlQQ0lfU1BFRURfMTAwTUh6X1BDSVgJCT0gMHgwMywKLQlQQ0lfU1BFRURfMTMzTUh6X1BDSVgJCT0gMHgwNCwKLQlQQ0lfU1BFRURfNjZNSHpfUENJWF9FQ0MJPSAweDA1LAotCVBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0MJPSAweDA2LAotCVBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0MJPSAweDA3LAotCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzI2Ngk9IDB4MDksCi0JUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2Ngk9IDB4MGEsCi0JUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2Ngk9IDB4MGIsCi0JUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzCT0gMHgxMSwKLQlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzCT0gMHgxMiwKLQlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCT0gMHgxMywKLQlQQ0lfU1BFRURfVU5LTk9XTgkJPSAweGZmLAotfTsKLQogLyogVGhlc2UgdmFsdWVzIGNvbWUgZnJvbSB0aGUgUENJIEV4cHJlc3MgU3BlYyAqLwogZW51bSBwY2llX2xpbmtfd2lkdGggewogCVBDSUVfTE5LX1dJRFRIX1JFU1JWCT0gMHgwMCwKQEAgLTYxLDEyICs0MSw2IEBACiAJUENJRV9MTktfV0lEVEhfVU5LTk9XTiAgPSAweEZGLAogfTsKIAotZW51bSBwY2llX2xpbmtfc3BlZWQgewotCVBDSUVfMl81R0IJCT0gMHgxNCwKLQlQQ0lFXzVfMEdCCQk9IDB4MTUsCi0JUENJRV9MTktfU1BFRURfVU5LTk9XTgk9IDB4RkYsCi19OwotCiAvKioKICAqIHN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzIC10aGUgY2FsbGJhY2tzIHRoYXQgdGhlIGhvdHBsdWcgcGNpIGNvcmUgY2FuIHVzZQogICogQG93bmVyOiBUaGUgbW9kdWxlIG93bmVyIG9mIHRoaXMgc3RydWN0dXJlCkBAIC04OSwxMiArNjMsNiBAQAogICogQGdldF9hZGFwdGVyX3N0YXR1czogQ2FsbGVkIHRvIGdldCBzZWUgaWYgYW4gYWRhcHRlciBpcyBwcmVzZW50IGluIHRoZSBzbG90IG9yIG5vdC4KICAqCUlmIHRoaXMgZmllbGQgaXMgTlVMTCwgdGhlIHZhbHVlIHBhc3NlZCBpbiB0aGUgc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvCiAgKgl3aWxsIGJlIHVzZWQgd2hlbiB0aGlzIHZhbHVlIGlzIHJlcXVlc3RlZCBieSBhIHVzZXIuCi0gKiBAZ2V0X21heF9idXNfc3BlZWQ6IENhbGxlZCB0byBnZXQgdGhlIG1heCBidXMgc3BlZWQgZm9yIGEgc2xvdC4KLSAqCUlmIHRoaXMgZmllbGQgaXMgTlVMTCwgdGhlIHZhbHVlIHBhc3NlZCBpbiB0aGUgc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvCi0gKgl3aWxsIGJlIHVzZWQgd2hlbiB0aGlzIHZhbHVlIGlzIHJlcXVlc3RlZCBieSBhIHVzZXIuCi0gKiBAZ2V0X2N1cl9idXNfc3BlZWQ6IENhbGxlZCB0byBnZXQgdGhlIGN1cnJlbnQgYnVzIHNwZWVkIGZvciBhIHNsb3QuCi0gKglJZiB0aGlzIGZpZWxkIGlzIE5VTEwsIHRoZSB2YWx1ZSBwYXNzZWQgaW4gdGhlIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbwotICoJd2lsbCBiZSB1c2VkIHdoZW4gdGhpcyB2YWx1ZSBpcyByZXF1ZXN0ZWQgYnkgYSB1c2VyLgogICoKICAqIFRoZSB0YWJsZSBvZiBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGlzIHBhc3NlZCB0byB0aGUgaG90cGx1ZyBwY2kgY29yZSBieSBhCiAgKiBob3RwbHVnIHBjaSBkcml2ZXIuICBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgaG90cGx1ZyBwY2kgY29yZSB3aGVuCkBAIC0xMTIsMTcgKzgwLDE0IEBACiAJaW50ICgqZ2V0X2F0dGVudGlvbl9zdGF0dXMpCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogCWludCAoKmdldF9sYXRjaF9zdGF0dXMpCQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKIAlpbnQgKCpnZXRfYWRhcHRlcl9zdGF0dXMpCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwotCWludCAoKmdldF9tYXhfYnVzX3NwZWVkKQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7Ci0JaW50ICgqZ2V0X2N1cl9idXNfc3BlZWQpCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKIH07CiAKIC8qKgogICogc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvIC0gdXNlZCB0byBub3RpZnkgdGhlIGhvdHBsdWcgcGNpIGNvcmUgb2YgdGhlIHN0YXRlIG9mIHRoZSBzbG90Ci0gKiBAcG93ZXI6IGlmIHBvd2VyIGlzIGVuYWJsZWQgb3Igbm90ICgxLzApCisgKiBAcG93ZXJfc3RhdHVzOiBpZiBwb3dlciBpcyBlbmFibGVkIG9yIG5vdCAoMS8wKQogICogQGF0dGVudGlvbl9zdGF0dXM6IGlmIHRoZSBhdHRlbnRpb24gbGlnaHQgaXMgZW5hYmxlZCBvciBub3QgKDEvMCkKICAqIEBsYXRjaF9zdGF0dXM6IGlmIHRoZSBsYXRjaCAoaWYgYW55KSBpcyBvcGVuIG9yIGNsb3NlZCAoMS8wKQotICogQGFkYXB0ZXJfcHJlc2VudDogaWYgdGhlcmUgaXMgYSBwY2kgYm9hcmQgcHJlc2VudCBpbiB0aGUgc2xvdCBvciBub3QgKDEvMCkKLSAqIEBhZGRyZXNzOiAoZG9tYWluIDw8IDE2IHwgYnVzIDw8IDggfCBkZXYpCisgKiBAYWRhcHRlcl9zdGF0dXM6IGlmIHRoZXJlIGlzIGEgcGNpIGJvYXJkIHByZXNlbnQgaW4gdGhlIHNsb3Qgb3Igbm90ICgxLzApCiAgKgogICogVXNlZCB0byBub3RpZnkgdGhlIGhvdHBsdWcgcGNpIGNvcmUgb2YgdGhlIHN0YXR1cyBvZiBhIHNwZWNpZmljIHNsb3QuCiAgKi8KQEAgLTEzMSw4ICs5Niw2IEBACiAJdTgJYXR0ZW50aW9uX3N0YXR1czsKIAl1OAlsYXRjaF9zdGF0dXM7CiAJdTgJYWRhcHRlcl9zdGF0dXM7Ci0JZW51bSBwY2lfYnVzX3NwZWVkCW1heF9idXNfc3BlZWQ7Ci0JZW51bSBwY2lfYnVzX3NwZWVkCWN1cl9idXNfc3BlZWQ7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggY2NhOGEwNC4uMGJlODI0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTI0MTcsNiArMjQxNyw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDBfSEIJMHgxYTIxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDVfSEIJMHgxYTMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVAkweDFhMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DUFRfU01CVVMJMHgxYzIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ1BUX0xQQzEJMHgxYzQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ1BUX0xQQzIJMHgxYzQzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8wCTB4MjQxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMQkweDI0MTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzMJMHgyNDEzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKaW5kZXggYTc2ODRhNS4uNzk0NjYyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaApAQCAtOTgsOSArOTgsNiBAQAogCWZiYy0+Y291bnQgPSBhbW91bnQ7CiB9CiAKLSNkZWZpbmUgX19wZXJjcHVfY291bnRlcl9hZGQoZmJjLCBhbW91bnQsIGJhdGNoKSBcCi0JcGVyY3B1X2NvdW50ZXJfYWRkKGZiYywgYW1vdW50KQotCiBzdGF0aWMgaW5saW5lIHZvaWQKIHBlcmNwdV9jb3VudGVyX2FkZChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IGFtb3VudCkKIHsKQEAgLTEwOSw2ICsxMDYsMTIgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK19fcGVyY3B1X2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBzNjQgYW1vdW50LCBzMzIgYmF0Y2gpCit7CisJcGVyY3B1X2NvdW50ZXJfYWRkKGZiYywgYW1vdW50KTsKK30KKwogc3RhdGljIGlubGluZSBzNjQgcGVyY3B1X2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYykKIHsKIAlyZXR1cm4gZmJjLT5jb3VudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggOGZhNzE4Ny4uN2IxOGI0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTIxMSwxMSArMjExLDkgQEAKIAkJX191MzIJCXdha2V1cF93YXRlcm1hcms7IC8qIGJ5dGVzIGJlZm9yZSB3YWtldXAgICAqLwogCX07CiAKLQlfX3UzMgkJCV9fcmVzZXJ2ZWRfMjsKLQotCV9fdTY0CQkJYnBfYWRkcjsKIAlfX3UzMgkJCWJwX3R5cGU7Ci0JX191MzIJCQlicF9sZW47CisJX191NjQJCQlicF9hZGRyOworCV9fdTY0CQkJYnBfbGVuOwogfTsKIAogLyoKQEAgLTI5MCw3ICsyODgsNyBAQAogfTsKIAogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSwkJKDMgPDwgMCkKLSNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX1VOS05PV04JCSgwIDw8IDApCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9VTktOT1dOCSgwIDw8IDApCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMCQkJKDEgPDwgMCkKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19VU0VSCQkJKDIgPDwgMCkKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SCQkoMyA8PCAwKQpAQCAtMzU2LDggKzM1NCw4IEBACiAJICoJdTY0CQkJCXN0cmVhbV9pZDsKIAkgKiB9OwogCSAqLwotCVBFUkZfUkVDT1JEX1RIUk9UVExFCQk9IDUsCi0JUEVSRl9SRUNPUkRfVU5USFJPVFRMRQkJPSA2LAorCVBFUkZfUkVDT1JEX1RIUk9UVExFCQkJPSA1LAorCVBFUkZfUkVDT1JEX1VOVEhST1RUTEUJCQk9IDYsCiAKIAkvKgogCSAqIHN0cnVjdCB7CkBAIC0zNzEsMTAgKzM2OSwxMCBAQAogCiAJLyoKIAkgKiBzdHJ1Y3QgewotCSAqIAlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqIAl1MzIJCQkJcGlkLCB0aWQ7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgl1MzIJCQkJcGlkLCB0aWQ7CiAJICoKLQkgKiAJc3RydWN0IHJlYWRfZm9ybWF0CQl2YWx1ZXM7CisJICoJc3RydWN0IHJlYWRfZm9ybWF0CQl2YWx1ZXM7CiAJICogfTsKIAkgKi8KIAlQRVJGX1JFQ09SRF9SRUFECQkJPSA4LApAQCAtNDEyLDcgKzQxMCw3IEBACiAJICoJICBjaGFyICAgICAgICAgICAgICAgICAgZGF0YVtzaXplXTt9JiYgUEVSRl9TQU1QTEVfUkFXCiAJICogfTsKIAkgKi8KLQlQRVJGX1JFQ09SRF9TQU1QTEUJCT0gOSwKKwlQRVJGX1JFQ09SRF9TQU1QTEUJCQk9IDksCiAKIAlQRVJGX1JFQ09SRF9NQVgsCQkJLyogbm9uLUFCSSAqLwogfTsKQEAgLTQ3OCw5ICs0NzYsMTEgQEAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7IC8qIGhhcmR3YXJlICovCiAJCQl1NjQJCWNvbmZpZzsKKwkJCXU2NAkJbGFzdF90YWc7CiAJCQl1bnNpZ25lZCBsb25nCWNvbmZpZ19iYXNlOwogCQkJdW5zaWduZWQgbG9uZwlldmVudF9iYXNlOwogCQkJaW50CQlpZHg7CisJCQlpbnQJCWxhc3RfY3B1OwogCQl9OwogCQlzdHJ1Y3QgeyAvKiBzb2Z0d2FyZSAqLwogCQkJczY0CQlyZW1haW5pbmc7CkBAIC00OTgsOSArNDk4LDggQEAKIAlhdG9taWM2NF90CQkJcGVyaW9kX2xlZnQ7CiAJdTY0CQkJCWludGVycnVwdHM7CiAKLQl1NjQJCQkJZnJlcV9jb3VudDsKLQl1NjQJCQkJZnJlcV9pbnRlcnJ1cHRzOwotCXU2NAkJCQlmcmVxX3N0YW1wOworCXU2NAkJCQlmcmVxX3RpbWVfc3RhbXA7CisJdTY0CQkJCWZyZXFfY291bnRfc3RhbXA7CiAjZW5kaWYKIH07CiAKQEAgLTUxMiw2ICs1MTEsOCBAQAogc3RydWN0IHBtdSB7CiAJaW50ICgqZW5hYmxlKQkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogCXZvaWQgKCpkaXNhYmxlKQkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCWludCAoKnN0YXJ0KQkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCXZvaWQgKCpzdG9wKQkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogCXZvaWQgKCpyZWFkKQkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogCXZvaWQgKCp1bnRocm90dGxlKQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiB9OwpAQCAtNTY1LDYgKzU2NiwxMCBAQAogCQkJCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqLAogCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKK2VudW0gcGVyZl9ncm91cF9mbGFnIHsKKwlQRVJGX0dST1VQX1NPRlRXQVJFID0gMHgxLAorfTsKKwogLyoqCiAgKiBzdHJ1Y3QgcGVyZl9ldmVudCAtIHBlcmZvcm1hbmNlIGV2ZW50IGtlcm5lbCByZXByZXNlbnRhdGlvbjoKICAqLwpAQCAtNTc0LDYgKzU3OSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAkJZXZlbnRfZW50cnk7CiAJc3RydWN0IGxpc3RfaGVhZAkJc2libGluZ19saXN0OwogCWludAkJCQlucl9zaWJsaW5nczsKKwlpbnQJCQkJZ3JvdXBfZmxhZ3M7CiAJc3RydWN0IHBlcmZfZXZlbnQJCSpncm91cF9sZWFkZXI7CiAJc3RydWN0IHBlcmZfZXZlbnQJCSpvdXRwdXQ7CiAJY29uc3Qgc3RydWN0IHBtdQkJKnBtdTsKQEAgLTY1OCw3ICs2NjQsNyBAQAogCiAJcGVyZl9vdmVyZmxvd19oYW5kbGVyX3QJCW92ZXJmbG93X2hhbmRsZXI7CiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCiAJc3RydWN0IGV2ZW50X2ZpbHRlcgkJKmZpbHRlcjsKICNlbmRpZgogCkBAIC02ODMsNyArNjg5LDggQEAKIAkgKi8KIAlzdHJ1Y3QgbXV0ZXgJCQltdXRleDsKIAotCXN0cnVjdCBsaXN0X2hlYWQJCWdyb3VwX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAkJcGlubmVkX2dyb3VwczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlmbGV4aWJsZV9ncm91cHM7CiAJc3RydWN0IGxpc3RfaGVhZAkJZXZlbnRfbGlzdDsKIAlpbnQJCQkJbnJfZXZlbnRzOwogCWludAkJCQlucl9hY3RpdmU7CkBAIC03NDYsMTAgKzc1Myw5IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcG11ICpod19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAotZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIGV4dGVybiBpbnQgcGVyZl9ldmVudF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CkBAIC03NjQsNyArNzcwLDcgQEAKIGV4dGVybiBpbnQgcGVyZl9ldmVudF90YXNrX2VuYWJsZSh2b2lkKTsKIGV4dGVybiBpbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAogCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpOworCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpOwogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIGV4dGVybiBpbnQgcGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50ICoKQEAgLTg1Myw4ICs4NTksNyBAQAogZXh0ZXJuIGludCBzeXNjdGxfcGVyZl9ldmVudF9zYW1wbGVfcmF0ZTsKIAogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgcGVyZl90cF9ldmVudChpbnQgZXZlbnRfaWQsIHU2NCBhZGRyLCB1NjQgY291bnQsCi0JCQkJIHZvaWQgKnJlY29yZCwgaW50IGVudHJ5X3NpemUpOworZXh0ZXJuIHZvaWQgcGVyZl90cF9ldmVudChpbnQgZXZlbnRfaWQsIHU2NCBhZGRyLCB1NjQgY291bnQsIHZvaWQgKnJlY29yZCwgaW50IGVudHJ5X3NpemUpOwogZXh0ZXJuIHZvaWQgcGVyZl9icF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpOwogCiAjaWZuZGVmIHBlcmZfbWlzY19mbGFncwpAQCAtODc1LDEyICs4ODAsMTIgQEAKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSkJCXsgfQorcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykJCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZAogcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQkJeyB9CisJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkCi1wZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCQkJeyB9CitwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCQkJCXsgfQogc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldmVudF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkJeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykJeyB9CkBAIC04OTUsMTMgKzkwMCwxMyBAQAogcGVyZl9zd19ldmVudCh1MzIgZXZlbnRfaWQsIHU2NCBuciwgaW50IG5taSwKIAkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IGFkZHIpCQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQkJeyB9CitwZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkJCQl7IH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfaW5pdCh2b2lkKQkJCQl7IH0KLXN0YXRpYyBpbmxpbmUgaW50ICBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KHZvaWQpICB7IHJldHVybiAtMTsgfQorc3RhdGljIGlubGluZSBpbnQgIHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQodm9pZCkJCXsgcmV0dXJuIC0xOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChpbnQgcmN0eCkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCQl7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKaW5kZXggMjI4YjBiNi4uMGI4MGM4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKQEAgLTMxNSw2ICszMTUsNyBAQAogI2RlZmluZSBTQURCX1hfRUFMR19BRVNfR0NNX0lDVjEyCTE5CiAjZGVmaW5lIFNBREJfWF9FQUxHX0FFU19HQ01fSUNWMTYJMjAKICNkZWZpbmUgU0FEQl9YX0VBTEdfQ0FNRUxMSUFDQkMJCTIyCisjZGVmaW5lIFNBREJfWF9FQUxHX05VTExfQUVTX0dNQUMJMjMKICNkZWZpbmUgU0FEQl9FQUxHX01BWCAgICAgICAgICAgICAgICAgICAyNTMgLyogbGFzdCBFQUxHICovCiAvKiBwcml2YXRlIGFsbG9jYXRpb25zIHNob3VsZCB1c2UgMjQ5LTI1NSAoUkZDMjQwNykgKi8KICNkZWZpbmUgU0FEQl9YX0VBTEdfU0VSUEVOVENCQyAgMjUyICAgICAvKiBkcmFmdC1pZXRmLWlwc2VjLWNpcGgtYWVzLWNiYy0wMCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGlzdC5oIGIvaW5jbHVkZS9saW51eC9wbGlzdC5oCmluZGV4IDgyMjdmNzEuLjY4OTg5ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqIHRoZSBpbnNlcnRpb24gb2YgbmV3IG5vZGVzLiBUaGVyZSBhcmUgbm8gbm9kZXMgd2l0aCBkdXBsaWNhdGUKICAqIHByaW9yaXRlcyBvbiB0aGUgbGlzdC4KICAqCi0gKiBUaGUgbm9kZXMgb24gdGhlIG5vZGVfbGlzdCBpcyBvcmRlcmVkIGJ5IHByaW9yaXR5IGFuZCBjYW4gY29udGFpbgorICogVGhlIG5vZGVzIG9uIHRoZSBub2RlX2xpc3QgYXJlIG9yZGVyZWQgYnkgcHJpb3JpdHkgYW5kIGNhbiBjb250YWluCiAgKiBlbnRyaWVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkuIFRob3NlIGVudHJpZXMgYXJlIG9yZGVyZWQKICAqIEZJRk8KICAqCkBAIC0yNjUsNyArMjY1LDcgQEAKICAqCiAgKiBBc3N1bWVzIHRoZSBwbGlzdCBpcyBfbm90XyBlbXB0eS4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGxpc3Rfbm9kZSogcGxpc3RfZmlyc3QoY29uc3Qgc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbGlzdF9ub2RlICpwbGlzdF9maXJzdChjb25zdCBzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlyZXR1cm4gbGlzdF9lbnRyeShoZWFkLT5ub2RlX2xpc3QubmV4dCwKIAkJCSAgc3RydWN0IHBsaXN0X25vZGUsIHBsaXN0Lm5vZGVfbGlzdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggMTk4YjhmOS4uZTgwZGYwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCiAvKgogICogQ2FsbGJhY2tzIGZvciBwbGF0Zm9ybSBkcml2ZXJzIHRvIGltcGxlbWVudC4KQEAgLTQxMiw5ICs0MTMsMTEgQEAKIAlwbV9tZXNzYWdlX3QJCXBvd2VyX3N0YXRlOwogCXVuc2lnbmVkIGludAkJY2FuX3dha2V1cDoxOwogCXVuc2lnbmVkIGludAkJc2hvdWxkX3dha2V1cDoxOworCXVuc2lnbmVkCQlhc3luY19zdXNwZW5kOjE7CiAJZW51bSBkcG1fc3RhdGUJCXN0YXR1czsJCS8qIE93bmVkIGJ5IHRoZSBQTSBjb3JlICovCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAJc3RydWN0IGxpc3RfaGVhZAllbnRyeTsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0aW9uOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIAlzdHJ1Y3QgdGltZXJfbGlzdAlzdXNwZW5kX3RpbWVyOwpAQCAtNDMwLDYgKzQzMyw3IEBACiAJdW5zaWduZWQgaW50CQlyZXF1ZXN0X3BlbmRpbmc6MTsKIAl1bnNpZ25lZCBpbnQJCWRlZmVycmVkX3Jlc3VtZToxOwogCXVuc2lnbmVkIGludAkJcnVuX3dha2U6MTsKKwl1bnNpZ25lZCBpbnQJCXJ1bnRpbWVfYXV0bzoxOwogCWVudW0gcnBtX3JlcXVlc3QJcmVxdWVzdDsKIAllbnVtIHJwbV9zdGF0dXMJCXJ1bnRpbWVfc3RhdHVzOwogCWludAkJCXJ1bnRpbWVfZXJyb3I7CkBAIC01MDgsNiArNTEyLDcgQEAKIAkJX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoX19mdW5jX18sIGZuLCByZXQpOwkJXAogCX0gd2hpbGUgKDApCiAKK2V4dGVybiB2b2lkIGRldmljZV9wbV93YWl0X2Zvcl9kZXYoc3RydWN0IGRldmljZSAqc3ViLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwogI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAjZGVmaW5lIGRldmljZV9wbV9sb2NrKCkgZG8ge30gd2hpbGUgKDApCkBAIC01MjAsNiArNTI1LDcgQEAKIAogI2RlZmluZSBzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZm4sIHJldCkJCWRvIHt9IHdoaWxlICgwKQogCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX3dhaXRfZm9yX2RldihzdHJ1Y3QgZGV2aWNlICphLCBzdHJ1Y3QgZGV2aWNlICpiKSB7fQogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogLyogSG93IHRvIHJlb3JkZXIgZHBtX2xpc3QgYWZ0ZXIgZGV2aWNlX21vdmUoKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmggYi9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaAppbmRleCAzNzBjZTBhLi43ZDc3M2FhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaApAQCAtMjgsNiArMjgsOCBAQAogZXh0ZXJuIGludCBwbV9ydW50aW1lX2JhcnJpZXIoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHBtX3J1bnRpbWVfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBfX3BtX3J1bnRpbWVfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgY2hlY2tfcmVzdW1lKTsKK2V4dGVybiB2b2lkIHBtX3J1bnRpbWVfYWxsb3coc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBtX3J1bnRpbWVfZm9yYmlkKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBwbV9jaGlsZHJlbl9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNzgsNiArODAsOCBAQAogc3RhdGljIGlubGluZSBpbnQgcG1fcnVudGltZV9iYXJyaWVyKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3BtX3J1bnRpbWVfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgYykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2FsbG93KHN0cnVjdCBkZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2ZvcmJpZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBwbV9jaGlsZHJlbl9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIHBtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbikge30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oIGIvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKaW5kZXggNmI1MzdmMS4uMzFlMWZmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAlSQUlEX0xFVkVMXzAsCiAJUkFJRF9MRVZFTF8xLAogCVJBSURfTEVWRUxfMTAsCisJUkFJRF9MRVZFTF8xRSwKIAlSQUlEX0xFVkVMXzMsCiAJUkFJRF9MRVZFTF80LAogCVJBSURfTEVWRUxfNSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKaW5kZXggMWJmMGY3MC4uNzc5ZDcwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogICogcHJpbWl0aXZlcyBzdWNoIGFzIGxpc3RfYWRkX3JjdSgpIGFzIGxvbmcgYXMgaXQncyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBsaXN0X2VudHJ5X3JjdShwdHIsIHR5cGUsIG1lbWJlcikgXAotCWNvbnRhaW5lcl9vZihyY3VfZGVyZWZlcmVuY2UocHRyKSwgdHlwZSwgbWVtYmVyKQorCWNvbnRhaW5lcl9vZihyY3VfZGVyZWZlcmVuY2VfcmF3KHB0ciksIHR5cGUsIG1lbWJlcikKIAogLyoqCiAgKiBsaXN0X2ZpcnN0X2VudHJ5X3JjdSAtIGdldCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGEgbGlzdApAQCAtMjI1LDkgKzIyNSw5IEBACiAJbGlzdF9lbnRyeV9yY3UoKHB0ciktPm5leHQsIHR5cGUsIG1lbWJlcikKIAogI2RlZmluZSBfX2xpc3RfZm9yX2VhY2hfcmN1KHBvcywgaGVhZCkgXAotCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+bmV4dCk7IFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5uZXh0KTsgXAogCQlwb3MgIT0gKGhlYWQpOyBcCi0JCXBvcyA9IHJjdV9kZXJlZmVyZW5jZShwb3MtPm5leHQpKQorCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHBvcy0+bmV4dCkpCiAKIC8qKgogICogbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UJLQlpdGVyYXRlIG92ZXIgcmN1IGxpc3Qgb2YgZ2l2ZW4gdHlwZQpAQCAtMjU3LDkgKzI1Nyw5IEBACiAgKiBhcyBsb25nIGFzIHRoZSB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UocG9zLCBoZWFkKSBcCi0JZm9yICgocG9zKSA9IHJjdV9kZXJlZmVyZW5jZSgocG9zKS0+bmV4dCk7IFwKKwlmb3IgKChwb3MpID0gcmN1X2RlcmVmZXJlbmNlX3JhdygocG9zKS0+bmV4dCk7IFwKIAkJcHJlZmV0Y2goKHBvcyktPm5leHQpLCAocG9zKSAhPSAoaGVhZCk7IFwKLQkJKHBvcykgPSByY3VfZGVyZWZlcmVuY2UoKHBvcyktPm5leHQpKQorCQkocG9zKSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKHBvcyktPm5leHQpKQogCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1IC0gY29udGludWUgaXRlcmF0aW9uIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlCkBAIC00MTgsMTAgKzQxOCwxMCBAQAogICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikJCSBcCi0JZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5maXJzdCk7CQkJIFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5maXJzdCk7CQkJIFwKIAkJcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7IH0pICYmCQkJIFwKIAkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKLQkJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisJCXBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLT5uZXh0KSkKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmggYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaAppbmRleCA1ODlhNDA5Li5iNzBmZmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaApAQCAtMTAxLDEwICsxMDEsMTAgQEAKICAqCiAgKi8KICNkZWZpbmUgaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KHRwb3MsIHBvcywgaGVhZCwgbWVtYmVyKSBcCi0JZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5maXJzdCk7CQkJIFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5maXJzdCk7CQkJIFwKIAkJKCFpc19hX251bGxzKHBvcykpICYmCQkJXAogCQkoeyB0cG9zID0gaGxpc3RfbnVsbHNfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxOyB9KTsgXAotCQlwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKwkJcG9zID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhwb3MtPm5leHQpKQogCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDI0NDQwZjQuLmM4NDM3MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTYyLDYgKzYyLDggQEAKIAogLyogSW50ZXJuYWwgdG8ga2VybmVsICovCiBleHRlcm4gdm9pZCByY3VfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmU7CitleHRlcm4gdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpCiAjaW5jbHVkZSA8bGludXgvcmN1dHJlZS5oPgpAQCAtNzgsMTQgKzgwLDEyMCBAQAogfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKIGV4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwOwotIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCVwKLQkJCWxvY2tfYWNxdWlyZSgmcmN1X2xvY2tfbWFwLCAwLCAwLCAyLCAxLCBOVUxMLCBfVEhJU19JUF8pCisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlKCkgXAorCQlsb2NrX2FjcXVpcmUoJnJjdV9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQogIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZSgpCWxvY2tfcmVsZWFzZSgmcmN1X2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCi0jZWxzZQotIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2UoKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfYmhfbG9ja19tYXA7CisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlX2JoKCkgXAorCQlsb2NrX2FjcXVpcmUoJnJjdV9iaF9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9iaCgpCWxvY2tfcmVsZWFzZSgmcmN1X2JoX2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCisKK2V4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X3NjaGVkX2xvY2tfbWFwOworIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZV9zY2hlZCgpIFwKKwkJbG9ja19hY3F1aXJlKCZyY3Vfc2NoZWRfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2Vfc2NoZWQoKSBcCisJCWxvY2tfcmVsZWFzZSgmcmN1X3NjaGVkX2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCisKKy8qKgorICogcmN1X3JlYWRfbG9ja19oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluCisgKiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0IGNhbgorICogcHJvdmUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX2hlbGQodm9pZCkKK3sKKwlpZiAoZGVidWdfbG9ja3MpCisJCXJldHVybiBsb2NrX2lzX2hlbGQoJnJjdV9sb2NrX21hcCk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogcmN1X3JlYWRfbG9ja19iaF9oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVLWJoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluCisgKiBhbiBSQ1UtYmggcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1UtYmggcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0IGNhbgorICogcHJvdmUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX2JoX2hlbGQodm9pZCkKK3sKKwlpZiAoZGVidWdfbG9ja3MpCisJCXJldHVybiBsb2NrX2lzX2hlbGQoJnJjdV9iaF9sb2NrX21hcCk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluIGFuCisgKiBSQ1Utc2NoZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1Utc2NoZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0CisgKiBjYW4gcHJvdmUgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IGRpc2FibGluZyBvZiBwcmVlbXB0aW9uIChpbmNsdWRpbmcKKyAqIGRpc2FibGluZyBpcnFzKSBjb3VudHMgYXMgYW4gUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQodm9pZCkKK3sKKwlpbnQgbG9ja2RlcF9vcGluaW9uID0gMDsKKworCWlmIChkZWJ1Z19sb2NrcykKKwkJbG9ja2RlcF9vcGluaW9uID0gbG9ja19pc19oZWxkKCZyY3Vfc2NoZWRfbG9ja19tYXApOworCXJldHVybiBsb2NrZGVwX29waW5pb24gfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwgIXJjdV9zY2hlZHVsZXJfYWN0aXZlOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKworIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmVfYmgoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9iaCgpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlX3NjaGVkKCkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9zY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19oZWxkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9yZWFkX2xvY2tfYmhfaGVsZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gcHJlZW1wdF9jb3VudCgpICE9IDAgfHwgIXJjdV9zY2hlZHVsZXJfYWN0aXZlOworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKKyNpZmRlZiBDT05GSUdfUFJPVkVfUkNVCisKKy8qKgorICogcmN1X2RlcmVmZXJlbmNlX2NoZWNrIC0gcmN1X2RlcmVmZXJlbmNlIHdpdGggZGVidWcgY2hlY2tpbmcKKyAqCisgKiBEbyBhbiByY3VfZGVyZWZlcmVuY2UoKSwgYnV0IGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaXMgY29ycmVjdC4KKyAqIEZvciBleGFtcGxlLCByY3VfZGVyZWZlcmVuY2VfY2hlY2soZ3AsIHJjdV9yZWFkX2xvY2tfaGVsZCgpKSB0bworICogZW5zdXJlIHRoYXQgdGhlIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGV4ZWN1dGVzIHdpdGhpbiBhbiBSQ1UKKyAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGVjayBmb3IKKyAqIGxvY2tzIGJlaW5nIGhlbGQsIGZvciBleGFtcGxlLCBieSB1c2luZyBsb2NrZGVwX2lzX2hlbGQoKS4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgYykgXAorCSh7IFwKKwkJaWYgKGRlYnVnX2xvY2tzICYmICEoYykpIFwKKwkJCWxvY2tkZXBfcmN1X2RlcmVmZXJlbmNlKF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwkJcmN1X2RlcmVmZXJlbmNlX3JhdyhwKTsgXAorCX0pCisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfUkNVICovCisKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIGMpCXJjdV9kZXJlZmVyZW5jZV9yYXcocCkKKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUFJPVkVfUkNVICovCiAKIC8qKgogICogcmN1X3JlYWRfbG9jayAtIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCkBAIC0xNjAsNyArMjY4LDcgQEAKIHsKIAlfX3JjdV9yZWFkX2xvY2tfYmgoKTsKIAlfX2FjcXVpcmUoUkNVX0JIKTsKLQlyY3VfcmVhZF9hY3F1aXJlKCk7CisJcmN1X3JlYWRfYWNxdWlyZV9iaCgpOwogfQogCiAvKgpAQCAtMTcwLDcgKzI3OCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfYmgodm9pZCkKIHsKLQlyY3VfcmVhZF9yZWxlYXNlKCk7CisJcmN1X3JlYWRfcmVsZWFzZV9iaCgpOwogCV9fcmVsZWFzZShSQ1VfQkgpOwogCV9fcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiB9CkBAIC0xODgsNyArMjk2LDcgQEAKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlfX2FjcXVpcmUoUkNVX1NDSEVEKTsKLQlyY3VfcmVhZF9hY3F1aXJlKCk7CisJcmN1X3JlYWRfYWNxdWlyZV9zY2hlZCgpOwogfQogCiAvKiBVc2VkIGJ5IGxvY2tkZXAgYW5kIHRyYWNpbmc6IGNhbm5vdCBiZSB0cmFjZWQsIGNhbm5vdCBjYWxsIGxvY2tkZXAuICovCkBAIC0yMDUsNyArMzEzLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19zY2hlZCh2b2lkKQogewotCXJjdV9yZWFkX3JlbGVhc2UoKTsKKwlyY3VfcmVhZF9yZWxlYXNlX3NjaGVkKCk7CiAJX19yZWxlYXNlKFJDVV9TQ0hFRCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTIxOSwyMiArMzI3LDQ5IEBACiAKIAogLyoqCi0gKiByY3VfZGVyZWZlcmVuY2UgLSBmZXRjaCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgaW4gYW4KLSAqIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFRoaXMgcG9pbnRlciBtYXkgbGF0ZXIKLSAqIGJlIHNhZmVseSBkZXJlZmVyZW5jZWQuCisgKiByY3VfZGVyZWZlcmVuY2VfcmF3IC0gZmV0Y2ggYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyCisgKgorICogVGhlIGNhbGxlciBtdXN0IGJlIHdpdGhpbiBzb21lIGZsYXZvciBvZiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisgKiBzZWN0aW9uLCBvciBtdXN0IGJlIG90aGVyd2lzZSBwcmV2ZW50aW5nIHRoZSBwb2ludGVyIGZyb20gY2hhbmdpbmcsCisgKiBmb3IgZXhhbXBsZSwgYnkgaG9sZGluZyBhbiBhcHByb3ByaWF0ZSBsb2NrLiAgVGhpcyBwb2ludGVyIG1heSBsYXRlcgorICogYmUgc2FmZWx5IGRlcmVmZXJlbmNlZC4gIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBoYXZlCisgKiBkb25lIHRoZSByaWdodCB0aGluZywgYXMgdGhpcyBwcmltaXRpdmUgZG9lcyBubyBjaGVja2luZyBvZiBhbnkga2luZC4KICAqCiAgKiBJbnNlcnRzIG1lbW9yeSBiYXJyaWVycyBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgcmVxdWlyZSB0aGVtCiAgKiAoY3VycmVudGx5IG9ubHkgdGhlIEFscGhhKSwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBkb2N1bWVudHMKICAqIGV4YWN0bHkgd2hpY2ggcG9pbnRlcnMgYXJlIHByb3RlY3RlZCBieSBSQ1UuCiAgKi8KLQotI2RlZmluZSByY3VfZGVyZWZlcmVuY2UocCkgICAgICh7IFwKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3JhdyhwKQkoeyBcCiAJCQkJdHlwZW9mKHApIF9fX19fX19fX3AxID0gQUNDRVNTX09OQ0UocCk7IFwKIAkJCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsgXAogCQkJCShfX19fX19fX19wMSk7IFwKIAkJCQl9KQogCiAvKioKKyAqIHJjdV9kZXJlZmVyZW5jZSAtIGZldGNoIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlciwgY2hlY2tpbmcgZm9yIFJDVQorICoKKyAqIE1ha2VzIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGRvIHRoZSBkaXJ0eSB3b3JrLgorICovCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZShwKSBcCisJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIHJjdV9yZWFkX2xvY2tfaGVsZCgpKQorCisvKioKKyAqIHJjdV9kZXJlZmVyZW5jZV9iaCAtIGZldGNoIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlciwgY2hlY2tpbmcgZm9yIFJDVS1iaAorICoKKyAqIE1ha2VzIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGRvIHRoZSBkaXJ0eSB3b3JrLgorICovCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9iaChwKSBcCisJCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSkKKworLyoqCisgKiByY3VfZGVyZWZlcmVuY2Vfc2NoZWQgLSBmZXRjaCBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIsIGNoZWNraW5nIGZvciBSQ1Utc2NoZWQKKyAqCisgKiBNYWtlcyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBkbyB0aGUgZGlydHkgd29yay4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQocCkgXAorCQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkpCisKKy8qKgogICogcmN1X2Fzc2lnbl9wb2ludGVyIC0gYXNzaWduIChwdWJsaWNpemUpIGEgcG9pbnRlciB0byBhIG5ld2x5CiAgKiBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIGRlcmVmZXJlbmNlZCBieSBSQ1UgcmVhZC1zaWRlCiAgKiBjcml0aWNhbCBzZWN0aW9ucy4gIFJldHVybnMgdGhlIHZhbHVlIGFzc2lnbmVkLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAppbmRleCA5NmNjMzA3Li5hNTE5NTg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaApAQCAtNjIsNiArNjIsMTggQEAKIAogZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKICNkZWZpbmUgc3luY2hyb25pemVfcmN1IHN5bmNocm9uaXplX3NjaGVkCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCkBAIC05MywxMCArMTA1LDYgQEAKIAogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCkKLXsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGV4aXRfcmN1KHZvaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCmluZGV4IDgwNDRiMWIuLjQyY2MzYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCkBAIC0zNSw3ICszNSw2IEBACiBleHRlcm4gdm9pZCByY3Vfc2NoZWRfcXMoaW50IGNwdSk7CiBleHRlcm4gdm9pZCByY3VfYmhfcXMoaW50IGNwdSk7CiBleHRlcm4gaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpOwogZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQpAQCAtOTksNiArOTgsOSBAQAogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOwogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpOwogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX3NjaGVkKHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX05PX0haCiB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXN1bWUtdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcmVzdW1lLXRyYWNlLmgKaW5kZXggYzliYTJmZC4uYmM4YzM4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZXN1bWUtdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc3VtZS10cmFjZS5oCkBAIC02LDYgKzYsMTEgQEAKIAogZXh0ZXJuIGludCBwbV90cmFjZV9lbmFibGVkOwogCitzdGF0aWMgaW5saW5lIGludCBwbV90cmFjZV9pc19lbmFibGVkKHZvaWQpCit7CisgICAgICAgcmV0dXJuIHBtX3RyYWNlX2VuYWJsZWQ7Cit9CisKIHN0cnVjdCBkZXZpY2U7CiBleHRlcm4gdm9pZCBzZXRfdHJhY2VfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBnZW5lcmF0ZV9yZXN1bWVfdHJhY2UoY29uc3Qgdm9pZCAqdHJhY2VkYXRhLCB1bnNpZ25lZCBpbnQgdXNlcik7CkBAIC0xNyw2ICsyMiw4IEBACiAKICNlbHNlCiAKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3RyYWNlX2lzX2VuYWJsZWQodm9pZCkgeyByZXR1cm4gMDsgfQorCiAjZGVmaW5lIFRSQUNFX0RFVklDRShkZXYpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgVFJBQ0VfUkVTVU1FKGRldikgZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAwNTMzMGZjLi41YzUyZmE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTczNSw2ICs3MzUsOSBAQAogZXh0ZXJuIHZvaWQgcnRubF91bmxvY2sodm9pZCk7CiBleHRlcm4gaW50IHJ0bmxfdHJ5bG9jayh2b2lkKTsKIGV4dGVybiBpbnQgcnRubF9pc19sb2NrZWQodm9pZCk7CisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK2V4dGVybiBpbnQgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HICovCiAKIGV4dGVybiB2b2lkIHJ0bmV0bGlua19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19ydG5sX3VubG9jayh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCBhYmRmYWNjLi4wZWVmODdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0zMTAsNiArMzEwLDcgQEAKICNpZmRlZiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAKIGV4dGVybiB2b2lkIHNvZnRsb2NrdXBfdGljayh2b2lkKTsKIGV4dGVybiB2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gdm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nX3N5bmModm9pZCk7CiBleHRlcm4gdm9pZCB0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3Modm9pZCk7CiBleHRlcm4gaW50IHByb2NfZG9zb2Z0bG9ja3VwX3RocmVzaChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCQkJCSAgICB2b2lkIF9fdXNlciAqYnVmZmVyLApAQCAtMzIzLDYgKzMyNCw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKQogewogfQorc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2dfc3luYyh2b2lkKQoreworfQogc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyh2b2lkKQogewogfQpAQCAtNzM2LDE0ICs3NDAsNiBAQAogCXVpZF90IHVpZDsKIAlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKLSNpZmRlZiBDT05GSUdfU1lTRlMKLQlzdHJ1Y3Qga29iamVjdCBrb2JqOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKLSNlbmRpZgotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAlhdG9taWNfbG9uZ190IGxvY2tlZF92bTsKICNlbmRpZgpAQCAtODc0LDcgKzg3MCwxMCBAQAogCWlmIChzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncykKIAkJcmV0dXJuIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFOwogCi0JcmV0dXJuIFNEX1BSRUZFUl9TSUJMSU5HOworCWlmICghc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykKKwkJcmV0dXJuIFNEX1BSRUZFUl9TSUJMSU5HOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNkX2JhbGFuY2VfZm9yX3BhY2thZ2VfcG93ZXIodm9pZCkKQEAgLTEwODAsNyArMTA3OSw4IEBACiBzdHJ1Y3Qgc2NoZWRfY2xhc3MgewogCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqbmV4dDsKIAotCXZvaWQgKCplbnF1ZXVlX3Rhc2spIChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApOworCXZvaWQgKCplbnF1ZXVlX3Rhc2spIChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXAsCisJCQkgICAgICBib29sIGhlYWQpOwogCXZvaWQgKCpkZXF1ZXVlX3Rhc2spIChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCk7CiAJdm9pZCAoKnlpZWxkX3Rhc2spIChzdHJ1Y3QgcnEgKnJxKTsKIApAQCAtMTA5MiwxNCArMTA5Miw2IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCWludCAgKCpzZWxlY3RfdGFza19ycSkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2RfZmxhZywgaW50IGZsYWdzKTsKIAotCXVuc2lnbmVkIGxvbmcgKCpsb2FkX2JhbGFuY2UpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwKLQkJCXN0cnVjdCBycSAqYnVzaWVzdCwgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAotCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkJaW50ICphbGxfcGlubmVkLCBpbnQgKnRoaXNfYmVzdF9wcmlvKTsKLQotCWludCAoKm1vdmVfb25lX3Rhc2spIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwKLQkJCSAgICAgIHN0cnVjdCBycSAqYnVzaWVzdCwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JCQkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSk7CiAJdm9pZCAoKnByZV9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAl2b2lkICgqcG9zdF9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSk7CiAJdm9pZCAoKnRhc2tfd2FraW5nKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwpAQCAtMjUxMywxMyArMjUwNSw5IEBACiAKIGV4dGVybiB2b2lkIG5vcm1hbGl6ZV9ydF90YXNrcyh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAogZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwIGluaXRfdGFza19ncm91cDsKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwIHJvb3RfdGFza19ncm91cDsKLWV4dGVybiB2b2lkIHNldF90Z191aWQoc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKLSNlbmRpZgogCiBleHRlcm4gc3RydWN0IHRhc2tfZ3JvdXAgKnNjaGVkX2NyZWF0ZV9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqcGFyZW50KTsKIGV4dGVybiB2b2lkIHNjaGVkX2Rlc3Ryb3lfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oIGIvaW5jbHVkZS9saW51eC9zaF9pbnRjLmgKaW5kZXggNGVmMjQ2Zi4uNTFkMjg4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaF9pbnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaF9pbnRjLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKICNkZWZpbmUgSU5UQ19TTVAoc3RyaWRlLCBucikKICNlbmRpZgogCi1zdHJ1Y3QgaW50Y19kZXNjIHsKK3N0cnVjdCBpbnRjX2h3X2Rlc2MgewogCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3RvcnM7CiAJdW5zaWduZWQgaW50IG5yX3ZlY3RvcnM7CiAJc3RydWN0IGludGNfZ3JvdXAgKmdyb3VwczsKQEAgLTU2LDI5ICs1Niw0MCBAQAogCXVuc2lnbmVkIGludCBucl9wcmlvX3JlZ3M7CiAJc3RydWN0IGludGNfc2Vuc2VfcmVnICpzZW5zZV9yZWdzOwogCXVuc2lnbmVkIGludCBucl9zZW5zZV9yZWdzOwotCWNoYXIgKm5hbWU7CiAJc3RydWN0IGludGNfbWFza19yZWcgKmFja19yZWdzOwogCXVuc2lnbmVkIGludCBucl9hY2tfcmVnczsKIH07CiAKICNkZWZpbmUgX0lOVENfQVJSQVkoYSkgYSwgc2l6ZW9mKGEpL3NpemVvZigqYSkKKyNkZWZpbmUgSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdzLAlcCisJCSAgICAgcHJpb19yZWdzLAlzZW5zZV9yZWdzLCBhY2tfcmVncykJXAorewkJCQkJCQlcCisJX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCVwKKwlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAlcCisJX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksIF9JTlRDX0FSUkFZKGFja19yZWdzKSwJXAorfQorCitzdHJ1Y3QgaW50Y19kZXNjIHsKKwljaGFyICpuYW1lOworCWludGNfZW51bSBmb3JjZV9lbmFibGU7CisJaW50Y19lbnVtIGZvcmNlX2Rpc2FibGU7CisJc3RydWN0IGludGNfaHdfZGVzYyBodzsKK307CisKICNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0Moc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAkJXAogCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzKQkJCQlcCiBzdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAotCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKLQlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKLQlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKLQljaGlwbmFtZSwJCQkJCQkJXAorCS5uYW1lID0gY2hpcG5hbWUsCQkJCQkJXAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVncywJCQlcCisJCQkgICBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MsIE5VTEwpLAkJXAogfQogCiAjZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCVwKIAltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpCQkJXAogc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKLQlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCi0JX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCi0JX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCi0JY2hpcG5hbWUsCQkJCQkJCVwKLQlfSU5UQ19BUlJBWShhY2tfcmVncyksCQkJCQkJXAorCS5uYW1lID0gY2hpcG5hbWUsCQkJCQkJXAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVncywJCQlcCisJCQkgICBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MsIGFja19yZWdzKSwJCVwKIH0KIAogdm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaAppbmRleCA1MWIzZTc3Li5jYzgxM2Y5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaApAQCAtOTAsNiArOTAsNyBAQAogCXVuc2lnbmVkIGxvbmcJCXBhZGRyOwogCXUzMgkJCWlvbGVuOwogCWludAkJCWlycTsKKwl1MzIJCQlmaWZvX2xlbjsJLyogZGVwdGggb2YgdGhlIEZJRk8gYnVmZmVyICovCiAJdTMyCQkJbWF4X2ZyZXE7CS8qIG1heCBidXMgZnJlcSBzdXBwb3J0ZWQgKi8KIAogCXUxNgkJCWJ1c19udW07CkBAIC0xNzEsNiArMTcyLDEwIEBACiB7CiAJaWYgKGNzID4gZHdzLT5udW1fY3MpCiAJCXJldHVybjsKKworCWlmIChkd3MtPmNzX2NvbnRyb2wpCisJCWR3cy0+Y3NfY29udHJvbCgxKTsKKwogCWR3X3dyaXRlbChkd3MsIHNlciwgMSA8PCBjcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdS5oIGIvaW5jbHVkZS9saW51eC9zcmN1LmgKaW5kZXggNDc2NWQ5Ny4uMzA4NGY4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1LmgKKysrIGIvaW5jbHVkZS9saW51eC9zcmN1LmgKQEAgLTM1LDYgKzM1LDkgQEAKIAlpbnQgY29tcGxldGVkOwogCXN0cnVjdCBzcmN1X3N0cnVjdF9hcnJheSAqcGVyX2NwdV9yZWY7CiAJc3RydWN0IG11dGV4IG11dGV4OworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCiB9OwogCiAjaWZuZGVmIENPTkZJR19QUkVFTVBUCkBAIC00MywxMiArNDYsMTAwIEBACiAjZGVmaW5lIHNyY3VfYmFycmllcigpCiAjZW5kaWYgLyogI2Vsc2UgI2lmbmRlZiBDT05GSUdfUFJFRU1QVCAqLwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKworaW50IF9faW5pdF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOworCisjZGVmaW5lIGluaXRfc3JjdV9zdHJ1Y3Qoc3ApIFwKKyh7IFwKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fc3JjdV9rZXk7IFwKKwlcCisJX19pbml0X3NyY3Vfc3RydWN0KChzcCksICNzcCwgJl9fc3JjdV9rZXkpOyBcCit9KQorCisjIGRlZmluZSBzcmN1X3JlYWRfYWNxdWlyZShzcCkgXAorCQlsb2NrX2FjcXVpcmUoJihzcCktPmRlcF9tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgZGVmaW5lIHNyY3VfcmVhZF9yZWxlYXNlKHNwKSBcCisJCWxvY2tfcmVsZWFzZSgmKHNwKS0+ZGVwX21hcCwgMSwgX1RISVNfSVBfKQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKwogaW50IGluaXRfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7CisKKyMgZGVmaW5lIHNyY3VfcmVhZF9hY3F1aXJlKHNwKSAgZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgc3JjdV9yZWFkX3JlbGVhc2Uoc3ApICBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKwogdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOwotaW50IHNyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApIF9fYWNxdWlyZXMoc3ApOwotdm9pZCBzcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGludCBpZHgpIF9fcmVsZWFzZXMoc3ApOworaW50IF9fc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkgX19hY3F1aXJlcyhzcCk7Cit2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KSBfX3JlbGVhc2VzKHNwKTsKIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7CiBsb25nIHNyY3VfYmF0Y2hlc19jb21wbGV0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCisvKioKKyAqIHNyY3VfcmVhZF9sb2NrX2hlbGQgLSBtaWdodCB3ZSBiZSBpbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluCisgKiBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSW4gYWJzZW5jZSBvZiBDT05GSUdfUFJPVkVfTE9DS0lORywKKyAqIHRoaXMgYXNzdW1lcyB3ZSBhcmUgaW4gYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiB1bmxlc3MgaXQgY2FuCisgKiBwcm92ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNyY3VfcmVhZF9sb2NrX2hlbGQoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK3sKKwlpZiAoZGVidWdfbG9ja3MpCisJCXJldHVybiBsb2NrX2lzX2hlbGQoJnNwLT5kZXBfbWFwKTsKKwlyZXR1cm4gMTsKK30KKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHNyY3VfcmVhZF9sb2NrX2hlbGQoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK3sKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCisvKioKKyAqIHNyY3VfZGVyZWZlcmVuY2UgLSBmZXRjaCBTUkNVLXByb3RlY3RlZCBwb2ludGVyIHdpdGggY2hlY2tpbmcKKyAqCisgKiBNYWtlcyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBkbyB0aGUgZGlydHkgd29yay4KKyAqLworI2RlZmluZSBzcmN1X2RlcmVmZXJlbmNlKHAsIHNwKSBcCisJCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBzcmN1X3JlYWRfbG9ja19oZWxkKHNwKSkKKworLyoqCisgKiBzcmN1X3JlYWRfbG9jayAtIHJlZ2lzdGVyIGEgbmV3IHJlYWRlciBmb3IgYW4gU1JDVS1wcm90ZWN0ZWQgc3RydWN0dXJlLgorICogQHNwOiBzcmN1X3N0cnVjdCBpbiB3aGljaCB0byByZWdpc3RlciB0aGUgbmV3IHJlYWRlci4KKyAqCisgKiBFbnRlciBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgTm90ZSB0aGF0IFNSQ1UgcmVhZC1zaWRlCisgKiBjcml0aWNhbCBzZWN0aW9ucyBtYXkgYmUgbmVzdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzcmN1X3JlYWRfbG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKSBfX2FjcXVpcmVzKHNwKQoreworCWludCByZXR2YWwgPSBfX3NyY3VfcmVhZF9sb2NrKHNwKTsKKworCXNyY3VfcmVhZF9hY3F1aXJlKHNwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHNyY3VfcmVhZF91bmxvY2sgLSB1bnJlZ2lzdGVyIGEgb2xkIHJlYWRlciBmcm9tIGFuIFNSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZS4KKyAqIEBzcDogc3JjdV9zdHJ1Y3QgaW4gd2hpY2ggdG8gdW5yZWdpc3RlciB0aGUgb2xkIHJlYWRlci4KKyAqIEBpZHg6IHJldHVybiB2YWx1ZSBmcm9tIGNvcnJlc3BvbmRpbmcgc3JjdV9yZWFkX2xvY2soKS4KKyAqCisgKiBFeGl0IGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGludCBpZHgpCisJX19yZWxlYXNlcyhzcCkKK3sKKwlzcmN1X3JlYWRfcmVsZWFzZShzcCk7CisJX19zcmN1X3JlYWRfdW5sb2NrKHNwLCBpZHgpOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCAyMDc0NjZhLi44MTI2ZjIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC05OSw3ICs5OSw3IEBACiAjZGVmaW5lIF9fU0NfVEVTVDUodDUsIGE1LCAuLi4pCV9fU0NfVEVTVCh0NSk7IF9fU0NfVEVTVDQoX19WQV9BUkdTX18pCiAjZGVmaW5lIF9fU0NfVEVTVDYodDYsIGE2LCAuLi4pCV9fU0NfVEVTVCh0Nik7IF9fU0NfVEVTVDUoX19WQV9BUkdTX18pCiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiAjZGVmaW5lIFRSQUNFX1NZU19FTlRFUl9QUk9GSUxFX0lOSVQoc25hbWUpCQkJCSAgICAgICBcCiAJLnByb2ZpbGVfZW5hYmxlID0gcHJvZl9zeXNlbnRlcl9lbmFibGUsCQkJCSAgICAgICBcCkBAIC0xMTMsNyArMTEzLDcgQEAKICNkZWZpbmUgVFJBQ0VfU1lTX0VOVEVSX1BST0ZJTEVfSU5JVChzbmFtZSkKICNkZWZpbmUgVFJBQ0VfU1lTX0VYSVRfUFJPRklMRShzbmFtZSkKICNkZWZpbmUgVFJBQ0VfU1lTX0VYSVRfUFJPRklMRV9JTklUKHNuYW1lKQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCiAjZGVmaW5lIF9fU0NfU1RSX0FERUNMMSh0LCBhKQkJI2EKQEAgLTEzMiw3ICsxMzIsOCBAQAogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoc25hbWUpCQkJCVwKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJXAotCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfZW50ZXJfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBldmVudF9lbnRlcl8jI3NuYW1lOwkJXAogCXN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgZW50ZXJfc3lzY2FsbF9wcmludF8jI3NuYW1lID0gewlcCiAJCS50cmFjZSAgICAgICAgICAgICAgICAgID0gcHJpbnRfc3lzY2FsbF9lbnRlciwJCVwKIAl9OwkJCQkJCQkJXApAQCAtMTQzLDggKzE0NCw3IEBACiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19lbnRlciIjc25hbWUsCQlcCiAJCS5zeXN0ZW0gICAgICAgICAgICAgICAgID0gInN5c2NhbGxzIiwJCQlcCiAJCS5ldmVudCAgICAgICAgICAgICAgICAgID0gJmVudGVyX3N5c2NhbGxfcHJpbnRfIyNzbmFtZSwJXAotCQkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQlcCi0JCS5zaG93X2Zvcm1hdAkJPSBzeXNjYWxsX2VudGVyX2Zvcm1hdCwJCVwKKwkJLnJhd19pbml0CQk9IGluaXRfc3lzY2FsbF90cmFjZSwJCVwKIAkJLmRlZmluZV9maWVsZHMJCT0gc3lzY2FsbF9lbnRlcl9kZWZpbmVfZmllbGRzLAlcCiAJCS5yZWdmdW5jCQk9IHJlZ19ldmVudF9zeXNjYWxsX2VudGVyLAlcCiAJCS51bnJlZ2Z1bmMJCT0gdW5yZWdfZXZlbnRfc3lzY2FsbF9lbnRlciwJXApAQCAtMTU0LDcgKzE1NCw4IEBACiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FWElUX0VWRU5UKHNuYW1lKQkJCQkJXAogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lOwlcCi0Jc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF9leGl0XyMjc25hbWU7CQlcCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAkJCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfZXhpdF8jI3NuYW1lOwkJXAogCXN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgZXhpdF9zeXNjYWxsX3ByaW50XyMjc25hbWUgPSB7CVwKIAkJLnRyYWNlICAgICAgICAgICAgICAgICAgPSBwcmludF9zeXNjYWxsX2V4aXQsCQlcCiAJfTsJCQkJCQkJCVwKQEAgLTE2NSw4ICsxNjYsNyBAQAogCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJzeXNfZXhpdCIjc25hbWUsCQlcCiAJCS5zeXN0ZW0gICAgICAgICAgICAgICAgID0gInN5c2NhbGxzIiwJCQlcCiAJCS5ldmVudCAgICAgICAgICAgICAgICAgID0gJmV4aXRfc3lzY2FsbF9wcmludF8jI3NuYW1lLAlcCi0JCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwJCVwKLQkJLnNob3dfZm9ybWF0CQk9IHN5c2NhbGxfZXhpdF9mb3JtYXQsCQlcCisJCS5yYXdfaW5pdAkJPSBpbml0X3N5c2NhbGxfdHJhY2UsCQlcCiAJCS5kZWZpbmVfZmllbGRzCQk9IHN5c2NhbGxfZXhpdF9kZWZpbmVfZmllbGRzLAlcCiAJCS5yZWdmdW5jCQk9IHJlZ19ldmVudF9zeXNjYWxsX2V4aXQsCVwKIAkJLnVucmVnZnVuYwkJPSB1bnJlZ19ldmVudF9zeXNjYWxsX2V4aXQsCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oCmluZGV4IGQ3YWNlMWIuLjMzMmVhZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtMzM5LDYgKzMzOSw3IEBACiAKIAlzdHJ1Y3QgdXNiX2Rldm1hcCBkZXZtYXA7CS8qIGRldmljZSBhZGRyZXNzIGFsbG9jYXRpb24gbWFwICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKnJvb3RfaHViOwkvKiBSb290IGh1YiAqLworCXN0cnVjdCB1c2JfYnVzICpoc19jb21wYW5pb247CS8qIENvbXBhbmlvbiBFSENJIGJ1cywgaWYgYW55ICovCiAJc3RydWN0IGxpc3RfaGVhZCBidXNfbGlzdDsJLyogbGlzdCBvZiBidXNzZXMgKi8KIAogCWludCBiYW5kd2lkdGhfYWxsb2NhdGVkOwkvKiBvbiB0aGlzIGJ1czogaG93IG11Y2ggb2YgdGhlIHRpbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IGQ0OTYyYTcuLjM3OTNkMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMzUwLDYgKzM1MCw3IEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHICAgICB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0UnLCAnRycpIC8qIE1QRUctMS8yLzQgICAgKi8KIAogLyogIFZlbmRvci1zcGVjaWZpYyBmb3JtYXRzICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0NQSUExICAgIHY0bDJfZm91cmNjKCdDJywgJ1AnLCAnSScsICdBJykgLyogY3BpYTEgWVVWICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9XTlZBICAgICB2NGwyX2ZvdXJjYygnVycsICdOJywgJ1YnLCAnQScpIC8qIFdpbm5vdiBodyBjb21wcmVzcyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzEwWCAgdjRsMl9mb3VyY2MoJ1MnLCAnOScsICcxJywgJzAnKSAvKiBTTjlDMTB4IGNvbXByZXNzaW9uICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMjBYX0k0MjAgdjRsMl9mb3VyY2MoJ1MnLCAnOScsICcyJywgJzAnKSAvKiBTTjlDMjB4IFlVViA0OjI6MCAqLwpAQCAtMzYyLDYgKzM2Myw3IEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTYxICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzYnLCAnMScpIC8qIGNvbXByZXNzZWQgR0JSRyBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEFDMjA3ICAgdjRsMl9mb3VyY2MoJ1AnLCAnMicsICcwJywgJzcnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX01SOTczMTBBIHY0bDJfZm91cmNjKCdNJywgJzMnLCAnMScsICcwJykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMjAyOCB2NGwyX2ZvdXJjYygnUycsICdPJywgJ04nLCAnWCcpIC8qIGNvbXByZXNzZWQgR0JSRyBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1E5MDVDICAgdjRsMl9mb3VyY2MoJzknLCAnMCcsICc1JywgJ0MnKSAvKiBjb21wcmVzc2VkIFJHR0IgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1BKUEcgICAgIHY0bDJfZm91cmNjKCdQJywgJ0onLCAnUCcsICdHJykgLyogUGl4YXJ0IDczeHggSlBFRyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfT1Y1MTEgICAgdjRsMl9mb3VyY2MoJ08nLCAnNScsICcxJywgJzEnKSAvKiBvdjUxMSBKUEVHICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW8uaAppbmRleCAwNTdhMmUwLi5mNTA4YzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKQEAgLTUxLDYgKzUxLDkgQEAKICAqCVRoaXMgcmUtZW5hYmxlcyBjYWxsYmFja3M7IGl0IHJldHVybnMgImZhbHNlIiBpZiB0aGVyZSBhcmUgcGVuZGluZwogICoJYnVmZmVycyBpbiB0aGUgcXVldWUsIHRvIGRldGVjdCBhIHBvc3NpYmxlIHJhY2UgYmV0d2VlbiB0aGUgZHJpdmVyCiAgKgljaGVja2luZyBmb3IgbW9yZSB3b3JrLCBhbmQgZW5hYmxpbmcgY2FsbGJhY2tzLgorICogQGRldGFjaF91bnVzZWRfYnVmOiBkZXRhY2ggZmlyc3QgdW51c2VkIGJ1ZmZlcgorICogCXZxOiB0aGUgc3RydWN0IHZpcnRxdWV1ZSB3ZSdyZSB0YWxraW5nIGFib3V0LgorICogCVJldHVybnMgTlVMTCBvciB0aGUgImRhdGEiIHRva2VuIGhhbmRlZCB0byBhZGRfYnVmCiAgKgogICogTG9ja2luZyBydWxlcyBhcmUgc3RyYWlnaHRmb3J3YXJkOiB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvcgogICogbG9ja2luZy4gIE5vIHR3byBvcGVyYXRpb25zIG1heSBiZSBpbnZva2VkIHNpbXVsdGFuZW91c2x5LCB3aXRoIHRoZSBleGNlcHRpb24KQEAgLTcxLDYgKzc0LDcgQEAKIAogCXZvaWQgKCpkaXNhYmxlX2NiKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CiAJYm9vbCAoKmVuYWJsZV9jYikoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOworCXZvaWQgKigqZGV0YWNoX3VudXNlZF9idWYpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCmluZGV4IDE0MThmMDQuLmE1MGVjZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKQEAgLTcsNiArNyw3IEBACiAKIC8qIFRoZSBmZWF0dXJlIGJpdG1hcCBmb3IgdmlydGlvIGJhbGxvb24gKi8KICNkZWZpbmUgVklSVElPX0JBTExPT05fRl9NVVNUX1RFTExfSE9TVAkwIC8qIFRlbGwgYmVmb3JlIHJlY2xhaW1pbmcgcGFnZXMgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fRl9TVEFUU19WUQkxIC8qIE1lbW9yeSBTdGF0cyB2aXJ0cXVldWUgKi8KIAogLyogU2l6ZSBvZiBhIFBGTiBpbiB0aGUgYmFsbG9vbiBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFZJUlRJT19CQUxMT09OX1BGTl9TSElGVCAxMgpAQCAtMTgsNCArMTksMTggQEAKIAkvKiBOdW1iZXIgb2YgcGFnZXMgd2UndmUgYWN0dWFsbHkgZ290IGluIGJhbGxvb24uICovCiAJX19sZTMyIGFjdHVhbDsKIH07CisKKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19TV0FQX0lOICAwICAgLyogQW1vdW50IG9mIG1lbW9yeSBzd2FwcGVkIGluICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfU1dBUF9PVVQgMSAgIC8qIEFtb3VudCBvZiBtZW1vcnkgc3dhcHBlZCBvdXQgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19NQUpGTFQgICAyICAgLyogTnVtYmVyIG9mIG1ham9yIGZhdWx0cyAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX01JTkZMVCAgIDMgICAvKiBOdW1iZXIgb2YgbWlub3IgZmF1bHRzICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUVNRlJFRSAgNCAgIC8qIFRvdGFsIGFtb3VudCBvZiBmcmVlIG1lbW9yeSAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX01FTVRPVCAgIDUgICAvKiBUb3RhbCBhbW91bnQgb2YgbWVtb3J5ICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTlIgICAgICAgNgorCitzdHJ1Y3QgdmlydGlvX2JhbGxvb25fc3RhdCB7CisJdTE2IHRhZzsKKwl1NjQgdmFsOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fQkFMTE9PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IGZkMjk0YzUuLmU1MjAyOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIFZJUlRJT19CTEtfRl9CTEtfU0laRQk2CS8qIEJsb2NrIHNpemUgb2YgZGlzayBpcyBhdmFpbGFibGUqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfU0NTSQk3CS8qIFN1cHBvcnRzIHNjc2kgY29tbWFuZCBwYXNzdGhydSAqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfRkxVU0gJOQkvKiBDYWNoZSBmbHVzaCBjb21tYW5kIHN1cHBvcnQgKi8KKyNkZWZpbmUgVklSVElPX0JMS19GX1RPUE9MT0dZCTEwCS8qIFRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSAqLwogCiBzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcgewogCS8qIFRoZSBjYXBhY2l0eSAoaW4gNTEyLWJ5dGUgc2VjdG9ycykuICovCkBAIC0yOSw4ICszMCwyMCBAQAogCQlfX3U4IGhlYWRzOwogCQlfX3U4IHNlY3RvcnM7CiAJfSBnZW9tZXRyeTsKKwogCS8qIGJsb2NrIHNpemUgb2YgZGV2aWNlIChpZiBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUpICovCiAJX191MzIgYmxrX3NpemU7CisKKwkvKiB0aGUgbmV4dCA0IGVudHJpZXMgYXJlIGd1YXJkZWQgYnkgVklSVElPX0JMS19GX1RPUE9MT0dZICAqLworCS8qIGV4cG9uZW50IGZvciBwaHlzaWNhbCBibG9jayBwZXIgbG9naWNhbCBibG9jay4gKi8KKwlfX3U4IHBoeXNpY2FsX2Jsb2NrX2V4cDsKKwkvKiBhbGlnbm1lbnQgb2Zmc2V0IGluIGxvZ2ljYWwgYmxvY2tzLiAqLworCV9fdTggYWxpZ25tZW50X29mZnNldDsKKwkvKiBtaW5pbXVtIEkvTyBzaXplIHdpdGhvdXQgcGVyZm9ybWFuY2UgcGVuYWx0eSBpbiBsb2dpY2FsIGJsb2Nrcy4gKi8KKwlfX3UxNiBtaW5faW9fc2l6ZTsKKwkvKiBvcHRpbWFsIHN1c3RhaW5lZCBJL08gc2l6ZSBpbiBsb2dpY2FsIGJsb2Nrcy4gKi8KKwlfX3UzMiBvcHRfaW9fc2l6ZTsKKwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAppbmRleCBmZTg4NTE3Li5hZTRmMDM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCkBAIC0zLDE5ICszLDQ1IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgotLyogVGhpcyBoZWFkZXIsIGV4Y2x1ZGluZyB0aGUgI2lmZGVmIF9fS0VSTkVMX18gcGFydCwgaXMgQlNEIGxpY2Vuc2VkIHNvCi0gKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworLyoKKyAqIFRoaXMgaGVhZGVyLCBleGNsdWRpbmcgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHBhcnQsIGlzIEJTRCBsaWNlbnNlZCBzbworICogYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudCBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIwMDksIDIwMTAKKyAqLwogCiAvKiBGZWF0dXJlIGJpdHMgKi8KICNkZWZpbmUgVklSVElPX0NPTlNPTEVfRl9TSVpFCTAJLyogRG9lcyBob3N0IHByb3ZpZGUgY29uc29sZSBzaXplPyAqLworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCAxCS8qIERvZXMgaG9zdCBwcm92aWRlIG11bHRpcGxlIHBvcnRzPyAqLwogCiBzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnIHsKIAkvKiBjb2x1bXMgb2YgdGhlIHNjcmVlbnMgKi8KIAlfX3UxNiBjb2xzOwogCS8qIHJvd3Mgb2YgdGhlIHNjcmVlbnMgKi8KIAlfX3UxNiByb3dzOworCS8qIG1heC4gbnVtYmVyIG9mIHBvcnRzIHRoaXMgZGV2aWNlIGNhbiBob2xkICovCisJX191MzIgbWF4X25yX3BvcnRzOworCS8qIG51bWJlciBvZiBwb3J0cyBhZGRlZCBzbyBmYXIgKi8KKwlfX3UzMiBucl9wb3J0czsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKKy8qCisgKiBBIG1lc3NhZ2UgdGhhdCdzIHBhc3NlZCBiZXR3ZWVuIHRoZSBIb3N0IGFuZCB0aGUgR3Vlc3QgZm9yIGEKKyAqIHBhcnRpY3VsYXIgcG9ydC4KKyAqLworc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgeworCV9fdTMyIGlkOwkJLyogUG9ydCBudW1iZXIgKi8KKwlfX3UxNiBldmVudDsJCS8qIFRoZSBraW5kIG9mIGNvbnRyb2wgZXZlbnQgKHNlZSBiZWxvdykgKi8KKwlfX3UxNiB2YWx1ZTsJCS8qIEV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGUga2V5ICovCit9OworCisvKiBTb21lIGV2ZW50cyBmb3IgY29udHJvbCBtZXNzYWdlcyAqLworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZCTAKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfQ09OU09MRV9QT1JUCTEKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUkVTSVpFCQkyCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTgkzCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfTkFNRQk0CisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfUkVNT1ZFCTUKIAogI2lmZGVmIF9fS0VSTkVMX18KIGludCBfX2luaXQgdmlydGlvX2NvbnNfZWFybHlfaW5pdChpbnQgKCpwdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmggYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvaXNpZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYjc0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvaXNpZi5oCkBAIC0wLDAgKzEsNTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIGlzaWYgaGVhZGVyIGZpbGUKKyAqLworI2lmbmRlZiBfSVNJRl9ICisjZGVmaW5lIF9JU0lGX0gKKworI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvY2NkY190eXBlcy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBmZV90eXBlcy5oPgorCisvKiBpc2lmIGZsb2F0IHR5cGUgUzhROC9VOFE4ICovCitzdHJ1Y3QgaXNpZl9mbG9hdF84IHsKKwkvKiA4IGJpdCBpbnRlZ2VyIHBhcnQgKi8KKwlfX3U4IGludGVnZXI7CisJLyogOCBiaXQgZGVjaW1hbCBwYXJ0ICovCisJX191OCBkZWNpbWFsOworfTsKKworLyogaXNpZiBmbG9hdCB0eXBlIFUxNlExNi9TMTZRMTYgKi8KK3N0cnVjdCBpc2lmX2Zsb2F0XzE2IHsKKwkvKiAxNiBiaXQgaW50ZWdlciBwYXJ0ICovCisJX191MTYgaW50ZWdlcjsKKwkvKiAxNiBiaXQgZGVjaW1hbCBwYXJ0ICovCisJX191MTYgZGVjaW1hbDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgVmVydGljYWwgRGVmZWN0IENvcnJlY3Rpb24gcGFyYW1ldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmZWN0IENvcnJlY3Rpb24gKERGQykgdGFibGUgZW50cnkgKi8KK3N0cnVjdCBpc2lmX3ZkZmNfZW50cnkgeworCS8qIHZlcnRpY2FsIHBvc2l0aW9uIG9mIGRlZmVjdCAqLworCV9fdTE2IHBvc192ZXJ0OworCS8qIGhvcml6b250YWwgcG9zaXRpb24gb2YgZGVmZWN0ICovCisJX191MTYgcG9zX2hvcno7CisJLyoKKwkgKiBEZWZlY3QgbGV2ZWwgb2YgVmVydGljYWwgbGluZSBkZWZlY3QgcG9zaXRpb24uIFRoaXMgaXMgc3VidHJhY3RlZAorCSAqIGZyb20gdGhlIGRhdGEgYXQgdGhlIGRlZmVjdCBwb3NpdGlvbgorCSAqLworCV9fdTggbGV2ZWxfYXRfcG9zOworCS8qCisJICogRGVmZWN0IGxldmVsIG9mIHRoZSBwaXhlbHMgdXBwZXIgdGhhbiB0aGUgdmVydGljYWwgbGluZSBkZWZlY3QuCisJICogVGhpcyBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGRhdGEKKwkgKi8KKwlfX3U4IGxldmVsX3VwX3BpeGVsczsKKwkvKgorCSAqIERlZmVjdCBsZXZlbCBvZiB0aGUgcGl4ZWxzIGxvd2VyIHRoYW4gdGhlIHZlcnRpY2FsIGxpbmUgZGVmZWN0LgorCSAqIFRoaXMgaXMgc3VidHJhY3RlZCBmcm9tIHRoZSBkYXRhCisJICovCisJX191OCBsZXZlbF9sb3dfcGl4ZWxzOworfTsKKworI2RlZmluZSBJU0lGX1ZERkNfVEFCTEVfU0laRQkJOAorc3RydWN0IGlzaWZfZGZjIHsKKwkvKiBlbmFibGUgdmVydGljYWwgZGVmZWN0IGNvcnJlY3Rpb24gKi8KKwlfX3U4IGVuOworCS8qIERlZmVjdCBsZXZlbCBzdWJ0cmFjdGlvbi4gSnVzdCBmZWQgdGhyb3VnaCBpZiBzYXR1cmF0aW5nICovCisjZGVmaW5lCUlTSUZfVkRGQ19OT1JNQUwJCTAKKwkvKgorCSAqIERlZmVjdCBsZXZlbCBzdWJ0cmFjdGlvbi4gSG9yaXpvbnRhbCBpbnRlcnBvbGF0aW9uICgoaS0yKSsoaSsyKSkvMgorCSAqIGlmIGRhdGEgc2F0dXJhdGluZworCSAqLworI2RlZmluZSBJU0lGX1ZERkNfSE9SWl9JTlRFUlBPTF9JRl9TQVQJMQorCS8qIEhvcml6b250YWwgaW50ZXJwb2xhdGlvbiAoKChpLTIpKyhpKzIpKS8yKSAqLworI2RlZmluZQlJU0lGX1ZERkNfSE9SWl9JTlRFUlBPTAkJMgorCS8qIG9uZSBvZiB0aGUgdmVydGljYWwgZGVmZWN0IGNvcnJlY3Rpb24gbW9kZXMgYWJvdmUgKi8KKwlfX3U4IGNvcnJfbW9kZTsKKwkvKiAwIC0gd2hvbGUgbGluZSBjb3JyZWN0ZWQsIDEgLSBub3QgcGl4ZWxzIHVwcGVyIHRoYW4gdGhlIGRlZmVjdCAqLworCV9fdTggY29ycl93aG9sZV9saW5lOworI2RlZmluZSBJU0lGX1ZERkNfTk9fU0hJRlQJCTAKKyNkZWZpbmUgSVNJRl9WREZDX1NISUZUXzEJCTEKKyNkZWZpbmUgSVNJRl9WREZDX1NISUZUXzIJCTIKKyNkZWZpbmUgSVNJRl9WREZDX1NISUZUXzMJCTMKKyNkZWZpbmUgSVNJRl9WREZDX1NISUZUXzQJCTQKKwkvKgorCSAqIGRlZmVjdCBsZXZlbCBzaGlmdCB2YWx1ZS4gbGV2ZWxfYXRfcG9zLCBsZXZlbF91cHBlcl9wb3MsCisJICogYW5kIGxldmVsX2xvd2VyX3BvcyBjYW4gYmUgc2hpZnRlZCB1cCBieSB0aGlzIHZhbHVlLiBDaG9vc2UKKwkgKiBvbmUgb2YgdGhlIHZhbHVlcyBhYm92ZQorCSAqLworCV9fdTggZGVmX2xldmVsX3NoaWZ0OworCS8qIGRlZmVjdCBzYXR1cmF0aW9uIGxldmVsICovCisJX191MTYgZGVmX3NhdF9sZXZlbDsKKwkvKiBudW1iZXIgb2YgdmVydGljYWwgZGVmZWN0cy4gTWF4IGlzIElTSUZfVkRGQ19UQUJMRV9TSVpFICovCisJX191MTYgbnVtX3ZkZWZlY3RzOworCS8qIFZERkMgdGFibGUgcHRyICovCisJc3RydWN0IGlzaWZfdmRmY19lbnRyeSB0YWJsZVtJU0lGX1ZERkNfVEFCTEVfU0laRV07Cit9OworCitzdHJ1Y3QgaXNpZl9ob3J6X2JjbGFtcCB7CisKKwkvKiBIb3Jpem9udGFsIGNsYW1wIGRpc2FibGVkLiBPbmx5IHZlcnRpY2FsIGNsYW1wIHZhbHVlIGlzIHN1YnRyYWN0ZWQgKi8KKyNkZWZpbmUJSVNJRl9IT1JaX0JDX0RJU0FCTEUJCTAKKwkvKgorCSAqIEhvcml6b250YWwgY2xhbXAgdmFsdWUgaXMgY2FsY3VsYXRlZCBhbmQgc3VidHJhY3RlZCBmcm9tIGltYWdlIGRhdGEKKwkgKiBhbG9uZyB3aXRoIHZlcnRpY2FsIGNsYW1wIHZhbHVlCisJICovCisjZGVmaW5lIElTSUZfSE9SWl9CQ19DTEFNUF9DQUxDX0VOQUJMRUQJMQorCS8qCisJICogSG9yaXpvbnRhbCBjbGFtcCB2YWx1ZSBjYWxjdWxhdGVkIGZyb20gcHJldmlvdXMgaW1hZ2UgaXMgc3VidHJhY3RlZAorCSAqIGZyb20gaW1hZ2UgZGF0YSBhbG9uZyB3aXRoIHZlcnRpY2FsIGNsYW1wIHZhbHVlLgorCSAqLworI2RlZmluZSBJU0lGX0hPUlpfQkNfQ0xBTVBfTk9UX1VQREFURUQJMgorCS8qIGhvcml6b250YWwgY2xhbXAgbW9kZS4gT25lIG9mIHRoZSB2YWx1ZXMgYWJvdmUgKi8KKwlfX3U4IG1vZGU7CisJLyoKKwkgKiBwaXhlbCB2YWx1ZSBsaW1pdCBlbmFibGUuCisJICogIDAgLSBsaW1pdCBkaXNhYmxlZAorCSAqICAxIC0gcGl4ZWwgdmFsdWUgbGltaXRlZCB0byAxMDIzCisJICovCisJX191OCBjbGFtcF9waXhfbGltaXQ7CisJLyogU2VsZWN0IE1vc3QgbGVmdCB3aW5kb3cgZm9yIGJjIGNhbGN1bGF0aW9uICovCisjZGVmaW5lCUlTSUZfU0VMX01PU1RfTEVGVF9XSU4JCTAKKwkvKiBTZWxlY3QgTW9zdCByaWdodCB3aW5kb3cgZm9yIGJjIGNhbGN1bGF0aW9uICovCisjZGVmaW5lIElTSUZfU0VMX01PU1RfUklHSFRfV0lOCQkxCisJLyogU2VsZWN0IG1vc3QgbGVmdCBvciByaWdodCB3aW5kb3cgZm9yIGNsYW1wIHZhbCBjYWxjdWxhdGlvbiAqLworCV9fdTggYmFzZV93aW5fc2VsX2NhbGM7CisJLyogV2luZG93IGNvdW50IHBlciBjb2xvciBmb3IgY2FsY3VsYXRpb24uIHJhbmdlIDEtMzIgKi8KKwlfX3U4IHdpbl9jb3VudF9jYWxjOworCS8qIFdpbmRvdyBzdGFydCBwb3NpdGlvbiAtIGhvcml6b250YWwgZm9yIGNhbGN1bGF0aW9uLiAwIC0gODE5MSAqLworCV9fdTE2IHdpbl9zdGFydF9oX2NhbGM7CisJLyogV2luZG93IHN0YXJ0IHBvc2l0aW9uIC0gdmVydGljYWwgZm9yIGNhbGN1bGF0aW9uIDAgLSA4MTkxICovCisJX191MTYgd2luX3N0YXJ0X3ZfY2FsYzsKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX0hfMlBJWEVMUwkwCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9IXzRQSVhFTFMJMQorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfSF84UElYRUxTCTIKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX0hfMTZQSVhFTFMJMworCS8qIFdpZHRoIG9mIHRoZSBzYW1wbGUgd2luZG93IGluIHBpeGVscyBmb3IgY2FsY3VsYXRpb24gKi8KKwlfX3U4IHdpbl9oX3N6X2NhbGM7CisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9WXzMyUElYRUxTCTAKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX1ZfNjRQSVhFTFMJMQorI2RlZmluZQlJU0lGX0hPUlpfQkNfU1pfVl8xMjhQSVhFTFMJMgorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfVl8yNTZQSVhFTFMJMworCS8qIEhlaWdodCBvZiB0aGUgc2FtcGxlIHdpbmRvdyBpbiBwaXhlbHMgZm9yIGNhbGN1bGF0aW9uICovCisJX191OCB3aW5fdl9zel9jYWxjOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEJsYWNrIENsYW1wIHBhcmFtZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpc2lmX3ZlcnRfYmNsYW1wIHsKKwkvKiBSZXNldCB2YWx1ZSB1c2VkIGlzIHRoZSBjbGFtcCB2YWx1ZSBjYWxjdWxhdGVkICovCisjZGVmaW5lCUlTSUZfVkVSVF9CQ19VU0VfSE9SWl9DTEFNUF9WQUwJCTAKKwkvKiBSZXNldCB2YWx1ZSB1c2VkIGlzIHJlc2V0X2NsYW1wX3ZhbCBjb25maWd1cmVkICovCisjZGVmaW5lCUlTSUZfVkVSVF9CQ19VU0VfQ09ORklHX0NMQU1QX1ZBTAkxCisJLyogTm8gdXBkYXRlLCBwcmV2aW91cyBpbWFnZSB2YWx1ZSBpcyB1c2VkICovCisjZGVmaW5lCUlTSUZfVkVSVF9CQ19OT19VUERBVEUJCQkyCisJLyoKKwkgKiBSZXNldCB2YWx1ZSBzZWxlY3RvciBmb3IgdmVydGljYWwgY2xhbXAgY2FsY3VsYXRpb24uIFVzZSBvbmUgb2YKKwkgKiB0aGUgYWJvdmUgdmFsdWVzCisJICovCisJX191OCByZXNldF92YWxfc2VsOworCS8qIFU4UTguIExpbmUgYXZlcmFnZSBjb2VmZmljaWVudCB1c2VkIGluIHZlcnRpY2FsIGNsYW1wIGNhbGN1bGF0aW9uICovCisJX191OCBsaW5lX2F2ZV9jb2VmOworCS8qIEhlaWdodCBvZiB0aGUgb3B0aWNhbCBibGFjayByZWdpb24gZm9yIGNhbGN1bGF0aW9uICovCisJX191MTYgb2Jfdl9zel9jYWxjOworCS8qIE9wdGljYWwgYmxhY2sgcmVnaW9uIHN0YXJ0IHBvc2l0aW9uIC0gaG9yaXpvbnRhbC4gMCAtIDgxOTEgKi8KKwlfX3UxNiBvYl9zdGFydF9oOworCS8qIE9wdGljYWwgYmxhY2sgcmVnaW9uIHN0YXJ0IHBvc2l0aW9uIC0gdmVydGljYWwgMCAtIDgxOTEgKi8KKwlfX3UxNiBvYl9zdGFydF92OworfTsKKworc3RydWN0IGlzaWZfYmxhY2tfY2xhbXAgeworCS8qCisJICogVGhpcyBvZmZzZXQgdmFsdWUgaXMgYWRkZWQgaXJyZXNwZWN0aXZlIG9mIHRoZSBjbGFtcCBlbmFibGUgc3RhdHVzLgorCSAqIFMxMworCSAqLworCV9fdTE2IGRjX29mZnNldDsKKwkvKgorCSAqIEVuYWJsZSBibGFjay9kaWdpdGFsIGNsYW1wIHZhbHVlIHRvIGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgaW1hZ2UgZGF0YQorCSAqLworCV9fdTggZW47CisJLyoKKwkgKiBibGFjayBjbGFtcCBtb2RlLiBzYW1lL3NlcGFyYXRlIGNsYW1wIGZvciA0IGNvbG9ycworCSAqIDAgLSBkaXNhYmxlIC0gc2FtZSBjbGFtcCB2YWx1ZSBmb3IgYWxsIGNvbG9ycworCSAqIDEgLSBjbGFtcCB2YWx1ZSBjYWxjdWxhdGVkIHNlcGFyYXRlbHkgZm9yIGFsbCBjb2xvcnMKKwkgKi8KKwlfX3U4IGJjX21vZGVfY29sb3I7CisJLyogVnJ0aWNhbCBzdGFydCBwb3NpdGlvbiBmb3IgYmMgc3VidHJhY3Rpb24gKi8KKwlfX3UxNiB2ZXJ0X3N0YXJ0X3N1YjsKKwkvKiBCbGFjayBjbGFtcCBmb3IgaG9yaXpvbnRhbCBkaXJlY3Rpb24gKi8KKwlzdHJ1Y3QgaXNpZl9ob3J6X2JjbGFtcCBob3J6OworCS8qIEJsYWNrIGNsYW1wIGZvciB2ZXJ0aWNhbCBkaXJlY3Rpb24gKi8KKwlzdHJ1Y3QgaXNpZl92ZXJ0X2JjbGFtcCB2ZXJ0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqIENvbG9yIFNwYWNlIENvbnZlcnRpb24gKENTQykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElTSUZfQ1NDX05VTV9DT0VGRgkxNgorc3RydWN0IGlzaWZfY29sb3Jfc3BhY2VfY29udiB7CisJLyogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gKi8KKwlfX3U4IGVuOworCS8qCisJICogY3NjIGNvZWZmaWVudCB0YWJsZS4gUzhRNSwgTTAwIGF0IGluZGV4IDAsIE0wMSBhdCBpbmRleCAxLCBhbmQKKwkgKiBzbyBmb3J0aAorCSAqLworCXN0cnVjdCBpc2lmX2Zsb2F0XzggY29lZmZbSVNJRl9DU0NfTlVNX0NPRUZGXTsKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqICBCbGFjayAgQ29tcGVuc2F0aW9uIHBhcmFtZXRlcnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgaXNpZl9ibGFja19jb21wIHsKKwkvKiBDb21wIGZvciBSZWQgKi8KKwlfX3M4IHJfY29tcDsKKwkvKiBDb21wIGZvciBHciAqLworCV9fczggZ3JfY29tcDsKKwkvKiBDb21wIGZvciBCbHVlICovCisJX19zOCBiX2NvbXA7CisJLyogQ29tcCBmb3IgR2IgKi8KKwlfX3M4IGdiX2NvbXA7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogIEdhaW4gcGFyYW1ldGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpc2lmX2dhaW4geworCS8qIEdhaW4gZm9yIFJlZCBvciB5ZSAqLworCXN0cnVjdCBpc2lmX2Zsb2F0XzE2IHJfeWU7CisJLyogR2FpbiBmb3IgR3Igb3IgY3kgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBncl9jeTsKKwkvKiBHYWluIGZvciBHYiBvciBnICovCisJc3RydWN0IGlzaWZfZmxvYXRfMTYgZ2JfZzsKKwkvKiBHYWluIGZvciBCbHVlIG9yIG1nICovCisJc3RydWN0IGlzaWZfZmxvYXRfMTYgYl9tZzsKK307CisKKyNkZWZpbmUgSVNJRl9MSU5FQVJfVEFCX1NJWkUJMTkyCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogIExpbmVhcml6YXRpb24gcGFyYW1ldGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpc2lmX2xpbmVhcml6ZSB7CisJLyogRW5hYmxlIG9yIERpc2FibGUgbGluZWFyaXphdGlvbiBvZiBkYXRhICovCisJX191OCBlbjsKKwkvKiBTaGlmdCB2YWx1ZSBhcHBsaWVkICovCisJX191OCBjb3JyX3NoZnQ7CisJLyogc2NhbGUgZmFjdG9yIGFwcGxpZWQgVTExUTEwICovCisJc3RydWN0IGlzaWZfZmxvYXRfMTYgc2NhbGVfZmFjdDsKKwkvKiBTaXplIG9mIHRoZSBsaW5lYXIgdGFibGUgKi8KKwlfX3UxNiB0YWJsZVtJU0lGX0xJTkVBUl9UQUJfU0laRV07Cit9OworCisvKiBDb2xvciBwYXR0ZXJucyAqLworI2RlZmluZSBJU0lGX1JFRAkwCisjZGVmaW5lCUlTSUZfR1JFRU5fUkVECTEKKyNkZWZpbmUgSVNJRl9HUkVFTl9CTFVFCTIKKyNkZWZpbmUgSVNJRl9CTFVFCTMKK3N0cnVjdCBpc2lmX2NvbF9wYXQgeworCV9fdTggb2xvcDsKKwlfX3U4IG9sZXA7CisJX191OCBlbG9wOworCV9fdTggZWxlcDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgRGF0YSBmb3JtYXR0ZXIgcGFyYW1ldGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpc2lmX2ZtdHBsZW4geworCS8qCisJICogbnVtYmVyIG9mIHByb2dyYW0gZW50cmllcyBmb3IgU0VUMCwgcmFuZ2UgMSAtIDE2CisJICogd2hlbiBmbXRtb2RlIGlzIElTSUZfU1BMSVQsIDEgLSA4IHdoZW4gZm10bW9kZSBpcworCSAqIElTSUZfQ09NQklORQorCSAqLworCV9fdTE2IHBsZW4wOworCS8qCisJICogbnVtYmVyIG9mIHByb2dyYW0gZW50cmllcyBmb3IgU0VUMSwgcmFuZ2UgMSAtIDE2CisJICogd2hlbiBmbXRtb2RlIGlzIElTSUZfU1BMSVQsIDEgLSA4IHdoZW4gZm10bW9kZSBpcworCSAqIElTSUZfQ09NQklORQorCSAqLworCV9fdTE2IHBsZW4xOworCS8qKgorCSAqIG51bWJlciBvZiBwcm9ncmFtIGVudHJpZXMgZm9yIFNFVDIsIHJhbmdlIDEgLSAxNgorCSAqIHdoZW4gZm10bW9kZSBpcyBJU0lGX1NQTElULCAxIC0gOCB3aGVuIGZtdG1vZGUgaXMKKwkgKiBJU0lGX0NPTUJJTkUKKwkgKi8KKwlfX3UxNiBwbGVuMjsKKwkvKioKKwkgKiBudW1iZXIgb2YgcHJvZ3JhbSBlbnRyaWVzIGZvciBTRVQzLCByYW5nZSAxIC0gMTYKKwkgKiB3aGVuIGZtdG1vZGUgaXMgSVNJRl9TUExJVCwgMSAtIDggd2hlbiBmbXRtb2RlIGlzCisJICogSVNJRl9DT01CSU5FCisJICovCisJX191MTYgcGxlbjM7Cit9OworCitzdHJ1Y3QgaXNpZl9mbXRfY2ZnIHsKKyNkZWZpbmUgSVNJRl9TUExJVAkJMAorI2RlZmluZSBJU0lGX0NPTUJJTkUJCTEKKwkvKiBTcGxpdCBvciBjb21iaW5lIG9yIGxpbmUgYWx0ZXJuYXRlICovCisJX191OCBmbXRtb2RlOworCS8qIGVuYWJsZSBvciBkaXNhYmxlIGxpbmUgYWx0ZXJuYXRpbmcgbW9kZSAqLworCV9fdTggbG5fYWx0ZXJfZW47CisjZGVmaW5lIElTSUZfMUxJTkUJCTAKKyNkZWZpbmUJSVNJRl8yTElORVMJCTEKKyNkZWZpbmUJSVNJRl8zTElORVMJCTIKKyNkZWZpbmUJSVNJRl80TElORVMJCTMKKwkvKiBTcGxpdC9jb21iaW5lIGxpbmUgbnVtYmVyICovCisJX191OCBsbnVtOworCS8qIEFkZHJlc3MgaW5jcmVtZW50IFJhbmdlIDEgLSAxNiAqLworCV9fdTggYWRkcmluYzsKK307CisKK3N0cnVjdCBpc2lmX2ZtdF9hZGRyX3B0ciB7CisJLyogSW5pdGlhbCBhZGRyZXNzICovCisJX191MzIgaW5pdF9hZGRyOworCS8qIG91dHB1dCBsaW5lIG51bWJlciAqLworI2RlZmluZSBJU0lGXzFTVExJTkUJCTAKKyNkZWZpbmUJSVNJRl8yTkRMSU5FCQkxCisjZGVmaW5lCUlTSUZfM1JETElORQkJMgorI2RlZmluZQlJU0lGXzRUSExJTkUJCTMKKwlfX3U4IG91dF9saW5lOworfTsKKworc3RydWN0IGlzaWZfZm10cGdtX2FwIHsKKwkvKiBwcm9ncmFtIGFkZHJlc3MgcG9pbnRlciAqLworCV9fdTggcGdtX2FwdHI7CisJLyogcHJvZ3JhbSBhZGRyZXNzIGluY3JlbWVudCBvciBkZWNyZW1lbnQgKi8KKwlfX3U4IHBnbXVwZHQ7Cit9OworCitzdHJ1Y3QgaXNpZl9kYXRhX2Zvcm1hdHRlciB7CisJLyogRW5hYmxlL0Rpc2FibGUgZGF0YSBmb3JtYXR0ZXIgKi8KKwlfX3U4IGVuOworCS8qIGRhdGEgZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgaXNpZl9mbXRfY2ZnIGNmZzsKKwkvKiBGb3JtYXR0ZXIgcHJvZ3JhbSBlbnRyaWVzIGxlbmd0aCAqLworCXN0cnVjdCBpc2lmX2ZtdHBsZW4gcGxlbjsKKwkvKiBmaXJzdCBwaXhlbCBpbiBhIGxpbmUgZmVkIHRvIGZvcm1hdHRlciAqLworCV9fdTE2IGZtdHJsZW47CisJLyogSEQgaW50ZXJ2YWwgZm9yIG91dHB1dCBsaW5lLiBPbmx5IHZhbGlkIHdoZW4gc3BsaXQgbGluZSAqLworCV9fdTE2IGZtdGhjbnQ7CisJLyogZm9ybWF0dGVyIGFkZHJlc3MgcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgaXNpZl9mbXRfYWRkcl9wdHIgZm10YWRkcl9wdHJbMTZdOworCS8qIHByb2dyYW0gZW5hYmxlL2Rpc2FibGUgKi8KKwlfX3U4IHBnbV9lblszMl07CisJLyogcHJvZ3JhbSBhZGRyZXNzIHBvaW50ZXJzICovCisJc3RydWN0IGlzaWZfZm10cGdtX2FwIGZtdHBnbV9hcFszMl07Cit9OworCitzdHJ1Y3QgaXNpZl9kZl9jc2MgeworCS8qIENvbG9yIFNwYWNlIENvbnZlcnNpb24gY29uZmd1cmF0aW9uLCAwIC0gY3NjLCAxIC0gZGYgKi8KKwlfX3U4IGRmX29yX2NzYzsKKwkvKiBjc2MgY29uZmlndXJhdGlvbiB2YWxpZCBpZiBkZl9vcl9jc2MgaXMgMCAqLworCXN0cnVjdCBpc2lmX2NvbG9yX3NwYWNlX2NvbnYgY3NjOworCS8qIGRhdGEgZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gdmFsaWQgaWYgZGZfb3JfY3NjIGlzIDEgKi8KKwlzdHJ1Y3QgaXNpZl9kYXRhX2Zvcm1hdHRlciBkZjsKKwkvKiBzdGFydCBwaXhlbCBpbiBhIGxpbmUgYXQgdGhlIGlucHV0ICovCisJX191MzIgc3RhcnRfcGl4OworCS8qIG51bWJlciBvZiBwaXhlbHMgaW4gaW5wdXQgbGluZSAqLworCV9fdTMyIG51bV9waXhlbHM7CisJLyogc3RhcnQgbGluZSBhdCB0aGUgaW5wdXQgKi8KKwlfX3UzMiBzdGFydF9saW5lOworCS8qIG51bWJlciBvZiBsaW5lcyBhdCB0aGUgaW5wdXQgKi8KKwlfX3UzMiBudW1fbGluZXM7Cit9OworCitzdHJ1Y3QgaXNpZl9nYWluX29mZnNldHNfYWRqIHsKKwkvKiBHYWluIGFkanVzdG1lbnQgcGVyIGNvbG9yICovCisJc3RydWN0IGlzaWZfZ2FpbiBnYWluOworCS8qIE9mZnNldCBhZGp1c3RtZW50ICovCisJX191MTYgb2Zmc2V0OworCS8qIEVuYWJsZSBvciBEaXNhYmxlIEdhaW4gYWRqdXN0bWVudCBmb3IgU0RSQU0gZGF0YSAqLworCV9fdTggZ2Fpbl9zZHJhbV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIElQSVBFIGRhdGEgKi8KKwlfX3U4IGdhaW5faXBpcGVfZW47CisJLyogRW5hYmxlIG9yIERpc2FibGUgR2FpbiBhZGp1c3RtZW50IGZvciBIM0EgZGF0YSAqLworCV9fdTggZ2Fpbl9oM2FfZW47CisJLyogRW5hYmxlIG9yIERpc2FibGUgR2FpbiBhZGp1c3RtZW50IGZvciBTRFJBTSBkYXRhICovCisJX191OCBvZmZzZXRfc2RyYW1fZW47CisJLyogRW5hYmxlIG9yIERpc2FibGUgR2FpbiBhZGp1c3RtZW50IGZvciBJUElQRSBkYXRhICovCisJX191OCBvZmZzZXRfaXBpcGVfZW47CisJLyogRW5hYmxlIG9yIERpc2FibGUgR2FpbiBhZGp1c3RtZW50IGZvciBIM0EgZGF0YSAqLworCV9fdTggb2Zmc2V0X2gzYV9lbjsKK307CisKK3N0cnVjdCBpc2lmX2N1bCB7CisJLyogSG9yaXpvbnRhbCBDdWxsIHBhdHRlcm4gZm9yIG9kZCBsaW5lcyAqLworCV9fdTggaGNwYXRfb2RkOworCS8qIEhvcml6b250YWwgQ3VsbCBwYXR0ZXJuIGZvciBldmVuIGxpbmVzICovCisJX191OCBoY3BhdF9ldmVuOworCS8qIFZlcnRpY2FsIEN1bGwgcGF0dGVybiAqLworCV9fdTggdmNwYXQ7CisJLyogRW5hYmxlIG9yIGRpc2FibGUgbHBmLiBBcHBseSB3aGVuIGN1bGwgaXMgZW5hYmxlZCAqLworCV9fdTggZW5fbHBmOworfTsKKworc3RydWN0IGlzaWZfY29tcHJlc3MgeworI2RlZmluZSBJU0lGX0FMQVcJCTAKKyNkZWZpbmUgSVNJRl9EUENNCQkxCisjZGVmaW5lIElTSUZfTk9fQ09NUFJFU1NJT04JMgorCS8qIENvbXByZXNzaW9uIEFsZ29yaXRobSB1c2VkICovCisJX191OCBhbGc7CisJLyogQ2hvb3NlIFByZWRpY3RvcjEgZm9yIERQQ00gY29tcHJlc3Npb24gKi8KKyNkZWZpbmUgSVNJRl9EUENNX1BSRUQxCQkwCisJLyogQ2hvb3NlIFByZWRpY3RvcjIgZm9yIERQQ00gY29tcHJlc3Npb24gKi8KKyNkZWZpbmUgSVNJRl9EUENNX1BSRUQyCQkxCisJLyogUHJlZGljdG9yIGZvciBEUENNIGNvbXByZXNzaW9uICovCisJX191OCBwcmVkOworfTsKKworLyogYWxsIHRoZSBzdHVmZiBpbiB0aGlzIHN0cnVjdCB3aWxsIGJlIHByb3ZpZGVkIGJ5IHVzZXJsYW5kICovCitzdHJ1Y3QgaXNpZl9jb25maWdfcGFyYW1zX3JhdyB7CisJLyogTGluZWFyaXphdGlvbiBwYXJhbWV0ZXJzIGZvciBpbWFnZSBzZW5zb3IgZGF0YSBpbnB1dCAqLworCXN0cnVjdCBpc2lmX2xpbmVhcml6ZSBsaW5lYXJpemU7CisJLyogRGF0YSBmb3JtYXR0ZXIgb3IgQ1NDICovCisJc3RydWN0IGlzaWZfZGZfY3NjIGRmX2NzYzsKKwkvKiBEZWZlY3QgUGl4ZWwgQ29ycmVjdGlvbiAoREZDKSBjb25mZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgaXNpZl9kZmMgZGZjOworCS8qIEJsYWNrL0RpZ2l0YWwgQ2xhbXAgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBpc2lmX2JsYWNrX2NsYW1wIGJjbGFtcDsKKwkvKiBHYWluLCBvZmZzZXQgYWRqdXN0bWVudHMgKi8KKwlzdHJ1Y3QgaXNpZl9nYWluX29mZnNldHNfYWRqIGdhaW5fb2Zmc2V0OworCS8qIEN1bGxpbmcgKi8KKwlzdHJ1Y3QgaXNpZl9jdWwgY3VsbGluZzsKKwkvKiBBLUxhdyBhbmQgRFBDTSBjb21wcmVzc2lvbiBvcHRpb25zICovCisJc3RydWN0IGlzaWZfY29tcHJlc3MgY29tcHJlc3M7CisJLyogaG9yaXpvbnRhbCBvZmZzZXQgZm9yIEdhaW4vTFNDL0RGQyAqLworCV9fdTE2IGhvcnpfb2Zmc2V0OworCS8qIHZlcnRpY2FsIG9mZnNldCBmb3IgR2Fpbi9MU0MvREZDICovCisJX191MTYgdmVydF9vZmZzZXQ7CisJLyogY29sb3IgcGF0dGVybiBmb3IgZmllbGQgMCAqLworCXN0cnVjdCBpc2lmX2NvbF9wYXQgY29sX3BhdF9maWVsZDA7CisJLyogY29sb3IgcGF0dGVybiBmb3IgZmllbGQgMSAqLworCXN0cnVjdCBpc2lmX2NvbF9wYXQgY29sX3BhdF9maWVsZDE7CisjZGVmaW5lIElTSUZfTk9fU0hJRlQJCTAKKyNkZWZpbmUJSVNJRl8xQklUX1NISUZUCQkxCisjZGVmaW5lCUlTSUZfMkJJVF9TSElGVAkJMgorI2RlZmluZQlJU0lGXzNCSVRfU0hJRlQJCTMKKyNkZWZpbmUJSVNJRl80QklUX1NISUZUCQk0CisjZGVmaW5lIElTSUZfNUJJVF9TSElGVAkJNQorI2RlZmluZSBJU0lGXzZCSVRfU0hJRlQJCTYKKwkvKiBEYXRhIHNoaWZ0IGFwcGxpZWQgYmVmb3JlIHN0b3JpbmcgdG8gU0RSQU0gKi8KKwlfX3U4IGRhdGFfc2hpZnQ7CisJLyogZW5hYmxlIGlucHV0IHRlc3QgcGF0dGVybiBnZW5lcmF0aW9uICovCisJX191OCB0ZXN0X3BhdF9nZW47Cit9OworCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IGlzaWZfeWNiY3JfY29uZmlnIHsKKwkvKiBpc2lmIHBpeGVsIGZvcm1hdCAqLworCWVudW0gY2NkY19waXhmbXQgcGl4X2ZtdDsKKwkvKiBpc2lmIGZyYW1lIGZvcm1hdCAqLworCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdDsKKwkvKiBJU0lGIGNyb3Agd2luZG93ICovCisJc3RydWN0IHY0bDJfcmVjdCB3aW47CisJLyogZmllbGQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBmaWRfcG9sOworCS8qIGludGVyZmFjZSBWRCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIHZkX3BvbDsKKwkvKiBpbnRlcmZhY2UgSEQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBoZF9wb2w7CisJLyogaXNpZiBwaXggb3JkZXIuIE9ubHkgdXNlZCBmb3IgeWNiY3IgY2FwdHVyZSAqLworCWVudW0gY2NkY19waXhvcmRlciBwaXhfb3JkZXI7CisJLyogaXNpZiBidWZmZXIgdHlwZS4gT25seSB1c2VkIGZvciB5Y2JjciBjYXB0dXJlICovCisJZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGU7Cit9OworCisvKiBNU0Igb2YgaW1hZ2UgZGF0YSBjb25uZWN0ZWQgdG8gc2Vuc29yIHBvcnQgKi8KK2VudW0gaXNpZl9kYXRhX21zYiB7CisJSVNJRl9CSVRfTVNCXzE1LAorCUlTSUZfQklUX01TQl8xNCwKKwlJU0lGX0JJVF9NU0JfMTMsCisJSVNJRl9CSVRfTVNCXzEyLAorCUlTSUZfQklUX01TQl8xMSwKKwlJU0lGX0JJVF9NU0JfMTAsCisJSVNJRl9CSVRfTVNCXzksCisJSVNJRl9CSVRfTVNCXzgsCisJSVNJRl9CSVRfTVNCXzcKK307CisKK2VudW0gaXNpZl9jZmFfcGF0dGVybiB7CisJSVNJRl9DRkFfUEFUX01PU0FJQywKKwlJU0lGX0NGQV9QQVRfU1RSSVBFCit9OworCitzdHJ1Y3QgaXNpZl9wYXJhbXNfcmF3IHsKKwkvKiBpc2lmIHBpeGVsIGZvcm1hdCAqLworCWVudW0gY2NkY19waXhmbXQgcGl4X2ZtdDsKKwkvKiBpc2lmIGZyYW1lIGZvcm1hdCAqLworCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdDsKKwkvKiB2aWRlbyB3aW5kb3cgKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IHdpbjsKKwkvKiBmaWVsZCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGZpZF9wb2w7CisJLyogaW50ZXJmYWNlIFZEIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgdmRfcG9sOworCS8qIGludGVyZmFjZSBIRCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGhkX3BvbDsKKwkvKiBidWZmZXIgdHlwZS4gQXBwbGljYWJsZSBmb3IgaW50ZXJsYWNlZCBtb2RlICovCisJZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGU7CisJLyogR2FpbiB2YWx1ZXMgKi8KKwlzdHJ1Y3QgaXNpZl9nYWluIGdhaW47CisJLyogY2ZhIHBhdHRlcm4gKi8KKwllbnVtIGlzaWZfY2ZhX3BhdHRlcm4gY2ZhX3BhdDsKKwkvKiBEYXRhIE1TQiBwb3NpdGlvbiAqLworCWVudW0gaXNpZl9kYXRhX21zYiBkYXRhX21zYjsKKwkvKiBFbmFibGUgaG9yaXpvbnRhbCBmbGlwICovCisJdW5zaWduZWQgY2hhciBob3J6X2ZsaXBfZW47CisJLyogRW5hYmxlIGltYWdlIGludmVydCB2ZXJ0aWNhbGx5ICovCisJdW5zaWduZWQgY2hhciBpbWFnZV9pbnZlcnRfZW47CisKKwkvKiBhbGwgdGhlIHVzZXJsYW5kIGRlZmluZWQgc3R1ZmYqLworCXN0cnVjdCBpc2lmX2NvbmZpZ19wYXJhbXNfcmF3IGNvbmZpZ19wYXJhbXM7Cit9OworCitlbnVtIGlzaWZfZGF0YV9wYWNrIHsKKwlJU0lGX1BBQ0tfMTZCSVQsCisJSVNJRl9QQUNLXzEyQklULAorCUlTSUZfUEFDS184QklUCit9OworCisjZGVmaW5lIElTSUZfV0lOX05UU0MJCQkJezAsIDAsIDcyMCwgNDgwfQorI2RlZmluZSBJU0lGX1dJTl9WR0EJCQkJezAsIDAsIDY0MCwgNDgwfQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmgKaW5kZXggZmNkZmY3NC4uYzU5Y2MwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaAorKysgYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oCkBAIC0yOSw3ICsyOSwxOSBAQAogLyogc2VsZWN0b3IgZm9yIGNjZGMgaW5wdXQgc2VsZWN0aW9uIG9uIERNMzU1ICovCiBlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHsKIAlWUFNTX0NDRENJTiwKLQlWUFNTX0hTU0lJTgorCVZQU1NfSFNTSUlOLAorCVZQU1NfUEdMUEJLLAkvKiBmb3IgRE0zNjUgb25seSAqLworCVZQU1NfQ0NEQ1BHCS8qIGZvciBETTM2NSBvbmx5ICovCit9OworCitzdHJ1Y3QgdnBzc19zeW5jX3BvbCB7CisJdW5zaWduZWQgaW50IGNjZHBnX2hkcG9sOjE7CisJdW5zaWduZWQgaW50IGNjZHBnX3ZkcG9sOjE7Cit9OworCitzdHJ1Y3QgdnBzc19wZ19mcmFtZV9zaXplIHsKKwlzaG9ydCBobHBmcjsKKwlzaG9ydCBwcGxlbjsKIH07CiAKIC8qIFVzZWQgZm9yIGVuYWJsZS9kaWFibGUgVlBTUyBDbG9jayAqLwpAQCAtNDcsMTIgKzU5LDM4IEBACiAJICovCiAJVlBTU19WRU5DX0NMT0NLX1NFTCwKIAlWUFNTX1ZQQkVfQ0xPQ0ssCisJLyogRE0zNjUgb25seSBjbG9ja3MgKi8KKwlWUFNTX0lQSVBFSUZfQ0xPQ0ssCisJVlBTU19SU1pfQ0xPQ0ssCisJVlBTU19CTF9DTE9DSywKKwkvKgorCSAqIFdoZW4gdXNpbmcgVlBTU19QQ0xLX0lOVEVSTkFMIGluIHZwc3NfZW5hYmxlX2Nsb2NrKCkgYXBpCisJICogZm9sbG93aW5nIGFwcGxpZXM6LQorCSAqIGVuID0gMCBkaXNhYmxlIGludGVybmFsIFBDTEsKKwkgKiBlbiA9IDEgZW5hYmxlcyBpbnRlcm5hbCBQQ0xLCisJICovCisJVlBTU19QQ0xLX0lOVEVSTkFMLAorCS8qCisJICogV2hlbiB1c2luZyBWUFNTX1BTWU5DX0NMT0NLX1NFTCBpbiB2cHNzX2VuYWJsZV9jbG9jaygpIGFwaQorCSAqIGZvbGxvd2luZyBhcHBsaWVzOi0KKwkgKiBlbiA9IDAgZW5hYmxlcyBNTVIgY2xvY2sKKwkgKiBlbiA9IDEgZW5hYmxlcyBWUFNTIGNsb2NrCisJICovCisJVlBTU19QU1lOQ19DTE9DS19TRUwsCisJVlBTU19MRENfQ0xPQ0tfU0VMLAorCVZQU1NfT1NEX0NMT0NLX1NFTCwKKwlWUFNTX0ZESUZfQ0xPQ0ssCisJVlBTU19MRENfQ0xPQ0sKIH07CiAKIC8qIHNlbGVjdCBpbnB1dCB0byBjY2RjIG9uIGRtMzU1ICovCiBpbnQgdnBzc19zZWxlY3RfY2NkY19zb3VyY2UoZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzcmNfc2VsKTsKIC8qIGVuYWJsZS9kaXNhYmxlIGEgdnBzcyBjbG9jaywgMCAtIHN1Y2Nlc3MsIC0xIC0gZmFpbHVyZSAqLwogaW50IHZwc3NfZW5hYmxlX2Nsb2NrKGVudW0gdnBzc19jbG9ja19zZWwgY2xvY2tfc2VsLCBpbnQgZW4pOworLyogc2V0IHN5bmMgcG9sYXJpdHksIG9ubHkgZm9yIERNMzY1Ki8KK3ZvaWQgZG0zNjVfdnBzc19zZXRfc3luY19wb2woc3RydWN0IHZwc3Nfc3luY19wb2wpOworLyogc2V0IHRoZSBQR19GUkFNRV9TSVpFIHJlZ2lzdGVyLCBvbmx5IGZvciBETTM2NSAqLwordm9pZCBkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKHN0cnVjdCB2cHNzX3BnX2ZyYW1lX3NpemUpOwogCiAvKiB3YmwgcmVzZXQgZm9yIGRtNjQ0eCAqLwogZW51bSB2cHNzX3dibF9zZWwgewpAQCAtNjUsNSArMTAzLDYgQEAKIAlWUFNTX1BDUl9QUkVWX1dCTF8wLAogCVZQU1NfUENSX0NDRENfV0JMX08sCiB9OworLyogY2xlYXIgd2JsIG92ZXJmbG93IGZsYWcgZm9yIERNNjQ0NiAqLwogaW50IHZwc3NfY2xlYXJfd2JsX292ZXJmbG93KGVudW0gdnBzc193Ymxfc2VsIHdibF9zZWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAppbmRleCAyYzZhZjI0Li5jNjYyOTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKQEAgLTM1LDcgKzM1LDcgQEAKIAogc3RydWN0IGlyX2lucHV0X3N0YXRlIHsKIAkvKiBjb25maWd1cmF0aW9uICovCi0JaW50ICAgICAgICAgICAgICAgIGlyX3R5cGU7CisJdTY0ICAgICAgaXJfdHlwZTsKIAogCS8qIGtleSBpbmZvICovCiAJdTMyICAgICAgICAgICAgICAgIGlyX2tleTsgICAgICAvKiBpciBzY2FuY29kZSAqLwpAQCAtODQsNyArODQsNyBAQAogLyogUm91dGluZXMgZnJvbSBpci1mdW5jdGlvbnMuYyAqLwogCiBpbnQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgIGludCBpcl90eXBlKTsKKwkJICAgY29uc3QgdTY0IGlyX3R5cGUpOwogdm9pZCBpcl9pbnB1dF9ub2tleShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIpOwogdm9pZCBpcl9pbnB1dF9rZXlkb3duKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKIAkJICAgICAgdTMyIGlyX2tleSk7CkBAIC0xNjIsNCArMTYyLDYgQEAKIGV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfdmlkZW9tYXRlX3MzNTBfdGFibGU7CiBleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2dhZG1laV9ybTAwOHpfdGFibGU7CiBleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX25lY190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZV90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfa3dvcmxkXzMxNXVfdGFibGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oIGIvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmgKaW5kZXggMjk5ZDIwMS4uNjFjMjIzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmgKQEAgLTIxLDEzICsyMSwxMSBAQAogI2RlZmluZSBJUl9kcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikJaWYgKGlyX2NvcmVfZGVidWcgPj0gbGV2ZWwpIFwKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10ICwgX19mdW5jX18sICMjIGFyZykKIAotZW51bSBpcl90eXBlIHsKLQlJUl9UWVBFX1VOS05PV04JPSAwLAotCUlSX1RZUEVfUkM1CT0gMSwKLQlJUl9UWVBFX1BECT0gMiwJCSAvKiBQdWxzZSBkaXN0YW5jZSBlbmNvZGVkIElSICovCi0JSVJfVFlQRV9ORUMJPSAzLAotCUlSX1RZUEVfT1RIRVIJPSA5OSwKLX07CisjZGVmaW5lIElSX1RZUEVfVU5LTk9XTgkwCisjZGVmaW5lIElSX1RZUEVfUkM1CSgxICA8PCAwKQkvKiBQaGlsaXBzIFJDNSBwcm90b2NvbCAqLworI2RlZmluZSBJUl9UWVBFX1BECSgxICA8PCAxKQkvKiBQdWxzZSBkaXN0YW5jZSBlbmNvZGVkIElSICovCisjZGVmaW5lIElSX1RZUEVfTkVDCSgxICA8PCAyKQorI2RlZmluZSBJUl9UWVBFX09USEVSCSgoKHU2NCkxKSA8PCA2M2wpCiAKIHN0cnVjdCBpcl9zY2FuY29kZSB7CiAJdTE2CXNjYW5jb2RlOwpAQCAtMzcsMjYgKzM1LDQwIEBACiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgewogCXN0cnVjdCBpcl9zY2FuY29kZQkqc2NhbjsKIAlpbnQJCQlzaXplOwotCWVudW0JCQlpcl90eXBlIGlyX3R5cGU7CisJdTY0CQlpcl90eXBlOwogCXNwaW5sb2NrX3QJCWxvY2s7CiB9OwogCi1zdHJ1Y3QgaXJfaW5wdXRfZGV2IHsKLQlzdHJ1Y3QgaW5wdXRfZGV2CQkqZGV2OwotCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZQlyY190YWI7CitzdHJ1Y3QgaXJfZGV2X3Byb3BzIHsKKwl1bnNpZ25lZCBsb25nIGFsbG93ZWRfcHJvdG9zOworCXZvaWQgCQkqcHJpdjsKKwlpbnQgKCpjaGFuZ2VfcHJvdG9jb2wpKHZvaWQgKnByaXYsIHU2NCBpcl90eXBlKTsKIH07CiAKKworc3RydWN0IGlyX2lucHV0X2RldiB7CisJc3RydWN0IGlucHV0X2RldgkJKmRldjsJCS8qIElucHV0IGRldmljZSovCisJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlCXJjX3RhYjsJCS8qIHNjYW4va2V5IHRhYmxlICovCisJdW5zaWduZWQgbG9uZwkJCWRldm5vOwkJLyogZGV2aWNlIG51bWJlciAqLworCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCWF0dHI7CQkvKiBJUiBhdHRyaWJ1dGVzICovCisJc3RydWN0IGRldmljZQkJCSpjbGFzc19kZXY7CS8qIHZpcnR1YWwgY2xhc3MgZGV2ICovCisJY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcwkqcHJvcHM7CQkvKiBEZXZpY2UgcHJvcGVydGllcyAqLworfTsKKyNkZWZpbmUgdG9faXJfaW5wdXRfZGV2KF9hdHRyKSBjb250YWluZXJfb2YoX2F0dHIsIHN0cnVjdCBpcl9pbnB1dF9kZXYsIGF0dHIpCisKIC8qIFJvdXRpbmVzIGZyb20gaXIta2V5dGFibGUuYyAqLwogCiB1MzIgaXJfZ19rZXljb2RlX2Zyb21fdGFibGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAogCQkJICAgIHUzMiBzY2FuY29kZSk7CiAKLWludCBpcl9zZXRfa2V5Y29kZV90YWJsZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCi0JCQkgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpyY190YWIpOwotCi1pbnQgaXJfcm91bmR1cF90YWJsZXNpemUoaW50IG5fZWxlbXMpOwogaW50IGlyX2lucHV0X3JlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJICAgICAgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2Rlcyk7CisJCSAgICAgIGNvbnN0IHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzKTsKIHZvaWQgaXJfaW5wdXRfdW5yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOwogCisvKiBSb3V0aW5lcyBmcm9tIGlyLXN5c2ZzLmMgKi8KKworaW50IGlyX3JlZ2lzdGVyX2NsYXNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7Cit2b2lkIGlyX3VucmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaCBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCmluZGV4IGFhZjY1ZTguLjkxNDI5MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCkBAIC0zNiw3ICszNiw3IEBACiBzdHJ1Y3QgSVJfaTJjX2luaXRfZGF0YSB7CiAJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlczsKIAljb25zdCBjaGFyICAgICAgICAgICAgICpuYW1lOwotCWludCAgICAgICAgICAgICAgICAgICAgdHlwZTsgLyogSVJfVFlQRV9SQzUsIElSX1RZUEVfUEQsIGV0YyAqLworCXU2NCAgICAgICAgICB0eXBlOyAvKiBJUl9UWVBFX1JDNSwgSVJfVFlQRV9QRCwgZXRjICovCiAJLyoKIAkgKiBTcGVjaWZ5IGVpdGhlciBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYSB2YWx1ZSBpbmRpY2F0aW5nIG9uZSBvZgogCSAqIGlyX2tiZF9pMmMncyBpbnRlcm5hbCBnZXRfa2V5IGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vdjc3MnguaCBiL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKaW5kZXggMTRjNzdlZi4uNTQ4YmYxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vdjc3MnguaAorKysgYi9pbmNsdWRlL21lZGlhL292NzcyeC5oCkBAIC0xNSw4ICsxNSw5IEBACiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiAvKiBmb3IgZmxhZ3MgKi8KLSNkZWZpbmUgT1Y3NzJYX0ZMQUdfVkZMSVAgICAgIDB4MDAwMDAwMDEgLyogVmVydGljYWwgZmxpcCBpbWFnZSAqLwotI2RlZmluZSBPVjc3MlhfRkxBR19IRkxJUCAgICAgMHgwMDAwMDAwMiAvKiBIb3Jpem9udGFsIGZsaXAgaW1hZ2UgKi8KKyNkZWZpbmUgT1Y3NzJYX0ZMQUdfVkZMSVAJKDEgPDwgMCkgLyogVmVydGljYWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR19IRkxJUAkoMSA8PCAxKSAvKiBIb3Jpem9udGFsIGZsaXAgaW1hZ2UgKi8KKyNkZWZpbmUgT1Y3NzJYX0ZMQUdfOEJJVAkoMSA8PCAyKSAvKiBkZWZhdWx0IDEwIGJpdCAqLwogCiAvKgogICogZm9yIEVkZ2UgY3RybApAQCAtNTMsOSArNTQsOCBAQAogICogb3Y3NzJ4IGNhbWVyYSBpbmZvCiAgKi8KIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gewotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgYnVzd2lkdGg7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICBmbGFnczsKLQlzdHJ1Y3Qgb3Y3NzJ4X2VkZ2VfY3RybCBlZGdlY3RybDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3Qgb3Y3NzJ4X2VkZ2VfY3RybAllZGdlY3RybDsKIH07CiAKICNlbmRpZiAvKiBfX09WNzcyWF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKaW5kZXggNGFlZmY5Ni4uYjlkYTFmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKQEAgLTE4OCw2ICsxODgsNyBAQAogdm9pZCBzYWE3MTQ2X2RtYV9mcmVlKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKIAkJCQkJCXN0cnVjdCBzYWE3MTQ2X2J1ZiAqYnVmKTsKIAoraW50IHNhYTcxNDZfdnZfZGV2aW5pdChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldik7CiBpbnQgc2FhNzE0Nl92dl9pbml0KHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgKmV4dF92dik7CiBpbnQgc2FhNzE0Nl92dl9yZWxlYXNlKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmggYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaAppbmRleCBkY2M1Yjg2Li45ZDY5ZjAxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTgxLDYgKzgxLDggQEAKIAlpbnQgKCpzZXRfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIpOwogCWludCAoKmdldF9jdHJsKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKIAlpbnQgKCpzZXRfY3RybCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7CisJaW50ICgqZ2V0X3Bhcm0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopOworCWludCAoKnNldF9wYXJtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqKTsKIAl1bnNpZ25lZCBpbnQgKCpwb2xsKShzdHJ1Y3QgZmlsZSAqLCBwb2xsX3RhYmxlICopOwogCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY29udHJvbHM7CiAJaW50IG51bV9jb250cm9sczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdGltYl9yYWRpby5oIGIvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkMzJhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvdGltYl9yYWRpby5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiB0aW1iX3JhZGlvLmggUGxhdGZvcm0gc3RydWN0IGZvciB0aGUgVGltYmVyZGFsZSByYWRpbyBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1RJTUJfUkFESU9fCisjZGVmaW5lIF9USU1CX1JBRElPXyAxCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworc3RydWN0IHRpbWJfcmFkaW9fcGxhdGZvcm1fZGF0YSB7CisJaW50IGkyY19hZGFwdGVyOyAvKiBJMkMgYWRhcHRlciB3aGVyZSB0aGUgdHVuZXIgYW5kIGRzcCBhcmUgYXR0YWNoZWQgKi8KKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICptb2R1bGVfbmFtZTsKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvOworCX0gdHVuZXI7CisJc3RydWN0IHsKKwkJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7CisJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbzsKKwl9IGRzcDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCmluZGV4IDRkNWI1M2YuLjU1MDVjNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKQEAgLTEyOSw2ICsxMjksNyBAQAogI2RlZmluZSBUVU5FUl9QQVJUU05JQ19QVElfNU5GMDUJODEKICNkZWZpbmUgVFVORVJfUEhJTElQU19DVTEyMTZMICAgICAgICAgICA4MgogI2RlZmluZSBUVU5FUl9OWFBfVERBMTgyNzEJCTgzCisjZGVmaW5lIFRVTkVSX1NPTllfQlRGX1BYTjAxWgkJODQKIAogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwogI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHZwNzAwMi5oIGIvaW5jbHVkZS9tZWRpYS90dnA3MDAyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0MzUzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvdHZwNzAwMi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIFRleGFzIEluc3RydW1lbnRzIFRyaXBsZSA4LS8xMC1CSVQgMTY1LS8xMTAtTVNQUyBWaWRlbyBhbmQgR3JhcGhpY3MKKyAqIERpZ2l0aXplciB3aXRoIEhvcml6b250YWwgUExMIHJlZ2lzdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqIEF1dGhvcjogU2FudGlhZ28gTnVuZXotQ29ycmFsZXMgPHNhbnRpYWdvLm51bmV6QHJpZGdlcnVuLmNvbT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgcGFydGlhbGx5IGJhc2VkIHVwb24gdGhlIFRWUDUxNTAgZHJpdmVyCisgKiB3cml0dGVuIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiAobWNoZWhhYkBpbmZyYWRlYWQub3JnKSwKKyAqIHRoZSBUVlA1MTR4IGRyaXZlciB3cml0dGVuIGJ5IFZhaWJoYXYgSGlyZW1hdGggPGh2YWliaGF2QHRpLmNvbT4KKyAqIGFuZCB0aGUgVFZQNzAwMiBkcml2ZXIgaW4gdGhlIFRJIExTUCAyLjEwLjAwLjE0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpZm5kZWYgX1RWUDcwMDJfSF8KKyNkZWZpbmUgX1RWUDcwMDJfSF8KKworLyogUGxhdGZvcm0tZGVwZW5kZW50IGRhdGEKKyAqCisgKiBjbGtfcG9sYXJpdHk6CisgKiAJCQkwIC0+IGRhdGEgY2xvY2tlZCBvdXQgb24gcmlzaW5nIGVkZ2Ugb2YgREFUQUNMSyBzaWduYWwKKyAqIAkJCTEgLT4gZGF0YSBjbG9ja2VkIG91dCBvbiBmYWxsaW5nIGVkZ2Ugb2YgREFUQUNMSyBzaWduYWwKKyAqIGhzX3BvbGFyaXR5OgorICogCQkJMCAtPiBhY3RpdmUgbG93IEhTWU5DIG91dHB1dAorICogCQkJMSAtPiBhY3RpdmUgaGlnaCBIU1lOQyBvdXRwdXQKKyAqIHNvZ19wb2xhcml0eToKKyAqIAkJCTAgLT4gbm9ybWFsIG9wZXJhdGlvbgorICogCQkJMSAtPiBvcGVyYXRpb24gd2l0aCBwb2xhcml0eSBpbnZlcnRlZAorICogdnNfcG9sYXJpdHk6CisgKiAJCQkwIC0+IGFjdGl2ZSBsb3cgVlNZTkMgb3V0cHV0CisgKiAJCQkxIC0+IGFjdGl2ZSBoaWdoIFZTWU5DIG91dHB1dAorICogZmlkX3BvbGFyaXR5OgorICoJCQkwIC0+IHRoZSBmaWVsZCBJRCBvdXRwdXQgaXMgc2V0IHRvIGxvZ2ljIDEgZm9yIGFuIG9kZAorICoJCQkgICAgIGZpZWxkIChmaWVsZCAxKSBhbmQgc2V0IHRvIGxvZ2ljIDAgZm9yIGFuIGV2ZW4KKyAqCQkJICAgICBmaWVsZCAoZmllbGQgMCkuCisgKgkJCTEgLT4gb3BlcmF0aW9uIHdpdGggcG9sYXJpdHkgaW52ZXJ0ZWQuCisgKi8KK3N0cnVjdCB0dnA3MDAyX2NvbmZpZyB7CisJdTggY2xrX3BvbGFyaXR5OworCXU4IGhzX3BvbGFyaXR5OworCXU4IHZzX3BvbGFyaXR5OworCXU4IGZpZF9wb2xhcml0eTsKKwl1OCBzb2dfcG9sYXJpdHk7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R3OTkxMC5oIGIvaW5jbHVkZS9tZWRpYS90dzk5MTAuaAppbmRleCA1ZTI4OTVhLi45MGJjZjFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R3OTkxMC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmgKQEAgLTMwLDggKzMwLDggQEAKIH07CiAKIHN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbyB7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICBidXN3aWR0aDsKLQllbnVtIHR3OTkxMF9tcG91dF9waW4gIG1wb3V0OworCXVuc2lnbmVkIGxvbmcJCWJ1c3dpZHRoOworCWVudW0gdHc5OTEwX21wb3V0X3BpbgltcG91dDsKIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKaW5kZXggNmNjMTA3ZC4uNTZhYmYyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCkBAIC0zOSw2ICszOSw3IEBACiAKIAkvKiBtb2R1bGUgc2FhNzExNTogcmVzZXJ2ZWQgcmFuZ2UgMTAxLTE0OSAqLwogCVY0TDJfSURFTlRfU0FBNzExMSA9IDEwMSwKKwlWNEwyX0lERU5UX1NBQTcxMTFBID0gMTAyLAogCVY0TDJfSURFTlRfU0FBNzExMyA9IDEwMywKIAlWNEwyX0lERU5UX1NBQTcxMTQgPSAxMDQsCiAJVjRMMl9JREVOVF9TQUE3MTE1ID0gMTA1LApAQCAtMTM0LDYgKzEzNSw5IEBACiAJLyogbW9kdWxlcyB0ZWY2ODYyOiBqdXN0IGlkZW50IDY4NjIgKi8KIAlWNEwyX0lERU5UX1RFRjY4NjIgPSA2ODYyLAogCisJLyogbW9kdWxlIHR2cDcwMDI6IGp1c3QgaWRlbnQgNzAwMiAqLworCVY0TDJfSURFTlRfVFZQNzAwMiA9IDcwMDIsCisKIAkvKiBtb2R1bGUgYWR2NzE3MDoganVzdCBpZGVudCA3MTcwICovCiAJVjRMMl9JREVOVF9BRFY3MTcwID0gNzE3MCwKIApAQCAtMTU1LDYgKzE1OSw5IEBACiAJLyogbW9kdWxlIGFkdjczNDM6IGp1c3QgaWRlbnQgNzM0MyAqLwogCVY0TDJfSURFTlRfQURWNzM0MyA9IDczNDMsCiAKKwkvKiBtb2R1bGUgc2FhNzcwNmg6IGp1c3QgaWRlbnQgNzcwNiAqLworCVY0TDJfSURFTlRfU0FBNzcwNkggPSA3NzA2LAorCiAJLyogbW9kdWxlIHdtODczOToganVzdCBpZGVudCA4NzM5ICovCiAJVjRMMl9JREVOVF9XTTg3MzkgPSA4NzM5LAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKaW5kZXggOWJhOTljZC4uMmJjZGNhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaApAQCAtMTgwLDYgKzE4MCw3IEBACiAJaW50ICgqc19jbG9ja19mcmVxKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSk7CiAJaW50ICgqc19pMnNfY2xvY2tfZnJlcSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGZyZXEpOwogCWludCAoKnNfcm91dGluZykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGlucHV0LCB1MzIgb3V0cHV0LCB1MzIgY29uZmlnKTsKKwlpbnQgKCpzX3N0cmVhbSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSk7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaCBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKaW5kZXggMGY3YzM3OC4uNDUzNzViNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAorKysgYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCkBAIC0xNzcsNyArMTc3LDkgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqCiBfX2luNl9kZXZfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShkZXYtPmlwNl9wdHIpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2soZGV2LT5pcDZfcHRyLAorCQkJCSAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgICAgIGxvY2tkZXBfcnRubF9pc19oZWxkKCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaAppbmRleCBiYTFiYTBjLi42M2Q0NDk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaApAQCAtMTEsNiArMTEsOCBAQAogc3RydWN0IG5ldG5zX2N0IHsKIAlhdG9taWNfdAkJY291bnQ7CiAJdW5zaWduZWQgaW50CQlleHBlY3RfY291bnQ7CisJdW5zaWduZWQgaW50CQlodGFibGVfc2l6ZTsKKwlzdHJ1Y3Qga21lbV9jYWNoZQkqbmZfY29ubnRyYWNrX2NhY2hlcDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAkqaGFzaDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAkqZXhwZWN0X2hhc2g7CiAJc3RydWN0IGhsaXN0X251bGxzX2hlYWQJdW5jb25maXJtZWQ7CkBAIC0yOCw1ICszMCw2IEBACiAjZW5kaWYKIAlpbnQJCQloYXNoX3ZtYWxsb2M7CiAJaW50CQkJZXhwZWN0X3ZtYWxsb2M7CisJY2hhcgkJCSpzbGFibmFtZTsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaCBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAppbmRleCAyZWIzODE0Li45YTRiOGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCkBAIC00MCw2ICs0MCw3IEBACiAJc3RydWN0IHh0X3RhYmxlCQkqaXB0YWJsZV9zZWN1cml0eTsKIAlzdHJ1Y3QgeHRfdGFibGUJCSpuYXRfdGFibGU7CiAJc3RydWN0IGhsaXN0X2hlYWQJKm5hdF9ieXNvdXJjZTsKKwl1bnNpZ25lZCBpbnQJCW5hdF9odGFibGVfc2l6ZTsKIAlpbnQJCQluYXRfdm1hbGxvY2VkOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2RzLmggYi9pbmNsdWRlL3BjbWNpYS9kcy5oCmluZGV4IGVlMTQ4NTcuLmQ1Nzg0N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2RzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvZHMuaApAQCAtNDAsNyArNDAsNyBAQAogICogRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLnR4dCBmb3IgZGV0YWlscy4KICovCiBzdHJ1Y3QgcGNtY2lhX2R5bmlkcyB7Ci0Jc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggY2JmYmE4OC4uMzI4OTZhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0xMzQsOSArMTM0LDkgQEAKIAogc3RydWN0IHBjbWNpYV9zb2NrZXQgewogCXN0cnVjdCBtb2R1bGUJCQkqb3duZXI7Ci0Jc3BpbmxvY2tfdAkJCWxvY2s7CiAJc29ja2V0X3N0YXRlX3QJCQlzb2NrZXQ7CiAJdV9pbnQJCQkJc3RhdGU7CisJdV9pbnQJCQkJc3VzcGVuZGVkX3N0YXRlOwkvKiBzdGF0ZSBiZWZvcmUgc3VzcGVuZCAqLwogCXVfc2hvcnQJCQkJZnVuY3Rpb25zOwogCXVfc2hvcnQJCQkJbG9ja19jb3VudDsKIAlwY2NhcmRfbWVtX21hcAkJCWNpc19tZW07CkBAIC0yMDAsOSArMjAwLDE0IEBACiAJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOwogCXN0cnVjdCBjb21wbGV0aW9uCQl0aHJlYWRfZG9uZTsKIAl1bnNpZ25lZCBpbnQJCQl0aHJlYWRfZXZlbnRzOwotCS8qIHByb3RlY3RzIHNvY2tldCBoL3cgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQJCQlzeXNmc19ldmVudHM7CisKKwkvKiBGb3IgdGhlIG5vbi10cml2aWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgbG9ja3MsCisJICogc2VlIERvY3VtZW50YXRpb24vcGNtY2lhL2xvY2tpbmcudHh0ICovCiAJc3RydWN0IG11dGV4CQkJc2t0X211dGV4OwotCS8qIHByb3RlY3RzIHRocmVhZF9ldmVudHMgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlvcHNfbXV0ZXg7CisKKwkvKiBwcm90ZWN0cyB0aHJlYWRfZXZlbnRzIGFuZCBzeXNmc19ldmVudHMgKi8KIAlzcGlubG9ja190CQkJdGhyZWFkX2xvY2s7CiAKIAkvKiBwY21jaWEgKDE2LWJpdCkgKi8KQEAgLTIyNSwzMCArMjMwLDE5IEBACiAJCXU4CQkJYnVzeToxOwogCQkvKiBwY21jaWEgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkICovCiAJCXU4CQkJZGVhZDoxOwotCQkvKiBhIG11bHRpZnVuY3Rpb24tZGV2aWNlIGFkZCBldmVudCBpcyBwZW5kaW5nICovCi0JCXU4CQkJZGV2aWNlX2FkZF9wZW5kaW5nOjE7Ci0JCS8qIHRoZSBwZW5kaW5nIGV2ZW50IGFkZHMgYSBtZmMgKDEpIG9yIHBmYyAoMCkgKi8KLQkJdTgJCQltZmNfcGZjOjE7CisJCS8qIHRoZSBQQ01DSUEgY2FyZCBjb25zaXN0cyBvZiB0d28gcHNldWRvIGRldmljZXMgKi8KKwkJdTgJCQloYXNfcGZjOjE7CiAKLQkJdTgJCQlyZXNlcnZlZDozOworCQl1OAkJCXJlc2VydmVkOjQ7CiAJfSBwY21jaWFfc3RhdGU7CiAKIAotCS8qIGZvciBhZGRpbmcgZnVydGhlciBwc2V1ZG8tbXVsdGlmdW5jdGlvbiBkZXZpY2VzICovCi0Jc3RydWN0IHdvcmtfc3RydWN0CQlkZXZpY2VfYWRkOwotCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCXN0cnVjdCB1c2VyX2luZm9fdAkJKnVzZXI7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJCXF1ZXVlOwogI2VuZGlmIC8qIENPTkZJR19QQ01DSUFfSU9DVEwgKi8KICNlbmRpZiAvKiBDT05GSUdfUENNQ0lBICovCiAKLQkvKiBjYXJkYnVzICgzMi1iaXQpICovCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQlzdHJ1Y3QgcmVzb3VyY2UJCQkqY2JfY2lzX3JlczsKLQl2b2lkIF9faW9tZW0JCQkqY2JfY2lzX3ZpcnQ7Ci0jZW5kaWYgLyogQ09ORklHX0NBUkRCVVMgKi8KLQogCS8qIHNvY2tldCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2aWNlCQkJZGV2OwogCS8qIGRhdGEgaW50ZXJuYWwgdG8gdGhlIHNvY2tldCBkcml2ZXIgKi8KQEAgLTI2MywxMyArMjU3LDI1IEBACiAgKiAtIHBjY2FyZF9zdGF0aWNfb3BzCQlpb21lbSBhbmQgaW9wb3J0IGFyZWFzIGFyZSBhc3NpZ25lZCBzdGF0aWNhbGx5CiAgKiAtIHBjY2FyZF9pb2R5bl9vcHMJCWlvbWVtIGFyZWFzIGlzIGFzc2lnbmVkIHN0YXRpY2FsbHksIGlvcG9ydAogICoJCQkJYXJlYXMgZHluYW1pY2FsbHkKKyAqCQkJCUlmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB1c2UKKyAqCQkJCSJzZWxlY3QgUENDQVJEX0lPRFlOIiBpbiBLY29uZmlnLgogICogLSBwY2NhcmRfbm9uc3RhdGljX29wcwlpb21lbSBhbmQgaW9wb3J0IGFyZWFzIGFyZSBhc3NpZ25lZCBkeW5hbWljYWxseS4KICAqCQkJCUlmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB1c2UKICAqCQkJCSJzZWxlY3QgUENDQVJEX05PTlNUQVRJQyIgaW4gS2NvbmZpZy4KKyAqCiAgKi8KIGV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfc3RhdGljX29wczsKKyNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX1BDTUNJQV9NT0RVTEUpCiBleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX2lvZHluX29wczsKIGV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfbm9uc3RhdGljX29wczsKKyNlbHNlCisvKiBJZiBQQ01DSUEgaXMgbm90IHVzZWQsIGJ1dCBvbmx5IENBUkRCVVMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHVzZWQKKyAqIGF0IGFsbC4gVGhlcmVmb3JlLCBkbyBub3QgdXNlIHRoZSBsYXJnZSAoMjQwSyEpIHJzcmNfbm9uc3RhdGljIG1vZHVsZQorICovCisjZGVmaW5lIHBjY2FyZF9pb2R5bl9vcHMgcGNjYXJkX3N0YXRpY19vcHMKKyNkZWZpbmUgcGNjYXJkX25vbnN0YXRpY19vcHMgcGNjYXJkX3N0YXRpY19vcHMKKyNlbmRpZgorCiAKIC8qIHNvY2tldCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byB1c2UgdGhlc2UgY2FsbGJhY2tzIGluIHRoZWlyIC5kcnYgc3RydWN0ICovCiBleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggN2M0NDQ5OS4uZDgwYjZkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTM0OCw3ICszNDgsOCBAQAogCQkJICAgIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqKTsKIGV4dGVybiBpbnQgc2NzaV90ZXN0X3VuaXRfcmVhZHkoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGltZW91dCwKIAkJCQlpbnQgcmV0cmllcywgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcik7Ci1leHRlcm4gdW5zaWduZWQgY2hhciAqc2NzaV9nZXRfdnBkX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICosIHU4IHBhZ2UpOworZXh0ZXJuIGludCBzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgdTggcGFnZSwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJICAgICBpbnQgYnVmX2xlbik7CiBleHRlcm4gaW50IHNjc2lfZGV2aWNlX3NldF9zdGF0ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCiAJCQkJIGVudW0gc2NzaV9kZXZpY2Vfc3RhdGUgc3RhdGUpOwogZXh0ZXJuIHN0cnVjdCBzY3NpX2V2ZW50ICpzZGV2X2V2dF9hbGxvYyhlbnVtIHNjc2lfZGV2aWNlX2V2ZW50IGV2dF90eXBlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oCmluZGV4IDYxYWQzNTkuLmZmZWViYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmgKQEAgLTEwNyw2ICsxMDcsOCBAQAogCXN0cnVjdCBzYXNfcnBoeQkJcnBoeTsKIAkvKiBmbGFncyAqLwogCXVuc2lnbmVkCQlyZWFkeV9sZWRfbWVhbmluZzoxOworCXVuc2lnbmVkCQl0bHJfc3VwcG9ydGVkOjE7CisJdW5zaWduZWQJCXRscl9lbmFibGVkOjE7CiAJLyogcGFyYW1ldGVycyAqLwogCXUxNgkJCUlfVF9uZXh1c19sb3NzX3RpbWVvdXQ7CiAJdTE2CQkJaW5pdGlhdG9yX3Jlc3BvbnNlX3RpbWVvdXQ7CkBAIC0xODEsNiArMTgzLDExIEBACiBleHRlcm4gdm9pZCBzYXNfcGh5X2RlbGV0ZShzdHJ1Y3Qgc2FzX3BoeSAqKTsKIGV4dGVybiBpbnQgc2NzaV9pc19zYXNfcGh5KGNvbnN0IHN0cnVjdCBkZXZpY2UgKik7CiAKK3Vuc2lnbmVkIGludCBzYXNfdGxyX3N1cHBvcnRlZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7Cit1bnNpZ25lZCBpbnQgc2FzX2lzX3Rscl9lbmFibGVkKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK3ZvaWQgc2FzX2Rpc2FibGVfdGxyKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK3ZvaWQgc2FzX2VuYWJsZV90bHIoc3RydWN0IHNjc2lfZGV2aWNlICopOworCiBleHRlcm4gc3RydWN0IHNhc19ycGh5ICpzYXNfZW5kX2RldmljZV9hbGxvYyhzdHJ1Y3Qgc2FzX3BvcnQgKik7CiBleHRlcm4gc3RydWN0IHNhc19ycGh5ICpzYXNfZXhwYW5kZXJfYWxsb2Moc3RydWN0IHNhc19wb3J0ICosIGVudW0gc2FzX2RldmljZV90eXBlKTsKIHZvaWQgc2FzX3JwaHlfZnJlZShzdHJ1Y3Qgc2FzX3JwaHkgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmgKaW5kZXggYTg3MGJhMS4uNWMxZGNmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbG9jay5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaApAQCAtMjAsMTQgKzIwLDE3IEBACiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsIGZsYWdzKQogCQlfX3N0cmluZyhuYW1lLCBsb2NrLT5uYW1lKQorCQlfX2ZpZWxkKHZvaWQgKiwgbG9ja2RlcF9hZGRyKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19lbnRyeS0+ZmxhZ3MgPSAodHJ5bG9jayA/IDEgOiAwKSB8IChyZWFkID8gMiA6IDApOwogCQlfX2Fzc2lnbl9zdHIobmFtZSwgbG9jay0+bmFtZSk7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKIAotCVRQX3ByaW50aygiJXMlcyVzIiwgKF9fZW50cnktPmZsYWdzICYgMSkgPyAidHJ5ICIgOiAiIiwKKwlUUF9wcmludGsoIiVwICVzJXMlcyIsIF9fZW50cnktPmxvY2tkZXBfYWRkciwKKwkJICAoX19lbnRyeS0+ZmxhZ3MgJiAxKSA/ICJ0cnkgIiA6ICIiLAogCQkgIChfX2VudHJ5LT5mbGFncyAmIDIpID8gInJlYWQgIiA6ICIiLAogCQkgIF9fZ2V0X3N0cihuYW1lKSkKICk7CkBAIC00MCwxMyArNDMsMTYgQEAKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fc3RyaW5nKG5hbWUsIGxvY2stPm5hbWUpCisJCV9fZmllbGQodm9pZCAqLCBsb2NrZGVwX2FkZHIpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2Fzc2lnbl9zdHIobmFtZSwgbG9jay0+bmFtZSk7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKIAotCVRQX3ByaW50aygiJXMiLCBfX2dldF9zdHIobmFtZSkpCisJVFBfcHJpbnRrKCIlcCAlcyIsCisJCSAgX19lbnRyeS0+bG9ja2RlcF9hZGRyLCBfX2dldF9zdHIobmFtZSkpCiApOwogCiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVApAQCAtNTksMTMgKzY1LDE2IEBACiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX3N0cmluZyhuYW1lLCBsb2NrLT5uYW1lKQorCQlfX2ZpZWxkKHZvaWQgKiwgbG9ja2RlcF9hZGRyKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19hc3NpZ25fc3RyKG5hbWUsIGxvY2stPm5hbWUpOworCQlfX2VudHJ5LT5sb2NrZGVwX2FkZHIgPSBsb2NrOwogCSksCiAKLQlUUF9wcmludGsoIiVzIiwgX19nZXRfc3RyKG5hbWUpKQorCVRQX3ByaW50aygiJXAgJXMiLAorCQkgIF9fZW50cnktPmxvY2tkZXBfYWRkciwgX19nZXRfc3RyKG5hbWUpKQogKTsKIAogVFJBQ0VfRVZFTlQobG9ja19hY3F1aXJlZCwKQEAgLTc1LDE2ICs4NCwxOCBAQAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19zdHJpbmcobmFtZSwgbG9jay0+bmFtZSkKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nLCB3YWl0X3VzZWMpCi0JCV9fZmllbGQodW5zaWduZWQgbG9uZywgd2FpdF9uc2VjX3JlbSkKKwkJX19maWVsZChzNjQsIHdhaXRfbnNlYykKKwkJX19maWVsZCh2b2lkICosIGxvY2tkZXBfYWRkcikKIAkpLAorCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fYXNzaWduX3N0cihuYW1lLCBsb2NrLT5uYW1lKTsKLQkJX19lbnRyeS0+d2FpdF9uc2VjX3JlbSA9IGRvX2Rpdih3YWl0dGltZSwgTlNFQ19QRVJfVVNFQyk7Ci0JCV9fZW50cnktPndhaXRfdXNlYyA9ICh1bnNpZ25lZCBsb25nKSB3YWl0dGltZTsKKwkJX19lbnRyeS0+d2FpdF9uc2VjID0gd2FpdHRpbWU7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKLQlUUF9wcmludGsoIiVzICglbHUuJTAzbHUgdXMpIiwgX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT53YWl0X3VzZWMsCi0JCQkJICAgICAgIF9fZW50cnktPndhaXRfbnNlY19yZW0pCisJVFBfcHJpbnRrKCIlcCAlcyAoJWxsdSBucykiLCBfX2VudHJ5LT5sb2NrZGVwX2FkZHIsCisJCSAgX19nZXRfc3RyKG5hbWUpLAorCQkgIF9fZW50cnktPndhaXRfbnNlYykKICk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaCBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKaW5kZXggYzZmZTAzZS4uMDgwNGNkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCkBAIC02NSw3ICs2NSw4IEBACiAJfTsKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykJXAotCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfIyNuYW1lCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGV2ZW50XyMjbmFtZQogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MsIHByaW50KQlcCkBAIC0xMzEsMTMwICsxMzIsNiBAQAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKIC8qCi0gKiBTZXR1cCB0aGUgc2hvd2luZyBmb3JtYXQgb2YgdHJhY2UgcG9pbnQuCi0gKgotICogaW50Ci0gKiBmdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgdHJhY2Vfc2VxICpzKQotICogewotICoJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkOwotICoJaW50IHJldDsKLSAqCi0gKglyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICN0eXBlICIgIiAjaXRlbSAiOyIKLSAqCQkJICAgICAgICIgb2Zmc2V0OiV1OyBzaXplOiV1O1xuIiwKLSAqCQkJICAgICAgIG9mZnNldG9mKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCwgaXRlbSksCi0gKgkJCSAgICAgICBzaXplb2YoZmllbGQudHlwZSkpOwotICoKLSAqIH0KLSAqLwotCi0jdW5kZWYgVFBfU1RSVUNUX19lbnRyeQotI2RlZmluZSBUUF9TVFJVQ1RfX2VudHJ5KGFyZ3MuLi4pIGFyZ3MKLQotI3VuZGVmIF9fZmllbGQKLSNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksIFwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5pdGVtKSwJXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaXNfc2lnbmVkX3R5cGUodHlwZSkpOwlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2ZpZWxkX2V4dAotI2RlZmluZSBfX2ZpZWxkX2V4dCh0eXBlLCBpdGVtLCBmaWx0ZXJfdHlwZSkJX19maWVsZCh0eXBlLCBpdGVtKQotCi0jdW5kZWYgX19hcnJheQotI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiWyIgI2xlbiAiXTtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksIFwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5pdGVtKSwJXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaXNfc2lnbmVkX3R5cGUodHlwZSkpOwlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKLSNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJICAgICAgIFwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOl9fZGF0YV9sb2MgIiAjdHlwZSAiW10gIiAjaXRlbSAiO1x0IlwKLQkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcdHNpZ25lZDoldTtcbiIsCSAgICAgICBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLAkgICAgICAgXAotCQkJCQlfX2RhdGFfbG9jXyMjaXRlbSksCQkgICAgICAgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLl9fZGF0YV9sb2NfIyNpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaXNfc2lnbmVkX3R5cGUodHlwZSkpOwlcCi0JaWYgKCFyZXQpCQkJCQkJCSAgICAgICBcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgX19zdHJpbmcKLSNkZWZpbmUgX19zdHJpbmcoaXRlbSwgc3JjKSBfX2R5bmFtaWNfYXJyYXkoY2hhciwgaXRlbSwgLTEpCi0KLSN1bmRlZiBfX2VudHJ5Ci0jZGVmaW5lIF9fZW50cnkgUkVDCi0KLSN1bmRlZiBfX3ByaW50X3N5bWJvbGljCi0jdW5kZWYgX19nZXRfZHluYW1pY19hcnJheQotI3VuZGVmIF9fZ2V0X3N0cgotCi0jdW5kZWYgVFBfcHJpbnRrCi0jZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pICJcIiVzXCIsICVzXG4iLCBmbXQsIF9fc3RyaW5naWZ5KGFyZ3MpCi0KLSN1bmRlZiBUUF9mYXN0X2Fzc2lnbgotI2RlZmluZSBUUF9mYXN0X2Fzc2lnbihhcmdzLi4uKSBhcmdzCi0KLSN1bmRlZiBUUF9wZXJmX2Fzc2lnbgotI2RlZmluZSBUUF9wZXJmX2Fzc2lnbihhcmdzLi4uKQotCi0jdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUwotI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBmdW5jLCBwcmludCkJXAotc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF9zZXR1cF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQlcCi0JCQkgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCBmaWVsZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXRzdHJ1Y3Q7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQkJXAotCQkgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0JaW50IHJldCA9IDA7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSBmdHJhY2VfZm9ybWF0X3NldHVwXyMjY2FsbCh1bnVzZWQsIHMpOwkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gcmV0OwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogIiBwcmludCk7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi0jdW5kZWYgREVGSU5FX0VWRU5UCi0jZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MpCi0KLSN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKLSNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0XyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCQlcCi0JCSAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0JaW50IHJldCA9IDA7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSBmdHJhY2VfZm9ybWF0X3NldHVwXyMjdGVtcGxhdGUodW51c2VkLCBzKTsJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gcmV0OwkJCQkJCVwKLQkJCQkJCQkJCVwKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogIiBwcmludCk7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0KLQotI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCi0KLS8qCiAgKiBTdGFnZSAzIG9mIHRoZSB0cmFjZSBldmVudHMuCiAgKgogICogT3ZlcnJpZGUgdGhlIG1hY3JvcyBpbiA8dHJhY2UvdHJhY2VfZXZlbnRzLmg+IHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKQEAgLTMyMyw3ICsyMDAsNyBAQAogCiAjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUwogI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QJCQkJCQlcCitzdGF0aWMgbm90cmFjZSBlbnVtIHByaW50X2xpbmVfdAkJCQkJXAogZnRyYWNlX3Jhd19vdXRwdXRfaWRfIyNjYWxsKGludCBldmVudF9pZCwgY29uc3QgY2hhciAqbmFtZSwJCVwKIAkJCSAgICBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAogewkJCQkJCQkJCVwKQEAgLTM1Niw3ICsyMzMsNyBAQAogCiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MpCQkJXAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90CQkJCQkJXAorc3RhdGljIG5vdHJhY2UgZW51bSBwcmludF9saW5lX3QJCQkJCVwKIGZ0cmFjZV9yYXdfb3V0cHV0XyMjbmFtZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gZnRyYWNlX3Jhd19vdXRwdXRfaWRfIyN0ZW1wbGF0ZShldmVudF8jI25hbWUuaWQsCQlcCkBAIC0zNjUsNyArMjQyLDcgQEAKIAogI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAogI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIGNhbGwsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAkJCQkJCVwKK3N0YXRpYyBub3RyYWNlIGVudW0gcHJpbnRfbGluZV90CQkJCQlcCiBmdHJhY2VfcmF3X291dHB1dF8jI2NhbGwoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CQkJCVwKQEAgLTQzMSw3ICszMDgsNyBAQAogCiAjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUwogI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBmdW5jLCBwcmludCkJXAotc3RhdGljIGludAkJCQkJCQkJXAorc3RhdGljIGludCBub3RyYWNlCQkJCQkJCVwKIGZ0cmFjZV9kZWZpbmVfZmllbGRzXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkOwkJCQkJXApAQCAtNDc5LDcgKzM1Niw3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKLXN0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV9nZXRfb2Zmc2V0c18jI2NhbGwoCQkJCVwKK3N0YXRpYyBpbmxpbmUgbm90cmFjZSBpbnQgZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgJCQlcCiAJc3RydWN0IGZ0cmFjZV9kYXRhX29mZnNldHNfIyNjYWxsICpfX2RhdGFfb2Zmc2V0cywgcHJvdG8pICAgICAgIFwKIHsJCQkJCQkJCQlcCiAJaW50IF9fZGF0YV9zaXplID0gMDsJCQkJCQlcCkBAIC00OTksNyArMzc2LDcgQEAKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiAvKgogICogR2VuZXJhdGUgdGhlIGZ1bmN0aW9ucyBuZWVkZWQgZm9yIHRyYWNlcG9pbnQgcGVyZl9ldmVudCBzdXBwb3J0LgpAQCAtNTI2LDEyICs0MDMsMTQgQEAKIAkJCQkJCQkJCVwKIHN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjbmFtZShwcm90byk7CQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCitzdGF0aWMgbm90cmFjZSBpbnQJCQkJCQkJXAorZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlXyMjbmFtZShmdHJhY2VfcHJvZmlsZV8jI25hbWUpOwkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKK3N0YXRpYyBub3RyYWNlIHZvaWQJCQkJCQkJXAorZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpCQlcCiB7CQkJCQkJCQkJXAogCXVucmVnaXN0ZXJfdHJhY2VfIyNuYW1lKGZ0cmFjZV9wcm9maWxlXyMjbmFtZSk7CQkJXAogfQpAQCAtNTQyLDcgKzQyMSw3IEBACiAKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQogCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAogLyoKICAqIFN0YWdlIDQgb2YgdGhlIHRyYWNlIGV2ZW50cy4KQEAgLTYyMiwxMiArNTAxLDExIEBACiAgKgkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCiAgKgkucmVnZnVuYwkJPSBmdHJhY2VfcmVnX2V2ZW50XzxjYWxsPiwKICAqCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPiwKLSAqCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XzxjYWxsPiwKICAqIH0KICAqCiAgKi8KIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKICNkZWZpbmUgX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAogCS5wcm9maWxlX2VuYWJsZSA9IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV8jI2NhbGwsCQkJXApAQCAtNjM1LDcgKzUxMyw3IEBACiAKICNlbHNlCiAjZGVmaW5lIF9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAjdW5kZWYgX19lbnRyeQogI2RlZmluZSBfX2VudHJ5IGVudHJ5CkBAIC02NTcsMTAgKzUzNSwxNyBAQAogI2RlZmluZSBfX2Fzc2lnbl9zdHIoZHN0LCBzcmMpCQkJCQkJXAogCXN0cmNweShfX2dldF9zdHIoZHN0KSwgc3JjKTsKIAorI3VuZGVmIFRQX2Zhc3RfYXNzaWduCisjZGVmaW5lIFRQX2Zhc3RfYXNzaWduKGFyZ3MuLi4pIGFyZ3MKKworI3VuZGVmIFRQX3BlcmZfYXNzaWduCisjZGVmaW5lIFRQX3BlcmZfYXNzaWduKGFyZ3MuLi4pCisKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9yYXdfZXZlbnRfaWRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwgXAorc3RhdGljIG5vdHJhY2Ugdm9pZAkJCQkJCQlcCitmdHJhY2VfcmF3X2V2ZW50X2lkXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwsCVwKIAkJCQkgICAgICAgcHJvdG8pCQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9kYXRhX29mZnNldHNfIyNjYWxsIF9fbWF5YmVfdW51c2VkIF9fZGF0YV9vZmZzZXRzO1wKQEAgLTY5NywxNyArNTgyLDE5IEBACiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwocHJvdG8pCQkJCVwKK3N0YXRpYyBub3RyYWNlIHZvaWQgZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwocHJvdG8pCQkJXAogewkJCQkJCQkJCVwKIAlmdHJhY2VfcmF3X2V2ZW50X2lkXyMjdGVtcGxhdGUoJmV2ZW50XyMjY2FsbCwgYXJncyk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAorc3RhdGljIG5vdHJhY2UgaW50CQkJCQkJCVwKK2Z0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAorc3RhdGljIG5vdHJhY2Ugdm9pZAkJCQkJCQlcCitmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwpOwkJXAogfQkJCQkJCQkJCVwKQEAgLTcyMiw4ICs2MDksMjAgQEAKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgUkVDCisKKyN1bmRlZiBfX3ByaW50X2ZsYWdzCisjdW5kZWYgX19wcmludF9zeW1ib2xpYworI3VuZGVmIF9fZ2V0X2R5bmFtaWNfYXJyYXkKKyN1bmRlZiBfX2dldF9zdHIKKworI3VuZGVmIFRQX3ByaW50aworI2RlZmluZSBUUF9wcmludGsoZm10LCBhcmdzLi4uKSAiXCIiIGZtdCAiXCIsICIgIF9fc3RyaW5naWZ5KGFyZ3MpCisKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCi0jZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCisjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKK3N0YXRpYyBjb25zdCBjaGFyIHByaW50X2ZtdF8jI2NhbGxbXSA9IHByaW50OwogCiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQkJXApAQCAtNzM3LDcgKzYzNiw3IEBACiAJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJCVwKIAkucmVnZnVuYwkJPSBmdHJhY2VfcmF3X3JlZ19ldmVudF8jI2NhbGwsCQlcCiAJLnVucmVnZnVuYwkJPSBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbCwJXAotCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XyMjdGVtcGxhdGUsCQlcCisJLnByaW50X2ZtdAkJPSBwcmludF9mbXRfIyN0ZW1wbGF0ZSwJCQlcCiAJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyN0ZW1wbGF0ZSwJXAogCV9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKIH0KQEAgLTc0NSw2ICs2NDQsOCBAQAogI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAogI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIGNhbGwsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKIAkJCQkJCQkJCVwKK3N0YXRpYyBjb25zdCBjaGFyIHByaW50X2ZtdF8jI2NhbGxbXSA9IHByaW50OwkJCQlcCisJCQkJCQkJCQlcCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCkBAIC03NTQsNyArNjU1LDcgQEAKIAkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQkJXAogCS5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCwJCVwKIAkudW5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsLAlcCi0JLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyNjYWxsLAkJCVwKKwkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI2NhbGwsCQkJXAogCS5kZWZpbmVfZmllbGRzCQk9IGZ0cmFjZV9kZWZpbmVfZmllbGRzXyMjdGVtcGxhdGUsCVwKIAlfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCiB9CkBAIC04MzUsNyArNzM2LDE3IEBACiAgKiB9CiAgKi8KIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgZW50cnkKKworI3VuZGVmIF9fZ2V0X2R5bmFtaWNfYXJyYXkKKyNkZWZpbmUgX19nZXRfZHluYW1pY19hcnJheShmaWVsZCkJXAorCQkoKHZvaWQgKilfX2VudHJ5ICsgKF9fZW50cnktPl9fZGF0YV9sb2NfIyNmaWVsZCAmIDB4ZmZmZikpCisKKyN1bmRlZiBfX2dldF9zdHIKKyNkZWZpbmUgX19nZXRfc3RyKGZpZWxkKSAoY2hhciAqKV9fZ2V0X2R5bmFtaWNfYXJyYXkoZmllbGQpCiAKICN1bmRlZiBfX3BlcmZfYWRkcgogI2RlZmluZSBfX3BlcmZfYWRkcihhKSBfX2FkZHIgPSAoYSkKQEAgLTg0NSwyNyArNzU2LDE3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKLXN0YXRpYyB2b2lkCQkJCQkJCQlcCitzdGF0aWMgbm90cmFjZSB2b2lkCQkJCQkJCVwKIGZ0cmFjZV9wcm9maWxlX3RlbXBsXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwsCVwKIAkJCSAgICBwcm90bykJCQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9kYXRhX29mZnNldHNfIyNjYWxsIF9fbWF5YmVfdW51c2VkIF9fZGF0YV9vZmZzZXRzO1wKLQlleHRlcm4gaW50IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQodm9pZCk7CQlcCi0JZXh0ZXJuIHZvaWQgcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChpbnQgcmN0eCk7CVwKLQlleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCwgdTY0LCB1NjQsIHZvaWQgKiwgaW50KTsJCVwKIAlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmVudHJ5OwkJCQlcCiAJdTY0IF9fYWRkciA9IDAsIF9fY291bnQgPSAxOwkJCQkJXAogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwkJCQkJXAotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwkJCQkJXAogCWludCBfX2VudHJ5X3NpemU7CQkJCQkJXAogCWludCBfX2RhdGFfc2l6ZTsJCQkJCQlcCi0JY2hhciAqdHJhY2VfYnVmOwkJCQkJCVwKLQljaGFyICpyYXdfZGF0YTsJCQkJCQkJXAotCWludCBfX2NwdTsJCQkJCQkJXAogCWludCByY3R4OwkJCQkJCQlcCi0JaW50IHBjOwkJCQkJCQkJXAotCQkJCQkJCQkJXAotCXBjID0gcHJlZW1wdF9jb3VudCgpOwkJCQkJCVwKIAkJCQkJCQkJCVwKIAlfX2RhdGFfc2l6ZSA9IGZ0cmFjZV9nZXRfb2Zmc2V0c18jI2NhbGwoJl9fZGF0YV9vZmZzZXRzLCBhcmdzKTsgXAogCV9fZW50cnlfc2l6ZSA9IEFMSUdOKF9fZGF0YV9zaXplICsgc2l6ZW9mKCplbnRyeSkgKyBzaXplb2YodTMyKSxcCkBAIC04NzUsNDcgKzc3NiwyMSBAQAogCWlmIChXQVJOX09OQ0UoX19lbnRyeV9zaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCQlcCiAJCSAgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCQlcCiAJCXJldHVybjsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmN0eCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsJCQlcCi0JaWYgKHJjdHggPCAwKQkJCQkJCQlcCi0JCWdvdG8gZW5kX3JlY3Vyc2lvbjsJCQkJCVwKLQkJCQkJCQkJCVwKLQlfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoaW5fbm1pKCkpCQkJCQkJCVwKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmX25taSk7CVwKLQllbHNlCQkJCQkJCQlcCi0JCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CQlcCi0JCQkJCQkJCQlcCi0JaWYgKCF0cmFjZV9idWYpCQkJCQkJCVwKLQkJZ290byBlbmQ7CQkJCQkJXAotCQkJCQkJCQkJXAotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBfX2NwdSk7CQkJXAotCQkJCQkJCQkJXAotCSoodTY0ICopKCZyYXdfZGF0YVtfX2VudHJ5X3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsJCVwKLQllbnRyeSA9IChzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKilyYXdfZGF0YTsJCQlcCi0JZW50ID0gJmVudHJ5LT5lbnQ7CQkJCQkJXAotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50LCBpcnFfZmxhZ3MsIHBjKTsJCVwKLQllbnQtPnR5cGUgPSBldmVudF9jYWxsLT5pZDsJCQkJCVwKLQkJCQkJCQkJCVwKKwllbnRyeSA9IChzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKilmdHJhY2VfcGVyZl9idWZfcHJlcGFyZSgJXAorCQlfX2VudHJ5X3NpemUsIGV2ZW50X2NhbGwtPmlkLCAmcmN0eCwgJmlycV9mbGFncyk7CVwKKwlpZiAoIWVudHJ5KQkJCQkJCQlcCisJCXJldHVybjsJCQkJCQkJXAogCXRzdHJ1Y3QJCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAl7IGFzc2lnbjsgfQkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcGVyZl90cF9ldmVudChldmVudF9jYWxsLT5pZCwgX19hZGRyLCBfX2NvdW50LCBlbnRyeSwJCVwKLQkJCSAgICAgX19lbnRyeV9zaXplKTsJCQkJXAotCQkJCQkJCQkJXAotZW5kOgkJCQkJCQkJCVwKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwkJCVwKLWVuZF9yZWN1cnNpb246CQkJCQkJCQlcCi0JbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsJCQkJCVwKKwlmdHJhY2VfcGVyZl9idWZfc3VibWl0KGVudHJ5LCBfX2VudHJ5X3NpemUsIHJjdHgsIF9fYWRkciwJXAorCQkJICAgICAgIF9fY291bnQsIGlycV9mbGFncyk7CQkJXAogfQogCiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV8jI2NhbGwocHJvdG8pCQkJXAorc3RhdGljIG5vdHJhY2Ugdm9pZCBmdHJhY2VfcHJvZmlsZV8jI2NhbGwocHJvdG8pCQlcCiB7CQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsID0gJmV2ZW50XyMjY2FsbDsJXAogCQkJCQkJCQlcCkBAIC05MjcsNyArODAyLDcgQEAKIAlERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCi0jZW5kaWYgLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAogI3VuZGVmIF9UUkFDRV9QUk9GSUxFX0lOSVQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmggYi9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaAppbmRleCA5NjFmZGEzLi4wMzg3MTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaAorKysgYi9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaApAQCAtMzQsMTAgKzM0LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGFyY2hfc3lzY2FsbF9hZGRyKGludCBucik7CiBleHRlcm4gaW50IGluaXRfc3lzY2FsbF90cmFjZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogCi1leHRlcm4gaW50IHN5c2NhbGxfZW50ZXJfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQlzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKLWV4dGVybiBpbnQgc3lzY2FsbF9leGl0X2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCi0JCQkJc3RydWN0IHRyYWNlX3NlcSAqcyk7CiBleHRlcm4gaW50IHN5c2NhbGxfZW50ZXJfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogZXh0ZXJuIGludCBzeXNjYWxsX2V4aXRfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogZXh0ZXJuIGludCByZWdfZXZlbnRfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwpAQCAtNDksMTIgKzQ1LDEyIEBACiBlbnVtIHByaW50X2xpbmVfdCBwcmludF9zeXNjYWxsX2VudGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKTsKIGVudW0gcHJpbnRfbGluZV90IHByaW50X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncyk7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiBpbnQgcHJvZl9zeXNlbnRlcl9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIHZvaWQgcHJvZl9zeXNlbnRlcl9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBpbnQgcHJvZl9zeXNleGl0X2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogdm9pZCBwcm9mX3N5c2V4aXRfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwotCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9UUkFDRV9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaCBiL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaAppbmRleCAyODgyMDU0Li4yY2M4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKKysrIGIvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCkBAIC0zNCw2ICszNCw4IEBACiAjZGVmaW5lIExDRENfRkxBR1NfSFNDTlQgKDEgPDwgMykgLyogRGlzYWJsZSBIU1lOQyBkdXJpbmcgVkJMQU5LICovCiAjZGVmaW5lIExDRENfRkxBR1NfRFdDTlQgKDEgPDwgNCkgLyogRGlzYWJsZSBkb3RjbG9jayBkdXJpbmcgYmxhbmtpbmcgKi8KIAorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQyBfSU9XKCdGJywgMHgyMCwgX191MzIpCisKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX2NmZyB7CiAJdW5zaWduZWQgbG9uZyBsZG10MnI7CiAJdW5zaWduZWQgbG9uZyBsZG10M3I7CmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggZDk1Y2E3Yy4uMDg5YTIzMCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMzk2LDYgKzM5NiwyMiBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKK2NvbmZpZyBSQ1VfRkFTVF9OT19IWgorCWJvb2wgIkFjY2VsZXJhdGUgbGFzdCBub24tZHludGljay1pZGxlIENQVSdzIGdyYWNlIHBlcmlvZHMiCisJZGVwZW5kcyBvbiBUUkVFX1JDVSAmJiBOT19IWiAmJiBTTVAKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgUkNVIHRvIGF0dGVtcHQgdG8gYWNjZWxlcmF0ZSBncmFjZSBwZXJpb2RzCisJICBpbiBvcmRlciB0byBhbGxvdyB0aGUgZmluYWwgQ1BVIHRvIGVudGVyIGR5bnRpY2tzLWlkbGUgc3RhdGUKKwkgIG1vcmUgcXVpY2tseS4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIG9wdGlvbiBpbmNyZWFzZXMgdGhlCisJICBvdmVyaGVhZCBvZiB0aGUgZHludGlja3MtaWRsZSBjaGVja2luZywgcGFydGljdWxhcmx5IG9uIHN5c3RlbXMKKwkgIHdpdGggbGFyZ2UgbnVtYmVycyBvZiBDUFVzLgorCisJICBTYXkgWSBpZiBlbmVyZ3kgZWZmaWNpZW5jeSBpcyBjcml0aWNhbGx5IGltcG9ydGFudCwgcGFydGljdWxhcmx5CisJICAJaWYgeW91IGhhdmUgcmVsYXRpdmVseSBmZXcgQ1BVcy4KKworCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCisKIGNvbmZpZyBUUkVFX1JDVV9UUkFDRQogCWRlZl9ib29sIFJDVV9UUkFDRSAmJiAoIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UgKQogCXNlbGVjdCBERUJVR19GUwpAQCAtNDQ1LDU3ICs0NjEsNiBAQAogY29uZmlnIEhBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sKIAlib29sCiAKLWNvbmZpZyBHUk9VUF9TQ0hFRAotCWJvb2wgIkdyb3VwIENQVSBzY2hlZHVsZXIiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGZlYXR1cmUgbGV0cyBDUFUgc2NoZWR1bGVyIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmQgY29udHJvbCBDUFUKLQkgIGJhbmR3aWR0aCBhbGxvY2F0aW9uIHRvIHN1Y2ggdGFzayBncm91cHMuCi0JICBJbiBvcmRlciB0byBjcmVhdGUgYSBncm91cCBmcm9tIGFyYml0cmFyeSBzZXQgb2YgcHJvY2Vzc2VzLCB1c2UKLQkgIENPTkZJR19DR1JPVVBTLiAoU2VlIENvbnRyb2wgR3JvdXAgc3VwcG9ydC4pCi0KLWNvbmZpZyBGQUlSX0dST1VQX1NDSEVECi0JYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfT1RIRVIiCi0JZGVwZW5kcyBvbiBHUk9VUF9TQ0hFRAotCWRlZmF1bHQgR1JPVVBfU0NIRUQKLQotY29uZmlnIFJUX0dST1VQX1NDSEVECi0JYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfUlIvRklGTyIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlcGVuZHMgb24gR1JPVVBfU0NIRUQKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGZlYXR1cmUgbGV0cyB5b3UgZXhwbGljaXRseSBhbGxvY2F0ZSByZWFsIENQVSBiYW5kd2lkdGgKLQkgIHRvIHVzZXJzIG9yIGNvbnRyb2wgZ3JvdXBzIChkZXBlbmRpbmcgb24gdGhlICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiCi0JICBzZXR0aW5nIGJlbG93LiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvCi0JICBzY2hlZHVsZSByZWFsdGltZSB0YXNrcyBmb3Igbm9uLXJvb3QgdXNlcnMgdW50aWwgeW91IGFsbG9jYXRlCi0JICByZWFsdGltZSBiYW5kd2lkdGggZm9yIHRoZW0uCi0JICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi1jaG9pY2UKLQlkZXBlbmRzIG9uIEdST1VQX1NDSEVECi0JcHJvbXB0ICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiCi0JZGVmYXVsdCBVU0VSX1NDSEVECi0KLWNvbmZpZyBVU0VSX1NDSEVECi0JYm9vbCAidXNlciBpZCIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiB3aWxsIGNob29zZSB1c2VyaWQgYXMgdGhlIGJhc2lzIGZvciBncm91cGluZwotCSAgdGFza3MsIHRodXMgcHJvdmlkaW5nIGVxdWFsIENQVSBiYW5kd2lkdGggdG8gZWFjaCB1c2VyLgotCi1jb25maWcgQ0dST1VQX1NDSEVECi0JYm9vbCAiQ29udHJvbCBncm91cHMiCi0gCWRlcGVuZHMgb24gQ0dST1VQUwotIAloZWxwCi0JICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhcmJpdHJhcnkgdGFzayBncm91cHMKLQkgIHVzaW5nIHRoZSAiY2dyb3VwIiBwc2V1ZG8gZmlsZXN5c3RlbSBhbmQgY29udHJvbAotCSAgdGhlIGNwdSBiYW5kd2lkdGggYWxsb2NhdGVkIHRvIGVhY2ggc3VjaCB0YXNrIGdyb3VwLgotCSAgUmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBvbiAiY2dyb3VwIiBwc2V1ZG8gZmlsZXN5c3RlbS4KLQotZW5kY2hvaWNlCi0KIG1lbnVjb25maWcgQ0dST1VQUwogCWJvb2xlYW4gIkNvbnRyb2wgR3JvdXAgc3VwcG9ydCIKIAloZWxwCkBAIC02MTYsNiArNTgxLDM2IEBACiAJICBOb3csIG1lbW9yeSB1c2FnZSBvZiBzd2FwX2Nncm91cCBpcyAyIGJ5dGVzIHBlciBlbnRyeS4gSWYgc3dhcCBwYWdlCiAJICBzaXplIGlzIDQwOTZieXRlcywgNTEyayBwZXIgMUdieXRlcyBvZiBzd2FwLgogCittZW51Y29uZmlnIENHUk9VUF9TQ0hFRAorCWJvb2wgIkdyb3VwIENQVSBzY2hlZHVsZXIiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQ0dST1VQUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVQorCSAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgdXNlcyBjZ3JvdXBzIHRvIGdyb3VwCisJICB0YXNrcy4KKworaWYgQ0dST1VQX1NDSEVECitjb25maWcgRkFJUl9HUk9VUF9TQ0hFRAorCWJvb2wgIkdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX09USEVSIgorCWRlcGVuZHMgb24gQ0dST1VQX1NDSEVECisJZGVmYXVsdCBDR1JPVVBfU0NIRUQKKworY29uZmlnIFJUX0dST1VQX1NDSEVECisJYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfUlIvRklGTyIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gQ0dST1VQX1NDSEVECisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBmZWF0dXJlIGxldHMgeW91IGV4cGxpY2l0bHkgYWxsb2NhdGUgcmVhbCBDUFUgYmFuZHdpZHRoCisJICB0byB1c2VycyBvciBjb250cm9sIGdyb3VwcyAoZGVwZW5kaW5nIG9uIHRoZSAiQmFzaXMgZm9yIGdyb3VwaW5nIHRhc2tzIgorCSAgc2V0dGluZyBiZWxvdy4gSWYgZW5hYmxlZCwgaXQgd2lsbCBhbHNvIG1ha2UgaXQgaW1wb3NzaWJsZSB0bworCSAgc2NoZWR1bGUgcmVhbHRpbWUgdGFza3MgZm9yIG5vbi1yb290IHVzZXJzIHVudGlsIHlvdSBhbGxvY2F0ZQorCSAgcmVhbHRpbWUgYmFuZHdpZHRoIGZvciB0aGVtLgorCSAgU2VlIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworZW5kaWYgI0NHUk9VUF9TQ0hFRAorCiBlbmRpZiAjIENHUk9VUFMKIAogY29uZmlnIE1NX09XTkVSCkBAIC05NzYsMTkgKzk3MSw2IEBACiAKIAkgIFNheSBZIGlmIHVuc3VyZS4KIAotY29uZmlnIEVWRU5UX1BST0ZJTEUKLQlib29sICJUcmFjZXBvaW50IHByb2ZpbGluZyBzb3VyY2VzIgotCWRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgRVZFTlRfVFJBQ0lORwotCWRlZmF1bHQgeQotCWhlbHAKLQkgQWxsb3cgdGhlIHVzZSBvZiB0cmFjZXBvaW50cyBhcyBzb2Z0d2FyZSBwZXJmb3JtYW5jZSBldmVudHMuCi0KLQkgV2hlbiB0aGlzIGlzIGVuYWJsZWQsIHlvdSBjYW4gY3JlYXRlIHBlcmYgZXZlbnRzIGJhc2VkIG9uCi0JIHRyYWNlcG9pbnRzIHVzaW5nIFBFUkZfVFlQRV9UUkFDRVBPSU5UIGFuZCB0aGUgdHJhY2Vwb2ludCBJRAotCSBmb3VuZCBpbiBkZWJ1Z2ZzOi8vdHJhY2luZy9ldmVudHMvKi8qL2lkLiAoVGhlIC1lLy0tZXZlbnRzCi0JIG9wdGlvbiB0byB0aGUgcGVyZiB0b29sIGNhbiBwYXJzZSBhbmQgaW50ZXJwcmV0IHN5bWJvbGljCi0JIHRyYWNlcG9pbnRzLCBpbiB0aGUgc3Vic3lzdGVtOnRyYWNlcG9pbnRfbmFtZSBmb3JtYXQuKQotCiBjb25maWcgUEVSRl9DT1VOVEVSUwogCWJvb2wgIktlcm5lbCBwZXJmb3JtYW5jZSBjb3VudGVycyAob2xkIGNvbmZpZyBvcHRpb24pIgogCWRlcGVuZHMgb24gSEFWRV9QRVJGX0VWRU5UUwpAQCAtMTExMiw3ICsxMDk0LDcgQEAKIAkgIFNlZSBEb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiBjb25maWcgUFJPRklMSU5HCi0JYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQiCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAogCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCkBAIC0xMjYyLDQgKzEyNDQsOCBAQAogY29uZmlnIFBSRUVNUFRfTk9USUZJRVJTCiAJYm9vbAogCitjb25maWcgUEFEQVRBCisJZGVwZW5kcyBvbiBTTVAKKwlib29sCisKIHNvdXJjZSAia2VybmVsL0tjb25maWcubG9ja3MiCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IGRhYzQ0YTkuLmM3NWRjZDYgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC00MTYsNyArNDE2LDkgQEAKIAlrZXJuZWxfdGhyZWFkKGtlcm5lbF9pbml0LCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX1NJR0hBTkQpOwogCW51bWFfZGVmYXVsdF9wb2xpY3koKTsKIAlwaWQgPSBrZXJuZWxfdGhyZWFkKGt0aHJlYWRkLCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJa3RocmVhZGRfdGFzayA9IGZpbmRfdGFza19ieV9waWRfbnMocGlkLCAmaW5pdF9waWRfbnMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCXVubG9ja19rZXJuZWwoKTsKIAogCS8qCkBAIC02NTcsOSArNjU5LDkgQEAKIAlwcm9jX2NhY2hlc19pbml0KCk7CiAJYnVmZmVyX2luaXQoKTsKIAlrZXlfaW5pdCgpOworCXJhZGl4X3RyZWVfaW5pdCgpOwogCXNlY3VyaXR5X2luaXQoKTsKIAl2ZnNfY2FjaGVzX2luaXQodG90YWxyYW1fcGFnZXMpOwotCXJhZGl4X3RyZWVfaW5pdCgpOwogCXNpZ25hbHNfaW5pdCgpOwogCS8qIHJvb3RmcyBwb3B1bGF0aW5nIG1pZ2h0IG5lZWQgcGFnZS13cml0ZWJhY2sgKi8KIAlwYWdlX3dyaXRlYmFja19pbml0KCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggODY0ZmY3NS4uNmFlYmRlYiAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTAwLDYgKzEwMCw3IEBACiBvYmotJChDT05GSUdfUEVSRl9FVkVOVFMpICs9IHBlcmZfZXZlbnQubwogb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkgKz0gaHdfYnJlYWtwb2ludC5vCiBvYmotJChDT05GSUdfVVNFUl9SRVRVUk5fTk9USUZJRVIpICs9IHVzZXItcmV0dXJuLW5vdGlmaWVyLm8KK29iai0kKENPTkZJR19QQURBVEEpICs9IHBhZGF0YS5vCiAKIGlmbmVxICgkKENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIpLHkpCiAjIEFjY29yZGluZyB0byBBbGFuIE1vZHJhIDxhbGFuQGxpbnV4Y2FyZS5jb20uYXU+LCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXMKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCAxZmJjYzc0Li40ZmQ5MGUxIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTY2LDYgKzE2NywyMCBAQAogICovCiBzdGF0aWMgaW50IG5lZWRfZm9ya2V4aXRfY2FsbGJhY2sgX19yZWFkX21vc3RseTsKIAorI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCitpbnQgY2dyb3VwX2xvY2tfaXNfaGVsZCh2b2lkKQoreworCXJldHVybiBsb2NrZGVwX2lzX2hlbGQoJmNncm91cF9tdXRleCk7Cit9CisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgKi8KK2ludCBjZ3JvdXBfbG9ja19pc19oZWxkKHZvaWQpCit7CisJcmV0dXJuIG11dGV4X2lzX2xvY2tlZCgmY2dyb3VwX211dGV4KTsKK30KKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgKi8KKworRVhQT1JUX1NZTUJPTF9HUEwoY2dyb3VwX2xvY2tfaXNfaGVsZCk7CisKIC8qIGNvbnZlbmllbnQgdGVzdHMgZm9yIHRoZXNlIGJpdHMgKi8KIGlubGluZSBpbnQgY2dyb3VwX2lzX3JlbW92ZWQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCkKIHsKQEAgLTI5MzYsMTQgKzI5NTEsMTcgQEAKIAogCWZvcl9lYWNoX3N1YnN5cyhyb290LCBzcykgewogCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzID0gc3MtPmNyZWF0ZShzcywgY2dycCk7CisKIAkJaWYgKElTX0VSUihjc3MpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGNzcyk7CiAJCQlnb3RvIGVycl9kZXN0cm95OwogCQl9CiAJCWluaXRfY2dyb3VwX2Nzcyhjc3MsIHNzLCBjZ3JwKTsKLQkJaWYgKHNzLT51c2VfaWQpCi0JCQlpZiAoYWxsb2NfY3NzX2lkKHNzLCBwYXJlbnQsIGNncnApKQorCQlpZiAoc3MtPnVzZV9pZCkgeworCQkJZXJyID0gYWxsb2NfY3NzX2lkKHNzLCBwYXJlbnQsIGNncnApOworCQkJaWYgKGVycikKIAkJCQlnb3RvIGVycl9kZXN0cm95OworCQl9CiAJCS8qIEF0IGVycm9yLCAtPmRlc3Ryb3koKSBjYWxsYmFjayBoYXMgdG8gZnJlZSBhc3NpZ25lZCBJRC4gKi8KIAl9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCAxYzhkZGQ2Li42NzdmMjUzIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC0xNTEsMTMgKzE1MSwxMyBAQAogCiAJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCWZvcl9lYWNoX3Byb2Nlc3MocCkgewotCQlpZiAodGFza19jcHUocCkgPT0gY3B1ICYmCisJCWlmICh0YXNrX2NwdShwKSA9PSBjcHUgJiYgcC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HICYmCiAJCSAgICAoIWNwdXRpbWVfZXEocC0+dXRpbWUsIGNwdXRpbWVfemVybykgfHwKIAkJICAgICAhY3B1dGltZV9lcShwLT5zdGltZSwgY3B1dGltZV96ZXJvKSkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJUYXNrICVzIChwaWQgPSAlZCkgaXMgb24gY3B1ICVkXAotCQkJCShzdGF0ZSA9ICVsZCwgZmxhZ3MgPSAleCkgXG4iLAotCQkJCSBwLT5jb21tLCB0YXNrX3BpZF9ucihwKSwgY3B1LAotCQkJCSBwLT5zdGF0ZSwgcC0+ZmxhZ3MpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVGFzayAlcyAocGlkID0gJWQpIGlzIG9uIGNwdSAlZCAiCisJCQkJIihzdGF0ZSA9ICVsZCwgZmxhZ3MgPSAleClcbiIsCisJCQkJcC0+Y29tbSwgdGFza19waWRfbnIocCksIGNwdSwKKwkJCQlwLT5zdGF0ZSwgcC0+ZmxhZ3MpOwogCX0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmVkLmMgYi9rZXJuZWwvY3JlZC5jCmluZGV4IGRkNzZjZmUuLjFlZDhjYTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcmVkLmMKKysrIGIva2VybmVsL2NyZWQuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAjaWZkZWYgQ09ORklHX0tFWVMKIAluZXctPnRnY3JlZCA9IGt6YWxsb2Moc2l6ZW9mKCpuZXctPnRnY3JlZCksIEdGUF9LRVJORUwpOwogCWlmICghbmV3LT50Z2NyZWQpIHsKLQkJa2ZyZWUobmV3KTsKKwkJa21lbV9jYWNoZV9mcmVlKGNyZWRfamFyLCBuZXcpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJYXRvbWljX3NldCgmbmV3LT50Z2NyZWQtPnVzYWdlLCAxKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDU0Njc3NGEuLjQ1ZWQwNDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtODUsNyArODUsOSBAQAogCUJVR19PTighc2lnKTsKIAlCVUdfT04oIWF0b21pY19yZWFkKCZzaWctPmNvdW50KSk7CiAKLQlzaWdoYW5kID0gcmN1X2RlcmVmZXJlbmNlKHRzay0+c2lnaGFuZCk7CisJc2lnaGFuZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh0c2stPnNpZ2hhbmQsCisJCQkJCXJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJCWxvY2tkZXBfaXNfaGVsZCgmdGFza2xpc3RfbG9jaykpOwogCXNwaW5fbG9jaygmc2lnaGFuZC0+c2lnbG9jayk7CiAKIAlwb3NpeF9jcHVfdGltZXJzX2V4aXQodHNrKTsKQEAgLTE3MCw4ICsxNzIsMTAgQEAKIHJlcGVhdDoKIAl0cmFjZWhvb2tfcHJlcGFyZV9yZWxlYXNlX3Rhc2socCk7CiAJLyogZG9uJ3QgbmVlZCB0byBnZXQgdGhlIFJDVSByZWFkbG9jayBoZXJlIC0gdGhlIHByb2Nlc3MgaXMgZGVhZCBhbmQKLQkgKiBjYW4ndCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscyAqLworCSAqIGNhbid0IGJlIG1vZGlmeWluZyBpdHMgb3duIGNyZWRlbnRpYWxzLiBCdXQgc2h1dCBSQ1UtbG9ja2RlcCB1cCAqLworCXJjdV9yZWFkX2xvY2soKTsKIAlhdG9taWNfZGVjKCZfX3Rhc2tfY3JlZChwKS0+dXNlci0+cHJvY2Vzc2VzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXByb2NfZmx1c2hfdGFzayhwKTsKIApAQCAtNDczLDkgKzQ3NywxMSBAQAogCS8qCiAJICogSXQgaXMgc2FmZSB0byBkZXJlZmVyZW5jZSB0aGUgZmQgdGFibGUgd2l0aG91dCBSQ1Ugb3IKIAkgKiAtPmZpbGVfbG9jayBiZWNhdXNlIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZQotCSAqIGZpbGVzIHN0cnVjdHVyZS4KKwkgKiBmaWxlcyBzdHJ1Y3R1cmUuICBCdXQgdXNlIFJDVSB0byBzaHV0IFJDVS1sb2NrZGVwIHVwLgogCSAqLworCXJjdV9yZWFkX2xvY2soKTsKIAlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2V0OwogCQlpID0gaiAqIF9fTkZEQklUUzsKQEAgLTUyMSwxMCArNTI3LDEyIEBACiAJCSAqIGF0IHRoZSBlbmQgb2YgdGhlIFJDVSBncmFjZSBwZXJpb2QuIE90aGVyd2lzZSwKIAkJICogeW91IGNhbiBmcmVlIGZpbGVzIGltbWVkaWF0ZWx5LgogCQkgKi8KKwkJcmN1X3JlYWRfbG9jaygpOwogCQlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAkJaWYgKGZkdCAhPSAmZmlsZXMtPmZkdGFiKQogCQkJa21lbV9jYWNoZV9mcmVlKGZpbGVzX2NhY2hlcCwgZmlsZXMpOwogCQlmcmVlX2ZkdGFibGUoZmR0KTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCA1YjI5NTliLi4xN2JiZjA5IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTg2LDYgKzg2LDcgQEAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHByb2Nlc3NfY291bnRzKSA9IDA7CiAKIF9fY2FjaGVsaW5lX2FsaWduZWQgREVGSU5FX1JXTE9DSyh0YXNrbGlzdF9sb2NrKTsgIC8qIG91dGVyICovCitFWFBPUlRfU1lNQk9MX0dQTCh0YXNrbGlzdF9sb2NrKTsKIAogaW50IG5yX3Byb2Nlc3Nlcyh2b2lkKQogewpAQCAtMTI0MSwyMSArMTI0Miw2IEBACiAJLyogTmVlZCB0YXNrbGlzdCBsb2NrIGZvciBwYXJlbnQgZXRjIGhhbmRsaW5nISAqLwogCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAotCS8qCi0JICogVGhlIHRhc2sgaGFzbid0IGJlZW4gYXR0YWNoZWQgeWV0LCBzbyBpdHMgY3B1c19hbGxvd2VkIG1hc2sgd2lsbAotCSAqIG5vdCBiZSBjaGFuZ2VkLCBub3Igd2lsbCBpdHMgYXNzaWduZWQgQ1BVLgotCSAqCi0JICogVGhlIGNwdXNfYWxsb3dlZCBtYXNrIG9mIHRoZSBwYXJlbnQgbWF5IGhhdmUgY2hhbmdlZCBhZnRlciBpdCB3YXMKLQkgKiBjb3BpZWQgZmlyc3QgdGltZSAtIHNvIHJlLWNvcHkgaXQgaGVyZSwgdGhlbiBjaGVjayB0aGUgY2hpbGQncyBDUFUKLQkgKiB0byBlbnN1cmUgaXQgaXMgb24gYSB2YWxpZCBDUFUgKGFuZCBpZiBub3QsIGp1c3QgZm9yY2UgaXQgYmFjayB0bwotCSAqIHBhcmVudCdzIENQVSkuIFRoaXMgYXZvaWRzIGFsb3Qgb2YgbmFzdHkgcmFjZXMuCi0JICovCi0JcC0+Y3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IGN1cnJlbnQtPnJ0Lm5yX2NwdXNfYWxsb3dlZDsKLQlpZiAodW5saWtlbHkoIWNwdV9pc3NldCh0YXNrX2NwdShwKSwgcC0+Y3B1c19hbGxvd2VkKSB8fAotCQkJIWNwdV9vbmxpbmUodGFza19jcHUocCkpKSkKLQkJc2V0X3Rhc2tfY3B1KHAsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KIAkvKiBDTE9ORV9QQVJFTlQgcmUtdXNlcyB0aGUgb2xkIHBhcmVudCAqLwogCWlmIChjbG9uZV9mbGFncyAmIChDTE9ORV9QQVJFTlR8Q0xPTkVfVEhSRUFEKSkgewogCQlwLT5yZWFsX3BhcmVudCA9IGN1cnJlbnQtPnJlYWxfcGFyZW50OwpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCBkOWIzYTIyLi5lN2EzNWYxIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtNTMwLDggKzUzMCwyNSBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCQlXQVJOX09OKCFhdG9taWNfcmVhZCgmcGlfc3RhdGUtPnJlZmNvdW50KSk7Ci0JCQlXQVJOX09OKHBpZCAmJiBwaV9zdGF0ZS0+b3duZXIgJiYKLQkJCQlwaV9zdGF0ZS0+b3duZXItPnBpZCAhPSBwaWQpOworCisJCQkvKgorCQkJICogV2hlbiBwaV9zdGF0ZS0+b3duZXIgaXMgTlVMTCB0aGVuIHRoZSBvd25lciBkaWVkCisJCQkgKiBhbmQgYW5vdGhlciB3YWl0ZXIgaXMgb24gdGhlIGZseS4gcGlfc3RhdGUtPm93bmVyCisJCQkgKiBpcyBmaXhlZCB1cCBieSB0aGUgdGFzayB3aGljaCBhY3F1aXJlcworCQkJICogcGlfc3RhdGUtPnJ0X211dGV4LgorCQkJICoKKwkJCSAqIFdlIGRvIG5vdCBjaGVjayBmb3IgcGlkID09IDAgd2hpY2ggY2FuIGhhcHBlbiB3aGVuCisJCQkgKiB0aGUgb3duZXIgZGllZCBhbmQgcm9idXN0X2xpc3RfZXhpdCgpIGNsZWFyZWQgdGhlCisJCQkgKiBUSUQuCisJCQkgKi8KKwkJCWlmIChwaWQgJiYgcGlfc3RhdGUtPm93bmVyKSB7CisJCQkJLyoKKwkJCQkgKiBCYWlsIG91dCBpZiB1c2VyIHNwYWNlIG1hbmlwdWxhdGVkIHRoZQorCQkJCSAqIGZ1dGV4IHZhbHVlLgorCQkJCSAqLworCQkJCWlmIChwaWQgIT0gdGFza19waWRfdm5yKHBpX3N0YXRlLT5vd25lcikpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCiAJCQlhdG9taWNfaW5jKCZwaV9zdGF0ZS0+cmVmY291bnQpOwogCQkJKnBzID0gcGlfc3RhdGU7CkBAIC03NTgsNiArNzc1LDEzIEBACiAJaWYgKCFwaV9zdGF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKgorCSAqIElmIGN1cnJlbnQgZG9lcyBub3Qgb3duIHRoZSBwaV9zdGF0ZSB0aGVuIHRoZSBmdXRleCBpcworCSAqIGluY29uc2lzdGVudCBhbmQgdXNlciBzcGFjZSBmaWRkbGVkIHdpdGggdGhlIGZ1dGV4IHZhbHVlLgorCSAqLworCWlmIChwaV9zdGF0ZS0+b3duZXIgIT0gY3VycmVudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyYXdfc3Bpbl9sb2NrKCZwaV9zdGF0ZS0+cGlfbXV0ZXgud2FpdF9sb2NrKTsKIAluZXdfb3duZXIgPSBydF9tdXRleF9uZXh0X293bmVyKCZwaV9zdGF0ZS0+cGlfbXV0ZXgpOwogCkBAIC0xOTcxLDcgKzE5OTUsNyBAQAogCS8qIFVucXVldWUgYW5kIGRyb3AgdGhlIGxvY2sgKi8KIAl1bnF1ZXVlX21lX3BpKCZxKTsKIAotCWdvdG8gb3V0OworCWdvdG8gb3V0X3B1dF9rZXk7CiAKIG91dF91bmxvY2tfcHV0X2tleToKIAlxdWV1ZV91bmxvY2soJnEsIGhiKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9od19icmVha3BvaW50LmMgYi9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IDUwZGJkNTkuLjk2N2U2NjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMjQzLDM4ICsyNDMsNzAgQEAKICAqICAgICAgICgocGVyX2NwdShucl9icF9mbGV4aWJsZSwgKikgPiAxKSArIG1heChwZXJfY3B1KG5yX2NwdV9icF9waW5uZWQsICopKQogICogICAgICAgICAgICArIG1heChwZXJfY3B1KG5yX3Rhc2tfYnBfcGlubmVkLCAqKSkpIDwgSEJQX05VTQogICovCi1pbnQgcmVzZXJ2ZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3N0YXRpYyBpbnQgX19yZXNlcnZlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQogewogCXN0cnVjdCBicF9idXN5X3Nsb3RzIHNsb3RzID0gezB9OwotCWludCByZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmbnJfYnBfbXV0ZXgpOwogCiAJZmV0Y2hfYnBfYnVzeV9zbG90cygmc2xvdHMsIGJwKTsKIAogCS8qIEZsZXhpYmxlIGNvdW50ZXJzIG5lZWQgdG8ga2VlcCBhdCBsZWFzdCBvbmUgc2xvdCAqLwotCWlmIChzbG90cy5waW5uZWQgKyAoISFzbG90cy5mbGV4aWJsZSkgPT0gSEJQX05VTSkgewotCQlyZXQgPSAtRU5PU1BDOwotCQlnb3RvIGVuZDsKLQl9CisJaWYgKHNsb3RzLnBpbm5lZCArICghIXNsb3RzLmZsZXhpYmxlKSA9PSBIQlBfTlVNKQorCQlyZXR1cm4gLUVOT1NQQzsKIAogCXRvZ2dsZV9icF9zbG90KGJwLCB0cnVlKTsKIAotZW5kOgorCXJldHVybiAwOworfQorCitpbnQgcmVzZXJ2ZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmbnJfYnBfbXV0ZXgpOworCisJcmV0ID0gX19yZXNlcnZlX2JwX3Nsb3QoYnApOworCiAJbXV0ZXhfdW5sb2NrKCZucl9icF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBfX3JlbGVhc2VfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJdG9nZ2xlX2JwX3Nsb3QoYnAsIGZhbHNlKTsKK30KKwogdm9pZCByZWxlYXNlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQogewogCW11dGV4X2xvY2soJm5yX2JwX211dGV4KTsKIAotCXRvZ2dsZV9icF9zbG90KGJwLCBmYWxzZSk7CisJX19yZWxlYXNlX2JwX3Nsb3QoYnApOwogCiAJbXV0ZXhfdW5sb2NrKCZucl9icF9tdXRleCk7CiB9CiAKKy8qCisgKiBBbGxvdyB0aGUga2VybmVsIGRlYnVnZ2VyIHRvIHJlc2VydmUgYnJlYWtwb2ludCBzbG90cyB3aXRob3V0CisgKiB0YWtpbmcgYSBsb2NrIHVzaW5nIHRoZSBkYmdfKiB2YXJpYW50IG9mIGZvciB0aGUgcmVzZXJ2ZSBhbmQKKyAqIHJlbGVhc2UgYnJlYWtwb2ludCBzbG90cy4KKyAqLworaW50IGRiZ19yZXNlcnZlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCWlmIChtdXRleF9pc19sb2NrZWQoJm5yX2JwX211dGV4KSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIF9fcmVzZXJ2ZV9icF9zbG90KGJwKTsKK30KKworaW50IGRiZ19yZWxlYXNlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCWlmIChtdXRleF9pc19sb2NrZWQoJm5yX2JwX211dGV4KSkKKwkJcmV0dXJuIC0xOworCisJX19yZWxlYXNlX2JwX3Nsb3QoYnApOworCisJcmV0dXJuIDA7Cit9CiAKIGludCByZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQogewpAQCAtMjk2LDYgKzMyOCwxMCBAQAogCWlmICghYnAtPmF0dHIuZGlzYWJsZWQgfHwgIWJwLT5vdmVyZmxvd19oYW5kbGVyKQogCQlyZXQgPSBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncyhicCwgYnAtPmN0eC0+dGFzayk7CiAKKwkvKiBpZiBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncygpIGZhaWxzIHRoZW4gcmVsZWFzZSBicCBzbG90ICovCisJaWYgKHJldCkKKwkJcmVsZWFzZV9icF9zbG90KGJwKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyNCw4ICszNjAsOCBAQAogaW50IG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewogCXU2NCBvbGRfYWRkciA9IGJwLT5hdHRyLmJwX2FkZHI7CisJdTY0IG9sZF9sZW4gPSBicC0+YXR0ci5icF9sZW47CiAJaW50IG9sZF90eXBlID0gYnAtPmF0dHIuYnBfdHlwZTsKLQlpbnQgb2xkX2xlbiA9IGJwLT5hdHRyLmJwX2xlbjsKIAlpbnQgZXJyID0gMDsKIAogCXBlcmZfZXZlbnRfZGlzYWJsZShicCk7CmRpZmYgLS1naXQgYS9rZXJuZWwva2ZpZm8uYyBiL2tlcm5lbC9rZmlmby5jCmluZGV4IDMyYzVjMTUuLjM1ZWRiZTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZmlmby5jCisrKyBiL2tlcm5lbC9rZmlmby5jCkBAIC04MCw3ICs4MCw3IEBACiAKIAlidWZmZXIgPSBrbWFsbG9jKHNpemUsIGdmcF9tYXNrKTsKIAlpZiAoIWJ1ZmZlcikgewotCQlfa2ZpZm9faW5pdChmaWZvLCAwLCAwKTsKKwkJX2tmaWZvX2luaXQoZmlmbywgTlVMTCwgMCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtOTcsNiArOTcsNyBAQAogdm9pZCBrZmlmb19mcmVlKHN0cnVjdCBrZmlmbyAqZmlmbykKIHsKIAlrZnJlZShmaWZvLT5idWZmZXIpOworCV9rZmlmb19pbml0KGZpZm8sIE5VTEwsIDApOwogfQogRVhQT1JUX1NZTUJPTChrZmlmb19mcmVlKTsKIApAQCAtMzQ5LDYgKzM1MCw3IEBACiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KICAqIEBmcm9tOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgogICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEB0b3RhbDogdGhlIGFjdHVhbCByZXR1cm5lZCBkYXRhIGxlbmd0aC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gaW50byB0aGUKICAqIEZJRk8gZGVwZW5kaW5nIGFuZCByZXR1cm5zIC1FRkFVTFQvMC4KQEAgLTM5OSw3ICs0MDEsNyBAQAogICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCiAgKiBAdG86IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgogICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSBAIEBsZW5vdXQ6IHBvaW50ZXIgdG8gb3V0cHV0IHZhcmlhYmxlIHdpdGggY29waWVkIGRhdGEKKyAqIEBsZW5vdXQ6IHBvaW50ZXIgdG8gb3V0cHV0IHZhcmlhYmxlIHdpdGggY29waWVkIGRhdGEKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgRklGTyBpbnRvIHRoZQogICogQHRvIGJ1ZmZlciBhbmQgMCBvciAtRUZBVUxULgpkaWZmIC0tZ2l0IGEva2VybmVsL2tnZGIuYyBiL2tlcm5lbC9rZ2RiLmMKaW5kZXggMmViNTE3ZS4uNzYxZmRkMiAxMDA2NDQKLS0tIGEva2VybmVsL2tnZGIuYworKysgYi9rZXJuZWwva2dkYi5jCkBAIC01ODMsNiArNTgzLDkgQEAKIAlzbXBfd21iKCk7CiAJYXRvbWljX3NldCgmY3B1X2luX2tnZGJbY3B1XSwgMSk7CiAKKwkvKiBEaXNhYmxlIGFueSBjcHUgc3BlY2lmaWMgaHcgYnJlYWtwb2ludHMgKi8KKwlrZ2RiX2Rpc2FibGVfaHdfZGVidWcocmVncyk7CisKIAkvKiBXYWl0IHRpbGwgcHJpbWFyeSBDUFUgaXMgZG9uZSB3aXRoIGRlYnVnZ2luZyAqLwogCXdoaWxlIChhdG9taWNfcmVhZCgmcGFzc2l2ZV9jcHVfd2FpdFtjcHVdKSkKIAkJY3B1X3JlbGF4KCk7CkBAIC01OTYsNyArNTk5LDcgQEAKIAogCS8qIFNpZ25hbCB0aGUgcHJpbWFyeSBDUFUgdGhhdCB3ZSBhcmUgZG9uZTogKi8KIAlhdG9taWNfc2V0KCZjcHVfaW5fa2dkYltjcHVdLCAwKTsKLQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZ19zeW5jKCk7CiAJY2xvY2tzb3VyY2VfdG91Y2hfd2F0Y2hkb2coKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0xNDUwLDcgKzE0NTMsNyBAQAogCSAgICAoa2dkYl9pbmZvW2NwdV0udGFzayAmJgogCSAgICAga2dkYl9pbmZvW2NwdV0udGFzay0+cGlkICE9IGtnZGJfc3N0ZXBfcGlkKSAmJiAtLXNzdGVwX3RyaWVzKSB7CiAJCWF0b21pY19zZXQoJmtnZGJfYWN0aXZlLCAtMSk7Ci0JCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKKwkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZ19zeW5jKCk7CiAJCWNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nKCk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMTU1MCw3ICsxNTUzLDcgQEAKIAl9CiAJLyogRnJlZSBrZ2RiX2FjdGl2ZSAqLwogCWF0b21pY19zZXQoJmtnZGJfYWN0aXZlLCAtMSk7Ci0JdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2dfc3luYygpOwogCWNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBiN2RmMzAyLi5jY2VjNzc0IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC05Myw2ICs5NCw3IEBACiAJeyJuYXRpdmVfZ2V0X2RlYnVncmVnIix9LAogCXsiaXJxX2VudHJpZXNfc3RhcnQiLH0sCiAJeyJjb21tb25faW50ZXJydXB0Iix9LAorCXsibWNvdW50Iix9LAkvKiBtY291bnQgY2FuIGJlIGNhbGxlZCBmcm9tIGV2ZXJ5d2hlcmUgKi8KIAl7TlVMTH0gICAgLyogVGVybWluYXRvciAqLwogfTsKIApAQCAtMTI0LDMwICsxMjYsNiBAQAogc3RhdGljIGludCBrcHJvYmVfZ2FyYmFnZV9zbG90czsKIHN0YXRpYyBpbnQgY29sbGVjdF9nYXJiYWdlX3Nsb3RzKHZvaWQpOwogCi1zdGF0aWMgaW50IF9fa3Byb2JlcyBjaGVja19zYWZldHkodm9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKLSNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiBkZWZpbmVkKENPTkZJR19GUkVFWkVSKQotCXJldCA9IGZyZWV6ZV9wcm9jZXNzZXMoKTsKLQlpZiAocmV0ID09IDApIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqcTsKLQkJZG9fZWFjaF90aHJlYWQocCwgcSkgewotCQkJaWYgKHAgIT0gY3VycmVudCAmJiBwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcgJiYKLQkJCSAgICBwLT5waWQgIT0gMCkgewotCQkJCXByaW50aygiQ2hlY2sgZmFpbGVkOiAlcyBpcyBydW5uaW5nXG4iLHAtPmNvbW0pOwotCQkJCXJldCA9IC0xOwotCQkJCWdvdG8gbG9vcF9lbmQ7Ci0JCQl9Ci0JCX0gd2hpbGVfZWFjaF90aHJlYWQocCwgcSk7Ci0JfQotbG9vcF9lbmQ6Ci0JdGhhd19wcm9jZXNzZXMoKTsKLSNlbHNlCi0Jc3luY2hyb25pemVfc2NoZWQoKTsKLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KIC8qKgogICogX19nZXRfaW5zbl9zbG90KCkgLSBGaW5kIGEgc2xvdCBvbiBhbiBleGVjdXRhYmxlIHBhZ2UgZm9yIGFuIGluc3RydWN0aW9uLgogICogV2UgYWxsb2NhdGUgYW4gZXhlY3V0YWJsZSBwYWdlIGlmIHRoZXJlJ3Mgbm8gcm9vbSBvbiBleGlzdGluZyBvbmVzLgpAQCAtMjM1LDkgKzIxMyw4IEBACiB7CiAJc3RydWN0IGtwcm9iZV9pbnNuX3BhZ2UgKmtpcCwgKm5leHQ7CiAKLQkvKiBFbnN1cmUgbm8tb25lIGlzIHByZWVwbXRlZCBvbiB0aGUgZ2FyYmFnZXMgKi8KLQlpZiAoY2hlY2tfc2FmZXR5KCkpCi0JCXJldHVybiAtRUFHQUlOOworCS8qIEVuc3VyZSBuby1vbmUgaXMgaW50ZXJydXB0ZWQgb24gdGhlIGdhcmJhZ2VzICovCisJc3luY2hyb25pemVfc2NoZWQoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShraXAsIG5leHQsICZrcHJvYmVfaW5zbl9wYWdlcywgbGlzdCkgewogCQlpbnQgaTsKQEAgLTcyOCw3ICs3MDUsOCBAQAogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaWYgKCFrZXJuZWxfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKSB8fAotCSAgICBpbl9rcHJvYmVzX2Z1bmN0aW9ucygodW5zaWduZWQgbG9uZykgcC0+YWRkcikpIHsKKwkgICAgaW5fa3Byb2Jlc19mdW5jdGlvbnMoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpIHx8CisJICAgIGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHAtPmFkZHIsIHAtPmFkZHIpKSB7CiAJCXByZWVtcHRfZW5hYmxlKCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9rc3lzZnMuYyBiL2tlcm5lbC9rc3lzZnMuYwppbmRleCAzZmVhZjVhLi42YjFjY2MzIDEwMDY0NAotLS0gYS9rZXJuZWwva3N5c2ZzLmMKKysrIGIva2VybmVsL2tzeXNmcy5jCkBAIC0xOTcsMTYgKzE5Nyw4IEBACiAJCQlnb3RvIGdyb3VwX2V4aXQ7CiAJfQogCi0JLyogY3JlYXRlIHRoZSAvc3lzL2tlcm5lbC91aWRzLyBkaXJlY3RvcnkgKi8KLQllcnJvciA9IHVpZHNfc3lzZnNfaW5pdCgpOwotCWlmIChlcnJvcikKLQkJZ290byBub3Rlc19leGl0OwotCiAJcmV0dXJuIDA7CiAKLW5vdGVzX2V4aXQ6Ci0JaWYgKG5vdGVzX3NpemUgPiAwKQotCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoa2VybmVsX2tvYmosICZub3Rlc19hdHRyKTsKIGdyb3VwX2V4aXQ6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKGtlcm5lbF9rb2JqLCAma2VybmVsX2F0dHJfZ3JvdXApOwoga3NldF9leGl0OgpkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggZmJiNjIyMi4uODJlZDBlYSAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjogVGhpcyBoZWxwZXIgZnVuY3Rpb24gY3JlYXRlcyBhbmQgbmFtZXMgYSBrZXJuZWwKICAqIHRocmVhZC4gIFRoZSB0aHJlYWQgd2lsbCBiZSBzdG9wcGVkOiB1c2Ugd2FrZV91cF9wcm9jZXNzKCkgdG8gc3RhcnQKLSAqIGl0LiAgU2VlIGFsc28ga3RocmVhZF9ydW4oKSwga3RocmVhZF9jcmVhdGVfb25fY3B1KCkuCisgKiBpdC4gIFNlZSBhbHNvIGt0aHJlYWRfcnVuKCkuCiAgKgogICogV2hlbiB3b2tlbiwgdGhlIHRocmVhZCB3aWxsIHJ1biBAdGhyZWFkZm4oKSB3aXRoIEBkYXRhIGFzIGl0cwogICogYXJndW1lbnQuIEB0aHJlYWRmbigpIGNhbiBlaXRoZXIgY2FsbCBkb19leGl0KCkgZGlyZWN0bHkgaWYgaXQgaXMgYQpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggNWZlYWRkYy4uMGMzMGQwNCAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0yMTQ3LDcgKzIxNDcsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHByaW50X2lycV9pbnZlcnNpb25fYnVnKGN1cnIsICZyb290LCB0YXJnZXRfZW50cnksCi0JCQkJCXRoaXMsIDEsIGlycWNsYXNzKTsKKwkJCQkJdGhpcywgMCwgaXJxY2xhc3MpOwogfQogCiB2b2lkIHByaW50X2lycXRyYWNlX2V2ZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCkBAIC0zODA5LDMgKzM4MDksMjEgQEAKIAkJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOwogCX0KIH0KKwordm9pZCBsb2NrZGVwX3JjdV9kZXJlZmVyZW5jZShjb25zdCBjaGFyICpmaWxlLCBjb25zdCBpbnQgbGluZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OworCisJaWYgKCFkZWJ1Z19sb2Nrc19vZmYoKSkKKwkJcmV0dXJuOworCXByaW50aygiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ayggICJbIElORk86IHN1c3BpY2lvdXMgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgdXNhZ2UuIF1cbiIpOworCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50aygiJXM6JWQgaW52b2tlZCByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB3aXRob3V0IHByb3RlY3Rpb24hXG4iLAorCQkJZmlsZSwgbGluZSk7CisJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG5cbiIpOworCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKKwlwcmludGsoIlxuc3RhY2sgYmFja3RyYWNlOlxuIik7CisJZHVtcF9zdGFjaygpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yY3VfZGVyZWZlcmVuY2UpOwpkaWZmIC0tZ2l0IGEva2VybmVsL25vdGlmaWVyLmMgYi9rZXJuZWwvbm90aWZpZXIuYwppbmRleCBhY2QyNGU3Li4yNDg4YmE3IDEwMDY0NAotLS0gYS9rZXJuZWwvbm90aWZpZXIuYworKysgYi9rZXJuZWwvbm90aWZpZXIuYwpAQCAtNzgsMTAgKzc4LDEwIEBACiAJaW50IHJldCA9IE5PVElGWV9ET05FOwogCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsICpuZXh0X25iOwogCi0JbmIgPSByY3VfZGVyZWZlcmVuY2UoKm5sKTsKKwluYiA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKm5sKTsKIAogCXdoaWxlIChuYiAmJiBucl90b19jYWxsKSB7Ci0JCW5leHRfbmIgPSByY3VfZGVyZWZlcmVuY2UobmItPm5leHQpOworCQluZXh0X25iID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhuYi0+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+bG9jayk7CisKKwlyZXR1cm4gcGluc3Q7CisKK2Vycl9mcmVlX3BkOgorCXBhZGF0YV9mcmVlX3BkKHBkKTsKK2Vycl9mcmVlX2luc3Q6CisJa2ZyZWUocGluc3QpOworZXJyOgorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfYWxsb2MpOworCisvKgorICogcGFkYXRhX2ZyZWUgLSBmcmVlIGEgcGFkYXRhIGluc3RhbmNlCisgKgorICogQCBwYWRhdGFfaW5zdDogcGFkYXRhIGluc3RhbmNlIHRvIGZyZWUKKyAqLwordm9pZCBwYWRhdGFfZnJlZShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK3sKKwlwYWRhdGFfc3RvcChwaW5zdCk7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcGluc3QtPnBkLT5yZWZjbnQpICE9IDApCisJCXlpZWxkKCk7CisKKwl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGluc3QtPmNwdV9ub3RpZmllcik7CisJcGFkYXRhX2ZyZWVfcGQocGluc3QtPnBkKTsKKwlrZnJlZShwaW5zdCk7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9mcmVlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGQyNzc0NmIuLmE2NjFlNzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtOTgsMTEgKzk4LDEyIEBACiAKIHZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXAoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KIHZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXBfb25saW5lKGludCBjcHUpCXsgYmFycmllcigpOyB9Cit2b2lkIF9fd2VhayBod19wZXJmX2V2ZW50X3NldHVwX29mZmxpbmUoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KIAogaW50IF9fd2VhawogaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAogCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0OCw3ICsyNDksNyBAQAogCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIGNwdV9jbG9jayhzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiAKIC8qCkBAIC0yODksNiArMjkwLDE1IEBACiAJZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyA9IHJ1bl9lbmQgLSBldmVudC0+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+dGFzayA9IHRhc2s7CkBAIC0zMjU5LDggKzM0MDcsNiBAQAogCXRhc2tfZXZlbnQtPmV2ZW50X2lkLnRpZCA9IHBlcmZfZXZlbnRfdGlkKGV2ZW50LCB0YXNrKTsKIAl0YXNrX2V2ZW50LT5ldmVudF9pZC5wdGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIGN1cnJlbnQpOwogCi0JdGFza19ldmVudC0+ZXZlbnRfaWQudGltZSA9IHBlcmZfY2xvY2soKTsKLQogCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCB0YXNrX2V2ZW50LT5ldmVudF9pZCk7CiAKIAlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7CkBAIC0zMjY4LDcgKzM0MTQsNyBAQAogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfdGFza19tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0JaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKQEAgLTMzMDAsNyArMzQ0Niw3IEBACiAJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXBlcmZfZXZlbnRfdGFza19jdHgoJmNwdWN0eC0+Y3R4LCB0YXNrX2V2ZW50KTsKIAlpZiAoIWN0eCkKLQkJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKHRhc2tfZXZlbnQtPnRhc2stPnBlcmZfZXZlbnRfY3R4cCk7CisJCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5wZXJmX2V2ZW50X2N0eHApOwogCWlmIChjdHgpCiAJCXBlcmZfZXZlbnRfdGFza19jdHgoY3R4LCB0YXNrX2V2ZW50KTsKIAlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKQEAgLTMzMzEsNiArMzQ3Nyw3IEBACiAJCQkvKiAucHBpZCAqLwogCQkJLyogLnRpZCAgKi8KIAkJCS8qIC5wdGlkICovCisJCQkudGltZSA9IHBlcmZfY2xvY2soKSwKIAkJfSwKIAl9OwogCkBAIC0zMzgwLDcgKzM1MjcsNyBAQAogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0JaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKQEAgLTM1MDAsNyArMzY0Nyw3IEBACiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfbW1hcF9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCkKIHsKLQlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCWlmIChldmVudC0+c3RhdGUgPCBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQogCQlyZXR1cm4gMDsKIAogCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQpAQCAtMzYwOSw3ICszNzU2LDcgQEAKIAkJCS8qIC50aWQgKi8KIAkJCS5zdGFydCAgPSB2bWEtPnZtX3N0YXJ0LAogCQkJLmxlbiAgICA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJCS5wZ29mZiAgPSB2bWEtPnZtX3Bnb2ZmLAorCQkJLnBnb2ZmICA9ICh1NjQpdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZULAogCQl9LAogCX07CiAKQEAgLTM2ODksMTIgKzM4MzYsMTIgQEAKIAogCWlmIChldmVudC0+YXR0ci5mcmVxKSB7CiAJCXU2NCBub3cgPSBwZXJmX2Nsb2NrKCk7Ci0JCXM2NCBkZWx0YSA9IG5vdyAtIGh3Yy0+ZnJlcV9zdGFtcDsKKwkJczY0IGRlbHRhID0gbm93IC0gaHdjLT5mcmVxX3RpbWVfc3RhbXA7CiAKLQkJaHdjLT5mcmVxX3N0YW1wID0gbm93OworCQlod2MtPmZyZXFfdGltZV9zdGFtcCA9IG5vdzsKIAotCQlpZiAoZGVsdGEgPiAwICYmIGRlbHRhIDwgVElDS19OU0VDKQotCQkJcGVyZl9hZGp1c3RfcGVyaW9kKGV2ZW50LCBOU0VDX1BFUl9TRUMgLyAoaW50KWRlbHRhKTsKKwkJaWYgKGRlbHRhID4gMCAmJiBkZWx0YSA8IDIqVElDS19OU0VDKQorCQkJcGVyZl9hZGp1c3RfcGVyaW9kKGV2ZW50LCBkZWx0YSwgaHdjLT5sYXN0X3BlcmlvZCk7CiAJfQogCiAJLyoKQEAgLTQxODUsNyArNDMzMiw3IEBACiAJLnJlYWQJCT0gdGFza19jbG9ja19wZXJmX2V2ZW50X3JlYWQsCiB9OwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwogCiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsCiAJCQkgIGludCBlbnRyeV9zaXplKQpAQCAtNDI5MCw3ICs0NDM3LDcgQEAKIHsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgKi8KIAogI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKIHN0YXRpYyB2b2lkIGJwX3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC00NTgwLDcgKzQ3MjcsNyBAQAogCWlmIChhdHRyLT50eXBlID49IFBFUkZfVFlQRV9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGF0dHItPl9fcmVzZXJ2ZWRfMSB8fCBhdHRyLT5fX3Jlc2VydmVkXzIpCisJaWYgKGF0dHItPl9fcmVzZXJ2ZWRfMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXR0ci0+c2FtcGxlX3R5cGUgJiB+KFBFUkZfU0FNUExFX01BWC0xKSkKQEAgLTQ4NzEsOCArNTAxOCwxNSBAQAogCWVsc2UKIAkJY2hpbGRfZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CiAKLQlpZiAocGFyZW50X2V2ZW50LT5hdHRyLmZyZXEpCi0JCWNoaWxkX2V2ZW50LT5ody5zYW1wbGVfcGVyaW9kID0gcGFyZW50X2V2ZW50LT5ody5zYW1wbGVfcGVyaW9kOworCWlmIChwYXJlbnRfZXZlbnQtPmF0dHIuZnJlcSkgeworCQl1NjQgc2FtcGxlX3BlcmlvZCA9IHBhcmVudF9ldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKKwkJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZjaGlsZF9ldmVudC0+aHc7CisKKwkJaHdjLT5zYW1wbGVfcGVyaW9kID0gc2FtcGxlX3BlcmlvZDsKKwkJaHdjLT5sYXN0X3BlcmlvZCAgID0gc2FtcGxlX3BlcmlvZDsKKworCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIHNhbXBsZV9wZXJpb2QpOworCX0KIAogCWNoaWxkX2V2ZW50LT5vdmVyZmxvd19oYW5kbGVyID0gcGFyZW50X2V2ZW50LT5vdmVyZmxvd19oYW5kbGVyOwogCkBAIC01MDQwLDcgKzUxOTQsMTEgQEAKIAltdXRleF9sb2NrX25lc3RlZCgmY2hpbGRfY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiBhZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+Z3JvdXBfbGlzdCwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+cGlubmVkX2dyb3VwcywKKwkJCQkgZ3JvdXBfZW50cnkpCisJCV9fcGVyZl9ldmVudF9leGl0X3Rhc2soY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCwgY2hpbGQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoaWxkX2V2ZW50LCB0bXAsICZjaGlsZF9jdHgtPmZsZXhpYmxlX2dyb3VwcywKIAkJCQkgZ3JvdXBfZW50cnkpCiAJCV9fcGVyZl9ldmVudF9leGl0X3Rhc2soY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCwgY2hpbGQpOwogCkBAIC01MDQ5LDcgKzUyMDcsOCBAQAogCSAqIGl0cyBzaWJsaW5ncyB0byB0aGUgbGlzdCwgYnV0IHdlIG9idGFpbmVkICd0bXAnIGJlZm9yZSB0aGF0IHdoaWNoCiAJICogd2lsbCBzdGlsbCBwb2ludCB0byB0aGUgbGlzdCBoZWFkIHRlcm1pbmF0aW5nIHRoZSBpdGVyYXRpb24uCiAJICovCi0JaWYgKCFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPmdyb3VwX2xpc3QpKQorCWlmICghbGlzdF9lbXB0eSgmY2hpbGRfY3R4LT5waW5uZWRfZ3JvdXBzKSB8fAorCSAgICAhbGlzdF9lbXB0eSgmY2hpbGRfY3R4LT5mbGV4aWJsZV9ncm91cHMpKQogCQlnb3RvIGFnYWluOwogCiAJbXV0ZXhfdW5sb2NrKCZjaGlsZF9jdHgtPm11dGV4KTsKQEAgLTUwNTcsNiArNTIxNiwyNCBAQAogCXB1dF9jdHgoY2hpbGRfY3R4KTsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9mcmVlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudCA9IGV2ZW50LT5wYXJlbnQ7CisKKwlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKKwlsaXN0X2RlbF9pbml0KCZldmVudC0+Y2hpbGRfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKKworCWZwdXQocGFyZW50LT5maWxwKTsKKworCWxpc3RfZGVsX2V2ZW50KGV2ZW50LCBjdHgpOworCWZyZWVfZXZlbnQoZXZlbnQpOworfQorCiAvKgogICogZnJlZSBhbiB1bmV4cG9zZWQsIHVudXNlZCBjb250ZXh0IGFzIGNyZWF0ZWQgYnkgaW5oZXJpdGFuY2UgYnkKICAqIGluaXRfdGFzayBiZWxvdywgdXNlZCBieSBmb3JrKCkgaW4gY2FzZSBvZiBmYWlsLgpAQCAtNTA3MSwyMyArNTI0OCwxNSBAQAogCiAJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CiBhZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIHRtcCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudCA9IGV2ZW50LT5wYXJlbnQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KQorCQlwZXJmX2ZyZWVfZXZlbnQoZXZlbnQsIGN0eCk7CiAKLQkJaWYgKFdBUk5fT05fT05DRSghcGFyZW50KSkKLQkJCWNvbnRpbnVlOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsCisJCQkJIGdyb3VwX2VudHJ5KQorCQlwZXJmX2ZyZWVfZXZlbnQoZXZlbnQsIGN0eCk7CiAKLQkJbXV0ZXhfbG9jaygmcGFyZW50LT5jaGlsZF9tdXRleCk7Ci0JCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5jaGlsZF9saXN0KTsKLQkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKLQotCQlmcHV0KHBhcmVudC0+ZmlscCk7Ci0KLQkJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7Ci0JCWZyZWVfZXZlbnQoZXZlbnQpOwotCX0KLQotCWlmICghbGlzdF9lbXB0eSgmY3R4LT5ncm91cF9saXN0KSkKKwlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+cGlubmVkX2dyb3VwcykgfHwKKwkgICAgIWxpc3RfZW1wdHkoJmN0eC0+ZmxleGlibGVfZ3JvdXBzKSkKIAkJZ290byBhZ2FpbjsKIAogCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7CkBAIC01MDk1LDEyICs1MjY0LDU0IEBACiAJcHV0X2N0eChjdHgpOwogfQogCitzdGF0aWMgaW50Citpbmhlcml0X3Rhc2tfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwKKwkJICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqcGFyZW50X2N0eCwKKwkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJICAgaW50ICppbmhlcml0ZWRfYWxsKQoreworCWludCByZXQ7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4ID0gY2hpbGQtPnBlcmZfZXZlbnRfY3R4cDsKKworCWlmICghZXZlbnQtPmF0dHIuaW5oZXJpdCkgeworCQkqaW5oZXJpdGVkX2FsbCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICghY2hpbGRfY3R4KSB7CisJCS8qCisJCSAqIFRoaXMgaXMgZXhlY3V0ZWQgZnJvbSB0aGUgcGFyZW50IHRhc2sgY29udGV4dCwgc28KKwkJICogaW5oZXJpdCBldmVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBjbG9uaW5nLgorCQkgKiBGaXJzdCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNvbnRleHQgZm9yIHRoZQorCQkgKiBjaGlsZC4KKwkJICovCisKKwkJY2hpbGRfY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCksCisJCQkJICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaWxkX2N0eCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7CisJCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHAgPSBjaGlsZF9jdHg7CisJCWdldF90YXNrX3N0cnVjdChjaGlsZCk7CisJfQorCisJcmV0ID0gaW5oZXJpdF9ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LAorCQkJICAgIGNoaWxkLCBjaGlsZF9jdHgpOworCisJaWYgKHJldCkKKwkJKmluaGVyaXRlZF9hbGwgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgcGVyZl9ldmVudCBjb250ZXh0IGluIHRhc2tfc3RydWN0CiAgKi8KIGludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCA9IE5VTEwsICpwYXJlbnRfY3R4OworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCwgKnBhcmVudF9jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2xvbmVkX2N0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQgPSBjdXJyZW50OwpAQCAtNTEzOCw0MSArNTM0OSwyMiBAQAogCSAqIFdlIGRvbnQgaGF2ZSB0byBkaXNhYmxlIE5NSXMgLSB3ZSBhcmUgb25seSBsb29raW5nIGF0CiAJICogdGhlIGxpc3QsIG5vdCBtYW5pcHVsYXRpbmcgaXQ6CiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0KLQkJaWYgKCFldmVudC0+YXR0ci5pbmhlcml0KSB7Ci0JCQlpbmhlcml0ZWRfYWxsID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFjaGlsZC0+cGVyZl9ldmVudF9jdHhwKSB7Ci0JCQkvKgotCQkJICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbwotCQkJICogaW5oZXJpdCBldmVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBjbG9uaW5nLgotCQkJICogRmlyc3QgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBjb250ZXh0IGZvciB0aGUKLQkJCSAqIGNoaWxkLgotCQkJICovCi0KLQkJCWNoaWxkX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLAotCQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWNoaWxkX2N0eCkgewotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7Ci0JCQljaGlsZC0+cGVyZl9ldmVudF9jdHhwID0gY2hpbGRfY3R4OwotCQkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKLQkJfQotCi0JCXJldCA9IGluaGVyaXRfZ3JvdXAoZXZlbnQsIHBhcmVudCwgcGFyZW50X2N0eCwKLQkJCQkJICAgICBjaGlsZCwgY2hpbGRfY3R4KTsKLQkJaWYgKHJldCkgewotCQkJaW5oZXJpdGVkX2FsbCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCXJldCA9IGluaGVyaXRfdGFza19ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LCBjaGlsZCwKKwkJCQkJICZpbmhlcml0ZWRfYWxsKTsKKwkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQl9CiAJfQogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPmZsZXhpYmxlX2dyb3VwcywgZ3JvdXBfZW50cnkpIHsKKwkJcmV0ID0gaW5oZXJpdF90YXNrX2dyb3VwKGV2ZW50LCBwYXJlbnQsIHBhcmVudF9jdHgsIGNoaWxkLAorCQkJCQkgJmluaGVyaXRlZF9hbGwpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJY2hpbGRfY3R4ID0gY2hpbGQtPnBlcmZfZXZlbnRfY3R4cDsKKwogCWlmIChjaGlsZF9jdHggJiYgaW5oZXJpdGVkX2FsbCkgewogCQkvKgogCQkgKiBNYXJrIHRoZSBjaGlsZCBjb250ZXh0IGFzIGEgY2xvbmUgb2YgdGhlIHBhcmVudApAQCAtNTIyMSw3ICs1NDEzLDkgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSAmY3B1Y3R4LT5jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqdG1wOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5waW5uZWRfZ3JvdXBzLCBncm91cF9lbnRyeSkKKwkJX19wZXJmX2V2ZW50X3JlbW92ZV9mcm9tX2NvbnRleHQoZXZlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsIGdyb3VwX2VudHJ5KQogCQlfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChldmVudCk7CiB9CiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2V4aXRfY3B1KGludCBjcHUpCkBAIC01MjU5LDYgKzU0NTMsMTAgQEAKIAkJcGVyZl9ldmVudF9leGl0X2NwdShjcHUpOwogCQlicmVhazsKIAorCWNhc2UgQ1BVX0RFQUQ6CisJCWh3X3BlcmZfZXZlbnRfc2V0dXBfb2ZmbGluZShjcHUpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCAyZTE3YzljLi5iMDhlNjk3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0zNjcsNyArMzY3LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlc3VsdCA9IE5VTEw7CiAJaWYgKHBpZCkgewogCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3Q7Ci0JCWZpcnN0ID0gcmN1X2RlcmVmZXJlbmNlKHBpZC0+dGFza3NbdHlwZV0uZmlyc3QpOworCQlmaXJzdCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwaWQtPnRhc2tzW3R5cGVdLmZpcnN0LCByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fCBsb2NrZGVwX2lzX2hlbGQoJnRhc2tsaXN0X2xvY2spKTsKIAkJaWYgKGZpcnN0KQogCQkJcmVzdWx0ID0gaGxpc3RfZW50cnkoZmlyc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkc1sodHlwZSldLm5vZGUpOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggOTFlMDlkMy4uNWMzNmVhOSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTI3LDYgKzI3LDE1IEBACiAJY29kZS4gVGhpcyBpcyBoZWxwZnVsIHdoZW4gZGVidWdnaW5nIGFuZCByZXBvcnRpbmcgUE0gYnVncywgbGlrZQogCXN1c3BlbmQgc3VwcG9ydC4KIAorY29uZmlnIFBNX0FEVkFOQ0VEX0RFQlVHCisJYm9vbCAiRXh0cmEgUE0gYXR0cmlidXRlcyBpbiBzeXNmcyBmb3IgbG93LWxldmVsIGRlYnVnZ2luZy90ZXN0aW5nIgorCWRlcGVuZHMgb24gUE1fREVCVUcKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJQWRkIGV4dHJhIHN5c2ZzIGF0dHJpYnV0ZXMgYWxsb3dpbmcgb25lIHRvIGFjY2VzcyBzb21lIFBvd2VyIE1hbmFnZW1lbnQKKwlmaWVsZHMgb2YgZGV2aWNlIG9iamVjdHMgZnJvbSB1c2VyIHNwYWNlLiAgSWYgeW91IGFyZSBub3QgYSBrZXJuZWwKKwlkZXZlbG9wZXIgaW50ZXJlc3RlZCBpbiBkZWJ1Z2dpbmcvdGVzdGluZyBQb3dlciBNYW5hZ2VtZW50LCBzYXkgIm5vIi4KKwogY29uZmlnIFBNX1ZFUkJPU0UKIAlib29sICJWZXJib3NlIFBvd2VyIE1hbmFnZW1lbnQgZGVidWdnaW5nIgogCWRlcGVuZHMgb24gUE1fREVCVUcKQEAgLTg1LDYgKzk0LDExIEBACiAJZGVwZW5kcyBvbiBTVVNQRU5EIHx8IEhJQkVSTkFUSU9OIHx8IFhFTl9TQVZFX1JFU1RPUkUKIAlkZWZhdWx0IHkKIAorY29uZmlnIFBNX1NMRUVQX0FEVkFOQ0VEX0RFQlVHCisJYm9vbAorCWRlcGVuZHMgb24gUE1fQURWQU5DRURfREVCVUcKKwlkZWZhdWx0IG4KKwogY29uZmlnIFNVU1BFTkQKIAlib29sICJTdXNwZW5kIHRvIFJBTSBhbmQgc3RhbmRieSIKIAlkZXBlbmRzIG9uIFBNICYmIEFSQ0hfU1VTUEVORF9QT1NTSUJMRQpAQCAtMjIyLDMgKzIzNiw4IEBACiAJICBhbmQgdGhlIGJ1cyB0eXBlIGRyaXZlcnMgb2YgdGhlIGJ1c2VzIHRoZSBkZXZpY2VzIGFyZSBvbiBhcmUKIAkgIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIGhhbmRsaW5nIG9mIHRoZSBhdXRvc3VzcGVuZCByZXF1ZXN0cyBhbmQKIAkgIHdha2UtdXAgZXZlbnRzLgorCitjb25maWcgUE1fT1BTCisJYm9vbAorCWRlcGVuZHMgb24gUE1fU0xFRVAgfHwgUE1fUlVOVElNRQorCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggMDk5OGM3MS4uYjU4ODAwYiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC00NCw2ICs0NCwzMiBAQAogCQkJPT0gTk9USUZZX0JBRCkgPyAtRUlOVkFMIDogMDsKIH0KIAorLyogSWYgc2V0LCBkZXZpY2VzIG1heSBiZSBzdXNwZW5kZWQgYW5kIHJlc3VtZWQgYXN5bmNocm9ub3VzbHkuICovCitpbnQgcG1fYXN5bmNfZW5hYmxlZCA9IDE7CisKK3N0YXRpYyBzc2l6ZV90IHBtX2FzeW5jX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwbV9hc3luY19lbmFibGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgcG1fYXN5bmNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJcG1fYXN5bmNfZW5hYmxlZCA9IHZhbDsKKwlyZXR1cm4gbjsKK30KKworcG93ZXJfYXR0cihwbV9hc3luYyk7CisKICNpZmRlZiBDT05GSUdfUE1fREVCVUcKIGludCBwbV90ZXN0X2xldmVsID0gVEVTVF9OT05FOwogCkBAIC0yMDgsOSArMjM0LDEyIEBACiAjaWZkZWYgQ09ORklHX1BNX1RSQUNFCiAJJnBtX3RyYWNlX2F0dHIuYXR0ciwKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiBkZWZpbmVkKENPTkZJR19QTV9ERUJVRykKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKwkmcG1fYXN5bmNfYXR0ci5hdHRyLAorI2lmZGVmIENPTkZJR19QTV9ERUJVRwogCSZwbV90ZXN0X2F0dHIuYXR0ciwKICNlbmRpZgorI2VuZGlmCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggMzZjYjE2OC4uODMwY2FkZSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTExODEsNyArMTE4MSw3IEBACiAKIAltZW1vcnlfYm1fcG9zaXRpb25fcmVzZXQoJmNvcHlfYm0pOwogCi0Jd2hpbGUgKHRvX2ZyZWVfbm9ybWFsID4gMCAmJiB0b19mcmVlX2hpZ2htZW0gPiAwKSB7CisJd2hpbGUgKHRvX2ZyZWVfbm9ybWFsID4gMCB8fCB0b19mcmVlX2hpZ2htZW0gPiAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGZuID0gbWVtb3J5X2JtX25leHRfcGZuKCZjb3B5X2JtKTsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCkBAIC0xNTAwLDcgKzE1MDAsNyBAQAogewogCXVuc2lnbmVkIGludCBucl9wYWdlcywgbnJfaGlnaG1lbTsKIAotCXByaW50ayhLRVJOX0lORk8gIlBNOiBDcmVhdGluZyBoaWJlcm5hdGlvbiBpbWFnZTogXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJQTTogQ3JlYXRpbmcgaGliZXJuYXRpb24gaW1hZ2U6XG4iKTsKIAogCWRyYWluX2xvY2FsX3BhZ2VzKE5VTEwpOwogCW5yX3BhZ2VzID0gY291bnRfZGF0YV9wYWdlcygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3YXAuYyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKaW5kZXggMDliMmIwYS4uMWQ1NzU3MyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N3YXAuYworKysgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCkBAIC02NTcsMTAgKzY1Nyw2IEBACiAJc3RydWN0IHN3c3VzcF9pbmZvICpoZWFkZXI7CiAKIAkqZmxhZ3NfcCA9IHN3c3VzcF9oZWFkZXItPmZsYWdzOwotCWlmIChJU19FUlIocmVzdW1lX2JkZXYpKSB7Ci0JCXByX2RlYnVnKCJQTTogSW1hZ2UgZGV2aWNlIG5vdCBpbml0aWFsaXNlZFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHJlc3VtZV9iZGV2KTsKLQl9CiAKIAltZW1zZXQoJnNuYXBzaG90LCAwLCBzaXplb2Yoc3RydWN0IHNuYXBzaG90X2hhbmRsZSkpOwogCWVycm9yID0gc25hcHNob3Rfd3JpdGVfbmV4dCgmc25hcHNob3QsIFBBR0VfU0laRSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dzdXNwLmMgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMzYwMWIuLjAwMDAwMDAKLS0tIGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIGxpbnV4L2tlcm5lbC9wb3dlci9zd3N1c3AuYwotICoKLSAqIFRoaXMgZmlsZSBwcm92aWRlcyBjb2RlIHRvIHdyaXRlIHN1c3BlbmQgaW1hZ2UgdG8gc3dhcCBhbmQgcmVhZCBpdCBiYWNrLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAxIEdhYm9yIEt1dGkgPHNlYXNvbnNAZm9ybmF4Lmh1PgotICogQ29weXJpZ2h0IChDKSAxOTk4LDIwMDEtMjAwNSBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+Ci0gKgotICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KLSAqCi0gKiBJJ2QgbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3IgdGhlaXIgd29yazoKLSAqCi0gKiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej46Ci0gKiBNb2RpZmljYXRpb25zLCBkZWZlY3RpdmVuZXNzIHBvaW50aW5nLCBiZWluZyB3aXRoIG1lIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZywKLSAqIHN1c3BlbmQgdG8gc3dhcCBzcGFjZSwgc3RvcCBhbGwgdGFza3MuIFBvcnQgdG8gMi40LjE4LWFjIGFuZCAyLjUuMTcuCi0gKgotICogU3RldmUgRG9kZGkgPGRpcmtAbG90aC5kZW1vbi5jby51az46Ci0gKiBTdXBwb3J0IHRoZSBwb3NzaWJpbGl0eSBvZiBoYXJkd2FyZSBzdGF0ZSByZXN0b3JpbmcuCi0gKgotICogUmFwaCA8Z3JleS5oYXZlbnNAZWFydGhsaW5nLm5ldD46Ci0gKiBTdXBwb3J0IGZvciBwcmVzZXJ2aW5nIHN0YXRlcyBvZiBuZXR3b3JrIGRldmljZXMgYW5kIHZpcnR1YWwgY29uc29sZQotICogKGluY2x1ZGluZyBYIGFuZCBzdmdhdGV4dG1vZGUpCi0gKgotICogS3VydCBHYXJsb2ZmIDxnYXJsb2ZmQHN1c2UuZGU+OgotICogU3RyYWlnaHRlbmVkIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBpbiBvcmRlciB0byBwcmV2ZW50IGNvbXBpbGVycyBmcm9tCi0gKiBwbGF5aW5nIHRyaWNrcyB3aXRoIGxvY2FsIHZhcmlhYmxlcy4KLSAqCi0gKiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+Ci0gKgotICogQWxleCBCYWRlYSA8dmFtcGlyZUBnby5ybz46Ci0gKiBGaXhlZCBydW5hd2F5IGluaXQKLSAqCi0gKiBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+Ci0gKiBSZXdvcmtlZCB0aGUgZnJlZWluZyBvZiBtZW1vcnkgYW5kIHRoZSBoYW5kbGluZyBvZiBzd2FwCi0gKgotICogTW9yZSBzdGF0ZSBzYXZlcnMgYXJlIHdlbGNvbWUuIEVzcGVjaWFsbHkgZm9yIHRoZSBzY3NpIGxheWVyLi4uCi0gKgotICogRm9yIFRPRE9zLEZJWE1FcyBhbHNvIGxvb2sgaW4gRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zd2FwLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSAicG93ZXIuaCIKLQotaW50IGluX3N1c3BlbmQgX19ub3NhdmVkYXRhID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci91c2VyLmMgYi9rZXJuZWwvcG93ZXIvdXNlci5jCmluZGV4IGJmMDAxNGQuLjRkMjI4OTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci91c2VyLmMKKysrIGIva2VybmVsL3Bvd2VyL3VzZXIuYwpAQCAtMTk1LDYgKzE5NSwxNSBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyB2b2lkIHNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwodW5zaWduZWQgaW50IGNtZCkKK3sKKwlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVwZjogaW9jdGwgJyUuOHgnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgIgorCQkJCSJiZSByZW1vdmVkIHNvb24sIHVwZGF0ZSB5b3VyIHN1c3BlbmQtdG8tZGlzayAiCisJCQkJInV0aWxpdGllc1xuIiwKKwkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIGNtZCk7Cit9CisKIHN0YXRpYyBsb25nIHNuYXBzaG90X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMjQ2LDggKzI1NSw5IEBACiAJCWRhdGEtPmZyb3plbiA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkFQU0hPVF9DUkVBVEVfSU1BR0U6CiAJY2FzZSBTTkFQU0hPVF9BVE9NSUNfU05BUFNIT1Q6CisJCXNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwoY21kKTsKKwljYXNlIFNOQVBTSE9UX0NSRUFURV9JTUFHRToKIAkJaWYgKGRhdGEtPm1vZGUgIT0gT19SRE9OTFkgfHwgIWRhdGEtPmZyb3plbiAgfHwgZGF0YS0+cmVhZHkpIHsKIAkJCWVycm9yID0gLUVQRVJNOwogCQkJYnJlYWs7CkBAIC0yNzUsOCArMjg1LDkgQEAKIAkJZGF0YS0+cmVhZHkgPSAwOwogCQlicmVhazsKIAotCWNhc2UgU05BUFNIT1RfUFJFRl9JTUFHRV9TSVpFOgogCWNhc2UgU05BUFNIT1RfU0VUX0lNQUdFX1NJWkU6CisJCXNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwoY21kKTsKKwljYXNlIFNOQVBTSE9UX1BSRUZfSU1BR0VfU0laRToKIAkJaW1hZ2Vfc2l6ZSA9IGFyZzsKIAkJYnJlYWs7CiAKQEAgLTI5MCwxNSArMzAxLDE3IEBACiAJCWVycm9yID0gcHV0X3VzZXIoc2l6ZSwgKGxvZmZfdCBfX3VzZXIgKilhcmcpOwogCQlicmVhazsKIAotCWNhc2UgU05BUFNIT1RfQVZBSUxfU1dBUF9TSVpFOgogCWNhc2UgU05BUFNIT1RfQVZBSUxfU1dBUDoKKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOworCWNhc2UgU05BUFNIT1RfQVZBSUxfU1dBUF9TSVpFOgogCQlzaXplID0gY291bnRfc3dhcF9wYWdlcyhkYXRhLT5zd2FwLCAxKTsKIAkJc2l6ZSA8PD0gUEFHRV9TSElGVDsKIAkJZXJyb3IgPSBwdXRfdXNlcihzaXplLCAobG9mZl90IF9fdXNlciAqKWFyZyk7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkFQU0hPVF9BTExPQ19TV0FQX1BBR0U6CiAJY2FzZSBTTkFQU0hPVF9HRVRfU1dBUF9QQUdFOgorCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CisJY2FzZSBTTkFQU0hPVF9BTExPQ19TV0FQX1BBR0U6CiAJCWlmIChkYXRhLT5zd2FwIDwgMCB8fCBkYXRhLT5zd2FwID49IE1BWF9TV0FQRklMRVMpIHsKIAkJCWVycm9yID0gLUVOT0RFVjsKIAkJCWJyZWFrOwpAQCAtMzIxLDYgKzMzNCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTkFQU0hPVF9TRVRfU1dBUF9GSUxFOiAvKiBUaGlzIGlvY3RsIGlzIGRlcHJlY2F0ZWQgKi8KKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOwogCQlpZiAoIXN3c3VzcF9zd2FwX2luX3VzZSgpKSB7CiAJCQkvKgogCQkJICogVXNlciBzcGFjZSBlbmNvZGVzIGRldmljZSB0eXBlcyBhcyB0d28tYnl0ZSB2YWx1ZXMsCkBAIC0zNjIsNiArMzc2LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOQVBTSE9UX1BNT1BTOiAvKiBUaGlzIGlvY3RsIGlzIGRlcHJlY2F0ZWQgKi8KKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOwogCQllcnJvciA9IC1FSU5WQUw7CiAKIAkJc3dpdGNoIChhcmcpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggOWI3ZmQ0Ny4uZjExMjVjMSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTQ0LDE0ICs0NCw0MyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9sb2NrX2tleTsKIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfbG9ja19tYXAgPQogCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrIiwgJnJjdV9sb2NrX2tleSk7CiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfbG9ja19tYXApOworCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9iaF9sb2NrX2tleTsKK3N0cnVjdCBsb2NrZGVwX21hcCByY3VfYmhfbG9ja19tYXAgPQorCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrX2JoIiwgJnJjdV9iaF9sb2NrX2tleSk7CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmhfbG9ja19tYXApOworCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9zY2hlZF9sb2NrX2tleTsKK3N0cnVjdCBsb2NrZGVwX21hcCByY3Vfc2NoZWRfbG9ja19tYXAgPQorCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrX3NjaGVkIiwgJnJjdV9zY2hlZF9sb2NrX2tleSk7CitFWFBPUlRfU1lNQk9MX0dQTChyY3Vfc2NoZWRfbG9ja19tYXApOwogI2VuZGlmCiAKK2ludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwocmN1X3NjaGVkdWxlcl9hY3RpdmUpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgc2NoZWR1bGVyJ3MgaW5pdGlhbGl6YXRpb24KKyAqIHByb2Nlc3MuICBCZWZvcmUgdGhpcyBpcyBjYWxsZWQsIHRoZSBpZGxlIHRhc2sgbWlnaHQgY29udGFpbgorICogUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyAoZHVyaW5nIHdoaWNoIHRpbWUsIHRoaXMgaWRsZQorICogdGFzayBpcyBib290aW5nIHRoZSBzeXN0ZW0pLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZQorICogaWRsZSB0YXNrcyBhcmUgcHJvaGliaXRlZCBmcm9tIGNvbnRhaW5pbmcgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbnMuCisgKi8KK3ZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKQoreworCVdBUk5fT04obnVtX29ubGluZV9jcHVzKCkgIT0gMSk7CisJV0FSTl9PTihucl9jb250ZXh0X3N3aXRjaGVzKCkgPiAwKTsKKwlyY3Vfc2NoZWR1bGVyX2FjdGl2ZSA9IDE7Cit9CisKIC8qCiAgKiBBd2FrZW4gdGhlIGNvcnJlc3BvbmRpbmcgc3luY2hyb25pemVfcmN1KCkgaW5zdGFuY2Ugbm93IHRoYXQgYQogICogZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggOWJiNTIxNy4uMjU4Y2RmMCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC02MSw2ICs2MSw5IEBACiBzdGF0aWMgaW50IHNodWZmbGVfaW50ZXJ2YWwgPSAzOyAvKiBJbnRlcnZhbCBiZXR3ZWVuIHNodWZmbGVzIChpbiBzZWMpKi8KIHN0YXRpYyBpbnQgc3R1dHRlciA9IDU7CQkvKiBTdGFydC9zdG9wIHRlc3RpbmcgaW50ZXJ2YWwgKGluIHNlYykgKi8KIHN0YXRpYyBpbnQgaXJxcmVhZGVyID0gMTsJLyogUkNVIHJlYWRlcnMgZnJvbSBpcnEgKHRpbWVycykuICovCitzdGF0aWMgaW50IGZxc19kdXJhdGlvbiA9IDA7CS8qIER1cmF0aW9uIG9mIGJ1cnN0cyAodXMpLCAwIHRvIGRpc2FibGUuICovCitzdGF0aWMgaW50IGZxc19ob2xkb2ZmID0gMDsJLyogSG9sZCB0aW1lIHdpdGhpbiBidXJzdCAodXMpLiAqLworc3RhdGljIGludCBmcXNfc3R1dHRlciA9IDM7CS8qIFdhaXQgdGltZSBiZXR3ZWVuIGJ1cnN0cyAocykuICovCiBzdGF0aWMgY2hhciAqdG9ydHVyZV90eXBlID0gInJjdSI7IC8qIFdoYXQgUkNVIGltcGxlbWVudGF0aW9uIHRvIHRvcnR1cmUuICovCiAKIG1vZHVsZV9wYXJhbShucmVhZGVycywgaW50LCAwNDQ0KTsKQEAgLTc5LDYgKzgyLDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHN0dXR0ZXIsICJOdW1iZXIgb2Ygc2Vjb25kcyB0byBydW4vaGFsdCB0ZXN0Iik7CiBtb2R1bGVfcGFyYW0oaXJxcmVhZGVyLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFyZWFkZXIsICJBbGxvdyBSQ1UgcmVhZGVycyBmcm9tIGlycSBoYW5kbGVycyIpOworbW9kdWxlX3BhcmFtKGZxc19kdXJhdGlvbiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnFzX2R1cmF0aW9uLCAiRHVyYXRpb24gb2YgZnFzIGJ1cnN0cyAodXMpIik7Cittb2R1bGVfcGFyYW0oZnFzX2hvbGRvZmYsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZxc19ob2xkb2ZmLCAiSG9sZG9mZiB0aW1lIHdpdGhpbiBmcXMgYnVyc3RzICh1cykiKTsKK21vZHVsZV9wYXJhbShmcXNfc3R1dHRlciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnFzX3N0dXR0ZXIsICJXYWl0IHRpbWUgYmV0d2VlbiBmcXMgYnVyc3RzIChzKSIpOwogbW9kdWxlX3BhcmFtKHRvcnR1cmVfdHlwZSwgY2hhcnAsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0b3J0dXJlX3R5cGUsICJUeXBlIG9mIFJDVSB0byB0b3J0dXJlIChyY3UsIHJjdV9iaCwgc3JjdSkiKTsKIApAQCAtOTksNiArMTA4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0YXRzX3Rhc2s7CiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzaHVmZmxlcl90YXNrOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3R1dHRlcl90YXNrOworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZnFzX3Rhc2s7CiAKICNkZWZpbmUgUkNVX1RPUlRVUkVfUElQRV9MRU4gMTAKIApAQCAtMjYzLDYgKzI3Myw3IEBACiAJdm9pZCAoKmRlZmVycmVkX2ZyZWUpKHN0cnVjdCByY3VfdG9ydHVyZSAqcCk7CiAJdm9pZCAoKnN5bmMpKHZvaWQpOwogCXZvaWQgKCpjYl9iYXJyaWVyKSh2b2lkKTsKKwl2b2lkICgqZnFzKSh2b2lkKTsKIAlpbnQgKCpzdGF0cykoY2hhciAqcGFnZSk7CiAJaW50IGlycV9jYXBhYmxlOwogCWNoYXIgKm5hbWU7CkBAIC0zNDcsNiArMzU4LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1LAogCS5jYl9iYXJyaWVyCT0gcmN1X2JhcnJpZXIsCisJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdSIKQEAgLTM4OCw2ICs0MDAsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3JjdSwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdV9zeW5jIgpAQCAtNDAzLDYgKzQxNiw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdV9leHBlZGl0ZWQiCkBAIC00NjUsNiArNDc5LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9iaF90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gcmN1X2JoX3RvcnR1cmVfc3luY2hyb25pemUsCiAJLmNiX2JhcnJpZXIJPSByY3VfYmFycmllcl9iaCwKKwkuZnFzCQk9IHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1X2JoIgpAQCAtNDgwLDYgKzQ5NSw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gcmN1X2JoX3RvcnR1cmVfc3luY2hyb25pemUsCiAJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5mcXMJCT0gcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJyY3VfYmhfc3luYyIKQEAgLTYyMSw2ICs2MzcsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3NjaGVkX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzY2hlZF90b3J0dXJlX3N5bmNocm9uaXplLAogCS5jYl9iYXJyaWVyCT0gcmN1X2JhcnJpZXJfc2NoZWQsCisJLmZxcwkJPSByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInNjaGVkIgpAQCAtNjM2LDYgKzY1Myw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc2NoZWRfdG9ydHVyZV9zeW5jaHJvbml6ZSwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5uYW1lCQk9ICJzY2hlZF9zeW5jIgogfTsKQEAgLTY1MCwxMiArNjY4LDQ1IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkLAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IHJjdV9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cywKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJzY2hlZF9leHBlZGl0ZWQiCiB9OwogCiAvKgorICogUkNVIHRvcnR1cmUgZm9yY2UtcXVpZXNjZW50LXN0YXRlIGt0aHJlYWQuICBSZXBlYXRlZGx5IGluZHVjZXMKKyAqIGJ1cnN0cyBvZiBjYWxscyB0byBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgaW5jcmVhc2luZyB0aGUgcHJvYmFiaWxpdHkKKyAqIG9mIG9jY3VycmVuY2Ugb2Ygc29tZSBpbXBvcnRhbnQgdHlwZXMgb2YgcmFjZSBjb25kaXRpb25zLgorICovCitzdGF0aWMgaW50CityY3VfdG9ydHVyZV9mcXModm9pZCAqYXJnKQoreworCXVuc2lnbmVkIGxvbmcgZnFzX3Jlc3VtZV90aW1lOworCWludCBmcXNfYnVyc3RfcmVtYWluaW5nOworCisJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9mcXMgdGFzayBzdGFydGVkIik7CisJZG8geworCQlmcXNfcmVzdW1lX3RpbWUgPSBqaWZmaWVzICsgZnFzX3N0dXR0ZXIgKiBIWjsKKwkJd2hpbGUgKGppZmZpZXMgLSBmcXNfcmVzdW1lX3RpbWUgPiBMT05HX01BWCkgeworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOworCQl9CisJCWZxc19idXJzdF9yZW1haW5pbmcgPSBmcXNfZHVyYXRpb247CisJCXdoaWxlIChmcXNfYnVyc3RfcmVtYWluaW5nID4gMCkgeworCQkJY3VyX29wcy0+ZnFzKCk7CisJCQl1ZGVsYXkoZnFzX2hvbGRvZmYpOworCQkJZnFzX2J1cnN0X3JlbWFpbmluZyAtPSBmcXNfaG9sZG9mZjsKKwkJfQorCQlyY3Vfc3R1dHRlcl93YWl0KCJyY3VfdG9ydHVyZV9mcXMiKTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmIGZ1bGxzdG9wID09IEZVTExTVE9QX0RPTlRTVE9QKTsKKwlWRVJCT1NFX1BSSU5US19TVFJJTkcoInJjdV90b3J0dXJlX2ZxcyB0YXNrIHN0b3BwaW5nIik7CisJcmN1dG9ydHVyZV9zaHV0ZG93bl9hYnNvcmIoInJjdV90b3J0dXJlX2ZxcyIpOworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFJDVSB0b3J0dXJlIHdyaXRlciBrdGhyZWFkLiAgUmVwZWF0ZWRseSBzdWJzdGl0dXRlcyBhIG5ldyBzdHJ1Y3R1cmUKICAqIGZvciB0aGF0IHBvaW50ZWQgdG8gYnkgcmN1X3RvcnR1cmVfY3VycmVudCwgZnJlZWluZyB0aGUgb2xkIHN0cnVjdHVyZQogICogYWZ0ZXIgYSBzZXJpZXMgb2YgZ3JhY2UgcGVyaW9kcyAodGhlICJwaXBlbGluZSIpLgpAQCAtNzQ1LDcgKzc5NiwxMSBAQAogCiAJaWR4ID0gY3VyX29wcy0+cmVhZGxvY2soKTsKIAljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKLQlwID0gcmN1X2RlcmVmZXJlbmNlKHJjdV90b3J0dXJlX2N1cnJlbnQpOworCXAgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2socmN1X3RvcnR1cmVfY3VycmVudCwKKwkJCQkgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJICByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSB8fAorCQkJCSAgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkgfHwKKwkJCQkgIHNyY3VfcmVhZF9sb2NrX2hlbGQoJnNyY3VfY3RsKSk7CiAJaWYgKHAgPT0gTlVMTCkgewogCQkvKiBMZWF2ZSBiZWNhdXNlIHJjdV90b3J0dXJlX3dyaXRlciBpcyBub3QgeWV0IHVuZGVyd2F5ICovCiAJCWN1cl9vcHMtPnJlYWR1bmxvY2soaWR4KTsKQEAgLTc5OCwxMSArODUzLDE1IEBACiAJZG8gewogCQlpZiAoaXJxcmVhZGVyICYmIGN1cl9vcHMtPmlycV9jYXBhYmxlKSB7CiAJCQlpZiAoIXRpbWVyX3BlbmRpbmcoJnQpKQotCQkJCW1vZF90aW1lcigmdCwgMSk7CisJCQkJbW9kX3RpbWVyKCZ0LCBqaWZmaWVzICsgMSk7CiAJCX0KIAkJaWR4ID0gY3VyX29wcy0+cmVhZGxvY2soKTsKIAkJY29tcGxldGVkID0gY3VyX29wcy0+Y29tcGxldGVkKCk7Ci0JCXAgPSByY3VfZGVyZWZlcmVuY2UocmN1X3RvcnR1cmVfY3VycmVudCk7CisJCXAgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2socmN1X3RvcnR1cmVfY3VycmVudCwKKwkJCQkJICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCQkgIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpIHx8CisJCQkJCSAgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkgfHwKKwkJCQkJICBzcmN1X3JlYWRfbG9ja19oZWxkKCZzcmN1X2N0bCkpOwogCQlpZiAocCA9PSBOVUxMKSB7CiAJCQkvKiBXYWl0IGZvciByY3VfdG9ydHVyZV93cml0ZXIgdG8gZ2V0IHVuZGVyd2F5ICovCiAJCQljdXJfb3BzLT5yZWFkdW5sb2NrKGlkeCk7CkBAIC0xMDMwLDEwICsxMDg5LDExIEBACiAJcHJpbnRrKEtFUk5fQUxFUlQgIiVzIiBUT1JUVVJFX0ZMQUcKIAkJIi0tLSAlczogbnJlYWRlcnM9JWQgbmZha2V3cml0ZXJzPSVkICIKIAkJInN0YXRfaW50ZXJ2YWw9JWQgdmVyYm9zZT0lZCB0ZXN0X25vX2lkbGVfaHo9JWQgIgotCQkic2h1ZmZsZV9pbnRlcnZhbD0lZCBzdHV0dGVyPSVkIGlycXJlYWRlcj0lZFxuIiwKKwkJInNodWZmbGVfaW50ZXJ2YWw9JWQgc3R1dHRlcj0lZCBpcnFyZWFkZXI9JWQgIgorCQkiZnFzX2R1cmF0aW9uPSVkIGZxc19ob2xkb2ZmPSVkIGZxc19zdHV0dGVyPSVkXG4iLAogCQl0b3J0dXJlX3R5cGUsIHRhZywgbnJlYWxyZWFkZXJzLCBuZmFrZXdyaXRlcnMsCiAJCXN0YXRfaW50ZXJ2YWwsIHZlcmJvc2UsIHRlc3Rfbm9faWRsZV9oeiwgc2h1ZmZsZV9pbnRlcnZhbCwKLQkJc3R1dHRlciwgaXJxcmVhZGVyKTsKKwkJc3R1dHRlciwgaXJxcmVhZGVyLCBmcXNfZHVyYXRpb24sIGZxc19ob2xkb2ZmLCBmcXNfc3R1dHRlcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmN1dG9ydHVyZV9uYiA9IHsKQEAgLTExMDksNiArMTE2OSwxMiBAQAogCX0KIAlzdGF0c190YXNrID0gTlVMTDsKIAorCWlmIChmcXNfdGFzaykgeworCQlWRVJCT1NFX1BSSU5US19TVFJJTkcoIlN0b3BwaW5nIHJjdV90b3J0dXJlX2ZxcyB0YXNrIik7CisJCWt0aHJlYWRfc3RvcChmcXNfdGFzayk7CisJfQorCWZxc190YXNrID0gTlVMTDsKKwogCS8qIFdhaXQgZm9yIGFsbCBSQ1UgY2FsbGJhY2tzIHRvIGZpcmUuICAqLwogCiAJaWYgKGN1cl9vcHMtPmNiX2JhcnJpZXIgIT0gTlVMTCkKQEAgLTExNTQsNiArMTIyMCwxMSBAQAogCQltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWlmIChjdXJfb3BzLT5mcXMgPT0gTlVMTCAmJiBmcXNfZHVyYXRpb24gIT0gMCkgeworCQlwcmludGsoS0VSTl9BTEVSVCAicmN1LXRvcnR1cmU6IC0+ZnFzIE5VTEwgYW5kIG5vbi16ZXJvICIKKwkJCQkgICJmcXNfZHVyYXRpb24sIGZxcyBkaXNhYmxlZC5cbiIpOworCQlmcXNfZHVyYXRpb24gPSAwOworCX0KIAlpZiAoY3VyX29wcy0+aW5pdCkKIAkJY3VyX29wcy0+aW5pdCgpOyAvKiBubyAiZ290byB1bndpbmQiIHByaW9yIHRvIHRoaXMgcG9pbnQhISEgKi8KIApAQCAtMTI4Miw2ICsxMzUzLDE5IEBACiAJCQlnb3RvIHVud2luZDsKIAkJfQogCX0KKwlpZiAoZnFzX2R1cmF0aW9uIDwgMCkKKwkJZnFzX2R1cmF0aW9uID0gMDsKKwlpZiAoZnFzX2R1cmF0aW9uKSB7CisJCS8qIENyZWF0ZSB0aGUgc3R1dHRlciB0aHJlYWQgKi8KKwkJZnFzX3Rhc2sgPSBrdGhyZWFkX3J1bihyY3VfdG9ydHVyZV9mcXMsIE5VTEwsCisJCQkJICAgICAgICJyY3VfdG9ydHVyZV9mcXMiKTsKKwkJaWYgKElTX0VSUihmcXNfdGFzaykpIHsKKwkJCWZpcnN0ZXJyID0gUFRSX0VSUihmcXNfdGFzayk7CisJCQlWRVJCT1NFX1BSSU5US19FUlJTVFJJTkcoIkZhaWxlZCB0byBjcmVhdGUgZnFzIik7CisJCQlmcXNfdGFzayA9IE5VTEw7CisJCQlnb3RvIHVud2luZDsKKwkJfQorCX0KIAlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnJjdXRvcnR1cmVfbmIpOwogCW11dGV4X3VubG9jaygmZnVsbHN0b3BfbXV0ZXgpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKaW5kZXggNTNhZTk1OS4uM2VjODE2MCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuYworKysgYi9rZXJuZWwvcmN1dHJlZS5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KIAogI2luY2x1ZGUgInJjdXRyZWUuaCIKIApAQCAtNjYsMTEgKzY1LDExIEBACiAJLnNpZ25hbGVkID0gUkNVX0dQX0lETEUsIFwKIAkuZ3BudW0gPSAtMzAwLCBcCiAJLmNvbXBsZXRlZCA9IC0zMDAsIFwKLQkub25vZmZsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUub25vZmZsb2NrKSwgXAorCS5vbm9mZmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUub25vZmZsb2NrKSwgXAogCS5vcnBoYW5fY2JzX2xpc3QgPSBOVUxMLCBcCiAJLm9ycGhhbl9jYnNfdGFpbCA9ICZuYW1lLm9ycGhhbl9jYnNfbGlzdCwgXAogCS5vcnBoYW5fcWxlbiA9IDAsIFwKLQkuZnFzbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLmZxc2xvY2spLCBcCisJLmZxc2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUuZnFzbG9jayksIFwKIAkubl9mb3JjZV9xcyA9IDAsIFwKIAkubl9mb3JjZV9xc19uZ3AgPSAwLCBcCiB9CkBAIC04MSw5ICs4MCw2IEBACiBzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9iaF9zdGF0ZSA9IFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3VfYmhfc3RhdGUpOwogREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfYmhfZGF0YSk7CiAKLXN0YXRpYyBpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmUgX19yZWFkX21vc3RseTsKLQotCiAvKgogICogUmV0dXJuIHRydWUgaWYgYW4gUkNVIGdyYWNlIHBlcmlvZCBpcyBpbiBwcm9ncmVzcy4gIFRoZSBBQ0NFU1NfT05DRSgpcwogICogcGVybWl0IHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aXRob3V0IGhvbGRpbmcgdGhlIHJvb3QgcmN1X25vZGUKQEAgLTE1Nyw2ICsxNTMsMjQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCk7CiAKIC8qCisgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgUkNVIEJILgorICovCit2b2lkIHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKK3sKKwlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9iaF9zdGF0ZSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKKworLyoKKyAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlIGZvciBSQ1Utc2NoZWQuCisgKi8KK3ZvaWQgcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgmcmN1X3NjaGVkX3N0YXRlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOworCisvKgogICogRG9lcyB0aGUgQ1BVIGhhdmUgY2FsbGJhY2tzIHJlYWR5IHRvIGJlIGludm9rZWQ/CiAgKi8KIHN0YXRpYyBpbnQKQEAgLTQzOSwxMCArNDUzLDEwIEBACiAKIAkvKiBPbmx5IGxldCBvbmUgQ1BVIGNvbXBsYWluIGFib3V0IG90aGVycyBwZXIgdGltZSBpbnRlcnZhbC4gKi8KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWRlbHRhID0gamlmZmllcyAtIHJzcC0+amlmZmllc19zdGFsbDsKIAlpZiAoZGVsdGEgPCBSQ1VfU1RBTExfUkFUX0RFTEFZIHx8ICFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCXJzcC0+amlmZmllc19zdGFsbCA9IGppZmZpZXMgKyBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0s7CkBAIC00NTIsMTMgKzQ2NiwxNSBAQAogCSAqIGR1ZSB0byBDUFUgb2ZmbGluaW5nLgogCSAqLwogCXJjdV9wcmludF90YXNrX3N0YWxsKHJucCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCiAJLyogT0ssIHRpbWUgdG8gcmF0IG9uIG91ciBidWRkeS4uLiAqLwogCiAJcHJpbnRrKEtFUk5fRVJSICJJTkZPOiBSQ1UgZGV0ZWN0ZWQgQ1BVIHN0YWxsczoiKTsKIAlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSB7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJjdV9wcmludF90YXNrX3N0YWxsKHJucCk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHJucC0+cXNtYXNrID09IDApCiAJCQljb250aW51ZTsKIAkJZm9yIChjcHUgPSAwOyBjcHUgPD0gcm5wLT5ncnBoaSAtIHJucC0+Z3JwbG87IGNwdSsrKQpAQCAtNDY5LDYgKzQ4NSwxMCBAQAogCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIChsb25nKShqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCkpOwogCXRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKTsKIAorCS8qIElmIHNvIGNvbmZpZ3VyZWQsIGNvbXBsYWluIGFib3V0IHRhc2tzIGJsb2NraW5nIHRoZSBncmFjZSBwZXJpb2QuICovCisKKwlyY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwocnNwKTsKKwogCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOyAgLyogS2ljayB0aGVtIGFsbC4gKi8KIH0KIApAQCAtNDgxLDExICs1MDEsMTEgQEAKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQpOwogCXRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQlpZiAoKGxvbmcpKGppZmZpZXMgLSByc3AtPmppZmZpZXNfc3RhbGwpID49IDApCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoVUxPTkdfQ01QX0dFKGppZmZpZXMsIHJzcC0+amlmZmllc19zdGFsbCkpCiAJCXJzcC0+amlmZmllc19zdGFsbCA9CiAJCQlqaWZmaWVzICsgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAogCXNldF9uZWVkX3Jlc2NoZWQoKTsgIC8qIGtpY2sgb3Vyc2VsdmVzIHRvIGdldCB0aGluZ3MgZ29pbmcuICovCiB9CkBAIC01NDUsMTIgKzU2NSwxMiBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlybnAgPSByZHAtPm15bm9kZTsKIAlpZiAocmRwLT5ncG51bSA9PSBBQ0NFU1NfT05DRShybnAtPmdwbnVtKSB8fCAvKiBvdXRzaWRlIGxvY2suICovCi0JICAgICFzcGluX3RyeWxvY2soJnJucC0+bG9jaykpIHsgLyogaXJxcyBhbHJlYWR5IG9mZiwgcmV0cnkgbGF0ZXIuICovCisJICAgICFyYXdfc3Bpbl90cnlsb2NrKCZybnAtPmxvY2spKSB7IC8qIGlycXMgYWxyZWFkeSBvZmYsIHNvIGxhdGVyLiAqLwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJX19ub3RlX25ld19ncG51bShyc3AsIHJucCwgcmRwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC02MDksMTIgKzYyOSwxMiBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlybnAgPSByZHAtPm15bm9kZTsKIAlpZiAocmRwLT5jb21wbGV0ZWQgPT0gQUNDRVNTX09OQ0Uocm5wLT5jb21wbGV0ZWQpIHx8IC8qIG91dHNpZGUgbG9jay4gKi8KLQkgICAgIXNwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCByZXRyeSBsYXRlci4gKi8KKwkgICAgIXJhd19zcGluX3RyeWxvY2soJnJucC0+bG9jaykpIHsgLyogaXJxcyBhbHJlYWR5IG9mZiwgc28gbGF0ZXIuICovCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlfX3JjdV9wcm9jZXNzX2dwX2VuZChyc3AsIHJucCwgcmRwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC02NTksMTIgKzY3OSwxNCBAQAogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCi0JaWYgKCFjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpIHsKKwlpZiAoIWNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSB8fCByc3AtPmZxc19hY3RpdmUpIHsKKwkJaWYgKGNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSkKKwkJCXJzcC0+ZnFzX25lZWRfZ3AgPSAxOwogCQlpZiAocm5wLT5jb21wbGV0ZWQgPT0gcnNwLT5jb21wbGV0ZWQpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCiAJCS8qCiAJCSAqIFByb3BhZ2F0ZSBuZXcgLT5jb21wbGV0ZWQgdmFsdWUgdG8gcmN1X25vZGUgc3RydWN0dXJlcwpAQCAtNjcyLDkgKzY5NCw5IEBACiAJCSAqIG9mIHRoZSBuZXh0IGdyYWNlIHBlcmlvZCB0byBwcm9jZXNzIHRoZWlyIGNhbGxiYWNrcy4KIAkJICovCiAJCXJjdV9mb3JfZWFjaF9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIHsKLQkJCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJCXJucC0+Y29tcGxldGVkID0gcnNwLT5jb21wbGV0ZWQ7Ci0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQl9CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwpAQCAtNjk1LDE1ICs3MTcsMTUgQEAKIAkJcm5wLT5jb21wbGV0ZWQgPSByc3AtPmNvbXBsZXRlZDsKIAkJcnNwLT5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVDsgLyogZm9yY2VfcXVpZXNjZW50X3N0YXRlIE9LLiAqLwogCQlyY3Vfc3RhcnRfZ3BfcGVyX2NwdShyc3AsIHJucCwgcmRwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogbGVhdmUgaXJxcyBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBsZWF2ZSBpcnFzIGRpc2FibGVkLiAqLwogCiAKIAkvKiBFeGNsdWRlIGFueSBjb25jdXJyZW50IENQVS1ob3RwbHVnIG9wZXJhdGlvbnMuICovCi0Jc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCiAJLyoKIAkgKiBTZXQgdGhlIHF1aWVzY2VudC1zdGF0ZS1uZWVkZWQgYml0cyBpbiBhbGwgdGhlIHJjdV9ub2RlCkBAIC03MjMsMjEgKzc0NSwyMSBAQAogCSAqIGlycXMgZGlzYWJsZWQuCiAJICovCiAJcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgewotCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhybnApOwogCQlybnAtPnFzbWFzayA9IHJucC0+cXNtYXNraW5pdDsKIAkJcm5wLT5ncG51bSA9IHJzcC0+Z3BudW07CiAJCXJucC0+Y29tcGxldGVkID0gcnNwLT5jb21wbGV0ZWQ7CiAJCWlmIChybnAgPT0gcmRwLT5teW5vZGUpCiAJCQlyY3Vfc3RhcnRfZ3BfcGVyX2NwdShyc3AsIHJucCwgcmRwKTsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCX0KIAogCXJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJCQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgbm93IE9LLiAqLwotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTc3NiwxNCArNzk4LDE0IEBACiAJCWlmICghKHJucC0+cXNtYXNrICYgbWFzaykpIHsKIAogCQkJLyogT3VyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQsIHNvIGRvbmUuICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQlybnAtPnFzbWFzayAmPSB+bWFzazsKIAkJaWYgKHJucC0+cXNtYXNrICE9IDAgfHwgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKIAogCQkJLyogT3RoZXIgYml0cyBzdGlsbCBzZXQgYXQgdGhpcyBsZXZlbCwgc28gZG9uZS4gKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCW1hc2sgPSBybnAtPmdycG1hc2s7CkBAIC03OTMsMTAgKzgxNSwxMCBAQAogCiAJCQlicmVhazsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlybnBfYyA9IHJucDsKIAkJcm5wID0gcm5wLT5wYXJlbnQ7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJV0FSTl9PTl9PTkNFKHJucF9jLT5xc21hc2spOwogCX0KIApAQCAtODI1LDcgKzg0Nyw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAlybnAgPSByZHAtPm15bm9kZTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlpZiAobGFzdGNvbXAgIT0gcm5wLT5jb21wbGV0ZWQpIHsKIAogCQkvKgpAQCAtODM3LDEyICs4NTksMTIgQEAKIAkJICogcmFjZSBvY2N1cnJlZC4KIAkJICovCiAJCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDA7CS8qIHRyeSBhZ2FpbiBsYXRlciEgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAltYXNrID0gcmRwLT5ncnBtYXNrOwogCWlmICgocm5wLT5xc21hc2sgJiBtYXNrKSA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKIAkJcmRwLT5xc19wZW5kaW5nID0gMDsKIApAQCAtOTA2LDcgKzkyOCw3IEBACiAKIAlpZiAocmRwLT5ueHRsaXN0ID09IE5VTEwpCiAJCXJldHVybjsgIC8qIGlycXMgZGlzYWJsZWQsIHNvIGNvbXBhcmlzb24gaXMgc3RhYmxlLiAqLwotCXNwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCXJhd19zcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkqcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSByZHAtPm54dGxpc3Q7CiAJcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CiAJcmRwLT5ueHRsaXN0ID0gTlVMTDsKQEAgLTkxNCw3ICs5MzYsNyBAQAogCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OwogCXJzcC0+b3JwaGFuX3FsZW4gKz0gcmRwLT5xbGVuOwogCXJkcC0+cWxlbiA9IDA7Ci0Jc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiB9CiAKIC8qCkBAIC05MjUsMTAgKzk0NywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAJcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlpZiAocnNwLT5vcnBoYW5fY2JzX2xpc3QgPT0gTlVMTCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAkqcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcnNwLT5vcnBoYW5fY2JzX2xpc3Q7CkBAIC05MzcsNyArOTU5LDcgQEAKIAlyc3AtPm9ycGhhbl9jYnNfbGlzdCA9IE5VTEw7CiAJcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSAmcnNwLT5vcnBoYW5fY2JzX2xpc3Q7CiAJcnNwLT5vcnBoYW5fcWxlbiA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTk1MywyMyArOTc1LDIzIEBACiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBncmFjZSBwZXJpb2QuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCiAJLyogUmVtb3ZlIHRoZSBvdXRnb2luZyBDUFUgZnJvbSB0aGUgbWFza3MgaW4gdGhlIHJjdV9ub2RlIGhpZXJhcmNoeS4gKi8KIAlybnAgPSByZHAtPm15bm9kZTsJLyogdGhpcyBpcyB0aGUgb3V0Z29pbmcgQ1BVJ3Mgcm5wLiAqLwogCW1hc2sgPSByZHAtPmdycG1hc2s7CS8qIHJucC0+Z3JwbG8gaXMgY29uc3RhbnQuICovCiAJZG8gewotCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcm5wLT5xc21hc2tpbml0ICY9IH5tYXNrOwogCQlpZiAocm5wLT5xc21hc2tpbml0ICE9IDApIHsKIAkJCWlmIChybnAgIT0gcmRwLT5teW5vZGUpCi0JCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCQlicmVhazsKIAkJfQogCQlpZiAocm5wID09IHJkcC0+bXlub2RlKQogCQkJbmVlZF9yZXBvcnQgPSByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wLCByZHApOwogCQllbHNlCi0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQltYXNrID0gcm5wLT5ncnBtYXNrOwogCQlybnAgPSBybnAtPnBhcmVudDsKIAl9IHdoaWxlIChybnAgIT0gTlVMTCk7CkBAIC05ODAsMTIgKzEwMDIsMTIgQEAKIAkgKiBiZWNhdXNlIGludm9raW5nIHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoKSB3aXRoIC0+b25vZmZsb2NrCiAJICogaGVsZCBsZWFkcyB0byBkZWFkbG9jay4KIAkgKi8KLQlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJcm5wID0gcmRwLT5teW5vZGU7CiAJaWYgKG5lZWRfcmVwb3J0ICYgUkNVX09GTF9UQVNLU19OT1JNX0dQKQogCQlyY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHJucCwgZmxhZ3MpOwogCWVsc2UKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlpZiAobmVlZF9yZXBvcnQgJiBSQ1VfT0ZMX1RBU0tTX0VYUF9HUCkKIAkJcmN1X3JlcG9ydF9leHBfcm5wKHJzcCwgcm5wKTsKIApAQCAtMTE0NCwxMSArMTE2Niw5IEBACiAvKgogICogU2NhbiB0aGUgbGVhZiByY3Vfbm9kZSBzdHJ1Y3R1cmVzLCBwcm9jZXNzaW5nIGR5bnRpY2sgc3RhdGUgZm9yIGFueSB0aGF0CiAgKiBoYXZlIG5vdCB5ZXQgZW5jb3VudGVyZWQgYSBxdWllc2NlbnQgc3RhdGUsIHVzaW5nIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQuCi0gKiBSZXR1cm5zIDEgaWYgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIGVuZHMgd2hpbGUgc2Nhbm5pbmcgKHBvc3NpYmx5Ci0gKiBiZWNhdXNlIHdlIG1hZGUgaXQgZW5kKS4KKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHN1cHByZXNzZWQgc3RhcnQgb2YgbmV3IGdyYWNlIHBlcmlvZHMuCiAgKi8KLXN0YXRpYyBpbnQgcmN1X3Byb2Nlc3NfZHludGljayhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGxvbmcgbGFzdGNvbXAsCi0JCQkgICAgICAgaW50ICgqZikoc3RydWN0IHJjdV9kYXRhICopKQorc3RhdGljIHZvaWQgZm9yY2VfcXNfcm5wKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50ICgqZikoc3RydWN0IHJjdV9kYXRhICopKQogewogCXVuc2lnbmVkIGxvbmcgYml0OwogCWludCBjcHU7CkBAIC0xMTU4LDEzICsxMTc4LDEzIEBACiAKIAlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSB7CiAJCW1hc2sgPSAwOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChybnAtPmNvbXBsZXRlZCAhPSBsYXN0Y29tcCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gMTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgeworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOwogCQl9CiAJCWlmIChybnAtPnFzbWFzayA9PSAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWNwdSA9IHJucC0+Z3JwbG87CkBAIC0xMTczLDE1ICsxMTkzLDE0IEBACiAJCQlpZiAoKHJucC0+cXNtYXNrICYgYml0KSAhPSAwICYmIGYocnNwLT5yZGFbY3B1XSkpCiAJCQkJbWFzayB8PSBiaXQ7CiAJCX0KLQkJaWYgKG1hc2sgIT0gMCAmJiBybnAtPmNvbXBsZXRlZCA9PSBsYXN0Y29tcCkgeworCQlpZiAobWFzayAhPSAwKSB7CiAKIAkJCS8qIHJjdV9yZXBvcnRfcXNfcm5wKCkgcmVsZWFzZXMgcm5wLT5sb2NrLiAqLwogCQkJcmN1X3JlcG9ydF9xc19ybnAobWFzaywgcnNwLCBybnAsIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTE5MSwzMiArMTIxMCwyNiBAQAogc3RhdGljIHZvaWQgZm9yY2VfcXVpZXNjZW50X3N0YXRlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50IHJlbGF4ZWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGxhc3Rjb21wOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7Ci0JdTggc2lnbmFsZWQ7Ci0JdTggZm9yY2Vub3c7CiAKIAlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKQogCQlyZXR1cm47ICAvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MsIG5vdGhpbmcgdG8gZm9yY2UuICovCi0JaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmcnNwLT5mcXNsb2NrLCBmbGFncykpIHsKKwlpZiAoIXJhd19zcGluX3RyeWxvY2tfaXJxc2F2ZSgmcnNwLT5mcXNsb2NrLCBmbGFncykpIHsKIAkJcnNwLT5uX2ZvcmNlX3FzX2xoKys7IC8qIEluZXhhY3QsIGNhbiBsb3NlIGNvdW50cy4gIFRvdWdoISAqLwogCQlyZXR1cm47CS8qIFNvbWVvbmUgZWxzZSBpcyBhbHJlYWR5IG9uIHRoZSBqb2IuICovCiAJfQotCWlmIChyZWxheGVkICYmCi0JICAgIChsb25nKShyc3AtPmppZmZpZXNfZm9yY2VfcXMgLSBqaWZmaWVzKSA+PSAwKQotCQlnb3RvIHVubG9ja19yZXQ7IC8qIG5vIGVtZXJnZW5jeSBhbmQgZG9uZSByZWNlbnRseS4gKi8KKwlpZiAocmVsYXhlZCAmJiBVTE9OR19DTVBfR0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzLCBqaWZmaWVzKSkKKwkJZ290byB1bmxvY2tfZnFzX3JldDsgLyogbm8gZW1lcmdlbmN5IGFuZCBkb25lIHJlY2VudGx5LiAqLwogCXJzcC0+bl9mb3JjZV9xcysrOwotCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsKLQlsYXN0Y29tcCA9IHJzcC0+Z3BudW0gLSAxOwotCXNpZ25hbGVkID0gcnNwLT5zaWduYWxlZDsKKwlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJcnNwLT5qaWZmaWVzX2ZvcmNlX3FzID0gamlmZmllcyArIFJDVV9KSUZGSUVTX1RJTExfRk9SQ0VfUVM7CiAJaWYoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CiAJCXJzcC0+bl9mb3JjZV9xc19uZ3ArKzsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7Ci0JCWdvdG8gdW5sb2NrX3JldDsgIC8qIG5vIEdQIGluIHByb2dyZXNzLCB0aW1lIHVwZGF0ZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCWdvdG8gdW5sb2NrX2Zxc19yZXQ7ICAvKiBubyBHUCBpbiBwcm9ncmVzcywgdGltZSB1cGRhdGVkLiAqLwogCX0KLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKLQlzd2l0Y2ggKHNpZ25hbGVkKSB7CisJcnNwLT5mcXNfYWN0aXZlID0gMTsKKwlzd2l0Y2ggKHJzcC0+c2lnbmFsZWQpIHsKIAljYXNlIFJDVV9HUF9JRExFOgogCWNhc2UgUkNVX0dQX0lOSVQ6CiAKQEAgLTEyMjQsNDUgKzEyMzcsMzggQEAKIAogCWNhc2UgUkNVX1NBVkVfRFlOVElDSzoKIAorCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCQlpZiAoUkNVX1NJR05BTF9JTklUICE9IFJDVV9TQVZFX0RZTlRJQ0spCiAJCQlicmVhazsgLyogU28gZ2NjIHJlY29nbml6ZXMgdGhlIGRlYWQgY29kZS4gKi8KIAogCQkvKiBSZWNvcmQgZHludGljay1pZGxlIHN0YXRlLiAqLwotCQlpZiAocmN1X3Byb2Nlc3NfZHludGljayhyc3AsIGxhc3Rjb21wLAotCQkJCQlkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcikpCi0JCQlnb3RvIHVubG9ja19yZXQ7Ci0JCS8qIGZhbGwgaW50byBuZXh0IGNhc2UuICovCi0KLQljYXNlIFJDVV9TQVZFX0NPTVBMRVRFRDoKLQotCQkvKiBVcGRhdGUgc3RhdGUsIHJlY29yZCBjb21wbGV0aW9uIGNvdW50ZXIuICovCi0JCWZvcmNlbm93ID0gMDsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwotCQlpZiAobGFzdGNvbXAgKyAxID09IHJzcC0+Z3BudW0gJiYKLQkJICAgIGxhc3Rjb21wID09IHJzcC0+Y29tcGxldGVkICYmCi0JCSAgICByc3AtPnNpZ25hbGVkID09IHNpZ25hbGVkKSB7CisJCWZvcmNlX3FzX3JucChyc3AsIGR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKTsKKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCQlpZiAocmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpCiAJCQlyc3AtPnNpZ25hbGVkID0gUkNVX0ZPUkNFX1FTOwotCQkJcnNwLT5jb21wbGV0ZWRfZnFzID0gbGFzdGNvbXA7Ci0JCQlmb3JjZW5vdyA9IHNpZ25hbGVkID09IFJDVV9TQVZFX0NPTVBMRVRFRDsKLQkJfQotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKLQkJaWYgKCFmb3JjZW5vdykKLQkJCWJyZWFrOwotCQkvKiBmYWxsIGludG8gbmV4dCBjYXNlLiAqLworCQlicmVhazsKIAogCWNhc2UgUkNVX0ZPUkNFX1FTOgogCiAJCS8qIENoZWNrIGR5bnRpY2staWRsZSBzdGF0ZSwgc2VuZCBJUEkgdG8gbGFnZ2FydHMuICovCi0JCWlmIChyY3VfcHJvY2Vzc19keW50aWNrKHJzcCwgcnNwLT5jb21wbGV0ZWRfZnFzLAotCQkJCQlyY3VfaW1wbGljaXRfZHludGlja3NfcXMpKQotCQkJZ290byB1bmxvY2tfcmV0OworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCQlmb3JjZV9xc19ybnAocnNwLCByY3VfaW1wbGljaXRfZHludGlja3NfcXMpOwogCiAJCS8qIExlYXZlIHN0YXRlIGluIGNhc2UgbW9yZSBmb3JjaW5nIGlzIHJlcXVpcmVkLiAqLwogCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAkJYnJlYWs7CiAJfQotdW5sb2NrX3JldDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKTsKKwlyc3AtPmZxc19hY3RpdmUgPSAwOworCWlmIChyc3AtPmZxc19uZWVkX2dwKSB7CisJCXJhd19zcGluX3VubG9jaygmcnNwLT5mcXNsb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJcnNwLT5mcXNfbmVlZF9ncCA9IDA7CisJCXJjdV9zdGFydF9ncChyc3AsIGZsYWdzKTsgLyogcmVsZWFzZXMgcm5wLT5sb2NrICovCisJCXJldHVybjsKKwl9CisJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KK3VubG9ja19mcXNfcmV0OgorCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKTsKIH0KIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19TTVAgKi8KQEAgLTEyOTAsNyArMTI5Niw3IEBACiAJICogSWYgYW4gUkNVIEdQIGhhcyBnb25lIGxvbmcgZW5vdWdoLCBnbyBjaGVjayBmb3IgZHludGljawogCSAqIGlkbGUgQ1BVcyBhbmQsIGlmIG5lZWRlZCwgc2VuZCByZXNjaGVkIElQSXMuCiAJICovCi0JaWYgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKQorCWlmIChVTE9OR19DTVBfTFQoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSwgamlmZmllcykpCiAJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDEpOwogCiAJLyoKQEAgLTEzMDQsNyArMTMxMCw3IEBACiAKIAkvKiBEb2VzIHRoaXMgQ1BVIHJlcXVpcmUgYSBub3QteWV0LXN0YXJ0ZWQgZ3JhY2UgcGVyaW9kPyAqLwogCWlmIChjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJjdV9nZXRfcm9vdChyc3ApLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcmN1X2dldF9yb290KHJzcCktPmxvY2ssIGZsYWdzKTsKIAkJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgYWJvdmUgbG9jayAqLwogCX0KIApAQCAtMTMzNSw2ICsxMzQxLDkgQEAKIAkgKiBncmFjZS1wZXJpb2QgbWFuaXB1bGF0aW9ucyBhYm92ZS4KIAkgKi8KIAlzbXBfbWIoKTsgLyogU2VlIGFib3ZlIGJsb2NrIGNvbW1lbnQuICovCisKKwkvKiBJZiB3ZSBhcmUgbGFzdCBDUFUgb24gd2F5IHRvIGR5bnRpY2staWRsZSBtb2RlLCBhY2NlbGVyYXRlIGl0LiAqLworCXJjdV9uZWVkc19jcHVfZmx1c2goKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEzNjksNyArMTM3OCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbmVzdGZsYWc7CiAJCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3Jvb3QgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wX3Jvb3QtPmxvY2ssIG5lc3RmbGFnKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnBfcm9vdC0+bG9jaywgbmVzdGZsYWcpOwogCQlyY3Vfc3RhcnRfZ3AocnNwLCBuZXN0ZmxhZyk7ICAvKiByZWxlYXNlcyBybnBfcm9vdC0+bG9jay4gKi8KIAl9CiAKQEAgLTEzODcsNyArMTM5Niw3IEBACiAJCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsKIAkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CiAJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IHJkcC0+cWxlbjsKLQl9IGVsc2UgaWYgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKQorCX0gZWxzZSBpZiAoVUxPTkdfQ01QX0xUKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcyksIGppZmZpZXMpKQogCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0xNTIwLDcgKzE1MjksNyBAQAogCiAJLyogSGFzIGFuIFJDVSBHUCBnb25lIGxvbmcgZW5vdWdoIHRvIHNlbmQgcmVzY2hlZCBJUElzICZjPyAqLwogCWlmIChyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSAmJgotCSAgICAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApKSB7CisJICAgIFVMT05HX0NNUF9MVChBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpLCBqaWZmaWVzKSkgewogCQlyZHAtPm5fcnBfbmVlZF9mcXMrKzsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTU0NSwxMCArMTU1NCw5IEBACiAvKgogICogQ2hlY2sgdG8gc2VlIGlmIGFueSBmdXR1cmUgUkNVLXJlbGF0ZWQgd29yayB3aWxsIG5lZWQgdG8gYmUgZG9uZQogICogYnkgdGhlIGN1cnJlbnQgQ1BVLCBldmVuIGlmIG5vbmUgbmVlZCBiZSBkb25lIGltbWVkaWF0ZWx5LCByZXR1cm5pbmcKLSAqIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0KLSAqIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KKyAqIDEgaWYgc28uCiAgKi8KLWludCByY3VfbmVlZHNfY3B1KGludCBjcHUpCitzdGF0aWMgaW50IHJjdV9uZWVkc19jcHVfcXVpY2tfY2hlY2soaW50IGNwdSkKIHsKIAkvKiBSQ1UgY2FsbGJhY2tzIGVpdGhlciByZWFkeSBvciBwZW5kaW5nPyAqLwogCXJldHVybiBwZXJfY3B1KHJjdV9zY2hlZF9kYXRhLCBjcHUpLm54dGxpc3QgfHwKQEAgLTE1NTYsMjEgKzE1NjQsNiBAQAogCSAgICAgICByY3VfcHJlZW1wdF9uZWVkc19jcHUoY3B1KTsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlcidzIGluaXRpYWxpemF0aW9uCi0gKiBwcm9jZXNzLiAgQmVmb3JlIHRoaXMgaXMgY2FsbGVkLCB0aGUgaWRsZSB0YXNrIG1pZ2h0IGNvbnRhaW4KLSAqIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgKGR1cmluZyB3aGljaCB0aW1lLCB0aGlzIGlkbGUKLSAqIHRhc2sgaXMgYm9vdGluZyB0aGUgc3lzdGVtKS4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUKLSAqIGlkbGUgdGFza3MgYXJlIHByb2hpYml0ZWQgZnJvbSBjb250YWluaW5nIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKLSAqIHNlY3Rpb25zLgotICovCi12b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCkKLXsKLQlXQVJOX09OKG51bV9vbmxpbmVfY3B1cygpICE9IDEpOwotCVdBUk5fT04obnJfY29udGV4dF9zd2l0Y2hlcygpID4gMCk7Ci0JcmN1X3NjaGVkdWxlcl9hY3RpdmUgPSAxOwotfQotCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9oZWFkLCByY3VfYmFycmllcl9oZWFkKSA9IHtOVUxMfTsKIHN0YXRpYyBhdG9taWNfdCByY3VfYmFycmllcl9jcHVfY291bnQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKHJjdV9iYXJyaWVyX211dGV4KTsKQEAgLTE2NTksNyArMTY1Miw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAogCS8qIFNldCB1cCBsb2NhbCBzdGF0ZSwgZW5zdXJpbmcgY29uc2lzdGVudCB2aWV3IG9mIGdsb2JhbCBzdGF0ZS4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlyZHAtPmdycG1hc2sgPSAxVUwgPDwgKGNwdSAtIHJkcC0+bXlub2RlLT5ncnBsbyk7CiAJcmRwLT5ueHRsaXN0ID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQpAQCAtMTY2OSw3ICsxNjYyLDcgQEAKIAlyZHAtPmR5bnRpY2tzID0gJnBlcl9jcHUocmN1X2R5bnRpY2tzLCBjcHUpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAlyZHAtPmNwdSA9IGNwdTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0xNjg3LDcgKzE2ODAsNyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAKIAkvKiBTZXQgdXAgbG9jYWwgc3RhdGUsIGVuc3VyaW5nIGNvbnNpc3RlbnQgdmlldyBvZiBnbG9iYWwgc3RhdGUuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJcmRwLT5wYXNzZWRfcXVpZXNjID0gMDsgIC8qIFdlIGNvdWxkIGJlIHJhY2luZyB3aXRoIG5ldyBHUCwgKi8KIAlyZHAtPnFzX3BlbmRpbmcgPSAxOwkgLyogIHNvIHNldCB1cCB0byByZXNwb25kIHRvIGN1cnJlbnQgR1AuICovCiAJcmRwLT5iZWVub25saW5lID0gMTsJIC8qIFdlIGhhdmUgbm93IGJlZW4gb25saW5lLiAqLwpAQCAtMTY5NSw3ICsxNjg4LDcgQEAKIAlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSAwOwogCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOwogCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAKIAkvKgogCSAqIEEgbmV3IGdyYWNlIHBlcmlvZCBtaWdodCBzdGFydCBoZXJlLiAgSWYgc28sIHdlIHdvbid0IGJlIHBhcnQKQEAgLTE3MDMsMTQgKzE2OTYsMTQgQEAKIAkgKi8KIAogCS8qIEV4Y2x1ZGUgYW55IGF0dGVtcHRzIHRvIHN0YXJ0IGEgbmV3IEdQIG9uIGxhcmdlIHN5c3RlbXMuICovCi0Jc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCiAJLyogQWRkIENQVSB0byByY3Vfbm9kZSBiaXRtYXNrcy4gKi8KIAlybnAgPSByZHAtPm15bm9kZTsKIAltYXNrID0gcmRwLT5ncnBtYXNrOwogCWRvIHsKIAkJLyogRXhjbHVkZSBhbnkgYXR0ZW1wdHMgdG8gc3RhcnQgYSBuZXcgR1Agb24gc21hbGwgc3lzdGVtcy4gKi8KLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcm5wLT5xc21hc2tpbml0IHw9IG1hc2s7CiAJCW1hc2sgPSBybnAtPmdycG1hc2s7CiAJCWlmIChybnAgPT0gcmRwLT5teW5vZGUpIHsKQEAgLTE3MTgsMTEgKzE3MTEsMTEgQEAKIAkJCXJkcC0+Y29tcGxldGVkID0gcm5wLT5jb21wbGV0ZWQ7CiAJCQlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gcm5wLT5jb21wbGV0ZWQgLSAxOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAgPSBybnAtPnBhcmVudDsKIAl9IHdoaWxlIChybnAgIT0gTlVMTCAmJiAhKHJucC0+cXNtYXNraW5pdCAmIG1hc2spKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfb25saW5lX2NwdShpbnQgY3B1KQpAQCAtMTgwNiwxMSArMTc5OSwxNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcmN1X2luaXRfb25lKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKKwlzdGF0aWMgY2hhciAqYnVmW10gPSB7ICJyY3Vfbm9kZV9sZXZlbF8wIiwKKwkJCSAgICAgICAicmN1X25vZGVfbGV2ZWxfMSIsCisJCQkgICAgICAgInJjdV9ub2RlX2xldmVsXzIiLAorCQkJICAgICAgICJyY3Vfbm9kZV9sZXZlbF8zIiB9OyAgLyogTWF0Y2ggTUFYX1JDVV9MVkxTICovCiAJaW50IGNwdXN0cmlkZSA9IDE7CiAJaW50IGk7CiAJaW50IGo7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKKwlCVUlMRF9CVUdfT04oTUFYX1JDVV9MVkxTID4gQVJSQVlfU0laRShidWYpKTsgIC8qIEZpeCBidWZbXSBpbml0ISAqLworCiAJLyogSW5pdGlhbGl6ZSB0aGUgbGV2ZWwtdHJhY2tpbmcgYXJyYXlzLiAqLwogCiAJZm9yIChpID0gMTsgaSA8IE5VTV9SQ1VfTFZMUzsgaSsrKQpAQCAtMTgyMyw4ICsxODIyLDkgQEAKIAkJY3B1c3RyaWRlICo9IHJzcC0+bGV2ZWxzcHJlYWRbaV07CiAJCXJucCA9IHJzcC0+bGV2ZWxbaV07CiAJCWZvciAoaiA9IDA7IGogPCByc3AtPmxldmVsY250W2ldOyBqKyssIHJucCsrKSB7Ci0JCQlzcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKLQkJCWxvY2tkZXBfc2V0X2NsYXNzKCZybnAtPmxvY2ssICZyY3Vfbm9kZV9jbGFzc1tpXSk7CisJCQlyYXdfc3Bpbl9sb2NrX2luaXQoJnJucC0+bG9jayk7CisJCQlsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZSgmcm5wLT5sb2NrLAorCQkJCQkJICAgJnJjdV9ub2RlX2NsYXNzW2ldLCBidWZbaV0pOwogCQkJcm5wLT5ncG51bSA9IDA7CiAJCQlybnAtPnFzbWFzayA9IDA7CiAJCQlybnAtPnFzbWFza2luaXQgPSAwOwpAQCAtMTg3Niw3ICsxODc2LDcgQEAKIAogdm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgY3B1OwogCiAJcmN1X2Jvb3R1cF9hbm5vdW5jZSgpOwogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCkBAIC0xODk2LDggKzE4OTYsOCBAQAogCSAqIG9yIHRoZSBzY2hlZHVsZXIgYXJlIG9wZXJhdGlvbmFsLgogCSAqLwogCWNwdV9ub3RpZmllcihyY3VfY3B1X25vdGlmeSwgMCk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQlyY3VfY3B1X25vdGlmeShOVUxMLCBDUFVfVVBfUFJFUEFSRSwgKHZvaWQgKikobG9uZylpKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJcmN1X2NwdV9ub3RpZnkoTlVMTCwgQ1BVX1VQX1BSRVBBUkUsICh2b2lkICopKGxvbmcpY3B1KTsKIH0KIAogI2luY2x1ZGUgInJjdXRyZWVfcGx1Z2luLmgiCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5oIGIva2VybmVsL3JjdXRyZWUuaAppbmRleCBkMmEwMDQ2Li4xNDM5ZWI1IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5oCisrKyBiL2tlcm5lbC9yY3V0cmVlLmgKQEAgLTkwLDEyICs5MCwxMiBAQAogICogRGVmaW5pdGlvbiBmb3Igbm9kZSB3aXRoaW4gdGhlIFJDVSBncmFjZS1wZXJpb2QtZGV0ZWN0aW9uIGhpZXJhcmNoeS4KICAqLwogc3RydWN0IHJjdV9ub2RlIHsKLQlzcGlubG9ja190IGxvY2s7CS8qIFJvb3QgcmN1X25vZGUncyBsb2NrIHByb3RlY3RzIHNvbWUgKi8KKwlyYXdfc3BpbmxvY2tfdCBsb2NrOwkvKiBSb290IHJjdV9ub2RlJ3MgbG9jayBwcm90ZWN0cyBzb21lICovCiAJCQkJLyogIHJjdV9zdGF0ZSBmaWVsZHMgYXMgd2VsbCBhcyBmb2xsb3dpbmcuICovCi0JbG9uZwlncG51bTsJCS8qIEN1cnJlbnQgZ3JhY2UgcGVyaW9kIGZvciB0aGlzIG5vZGUuICovCisJdW5zaWduZWQgbG9uZyBncG51bTsJLyogQ3VycmVudCBncmFjZSBwZXJpb2QgZm9yIHRoaXMgbm9kZS4gKi8KIAkJCQkvKiAgVGhpcyB3aWxsIGVpdGhlciBiZSBlcXVhbCB0byBvciBvbmUgKi8KIAkJCQkvKiAgYmVoaW5kIHRoZSByb290IHJjdV9ub2RlJ3MgZ3BudW0uICovCi0JbG9uZwljb21wbGV0ZWQ7CS8qIExhc3QgZ3JhY2UgcGVyaW9kIGNvbXBsZXRlZCBmb3IgdGhpcyBub2RlLiAqLworCXVuc2lnbmVkIGxvbmcgY29tcGxldGVkOyAvKiBMYXN0IEdQIGNvbXBsZXRlZCBmb3IgdGhpcyBub2RlLiAqLwogCQkJCS8qICBUaGlzIHdpbGwgZWl0aGVyIGJlIGVxdWFsIHRvIG9yIG9uZSAqLwogCQkJCS8qICBiZWhpbmQgdGhlIHJvb3QgcmN1X25vZGUncyBncG51bS4gKi8KIAl1bnNpZ25lZCBsb25nIHFzbWFzazsJLyogQ1BVcyBvciBncm91cHMgdGhhdCBuZWVkIHRvIHN3aXRjaCBpbiAqLwpAQCAtMTYxLDExICsxNjEsMTEgQEAKIC8qIFBlci1DUFUgZGF0YSBmb3IgcmVhZC1jb3B5IHVwZGF0ZS4gKi8KIHN0cnVjdCByY3VfZGF0YSB7CiAJLyogMSkgcXVpZXNjZW50LXN0YXRlIGFuZCBncmFjZS1wZXJpb2QgaGFuZGxpbmcgOiAqLwotCWxvbmcJCWNvbXBsZXRlZDsJLyogVHJhY2sgcnNwLT5jb21wbGV0ZWQgZ3AgbnVtYmVyICovCisJdW5zaWduZWQgbG9uZwljb21wbGV0ZWQ7CS8qIFRyYWNrIHJzcC0+Y29tcGxldGVkIGdwIG51bWJlciAqLwogCQkJCQkvKiAgaW4gb3JkZXIgdG8gZGV0ZWN0IEdQIGVuZC4gKi8KLQlsb25nCQlncG51bTsJCS8qIEhpZ2hlc3QgZ3AgbnVtYmVyIHRoYXQgdGhpcyBDUFUgKi8KKwl1bnNpZ25lZCBsb25nCWdwbnVtOwkJLyogSGlnaGVzdCBncCBudW1iZXIgdGhhdCB0aGlzIENQVSAqLwogCQkJCQkvKiAgaXMgYXdhcmUgb2YgaGF2aW5nIHN0YXJ0ZWQuICovCi0JbG9uZwkJcGFzc2VkX3F1aWVzY19jb21wbGV0ZWQ7CisJdW5zaWduZWQgbG9uZwlwYXNzZWRfcXVpZXNjX2NvbXBsZXRlZDsKIAkJCQkJLyogVmFsdWUgb2YgY29tcGxldGVkIGF0IHRpbWUgb2YgcXMuICovCiAJYm9vbAkJcGFzc2VkX3F1aWVzYzsJLyogVXNlci1tb2RlL2lkbGUgbG9vcCBldGMuICovCiAJYm9vbAkJcXNfcGVuZGluZzsJLyogQ29yZSB3YWl0cyBmb3IgcXVpZXNjIHN0YXRlLiAqLwpAQCAtMjIxLDE0ICsyMjEsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHJlc2NoZWRfaXBpOwkvKiBTZW50IGEgcmVzY2hlZCBJUEkuICovCiAKIAkvKiA1KSBfX3JjdV9wZW5kaW5nKCkgc3RhdGlzdGljcy4gKi8KLQlsb25nIG5fcmN1X3BlbmRpbmc7CQkvKiByY3VfcGVuZGluZygpIGNhbGxzIHNpbmNlIGJvb3QuICovCi0JbG9uZyBuX3JwX3FzX3BlbmRpbmc7Ci0JbG9uZyBuX3JwX2NiX3JlYWR5OwotCWxvbmcgbl9ycF9jcHVfbmVlZHNfZ3A7Ci0JbG9uZyBuX3JwX2dwX2NvbXBsZXRlZDsKLQlsb25nIG5fcnBfZ3Bfc3RhcnRlZDsKLQlsb25nIG5fcnBfbmVlZF9mcXM7Ci0JbG9uZyBuX3JwX25lZWRfbm90aGluZzsKKwl1bnNpZ25lZCBsb25nIG5fcmN1X3BlbmRpbmc7CS8qIHJjdV9wZW5kaW5nKCkgY2FsbHMgc2luY2UgYm9vdC4gKi8KKwl1bnNpZ25lZCBsb25nIG5fcnBfcXNfcGVuZGluZzsKKwl1bnNpZ25lZCBsb25nIG5fcnBfY2JfcmVhZHk7CisJdW5zaWduZWQgbG9uZyBuX3JwX2NwdV9uZWVkc19ncDsKKwl1bnNpZ25lZCBsb25nIG5fcnBfZ3BfY29tcGxldGVkOworCXVuc2lnbmVkIGxvbmcgbl9ycF9ncF9zdGFydGVkOworCXVuc2lnbmVkIGxvbmcgbl9ycF9uZWVkX2ZxczsKKwl1bnNpZ25lZCBsb25nIG5fcnBfbmVlZF9ub3RoaW5nOwogCiAJaW50IGNwdTsKIH07CkBAIC0yMzcsMTIgKzIzNywxMSBAQAogI2RlZmluZSBSQ1VfR1BfSURMRQkJMAkvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MuICovCiAjZGVmaW5lIFJDVV9HUF9JTklUCQkxCS8qIEdyYWNlIHBlcmlvZCBiZWluZyBpbml0aWFsaXplZC4gKi8KICNkZWZpbmUgUkNVX1NBVkVfRFlOVElDSwkyCS8qIE5lZWQgdG8gc2NhbiBkeW50aWNrIHN0YXRlLiAqLwotI2RlZmluZSBSQ1VfU0FWRV9DT01QTEVURUQJMwkvKiBOZWVkIHRvIHNhdmUgcnNwLT5jb21wbGV0ZWQuICovCi0jZGVmaW5lIFJDVV9GT1JDRV9RUwkJNAkvKiBOZWVkIHRvIGZvcmNlIHF1aWVzY2VudCBzdGF0ZS4gKi8KKyNkZWZpbmUgUkNVX0ZPUkNFX1FTCQkzCS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLwogI2lmZGVmIENPTkZJR19OT19IWgogI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9TQVZFX0RZTlRJQ0sKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KLSNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfU0FWRV9DT01QTEVURUQKKyNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfRk9SQ0VfUVMKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX05PX0haICovCiAKICNkZWZpbmUgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUwkgMwkvKiBmb3IgcnNwLT5qaWZmaWVzX2ZvcmNlX3FzICovCkBAIC0yNTYsNiArMjU1LDkgQEAKIAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwogCisjZGVmaW5lIFVMT05HX0NNUF9HRShhLCBiKQkoVUxPTkdfTUFYIC8gMiA+PSAoYSkgLSAoYikpCisjZGVmaW5lIFVMT05HX0NNUF9MVChhLCBiKQkoVUxPTkdfTUFYIC8gMiA8IChhKSAtIChiKSkKKwogLyoKICAqIFJDVSBnbG9iYWwgc3RhdGUsIGluY2x1ZGluZyBub2RlIGhpZXJhcmNoeS4gIFRoaXMgaGllcmFyY2h5IGlzCiAgKiByZXByZXNlbnRlZCBpbiAiaGVhcCIgZm9ybSBpbiBhIGRlbnNlIGFycmF5LiAgVGhlIHJvb3QgKGZpcnN0IGxldmVsKQpAQCAtMjc3LDEyICsyNzksMTkgQEAKIAogCXU4CXNpZ25hbGVkIF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAJCQkJCQkvKiBGb3JjZSBRUyBzdGF0ZS4gKi8KLQlsb25nCWdwbnVtOwkJCQkvKiBDdXJyZW50IGdwIG51bWJlci4gKi8KLQlsb25nCWNvbXBsZXRlZDsJCQkvKiAjIG9mIGxhc3QgY29tcGxldGVkIGdwLiAqLworCXU4CWZxc19hY3RpdmU7CQkJLyogZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgKi8KKwkJCQkJCS8qICBpcyBydW5uaW5nLiAqLworCXU4CWZxc19uZWVkX2dwOwkJCS8qIEEgQ1BVIHdhcyBwcmV2ZW50ZWQgZnJvbSAqLworCQkJCQkJLyogIHN0YXJ0aW5nIGEgbmV3IGdyYWNlICovCisJCQkJCQkvKiAgcGVyaW9kIGJlY2F1c2UgKi8KKwkJCQkJCS8qICBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSAqLworCQkJCQkJLyogIHdhcyBydW5uaW5nLiAqLworCXVuc2lnbmVkIGxvbmcgZ3BudW07CQkJLyogQ3VycmVudCBncCBudW1iZXIuICovCisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWQ7CQkvKiAjIG9mIGxhc3QgY29tcGxldGVkIGdwLiAqLwogCiAJLyogRW5kIG9mIGZpZWxkcyBndWFyZGVkIGJ5IHJvb3QgcmN1X25vZGUncyBsb2NrLiAqLwogCi0Jc3BpbmxvY2tfdCBvbm9mZmxvY2s7CQkJLyogZXhjbHVkZSBvbi9vZmZsaW5lIGFuZCAqLworCXJhd19zcGlubG9ja190IG9ub2ZmbG9jazsJCS8qIGV4Y2x1ZGUgb24vb2ZmbGluZSBhbmQgKi8KIAkJCQkJCS8qICBzdGFydGluZyBuZXcgR1AuICBBbHNvICovCiAJCQkJCQkvKiAgcHJvdGVjdHMgdGhlIGZvbGxvd2luZyAqLwogCQkJCQkJLyogIG9ycGhhbl9jYnMgZmllbGRzLiAqLwpAQCAtMjkyLDEwICszMDEsOCBAQAogCQkJCQkJLyogIGdvaW5nIG9mZmxpbmUuICovCiAJc3RydWN0IHJjdV9oZWFkICoqb3JwaGFuX2Nic190YWlsOwkvKiBBbmQgdGFpbCBwb2ludGVyLiAqLwogCWxvbmcgb3JwaGFuX3FsZW47CQkJLyogTnVtYmVyIG9mIG9ycGhhbmVkIGNicy4gKi8KLQlzcGlubG9ja190IGZxc2xvY2s7CQkJLyogT25seSBvbmUgdGFzayBmb3JjaW5nICovCisJcmF3X3NwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KIAkJCQkJCS8qICBxdWllc2NlbnQgc3RhdGVzLiAqLwotCWxvbmcJY29tcGxldGVkX2ZxczsJCQkvKiBWYWx1ZSBvZiBjb21wbGV0ZWQgQCBzbmFwLiAqLwotCQkJCQkJLyogIFByb3RlY3RlZCBieSBmcXNsb2NrLiAqLwogCXVuc2lnbmVkIGxvbmcgamlmZmllc19mb3JjZV9xczsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gaW52b2tlICovCiAJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuICovCiAJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzOwkJLyogTnVtYmVyIG9mIGNhbGxzIHRvICovCkBAIC0zMTksOCArMzI2LDYgQEAKICNkZWZpbmUgUkNVX09GTF9UQVNLU19FWFBfR1AJMHgyCQkvKiBUYXNrcyBibG9ja2luZyBleHBlZGl0ZWQgKi8KIAkJCQkJCS8qICBHUCB3ZXJlIG1vdmVkIHRvIHJvb3QuICovCiAKLSNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFCi0KIC8qCiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaW50ZXJuYWwgZGVjbGFyYXRpb25zOgogICovCkBAIC0zMzUsNyArMzQwLDcgQEAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9wcmVlbXB0X2RhdGEpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwogCi0jZWxzZSAvKiAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLworI2lmbmRlZiBSQ1VfVFJFRV9OT05DT1JFCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciByY3V0cmVlX3BsdWdpbi5oICovCiBzdGF0aWMgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpOwpAQCAtMzQ3LDYgKzM1Miw3IEBACiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApOwpAQCAtMzY3LDUgKzM3Myw2IEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKTsKIHN0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCk7CitzdGF0aWMgdm9pZCByY3VfbmVlZHNfY3B1X2ZsdXNoKHZvaWQpOwogCi0jZW5kaWYgLyogI2Vsc2UgI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KKyNlbmRpZiAvKiAjaWZuZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oIGIva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKaW5kZXggMzdmYmNjZC4uNDY0YWQyYyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKKysrIGIva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKQEAgLTYyLDYgKzYyLDE1IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmF0Y2hlc19jb21wbGV0ZWQpOwogCiAvKgorICogRm9yY2UgYSBxdWllc2NlbnQgc3RhdGUgZm9yIHByZWVtcHRpYmxlIFJDVS4KKyAqLwordm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7CisJZm9yY2VfcXVpZXNjZW50X3N0YXRlKCZyY3VfcHJlZW1wdF9zdGF0ZSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKKworLyoKICAqIFJlY29yZCBhIHByZWVtcHRhYmxlLVJDVSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVLiAgTm90ZQogICogdGhhdCB0aGlzIGp1c3QgbWVhbnMgdGhhdCB0aGUgdGFzayBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgQ1BVIGlzCiAgKiBub3QgaW4gYSBxdWllc2NlbnQgc3RhdGUuICBUaGVyZSBtaWdodCBiZSBhbnkgbnVtYmVyIG9mIHRhc2tzIGJsb2NrZWQKQEAgLTEwMiw3ICsxMTEsNyBAQAogCQkvKiBQb3NzaWJseSBibG9ja2luZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICovCiAJCXJkcCA9IHJjdV9wcmVlbXB0X3N0YXRlLnJkYVtjcHVdOwogCQlybnAgPSByZHAtPm15bm9kZTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCB8PSBSQ1VfUkVBRF9VTkxPQ0tfQkxPQ0tFRDsKIAkJdC0+cmN1X2Jsb2NrZWRfbm9kZSA9IHJucDsKIApAQCAtMTIzLDcgKzEzMiw3IEBACiAJCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmdC0+cmN1X25vZGVfZW50cnkpKTsKIAkJcGhhc2UgPSAocm5wLT5ncG51bSArICEocm5wLT5xc21hc2sgJiByZHAtPmdycG1hc2spKSAmIDB4MTsKIAkJbGlzdF9hZGQoJnQtPnJjdV9ub2RlX2VudHJ5LCAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJLyoKQEAgLTE4MCw3ICsxODksNyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3A7CiAKIAlpZiAocm5wLT5xc21hc2sgIT0gMCB8fCByY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47ICAvKiBTdGlsbCBuZWVkIG1vcmUgcXVpZXNjZW50IHN0YXRlcyEgKi8KIAl9CiAKQEAgLTE5Nyw4ICsyMDYsOCBAQAogCiAJLyogUmVwb3J0IHVwIHRoZSByZXN0IG9mIHRoZSBoaWVyYXJjaHkuICovCiAJbWFzayA9IHJucC0+Z3JwbWFzazsKLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCi0Jc3Bpbl9sb2NrKCZybnBfcC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX2xvY2soJnJucF9wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCXJjdV9yZXBvcnRfcXNfcm5wKG1hc2ssICZyY3VfcHJlZW1wdF9zdGF0ZSwgcm5wX3AsIGZsYWdzKTsKIH0KIApAQCAtMjQ4LDEwICsyNTcsMTAgQEAKIAkJICovCiAJCWZvciAoOzspIHsKIAkJCXJucCA9IHQtPnJjdV9ibG9ja2VkX25vZGU7Ci0JCQlzcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQkJaWYgKHJucCA9PSB0LT5yY3VfYmxvY2tlZF9ub2RlKQogCQkJCWJyZWFrOwotCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KIAkJZW1wdHkgPSAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCk7CiAJCWVtcHR5X2V4cCA9ICFyY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKHJucCk7CkBAIC0yNjUsNyArMjc0LDcgQEAKIAkJICogTm90ZSB0aGF0IHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoKSByZWxlYXNlcyBybnAtPmxvY2suCiAJCSAqLwogCQlpZiAoZW1wdHkpCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJZWxzZQogCQkJcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucChybnAsIGZsYWdzKTsKIApAQCAtMjk1LDE2ICszMDQsMjEgQEAKIAlpZiAoLS1BQ0NFU1NfT05DRSh0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcpID09IDAgJiYKIAkgICAgdW5saWtlbHkoQUNDRVNTX09OQ0UodC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwpKSkKIAkJcmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwodCk7CisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKKwlXQVJOX09OX09OQ0UoQUNDRVNTX09OQ0UodC0+cmN1X3JlYWRfbG9ja19uZXN0aW5nKSA8IDApOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19yY3VfcmVhZF91bmxvY2spOwogCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAorI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UKKwogLyoKLSAqIFNjYW4gdGhlIGN1cnJlbnQgbGlzdCBvZiB0YXNrcyBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCi0gKiBzZWN0aW9ucywgcHJpbnRpbmcgb3V0IHRoZSB0aWQgb2YgZWFjaC4KKyAqIER1bXAgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGFsbCB0YXNrcyBibG9ja2luZyB0aGUgY3VycmVudCBSQ1UKKyAqIGdyYWNlIHBlcmlvZCBvbiB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGxfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHA7CkBAIC0zMTIsMTIgKzMyNiw1MSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAogCWlmIChyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKKwkJbHAgPSAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBscCwgcmN1X25vZGVfZW50cnkpCisJCQlzY2hlZF9zaG93X3Rhc2sodCk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBEdW1wIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhbGwgdGFza3MgYmxvY2tpbmcgdGhlIGN1cnJlbnQgUkNVCisgKiBncmFjZSBwZXJpb2QuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKKworCXJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAocm5wKTsKKwlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKQorCQlyY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGxfcm5wKHJucCk7Cit9CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFICovCisKK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRSAqLworCisvKgorICogU2NhbiB0aGUgY3VycmVudCBsaXN0IG9mIHRhc2tzIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKyAqIHNlY3Rpb25zLCBwcmludGluZyBvdXQgdGhlIHRpZCBvZiBlYWNoLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKKwlpbnQgcGhhc2U7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJaWYgKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7CiAJCXBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKIAkJbHAgPSAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBscCwgcmN1X25vZGVfZW50cnkpCiAJCQlwcmludGsoIiBQJWQiLCB0LT5waWQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTM4OCwxMSArNDQxLDExIEBACiAJCWxwX3Jvb3QgPSAmcm5wX3Jvb3QtPmJsb2NrZWRfdGFza3NbaV07CiAJCXdoaWxlICghbGlzdF9lbXB0eShscCkpIHsKIAkJCXRwID0gbGlzdF9lbnRyeShscC0+bmV4dCwgdHlwZW9mKCp0cCksIHJjdV9ub2RlX2VudHJ5KTsKLQkJCXNwaW5fbG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwkJCXJhd19zcGluX2xvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJCQlsaXN0X2RlbCgmdHAtPnJjdV9ub2RlX2VudHJ5KTsKIAkJCXRwLT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wX3Jvb3Q7CiAJCQlsaXN0X2FkZCgmdHAtPnJjdV9ub2RlX2VudHJ5LCBscF9yb290KTsKLQkJCXNwaW5fdW5sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCQlyYXdfc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJfQogCX0KIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTE2LDcgKzU2OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKDs7KSB7CiAJCWlmICghc3luY19yY3VfcHJlZW1wdF9leHBfZG9uZShybnApKQogCQkJYnJlYWs7CkBAIC01MjUsMTIgKzU3OCwxMiBAQAogCQkJYnJlYWs7CiAJCX0KIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJcm5wID0gcm5wLT5wYXJlbnQ7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLwogCQlybnAtPmV4cG1hc2sgJj0gfm1hc2s7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTU0NSwxMSArNTk4LDExIEBACiB7CiAJaW50IG11c3Rfd2FpdDsKIAotCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCisJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJbGlzdF9zcGxpY2VfaW5pdCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzBdLCAmcm5wLT5ibG9ja2VkX3Rhc2tzWzJdKTsKIAlsaXN0X3NwbGljZV9pbml0KCZybnAtPmJsb2NrZWRfdGFza3NbMV0sICZybnAtPmJsb2NrZWRfdGFza3NbM10pOwogCW11c3Rfd2FpdCA9IHJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAocm5wKTsKLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCiAJaWYgKCFtdXN0X3dhaXQpCiAJCXJjdV9yZXBvcnRfZXhwX3JucChyc3AsIHJucCk7CiB9CkBAIC01OTQsMTMgKzY0NywxMyBAQAogCS8qIGZvcmNlIGFsbCBSQ1UgcmVhZGVycyBvbnRvIGJsb2NrZWRfdGFza3NbXS4gKi8KIAlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAogCS8qIEluaXRpYWxpemUgLT5leHBtYXNrIGZvciBhbGwgbm9uLWxlYWYgcmN1X25vZGUgc3RydWN0dXJlcy4gKi8KIAlyY3VfZm9yX2VhY2hfbm9ubGVhZl9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIHsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcm5wLT5leHBtYXNrID0gcm5wLT5xc21hc2tpbml0OwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJfQogCiAJLyogU25hcHNob3QgY3VycmVudCBzdGF0ZSBvZiAtPmJsb2NrZWRfdGFza3NbXSBsaXN0cy4gKi8KQEAgLTYwOSw3ICs2NjIsNyBAQAogCWlmIChOVU1fUkNVX05PREVTID4gMSkKIAkJc3luY19yY3VfcHJlZW1wdF9leHBfaW5pdChyc3AsIHJjdV9nZXRfcm9vdChyc3ApKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAKIAkvKiBXYWl0IGZvciBzbmFwc2hvdHRlZCAtPmJsb2NrZWRfdGFza3NbXSBsaXN0cyB0byBkcmFpbi4gKi8KIAlybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKQEAgLTcxMyw2ICs3NjYsMTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7CiAKIC8qCisgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgUkNVLCB3aGljaCwgYmVjYXVzZSB0aGVyZSBpcyBubyBwcmVlbXB0aWJsZQorICogUkNVLCBiZWNvbWVzIHRoZSBzYW1lIGFzIHJjdS1zY2hlZC4KKyAqLwordm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7CisJcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSk7CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKICAqIENQVXMgYmVpbmcgaW4gcXVpZXNjZW50IHN0YXRlcy4KICAqLwpAQCAtNzM0LDcgKzc5Nyw3IEBACiAvKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgbm8gcXVpZXRpbmcgb2YgdGFza3MuICovCiBzdGF0aWMgdm9pZCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KQEAgLTc0NSw2ICs4MDgsMTQgQEAKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgogICogdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KICAqLworc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKK30KKworLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgorICogdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KKyAqLwogc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApCiB7CiB9CkBAIC04ODQsMyArOTU1LDExMyBAQAogfQogCiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfUkNVX0ZBU1RfTk9fSFopCisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYW55IGZ1dHVyZSBSQ1UtcmVsYXRlZCB3b3JrIHdpbGwgbmVlZCB0byBiZSBkb25lCisgKiBieSB0aGUgY3VycmVudCBDUFUsIGV2ZW4gaWYgbm9uZSBuZWVkIGJlIGRvbmUgaW1tZWRpYXRlbHksIHJldHVybmluZworICogMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUkNVIGltcGxlbWVudGF0aW9uOyBpdCBpcyAtbm90LQorICogYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgorICoKKyAqIEJlY2F1c2Ugd2UgaGF2ZSBwcmVlbXB0aWJsZSBSQ1UsIGp1c3QgY2hlY2sgd2hldGhlciB0aGlzIENQVSBuZWVkcworICogYW55IGZsYXZvciBvZiBSQ1UuICBEbyBub3QgY2hldyB1cCBsb3RzIG9mIENQVSBjeWNsZXMgd2l0aCBwcmVlbXB0aW9uCisgKiBkaXNhYmxlZCBpbiBhIG1vc3QtbGlrZWx5IHZhaW4gYXR0ZW1wdCB0byBjYXVzZSBSQ1Ugbm90IHRvIG5lZWQgdGhpcyBDUFUuCisgKi8KK2ludCByY3VfbmVlZHNfY3B1KGludCBjcHUpCit7CisJcmV0dXJuIHJjdV9uZWVkc19jcHVfcXVpY2tfY2hlY2soY3B1KTsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNvbnRpbnVlIGEgY2FsbGJhY2stZmx1c2ggb3BlcmF0aW9ucyB0bworICogYWxsb3cgdGhlIGxhc3QgQ1BVIHRvIGVudGVyIGR5bnRpY2staWRsZSBtb2RlLiAgQnV0IGZhc3QgZHludGljay1pZGxlCisgKiBlbnRyeSBpcyBub3QgY29uZmlndXJlZCwgc28gd2UgbmV2ZXIgZG8gbmVlZCB0by4KKyAqLworc3RhdGljIHZvaWQgcmN1X25lZWRzX2NwdV9mbHVzaCh2b2lkKQoreworfQorCisjZWxzZSAvKiAjaWYgIWRlZmluZWQoQ09ORklHX1JDVV9GQVNUX05PX0haKSAqLworCisjZGVmaW5lIFJDVV9ORUVEU19DUFVfRkxVU0hFUyA1CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCByY3VfZHludGlja19kcmFpbik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcmN1X2R5bnRpY2tfaG9sZG9mZik7CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYW55IGZ1dHVyZSBSQ1UtcmVsYXRlZCB3b3JrIHdpbGwgbmVlZCB0byBiZSBkb25lCisgKiBieSB0aGUgY3VycmVudCBDUFUsIGV2ZW4gaWYgbm9uZSBuZWVkIGJlIGRvbmUgaW1tZWRpYXRlbHksIHJldHVybmluZworICogMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUkNVIGltcGxlbWVudGF0aW9uOyBpdCBpcyAtbm90LQorICogYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgorICoKKyAqIEJlY2F1c2Ugd2UgYXJlIG5vdCBzdXBwb3J0aW5nIHByZWVtcHRpYmxlIFJDVSwgYXR0ZW1wdCB0byBhY2NlbGVyYXRlCisgKiBhbnkgY3VycmVudCBncmFjZSBwZXJpb2RzIHNvIHRoYXQgUkNVIG5vIGxvbmdlciBuZWVkcyB0aGlzIENQVSwgYnV0CisgKiBvbmx5IGlmIGFsbCBvdGhlciBDUFVzIGFyZSBhbHJlYWR5IGluIGR5bnRpY2tzLWlkbGUgbW9kZS4gIFRoaXMgd2lsbAorICogYWxsb3cgdGhlIENQVSBjb3JlcyB0byBiZSBwb3dlcmVkIGRvd24gaW1tZWRpYXRlbHksIGFzIG9wcG9zZWQgdG8gYWZ0ZXIKKyAqIHdhaXRpbmcgbWFueSBtaWxsaXNlY29uZHMgZm9yIGdyYWNlIHBlcmlvZHMgdG8gZWxhcHNlLgorICoKKyAqIEJlY2F1c2UgaXQgaXMgbm90IGxlZ2FsIHRvIGludm9rZSByY3VfcHJvY2Vzc19jYWxsYmFja3MoKSB3aXRoIGlycXMKKyAqIGRpc2FibGVkLCB3ZSBkbyBvbmUgcGFzcyBvZiBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgdGhlbiBkbyBhCisgKiByYWlzZV9zb2Z0aXJxKCkgdG8gY2F1c2UgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdG8gYmUgaW52b2tlZCBsYXRlci4KKyAqIFRoZSBwZXItY3B1IHJjdV9keW50aWNrX2RyYWluIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBzZXF1ZW5jaW5nLgorICovCitpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KQoreworCWludCBjID0gMDsKKwlpbnQgdGhhdGNwdTsKKworCS8qIERvbid0IGJvdGhlciB1bmxlc3Mgd2UgYXJlIHRoZSBsYXN0IG5vbi1keW50aWNrLWlkbGUgQ1BVLiAqLworCWZvcl9lYWNoX2NwdV9ub3QodGhhdGNwdSwgbm9oel9jcHVfbWFzaykKKwkJaWYgKHRoYXRjcHUgIT0gY3B1KSB7CisJCQlwZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpID0gMDsKKwkJCXBlcl9jcHUocmN1X2R5bnRpY2tfaG9sZG9mZiwgY3B1KSA9IGppZmZpZXMgLSAxOworCQkJcmV0dXJuIHJjdV9uZWVkc19jcHVfcXVpY2tfY2hlY2soY3B1KTsKKwkJfQorCisJLyogQ2hlY2sgYW5kIHVwZGF0ZSB0aGUgcmN1X2R5bnRpY2tfZHJhaW4gc2VxdWVuY2luZy4gKi8KKwlpZiAocGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA8PSAwKSB7CisJCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSB0aGUgY291bnRlci4gKi8KKwkJcGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA9IFJDVV9ORUVEU19DUFVfRkxVU0hFUzsKKwl9IGVsc2UgaWYgKC0tcGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA8PSAwKSB7CisJCS8qIFdlIGhhdmUgaGl0IHRoZSBsaW1pdCwgc28gdGltZSB0byBnaXZlIHVwLiAqLworCQlwZXJfY3B1KHJjdV9keW50aWNrX2hvbGRvZmYsIGNwdSkgPSBqaWZmaWVzOworCQlyZXR1cm4gcmN1X25lZWRzX2NwdV9xdWlja19jaGVjayhjcHUpOworCX0KKworCS8qIERvIG9uZSBzdGVwIHB1c2hpbmcgcmVtYWluaW5nIFJDVSBjYWxsYmFja3MgdGhyb3VnaC4gKi8KKwlpZiAocGVyX2NwdShyY3Vfc2NoZWRfZGF0YSwgY3B1KS5ueHRsaXN0KSB7CisJCXJjdV9zY2hlZF9xcyhjcHUpOworCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9zY2hlZF9zdGF0ZSwgMCk7CisJCWMgPSBjIHx8IHBlcl9jcHUocmN1X3NjaGVkX2RhdGEsIGNwdSkubnh0bGlzdDsKKwl9CisJaWYgKHBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSkubnh0bGlzdCkgeworCQlyY3VfYmhfcXMoY3B1KTsKKwkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKCZyY3VfYmhfc3RhdGUsIDApOworCQljID0gYyB8fCBwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpLm54dGxpc3Q7CisJfQorCisJLyogSWYgUkNVIGNhbGxiYWNrcyBhcmUgc3RpbGwgcGVuZGluZywgUkNVIHN0aWxsIG5lZWRzIHRoaXMgQ1BVLiAqLworCWlmIChjKSB7CisJCXJhaXNlX3NvZnRpcnEoUkNVX1NPRlRJUlEpOworCQlwZXJfY3B1KHJjdV9keW50aWNrX2hvbGRvZmYsIGNwdSkgPSBqaWZmaWVzOworCX0KKwlyZXR1cm4gYzsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNvbnRpbnVlIGEgY2FsbGJhY2stZmx1c2ggb3BlcmF0aW9ucyB0bworICogYWxsb3cgdGhlIGxhc3QgQ1BVIHRvIGVudGVyIGR5bnRpY2staWRsZSBtb2RlLgorICovCitzdGF0aWMgdm9pZCByY3VfbmVlZHNfY3B1X2ZsdXNoKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHBlcl9jcHUocmN1X2R5bnRpY2tfZHJhaW4sIGNwdSkgPD0gMCkKKwkJcmV0dXJuOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkodm9pZClyY3VfbmVlZHNfY3B1KGNwdSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmICFkZWZpbmVkKENPTkZJR19SQ1VfRkFTVF9OT19IWikgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCmluZGV4IDlkMmM4ODQuLmQ0NWRiMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKKysrIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwpAQCAtNTAsNyArNTAsNyBAQAogewogCWlmICghcmRwLT5iZWVub25saW5lKQogCQlyZXR1cm47Ci0Jc2VxX3ByaW50ZihtLCAiJTNkJWNjPSVsZCBnPSVsZCBwcT0lZCBwcWM9JWxkIHFwPSVkIiwKKwlzZXFfcHJpbnRmKG0sICIlM2QlY2M9JWx1IGc9JWx1IHBxPSVkIHBxYz0lbHUgcXA9JWQiLAogCQkgICByZHAtPmNwdSwKIAkJICAgY3B1X2lzX29mZmxpbmUocmRwLT5jcHUpID8gJyEnIDogJyAnLAogCQkgICByZHAtPmNvbXBsZXRlZCwgcmRwLT5ncG51bSwKQEAgLTEwNSw3ICsxMDUsNyBAQAogewogCWlmICghcmRwLT5iZWVub25saW5lKQogCQlyZXR1cm47Ci0Jc2VxX3ByaW50ZihtLCAiJWQsJXMsJWxkLCVsZCwlZCwlbGQsJWQiLAorCXNlcV9wcmludGYobSwgIiVkLCVzLCVsdSwlbHUsJWQsJWx1LCVkIiwKIAkJICAgcmRwLT5jcHUsCiAJCSAgIGNwdV9pc19vZmZsaW5lKHJkcC0+Y3B1KSA/ICJcIk5cIiIgOiAiXCJZXCIiLAogCQkgICByZHAtPmNvbXBsZXRlZCwgcmRwLT5ncG51bSwKQEAgLTE1NSwxMyArMTU1LDEzIEBACiAKIHN0YXRpYyB2b2lkIHByaW50X29uZV9yY3Vfc3RhdGUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7Ci0JbG9uZyBncG51bTsKKwl1bnNpZ25lZCBsb25nIGdwbnVtOwogCWludCBsZXZlbCA9IDA7CiAJaW50IHBoYXNlOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJZ3BudW0gPSByc3AtPmdwbnVtOwotCXNlcV9wcmludGYobSwgImM9JWxkIGc9JWxkIHM9JWQgamZxPSVsZCBqPSV4ICIKKwlzZXFfcHJpbnRmKG0sICJjPSVsdSBnPSVsdSBzPSVkIGpmcT0lbGQgaj0leCAiCiAJCSAgICAgICJuZnFzPSVsdS9uZnFzbmc9JWx1KCVsdSkgZnFsaD0lbHUgb3FsZW49JWxkXG4iLAogCQkgICByc3AtPmNvbXBsZXRlZCwgZ3BudW0sIHJzcC0+c2lnbmFsZWQsCiAJCSAgIChsb25nKShyc3AtPmppZmZpZXNfZm9yY2VfcXMgLSBqaWZmaWVzKSwKQEAgLTIxNSwxMiArMjE1LDEyIEBACiBzdGF0aWMgaW50IHNob3dfcmN1Z3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7CiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKLQlzZXFfcHJpbnRmKG0sICJyY3VfcHJlZW1wdDogY29tcGxldGVkPSVsZCAgZ3BudW09JWxkXG4iLAorCXNlcV9wcmludGYobSwgInJjdV9wcmVlbXB0OiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbHVcbiIsCiAJCSAgIHJjdV9wcmVlbXB0X3N0YXRlLmNvbXBsZXRlZCwgcmN1X3ByZWVtcHRfc3RhdGUuZ3BudW0pOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwotCXNlcV9wcmludGYobSwgInJjdV9zY2hlZDogY29tcGxldGVkPSVsZCAgZ3BudW09JWxkXG4iLAorCXNlcV9wcmludGYobSwgInJjdV9zY2hlZDogY29tcGxldGVkPSVsZCAgZ3BudW09JWx1XG4iLAogCQkgICByY3Vfc2NoZWRfc3RhdGUuY29tcGxldGVkLCByY3Vfc2NoZWRfc3RhdGUuZ3BudW0pOwotCXNlcV9wcmludGYobSwgInJjdV9iaDogY29tcGxldGVkPSVsZCAgZ3BudW09JWxkXG4iLAorCXNlcV9wcmludGYobSwgInJjdV9iaDogY29tcGxldGVkPSVsZCAgZ3BudW09JWx1XG4iLAogCQkgICByY3VfYmhfc3RhdGUuY29tcGxldGVkLCByY3VfYmhfc3RhdGUuZ3BudW0pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc291cmNlLmMgYi9rZXJuZWwvcmVzb3VyY2UuYwppbmRleCBhZjk2YzFlNC4uNGU5ZDg3ZiAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTE4OCw2ICsxODgsMzYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIHZvaWQgX19yZWxlYXNlX2NoaWxkX3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisJc3RydWN0IHJlc291cmNlICp0bXAsICpwOworCXJlc291cmNlX3NpemVfdCBzaXplOworCisJcCA9IHItPmNoaWxkOworCXItPmNoaWxkID0gTlVMTDsKKwl3aGlsZSAocCkgeworCQl0bXAgPSBwOworCQlwID0gcC0+c2libGluZzsKKworCQl0bXAtPnBhcmVudCA9IE5VTEw7CisJCXRtcC0+c2libGluZyA9IE5VTEw7CisJCV9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXModG1wKTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAicmVsZWFzZSBjaGlsZCByZXNvdXJjZSAlcFJcbiIsIHRtcCk7CisJCS8qIG5lZWQgdG8gcmVzdG9yZSBzaXplLCBhbmQga2VlcCBmbGFncyAqLworCQlzaXplID0gcmVzb3VyY2Vfc2l6ZSh0bXApOworCQl0bXAtPnN0YXJ0ID0gMDsKKwkJdG1wLT5lbmQgPSBzaXplIC0gMTsKKwl9Cit9CisKK3ZvaWQgcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyKQoreworCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOworCV9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMocik7CisJd3JpdGVfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKK30KKwogLyoqCiAgKiByZXF1ZXN0X3Jlc291cmNlIC0gcmVxdWVzdCBhbmQgcmVzZXJ2ZSBhbiBJL08gb3IgbWVtb3J5IHJlc291cmNlCiAgKiBAcm9vdDogcm9vdCByZXNvdXJjZSBkZXNjcmlwdG9yCkBAIC0yOTcsMTQgKzMyNywyOSBAQAogCiAjZW5kaWYKIAorc3RhdGljIGludCBfX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdm9pZCAqYXJnKQoreworCXJldHVybiAxOworfQorLyoKKyAqIFRoaXMgZ2VuZXJpYyBwYWdlX2lzX3JhbSgpIHJldHVybnMgdHJ1ZSBpZiBzcGVjaWZpZWQgYWRkcmVzcyBpcworICogcmVnaXN0ZXJlZCBhcyAiU3lzdGVtIFJBTSIgaW4gaW9tZW1fcmVzb3VyY2UgbGlzdC4KKyAqLworaW50IF9fd2VhayBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gd2Fsa19zeXN0ZW1fcmFtX3JhbmdlKHBmbiwgMSwgTlVMTCwgX19pc19yYW0pID09IDE7Cit9CisKIC8qCiAgKiBGaW5kIGVtcHR5IHNsb3QgaW4gdGhlIHJlc291cmNlIHRyZWUgZ2l2ZW4gcmFuZ2UgYW5kIGFsaWdubWVudC4KICAqLwogc3RhdGljIGludCBmaW5kX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcsCiAJCQkgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBtaW4sCiAJCQkgcmVzb3VyY2Vfc2l6ZV90IG1heCwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduLAotCQkJIHZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJCXJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKKwkJCSByZXNvdXJjZV9zaXplX3QgKCphbGlnbmYpKHZvaWQgKiwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJICAgcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkJICAgcmVzb3VyY2Vfc2l6ZV90KSwKIAkJCSB2b2lkICphbGlnbmZfZGF0YSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnRoaXMgPSByb290LT5jaGlsZDsKQEAgLTMzMCw3ICszNzUsNyBAQAogCQkJdG1wLmVuZCA9IG1heDsKIAkJdG1wLnN0YXJ0ID0gQUxJR04odG1wLnN0YXJ0LCBhbGlnbik7CiAJCWlmIChhbGlnbmYpCi0JCQlhbGlnbmYoYWxpZ25mX2RhdGEsICZ0bXAsIHNpemUsIGFsaWduKTsKKwkJCXRtcC5zdGFydCA9IGFsaWduZihhbGlnbmZfZGF0YSwgJnRtcCwgc2l6ZSwgYWxpZ24pOwogCQlpZiAodG1wLnN0YXJ0IDwgdG1wLmVuZCAmJiB0bXAuZW5kIC0gdG1wLnN0YXJ0ID49IHNpemUgLSAxKSB7CiAJCQluZXctPnN0YXJ0ID0gdG1wLnN0YXJ0OwogCQkJbmV3LT5lbmQgPSB0bXAuc3RhcnQgKyBzaXplIC0gMTsKQEAgLTM1OCw4ICs0MDMsMTAgQEAKIGludCBhbGxvY2F0ZV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAogCQkgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IG1pbiwKIAkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IG1heCwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduLAotCQkgICAgICB2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAotCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpLAorCQkgICAgICByZXNvdXJjZV9zaXplX3QgKCphbGlnbmYpKHZvaWQgKiwKKwkJCQkJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkJcmVzb3VyY2Vfc2l6ZV90KSwKIAkJICAgICAgdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggNDUwOGZlNy4uNmEyMTJjOSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNjaGVkX2RvbWFpbnNfbXV0ZXgpOwogCi0jaWZkZWYgQ09ORklHX0dST1VQX1NDSEVECisjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CiAKQEAgLTI0MywxMyArMjQzLDcgQEAKIAogLyogdGFzayBncm91cCByZWxhdGVkIGluZm9ybWF0aW9uICovCiBzdHJ1Y3QgdGFza19ncm91cCB7Ci0jaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQl1aWRfdCB1aWQ7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJLyogc2NoZWR1bGFibGUgZW50aXRpZXMgb2YgdGhpcyBncm91cCBvbiBlYWNoIGNwdSAqLwpAQCAtMjc0LDM1ICsyNjgsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CiB9OwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQotLyogSGVscGVyIGZ1bmN0aW9uIHRvIHBhc3MgdWlkIGluZm9ybWF0aW9uIHRvIGNyZWF0ZV9zY2hlZF91c2VyKCkgKi8KLXZvaWQgc2V0X3RnX3VpZChzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCi17Ci0JdXNlci0+dGctPnVpZCA9IHVzZXItPnVpZDsKLX0KLQotLyoKLSAqIFJvb3QgdGFzayBncm91cC4KLSAqCUV2ZXJ5IFVJRCB0YXNrIGdyb3VwIChpbmNsdWRpbmcgaW5pdF90YXNrX2dyb3VwIGFrYSBVSUQtMCkgd2lsbAotICoJYmUgYSBjaGlsZCB0byB0aGlzIGdyb3VwLgotICovCi1zdHJ1Y3QgdGFza19ncm91cCByb290X3Rhc2tfZ3JvdXA7Ci0KLSNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotLyogRGVmYXVsdCB0YXNrIGdyb3VwJ3Mgc2NoZWQgZW50aXR5IG9uIGVhY2ggY3B1ICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX2VudGl0eSwgaW5pdF9zY2hlZF9lbnRpdHkpOwotLyogRGVmYXVsdCB0YXNrIGdyb3VwJ3MgY2ZzX3JxIG9uIGVhY2ggY3B1ICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNmc19ycSwgaW5pdF90Z19jZnNfcnEpOwotI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovCi0KLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5LCBpbml0X3NjaGVkX3J0X2VudGl0eSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJ0X3JxLCBpbml0X3J0X3JxX3Zhcik7Ci0jZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCi0jZWxzZSAvKiAhQ09ORklHX1VTRVJfU0NIRUQgKi8KICNkZWZpbmUgcm9vdF90YXNrX2dyb3VwIGluaXRfdGFza19ncm91cAotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAKIC8qIHRhc2tfZ3JvdXBfbG9jayBzZXJpYWxpemVzIGFkZC9yZW1vdmUgb2YgdGFzayBncm91cHMgYW5kIGFsc28gY2hhbmdlcyB0bwogICogYSB0YXNrIGdyb3VwJ3MgY3B1IHNoYXJlcy4KQEAgLTMxOCwxMSArMjg0LDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLSMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECSgyKk5JQ0VfMF9MT0FEKQotI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCiAjIGRlZmluZSBJTklUX1RBU0tfR1JPVVBfTE9BRAlOSUNFXzBfTE9BRAotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAKIC8qCiAgKiBBIHdlaWdodCBvZiAwIG9yIDEgY2FuIGNhdXNlIGFyaXRobWV0aWNzIHByb2JsZW1zLgpAQCAtMzQ4LDExICszMTAsNyBAQAogewogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JcmN1X3JlYWRfbG9jaygpOwotCXRnID0gX190YXNrX2NyZWQocCktPnVzZXItPnRnOwotCXJjdV9yZWFkX3VubG9jaygpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ0dST1VQX1NDSEVEKQorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAl0ZyA9IGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZShwLCBjcHVfY2dyb3VwX3N1YnN5c19pZCksCiAJCQkJc3RydWN0IHRhc2tfZ3JvdXAsIGNzcyk7CiAjZWxzZQpAQCAtMzgzLDcgKzM0MSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNlbmRpZgkvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KKyNlbmRpZgkvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovCiAKIC8qIENGUy1yZWxhdGVkIGZpZWxkcyBpbiBhIHJ1bnF1ZXVlICovCiBzdHJ1Y3QgY2ZzX3JxIHsKQEAgLTQ3OCw3ICs0MzYsNiBAQAogCXN0cnVjdCBycSAqcnE7CiAJc3RydWN0IGxpc3RfaGVhZCBsZWFmX3J0X3JxX2xpc3Q7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwotCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlOwogI2VuZGlmCiB9OwogCkBAIC02NDUsNiArNjAyLDExIEBACiAjZW5kaWYKIH0KIAorI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfc2NoZWRfZG9tYWluKHApIFwKKwlyY3VfZGVyZWZlcmVuY2VfY2hlY2soKHApLCBcCisJCQkgICAgICByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSB8fCBcCisJCQkgICAgICBsb2NrZGVwX2lzX2hlbGQoJnNjaGVkX2RvbWFpbnNfbXV0ZXgpKQorCiAvKgogICogVGhlIGRvbWFpbiB0cmVlIChycS0+c2QpIGlzIHByb3RlY3RlZCBieSBSQ1UncyBxdWllc2NlbnQgc3RhdGUgdHJhbnNpdGlvbi4KICAqIFNlZSBkZXRhY2hfZGVzdHJveV9kb21haW5zOiBzeW5jaHJvbml6ZV9zY2hlZCBmb3IgZGV0YWlscy4KQEAgLTY1Myw3ICs2MTUsNyBAQAogICogcHJlZW1wdC1kaXNhYmxlZCBzZWN0aW9ucy4KICAqLwogI2RlZmluZSBmb3JfZWFjaF9kb21haW4oY3B1LCBfX3NkKSBcCi0JZm9yIChfX3NkID0gcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7IF9fc2Q7IF9fc2QgPSBfX3NkLT5wYXJlbnQpCisJZm9yIChfX3NkID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrX3NjaGVkX2RvbWFpbihjcHVfcnEoY3B1KS0+c2QpOyBfX3NkOyBfX3NkID0gX19zZC0+cGFyZW50KQogCiAjZGVmaW5lIGNwdV9ycShjcHUpCQkoJnBlcl9jcHUocnVucXVldWVzLCAoY3B1KSkpCiAjZGVmaW5lIHRoaXNfcnEoKQkJKCZfX2dldF9jcHVfdmFyKHJ1bnF1ZXVlcykpCkBAIC05NDEsMTYgKzkwMywzMyBAQAogI2VuZGlmIC8qIF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXICovCiAKIC8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSB0YXNrIGlzIHdha2luZywgd2UgdXNlIHRoaXMgdG8gc3luY2hyb25pemUgYWdhaW5zdAorICogdHR3dSgpIHNvIHRoYXQgdGFza19jcHUoKSByZXBvcnRzIGEgc3RhYmxlIG51bWJlci4KKyAqCisgKiBXZSBuZWVkIHRvIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBQRl9TVEFSVElORyB0YXNrcyBiZWNhdXNlIHRoZSBmb3JrCisgKiBwYXRoIG1pZ2h0IHJlcXVpcmUgdGFza19ycV9sb2NrKCkgdG8gd29yaywgZWcuIGl0IGNhbiBjYWxsCisgKiBzZXRfY3B1c19hbGxvd2VkX3B0cigpIGZyb20gdGhlIGNwdXNldCBjbG9uZV9ucyBjb2RlLgorICovCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2lzX3dha2luZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIHVubGlrZWx5KChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORykgJiYgIShwLT5mbGFncyAmIFBGX1NUQVJUSU5HKSk7Cit9CisKKy8qCiAgKiBfX3Rhc2tfcnFfbG9jayAtIGxvY2sgdGhlIHJ1bnF1ZXVlIGEgZ2l2ZW4gdGFzayByZXNpZGVzIG9uLgogICogTXVzdCBiZSBjYWxsZWQgaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKl9fdGFza19ycV9sb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlfX2FjcXVpcmVzKHJxLT5sb2NrKQogeworCXN0cnVjdCBycSAqcnE7CisKIAlmb3IgKDs7KSB7Ci0JCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOworCQl3aGlsZSAodGFza19pc193YWtpbmcocCkpCisJCQljcHVfcmVsYXgoKTsKKwkJcnEgPSB0YXNrX3JxKHApOwogCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7Ci0JCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSkpCisJCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSAmJiAhdGFza19pc193YWtpbmcocCkpKQogCQkJcmV0dXJuIHJxOwogCQlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIAl9CkBAIC05NjcsMTAgKzk0NiwxMiBAQAogCXN0cnVjdCBycSAqcnE7CiAKIAlmb3IgKDs7KSB7CisJCXdoaWxlICh0YXNrX2lzX3dha2luZyhwKSkKKwkJCWNwdV9yZWxheCgpOwogCQlsb2NhbF9pcnFfc2F2ZSgqZmxhZ3MpOwogCQlycSA9IHRhc2tfcnEocCk7CiAJCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKLQkJaWYgKGxpa2VseShycSA9PSB0YXNrX3JxKHApKSkKKwkJaWYgKGxpa2VseShycSA9PSB0YXNrX3JxKHApICYmICF0YXNrX2lzX3dha2luZyhwKSkpCiAJCQlyZXR1cm4gcnE7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgKmZsYWdzKTsKIAl9CkBAIC0xMzkwLDMyICsxMzcxLDYgQEAKICAvKiAgMTUgKi8gMTE5MzA0NjQ3LCAxNDgxMDIzMjAsIDE4NjczNzcwOCwgMjM4NjA5Mjk0LCAyODYzMzExNTMsCiB9OwogCi1zdGF0aWMgdm9pZCBhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCk7Ci0KLS8qCi0gKiBydW5xdWV1ZSBpdGVyYXRvciwgdG8gc3VwcG9ydCBTTVAgbG9hZC1iYWxhbmNpbmcgYmV0d2VlbiBkaWZmZXJlbnQKLSAqIHNjaGVkdWxpbmcgY2xhc3Nlcywgd2l0aG91dCBoYXZpbmcgdG8gZXhwb3NlIHRoZWlyIGludGVybmFsIGRhdGEKLSAqIHN0cnVjdHVyZXMgdG8gdGhlIGxvYWQtYmFsYW5jaW5nIHByb3BlcjoKLSAqLwotc3RydWN0IHJxX2l0ZXJhdG9yIHsKLQl2b2lkICphcmc7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICooKnN0YXJ0KSh2b2lkICopOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqKCpuZXh0KSh2b2lkICopOwotfTsKLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1iYWxhbmNlX3Rhc2tzKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICphbGxfcGlubmVkLAotCSAgICAgIGludCAqdGhpc19iZXN0X3ByaW8sIHN0cnVjdCBycV9pdGVyYXRvciAqaXRlcmF0b3IpOwotCi1zdGF0aWMgaW50Ci1pdGVyX21vdmVfb25lX3Rhc2soc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICBzdHJ1Y3QgcnFfaXRlcmF0b3IgKml0ZXJhdG9yKTsKLSNlbmRpZgotCiAvKiBUaW1lIHNwZW50IGJ5IHRoZSB0YXNrcyBvZiB0aGUgY3B1IGFjY291bnRpbmcgZ3JvdXAgZXhlY3V0aW5nIGluIC4uLiAqLwogZW51bSBjcHVhY2N0X3N0YXRfaW5kZXggewogCUNQVUFDQ1RfU1RBVF9VU0VSLAkvKiAuLi4gdXNlciBtb2RlICovCkBAIC0xNTMxLDcgKzE0ODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9vZihpbnQgY3B1KQogewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoY3B1X3JxKGNwdSktPnNkKTsKIAogCWlmICghc2QpCiAJCXJldHVybiBOVUxMOwpAQCAtMTcwMSwxNiArMTY1Niw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfc2hhcmVzX2xvY2tlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKLXsKLQlpZiAocm9vdF90YXNrX2dyb3VwX2VtcHR5KCkpCi0JCXJldHVybjsKLQotCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwotCXVwZGF0ZV9zaGFyZXMoc2QpOwotCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKLX0KLQogc3RhdGljIHZvaWQgdXBkYXRlX2hfbG9hZChsb25nIGNwdSkKIHsKIAlpZiAocm9vdF90YXNrX2dyb3VwX2VtcHR5KCkpCkBAIC0xNzI1LDEwICsxNjcwLDYgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zaGFyZXNfbG9ja2VkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQotewotfQotCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCkBAIC0xODA1LDYgKzE3NDYsNTEgQEAKIAlyYXdfc3Bpbl91bmxvY2soJmJ1c2llc3QtPmxvY2spOwogCWxvY2tfc2V0X3N1YmNsYXNzKCZ0aGlzX3JxLT5sb2NrLmRlcF9tYXAsIDAsIF9SRVRfSVBfKTsKIH0KKworLyoKKyAqIGRvdWJsZV9ycV9sb2NrIC0gc2FmZWx5IGxvY2sgdHdvIHJ1bnF1ZXVlcworICoKKyAqIE5vdGUgdGhpcyBkb2VzIG5vdCBkaXNhYmxlIGludGVycnVwdHMgbGlrZSB0YXNrX3JxX2xvY2ssCisgKiB5b3UgbmVlZCB0byBkbyBzbyBtYW51YWxseSBiZWZvcmUgY2FsbGluZy4KKyAqLworc3RhdGljIHZvaWQgZG91YmxlX3JxX2xvY2soc3RydWN0IHJxICpycTEsIHN0cnVjdCBycSAqcnEyKQorCV9fYWNxdWlyZXMocnExLT5sb2NrKQorCV9fYWNxdWlyZXMocnEyLT5sb2NrKQoreworCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKwlpZiAocnExID09IHJxMikgeworCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOworCQlfX2FjcXVpcmUocnEyLT5sb2NrKTsJLyogRmFrZSBpdCBvdXQgOykgKi8KKwl9IGVsc2UgeworCQlpZiAocnExIDwgcnEyKSB7CisJCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOworCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnJxMi0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCQl9IGVsc2UgeworCQkJcmF3X3NwaW5fbG9jaygmcnEyLT5sb2NrKTsKKwkJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZycTEtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwkJfQorCX0KKwl1cGRhdGVfcnFfY2xvY2socnExKTsKKwl1cGRhdGVfcnFfY2xvY2socnEyKTsKK30KKworLyoKKyAqIGRvdWJsZV9ycV91bmxvY2sgLSBzYWZlbHkgdW5sb2NrIHR3byBydW5xdWV1ZXMKKyAqCisgKiBOb3RlIHRoaXMgZG9lcyBub3QgcmVzdG9yZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV91bmxvY2ssCisgKiB5b3UgbmVlZCB0byBkbyBzbyBtYW51YWxseSBhZnRlciBjYWxsaW5nLgorICovCitzdGF0aWMgdm9pZCBkb3VibGVfcnFfdW5sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKKwlfX3JlbGVhc2VzKHJxMS0+bG9jaykKKwlfX3JlbGVhc2VzKHJxMi0+bG9jaykKK3sKKwlyYXdfc3Bpbl91bmxvY2soJnJxMS0+bG9jayk7CisJaWYgKHJxMSAhPSBycTIpCisJCXJhd19zcGluX3VubG9jaygmcnEyLT5sb2NrKTsKKwllbHNlCisJCV9fcmVsZWFzZShycTItPmxvY2spOworfQorCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECkBAIC0xODM0LDE4ICsxODIwLDE0IEBACiAjZW5kaWYKIH0KIAotI2luY2x1ZGUgInNjaGVkX3N0YXRzLmgiCi0jaW5jbHVkZSAic2NoZWRfaWRsZXRhc2suYyIKLSNpbmNsdWRlICJzY2hlZF9mYWlyLmMiCi0jaW5jbHVkZSAic2NoZWRfcnQuYyIKLSNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKLSMgaW5jbHVkZSAic2NoZWRfZGVidWcuYyIKLSNlbmRpZgorc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBydF9zY2hlZF9jbGFzczsKIAogI2RlZmluZSBzY2hlZF9jbGFzc19oaWdoZXN0ICgmcnRfc2NoZWRfY2xhc3MpCiAjZGVmaW5lIGZvcl9lYWNoX2NsYXNzKGNsYXNzKSBcCiAgICBmb3IgKGNsYXNzID0gc2NoZWRfY2xhc3NfaGlnaGVzdDsgY2xhc3M7IGNsYXNzID0gY2xhc3MtPm5leHQpCiAKKyNpbmNsdWRlICJzY2hlZF9zdGF0cy5oIgorCiBzdGF0aWMgdm9pZCBpbmNfbnJfcnVubmluZyhzdHJ1Y3QgcnEgKnJxKQogewogCXJxLT5ucl9ydW5uaW5nKys7CkBAIC0xODgzLDEzICsxODY1LDE0IEBACiAJKmF2ZyArPSBkaWZmID4+IDM7CiB9CiAKLXN0YXRpYyB2b2lkIGVucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCitzdGF0aWMgdm9pZAorZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCwgYm9vbCBoZWFkKQogewogCWlmICh3YWtldXApCiAJCXAtPnNlLnN0YXJ0X3J1bnRpbWUgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCiAJc2NoZWRfaW5mb19xdWV1ZWQocCk7Ci0JcC0+c2NoZWRfY2xhc3MtPmVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwKTsKKwlwLT5zY2hlZF9jbGFzcy0+ZW5xdWV1ZV90YXNrKHJxLCBwLCB3YWtldXAsIGhlYWQpOwogCXAtPnNlLm9uX3JxID0gMTsKIH0KIApAQCAtMTkxMiw2ICsxODk1LDM3IEBACiB9CiAKIC8qCisgKiBhY3RpdmF0ZV90YXNrIC0gbW92ZSBhIHRhc2sgdG8gdGhlIHJ1bnF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKK3sKKwlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQorCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07CisKKwllbnF1ZXVlX3Rhc2socnEsIHAsIHdha2V1cCwgZmFsc2UpOworCWluY19ucl9ydW5uaW5nKHJxKTsKK30KKworLyoKKyAqIGRlYWN0aXZhdGVfdGFzayAtIHJlbW92ZSBhIHRhc2sgZnJvbSB0aGUgcnVucXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIGRlYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCkKK3sKKwlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQorCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlKys7CisKKwlkZXF1ZXVlX3Rhc2socnEsIHAsIHNsZWVwKTsKKwlkZWNfbnJfcnVubmluZyhycSk7Cit9CisKKyNpbmNsdWRlICJzY2hlZF9pZGxldGFzay5jIgorI2luY2x1ZGUgInNjaGVkX2ZhaXIuYyIKKyNpbmNsdWRlICJzY2hlZF9ydC5jIgorI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworIyBpbmNsdWRlICJzY2hlZF9kZWJ1Zy5jIgorI2VuZGlmCisKKy8qCiAgKiBfX25vcm1hbF9wcmlvIC0gcmV0dXJuIHRoZSBwcmlvcml0eSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBzdGF0aWMgcHJpbwogICovCiBzdGF0aWMgaW5saW5lIGludCBfX25vcm1hbF9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKQEAgLTE5NTcsMzAgKzE5NzEsNiBAQAogCXJldHVybiBwLT5wcmlvOwogfQogCi0vKgotICogYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1ZS4KLSAqLwotc3RhdGljIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCi17Ci0JaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKLQkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZS0tOwotCi0JZW5xdWV1ZV90YXNrKHJxLCBwLCB3YWtldXApOwotCWluY19ucl9ydW5uaW5nKHJxKTsKLX0KLQotLyoKLSAqIGRlYWN0aXZhdGVfdGFzayAtIHJlbW92ZSBhIHRhc2sgZnJvbSB0aGUgcnVucXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIGRlYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCkKLXsKLQlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQotCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlKys7Ci0KLQlkZXF1ZXVlX3Rhc2socnEsIHAsIHNsZWVwKTsKLQlkZWNfbnJfcnVubmluZyhycSk7Ci19Ci0KIC8qKgogICogdGFza19jdXJyIC0gaXMgdGhpcyB0YXNrIGN1cnJlbnRseSBleGVjdXRpbmcgb24gYSBDUFU/CiAgKiBAcDogdGhlIHRhc2sgaW4gcXVlc3Rpb24uCkBAIC0yMzIwLDE0ICsyMzEwLDEyIEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgZnJvbToKKyAqIEdldHMgY2FsbGVkIGZyb20gMyBzaXRlcyAoZXhlYywgZm9yaywgd2FrZXVwKSwgc2luY2UgaXQgaXMgY2FsbGVkIHdpdGhvdXQKKyAqIGhvbGRpbmcgcnEtPmxvY2sgd2UgbmVlZCB0byBlbnN1cmUgLT5jcHVzX2FsbG93ZWQgaXMgc3RhYmxlLCB0aGlzIGlzIGRvbmUKKyAqIGJ5OgogICoKLSAqICAtIGZvcmssIEBwIGlzIHN0YWJsZSBiZWNhdXNlIGl0IGlzbid0IG9uIHRoZSB0YXNrbGlzdCB5ZXQKLSAqCi0gKiAgLSBleGVjLCBAcCBpcyB1bnN0YWJsZSwgcmV0cnkgbG9vcAotICoKLSAqICAtIHdha2UtdXAsIHdlIHNlcmlhbGl6ZSAtPmNwdXNfYWxsb3dlZCBhZ2FpbnN0IFRBU0tfV0FLSU5HIHNvCi0gKiAgICAgICAgICAgICB3ZSBzaG91bGQgYmUgZ29vZC4KKyAqICBleGVjOiAgICAgICAgICAgaXMgdW5zdGFibGUsIHJldHJ5IGxvb3AKKyAqICBmb3JrICYgd2FrZS11cDogc2VyaWFsaXplIC0+Y3B1c19hbGxvd2VkIGFnYWluc3QgVEFTS19XQUtJTkcKICAqLwogc3RhdGljIGlubGluZQogaW50IHNlbGVjdF90YXNrX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWdzLCBpbnQgd2FrZV9mbGFncykKQEAgLTI0MTAsMTQgKzIzOTgsMjcgQEAKIAlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKIAogCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7Ci0JaWYgKGNwdSAhPSBvcmlnX2NwdSkKKwlpZiAoY3B1ICE9IG9yaWdfY3B1KSB7CisJCS8qCisJCSAqIFNpbmNlIHdlIG1pZ3JhdGUgdGhlIHRhc2sgd2l0aG91dCBob2xkaW5nIGFueSBycS0+bG9jaywKKwkJICogd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGFza19ycV9sb2NrKCksIHNpbmNlIHRoYXQKKwkJICogbWlnaHQgZW5kIHVwIGxvY2tpbmcgYW4gaW52YWxpZCBycS4KKwkJICovCiAJCXNldF90YXNrX2NwdShwLCBjcHUpOworCX0KIAotCXJxID0gX190YXNrX3JxX2xvY2socCk7CisJcnEgPSBjcHVfcnEoY3B1KTsKKwlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAorCS8qCisJICogV2UgbWlncmF0ZWQgdGhlIHRhc2sgd2l0aG91dCBob2xkaW5nIGVpdGhlciBycS0+bG9jaywgaG93ZXZlcgorCSAqIHNpbmNlIHRoZSB0YXNrIGlzIG5vdCBvbiB0aGUgdGFzayBsaXN0IGl0c2VsZiwgbm9ib2R5IGVsc2UKKwkgKiB3aWxsIHRyeSBhbmQgbWlncmF0ZSB0aGUgdGFzaywgaGVuY2UgdGhlIHJxIHNob3VsZCBtYXRjaCB0aGUKKwkgKiBjcHUgd2UganVzdCBtb3ZlZCBpdCB0by4KKwkgKi8KKwlXQVJOX09OKHRhc2tfY3B1KHApICE9IGNwdSk7CiAJV0FSTl9PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7Ci0JY3B1ID0gdGFza19jcHUocCk7CiAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXNjaGVkc3RhdF9pbmMocnEsIHR0d3VfY291bnQpOwpAQCAtMjYyMCw5ICsyNjIxLDYgQEAKIAlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfZm9yaykKIAkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfZm9yayhwKTsKIAotI2lmZGVmIENPTkZJR19TTVAKLQljcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX0ZPUkssIDApOwotI2VuZGlmCiAJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRFNUQVRTKSB8fCBkZWZpbmVkKENPTkZJR19UQVNLX0RFTEFZX0FDQ1QpCkBAIC0yNjUyLDggKzI2NTAsMjkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBycSAqcnE7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKIAotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qCisJICogRm9yayBiYWxhbmNpbmcsIGRvIGl0IGhlcmUgYW5kIG5vdCBlYXJsaWVyIGJlY2F1c2U6CisJICogIC0gY3B1c19hbGxvd2VkIGNhbiBjaGFuZ2UgaW4gdGhlIGZvcmsgcGF0aAorCSAqICAtIGFueSBwcmV2aW91c2x5IHNlbGVjdGVkIGNwdSBtaWdodCBkaXNhcHBlYXIgdGhyb3VnaCBob3RwbHVnCisJICoKKwkgKiBXZSBzdGlsbCBoYXZlIFRBU0tfV0FLSU5HIGJ1dCBQRl9TVEFSVElORyBpcyBnb25lIG5vdywgbWVhbmluZworCSAqIC0+Y3B1c19hbGxvd2VkIGlzIHN0YWJsZSwgd2UgaGF2ZSBwcmVlbXB0aW9uIGRpc2FibGVkLCBtZWFuaW5nCisJICogY3B1X29ubGluZV9tYXNrIGlzIHN0YWJsZS4KKwkgKi8KKwljcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX0ZPUkssIDApOworCXNldF90YXNrX2NwdShwLCBjcHUpOworI2VuZGlmCisKKwkvKgorCSAqIFNpbmNlIHRoZSB0YXNrIGlzIG5vdCBvbiB0aGUgcnEgYW5kIHdlIHN0aWxsIGhhdmUgVEFTS19XQUtJTkcgc2V0CisJICogbm9ib2R5IGVsc2Ugd2lsbCBtaWdyYXRlIHRoaXMgdGFzay4KKwkgKi8KKwlycSA9IGNwdV9ycShjcHUpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwogCUJVR19PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7CiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKQEAgLTI2NjUsNiArMjY4NCw3IEBACiAJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dva2VuKHJxLCBwKTsKICNlbmRpZgogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCXB1dF9jcHUoKTsKIH0KIAogI2lmZGVmIENPTkZJR19QUkVFTVBUX05PVElGSUVSUwpAQCAtMjc4Myw3ICsyODAzLDEzIEBACiAJICovCiAJcHJldl9zdGF0ZSA9IHByZXYtPnN0YXRlOwogCWZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KTsKLQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oY3VycmVudCwgY3B1X29mKHJxKSk7CisjaWZkZWYgX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisjZW5kaWYgLyogX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVyAqLworCXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihjdXJyZW50KTsKKyNpZmRlZiBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXCisJbG9jYWxfaXJxX2VuYWJsZSgpOworI2VuZGlmIC8qIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cgKi8KIAlmaW5pc2hfbG9ja19zd2l0Y2gocnEsIHByZXYpOwogCiAJZmlyZV9zY2hlZF9pbl9wcmVlbXB0X25vdGlmaWVycyhjdXJyZW50KTsKQEAgLTMwODgsNTAgKzMxMTQsNiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAogLyoKLSAqIGRvdWJsZV9ycV9sb2NrIC0gc2FmZWx5IGxvY2sgdHdvIHJ1bnF1ZXVlcwotICoKLSAqIE5vdGUgdGhpcyBkb2VzIG5vdCBkaXNhYmxlIGludGVycnVwdHMgbGlrZSB0YXNrX3JxX2xvY2ssCi0gKiB5b3UgbmVlZCB0byBkbyBzbyBtYW51YWxseSBiZWZvcmUgY2FsbGluZy4KLSAqLwotc3RhdGljIHZvaWQgZG91YmxlX3JxX2xvY2soc3RydWN0IHJxICpycTEsIHN0cnVjdCBycSAqcnEyKQotCV9fYWNxdWlyZXMocnExLT5sb2NrKQotCV9fYWNxdWlyZXMocnEyLT5sb2NrKQotewotCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKLQlpZiAocnExID09IHJxMikgewotCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOwotCQlfX2FjcXVpcmUocnEyLT5sb2NrKTsJLyogRmFrZSBpdCBvdXQgOykgKi8KLQl9IGVsc2UgewotCQlpZiAocnExIDwgcnEyKSB7Ci0JCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOwotCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnJxMi0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwotCQl9IGVsc2UgewotCQkJcmF3X3NwaW5fbG9jaygmcnEyLT5sb2NrKTsKLQkJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZycTEtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKLQkJfQotCX0KLQl1cGRhdGVfcnFfY2xvY2socnExKTsKLQl1cGRhdGVfcnFfY2xvY2socnEyKTsKLX0KLQotLyoKLSAqIGRvdWJsZV9ycV91bmxvY2sgLSBzYWZlbHkgdW5sb2NrIHR3byBydW5xdWV1ZXMKLSAqCi0gKiBOb3RlIHRoaXMgZG9lcyBub3QgcmVzdG9yZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV91bmxvY2ssCi0gKiB5b3UgbmVlZCB0byBkbyBzbyBtYW51YWxseSBhZnRlciBjYWxsaW5nLgotICovCi1zdGF0aWMgdm9pZCBkb3VibGVfcnFfdW5sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKLQlfX3JlbGVhc2VzKHJxMS0+bG9jaykKLQlfX3JlbGVhc2VzKHJxMi0+bG9jaykKLXsKLQlyYXdfc3Bpbl91bmxvY2soJnJxMS0+bG9jayk7Ci0JaWYgKHJxMSAhPSBycTIpCi0JCXJhd19zcGluX3VubG9jaygmcnEyLT5sb2NrKTsKLQllbHNlCi0JCV9fcmVsZWFzZShycTItPmxvY2spOwotfQotCi0vKgogICogc2NoZWRfZXhlYyAtIGV4ZWN2ZSgpIGlzIGEgdmFsdWFibGUgYmFsYW5jaW5nIG9wcG9ydHVuaXR5LCBiZWNhdXNlIGF0CiAgKiB0aGlzIHBvaW50IHRoZSB0YXNrIGhhcyB0aGUgc21hbGxlc3QgZWZmZWN0aXZlIG1lbW9yeSBhbmQgY2FjaGUgZm9vdHByaW50LgogICovCkBAIC0zMTc5LDE3NzEgKzMxNjEsNiBAQAogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogfQogCi0vKgotICogcHVsbF90YXNrIC0gbW92ZSBhIHRhc2sgZnJvbSBhIHJlbW90ZSBydW5xdWV1ZSB0byB0aGUgbG9jYWwgcnVucXVldWUuCi0gKiBCb3RoIHJ1bnF1ZXVlcyBtdXN0IGJlIGxvY2tlZC4KLSAqLwotc3RhdGljIHZvaWQgcHVsbF90YXNrKHN0cnVjdCBycSAqc3JjX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCSAgICAgIHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1KQotewotCWRlYWN0aXZhdGVfdGFzayhzcmNfcnEsIHAsIDApOwotCXNldF90YXNrX2NwdShwLCB0aGlzX2NwdSk7Ci0JYWN0aXZhdGVfdGFzayh0aGlzX3JxLCBwLCAwKTsKLQljaGVja19wcmVlbXB0X2N1cnIodGhpc19ycSwgcCwgMCk7Ci19Ci0KLS8qCi0gKiBjYW5fbWlncmF0ZV90YXNrIC0gbWF5IHRhc2sgcCBmcm9tIHJ1bnF1ZXVlIHJxIGJlIG1pZ3JhdGVkIHRvIHRoaXNfY3B1PwotICovCi1zdGF0aWMKLWludCBjYW5fbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwgaW50IHRoaXNfY3B1LAotCQkgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgICBpbnQgKmFsbF9waW5uZWQpCi17Ci0JaW50IHRza19jYWNoZV9ob3QgPSAwOwotCS8qCi0JICogV2UgZG8gbm90IG1pZ3JhdGUgdGFza3MgdGhhdCBhcmU6Ci0JICogMSkgcnVubmluZyAob2J2aW91c2x5KSwgb3IKLQkgKiAyKSBjYW5ub3QgYmUgbWlncmF0ZWQgdG8gdGhpcyBDUFUgZHVlIHRvIGNwdXNfYWxsb3dlZCwgb3IKLQkgKiAzKSBhcmUgY2FjaGUtaG90IG9uIHRoZWlyIGN1cnJlbnQgQ1BVLgotCSAqLwotCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwgJnAtPmNwdXNfYWxsb3dlZCkpIHsKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19hZmZpbmUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JKmFsbF9waW5uZWQgPSAwOwotCi0JaWYgKHRhc2tfcnVubmluZyhycSwgcCkpIHsKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ydW5uaW5nKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBBZ2dyZXNzaXZlIG1pZ3JhdGlvbiBpZjoKLQkgKiAxKSB0YXNrIGlzIGNhY2hlIGNvbGQsIG9yCi0JICogMikgdG9vIG1hbnkgYmFsYW5jZSBhdHRlbXB0cyBoYXZlIGZhaWxlZC4KLQkgKi8KLQotCXRza19jYWNoZV9ob3QgPSB0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKTsKLQlpZiAoIXRza19jYWNoZV9ob3QgfHwKLQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMpIHsKLSNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotCQlpZiAodHNrX2NhY2hlX2hvdCkgewotCQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfaG90X2dhaW5lZFtpZGxlXSk7Ci0JCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZvcmNlZF9taWdyYXRpb25zKTsKLQkJfQotI2VuZGlmCi0JCXJldHVybiAxOwotCX0KLQotCWlmICh0c2tfY2FjaGVfaG90KSB7Ci0JCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfaG90KTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotYmFsYW5jZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwKLQkgICAgICBpbnQgKnRoaXNfYmVzdF9wcmlvLCBzdHJ1Y3QgcnFfaXRlcmF0b3IgKml0ZXJhdG9yKQotewotCWludCBsb29wcyA9IDAsIHB1bGxlZCA9IDAsIHBpbm5lZCA9IDA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCWxvbmcgcmVtX2xvYWRfbW92ZSA9IG1heF9sb2FkX21vdmU7Ci0KLQlpZiAobWF4X2xvYWRfbW92ZSA9PSAwKQotCQlnb3RvIG91dDsKLQotCXBpbm5lZCA9IDE7Ci0KLQkvKgotCSAqIFN0YXJ0IHRoZSBsb2FkLWJhbGFuY2luZyBpdGVyYXRvcjoKLQkgKi8KLQlwID0gaXRlcmF0b3ItPnN0YXJ0KGl0ZXJhdG9yLT5hcmcpOwotbmV4dDoKLQlpZiAoIXAgfHwgbG9vcHMrKyA+IHN5c2N0bF9zY2hlZF9ucl9taWdyYXRlKQotCQlnb3RvIG91dDsKLQotCWlmICgocC0+c2UubG9hZC53ZWlnaHQgPj4gMSkgPiByZW1fbG9hZF9tb3ZlIHx8Ci0JICAgICFjYW5fbWlncmF0ZV90YXNrKHAsIGJ1c2llc3QsIHRoaXNfY3B1LCBzZCwgaWRsZSwgJnBpbm5lZCkpIHsKLQkJcCA9IGl0ZXJhdG9yLT5uZXh0KGl0ZXJhdG9yLT5hcmcpOwotCQlnb3RvIG5leHQ7Ci0JfQotCi0JcHVsbF90YXNrKGJ1c2llc3QsIHAsIHRoaXNfcnEsIHRoaXNfY3B1KTsKLQlwdWxsZWQrKzsKLQlyZW1fbG9hZF9tb3ZlIC09IHAtPnNlLmxvYWQud2VpZ2h0OwotCi0jaWZkZWYgQ09ORklHX1BSRUVNUFQKLQkvKgotCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlIGtlcm5lbHMKLQkgKiB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplIHRoZSBjcml0aWNhbAotCSAqIHNlY3Rpb24uCi0JICovCi0JaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpCi0JCWdvdG8gb3V0OwotI2VuZGlmCi0KLQkvKgotCSAqIFdlIG9ubHkgd2FudCB0byBzdGVhbCB1cCB0byB0aGUgcHJlc2NyaWJlZCBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZC4KLQkgKi8KLQlpZiAocmVtX2xvYWRfbW92ZSA+IDApIHsKLQkJaWYgKHAtPnByaW8gPCAqdGhpc19iZXN0X3ByaW8pCi0JCQkqdGhpc19iZXN0X3ByaW8gPSBwLT5wcmlvOwotCQlwID0gaXRlcmF0b3ItPm5leHQoaXRlcmF0b3ItPmFyZyk7Ci0JCWdvdG8gbmV4dDsKLQl9Ci1vdXQ6Ci0JLyoKLQkgKiBSaWdodCBub3csIHRoaXMgaXMgb25lIG9mIG9ubHkgdHdvIHBsYWNlcyBwdWxsX3Rhc2soKSBpcyBjYWxsZWQsCi0JICogc28gd2UgY2FuIHNhZmVseSBjb2xsZWN0IHB1bGxfdGFzaygpIHN0YXRzIGhlcmUgcmF0aGVyIHRoYW4KLQkgKiBpbnNpZGUgcHVsbF90YXNrKCkuCi0JICovCi0Jc2NoZWRzdGF0X2FkZChzZCwgbGJfZ2FpbmVkW2lkbGVdLCBwdWxsZWQpOwotCi0JaWYgKGFsbF9waW5uZWQpCi0JCSphbGxfcGlubmVkID0gcGlubmVkOwotCi0JcmV0dXJuIG1heF9sb2FkX21vdmUgLSByZW1fbG9hZF9tb3ZlOwotfQotCi0vKgotICogbW92ZV90YXNrcyB0cmllcyB0byBtb3ZlIHVwIHRvIG1heF9sb2FkX21vdmUgd2VpZ2h0ZWQgbG9hZCBmcm9tIGJ1c2llc3QgdG8KLSAqIHRoaXNfcnEsIGFzIHBhcnQgb2YgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIHdpdGhpbiBkb21haW4gInNkIi4KLSAqIFJldHVybnMgMSBpZiBzdWNjZXNzZnVsIGFuZCAwIG90aGVyd2lzZS4KLSAqCi0gKiBDYWxsZWQgd2l0aCBib3RoIHJ1bnF1ZXVlcyBsb2NrZWQuCi0gKi8KLXN0YXRpYyBpbnQgbW92ZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkgICAgICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCi0JCSAgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgICAgaW50ICphbGxfcGlubmVkKQotewotCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3MgPSBzY2hlZF9jbGFzc19oaWdoZXN0OwotCXVuc2lnbmVkIGxvbmcgdG90YWxfbG9hZF9tb3ZlZCA9IDA7Ci0JaW50IHRoaXNfYmVzdF9wcmlvID0gdGhpc19ycS0+Y3Vyci0+cHJpbzsKLQotCWRvIHsKLQkJdG90YWxfbG9hZF9tb3ZlZCArPQotCQkJY2xhc3MtPmxvYWRfYmFsYW5jZSh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCQltYXhfbG9hZF9tb3ZlIC0gdG90YWxfbG9hZF9tb3ZlZCwKLQkJCQlzZCwgaWRsZSwgYWxsX3Bpbm5lZCwgJnRoaXNfYmVzdF9wcmlvKTsKLQkJY2xhc3MgPSBjbGFzcy0+bmV4dDsKLQotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JCS8qCi0JCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlCi0JCSAqIGtlcm5lbHMgd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZQotCQkgKiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KLQkJICovCi0JCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFICYmIHRoaXNfcnEtPm5yX3J1bm5pbmcpCi0JCQlicmVhazsKLSNlbmRpZgotCX0gd2hpbGUgKGNsYXNzICYmIG1heF9sb2FkX21vdmUgPiB0b3RhbF9sb2FkX21vdmVkKTsKLQotCXJldHVybiB0b3RhbF9sb2FkX21vdmVkID4gMDsKLX0KLQotc3RhdGljIGludAotaXRlcl9tb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgc3RydWN0IHJxX2l0ZXJhdG9yICppdGVyYXRvcikKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBpdGVyYXRvci0+c3RhcnQoaXRlcmF0b3ItPmFyZyk7Ci0JaW50IHBpbm5lZCA9IDA7Ci0KLQl3aGlsZSAocCkgewotCQlpZiAoY2FuX21pZ3JhdGVfdGFzayhwLCBidXNpZXN0LCB0aGlzX2NwdSwgc2QsIGlkbGUsICZwaW5uZWQpKSB7Ci0JCQlwdWxsX3Rhc2soYnVzaWVzdCwgcCwgdGhpc19ycSwgdGhpc19jcHUpOwotCQkJLyoKLQkJCSAqIFJpZ2h0IG5vdywgdGhpcyBpcyBvbmx5IHRoZSBzZWNvbmQgcGxhY2UgcHVsbF90YXNrKCkKLQkJCSAqIGlzIGNhbGxlZCwgc28gd2UgY2FuIHNhZmVseSBjb2xsZWN0IHB1bGxfdGFzaygpCi0JCQkgKiBzdGF0cyBoZXJlIHJhdGhlciB0aGFuIGluc2lkZSBwdWxsX3Rhc2soKS4KLQkJCSAqLwotCQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZ2FpbmVkW2lkbGVdKTsKLQotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcCA9IGl0ZXJhdG9yLT5uZXh0KGl0ZXJhdG9yLT5hcmcpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogbW92ZV9vbmVfdGFzayB0cmllcyB0byBtb3ZlIGV4YWN0bHkgb25lIHRhc2sgZnJvbSBidXNpZXN0IHRvIHRoaXNfcnEsIGFzCi0gKiBwYXJ0IG9mIGFjdGl2ZSBiYWxhbmNpbmcgb3BlcmF0aW9ucyB3aXRoaW4gImRvbWFpbiIuCi0gKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBhbmQgMCBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVkIHdpdGggYm90aCBydW5xdWV1ZXMgbG9ja2VkLgotICovCi1zdGF0aWMgaW50IG1vdmVfb25lX3Rhc2soc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJCSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzczsKLQotCWZvcl9lYWNoX2NsYXNzKGNsYXNzKSB7Ci0JCWlmIChjbGFzcy0+bW92ZV9vbmVfdGFzayh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwgc2QsIGlkbGUpKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0vKioqKioqKioqKiBIZWxwZXJzIGZvciBmaW5kX2J1c2llc3RfZ3JvdXAgKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIHNkX2xiX3N0YXRzIC0gU3RydWN0dXJlIHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzIG9mIGEgc2NoZWRfZG9tYWluCi0gKiAJCWR1cmluZyBsb2FkIGJhbGFuY2luZy4KLSAqLwotc3RydWN0IHNkX2xiX3N0YXRzIHsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmJ1c2llc3Q7IC8qIEJ1c2llc3QgZ3JvdXAgaW4gdGhpcyBzZCAqLwotCXN0cnVjdCBzY2hlZF9ncm91cCAqdGhpczsgIC8qIExvY2FsIGdyb3VwIGluIHRoaXMgc2QgKi8KLQl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWQ7ICAvKiBUb3RhbCBsb2FkIG9mIGFsbCBncm91cHMgaW4gc2QgKi8KLQl1bnNpZ25lZCBsb25nIHRvdGFsX3B3cjsgICAvKglUb3RhbCBwb3dlciBvZiBhbGwgZ3JvdXBzIGluIHNkICovCi0JdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsJICAgLyogQXZlcmFnZSBsb2FkIGFjcm9zcyBhbGwgZ3JvdXBzIGluIHNkICovCi0KLQkvKiogU3RhdGlzdGljcyBvZiB0aGlzIGdyb3VwICovCi0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQ7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWRfcGVyX3Rhc2s7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX25yX3J1bm5pbmc7Ci0KLQkvKiBTdGF0aXN0aWNzIG9mIHRoZSBidXNpZXN0IGdyb3VwICovCi0JdW5zaWduZWQgbG9uZyBtYXhfbG9hZDsKLQl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLQl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbnJfcnVubmluZzsKLQotCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGltYmFsYW5jZSBpbiB0aGlzIHNkICovCi0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQlpbnQgcG93ZXJfc2F2aW5nc19iYWxhbmNlOyAvKiBJcyBwb3dlcnNhdmUgYmFsYW5jZSBuZWVkZWQgZm9yIHRoaXMgc2QgKi8KLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX21pbjsgLyogTGVhc3QgbG9hZGVkIGdyb3VwIGluIHNkICovCi0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9sZWFkZXI7IC8qIEdyb3VwIHdoaWNoIHJlbGlldmVzIGdyb3VwX21pbiAqLwotCXVuc2lnbmVkIGxvbmcgbWluX2xvYWRfcGVyX3Rhc2s7IC8qIGxvYWRfcGVyX3Rhc2sgaW4gZ3JvdXBfbWluICovCi0JdW5zaWduZWQgbG9uZyBsZWFkZXJfbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9sZWFkZXIgKi8KLQl1bnNpZ25lZCBsb25nIG1pbl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX21pbiAqLwotI2VuZGlmCi19OwotCi0vKgotICogc2dfbGJfc3RhdHMgLSBzdGF0cyBvZiBhIHNjaGVkX2dyb3VwIHJlcXVpcmVkIGZvciBsb2FkX2JhbGFuY2luZwotICovCi1zdHJ1Y3Qgc2dfbGJfc3RhdHMgewotCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7IC8qQXZnIGxvYWQgYWNyb3NzIHRoZSBDUFVzIG9mIHRoZSBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgZ3JvdXBfbG9hZDsgLyogVG90YWwgbG9hZCBvdmVyIHRoZSBDUFVzIG9mIHRoZSBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgc3VtX25yX3J1bm5pbmc7IC8qIE5yIHRhc2tzIHJ1bm5pbmcgaW4gdGhlIGdyb3VwICovCi0JdW5zaWduZWQgbG9uZyBzdW1fd2VpZ2h0ZWRfbG9hZDsgLyogV2VpZ2h0ZWQgbG9hZCBvZiBncm91cCdzIHRhc2tzICovCi0JdW5zaWduZWQgbG9uZyBncm91cF9jYXBhY2l0eTsKLQlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBhbiBpbWJhbGFuY2UgaW4gdGhlIGdyb3VwID8gKi8KLX07Ci0KLS8qKgotICogZ3JvdXBfZmlyc3RfY3B1IC0gUmV0dXJucyB0aGUgZmlyc3QgY3B1IGluIHRoZSBjcHVtYXNrIG9mIGEgc2NoZWRfZ3JvdXAuCi0gKiBAZ3JvdXA6IFRoZSBncm91cCB3aG9zZSBmaXJzdCBjcHUgaXMgdG8gYmUgcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdyb3VwX2ZpcnN0X2NwdShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwKQotewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKLX0KLQotLyoqCi0gKiBnZXRfc2RfbG9hZF9pZHggLSBPYnRhaW4gdGhlIGxvYWQgaW5kZXggZm9yIGEgZ2l2ZW4gc2NoZWQgZG9tYWluLgotICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIGxvYWRfaWR4IGlzIHRvIGJlIG9idGFpbmVkLgotICogQGlkbGU6IFRoZSBJZGxlIHN0YXR1cyBvZiB0aGUgQ1BVIGZvciB3aG9zZSBzZCBsb2FkX2ljeCBpcyBvYnRhaW5lZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZ2V0X3NkX2xvYWRfaWR4KHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCQkJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQlpbnQgbG9hZF9pZHg7Ci0KLQlzd2l0Y2ggKGlkbGUpIHsKLQljYXNlIENQVV9OT1RfSURMRToKLQkJbG9hZF9pZHggPSBzZC0+YnVzeV9pZHg7Ci0JCWJyZWFrOwotCi0JY2FzZSBDUFVfTkVXTFlfSURMRToKLQkJbG9hZF9pZHggPSBzZC0+bmV3aWRsZV9pZHg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWxvYWRfaWR4ID0gc2QtPmlkbGVfaWR4OwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbG9hZF9pZHg7Ci19Ci0KLQotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0vKioKLSAqIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyAtIEluaXRpYWxpemUgcG93ZXIgc2F2aW5ncyBzdGF0aXN0aWNzIGZvcgotICogdGhlIGdpdmVuIHNjaGVkX2RvbWFpbiwgZHVyaW5nIGxvYWQgYmFsYW5jaW5nLgotICoKLSAqIEBzZDogU2NoZWQgZG9tYWluIHdob3NlIHBvd2VyLXNhdmluZ3Mgc3RhdGlzdGljcyBhcmUgdG8gYmUgaW5pdGlhbGl6ZWQuCi0gKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIGZvciBzZC4KLSAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgQ1BVIGF0IHdoaWNoIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0Jc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCS8qCi0JICogQnVzeSBwcm9jZXNzb3JzIHdpbGwgbm90IHBhcnRpY2lwYXRlIGluIHBvd2VyIHNhdmluZ3MKLQkgKiBiYWxhbmNlLgotCSAqLwotCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fCAhKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOwotCWVsc2UgewotCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDE7Ci0JCXNkcy0+bWluX25yX3J1bm5pbmcgPSBVTE9OR19NQVg7Ci0JCXNkcy0+bGVhZGVyX25yX3J1bm5pbmcgPSAwOwotCX0KLX0KLQotLyoqCi0gKiB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyAtIFVwZGF0ZSB0aGUgcG93ZXIgc2F2aW5nIHN0YXRzIGZvciBhCi0gKiBzY2hlZF9kb21haW4gd2hpbGUgcGVyZm9ybWluZyBsb2FkIGJhbGFuY2luZy4KLSAqCi0gKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIGJlbG9uZ2luZyB0byB0aGUgc2NoZWRfZG9tYWluIHVuZGVyIGNvbnNpZGVyYXRpb24uCi0gKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KLSAqIEBsb2NhbF9ncm91cDogRG9lcyBncm91cCBjb250YWluIHRoZSBDUFUgZm9yIHdoaWNoIHdlJ3JlIHBlcmZvcm1pbmcKLSAqIAkJbG9hZCBiYWxhbmNpbmcgPwotICogQHNnczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgZ3JvdXAuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAotCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgbG9jYWxfZ3JvdXAsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQotewotCi0JaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBJZiB0aGUgbG9jYWwgZ3JvdXAgaXMgaWRsZSBvciBjb21wbGV0ZWx5IGxvYWRlZAotCSAqIG5vIG5lZWQgdG8gZG8gcG93ZXIgc2F2aW5ncyBiYWxhbmNlIGF0IHRoaXMgZG9tYWluCi0JICovCi0JaWYgKGxvY2FsX2dyb3VwICYmIChzZHMtPnRoaXNfbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8Ci0JCQkJIXNkcy0+dGhpc19ucl9ydW5uaW5nKSkKLQkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOwotCi0JLyoKLQkgKiBJZiBhIGdyb3VwIGlzIGFscmVhZHkgcnVubmluZyBhdCBmdWxsIGNhcGFjaXR5IG9yIGlkbGUsCi0JICogZG9uJ3QgaW5jbHVkZSB0aGF0IGdyb3VwIGluIHBvd2VyIHNhdmluZ3MgY2FsY3VsYXRpb25zCi0JICovCi0JaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSB8fAotCQlzZ3MtPnN1bV9ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKLQkJIXNncy0+c3VtX25yX3J1bm5pbmcpCi0JCXJldHVybjsKLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBoYXMgdGhlIGxlYXN0IG5vbi1pZGxlIGxvYWQuCi0JICogVGhpcyBpcyB0aGUgZ3JvdXAgZnJvbSB3aGVyZSB3ZSBuZWVkIHRvIHBpY2sgdXAgdGhlIGxvYWQKLQkgKiBmb3Igc2F2aW5nIHBvd2VyCi0JICovCi0JaWYgKChzZ3MtPnN1bV9ucl9ydW5uaW5nIDwgc2RzLT5taW5fbnJfcnVubmluZykgfHwKLQkgICAgKHNncy0+c3VtX25yX3J1bm5pbmcgPT0gc2RzLT5taW5fbnJfcnVubmluZyAmJgotCSAgICAgZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKSA+IGdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX21pbikpKSB7Ci0JCXNkcy0+Z3JvdXBfbWluID0gZ3JvdXA7Ci0JCXNkcy0+bWluX25yX3J1bm5pbmcgPSBzZ3MtPnN1bV9ucl9ydW5uaW5nOwotCQlzZHMtPm1pbl9sb2FkX3Blcl90YXNrID0gc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCAvCi0JCQkJCQlzZ3MtPnN1bV9ucl9ydW5uaW5nOwotCX0KLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBpcyBhbG1vc3QgbmVhciBpdHMKLQkgKiBjYXBhY2l0eSBidXQgc3RpbGwgaGFzIHNvbWUgc3BhY2UgdG8gcGljayB1cCBzb21lIGxvYWQKLQkgKiBmcm9tIG90aGVyIGdyb3VwIGFuZCBzYXZlIG1vcmUgcG93ZXIKLQkgKi8KLQlpZiAoc2dzLT5zdW1fbnJfcnVubmluZyArIDEgPiBzZ3MtPmdyb3VwX2NhcGFjaXR5KQotCQlyZXR1cm47Ci0KLQlpZiAoc2dzLT5zdW1fbnJfcnVubmluZyA+IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgfHwKLQkgICAgKHNncy0+c3VtX25yX3J1bm5pbmcgPT0gc2RzLT5sZWFkZXJfbnJfcnVubmluZyAmJgotCSAgICAgZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKSA8IGdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX2xlYWRlcikpKSB7Ci0JCXNkcy0+Z3JvdXBfbGVhZGVyID0gZ3JvdXA7Ci0JCXNkcy0+bGVhZGVyX25yX3J1bm5pbmcgPSBzZ3MtPnN1bV9ucl9ydW5uaW5nOwotCX0KLX0KLQotLyoqCi0gKiBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAgLSBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciBzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZQotICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCi0gKgl1bmRlciBjb25zaWRlcmF0aW9uLgotICogQHRoaXNfY3B1OiBDcHUgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5IHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCi0gKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgotICoKLSAqIERlc2NyaXB0aW9uOgotICogQ2hlY2sgaWYgd2UgaGF2ZSBwb3RlbnRpYWwgdG8gcGVyZm9ybSBzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4KLSAqIElmIHllcywgc2V0IHRoZSBidXNpZXN0IGdyb3VwIHRvIGJlIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgaW4gdGhlCi0gKiBzY2hlZF9kb21haW4sIHNvIHRoYXQgaXQncyBDUFVzIGNhbiBiZSBwdXQgdG8gaWRsZS4KLSAqCi0gKiBSZXR1cm5zIDEgaWYgdGhlcmUgaXMgcG90ZW50aWFsIHRvIHBlcmZvcm0gcG93ZXItc2F2aW5ncyBiYWxhbmNlLgotICogRWxzZSByZXR1cm5zIDAuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKLQkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCi17Ci0JaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc2RzLT50aGlzICE9IHNkcy0+Z3JvdXBfbGVhZGVyIHx8Ci0JCQlzZHMtPmdyb3VwX2xlYWRlciA9PSBzZHMtPmdyb3VwX21pbikKLQkJcmV0dXJuIDA7Ci0KLQkqaW1iYWxhbmNlID0gc2RzLT5taW5fbG9hZF9wZXJfdGFzazsKLQlzZHMtPmJ1c2llc3QgPSBzZHMtPmdyb3VwX21pbjsKLQotCXJldHVybiAxOwotCi19Ci0jZWxzZSAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLwotc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKLQkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KLQotCi11bnNpZ25lZCBsb25nIGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQlyZXR1cm4gU0NIRURfTE9BRF9TQ0FMRTsKLX0KLQotdW5zaWduZWQgbG9uZyBfX3dlYWsgYXJjaF9zY2FsZV9mcmVxX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXJldHVybiBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0JdW5zaWduZWQgbG9uZyB3ZWlnaHQgPSBjcHVtYXNrX3dlaWdodChzY2hlZF9kb21haW5fc3BhbihzZCkpOwotCXVuc2lnbmVkIGxvbmcgc210X2dhaW4gPSBzZC0+c210X2dhaW47Ci0KLQlzbXRfZ2FpbiAvPSB3ZWlnaHQ7Ci0KLQlyZXR1cm4gc210X2dhaW47Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX193ZWFrIGFyY2hfc2NhbGVfc210X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXJldHVybiBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKLX0KLQotdW5zaWduZWQgbG9uZyBzY2FsZV9ydF9wb3dlcihpbnQgY3B1KQotewotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKLQl1NjQgdG90YWwsIGF2YWlsYWJsZTsKLQotCXNjaGVkX2F2Z191cGRhdGUocnEpOwotCi0JdG90YWwgPSBzY2hlZF9hdmdfcGVyaW9kKCkgKyAocnEtPmNsb2NrIC0gcnEtPmFnZV9zdGFtcCk7Ci0JYXZhaWxhYmxlID0gdG90YWwgLSBycS0+cnRfYXZnOwotCi0JaWYgKHVubGlrZWx5KChzNjQpdG90YWwgPCBTQ0hFRF9MT0FEX1NDQUxFKSkKLQkJdG90YWwgPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JdG90YWwgPj49IFNDSEVEX0xPQURfU0hJRlQ7Ci0KLQlyZXR1cm4gZGl2X3U2NChhdmFpbGFibGUsIHRvdGFsKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2NwdV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBsb25nIHdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7Ci0JdW5zaWduZWQgbG9uZyBwb3dlciA9IFNDSEVEX0xPQURfU0NBTEU7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpzZGcgPSBzZC0+Z3JvdXBzOwotCi0JaWYgKHNjaGVkX2ZlYXQoQVJDSF9QT1dFUikpCi0JCXBvd2VyICo9IGFyY2hfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKLQllbHNlCi0JCXBvd2VyICo9IGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKLQotCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOwotCi0JaWYgKChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUikgJiYgd2VpZ2h0ID4gMSkgewotCQlpZiAoc2NoZWRfZmVhdChBUkNIX1BPV0VSKSkKLQkJCXBvd2VyICo9IGFyY2hfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOwotCQllbHNlCi0JCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKLQotCQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQl9Ci0KLQlwb3dlciAqPSBzY2FsZV9ydF9wb3dlcihjcHUpOwotCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOwotCi0JaWYgKCFwb3dlcikKLQkJcG93ZXIgPSAxOwotCi0Jc2RnLT5jcHVfcG93ZXIgPSBwb3dlcjsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkID0gc2QtPmNoaWxkOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsICpzZGcgPSBzZC0+Z3JvdXBzOwotCXVuc2lnbmVkIGxvbmcgcG93ZXI7Ci0KLQlpZiAoIWNoaWxkKSB7Ci0JCXVwZGF0ZV9jcHVfcG93ZXIoc2QsIGNwdSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwb3dlciA9IDA7Ci0KLQlncm91cCA9IGNoaWxkLT5ncm91cHM7Ci0JZG8gewotCQlwb3dlciArPSBncm91cC0+Y3B1X3Bvd2VyOwotCQlncm91cCA9IGdyb3VwLT5uZXh0OwotCX0gd2hpbGUgKGdyb3VwICE9IGNoaWxkLT5ncm91cHMpOwotCi0Jc2RnLT5jcHVfcG93ZXIgPSBwb3dlcjsKLX0KLQotLyoqCi0gKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KLSAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgotICogQGdyb3VwOiBzY2hlZF9ncm91cCB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgotICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgotICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1Ci0gKiBAbG9hZF9pZHg6IExvYWQgaW5kZXggb2Ygc2NoZWRfZG9tYWluIG9mIHRoaXNfY3B1IGZvciBsb2FkIGNhbGMuCi0gKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgotICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhpc19jcHUuCi0gKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCi0gKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCi0gKiBAc2dzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGdyb3VwLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCQkJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgaW50IHRoaXNfY3B1LAotCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCBsb2FkX2lkeCwgaW50ICpzZF9pZGxlLAotCQkJaW50IGxvY2FsX2dyb3VwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywKLQkJCWludCAqYmFsYW5jZSwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBsb2FkLCBtYXhfY3B1X2xvYWQsIG1pbl9jcHVfbG9hZDsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgYmFsYW5jZV9jcHUgPSAtMSwgZmlyc3RfaWRsZV9jcHUgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3VtX2F2Z19sb2FkX3Blcl90YXNrOwotCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWRfcGVyX3Rhc2s7Ci0KLQlpZiAobG9jYWxfZ3JvdXApIHsKLQkJYmFsYW5jZV9jcHUgPSBncm91cF9maXJzdF9jcHUoZ3JvdXApOwotCQlpZiAoYmFsYW5jZV9jcHUgPT0gdGhpc19jcHUpCi0JCQl1cGRhdGVfZ3JvdXBfcG93ZXIoc2QsIHRoaXNfY3B1KTsKLQl9Ci0KLQkvKiBUYWxseSB1cCB0aGUgbG9hZCBvZiBhbGwgQ1BVcyBpbiB0aGUgZ3JvdXAgKi8KLQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgPSBhdmdfbG9hZF9wZXJfdGFzayA9IDA7Ci0JbWF4X2NwdV9sb2FkID0gMDsKLQltaW5fY3B1X2xvYWQgPSB+MFVMOwotCi0JZm9yX2VhY2hfY3B1X2FuZChpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSwgY3B1cykgewotCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGkpOwotCi0JCWlmICgqc2RfaWRsZSAmJiBycS0+bnJfcnVubmluZykKLQkJCSpzZF9pZGxlID0gMDsKLQotCQkvKiBCaWFzIGJhbGFuY2luZyB0b3dhcmQgY3B1cyBvZiBvdXIgZG9tYWluICovCi0JCWlmIChsb2NhbF9ncm91cCkgewotCQkJaWYgKGlkbGVfY3B1KGkpICYmICFmaXJzdF9pZGxlX2NwdSkgewotCQkJCWZpcnN0X2lkbGVfY3B1ID0gMTsKLQkJCQliYWxhbmNlX2NwdSA9IGk7Ci0JCQl9Ci0KLQkJCWxvYWQgPSB0YXJnZXRfbG9hZChpLCBsb2FkX2lkeCk7Ci0JCX0gZWxzZSB7Ci0JCQlsb2FkID0gc291cmNlX2xvYWQoaSwgbG9hZF9pZHgpOwotCQkJaWYgKGxvYWQgPiBtYXhfY3B1X2xvYWQpCi0JCQkJbWF4X2NwdV9sb2FkID0gbG9hZDsKLQkJCWlmIChtaW5fY3B1X2xvYWQgPiBsb2FkKQotCQkJCW1pbl9jcHVfbG9hZCA9IGxvYWQ7Ci0JCX0KLQotCQlzZ3MtPmdyb3VwX2xvYWQgKz0gbG9hZDsKLQkJc2dzLT5zdW1fbnJfcnVubmluZyArPSBycS0+bnJfcnVubmluZzsKLQkJc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCArPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOwotCi0JCXN1bV9hdmdfbG9hZF9wZXJfdGFzayArPSBjcHVfYXZnX2xvYWRfcGVyX3Rhc2soaSk7Ci0JfQotCi0JLyoKLQkgKiBGaXJzdCBpZGxlIGNwdSBvciB0aGUgZmlyc3QgY3B1KGJ1c2llc3QpIGluIHRoaXMgc2NoZWQgZ3JvdXAKLQkgKiBpcyBlbGlnaWJsZSBmb3IgZG9pbmcgbG9hZCBiYWxhbmNpbmcgYXQgdGhpcyBhbmQgYWJvdmUKLQkgKiBkb21haW5zLiBJbiB0aGUgbmV3bHkgaWRsZSBjYXNlLCB3ZSB3aWxsIGFsbG93IGFsbCB0aGUgY3B1J3MKLQkgKiB0byBkbyB0aGUgbmV3bHkgaWRsZSBsb2FkIGJhbGFuY2UuCi0JICovCi0JaWYgKGlkbGUgIT0gQ1BVX05FV0xZX0lETEUgJiYgbG9jYWxfZ3JvdXAgJiYKLQkgICAgYmFsYW5jZV9jcHUgIT0gdGhpc19jcHUgJiYgYmFsYW5jZSkgewotCQkqYmFsYW5jZSA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLwotCXNncy0+YXZnX2xvYWQgPSAoc2dzLT5ncm91cF9sb2FkICogU0NIRURfTE9BRF9TQ0FMRSkgLyBncm91cC0+Y3B1X3Bvd2VyOwotCi0KLQkvKgotCSAqIENvbnNpZGVyIHRoZSBncm91cCB1bmJhbGFuY2VkIHdoZW4gdGhlIGltYmFsYW5jZSBpcyBsYXJnZXIKLQkgKiB0aGFuIHRoZSBhdmVyYWdlIHdlaWdodCBvZiB0d28gdGFza3MuCi0JICoKLQkgKiBBUFo6IHdpdGggY2dyb3VwIHRoZSBhdmcgdGFzayB3ZWlnaHQgY2FuIHZhcnkgd2lsZGx5IGFuZAotCSAqICAgICAgbWlnaHQgbm90IGJlIGEgc3VpdGFibGUgbnVtYmVyIC0gc2hvdWxkIHdlIGtlZXAgYQotCSAqICAgICAgbm9ybWFsaXplZCBucl9ydW5uaW5nIG51bWJlciBzb21ld2hlcmUgdGhhdCBuZWdhdGVzCi0JICogICAgICB0aGUgaGllcmFyY2h5PwotCSAqLwotCWF2Z19sb2FkX3Blcl90YXNrID0gKHN1bV9hdmdfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KLQkJZ3JvdXAtPmNwdV9wb3dlcjsKLQotCWlmICgobWF4X2NwdV9sb2FkIC0gbWluX2NwdV9sb2FkKSA+IDIqYXZnX2xvYWRfcGVyX3Rhc2spCi0JCXNncy0+Z3JvdXBfaW1iID0gMTsKLQotCXNncy0+Z3JvdXBfY2FwYWNpdHkgPQotCQlESVZfUk9VTkRfQ0xPU0VTVChncm91cC0+Y3B1X3Bvd2VyLCBTQ0hFRF9MT0FEX1NDQUxFKTsKLX0KLQotLyoqCi0gKiB1cGRhdGVfc2RfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KLSAqIEBzZDogc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCi0gKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCi0gKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKLSAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCi0gKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCi0gKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCi0gKiBAc2RzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIHNjaGVkX2RvbWFpbi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9sYl9zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAotCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqc2RfaWRsZSwKLQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmJhbGFuY2UsCi0JCQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcykKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZCA9IHNkLT5jaGlsZDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwID0gc2QtPmdyb3VwczsKLQlzdHJ1Y3Qgc2dfbGJfc3RhdHMgc2dzOwotCWludCBsb2FkX2lkeCwgcHJlZmVyX3NpYmxpbmcgPSAwOwotCi0JaWYgKGNoaWxkICYmIGNoaWxkLT5mbGFncyAmIFNEX1BSRUZFUl9TSUJMSU5HKQotCQlwcmVmZXJfc2libGluZyA9IDE7Ci0KLQlpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc2QsIHNkcywgaWRsZSk7Ci0JbG9hZF9pZHggPSBnZXRfc2RfbG9hZF9pZHgoc2QsIGlkbGUpOwotCi0JZG8gewotCQlpbnQgbG9jYWxfZ3JvdXA7Ci0KLQkJbG9jYWxfZ3JvdXAgPSBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAotCQkJCQkgICAgICAgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOwotCQltZW1zZXQoJnNncywgMCwgc2l6ZW9mKHNncykpOwotCQl1cGRhdGVfc2dfbGJfc3RhdHMoc2QsIGdyb3VwLCB0aGlzX2NwdSwgaWRsZSwgbG9hZF9pZHgsIHNkX2lkbGUsCi0JCQkJbG9jYWxfZ3JvdXAsIGNwdXMsIGJhbGFuY2UsICZzZ3MpOwotCi0JCWlmIChsb2NhbF9ncm91cCAmJiBiYWxhbmNlICYmICEoKmJhbGFuY2UpKQotCQkJcmV0dXJuOwotCi0JCXNkcy0+dG90YWxfbG9hZCArPSBzZ3MuZ3JvdXBfbG9hZDsKLQkJc2RzLT50b3RhbF9wd3IgKz0gZ3JvdXAtPmNwdV9wb3dlcjsKLQotCQkvKgotCQkgKiBJbiBjYXNlIHRoZSBjaGlsZCBkb21haW4gcHJlZmVycyB0YXNrcyBnbyB0byBzaWJsaW5ncwotCQkgKiBmaXJzdCwgbG93ZXIgdGhlIGdyb3VwIGNhcGFjaXR5IHRvIG9uZSBzbyB0aGF0IHdlJ2xsIHRyeQotCQkgKiBhbmQgbW92ZSBhbGwgdGhlIGV4Y2VzcyB0YXNrcyBhd2F5LgotCQkgKi8KLQkJaWYgKHByZWZlcl9zaWJsaW5nKQotCQkJc2dzLmdyb3VwX2NhcGFjaXR5ID0gbWluKHNncy5ncm91cF9jYXBhY2l0eSwgMVVMKTsKLQotCQlpZiAobG9jYWxfZ3JvdXApIHsKLQkJCXNkcy0+dGhpc19sb2FkID0gc2dzLmF2Z19sb2FkOwotCQkJc2RzLT50aGlzID0gZ3JvdXA7Ci0JCQlzZHMtPnRoaXNfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKLQkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOwotCQl9IGVsc2UgaWYgKHNncy5hdmdfbG9hZCA+IHNkcy0+bWF4X2xvYWQgJiYKLQkJCSAgIChzZ3Muc3VtX25yX3J1bm5pbmcgPiBzZ3MuZ3JvdXBfY2FwYWNpdHkgfHwKLQkJCQlzZ3MuZ3JvdXBfaW1iKSkgewotCQkJc2RzLT5tYXhfbG9hZCA9IHNncy5hdmdfbG9hZDsKLQkJCXNkcy0+YnVzaWVzdCA9IGdyb3VwOwotCQkJc2RzLT5idXNpZXN0X25yX3J1bm5pbmcgPSBzZ3Muc3VtX25yX3J1bm5pbmc7Ci0JCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9IHNncy5zdW1fd2VpZ2h0ZWRfbG9hZDsKLQkJCXNkcy0+Z3JvdXBfaW1iID0gc2dzLmdyb3VwX2ltYjsKLQkJfQotCi0JCXVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKGdyb3VwLCBzZHMsIGxvY2FsX2dyb3VwLCAmc2dzKTsKLQkJZ3JvdXAgPSBncm91cC0+bmV4dDsKLQl9IHdoaWxlIChncm91cCAhPSBzZC0+Z3JvdXBzKTsKLX0KLQotLyoqCi0gKiBmaXhfc21hbGxfaW1iYWxhbmNlIC0gQ2FsY3VsYXRlIHRoZSBtaW5vciBpbWJhbGFuY2UgdGhhdCBleGlzdHMKLSAqCQkJYW1vbmdzdCB0aGUgZ3JvdXBzIG9mIGEgc2NoZWRfZG9tYWluLCBkdXJpbmcKLSAqCQkJbG9hZCBiYWxhbmNpbmcuCi0gKiBAc2RzOiBTdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hvc2UgaW1iYWxhbmNlIGlzIHRvIGJlIGNhbGN1bGF0ZWQuCi0gKiBAdGhpc19jcHU6IFRoZSBjcHUgYXQgd2hvc2Ugc2NoZWRfZG9tYWluIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNlLgotICogQGltYmFsYW5jZTogVmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCi0JCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXAsIHB3cl9ub3cgPSAwLCBwd3JfbW92ZSA9IDA7Ci0JdW5zaWduZWQgaW50IGltYm4gPSAyOwotCi0JaWYgKHNkcy0+dGhpc19ucl9ydW5uaW5nKSB7Ci0JCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrIC89IHNkcy0+dGhpc19ucl9ydW5uaW5nOwotCQlpZiAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPgotCQkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrKQotCQkJaW1ibiA9IDE7Ci0JfSBlbHNlCi0JCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0KLQkJCWNwdV9hdmdfbG9hZF9wZXJfdGFzayh0aGlzX2NwdSk7Ci0KLQlpZiAoc2RzLT5tYXhfbG9hZCAtIHNkcy0+dGhpc19sb2FkICsgc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPj0KLQkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogaW1ibikgewotCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIE9LLCB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbWJhbGFuY2UgdG8ganVzdGlmeSBtb3ZpbmcgdGFza3MsCi0JICogaG93ZXZlciB3ZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0b3RhbCBDUFUgcG93ZXIgdXNlZCBieQotCSAqIG1vdmluZyB0aGVtLgotCSAqLwotCi0JcHdyX25vdyArPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciAqCi0JCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQpOwotCXB3cl9ub3cgKz0gc2RzLT50aGlzLT5jcHVfcG93ZXIgKgotCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCk7Ci0JcHdyX25vdyAvPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JLyogQW1vdW50IG9mIGxvYWQgd2UnZCBzdWJ0cmFjdCAqLwotCXRtcCA9IChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KLQkJc2RzLT5idXNpZXN0LT5jcHVfcG93ZXI7Ci0JaWYgKHNkcy0+bWF4X2xvYWQgPiB0bXApCi0JCXB3cl9tb3ZlICs9IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyICoKLQkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCAtIHRtcCk7Ci0KLQkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIGFkZCAqLwotCWlmIChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgPAotCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpCi0JCXRtcCA9IChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIpIC8KLQkJCXNkcy0+dGhpcy0+Y3B1X3Bvd2VyOwotCWVsc2UKLQkJdG1wID0gKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLwotCQkJc2RzLT50aGlzLT5jcHVfcG93ZXI7Ci0JcHdyX21vdmUgKz0gc2RzLT50aGlzLT5jcHVfcG93ZXIgKgotCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCArIHRtcCk7Ci0JcHdyX21vdmUgLz0gU0NIRURfTE9BRF9TQ0FMRTsKLQotCS8qIE1vdmUgaWYgd2UgZ2FpbiB0aHJvdWdocHV0ICovCi0JaWYgKHB3cl9tb3ZlID4gcHdyX25vdykKLQkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOwotfQotCi0vKioKLSAqIGNhbGN1bGF0ZV9pbWJhbGFuY2UgLSBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBpbWJhbGFuY2UgcHJlc2VudCB3aXRoaW4gdGhlCi0gKgkJCSBncm91cHMgb2YgYSBnaXZlbiBzY2hlZF9kb21haW4gZHVyaW5nIGxvYWQgYmFsYW5jZS4KLSAqIEBzZHM6IHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBpbWJhbGFuY2UgaXMgdG8gYmUgY2FsY3VsYXRlZC4KLSAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBjdXJyZW50bHkgbG9hZCBiYWxhbmNlIGlzIGJlaW5nIHBlcmZvcm1lZC4KLSAqIEBpbWJhbGFuY2U6IFRoZSB2YXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlX2ltYmFsYW5jZShzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IHRoaXNfY3B1LAotCQl1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXhfcHVsbDsKLQkvKgotCSAqIEluIHRoZSBwcmVzZW5jZSBvZiBzbXAgbmljZSBiYWxhbmNpbmcsIGNlcnRhaW4gc2NlbmFyaW9zIGNhbiBoYXZlCi0JICogbWF4IGxvYWQgbGVzcyB0aGFuIGF2ZyBsb2FkKGFzIHdlIHNraXAgdGhlIGdyb3VwcyBhdCBvciBiZWxvdwotCSAqIGl0cyBjcHVfcG93ZXIsIHdoaWxlIGNhbGN1bGF0aW5nIG1heF9sb2FkLi4pCi0JICovCi0JaWYgKHNkcy0+bWF4X2xvYWQgPCBzZHMtPmF2Z19sb2FkKSB7Ci0JCSppbWJhbGFuY2UgPSAwOwotCQlyZXR1cm4gZml4X3NtYWxsX2ltYmFsYW5jZShzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOwotCX0KLQotCS8qIERvbid0IHdhbnQgdG8gcHVsbCBzbyBtYW55IHRhc2tzIHRoYXQgYSBncm91cCB3b3VsZCBnbyBpZGxlICovCi0JbWF4X3B1bGwgPSBtaW4oc2RzLT5tYXhfbG9hZCAtIHNkcy0+YXZnX2xvYWQsCi0JCQlzZHMtPm1heF9sb2FkIC0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2spOwotCi0JLyogSG93IG11Y2ggbG9hZCB0byBhY3R1YWxseSBtb3ZlIHRvIGVxdWFsaXNlIHRoZSBpbWJhbGFuY2UgKi8KLQkqaW1iYWxhbmNlID0gbWluKG1heF9wdWxsICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIsCi0JCShzZHMtPmF2Z19sb2FkIC0gc2RzLT50aGlzX2xvYWQpICogc2RzLT50aGlzLT5jcHVfcG93ZXIpCi0JCQkvIFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkvKgotCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKLQkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCi0JICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQotCSAqIG1vdmVkCi0JICovCi0JaWYgKCppbWJhbGFuY2UgPCBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKLQkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKLQotfQotLyoqKioqKiogZmluZF9idXNpZXN0X2dyb3VwKCkgaGVscGVycyBlbmQgaGVyZSAqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogZmluZF9idXNpZXN0X2dyb3VwIC0gUmV0dXJucyB0aGUgYnVzaWVzdCBncm91cCB3aXRoaW4gdGhlIHNjaGVkX2RvbWFpbgotICogaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBJZiB0aGVyZSBpc24ndCBhbiBpbWJhbGFuY2UsIGFuZAotICogdGhlIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzLCBpdCByZXR1cm5zIGEgZ3JvdXAgd2hvc2UKLSAqIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIHRob3NlIHRhc2tzIGVsc2V3aGVyZSwgaWYKLSAqIHN1Y2ggYSBncm91cCBleGlzdHMuCi0gKgotICogQWxzbyBjYWxjdWxhdGVzIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQgYmUgbW92ZWQKLSAqIHRvIHJlc3RvcmUgYmFsYW5jZS4KLSAqCi0gKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgYnVzaWVzdCBncm91cCBpcyB0byBiZSByZXR1cm5lZC4KLSAqIEB0aGlzX2NwdTogVGhlIGNwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNpbmcgaXMgY3VycmVudGx5IGJlaW5nIHBlcmZvcm1lZC4KLSAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHdoaWNoIHN0b3JlcyBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQKLSAqCQliZSBtb3ZlZCB0byByZXN0b3JlIGJhbGFuY2UvcHV0IGEgZ3JvdXAgdG8gaWRsZS4KLSAqIEBpZGxlOiBUaGUgaWRsZSBzdGF0dXMgb2YgdGhpc19jcHUuCi0gKiBAc2RfaWRsZTogVGhlIGlkbGVuZXNzIG9mIHNkCi0gKiBAY3B1czogVGhlIHNldCBvZiBDUFVzIHVuZGVyIGNvbnNpZGVyYXRpb24gZm9yIGxvYWQtYmFsYW5jaW5nLgotICogQGJhbGFuY2U6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIHRoaXNfY3B1Ci0gKglpcyB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcgYXQgdGhpc19sZXZlbC4KLSAqCi0gKiBSZXR1cm5zOgktIHRoZSBidXNpZXN0IGdyb3VwIGlmIGltYmFsYW5jZSBleGlzdHMuCi0gKgkJLSBJZiBubyBpbWJhbGFuY2UgYW5kIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzIGJhbGFuY2UsCi0gKgkJICAgcmV0dXJuIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgd2hvc2UgQ1BVcyBjYW4gYmUKLSAqCQkgICBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyBpdHMgdGFza3Mgb250byBvdXIgZ3JvdXAuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKgotZmluZF9idXNpZXN0X2dyb3VwKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgIGludCAqc2RfaWRsZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSkKLXsKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgc2RzOwotCi0JbWVtc2V0KCZzZHMsIDAsIHNpemVvZihzZHMpKTsKLQotCS8qCi0JICogQ29tcHV0ZSB0aGUgdmFyaW91cyBzdGF0aXN0aWNzIHJlbGF2ZW50IGZvciBsb2FkIGJhbGFuY2luZyBhdAotCSAqIHRoaXMgbGV2ZWwuCi0JICovCi0JdXBkYXRlX3NkX2xiX3N0YXRzKHNkLCB0aGlzX2NwdSwgaWRsZSwgc2RfaWRsZSwgY3B1cywKLQkJCQkJYmFsYW5jZSwgJnNkcyk7Ci0KLQkvKiBDYXNlcyB3aGVyZSBpbWJhbGFuY2UgZG9lcyBub3QgZXhpc3QgZnJvbSBQT1Ygb2YgdGhpc19jcHUgKi8KLQkvKiAxKSB0aGlzX2NwdSBpcyBub3QgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nCi0JICogICAgYXQgdGhpcyBsZXZlbC4KLQkgKiAyKSBUaGVyZSBpcyBubyBidXN5IHNpYmxpbmcgZ3JvdXAgdG8gcHVsbCBmcm9tLgotCSAqIDMpIFRoaXMgZ3JvdXAgaXMgdGhlIGJ1c2llc3QgZ3JvdXAuCi0JICogNCkgVGhpcyBncm91cCBpcyBtb3JlIGJ1c3kgdGhhbiB0aGUgYXZnIGJ1c2llbmVzcyBhdCB0aGlzCi0JICogICAgc2NoZWRfZG9tYWluLgotCSAqIDUpIFRoZSBpbWJhbGFuY2UgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQuCi0JICogNikgQW55IHJlYmFsYW5jZSB3b3VsZCBsZWFkIHRvIHBpbmctcG9uZwotCSAqLwotCWlmIChiYWxhbmNlICYmICEoKmJhbGFuY2UpKQotCQlnb3RvIHJldDsKLQotCWlmICghc2RzLmJ1c2llc3QgfHwgc2RzLmJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5tYXhfbG9hZCkKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQlzZHMuYXZnX2xvYWQgPSAoU0NIRURfTE9BRF9TQ0FMRSAqIHNkcy50b3RhbF9sb2FkKSAvIHNkcy50b3RhbF9wd3I7Ci0KLQlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMuYXZnX2xvYWQpCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0JaWYgKDEwMCAqIHNkcy5tYXhfbG9hZCA8PSBzZC0+aW1iYWxhbmNlX3BjdCAqIHNkcy50aGlzX2xvYWQpCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0Jc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzayAvPSBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nOwotCWlmIChzZHMuZ3JvdXBfaW1iKQotCQlzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrID0KLQkJCW1pbihzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMuYXZnX2xvYWQpOwotCi0JLyoKLQkgKiBXZSdyZSB0cnlpbmcgdG8gZ2V0IGFsbCB0aGUgY3B1cyB0byB0aGUgYXZlcmFnZV9sb2FkLCBzbyB3ZSBkb24ndAotCSAqIHdhbnQgdG8gcHVzaCBvdXJzZWx2ZXMgYWJvdmUgdGhlIGF2ZXJhZ2UgbG9hZCwgbm9yIGRvIHdlIHdpc2ggdG8KLQkgKiByZWR1Y2UgdGhlIG1heCBsb2FkZWQgY3B1IGJlbG93IHRoZSBhdmVyYWdlIGxvYWQsIGFzIGVpdGhlciBvZiB0aGVzZQotCSAqIGFjdGlvbnMgd291bGQganVzdCByZXN1bHQgaW4gbW9yZSByZWJhbGFuY2luZyBsYXRlciwgYW5kIHBpbmctcG9uZwotCSAqIHRhc2tzIGFyb3VuZC4gVGh1cyB3ZSBsb29rIGZvciB0aGUgbWluaW11bSBwb3NzaWJsZSBpbWJhbGFuY2UuCi0JICogTmVnYXRpdmUgaW1iYWxhbmNlcyAoKndlKiBhcmUgbW9yZSBsb2FkZWQgdGhhbiBhbnlvbmUgZWxzZSkgd2lsbAotCSAqIGJlIGNvdW50ZWQgYXMgbm8gaW1iYWxhbmNlIGZvciB0aGVzZSBwdXJwb3NlcyAtLSB3ZSBjYW4ndCBmaXggdGhhdAotCSAqIGJ5IHB1bGxpbmcgdGFza3MgdG8gdXMuIEJlIGNhcmVmdWwgb2YgbmVnYXRpdmUgbnVtYmVycyBhcyB0aGV5J2xsCi0JICogYXBwZWFyIGFzIHZlcnkgbGFyZ2UgdmFsdWVzIHdpdGggdW5zaWduZWQgbG9uZ3MuCi0JICovCi0JaWYgKHNkcy5tYXhfbG9hZCA8PSBzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCS8qIExvb2tzIGxpa2UgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBDb21wdXRlIGl0ICovCi0JY2FsY3VsYXRlX2ltYmFsYW5jZSgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKLQlyZXR1cm4gc2RzLmJ1c2llc3Q7Ci0KLW91dF9iYWxhbmNlZDoKLQkvKgotCSAqIFRoZXJlIGlzIG5vIG9idmlvdXMgaW1iYWxhbmNlLiBCdXQgY2hlY2sgaWYgd2UgY2FuIGRvIHNvbWUgYmFsYW5jaW5nCi0JICogdG8gc2F2ZSBwb3dlci4KLQkgKi8KLQlpZiAoY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpKQotCQlyZXR1cm4gc2RzLmJ1c2llc3Q7Ci1yZXQ6Ci0JKmltYmFsYW5jZSA9IDA7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBmaW5kX2J1c2llc3RfcXVldWUgLSBmaW5kIHRoZSBidXNpZXN0IHJ1bnF1ZXVlIGFtb25nIHRoZSBjcHVzIGluIGdyb3VwLgotICovCi1zdGF0aWMgc3RydWN0IHJxICoKLWZpbmRfYnVzaWVzdF9xdWV1ZShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgdW5zaWduZWQgbG9uZyBpbWJhbGFuY2UsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzKQotewotCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEwsICpycTsKLQl1bnNpZ25lZCBsb25nIG1heF9sb2FkID0gMDsKLQlpbnQgaTsKLQotCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSkgewotCQl1bnNpZ25lZCBsb25nIHBvd2VyID0gcG93ZXJfb2YoaSk7Ci0JCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHkgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7Ci0JCXVuc2lnbmVkIGxvbmcgd2w7Ci0KLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdXMpKQotCQkJY29udGludWU7Ci0KLQkJcnEgPSBjcHVfcnEoaSk7Ci0JCXdsID0gd2VpZ2h0ZWRfY3B1bG9hZChpKSAqIFNDSEVEX0xPQURfU0NBTEU7Ci0JCXdsIC89IHBvd2VyOwotCi0JCWlmIChjYXBhY2l0eSAmJiBycS0+bnJfcnVubmluZyA9PSAxICYmIHdsID4gaW1iYWxhbmNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHdsID4gbWF4X2xvYWQpIHsKLQkJCW1heF9sb2FkID0gd2w7Ci0JCQlidXNpZXN0ID0gcnE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gYnVzaWVzdDsKLX0KLQotLyoKLSAqIE1heCBiYWNrb2ZmIGlmIHdlIGVuY291bnRlciBwaW5uZWQgdGFza3MuIFByZXR0eSBhcmJpdHJhcnkgdmFsdWUsIGJ1dAotICogc28gbG9uZyBhcyBpdCBpcyBsYXJnZSBlbm91Z2guCi0gKi8KLSNkZWZpbmUgTUFYX1BJTk5FRF9JTlRFUlZBTAk1MTIKLQotLyogV29ya2luZyBjcHVtYXNrIGZvciBsb2FkX2JhbGFuY2UgYW5kIGxvYWRfYmFsYW5jZV9uZXdpZGxlLiAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKLQotLyoKLSAqIENoZWNrIHRoaXNfY3B1IHRvIGVuc3VyZSBpdCBpcyBiYWxhbmNlZCB3aXRoaW4gZG9tYWluLiBBdHRlbXB0IHRvIG1vdmUKLSAqIHRhc2tzIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4KLSAqLwotc3RhdGljIGludCBsb2FkX2JhbGFuY2UoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsCi0JCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCQlpbnQgKmJhbGFuY2UpCi17Ci0JaW50IGxkX21vdmVkLCBhbGxfcGlubmVkID0gMCwgYWN0aXZlX2JhbGFuY2UgPSAwLCBzZF9pZGxlID0gMDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwotCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOwotCXN0cnVjdCBycSAqYnVzaWVzdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7Ci0KLQljcHVtYXNrX2NvcHkoY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTsKLQotCS8qCi0JICogV2hlbiBwb3dlciBzYXZpbmdzIHBvbGljeSBpcyBlbmFibGVkIGZvciB0aGUgcGFyZW50IGRvbWFpbiwgaWRsZQotCSAqIHNpYmxpbmcgY2FuIHBpY2sgdXAgbG9hZCBpcnJlc3BlY3RpdmUgb2YgYnVzeSBzaWJsaW5ncy4gSW4gdGhpcyBjYXNlLAotCSAqIGxldCB0aGUgc3RhdGUgb2YgaWRsZSBzaWJsaW5nIHBlcmNvbGF0ZSB1cCBhcyBDUFVfSURMRSwgaW5zdGVhZCBvZgotCSAqIHBvcnRyYXlpbmcgaXQgYXMgQ1BVX05PVF9JRExFLgotCSAqLwotCWlmIChpZGxlICE9IENQVV9OT1RfSURMRSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJc2RfaWRsZSA9IDE7Ci0KLQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9jb3VudFtpZGxlXSk7Ci0KLXJlZG86Ci0JdXBkYXRlX3NoYXJlcyhzZCk7Ci0JZ3JvdXAgPSBmaW5kX2J1c2llc3RfZ3JvdXAoc2QsIHRoaXNfY3B1LCAmaW1iYWxhbmNlLCBpZGxlLCAmc2RfaWRsZSwKLQkJCQkgICBjcHVzLCBiYWxhbmNlKTsKLQotCWlmICgqYmFsYW5jZSA9PSAwKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCWlmICghZ3JvdXApIHsKLQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5Z1tpZGxlXSk7Ci0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCX0KLQotCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXAsIGlkbGUsIGltYmFsYW5jZSwgY3B1cyk7Ci0JaWYgKCFidXNpZXN0KSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeXFbaWRsZV0pOwotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQl9Ci0KLQlCVUdfT04oYnVzaWVzdCA9PSB0aGlzX3JxKTsKLQotCXNjaGVkc3RhdF9hZGQoc2QsIGxiX2ltYmFsYW5jZVtpZGxlXSwgaW1iYWxhbmNlKTsKLQotCWxkX21vdmVkID0gMDsKLQlpZiAoYnVzaWVzdC0+bnJfcnVubmluZyA+IDEpIHsKLQkJLyoKLQkJICogQXR0ZW1wdCB0byBtb3ZlIHRhc2tzLiBJZiBmaW5kX2J1c2llc3RfZ3JvdXAgaGFzIGZvdW5kCi0JCSAqIGFuIGltYmFsYW5jZSBidXQgYnVzaWVzdC0+bnJfcnVubmluZyA8PSAxLCB0aGUgZ3JvdXAgaXMKLQkJICogc3RpbGwgdW5iYWxhbmNlZC4gbGRfbW92ZWQgc2ltcGx5IHN0YXlzIHplcm8sIHNvIGl0IGlzCi0JCSAqIGNvcnJlY3RseSB0cmVhdGVkIGFzIGFuIGltYmFsYW5jZS4KLQkJICovCi0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJZG91YmxlX3JxX2xvY2sodGhpc19ycSwgYnVzaWVzdCk7Ci0JCWxkX21vdmVkID0gbW92ZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCQkgICAgICBpbWJhbGFuY2UsIHNkLCBpZGxlLCAmYWxsX3Bpbm5lZCk7Ci0JCWRvdWJsZV9ycV91bmxvY2sodGhpc19ycSwgYnVzaWVzdCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQkvKgotCQkgKiBzb21lIG90aGVyIGNwdSBkaWQgdGhlIGxvYWQgYmFsYW5jZSBmb3IgdXMuCi0JCSAqLwotCQlpZiAobGRfbW92ZWQgJiYgdGhpc19jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJcmVzY2hlZF9jcHUodGhpc19jcHUpOwotCi0JCS8qIEFsbCB0YXNrcyBvbiB0aGlzIHJ1bnF1ZXVlIHdlcmUgcGlubmVkIGJ5IENQVSBhZmZpbml0eSAqLwotCQlpZiAodW5saWtlbHkoYWxsX3Bpbm5lZCkpIHsKLQkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdV9vZihidXNpZXN0KSwgY3B1cyk7Ci0JCQlpZiAoIWNwdW1hc2tfZW1wdHkoY3B1cykpCi0JCQkJZ290byByZWRvOwotCQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JCX0KLQl9Ci0KLQlpZiAoIWxkX21vdmVkKSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2ZhaWxlZFtpZGxlXSk7Ci0JCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCsrOwotCi0JCWlmICh1bmxpa2VseShzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcysyKSkgewotCi0JCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJ1c2llc3QtPmxvY2ssIGZsYWdzKTsKLQotCQkJLyogZG9uJ3Qga2ljayB0aGUgbWlncmF0aW9uX3RocmVhZCwgaWYgdGhlIGN1cnIKLQkJCSAqIHRhc2sgb24gYnVzaWVzdCBjcHUgY2FuJ3QgYmUgbW92ZWQgdG8gdGhpc19jcHUKLQkJCSAqLwotCQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAotCQkJCQkgICAgICAmYnVzaWVzdC0+Y3Vyci0+Y3B1c19hbGxvd2VkKSkgewotCQkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLAotCQkJCQkJCSAgICBmbGFncyk7Ci0JCQkJYWxsX3Bpbm5lZCA9IDE7Ci0JCQkJZ290byBvdXRfb25lX3Bpbm5lZDsKLQkJCX0KLQotCQkJaWYgKCFidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSkgewotCQkJCWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlID0gMTsKLQkJCQlidXNpZXN0LT5wdXNoX2NwdSA9IHRoaXNfY3B1OwotCQkJCWFjdGl2ZV9iYWxhbmNlID0gMTsKLQkJCX0KLQkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAoYWN0aXZlX2JhbGFuY2UpCi0JCQkJd2FrZV91cF9wcm9jZXNzKGJ1c2llc3QtPm1pZ3JhdGlvbl90aHJlYWQpOwotCi0JCQkvKgotCQkJICogV2UndmUga2lja2VkIGFjdGl2ZSBiYWxhbmNpbmcsIHJlc2V0IHRoZSBmYWlsdXJlCi0JCQkgKiBjb3VudGVyLgotCQkJICovCi0JCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSBzZC0+Y2FjaGVfbmljZV90cmllcysxOwotCQl9Ci0JfSBlbHNlCi0JCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7Ci0KLQlpZiAobGlrZWx5KCFhY3RpdmVfYmFsYW5jZSkpIHsKLQkJLyogV2Ugd2VyZSB1bmJhbGFuY2VkLCBzbyByZXNldCB0aGUgYmFsYW5jaW5nIGludGVydmFsICovCi0JCXNkLT5iYWxhbmNlX2ludGVydmFsID0gc2QtPm1pbl9pbnRlcnZhbDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBJZiB3ZSd2ZSBiZWd1biBhY3RpdmUgYmFsYW5jaW5nLCBzdGFydCB0byBiYWNrIG9mZi4gVGhpcwotCQkgKiBjYXNlIG1heSBub3QgYmUgY292ZXJlZCBieSB0aGUgYWxsX3Bpbm5lZCBsb2dpYyBpZiB0aGVyZQotCQkgKiBpcyBvbmx5IDEgdGFzayBvbiB0aGUgYnVzeSBydW5xdWV1ZSAoYmVjYXVzZSB3ZSBkb24ndCBjYWxsCi0JCSAqIG1vdmVfdGFza3MpLgotCQkgKi8KLQkJaWYgKHNkLT5iYWxhbmNlX2ludGVydmFsIDwgc2QtPm1heF9pbnRlcnZhbCkKLQkJCXNkLT5iYWxhbmNlX2ludGVydmFsICo9IDI7Ci0JfQotCi0JaWYgKCFsZF9tb3ZlZCAmJiAhc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJbGRfbW92ZWQgPSAtMTsKLQotCWdvdG8gb3V0OwotCi1vdXRfYmFsYW5jZWQ6Ci0Jc2NoZWRzdGF0X2luYyhzZCwgbGJfYmFsYW5jZWRbaWRsZV0pOwotCi0Jc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKLQotb3V0X29uZV9waW5uZWQ6Ci0JLyogdHVuZSB1cCB0aGUgYmFsYW5jaW5nIGludGVydmFsICovCi0JaWYgKChhbGxfcGlubmVkICYmIHNkLT5iYWxhbmNlX2ludGVydmFsIDwgTUFYX1BJTk5FRF9JTlRFUlZBTCkgfHwKLQkJCShzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IHNkLT5tYXhfaW50ZXJ2YWwpKQotCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCAqPSAyOwotCi0JaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlsZF9tb3ZlZCA9IC0xOwotCWVsc2UKLQkJbGRfbW92ZWQgPSAwOwotb3V0OgotCWlmIChsZF9tb3ZlZCkKLQkJdXBkYXRlX3NoYXJlcyhzZCk7Ci0JcmV0dXJuIGxkX21vdmVkOwotfQotCi0vKgotICogQ2hlY2sgdGhpc19jcHUgdG8gZW5zdXJlIGl0IGlzIGJhbGFuY2VkIHdpdGhpbiBkb21haW4uIEF0dGVtcHQgdG8gbW92ZQotICogdGFza3MgaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLgotICoKLSAqIENhbGxlZCBmcm9tIHNjaGVkdWxlIHdoZW4gdGhpc19ycSBpcyBhYm91dCB0byBiZWNvbWUgaWRsZSAoQ1BVX05FV0xZX0lETEUpLgotICogdGhpc19ycSBpcyBsb2NrZWQuCi0gKi8KLXN0YXRpYyBpbnQKLWxvYWRfYmFsYW5jZV9uZXdpZGxlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwotCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7Ci0JaW50IGxkX21vdmVkID0gMDsKLQlpbnQgc2RfaWRsZSA9IDA7Ci0JaW50IGFsbF9waW5uZWQgPSAwOwotCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7Ci0KLQljcHVtYXNrX2NvcHkoY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTsKLQotCS8qCi0JICogV2hlbiBwb3dlciBzYXZpbmdzIHBvbGljeSBpcyBlbmFibGVkIGZvciB0aGUgcGFyZW50IGRvbWFpbiwgaWRsZQotCSAqIHNpYmxpbmcgY2FuIHBpY2sgdXAgbG9hZCBpcnJlc3BlY3RpdmUgb2YgYnVzeSBzaWJsaW5ncy4gSW4gdGhpcyBjYXNlLAotCSAqIGxldCB0aGUgc3RhdGUgb2YgaWRsZSBzaWJsaW5nIHBlcmNvbGF0ZSB1cCBhcyBJRExFLCBpbnN0ZWFkIG9mCi0JICogcG9ydHJheWluZyBpdCBhcyBDUFVfTk9UX0lETEUuCi0JICovCi0JaWYgKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlzZF9pZGxlID0gMTsKLQotCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2NvdW50W0NQVV9ORVdMWV9JRExFXSk7Ci1yZWRvOgotCXVwZGF0ZV9zaGFyZXNfbG9ja2VkKHRoaXNfcnEsIHNkKTsKLQlncm91cCA9IGZpbmRfYnVzaWVzdF9ncm91cChzZCwgdGhpc19jcHUsICZpbWJhbGFuY2UsIENQVV9ORVdMWV9JRExFLAotCQkJCSAgICZzZF9pZGxlLCBjcHVzLCBOVUxMKTsKLQlpZiAoIWdyb3VwKSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeWdbQ1BVX05FV0xZX0lETEVdKTsKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JfQotCi0JYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgQ1BVX05FV0xZX0lETEUsIGltYmFsYW5jZSwgY3B1cyk7Ci0JaWYgKCFidXNpZXN0KSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeXFbQ1BVX05FV0xZX0lETEVdKTsKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JfQotCi0JQlVHX09OKGJ1c2llc3QgPT0gdGhpc19ycSk7Ci0KLQlzY2hlZHN0YXRfYWRkKHNkLCBsYl9pbWJhbGFuY2VbQ1BVX05FV0xZX0lETEVdLCBpbWJhbGFuY2UpOwotCi0JbGRfbW92ZWQgPSAwOwotCWlmIChidXNpZXN0LT5ucl9ydW5uaW5nID4gMSkgewotCQkvKiBBdHRlbXB0IHRvIG1vdmUgdGFza3MgKi8KLQkJZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQkJLyogdGhpc19ycS0+Y2xvY2sgaXMgYWxyZWFkeSB1cGRhdGVkICovCi0JCXVwZGF0ZV9ycV9jbG9jayhidXNpZXN0KTsKLQkJbGRfbW92ZWQgPSBtb3ZlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAotCQkJCQlpbWJhbGFuY2UsIHNkLCBDUFVfTkVXTFlfSURMRSwKLQkJCQkJJmFsbF9waW5uZWQpOwotCQlkb3VibGVfdW5sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0KLQkJaWYgKHVubGlrZWx5KGFsbF9waW5uZWQpKSB7Ci0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHVfb2YoYnVzaWVzdCksIGNwdXMpOwotCQkJaWYgKCFjcHVtYXNrX2VtcHR5KGNwdXMpKQotCQkJCWdvdG8gcmVkbzsKLQkJfQotCX0KLQotCWlmICghbGRfbW92ZWQpIHsKLQkJaW50IGFjdGl2ZV9iYWxhbmNlID0gMDsKLQotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9mYWlsZWRbQ1BVX05FV0xZX0lETEVdKTsKLQkJaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJCXJldHVybiAtMTsKLQotCQlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyA8IFBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCkKLQkJCXJldHVybiAtMTsKLQotCQlpZiAoc2QtPm5yX2JhbGFuY2VfZmFpbGVkKysgPCAyKQotCQkJcmV0dXJuIC0xOwotCi0JCS8qCi0JCSAqIFRoZSBvbmx5IHRhc2sgcnVubmluZyBpbiBhIG5vbi1pZGxlIGNwdSBjYW4gYmUgbW92ZWQgdG8gdGhpcwotCQkgKiBjcHUgaW4gYW4gYXR0ZW1wdCB0byBjb21wbGV0ZWx5IGZyZWV1cCB0aGUgb3RoZXIgQ1BVCi0JCSAqIHBhY2thZ2UuIFRoZSBzYW1lIG1ldGhvZCB1c2VkIHRvIG1vdmUgdGFzayBpbiBsb2FkX2JhbGFuY2UoKQotCQkgKiBoYXZlIGJlZW4gZXh0ZW5kZWQgZm9yIGxvYWRfYmFsYW5jZV9uZXdpZGxlKCkgdG8gc3BlZWR1cAotCQkgKiBjb25zb2xpZGF0aW9uIGF0IHNjaGVkX21jPVBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCAoMikKLQkJICoKLQkJICogVGhlIHBhY2thZ2UgcG93ZXIgc2F2aW5nIGxvZ2ljIGNvbWVzIGZyb20KLQkJICogZmluZF9idXNpZXN0X2dyb3VwKCkuICBJZiB0aGVyZSBhcmUgbm8gaW1iYWxhbmNlLCB0aGVuCi0JCSAqIGZfYl9nKCkgd2lsbCByZXR1cm4gTlVMTC4gIEhvd2V2ZXIgd2hlbiBzY2hlZF9tYz17MSwyfSB0aGVuCi0JCSAqIGZfYl9nKCkgd2lsbCBzZWxlY3QgYSBncm91cCBmcm9tIHdoaWNoIGEgcnVubmluZyB0YXNrIG1heSBiZQotCQkgKiBwdWxsZWQgdG8gdGhpcyBjcHUgaW4gb3JkZXIgdG8gbWFrZSB0aGUgb3RoZXIgcGFja2FnZSBpZGxlLgotCQkgKiBJZiB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBtYWtlIGEgcGFja2FnZSBpZGxlIGFuZCBpZgotCQkgKiB0aGVyZSBhcmUgbm8gaW1iYWxhbmNlLCB0aGVuIGZfYl9nKCkgd2lsbCByZXR1cm4gTlVMTCBhbmQgbm8KLQkJICogYWN0aW9uIHdpbGwgYmUgdGFrZW4gaW4gbG9hZF9iYWxhbmNlX25ld2lkbGUoKS4KLQkJICoKLQkJICogVW5kZXIgbm9ybWFsIHRhc2sgcHVsbCBvcGVyYXRpb24gZHVlIHRvIGltYmFsYW5jZSwgdGhlcmUKLQkJICogd2lsbCBiZSBtb3JlIHRoYW4gb25lIHRhc2sgaW4gdGhlIHNvdXJjZSBydW4gcXVldWUgYW5kCi0JCSAqIG1vdmVfdGFza3MoKSB3aWxsIHN1Y2NlZWQuICBsZF9tb3ZlZCB3aWxsIGJlIHRydWUgYW5kIHRoaXMKLQkJICogYWN0aXZlIGJhbGFuY2UgY29kZSB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQuCi0JCSAqLwotCi0JCS8qIExvY2sgYnVzaWVzdCBpbiBjb3JyZWN0IG9yZGVyIHdoaWxlIHRoaXNfcnEgaXMgaGVsZCAqLwotCQlkb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QpOwotCi0JCS8qCi0JCSAqIGRvbid0IGtpY2sgdGhlIG1pZ3JhdGlvbl90aHJlYWQsIGlmIHRoZSBjdXJyCi0JCSAqIHRhc2sgb24gYnVzaWVzdCBjcHUgY2FuJ3QgYmUgbW92ZWQgdG8gdGhpc19jcHUKLQkJICovCi0JCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwgJmJ1c2llc3QtPmN1cnItPmNwdXNfYWxsb3dlZCkpIHsKLQkJCWRvdWJsZV91bmxvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQkJCWFsbF9waW5uZWQgPSAxOwotCQkJcmV0dXJuIGxkX21vdmVkOwotCQl9Ci0KLQkJaWYgKCFidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSkgewotCQkJYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UgPSAxOwotCQkJYnVzaWVzdC0+cHVzaF9jcHUgPSB0aGlzX2NwdTsKLQkJCWFjdGl2ZV9iYWxhbmNlID0gMTsKLQkJfQotCi0JCWRvdWJsZV91bmxvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQkJLyoKLQkJICogU2hvdWxkIG5vdCBjYWxsIHR0d3Ugd2hpbGUgaG9sZGluZyBhIHJxLT5sb2NrCi0JCSAqLwotCQlyYXdfc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwotCQlpZiAoYWN0aXZlX2JhbGFuY2UpCi0JCQl3YWtlX3VwX3Byb2Nlc3MoYnVzaWVzdC0+bWlncmF0aW9uX3RocmVhZCk7Ci0JCXJhd19zcGluX2xvY2soJnRoaXNfcnEtPmxvY2spOwotCi0JfSBlbHNlCi0JCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7Ci0KLQl1cGRhdGVfc2hhcmVzX2xvY2tlZCh0aGlzX3JxLCBzZCk7Ci0JcmV0dXJuIGxkX21vdmVkOwotCi1vdXRfYmFsYW5jZWQ6Ci0Jc2NoZWRzdGF0X2luYyhzZCwgbGJfYmFsYW5jZWRbQ1BVX05FV0xZX0lETEVdKTsKLQlpZiAoIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCXJldHVybiAtMTsKLQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBpZGxlX2JhbGFuY2UgaXMgY2FsbGVkIGJ5IHNjaGVkdWxlKCkgaWYgdGhpc19jcHUgaXMgYWJvdXQgdG8gYmVjb21lCi0gKiBpZGxlLiBBdHRlbXB0cyB0byBwdWxsIHRhc2tzIGZyb20gb3RoZXIgQ1BVcy4KLSAqLwotc3RhdGljIHZvaWQgaWRsZV9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCWludCBwdWxsZWRfdGFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgSFo7Ci0KLQl0aGlzX3JxLT5pZGxlX3N0YW1wID0gdGhpc19ycS0+Y2xvY2s7Ci0KLQlpZiAodGhpc19ycS0+YXZnX2lkbGUgPCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpCi0JCXJldHVybjsKLQotCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKLQkJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKLQotCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHNkLT5mbGFncyAmIFNEX0JBTEFOQ0VfTkVXSURMRSkKLQkJCS8qIElmIHdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHN0b3Agc2VhcmNoaW5nOiAqLwotCQkJcHVsbGVkX3Rhc2sgPSBsb2FkX2JhbGFuY2VfbmV3aWRsZSh0aGlzX2NwdSwgdGhpc19ycSwKLQkJCQkJCQkgICBzZCk7Ci0KLQkJaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKHNkLT5iYWxhbmNlX2ludGVydmFsKTsKLQkJaWYgKHRpbWVfYWZ0ZXIobmV4dF9iYWxhbmNlLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKQotCQkJbmV4dF9iYWxhbmNlID0gc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsOwotCQlpZiAocHVsbGVkX3Rhc2spIHsKLQkJCXRoaXNfcnEtPmlkbGVfc3RhbXAgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHB1bGxlZF90YXNrIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgdGhpc19ycS0+bmV4dF9iYWxhbmNlKSkgewotCQkvKgotCQkgKiBXZSBhcmUgZ29pbmcgaWRsZS4gbmV4dF9iYWxhbmNlIG1heSBiZSBzZXQgYmFzZWQgb24KLQkJICogYSBidXN5IHByb2Nlc3Nvci4gU28gcmVzZXQgbmV4dF9iYWxhbmNlLgotCQkgKi8KLQkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOwotCX0KLX0KLQotLyoKLSAqIGFjdGl2ZV9sb2FkX2JhbGFuY2UgaXMgcnVuIGJ5IG1pZ3JhdGlvbiB0aHJlYWRzLiBJdCBwdXNoZXMgcnVubmluZyB0YXNrcwotICogb2ZmIHRoZSBidXNpZXN0IENQVSBvbnRvIGlkbGUgQ1BVcy4gSXQgcmVxdWlyZXMgYXQgbGVhc3QgMSB0YXNrIHRvIGJlCi0gKiBydW5uaW5nIG9uIGVhY2ggcGh5c2ljYWwgQ1BVIHdoZXJlIHBvc3NpYmxlLCBhbmQgYXZvaWRzIHBoeXNpY2FsIC8KLSAqIGxvZ2ljYWwgaW1iYWxhbmNlcy4KLSAqCi0gKiBDYWxsZWQgd2l0aCBidXNpZXN0X3JxIGxvY2tlZC4KLSAqLwotc3RhdGljIHZvaWQgYWN0aXZlX2xvYWRfYmFsYW5jZShzdHJ1Y3QgcnEgKmJ1c2llc3RfcnEsIGludCBidXNpZXN0X2NwdSkKLXsKLQlpbnQgdGFyZ2V0X2NwdSA9IGJ1c2llc3RfcnEtPnB1c2hfY3B1OwotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCXN0cnVjdCBycSAqdGFyZ2V0X3JxOwotCi0JLyogSXMgdGhlcmUgYW55IHRhc2sgdG8gbW92ZT8gKi8KLQlpZiAoYnVzaWVzdF9ycS0+bnJfcnVubmluZyA8PSAxKQotCQlyZXR1cm47Ci0KLQl0YXJnZXRfcnEgPSBjcHVfcnEodGFyZ2V0X2NwdSk7Ci0KLQkvKgotCSAqIFRoaXMgY29uZGl0aW9uIGlzICJpbXBvc3NpYmxlIiwgaWYgaXQgb2NjdXJzCi0JICogd2UgbmVlZCB0byBmaXggaXQuIE9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkKLQkgKiBCam9ybiBIZWxnYWFzIG9uIGEgMTI4LWNwdSBzZXR1cC4KLQkgKi8KLQlCVUdfT04oYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpOwotCi0JLyogbW92ZSBhIHRhc2sgZnJvbSBidXNpZXN0X3JxIHRvIHRhcmdldF9ycSAqLwotCWRvdWJsZV9sb2NrX2JhbGFuY2UoYnVzaWVzdF9ycSwgdGFyZ2V0X3JxKTsKLQl1cGRhdGVfcnFfY2xvY2soYnVzaWVzdF9ycSk7Ci0JdXBkYXRlX3JxX2Nsb2NrKHRhcmdldF9ycSk7Ci0KLQkvKiBTZWFyY2ggZm9yIGFuIHNkIHNwYW5uaW5nIHVzIGFuZCB0aGUgdGFyZ2V0IENQVS4gKi8KLQlmb3JfZWFjaF9kb21haW4odGFyZ2V0X2NwdSwgc2QpIHsKLQkJaWYgKChzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpICYmCi0JCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGJ1c2llc3RfY3B1LCBzY2hlZF9kb21haW5fc3BhbihzZCkpKQotCQkJCWJyZWFrOwotCX0KLQotCWlmIChsaWtlbHkoc2QpKSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9jb3VudCk7Ci0KLQkJaWYgKG1vdmVfb25lX3Rhc2sodGFyZ2V0X3JxLCB0YXJnZXRfY3B1LCBidXNpZXN0X3JxLAotCQkJCSAgc2QsIENQVV9JRExFKSkKLQkJCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9wdXNoZWQpOwotCQllbHNlCi0JCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfZmFpbGVkKTsKLQl9Ci0JZG91YmxlX3VubG9ja19iYWxhbmNlKGJ1c2llc3RfcnEsIHRhcmdldF9ycSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTk9fSFoKLXN0YXRpYyBzdHJ1Y3QgewotCWF0b21pY190IGxvYWRfYmFsYW5jZXI7Ci0JY3B1bWFza192YXJfdCBjcHVfbWFzazsKLQljcHVtYXNrX3Zhcl90IGlsYl9ncnBfbm9oel9tYXNrOwotfSBub2h6IF9fX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKLQkubG9hZF9iYWxhbmNlciA9IEFUT01JQ19JTklUKC0xKSwKLX07Ci0KLWludCBnZXRfbm9oel9sb2FkX2JhbGFuY2VyKHZvaWQpCi17Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLS8qKgotICogbG93ZXN0X2ZsYWdfZG9tYWluIC0gUmV0dXJuIGxvd2VzdCBzY2hlZF9kb21haW4gY29udGFpbmluZyBmbGFnLgotICogQGNwdToJVGhlIGNwdSB3aG9zZSBsb3dlc3QgbGV2ZWwgb2Ygc2NoZWQgZG9tYWluIGlzIHRvCi0gKgkJYmUgcmV0dXJuZWQuCi0gKiBAZmxhZzoJVGhlIGZsYWcgdG8gY2hlY2sgZm9yIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluCi0gKgkJZm9yIHRoZSBnaXZlbiBjcHUuCi0gKgotICogUmV0dXJucyB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbiBvZiBhIGNwdSB3aGljaCBjb250YWlucyB0aGUgZ2l2ZW4gZmxhZy4KLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpsb3dlc3RfZmxhZ19kb21haW4oaW50IGNwdSwgaW50IGZsYWcpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0KLQlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkKLQkJaWYgKHNkICYmIChzZC0+ZmxhZ3MgJiBmbGFnKSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIHNkOwotfQotCi0vKioKLSAqIGZvcl9lYWNoX2ZsYWdfZG9tYWluIC0gSXRlcmF0ZXMgb3ZlciBzY2hlZF9kb21haW5zIGNvbnRhaW5pbmcgdGhlIGZsYWcuCi0gKiBAY3B1OglUaGUgY3B1IHdob3NlIGRvbWFpbnMgd2UncmUgaXRlcmF0aW5nIG92ZXIuCi0gKiBAc2Q6CQl2YXJpYWJsZSBob2xkaW5nIHRoZSB2YWx1ZSBvZiB0aGUgcG93ZXJfc2F2aW5nc19zZAotICoJCWZvciBjcHUuCi0gKiBAZmxhZzoJVGhlIGZsYWcgdG8gZmlsdGVyIHRoZSBzY2hlZF9kb21haW5zIHRvIGJlIGl0ZXJhdGVkLgotICoKLSAqIEl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBzY2hlZHVsZXIgZG9tYWlucyBmb3IgYSBnaXZlbiBjcHUgdGhhdCBoYXMgdGhlICdmbGFnJwotICogc2V0LCBzdGFydGluZyBmcm9tIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluIHRvIHRoZSBoaWdoZXN0LgotICovCi0jZGVmaW5lIGZvcl9lYWNoX2ZsYWdfZG9tYWluKGNwdSwgc2QsIGZsYWcpIFwKLQlmb3IgKHNkID0gbG93ZXN0X2ZsYWdfZG9tYWluKGNwdSwgZmxhZyk7IFwKLQkJKHNkICYmIChzZC0+ZmxhZ3MgJiBmbGFnKSk7IHNkID0gc2QtPnBhcmVudCkKLQotLyoqCi0gKiBpc19zZW1pX2lkbGVfZ3JvdXAgLSBDaGVja3MgaWYgdGhlIGdpdmVuIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZS4KLSAqIEBpbGJfZ3JvdXA6CWdyb3VwIHRvIGJlIGNoZWNrZWQgZm9yIHNlbWktaWRsZW5lc3MKLSAqCi0gKiBSZXR1cm5zOgkxIGlmIHRoZSBncm91cCBpcyBzZW1pLWlkbGUuIDAgb3RoZXJ3aXNlLgotICoKLSAqIFdlIGRlZmluZSBhIHNjaGVkX2dyb3VwIHRvIGJlIHNlbWkgaWRsZSBpZiBpdCBoYXMgYXRsZWFzdCBvbmUgaWRsZS1DUFUKLSAqIGFuZCBhdGxlYXN0IG9uZSBub24taWRsZSBDUFUuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZ2l2ZW4KLSAqIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZSBvciBub3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3NlbWlfaWRsZV9ncm91cChzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmlsYl9ncm91cCkKLXsKLQljcHVtYXNrX2FuZChub2h6LmlsYl9ncnBfbm9oel9tYXNrLCBub2h6LmNwdV9tYXNrLAotCQkJCQlzY2hlZF9ncm91cF9jcHVzKGlsYl9ncm91cCkpOwotCi0JLyoKLQkgKiBBIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZSB3aGVuIGl0IGhhcyBhdGxlYXN0IG9uZSBidXN5IGNwdQotCSAqIGFuZCBhdGxlYXN0IG9uZSBpZGxlIGNwdS4KLQkgKi8KLQlpZiAoY3B1bWFza19lbXB0eShub2h6LmlsYl9ncnBfbm9oel9tYXNrKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY3B1bWFza19lcXVhbChub2h6LmlsYl9ncnBfbm9oel9tYXNrLCBzY2hlZF9ncm91cF9jcHVzKGlsYl9ncm91cCkpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotLyoqCi0gKiBmaW5kX25ld19pbGIgLSBGaW5kcyB0aGUgb3B0aW11bSBpZGxlIGxvYWQgYmFsYW5jZXIgZm9yIG5vbWluYXRpb24uCi0gKiBAY3B1OglUaGUgY3B1IHdoaWNoIGlzIG5vbWluYXRpbmcgYSBuZXcgaWRsZV9sb2FkX2JhbGFuY2VyLgotICoKLSAqIFJldHVybnM6CVJldHVybnMgdGhlIGlkIG9mIHRoZSBpZGxlIGxvYWQgYmFsYW5jZXIgaWYgaXQgZXhpc3RzLAotICoJCUVsc2UsIHJldHVybnMgPj0gbnJfY3B1X2lkcy4KLSAqCi0gKiBUaGlzIGFsZ29yaXRobSBwaWNrcyB0aGUgaWRsZSBsb2FkIGJhbGFuY2VyIHN1Y2ggdGhhdCBpdCBiZWxvbmdzIHRvIGEKLSAqIHNlbWktaWRsZSBwb3dlcnNhdmluZ3Mgc2NoZWRfZG9tYWluLiBUaGUgaWRlYSBpcyB0byB0cnkgYW5kIGF2b2lkCi0gKiBjb21wbGV0ZWx5IGlkbGUgcGFja2FnZXMvY29yZXMganVzdCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWRsZSBsb2FkIGJhbGFuY2luZwotICogd2hlbiB0aGVyZSBhcmUgb3RoZXIgaWRsZSBjcHUncyB3aGljaCBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgdGhhdCBqb2IuCi0gKi8KLXN0YXRpYyBpbnQgZmluZF9uZXdfaWxiKGludCBjcHUpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICppbGJfZ3JvdXA7Ci0KLQkvKgotCSAqIEhhdmUgaWRsZSBsb2FkIGJhbGFuY2VyIHNlbGVjdGlvbiBmcm9tIHNlbWktaWRsZSBwYWNrYWdlcyBvbmx5Ci0JICogd2hlbiBwb3dlci1hd2FyZSBsb2FkIGJhbGFuY2luZyBpcyBlbmFibGVkCi0JICovCi0JaWYgKCEoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgfHwgc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykpCi0JCWdvdG8gb3V0X2RvbmU7Ci0KLQkvKgotCSAqIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgbm8gaWRsZSBDUFVzIG9yIG9ubHkgb25lCi0JICogaWRsZSBDUFUuIERvbid0IHdhbGsgdGhlIHNjaGVkX2RvbWFpbiBoaWVyYXJjaHkgaW4gc3VjaCBjYXNlcwotCSAqLwotCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA8IDIpCi0JCWdvdG8gb3V0X2RvbmU7Ci0KLQlmb3JfZWFjaF9mbGFnX2RvbWFpbihjcHUsIHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkgewotCQlpbGJfZ3JvdXAgPSBzZC0+Z3JvdXBzOwotCi0JCWRvIHsKLQkJCWlmIChpc19zZW1pX2lkbGVfZ3JvdXAoaWxiX2dyb3VwKSkKLQkJCQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmlsYl9ncnBfbm9oel9tYXNrKTsKLQotCQkJaWxiX2dyb3VwID0gaWxiX2dyb3VwLT5uZXh0OwotCi0JCX0gd2hpbGUgKGlsYl9ncm91cCAhPSBzZC0+Z3JvdXBzKTsKLQl9Ci0KLW91dF9kb25lOgotCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouY3B1X21hc2spOwotfQotI2Vsc2UgLyogIChDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCkgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV3X2lsYihpbnQgY2FsbF9jcHUpCi17Ci0JcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5jcHVfbWFzayk7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFRoaXMgcm91dGluZSB3aWxsIHRyeSB0byBub21pbmF0ZSB0aGUgaWxiIChpZGxlIGxvYWQgYmFsYW5jaW5nKQotICogb3duZXIgYW1vbmcgdGhlIGNwdXMgd2hvc2UgdGlja3MgYXJlIHN0b3BwZWQuIGlsYiBvd25lciB3aWxsIGRvIHRoZSBpZGxlCi0gKiBsb2FkIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgYWxsIHRob3NlIGNwdXMuIElmIGFsbCB0aGUgY3B1cyBpbiB0aGUgc3lzdGVtCi0gKiBnbyBpbnRvIHRoaXMgdGlja2xlc3MgbW9kZSwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIGlsYiBvd25lciAoYXMgdGhlcmUgaXMKLSAqIG5vIG5lZWQgZm9yIG9uZSkgYW5kIGFsbCB0aGUgY3B1cyB3aWxsIHNsZWVwIHRpbGwgdGhlIG5leHQgd2FrZXVwIGV2ZW50Ci0gKiBhcnJpdmVzLi4uCi0gKgotICogRm9yIHRoZSBpbGIgb3duZXIsIHRpY2sgaXMgbm90IHN0b3BwZWQuIEFuZCB0aGlzIHRpY2sgd2lsbCBiZSB1c2VkCi0gKiBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZy4gaWxiIG93bmVyIHdpbGwgc3RpbGwgYmUgcGFydCBvZgotICogbm9oei5jcHVfbWFzay4uCi0gKgotICogV2hpbGUgc3RvcHBpbmcgdGhlIHRpY2ssIHRoaXMgY3B1IHdpbGwgYmVjb21lIHRoZSBpbGIgb3duZXIgaWYgdGhlcmUKLSAqIGlzIG5vIG90aGVyIG93bmVyLiBBbmQgd2lsbCBiZSB0aGUgb3duZXIgdGlsbCB0aGF0IGNwdSBiZWNvbWVzIGJ1c3kKLSAqIG9yIGlmIGFsbCBjcHVzIGluIHRoZSBzeXN0ZW0gc3RvcCB0aGVpciB0aWNrcyBhdCB3aGljaCBwb2ludAotICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgaWxiIG93bmVyLgotICoKLSAqIFdoZW4gdGhlIGlsYiBvd25lciBiZWNvbWVzIGJ1c3ksIGl0IG5vbWluYXRlcyBhbm90aGVyIG93bmVyLCBkdXJpbmcgdGhlCi0gKiBuZXh0IGJ1c3kgc2NoZWR1bGVyX3RpY2soKQotICovCi1pbnQgc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcihpbnQgc3RvcF90aWNrKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoc3RvcF90aWNrKSB7Ci0JCWNwdV9ycShjcHUpLT5pbl9ub2h6X3JlY2VudGx5ID0gMTsKLQotCQlpZiAoIWNwdV9hY3RpdmUoY3B1KSkgewotCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpICE9IGNwdSkKLQkJCQlyZXR1cm4gMDsKLQotCQkJLyoKLQkJCSAqIElmIHdlIGFyZSBnb2luZyBvZmZsaW5lIGFuZCBzdGlsbCB0aGUgbGVhZGVyLAotCQkJICogZ2l2ZSB1cCEKLQkJCSAqLwotCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIGNwdSwgLTEpICE9IGNwdSkKLQkJCQlCVUcoKTsKLQotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQljcHVtYXNrX3NldF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKLQotCQkvKiB0aW1lIGZvciBpbGIgb3duZXIgYWxzbyB0byBzbGVlcCAqLwotCQlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX2FjdGl2ZV9jcHVzKCkpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCi0JCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSAtMSkgewotCQkJLyogbWFrZSBtZSB0aGUgaWxiIG93bmVyICovCi0JCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEsIGNwdSkgPT0gLTEpCi0JCQkJcmV0dXJuIDE7Ci0JCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KSB7Ci0JCQlpbnQgbmV3X2lsYjsKLQotCQkJaWYgKCEoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgfHwKLQkJCQkJCXNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpKQotCQkJCXJldHVybiAxOwotCQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1vcmUgcG93ZXItZWZmaWNpZW50Ci0JCQkgKiBpbGIuCi0JCQkgKi8KLQkJCW5ld19pbGIgPSBmaW5kX25ld19pbGIoY3B1KTsKLQkJCWlmIChuZXdfaWxiIDwgbnJfY3B1X2lkcyAmJiBuZXdfaWxiICE9IGNwdSkgewotCQkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOwotCQkJCXJlc2NoZWRfY3B1KG5ld19pbGIpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKSkKLQkJCXJldHVybiAwOwotCi0JCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7Ci0KLQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKLQkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCi0JCQkJQlVHKCk7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFsYW5jaW5nKTsKLQotLyoKLSAqIEl0IGNoZWNrcyBlYWNoIHNjaGVkdWxpbmcgZG9tYWluIHRvIHNlZSBpZiBpdCBpcyBkdWUgdG8gYmUgYmFsYW5jZWQsCi0gKiBhbmQgaW5pdGlhdGVzIGEgYmFsYW5jaW5nIG9wZXJhdGlvbiBpZiBzby4KLSAqCi0gKiBCYWxhbmNpbmcgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGluIGFyY2hfaW5pdF9zY2hlZF9kb21haW5zLgotICovCi1zdGF0aWMgdm9pZCByZWJhbGFuY2VfZG9tYWlucyhpbnQgY3B1LCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQlpbnQgYmFsYW5jZSA9IDE7Ci0Jc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwotCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0JLyogRWFybGllc3QgdGltZSB3aGVuIHdlIGhhdmUgdG8gZG8gcmViYWxhbmNlIGFnYWluICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgNjAqSFo7Ci0JaW50IHVwZGF0ZV9uZXh0X2JhbGFuY2UgPSAwOwotCWludCBuZWVkX3NlcmlhbGl6ZTsKLQotCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7Ci0JCWlmICghKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCi0JCQljb250aW51ZTsKLQotCQlpbnRlcnZhbCA9IHNkLT5iYWxhbmNlX2ludGVydmFsOwotCQlpZiAoaWRsZSAhPSBDUFVfSURMRSkKLQkJCWludGVydmFsICo9IHNkLT5idXN5X2ZhY3RvcjsKLQotCQkvKiBzY2FsZSBtcyB0byBqaWZmaWVzICovCi0JCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhpbnRlcnZhbCk7Ci0JCWlmICh1bmxpa2VseSghaW50ZXJ2YWwpKQotCQkJaW50ZXJ2YWwgPSAxOwotCQlpZiAoaW50ZXJ2YWwgPiBIWipOUl9DUFVTLzEwKQotCQkJaW50ZXJ2YWwgPSBIWipOUl9DUFVTLzEwOwotCi0JCW5lZWRfc2VyaWFsaXplID0gc2QtPmZsYWdzICYgU0RfU0VSSUFMSVpFOwotCi0JCWlmIChuZWVkX3NlcmlhbGl6ZSkgewotCQkJaWYgKCFzcGluX3RyeWxvY2soJmJhbGFuY2luZykpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7Ci0JCQlpZiAobG9hZF9iYWxhbmNlKGNwdSwgcnEsIHNkLCBpZGxlLCAmYmFsYW5jZSkpIHsKLQkJCQkvKgotCQkJCSAqIFdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHNvIGVpdGhlciB3ZSdyZSBubwotCQkJCSAqIGxvbmdlciBpZGxlLCBvciBvbmUgb2Ygb3VyIFNNVCBzaWJsaW5ncyBpcwotCQkJCSAqIG5vdCBpZGxlLgotCQkJCSAqLwotCQkJCWlkbGUgPSBDUFVfTk9UX0lETEU7Ci0JCQl9Ci0JCQlzZC0+bGFzdF9iYWxhbmNlID0gamlmZmllczsKLQkJfQotCQlpZiAobmVlZF9zZXJpYWxpemUpCi0JCQlzcGluX3VubG9jaygmYmFsYW5jaW5nKTsKLW91dDoKLQkJaWYgKHRpbWVfYWZ0ZXIobmV4dF9iYWxhbmNlLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7Ci0JCQluZXh0X2JhbGFuY2UgPSBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWw7Ci0JCQl1cGRhdGVfbmV4dF9iYWxhbmNlID0gMTsKLQkJfQotCi0JCS8qCi0JCSAqIFN0b3AgdGhlIGxvYWQgYmFsYW5jZSBhdCB0aGlzIGxldmVsLiBUaGVyZSBpcyBhbm90aGVyCi0JCSAqIENQVSBpbiBvdXIgc2NoZWQgZ3JvdXAgd2hpY2ggaXMgZG9pbmcgbG9hZCBiYWxhbmNpbmcgbW9yZQotCQkgKiBhY3RpdmVseS4KLQkJICovCi0JCWlmICghYmFsYW5jZSkKLQkJCWJyZWFrOwotCX0KLQotCS8qCi0JICogbmV4dF9iYWxhbmNlIHdpbGwgYmUgdXBkYXRlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBuZWVkLgotCSAqIFdoZW4gdGhlIGNwdSBpcyBhdHRhY2hlZCB0byBudWxsIGRvbWFpbiBmb3IgZXgsIGl0IHdpbGwgbm90IGJlCi0JICogdXBkYXRlZC4KLQkgKi8KLQlpZiAobGlrZWx5KHVwZGF0ZV9uZXh0X2JhbGFuY2UpKQotCQlycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOwotfQotCi0vKgotICogcnVuX3JlYmFsYW5jZV9kb21haW5zIGlzIHRyaWdnZXJlZCB3aGVuIG5lZWRlZCBmcm9tIHRoZSBzY2hlZHVsZXIgdGljay4KLSAqIEluIENPTkZJR19OT19IWiBjYXNlLCB0aGUgaWRsZSBsb2FkIGJhbGFuY2Ugb3duZXIgd2lsbCBkbyB0aGUKLSAqIHJlYmFsYW5jaW5nIGZvciBhbGwgdGhlIGNwdXMgZm9yIHdob20gc2NoZWR1bGVyIHRpY2tzIGFyZSBzdG9wcGVkLgotICovCi1zdGF0aWMgdm9pZCBydW5fcmViYWxhbmNlX2RvbWFpbnMoc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoKQotewotCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgcnEgKnRoaXNfcnEgPSBjcHVfcnEodGhpc19jcHUpOwotCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlID0gdGhpc19ycS0+aWRsZV9hdF90aWNrID8KLQkJCQkJCUNQVV9JRExFIDogQ1BVX05PVF9JRExFOwotCi0JcmViYWxhbmNlX2RvbWFpbnModGhpc19jcHUsIGlkbGUpOwotCi0jaWZkZWYgQ09ORklHX05PX0haCi0JLyoKLQkgKiBJZiB0aGlzIGNwdSBpcyB0aGUgb3duZXIgZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcsIHRoZW4gZG8gdGhlCi0JICogYmFsYW5jaW5nIG9uIGJlaGFsZiBvZiB0aGUgb3RoZXIgaWRsZSBjcHVzIHdob3NlIHRpY2tzIGFyZQotCSAqIHN0b3BwZWQuCi0JICovCi0JaWYgKHRoaXNfcnEtPmlkbGVfYXRfdGljayAmJgotCSAgICBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSB0aGlzX2NwdSkgewotCQlzdHJ1Y3QgcnEgKnJxOwotCQlpbnQgYmFsYW5jZV9jcHU7Ci0KLQkJZm9yX2VhY2hfY3B1KGJhbGFuY2VfY3B1LCBub2h6LmNwdV9tYXNrKSB7Ci0JCQlpZiAoYmFsYW5jZV9jcHUgPT0gdGhpc19jcHUpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGNwdSBnZXRzIHdvcmsgdG8gZG8sIHN0b3AgdGhlIGxvYWQgYmFsYW5jaW5nCi0JCQkgKiB3b3JrIGJlaW5nIGRvbmUgZm9yIG90aGVyIGNwdXMuIE5leHQgbG9hZAotCQkJICogYmFsYW5jaW5nIG93bmVyIHdpbGwgcGljayBpdCB1cC4KLQkJCSAqLwotCQkJaWYgKG5lZWRfcmVzY2hlZCgpKQotCQkJCWJyZWFrOwotCi0JCQlyZWJhbGFuY2VfZG9tYWlucyhiYWxhbmNlX2NwdSwgQ1BVX0lETEUpOwotCi0JCQlycSA9IGNwdV9ycShiYWxhbmNlX2NwdSk7Ci0JCQlpZiAodGltZV9hZnRlcih0aGlzX3JxLT5uZXh0X2JhbGFuY2UsIHJxLT5uZXh0X2JhbGFuY2UpKQotCQkJCXRoaXNfcnEtPm5leHRfYmFsYW5jZSA9IHJxLT5uZXh0X2JhbGFuY2U7Ci0JCX0KLQl9Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgb25fbnVsbF9kb21haW4oaW50IGNwdSkKLXsKLQlyZXR1cm4gIXJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOwotfQotCi0vKgotICogVHJpZ2dlciB0aGUgU0NIRURfU09GVElSUSBpZiBpdCBpcyB0aW1lIHRvIGRvIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLgotICoKLSAqIEluIGNhc2Ugb2YgQ09ORklHX05PX0haLCB0aGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB3ZSBub21pbmF0ZSBhIG5ldwotICogaWRsZSBsb2FkIGJhbGFuY2luZyBvd25lciBvciBkZWNpZGUgdG8gc3RvcCB0aGUgcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcsCi0gKiBpZiB0aGUgd2hvbGUgc3lzdGVtIGlzIGlkbGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2xvYWRfYmFsYW5jZShzdHJ1Y3QgcnEgKnJxLCBpbnQgY3B1KQotewotI2lmZGVmIENPTkZJR19OT19IWgotCS8qCi0JICogSWYgd2Ugd2VyZSBpbiB0aGUgbm9oeiBtb2RlIHJlY2VudGx5IGFuZCBidXN5IGF0IHRoZSBjdXJyZW50Ci0JICogc2NoZWR1bGVyIHRpY2ssIHRoZW4gY2hlY2sgaWYgd2UgbmVlZCB0byBub21pbmF0ZSBuZXcgaWRsZQotCSAqIGxvYWQgYmFsYW5jZXIuCi0JICovCi0JaWYgKHJxLT5pbl9ub2h6X3JlY2VudGx5ICYmICFycS0+aWRsZV9hdF90aWNrKSB7Ci0JCXJxLT5pbl9ub2h6X3JlY2VudGx5ID0gMDsKLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KSB7Ci0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vaHouY3B1X21hc2spOwotCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7Ci0JCX0KLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gLTEpIHsKLQkJCWludCBpbGIgPSBmaW5kX25ld19pbGIoY3B1KTsKLQotCQkJaWYgKGlsYiA8IG5yX2NwdV9pZHMpCi0JCQkJcmVzY2hlZF9jcHUoaWxiKTsKLQkJfQotCX0KLQotCS8qCi0JICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgZG9pbmcgaWRsZSBsb2FkIGJhbGFuY2luZyBmb3IgYWxsIHRoZQotCSAqIGNwdXMgd2l0aCB0aWNrcyBzdG9wcGVkLCBpcyBpdCB0aW1lIGZvciB0aGF0IHRvIHN0b3A/Ci0JICovCi0JaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1ICYmCi0JICAgIGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spID09IG51bV9vbmxpbmVfY3B1cygpKSB7Ci0JCXJlc2NoZWRfY3B1KGNwdSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIHRoaXMgY3B1IGlzIGlkbGUgYW5kIHRoZSBpZGxlIGxvYWQgYmFsYW5jaW5nIGlzIGRvbmUgYnkKLQkgKiBzb21lb25lIGVsc2UsIHRoZW4gbm8gbmVlZCByYWlzZSB0aGUgU0NIRURfU09GVElSUQotCSAqLwotCWlmIChycS0+aWRsZV9hdF90aWNrICYmIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpICE9IGNwdSAmJgotCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCi0JCXJldHVybjsKLSNlbmRpZgotCS8qIERvbid0IG5lZWQgdG8gcmViYWxhbmNlIHdoaWxlIGF0dGFjaGVkIHRvIE5VTEwgZG9tYWluICovCi0JaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcnEtPm5leHRfYmFsYW5jZSkgJiYKLQkgICAgbGlrZWx5KCFvbl9udWxsX2RvbWFpbihjcHUpKSkKLQkJcmFpc2Vfc29mdGlycShTQ0hFRF9TT0ZUSVJRKTsKLX0KLQotI2Vsc2UJLyogQ09ORklHX1NNUCAqLwotCi0vKgotICogb24gVVAgd2UgZG8gbm90IG5lZWQgdG8gYmFsYW5jZSBiZXR3ZWVuIENQVXM6Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGxlX2JhbGFuY2UoaW50IGNwdSwgc3RydWN0IHJxICpycSkKLXsKLX0KLQogI2VuZGlmCiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrZXJuZWxfc3RhdCwga3N0YXQpOwpAQCAtNTI5OCw3ICszNTE1LDcgQEAKIAljdXJyLT5zY2hlZF9jbGFzcy0+dGFza190aWNrKHJxLCBjdXJyLCAwKTsKIAlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIAotCXBlcmZfZXZlbnRfdGFza190aWNrKGN1cnIsIGNwdSk7CisJcGVyZl9ldmVudF90YXNrX3RpY2soY3Vycik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJcnEtPmlkbGVfYXRfdGljayA9IGlkbGVfY3B1KGNwdSk7CkBAIC01NTEyLDcgKzM3MjksNyBAQAogCiAJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CiAJCXNjaGVkX2luZm9fc3dpdGNoKHByZXYsIG5leHQpOwotCQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHByZXYsIG5leHQsIGNwdSk7CisJCXBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQocHJldiwgbmV4dCk7CiAKIAkJcnEtPm5yX3N3aXRjaGVzKys7CiAJCXJxLT5jdXJyID0gbmV4dDsKQEAgLTYwNDMsNyArNDI2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb2xkcHJpbywgb25fcnEsIHJ1bm5pbmc7CiAJc3RydWN0IHJxICpycTsKLQljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3MgPSBwLT5zY2hlZF9jbGFzczsKKwljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3M7CiAKIAlCVUdfT04ocHJpbyA8IDAgfHwgcHJpbyA+IE1BWF9QUklPKTsKIApAQCAtNjA1MSw2ICs0MjY4LDcgQEAKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCiAJb2xkcHJpbyA9IHAtPnByaW87CisJcHJldl9jbGFzcyA9IHAtPnNjaGVkX2NsYXNzOwogCW9uX3JxID0gcC0+c2Uub25fcnE7CiAJcnVubmluZyA9IHRhc2tfY3VycmVudChycSwgcCk7CiAJaWYgKG9uX3JxKQpAQCAtNjA2OCw3ICs0Mjg2LDcgQEAKIAlpZiAocnVubmluZykKIAkJcC0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOwogCWlmIChvbl9ycSkgewotCQllbnF1ZXVlX3Rhc2socnEsIHAsIDApOworCQllbnF1ZXVlX3Rhc2socnEsIHAsIDAsIG9sZHByaW8gPCBwcmlvKTsKIAogCQljaGVja19jbGFzc19jaGFuZ2VkKHJxLCBwLCBwcmV2X2NsYXNzLCBvbGRwcmlvLCBydW5uaW5nKTsKIAl9CkBAIC02MTEyLDcgKzQzMzAsNyBAQAogCWRlbHRhID0gcC0+cHJpbyAtIG9sZF9wcmlvOwogCiAJaWYgKG9uX3JxKSB7Ci0JCWVucXVldWVfdGFzayhycSwgcCwgMCk7CisJCWVucXVldWVfdGFzayhycSwgcCwgMCwgZmFsc2UpOwogCQkvKgogCQkgKiBJZiB0aGUgdGFzayBpbmNyZWFzZWQgaXRzIHByaW9yaXR5IG9yIGlzIHJ1bm5pbmcgYW5kCiAJCSAqIGxvd2VyZWQgaXRzIHByaW9yaXR5LCB0aGVuIHJlc2NoZWR1bGUgaXRzIENQVToKQEAgLTYyNzAsNyArNDQ4OCw3IEBACiB7CiAJaW50IHJldHZhbCwgb2xkcHJpbywgb2xkcG9saWN5ID0gLTEsIG9uX3JxLCBydW5uaW5nOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzID0gcC0+c2NoZWRfY2xhc3M7CisJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzOwogCXN0cnVjdCBycSAqcnE7CiAJaW50IHJlc2V0X29uX2Zvcms7CiAKQEAgLTYzODQsNiArNDYwMiw3IEBACiAJcC0+c2NoZWRfcmVzZXRfb25fZm9yayA9IHJlc2V0X29uX2Zvcms7CiAKIAlvbGRwcmlvID0gcC0+cHJpbzsKKwlwcmV2X2NsYXNzID0gcC0+c2NoZWRfY2xhc3M7CiAJX19zZXRzY2hlZHVsZXIocnEsIHAsIHBvbGljeSwgcGFyYW0tPnNjaGVkX3ByaW9yaXR5KTsKIAogCWlmIChydW5uaW5nKQpAQCAtNzEzNCwyMyArNTM1Myw4IEBACiAJc3RydWN0IHJxICpycTsKIAlpbnQgcmV0ID0gMDsKIAotCS8qCi0JICogU2luY2Ugd2UgcmVseSBvbiB3YWtlLXVwcyB0byBtaWdyYXRlIHNsZWVwaW5nIHRhc2tzLCBkb24ndCBjaGFuZ2UKLQkgKiB0aGUgLT5jcHVzX2FsbG93ZWQgbWFzayBmcm9tIHVuZGVyIHdha2luZyB0YXNrcywgd2hpY2ggd291bGQgYmUKLQkgKiBwb3NzaWJsZSB3aGVuIHdlIGNoYW5nZSBycS0+bG9jayBpbiB0dHd1KCksIHNvIHN5bmNocm9uaXplIGFnYWluc3QKLQkgKiBUQVNLX1dBS0lORyB0byBhdm9pZCB0aGF0LgotCSAqLwotYWdhaW46Ci0Jd2hpbGUgKHAtPnN0YXRlID09IFRBU0tfV0FLSU5HKQotCQljcHVfcmVsYXgoKTsKLQogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAKLQlpZiAocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpIHsKLQkJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCiAJaWYgKCFjcHVtYXNrX2ludGVyc2VjdHMobmV3X21hc2ssIGNwdV9hY3RpdmVfbWFzaykpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC05NDM3LDcgKzc2NDEsNiBAQAogCXRnLT5ydF9ycVtjcHVdID0gcnRfcnE7CiAJaW5pdF9ydF9ycShydF9ycSwgcnEpOwogCXJ0X3JxLT50ZyA9IHRnOwotCXJ0X3JxLT5ydF9zZSA9IHJ0X3NlOwogCXJ0X3JxLT5ydF9ydW50aW1lID0gdGctPnJ0X2JhbmR3aWR0aC5ydF9ydW50aW1lOwogCWlmIChhZGQpCiAJCWxpc3RfYWRkKCZydF9ycS0+bGVhZl9ydF9ycV9saXN0LCAmcnEtPmxlYWZfcnRfcnFfbGlzdCk7CkBAIC05NDY4LDkgKzc2NzEsNiBAQAogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCWFsbG9jX3NpemUgKz0gMiAqIG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCWFsbG9jX3NpemUgKj0gMjsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCiAJYWxsb2Nfc2l6ZSArPSBudW1fcG9zc2libGVfY3B1cygpICogY3B1bWFza19zaXplKCk7CiAjZW5kaWYKQEAgLTk0ODQsMTMgKzc2ODQsNiBAQAogCQlpbml0X3Rhc2tfZ3JvdXAuY2ZzX3JxID0gKHN0cnVjdCBjZnNfcnEgKiopcHRyOwogCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JCXJvb3RfdGFza19ncm91cC5zZSA9IChzdHJ1Y3Qgc2NoZWRfZW50aXR5ICoqKXB0cjsKLQkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7Ci0KLQkJcm9vdF90YXNrX2dyb3VwLmNmc19ycSA9IChzdHJ1Y3QgY2ZzX3JxICoqKXB0cjsKLQkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCQlpbml0X3Rhc2tfZ3JvdXAucnRfc2UgPSAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqKilwdHI7CkBAIC05NDk5LDEzICs3NjkyLDYgQEAKIAkJaW5pdF90YXNrX2dyb3VwLnJ0X3JxID0gKHN0cnVjdCBydF9ycSAqKilwdHI7CiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQkJcm9vdF90YXNrX2dyb3VwLnJ0X3NlID0gKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKiopcHRyOwotCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKLQotCQlyb290X3Rhc2tfZ3JvdXAucnRfcnEgPSAoc3RydWN0IHJ0X3JxICoqKXB0cjsKLQkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KICNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSwogCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewpAQCAtOTUyNSwyMiArNzcxMSwxMyBAQAogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCWluaXRfcnRfYmFuZHdpZHRoKCZpbml0X3Rhc2tfZ3JvdXAucnRfYmFuZHdpZHRoLAogCQkJZ2xvYmFsX3J0X3BlcmlvZCgpLCBnbG9iYWxfcnRfcnVudGltZSgpKTsKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCWluaXRfcnRfYmFuZHdpZHRoKCZyb290X3Rhc2tfZ3JvdXAucnRfYmFuZHdpZHRoLAotCQkJZ2xvYmFsX3J0X3BlcmlvZCgpLCBSVU5USU1FX0lORik7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAlsaXN0X2FkZCgmaW5pdF90YXNrX2dyb3VwLmxpc3QsICZ0YXNrX2dyb3Vwcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmluaXRfdGFza19ncm91cC5jaGlsZHJlbik7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCUlOSVRfTElTVF9IRUFEKCZyb290X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOwotCWluaXRfdGFza19ncm91cC5wYXJlbnQgPSAmcm9vdF90YXNrX2dyb3VwOwotCWxpc3RfYWRkKCZpbml0X3Rhc2tfZ3JvdXAuc2libGluZ3MsICZyb290X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOwotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCi0jZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEICovCisjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqLwogCiAjaWYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAmJiBkZWZpbmVkIENPTkZJR19TTVAKIAl1cGRhdGVfc2hhcmVzX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShucl9jcHVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLApAQCAtOTU4MCwyNSArNzc1Nyw2IEBACiAJCSAqIGRpcmVjdGx5IGluIHJxLT5jZnMgKGkuZSBpbml0X3Rhc2tfZ3JvdXAtPnNlW10gPSBOVUxMKS4KIAkJICovCiAJCWluaXRfdGdfY2ZzX2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsICZycS0+Y2ZzLCBOVUxMLCBpLCAxLCBOVUxMKTsKLSNlbGlmIGRlZmluZWQgQ09ORklHX1VTRVJfU0NIRUQKLQkJcm9vdF90YXNrX2dyb3VwLnNoYXJlcyA9IE5JQ0VfMF9MT0FEOwotCQlpbml0X3RnX2Nmc19lbnRyeSgmcm9vdF90YXNrX2dyb3VwLCAmcnEtPmNmcywgTlVMTCwgaSwgMCwgTlVMTCk7Ci0JCS8qCi0JCSAqIEluIGNhc2Ugb2YgdGFzay1ncm91cHMgZm9ybWVkIHRocicgdGhlIHVzZXIgaWQgb2YgdGFza3MsCi0JCSAqIGluaXRfdGFza19ncm91cCByZXByZXNlbnRzIHRhc2tzIGJlbG9uZ2luZyB0byByb290IHVzZXIuCi0JCSAqIEhlbmNlIGl0IGZvcm1zIGEgc2libGluZyBvZiBhbGwgc3Vic2VxdWVudCBncm91cHMgZm9ybWVkLgotCQkgKiBJbiB0aGlzIGNhc2UsIGluaXRfdGFza19ncm91cCBnZXRzIG9ubHkgYSBmcmFjdGlvbiBvZiBvdmVyYWxsCi0JCSAqIHN5c3RlbSBjcHUgcmVzb3VyY2UsIGJhc2VkIG9uIHRoZSB3ZWlnaHQgYXNzaWduZWQgdG8gcm9vdAotCQkgKiB1c2VyJ3MgY3B1IHNoYXJlIChJTklUX1RBU0tfR1JPVVBfTE9BRCkuIFRoaXMgaXMgYWNjb21wbGlzaGVkCi0JCSAqIGJ5IGxldHRpbmcgdGFza3Mgb2YgaW5pdF90YXNrX2dyb3VwIHNpdCBpbiBhIHNlcGFyYXRlIGNmc19ycQotCQkgKiAoaW5pdF90Z19jZnNfcnEpIGFuZCBoYXZpbmcgb25lIGVudGl0eSByZXByZXNlbnQgdGhpcyBncm91cCBvZgotCQkgKiB0YXNrcyBpbiBycS0+Y2ZzIChpLmUgaW5pdF90YXNrX2dyb3VwLT5zZVtdICE9IE5VTEwpLgotCQkgKi8KLQkJaW5pdF90Z19jZnNfZW50cnkoJmluaXRfdGFza19ncm91cCwKLQkJCQkmcGVyX2NwdShpbml0X3RnX2Nmc19ycSwgaSksCi0JCQkJJnBlcl9jcHUoaW5pdF9zY2hlZF9lbnRpdHksIGkpLCBpLCAxLAotCQkJCXJvb3RfdGFza19ncm91cC5zZVtpXSk7Ci0KICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovCiAKQEAgLTk2MDcsMTIgKzc3NjUsNiBAQAogCQlJTklUX0xJU1RfSEVBRCgmcnEtPmxlYWZfcnRfcnFfbGlzdCk7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCQlpbml0X3RnX3J0X2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsICZycS0+cnQsIE5VTEwsIGksIDEsIE5VTEwpOwotI2VsaWYgZGVmaW5lZCBDT05GSUdfVVNFUl9TQ0hFRAotCQlpbml0X3RnX3J0X2VudHJ5KCZyb290X3Rhc2tfZ3JvdXAsICZycS0+cnQsIE5VTEwsIGksIDAsIE5VTEwpOwotCQlpbml0X3RnX3J0X2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsCi0JCQkJJnBlcl9jcHUoaW5pdF9ydF9ycV92YXIsIGkpLAotCQkJCSZwZXJfY3B1KGluaXRfc2NoZWRfcnRfZW50aXR5LCBpKSwgaSwgMSwKLQkJCQlyb290X3Rhc2tfZ3JvdXAucnRfc2VbaV0pOwogI2VuZGlmCiAjZW5kaWYKIApAQCAtOTY5Nyw3ICs3ODQ5LDcgQEAKIAlyZXR1cm4gKG5lc3RlZCA9PSBQUkVFTVBUX0lOQVRPTUlDX0JBU0UgKyBwcmVlbXB0X29mZnNldCk7CiB9CiAKLXZvaWQgX19taWdodF9zbGVlcChjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KQordm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpCiB7CiAjaWZkZWYgaW5fYXRvbWljCiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldl9qaWZmeTsJLyogcmF0ZWxpbWl0aW5nICovCkBAIC0xMDAwOCw3ICs4MTYwLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIHN0YXRpYyB2b2lkIGZyZWVfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQogewogCWZyZWVfZmFpcl9zY2hlZF9ncm91cCh0Zyk7CkBAIC0xMDExMywxMSArODI2NSwxMSBAQAogCWlmICh1bmxpa2VseShydW5uaW5nKSkKIAkJdHNrLT5zY2hlZF9jbGFzcy0+c2V0X2N1cnJfdGFzayhycSk7CiAJaWYgKG9uX3JxKQotCQllbnF1ZXVlX3Rhc2socnEsIHRzaywgMCk7CisJCWVucXVldWVfdGFzayhycSwgdHNrLCAwLCBmYWxzZSk7CiAKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogc3RhdGljIHZvaWQgX19zZXRfc2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCB1bnNpZ25lZCBsb25nIHNoYXJlcykKQEAgLTEwMjU5LDEzICs4NDExLDYgQEAKIAkJcnVudGltZSA9IGQtPnJ0X3J1bnRpbWU7CiAJfQogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlpZiAodGcgPT0gJnJvb3RfdGFza19ncm91cCkgewotCQlwZXJpb2QgPSBnbG9iYWxfcnRfcGVyaW9kKCk7Ci0JCXJ1bnRpbWUgPSBnbG9iYWxfcnRfcnVudGltZSgpOwotCX0KLSNlbmRpZgotCiAJLyoKIAkgKiBDYW5ub3QgaGF2ZSBtb3JlIHJ1bnRpbWUgdGhhbiB0aGUgcGVyaW9kLgogCSAqLwpAQCAtMTA4ODUsMTIgKzkwMzAsMzAgQEAKIH0KIAogLyoKKyAqIFdoZW4gQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgaXMgZW5hYmxlZCBvbmUgamlmZnkgY2FuIGJlIHZlcnkgbGFyZ2UKKyAqIGluIGNwdXRpbWVfdCB1bml0cy4gQXMgYSByZXN1bHQsIGNwdWFjY3RfdXBkYXRlX3N0YXRzIGNhbGxzCisgKiBwZXJjcHVfY291bnRlcl9hZGQgd2l0aCB2YWx1ZXMgbGFyZ2UgZW5vdWdoIHRvIGFsd2F5cyBvdmVyZmxvdyB0aGUKKyAqIHBlciBjcHUgYmF0Y2ggbGltaXQgY2F1c2luZyBiYWQgU01QIHNjYWxhYmlsaXR5LgorICoKKyAqIFRvIGZpeCB0aGlzIHdlIHNjYWxlIHBlcmNwdV9jb3VudGVyX2JhdGNoIGJ5IGNwdXRpbWVfb25lX2ppZmZ5IHNvIHdlCisgKiBiYXRjaCB0aGUgc2FtZSBhbW91bnQgb2YgdGltZSB3aXRoIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HIGRpc2FibGVkCisgKiBhbmQgZW5hYmxlZC4gV2UgY2FwIGl0IGF0IElOVF9NQVggd2hpY2ggaXMgdGhlIGxhcmdlc3QgYWxsb3dlZCBiYXRjaCB2YWx1ZS4KKyAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgQ1BVQUNDVF9CQVRDSAlcCisJbWluX3QobG9uZywgcGVyY3B1X2NvdW50ZXJfYmF0Y2ggKiBjcHV0aW1lX29uZV9qaWZmeSwgSU5UX01BWCkKKyNlbHNlCisjZGVmaW5lIENQVUFDQ1RfQkFUQ0gJMAorI2VuZGlmCisKKy8qCiAgKiBDaGFyZ2UgdGhlIHN5c3RlbS91c2VyIHRpbWUgdG8gdGhlIHRhc2sncyBhY2NvdW50aW5nIGdyb3VwLgogICovCiBzdGF0aWMgdm9pZCBjcHVhY2N0X3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJZW51bSBjcHVhY2N0X3N0YXRfaW5kZXggaWR4LCBjcHV0aW1lX3QgdmFsKQogewogCXN0cnVjdCBjcHVhY2N0ICpjYTsKKwlpbnQgYmF0Y2ggPSBDUFVBQ0NUX0JBVENIOwogCiAJaWYgKHVubGlrZWx5KCFjcHVhY2N0X3N1YnN5cy5hY3RpdmUpKQogCQlyZXR1cm47CkBAIC0xMDg5OSw3ICs5MDYyLDcgQEAKIAljYSA9IHRhc2tfY2EodHNrKTsKIAogCWRvIHsKLQkJcGVyY3B1X2NvdW50ZXJfYWRkKCZjYS0+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+CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUsIGNhbGxfc2luZ2xlX3F1ZXVlKTsKLQogc3RhdGljIHN0cnVjdCB7CiAJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKIAlyYXdfc3BpbmxvY2tfdAkJbG9jazsKQEAgLTMzLDEyICszMSwxNCBAQAogCWNwdW1hc2tfdmFyX3QJCWNwdW1hc2s7CiB9OwogCitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNhbGxfZnVuY3Rpb25fZGF0YSwgY2ZkX2RhdGEpOworCiBzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlyYXdfc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNhbGxfc2luZ2xlX3F1ZXVlLCBjYWxsX3NpbmdsZV9xdWV1ZSk7CiAKIHN0YXRpYyBpbnQKIGhvdHBsdWdfY2ZkKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKQEAgLTI1Niw3ICsyNTYsNyBAQAogCX0KIH0KIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhLCBjc2RfZGF0YSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEsIGNzZF9kYXRhKTsKIAogLyoKICAqIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSAtIFJ1biBhIGZ1bmN0aW9uIG9uIGEgc3BlY2lmaWMgQ1BVCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCBhMDk1MDJlLi43YzFhNjdlIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTUwMCwyMiArNTAwLDE3IEBACiAgKi8KIAogLyoKLSAqIFRoZSB0cmFtcG9saW5lIGlzIGNhbGxlZCB3aGVuIHRoZSBocnRpbWVyIGV4cGlyZXMuIElmIHRoaXMgaXMKLSAqIGNhbGxlZCBmcm9tIHRoZSBocnRpbWVyIGludGVycnVwdCB0aGVuIHdlIHNjaGVkdWxlIHRoZSB0YXNrbGV0IGFzCi0gKiB0aGUgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0cyB0byBydW4gaW4gc29mdGlycSBjb250ZXh0LiBJZgotICogaXQncyBjYWxsZWQgaW4gc29mdGlycSBjb250ZXh0IGFueXdheSAoaS5lLiBoaWdoIHJlc29sdXRpb24gdGltZXJzCi0gKiBkaXNhYmxlZCkgdGhlbiB0aGUgaHJ0aW1lciBjYWxsYmFjayBpcyBjYWxsZWQgcmlnaHQgYXdheS4KKyAqIFRoZSB0cmFtcG9saW5lIGlzIGNhbGxlZCB3aGVuIHRoZSBocnRpbWVyIGV4cGlyZXMuIEl0IHNjaGVkdWxlcyBhIHRhc2tsZXQKKyAqIHRvIHJ1biBfX3Rhc2tsZXRfaHJ0aW1lcl90cmFtcG9saW5lKCkgd2hpY2ggaW4gdHVybiB3aWxsIGNhbGwgdGhlIGludGVuZGVkCisgKiBocnRpbWVyIGNhbGxiYWNrLCBidXQgZnJvbSBzb2Z0aXJxIGNvbnRleHQuCiAgKi8KIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBfX2hydGltZXJfdGFza2xldF90cmFtcG9saW5lKHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKIAlzdHJ1Y3QgdGFza2xldF9ocnRpbWVyICp0dGltZXIgPQogCQljb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0YXNrbGV0X2hydGltZXIsIHRpbWVyKTsKIAotCWlmIChocnRpbWVyX2lzX2hyZXNfYWN0aXZlKHRpbWVyKSkgewotCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZ0dGltZXItPnRhc2tsZXQpOwotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Ci0JfQotCXJldHVybiB0dGltZXItPmZ1bmN0aW9uKHRpbWVyKTsKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZ0dGltZXItPnRhc2tsZXQpOworCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMgYi9rZXJuZWwvc29mdGxvY2t1cC5jCmluZGV4IGQyMjU3OTAuLjBkNGM3ODkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMKKysrIGIva2VybmVsL3NvZnRsb2NrdXAuYwpAQCAtMjUsNiArMjUsNyBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHNvZnRsb2NrdXBfdG91Y2hfdHMpOyAvKiB0b3VjaCB0aW1lc3RhbXAgKi8KIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzb2Z0bG9ja3VwX3ByaW50X3RzKTsgLyogcHJpbnQgdGltZXN0YW1wICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIHNvZnRsb2NrdXBfd2F0Y2hkb2cpOworc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHNvZnRsb2NrX3RvdWNoX3N5bmMpOwogCiBzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgZGlkX3BhbmljOwogaW50IF9fcmVhZF9tb3N0bHkgc29mdGxvY2t1cF90aHJlc2ggPSA2MDsKQEAgLTc5LDYgKzgwLDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2cpOwogCit2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2dfc3luYyh2b2lkKQoreworCV9fcmF3X2dldF9jcHVfdmFyKHNvZnRsb2NrX3RvdWNoX3N5bmMpID0gdHJ1ZTsKKwlfX3Jhd19nZXRfY3B1X3Zhcihzb2Z0bG9ja3VwX3RvdWNoX3RzKSA9IDA7Cit9CisKIHZvaWQgdG91Y2hfYWxsX3NvZnRsb2NrdXBfd2F0Y2hkb2dzKHZvaWQpCiB7CiAJaW50IGNwdTsKQEAgLTExOCw2ICsxMjUsMTQgQEAKIAl9CiAKIAlpZiAodG91Y2hfdHMgPT0gMCkgeworCQlpZiAodW5saWtlbHkocGVyX2NwdShzb2Z0bG9ja190b3VjaF9zeW5jLCB0aGlzX2NwdSkpKSB7CisJCQkvKgorCQkJICogSWYgdGhlIHRpbWUgc3RhbXAgd2FzIHRvdWNoZWQgYXRvbWljYWxseQorCQkJICogbWFrZSBzdXJlIHRoZSBzY2hlZHVsZXIgdGljayBpcyB1cCB0byBkYXRlLgorCQkJICovCisJCQlwZXJfY3B1KHNvZnRsb2NrX3RvdWNoX3N5bmMsIHRoaXNfY3B1KSA9IGZhbHNlOworCQkJc2NoZWRfY2xvY2tfdGljaygpOworCQl9CiAJCV9fdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NyY3UuYyBiL2tlcm5lbC9zcmN1LmMKaW5kZXggODE4ZDdkOS4uYmRlNDI5NSAxMDA2NDQKLS0tIGEva2VybmVsL3NyY3UuYworKysgYi9rZXJuZWwvc3JjdS5jCkBAIC0zNCw2ICszNCwzMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NyY3UuaD4KIAorc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQoreworCXNwLT5jb21wbGV0ZWQgPSAwOworCW11dGV4X2luaXQoJnNwLT5tdXRleCk7CisJc3AtPnBlcl9jcHVfcmVmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzcmN1X3N0cnVjdF9hcnJheSk7CisJcmV0dXJuIHNwLT5wZXJfY3B1X3JlZiA/IDAgOiAtRU5PTUVNOworfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKworaW50IF9faW5pdF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwkvKiBEb24ndCByZS1pbml0aWFsaXplIGEgbG9jayB3aGlsZSBpdCBpcyBoZWxkLiAqLworCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKCh2b2lkICopc3AsIHNpemVvZigqc3ApKTsKKwlsb2NrZGVwX2luaXRfbWFwKCZzcC0+ZGVwX21hcCwgbmFtZSwga2V5LCAwKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKwlyZXR1cm4gaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3ApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19pbml0X3NyY3Vfc3RydWN0KTsKKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKIC8qKgogICogaW5pdF9zcmN1X3N0cnVjdCAtIGluaXRpYWxpemUgYSBzbGVlcC1SQ1Ugc3RydWN0dXJlCiAgKiBAc3A6IHN0cnVjdHVyZSB0byBpbml0aWFsaXplLgpAQCAtNDQsMTMgKzY4LDEyIEBACiAgKi8KIGludCBpbml0X3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCiB7Ci0Jc3AtPmNvbXBsZXRlZCA9IDA7Ci0JbXV0ZXhfaW5pdCgmc3AtPm11dGV4KTsKLQlzcC0+cGVyX2NwdV9yZWYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5KTsKLQlyZXR1cm4gKHNwLT5wZXJfY3B1X3JlZiA/IDAgOiAtRU5PTUVNKTsKKwlyZXR1cm4gaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3ApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdCk7CiAKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKwogLyoKICAqIHNyY3VfcmVhZGVyc19hY3RpdmVfaWR4IC0tIHJldHVybnMgYXBwcm94aW1hdGUgbnVtYmVyIG9mIHJlYWRlcnMKICAqCWFjdGl2ZSBvbiB0aGUgc3BlY2lmaWVkIHJhbmsgb2YgcGVyLUNQVSBjb3VudGVycy4KQEAgLTEwMCwxNSArMTIzLDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjbGVhbnVwX3NyY3Vfc3RydWN0KTsKIAotLyoqCi0gKiBzcmN1X3JlYWRfbG9jayAtIHJlZ2lzdGVyIGEgbmV3IHJlYWRlciBmb3IgYW4gU1JDVS1wcm90ZWN0ZWQgc3RydWN0dXJlLgotICogQHNwOiBzcmN1X3N0cnVjdCBpbiB3aGljaCB0byByZWdpc3RlciB0aGUgbmV3IHJlYWRlci4KLSAqCisvKgogICogQ291bnRzIHRoZSBuZXcgcmVhZGVyIGluIHRoZSBhcHByb3ByaWF0ZSBwZXItQ1BVIGVsZW1lbnQgb2YgdGhlCiAgKiBzcmN1X3N0cnVjdC4gIE11c3QgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LgogICogUmV0dXJucyBhbiBpbmRleCB0aGF0IG11c3QgYmUgcGFzc2VkIHRvIHRoZSBtYXRjaGluZyBzcmN1X3JlYWRfdW5sb2NrKCkuCiAgKi8KLWludCBzcmN1X3JlYWRfbG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQoraW50IF9fc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKIHsKIAlpbnQgaWR4OwogCkBAIC0xMjAsMzEgKzE0MCwyNyBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiAJcmV0dXJuIGlkeDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfcmVhZF9sb2NrKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fc3JjdV9yZWFkX2xvY2spOwogCi0vKioKLSAqIHNyY3VfcmVhZF91bmxvY2sgLSB1bnJlZ2lzdGVyIGEgb2xkIHJlYWRlciBmcm9tIGFuIFNSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZS4KLSAqIEBzcDogc3JjdV9zdHJ1Y3QgaW4gd2hpY2ggdG8gdW5yZWdpc3RlciB0aGUgb2xkIHJlYWRlci4KLSAqIEBpZHg6IHJldHVybiB2YWx1ZSBmcm9tIGNvcnJlc3BvbmRpbmcgc3JjdV9yZWFkX2xvY2soKS4KLSAqCisvKgogICogUmVtb3ZlcyB0aGUgY291bnQgZm9yIHRoZSBvbGQgcmVhZGVyIGZyb20gdGhlIGFwcHJvcHJpYXRlIHBlci1DUFUKICAqIGVsZW1lbnQgb2YgdGhlIHNyY3Vfc3RydWN0LiAgTm90ZSB0aGF0IHRoaXMgbWF5IHdlbGwgYmUgYSBkaWZmZXJlbnQKICAqIENQVSB0aGFuIHRoYXQgd2hpY2ggd2FzIGluY3JlbWVudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHNyY3VfcmVhZF9sb2NrKCkuCiAgKiBNdXN0IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KICAqLwotdm9pZCBzcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGludCBpZHgpCit2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KQogewogCXByZWVtcHRfZGlzYWJsZSgpOwogCXNyY3VfYmFycmllcigpOyAgLyogZW5zdXJlIGNvbXBpbGVyIHdvbid0IG1pc29yZGVyIGNyaXRpY2FsIHNlY3Rpb24uICovCiAJcGVyX2NwdV9wdHIoc3AtPnBlcl9jcHVfcmVmLCBzbXBfcHJvY2Vzc29yX2lkKCkpLT5jW2lkeF0tLTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9yZWFkX3VubG9jayk7CitFWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF91bmxvY2spOwogCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBzeW5jaHJvbml6ZV9zcmN1KCkgYW5kIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCkuCiAgKi8KLXZvaWQgX19zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIHZvaWQgKCpzeW5jX2Z1bmMpKHZvaWQpKQorc3RhdGljIHZvaWQgX19zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIHZvaWQgKCpzeW5jX2Z1bmMpKHZvaWQpKQogewogCWludCBpZHg7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAyNmE2YjczLi44NzdmZTRmIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0yMjIsNiArMjIyLDcgQEAKIAlpZiAod2hpY2ggPiBQUklPX1VTRVIgfHwgd2hpY2ggPCBQUklPX1BST0NFU1MpCiAJCXJldHVybiAtRUlOVkFMOwogCisJcmN1X3JlYWRfbG9jaygpOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJc3dpdGNoICh3aGljaCkgewogCQljYXNlIFBSSU9fUFJPQ0VTUzoKQEAgLTI2Nyw2ICsyNjgsNyBAQAogCX0KIG91dF91bmxvY2s6CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTU2OSwxMSArNTcxLDYgQEAKIAlpZiAoIW5ld191c2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWlmICghdGFza19jYW5fc3dpdGNoX3VzZXIobmV3X3VzZXIsIGN1cnJlbnQpKSB7Ci0JCWZyZWVfdWlkKG5ld191c2VyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKGF0b21pY19yZWFkKCZuZXdfdXNlci0+cHJvY2Vzc2VzKSA+PQogCQkJCWN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTlBST0NdLnJsaW1fY3VyICYmCiAJCQluZXdfdXNlciAhPSBJTklUX1VTRVIpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IGU4NWMyMzQuLjEzNzAwODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtMzQzLDcgKzM0MywxOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2F0Y2hkb2dfbG9jaywgZmxhZ3MpOworCS8qCisJICogV2UgdXNlIHRyeWxvY2sgaGVyZSB0byBhdm9pZCBhIHBvdGVudGlhbCBkZWFkIGxvY2sgd2hlbgorCSAqIGtnZGIgY2FsbHMgdGhpcyBjb2RlIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGJlZW4gc3RvcHBlZCB3aXRoCisJICogd2F0Y2hkb2dfbG9jayBoZWxkLiBXaGVuIHdhdGNoZG9nX2xvY2sgaXMgaGVsZCB3ZSBqdXN0CisJICogcmV0dXJuIGFuZCBhY2NlcHQsIHRoYXQgdGhlIHdhdGNoZG9nIG1pZ2h0IHRyaWdnZXIgYW5kIG1hcmsKKwkgKiB0aGUgbW9uaXRvcmVkIGNsb2NrIHNvdXJjZSAodXN1YWxseSBUU0MpIHVuc3RhYmxlLgorCSAqCisJICogVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIG90aGVyIGNhbGxlciBjbG9ja3NvdXJjZV9yZXN1bWUoKQorCSAqIGJlY2F1c2UgYXQgdGhpcyBwb2ludCB0aGUga2VybmVsIGlzIFVQLCBpbnRlcnJ1cHRzIGFyZQorCSAqIGRpc2FibGVkIGFuZCBub3RoaW5nIGNhbiBob2xkIHdhdGNoZG9nX2xvY2suCisJICovCisJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmd2F0Y2hkb2dfbG9jaywgZmxhZ3MpKQorCQlyZXR1cm47CiAJY2xvY2tzb3VyY2VfcmVzZXRfd2F0Y2hkb2coKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YXRjaGRvZ19sb2NrLCBmbGFncyk7CiB9CkBAIC00NTgsOCArNDcwLDggQEAKICAqIGNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nIC0gVXBkYXRlIHdhdGNoZG9nCiAgKgogICogVXBkYXRlIHRoZSB3YXRjaGRvZyBhZnRlciBleGNlcHRpb24gY29udGV4dHMgc3VjaCBhcyBrZ2RiIHNvIGFzIG5vdAotICogdG8gaW5jb3JyZWN0bHkgdHJpcCB0aGUgd2F0Y2hkb2cuCi0gKgorICogdG8gaW5jb3JyZWN0bHkgdHJpcCB0aGUgd2F0Y2hkb2cuIFRoaXMgbWlnaHQgZmFpbCB3aGVuIHRoZSBrZXJuZWwKKyAqIHdhcyBzdG9wcGVkIGluIGNvZGUgd2hpY2ggaG9sZHMgd2F0Y2hkb2dfbG9jay4KICAqLwogdm9pZCBjbG9ja3NvdXJjZV90b3VjaF93YXRjaGRvZyh2b2lkKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggN2ZhYWEzMi4uZTJhYjA2NCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC04ODAsNiArODgwLDcgQEAKIAogCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKHRzLCAtYm9vdHRpbWUudHZfc2VjLCAtYm9vdHRpbWUudHZfbnNlYyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRib290dGltZSk7CiAKIC8qKgogICogbW9ub3RvbmljX3RvX2Jvb3RiYXNlZCAtIENvbnZlcnQgdGhlIG1vbm90b25pYyB0aW1lIHRvIGJvb3QgYmFzZWQuCkBAIC04ODksNiArODkwLDcgQEAKIHsKIAkqdHMgPSB0aW1lc3BlY19hZGRfc2FmZSgqdHMsIHRvdGFsX3NsZWVwX3RpbWUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobW9ub3RvbmljX3RvX2Jvb3RiYXNlZCk7CiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3NlY29uZHModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggNmMyMmQ4YS4uMTNlMTNkNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTI3LDkgKzI3LDcgQEAKIGNvbmZpZyBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZQX1RFU1QKIAlib29sCiAJaGVscAotCSBBbiBhcmNoIG1heSBwYXNzIGluIGEgdW5pcXVlIHZhbHVlIChmcmFtZSBwb2ludGVyKSB0byBib3RoIHRoZQotCSBlbnRlcmluZyBhbmQgZXhpdGluZyBvZiBhIGZ1bmN0aW9uLiBPbiBleGl0LCB0aGUgdmFsdWUgaXMgY29tcGFyZWQKLQkgYW5kIGlmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIGl0IHdpbGwgcGFuaWMgdGhlIGtlcm5lbC4KKwkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CiAKIGNvbmZpZyBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJYm9vbApAQCAtMzMwLDE1ICszMjgsNiBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKLWNvbmZpZyBQT1dFUl9UUkFDRVIKLQlib29sICJUcmFjZSBwb3dlciBjb25zdW1wdGlvbiBiZWhhdmlvciIKLQlkZXBlbmRzIG9uIFg4NgotCXNlbGVjdCBHRU5FUklDX1RSQUNFUgotCWhlbHAKLQkgIFRoaXMgdHJhY2VyIGhlbHBzIGRldmVsb3BlcnMgdG8gYW5hbHl6ZSBhbmQgb3B0aW1pemUgdGhlIGtlcm5lbCdzCi0JICBwb3dlciBtYW5hZ2VtZW50IGRlY2lzaW9ucywgc3BlY2lmaWNhbGx5IHRoZSBDLXN0YXRlIGFuZCBQLXN0YXRlCi0JICBiZWhhdmlvci4KLQogY29uZmlnIEtTWU1fVFJBQ0VSCiAJYm9vbCAiVHJhY2UgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIG9uIGtlcm5lbCBtZW1vcnkgbG9jYXRpb25zIgogCWRlcGVuZHMgb24gSEFWRV9IV19CUkVBS1BPSU5UCkBAIC00NTEsNyArNDQwLDcgQEAKIAogY29uZmlnIEtQUk9CRV9FVkVOVAogCWRlcGVuZHMgb24gS1BST0JFUwotCWRlcGVuZHMgb24gWDg2CisJZGVwZW5kcyBvbiBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKIAlib29sICJFbmFibGUga3Byb2Jlcy1iYXNlZCBkeW5hbWljIGV2ZW50cyIKIAlzZWxlY3QgVFJBQ0lORwogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL01ha2VmaWxlIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCmluZGV4IGNkOWVjZDguLmQwMGM2ZmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKQEAgLTUxLDcgKzUxLDkgQEAKIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudHMubwogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHRyYWNlX2V4cG9ydC5vCiBvYmotJChDT05GSUdfRlRSQUNFX1NZU0NBTExTKSArPSB0cmFjZV9zeXNjYWxscy5vCi1vYmotJChDT05GSUdfRVZFTlRfUFJPRklMRSkgKz0gdHJhY2VfZXZlbnRfcHJvZmlsZS5vCitpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSkKK29iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KK2VuZGlmCiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2VfZXZlbnRzX2ZpbHRlci5vCiBvYmotJChDT05GSUdfS1BST0JFX0VWRU5UKSArPSB0cmFjZV9rcHJvYmUubwogb2JqLSQoQ09ORklHX0tTWU1fVFJBQ0VSKSArPSB0cmFjZV9rc3ltLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwppbmRleCAxZTY2NDBmLi44Mzc4MzU3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC04OTgsMzYgKzg5Nyw2IEBACiAJCX0JCQkJXAogCX0KIAotI2lmZGVmIENPTkZJR19LUFJPQkVTCi0KLXN0YXRpYyBpbnQgZnJvemVuX3JlY29yZF9jb3VudDsKLQotc3RhdGljIGlubGluZSB2b2lkIGZyZWV6ZV9yZWNvcmQoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKLXsKLQlpZiAoIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZST1pFTikpIHsKLQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRlJPWkVOOwotCQlmcm96ZW5fcmVjb3JkX2NvdW50Kys7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5mcmVlemVfcmVjb3JkKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCi17Ci0JaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJPWkVOKSB7Ci0JCXJlYy0+ZmxhZ3MgJj0gfkZUUkFDRV9GTF9GUk9aRU47Ci0JCWZyb3plbl9yZWNvcmRfY291bnQtLTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJlY29yZF9mcm96ZW4oc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKLXsKLQlyZXR1cm4gcmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUk9aRU47Ci19Ci0jZWxzZQotIyBkZWZpbmUgZnJlZXplX3JlY29yZChyZWMpCQkJKHsgMDsgfSkKLSMgZGVmaW5lIHVuZnJlZXplX3JlY29yZChyZWMpCQkJKHsgMDsgfSkKLSMgZGVmaW5lIHJlY29yZF9mcm96ZW4ocmVjKQkJCSh7IDA7IH0pCi0jZW5kaWYgLyogQ09ORklHX0tQUk9CRVMgKi8KLQogc3RhdGljIHZvaWQgZnRyYWNlX2ZyZWVfcmVjKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCiB7CiAJcmVjLT5mcmVlbGlzdCA9IGZ0cmFjZV9mcmVlX3JlY29yZHM7CkBAIC0xMDI1LDYgKzk5NCwyMSBAQAogfQogCiAKKy8qIFJldHVybiAxIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGlzIHJlc2VydmVkIGZvciBmdHJhY2UgKi8KK2ludCBmdHJhY2VfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQoreworCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CisJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKKworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgeworCQlpZiAocmVjLT5pcCA8PSAodW5zaWduZWQgbG9uZyllbmQgJiYKKwkJICAgIHJlYy0+aXAgKyBNQ09VTlRfSU5TTl9TSVpFID4gKHVuc2lnbmVkIGxvbmcpc3RhcnQpCisJCQlyZXR1cm4gMTsKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKwlyZXR1cm4gMDsKK30KKworCiBzdGF0aWMgaW50CiBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgaW50IGVuYWJsZSkKIHsKQEAgLTEwNzYsMTQgKzEwNjAsNiBAQAogCQkgICAgIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0NPTlZFUlRFRCkpCiAJCQljb250aW51ZTsKIAotCQkvKiBpZ25vcmUgdXBkYXRlcyB0byB0aGlzIHJlY29yZCdzIG1jb3VudCBzaXRlICovCi0JCWlmIChnZXRfa3Byb2JlKCh2b2lkICopcmVjLT5pcCkpIHsKLQkJCWZyZWV6ZV9yZWNvcmQocmVjKTsKLQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgewotCQkJdW5mcmVlemVfcmVjb3JkKHJlYyk7Ci0JCX0KLQogCQlmYWlsZWQgPSBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUocmVjLCBlbmFibGUpOwogCQlpZiAoZmFpbGVkKSB7CiAJCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GQUlMRUQ7CkBAIC0yNDI2LDYgKzI0MDIsNyBAQAogc3RhdGljIERFRklORV9NVVRFWChncmFwaF9sb2NrKTsKIAogaW50IGZ0cmFjZV9ncmFwaF9jb3VudDsKK2ludCBmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQ7CiB1bnNpZ25lZCBsb25nIGZ0cmFjZV9ncmFwaF9mdW5jc1tGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTXSBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgdm9pZCAqCkBAIC0yNDQ4LDcgKzI0MjUsNyBAQAogCW11dGV4X2xvY2soJmdyYXBoX2xvY2spOwogCiAJLyogTm90aGluZywgdGVsbCBnX3Nob3cgdG8gcHJpbnQgYWxsIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZCAqLwotCWlmICghZnRyYWNlX2dyYXBoX2NvdW50ICYmICEqcG9zKQorCWlmICghZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkICYmICEqcG9zKQogCQlyZXR1cm4gKHZvaWQgKikxOwogCiAJcmV0dXJuIF9fZ19uZXh0KG0sIHBvcyk7CkBAIC0yNDk0LDYgKzI0NzEsNyBAQAogCW11dGV4X2xvY2soJmdyYXBoX2xvY2spOwogCWlmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmCiAJICAgIChmaWxlLT5mX2ZsYWdzICYgT19UUlVOQykpIHsKKwkJZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkID0gMDsKIAkJZnRyYWNlX2dyYXBoX2NvdW50ID0gMDsKIAkJbWVtc2V0KGZ0cmFjZV9ncmFwaF9mdW5jcywgMCwgc2l6ZW9mKGZ0cmFjZV9ncmFwaF9mdW5jcykpOwogCX0KQEAgLTI1MTksNyArMjQ5Nyw3IEBACiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwogCWludCBzZWFyY2hfbGVuOwotCWludCBmb3VuZCA9IDA7CisJaW50IGZhaWwgPSAxOwogCWludCB0eXBlLCBub3Q7CiAJY2hhciAqc2VhcmNoOwogCWJvb2wgZXhpc3RzOwpAQCAtMjUzMCwzNyArMjUwOCw1MSBAQAogCiAJLyogZGVjb2RlIHJlZ2V4ICovCiAJdHlwZSA9IGZpbHRlcl9wYXJzZV9yZWdleChidWZmZXIsIHN0cmxlbihidWZmZXIpLCAmc2VhcmNoLCAmbm90KTsKLQlpZiAobm90KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5vdCAmJiAqaWR4ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpCisJCXJldHVybiAtRUJVU1k7CiAKIAlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CiAKLQkJaWYgKCppZHggPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykKLQkJCWJyZWFrOwotCiAJCWlmIChyZWMtPmZsYWdzICYgKEZUUkFDRV9GTF9GQUlMRUQgfCBGVFJBQ0VfRkxfRlJFRSkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoZnRyYWNlX21hdGNoX3JlY29yZChyZWMsIHNlYXJjaCwgc2VhcmNoX2xlbiwgdHlwZSkpIHsKLQkJCS8qIGVuc3VyZSBpdCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgYXJyYXkgKi8KKwkJCS8qIGlmIGl0IGlzIGluIHRoZSBhcnJheSAqLwogCQkJZXhpc3RzID0gZmFsc2U7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKmlkeDsgaSsrKQorCQkJZm9yIChpID0gMDsgaSA8ICppZHg7IGkrKykgewogCQkJCWlmIChhcnJheVtpXSA9PSByZWMtPmlwKSB7CiAJCQkJCWV4aXN0cyA9IHRydWU7CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCWlmICghZXhpc3RzKQotCQkJCWFycmF5WygqaWR4KSsrXSA9IHJlYy0+aXA7Ci0JCQlmb3VuZCA9IDE7CisJCQl9CisKKwkJCWlmICghbm90KSB7CisJCQkJZmFpbCA9IDA7CisJCQkJaWYgKCFleGlzdHMpIHsKKwkJCQkJYXJyYXlbKCppZHgpKytdID0gcmVjLT5pcDsKKwkJCQkJaWYgKCppZHggPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykKKwkJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGV4aXN0cykgeworCQkJCQlhcnJheVtpXSA9IGFycmF5Wy0tKCppZHgpXTsKKwkJCQkJYXJyYXlbKmlkeF0gPSAwOworCQkJCQlmYWlsID0gMDsKKwkJCQl9CisJCQl9CiAJCX0KIAl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKLQorb3V0OgogCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCi0JcmV0dXJuIGZvdW5kID8gMCA6IC1FSU5WQUw7CisJaWYgKGZhaWwpCisJCXJldHVybiAtRUlOVkFMOworCisJZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkID0gMTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTI1NzAsMTYgKzI1NjIsMTEgQEAKIAlzdHJ1Y3QgdHJhY2VfcGFyc2VyIHBhcnNlcjsKIAlzc2l6ZV90IHJlYWQsIHJldDsKIAotCWlmICghY250IHx8IGNudCA8IDApCisJaWYgKCFjbnQpCiAJCXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmZ3JhcGhfbG9jayk7CiAKLQlpZiAoZnRyYWNlX2dyYXBoX2NvdW50ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCiAJaWYgKHRyYWNlX3BhcnNlcl9nZXRfaW5pdCgmcGFyc2VyLCBGVFJBQ0VfQlVGRl9NQVgpKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKaW5kZXggZWRlZmUzYi4uOGMxYjJkMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTQ2NCw2ICs0NjQsOCBAQAogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1CSpjcHVfYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcJCQloZWFkOwogCXN0cnVjdCBidWZmZXJfcGFnZQkJKmhlYWRfcGFnZTsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSpjYWNoZV9yZWFkZXJfcGFnZTsKKwl1bnNpZ25lZCBsb25nCQkJY2FjaGVfcmVhZDsKIAl1NjQJCQkJcmVhZF9zdGFtcDsKIH07CiAKQEAgLTI3MTYsNiArMjcxOCw4IEBACiAJCWl0ZXItPnJlYWRfc3RhbXAgPSBjcHVfYnVmZmVyLT5yZWFkX3N0YW1wOwogCWVsc2UKIAkJaXRlci0+cmVhZF9zdGFtcCA9IGl0ZXItPmhlYWRfcGFnZS0+cGFnZS0+dGltZV9zdGFtcDsKKwlpdGVyLT5jYWNoZV9yZWFkZXJfcGFnZSA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlOworCWl0ZXItPmNhY2hlX3JlYWQgPSBjcHVfYnVmZmVyLT5yZWFkOwogfQogCiAvKioKQEAgLTMwNjAsMTMgKzMwNjQsMjIgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCWludCBucl9sb29wcyA9IDA7CiAKLQlpZiAocmluZ19idWZmZXJfaXRlcl9lbXB0eShpdGVyKSkKLQkJcmV0dXJuIE5VTEw7Ci0KIAljcHVfYnVmZmVyID0gaXRlci0+Y3B1X2J1ZmZlcjsKIAlidWZmZXIgPSBjcHVfYnVmZmVyLT5idWZmZXI7CiAKKwkvKgorCSAqIENoZWNrIGlmIHNvbWVvbmUgcGVyZm9ybWVkIGEgY29uc3VtaW5nIHJlYWQgdG8KKwkgKiB0aGUgYnVmZmVyLiBBIGNvbnN1bWluZyByZWFkIGludmFsaWRhdGVzIHRoZSBpdGVyYXRvcgorCSAqIGFuZCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBpdGVyYXRvciBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKHVubGlrZWx5KGl0ZXItPmNhY2hlX3JlYWQgIT0gY3B1X2J1ZmZlci0+cmVhZCB8fAorCQkgICAgIGl0ZXItPmNhY2hlX3JlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlKSkKKwkJcmJfaXRlcl9yZXNldChpdGVyKTsKKwogIGFnYWluOgorCWlmIChyaW5nX2J1ZmZlcl9pdGVyX2VtcHR5KGl0ZXIpKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qCiAJICogV2UgcmVwZWF0IHdoZW4gYSB0aW1lc3RhbXAgaXMgZW5jb3VudGVyZWQuCiAJICogV2UgY2FuIGdldCBtdWx0aXBsZSB0aW1lc3RhbXBzIGJ5IG5lc3RlZCBpbnRlcnJ1cHRzIG9yIGFsc28KQEAgLTMwODEsNiArMzA5NCwxMSBAQAogCWlmIChyYl9wZXJfY3B1X2VtcHR5KGNwdV9idWZmZXIpKQogCQlyZXR1cm4gTlVMTDsKIAorCWlmIChpdGVyLT5oZWFkID49IGxvY2FsX3JlYWQoJml0ZXItPmhlYWRfcGFnZS0+cGFnZS0+Y29tbWl0KSkgeworCQlyYl9pbmNfaXRlcihpdGVyKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAlldmVudCA9IHJiX2l0ZXJfaGVhZF9ldmVudChpdGVyKTsKIAogCXN3aXRjaCAoZXZlbnQtPnR5cGVfbGVuKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDBkZjFiMGYuLjAzMmM1N2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BsaWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CkBAIC0xMDIsOSArMTAzLDYgQEAKIAogc3RhdGljIGNwdW1hc2tfdmFyX3QgX19yZWFkX21vc3RseQl0cmFjaW5nX2J1ZmZlcl9tYXNrOwogCi0vKiBEZWZpbmUgd2hpY2ggY3B1IGJ1ZmZlcnMgYXJlIGN1cnJlbnRseSByZWFkIGluIHRyYWNlX3BpcGUgKi8KLXN0YXRpYyBjcHVtYXNrX3Zhcl90CQkJdHJhY2luZ19yZWFkZXJfY3B1bWFzazsKLQogI2RlZmluZSBmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpCVwKIAlmb3JfZWFjaF9jcHUoY3B1LCB0cmFjaW5nX2J1ZmZlcl9tYXNrKQogCkBAIC0yNDMsMTIgKzI0MSw5MSBAQAogCiAvKgogICogdHJhY2VfdHlwZXNfbG9jayBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIHRyYWNlX3R5cGVzIGxpc3QuCi0gKiBUaGlzIGxvY2sgaXMgYWxzbyB1c2VkIHRvIGtlZXAgdXNlciBhY2Nlc3Mgc2VyaWFsaXplZC4KLSAqIEFjY2Vzc2VzIGZyb20gdXNlcnNwYWNlIHdpbGwgZ3JhYiB0aGlzIGxvY2sgd2hpbGUgdXNlcnNwYWNlCi0gKiBhY3Rpdml0aWVzIGhhcHBlbiBpbnNpZGUgdGhlIGtlcm5lbC4KICAqLwogc3RhdGljIERFRklORV9NVVRFWCh0cmFjZV90eXBlc19sb2NrKTsKIAorLyoKKyAqIHNlcmlhbGl6ZSB0aGUgYWNjZXNzIG9mIHRoZSByaW5nIGJ1ZmZlcgorICoKKyAqIHJpbmcgYnVmZmVyIHNlcmlhbGl6ZXMgcmVhZGVycywgYnV0IGl0IGlzIGxvdyBsZXZlbCBwcm90ZWN0aW9uLgorICogVGhlIHZhbGlkaXR5IG9mIHRoZSBldmVudHMgKHdoaWNoIHJldHVybnMgYnkgcmluZ19idWZmZXJfcGVlaygpIC4uZXRjKQorICogYXJlIG5vdCBwcm90ZWN0ZWQgYnkgcmluZyBidWZmZXIuCisgKgorICogVGhlIGNvbnRlbnQgb2YgZXZlbnRzIG1heSBiZWNvbWUgZ2FyYmFnZSBpZiB3ZSBhbGxvdyBvdGhlciBwcm9jZXNzIGNvbnN1bWVzCisgKiB0aGVzZSBldmVudHMgY29uY3VycmVudGx5OgorICogICBBKSB0aGUgcGFnZSBvZiB0aGUgY29uc3VtZWQgZXZlbnRzIG1heSBiZWNvbWUgYSBub3JtYWwgcGFnZQorICogICAgICAobm90IHJlYWRlciBwYWdlKSBpbiByaW5nIGJ1ZmZlciwgYW5kIHRoaXMgcGFnZSB3aWxsIGJlIHJld3JpdGVkCisgKiAgICAgIGJ5IGV2ZW50cyBwcm9kdWNlci4KKyAqICAgQikgVGhlIHBhZ2Ugb2YgdGhlIGNvbnN1bWVkIGV2ZW50cyBtYXkgYmVjb21lIGEgcGFnZSBmb3Igc3BsaWNlX3JlYWQsCisgKiAgICAgIGFuZCB0aGlzIHBhZ2Ugd2lsbCBiZSByZXR1cm5lZCB0byBzeXN0ZW0uCisgKgorICogVGhlc2UgcHJpbWl0aXZlcyBhbGxvdyBtdWx0aSBwcm9jZXNzIGFjY2VzcyB0byBkaWZmZXJlbnQgY3B1IHJpbmcgYnVmZmVyCisgKiBjb25jdXJyZW50bHkuCisgKgorICogVGhlc2UgcHJpbWl0aXZlcyBkb24ndCBkaXN0aW5ndWlzaCByZWFkLW9ubHkgYW5kIHJlYWQtY29uc3VtZSBhY2Nlc3MuCisgKiBNdWx0aSByZWFkLW9ubHkgYWNjZXNzIGFyZSBhbHNvIHNlcmlhbGl6ZWQuCisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBERUNMQVJFX1JXU0VNKGFsbF9jcHVfYWNjZXNzX2xvY2spOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtdXRleCwgY3B1X2FjY2Vzc19sb2NrKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc19sb2NrKGludCBjcHUpCit7CisJaWYgKGNwdSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKKwkJLyogZ2FpbiBpdCBmb3IgYWNjZXNzaW5nIHRoZSB3aG9sZSByaW5nIGJ1ZmZlci4gKi8KKwkJZG93bl93cml0ZSgmYWxsX2NwdV9hY2Nlc3NfbG9jayk7CisJfSBlbHNlIHsKKwkJLyogZ2FpbiBpdCBmb3IgYWNjZXNzaW5nIGEgY3B1IHJpbmcgYnVmZmVyLiAqLworCisJCS8qIEZpcnN0bHkgYmxvY2sgb3RoZXIgdHJhY2VfYWNjZXNzX2xvY2soVFJBQ0VfUElQRV9BTExfQ1BVKS4gKi8KKwkJZG93bl9yZWFkKCZhbGxfY3B1X2FjY2Vzc19sb2NrKTsKKworCQkvKiBTZWNvbmRseSBibG9jayBvdGhlciBhY2Nlc3MgdG8gdGhpcyBAY3B1IHJpbmcgYnVmZmVyLiAqLworCQltdXRleF9sb2NrKCZwZXJfY3B1KGNwdV9hY2Nlc3NfbG9jaywgY3B1KSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX3VubG9jayhpbnQgY3B1KQoreworCWlmIChjcHUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCXVwX3dyaXRlKCZhbGxfY3B1X2FjY2Vzc19sb2NrKTsKKwl9IGVsc2UgeworCQltdXRleF91bmxvY2soJnBlcl9jcHUoY3B1X2FjY2Vzc19sb2NrLCBjcHUpKTsKKwkJdXBfcmVhZCgmYWxsX2NwdV9hY2Nlc3NfbG9jayk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX2xvY2tfaW5pdCh2b2lkKQoreworCWludCBjcHU7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQltdXRleF9pbml0KCZwZXJfY3B1KGNwdV9hY2Nlc3NfbG9jaywgY3B1KSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBERUZJTkVfTVVURVgoYWNjZXNzX2xvY2spOworCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX2xvY2soaW50IGNwdSkKK3sKKwkodm9pZCljcHU7CisJbXV0ZXhfbG9jaygmYWNjZXNzX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX3VubG9jayhpbnQgY3B1KQoreworCSh2b2lkKWNwdTsKKwltdXRleF91bmxvY2soJmFjY2Vzc19sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc19sb2NrX2luaXQodm9pZCkKK3sKK30KKworI2VuZGlmCisKIC8qIHRyYWNlX3dhaXQgaXMgYSB3YWl0cXVldWUgZm9yIHRhc2tzIGJsb2NrZWQgb24gdHJhY2VfcG9sbCAqLwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHRyYWNlX3dhaXQpOwogCkBAIC05NTEsNiArMTAyOCwxMSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKFdBUk5fT05fT05DRShwaWQgPCAwKSkgeworCQlzdHJjcHkoY29tbSwgIjxYWFg+Iik7CisJCXJldHVybjsKKwl9CisKIAlpZiAocGlkID4gUElEX01BWF9ERUZBVUxUKSB7CiAJCXN0cmNweShjb21tLCAiPC4uLj4iKTsKIAkJcmV0dXJuOwpAQCAtMTMxNSw4ICsxMzk3LDEwIEBACiAJZW50cnktPmZtdAkJCT0gZm10OwogCiAJbWVtY3B5KGVudHJ5LT5idWYsIHRyYWNlX2J1Ziwgc2l6ZW9mKHUzMikgKiBsZW4pOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKSB7CiAJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CisJCWZ0cmFjZV90cmFjZV9zdGFjayhidWZmZXIsIGZsYWdzLCA2LCBwYyk7CisJfQogCiBvdXRfdW5sb2NrOgogCWFyY2hfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKQEAgLTEzODksOCArMTQ3MywxMCBAQAogCiAJbWVtY3B5KCZlbnRyeS0+YnVmLCB0cmFjZV9idWYsIGxlbik7CiAJZW50cnktPmJ1ZltsZW5dID0gJ1wwJzsKLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkgewogCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOworCQlmdHJhY2VfdHJhY2Vfc3RhY2soYnVmZmVyLCBpcnFfZmxhZ3MsIDYsIHBjKTsKKwl9CiAKICBvdXRfdW5sb2NrOgogCWFyY2hfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKQEAgLTE1ODAsMTIgKzE2NjYsNiBAQAogfQogCiAvKgotICogTm8gbmVjZXNzYXJ5IGxvY2tpbmcgaGVyZS4gVGhlIHdvcnN0IHRoaW5nIHdoaWNoIGNhbgotICogaGFwcGVuIGlzIGxvb3NpbmcgZXZlbnRzIGNvbnN1bWVkIGF0IHRoZSBzYW1lIHRpbWUKLSAqIGJ5IGEgdHJhY2VfcGlwZSByZWFkZXIuCi0gKiBPdGhlciB0aGFuIHRoYXQsIHdlIGRvbid0IHJpc2sgdG8gY3Jhc2ggdGhlIHJpbmcgYnVmZmVyCi0gKiBiZWNhdXNlIGl0IHNlcmlhbGl6ZXMgdGhlIHJlYWRlcnMuCi0gKgogICogVGhlIGN1cnJlbnQgdHJhY2VyIGlzIGNvcGllZCB0byBhdm9pZCBhIGdsb2JhbCBsb2NraW5nCiAgKiBhbGwgYXJvdW5kLgogICovCkBAIC0xNjQwLDEyICsxNzIwLDE2IEBACiAJfQogCiAJdHJhY2VfZXZlbnRfcmVhZF9sb2NrKCk7CisJdHJhY2VfYWNjZXNzX2xvY2soY3B1X2ZpbGUpOwogCXJldHVybiBwOwogfQogCiBzdGF0aWMgdm9pZCBzX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogeworCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CisKIAlhdG9taWNfZGVjKCZ0cmFjZV9yZWNvcmRfY21kbGluZV9kaXNhYmxlZCk7CisJdHJhY2VfYWNjZXNzX3VubG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJdHJhY2VfZXZlbnRfcmVhZF91bmxvY2soKTsKIH0KIApAQCAtMjgzNiwyMiArMjkyMCw2IEBACiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCS8qIFdlIG9ubHkgYWxsb3cgb25lIHJlYWRlciBwZXIgY3B1ICovCi0JaWYgKGNwdV9maWxlID09IFRSQUNFX1BJUEVfQUxMX0NQVSkgewotCQlpZiAoIWNwdW1hc2tfZW1wdHkodHJhY2luZ19yZWFkZXJfY3B1bWFzaykpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWNwdW1hc2tfc2V0YWxsKHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOwotCX0gZWxzZSB7Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzaykpCi0JCQljcHVtYXNrX3NldF9jcHUoY3B1X2ZpbGUsIHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOwotCQllbHNlIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJLyogY3JlYXRlIGEgYnVmZmVyIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiB0byBwYXNzIHRvIHVzZXJzcGFjZSAqLwogCWl0ZXIgPSBremFsbG9jKHNpemVvZigqaXRlciksIEdGUF9LRVJORUwpOwogCWlmICghaXRlcikgewpAQCAtMjkwNywxMiArMjk3NSw2IEBACiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCWlmIChpdGVyLT5jcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpCi0JCWNwdW1hc2tfY2xlYXIodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci0JZWxzZQotCQljcHVtYXNrX2NsZWFyX2NwdShpdGVyLT5jcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci0KLQogCWlmIChpdGVyLT50cmFjZS0+cGlwZV9jbG9zZSkKIAkJaXRlci0+dHJhY2UtPnBpcGVfY2xvc2UoaXRlcik7CiAKQEAgLTMwNzQsNiArMzEzNiw3IEBACiAJaXRlci0+cG9zID0gLTE7CiAKIAl0cmFjZV9ldmVudF9yZWFkX2xvY2soKTsKKwl0cmFjZV9hY2Nlc3NfbG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJd2hpbGUgKGZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikgIT0gTlVMTCkgewogCQllbnVtIHByaW50X2xpbmVfdCByZXQ7CiAJCWludCBsZW4gPSBpdGVyLT5zZXEubGVuOwpAQCAtMzA5MCw2ICszMTUzLDcgQEAKIAkJaWYgKGl0ZXItPnNlcS5sZW4gPj0gY250KQogCQkJYnJlYWs7CiAJfQorCXRyYWNlX2FjY2Vzc191bmxvY2soaXRlci0+Y3B1X2ZpbGUpOwogCXRyYWNlX2V2ZW50X3JlYWRfdW5sb2NrKCk7CiAKIAkvKiBOb3cgY29weSB3aGF0IHdlIGhhdmUgdG8gdGhlIHVzZXIgKi8KQEAgLTMyMTUsNiArMzI3OSw3IEBACiAJfQogCiAJdHJhY2VfZXZlbnRfcmVhZF9sb2NrKCk7CisJdHJhY2VfYWNjZXNzX2xvY2soaXRlci0+Y3B1X2ZpbGUpOwogCiAJLyogRmlsbCBhcyBtYW55IHBhZ2VzIGFzIHBvc3NpYmxlLiAqLwogCWZvciAoaSA9IDAsIHJlbSA9IGxlbjsgaSA8IFBJUEVfQlVGRkVSUyAmJiByZW07IGkrKykgewpAQCAtMzIzOCw2ICszMzAzLDcgQEAKIAkJdHJhY2Vfc2VxX2luaXQoJml0ZXItPnNlcSk7CiAJfQogCisJdHJhY2VfYWNjZXNzX3VubG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJdHJhY2VfZXZlbnRfcmVhZF91bmxvY2soKTsKIAltdXRleF91bmxvY2soJml0ZXItPm11dGV4KTsKIApAQCAtMzUzOSwxMCArMzYwNSwxMiBAQAogCiAJaW5mby0+cmVhZCA9IDA7CiAKKwl0cmFjZV9hY2Nlc3NfbG9jayhpbmZvLT5jcHUpOwogCXJldCA9IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShpbmZvLT50ci0+YnVmZmVyLAogCQkJCSAgICAmaW5mby0+c3BhcmUsCiAJCQkJICAgIGNvdW50LAogCQkJCSAgICBpbmZvLT5jcHUsIDApOworCXRyYWNlX2FjY2Vzc191bmxvY2soaW5mby0+Y3B1KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTM2NzAsNiArMzczOCw3IEBACiAJCWxlbiAmPSBQQUdFX01BU0s7CiAJfQogCisJdHJhY2VfYWNjZXNzX2xvY2soaW5mby0+Y3B1KTsKIAllbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllc19jcHUoaW5mby0+dHItPmJ1ZmZlciwgaW5mby0+Y3B1KTsKIAogCWZvciAoaSA9IDA7IGkgPCBQSVBFX0JVRkZFUlMgJiYgbGVuICYmIGVudHJpZXM7IGkrKywgbGVuIC09IFBBR0VfU0laRSkgewpAQCAtMzcxNyw2ICszNzg2LDcgQEAKIAkJZW50cmllcyA9IHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KGluZm8tPnRyLT5idWZmZXIsIGluZm8tPmNwdSk7CiAJfQogCisJdHJhY2VfYWNjZXNzX3VubG9jayhpbmZvLT5jcHUpOwogCXNwZC5ucl9wYWdlcyA9IGk7CiAKIAkvKiBkaWQgd2UgcmVhZCBhbnl0aGluZz8gKi8KQEAgLTQxNTMsNiArNDIyMyw4IEBACiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CiAJaW50IGNwdTsKIAorCXRyYWNlX2FjY2Vzc19sb2NrX2luaXQoKTsKKwogCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOwogCiAJdHJhY2VfY3JlYXRlX2ZpbGUoInRyYWNpbmdfZW5hYmxlZCIsIDA2NDQsIGRfdHJhY2VyLApAQCAtNDM4Nyw5ICs0NDU5LDYgQEAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0cmFjaW5nX2NwdW1hc2ssIEdGUF9LRVJORUwpKQogCQlnb3RvIG91dF9mcmVlX2J1ZmZlcl9tYXNrOwogCi0JaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnRyYWNpbmdfcmVhZGVyX2NwdW1hc2ssIEdGUF9LRVJORUwpKQotCQlnb3RvIG91dF9mcmVlX3RyYWNpbmdfY3B1bWFzazsKLQogCS8qIFRvIHNhdmUgbWVtb3J5LCBrZWVwIHRoZSByaW5nIGJ1ZmZlciBzaXplIHRvIGl0cyBtaW5pbXVtICovCiAJaWYgKHJpbmdfYnVmZmVyX2V4cGFuZGVkKQogCQlyaW5nX2J1Zl9zaXplID0gdHJhY2VfYnVmX3NpemU7CkBAIC00NDQ3LDggKzQ1MTYsNiBAQAogCXJldHVybiAwOwogCiBvdXRfZnJlZV9jcHVtYXNrOgotCWZyZWVfY3B1bWFza192YXIodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci1vdXRfZnJlZV90cmFjaW5nX2NwdW1hc2s6CiAJZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX2NwdW1hc2spOwogb3V0X2ZyZWVfYnVmZmVyX21hc2s6CiAJZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX2J1ZmZlcl9tYXNrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5oIGIva2VybmVsL3RyYWNlL3RyYWNlLmgKaW5kZXggNGRmNmE3Ny4uZmQwNWJjYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmgKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmgKQEAgLTQ5Nyw2ICs0OTcsNyBAQAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogLyogVE9ETzogbWFrZSB0aGlzIHZhcmlhYmxlICovCiAjZGVmaW5lIEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MJCTMyCitleHRlcm4gaW50IGZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZDsKIGV4dGVybiBpbnQgZnRyYWNlX2dyYXBoX2NvdW50OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX2Z1bmNzW0ZUUkFDRV9HUkFQSF9NQVhfRlVOQ1NdOwogCkBAIC01MDQsNyArNTA1LDcgQEAKIHsKIAlpbnQgaTsKIAotCWlmICghZnRyYWNlX2dyYXBoX2NvdW50IHx8IHRlc3RfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpKQorCWlmICghZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkKQogCQlyZXR1cm4gMTsKIAogCWZvciAoaSA9IDA7IGkgPCBmdHJhY2VfZ3JhcGhfY291bnQ7IGkrKykgewpAQCAtNzkxLDcgKzc5Miw4IEBACiAKICN1bmRlZiBGVFJBQ0VfRU5UUlkKICNkZWZpbmUgRlRSQUNFX0VOVFJZKGNhbGwsIHN0cnVjdF9uYW1lLCBpZCwgdHN0cnVjdCwgcHJpbnQpCQlcCi0JZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF8jI2NhbGw7CisJZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAkJCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfIyNjYWxsOwogI3VuZGVmIEZUUkFDRV9FTlRSWV9EVVAKICNkZWZpbmUgRlRSQUNFX0VOVFJZX0RVUChjYWxsLCBzdHJ1Y3RfbmFtZSwgaWQsIHRzdHJ1Y3QsIHByaW50KQkJXAogCUZUUkFDRV9FTlRSWShjYWxsLCBzdHJ1Y3RfbmFtZSwgaWQsIFBBUkFNUyh0c3RydWN0KSwgUEFSQU1TKHByaW50KSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwppbmRleCA0YTE5NGYwLi5iOWJjNGQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCkBAIC0zMDcsOCArMzA3LDIzIEBACiAJCXJldHVybiAtMTsKIAlpZiAocGVyY2VudF9hID4gcGVyY2VudF9iKQogCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOworCisJaWYgKGEtPmluY29ycmVjdCA8IGItPmluY29ycmVjdCkKKwkJcmV0dXJuIC0xOworCWlmIChhLT5pbmNvcnJlY3QgPiBiLT5pbmNvcnJlY3QpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBTaW5jZSB0aGUgYWJvdmUgc2hvd3Mgd29yc2UgKGluY29ycmVjdCkgY2FzZXMKKwkgKiBmaXJzdCwgd2UgY29udGludWUgdGhhdCBieSBzaG93aW5nIGJlc3QgKGNvcnJlY3QpCisJICogY2FzZXMgbGFzdC4KKwkgKi8KKwlpZiAoYS0+Y29ycmVjdCA+IGItPmNvcnJlY3QpCisJCXJldHVybiAtMTsKKwlpZiAoYS0+Y29ycmVjdCA8IGItPmNvcnJlY3QpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX3N0YXQgYW5ub3RhdGVkX2JyYW5jaF9zdGF0cyA9IHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCmluZGV4IDllMjU1NzMuLmYwZDY5MzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwpAQCAtNiwxNCArNiwxMiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSAidHJhY2UuaCIKIAogCi1jaGFyICpwZXJmX3RyYWNlX2J1ZjsKLUVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHJhY2VfYnVmKTsKLQotY2hhciAqcGVyZl90cmFjZV9idWZfbm1pOwotRVhQT1JUX1NZTUJPTF9HUEwocGVyZl90cmFjZV9idWZfbm1pKTsKK3N0YXRpYyBjaGFyICpwZXJmX3RyYWNlX2J1ZjsKK3N0YXRpYyBjaGFyICpwZXJmX3RyYWNlX2J1Zl9ubWk7CiAKIHR5cGVkZWYgdHlwZW9mKGNoYXIgW0ZUUkFDRV9NQVhfUFJPRklMRV9TSVpFXSkgcGVyZl90cmFjZV90IDsKIApAQCAtMTIwLDMgKzExOCw0NyBAQAogCX0KIAltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKIH0KKworX19rcHJvYmVzIHZvaWQgKmZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKGludCBzaXplLCB1bnNpZ25lZCBzaG9ydCB0eXBlLAorCQkJCQlpbnQgKnJjdHhwLCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpCit7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKKwljaGFyICp0cmFjZV9idWYsICpyYXdfZGF0YTsKKwlpbnQgcGMsIGNwdTsKKworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCisJLyogUHJvdGVjdCB0aGUgcGVyIGNwdSBidWZmZXIsIGJlZ2luIHRoZSByY3UgcmVhZCBzaWRlICovCisJbG9jYWxfaXJxX3NhdmUoKmlycV9mbGFncyk7CisKKwkqcmN0eHAgPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7CisJaWYgKCpyY3R4cCA8IDApCisJCWdvdG8gZXJyX3JlY3Vyc2lvbjsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChpbl9ubWkoKSkKKwkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmX25taSk7CisJZWxzZQorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOworCisJaWYgKCF0cmFjZV9idWYpCisJCWdvdG8gZXJyOworCisJcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7CisKKwkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLworCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisKKwllbnRyeSA9IChzdHJ1Y3QgdHJhY2VfZW50cnkgKilyYXdfZGF0YTsKKwl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudHJ5LCAqaXJxX2ZsYWdzLCBwYyk7CisJZW50cnktPnR5cGUgPSB0eXBlOworCisJcmV0dXJuIHJhd19kYXRhOworZXJyOgorCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoKnJjdHhwKTsKK2Vycl9yZWN1cnNpb246CisJbG9jYWxfaXJxX3Jlc3RvcmUoKmlycV9mbGFncyk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmdHJhY2VfcGVyZl9idWZfcHJlcGFyZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggMTg5YjA5Yi4uM2Y5NzJhZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTYwLDEwICs2MCw4IEBACiAJcmV0dXJuIDA7CiAKIGVycjoKLQlpZiAoZmllbGQpIHsKKwlpZiAoZmllbGQpCiAJCWtmcmVlKGZpZWxkLT5uYW1lKTsKLQkJa2ZyZWUoZmllbGQtPnR5cGUpOwotCX0KIAlrZnJlZShmaWVsZCk7CiAKIAlyZXR1cm4gLUVOT01FTTsKQEAgLTUyMCw0MSArNTE4LDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotZXh0ZXJuIGNoYXIgKl9fYmFkX3R5cGVfc2l6ZSh2b2lkKTsKLQotI3VuZGVmIEZJRUxECi0jZGVmaW5lIEZJRUxEKHR5cGUsIG5hbWUpCQkJCQkJXAotCXNpemVvZih0eXBlKSAhPSBzaXplb2YoZmllbGQubmFtZSkgPyBfX2JhZF90eXBlX3NpemUoKSA6CVwKLQkjdHlwZSwgImNvbW1vbl8iICNuYW1lLCBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBuYW1lKSwJCVwKLQkJc2l6ZW9mKGZpZWxkLm5hbWUpLCBpc19zaWduZWRfdHlwZSh0eXBlKQotCi1zdGF0aWMgaW50IHRyYWNlX3dyaXRlX2hlYWRlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzKQotewotCXN0cnVjdCB0cmFjZV9lbnRyeSBmaWVsZDsKLQotCS8qIHN0cnVjdCB0cmFjZV9lbnRyeSAqLwotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCi0JCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlxuIiwKLQkJCUZJRUxEKHVuc2lnbmVkIHNob3J0LCB0eXBlKSwKLQkJCUZJRUxEKHVuc2lnbmVkIGNoYXIsIGZsYWdzKSwKLQkJCUZJRUxEKHVuc2lnbmVkIGNoYXIsIHByZWVtcHRfY291bnQpLAotCQkJRklFTEQoaW50LCBwaWQpLAotCQkJRklFTEQoaW50LCBsb2NrX2RlcHRoKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90CiBldmVudF9mb3JtYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCiAJCSAgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZDsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCWludCBjb21tb25fZmllbGRfY291bnQgPSA1OwogCWNoYXIgKmJ1ZjsKLQlpbnQgcjsKKwlpbnQgciA9IDA7CiAKIAlpZiAoKnBwb3MpCiAJCXJldHVybiAwOwpAQCAtNTY1LDE0ICs1MzgsNDggQEAKIAogCXRyYWNlX3NlcV9pbml0KHMpOwogCi0JLyogSWYgYW55IG9mIHRoZSBmaXJzdCB3cml0ZXMgZmFpbCwgc28gd2lsbCB0aGUgc2hvd19mb3JtYXQuICovCi0KIAl0cmFjZV9zZXFfcHJpbnRmKHMsICJuYW1lOiAlc1xuIiwgY2FsbC0+bmFtZSk7CiAJdHJhY2Vfc2VxX3ByaW50ZihzLCAiSUQ6ICVkXG4iLCBjYWxsLT5pZCk7CiAJdHJhY2Vfc2VxX3ByaW50ZihzLCAiZm9ybWF0OlxuIik7Ci0JdHJhY2Vfd3JpdGVfaGVhZGVyKHMpOwogCi0JciA9IGNhbGwtPnNob3dfZm9ybWF0KGNhbGwsIHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShmaWVsZCwgJmNhbGwtPmZpZWxkcywgbGluaykgeworCQkvKgorCQkgKiBTbWFydGx5IHNob3dzIHRoZSBhcnJheSB0eXBlKGV4Y2VwdCBkeW5hbWljIGFycmF5KS4KKwkJICogTm9ybWFsOgorCQkgKglmaWVsZDpUWVBFIFZBUgorCQkgKiBJZiBUWVBFIDo9IFRZUEVbTEVOXSwgaXQgaXMgc2hvd246CisJCSAqCWZpZWxkOlRZUEUgVkFSW0xFTl0KKwkJICovCisJCWNvbnN0IGNoYXIgKmFycmF5X2Rlc2NyaXB0b3IgPSBzdHJjaHIoZmllbGQtPnR5cGUsICdbJyk7CisKKwkJaWYgKCFzdHJuY21wKGZpZWxkLT50eXBlLCAiX19kYXRhX2xvYyIsIDEwKSkKKwkJCWFycmF5X2Rlc2NyaXB0b3IgPSBOVUxMOworCisJCWlmICghYXJyYXlfZGVzY3JpcHRvcikgeworCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXU7IgorCQkJCQkiXHRzaXplOiV1O1x0c2lnbmVkOiVkO1xuIiwKKwkJCQkJZmllbGQtPnR5cGUsIGZpZWxkLT5uYW1lLCBmaWVsZC0+b2Zmc2V0LAorCQkJCQlmaWVsZC0+c2l6ZSwgISFmaWVsZC0+aXNfc2lnbmVkKTsKKwkJfSBlbHNlIHsKKwkJCXIgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiUuKnMgJXMlcztcdG9mZnNldDoldTsiCisJCQkJCSJcdHNpemU6JXU7XHRzaWduZWQ6JWQ7XG4iLAorCQkJCQkoaW50KShhcnJheV9kZXNjcmlwdG9yIC0gZmllbGQtPnR5cGUpLAorCQkJCQlmaWVsZC0+dHlwZSwgZmllbGQtPm5hbWUsCisJCQkJCWFycmF5X2Rlc2NyaXB0b3IsIGZpZWxkLT5vZmZzZXQsCisJCQkJCWZpZWxkLT5zaXplLCAhIWZpZWxkLT5pc19zaWduZWQpOworCQl9CisKKwkJaWYgKC0tY29tbW9uX2ZpZWxkX2NvdW50ID09IDApCisJCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKKworCQlpZiAoIXIpCisJCQlicmVhazsKKwl9CisKKwlpZiAocikKKwkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAlc1xuIiwKKwkJCQljYWxsLT5wcmludF9mbXQpOworCiAJaWYgKCFyKSB7CiAJCS8qCiAJCSAqIHVnISAgVGhlIGZvcm1hdCBvdXRwdXQgaXMgYmlnZ2VyIHRoYW4gYSBQQUdFISEKQEAgLTk0OCwxMCArOTU1LDYgQEAKIAkJCQkgIGZpbHRlcik7CiAJfQogCi0JLyogQSB0cmFjZSBtYXkgbm90IHdhbnQgdG8gZXhwb3J0IGl0cyBmb3JtYXQgKi8KLQlpZiAoIWNhbGwtPnNob3dfZm9ybWF0KQotCQlyZXR1cm4gMDsKLQogCXRyYWNlX2NyZWF0ZV9maWxlKCJmb3JtYXQiLCAwNDQ0LCBjYWxsLT5kaXIsIGNhbGwsCiAJCQkgIGZvcm1hdCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCmluZGV4IGU0MmFmOWEuLjQ2MTVmNjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwpAQCAtMTM3MSw3ICsxMzcxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogdm9pZCBmdHJhY2VfcHJvZmlsZV9mcmVlX2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CkBAIC0xNDM5LDUgKzE0MzksNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggZDRmYTVkYy4uZTA5MWY2NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtNjIsNzggKzYyLDYgQEAKIAogI2luY2x1ZGUgInRyYWNlX2VudHJpZXMuaCIKIAotCi0jdW5kZWYgX19maWVsZAotI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkgICAgICAgc2l6ZW9mKGZpZWxkLml0ZW0pLCBpc19zaWduZWRfdHlwZSh0eXBlKSk7IFwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZmllbGRfZGVzYwotI2RlZmluZSBfX2ZpZWxkX2Rlc2ModHlwZSwgY29udGFpbmVyLCBpdGVtKQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBjb250YWluZXIuaXRlbSksCVwKLQkJCSAgICAgICBzaXplb2YoZmllbGQuY29udGFpbmVyLml0ZW0pLAkJXAotCQkJICAgICAgIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2FycmF5Ci0jZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIlsiICNsZW4gIl07XHQiIFwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5pdGVtKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkpOyBcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2FycmF5X2Rlc2MKLSNkZWZpbmUgX19hcnJheV9kZXNjKHR5cGUsIGNvbnRhaW5lciwgaXRlbSwgbGVuKQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICJbIiAjbGVuICJdO1x0IiBcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBjb250YWluZXIuaXRlbSksCVwKLQkJCSAgICAgICBzaXplb2YoZmllbGQuY29udGFpbmVyLml0ZW0pLAkJXAotCQkJICAgICAgIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKLSNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0pCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOjA7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkgICAgICAgaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIEZfcHJpbnRrCi0jZGVmaW5lIEZfcHJpbnRrKGZtdCwgYXJncy4uLikgIiVzLCAlc1xuIiwgI2ZtdCwgX19zdHJpbmdpZnkoYXJncykKLQotI3VuZGVmIF9fZW50cnkKLSNkZWZpbmUgX19lbnRyeSBSRUMKLQotI3VuZGVmIEZUUkFDRV9FTlRSWQotI2RlZmluZSBGVFJBQ0VfRU5UUlkobmFtZSwgc3RydWN0X25hbWUsIGlkLCB0c3RydWN0LCBwcmludCkJCVwKLXN0YXRpYyBpbnQJCQkJCQkJCVwKLWZ0cmFjZV9mb3JtYXRfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkLAkJCVwKLQkJICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBzdHJ1Y3RfbmFtZSBmaWVsZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXRzdHJ1Y3Q7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogIiBwcmludCk7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0KLQotI2luY2x1ZGUgInRyYWNlX2VudHJpZXMuaCIKLQogI3VuZGVmIF9fZmllbGQKICNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJCVwKIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUsICNpdGVtLAkJXApAQCAtMTc1LDcgKzEwMywxMiBAQAogCQlyZXR1cm4gcmV0OwogCiAjdW5kZWYgX19keW5hbWljX2FycmF5Ci0jZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtKQorI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSkJCQkJCVwKKwlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUsICNpdGVtLAkJXAorCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKKwkJCQkgMCwgaXNfc2lnbmVkX3R5cGUodHlwZSksIEZJTFRFUl9PVEhFUik7XAorCWlmIChyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIHJldDsKIAogI3VuZGVmIEZUUkFDRV9FTlRSWQogI2RlZmluZSBGVFJBQ0VfRU5UUlkobmFtZSwgc3RydWN0X25hbWUsIGlkLCB0c3RydWN0LCBwcmludCkJCVwKQEAgLTE5OCw2ICsxMzEsOSBAQAogCXJldHVybiAwOwogfQogCisjdW5kZWYgX19lbnRyeQorI2RlZmluZSBfX2VudHJ5IFJFQworCiAjdW5kZWYgX19maWVsZAogI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCiAKQEAgLTIxMyw2ICsxNDksOSBAQAogI3VuZGVmIF9fZHluYW1pY19hcnJheQogI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSkKIAorI3VuZGVmIEZfcHJpbnRrCisjZGVmaW5lIEZfcHJpbnRrKGZtdCwgYXJncy4uLikgI2ZtdCAiLCAiICBfX3N0cmluZ2lmeShhcmdzKQorCiAjdW5kZWYgRlRSQUNFX0VOVFJZCiAjZGVmaW5lIEZUUkFDRV9FTlRSWShjYWxsLCBzdHJ1Y3RfbmFtZSwgdHlwZSwgdHN0cnVjdCwgcHJpbnQpCQlcCiAJCQkJCQkJCQlcCkBAIC0yMjMsNyArMTYyLDcgQEAKIAkuaWQJCQk9IHR5cGUsCQkJCQlcCiAJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKIAkucmF3X2luaXQJCT0gZnRyYWNlX3Jhd19pbml0X2V2ZW50LAkJXAotCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XyMjY2FsbCwJCQlcCisJLnByaW50X2ZtdAkJPSBwcmludCwJCQkJXAogCS5kZWZpbmVfZmllbGRzCQk9IGZ0cmFjZV9kZWZpbmVfZmllbGRzXyMjY2FsbCwJCVwKIH07CQkJCQkJCQkJXAogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKaW5kZXggYjEzNDJjNS4uZTk5OGE4MiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwpAQCAtMTgsNiArMTgsNyBAQAogCXBpZF90CQlsYXN0X3BpZDsKIAlpbnQJCWRlcHRoOwogCWludAkJaWdub3JlOworCXVuc2lnbmVkIGxvbmcJZW50ZXJfZnVuY3NbRlRSQUNFX1JFVEZVTkNfREVQVEhdOwogfTsKIAogc3RydWN0IGZncmFwaF9kYXRhIHsKQEAgLTIxMiwxMyArMjEzLDExIEBACiAJaW50IGNwdTsKIAlpbnQgcGM7CiAKLQlpZiAodW5saWtlbHkoIXRyKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoIWZ0cmFjZV90cmFjZV90YXNrKGN1cnJlbnQpKQogCQlyZXR1cm4gMDsKIAotCWlmICghZnRyYWNlX2dyYXBoX2FkZHIodHJhY2UtPmZ1bmMpKQorCS8qIHRyYWNlIGl0IHdoZW4gaXQgaXMtbmVzdGVkLWluIG9yIGlzIGEgZnVuY3Rpb24gZW5hYmxlZC4gKi8KKwlpZiAoISh0cmFjZS0+ZGVwdGggfHwgZnRyYWNlX2dyYXBoX2FkZHIodHJhY2UtPmZ1bmMpKSkKIAkJcmV0dXJuIDA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0yMzEsOSArMjMwLDYgQEAKIAl9IGVsc2UgewogCQlyZXQgPSAwOwogCX0KLQkvKiBPbmx5IGRvIHRoZSBhdG9taWMgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0ICovCi0JaWYgKCF0ZXN0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KSkKLQkJc2V0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0yODEsMTcgKzI3NywyNCBAQAogCQlwYyA9IHByZWVtcHRfY291bnQoKTsKIAkJX190cmFjZV9ncmFwaF9yZXR1cm4odHIsIHRyYWNlLCBmbGFncywgcGMpOwogCX0KLQlpZiAoIXRyYWNlLT5kZXB0aCkKLQkJY2xlYXJfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOwogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3ZvaWQgc2V0X2dyYXBoX2FycmF5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJZ3JhcGhfYXJyYXkgPSB0cjsKKworCS8qIE1ha2UgZ3JhcGhfYXJyYXkgdmlzaWJsZSBiZWZvcmUgd2Ugc3RhcnQgdHJhY2luZyAqLworCisJc21wX21iKCk7Cit9CisKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCByZXQ7CiAKLQlncmFwaF9hcnJheSA9IHRyOworCXNldF9ncmFwaF9hcnJheSh0cik7CiAJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKCZ0cmFjZV9ncmFwaF9yZXR1cm4sCiAJCQkJICAgICZ0cmFjZV9ncmFwaF9lbnRyeSk7CiAJaWYgKHJldCkKQEAgLTMwMSwxMSArMzA0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBzZXRfZ3JhcGhfYXJyYXkoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlncmFwaF9hcnJheSA9IHRyOwotfQotCiBzdGF0aWMgdm9pZCBncmFwaF90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwpAQCAtNjczLDE1ICs2NzEsMjEgQEAKIAlkdXJhdGlvbiA9IGdyYXBoX3JldC0+cmV0dGltZSAtIGdyYXBoX3JldC0+Y2FsbHRpbWU7CiAKIAlpZiAoZGF0YSkgeworCQlzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhICpjcHVfZGF0YTsKIAkJaW50IGNwdSA9IGl0ZXItPmNwdTsKLQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKKworCQljcHVfZGF0YSA9IHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpOwogCiAJCS8qCiAJCSAqIENvbW1lbnRzIGRpc3BsYXkgYXQgKyAxIHRvIGRlcHRoLiBTaW5jZQogCQkgKiB0aGlzIGlzIGEgbGVhZiBmdW5jdGlvbiwga2VlcCB0aGUgY29tbWVudHMKIAkJICogZXF1YWwgdG8gdGhpcyBkZXB0aC4KIAkJICovCi0JCSpkZXB0aCA9IGNhbGwtPmRlcHRoIC0gMTsKKwkJY3B1X2RhdGEtPmRlcHRoID0gY2FsbC0+ZGVwdGggLSAxOworCisJCS8qIE5vIG5lZWQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uIGFyb3VuZCBmb3IgdGhpcyBkZXB0aCAqLworCQlpZiAoY2FsbC0+ZGVwdGggPCBGVFJBQ0VfUkVURlVOQ19ERVBUSCkKKwkJCWNwdV9kYXRhLT5lbnRlcl9mdW5jc1tjYWxsLT5kZXB0aF0gPSAwOwogCX0KIAogCS8qIE92ZXJoZWFkICovCkBAIC03MjEsMTAgKzcyNSwxNSBAQAogCWludCBpOwogCiAJaWYgKGRhdGEpIHsKKwkJc3RydWN0IGZncmFwaF9jcHVfZGF0YSAqY3B1X2RhdGE7CiAJCWludCBjcHUgPSBpdGVyLT5jcHU7Ci0JCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5kZXB0aCk7CiAKLQkJKmRlcHRoID0gY2FsbC0+ZGVwdGg7CisJCWNwdV9kYXRhID0gcGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSk7CisJCWNwdV9kYXRhLT5kZXB0aCA9IGNhbGwtPmRlcHRoOworCisJCS8qIFNhdmUgdGhpcyBmdW5jdGlvbiBwb2ludGVyIHRvIHNlZSBpZiB0aGUgZXhpdCBtYXRjaGVzICovCisJCWlmIChjYWxsLT5kZXB0aCA8IEZUUkFDRV9SRVRGVU5DX0RFUFRIKQorCQkJY3B1X2RhdGEtPmVudGVyX2Z1bmNzW2NhbGwtPmRlcHRoXSA9IGNhbGwtPmZ1bmM7CiAJfQogCiAJLyogTm8gb3ZlcmhlYWQgKi8KQEAgLTg1NCwxOSArODYzLDI4IEBACiAJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKIAlwaWRfdCBwaWQgPSBlbnQtPnBpZDsKIAlpbnQgY3B1ID0gaXRlci0+Y3B1OworCWludCBmdW5jX21hdGNoID0gMTsKIAlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKGRhdGEpIHsKKwkJc3RydWN0IGZncmFwaF9jcHVfZGF0YSAqY3B1X2RhdGE7CiAJCWludCBjcHUgPSBpdGVyLT5jcHU7Ci0JCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5kZXB0aCk7CisKKwkJY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KTsKIAogCQkvKgogCQkgKiBDb21tZW50cyBkaXNwbGF5IGF0ICsgMSB0byBkZXB0aC4gVGhpcyBpcyB0aGUKIAkJICogcmV0dXJuIGZyb20gYSBmdW5jdGlvbiwgd2Ugbm93IHdhbnQgdGhlIGNvbW1lbnRzCiAJCSAqIHRvIGRpc3BsYXkgYXQgdGhlIHNhbWUgbGV2ZWwgb2YgdGhlIGJyYWNrZXQuCiAJCSAqLwotCQkqZGVwdGggPSB0cmFjZS0+ZGVwdGggLSAxOworCQljcHVfZGF0YS0+ZGVwdGggPSB0cmFjZS0+ZGVwdGggLSAxOworCisJCWlmICh0cmFjZS0+ZGVwdGggPCBGVFJBQ0VfUkVURlVOQ19ERVBUSCkgeworCQkJaWYgKGNwdV9kYXRhLT5lbnRlcl9mdW5jc1t0cmFjZS0+ZGVwdGhdICE9IHRyYWNlLT5mdW5jKQorCQkJCWZ1bmNfbWF0Y2ggPSAwOworCQkJY3B1X2RhdGEtPmVudGVyX2Z1bmNzW3RyYWNlLT5kZXB0aF0gPSAwOworCQl9CiAJfQogCiAJaWYgKHByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIDAsIDApKQpAQCAtODkxLDkgKzkwOSwyMSBAQAogCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCX0KIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIn1cbiIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJLyoKKwkgKiBJZiB0aGUgcmV0dXJuIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyBlbnRyeSwKKwkgKiB0aGVuIHRoZSBlbnRyeSB3YXMgbG9zdC4gSW5zdGVhZCBvZiBqdXN0IHByaW50aW5nCisJICogdGhlICd9JyBhbmQgbGV0dGluZyB0aGUgdXNlciBndWVzcyB3aGF0IGZ1bmN0aW9uIHRoaXMKKwkgKiBiZWxvbmdzIHRvLCB3cml0ZSBvdXQgdGhlIGZ1bmN0aW9uIG5hbWUuCisJICovCisJaWYgKGZ1bmNfbWF0Y2gpIHsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAifVxuIik7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0gZWxzZSB7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIn0gKCVwcylcbiIsICh2b2lkICopdHJhY2UtPmZ1bmMpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CiAKIAkvKiBPdmVycnVuICovCiAJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSUlVOKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggNmVhOTBjMC4uNTA1YzkyMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtOTEsMTEgKzkxLDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfYXJndW1lbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKm51bSkKLXsKLQlyZXR1cm4gcmVnc19nZXRfYXJndW1lbnRfbnRoKHJlZ3MsICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBsb25nKW51bSkpOwotfQotCiBzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfcmV0dmFsdWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJCSAgICAgIHZvaWQgKmR1bW15KQogewpAQCAtMjMxLDkgKzIyNiw3IEBACiB7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfYXJndW1lbnQpCi0JCXJldCA9IHNucHJpbnRmKGJ1ZiwgbiwgIiRhcmclbHUiLCAodW5zaWduZWQgbG9uZylmZi0+ZGF0YSk7Ci0JZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfcmVnaXN0ZXIpIHsKKwlpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfcmVnaXN0ZXIpIHsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJbmFtZSA9IHJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSgodW5zaWduZWQgaW50KSgobG9uZylmZi0+ZGF0YSkpOwogCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICIlJSVzIiwgbmFtZSk7CkBAIC00ODksMTQgKzQ4Miw2IEBACiAJCQl9CiAJCX0gZWxzZQogCQkJcmV0ID0gLUVJTlZBTDsKLQl9IGVsc2UgaWYgKHN0cm5jbXAoYXJnLCAiYXJnIiwgMykgPT0gMCAmJiBpc2RpZ2l0KGFyZ1szXSkpIHsKLQkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYXJnICsgMywgMTAsICZwYXJhbSk7Ci0JCWlmIChyZXQgfHwgcGFyYW0gPiBQQVJBTV9NQVhfQVJHUykKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJZmYtPmZ1bmMgPSBmZXRjaF9hcmd1bWVudDsKLQkJCWZmLT5kYXRhID0gKHZvaWQgKilwYXJhbTsKLQkJfQogCX0gZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogCXJldHVybiByZXQ7CkBAIC02MTEsNyArNTk2LDYgQEAKIAkgKiAgLSBBZGQga3Byb2JlOiBwWzpbR1JQL11FVkVOVF0gS1NZTVsrT0ZGU118S0FERFIgW0ZFVENIQVJHU10KIAkgKiAgLSBBZGQga3JldHByb2JlOiByWzpbR1JQL11FVkVOVF0gS1NZTVsrMF0gW0ZFVENIQVJHU10KIAkgKiBGZXRjaCBhcmdzOgotCSAqICAkYXJnTgk6IGZldGNoIE50aCBvZiBmdW5jdGlvbiBhcmd1bWVudC4gKE46MC0pCiAJICogICRyZXR2YWwJOiBmZXRjaCByZXR1cm4gdmFsdWUKIAkgKiAgJHN0YWNrCTogZmV0Y2ggc3RhY2sgYWRkcmVzcwogCSAqICAkc3RhY2tOCTogZmV0Y2ggTnRoIG9mIHN0YWNrIChOOjAtKQpAQCAtNjUxLDEyICs2MzUsMTIgQEAKIAkJCWV2ZW50ID0gc3RyY2hyKGdyb3VwLCAnLycpICsgMTsKIAkJCWV2ZW50Wy0xXSA9ICdcMCc7CiAJCQlpZiAoc3RybGVuKGdyb3VwKSA9PSAwKSB7Ci0JCQkJcHJfaW5mbygiR3JvdXAgbmFtZSBpcyBub3Qgc3BlY2lmaWxlZFxuIik7CisJCQkJcHJfaW5mbygiR3JvdXAgbmFtZSBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCQlpZiAoc3RybGVuKGV2ZW50KSA9PSAwKSB7Ci0JCQlwcl9pbmZvKCJFdmVudCBuYW1lIGlzIG5vdCBzcGVjaWZpbGVkXG4iKTsKKwkJCXByX2luZm8oIkV2ZW50IG5hbWUgaXMgbm90IHNwZWNpZmllZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTY4OSw3ICs2NzMsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogYW4gYWRkcmVzcyBzcGVjaWZpZWQgKi8KLQkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoJmFyZ3ZbMF1bMl0sIDAsICh1bnNpZ25lZCBsb25nICopJmFkZHIpOworCQlyZXQgPSBzdHJpY3Rfc3RydG91bCgmYXJndlsxXVswXSwgMCwgKHVuc2lnbmVkIGxvbmcgKikmYWRkcik7CiAJCWlmIChyZXQpIHsKIAkJCXByX2luZm8oIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzLlxuIik7CiAJCQlyZXR1cm4gcmV0OwpAQCAtOTU4LDcgKzk0Miw3IEBACiB9OwogCiAvKiBLcHJvYmUgaGFuZGxlciAqLwotc3RhdGljIF9fa3Byb2JlcyBpbnQga3Byb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gY29udGFpbmVyX29mKGtwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwLmtwKTsKIAlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5ICplbnRyeTsKQEAgLTk3OCw3ICs5NjIsNyBAQAogCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsIGNhbGwtPmlkLCBzaXplLAogCQkJCQkJICBpcnFfZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+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+Y2FsbC5wcmludF9mbXQpOwogfQogCiAvKiBNYWtlIGEgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGNvbnRyb2xpbmcgcHJvYmUgcG9pbnRzICovCkBAIC0xNTIzLDI4ICsxNDE4LDY3IEBACiAKIHN0YXRpYyBfX2luaXQgaW50IGtwcm9iZV90cmFjZV9zZWxmX3Rlc3RzX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQsIHdhcm4gPSAwOwogCWludCAoKnRhcmdldCkoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cDsKIAogCXRhcmdldCA9IGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQ7CiAKIAlwcl9pbmZvKCJUZXN0aW5nIGtwcm9iZSB0cmFjaW5nOiAiKTsKIAogCXJldCA9IGNvbW1hbmRfdHJhY2VfcHJvYmUoInA6dGVzdHByb2JlIGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQgIgotCQkJCSAgIiRhcmcxICRhcmcyICRhcmczICRhcmc0ICRzdGFjayAkc3RhY2swIik7Ci0JaWYgKFdBUk5fT05fT05DRShyZXQpKQotCQlwcl93YXJuaW5nKCJlcnJvciBlbmFibGluZyBmdW5jdGlvbiBlbnRyeVxuIik7CisJCQkJICAiJHN0YWNrICRzdGFjazAgKzAoJHN0YWNrKSIpOworCWlmIChXQVJOX09OX09OQ0UocmV0KSkgeworCQlwcl93YXJuaW5nKCJlcnJvciBvbiBwcm9iaW5nIGZ1bmN0aW9uIGVudHJ5LlxuIik7CisJCXdhcm4rKzsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgdHJhY2UgcG9pbnQgKi8KKwkJdHAgPSBmaW5kX3Byb2JlX2V2ZW50KCJ0ZXN0cHJvYmUiLCBLUFJPQkVfRVZFTlRfU1lTVEVNKTsKKwkJaWYgKFdBUk5fT05fT05DRSh0cCA9PSBOVUxMKSkgeworCQkJcHJfd2FybmluZygiZXJyb3Igb24gZ2V0dGluZyBuZXcgcHJvYmUuXG4iKTsKKwkJCXdhcm4rKzsKKwkJfSBlbHNlCisJCQlwcm9iZV9ldmVudF9lbmFibGUoJnRwLT5jYWxsKTsKKwl9CiAKIAlyZXQgPSBjb21tYW5kX3RyYWNlX3Byb2JlKCJyOnRlc3Rwcm9iZTIga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldCAiCiAJCQkJICAiJHJldHZhbCIpOwotCWlmIChXQVJOX09OX09OQ0UocmV0KSkKLQkJcHJfd2FybmluZygiZXJyb3IgZW5hYmxpbmcgZnVuY3Rpb24gcmV0dXJuXG4iKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpIHsKKwkJcHJfd2FybmluZygiZXJyb3Igb24gcHJvYmluZyBmdW5jdGlvbiByZXR1cm4uXG4iKTsKKwkJd2FybisrOworCX0gZWxzZSB7CisJCS8qIEVuYWJsZSB0cmFjZSBwb2ludCAqLworCQl0cCA9IGZpbmRfcHJvYmVfZXZlbnQoInRlc3Rwcm9iZTIiLCBLUFJPQkVfRVZFTlRfU1lTVEVNKTsKKwkJaWYgKFdBUk5fT05fT05DRSh0cCA9PSBOVUxMKSkgeworCQkJcHJfd2FybmluZygiZXJyb3Igb24gZ2V0dGluZyBuZXcgcHJvYmUuXG4iKTsKKwkJCXdhcm4rKzsKKwkJfSBlbHNlCisJCQlwcm9iZV9ldmVudF9lbmFibGUoJnRwLT5jYWxsKTsKKwl9CisKKwlpZiAod2FybikKKwkJZ290byBlbmQ7CiAKIAlyZXQgPSB0YXJnZXQoMSwgMiwgMywgNCwgNSwgNik7CiAKLQljbGVhbnVwX2FsbF9wcm9iZXMoKTsKKwlyZXQgPSBjb21tYW5kX3RyYWNlX3Byb2JlKCItOnRlc3Rwcm9iZSIpOworCWlmIChXQVJOX09OX09OQ0UocmV0KSkgeworCQlwcl93YXJuaW5nKCJlcnJvciBvbiBkZWxldGluZyBhIHByb2JlLlxuIik7CisJCXdhcm4rKzsKKwl9CiAKLQlwcl9jb250KCJPS1xuIik7CisJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZSgiLTp0ZXN0cHJvYmUyIik7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKSB7CisJCXByX3dhcm5pbmcoImVycm9yIG9uIGRlbGV0aW5nIGEgcHJvYmUuXG4iKTsKKwkJd2FybisrOworCX0KKworZW5kOgorCWNsZWFudXBfYWxsX3Byb2JlcygpOworCWlmICh3YXJuKQorCQlwcl9jb250KCJORzogU29tZSB0ZXN0cyBhcmUgZmFpbGVkLiBQbGVhc2UgY2hlY2sgdGhlbS5cbiIpOworCWVsc2UKKwkJcHJfY29udCgiT0tcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCmluZGV4IDY3OGE1MTIuLmY0YmM5YjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7CiAJY2hhciBidWZbNjRdOwogCWludCByZXQ7CisJaW50IGNwdTsKIAogCWlmIChjb3VudCA+PSBzaXplb2YoYnVmKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzEsOSArMTcyLDIwIEBACiAJCXJldHVybiByZXQ7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKgorCSAqIEluIGNhc2Ugd2UgdHJhY2UgaW5zaWRlIGFyY2hfc3Bpbl9sb2NrKCkgb3IgYWZ0ZXIgKE5NSSksCisJICogd2Ugd2lsbCBjYXVzZSBjaXJjdWxhciBsb2NrLCBzbyB3ZSBhbHNvIG5lZWQgdG8gaW5jcmVhc2UKKwkgKiB0aGUgcGVyY3B1IHRyYWNlX2FjdGl2ZSBoZXJlLgorCSAqLworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlwZXJfY3B1KHRyYWNlX2FjdGl2ZSwgY3B1KSsrOworCiAJYXJjaF9zcGluX2xvY2soJm1heF9zdGFja19sb2NrKTsKIAkqcHRyID0gdmFsOwogCWFyY2hfc3Bpbl91bmxvY2soJm1heF9zdGFja19sb2NrKTsKKworCXBlcl9jcHUodHJhY2VfYWN0aXZlLCBjcHUpLS07CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMjA2LDcgKzIxOCwxMyBAQAogCiBzdGF0aWMgdm9pZCAqdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogeworCWludCBjcHU7CisKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXBlcl9jcHUodHJhY2VfYWN0aXZlLCBjcHUpKys7CisKIAlhcmNoX3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOwogCiAJaWYgKCpwb3MgPT0gMCkKQEAgLTIxNyw3ICsyMzUsMTMgQEAKIAogc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKIHsKKwlpbnQgY3B1OworCiAJYXJjaF9zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXBlcl9jcHUodHJhY2VfYWN0aXZlLCBjcHUpLS07CisKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKaW5kZXggNzUyODlmMy4uY2JhNDdkNyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKQEAgLTE0Myw3MCArMTQzLDY1IEBACiAJCSN0eXBlLCAjbmFtZSwgb2Zmc2V0b2YodHlwZW9mKHRyYWNlKSwgbmFtZSksCQlcCiAJCXNpemVvZih0cmFjZS5uYW1lKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkKIAotaW50IHN5c2NhbGxfZW50ZXJfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IHRyYWNlX3NlcSAqcykKK3N0YXRpYworaW50ICBfX3NldF9lbnRlcl9wcmludF9mbXQoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5LCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnkgPSBjYWxsLT5kYXRhOwotCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyIHRyYWNlOwotCWludCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciwgYXJncyk7CisJaW50IHBvcyA9IDA7CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1OyIKLQkJCSAgICAgICAiXHRzaWduZWQ6JXU7XG4iLAotCQkJICAgICAgIFNZU0NBTExfRklFTEQoaW50LCBucikpOwotCWlmICghcmV0KQotCQlyZXR1cm4gMDsKKwkvKiBXaGVuIGxlbj0wLCB3ZSBqdXN0IGNhbGN1bGF0ZSB0aGUgbmVlZGVkIGxlbmd0aCAqLworI2RlZmluZSBMRU5fT1JfWkVSTyAobGVuID8gbGVuIC0gcG9zIDogMCkKKworCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiXCIiKTsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgeworCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIiVzOiAweCUlMCV6dWx4JXMiLAorCQkJCWVudHJ5LT5hcmdzW2ldLCBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJaSA9PSBlbnRyeS0+bmJfYXJncyAtIDEgPyAiIiA6ICIsICIpOworCX0KKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIlwiIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiVzICVzOyIsIGVudHJ5LT50eXBlc1tpXSwKLQkJCQkgICAgICAgIGVudHJ5LT5hcmdzW2ldKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRvZmZzZXQ6JWQ7XHRzaXplOiV6dTsiCi0JCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIsIG9mZnNldCwKLQkJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAotCQkJCSAgICAgICBpc19zaWduZWRfdHlwZSh1bnNpZ25lZCBsb25nKSk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIDA7Ci0JCW9mZnNldCArPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLAorCQkJCSIsICgodW5zaWduZWQgbG9uZykoUkVDLT4lcykpIiwgZW50cnktPmFyZ3NbaV0pOwogCX0KIAotCXRyYWNlX3NlcV9wdXRzKHMsICJcbnByaW50IGZtdDogXCIiKTsKLQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogMHglJTAlenVseCVzIiwgZW50cnktPmFyZ3NbaV0sCi0JCQkJICAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyksCi0JCQkJCWkgPT0gZW50cnktPm5iX2FyZ3MgLSAxID8gIiIgOiAiLCAiKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JdHJhY2Vfc2VxX3B1dGMocywgJyInKTsKKyN1bmRlZiBMRU5fT1JfWkVSTwogCi0JZm9yIChpID0gMDsgaSA8IGVudHJ5LT5uYl9hcmdzOyBpKyspIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiLCAoKHVuc2lnbmVkIGxvbmcpKFJFQy0+JXMpKSIsCi0JCQkJICAgICAgIGVudHJ5LT5hcmdzW2ldKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CisJLyogcmV0dXJuIHRoZSBsZW5ndGggb2YgcHJpbnRfZm10ICovCisJcmV0dXJuIHBvczsKIH0KIAotaW50IHN5c2NhbGxfZXhpdF9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQorc3RhdGljIGludCBzZXRfc3lzY2FsbF9wcmludF9mbXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQogewotCWludCByZXQ7Ci0Jc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCB0cmFjZTsKKwljaGFyICpwcmludF9mbXQ7CisJaW50IGxlbjsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnkgPSBjYWxsLT5kYXRhOwogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAotCQkJICAgICAgICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1OyIKLQkJCSAgICAgICAiXHRzaWduZWQ6JXU7XG4iCi0JCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7IgotCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIsCi0JCQkgICAgICAgU1lTQ0FMTF9GSUVMRChpbnQsIG5yKSwKLQkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGxvbmcsIHJldCkpOwotCWlmICghcmV0KQorCWlmIChlbnRyeS0+ZW50ZXJfZXZlbnQgIT0gY2FsbCkgeworCQljYWxsLT5wcmludF9mbXQgPSAiXCIweCVseFwiLCBSRUMtPnJldCI7CiAJCXJldHVybiAwOworCX0KIAotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogXCIweCUlbHhcIiwgUkVDLT5yZXRcbiIpOworCS8qIEZpcnN0OiBjYWxsZWQgd2l0aCAwIGxlbmd0aCB0byBjYWxjdWxhdGUgdGhlIG5lZWRlZCBsZW5ndGggKi8KKwlsZW4gPSBfX3NldF9lbnRlcl9wcmludF9mbXQoZW50cnksIE5VTEwsIDApOworCisJcHJpbnRfZm10ID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaW50X2ZtdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTZWNvbmQ6IGFjdHVhbGx5IHdyaXRlIHRoZSBAcHJpbnRfZm10ICovCisJX19zZXRfZW50ZXJfcHJpbnRfZm10KGVudHJ5LCBwcmludF9mbXQsIGxlbiArIDEpOworCWNhbGwtPnByaW50X2ZtdCA9IHByaW50X2ZtdDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3N5c2NhbGxfcHJpbnRfZm10KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnkgPSBjYWxsLT5kYXRhOworCisJaWYgKGVudHJ5LT5lbnRlcl9ldmVudCA9PSBjYWxsKQorCQlrZnJlZShjYWxsLT5wcmludF9mbXQpOwogfQogCiBpbnQgc3lzY2FsbF9lbnRlcl9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKQEAgLTM4NiwxMiArMzgxLDIyIEBACiB7CiAJaW50IGlkOwogCi0JaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoY2FsbC0+ZXZlbnQpOwotCWlmICghaWQpCi0JCXJldHVybiAtRU5PREVWOwotCWNhbGwtPmlkID0gaWQ7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhbGwtPmZpZWxkcyk7Ci0JcmV0dXJuIDA7CisJaWYgKHNldF9zeXNjYWxsX3ByaW50X2ZtdChjYWxsKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWQgPSB0cmFjZV9ldmVudF9yYXdfaW5pdChjYWxsKTsKKworCWlmIChpZCA8IDApIHsKKwkJZnJlZV9zeXNjYWxsX3ByaW50X2ZtdChjYWxsKTsKKwkJcmV0dXJuIGlkOworCX0KKworCXJldHVybiBpZDsKK30KKwordW5zaWduZWQgbG9uZyBfX2luaXQgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylzeXNfY2FsbF90YWJsZVtucl07CiB9CiAKIGludCBfX2luaXQgaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKQEAgLTQyMSw3ICs0MjYsNyBAQAogfQogY29yZV9pbml0Y2FsbChpbml0X2Z0cmFjZV9zeXNjYWxscyk7CiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiBzdGF0aWMgREVDTEFSRV9CSVRNQVAoZW5hYmxlZF9wcm9mX2VudGVyX3N5c2NhbGxzLCBOUl9zeXNjYWxscyk7CiBzdGF0aWMgREVDTEFSRV9CSVRNQVAoZW5hYmxlZF9wcm9mX2V4aXRfc3lzY2FsbHMsIE5SX3N5c2NhbGxzKTsKQEAgLTQzMywxMiArNDM4LDkgQEAKIAlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzX2RhdGE7CiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKnJlYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNoYXIgKnRyYWNlX2J1ZjsKLQljaGFyICpyYXdfZGF0YTsKIAlpbnQgc3lzY2FsbF9ucjsKIAlpbnQgcmN0eDsKIAlpbnQgc2l6ZTsKLQlpbnQgY3B1OwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOwogCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9wcm9mX2VudGVyX3N5c2NhbGxzKSkKQEAgLTQ1NywzNyArNDU5LDE1IEBACiAJCSAgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCiAJCXJldHVybjsKIAotCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKilmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShzaXplLAorCQkJCXN5c19kYXRhLT5lbnRlcl9ldmVudC0+aWQsICZyY3R4LCAmZmxhZ3MpOworCWlmICghcmVjKQorCQlyZXR1cm47CiAKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwotCWlmIChyY3R4IDwgMCkKLQkJZ290byBlbmRfcmVjdXJzaW9uOwotCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKLQotCWlmICghdHJhY2VfYnVmKQotCQlnb3RvIGVuZDsKLQotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBjcHUpOwotCi0JLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KLQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwotCi0JcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICopIHJhd19kYXRhOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJnJlYy0+ZW50LCAwLCAwKTsKLQlyZWMtPmVudC50eXBlID0gc3lzX2RhdGEtPmVudGVyX2V2ZW50LT5pZDsKIAlyZWMtPm5yID0gc3lzY2FsbF9ucjsKIAlzeXNjYWxsX2dldF9hcmd1bWVudHMoY3VycmVudCwgcmVncywgMCwgc3lzX2RhdGEtPm5iX2FyZ3MsCiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmcmVjLT5hcmdzKTsKLQlwZXJmX3RwX2V2ZW50KHN5c19kYXRhLT5lbnRlcl9ldmVudC0+aWQsIDAsIDEsIHJlYywgc2l6ZSk7Ci0KLWVuZDoKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwotZW5kX3JlY3Vyc2lvbjoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdChyZWMsIHNpemUsIHJjdHgsIDAsIDEsIGZsYWdzKTsKIH0KIAogaW50IHByb2Zfc3lzZW50ZXJfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKQEAgLTUzMSwxMSArNTExLDggQEAKIAlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICpyZWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3lzY2FsbF9ucjsKLQljaGFyICp0cmFjZV9idWY7Ci0JY2hhciAqcmF3X2RhdGE7CiAJaW50IHJjdHg7CiAJaW50IHNpemU7Ci0JaW50IGNwdTsKIAogCXN5c2NhbGxfbnIgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCByZWdzKTsKIAlpZiAoIXRlc3RfYml0KHN5c2NhbGxfbnIsIGVuYWJsZWRfcHJvZl9leGl0X3N5c2NhbGxzKSkKQEAgLTU1NywzOCArNTM0LDE1IEBACiAJCSJleGl0IGV2ZW50IGhhcyBncm93biBhYm92ZSBwcm9maWxlIGJ1ZmZlciBzaXplIikpCiAJCXJldHVybjsKIAotCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqKWZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKHNpemUsCisJCQkJc3lzX2RhdGEtPmV4aXRfZXZlbnQtPmlkLCAmcmN0eCwgJmZsYWdzKTsKKwlpZiAoIXJlYykKKwkJcmV0dXJuOwogCi0JcmN0eCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsKLQlpZiAocmN0eCA8IDApCi0JCWdvdG8gZW5kX3JlY3Vyc2lvbjsKLQotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7Ci0KLQlpZiAoIXRyYWNlX2J1ZikKLQkJZ290byBlbmQ7Ci0KLQlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHRyYWNlX2J1ZiwgY3B1KTsKLQotCS8qIHplcm8gdGhlIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbiB0byBub3QgbGVhayBzdGFjayB0byB1c2VyICovCi0JKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKLQotCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICopcmF3X2RhdGE7Ci0KLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZyZWMtPmVudCwgMCwgMCk7Ci0JcmVjLT5lbnQudHlwZSA9IHN5c19kYXRhLT5leGl0X2V2ZW50LT5pZDsKIAlyZWMtPm5yID0gc3lzY2FsbF9ucjsKIAlyZWMtPnJldCA9IHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzKTsKIAotCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmV4aXRfZXZlbnQtPmlkLCAwLCAxLCByZWMsIHNpemUpOwotCi1lbmQ6Ci0JcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKLWVuZF9yZWN1cnNpb246Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWZ0cmFjZV9wZXJmX2J1Zl9zdWJtaXQocmVjLCBzaXplLCByY3R4LCAwLCAxLCBmbGFncyk7CiB9CiAKIGludCBwcm9mX3N5c2V4aXRfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKQEAgLTYwMyw3ICs1NTcsNyBAQAogCQlyZXQgPSByZWdpc3Rlcl90cmFjZV9zeXNfZXhpdChwcm9mX3N5c2NhbGxfZXhpdCk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIgotCQkJCSJzeXNjYWxsIGVudHJ5IHRyYWNlIHBvaW50Iik7CisJCQkJInN5c2NhbGwgZXhpdCB0cmFjZSBwb2ludCIpOwogCX0gZWxzZSB7CiAJCXNldF9iaXQobnVtLCBlbmFibGVkX3Byb2ZfZXhpdF9zeXNjYWxscyk7CiAJCXN5c19wcm9mX3JlZmNvdW50X2V4aXQrKzsKQEAgLTYyNiw2ICs1ODAsNSBAQAogCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKIH0KIAotI2VuZGlmCi0KKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggNDZkMDE2NS4uNzY2NDY3YiAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC01Niw5ICs1Niw2IEBACiAJLnNpZ3BlbmRpbmcJPSBBVE9NSUNfSU5JVCgwKSwKIAkubG9ja2VkX3NobSAgICAgPSAwLAogCS51c2VyX25zCT0gJmluaXRfdXNlcl9ucywKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCS50ZwkJPSAmaW5pdF90YXNrX2dyb3VwLAotI2VuZGlmCiB9OwogCiAvKgpAQCAtNzUsMjY4ICs3Miw2IEBACiAJcHV0X3VzZXJfbnModXAtPnVzZXJfbnMpOwogfQogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQotc3RhdGljIHZvaWQgc2NoZWRfZGVzdHJveV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApCi17Ci0Jc2NoZWRfZGVzdHJveV9ncm91cCh1cC0+dGcpOwotfQotCi1zdGF0aWMgaW50IHNjaGVkX2NyZWF0ZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApCi17Ci0JaW50IHJjID0gMDsKLQotCXVwLT50ZyA9IHNjaGVkX2NyZWF0ZV9ncm91cCgmcm9vdF90YXNrX2dyb3VwKTsKLQlpZiAoSVNfRVJSKHVwLT50ZykpCi0JCXJjID0gLUVOT01FTTsKLQotCXNldF90Z191aWQodXApOwotCi0JcmV0dXJuIHJjOwotfQotCi0jZWxzZQkvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwotCi1zdGF0aWMgdm9pZCBzY2hlZF9kZXN0cm95X3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkgeyB9Ci1zdGF0aWMgaW50IHNjaGVkX2NyZWF0ZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApIHsgcmV0dXJuIDA7IH0KLQotI2VuZGlmCS8qIENPTkZJR19VU0VSX1NDSEVEICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0VSX1NDSEVEKSAmJiBkZWZpbmVkKENPTkZJR19TWVNGUykKLQotc3RhdGljIHN0cnVjdCB1c2VyX3N0cnVjdCAqdWlkX2hhc2hfZmluZCh1aWRfdCB1aWQsIHN0cnVjdCBobGlzdF9oZWFkICpoYXNoZW50KQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaDsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHVzZXIsIGgsIGhhc2hlbnQsIHVpZGhhc2hfbm9kZSkgewotCQlpZiAodXNlci0+dWlkID09IHVpZCkgewotCQkJLyogcG9zc2libHkgcmVzdXJyZWN0IGFuICJhbG1vc3QgZGVsZXRlZCIgb2JqZWN0ICovCi0JCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnVzZXItPl9fY291bnQpID09IDEpCi0JCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmdXNlci0+d29yayk7Ci0JCQlyZXR1cm4gdXNlcjsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGtzZXQgKnVpZHNfa3NldDsgLyogcmVwcmVzZW50cyB0aGUgL3N5cy9rZXJuZWwvdWlkcy8gZGlyZWN0b3J5ICovCi1zdGF0aWMgREVGSU5FX01VVEVYKHVpZHNfbXV0ZXgpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdWlkc19tdXRleF9sb2NrKHZvaWQpCi17Ci0JbXV0ZXhfbG9jaygmdWlkc19tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aWRzX211dGV4X3VubG9jayh2b2lkKQotewotCW11dGV4X3VubG9jaygmdWlkc19tdXRleCk7Ci19Ci0KLS8qIHVpZCBkaXJlY3RvcnkgYXR0cmlidXRlcyAqLwotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi1zdGF0aWMgc3NpemVfdCBjcHVfc2hhcmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHNjaGVkX2dyb3VwX3NoYXJlcyh1cC0+dGcpKTsKLX0KLQotc3RhdGljIHNzaXplX3QgY3B1X3NoYXJlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0JdW5zaWduZWQgbG9uZyBzaGFyZXM7Ci0JaW50IHJjOwotCi0Jc3NjYW5mKGJ1ZiwgIiVsdSIsICZzaGFyZXMpOwotCi0JcmMgPSBzY2hlZF9ncm91cF9zZXRfc2hhcmVzKHVwLT50Zywgc2hhcmVzKTsKLQotCXJldHVybiAocmMgPyByYyA6IHNpemUpOwotfQotCi1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNwdV9zaGFyZV9hdHRyID0KLQlfX0FUVFIoY3B1X3NoYXJlLCAwNjQ0LCBjcHVfc2hhcmVzX3Nob3csIGNwdV9zaGFyZXNfc3RvcmUpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLXN0YXRpYyBzc2l6ZV90IGNwdV9ydF9ydW50aW1lX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkJCSAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHNjaGVkX2dyb3VwX3J0X3J1bnRpbWUodXAtPnRnKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNwdV9ydF9ydW50aW1lX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCXVuc2lnbmVkIGxvbmcgcnRfcnVudGltZTsKLQlpbnQgcmM7Ci0KLQlzc2NhbmYoYnVmLCAiJWxkIiwgJnJ0X3J1bnRpbWUpOwotCi0JcmMgPSBzY2hlZF9ncm91cF9zZXRfcnRfcnVudGltZSh1cC0+dGcsIHJ0X3J1bnRpbWUpOwotCi0JcmV0dXJuIChyYyA/IHJjIDogc2l6ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY3B1X3J0X3J1bnRpbWVfYXR0ciA9Ci0JX19BVFRSKGNwdV9ydF9ydW50aW1lLCAwNjQ0LCBjcHVfcnRfcnVudGltZV9zaG93LCBjcHVfcnRfcnVudGltZV9zdG9yZSk7Ci0KLXN0YXRpYyBzc2l6ZV90IGNwdV9ydF9wZXJpb2Rfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgc2NoZWRfZ3JvdXBfcnRfcGVyaW9kKHVwLT50ZykpOwotfQotCi1zdGF0aWMgc3NpemVfdCBjcHVfcnRfcGVyaW9kX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCXVuc2lnbmVkIGxvbmcgcnRfcGVyaW9kOwotCWludCByYzsKLQotCXNzY2FuZihidWYsICIlbHUiLCAmcnRfcGVyaW9kKTsKLQotCXJjID0gc2NoZWRfZ3JvdXBfc2V0X3J0X3BlcmlvZCh1cC0+dGcsIHJ0X3BlcmlvZCk7Ci0KLQlyZXR1cm4gKHJjID8gcmMgOiBzaXplKTsKLX0KLQotc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjcHVfcnRfcGVyaW9kX2F0dHIgPQotCV9fQVRUUihjcHVfcnRfcGVyaW9kLCAwNjQ0LCBjcHVfcnRfcGVyaW9kX3Nob3csIGNwdV9ydF9wZXJpb2Rfc3RvcmUpOwotI2VuZGlmCi0KLS8qIGRlZmF1bHQgYXR0cmlidXRlcyBwZXIgdWlkIGRpcmVjdG9yeSAqLwotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnVpZHNfYXR0cmlidXRlc1tdID0gewotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi0JJmNwdV9zaGFyZV9hdHRyLmF0dHIsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQkmY3B1X3J0X3J1bnRpbWVfYXR0ci5hdHRyLAotCSZjcHVfcnRfcGVyaW9kX2F0dHIuYXR0ciwKLSNlbmRpZgotCU5VTEwKLX07Ci0KLS8qIHRoZSBsaWZldGltZSBvZiB1c2VyX3N0cnVjdCBpcyBub3QgbWFuYWdlZCBieSB0aGUgY29yZSAobm93KSAqLwotc3RhdGljIHZvaWQgdWlkc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgdWlkc19rdHlwZSA9IHsKLQkuc3lzZnNfb3BzID0gJmtvYmpfc3lzZnNfb3BzLAotCS5kZWZhdWx0X2F0dHJzID0gdWlkc19hdHRyaWJ1dGVzLAotCS5yZWxlYXNlID0gdWlkc19yZWxlYXNlLAotfTsKLQotLyoKLSAqIENyZWF0ZSAvc3lzL2tlcm5lbC91aWRzLzx1aWQ+L2NwdV9zaGFyZSBmaWxlIGZvciB0aGlzIHVzZXIKLSAqIFdlIGRvIG5vdCBjcmVhdGUgdGhpcyBmaWxlIGZvciB1c2VycyBpbiBhIHVzZXIgbmFtZXNwYWNlICh1bnRpbAotICogc3lzZnMgdGFnZ2luZyBpcyBpbXBsZW1lbnRlZCkuCi0gKgotICogU2VlIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMudHh0IGZvciByYW1pZmljYXRpb25zLgotICovCi1zdGF0aWMgaW50IHVpZHNfdXNlcl9jcmVhdGUoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkKLXsKLQlzdHJ1Y3Qga29iamVjdCAqa29iaiA9ICZ1cC0+a29iajsKLQlpbnQgZXJyb3I7Ci0KLQltZW1zZXQoa29iaiwgMCwgc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSk7Ci0JaWYgKHVwLT51c2VyX25zICE9ICZpbml0X3VzZXJfbnMpCi0JCXJldHVybiAwOwotCWtvYmotPmtzZXQgPSB1aWRzX2tzZXQ7Ci0JZXJyb3IgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChrb2JqLCAmdWlkc19rdHlwZSwgTlVMTCwgIiVkIiwgdXAtPnVpZCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWtvYmplY3RfcHV0KGtvYmopOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0Ja29iamVjdF91ZXZlbnQoa29iaiwgS09CSl9BREQpOwotZG9uZToKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIGNyZWF0ZSB0aGVzZSBlbnRyaWVzIGluIHN5c2ZzOgotICogCSIvc3lzL2tlcm5lbC91aWRzIiBkaXJlY3RvcnkKLSAqIAkiL3N5cy9rZXJuZWwvdWlkcy8wIiBkaXJlY3RvcnkgKGZvciByb290IHVzZXIpCi0gKiAJIi9zeXMva2VybmVsL3VpZHMvMC9jcHVfc2hhcmUiIGZpbGUgKGZvciByb290IHVzZXIpCi0gKi8KLWludCBfX2luaXQgdWlkc19zeXNmc19pbml0KHZvaWQpCi17Ci0JdWlkc19rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgidWlkcyIsIE5VTEwsIGtlcm5lbF9rb2JqKTsKLQlpZiAoIXVpZHNfa3NldCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gdWlkc191c2VyX2NyZWF0ZSgmcm9vdF91c2VyKTsKLX0KLQotLyogZGVsYXllZCB3b3JrIGZ1bmN0aW9uIHRvIHJlbW92ZSBzeXNmcyBkaXJlY3RvcnkgZm9yIGEgdXNlciBhbmQgZnJlZSB1cAotICogY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmVzLgotICovCi1zdGF0aWMgdm9pZCBjbGVhbnVwX3VzZXJfc3RydWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB1c2VyX3N0cnVjdCwgd29yay53b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZW1vdmVfdXNlciA9IDA7Ci0KLQkvKiBNYWtlIHVpZF9oYXNoX3JlbW92ZSgpICsgc3lzZnNfcmVtb3ZlX2ZpbGUoKSArIGtvYmplY3RfZGVsKCkKLQkgKiBhdG9taWMuCi0JICovCi0JdWlkc19tdXRleF9sb2NrKCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZ1cC0+X19jb3VudCkgPT0gMCkgewotCQl1aWRfaGFzaF9yZW1vdmUodXApOwotCQlyZW1vdmVfdXNlciA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFyZW1vdmVfdXNlcikKLQkJZ290byBkb25lOwotCi0JaWYgKHVwLT51c2VyX25zID09ICZpbml0X3VzZXJfbnMpIHsKLQkJa29iamVjdF91ZXZlbnQoJnVwLT5rb2JqLCBLT0JKX1JFTU9WRSk7Ci0JCWtvYmplY3RfZGVsKCZ1cC0+a29iaik7Ci0JCWtvYmplY3RfcHV0KCZ1cC0+a29iaik7Ci0JfQotCi0Jc2NoZWRfZGVzdHJveV91c2VyKHVwKTsKLQlrZXlfcHV0KHVwLT51aWRfa2V5cmluZyk7Ci0Ja2V5X3B1dCh1cC0+c2Vzc2lvbl9rZXlyaW5nKTsKLQlrbWVtX2NhY2hlX2ZyZWUodWlkX2NhY2hlcCwgdXApOwotCi1kb25lOgotCXVpZHNfbXV0ZXhfdW5sb2NrKCk7Ci19Ci0KLS8qIElSUXMgYXJlIGRpc2FibGVkIGFuZCB1aWRoYXNoX2xvY2sgaXMgaGVsZCB1cG9uIGZ1bmN0aW9uIGVudHJ5LgotICogSVJRIHN0YXRlIChhcyBzdG9yZWQgaW4gZmxhZ3MpIGlzIHJlc3RvcmVkIGFuZCB1aWRoYXNoX2xvY2sgcmVsZWFzZWQKLSAqIHVwb24gZnVuY3Rpb24gZXhpdC4KLSAqLwotc3RhdGljIHZvaWQgZnJlZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnVwLT53b3JrLCBjbGVhbnVwX3VzZXJfc3RydWN0KTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnVwLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKLX0KLQotI2Vsc2UJLyogQ09ORklHX1VTRVJfU0NIRUQgJiYgQ09ORklHX1NZU0ZTICovCi0KIHN0YXRpYyBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVpZF9oYXNoX2ZpbmQodWlkX3QgdWlkLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaGVudCkKIHsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CkBAIC0zNTIsMTEgKzg3LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IHVpZHNfc3lzZnNfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCB1aWRzX3VzZXJfY3JlYXRlKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aWRzX211dGV4X2xvY2sodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdWlkc19tdXRleF91bmxvY2sodm9pZCkgeyB9Ci0KIC8qIElSUXMgYXJlIGRpc2FibGVkIGFuZCB1aWRoYXNoX2xvY2sgaXMgaGVsZCB1cG9uIGZ1bmN0aW9uIGVudHJ5LgogICogSVJRIHN0YXRlIChhcyBzdG9yZWQgaW4gZmxhZ3MpIGlzIHJlc3RvcmVkIGFuZCB1aWRoYXNoX2xvY2sgcmVsZWFzZWQKICAqIHVwb24gZnVuY3Rpb24gZXhpdC4KQEAgLTM2NSwzMiArOTUsMTEgQEAKIHsKIAl1aWRfaGFzaF9yZW1vdmUodXApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwotCXNjaGVkX2Rlc3Ryb3lfdXNlcih1cCk7CiAJa2V5X3B1dCh1cC0+dWlkX2tleXJpbmcpOwogCWtleV9wdXQodXAtPnNlc3Npb25fa2V5cmluZyk7CiAJa21lbV9jYWNoZV9mcmVlKHVpZF9jYWNoZXAsIHVwKTsKIH0KIAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19SVF9HUk9VUF9TQ0hFRCkgJiYgZGVmaW5lZChDT05GSUdfVVNFUl9TQ0hFRCkKLS8qCi0gKiBXZSBuZWVkIHRvIGNoZWNrIGlmIGEgc2V0dWlkIGNhbiB0YWtlIHBsYWNlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQKLSAqIGJlZm9yZSBzdWNjZXNzZnVsbHkgY29tcGxldGluZyB0aGUgc2V0dWlkLgotICovCi1pbnQgdGFza19jYW5fc3dpdGNoX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0KLQlyZXR1cm4gc2NoZWRfcnRfY2FuX2F0dGFjaCh1cC0+dGcsIHRzayk7Ci0KLX0KLSNlbHNlCi1pbnQgdGFza19jYW5fc3dpdGNoX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQogLyoKICAqIExvY2F0ZSB0aGUgdXNlcl9zdHJ1Y3QgZm9yIHRoZSBwYXNzZWQgVUlELiAgSWYgZm91bmQsIHRha2UgYSByZWYgb24gaXQuICBUaGUKICAqIGNhbGxlciBtdXN0IHVuZG8gdGhhdCByZWYgd2l0aCBmcmVlX3VpZCgpLgpAQCAtNDMxLDggKzE0MCw2IEBACiAJLyogTWFrZSB1aWRfaGFzaF9maW5kKCkgKyB1aWRzX3VzZXJfY3JlYXRlKCkgKyB1aWRfaGFzaF9pbnNlcnQoKQogCSAqIGF0b21pYy4KIAkgKi8KLQl1aWRzX211dGV4X2xvY2soKTsKLQogCXNwaW5fbG9ja19pcnEoJnVpZGhhc2hfbG9jayk7CiAJdXAgPSB1aWRfaGFzaF9maW5kKHVpZCwgaGFzaGVudCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ1aWRoYXNoX2xvY2spOwpAQCAtNDQ1LDE0ICsxNTIsOCBAQAogCQluZXctPnVpZCA9IHVpZDsKIAkJYXRvbWljX3NldCgmbmV3LT5fX2NvdW50LCAxKTsKIAotCQlpZiAoc2NoZWRfY3JlYXRlX3VzZXIobmV3KSA8IDApCi0JCQlnb3RvIG91dF9mcmVlX3VzZXI7Ci0KIAkJbmV3LT51c2VyX25zID0gZ2V0X3VzZXJfbnMobnMpOwogCi0JCWlmICh1aWRzX3VzZXJfY3JlYXRlKG5ldykpCi0JCQlnb3RvIG91dF9kZXN0b3lfc2NoZWQ7Ci0KIAkJLyoKIAkJICogQmVmb3JlIGFkZGluZyB0aGlzLCBjaGVjayB3aGV0aGVyIHdlIHJhY2VkCiAJCSAqIG9uIGFkZGluZyB0aGUgc2FtZSB1c2VyIGFscmVhZHkuLgpAQCAtNDc1LDE3ICsxNzYsMTEgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZ1aWRoYXNoX2xvY2spOwogCX0KIAotCXVpZHNfbXV0ZXhfdW5sb2NrKCk7Ci0KIAlyZXR1cm4gdXA7CiAKLW91dF9kZXN0b3lfc2NoZWQ6Ci0Jc2NoZWRfZGVzdHJveV91c2VyKG5ldyk7CiAJcHV0X3VzZXJfbnMobmV3LT51c2VyX25zKTsKLW91dF9mcmVlX3VzZXI6CiAJa21lbV9jYWNoZV9mcmVlKHVpZF9jYWNoZXAsIG5ldyk7CiBvdXRfdW5sb2NrOgotCXVpZHNfbXV0ZXhfdW5sb2NrKCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMjVjM2VkNS4uNWUzNDA3ZCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTM1NSw3ICszNTUsNyBAQAogY29uZmlnIERFQlVHX0tNRU1MRUFLCiAJYm9vbCAiS2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiAhTUVNT1JZX0hPVFBMVUcgJiYgXAotCQkoWDg2IHx8IEFSTSB8fCBQUEMgfHwgUzM5MCkKKwkJKFg4NiB8fCBBUk0gfHwgUFBDIHx8IFMzOTAgfHwgU1VQRVJIKQogCiAJc2VsZWN0IERFQlVHX0ZTIGlmIFNZU0ZTCiAJc2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUCkBAIC00OTksNiArNDk5LDE4IEBACiAKIAkgRm9yIG1vcmUgZGV0YWlscywgc2VlIERvY3VtZW50YXRpb24vbG9ja2RlcC1kZXNpZ24udHh0LgogCitjb25maWcgUFJPVkVfUkNVCisJYm9vbCAiUkNVIGRlYnVnZ2luZzogcHJvdmUgUkNVIGNvcnJlY3RuZXNzIgorCWRlcGVuZHMgb24gUFJPVkVfTE9DS0lORworCWRlZmF1bHQgbgorCWhlbHAKKwkgVGhpcyBmZWF0dXJlIGVuYWJsZXMgbG9ja2RlcCBleHRlbnNpb25zIHRoYXQgY2hlY2sgZm9yIGNvcnJlY3QKKwkgdXNlIG9mIFJDVSBBUElzLiAgVGhpcyBpcyBjdXJyZW50bHkgdW5kZXIgZGV2ZWxvcG1lbnQuICBTYXkgWQorCSBpZiB5b3Ugd2FudCB0byBkZWJ1ZyBSQ1UgdXNhZ2Ugb3IgaGVscCB3b3JrIG9uIHRoZSBQUk9WRV9SQ1UKKwkgZmVhdHVyZS4KKworCSBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKwogY29uZmlnIExPQ0tERVAKIAlib29sCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAmJiBTVEFDS1RSQUNFX1NVUFBPUlQgJiYgTE9DS0RFUF9TVVBQT1JUCkBAIC03NjUsMTAgKzc3NywyMiBAQAogCSAgQ1BVcyBhcmUgZGVsYXlpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLCBidXQgb25seSB3aGVuCiAJICB0aGUgZ3JhY2UgcGVyaW9kIGV4dGVuZHMgZm9yIGV4Y2Vzc2l2ZSB0aW1lIHBlcmlvZHMuCiAKLQkgIFNheSBZIGlmIHlvdSB3YW50IFJDVSB0byBwZXJmb3JtIHN1Y2ggY2hlY2tzLgorCSAgU2F5IE4gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBzdWNoIGNoZWNrcy4KKworCSAgU2F5IFkgaWYgeW91IGFyZSB1bnN1cmUuCisKK2NvbmZpZyBSQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UKKwlib29sICJQcmludCBhZGRpdGlvbmFsIHBlci10YXNrIGluZm9ybWF0aW9uIGZvciBSQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIgorCWRlcGVuZHMgb24gUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAmJiBUUkVFX1BSRUVNUFRfUkNVCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBvcHRpb24gY2F1c2VzIFJDVSB0byBwcmludGsgZGV0YWlsZWQgcGVyLXRhc2sgaW5mb3JtYXRpb24KKwkgIGZvciBhbnkgdGFza3MgdGhhdCBhcmUgc3RhbGxpbmcgdGhlIGN1cnJlbnQgUkNVIGdyYWNlIHBlcmlvZC4KIAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdWNoIGNoZWNrcy4KKwogY29uZmlnIEtQUk9CRVNfU0FOSVRZX1RFU1QKIAlib29sICJLcHJvYmVzIHNhbml0eSB0ZXN0cyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvbGliL2RlYnVnX2xvY2tzLmMgYi9saWIvZGVidWdfbG9ja3MuYwppbmRleCBiYzNiMTE3Li41YmYwMDIwIDEwMDY0NAotLS0gYS9saWIvZGVidWdfbG9ja3MuYworKysgYi9saWIvZGVidWdfbG9ja3MuYwpAQCAtMjMsNiArMjMsNyBAQAogICogc2h1dCB1cCBhZnRlciB0aGF0LgogICovCiBpbnQgZGVidWdfbG9ja3MgPSAxOworRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdfbG9ja3MpOwogCiAvKgogICogVGhlIGxvY2tpbmctdGVzdHN1aXRlIHVzZXMgPGRlYnVnX2xvY2tzX3NpbGVudD4gdG8gZ2V0IGEKZGlmZiAtLWdpdCBhL2xpYi9kbWEtZGVidWcuYyBiL2xpYi9kbWEtZGVidWcuYwppbmRleCA3ZDJmMGIzLi5iYThiNjcwIDEwMDY0NAotLS0gYS9saWIvZG1hLWRlYnVnLmMKKysrIGIvbGliL2RtYS1kZWJ1Zy5jCkBAIC01ODcsNyArNTg3LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsdGVyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWx0ZXJfZm9wcyA9IHsKIAkucmVhZCAgPSBmaWx0ZXJfcmVhZCwKIAkud3JpdGUgPSBmaWx0ZXJfd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvbGliL2h3ZWlnaHQuYyBiL2xpYi9od2VpZ2h0LmMKaW5kZXggMzg5NDI0ZS4uNjNlZTRlYiAxMDA2NDQKLS0tIGEvbGliL2h3ZWlnaHQuYworKysgYi9saWIvaHdlaWdodC5jCkBAIC0xMSwxMSArMTEsMTggQEAKIAogdW5zaWduZWQgaW50IGh3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKIHsKKyNpZmRlZiBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIKKwl3IC09ICh3ID4+IDEpICYgMHg1NTU1NTU1NTsKKwl3ID0gICh3ICYgMHgzMzMzMzMzMykgKyAoKHcgPj4gMikgJiAweDMzMzMzMzMzKTsKKwl3ID0gICh3ICsgKHcgPj4gNCkpICYgMHgwZjBmMGYwZjsKKwlyZXR1cm4gKHcgKiAweDAxMDEwMTAxKSA+PiAyNDsKKyNlbHNlCiAJdW5zaWduZWQgaW50IHJlcyA9IHcgLSAoKHcgPj4gMSkgJiAweDU1NTU1NTU1KTsKIAlyZXMgPSAocmVzICYgMHgzMzMzMzMzMykgKyAoKHJlcyA+PiAyKSAmIDB4MzMzMzMzMzMpOwogCXJlcyA9IChyZXMgKyAocmVzID4+IDQpKSAmIDB4MEYwRjBGMEY7CiAJcmVzID0gcmVzICsgKHJlcyA+PiA4KTsKIAlyZXR1cm4gKHJlcyArIChyZXMgPj4gMTYpKSAmIDB4MDAwMDAwRkY7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woaHdlaWdodDMyKTsKIApkaWZmIC0tZ2l0IGEvbGliL2lkci5jIGIvbGliL2lkci5jCmluZGV4IDFjYWM3MjYuLjJlYjFkY2EgMTAwNjQ0Ci0tLSBhL2xpYi9pZHIuYworKysgYi9saWIvaWRyLmMKQEAgLTE1NiwxMCArMTU2LDEyIEBACiAJCQlpZCA9IChpZCB8ICgoMSA8PCAoSURSX0JJVFMgKiBsKSkgLSAxKSkgKyAxOwogCiAJCQkvKiBpZiBhbHJlYWR5IGF0IHRoZSB0b3AgbGF5ZXIsIHdlIG5lZWQgdG8gZ3JvdyAqLwotCQkJaWYgKCEocCA9IHBhW2xdKSkgeworCQkJaWYgKGlkID49IDEgPDwgKGlkcC0+bGF5ZXJzICogSURSX0JJVFMpKSB7CiAJCQkJKnN0YXJ0aW5nX2lkID0gaWQ7CiAJCQkJcmV0dXJuIElEUl9ORUVEX1RPX0dST1c7CiAJCQl9CisJCQlwID0gcGFbbF07CisJCQlCVUdfT04oIXApOwogCiAJCQkvKiBJZiB3ZSBuZWVkIHRvIGdvIHVwIG9uZSBsYXllciwgY29udGludWUgdGhlCiAJCQkgKiBsb29wOyBvdGhlcndpc2UsIHJlc3RhcnQgZnJvbSB0aGUgdG9wLgpAQCAtNTAyLDcgKzUwNCw3IEBACiAJaW50IG47CiAJc3RydWN0IGlkcl9sYXllciAqcDsKIAotCXAgPSByY3VfZGVyZWZlcmVuY2UoaWRwLT50b3ApOworCXAgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGlkcC0+dG9wKTsKIAlpZiAoIXApCiAJCXJldHVybiBOVUxMOwogCW4gPSAocC0+bGF5ZXIrMSkgKiBJRFJfQklUUzsKQEAgLTUxNyw3ICs1MTksNyBAQAogCXdoaWxlIChuID4gMCAmJiBwKSB7CiAJCW4gLT0gSURSX0JJVFM7CiAJCUJVR19PTihuICE9IHAtPmxheWVyKklEUl9CSVRTKTsKLQkJcCA9IHJjdV9kZXJlZmVyZW5jZShwLT5hcnlbKGlkID4+IG4pICYgSURSX01BU0tdKTsKKwkJcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CiAJfQogCXJldHVybigodm9pZCAqKXApOwogfQpAQCAtNTUwLDcgKzU1Miw3IEBACiAJc3RydWN0IGlkcl9sYXllciAqKnBhYSA9ICZwYVswXTsKIAogCW4gPSBpZHAtPmxheWVycyAqIElEUl9CSVRTOwotCXAgPSByY3VfZGVyZWZlcmVuY2UoaWRwLT50b3ApOworCXAgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGlkcC0+dG9wKTsKIAltYXggPSAxIDw8IG47CiAKIAlpZCA9IDA7CkBAIC01NTgsNyArNTYwLDcgQEAKIAkJd2hpbGUgKG4gPiAwICYmIHApIHsKIAkJCW4gLT0gSURSX0JJVFM7CiAJCQkqcGFhKysgPSBwOwotCQkJcCA9IHJjdV9kZXJlZmVyZW5jZShwLT5hcnlbKGlkID4+IG4pICYgSURSX01BU0tdKTsKKwkJCXAgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHAtPmFyeVsoaWQgPj4gbikgJiBJRFJfTUFTS10pOwogCQl9CiAKIAkJaWYgKHApIHsKZGlmZiAtLWdpdCBhL2xpYi9sbWIuYyBiL2xpYi9sbWIuYwppbmRleCA5Y2VlMTcxLi5iMWZjNTI2IDEwMDY0NAotLS0gYS9saWIvbG1iLmMKKysrIGIvbGliL2xtYi5jCkBAIC0yMDUsOSArMjA1LDggQEAKIAogfQogCi1sb25nIGxtYl9yZW1vdmUodTY0IGJhc2UsIHU2NCBzaXplKQorc3RhdGljIGxvbmcgX19sbWJfcmVtb3ZlKHN0cnVjdCBsbWJfcmVnaW9uICpyZ24sIHU2NCBiYXNlLCB1NjQgc2l6ZSkKIHsKLQlzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduID0gJihsbWIubWVtb3J5KTsKIAl1NjQgcmduYmVnaW4sIHJnbmVuZDsKIAl1NjQgZW5kID0gYmFzZSArIHNpemU7CiAJaW50IGk7CkBAIC0yNTQsNiArMjUzLDE2IEBACiAJcmV0dXJuIGxtYl9hZGRfcmVnaW9uKHJnbiwgZW5kLCByZ25lbmQgLSBlbmQpOwogfQogCitsb25nIGxtYl9yZW1vdmUodTY0IGJhc2UsIHU2NCBzaXplKQoreworCXJldHVybiBfX2xtYl9yZW1vdmUoJmxtYi5tZW1vcnksIGJhc2UsIHNpemUpOworfQorCitsb25nIF9faW5pdCBsbWJfZnJlZSh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJcmV0dXJuIF9fbG1iX3JlbW92ZSgmbG1iLnJlc2VydmVkLCBiYXNlLCBzaXplKTsKK30KKwogbG9uZyBfX2luaXQgbG1iX3Jlc2VydmUodTY0IGJhc2UsIHU2NCBzaXplKQogewogCXN0cnVjdCBsbWJfcmVnaW9uICpfcmduID0gJmxtYi5yZXNlcnZlZDsKZGlmZiAtLWdpdCBhL2xpYi9yYWRpeC10cmVlLmMgYi9saWIvcmFkaXgtdHJlZS5jCmluZGV4IDkyY2RkOTkuLjZiOTY3MGQgMTAwNjQ0Ci0tLSBhL2xpYi9yYWRpeC10cmVlLmMKKysrIGIvbGliL3JhZGl4LXRyZWUuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJdW5zaWduZWQgaW50IGhlaWdodCwgc2hpZnQ7CiAJc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqbm9kZSwgKipzbG90OwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC0zODQsNyArMzg0LDcgQEAKIAlkbyB7CiAJCXNsb3QgPSAoc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqKikKIAkJCShub2RlLT5zbG90cyArICgoaW5kZXg+PnNoaWZ0KSAmIFJBRElYX1RSRUVfTUFQX01BU0spKTsKLQkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZSgqc2xvdCk7CisJCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KCpzbG90KTsKIAkJaWYgKG5vZGUgPT0gTlVMTCkKIAkJCXJldHVybiBOVUxMOwogCkBAIC01NjgsNyArNTY4LDcgQEAKIAlpZiAoIXJvb3RfdGFnX2dldChyb290LCB0YWcpKQogCQlyZXR1cm4gMDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAobm9kZSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIApAQCAtNjAyLDcgKzYwMiw3IEBACiAJCQlCVUdfT04ocmV0ICYmIHNhd191bnNldF90YWcpOwogCQkJcmV0dXJuICEhcmV0OwogCQl9Ci0JCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uobm9kZS0+c2xvdHNbb2Zmc2V0XSk7CisJCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtPnNsb3RzW29mZnNldF0pOwogCQlzaGlmdCAtPSBSQURJWF9UUkVFX01BUF9TSElGVDsKIAkJaGVpZ2h0LS07CiAJfQpAQCAtNzExLDcgKzcxMSw3IEBACiAJCX0KIAogCQlzaGlmdCAtPSBSQURJWF9UUkVFX01BUF9TSElGVDsKLQkJc2xvdCA9IHJjdV9kZXJlZmVyZW5jZShzbG90LT5zbG90c1tpXSk7CisJCXNsb3QgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHNsb3QtPnNsb3RzW2ldKTsKIAkJaWYgKHNsb3QgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTc1OCw3ICs3NTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3VyX2luZGV4ID0gZmlyc3RfaW5kZXg7CiAJdW5zaWduZWQgaW50IHJldDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAwOwogCkBAIC03ODcsNyArNzg3LDcgQEAKIAkJCXNsb3QgPSAqKCgodm9pZCAqKiopcmVzdWx0cylbcmV0ICsgaV0pOwogCQkJaWYgKCFzbG90KQogCQkJCWNvbnRpbnVlOwotCQkJcmVzdWx0c1tyZXQgKyBucl9mb3VuZF0gPSByY3VfZGVyZWZlcmVuY2Uoc2xvdCk7CisJCQlyZXN1bHRzW3JldCArIG5yX2ZvdW5kXSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoc2xvdCk7CiAJCQlucl9mb3VuZCsrOwogCQl9CiAJCXJldCArPSBucl9mb3VuZDsKQEAgLTgyNiw3ICs4MjYsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3VyX2luZGV4ID0gZmlyc3RfaW5kZXg7CiAJdW5zaWduZWQgaW50IHJldDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAwOwogCkBAIC05MTUsNyArOTE1LDcgQEAKIAkJCX0KIAkJfQogCQlzaGlmdCAtPSBSQURJWF9UUkVFX01BUF9TSElGVDsKLQkJc2xvdCA9IHJjdV9kZXJlZmVyZW5jZShzbG90LT5zbG90c1tpXSk7CisJCXNsb3QgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHNsb3QtPnNsb3RzW2ldKTsKIAkJaWYgKHNsb3QgPT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KQEAgLTk1MSw3ICs5NTEsNyBAQAogCWlmICghcm9vdF90YWdfZ2V0KHJvb3QsIHRhZykpCiAJCXJldHVybiAwOwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTk4MCw3ICs5ODAsNyBAQAogCQkJc2xvdCA9ICooKCh2b2lkICoqKilyZXN1bHRzKVtyZXQgKyBpXSk7CiAJCQlpZiAoIXNsb3QpCiAJCQkJY29udGludWU7Ci0JCQlyZXN1bHRzW3JldCArIG5yX2ZvdW5kXSA9IHJjdV9kZXJlZmVyZW5jZShzbG90KTsKKwkJCXJlc3VsdHNbcmV0ICsgbnJfZm91bmRdID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhzbG90KTsKIAkJCW5yX2ZvdW5kKys7CiAJCX0KIAkJcmV0ICs9IG5yX2ZvdW5kOwpAQCAtMTAyMCw3ICsxMDIwLDcgQEAKIAlpZiAoIXJvb3RfdGFnX2dldChyb290LCB0YWcpKQogCQlyZXR1cm4gMDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAxN2I4OTQ3Li5kMzRjMmI5IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTE5NSw3ICsxOTUsNyBAQAogY29uZmlnIE5SX1FVSUNLCiAJaW50CiAJZGVwZW5kcyBvbiBRVUlDS0xJU1QKLQlkZWZhdWx0ICIyIiBpZiBTVVBFUkggfHwgQVZSMzIKKwlkZWZhdWx0ICIyIiBpZiBBVlIzMgogCWRlZmF1bHQgIjEiCiAKIGNvbmZpZyBWSVJUX1RPX0JVUwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGUzNzM2OTIuLjY5OGVhODAgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTIyMzIsNiArMjIzMiw5IEBACiAJCWlmICh1bmxpa2VseShzdGF0dXMpKQogCQkJYnJlYWs7CiAKKwkJaWYgKG1hcHBpbmdfd3JpdGFibHlfbWFwcGVkKG1hcHBpbmcpKQorCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisKIAkJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAkJY29waWVkID0gaW92X2l0ZXJfY29weV9mcm9tX3VzZXJfYXRvbWljKHBhZ2UsIGksIG9mZnNldCwgYnl0ZXMpOwogCQlwYWdlZmF1bHRfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZTkxYjgxYi4uMmQxNmZhNiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMTUxNSwxMCArMTUxNSw5IEBACiAJLmF0dHJzID0gaHN0YXRlX2F0dHJzLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaHVnZXRsYl9zeXNmc19hZGRfaHN0YXRlKHN0cnVjdCBoc3RhdGUgKmgsCi0JCQkJc3RydWN0IGtvYmplY3QgKnBhcmVudCwKLQkJCQlzdHJ1Y3Qga29iamVjdCAqKmhzdGF0ZV9rb2JqcywKLQkJCQlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpoc3RhdGVfYXR0cl9ncm91cCkKK3N0YXRpYyBpbnQgaHVnZXRsYl9zeXNmc19hZGRfaHN0YXRlKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBrb2JqZWN0ICpwYXJlbnQsCisJCQkJICAgIHN0cnVjdCBrb2JqZWN0ICoqaHN0YXRlX2tvYmpzLAorCQkJCSAgICBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpoc3RhdGVfYXR0cl9ncm91cCkKIHsKIAlpbnQgcmV0dmFsOwogCWludCBoaSA9IGggLSBoc3RhdGVzOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGVmZGRiZjAuLjg4MGJkNTkgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTkxMiw2ICs5MTIsOSBAQAogCQkJCWdvdG8gb3V0X3BtOwogCiAJCQllcnIgPSAtRU5PREVWOworCQkJaWYgKG5vZGUgPCAwIHx8IG5vZGUgPj0gTUFYX05VTU5PREVTKQorCQkJCWdvdG8gb3V0X3BtOworCiAJCQlpZiAoIW5vZGVfc3RhdGUobm9kZSwgTl9ISUdIX01FTU9SWSkpCiAJCQkJZ290byBvdXRfcG07CiAKQEAgLTk5OSwzMyArMTAwMiwyNyBAQAogI2RlZmluZSBET19QQUdFU19TVEFUX0NIVU5LX05SIDE2CiAJY29uc3Qgdm9pZCBfX3VzZXIgKmNodW5rX3BhZ2VzW0RPX1BBR0VTX1NUQVRfQ0hVTktfTlJdOwogCWludCBjaHVua19zdGF0dXNbRE9fUEFHRVNfU1RBVF9DSFVOS19OUl07Ci0JdW5zaWduZWQgbG9uZyBpLCBjaHVua19uciA9IERPX1BBR0VTX1NUQVRfQ0hVTktfTlI7Ci0JaW50IGVycjsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSArPSBjaHVua19ucikgewotCQlpZiAoY2h1bmtfbnIgPiBucl9wYWdlcyAtIGkpCi0JCQljaHVua19uciA9IG5yX3BhZ2VzIC0gaTsKKwl3aGlsZSAobnJfcGFnZXMpIHsKKwkJdW5zaWduZWQgbG9uZyBjaHVua19ucjsKIAotCQllcnIgPSBjb3B5X2Zyb21fdXNlcihjaHVua19wYWdlcywgJnBhZ2VzW2ldLAotCQkJCSAgICAgY2h1bmtfbnIgKiBzaXplb2YoKmNodW5rX3BhZ2VzKSk7Ci0JCWlmIChlcnIpIHsKLQkJCWVyciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQljaHVua19uciA9IG5yX3BhZ2VzOworCQlpZiAoY2h1bmtfbnIgPiBET19QQUdFU19TVEFUX0NIVU5LX05SKQorCQkJY2h1bmtfbnIgPSBET19QQUdFU19TVEFUX0NIVU5LX05SOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihjaHVua19wYWdlcywgcGFnZXMsIGNodW5rX25yICogc2l6ZW9mKCpjaHVua19wYWdlcykpKQorCQkJYnJlYWs7CiAKIAkJZG9fcGFnZXNfc3RhdF9hcnJheShtbSwgY2h1bmtfbnIsIGNodW5rX3BhZ2VzLCBjaHVua19zdGF0dXMpOwogCi0JCWVyciA9IGNvcHlfdG9fdXNlcigmc3RhdHVzW2ldLCBjaHVua19zdGF0dXMsCi0JCQkJICAgY2h1bmtfbnIgKiBzaXplb2YoKmNodW5rX3N0YXR1cykpOwotCQlpZiAoZXJyKSB7Ci0JCQllcnIgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0JZXJyID0gMDsKKwkJaWYgKGNvcHlfdG9fdXNlcihzdGF0dXMsIGNodW5rX3N0YXR1cywgY2h1bmtfbnIgKiBzaXplb2YoKnN0YXR1cykpKQorCQkJYnJlYWs7CiAKLW91dDoKLQlyZXR1cm4gZXJyOworCQlwYWdlcyArPSBjaHVua19ucjsKKwkJc3RhdHVzICs9IGNodW5rX25yOworCQlucl9wYWdlcyAtPSBjaHVua19ucjsKKwl9CisJcmV0dXJuIG5yX3BhZ2VzID8gLUVGQVVMVCA6IDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCBmNTI0ODFiLi4yMzcwNTA0IDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTQ1OSw2ICs0NTksOCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnAtPmNoaWxkcmVuLCBzaWJsaW5nKSB7CiAJCWlmIChjLT5tbSA9PSBwLT5tbSkKIAkJCWNvbnRpbnVlOworCQlpZiAobWVtICYmICF0YXNrX2luX21lbV9jZ3JvdXAoYywgbWVtKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoIW9vbV9raWxsX3Rhc2soYykpCiAJCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggZDU1ZDkwNS4uYWUwMDc0NiAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtNTA5LDYgKzUwOSw5IEBACiAKIHN0YXRpYyBhdG9taWNfdCB2bWFwX2xhenlfbnIgPSBBVE9NSUNfSU5JVCgwKTsKIAorLyogZm9yIHBlci1DUFUgYmxvY2tzICovCitzdGF0aWMgdm9pZCBwdXJnZV9mcmFnbWVudGVkX2Jsb2Nrc19hbGxjcHVzKHZvaWQpOworCiAvKgogICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy4KICAqCkBAIC01MzksNiArNTQyLDkgQEAKIAl9IGVsc2UKIAkJc3Bpbl9sb2NrKCZwdXJnZV9sb2NrKTsKIAorCWlmIChzeW5jKQorCQlwdXJnZV9mcmFnbWVudGVkX2Jsb2Nrc19hbGxjcHVzKCk7CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodmEsICZ2bWFwX2FyZWFfbGlzdCwgbGlzdCkgewogCQlpZiAodmEtPmZsYWdzICYgVk1fTEFaWV9GUkVFKSB7CkBAIC02NjcsOCArNjczLDYgQEAKIHN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlIHsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlOwotCXN0cnVjdCBsaXN0X2hlYWQgZGlydHk7Ci0JdW5zaWduZWQgaW50IG5yX2RpcnR5OwogfTsKIAogc3RydWN0IHZtYXBfYmxvY2sgewpAQCAtNjc4LDEwICs2ODIsOSBAQAogCXVuc2lnbmVkIGxvbmcgZnJlZSwgZGlydHk7CiAJREVDTEFSRV9CSVRNQVAoYWxsb2NfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOwogCURFQ0xBUkVfQklUTUFQKGRpcnR5X21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OwotCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7Ci0JfTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisJc3RydWN0IGxpc3RfaGVhZCBwdXJnZTsKIH07CiAKIC8qIFF1ZXVlIG9mIGZyZWUgYW5kIGRpcnR5IHZtYXAgYmxvY2tzLCBmb3IgYWxsb2NhdGlvbiBhbmQgZmx1c2hpbmcgcHVycG9zZXMgKi8KQEAgLTc1Nyw3ICs3NjAsNyBAQAogCXZicSA9ICZnZXRfY3B1X3Zhcih2bWFwX2Jsb2NrX3F1ZXVlKTsKIAl2Yi0+dmJxID0gdmJxOwogCXNwaW5fbG9jaygmdmJxLT5sb2NrKTsKLQlsaXN0X2FkZCgmdmItPmZyZWVfbGlzdCwgJnZicS0+ZnJlZSk7CisJbGlzdF9hZGRfcmN1KCZ2Yi0+ZnJlZV9saXN0LCAmdmJxLT5mcmVlKTsKIAlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKIAlwdXRfY3B1X3Zhcih2bWFwX2Jsb2NrX3F1ZXVlKTsKIApAQCAtNzc2LDggKzc3OSw2IEBACiAJc3RydWN0IHZtYXBfYmxvY2sgKnRtcDsKIAl1bnNpZ25lZCBsb25nIHZiX2lkeDsKIAotCUJVR19PTighbGlzdF9lbXB0eSgmdmItPmZyZWVfbGlzdCkpOwotCiAJdmJfaWR4ID0gYWRkcl90b192Yl9pZHgodmItPnZhLT52YV9zdGFydCk7CiAJc3Bpbl9sb2NrKCZ2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CiAJdG1wID0gcmFkaXhfdHJlZV9kZWxldGUoJnZtYXBfYmxvY2tfdHJlZSwgdmJfaWR4KTsKQEAgLTc4OCwxMiArNzg5LDYxIEBACiAJY2FsbF9yY3UoJnZiLT5yY3VfaGVhZCwgcmN1X2ZyZWVfdmIpOwogfQogCitzdGF0aWMgdm9pZCBwdXJnZV9mcmFnbWVudGVkX2Jsb2NrcyhpbnQgY3B1KQoreworCUxJU1RfSEVBRChwdXJnZSk7CisJc3RydWN0IHZtYXBfYmxvY2sgKnZiOworCXN0cnVjdCB2bWFwX2Jsb2NrICpuX3ZiOworCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnEgPSAmcGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBjcHUpOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZiLCAmdmJxLT5mcmVlLCBmcmVlX2xpc3QpIHsKKworCQlpZiAoISh2Yi0+ZnJlZSArIHZiLT5kaXJ0eSA9PSBWTUFQX0JCTUFQX0JJVFMgJiYgdmItPmRpcnR5ICE9IFZNQVBfQkJNQVBfQklUUykpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2soJnZiLT5sb2NrKTsKKwkJaWYgKHZiLT5mcmVlICsgdmItPmRpcnR5ID09IFZNQVBfQkJNQVBfQklUUyAmJiB2Yi0+ZGlydHkgIT0gVk1BUF9CQk1BUF9CSVRTKSB7CisJCQl2Yi0+ZnJlZSA9IDA7IC8qIHByZXZlbnQgZnVydGhlciBhbGxvY3MgYWZ0ZXIgcmVsZWFzaW5nIGxvY2sgKi8KKwkJCXZiLT5kaXJ0eSA9IFZNQVBfQkJNQVBfQklUUzsgLyogcHJldmVudCBwdXJnaW5nIGl0IGFnYWluICovCisJCQliaXRtYXBfZmlsbCh2Yi0+YWxsb2NfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOworCQkJYml0bWFwX2ZpbGwodmItPmRpcnR5X21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwkJCXNwaW5fbG9jaygmdmJxLT5sb2NrKTsKKwkJCWxpc3RfZGVsX3JjdSgmdmItPmZyZWVfbGlzdCk7CisJCQlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZ2Yi0+bG9jayk7CisJCQlsaXN0X2FkZF90YWlsKCZ2Yi0+cHVyZ2UsICZwdXJnZSk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmIsIG5fdmIsICZwdXJnZSwgcHVyZ2UpIHsKKwkJbGlzdF9kZWwoJnZiLT5wdXJnZSk7CisJCWZyZWVfdm1hcF9ibG9jayh2Yik7CisJfQorfQorCitzdGF0aWMgdm9pZCBwdXJnZV9mcmFnbWVudGVkX2Jsb2Nrc190aGlzY3B1KHZvaWQpCit7CisJcHVyZ2VfZnJhZ21lbnRlZF9ibG9ja3Moc21wX3Byb2Nlc3Nvcl9pZCgpKTsKK30KKworc3RhdGljIHZvaWQgcHVyZ2VfZnJhZ21lbnRlZF9ibG9ja3NfYWxsY3B1cyh2b2lkKQoreworCWludCBjcHU7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlwdXJnZV9mcmFnbWVudGVkX2Jsb2NrcyhjcHUpOworfQorCiBzdGF0aWMgdm9pZCAqdmJfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSAqdmJxOwogCXN0cnVjdCB2bWFwX2Jsb2NrICp2YjsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOwogCXVuc2lnbmVkIGludCBvcmRlcjsKKwlpbnQgcHVyZ2UgPSAwOwogCiAJQlVHX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKIAlCVUdfT04oc2l6ZSA+IFBBR0VfU0laRSpWTUFQX01BWF9BTExPQyk7CkBAIC04MDYsMjQgKzg1NiwzOCBAQAogCQlpbnQgaTsKIAogCQlzcGluX2xvY2soJnZiLT5sb2NrKTsKKwkJaWYgKHZiLT5mcmVlIDwgMVVMIDw8IG9yZGVyKQorCQkJZ290byBuZXh0OworCiAJCWkgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbih2Yi0+YWxsb2NfbWFwLAogCQkJCQkJVk1BUF9CQk1BUF9CSVRTLCBvcmRlcik7CiAKLQkJaWYgKGkgPj0gMCkgewotCQkJYWRkciA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaSA8PCBQQUdFX1NISUZUKTsKLQkJCUJVR19PTihhZGRyX3RvX3ZiX2lkeChhZGRyKSAhPQotCQkJCQlhZGRyX3RvX3ZiX2lkeCh2Yi0+dmEtPnZhX3N0YXJ0KSk7Ci0JCQl2Yi0+ZnJlZSAtPSAxVUwgPDwgb3JkZXI7Ci0JCQlpZiAodmItPmZyZWUgPT0gMCkgewotCQkJCXNwaW5fbG9jaygmdmJxLT5sb2NrKTsKLQkJCQlsaXN0X2RlbF9pbml0KCZ2Yi0+ZnJlZV9saXN0KTsKLQkJCQlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKKwkJaWYgKGkgPCAwKSB7CisJCQlpZiAodmItPmZyZWUgKyB2Yi0+ZGlydHkgPT0gVk1BUF9CQk1BUF9CSVRTKSB7CisJCQkJLyogZnJhZ21lbnRlZCBhbmQgbm8gb3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMgKi8KKwkJCQlCVUdfT04odmItPmRpcnR5ICE9IFZNQVBfQkJNQVBfQklUUyk7CisJCQkJcHVyZ2UgPSAxOwogCQkJfQotCQkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKLQkJCWJyZWFrOworCQkJZ290byBuZXh0OworCQl9CisJCWFkZHIgPSB2Yi0+dmEtPnZhX3N0YXJ0ICsgKGkgPDwgUEFHRV9TSElGVCk7CisJCUJVR19PTihhZGRyX3RvX3ZiX2lkeChhZGRyKSAhPQorCQkJCWFkZHJfdG9fdmJfaWR4KHZiLT52YS0+dmFfc3RhcnQpKTsKKwkJdmItPmZyZWUgLT0gMVVMIDw8IG9yZGVyOworCQlpZiAodmItPmZyZWUgPT0gMCkgeworCQkJc3Bpbl9sb2NrKCZ2YnEtPmxvY2spOworCQkJbGlzdF9kZWxfcmN1KCZ2Yi0+ZnJlZV9saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZ2YnEtPmxvY2spOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZ2Yi0+bG9jayk7CisJCWJyZWFrOworbmV4dDoKKwkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKIAl9CisKKwlpZiAocHVyZ2UpCisJCXB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX3RoaXNjcHUoKTsKKwogCXB1dF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC04NjAsMTEgKzkyNCwxMSBAQAogCUJVR19PTighdmIpOwogCiAJc3Bpbl9sb2NrKCZ2Yi0+bG9jayk7Ci0JYml0bWFwX2FsbG9jYXRlX3JlZ2lvbih2Yi0+ZGlydHlfbWFwLCBvZmZzZXQgPj4gUEFHRV9TSElGVCwgb3JkZXIpOworCUJVR19PTihiaXRtYXBfYWxsb2NhdGVfcmVnaW9uKHZiLT5kaXJ0eV9tYXAsIG9mZnNldCA+PiBQQUdFX1NISUZULCBvcmRlcikpOwogCiAJdmItPmRpcnR5ICs9IDFVTCA8PCBvcmRlcjsKIAlpZiAodmItPmRpcnR5ID09IFZNQVBfQkJNQVBfQklUUykgewotCQlCVUdfT04odmItPmZyZWUgfHwgIWxpc3RfZW1wdHkoJnZiLT5mcmVlX2xpc3QpKTsKKwkJQlVHX09OKHZiLT5mcmVlKTsKIAkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKIAkJZnJlZV92bWFwX2Jsb2NrKHZiKTsKIAl9IGVsc2UKQEAgLTEwMzMsOCArMTA5Nyw2IEBACiAJCXZicSA9ICZwZXJfY3B1KHZtYXBfYmxvY2tfcXVldWUsIGkpOwogCQlzcGluX2xvY2tfaW5pdCgmdmJxLT5sb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnZicS0+ZnJlZSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ2YnEtPmRpcnR5KTsKLQkJdmJxLT5ucl9kaXJ0eSA9IDA7CiAJfQogCiAJLyogSW1wb3J0IGV4aXN0aW5nIHZtbGlzdCBlbnRyaWVzLiAqLwpkaWZmIC0tZ2l0IGEvbmV0LzlwL2NsaWVudC5jIGIvbmV0LzlwL2NsaWVudC5jCmluZGV4IDhhZjk1YjIuLjA5ZDRmMWUgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogc3RhdGljIGludCBwYXJzZV9vcHRzKGNoYXIgKm9wdHMsIHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCiB7Ci0JY2hhciAqb3B0aW9uczsKKwljaGFyICpvcHRpb25zLCAqdG1wX29wdGlvbnM7CiAJY2hhciAqcDsKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJaW50IG9wdGlvbjsKQEAgLTgxLDEyICs4MSwxMyBAQAogCWlmICghb3B0cykKIAkJcmV0dXJuIDA7CiAKLQlvcHRpb25zID0ga3N0cmR1cChvcHRzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wdGlvbnMpIHsKKwl0bXBfb3B0aW9ucyA9IGtzdHJkdXAob3B0cywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBfb3B0aW9ucykgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAogCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSBvZiBvcHRpb24gc3RyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW9wdGlvbnMgPSB0bXBfb3B0aW9uczsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC0xMDgsNiArMTA5LDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBPcHRfdHJhbnM6CiAJCQljbG50LT50cmFuc19tb2QgPSB2OWZzX2dldF90cmFuc19ieV9uYW1lKCZhcmdzWzBdKTsKKwkJCWlmKGNsbnQtPnRyYW5zX21vZCA9PSBOVUxMKSB7CisJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkgICAiQ291bGQgbm90IGZpbmQgcmVxdWVzdCB0cmFuc3BvcnQ6ICVzXG4iLAorCQkJCSAgIChjaGFyICopICZhcmdzWzBdKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOworCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xlZ2FjeToKIAkJCWNsbnQtPmRvdHUgPSAwOwpAQCAtMTE3LDcgKzEyNSw4IEBACiAJCX0KIAl9CiAKLQlrZnJlZShvcHRpb25zKTsKK2ZyZWVfYW5kX3JldHVybjoKKwlrZnJlZSh0bXBfb3B0aW9ucyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjY3LDE4ICs2NzYsMTIgQEAKIAljbG50LT50cmFucyA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmNsbnQtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZjbG50LT5maWRsaXN0KTsKLQljbG50LT5maWRwb29sID0gcDlfaWRwb29sX2NyZWF0ZSgpOwotCWlmIChJU19FUlIoY2xudC0+ZmlkcG9vbCkpIHsKLQkJZXJyID0gUFRSX0VSUihjbG50LT5maWRwb29sKTsKLQkJY2xudC0+ZmlkcG9vbCA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQogCiAJcDlfdGFnX2luaXQoY2xudCk7CiAKIAllcnIgPSBwYXJzZV9vcHRzKG9wdGlvbnMsIGNsbnQpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOworCQlnb3RvIGZyZWVfY2xpZW50OwogCiAJaWYgKCFjbG50LT50cmFuc19tb2QpCiAJCWNsbnQtPnRyYW5zX21vZCA9IHY5ZnNfZ2V0X2RlZmF1bHRfdHJhbnMoKTsKQEAgLTY4Nyw3ICs2OTAsMTQgQEAKIAkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKIAkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKIAkJCQkiTm8gdHJhbnNwb3J0IGRlZmluZWQgb3IgZGVmYXVsdCB0cmFuc3BvcnRcbiIpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGZyZWVfY2xpZW50OworCX0KKworCWNsbnQtPmZpZHBvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7CisJaWYgKElTX0VSUihjbG50LT5maWRwb29sKSkgeworCQllcnIgPSBQVFJfRVJSKGNsbnQtPmZpZHBvb2wpOworCQljbG50LT5maWRwb29sID0gTlVMTDsKKwkJZ290byBwdXRfdHJhbnM7CiAJfQogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJjbG50ICVwIHRyYW5zICVwIG1zaXplICVkIGRvdHUgJWRcbiIsCkBAIC02OTUsMTkgKzcwNSwyNSBAQAogCiAJZXJyID0gY2xudC0+dHJhbnNfbW9kLT5jcmVhdGUoY2xudCwgZGV2X25hbWUsIG9wdGlvbnMpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZGVzdHJveV9maWRwb29sOwogCiAJaWYgKChjbG50LT5tc2l6ZStQOV9JT0hEUlNaKSA+IGNsbnQtPnRyYW5zX21vZC0+bWF4c2l6ZSkKIAkJY2xudC0+bXNpemUgPSBjbG50LT50cmFuc19tb2QtPm1heHNpemUtUDlfSU9IRFJTWjsKIAogCWVyciA9IHA5X2NsaWVudF92ZXJzaW9uKGNsbnQpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyb3I7CisJCWdvdG8gY2xvc2VfdHJhbnM7CiAKIAlyZXR1cm4gY2xudDsKIAotZXJyb3I6Ci0JcDlfY2xpZW50X2Rlc3Ryb3koY2xudCk7CitjbG9zZV90cmFuczoKKwljbG50LT50cmFuc19tb2QtPmNsb3NlKGNsbnQpOworZGVzdHJveV9maWRwb29sOgorCXA5X2lkcG9vbF9kZXN0cm95KGNsbnQtPmZpZHBvb2wpOworcHV0X3RyYW5zOgorCXY5ZnNfcHV0X3RyYW5zKGNsbnQtPnRyYW5zX21vZCk7CitmcmVlX2NsaWVudDoKKwlrZnJlZShjbG50KTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfY3JlYXRlKTsKQEAgLTEyMTQsMTAgKzEyMzAsMTEgQEAKIHsKIAlpbnQgcmV0OwogCisJLyogTk9URTogc2l6ZSBzaG91bGRuJ3QgaW5jbHVkZSBpdHMgb3duIGxlbmd0aCAqLwogCS8qIHNpemVbMl0gdHlwZVsyXSBkZXZbNF0gcWlkWzEzXSAqLwogCS8qIG1vZGVbNF0gYXRpbWVbNF0gbXRpbWVbNF0gbGVuZ3RoWzhdKi8KIAkvKiBuYW1lW3NdIHVpZFtzXSBnaWRbc10gbXVpZFtzXSAqLwotCXJldCA9IDIrMis0KzEzKzQrNCs0KzgrMisyKzIrMjsKKwlyZXQgPSAyKzQrMTMrNCs0KzQrOCsyKzIrMisyOwogCiAJaWYgKHdzdC0+bmFtZSkKIAkJcmV0ICs9IHN0cmxlbih3c3QtPm5hbWUpOwpAQCAtMTI1OCw3ICsxMjc1LDcgQEAKIAkJd3N0LT5uYW1lLCB3c3QtPnVpZCwgd3N0LT5naWQsIHdzdC0+bXVpZCwgd3N0LT5leHRlbnNpb24sCiAJCXdzdC0+bl91aWQsIHdzdC0+bl9naWQsIHdzdC0+bl9tdWlkKTsKIAotCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdTVEFULCAiZHdTIiwgZmlkLT5maWQsIHdzdC0+c2l6ZSwgd3N0KTsKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RXU1RBVCwgImR3UyIsIGZpZC0+ZmlkLCB3c3QtPnNpemUrMiwgd3N0KTsKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJZXJyID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX2ZkLmMgYi9uZXQvOXAvdHJhbnNfZmQuYwppbmRleCBiZTFjYjkwLi4zMWQwYjA1IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfZmQuYworKysgYi9uZXQvOXAvdHJhbnNfZmQuYwpAQCAtNzE0LDcgKzcxNCw3IEBACiAJY2hhciAqcDsKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJaW50IG9wdGlvbjsKLQljaGFyICpvcHRpb25zOworCWNoYXIgKm9wdGlvbnMsICp0bXBfb3B0aW9uczsKIAlpbnQgcmV0OwogCiAJb3B0cy0+cG9ydCA9IFA5X1BPUlQ7CkBAIC03MjQsMTIgKzcyNCwxMyBAQAogCWlmICghcGFyYW1zKQogCQlyZXR1cm4gMDsKIAotCW9wdGlvbnMgPSBrc3RyZHVwKHBhcmFtcywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvcHRpb25zKSB7CisJdG1wX29wdGlvbnMgPSBrc3RyZHVwKHBhcmFtcywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBfb3B0aW9ucykgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAogCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSBvZiBvcHRpb24gc3RyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW9wdGlvbnMgPSB0bXBfb3B0aW9uczsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC03NjAsNyArNzYxLDggQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJfQotCWtmcmVlKG9wdGlvbnMpOworCisJa2ZyZWUodG1wX29wdGlvbnMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfcmRtYS5jIGIvbmV0LzlwL3RyYW5zX3JkbWEuYwppbmRleCA2NWNiMjlkLi4yYzk1YTg5IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfcmRtYS5jCisrKyBiL25ldC85cC90cmFuc19yZG1hLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCWNoYXIgKnA7CiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwogCWludCBvcHRpb247Ci0JY2hhciAqb3B0aW9uczsKKwljaGFyICpvcHRpb25zLCAqdG1wX29wdGlvbnM7CiAJaW50IHJldDsKIAogCW9wdHMtPnBvcnQgPSBQOV9QT1JUOwpAQCAtMTc3LDEyICsxNzcsMTMgQEAKIAlpZiAoIXBhcmFtcykKIAkJcmV0dXJuIDA7CiAKLQlvcHRpb25zID0ga3N0cmR1cChwYXJhbXMsIEdGUF9LRVJORUwpOwotCWlmICghb3B0aW9ucykgeworCXRtcF9vcHRpb25zID0ga3N0cmR1cChwYXJhbXMsIEdGUF9LRVJORUwpOworCWlmICghdG1wX29wdGlvbnMpIHsKIAkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKIAkJCSAgICJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSBvZiBvcHRpb24gc3RyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW9wdGlvbnMgPSB0bXBfb3B0aW9uczsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC0yMTYsNyArMjE3LDcgQEAKIAl9CiAJLyogUlEgbXVzdCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgU1EgKi8KIAlvcHRzLT5ycV9kZXB0aCA9IG1heChvcHRzLT5ycV9kZXB0aCwgb3B0cy0+c3FfZGVwdGgpOwotCWtmcmVlKG9wdGlvbnMpOworCWtmcmVlKHRtcF9vcHRpb25zKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCmluZGV4IGVhMWUzZGEuLmNiNTBmNGEgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc192aXJ0aW8uYworKysgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKQEAgLTEwMiw3ICsxMDIsOCBAQAogCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IGNsaWVudC0+dHJhbnM7CiAKIAltdXRleF9sb2NrKCZ2aXJ0aW9fOXBfbG9jayk7Ci0JY2hhbi0+aW51c2UgPSBmYWxzZTsKKwlpZiAoY2hhbikKKwkJY2hhbi0+aW51c2UgPSBmYWxzZTsKIAltdXRleF91bmxvY2soJnZpcnRpb185cF9sb2NrKTsKIH0KIApAQCAtMzExLDYgKzMxMiw3IEBACiAJfQogCiAJY2xpZW50LT50cmFucyA9ICh2b2lkICopY2hhbjsKKwljbGllbnQtPnN0YXR1cyA9IENvbm5lY3RlZDsKIAljaGFuLT5jbGllbnQgPSBjbGllbnQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCBiN2M0MjI0Li5iMTBlM2NkIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0zNzcsNiArMzc3LDkgQEAKIAogCWlmIChhY2wtPnN0YXRlID09IEJUX0NPTk5FQ1RFRCAmJgogCQkJKHNjby0+c3RhdGUgPT0gQlRfT1BFTiB8fCBzY28tPnN0YXRlID09IEJUX0NMT1NFRCkpIHsKKwkJYWNsLT5wb3dlcl9zYXZlID0gMTsKKwkJaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoYWNsKTsKKwogCQlpZiAobG1wX2VzY29fY2FwYWJsZShoZGV2KSkKIAkJCWhjaV9zZXR1cF9zeW5jKHNjbywgYWNsLT5oYW5kbGUpOwogCQllbHNlCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCAyODUxN2JhLi41OTJkYTVjIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTE2OTksNiArMTY5OSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSAweDFjOgkvKiBTQ08gaW50ZXJ2YWwgcmVqZWN0ZWQgKi8KKwljYXNlIDB4MWE6CS8qIFVuc3VwcG9ydGVkIFJlbW90ZSBGZWF0dXJlICovCiAJY2FzZSAweDFmOgkvKiBVbnNwZWNpZmllZCBlcnJvciAqLwogCQlpZiAoY29ubi0+b3V0ICYmIGNvbm4tPmF0dGVtcHQgPCAyKSB7CiAJCQljb25uLT5wa3RfdHlwZSA9IChoZGV2LT5lc2NvX3R5cGUgJiBTQ09fRVNDT19NQVNLKSB8CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCAxOGU3ZjVhLi4yODA1MjlhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTI0Myw2ICsyNDMsMzkgQEAKIAlpbnB1dF9zeW5jKGRldik7CiB9CiAKK3N0YXRpYyBpbnQgX19oaWRwX3NlbmRfY3RybF9tZXNzYWdlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCisJCQl1bnNpZ25lZCBjaGFyIGhkciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCUJUX0RCRygic2Vzc2lvbiAlcCBkYXRhICVwIHNpemUgJWQiLCBzZXNzaW9uLCBkYXRhLCBzaXplKTsKKworCWlmICghKHNrYiA9IGFsbG9jX3NrYihzaXplICsgMSwgR0ZQX0FUT01JQykpKSB7CisJCUJUX0VSUigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgZnJhbWUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJKnNrYl9wdXQoc2tiLCAxKSA9IGhkcjsKKwlpZiAoZGF0YSAmJiBzaXplID4gMCkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBzaXplKSwgZGF0YSwgc2l6ZSk7CisKKwlza2JfcXVldWVfdGFpbCgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCwgc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBoaWRwX3NlbmRfY3RybF9tZXNzYWdlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCisJCQl1bnNpZ25lZCBjaGFyIGhkciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGVycjsKKworCWVyciA9IF9faGlkcF9zZW5kX2N0cmxfbWVzc2FnZShzZXNzaW9uLCBoZHIsIGRhdGEsIHNpemUpOworCisJaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgaGlkcF9xdWV1ZV9yZXBvcnQoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQl1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKIHsKQEAgLTI4MCw5ICszMTMsMjIgQEAKIAlyZXR1cm4gaGlkcF9xdWV1ZV9yZXBvcnQoc2Vzc2lvbiwgYnVmLCByc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgaGlkcF9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW50IGhpZHBfb3V0cHV0X3Jhd19yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50LAorCQl1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQogewotCWlmIChoaWRwX3F1ZXVlX3JlcG9ydChoaWQtPmRyaXZlcl9kYXRhLCBkYXRhLCBjb3VudCkpCisJc3dpdGNoIChyZXBvcnRfdHlwZSkgeworCWNhc2UgSElEX0ZFQVRVUkVfUkVQT1JUOgorCQlyZXBvcnRfdHlwZSA9IEhJRFBfVFJBTlNfU0VUX1JFUE9SVCB8IEhJRFBfREFUQV9SVFlQRV9GRUFUVVJFOworCQlicmVhazsKKwljYXNlIEhJRF9PVVRQVVRfUkVQT1JUOgorCQlyZXBvcnRfdHlwZSA9IEhJRFBfVFJBTlNfREFUQSB8IEhJRFBfREFUQV9SVFlQRV9PVVBVVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGhpZHBfc2VuZF9jdHJsX21lc3NhZ2UoaGlkLT5kcml2ZXJfZGF0YSwgcmVwb3J0X3R5cGUsCisJCQlkYXRhLCBjb3VudCkpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTMwNywzOSArMzUzLDYgQEAKIAkJZGVsX3RpbWVyKCZzZXNzaW9uLT50aW1lcik7CiB9CiAKLXN0YXRpYyBpbnQgX19oaWRwX3NlbmRfY3RybF9tZXNzYWdlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCi0JCQl1bnNpZ25lZCBjaGFyIGhkciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCUJUX0RCRygic2Vzc2lvbiAlcCBkYXRhICVwIHNpemUgJWQiLCBzZXNzaW9uLCBkYXRhLCBzaXplKTsKLQotCWlmICghKHNrYiA9IGFsbG9jX3NrYihzaXplICsgMSwgR0ZQX0FUT01JQykpKSB7Ci0JCUJUX0VSUigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgZnJhbWUiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JKnNrYl9wdXQoc2tiLCAxKSA9IGhkcjsKLQlpZiAoZGF0YSAmJiBzaXplID4gMCkKLQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBzaXplKSwgZGF0YSwgc2l6ZSk7Ci0KLQlza2JfcXVldWVfdGFpbCgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCwgc2tiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBoaWRwX3NlbmRfY3RybF9tZXNzYWdlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCi0JCQl1bnNpZ25lZCBjaGFyIGhkciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IF9faGlkcF9zZW5kX2N0cmxfbWVzc2FnZShzZXNzaW9uLCBoZHIsIGRhdGEsIHNpemUpOwotCi0JaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIGhpZHBfcHJvY2Vzc19oYW5kc2hha2Uoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkJdW5zaWduZWQgY2hhciBwYXJhbSkKIHsKQEAgLTcwMSwyOSArNzE0LDkgQEAKIHN0YXRpYyBpbnQgaGlkcF9wYXJzZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQogewogCXN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24gPSBoaWQtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxICpyZXEgPSBzZXNzaW9uLT5yZXE7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCWludCByZXQ7CiAKLQlidWYgPSBrbWFsbG9jKHJlcS0+cmRfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgcmVxLT5yZF9kYXRhLCByZXEtPnJkX3NpemUpKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldCA9IGhpZF9wYXJzZV9yZXBvcnQoc2Vzc2lvbi0+aGlkLCBidWYsIHJlcS0+cmRfc2l6ZSk7Ci0KLQlrZnJlZShidWYpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXNlc3Npb24tPnJlcSA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaGlkX3BhcnNlX3JlcG9ydChzZXNzaW9uLT5oaWQsIHNlc3Npb24tPnJkX2RhdGEsCisJCQlzZXNzaW9uLT5yZF9zaXplKTsKIH0KIAogc3RhdGljIGludCBoaWRwX3N0YXJ0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCkBAIC03NjgsMTIgKzc2MSwyNCBAQAogCWJkYWRkcl90IHNyYywgZHN0OwogCWludCBlcnI7CiAKKwlzZXNzaW9uLT5yZF9kYXRhID0ga3phbGxvYyhyZXEtPnJkX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghc2Vzc2lvbi0+cmRfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoc2Vzc2lvbi0+cmRfZGF0YSwgcmVxLT5yZF9kYXRhLCByZXEtPnJkX3NpemUpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZmF1bHQ7CisJfQorCXNlc3Npb24tPnJkX3NpemUgPSByZXEtPnJkX3NpemU7CisKIAloaWQgPSBoaWRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKElTX0VSUihoaWQpKQotCQlyZXR1cm4gUFRSX0VSUihoaWQpOworCWlmIChJU19FUlIoaGlkKSkgeworCQllcnIgPSBQVFJfRVJSKGhpZCk7CisJCWdvdG8gZmF1bHQ7CisJfQogCiAJc2Vzc2lvbi0+aGlkID0gaGlkOwotCXNlc3Npb24tPnJlcSA9IHJlcTsKKwogCWhpZC0+ZHJpdmVyX2RhdGEgPSBzZXNzaW9uOwogCiAJYmFzd2FwKCZzcmMsICZidF9zayhzZXNzaW9uLT5jdHJsX3NvY2stPnNrKS0+c3JjKTsKQEAgLTgwNCw2ICs4MDksMTAgQEAKIAloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKIAlzZXNzaW9uLT5oaWQgPSBOVUxMOwogCitmYXVsdDoKKwlrZnJlZShzZXNzaW9uLT5yZF9kYXRhKTsKKwlzZXNzaW9uLT5yZF9kYXRhID0gTlVMTDsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg5OCw2ICs5MDcsOSBAQAogCQlzZXNzaW9uLT5oaWQgPSBOVUxMOwogCX0KIAorCWtmcmVlKHNlc3Npb24tPnJkX2RhdGEpOworCXNlc3Npb24tPnJkX2RhdGEgPSBOVUxMOworCiBwdXJnZToKIAlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmN0cmxfdHJhbnNtaXQpOwogCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+aW50cl90cmFuc21pdCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oIGIvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaAppbmRleCBmYWYzZDc0Li5hNGUyMTVkIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKQEAgLTE1NCw3ICsxNTQsOSBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgY3RybF90cmFuc21pdDsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGludHJfdHJhbnNtaXQ7CiAKLQlzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxOworCS8qIFJlcG9ydCBkZXNjcmlwdG9yICovCisJX191OCAqcmRfZGF0YTsKKwl1aW50IHJkX3NpemU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGlkcF9zY2hlZHVsZShzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IDExMjBjZjEuLjQwMGVmYTIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTEzNjgsNyArMTM2OCw2IEBACiAKIAl3aGlsZSAoKHNrYiA9IHNrLT5za19zZW5kX2hlYWQpICYmICghbDJjYXBfdHhfd2luZG93X2Z1bGwoc2spKSAmJgogCSAgICAgICAhKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkpIHsKLQkJdHhfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAKIAkJaWYgKHBpLT5yZW1vdGVfbWF4X3R4ICYmCiAJCQkJYnRfY2Ioc2tiKS0+cmV0cmllcyA9PSBwaS0+cmVtb3RlX21heF90eCkgewpAQCAtMTM3Niw2ICsxMzc1LDggQEAKIAkJCWJyZWFrOwogCQl9CiAKKwkJdHhfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisKIAkJYnRfY2Ioc2tiKS0+cmV0cmllcysrOwogCiAJCWNvbnRyb2wgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHhfc2tiLT5kYXRhICsgTDJDQVBfSERSX1NJWkUpOwpAQCAtMzUxOCw3ICszNTE5LDYgQEAKIAlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpOwogCXUxNiBjb250cm9sLCBsZW47CiAJdTggdHhfc2VxOwotCWludCBlcnI7CiAKIAlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgY2lkKTsKIAlpZiAoIXNrKSB7CkBAIC0zNTcwLDEzICszNTcwLDExIEBACiAJCQlnb3RvIGRyb3A7CiAKIAkJaWYgKF9faXNfaWZyYW1lKGNvbnRyb2wpKQotCQkJZXJyID0gbDJjYXBfZGF0YV9jaGFubmVsX2lmcmFtZShzaywgY29udHJvbCwgc2tiKTsKKwkJCWwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CiAJCWVsc2UKLQkJCWVyciA9IGwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCQlsMmNhcF9kYXRhX2NoYW5uZWxfc2ZyYW1lKHNrLCBjb250cm9sLCBza2IpOwogCi0JCWlmICghZXJyKQotCQkJZ290byBkb25lOwotCQlicmVhazsKKwkJZ290byBkb25lOwogCiAJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKIAkJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOwpAQCAtMzYwMiw3ICszNjAwLDcgQEAKIAkJZWxzZQogCQkJcGktPmV4cGVjdGVkX3R4X3NlcSA9IHR4X3NlcSArIDE7CiAKLQkJZXJyID0gbDJjYXBfc2FyX3JlYXNzZW1ibHlfc2R1KHNrLCBza2IsIGNvbnRyb2wpOworCQlsMmNhcF9zYXJfcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgY29udHJvbCk7CiAKIAkJZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggZmM1ZWUzMi4uODlmNGE1OSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtMjUyLDcgKzI1Miw2IEBACiAJQlRfREJHKCJzZXNzaW9uICVwIHN0YXRlICVsZCIsIHMsIHMtPnN0YXRlKTsKIAogCXNldF9iaXQoUkZDT01NX1RJTUVEX09VVCwgJnMtPmZsYWdzKTsKLQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7CiAJcmZjb21tX3NjaGVkdWxlKFJGQ09NTV9TQ0hFRF9USU1FTyk7CiB9CiAKQEAgLTExNTEsNyArMTE1MCwxMSBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBCVF9ESVNDT05OOgotCQkJcmZjb21tX3Nlc3Npb25fcHV0KHMpOworCQkJLyogV2hlbiBzb2NrZXQgaXMgY2xvc2VkIGFuZCB3ZSBhcmUgbm90IFJGQ09NTQorCQkJICogaW5pdGlhdG9yIHJmY29tbV9wcm9jZXNzX3J4IGFscmVhZHkgY2FsbHMKKwkJCSAqIHJmY29tbV9zZXNzaW9uX3B1dCgpICovCisJCQlpZiAocy0+c29jay0+c2stPnNrX3N0YXRlICE9IEJUX0NMT1NFRCkKKwkJCQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE5MjAsNiArMTkyMyw3IEBACiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX1RJTUVEX09VVCwgJnMtPmZsYWdzKSkgewogCQkJcy0+c3RhdGUgPSBCVF9ESVNDT05OOwogCQkJcmZjb21tX3NlbmRfZGlzYyhzLCAwKTsKKwkJCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYmU5OTI0Zi4uYmIxZjFkYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTIwNDEsNyArMjA0MSw3IEBACiAJcmN1X3JlYWRfbG9ja19iaCgpOwogCiAJdHhxID0gZGV2X3BpY2tfdHgoZGV2LCBza2IpOwotCXEgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7CisJcSA9IHJjdV9kZXJlZmVyZW5jZV9iaCh0eHEtPnFkaXNjKTsKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCXNrYi0+dGNfdmVyZCA9IFNFVF9UQ19BVChza2ItPnRjX3ZlcmQsIEFUX0VHUkVTUyk7CkBAIC0yNzYxLDcgKzI3NjEsNyBAQAogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSBHUk9fTk9STUFMOgogCWNhc2UgR1JPX0hFTEQ6Ci0JCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5hcGktPmRldik7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKIAogCQlpZiAocmV0ID09IEdST19IRUxEKQogCQkJc2tiX2dyb19wdWxsKHNrYiwgLUVUSF9ITEVOKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RzdC5jIGIvbmV0L2NvcmUvZHN0LmMKaW5kZXggNTdiYzRkNS4uY2IxYjM0OCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZHN0LmMKKysrIGIvbmV0L2NvcmUvZHN0LmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIApAQCAtNzksNiArODAsNyBAQAogCXdoaWxlICgoZHN0ID0gbmV4dCkgIT0gTlVMTCkgewogCQluZXh0ID0gZHN0LT5uZXh0OwogCQlwcmVmZXRjaCgmbmV4dC0+bmV4dCk7CisJCWNvbmRfcmVzY2hlZCgpOwogCQlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZkc3QtPl9fcmVmY250KSkpIHsKIAkJCWxhc3QtPm5leHQgPSBkc3Q7CiAJCQlsYXN0ID0gZHN0OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IGQ4YWVlNTguLjIzNmE5OTggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTkyNyw2ICs5MjcsNyBAQAogCWNhc2UgRVRIVE9PTF9HUEVSTUFERFI6CiAJY2FzZSBFVEhUT09MX0dVRk86CiAJY2FzZSBFVEhUT09MX0dHU086CisJY2FzZSBFVEhUT09MX0dHUk86CiAJY2FzZSBFVEhUT09MX0dGTEFHUzoKIAljYXNlIEVUSFRPT0xfR1BGTEFHUzoKIAljYXNlIEVUSFRPT0xfR1JYRkg6CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDA4ZGI3YjkuLjM1NDFhYTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCisrKyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC04Niw3ICs4Niw3IEBACiAJCXJldHVybiBlcnI7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZV9iaChzay0+c2tfZmlsdGVyKTsKIAlpZiAoZmlsdGVyKSB7CiAJCXVuc2lnbmVkIGludCBwa3RfbGVuID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMsCiAJCQkJZmlsdGVyLT5sZW4pOwpAQCAtNTIxLDcgKzUyMSw3IEBACiAJfQogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCW9sZF9mcCA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlvbGRfZnAgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2stPnNrX2ZpbHRlcik7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIGZwKTsKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIApAQCAtNTM2LDcgKzUzNiw3IEBACiAJc3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyOwogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2stPnNrX2ZpbHRlcik7CiAJaWYgKGZpbHRlcikgewogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgTlVMTCk7CiAJCXNrX2ZpbHRlcl9kZWxheWVkX3VuY2hhcmdlKHNrLCBmaWx0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwppbmRleCBmYmMxYzc0Li4wOTljNzUzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuYworKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwpAQCAtNDEwLDcgKzQxMCw4IEBACiAJY29uc3Qgc3RydWN0IGl3X3N0YXRpc3RpY3MgKml3OwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKIAotCXJ0bmxfbG9jaygpOworCWlmICghcnRubF90cnlsb2NrKCkpCisJCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKIAlpZiAoZGV2X2lzYWxpdmUoZGV2KSkgewogCQlpdyA9IGdldF93aXJlbGVzc19zdGF0cyhkZXYpOwogCQlpZiAoaXcpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IGRlMGMyYzcuLjJlNjkyYWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0zNTI0LDYgKzM1MjQsNyBAQAogCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodC0+cXVldWUsCiAJCQkJCQkJIHQtPmNvbnRyb2wgIT0gMCwKIAkJCQkJCQkgSFovMTApOworCQkJdHJ5X3RvX2ZyZWV6ZSgpOwogCQkJY29udGludWU7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA3OTRiY2I4Li40YzdkM2Y2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtODksNiArODksMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRubF9pc19sb2NrZWQpOwogCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK2ludCBsb2NrZGVwX3J0bmxfaXNfaGVsZCh2b2lkKQoreworCXJldHVybiBsb2NrZGVwX2lzX2hlbGQoJnJ0bmxfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChsb2NrZGVwX3J0bmxfaXNfaGVsZCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HICovCisKIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rICpydG5sX21zZ19oYW5kbGVyc1tOUFJPVE9dOwogCiBzdGF0aWMgaW5saW5lIGludCBydG1fbXNnaW5kZXgoaW50IG1zZ3R5cGUpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggZTFmNmYyMi4uMzA1Y2JhNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMTA3Myw3ICsxMDczLDggQEAKIAlpZiAoc2stPnNrX2Rlc3RydWN0KQogCQlzay0+c2tfZGVzdHJ1Y3Qoc2spOwogCi0JZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay0+c2tfZmlsdGVyLAorCQkJCSAgICAgICBhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpID09IDApOwogCWlmIChmaWx0ZXIpIHsKIAkJc2tfZmlsdGVyX3VuY2hhcmdlKHNrLCBmaWx0ZXIpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmMgYi9uZXQvZGNjcC9jY2lkLmMKaW5kZXggNTdkZmI5Yy4uZmYxNmU5ZCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5jCisrKyBiL25ldC9kY2NwL2NjaWQuYwpAQCAtODMsNyArODMsNyBAQAogCXZhX2xpc3QgYXJnczsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JdnNucHJpbnRmKHNsYWJfbmFtZV9mbXQsIHNpemVvZihzbGFiX25hbWVfZm10KSwgZm10LCBhcmdzKTsKKwl2c25wcmludGYoc2xhYl9uYW1lX2ZtdCwgQ0NJRF9TTEFCX05BTUVfTEVOR1RILCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIAogCXNsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShzbGFiX25hbWVfZm10LCBzaXplb2Yoc3RydWN0IGNjaWQpICsgb2JqX3NpemUsIDAsCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmggYi9uZXQvZGNjcC9jY2lkLmgKaW5kZXggMjY5OTU4Yi4uNmRmNmY4YSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5oCisrKyBiL25ldC9kY2NwL2NjaWQuaApAQCAtMTksNyArMTksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotI2RlZmluZSBDQ0lEX01BWCAyNTUKKy8qIG1heGltdW0gdmFsdWUgZm9yIGEgQ0NJRCAoUkZDIDQzNDAsIDE5LjUpICovCisjZGVmaW5lIENDSURfTUFYCQkyNTUKKyNkZWZpbmUgQ0NJRF9TTEFCX05BTUVfTEVOR1RICTMyCiAKIHN0cnVjdCB0Y3BfaW5mbzsKIApAQCAtNDksOCArNTEsOCBAQAogCWNvbnN0IGNoYXIJCSpjY2lkX25hbWU7CiAJc3RydWN0IGttZW1fY2FjaGUJKmNjaWRfaGNfcnhfc2xhYiwKIAkJCQkqY2NpZF9oY190eF9zbGFiOwotCWNoYXIJCQljY2lkX2hjX3J4X3NsYWJfbmFtZVszMl07Ci0JY2hhcgkJCWNjaWRfaGNfdHhfc2xhYl9uYW1lWzMyXTsKKwljaGFyCQkJY2NpZF9oY19yeF9zbGFiX25hbWVbQ0NJRF9TTEFCX05BTUVfTEVOR1RIXTsKKwljaGFyCQkJY2NpZF9oY190eF9zbGFiX25hbWVbQ0NJRF9TTEFCX05BTUVfTEVOR1RIXTsKIAlfX3UzMgkJCWNjaWRfaGNfcnhfb2JqX3NpemUsCiAJCQkJY2NpZF9oY190eF9vYmpfc2l6ZTsKIAkvKiBJbnRlcmZhY2UgUm91dGluZXMgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb2JlLmMgYi9uZXQvZGNjcC9wcm9iZS5jCmluZGV4IGJhY2UxZDguLmY1YjM0NjQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb2JlLmMKKysrIGIvbmV0L2RjY3AvcHJvYmUuYwpAQCAtMTYxLDggKzE2MSw4IEBACiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsIHByb2NuYW1lLCBTX0lSVVNSLCAmZGNjcHByb2JlX2ZvcHMpKQogCQlnb3RvIGVycjA7CiAKLQlyZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSgocmVnaXN0ZXJfanByb2JlKCZkY2NwX3NlbmRfcHJvYmUpID09IDApLAotCQkJCQkiZGNjcCIpOworCXRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKChyZXQgPSByZWdpc3Rlcl9qcHJvYmUoJmRjY3Bfc2VuZF9wcm9iZSkpID09IDAsCisJCQkJImRjY3AiKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjE7CiAKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCBhMDMyODQwLi5hN2JmMDNjIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC0xMTU1LDggKzExNTUsOCBAQAogCiAJaWYgKCEoZmxhZ3MgJiBNU0dfVFJZSEFSRCkpIHsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IocnQgPSByY3VfZGVyZWZlcmVuY2UoZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0OwotCQkJcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUuZHN0LmRuX25leHQpKSB7CisJCWZvciAocnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0OworCQkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnQtPnUuZHN0LmRuX25leHQpKSB7CiAJCQlpZiAoKGZscC0+ZmxkX2RzdCA9PSBydC0+ZmwuZmxkX2RzdCkgJiYKIAkJCSAgICAoZmxwLT5mbGRfc3JjID09IHJ0LT5mbC5mbGRfc3JjKSAmJgogCQkJICAgIChmbHAtPm1hcmsgPT0gcnQtPmZsLm1hcmspICYmCkBAIC0xNjE4LDkgKzE2MTgsOSBAQAogCQlpZiAoaCA+IHNfaCkKIAkJCXNfaWR4ID0gMDsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IocnQgPSByY3VfZGVyZWZlcmVuY2UoZG5fcnRfaGFzaF90YWJsZVtoXS5jaGFpbiksIGlkeCA9IDA7CisJCWZvcihydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChkbl9ydF9oYXNoX3RhYmxlW2hdLmNoYWluKSwgaWR4ID0gMDsKIAkJCXJ0OwotCQkJcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUuZHN0LmRuX25leHQpLCBpZHgrKykgeworCQkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnQtPnUuZHN0LmRuX25leHQpLCBpZHgrKykgewogCQkJaWYgKGlkeCA8IHNfaWR4KQogCQkJCWNvbnRpbnVlOwogCQkJc2tiX2RzdF9zZXQoc2tiLCBkc3RfY2xvbmUoJnJ0LT51LmRzdCkpOwpAQCAtMTY1NCwxMiArMTY1NCwxMiBAQAogCiAJZm9yKHMtPmJ1Y2tldCA9IGRuX3J0X2hhc2hfbWFzazsgcy0+YnVja2V0ID49IDA7IC0tcy0+YnVja2V0KSB7CiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQkJcnQgPSBkbl9ydF9oYXNoX3RhYmxlW3MtPmJ1Y2tldF0uY2hhaW47CisJCXJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRuX3J0X2hhc2hfdGFibGVbcy0+YnVja2V0XS5jaGFpbik7CiAJCWlmIChydCkKIAkJCWJyZWFrOwogCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAl9Ci0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShydCk7CisJcmV0dXJuIHJ0OwogfQogCiBzdGF0aWMgc3RydWN0IGRuX3JvdXRlICpkbl9ydF9jYWNoZV9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRuX3JvdXRlICpydCkKQEAgLTE2NzQsNyArMTY3NCw3IEBACiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAkJcnQgPSBkbl9ydF9oYXNoX3RhYmxlW3MtPmJ1Y2tldF0uY2hhaW47CiAJfQotCXJldHVybiByY3VfZGVyZWZlcmVuY2UocnQpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfYmgocnQpOwogfQogCiBzdGF0aWMgdm9pZCAqZG5fcnRfY2FjaGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCAwNDBjNGYwLi4yNmRlYzJiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xMzE3LDE0ICsxMzE3LDE5IEBACiB7CiAJaW50ICp2YWxwID0gY3RsLT5kYXRhOwogCWludCB2YWwgPSAqdmFscDsKKwlsb2ZmX3QgcG9zID0gKnBwb3M7CiAJaW50IHJldCA9IHByb2NfZG9pbnR2ZWMoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAogCWlmICh3cml0ZSAmJiAqdmFscCAhPSB2YWwpIHsKIAkJc3RydWN0IG5ldCAqbmV0ID0gY3RsLT5leHRyYTI7CiAKIAkJaWYgKHZhbHAgIT0gJklQVjRfREVWQ09ORl9ERkxUKG5ldCwgRk9SV0FSRElORykpIHsKLQkJCWlmICghcnRubF90cnlsb2NrKCkpCisJCQlpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7CisJCQkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSByZXN0YXJ0aW5nICovCisJCQkJKnZhbHAgPSB2YWw7CisJCQkJKnBwb3MgPSBwb3M7CiAJCQkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOworCQkJfQogCQkJaWYgKHZhbHAgPT0gJklQVjRfREVWQ09ORl9BTEwobmV0LCBGT1JXQVJESU5HKSkgewogCQkJCWluZXRfZm9yd2FyZF9jaGFuZ2UobmV0KTsKIAkJCX0gZWxzZSBpZiAoKnZhbHApIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCA3NmMwODQwLi5hNDJmNjU4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC05NDYsNyArOTQ2LDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQ6CiAJY2FzZSBJR01QVjJfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKLQljYXNlIElHTVBWM19IT1NUX01FTUJFUlNISVBfUkVQT1JUOgogCQkvKiBJcyBpdCBvdXIgcmVwb3J0IGxvb3BlZCBiYWNrPyAqLwogCQlpZiAoc2tiX3J0YWJsZShza2IpLT5mbC5paWYgPT0gMCkKIAkJCWJyZWFrOwpAQCAtOTYwLDYgKzk1OSw3IEBACiAJCWluX2Rldl9wdXQoaW5fZGV2KTsKIAkJcmV0dXJuIHBpbV9yY3ZfdjEoc2tiKTsKICNlbmRpZgorCWNhc2UgSUdNUFYzX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQ6CiAJY2FzZSBJR01QX0RWTVJQOgogCWNhc2UgSUdNUF9UUkFDRToKIAljYXNlIElHTVBfSE9TVF9MRUFWRV9NRVNTQUdFOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb21wLmMgYi9uZXQvaXB2NC9pcGNvbXAuYwppbmRleCAzOGZiZjA0Li41NDRjZTA4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbXAuYworKysgYi9uZXQvaXB2NC9pcGNvbXAuYwpAQCAtMTI0LDE2ICsxMjQsMTIgQEAKIAlpZiAoeC0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7CiAJCWVyciA9IGlwY29tcF90dW5uZWxfYXR0YWNoKHgpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcl90dW5uZWw7CisJCQlnb3RvIG91dDsKIAl9CiAKIAllcnIgPSAwOwogb3V0OgogCXJldHVybiBlcnI7Ci0KLWVycm9yX3R1bm5lbDoKLQlpcGNvbXBfZGVzdHJveSh4KTsKLQlnb3RvIG91dDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX3R5cGUgaXBjb21wX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCAwNjYzMjc2Li45MDIwM2UxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTkyNSwxMCArOTI1LDEwIEBACiAJaWYgKHQgJiYgIUlTX0VSUih0KSkgewogCQlzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKLQogI2lmZGVmIENPTkZJR19DT01QQVQKKwkJc3RydWN0IHh0X3RhYmxlX2luZm8gdG1wOworCiAJCWlmIChjb21wYXQpIHsKLQkJCXN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDsKIAkJCXJldCA9IGNvbXBhdF90YWJsZV9pbmZvKHByaXZhdGUsICZ0bXApOwogCQkJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoTkZQUk9UT19BUlApOwogCQkJcHJpdmF0ZSA9ICZ0bXA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggNTcyMzMwYS4uM2NlNTNjZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtMTEzMiwxMCArMTEzMiwxMCBAQAogCWlmICh0ICYmICFJU19FUlIodCkpIHsKIAkJc3RydWN0IGlwdF9nZXRpbmZvIGluZm87CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKLQogI2lmZGVmIENPTkZJR19DT01QQVQKKwkJc3RydWN0IHh0X3RhYmxlX2luZm8gdG1wOworCiAJCWlmIChjb21wYXQpIHsKLQkJCXN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDsKIAkJCXJldCA9IGNvbXBhdF90YWJsZV9pbmZvKHByaXZhdGUsICZ0bXApOwogCQkJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoQUZfSU5FVCk7CiAJCQlwcml2YXRlID0gJnRtcDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IGQxNzFiMTIuLmQxZWEzOGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfYnVja2V0cyIsCi0JCS5kYXRhCQk9ICZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsCisJCS5kYXRhCQk9ICZpbml0X25ldC5jdC5odGFibGVfc2l6ZSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDQ0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCmluZGV4IDg2NjhhM2QuLjJmYjdiNzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCkBAIC0zMiw3ICszMiw3IEBACiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlmb3IgKHN0LT5idWNrZXQgPSAwOwotCSAgICAgc3QtPmJ1Y2tldCA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKKwkgICAgIHN0LT5idWNrZXQgPCBuZXQtPmN0Lmh0YWJsZV9zaXplOwogCSAgICAgc3QtPmJ1Y2tldCsrKSB7CiAJCW4gPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKIAkJaWYgKCFpc19hX251bGxzKG4pKQpAQCAtNTAsNyArNTAsNyBAQAogCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UoaGVhZC0+bmV4dCk7CiAJd2hpbGUgKGlzX2FfbnVsbHMoaGVhZCkpIHsKIAkJaWYgKGxpa2VseShnZXRfbnVsbHNfdmFsdWUoaGVhZCkgPT0gc3QtPmJ1Y2tldCkpIHsKLQkJCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQorCQkJaWYgKCsrc3QtPmJ1Y2tldCA+PSBuZXQtPmN0Lmh0YWJsZV9zaXplKQogCQkJCXJldHVybiBOVUxMOwogCQl9CiAJCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggZmUxYTY0NC4uMjYwNjZhMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTM1LDkgKzM1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90byBfX3JlYWRfbW9zdGx5OwogCi0vKiBDYWxjdWxhdGVkIGF0IGluaXQgYmFzZWQgb24gbWVtb3J5IHNpemUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHk7Ci0KICNkZWZpbmUgTUFYX0lQX05BVF9QUk9UTyAyNTYKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpuZl9uYXRfcHJvdG9zW01BWF9JUF9OQVRfUFJPVE9dCiAJCQkJCQlfX3JlYWRfbW9zdGx5OwpAQCAtNzIsNyArNjksNyBAQAogCiAvKiBXZSBrZWVwIGFuIGV4dHJhIGhhc2ggZm9yIGVhY2ggY29ubnRyYWNrLCBmb3IgZmFzdCBzZWFyY2hpbmcuICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotaGFzaF9ieV9zcmMoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitoYXNoX2J5X3NyYyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXVuc2lnbmVkIGludCBoYXNoOwogCkBAIC04MCw3ICs3Nyw3IEBACiAJaGFzaCA9IGpoYXNoXzN3b3JkcygoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy51My5pcCwKIAkJCSAgICAoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy51LmFsbCwKIAkJCSAgICB0dXBsZS0+ZHN0LnByb3RvbnVtLCAwKTsKLQlyZXR1cm4gKCh1NjQpaGFzaCAqIG5mX25hdF9odGFibGVfc2l6ZSkgPj4gMzI7CisJcmV0dXJuICgodTY0KWhhc2ggKiBuZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplKSA+PiAzMjsKIH0KIAogLyogSXMgdGhpcyB0dXBsZSBhbHJlYWR5IHRha2VuPyAobm90IGJ5IHVzKSAqLwpAQCAtMTQ3LDcgKzE0NCw3IEBACiAJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcmVzdWx0LAogCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQogewotCXVuc2lnbmVkIGludCBoID0gaGFzaF9ieV9zcmModHVwbGUpOworCXVuc2lnbmVkIGludCBoID0gaGFzaF9ieV9zcmMobmV0LCB0dXBsZSk7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQ7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OwogCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpuOwpAQCAtMzMwLDcgKzMyNyw3IEBACiAJaWYgKGhhdmVfdG9faGFzaCkgewogCQl1bnNpZ25lZCBpbnQgc3JjaGFzaDsKIAotCQlzcmNoYXNoID0gaGFzaF9ieV9zcmMoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJCXNyY2hhc2ggPSBoYXNoX2J5X3NyYyhuZXQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpOwogCQlzcGluX2xvY2tfYmgoJm5mX25hdF9sb2NrKTsKIAkJLyogbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5IG1pZ2h0IHJlLWFsbG9jYXRlIGV4bnRlbnNpb24gYWVyYSAqLwogCQluYXQgPSBuZmN0X25hdChjdCk7CkBAIC02NzksOCArNjc2LDEwIEBACiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9uYXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCW5ldC0+aXB2NC5uYXRfYnlzb3VyY2UgPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5mX25hdF9odGFibGVfc2l6ZSwKLQkJCQkJCSAgICAgICZuZXQtPmlwdjQubmF0X3ZtYWxsb2NlZCwgMCk7CisJLyogTGVhdmUgdGhlbSB0aGUgc2FtZSBmb3IgdGhlIG1vbWVudC4gKi8KKwluZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplID0gbmV0LT5jdC5odGFibGVfc2l6ZTsKKwluZXQtPmlwdjQubmF0X2J5c291cmNlID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplLAorCQkJCQkJICAgICAgICZuZXQtPmlwdjQubmF0X3ZtYWxsb2NlZCwgMCk7CiAJaWYgKCFuZXQtPmlwdjQubmF0X2J5c291cmNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKQEAgLTcwMyw3ICs3MDIsNyBAQAogCW5mX2N0X2l0ZXJhdGVfY2xlYW51cChuZXQsICZjbGVhbl9uYXQsIE5VTEwpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCW5mX2N0X2ZyZWVfaGFzaHRhYmxlKG5ldC0+aXB2NC5uYXRfYnlzb3VyY2UsIG5ldC0+aXB2NC5uYXRfdm1hbGxvY2VkLAotCQkJICAgICBuZl9uYXRfaHRhYmxlX3NpemUpOworCQkJICAgICBuZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBuZl9uYXRfbmV0X29wcyA9IHsKQEAgLTcyNCw5ICs3MjMsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIExlYXZlIHRoZW0gdGhlIHNhbWUgZm9yIHRoZSBtb21lbnQuICovCi0JbmZfbmF0X2h0YWJsZV9zaXplID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwotCiAJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmbmZfbmF0X25ldF9vcHMpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfZXh0ZW5kOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZDYyYjA1ZC4uNGYxMWZhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yODcsMTIgKzI4NywxMiBAQAogCQlpZiAoIXJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pCiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlyID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pOworCQlyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pOwogCQl3aGlsZSAocikgewogCQkJaWYgKGRldl9uZXQoci0+dS5kc3QuZGV2KSA9PSBzZXFfZmlsZV9uZXQoc2VxKSAmJgogCQkJICAgIHItPnJ0X2dlbmlkID09IHN0LT5nZW5pZCkKIAkJCQlyZXR1cm4gcjsKLQkJCXIgPSByY3VfZGVyZWZlcmVuY2Uoci0+dS5kc3QucnRfbmV4dCk7CisJCQlyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHItPnUuZHN0LnJ0X25leHQpOwogCQl9CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCX0KQEAgLTMxNCw3ICszMTQsNyBAQAogCQlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJCXIgPSBydF9oYXNoX3RhYmxlW3N0LT5idWNrZXRdLmNoYWluOwogCX0KLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHIpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfYmgocik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpydF9jYWNoZV9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKQEAgLTI2ODksOCArMjY4OSw4IEBACiAJaGFzaCA9IHJ0X2hhc2goZmxwLT5mbDRfZHN0LCBmbHAtPmZsNF9zcmMsIGZscC0+b2lmLCBydF9nZW5pZChuZXQpKTsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmb3IgKHJ0aCA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnRoOwotCQlydGggPSByY3VfZGVyZWZlcmVuY2UocnRoLT51LmRzdC5ydF9uZXh0KSkgeworCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CisJCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydGgtPnUuZHN0LnJ0X25leHQpKSB7CiAJCWlmIChydGgtPmZsLmZsNF9kc3QgPT0gZmxwLT5mbDRfZHN0ICYmCiAJCSAgICBydGgtPmZsLmZsNF9zcmMgPT0gZmxwLT5mbDRfc3JjICYmCiAJCSAgICBydGgtPmZsLmlpZiA9PSAwICYmCkBAIC0zMDA4LDggKzMwMDgsOCBAQAogCQlpZiAoIXJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pCiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IgKHJ0ID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pLCBpZHggPSAwOyBydDsKLQkJICAgICBydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QucnRfbmV4dCksIGlkeCsrKSB7CisJCWZvciAocnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnRfaGFzaF90YWJsZVtoXS5jaGFpbiksIGlkeCA9IDA7IHJ0OworCQkgICAgIHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0LT51LmRzdC5ydF9uZXh0KSwgaWR4KyspIHsKIAkJCWlmICghbmV0X2VxKGRldl9uZXQocnQtPnUuZHN0LmRldiksIG5ldCkgfHwgaWR4IDwgc19pZHgpCiAJCQkJY29udGludWU7CiAJCQlpZiAocnRfaXNfZXhwaXJlZChydCkpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDI4ZTAyOTYuLjNmZGRjNjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC01NzgzLDExICs1NzgzLDkgQEAKIAogCQkJCS8qIHRjcF9hY2sgY29uc2lkZXJzIHRoaXMgQUNLIGFzIGR1cGxpY2F0ZQogCQkJCSAqIGFuZCBkb2VzIG5vdCBjYWxjdWxhdGUgcnR0LgotCQkJCSAqIEZpeCBpdCBhdCBsZWFzdCB3aXRoIHRpbWVzdGFtcHMuCisJCQkJICogRm9yY2UgaXQgaGVyZS4KIAkJCQkgKi8KLQkJCQlpZiAodHAtPnJ4X29wdC5zYXdfdHN0YW1wICYmCi0JCQkJICAgIHRwLT5yeF9vcHQucmN2X3RzZWNyICYmICF0cC0+c3J0dCkKLQkJCQkJdGNwX2Fja19zYXdfdHN0YW1wKHNrLCAwKTsKKwkJCQl0Y3BfYWNrX3VwZGF0ZV9ydHQoc2ssIDAsIDApOwogCiAJCQkJaWYgKHRwLT5yeF9vcHQudHN0YW1wX29rKQogCQkJCQl0cC0+YWR2bXNzIC09IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCBkZTdhMTk0Li4xNDM3OTFkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTUwMiw4ICs1MDIsMTEgQEAKIAlpZiAocCA9PSAmbmV0LT5pcHY2LmRldmNvbmZfZGZsdC0+Zm9yd2FyZGluZykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIXJ0bmxfdHJ5bG9jaygpKQorCWlmICghcnRubF90cnlsb2NrKCkpIHsKKwkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSByZXN0YXJ0aW5nICovCisJCSpwID0gb2xkOwogCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7CisJfQogCiAJaWYgKHAgPT0gJm5ldC0+aXB2Ni5kZXZjb25mX2FsbC0+Zm9yd2FyZGluZykgewogCQlfX3MzMiBuZXdmID0gbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5mb3J3YXJkaW5nOwpAQCAtNDAyOCwxMiArNDAzMSwxNSBAQAogewogCWludCAqdmFscCA9IGN0bC0+ZGF0YTsKIAlpbnQgdmFsID0gKnZhbHA7CisJbG9mZl90IHBvcyA9ICpwcG9zOwogCWludCByZXQ7CiAKIAlyZXQgPSBwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAKIAlpZiAod3JpdGUpCiAJCXJldCA9IGFkZHJjb25mX2ZpeHVwX2ZvcndhcmRpbmcoY3RsLCB2YWxwLCB2YWwpOworCWlmIChyZXQpCisJCSpwcG9zID0gcG9zOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQwNzUsOCArNDA4MSwxMSBAQAogCWlmIChwID09ICZuZXQtPmlwdjYuZGV2Y29uZl9kZmx0LT5kaXNhYmxlX2lwdjYpCiAJCXJldHVybiAwOwogCi0JaWYgKCFydG5sX3RyeWxvY2soKSkKKwlpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7CisJCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlcyBiZWZvcmUgcmVzdGFydGluZyAqLworCQkqcCA9IG9sZDsKIAkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOworCX0KIAogCWlmIChwID09ICZuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmRpc2FibGVfaXB2NikgewogCQlfX3MzMiBuZXdmID0gbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5kaXNhYmxlX2lwdjY7CkBAIC00MDk1LDEyICs0MTA0LDE1IEBACiB7CiAJaW50ICp2YWxwID0gY3RsLT5kYXRhOwogCWludCB2YWwgPSAqdmFscDsKKwlsb2ZmX3QgcG9zID0gKnBwb3M7CiAJaW50IHJldDsKIAogCXJldCA9IHByb2NfZG9pbnR2ZWMoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAogCWlmICh3cml0ZSkKIAkJcmV0ID0gYWRkcmNvbmZfZGlzYWJsZV9pcHY2KGN0bCwgdmFscCwgdmFsKTsKKwlpZiAocmV0KQorCQkqcHBvcyA9IHBvczsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggMmYyYTVjYS4uMDAyZTZlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtMTU0LDE2ICsxNTQsMTIgQEAKIAlpZiAoeC0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7CiAJCWVyciA9IGlwY29tcDZfdHVubmVsX2F0dGFjaCh4KTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3JfdHVubmVsOworCQkJZ290byBvdXQ7CiAJfQogCiAJZXJyID0gMDsKIG91dDoKIAlyZXR1cm4gZXJyOwotZXJyb3JfdHVubmVsOgotCWlwY29tcF9kZXN0cm95KHgpOwotCi0JZ290byBvdXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV90eXBlIGlwY29tcDZfdHlwZSA9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCA0ODBkN2Y4Li44YTdlMGY1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTExNjQsMTAgKzExNjQsMTAgQEAKIAlpZiAodCAmJiAhSVNfRVJSKHQpKSB7CiAJCXN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbzsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOwotCiAjaWZkZWYgQ09ORklHX0NPTVBBVAorCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7CisKIAkJaWYgKGNvbXBhdCkgewotCQkJc3RydWN0IHh0X3RhYmxlX2luZm8gdG1wOwogCQkJcmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgJnRtcCk7CiAJCQl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUNik7CiAJCQlwcml2YXRlID0gJnRtcDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwppbmRleCAzMTJjMjBhLi42MjRhNTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCkBAIC02Myw2ICs2Myw3IEBACiAJc3RydWN0IGluZXRfZnJhZ19xdWV1ZQlxOwogCiAJX19iZTMyCQkJaWQ7CQkvKiBmcmFnbWVudCBpZAkJKi8KKwl1MzIJCQl1c2VyOwogCXN0cnVjdCBpbjZfYWRkcgkJc2FkZHI7CiAJc3RydWN0IGluNl9hZGRyCQlkYWRkcjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYwppbmRleCAxNTYwMjBkLi42YjM2MDJkIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYworKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYwpAQCAtNjk4LDE1ICs2OTgsMTggQEAKIAogICAgICAgLyogUXVlcnkgUFBQIGNoYW5uZWwgYW5kIHVuaXQgbnVtYmVyICovCiAgICAgY2FzZSBQUFBJT0NHQ0hBTjoKKyAgICAgIGxvY2tfa2VybmVsKCk7CiAgICAgICBpZihhcC0+cHBwX29wZW4gJiYgIXB1dF91c2VyKHBwcF9jaGFubmVsX2luZGV4KCZhcC0+Y2hhbiksCiAJCQkJCQkoaW50IF9fdXNlciAqKWFyZ3ApKQogCWVyciA9IDA7CisgICAgICB1bmxvY2tfa2VybmVsKCk7CiAgICAgICBicmVhazsKICAgICBjYXNlIFBQUElPQ0dVTklUOgogICAgICAgbG9ja19rZXJuZWwoKTsKICAgICAgIGlmKGFwLT5wcHBfb3BlbiAmJiAhcHV0X3VzZXIocHBwX3VuaXRfbnVtYmVyKCZhcC0+Y2hhbiksCiAJCQkJCQkoaW50IF9fdXNlciAqKWFyZ3ApKQotICAgICAgZXJyID0gMDsKKyAgICAgICAgZXJyID0gMDsKKyAgICAgIHVubG9ja19rZXJuZWwoKTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBBbGwgdGhlc2UgaW9jdGxzIGNhbiBiZSBwYXNzZWQgYm90aCBkaXJlY3RseSBhbmQgZnJvbSBwcHBfZ2VuZXJpYywKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IDc2ZmE2ZmUuLjUzOWY0M2IgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMzc5NCw5ICszNzk0LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwc2VjX3Bma2V5X2V4aXQodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnBma2V5X25ldF9vcHMpOwogCXhmcm1fdW5yZWdpc3Rlcl9rbSgmcGZrZXl2Ml9tZ3IpOwogCXNvY2tfdW5yZWdpc3RlcihQRl9LRVkpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmcGZrZXlfbmV0X29wcyk7CiAJcHJvdG9fdW5yZWdpc3Rlcigma2V5X3Byb3RvKTsKIH0KIApAQCAtMzgwNywyMSArMzgwNywyMiBAQAogCWlmIChlcnIgIT0gMCkKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBzb2NrX3JlZ2lzdGVyKCZwZmtleV9mYW1pbHlfb3BzKTsKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZwZmtleV9uZXRfb3BzKTsKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfa2V5X3Byb3RvOworCWVyciA9IHNvY2tfcmVnaXN0ZXIoJnBma2V5X2ZhbWlseV9vcHMpOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9wZXJuZXQ7CiAJZXJyID0geGZybV9yZWdpc3Rlcl9rbSgmcGZrZXl2Ml9tZ3IpOwogCWlmIChlcnIgIT0gMCkKIAkJZ290byBvdXRfc29ja191bnJlZ2lzdGVyOwotCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnBma2V5X25ldF9vcHMpOwotCWlmIChlcnIgIT0gMCkKLQkJZ290byBvdXRfeGZybV91bnJlZ2lzdGVyX2ttOwogb3V0OgogCXJldHVybiBlcnI7Ci1vdXRfeGZybV91bnJlZ2lzdGVyX2ttOgotCXhmcm1fdW5yZWdpc3Rlcl9rbSgmcGZrZXl2Ml9tZ3IpOworCiBvdXRfc29ja191bnJlZ2lzdGVyOgogCXNvY2tfdW5yZWdpc3RlcihQRl9LRVkpOworb3V0X3VucmVnaXN0ZXJfcGVybmV0OgorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmcGZrZXlfbmV0X29wcyk7CiBvdXRfdW5yZWdpc3Rlcl9rZXlfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3Rlcigma2V5X3Byb3RvKTsKIAlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaCBiL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaAppbmRleCBlZTk0ZWEwLi5kYTg0OTdlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKKysrIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCkBAIC02ODAsNyArNjgwLDcgQEAKIAkJX19lbnRyeS0+cmV0ID0gcmV0OwogCQlfX2VudHJ5LT5hY3Rpb24gPSBhY3Rpb247CiAJCV9fZW50cnktPnRpZCA9IHRpZDsKLQkJX19lbnRyeS0+c3NuID0gKnNzbjsKKwkJX19lbnRyeS0+c3NuID0gc3NuID8gKnNzbiA6IDA7CiAJKSwKIAogCVRQX3ByaW50aygKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDFmMmRiNjQuLjIyZjBjMmEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAJfQogCWlmIChwb3NbMV0gIT0gMCAmJgogCSAgICAocG9zWzFdICE9IGlmaWJzcy0+c3NpZF9sZW4gfHwKLQkgICAgICFtZW1jbXAocG9zICsgMiwgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKSkpIHsKKwkgICAgIG1lbWNtcChwb3MgKyAyLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pKSkgewogCQkvKiBJZ25vcmUgUHJvYmVSZXEgZm9yIGZvcmVpZ24gU1NJRCAqLwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuYyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKaW5kZXggYjkwMDdmOC4uMTJhMmJmZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JhdGUuYworKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCkBAIC0yNDUsNiArMjQ1LDkgQEAKIAkJaW5mby0+Y29udHJvbC5yYXRlc1tpXS5jb3VudCA9IDE7CiAJfQogCisJaWYgKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTCkKKwkJcmV0dXJuOworCiAJaWYgKHN0YSAmJiBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpIHsKIAkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4OwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCBmOTM0Yzk2Li5iYzE3Y2Y3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTQzOSw2ICs0MzksMTYgQEAKIAlpZiAobG9jYWwtPnNjYW5fcmVxKQogCQlyZXR1cm4gLUVCVVNZOwogCisJaWYgKHJlcSAhPSBsb2NhbC0+aW50X3NjYW5fcmVxICYmCisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgICFsaXN0X2VtcHR5KCZpZm1nZC0+d29ya19saXN0KSkgeworCQkvKiBhY3R1YWxseSB3YWl0IGZvciB0aGUgd29yayBpdCdzIGRvaW5nIHRvIGZpbmlzaC90aW1lIG91dCAqLworCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZm1nZC0+cmVxdWVzdCk7CisJCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKKwkJbG9jYWwtPnNjYW5fc2RhdGEgPSBzZGF0YTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGxvY2FsLT5vcHMtPmh3X3NjYW4pIHsKIAkJdTggKmllczsKIApAQCAtNDYzLDE0ICs0NzMsNiBAQAogCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKIAlsb2NhbC0+c2Nhbl9zZGF0YSA9IHNkYXRhOwogCi0JaWYgKHJlcSAhPSBsb2NhbC0+aW50X3NjYW5fcmVxICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgICFsaXN0X2VtcHR5KCZpZm1nZC0+d29ya19saXN0KSkgewotCQkvKiBhY3R1YWxseSB3YWl0IGZvciB0aGUgd29yayBpdCdzIGRvaW5nIHRvIGZpbmlzaC90aW1lIG91dCAqLwotCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZm1nZC0+cmVxdWVzdCk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChsb2NhbC0+b3BzLT5od19zY2FuKQogCQlfX3NldF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZyk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDBlOThjMzIuLjRkNzllM2MgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0X251bGxzLmg+CiAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgpAQCAtNjMsOCArNjQsNiBAQAogc3RydWN0IG5mX2Nvbm4gbmZfY29ubnRyYWNrX3VudHJhY2tlZCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX3VudHJhY2tlZCk7CiAKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbmZfY29ubnRyYWNrX2NhY2hlcCBfX3JlYWRfbW9zdGx5OwotCiBzdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYXNoX3JuZF9pbml0dGVkOwogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaGFzaF9ybmQ7CiAKQEAgLTg2LDkgKzg1LDEwIEBACiAJcmV0dXJuICgodTY0KWggKiBzaXplKSA+PiAzMjsKIH0KIAotc3RhdGljIGlubGluZSB1X2ludDMyX3QgaGFzaF9jb25udHJhY2soY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdCBoYXNoX2Nvbm50cmFjayhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCXJldHVybiBfX2hhc2hfY29ubnRyYWNrKHR1cGxlLCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsCisJcmV0dXJuIF9faGFzaF9jb25udHJhY2sodHVwbGUsIG5ldC0+Y3QuaHRhYmxlX3NpemUsCiAJCQkJbmZfY29ubnRyYWNrX2hhc2hfcm5kKTsKIH0KIApAQCAtMjk2LDcgKzI5Niw3IEBACiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwotCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sodHVwbGUpOworCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB0dXBsZSk7CiAKIAkvKiBEaXNhYmxlIEJIcyB0aGUgZW50aXJlIHRpbWUgc2luY2Ugd2Ugbm9ybWFsbHkgbmVlZCB0byBkaXNhYmxlIHRoZW0KIAkgKiBhdCBsZWFzdCBvbmNlIGZvciB0aGUgc3RhdHMgYW55d2F5LgpAQCAtMzY2LDEwICszNjYsMTEgQEAKIAogdm9pZCBuZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoc3RydWN0IG5mX2Nvbm4gKmN0KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CiAJdW5zaWduZWQgaW50IGhhc2gsIHJlcGxfaGFzaDsKIAotCWhhc2ggPSBoYXNoX2Nvbm50cmFjaygmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKLQlyZXBsX2hhc2ggPSBoYXNoX2Nvbm50cmFjaygmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKwloYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKKwlyZXBsX2hhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOwogCiAJX19uZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QsIGhhc2gsIHJlcGxfaGFzaCk7CiB9CkBAIC0zOTcsOCArMzk4LDggQEAKIAlpZiAoQ1RJTkZPMkRJUihjdGluZm8pICE9IElQX0NUX0RJUl9PUklHSU5BTCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCWhhc2ggPSBoYXNoX2Nvbm50cmFjaygmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKLQlyZXBsX2hhc2ggPSBoYXNoX2Nvbm50cmFjaygmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKwloYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKKwlyZXBsX2hhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOwogCiAJLyogV2UncmUgbm90IGluIGhhc2ggdGFibGUsIGFuZCB3ZSByZWZ1c2UgdG8gc2V0IHVwIHJlbGF0ZWQKIAkgICBjb25uZWN0aW9ucyBmb3IgdW5jb25maXJtZWQgY29ubnMuICBCdXQgcGFja2V0IGNvcGllcyBhbmQKQEAgLTQ2OCw3ICs0NjksNyBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChpZ25vcmVkX2Nvbm50cmFjayk7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwotCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sodHVwbGUpOworCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB0dXBsZSk7CiAKIAkvKiBEaXNhYmxlIEJIcyB0aGUgZW50aXJlIHRpbWUgc2luY2Ugd2UgbmVlZCB0byBkaXNhYmxlIHRoZW0gYXQKIAkgKiBsZWFzdCBvbmNlIGZvciB0aGUgc3RhdHMgYW55d2F5LgpAQCAtNTAzLDcgKzUwNCw3IEBACiAJaW50IGRyb3BwZWQgPSAwOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWZvciAoaSA9IDA7IGkgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBuZXQtPmN0Lmh0YWJsZV9zaXplOyBpKyspIHsKIAkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sCiAJCQkJCSBobm5vZGUpIHsKIAkJCXRtcCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CkBAIC01MjMsNyArNTI0LDcgQEAKIAkJaWYgKGNudCA+PSBORl9DVF9FVklDVElPTl9SQU5HRSkKIAkJCWJyZWFrOwogCi0JCWhhc2ggPSAoaGFzaCArIDEpICUgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOworCQloYXNoID0gKGhhc2ggKyAxKSAlIG5ldC0+Y3QuaHRhYmxlX3NpemU7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC01NTcsNyArNTU4LDcgQEAKIAogCWlmIChuZl9jb25udHJhY2tfbWF4ICYmCiAJICAgIHVubGlrZWx5KGF0b21pY19yZWFkKCZuZXQtPmN0LmNvdW50KSA+IG5mX2Nvbm50cmFja19tYXgpKSB7Ci0JCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sob3JpZyk7CisJCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCBvcmlnKTsKIAkJaWYgKCFlYXJseV9kcm9wKG5ldCwgaGFzaCkpIHsKIAkJCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOwogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKQEAgLTU3Miw3ICs1NzMsNyBAQAogCSAqIERvIG5vdCB1c2Uga21lbV9jYWNoZV96YWxsb2MoKSwgYXMgdGhpcyBjYWNoZSB1c2VzCiAJICogU0xBQl9ERVNUUk9ZX0JZX1JDVS4KIAkgKi8KLQljdCA9IGttZW1fY2FjaGVfYWxsb2MobmZfY29ubnRyYWNrX2NhY2hlcCwgZ2ZwKTsKKwljdCA9IGttZW1fY2FjaGVfYWxsb2MobmV0LT5jdC5uZl9jb25udHJhY2tfY2FjaGVwLCBnZnApOwogCWlmIChjdCA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJuZl9jb25udHJhY2tfYWxsb2M6IENhbid0IGFsbG9jIGNvbm50cmFjay5cbiIpOwogCQlhdG9taWNfZGVjKCZuZXQtPmN0LmNvdW50KTsKQEAgLTYxMSw3ICs2MTIsNyBAQAogCW5mX2N0X2V4dF9kZXN0cm95KGN0KTsKIAlhdG9taWNfZGVjKCZuZXQtPmN0LmNvdW50KTsKIAluZl9jdF9leHRfZnJlZShjdCk7Ci0Ja21lbV9jYWNoZV9mcmVlKG5mX2Nvbm50cmFja19jYWNoZXAsIGN0KTsKKwlrbWVtX2NhY2hlX2ZyZWUobmV0LT5jdC5uZl9jb25udHJhY2tfY2FjaGVwLCBjdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfZnJlZSk7CiAKQEAgLTEwMTQsNyArMTAxNSw3IEBACiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlmb3IgKDsgKmJ1Y2tldCA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgKCpidWNrZXQpKyspIHsKKwlmb3IgKDsgKmJ1Y2tldCA8IG5ldC0+Y3QuaHRhYmxlX3NpemU7ICgqYnVja2V0KSsrKSB7CiAJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbKmJ1Y2tldF0sIGhubm9kZSkgewogCQkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQkJaWYgKGl0ZXIoY3QsIGRhdGEpKQpAQCAtMTExMyw5ICsxMTE0LDEyIEBACiAKIHN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwX2luaXRfbmV0KHZvaWQpCiB7CisJLyogd2FpdCB1bnRpbCBhbGwgcmVmZXJlbmNlcyB0byBuZl9jb25udHJhY2tfdW50cmFja2VkIGFyZSBkcm9wcGVkICovCisJd2hpbGUgKGF0b21pY19yZWFkKCZuZl9jb25udHJhY2tfdW50cmFja2VkLmN0X2dlbmVyYWwudXNlKSA+IDEpCisJCXNjaGVkdWxlKCk7CisKIAluZl9jb25udHJhY2tfaGVscGVyX2ZpbmkoKTsKIAluZl9jb25udHJhY2tfcHJvdG9fZmluaSgpOwotCWttZW1fY2FjaGVfZGVzdHJveShuZl9jb25udHJhY2tfY2FjaGVwKTsKIH0KIAogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2NsZWFudXBfbmV0KHN0cnVjdCBuZXQgKm5ldCkKQEAgLTExMjcsMTUgKzExMzEsMTQgQEAKIAkJc2NoZWR1bGUoKTsKIAkJZ290byBpX3NlZV9kZWFkX3Blb3BsZTsKIAl9Ci0JLyogd2FpdCB1bnRpbCBhbGwgcmVmZXJlbmNlcyB0byBuZl9jb25udHJhY2tfdW50cmFja2VkIGFyZSBkcm9wcGVkICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZuZl9jb25udHJhY2tfdW50cmFja2VkLmN0X2dlbmVyYWwudXNlKSA+IDEpCi0JCXNjaGVkdWxlKCk7CiAKIAluZl9jdF9mcmVlX2hhc2h0YWJsZShuZXQtPmN0Lmhhc2gsIG5ldC0+Y3QuaGFzaF92bWFsbG9jLAotCQkJICAgICBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpOworCQkJICAgICBuZXQtPmN0Lmh0YWJsZV9zaXplKTsKIAluZl9jb25udHJhY2tfZWNhY2hlX2ZpbmkobmV0KTsKIAluZl9jb25udHJhY2tfYWNjdF9maW5pKG5ldCk7CiAJbmZfY29ubnRyYWNrX2V4cGVjdF9maW5pKG5ldCk7CisJa21lbV9jYWNoZV9kZXN0cm95KG5ldC0+Y3QubmZfY29ubnRyYWNrX2NhY2hlcCk7CisJa2ZyZWUobmV0LT5jdC5zbGFibmFtZSk7CiAJZnJlZV9wZXJjcHUobmV0LT5jdC5zdGF0KTsKIH0KIApAQCAtMTE5MCwxMCArMTE5MywxMiBAQAogewogCWludCBpLCBidWNrZXQsIHZtYWxsb2NlZCwgb2xkX3ZtYWxsb2NlZDsKIAl1bnNpZ25lZCBpbnQgaGFzaHNpemUsIG9sZF9zaXplOwotCWludCBybmQ7CiAJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhhc2gsICpvbGRfaGFzaDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAKKwlpZiAoY3VycmVudC0+bnNwcm94eS0+bmV0X25zICE9ICZpbml0X25ldCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJLyogT24gYm9vdCwgd2UgY2FuIHNldCB0aGlzIHdpdGhvdXQgYW55IGZhbmN5IGxvY2tpbmcuICovCiAJaWYgKCFuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpCiAJCXJldHVybiBwYXJhbV9zZXRfdWludCh2YWwsIGtwKTsKQEAgLTEyMDYsMzMgKzEyMTEsMjkgQEAKIAlpZiAoIWhhc2gpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogV2UgaGF2ZSB0byByZWhhaHMgZm9yIHRoZSBuZXcgdGFibGUgYW55d2F5LCBzbyB3ZSBhbHNvIGNhbgotCSAqIHVzZSBhIG5ld3JhbmRvbSBzZWVkICovCi0JZ2V0X3JhbmRvbV9ieXRlcygmcm5kLCBzaXplb2Yocm5kKSk7Ci0KIAkvKiBMb29rdXBzIGluIHRoZSBvbGQgaGFzaCBtaWdodCBoYXBwZW4gaW4gcGFyYWxsZWwsIHdoaWNoIG1lYW5zIHdlCiAJICogbWlnaHQgZ2V0IGZhbHNlIG5lZ2F0aXZlcyBkdXJpbmcgY29ubmVjdGlvbiBsb29rdXAuIE5ldyBjb25uZWN0aW9ucwogCSAqIGNyZWF0ZWQgYmVjYXVzZSBvZiBhIGZhbHNlIG5lZ2F0aXZlIHdvbid0IG1ha2UgaXQgaW50byB0aGUgaGFzaAogCSAqIHRob3VnaCBzaW5jZSB0aGF0IHJlcXVpcmVkIHRha2luZyB0aGUgbG9jay4KIAkgKi8KIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgaW5pdF9uZXQuY3QuaHRhYmxlX3NpemU7IGkrKykgewogCQl3aGlsZSAoIWhsaXN0X251bGxzX2VtcHR5KCZpbml0X25ldC5jdC5oYXNoW2ldKSkgewogCQkJaCA9IGhsaXN0X251bGxzX2VudHJ5KGluaXRfbmV0LmN0Lmhhc2hbaV0uZmlyc3QsCiAJCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCwgaG5ub2RlKTsKIAkJCWhsaXN0X251bGxzX2RlbF9yY3UoJmgtPmhubm9kZSk7Ci0JCQlidWNrZXQgPSBfX2hhc2hfY29ubnRyYWNrKCZoLT50dXBsZSwgaGFzaHNpemUsIHJuZCk7CisJCQlidWNrZXQgPSBfX2hhc2hfY29ubnRyYWNrKCZoLT50dXBsZSwgaGFzaHNpemUsCisJCQkJCQkgIG5mX2Nvbm50cmFja19oYXNoX3JuZCk7CiAJCQlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmgtPmhubm9kZSwgJmhhc2hbYnVja2V0XSk7CiAJCX0KIAl9Ci0Jb2xkX3NpemUgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CisJb2xkX3NpemUgPSBpbml0X25ldC5jdC5odGFibGVfc2l6ZTsKIAlvbGRfdm1hbGxvY2VkID0gaW5pdF9uZXQuY3QuaGFzaF92bWFsbG9jOwogCW9sZF9oYXNoID0gaW5pdF9uZXQuY3QuaGFzaDsKIAotCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZSA9IGhhc2hzaXplOworCWluaXRfbmV0LmN0Lmh0YWJsZV9zaXplID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplID0gaGFzaHNpemU7CiAJaW5pdF9uZXQuY3QuaGFzaF92bWFsbG9jID0gdm1hbGxvY2VkOwogCWluaXRfbmV0LmN0Lmhhc2ggPSBoYXNoOwotCW5mX2Nvbm50cmFja19oYXNoX3JuZCA9IHJuZDsKIAlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCiAJbmZfY3RfZnJlZV9oYXNodGFibGUob2xkX2hhc2gsIG9sZF92bWFsbG9jZWQsIG9sZF9zaXplKTsKQEAgLTEyNzEsMTUgKzEyNzIsNiBAQAogCSAgICAgICBORl9DT05OVFJBQ0tfVkVSU0lPTiwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplLAogCSAgICAgICBuZl9jb25udHJhY2tfbWF4KTsKIAotCW5mX2Nvbm50cmFja19jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibmZfY29ubnRyYWNrIiwKLQkJCQkJCXNpemVvZihzdHJ1Y3QgbmZfY29ubiksCi0JCQkJCQkwLCBTTEFCX0RFU1RST1lfQllfUkNVLCBOVUxMKTsKLQlpZiAoIW5mX2Nvbm50cmFja19jYWNoZXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIG5mX2Nvbm4gc2xhYiBjYWNoZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2NhY2hlOwotCX0KLQogCXJldCA9IG5mX2Nvbm50cmFja19wcm90b19pbml0KCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3Byb3RvOwpAQCAtMTI4OCwxMyArMTI4MCwxOSBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9oZWxwZXI7CiAKKwkvKiBTZXQgdXAgZmFrZSBjb25udHJhY2s6IHRvIG5ldmVyIGJlIGRlbGV0ZWQsIG5vdCBpbiBhbnkgaGFzaGVzICovCisjaWZkZWYgQ09ORklHX05FVF9OUworCW5mX2Nvbm50cmFja191bnRyYWNrZWQuY3RfbmV0ID0gJmluaXRfbmV0OworI2VuZGlmCisJYXRvbWljX3NldCgmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsLnVzZSwgMSk7CisJLyogIC0gYW5kIGxvb2sgaXQgbGlrZSBhcyBhIGNvbmZpcm1lZCBjb25uZWN0aW9uICovCisJc2V0X2JpdChJUFNfQ09ORklSTUVEX0JJVCwgJm5mX2Nvbm50cmFja191bnRyYWNrZWQuc3RhdHVzKTsKKwogCXJldHVybiAwOwogCiBlcnJfaGVscGVyOgogCW5mX2Nvbm50cmFja19wcm90b19maW5pKCk7CiBlcnJfcHJvdG86Ci0Ja21lbV9jYWNoZV9kZXN0cm95KG5mX2Nvbm50cmFja19jYWNoZXApOwotZXJyX2NhY2hlOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzMTYsNyArMTMxNCwyNCBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9zdGF0OwogCX0KLQluZXQtPmN0Lmhhc2ggPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5mX2Nvbm50cmFja19odGFibGVfc2l6ZSwKKworCW5ldC0+Y3Quc2xhYm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIm5mX2Nvbm50cmFja18lcCIsIG5ldCk7CisJaWYgKCFuZXQtPmN0LnNsYWJuYW1lKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3NsYWJuYW1lOworCX0KKworCW5ldC0+Y3QubmZfY29ubnRyYWNrX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKG5ldC0+Y3Quc2xhYm5hbWUsCisJCQkJCQkJc2l6ZW9mKHN0cnVjdCBuZl9jb25uKSwgMCwKKwkJCQkJCQlTTEFCX0RFU1RST1lfQllfUkNVLCBOVUxMKTsKKwlpZiAoIW5ldC0+Y3QubmZfY29ubnRyYWNrX2NhY2hlcCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgbmZfY29ubiBzbGFiIGNhY2hlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfY2FjaGU7CisJfQorCisJbmV0LT5jdC5odGFibGVfc2l6ZSA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKKwluZXQtPmN0Lmhhc2ggPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5ldC0+Y3QuaHRhYmxlX3NpemUsCiAJCQkJCSAgICAgJm5ldC0+Y3QuaGFzaF92bWFsbG9jLCAxKTsKIAlpZiAoIW5ldC0+Y3QuaGFzaCkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTMzMywxNSArMTM0OCw2IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2VjYWNoZTsKIAotCS8qIFNldCB1cCBmYWtlIGNvbm50cmFjazoKLQkgICAgLSB0byBuZXZlciBiZSBkZWxldGVkLCBub3QgaW4gYW55IGhhc2hlcyAqLwotI2lmZGVmIENPTkZJR19ORVRfTlMKLQluZl9jb25udHJhY2tfdW50cmFja2VkLmN0X25ldCA9ICZpbml0X25ldDsKLSNlbmRpZgotCWF0b21pY19zZXQoJm5mX2Nvbm50cmFja191bnRyYWNrZWQuY3RfZ2VuZXJhbC51c2UsIDEpOwotCS8qICAtIGFuZCBsb29rIGl0IGxpa2UgYXMgYSBjb25maXJtZWQgY29ubmVjdGlvbiAqLwotCXNldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsICZuZl9jb25udHJhY2tfdW50cmFja2VkLnN0YXR1cyk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX2VjYWNoZToKQEAgLTEzNTAsOCArMTM1NiwxMiBAQAogCW5mX2Nvbm50cmFja19leHBlY3RfZmluaShuZXQpOwogZXJyX2V4cGVjdDoKIAluZl9jdF9mcmVlX2hhc2h0YWJsZShuZXQtPmN0Lmhhc2gsIG5ldC0+Y3QuaGFzaF92bWFsbG9jLAotCQkJICAgICBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpOworCQkJICAgICBuZXQtPmN0Lmh0YWJsZV9zaXplKTsKIGVycl9oYXNoOgorCWttZW1fY2FjaGVfZGVzdHJveShuZXQtPmN0Lm5mX2Nvbm50cmFja19jYWNoZXApOworZXJyX2NhY2hlOgorCWtmcmVlKG5ldC0+Y3Quc2xhYm5hbWUpOworZXJyX3NsYWJuYW1lOgogCWZyZWVfcGVyY3B1KG5ldC0+Y3Quc3RhdCk7CiBlcnJfc3RhdDoKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwppbmRleCBmZGY1ZDJhLi4yZjI1ZmY2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwpAQCAtNTY5LDcgKzU2OSw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIH0KIAotbW9kdWxlX3BhcmFtX25hbWVkKGV4cGVjdF9oYXNoc2l6ZSwgbmZfY3RfZXhwZWN0X2hzaXplLCB1aW50LCAwNjAwKTsKK21vZHVsZV9wYXJhbV9uYW1lZChleHBlY3RfaGFzaHNpemUsIG5mX2N0X2V4cGVjdF9oc2l6ZSwgdWludCwgMDQwMCk7CiAKIGludCBuZl9jb25udHJhY2tfZXhwZWN0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewpAQCAtNTc3LDcgKzU3Nyw3IEBACiAKIAlpZiAobmV0X2VxKG5ldCwgJmluaXRfbmV0KSkgewogCQlpZiAoIW5mX2N0X2V4cGVjdF9oc2l6ZSkgewotCQkJbmZfY3RfZXhwZWN0X2hzaXplID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplIC8gMjU2OworCQkJbmZfY3RfZXhwZWN0X2hzaXplID0gbmV0LT5jdC5odGFibGVfc2l6ZSAvIDI1NjsKIAkJCWlmICghbmZfY3RfZXhwZWN0X2hzaXplKQogCQkJCW5mX2N0X2V4cGVjdF9oc2l6ZSA9IDE7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggNjVjMmE3Yi4uNGIxYTU2YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCS8qIEdldCByaWQgb2YgZXhwZWN0ZWRzLCBzZXQgaGVscGVycyB0byBOVUxMLiAqLwogCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG5uLCAmbmV0LT5jdC51bmNvbmZpcm1lZCwgaG5ub2RlKQogCQl1bmhlbHAoaCwgbWUpOwotCWZvciAoaSA9IDA7IGkgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBuZXQtPmN0Lmh0YWJsZV9zaXplOyBpKyspIHsKIAkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbm4sICZuZXQtPmN0Lmhhc2hbaV0sIGhubm9kZSkKIAkJCXVuaGVscChoLCBtZSk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDU5ZDgwNjQuLjBmZmU2ODkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTU5NCw3ICs1OTQsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxhc3QgPSAoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXTsKLQlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKKwlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBpbml0X25ldC5jdC5odGFibGVfc2l6ZTsgY2ItPmFyZ3NbMF0rKykgewogcmVzdGFydDoKIAkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZpbml0X25ldC5jdC5oYXNoW2NiLT5hcmdzWzBdXSwKIAkJCQkJIGhubm9kZSkgewpAQCAtMTQzNyw4ICsxNDM3LDkgQEAKIAlzdHJ1Y3QgbmxhdHRyICpuZXN0X3Bhcm1zOwogCiAJbWVtc2V0KCZtLCAweEZGLCBzaXplb2YobSkpOwotCW0uc3JjLnUuYWxsID0gbWFzay0+c3JjLnUuYWxsOwogCW1lbWNweSgmbS5zcmMudTMsICZtYXNrLT5zcmMudTMsIHNpemVvZihtLnNyYy51MykpOworCW0uc3JjLnUuYWxsID0gbWFzay0+c3JjLnUuYWxsOworCW0uZHN0LnByb3RvbnVtID0gdHVwbGUtPmRzdC5wcm90b251bTsKIAogCW5lc3RfcGFybXMgPSBubGFfbmVzdF9zdGFydChza2IsIENUQV9FWFBFQ1RfTUFTSyB8IE5MQV9GX05FU1RFRCk7CiAJaWYgKCFuZXN0X3Bhcm1zKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwppbmRleCA0YjU3MjE2Li4wMjM5NjZiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJCQlkcHRyICs9IGhkci0+bGVuOwogCQllbHNlIGlmIChoZHItPmNuYW1lICYmIGxpbWl0IC0gZHB0ciA+PSBoZHItPmNsZW4gKyAxICYmCiAJCQkgc3RybmljbXAoZHB0ciwgaGRyLT5jbmFtZSwgaGRyLT5jbGVuKSA9PSAwICYmCi0JCQkgIWlzYWxwaGEoKihkcHRyICsgaGRyLT5jbGVuICsgMSkpKQorCQkJICFpc2FscGhhKCooZHB0ciArIGhkci0+Y2xlbikpKQogCQkJZHB0ciArPSBoZHItPmNsZW47CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDAyOGFiYTYuLmUzMTBmMTUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAogCWZvciAoc3QtPmJ1Y2tldCA9IDA7Ci0JICAgICBzdC0+YnVja2V0IDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOworCSAgICAgc3QtPmJ1Y2tldCA8IG5ldC0+Y3QuaHRhYmxlX3NpemU7CiAJICAgICBzdC0+YnVja2V0KyspIHsKIAkJbiA9IHJjdV9kZXJlZmVyZW5jZShuZXQtPmN0Lmhhc2hbc3QtPmJ1Y2tldF0uZmlyc3QpOwogCQlpZiAoIWlzX2FfbnVsbHMobikpCkBAIC02OSw3ICs2OSw3IEBACiAJaGVhZCA9IHJjdV9kZXJlZmVyZW5jZShoZWFkLT5uZXh0KTsKIAl3aGlsZSAoaXNfYV9udWxscyhoZWFkKSkgewogCQlpZiAobGlrZWx5KGdldF9udWxsc192YWx1ZShoZWFkKSA9PSBzdC0+YnVja2V0KSkgewotCQkJaWYgKCsrc3QtPmJ1Y2tldCA+PSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpCisJCQlpZiAoKytzdC0+YnVja2V0ID49IG5ldC0+Y3QuaHRhYmxlX3NpemUpCiAJCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJaGVhZCA9IHJjdV9kZXJlZmVyZW5jZShuZXQtPmN0Lmhhc2hbc3QtPmJ1Y2tldF0uZmlyc3QpOwpAQCAtMzU1LDcgKzM1NSw3IEBACiAJfSwKIAl7CiAJCS5wcm9jbmFtZSAgICAgICA9ICJuZl9jb25udHJhY2tfYnVja2V0cyIsCi0JCS5kYXRhICAgICAgICAgICA9ICZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsCisJCS5kYXRhICAgICAgICAgICA9ICZpbml0X25ldC5jdC5odGFibGVfc2l6ZSwKIAkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlICAgICAgICAgICA9IDA0NDQsCiAJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWMsCkBAIC00MjEsNiArNDIxLDcgQEAKIAkJZ290byBvdXRfa21lbWR1cDsKIAogCXRhYmxlWzFdLmRhdGEgPSAmbmV0LT5jdC5jb3VudDsKKwl0YWJsZVsyXS5kYXRhID0gJm5ldC0+Y3QuaHRhYmxlX3NpemU7CiAJdGFibGVbM10uZGF0YSA9ICZuZXQtPmN0LnN5c2N0bF9jaGVja3N1bTsKIAl0YWJsZVs0XS5kYXRhID0gJm5ldC0+Y3Quc3lzY3RsX2xvZ19pbnZhbGlkOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggYTQ5NTdiZi4uNGM1OTcyYiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtNDU1LDkgKzQ1NSwxNCBAQAogCWlmIChubF90YWJsZVtwcm90b2NvbF0ucmVnaXN0ZXJlZCAmJgogCSAgICB0cnlfbW9kdWxlX2dldChubF90YWJsZVtwcm90b2NvbF0ubW9kdWxlKSkKIAkJbW9kdWxlID0gbmxfdGFibGVbcHJvdG9jb2xdLm1vZHVsZTsKKwllbHNlCisJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiAJY2JfbXV0ZXggPSBubF90YWJsZVtwcm90b2NvbF0uY2JfbXV0ZXg7CiAJbmV0bGlua191bmxvY2tfdGFibGUoKTsKIAorCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwogCWVyciA9IF9fbmV0bGlua19jcmVhdGUobmV0LCBzb2NrLCBjYl9tdXRleCwgcHJvdG9jb2wpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9tb2R1bGU7CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCBmMTI2ZDE4Li45Mzk0NzFlIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCWlmIChmaWx0ZXIgIT0gTlVMTCkKIAkJcmVzID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMsIGZpbHRlci0+bGVuKTsKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9LY29uZmlnIGIvbmV0L3NjaGVkL0tjb25maWcKaW5kZXggOTI5MjE4YS4uMjFmOWM3NiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL0tjb25maWcKKysrIGIvbmV0L3NjaGVkL0tjb25maWcKQEAgLTQzMyw3ICs0MzMsNyBAQAogCSAgbW9kdWxlLgogCiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG9saWNlLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9wb2xpY2UuCiAKIGNvbmZpZyBORVRfQUNUX0dBQ1QKICAgICAgICAgdHJpc3RhdGUgIkdlbmVyaWMgYWN0aW9ucyIKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCSAgYWNjZXB0aW5nIHBhY2tldHMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnYWN0LgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9nYWN0LgogCiBjb25maWcgR0FDVF9QUk9CCiAgICAgICAgIGJvb2wgIlByb2JhYmlsaXR5IHN1cHBvcnQiCkBAIC00NTksNyArNDU5LDcgQEAKIAkgIG90aGVyIGRldmljZXMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtaXJyZWQuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21pcnJlZC4KIAogY29uZmlnIE5FVF9BQ1RfSVBUCiAgICAgICAgIHRyaXN0YXRlICJJUHRhYmxlcyB0YXJnZXRzIgpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJICBjbGFzc2lmaWNhdGlvbi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlwdC4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfaXB0LgogCiBjb25maWcgTkVUX0FDVF9OQVQKICAgICAgICAgdHJpc3RhdGUgIlN0YXRlbGVzcyBOQVQiCkBAIC00NzksNyArNDc5LDcgQEAKIAkgIG5ldGZpbHRlciBmb3IgTkFUIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBuYXQuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X25hdC4KIAogY29uZmlnIE5FVF9BQ1RfUEVESVQKICAgICAgICAgdHJpc3RhdGUgIlBhY2tldCBFZGl0aW5nIgpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIG1hbmdsZSB0aGUgY29udGVudCBvZiBwYWNrZXRzLgogCiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGVkaXQuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3BlZGl0LgogCiBjb25maWcgTkVUX0FDVF9TSU1QCiAgICAgICAgIHRyaXN0YXRlICJTaW1wbGUgRXhhbXBsZSAoRGVidWcpIgpAQCAtNTAyLDcgKzUwMiw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2ltcGxlLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9zaW1wbGUuCiAKIGNvbmZpZyBORVRfQUNUX1NLQkVESVQKICAgICAgICAgdHJpc3RhdGUgIlNLQiBFZGl0aW5nIgpAQCAtNTEzLDcgKzUxMyw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2tiZWRpdC4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tiZWRpdC4KIAogY29uZmlnIE5FVF9DTFNfSU5ECiAJYm9vbCAiSW5jb21pbmcgZGV2aWNlIGNsYXNzaWZpY2F0aW9uIgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uYwppbmRleCA3NDNjMDEzLi44YjRkNmUzIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2FsZ28uYworKysgYi9uZXQveGZybS94ZnJtX2FsZ28uYwpAQCAtMTI1LDYgKzEyNSwyMiBAQAogCQkuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NgogCX0KIH0sCit7CisJLm5hbWUgPSAicmZjNDU0MyhnY20oYWVzKSkiLAorCisJLnVpbmZvID0geworCQkuYWVhZCA9IHsKKwkJCS5pY3ZfdHJ1bmNiaXRzID0gMTI4LAorCQl9CisJfSwKKworCS5kZXNjID0geworCQkuc2FkYl9hbGdfaWQgPSBTQURCX1hfRUFMR19OVUxMX0FFU19HTUFDLAorCQkuc2FkYl9hbGdfaXZsZW4gPSA4LAorCQkuc2FkYl9hbGdfbWluYml0cyA9IDEyOCwKKwkJLnNhZGJfYWxnX21heGJpdHMgPSAyNTYKKwl9Cit9LAogfTsKIAogc3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBhYWxnX2xpc3RbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCBiMzZjYzM0Li5mNDQ1ZWExIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0xMTAyLDcgKzExMDIsNyBAQAogCWludCBlcnIgPSAtRU5PTUVNOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0geGZybV9zdGF0ZV9hbGxvYyhuZXQpOwogCWlmICgheCkKLQkJZ290byBlcnJvcjsKKwkJZ290byBvdXQ7CiAKIAltZW1jcHkoJngtPmlkLCAmb3JpZy0+aWQsIHNpemVvZih4LT5pZCkpOwogCW1lbWNweSgmeC0+c2VsLCAmb3JpZy0+c2VsLCBzaXplb2YoeC0+c2VsKSk7CkBAIC0xMTYwLDE2ICsxMTYwLDEwIEBACiAJcmV0dXJuIHg7CiAKICBlcnJvcjoKKwl4ZnJtX3N0YXRlX3B1dCh4KTsKK291dDoKIAlpZiAoZXJycCkKIAkJKmVycnAgPSBlcnI7Ci0JaWYgKHgpIHsKLQkJa2ZyZWUoeC0+YWFsZyk7Ci0JCWtmcmVlKHgtPmVhbGcpOwotCQlrZnJlZSh4LT5jYWxnKTsKLQkJa2ZyZWUoeC0+ZW5jYXApOwotCQlrZnJlZSh4LT5jb2FkZHIpOwotCX0KLQlrZnJlZSh4KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy8uZ2l0aWdub3JlIGIvc2NyaXB0cy8uZ2l0aWdub3JlCmluZGV4IDUyY2FiNDZhLi5jNWQ1ZGI1IDEwMDY0NAotLS0gYS9zY3JpcHRzLy5naXRpZ25vcmUKKysrIGIvc2NyaXB0cy8uZ2l0aWdub3JlCkBAIC02LDUgKzYsNCBAQAogcG5tdG9sb2dvCiBiaW4yYwogdW5pZmRlZgotYmlub2Zmc2V0CiBpaGV4MmZ3CmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jpbm9mZnNldC5jIGIvc2NyaXB0cy9iaW5vZmZzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEyZTM5Yi4uMDAwMDAwMAotLS0gYS9zY3JpcHRzL2Jpbm9mZnNldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGJpbm9mZnNldC5jCi0gKiAoQykgMjAwMiBSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgotCi0jICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotIyBiaW5vZmZzZXQuYzoKLSMgLSBzZWFyY2hlcyBhIChiaW5hcnkpIGZpbGUgZm9yIGEgc3BlY2lmaWVkIChiaW5hcnkpIHBhdHRlcm4KLSMgLSByZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIGxvY2F0ZWQgcGF0dGVybiBvciB+MCBpZiBub3QgZm91bmQKLSMgLSBleGl0cyB3aXRoIGV4aXQgc3RhdHVzIDAgbm9ybWFsbHkgb3Igbm9uLTAgaWYgcGF0dGVybiBpcyBub3QgZm91bmQKLSMgICBvciBhbnkgb3RoZXIgZXJyb3Igb2NjdXJzLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jZGVmaW5lIFZFUlNJT04JCSIwLjEiCi0jZGVmaW5lIEJVRl9TSVpFCSgxNiAqIDEwMjQpCi0jZGVmaW5lIFBBVF9TSVpFCTEwMAotCi1jaGFyCQkqcHJvZ25hbWU7Ci1jaGFyCQkqaW5wdXRuYW1lOwotaW50CQlpbnB1dGZkOwotdW5zaWduZWQgaW50CWJpeDsJCQkvKiBidWYgaW5kZXggKi8KLXVuc2lnbmVkIGNoYXIJcGF0dGVybnMgW1BBVF9TSVpFXSA9IHswfTsgLyogYnl0ZS1zaXplZCBwYXR0ZXJuIGFycmF5ICovCi1pbnQJCXBhdF9sZW47CQkvKiBhY3R1YWwgbnVtYmVyIG9mIHBhdHRlcm4gYnl0ZXMgKi8KLXVuc2lnbmVkIGNoYXIJKm1hZHI7CQkJLyogbW1hcCBhZGRyZXNzICovCi1zaXplX3QJCWZpbGVzaXplOwotaW50CQludW1fbWF0Y2hlcyA9IDA7Ci1vZmZfdAkJZmlyc3Rsb2MgPSAwOwotCi12b2lkIHVzYWdlICh2b2lkKQotewotCWZwcmludGYgKHN0ZGVyciwgIiVzIHZlci4gJXNcbiIsIHByb2duYW1lLCBWRVJTSU9OKTsKLQlmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogICVzIGZpbGVuYW1lIHBhdHRlcm5fYnl0ZXNcbiIsCi0JCQlwcm9nbmFtZSk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICBbcHJpbnRzIGxvY2F0aW9uIG9mIHBhdHRlcm5fYnl0ZXMgaW4gZmlsZV1cbiIpOwotCWV4aXQgKDEpOwotfQotCi12b2lkIGdldF9wYXR0ZXJuIChpbnQgcGF0X2NvdW50LCBjaGFyICpwYXRzIFtdKQotewotCWludCBpeCwgZXJyLCB0bXA7Ci0KLSNpZmRlZiBERUJVRwotCWZwcmludGYgKHN0ZGVyciwiZ2V0X3BhdHRlcm46IGNvdW50ID0gJWRcbiIsIHBhdF9jb3VudCk7Ci0JZm9yIChpeCA9IDA7IGl4IDwgcGF0X2NvdW50OyBpeCsrKQotCQlmcHJpbnRmIChzdGRlcnIsICIgIHBhdCAjICVkOiAgWyVzXVxuIiwgaXgsIHBhdHNbaXhdKTsKLSNlbmRpZgotCi0JZm9yIChpeCA9IDA7IGl4IDwgcGF0X2NvdW50OyBpeCsrKSB7Ci0JCXRtcCA9IDA7Ci0JCWVyciA9IHNzY2FuZiAocGF0c1tpeF0sICIlNWkiLCAmdG1wKTsKLQkJaWYgKGVyciAhPSAxIHx8IHRtcCA+IDB4ZmYpIHsKLQkJCWZwcmludGYgKHN0ZGVyciwgInBhdHRlcm4gb3IgdmFsdWUgZXJyb3IgaW4gcGF0dGVybiAjICVkIFslc11cbiIsCi0JCQkJCWl4LCBwYXRzW2l4XSk7Ci0JCQl1c2FnZSAoKTsKLQkJfQotCQlwYXR0ZXJucyBbaXhdID0gdG1wOwotCX0KLQlwYXRfbGVuID0gcGF0X2NvdW50OwotfQotCi12b2lkIHNlYXJjaF9wYXR0ZXJuICh2b2lkKQotewotCWZvciAoYml4ID0gMDsgYml4IDwgZmlsZXNpemU7IGJpeCsrKSB7Ci0JCWlmIChtYWRyW2JpeF0gPT0gcGF0dGVybnNbMF0pIHsKLQkJCWlmIChtZW1jbXAgKCZtYWRyW2JpeF0sIHBhdHRlcm5zLCBwYXRfbGVuKSA9PSAwKSB7Ci0JCQkJaWYgKG51bV9tYXRjaGVzID09IDApCi0JCQkJCWZpcnN0bG9jID0gYml4OwotCQkJCW51bV9tYXRjaGVzKys7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLSNpZmRlZiBOT1RERUYKLXNpemVfdCBnZXRfZmlsZXNpemUgKGludCBmZCkKLXsKLQlvZmZfdCBlbmRfb2ZmID0gbHNlZWsgKGZkLCAwLCBTRUVLX0VORCk7Ci0JbHNlZWsgKGZkLCAwLCBTRUVLX1NFVCk7Ci0JcmV0dXJuIChzaXplX3QpIGVuZF9vZmY7Ci19Ci0jZW5kaWYKLQotc2l6ZV90IGdldF9maWxlc2l6ZSAoaW50IGZkKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHN0YXQgc3RhdDsKLQotCWVyciA9IGZzdGF0IChmZCwgJnN0YXQpOwotCWZwcmludGYgKHN0ZGVyciwgImZpbGVzaXplOiAlbGRcbiIsIGVyciA8IDAgPyAobG9uZyllcnIgOiBzdGF0LnN0X3NpemUpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAoc2l6ZV90KSBzdGF0LnN0X3NpemU7Ci19Ci0KLWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndiBbXSkKLXsKLQlwcm9nbmFtZSA9IGFyZ3ZbMF07Ci0KLQlpZiAoYXJnYyA8IDMpCi0JCXVzYWdlICgpOwotCi0JZ2V0X3BhdHRlcm4gKGFyZ2MgLSAyLCBhcmd2ICsgMik7Ci0KLQlpbnB1dG5hbWUgPSBhcmd2WzFdOwotCi0JaW5wdXRmZCA9IG9wZW4gKGlucHV0bmFtZSwgT19SRE9OTFkpOwotCWlmIChpbnB1dGZkID09IC0xKSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIiVzOiBjYW5ub3Qgb3BlbiAnJXMnXG4iLAotCQkJCXByb2duYW1lLCBpbnB1dG5hbWUpOwotCQlleGl0ICgzKTsKLQl9Ci0KLQlmaWxlc2l6ZSA9IGdldF9maWxlc2l6ZSAoaW5wdXRmZCk7Ci0KLQltYWRyID0gbW1hcCAoMCwgZmlsZXNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGlucHV0ZmQsIDApOwotCWlmIChtYWRyID09IE1BUF9GQUlMRUQpIHsKLQkJZnByaW50ZiAoc3RkZXJyLCAibW1hcCBlcnJvciA9ICVkXG4iLCBlcnJubyk7Ci0JCWNsb3NlIChpbnB1dGZkKTsKLQkJZXhpdCAoNCk7Ci0JfQotCi0Jc2VhcmNoX3BhdHRlcm4gKCk7Ci0KLQlpZiAobXVubWFwIChtYWRyLCBmaWxlc2l6ZSkpCi0JCWZwcmludGYgKHN0ZGVyciwgIm11bm1hcCBlcnJvciA9ICVkXG4iLCBlcnJubyk7Ci0KLQlpZiAoY2xvc2UgKGlucHV0ZmQpKQotCQlmcHJpbnRmIChzdGRlcnIsICIlczogZXJyb3IgJWQgY2xvc2luZyAnJXMnXG4iLAotCQkJCXByb2duYW1lLCBlcnJubywgaW5wdXRuYW1lKTsKLQotCWZwcmludGYgKHN0ZGVyciwgIm51bWJlciBvZiBwYXR0ZXJuIG1hdGNoZXMgPSAlZFxuIiwgbnVtX21hdGNoZXMpOwotCWlmIChudW1fbWF0Y2hlcyA9PSAwKQotCQlmaXJzdGxvYyA9IH4wOwotCXByaW50ZiAoIiVsZFxuIiwgZmlyc3Rsb2MpOwotCWZwcmludGYgKHN0ZGVyciwgIiVsZFxuIiwgZmlyc3Rsb2MpOwotCi0JZXhpdCAobnVtX21hdGNoZXMgPyAwIDogMik7Ci19Ci0KLS8qIGVuZCBiaW5vZmZzZXQuYyAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIGIvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCmluZGV4IGRlMjMzZmYuLjM3ZjMwZDMgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZworKysgYi9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKQEAgLTEsOTIgKzEsNTMgQEAKICMhL2Jpbi9zaAotIyBleHRyYWN0cyAuY29uZmlnIGluZm8gZnJvbSBhIFtiXXpJbWFnZSBmaWxlCi0jIHVzZXM6IGJpbm9mZnNldCAobmV3KSwgZGQsIHpjYXQsIHN0cmluZ3MsIGdyZXAKLSMgJGFyZzEgaXMgW2JdekltYWdlIGZpbGVuYW1lCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZXh0cmFjdC1pa2NvbmZpZyAtIEV4dHJhY3QgdGhlIC5jb25maWcgZmlsZSBmcm9tIGEga2VybmVsIGltYWdlCisjCisjIFRoaXMgd2lsbCBvbmx5IHdvcmsgd2hlbiB0aGUga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIENPTkZJR19JS0NPTkZJRy4KKyMKKyMgVGhlIG9ic2N1cmUgdXNlIG9mIHRoZSAidHIiIGZpbHRlciBpcyB0byB3b3JrIGFyb3VuZCBvbGRlciB2ZXJzaW9ucyBvZgorIyAiZ3JlcCIgdGhhdCByZXBvcnQgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBsaW5lIGluc3RlYWQgb2YgdGhlIHBhdHRlcm4uCisjCisjIChjKSAyMDA5LCBEaWNrIFN0cmVlZmxhbmQgPGRpY2tAc3RyZWVmbGFuZC5uZXQ+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYmlub2Zmc2V0PSIuL3NjcmlwdHMvYmlub2Zmc2V0IgotdGVzdCAtZSAkYmlub2Zmc2V0IHx8IGNjIC1vICRiaW5vZmZzZXQgLi9zY3JpcHRzL2Jpbm9mZnNldC5jIHx8IGV4aXQgMQorZ3oxPSdcMDM3XDIxM1wwMTAnCitnejI9JzAxJworY2YxPSdJS0NGR19TVFwwMzdcMjEzXDAxMCcKK2NmMj0nMDEyMzQ1Njc4OScKIAotSUtDRkdfU1Q9IjB4NDkgMHg0YiAweDQzIDB4NDYgMHg0NyAweDVmIDB4NTMgMHg1NCIKLUlLQ0ZHX0VEPSIweDQ5IDB4NGIgMHg0MyAweDQ2IDB4NDcgMHg1ZiAweDQ1IDB4NDQiCi1kdW1wX2NvbmZpZygpIHsKLSAgICBmaWxlPSIkMSIKLQotICAgIHN0YXJ0PWAkYmlub2Zmc2V0ICRmaWxlICRJS0NGR19TVCAyPi9kZXYvbnVsbGAKLSAgICBbICIkPyIgIT0gIjAiIF0gJiYgc3RhcnQ9Ii0xIgotICAgIGlmIFsgIiRzdGFydCIgLWVxICItMSIgXTsgdGhlbgotCXJldHVybgotICAgIGZpCi0gICAgZW5kPWAkYmlub2Zmc2V0ICRmaWxlICRJS0NGR19FRCAyPi9kZXYvbnVsbGAKLSAgICBbICIkPyIgIT0gIjAiIF0gJiYgZW5kPSItMSIKLSAgICBpZiBbICIkZW5kIiAtZXEgIi0xIiBdOyB0aGVuCi0JcmV0dXJuCi0gICAgZmkKLQotICAgIHN0YXJ0PWBleHByICRzdGFydCArIDhgCi0gICAgc2l6ZT1gZXhwciAkZW5kIC0gJHN0YXJ0YAotCi0gICAgZGQgaWY9IiRmaWxlIiBpYnM9MSBza2lwPSIkc3RhcnQiIGNvdW50PSIkc2l6ZSIgMj4vZGV2L251bGwgfCB6Y2F0Ci0KLSAgICBjbGVhbl91cAotICAgIGV4aXQgMAotfQotCi0KLXVzYWdlKCkKK2R1bXBfY29uZmlnKCkKIHsKLQllY2hvICIgIHVzYWdlOiBleHRyYWN0LWlrY29uZmlnIFtiXXpJbWFnZV9maWxlbmFtZSIKLX0KLQotY2xlYW5fdXAoKQotewotCWlmIFsgIiRUTVBGSUxFIiAhPSAiIiBdOyB0aGVuCi0JCXJtIC1mICRUTVBGSUxFCisJaWYJcG9zPWB0ciAiJGNmMVxuJGNmMiIgIlxuJGNmMj0iIDwgIiQxIiB8IGdyZXAgLWFibyAiXiRjZjIiYAorCXRoZW4KKwkJcG9zPSR7cG9zJSU6Kn0KKwkJdGFpbCAtYyskKCgkcG9zKzgpKSAiJDEiIHwgemNhdCAtcQorCQlleGl0IDAKIAlmaQogfQogCi1pZiBbICQjIC1sdCAxIF0KKyMgQ2hlY2sgaW52b2NhdGlvbjoKK21lPSR7MCMjKi99CitpbWc9JDEKK2lmCVsgJCMgLW5lIDEgLW8gISAtcyAiJGltZyIgXQogdGhlbgotCXVzYWdlCi0JZXhpdCAxCisJZWNobyAiVXNhZ2U6ICRtZSA8a2VybmVsLWltYWdlPiIgPiYyCisJZXhpdCAyCiBmaQogCi1UTVBGSUxFPWBta3RlbXAgLXQgaWtjb25maWctWFhYWFhYYCB8fCBleGl0IDEKLWltYWdlPSIkMSIKKyMgSW5pdGlhbCBhdHRlbXB0IGZvciB1bmNvbXByZXNzZWQgaW1hZ2VzIG9yIG9iamVjdHM6CitkdW1wX2NvbmZpZyAiJGltZyIKIAotIyB2bWxpbnV4OiBBdHRlbXB0IHRvIGR1bXAgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZmlsZSBkaXJlY3RseQotZHVtcF9jb25maWcgIiRpbWFnZSIKKyMgVGhhdCBkaWRuJ3Qgd29yaywgc28gZGVjb21wcmVzcyBhbmQgdHJ5IGFnYWluOgordG1wPS90bXAvaWtjb25maWckJAordHJhcCAicm0gLWYgJHRtcCIgMAorZm9yCXBvcyBpbiBgdHIgIiRnejFcbiRnejIiICJcbiRnejI9IiA8ICIkaW1nIiB8IGdyZXAgLWFibyAiXiRnejIiYAorZG8KKwlwb3M9JHtwb3MlJToqfQorCXRhaWwgLWMrJHBvcyAiJGltZyIgfCB6Y2F0IDI+IC9kZXYvbnVsbCA+ICR0bXAKKwlkdW1wX2NvbmZpZyAkdG1wCitkb25lCiAKLUdaSERSMT0iMHgxZiAweDhiIDB4MDggMHgwMCIKLUdaSERSMj0iMHgxZiAweDhiIDB4MDggMHgwOCIKLQotRUxGSERSPSIweDdmIDB4NDUgMHg0YyAweDQ2IgotCi0jIHZtbGludXguZ3o6IENoZWNrIGZvciBhIGNvbXByZXNzZWQgaW1hZ2VzCi1vZmY9YCRiaW5vZmZzZXQgIiRpbWFnZSIgJEdaSERSMSAyPi9kZXYvbnVsbGAKLVsgIiQ/IiAhPSAiMCIgXSAmJiBvZmY9Ii0xIgotaWYgWyAiJG9mZiIgLWVxICItMSIgXTsgdGhlbgotCW9mZj1gJGJpbm9mZnNldCAiJGltYWdlIiAkR1pIRFIyIDI+L2Rldi9udWxsYAotCVsgIiQ/IiAhPSAiMCIgXSAmJiBvZmY9Ii0xIgotZmkKLWlmIFsgIiRvZmYiIC1lcSAiMCIgXTsgdGhlbgotCXpjYXQgPCIkaW1hZ2UiID4iJFRNUEZJTEUiCi0JZHVtcF9jb25maWcgIiRUTVBGSUxFIgotZWxpZiBbICIkb2ZmIiAtbmUgIi0xIiBdOyB0aGVuCi0JKGRkIGlicz0iJG9mZiIgc2tpcD0xIGNvdW50PTAgJiYgZGQgYnM9NTEyaykgPCIkaW1hZ2UiIDI+L2Rldi9udWxsIHwgXAotCQl6Y2F0ID4iJFRNUEZJTEUiCi0JZHVtcF9jb25maWcgIiRUTVBGSUxFIgotCi0jIGNoZWNrIGlmIHRoaXMgaXMgc2ltcGx5IGFuIEVMRiBmaWxlCi1lbHNlCi0Jb2ZmPWAkYmlub2Zmc2V0ICIkaW1hZ2UiICRFTEZIRFIgMj4vZGV2L251bGxgCi0JWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCi0JaWYgWyAiJG9mZiIgLWVxICIwIiBdOyB0aGVuCi0JCWR1bXBfY29uZmlnICIkaW1hZ2UiCi0JZmkKLWZpCi0KLWVjaG8gIkVSUk9SOiBVbmFibGUgdG8gZXh0cmFjdCBrZXJuZWwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iCi1lY2hvICIgICAgICAgVGhpcyBrZXJuZWwgaW1hZ2UgbWF5IG5vdCBoYXZlIHRoZSBjb25maWcgaW5mby4iCi0KLWNsZWFuX3VwCisjIEJhaWwgb3V0OgorZWNobyAiJG1lOiBDYW5ub3QgZmluZCBrZXJuZWwgY29uZmlnLiIgPiYyCiBleGl0IDEKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCmluZGV4IDA5MGYyNDguLjJmMzIzMGQgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKKysrIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbApAQCAtNzQsOCArNzQsOCBAQAogbXkgJVZDU19jbWRzX2dpdCA9ICgKICAgICAiZXhlY3V0ZV9jbWQiID0+IFwmZ2l0X2V4ZWN1dGVfY21kLAogICAgICJhdmFpbGFibGUiID0+ICcod2hpY2goImdpdCIpIG5lICIiKSAmJiAoLWQgIi5naXQiKScsCi0gICAgImZpbmRfc2lnbmVyc19jbWQiID0+ICJnaXQgbG9nIC0tc2luY2U9XCRlbWFpbF9naXRfc2luY2UgLS0gXCRmaWxlIiwKLSAgICAiZmluZF9jb21taXRfc2lnbmVyc19jbWQiID0+ICJnaXQgbG9nIC0xIFwkY29tbWl0IiwKKyAgICAiZmluZF9zaWduZXJzX2NtZCIgPT4gImdpdCBsb2cgLS1uby1jb2xvciAtLXNpbmNlPVwkZW1haWxfZ2l0X3NpbmNlIC0tIFwkZmlsZSIsCisgICAgImZpbmRfY29tbWl0X3NpZ25lcnNfY21kIiA9PiAiZ2l0IGxvZyAtLW5vLWNvbG9yIC0xIFwkY29tbWl0IiwKICAgICAiYmxhbWVfcmFuZ2VfY21kIiA9PiAiZ2l0IGJsYW1lIC1sIC1MIFwkZGlmZl9zdGFydCwrXCRkaWZmX2xlbmd0aCBcJGZpbGUiLAogICAgICJibGFtZV9maWxlX2NtZCIgPT4gImdpdCBibGFtZSAtbCBcJGZpbGUiLAogICAgICJjb21taXRfcGF0dGVybiIgPT4gIl5jb21taXQgWzAtOWEtZl17NDAsNDB9IiwKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZSBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQppbmRleCA5OTllOGE3Li4xODZjNDY2IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCkBAIC0zMCw4ICszMCwxNyBAQAogCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAogCSQ8IC1zICQoS2NvbmZpZykKIAorIyBpZiBubyBwYXRoIGlzIGdpdmVuLCB0aGVuIHVzZSBzcmMgZGlyZWN0b3J5IHRvIGZpbmQgZmlsZQoraWZkZWYgTFNNT0QKK0xTTU9EX0YgOj0gJChMU01PRCkKK2lmZXEgKCQoZmluZHN0cmluZyAvLCQoTFNNT0QpKSwpCisgIExTTU9EX0YgOj0gJChvYmp0cmVlKS8kKExTTU9EKQorZW5kaWYKK2VuZGlmCisKIGxvY2FsbW9kY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKLQkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZworCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAorCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSAkKExTTU9EX0YpID4gLnRtcC5jb25maWcKIAkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCVwKIAkJCWNtcCAtcyAudG1wLmNvbmZpZyAuY29uZmlnIHx8CQlcCiAJCQkobXYgLWYgLmNvbmZpZyAuY29uZmlnLm9sZC4xOwkJXApAQCAtNDUsNyArNTQsOCBAQAogCSQoUSlybSAtZiAudG1wLmNvbmZpZwogCiBsb2NhbHllc2NvbmZpZzogJChvYmopL3N0cmVhbWxpbmVfY29uZmlnLnBsICQob2JqKS9jb25mCi0JJChRKXBlcmwgJDwgJChzcmN0cmVlKSAkKEtjb25maWcpID4gLnRtcC5jb25maWcKKwkkKFEpbWtkaXIgLXAgaW5jbHVkZS9nZW5lcmF0ZWQKKwkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgJChMU01PRF9GKSA+IC50bXAuY29uZmlnCiAJJChRKXNlZCAtaSBzLz1tLz15LyAudG1wLmNvbmZpZwogCSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJXAogCQkJY21wIC1zIC50bXAuY29uZmlnIC5jb25maWcgfHwJCVwKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbCBiL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbAppbmRleCAwZDgwMDgyLi5hZmJkNTRhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwKKysrIGIvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCkBAIC0xMTMsNiArMTEzLDcgQEAKICMgR2V0IHRoZSBidWlsZCBzb3VyY2UgYW5kIHRvcCBsZXZlbCBLY29uZmlnIGZpbGUgKHBhc3NlZCBpbikKIG15ICRrc291cmNlID0gJEFSR1ZbMF07CiBteSAka2NvbmZpZyA9ICRBUkdWWzFdOworbXkgJGxzbW9kX2ZpbGUgPSAkQVJHVlsyXTsKIAogbXkgQG1ha2VmaWxlcyA9IGBmaW5kICRrc291cmNlIC1uYW1lIE1ha2VmaWxlYDsKIG15ICVkZXBlbmRzOwpAQCAtMTIxLDYgKzEyMiw4IEBACiBteSAlb2JqZWN0czsKIG15ICR2YXI7CiBteSAkY29udCA9IDA7CitteSAkaWZsZXZlbCA9IDA7CitteSBAaWZkZXBzOwogCiAjIHByZXZlbnQgcmVjdXJzaW9uCiBteSAlcmVhZF9rY29uZmlnczsKQEAgLTE0Niw2ICsxNDksMTUgQEAKIAkgICAgJHN0YXRlID0gIk5FVyI7CiAJICAgICRjb25maWcgPSAkMTsKIAorCSAgICBmb3IgKG15ICRpID0gMDsgJGkgPCAkaWZsZXZlbDsgJGkrKykgeworCQlpZiAoJGkpIHsKKwkJICAgICRkZXBlbmRzeyRjb25maWd9IC49ICIgIiAuICRpZmRlcHNbJGldOworCQl9IGVsc2UgeworCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gPSAkaWZkZXBzWyRpXTsKKwkJfQorCQkkc3RhdGUgPSAiREVQIjsKKwkgICAgfQorCiAJIyBjb2xsZWN0IHRoZSBkZXBlbmRzIGZvciB0aGUgY29uZmlnCiAJfSBlbHNpZiAoJHN0YXRlIGVxICJORVciICYmIC9eXHMqZGVwZW5kc1xzK29uXHMrKC4qKSQvKSB7CiAJICAgICRzdGF0ZSA9ICJERVAiOwpAQCAtMTY2LDYgKzE3OCwyMSBAQAogCSAgICAjIG5vdGUgaWYgdGhlIGNvbmZpZyBoYXMgYSBwcm9tcHQKIAkgICAgJHByb21wdHskY29uZmlnfSA9IDE7CiAKKwkjIENoZWNrIGZvciBpZiBzdGF0ZW1lbnRzCisJfSBlbHNpZiAoL15pZlxzKyguKlxTKVxzKiQvKSB7CisJICAgIG15ICRkZXBzID0gJDE7CisJICAgICMgcmVtb3ZlIGJlZ2lubmluZyBhbmQgZW5kaW5nIG5vbiB0ZXh0CisJICAgICRkZXBzID1+IHMvXlteYS16QS1aMC05X10qLy87CisJICAgICRkZXBzID1+IHMvW15hLXpBLVowLTlfXSokLy87CisKKwkgICAgbXkgQGRlcHMgPSBzcGxpdCAvW15hLXpBLVowLTlfXSsvLCAkZGVwczsKKworCSAgICAkaWZkZXBzWyRpZmxldmVsKytdID0gam9pbiAnOicsIEBkZXBzOworCisJfSBlbHNpZiAoL15lbmRpZi8pIHsKKworCSAgICAkaWZsZXZlbC0tIGlmICgkaWZsZXZlbCk7CisKIAkjIHN0b3Agb24gImhlbHAiCiAJfSBlbHNpZiAoL15ccypoZWxwXHMqJC8pIHsKIAkgICAgJHN0YXRlID0gIk5PTkUiOwpAQCAtMjM3LDggKzI2NCwzNiBAQAogCiBteSAlbW9kdWxlczsKIAotIyBzZWUgd2hhdCBtb2R1bGVzIGFyZSBsb2FkZWQgb24gdGhpcyBzeXN0ZW0KLW9wZW4oTElOLCIvc2Jpbi9sc21vZHwiKSB8fCBkaWUgIkNhbnQgbHNtb2QiOworaWYgKGRlZmluZWQoJGxzbW9kX2ZpbGUpKSB7CisgICAgaWYgKCAhIC1mICRsc21vZF9maWxlKSB7CisJZGllICIkbHNtb2RfZmlsZSBub3QgZm91bmQiOworICAgIH0KKyAgICBpZiAoIC14ICRsc21vZF9maWxlKSB7CisJIyB0aGUgZmlsZSBpcyBleGVjdXRhYmxlLCBydW4gaXQKKwlvcGVuKExJTiwgIiRsc21vZF9maWxlfCIpOworICAgIH0gZWxzZSB7CisJIyBKdXN0IHJlYWQgdGhlIGNvbnRlbnRzCisJb3BlbihMSU4sICIkbHNtb2RfZmlsZSIpOworICAgIH0KK30gZWxzZSB7CisKKyAgICAjIHNlZSB3aGF0IG1vZHVsZXMgYXJlIGxvYWRlZCBvbiB0aGlzIHN5c3RlbQorICAgIG15ICRsc21vZDsKKworICAgIGZvcmVhY2ggJGRpciAoICgiL3NiaW4iLCAiL2JpbiIsICIvdXNyL3NiaW4iLCAiL3Vzci9iaW4iKSApIHsKKwlpZiAoIC14ICIkZGlyL2xzbW9kIiApIHsKKwkgICAgJGxzbW9kID0gIiRkaXIvbHNtb2QiOworCSAgICBsYXN0OworCX0KK30KKyAgICBpZiAoIWRlZmluZWQoJGxzbW9kKSkgeworCSMgdHJ5IGp1c3QgdGhlIHBhdGgKKwkkbHNtb2QgPSAibHNtb2QiOworICAgIH0KKworICAgIG9wZW4oTElOLCIkbHNtb2R8IikgfHwgZGllICJDYW4gbm90IGNhbGwgbHNtb2Qgd2l0aCAkbHNtb2QiOworfQorCiB3aGlsZSAoPExJTj4pIHsKIAluZXh0IGlmICgvXk1vZHVsZS8pOyAgIyBTa2lwIHRoZSBmaXJzdCBsaW5lLgogCWlmICgvXihcUyspLykgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rZXJuZWwtZG9jIGIvc2NyaXB0cy9rZXJuZWwtZG9jCmluZGV4IDI0MTMxMGUuLjIwOGFkM2IgMTAwNzU1Ci0tLSBhL3NjcmlwdHMva2VybmVsLWRvYworKysgYi9zY3JpcHRzL2tlcm5lbC1kb2MKQEAgLTEzLDggKzEzLDYgQEAKICMjIFRoaXMgc29mdHdhcmUgZmFsbHMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgICAgIyMKICMjIFBsZWFzZSByZWFkIHRoZSBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gICAgICAgICAgICAgIyMKIAotIyB3Lm8uIDAzLTExLTIwMDA6IGFkZGVkIHRoZSAnLWZpbGVsaXN0JyBvcHRpb24uCi0KICMgMTgvMDEvMjAwMSAtIAlDbGVhbnVwcwogIyAJCUZ1bmN0aW9ucyBwcm90b3R5cGVkIGFzIGZvbyh2b2lkKSBzYW1lIGFzIGZvbygpCiAjIAkJU3RvcCBldmFsJ2luZyB3aGVyZSB3ZSBkb24ndCBuZWVkIHRvLgpAQCAtMjQ1LDcgKzI0Myw3IEBACiAjIGNvdWxkIGNhdXNlICJ1c2Ugb2YgdW5kZWZpbmVkIHZhbHVlIiBvciBvdGhlciBidWdzLgogbXkgKCRmdW5jdGlvbiwgJWZ1bmN0aW9uX3RhYmxlLCAlcGFyYW1ldGVydHlwZXMsICRkZWNsYXJhdGlvbl9wdXJwb3NlKTsKIG15ICgkdHlwZSwgJGRlY2xhcmF0aW9uX25hbWUsICRyZXR1cm5fdHlwZSk7Ci1teSAoJG5ld3NlY3Rpb24sICRuZXdjb250ZW50cywgJHByb3RvdHlwZSwgJGZpbGVsaXN0LCAkYnJjb3VudCwgJXNvdXJjZV9tYXApOworbXkgKCRuZXdzZWN0aW9uLCAkbmV3Y29udGVudHMsICRwcm90b3R5cGUsICRicmNvdW50LCAlc291cmNlX21hcCk7CiAKIGlmIChkZWZpbmVkKCRFTlZ7J0tCVUlMRF9WRVJCT1NFJ30pKSB7CiAJJHZlcmJvc2UgPSAiJEVOVnsnS0JVSUxEX1ZFUkJPU0UnfSI7CkBAIC0zMzgsOCArMzM2LDYgQEAKIAkkdmVyYm9zZSA9IDE7CiAgICAgfSBlbHNpZiAoKCRjbWQgZXEgIi1oIikgfHwgKCRjbWQgZXEgIi0taGVscCIpKSB7CiAJdXNhZ2UoKTsKLSAgICB9IGVsc2lmICgkY21kIGVxICctZmlsZWxpc3QnKSB7Ci0JICAgICRmaWxlbGlzdCA9IHNoaWZ0IEBBUkdWOwogICAgIH0gZWxzaWYgKCRjbWQgZXEgJy1uby1kb2Mtc2VjdGlvbnMnKSB7CiAJICAgICRub19kb2Nfc2VjdGlvbnMgPSAxOwogICAgIH0KQEAgLTE4MTEsMTQgKzE4MDcsNiBAQAogCWNsb3NlKFNPVVJDRV9NQVApOwogfQogCi1pZiAoJGZpbGVsaXN0KSB7Ci0Jb3BlbihGTElTVCwiPCRmaWxlbGlzdCIpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBmaWxlIGxpc3QgJGZpbGVsaXN0IjsKLQl3aGlsZSg8RkxJU1Q+KSB7Ci0JCWNob3A7Ci0JCXByb2Nlc3NfZmlsZSgkXyk7Ci0JfQotfQotCiBmb3JlYWNoIChAQVJHVikgewogICAgIGNob21wOwogICAgIHByb2Nlc3NfZmlsZSgkXyk7CkBAIC0yMDIzLDYgKzIwMTEsOCBAQAogCXJldHVybjsKICAgICB9CiAKKyAgICAkLiA9IDE7CisKICAgICAkc2VjdGlvbl9jb3VudGVyID0gMDsKICAgICB3aGlsZSAoPElOPikgewogCWlmICgkc3RhdGUgPT0gMCkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYXJrdXBfb29wcy5wbCBiL3NjcmlwdHMvbWFya3VwX29vcHMucGwKaW5kZXggY2UzZTQwYi4uZTk1MGY5YyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYXJrdXBfb29wcy5wbAorKysgYi9zY3JpcHRzL21hcmt1cF9vb3BzLnBsCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJJGZ1bmN0aW9uID0gJDE7CiAJCSRmdW5jX29mZnNldCA9ICQyOwogCX0KLQlpZiAoJGxpbmUgPX4gL1JJUDogMDAxMDpcW1w8WzAtOWEtZl0rXD5cXSAgXFtcPFswLTlhLWZdK1w+XF0gKFthLXpBLVowLTlcX10rKVwrKDB4WzAtOWEtZl0rKVwvMHhbYS1mMC05XS8pIHsKKwlpZiAoJGxpbmUgPX4gL1JJUDogMDAxMDpcW1w8WzAtOWEtZl0rXD5cXSAgXFtcPFswLTlhLWZdK1w+XF0gKFthLXpBLVowLTlcX10rKVwrMHgoWzAtOWEtZl0rKVwvMHhbYS1mMC05XS8pIHsKIAkJJGZ1bmN0aW9uID0gJDE7CiAJCSRmdW5jX29mZnNldCA9ICQyOwogCX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsIGIvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKaW5kZXggZWE2ZjZlMy4uZjNjOWMwYSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKKysrIGIvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKQEAgLTEzNiwxMyArMTM2LDE0IEBACiAgICAgICIudGV4dC51bmxpa2VseSIgPT4gMSwKICk7CiAKLSRvYmpkdW1wID0gIm9iamR1bXAiIGlmICgobGVuZ3RoICRvYmpkdW1wKSA9PSAwKTsKLSRvYmpjb3B5ID0gIm9iamNvcHkiIGlmICgobGVuZ3RoICRvYmpjb3B5KSA9PSAwKTsKLSRjYyA9ICJnY2MiIGlmICgobGVuZ3RoICRjYykgPT0gMCk7Ci0kbGQgPSAibGQiIGlmICgobGVuZ3RoICRsZCkgPT0gMCk7Ci0kbm0gPSAibm0iIGlmICgobGVuZ3RoICRubSkgPT0gMCk7Ci0kcm0gPSAicm0iIGlmICgobGVuZ3RoICRybSkgPT0gMCk7Ci0kbXYgPSAibXYiIGlmICgobGVuZ3RoICRtdikgPT0gMCk7CisjIE5vdGU6IHdlIGFyZSBuaWNlIHRvIEMtcHJvZ3JhbW1lcnMgaGVyZSwgdGh1cyB3ZSBza2lwIHRoZSAnfHw9Jy1pZGlvbS4KKyRvYmpkdW1wID0gJ29iamR1bXAnIGlmICghJG9iamR1bXApOworJG9iamNvcHkgPSAnb2JqY29weScgaWYgKCEkb2JqY29weSk7CiskY2MgPSAnZ2NjJyBpZiAoISRjYyk7CiskbGQgPSAnbGQnIGlmICghJGxkKTsKKyRubSA9ICdubScgaWYgKCEkbm0pOworJHJtID0gJ3JtJyBpZiAoISRybSk7CiskbXYgPSAnbXYnIGlmICghJG12KTsKIAogI3ByaW50IFNUREVSUiAicnVubmluZzogJFAgJyRhcmNoJyAnJG9iamR1bXAnICckb2JqY29weScgJyRjYycgJyRsZCcgIiAuCiAjICAgICInJG5tJyAnJHJtJyAnJG12JyAnJGlucHV0ZmlsZSdcbiI7CkBAIC00MzIsMTQgKzQzMywxNCBAQAogCiAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSBtY291bnQgY2FsbGVyIG9mZnNldHMgYW5kIHByaW50IGEgcmVmZXJlbmNlCiAgICAgIyB0byB0aGUgY2FsbGVyIGJhc2VkIGZyb20gdGhlIHJlZl9mdW5jLgotICAgIGZvciAobXkgJGk9MDsgJGkgPD0gJCNvZmZzZXRzOyAkaSsrKSB7Ci0JaWYgKCEkb3BlbmVkKSB7Ci0JICAgIG9wZW4oRklMRSwgIj4kbWNvdW50X3MiKSB8fCBkaWUgImNhbid0IGNyZWF0ZSAkbWNvdW50X3NcbiI7Ci0JICAgICRvcGVuZWQgPSAxOwotCSAgICBwcmludCBGSUxFICJcdC5zZWN0aW9uICRtY291bnRfc2VjdGlvbixcImFcIiwkc2VjdGlvbl90eXBlXG4iOwotCSAgICBwcmludCBGSUxFICJcdC5hbGlnbiAkYWxpZ25tZW50XG4iIGlmIChkZWZpbmVkKCRhbGlnbm1lbnQpKTsKLQl9Ci0JcHJpbnRmIEZJTEUgIlx0JXMgJXMgKyAlZFxuIiwgJHR5cGUsICRyZWZfZnVuYywgJG9mZnNldHNbJGldIC0gJG9mZnNldDsKKyAgICBpZiAoISRvcGVuZWQpIHsKKwlvcGVuKEZJTEUsICI+JG1jb3VudF9zIikgfHwgZGllICJjYW4ndCBjcmVhdGUgJG1jb3VudF9zXG4iOworCSRvcGVuZWQgPSAxOworCXByaW50IEZJTEUgIlx0LnNlY3Rpb24gJG1jb3VudF9zZWN0aW9uLFwiYVwiLCRzZWN0aW9uX3R5cGVcbiI7CisJcHJpbnQgRklMRSAiXHQuYWxpZ24gJGFsaWdubWVudFxuIiBpZiAoZGVmaW5lZCgkYWxpZ25tZW50KSk7CisgICAgfQorICAgIGZvcmVhY2ggbXkgJGN1cl9vZmZzZXQgKEBvZmZzZXRzKSB7CisJcHJpbnRmIEZJTEUgIlx0JXMgJXMgKyAlZFxuIiwgJHR5cGUsICRyZWZfZnVuYywgJGN1cl9vZmZzZXQgLSAkb2Zmc2V0OwogICAgIH0KIH0KIApAQCAtNDc2LDExICs0NzcsNyBAQAogCSRyZWFkX2hlYWRlcnMgPSAwOwogCiAJIyBPbmx5IHJlY29yZCB0ZXh0IHNlY3Rpb25zIHRoYXQgd2Uga25vdyBhcmUgc2FmZQotCWlmIChkZWZpbmVkKCR0ZXh0X3NlY3Rpb25zeyQxfSkpIHsKLQkgICAgJHJlYWRfZnVuY3Rpb24gPSAxOwotCX0gZWxzZSB7Ci0JICAgICRyZWFkX2Z1bmN0aW9uID0gMDsKLQl9CisJJHJlYWRfZnVuY3Rpb24gPSBkZWZpbmVkKCR0ZXh0X3NlY3Rpb25zeyQxfSk7CiAJIyBwcmludCBvdXQgYW55IHJlY29yZGVkIG9mZnNldHMKIAl1cGRhdGVfZnVuY3MoKTsKIApAQCAtNTE0LDcgKzUxMSw3IEBACiAgICAgfQogICAgICMgaXMgdGhpcyBhIGNhbGwgc2l0ZSB0byBtY291bnQ/IElmIHNvLCByZWNvcmQgaXQgdG8gcHJpbnQgbGF0ZXIKICAgICBpZiAoJHRleHRfZm91bmQgJiYgLyRtY291bnRfcmVnZXgvKSB7Ci0JJG9mZnNldHNbJCNvZmZzZXRzICsgMV0gPSBoZXggJDE7CisJcHVzaChAb2Zmc2V0cywgaGV4ICQxKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmggYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCmluZGV4IGM0MWFmZTYuLjQ3ZmI2NWQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmgKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaApAQCAtNjUsNyArNjUsNiBAQAogCQkJIGNvbnN0IGNoYXIgKmNhdXNlLCBpbnQgcmVzdWx0LCBpbnQgaW5mbyk7CiAKIC8qIEludGVybmFsIElNQSBmdW5jdGlvbiBkZWZpbml0aW9ucyAqLwotdm9pZCBpbWFfaWludGNhY2hlX2luaXQodm9pZCk7CiBpbnQgaW1hX2luaXQodm9pZCk7CiB2b2lkIGltYV9jbGVhbnVwKHZvaWQpOwogaW50IGltYV9mc19pbml0KHZvaWQpOwpAQCAtMTMxLDcgKzEzMCw3IEBACiB2b2lkIGlpbnRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpOwogCiAvKiBJTUEgcG9saWN5IHJlbGF0ZWQgZnVuY3Rpb25zICovCi1lbnVtIGltYV9ob29rcyB7IFBBVEhfQ0hFQ0sgPSAxLCBGSUxFX01NQVAsIEJQUk1fQ0hFQ0sgfTsKK2VudW0gaW1hX2hvb2tzIHsgRklMRV9DSEVDSyA9IDEsIEZJTEVfTU1BUCwgQlBSTV9DSEVDSyB9OwogCiBpbnQgaW1hX21hdGNoX3BvbGljeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGltYV9ob29rcyBmdW5jLCBpbnQgbWFzayk7CiB2b2lkIGltYV9pbml0X3BvbGljeSh2b2lkKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwaS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKaW5kZXggM2NkNThiNi4uMmE1ZTBiYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKQEAgLTk1LDEyICs5NSwxMiBAQAogICogaW1hX211c3RfbWVhc3VyZSAtIG1lYXN1cmUgZGVjaXNpb24gYmFzZWQgb24gcG9saWN5LgogICogQGlub2RlOiBwb2ludGVyIHRvIGlub2RlIHRvIG1lYXN1cmUKICAqIEBtYXNrOiBjb250YWlucyB0aGUgcGVybWlzc2lvbiBtYXNrIChNQVlfUkVBRCwgTUFZX1dSSVRFLCBNQVlfRVhFQ1VURSkKLSAqIEBmdW5jdGlvbjogY2FsbGluZyBmdW5jdGlvbiAoUEFUSF9DSEVDSywgQlBSTV9DSEVDSywgRklMRV9NTUFQKQorICogQGZ1bmN0aW9uOiBjYWxsaW5nIGZ1bmN0aW9uIChGSUxFX0NIRUNLLCBCUFJNX0NIRUNLLCBGSUxFX01NQVApCiAgKgogICogVGhlIHBvbGljeSBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIGtleXBhaXJzOgogICogCQlzdWJqPSwgb2JqPSwgdHlwZT0sIGZ1bmM9LCBtYXNrPSwgZnNtYWdpYz0KICAqCXN1Ymosb2JqLCBhbmQgdHlwZTogYXJlIExTTSBzcGVjaWZpYy4KLSAqIAlmdW5jOiBQQVRIX0NIRUNLIHwgQlBSTV9DSEVDSyB8IEZJTEVfTU1BUAorICogCWZ1bmM6IEZJTEVfQ0hFQ0sgfCBCUFJNX0NIRUNLIHwgRklMRV9NTUFQCiAgKiAJbWFzazogY29udGFpbnMgdGhlIHBlcm1pc3Npb24gbWFzawogICoJZnNtYWdpYzogaGV4IHZhbHVlCiAgKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCmluZGV4IGZhNTkyZmYuLjJkNGQwNWQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKQEAgLTUyLDkgKzUyLDYgQEAKIAlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBOVUxMOwogCWludCByYyA9IDA7CiAKLQlpZiAoIWltYV9pbml0aWFsaXplZCkKLQkJcmV0dXJuIDA7Ci0KIAlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfTk9GUyk7CiAJaWYgKCFpaW50KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY2LDEyICs2MywxMSBAQAogCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CiAJcmMgPSByYWRpeF90cmVlX2luc2VydCgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlLCBpaW50KTsKIAlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogb3V0OgogCWlmIChyYyA8IDApCiAJCWttZW1fY2FjaGVfZnJlZShpaW50X2NhY2hlLCBpaW50KTsKIAotCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKLQogCXJldHVybiByYzsKIH0KIApAQCAtMTE4LDggKzExNCw2IEBACiB7CiAJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OwogCi0JaWYgKCFpbWFfaW5pdGlhbGl6ZWQpCi0JCXJldHVybjsKIAlzcGluX2xvY2soJmltYV9paW50X2xvY2spOwogCWlpbnQgPSByYWRpeF90cmVlX2RlbGV0ZSgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlKTsKIAlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CkBAIC0xNDEsOSArMTM1LDExIEBACiAJa3JlZl9zZXQoJmlpbnQtPnJlZmNvdW50LCAxKTsKIH0KIAotdm9pZCBfX2luaXQgaW1hX2lpbnRjYWNoZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbWFfaWludGNhY2hlX2luaXQodm9pZCkKIHsKIAlpaW50X2NhY2hlID0KIAkgICAga21lbV9jYWNoZV9jcmVhdGUoImlpbnRfY2FjaGUiLCBzaXplb2Yoc3RydWN0IGltYV9paW50X2NhY2hlKSwgMCwKIAkJCSAgICAgIFNMQUJfUEFOSUMsIGluaXRfb25jZSk7CisJcmV0dXJuIDA7CiB9CitzZWN1cml0eV9pbml0Y2FsbChpbWFfaWludGNhY2hlX2luaXQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jCmluZGV4IGE4OWY0NGQuLjI5NGIwMDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqCiAgKiBGaWxlOiBpbWFfbWFpbi5jCiAgKglpbXBsZW1lbnRzIHRoZSBJTUEgaG9va3M6IGltYV9icHJtX2NoZWNrLCBpbWFfZmlsZV9tbWFwLAotICoJYW5kIGltYV9wYXRoX2NoZWNrLgorICoJYW5kIGltYV9maWxlX2NoZWNrLgogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpAQCAtODQsNiArODQsMzYgQEAKIAlyZXR1cm4gZm91bmQ7CiB9CiAKKy8qIGltYV9yZWFkX3dyaXRlX2NoZWNrIC0gcmVmbGVjdCBwb3NzaWJsZSByZWFkaW5nL3dyaXRpbmcgZXJyb3JzIGluIHRoZSBQQ1IuCisgKgorICogV2hlbiBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZCwgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKKyAqIHRoZSBmaWxlIGNvdWxkIGNoYW5nZSwgcmVzdWx0aW5nIGluIGEgZmlsZSBtZWFzdXJlbWVudCBlcnJvci4KKyAqCisgKiBPcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGUsIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3IgcmVhZCwgcmVzdWx0cworICogaW4gYSB0aW1lIG9mIG1lYXN1cmUsIHRpbWUgb2YgdXNlIChUb01Ub1UpIGVycm9yLgorICoKKyAqIEluIGVpdGhlciBjYXNlIGludmFsaWRhdGUgdGhlIFBDUi4KKyAqLworZW51bSBpaW50X3Bjcl9lcnJvciB7IFRPTVRPVSwgT1BFTl9XUklURVJTIH07CitzdGF0aWMgdm9pZCBpbWFfcmVhZF93cml0ZV9jaGVjayhlbnVtIGlpbnRfcGNyX2Vycm9yIGVycm9yLAorCQkJCSBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsCisJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQoreworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIFRPTVRPVToKKwkJaWYgKGlpbnQtPnJlYWRjb3VudCA+IDApCisJCQlpbWFfYWRkX3Zpb2xhdGlvbihpbm9kZSwgZmlsZW5hbWUsICJpbnZhbGlkX3BjciIsCisJCQkJCSAgIlRvTVRvVSIpOworCQlicmVhazsKKwljYXNlIE9QRU5fV1JJVEVSUzoKKwkJaWYgKGlpbnQtPndyaXRlY291bnQgPiAwKQorCQkJaW1hX2FkZF92aW9sYXRpb24oaW5vZGUsIGZpbGVuYW1lLCAiaW52YWxpZF9wY3IiLAorCQkJCQkgICJvcGVuX3dyaXRlcnMiKTsKKwkJYnJlYWs7CisJfQorfQorCiAvKgogICogVXBkYXRlIHRoZSBjb3VudHMgZ2l2ZW4gYW4gZm1vZGVfdAogICovCkBAIC05OSw2ICsxMjksNDcgQEAKIH0KIAogLyoKKyAqIGltYV9jb3VudHNfZ2V0IC0gaW5jcmVtZW50IGZpbGUgY291bnRzCisgKgorICogTWFpbnRhaW4gcmVhZC93cml0ZSBjb3VudGVycyBmb3IgYWxsIGZpbGVzLCBidXQgb25seQorICogaW52YWxpZGF0ZSB0aGUgUENSIGZvciBtZWFzdXJlZCBmaWxlczoKKyAqIAktIE9wZW5pbmcgYSBmaWxlIGZvciB3cml0ZSB3aGVuIGFscmVhZHkgb3BlbiBmb3IgcmVhZCwKKyAqCSAgcmVzdWx0cyBpbiBhIHRpbWUgb2YgbWVhc3VyZSwgdGltZSBvZiB1c2UgKFRvTVRvVSkgZXJyb3IuCisgKgktIE9wZW5pbmcgYSBmaWxlIGZvciByZWFkIHdoZW4gYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKKyAqIAkgIGNvdWxkIHJlc3VsdCBpbiBhIGZpbGUgbWVhc3VyZW1lbnQgZXJyb3IuCisgKgorICovCit2b2lkIGltYV9jb3VudHNfZ2V0KHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlmbW9kZV90IG1vZGUgPSBmaWxlLT5mX21vZGU7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCWludCByYzsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm47CisJaWludCA9IGltYV9paW50X2ZpbmRfZ2V0KGlub2RlKTsKKwlpZiAoIWlpbnQpCisJCXJldHVybjsKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJcmMgPSBpbWFfbXVzdF9tZWFzdXJlKGlpbnQsIGlub2RlLCBNQVlfUkVBRCwgRklMRV9DSEVDSyk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAobW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCWltYV9yZWFkX3dyaXRlX2NoZWNrKFRPTVRPVSwgaWludCwgaW5vZGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaW1hX3JlYWRfd3JpdGVfY2hlY2soT1BFTl9XUklURVJTLCBpaW50LCBpbm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CitvdXQ6CisJaW1hX2luY19jb3VudHMoaWludCwgZmlsZS0+Zl9tb2RlKTsKKwltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKKworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKK30KKworLyoKICAqIERlY3JlbWVudCBpbWEgY291bnRzCiAgKi8KIHN0YXRpYyB2b2lkIGltYV9kZWNfY291bnRzKHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGlub2RlICppbm9kZSwKQEAgLTE1MywxMjMgKzIyNCw2IEBACiAJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOwogfQogCi0vKiBpbWFfcmVhZF93cml0ZV9jaGVjayAtIHJlZmxlY3QgcG9zc2libGUgcmVhZGluZy93cml0aW5nIGVycm9ycyBpbiB0aGUgUENSLgotICoKLSAqIFdoZW4gb3BlbmluZyBhIGZpbGUgZm9yIHJlYWQsIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUsCi0gKiB0aGUgZmlsZSBjb3VsZCBjaGFuZ2UsIHJlc3VsdGluZyBpbiBhIGZpbGUgbWVhc3VyZW1lbnQgZXJyb3IuCi0gKgotICogT3BlbmluZyBhIGZpbGUgZm9yIHdyaXRlLCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHJlYWQsIHJlc3VsdHMKLSAqIGluIGEgdGltZSBvZiBtZWFzdXJlLCB0aW1lIG9mIHVzZSAoVG9NVG9VKSBlcnJvci4KLSAqCi0gKiBJbiBlaXRoZXIgY2FzZSBpbnZhbGlkYXRlIHRoZSBQQ1IuCi0gKi8KLWVudW0gaWludF9wY3JfZXJyb3IgeyBUT01UT1UsIE9QRU5fV1JJVEVSUyB9Owotc3RhdGljIHZvaWQgaW1hX3JlYWRfd3JpdGVfY2hlY2soZW51bSBpaW50X3Bjcl9lcnJvciBlcnJvciwKLQkJCQkgc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LAotCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSkKLXsKLQlzd2l0Y2ggKGVycm9yKSB7Ci0JY2FzZSBUT01UT1U6Ci0JCWlmIChpaW50LT5yZWFkY291bnQgPiAwKQotCQkJaW1hX2FkZF92aW9sYXRpb24oaW5vZGUsIGZpbGVuYW1lLCAiaW52YWxpZF9wY3IiLAotCQkJCQkgICJUb01Ub1UiKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUEVOX1dSSVRFUlM6Ci0JCWlmIChpaW50LT53cml0ZWNvdW50ID4gMCkKLQkJCWltYV9hZGRfdmlvbGF0aW9uKGlub2RlLCBmaWxlbmFtZSwgImludmFsaWRfcGNyIiwKLQkJCQkJICAib3Blbl93cml0ZXJzIik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBnZXRfcGF0aF9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQotewotCWludCByYyA9IDA7Ci0KLQlpbWFfaW5jX2NvdW50cyhpaW50LCBmaWxlLT5mX21vZGUpOwotCi0JcmMgPSBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChpaW50LCBmaWxlKTsKLQlpZiAoIXJjKQotCQlpbWFfc3RvcmVfbWVhc3VyZW1lbnQoaWludCwgZmlsZSwgZmlsZW5hbWUpOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBpbWFfcGF0aF9jaGVjayAtIGJhc2VkIG9uIHBvbGljeSwgY29sbGVjdC9zdG9yZSBtZWFzdXJlbWVudC4KLSAqIEBwYXRoOiBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIHBhdGggdG8gYmUgbWVhc3VyZWQKLSAqIEBtYXNrOiBjb250YWlucyBNQVlfUkVBRCwgTUFZX1dSSVRFIG9yIE1BWV9FWEVDVVRFCi0gKgotICogTWVhc3VyZSB0aGUgZmlsZSBiZWluZyBvcGVuIGZvciByZWFkb25seSwgYmFzZWQgb24gdGhlCi0gKiBpbWFfbXVzdF9tZWFzdXJlKCkgcG9saWN5IGRlY2lzaW9uLgotICoKLSAqIEtlZXAgcmVhZC93cml0ZSBjb3VudGVycyBmb3IgYWxsIGZpbGVzLCBidXQgb25seQotICogaW52YWxpZGF0ZSB0aGUgUENSIGZvciBtZWFzdXJlZCBmaWxlczoKLSAqIAktIE9wZW5pbmcgYSBmaWxlIGZvciB3cml0ZSB3aGVuIGFscmVhZHkgb3BlbiBmb3IgcmVhZCwKLSAqCSAgcmVzdWx0cyBpbiBhIHRpbWUgb2YgbWVhc3VyZSwgdGltZSBvZiB1c2UgKFRvTVRvVSkgZXJyb3IuCi0gKgktIE9wZW5pbmcgYSBmaWxlIGZvciByZWFkIHdoZW4gYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKLSAqIAkgIGNvdWxkIHJlc3VsdCBpbiBhIGZpbGUgbWVhc3VyZW1lbnQgZXJyb3IuCi0gKgotICogQWx3YXlzIHJldHVybiAwIGFuZCBhdWRpdCBkZW50cnlfb3BlbiBmYWlsdXJlcy4KLSAqIChSZXR1cm4gY29kZSB3aWxsIGJlIGJhc2VkIHVwb24gbWVhc3VyZW1lbnQgYXBwcmFpc2FsLikKLSAqLwotaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7Ci0JaW50IHJjOwotCi0JaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCi0JCXJldHVybiAwOwotCWlpbnQgPSBpbWFfaWludF9maW5kX2dldChpbm9kZSk7Ci0JaWYgKCFpaW50KQotCQlyZXR1cm4gMDsKLQotCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKLQotCXJjID0gaW1hX211c3RfbWVhc3VyZShpaW50LCBpbm9kZSwgTUFZX1JFQUQsIFBBVEhfQ0hFQ0spOwotCWlmIChyYyA8IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKChtYXNrICYgTUFZX1dSSVRFKSB8fCAobWFzayA9PSAwKSkKLQkJaW1hX3JlYWRfd3JpdGVfY2hlY2soVE9NVE9VLCBpaW50LCBpbm9kZSwKLQkJCQkgICAgIHBhdGgtPmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCi0JaWYgKChtYXNrICYgKE1BWV9XUklURSB8IE1BWV9SRUFEIHwgTUFZX0VYRUMpKSAhPSBNQVlfUkVBRCkKLQkJZ290byBvdXQ7Ci0KLQlpbWFfcmVhZF93cml0ZV9jaGVjayhPUEVOX1dSSVRFUlMsIGlpbnQsIGlub2RlLAotCQkJICAgICBwYXRoLT5kZW50cnktPmRfbmFtZS5uYW1lKTsKLQlpZiAoIShpaW50LT5mbGFncyAmIElNQV9NRUFTVVJFRCkpIHsKLQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChwYXRoLT5kZW50cnkpOwotCQlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IG1udGdldChwYXRoLT5tbnQpOwotCi0JCWZpbGUgPSBkZW50cnlfb3BlbihkZW50cnksIG1udCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwKLQkJCQkgICBjdXJyZW50X2NyZWQoKSk7Ci0JCWlmIChJU19FUlIoZmlsZSkpIHsKLQkJCWludCBhdWRpdF9pbmZvID0gMDsKLQotCQkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwKLQkJCQkJICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJCSAgICAiYWRkX21lYXN1cmVtZW50IiwKLQkJCQkJICAgICJkZW50cnlfb3BlbiBmYWlsZWQiLAotCQkJCQkgICAgMSwgYXVkaXRfaW5mbyk7Ci0JCQlmaWxlID0gTlVMTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXJjID0gZ2V0X3BhdGhfbWVhc3VyZW1lbnQoaWludCwgZmlsZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JfQotb3V0OgotCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOwotCWlmIChmaWxlKQotCQlmcHV0KGZpbGUpOwotCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGltYV9wYXRoX2NoZWNrKTsKLQogc3RhdGljIGludCBwcm9jZXNzX21lYXN1cmVtZW50KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSwKIAkJCSAgICAgICBpbnQgbWFzaywgaW50IGZ1bmN0aW9uKQogewpAQCAtMjk3LDMzICsyNTEsNiBAQAogCXJldHVybiByYzsKIH0KIAotLyoKLSAqIGltYV9jb3VudHNfZ2V0IC0gaW5jcmVtZW50IGZpbGUgY291bnRzCi0gKgotICogLSBmb3IgSVBDIHNobSBhbmQgc2htYXQgZmlsZS4KLSAqIC0gZm9yIG5mc2QgZXhwb3J0ZWQgZmlsZXMuCi0gKgotICogSW5jcmVtZW50IHRoZSBjb3VudHMgZm9yIHRoZXNlIGZpbGVzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkKLSAqIGltYmFsYW5jZSBtZXNzYWdlcy4KLSAqLwotdm9pZCBpbWFfY291bnRzX2dldChzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OwotCi0JaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCi0JCXJldHVybjsKLQlpaW50ID0gaW1hX2lpbnRfZmluZF9nZXQoaW5vZGUpOwotCWlmICghaWludCkKLQkJcmV0dXJuOwotCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKLQlpbWFfaW5jX2NvdW50cyhpaW50LCBmaWxlLT5mX21vZGUpOwotCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOwotCi0Ja3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaW1hX2NvdW50c19nZXQpOwotCiAvKioKICAqIGltYV9maWxlX21tYXAgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCiAgKiBAZmlsZTogcG9pbnRlciB0byB0aGUgZmlsZSB0byBiZSBtZWFzdXJlZCAoTWF5IGJlIE5VTEwpCkBAIC0zNjksMTEgKzI5NiwzMSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGltYV9wYXRoX2NoZWNrIC0gYmFzZWQgb24gcG9saWN5LCBjb2xsZWN0L3N0b3JlIG1lYXN1cmVtZW50LgorICogQGZpbGU6IHBvaW50ZXIgdG8gdGhlIGZpbGUgdG8gYmUgbWVhc3VyZWQKKyAqIEBtYXNrOiBjb250YWlucyBNQVlfUkVBRCwgTUFZX1dSSVRFIG9yIE1BWV9FWEVDVVRFCisgKgorICogTWVhc3VyZSBmaWxlcyBiYXNlZCBvbiB0aGUgaW1hX211c3RfbWVhc3VyZSgpIHBvbGljeSBkZWNpc2lvbi4KKyAqCisgKiBBbHdheXMgcmV0dXJuIDAgYW5kIGF1ZGl0IGRlbnRyeV9vcGVuIGZhaWx1cmVzLgorICogKFJldHVybiBjb2RlIHdpbGwgYmUgYmFzZWQgdXBvbiBtZWFzdXJlbWVudCBhcHByYWlzYWwuKQorICovCitpbnQgaW1hX2ZpbGVfY2hlY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQoreworCWludCByYzsKKworCXJjID0gcHJvY2Vzc19tZWFzdXJlbWVudChmaWxlLCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJIG1hc2sgJiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQyksCisJCQkJIEZJTEVfQ0hFQ0spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW1hX2ZpbGVfY2hlY2spOworCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2ltYSh2b2lkKQogewogCWludCBlcnJvcjsKIAotCWltYV9paW50Y2FjaGVfaW5pdCgpOwogCWVycm9yID0gaW1hX2luaXQoKTsKIAlpbWFfaW5pdGlhbGl6ZWQgPSAxOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMKaW5kZXggZTEyNzgzOS4uNDc1OWQwZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMKQEAgLTY3LDcgKzY3LDcgQEAKIAkgLmZsYWdzID0gSU1BX0ZVTkMgfCBJTUFfTUFTS30sCiAJey5hY3Rpb24gPSBNRUFTVVJFLC5mdW5jID0gQlBSTV9DSEVDSywubWFzayA9IE1BWV9FWEVDLAogCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLfSwKLQl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBQQVRIX0NIRUNLLC5tYXNrID0gTUFZX1JFQUQsLnVpZCA9IDAsCisJey5hY3Rpb24gPSBNRUFTVVJFLC5mdW5jID0gRklMRV9DSEVDSywubWFzayA9IE1BWV9SRUFELC51aWQgPSAwLAogCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLIHwgSU1BX1VJRH0sCiB9OwogCkBAIC0yODIsOCArMjgyLDExIEBACiAJCQlicmVhazsKIAkJY2FzZSBPcHRfZnVuYzoKIAkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJmdW5jPSVzICIsIGFyZ3NbMF0uZnJvbSk7Ci0JCQlpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIlBBVEhfQ0hFQ0siKSA9PSAwKQotCQkJCWVudHJ5LT5mdW5jID0gUEFUSF9DSEVDSzsKKwkJCWlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiRklMRV9DSEVDSyIpID09IDApCisJCQkJZW50cnktPmZ1bmMgPSBGSUxFX0NIRUNLOworCQkJLyogUEFUSF9DSEVDSyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdCAqLworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIlBBVEhfQ0hFQ0siKSA9PSAwKQorCQkJCWVudHJ5LT5mdW5jID0gRklMRV9DSEVDSzsKIAkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJGSUxFX01NQVAiKSA9PSAwKQogCQkJCWVudHJ5LT5mdW5jID0gRklMRV9NTUFQOwogCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIkJQUk1fQ0hFQ0siKSA9PSAwKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9nYy5jIGIvc2VjdXJpdHkva2V5cy9nYy5jCmluZGV4IDQ3NzBiZTMuLjE5OTAyMzEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvZ2MuYworKysgYi9zZWN1cml0eS9rZXlzL2djLmMKQEAgLTc3LDcgKzc3LDggQEAKIAkJZ290byBkb250X2djOwogCiAJLyogc2NhbiB0aGUga2V5cmluZyBsb29raW5nIGZvciBkZWFkIGtleXMgKi8KLQlrbGlzdCA9IHJjdV9kZXJlZmVyZW5jZShrZXlyaW5nLT5wYXlsb2FkLnN1YnNjcmlwdGlvbnMpOworCWtsaXN0ID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGtleXJpbmctPnBheWxvYWQuc3Vic2NyaXB0aW9ucywKKwkJCQkgICAgICBsb2NrZGVwX2lzX2hlbGQoJmtleV9zZXJpYWxfbG9jaykpOwogCWlmICgha2xpc3QpCiAJCWdvdG8gZG9udF9nYzsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwppbmRleCA4ZWMwMjc0Li5lODE0ZDIxIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYworKysgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwpAQCAtMTUxLDcgKzE1MSw5IEBACiAJCXdyaXRlX3VubG9jaygma2V5cmluZ19uYW1lX2xvY2spOwogCX0KIAotCWtsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGtleXJpbmctPnBheWxvYWQuc3Vic2NyaXB0aW9ucyk7CisJa2xpc3QgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zLAorCQkJCSAgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJICAgICAgYXRvbWljX3JlYWQoJmtleXJpbmctPnVzYWdlKSA9PSAwKTsKIAlpZiAoa2xpc3QpIHsKIAkJZm9yIChsb29wID0ga2xpc3QtPm5rZXlzIC0gMTsgbG9vcCA+PSAwOyBsb29wLS0pCiAJCQlrZXlfcHV0KGtsaXN0LT5rZXlzW2xvb3BdKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDI0ZTA2MGIuLjEyMmI3NDggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtNjY2LDggKzY2Niw2IEBACiB2b2lkIHNlY3VyaXR5X2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzZWN1cml0eV9vcHMtPmZpbGVfZnJlZV9zZWN1cml0eShmaWxlKTsKLQlpZiAoZmlsZS0+Zl9kZW50cnkpCi0JCWltYV9maWxlX2ZyZWUoZmlsZSk7CiB9CiAKIGludCBzZWN1cml0eV9maWxlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvZWJpdG1hcC5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMKaW5kZXggNjhjNzM0OC4uMDRiNjE0NSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCQkJY21hcF9pZHggPSBkZWx0YSAvIE5FVExCTF9DQVRNQVBfTUFQU0laRTsKIAkJCWNtYXBfc2Z0ID0gZGVsdGEgJSBORVRMQkxfQ0FUTUFQX01BUFNJWkU7CiAJCQljX2l0ZXItPmJpdG1hcFtjbWFwX2lkeF0KLQkJCQl8PSBlX2l0ZXItPm1hcHNbY21hcF9pZHhdIDw8IGNtYXBfc2Z0OworCQkJCXw9IGVfaXRlci0+bWFwc1tpXSA8PCBjbWFwX3NmdDsKIAkJfQogCQllX2l0ZXIgPSBlX2l0ZXItPm5leHQ7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMgYi9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYwppbmRleCA1ODY5NjVmLi43YTQzN2RhIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYworKysgYi9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYwpAQCAtNzY4LDcgKzc2OCw3IEBACiAJCQkJInJlcXVpcmVkIHByb3BlcnR5ICVzIG5vdCBwcmVzZW50XG4iLCBwcm9wbmFtZSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAoKnJlZiAhPSBjb2RlYy0+bm9kZS0+bGludXhfcGhhbmRsZSkgeworCQlpZiAoKnJlZiAhPSBjb2RlYy0+bm9kZS0+cGhhbmRsZSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAic25kLWFvYS1mYWJyaWMtbGF5b3V0OiAiCiAJCQkJIiVzIGRvZXNuJ3QgbWF0Y2ghXG4iLCBwcm9wbmFtZSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKaW5kZXggNDE5MWFjYy4uYzEwNzBlMyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKKysrIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKQEAgLTYxNCw3ICs2MTQsOCBAQAogCS8qIFB1dCB0d28gYnVmZmVycyBvbiB0aGUgcmluZyB0byBnZXQgdGhpbmdzIHN0YXJ0ZWQuCiAJKi8KIAlmb3IgKGk9MDsgaTwyOyBpKyspIHsKLQkJYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGRiLT5kbWFuciwgZGItPm5leHRJbiwgZGItPmRtYV9mcmFnc2l6ZSk7CisJCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkYi0+ZG1hbnIsIHZpcnRfdG9fcGh5cyhkYi0+bmV4dEluKSwKKwkJCQlkYi0+ZG1hX2ZyYWdzaXplLCBERE1BX0ZMQUdTX0lFKTsKIAogCQlkYi0+bmV4dEluICs9IGRiLT5kbWFfZnJhZ3NpemU7CiAJCWlmIChkYi0+bmV4dEluID49IGRiLT5yYXdidWYgKyBkYi0+ZG1hc2l6ZSkKQEAgLTczMiw4ICs3MzMsOSBAQAogCWRiLT5kbWFfcWNvdW50LS07CiAKIAlpZiAoZGItPmNvdW50ID49IGRiLT5mcmFnc2l6ZSkgewotCQlpZiAoYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoZGItPmRtYW5yLCBkYi0+bmV4dE91dCwKLQkJCQkJCQlkYi0+ZnJhZ3NpemUpID09IDApIHsKKwkJaWYgKGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGRiLT5kbWFuciwKKwkJCQl2aXJ0X3RvX3BoeXMoZGItPm5leHRPdXQpLCBkYi0+ZnJhZ3NpemUsCisJCQkJRERNQV9GTEFHU19JRSkgPT0gMCkgewogCQkJZXJyKCJxY291bnQgPCAyIGFuZCBubyByaW5nIHJvb20hIik7CiAJCX0KIAkJZGItPm5leHRPdXQgKz0gZGItPmZyYWdzaXplOwpAQCAtNzc3LDcgKzc3OSw4IEBACiAKIAkvKiBQdXQgYSBuZXcgZW1wdHkgYnVmZmVyIG9uIHRoZSBkZXN0aW5hdGlvbiBETUEuCiAJKi8KLQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoZHAtPmRtYW5yLCBkcC0+bmV4dEluLCBkcC0+ZG1hX2ZyYWdzaXplKTsKKwlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoZHAtPmRtYW5yLCB2aXJ0X3RvX3BoeXMoZHAtPm5leHRJbiksCisJCQkgICAgICBkcC0+ZG1hX2ZyYWdzaXplLCBERE1BX0ZMQUdTX0lFKTsKIAogCWRwLT5uZXh0SW4gKz0gZHAtPmRtYV9mcmFnc2l6ZTsKIAlpZiAoZHAtPm5leHRJbiA+PSBkcC0+cmF3YnVmICsgZHAtPmRtYXNpemUpCkBAIC0xMTc3LDggKzExODAsOSBAQAogCQkgKiB3ZSBrbm93IHRoZSBkbWEgaGFzIHN0b3BwZWQuCiAJCSAqLwogCQl3aGlsZSAoKGRiLT5kbWFfcWNvdW50IDwgMikgJiYgKGRiLT5jb3VudCA+PSBkYi0+ZnJhZ3NpemUpKSB7Ci0JCQlpZiAoYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoZGItPmRtYW5yLCBkYi0+bmV4dE91dCwKLQkJCQkJCQlkYi0+ZnJhZ3NpemUpID09IDApIHsKKwkJCWlmIChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShkYi0+ZG1hbnIsCisJCQkJdmlydF90b19waHlzKGRiLT5uZXh0T3V0KSwgZGItPmZyYWdzaXplLAorCQkJCURETUFfRkxBR1NfSUUpID09IDApIHsKIAkJCQllcnIoInFjb3VudCA8IDIgYW5kIG5vIHJpbmcgcm9vbSEiKTsKIAkJCX0KIAkJCWRiLT5uZXh0T3V0ICs9IGRiLT5mcmFnc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKaW5kZXggY2I2NWJkMC4uNDU5YzFmNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKQEAgLTE2NiwxOCArMTY2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYXRjX2dldF9wdHBfcGh5cyhzdHJ1Y3QgY3RfYXRjICphdGMsIGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgY3Rfdm0gKnZtOwotCXZvaWQgKmt2aXJ0X2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7Ci0KLQl2bSA9IGF0Yy0+dm07Ci0Ja3ZpcnRfYWRkciA9IHZtLT5nZXRfcHRwX3ZpcnQodm0sIGluZGV4KTsKLQlpZiAoa3ZpcnRfYWRkciA9PSBOVUxMKQotCQlwaHlzX2FkZHIgPSAofjBVTCk7Ci0JZWxzZQotCQlwaHlzX2FkZHIgPSB2aXJ0X3RvX3BoeXMoa3ZpcnRfYWRkcik7Ci0KLQlyZXR1cm4gcGh5c19hZGRyOworCXJldHVybiBhdGMtPnZtLT5nZXRfcHRwX3BoeXMoYXRjLT52bSwgaW5kZXgpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNvbnZlcnRfZm9ybWF0KHNuZF9wY21fZm9ybWF0X3Qgc25kX2Zvcm1hdCkKQEAgLTE2NjksNyArMTY1OCw3IEBACiAJfQogCiAJLyogU2V0IHVwIGRldmljZSB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IG9iamVjdCAqLwotCWVyciA9IGN0X3ZtX2NyZWF0ZSgmYXRjLT52bSk7CisJZXJyID0gY3Rfdm1fY3JlYXRlKCZhdGMtPnZtLCBwY2kpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yMTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0dm1lbS5jIGIvc291bmQvcGNpL2N0eGZpL2N0dm1lbS5jCmluZGV4IDZiNzg3NTIuLjY1ZGE2ZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3R2bWVtLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlwdHAgPSB2bS0+cHRwWzBdOworCXB0cCA9ICh1bnNpZ25lZCBsb25nICopdm0tPnB0cFswXS5hcmVhOwogCXB0ZV9zdGFydCA9IChibG9jay0+YWRkciA+PiBDVF9QQUdFX1NISUZUKTsKIAlwYWdlcyA9IGJsb2NrLT5zaXplID4+IENUX1BBR0VfU0hJRlQ7CiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKQEAgLTE1OCwyNSArMTU4LDI1IEBACiB9CiAKIC8qICoKLSAqIHJldHVybiB0aGUgaG9zdCAoa21hbGxvY2VkKSBhZGRyIG9mIHRoZSBAaW5kZXgtdGggZGV2aWNlCi0gKiBwYWdlIHRhbGJlIHBhZ2Ugb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgotICogVGhlIGZpcnN0IHJldHVybmVkIE5VTEwgaW5kaWNhdGVzIHRoZSB0ZXJtaW5hdGlvbi4KKyAqIHJldHVybiB0aGUgaG9zdCBwaHlzaWNhbCBhZGRyIG9mIHRoZSBAaW5kZXgtdGggZGV2aWNlCisgKiBwYWdlIHRhYmxlIHBhZ2Ugb24gc3VjY2Vzcywgb3IgfjBVTCBvbiBmYWlsdXJlLgorICogVGhlIGZpcnN0IHJldHVybmVkIH4wVUwgaW5kaWNhdGVzIHRoZSB0ZXJtaW5hdGlvbi4KICAqICovCi1zdGF0aWMgdm9pZCAqCi1jdF9nZXRfcHRwX3ZpcnQoc3RydWN0IGN0X3ZtICp2bSwgaW50IGluZGV4KQorc3RhdGljIGRtYV9hZGRyX3QKK2N0X2dldF9wdHBfcGh5cyhzdHJ1Y3QgY3Rfdm0gKnZtLCBpbnQgaW5kZXgpCiB7Ci0Jdm9pZCAqYWRkcjsKKwlkbWFfYWRkcl90IGFkZHI7CiAKLQlhZGRyID0gKGluZGV4ID49IENUX1BUUF9OVU0pID8gTlVMTCA6IHZtLT5wdHBbaW5kZXhdOworCWFkZHIgPSAoaW5kZXggPj0gQ1RfUFRQX05VTSkgPyB+MFVMIDogdm0tPnB0cFtpbmRleF0uYWRkcjsKIAogCXJldHVybiBhZGRyOwogfQogCi1pbnQgY3Rfdm1fY3JlYXRlKHN0cnVjdCBjdF92bSAqKnJ2bSkKK2ludCBjdF92bV9jcmVhdGUoc3RydWN0IGN0X3ZtICoqcnZtLCBzdHJ1Y3QgcGNpX2RldiAqcGNpKQogewogCXN0cnVjdCBjdF92bSAqdm07CiAJc3RydWN0IGN0X3ZtX2Jsb2NrICpibG9jazsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyID0gMDsKIAogCSpydm0gPSBOVUxMOwogCkBAIC0xODgsMjMgKzE4OCwyMSBAQAogCiAJLyogQWxsb2NhdGUgcGFnZSB0YWJsZSBwYWdlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBDVF9QVFBfTlVNOyBpKyspIHsKLQkJdm0tPnB0cFtpXSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF2bS0+cHRwW2ldKQorCQllcnIgPSBzbmRfZG1hX2FsbG9jX3BhZ2VzKFNORFJWX0RNQV9UWVBFX0RFViwKKwkJCQkJICBzbmRfZG1hX3BjaV9kYXRhKHBjaSksCisJCQkJCSAgUEFHRV9TSVpFLCAmdm0tPnB0cFtpXSk7CisJCWlmIChlcnIgPCAwKQogCQkJYnJlYWs7CiAJfQotCWlmICghaSkgeworCWlmIChlcnIgPCAwKSB7CiAJCS8qIG5vIHBhZ2UgdGFibGUgcGFnZXMgYXJlIGFsbG9jYXRlZCAqLwotCQlrZnJlZSh2bSk7CisJCWN0X3ZtX2Rlc3Ryb3kodm0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdm0tPnNpemUgPSBDVF9BRERSU19QRVJfUEFHRSAqIGk7Ci0JLyogSW5pdGlhbGlzZSByZW1haW5pbmcgcHRwcyAqLwotCWZvciAoOyBpIDwgQ1RfUFRQX05VTTsgaSsrKQotCQl2bS0+cHRwW2ldID0gTlVMTDsKLQogCXZtLT5tYXAgPSBjdF92bV9tYXA7CiAJdm0tPnVubWFwID0gY3Rfdm1fdW5tYXA7Ci0Jdm0tPmdldF9wdHBfdmlydCA9IGN0X2dldF9wdHBfdmlydDsKKwl2bS0+Z2V0X3B0cF9waHlzID0gY3RfZ2V0X3B0cF9waHlzOwogCUlOSVRfTElTVF9IRUFEKCZ2bS0+dW51c2VkKTsKIAlJTklUX0xJU1RfSEVBRCgmdm0tPnVzZWQpOwogCWJsb2NrID0ga3phbGxvYyhzaXplb2YoKmJsb2NrKSwgR0ZQX0tFUk5FTCk7CkBAIC0yNDIsNyArMjQwLDcgQEAKIAogCS8qIGZyZWUgYWxsb2NhdGVkIHBhZ2UgdGFibGUgcGFnZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ1RfUFRQX05VTTsgaSsrKQotCQlrZnJlZSh2bS0+cHRwW2ldKTsKKwkJc25kX2RtYV9mcmVlX3BhZ2VzKCZ2bS0+cHRwW2ldKTsKIAogCXZtLT5zaXplID0gMDsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0dm1lbS5oIGIvc291bmQvcGNpL2N0eGZpL2N0dm1lbS5oCmluZGV4IDAxZTRmZDAuLmIyM2FkZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uaAorKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3R2bWVtLmgKQEAgLTIyLDYgKzIyLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPHNvdW5kL21lbWFsbG9jLmg+CiAKIC8qIFRoZSBjaGlwIGNhbiBoYW5kbGUgdGhlIHBhZ2UgdGFibGUgb2YgNGsgcGFnZXMKICAqIChlbXUyMGsxIGNhbiBoYW5kbGUgZXZlbiA4ayBwYWdlcywgYnV0IHdlIGRvbid0IHVzZSBpdCByaWdodCBub3cpCkBAIC00MSw3ICs0Myw3IEBACiAKIC8qIFZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQgb2JqZWN0IGZvciBjYXJkIGRldmljZSAqLwogc3RydWN0IGN0X3ZtIHsKLQl2b2lkICpwdHBbQ1RfUFRQX05VTV07CQkvKiBEZXZpY2UgcGFnZSB0YWJsZSBwYWdlcyAqLworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciBwdHBbQ1RfUFRQX05VTV07CS8qIERldmljZSBwYWdlIHRhYmxlIHBhZ2VzICovCiAJdW5zaWduZWQgaW50IHNpemU7CQkvKiBBdmFpbGFibGUgYWRkciBzcGFjZSBpbiBieXRlcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdW51c2VkOwkvKiBMaXN0IG9mIHVudXNlZCBibG9ja3MgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWQ7CQkvKiBMaXN0IG9mIHVzZWQgYmxvY2tzICovCkBAIC01MiwxMCArNTQsMTAgQEAKIAkJCQkgICBpbnQgc2l6ZSk7CiAJLyogVW5tYXAgZGV2aWNlIGxvZ2ljYWwgYWRkciBhcmVhLiAqLwogCXZvaWQgKCp1bm1hcCkoc3RydWN0IGN0X3ZtICosIHN0cnVjdCBjdF92bV9ibG9jayAqYmxvY2spOwotCXZvaWQgKigqZ2V0X3B0cF92aXJ0KShzdHJ1Y3QgY3Rfdm0gKnZtLCBpbnQgaW5kZXgpOworCWRtYV9hZGRyX3QgKCpnZXRfcHRwX3BoeXMpKHN0cnVjdCBjdF92bSAqdm0sIGludCBpbmRleCk7CiB9OwogCi1pbnQgY3Rfdm1fY3JlYXRlKHN0cnVjdCBjdF92bSAqKnJ2bSk7CitpbnQgY3Rfdm1fY3JlYXRlKHN0cnVjdCBjdF92bSAqKnJ2bSwgc3RydWN0IHBjaV9kZXYgKnBjaSk7CiB2b2lkIGN0X3ZtX2Rlc3Ryb3koc3RydWN0IGN0X3ZtICp2bSk7CiAKICNlbmRpZiAvKiBDVFZNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggZWM5YzM0OC4uZmY2ZGE2ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC00MjYsNiArNDI2LDcgQEAKIAogCS8qIGZsYWdzICovCiAJaW50IHBvc2l0aW9uX2ZpeDsKKwlpbnQgcG9sbF9jb3VudDsKIAl1bnNpZ25lZCBpbnQgcnVubmluZyA6MTsKIAl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQgOjE7CiAJdW5zaWduZWQgaW50IHNpbmdsZV9jbWQgOjE7CkBAIC01MDYsNyArNTA3LDcgQEAKICNkZWZpbmUgZ2V0X2F6eF9kZXYoc3Vic3RyZWFtKSAoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEpCiAKIHN0YXRpYyBpbnQgYXp4X2FjcXVpcmVfaXJxKHN0cnVjdCBhenggKmNoaXAsIGludCBkb19kaXNjb25uZWN0KTsKLQorc3RhdGljIGludCBhenhfc2VuZF9jbWQoc3RydWN0IGhkYV9idXMgKmJ1cywgdW5zaWduZWQgaW50IHZhbCk7CiAvKgogICogSW50ZXJmYWNlIGZvciBIRCBjb2RlYwogICovCkBAIC02NjQsMTEgKzY2NSwxMiBAQAogewogCXN0cnVjdCBhenggKmNoaXAgPSBidXMtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IGRvX3BvbGwgPSAwOwogCiAgYWdhaW46CiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOwogCWZvciAoOzspIHsKLQkJaWYgKGNoaXAtPnBvbGxpbmdfbW9kZSkgeworCQlpZiAoY2hpcC0+cG9sbGluZ19tb2RlIHx8IGRvX3BvbGwpIHsKIAkJCXNwaW5fbG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKIAkJCWF6eF91cGRhdGVfcmlyYihjaGlwKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwpAQCAtNjc2LDYgKzY3OCw5IEBACiAJCWlmICghY2hpcC0+cmlyYi5jbWRzW2FkZHJdKSB7CiAJCQlzbXBfcm1iKCk7CiAJCQlidXMtPnJpcmJfZXJyb3IgPSAwOworCisJCQlpZiAoIWRvX3BvbGwpCisJCQkJY2hpcC0+cG9sbF9jb3VudCA9IDA7CiAJCQlyZXR1cm4gY2hpcC0+cmlyYi5yZXNbYWRkcl07IC8qIHRoZSBsYXN0IHZhbHVlICovCiAJCX0KIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCkBAIC02ODgsNiArNjkzLDE2IEBACiAJCX0KIAl9CiAKKwlpZiAoIWNoaXAtPnBvbGxpbmdfbW9kZSAmJiBjaGlwLT5wb2xsX2NvdW50IDwgMikgeworCQlzbmRfcHJpbnRkZChTRlggImF6eF9nZXRfcmVzcG9uc2UgdGltZW91dCwgIgorCQkJICAgInBvbGxpbmcgdGhlIGNvZGVjIG9uY2U6IGxhc3QgY21kPTB4JTA4eFxuIiwKKwkJCSAgIGNoaXAtPmxhc3RfY21kW2FkZHJdKTsKKwkJZG9fcG9sbCA9IDE7CisJCWNoaXAtPnBvbGxfY291bnQrKzsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwogCWlmICghY2hpcC0+cG9sbGluZ19tb2RlKSB7CiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HIFNGWCAiYXp4X2dldF9yZXNwb25zZSB0aW1lb3V0LCAiCiAJCQkgICAic3dpdGNoaW5nIHRvIHBvbGxpbmcgbW9kZTogbGFzdCBjbWQ9MHglMDh4XG4iLApAQCAtMTg3OCw2ICsxODkzLDkgQEAKIAogCWlmICghYmRsX3Bvc19hZGpbY2hpcC0+ZGV2X2luZGV4XSkKIAkJcmV0dXJuIDE7IC8qIG5vIGRlbGF5ZWQgYWNrICovCisJaWYgKFdBUk5fT05DRSghYXp4X2Rldi0+cGVyaW9kX2J5dGVzLAorCQkgICAgICAiaGRhLWludGVsOiB6ZXJvIGF6eF9kZXYtPnBlcmlvZF9ieXRlcyIpKQorCQlyZXR1cm4gMDsgLyogdGhpcyBzaG91bGRuJ3QgaGFwcGVuISAqLwogCWlmIChwb3MgJSBhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPiBhenhfZGV2LT5wZXJpb2RfYnl0ZXMgLyAyKQogCQlyZXR1cm4gMDsgLyogTkcgLSBpdCdzIGJlbG93IHRoZSBwZXJpb2QgYm91bmRhcnkgKi8KIAlyZXR1cm4gMTsgLyogT0ssIGl0J3MgZmluZSAqLwpAQCAtMjA0Myw3ICsyMDYxLDcgQEAKIHsKIAlpZiAocmVxdWVzdF9pcnEoY2hpcC0+cGNpLT5pcnEsIGF6eF9pbnRlcnJ1cHQsCiAJCQljaGlwLT5tc2kgPyAwIDogSVJRRl9TSEFSRUQsCi0JCQkiSERBIEludGVsIiwgY2hpcCkpIHsKKwkJCSJoZGFfaW50ZWwiLCBjaGlwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImhkYS1pbnRlbDogdW5hYmxlIHRvIGdyYWIgSVJRICVkLCAiCiAJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIiwgY2hpcC0+cGNpLT5pcnEpOwogCQlpZiAoZG9fZGlzY29ubmVjdCkKQEAgLTIzMzIsNiArMjM1MCw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBtc2lfYmxhY2tfbGlzdFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFmMiwgIkFTVVMiLCAwKSwgLyogQXRobG9uNjQgWDIgKyBudmlkaWEgKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWY2LCAiQVNVUyIsIDApLCAvKiBudmlkaWEgKi8KIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYwppbmRleCA3NjVkN2JkLi45ZTY2ZjZkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYwpAQCAtNzAzLDExICs3MDMsMTMgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIG52b2w7CiAKLQlpZiAoKG1hc3RlciAmIFdNX1ZPTF9NVVRFKSB8fCAodm9sICYgV01fVk9MX01VVEUpKQorCWlmICgobWFzdGVyICYgV01fVk9MX01VVEUpIHx8ICh2b2wgJiBXTV9WT0xfTVVURSkpIHsKIAkJbnZvbCA9IDA7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCW52b2wgPSAoKHZvbCAlIFdNX1ZPTF9DTlQpICogKG1hc3RlciAlIFdNX1ZPTF9DTlQpKSAvCiAJCQkJCQkJCVdNX1ZPTF9NQVg7CisJCW52b2wgKz0gMHgxYjsKKwl9CiAKIAl3bV9wdXQoaWNlLCBpbmRleCwgbnZvbCk7CiAJd21fcHV0X25vY2FjaGUoaWNlLCBpbmRleCwgMHgxODAgfCBudm9sKTsKQEAgLTc3OCw3ICs3ODAsNyBAQAogCWZvciAoY2ggPSAwOyBjaCA8IDI7IGNoKyspIHsKIAkJdW5zaWduZWQgaW50IHZvbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoXTsKIAkJaWYgKHZvbCA+IFdNX1ZPTF9NQVgpCi0JCQljb250aW51ZTsKKwkJCXZvbCA9IFdNX1ZPTF9NQVg7CiAJCXZvbCB8PSBzcGVjLT5tYXN0ZXJbY2hdICYgV01fVk9MX01VVEU7CiAJCWlmICh2b2wgIT0gc3BlYy0+bWFzdGVyW2NoXSkgewogCQkJaW50IGRhYzsKQEAgLTgzNCw4ICs4MzYsOCBAQAogCWZvciAoaSA9IDA7IGkgPCB2b2ljZXM7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdm9sID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV07CiAJCWlmICh2b2wgPiBXTV9WT0xfTUFYKQotCQkJY29udGludWU7Ci0JCXZvbCB8PSBzcGVjLT52b2xbb2ZzK2ldOworCQkJdm9sID0gV01fVk9MX01BWDsKKwkJdm9sIHw9IHNwZWMtPnZvbFtvZnMraV0gJiBXTV9WT0xfTVVURTsKIAkJaWYgKHZvbCAhPSBzcGVjLT52b2xbb2ZzK2ldKSB7CiAJCQlzcGVjLT52b2xbb2ZzK2ldID0gdm9sOwogCQkJaWR4ICA9IFdNX0RBQ19BVFRFTiArIG9mcyArIGk7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYXdhY3MuYyBiL3NvdW5kL3BwYy9hd2Fjcy5jCmluZGV4IDJlMTU2NDYuLmIzNjY3OTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9hd2Fjcy5jCisrKyBiL3NvdW5kL3BwYy9hd2Fjcy5jCkBAIC03NTEsOCArNzUxLDggQEAKIAogc3RhdGljIHZvaWQgc25kX3BtYWNfYXdhY3NfcmVzdW1lKHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKIHsKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKQotCSAgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSB7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikKKwkgICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgewogCQltc2xlZXAoMTAwKTsKIAkJc25kX3BtYWNfYXdhY3Nfd3JpdGVfcmVnKGNoaXAsIDEsCiAJCQljaGlwLT5hd2Fjc19yZWdbMV0gJiB+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+ZGV2OwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXUxeHBzY19zYW1wbGVfYWM5N19kZXYpOwotCi0JaWYgKHJldCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2KTsKLQkJYXUxeHBzY19zYW1wbGVfYWM5N19kZXYgPSBOVUxMOwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4cHNjX3NhbXBsZV9hYzk3X2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldik7Ci19Ci0KLW1vZHVsZV9pbml0KGF1MXhwc2Nfc2FtcGxlX2FjOTdfbG9hZCk7Ci1tb2R1bGVfZXhpdChhdTF4cHNjX3NhbXBsZV9hYzk3X2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF1MXh4eCBQU0Mgc2FtcGxlIEFDOTcgbWFjaGluZSIpOwotTU9EVUxFX0FVVEhPUigiTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCmluZGV4IGE5ZGM1ZmIuLmRhNTg5ZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKQEAgLTYyNyw3ICs2MjcsNyBAQAogCXUxNiByZWc7CiAKIAkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwotCWZvciAocmVnID0gMDsgcmVnIDwgVExWMzIwQUlDMjNfUkVTRVQ7IHJlZysrKSB7CisJZm9yIChyZWcgPSAwOyByZWcgPD0gVExWMzIwQUlDMjNfQUNUSVZFOyByZWcrKykgewogCQl1MTYgdmFsID0gdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZyk7CiAJCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCByZWcsIHZhbCk7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9lZmlrYS1hdWRpby1mYWJyaWMuYyBiL3NvdW5kL3NvYy9mc2wvZWZpa2EtYXVkaW8tZmFicmljLmMKaW5kZXggMzMyNmUyYS4uMWE1YjhlMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9lZmlrYS1hdWRpby1mYWJyaWMuYworKysgYi9zb3VuZC9zb2MvZnNsL2VmaWthLWF1ZGlvLWZhYnJpYy5jCkBAIC01NSw3ICs1NSw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgcmM7CiAKLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiYnBsYW4sZWZpa2EiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiYnBsYW4sZWZpa2EiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljYXJkLnBsYXRmb3JtID0gJm1wYzUyMDBfYXVkaW9fZG1hX3BsYXRmb3JtOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9wY20wMzAtYXVkaW8tZmFicmljLmMgYi9zb3VuZC9zb2MvZnNsL3BjbTAzMC1hdWRpby1mYWJyaWMuYwppbmRleCBiOTI4ZWY3Li42NjQ0Y2JhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL3BjbTAzMC1hdWRpby1mYWJyaWMuYworKysgYi9zb3VuZC9zb2MvZnNsL3BjbTAzMC1hdWRpby1mYWJyaWMuYwpAQCAtNTUsNyArNTUsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJjOwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoInBoeXRlYyxwY20wMzAiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgicGh5dGVjLHBjbTAzMCIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNhcmQucGxhdGZvcm0gPSAmbXBjNTIwMF9hdWRpb19kbWFfcGxhdGZvcm07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCmluZGV4IDNkYjhhNmMuLjE5MjgzZTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCkBAIC0yNSw3ICsyNSw3IEBACiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09WRVJPKSArPSBzbmQtc29jLW92ZXJvLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDJFVk0pICs9IHNuZC1zb2Mtb21hcDJldm0ubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM0VWTSkgKz0gc25kLXNvYy1vbWFwM2V2bS5vCi1vYmotJChDT05GSUdfU05EX09NQVBfU09DX09NQVAzNTE3RVZNKSArPSBzbmQtc29jLWFtMzUxN2V2bS5vCitvYmotJChDT05GSUdfU05EX09NQVBfU09DX0FNMzUxN0VWTSkgKz0gc25kLXNvYy1hbTM1MTdldm0ubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19TRFAzNDMwKSArPSBzbmQtc29jLXNkcDM0MzAubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19QQU5ET1JBKSArPSBzbmQtc29jLW9tYXAzcGFuZG9yYS5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09NQVAzX0JFQUdMRSkgKz0gc25kLXNvYy1vbWFwM2JlYWdsZS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCmluZGV4IDcxYjJjMTYuLjY4OTgwYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIG9tYXAzcGFuZG9yYV9vdXRfbWFwW10gPSB7CisJeyJQQ00gREFDIiwgTlVMTCwgIkFQTEwgRW5hYmxlIn0sCiAJeyJIZWFkcGhvbmUgQW1wbGlmaWVyIiwgTlVMTCwgIlBDTSBEQUMifSwKIAl7IkxpbmUgT3V0IiwgTlVMTCwgIlBDTSBEQUMifSwKIAl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhlYWRwaG9uZSBBbXBsaWZpZXIifSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZSBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQppbmRleCBmZTA4NjYwLi5lMWQ2MGQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmLy5naXRpZ25vcmUKKysrIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCkBAIC0xMyw2ICsxMyw4IEBACiBwZXJmKi5odG1sCiBjb21tb24tY21kcy5oCiBwZXJmLmRhdGEKK3BlcmYuZGF0YS5vbGQKK3BlcmYtYXJjaGl2ZQogdGFncwogVEFHUwogY3Njb3BlKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYXJjaGl2ZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hcmNoaXZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWUxNzRkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYXJjaGl2ZS50eHQKQEAgLTAsMCArMSwyMiBAQAorcGVyZi1hcmNoaXZlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1hcmNoaXZlIC0gQ3JlYXRlIGFyY2hpdmUgd2l0aCBvYmplY3QgZmlsZXMgd2l0aCBidWlsZC1pZHMgZm91bmQgaW4gcGVyZi5kYXRhIGZpbGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBhcmNoaXZlJyBbZmlsZV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgcnVucyBydW5zIHBlcmYtYnVpbGRpZC1saXN0IC0td2l0aC1oaXRzLCBhbmQgY29sbGVjdHMgdGhlIGZpbGVzCit3aXRoIHRoZSBidWlsZGlkcyBmb3VuZCBzbyB0aGF0IGFuYWxpc3lzIG9mIHBlcmYuZGF0YSBjb250ZW50cyBjYW4gYmUgcG9zc2libGUKK29uIGFub3RoZXIgbWFjaGluZS4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLWJ1aWxkaWQtbGlzdFsxXSwgbGlua3BlcmY6cGVyZi1yZXBvcnRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiYzNiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0CkBAIC0wLDAgKzEsMzMgQEAKK3BlcmYtYnVpbGRpZC1jYWNoZSgxKQorPT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtYnVpbGRpZC1jYWNoZSAtIE1hbmFnZSBidWlsZC1pZCBjYWNoZS4KKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBidWlsZGlkLWxpc3QgPG9wdGlvbnM+JworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCBtYW5hZ2VzIHRoZSBidWlsZC1pZCBjYWNoZS4gSXQgY2FuIGFkZCBhbmQgcmVtb3ZlIGZpbGVzIHRvIHRoZQorY2FjaGUuIEluIHRoZSBmdXR1cmUgaXQgc2hvdWxkIGFzIHdlbGwgcHVyZ2Ugb2xkZXIgZW50cmllcywgc2V0IHVwcGVyIGxpbWl0cworZm9yIHRoZSBzcGFjZSB1c2VkIGJ5IHRoZSBjYWNoZSwgZXRjLgorCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFkZD06OgorICAgICAgICBBZGQgc3BlY2lmaWVkIGZpbGUgdG8gdGhlIGNhY2hlLgorLXI6OgorLS1yZW1vdmU9OjoKKyAgICAgICAgUmVtb3ZlIHNwZWNpZmllZCBmaWxlIHRvIHRoZSBjYWNoZS4KKy12OjoKKy0tdmVyYm9zZTo6CisJQmUgbW9yZSB2ZXJib3NlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXJlcG9ydFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CmluZGV4IDI1MGUzOTEuLjJkZTM0MDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKQEAgLTE1LDYgKzE1LDggQEAKICdwZXJmIHByb2JlJyBbb3B0aW9uc10gLS1kZWw9J1tHUk9VUDpdRVZFTlQnIFsuLi5dCiBvcgogJ3BlcmYgcHJvYmUnIC0tbGlzdAorb3IKKydwZXJmIHByb2JlJyAtLWxpbmU9J0ZVTkNbOlJMTlsrTlVNfDpSTE4yXV18U1JDOkFMTlsrTlVNfDpBTE4yXScKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC00NSw2ICs0NywxMSBAQAogLS1saXN0OjoKIAlMaXN0IHVwIGN1cnJlbnQgcHJvYmUgZXZlbnRzLgogCistTDo6CistLWxpbmU9OjoKKwlTaG93IHNvdXJjZSBjb2RlIGxpbmVzIHdoaWNoIGNhbiBiZSBwcm9iZWQuIFRoaXMgbmVlZHMgYW4gYXJndW1lbnQKKwl3aGljaCBzcGVjaWZpZXMgYSByYW5nZSBvZiB0aGUgc291cmNlIGNvZGUuCisKIFBST0JFIFNZTlRBWAogLS0tLS0tLS0tLS0tCiBQcm9iZSBwb2ludHMgYXJlIGRlZmluZWQgYnkgZm9sbG93aW5nIHN5bnRheC4KQEAgLTU2LDYgKzYzLDE5IEBACiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBwcm9iZSBwb2ludCBieSB0aGUgc291cmNlIGxpbmUgbnVtYmVyIGJ5IHVzaW5nICdTUkM6QUxOJyBzeW50YXgsIHdoZXJlICdTUkMnIGlzIHRoZSBzb3VyY2UgZmlsZSBwYXRoIGFuZCAnQUxOJyBpcyB0aGUgbGluZSBudW1iZXIuCiAnQVJHJyBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50cyBvZiB0aGlzIHByb2JlIHBvaW50LiBZb3UgY2FuIHVzZSB0aGUgbmFtZSBvZiBsb2NhbCB2YXJpYWJsZSwgb3Iga3Byb2JlLXRyYWNlciBhcmd1bWVudCBmb3JtYXQgKGUuZy4gJHJldHZhbCwgJWF4LCBldGMpLgogCitMSU5FIFNZTlRBWAorLS0tLS0tLS0tLS0KK0xpbmUgcmFuZ2UgaXMgZGVzY3JpcHRlZCBieSBmb2xsb3dpbmcgc3ludGF4LgorCisgIkZVTkNbOlJMTlsrTlVNfDpSTE4yXV18U1JDOkFMTlsrTlVNfDpBTE4yXSIKKworRlVOQyBzcGVjaWZpZXMgdGhlIGZ1bmN0aW9uIG5hbWUgb2Ygc2hvd2luZyBsaW5lcy4gJ1JMTicgaXMgdGhlIHN0YXJ0IGxpbmUKK251bWJlciBmcm9tIGZ1bmN0aW9uIGVudHJ5IGxpbmUsIGFuZCAnUkxOMicgaXMgdGhlIGVuZCBsaW5lIG51bWJlci4gQXMgc2FtZSBhcworcHJvYmUgc3ludGF4LCAnU1JDJyBtZWFucyB0aGUgc291cmNlIGZpbGUgcGF0aCwgJ0FMTicgaXMgc3RhcnQgbGluZSBudW1iZXIsCithbmQgJ0FMTjInIGlzIGVuZCBsaW5lIG51bWJlciBpbiB0aGUgZmlsZS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGhvdworbWFueSBsaW5lcyB0byBzaG93IGJ5IHVzaW5nICdOVU0nLgorU28sICJzb3VyY2UuYzoxMDAtMTIwIiBzaG93cyBsaW5lcyBiZXR3ZWVuIDEwMHRoIHRvIGwyMHRoIGluIHNvdXJjZS5jIGZpbGUuIEFuZCAiZnVuYzoxMCsyMCIgc2hvd3MgMjAgbGluZXMgZnJvbSAxMHRoIGxpbmUgb2YgZnVuYyBmdW5jdGlvbi4KKwogU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rcGVyZjpwZXJmLXRyYWNlWzFdLCBsaW5rcGVyZjpwZXJmLXJlY29yZFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKaW5kZXggNGE3ZDU1OC4uNzg1YjlmYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CkBAIC03NCw3ICs3NCw3IEBACiAKIC1zIDxzeW1ib2w+OjoKIC0tc3ltLWFubm90YXRlPTxzeW1ib2w+OjoKLSAgICAgICAgQW5ub3RhdGUgdGhpcyBzeW1ib2wuICBSZXF1aXJlcyAtayBvcHRpb24uCisgICAgICAgIEFubm90YXRlIHRoaXMgc3ltYm9sLgogCiAtdjo6CiAtLXZlcmJvc2U6OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcGVybC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dAppbmRleCBjNWY1NWY0Li5kNzI5Y2VlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dApAQCAtOCw3ICs4LDcgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ3BlcmYgdHJhY2UnIFstcyBbbGFuZ106c2NyaXB0Wy5leHRdIF0KKydwZXJmIHRyYWNlJyBbLXMgW1BlcmxdOnNjcmlwdFsucGxdIF0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1weXRob24udHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcHl0aG9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQxYWNhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcHl0aG9uLnR4dApAQCAtMCwwICsxLDYyNSBAQAorcGVyZi10cmFjZS1weXRob24oMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLXRyYWNlLXB5dGhvbiAtIFByb2Nlc3MgdHJhY2UgZGF0YSB3aXRoIGEgUHl0aG9uIHNjcmlwdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIHRyYWNlJyBbLXMgW1B5dGhvbl06c2NyaXB0Wy5weV0gXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBwZXJmIHRyYWNlIG9wdGlvbiBpcyB1c2VkIHRvIHByb2Nlc3MgcGVyZiB0cmFjZSBkYXRhIHVzaW5nIHBlcmYncworYnVpbHQtaW4gUHl0aG9uIGludGVycHJldGVyLiAgSXQgcmVhZHMgYW5kIHByb2Nlc3NlcyB0aGUgaW5wdXQgZmlsZSBhbmQKK2Rpc3BsYXlzIHRoZSByZXN1bHRzIG9mIHRoZSB0cmFjZSBhbmFseXNpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZ2l2ZW4KK1B5dGhvbiBzY3JpcHQsIGlmIGFueS4KKworQSBRVUlDSyBFWEFNUExFCistLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIHNob3dzIHRoZSBwcm9jZXNzLCBzdGFydCB0byBmaW5pc2gsIG9mIGNyZWF0aW5nIGEgd29ya2luZworUHl0aG9uIHNjcmlwdCB0aGF0IGFnZ3JlZ2F0ZXMgYW5kIGV4dHJhY3RzIHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIGEKK3JhdyBwZXJmIHRyYWNlIHN0cmVhbS4gIFlvdSBjYW4gYXZvaWQgcmVhZGluZyB0aGUgcmVzdCBvZiB0aGlzCitkb2N1bWVudCBpZiBhbiBleGFtcGxlIGlzIGVub3VnaCBmb3IgeW91OyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnQKK3Byb3ZpZGVzIG1vcmUgZGV0YWlscyBvbiBlYWNoIHN0ZXAgYW5kIGxpc3RzIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucworYXZhaWxhYmxlIHRvIHNjcmlwdCB3cml0ZXJzLgorCitUaGlzIGV4YW1wbGUgYWN0dWFsbHkgZGV0YWlscyB0aGUgc3RlcHMgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZQorJ3N5c2NhbGwtY291bnRzJyBzY3JpcHQgeW91IHNlZSB3aGVuIHlvdSBsaXN0IHRoZSBhdmFpbGFibGUgcGVyZiB0cmFjZQorc2NyaXB0cyB2aWEgJ3BlcmYgdHJhY2UgLWwnLiAgQXMgc3VjaCwgdGhpcyBzY3JpcHQgYWxzbyBzaG93cyBob3cgdG8KK2ludGVncmF0ZSB5b3VyIHNjcmlwdCBpbnRvIHRoZSBsaXN0IG9mIGdlbmVyYWwtcHVycG9zZSAncGVyZiB0cmFjZScKK3NjcmlwdHMgbGlzdGVkIGJ5IHRoYXQgY29tbWFuZC4KKworVGhlIHN5c2NhbGwtY291bnRzIHNjcmlwdCBpcyBhIHNpbXBsZSBzY3JpcHQsIGJ1dCBkZW1vbnN0cmF0ZXMgYWxsIHRoZQorYmFzaWMgaWRlYXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIHVzZWZ1bCBzY3JpcHQuICBIZXJlJ3MgYW4gZXhhbXBsZQorb2YgaXRzIG91dHB1dCAoc3lzY2FsbCBuYW1lcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIHRoZXkgd2lsbCBhcHBlYXIKK2FzIG51bWJlcnMpOgorCistLS0tCitzeXNjYWxsIGV2ZW50czoKKworZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0KK3N5c193cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTUwNjcKK3N5c19nZXRkZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNzIKK3N5c19jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMzcKK3N5c19zd2Fwb2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NjkKK3N5c19yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MjMKK3N5c19zY2hlZF9zZXRwYXJhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MjYKK3N5c19vcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzEKK3N5c19uZXdmc3RhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjYKK3N5c19tbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTcKK3N5c19tdW5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTYKK3N5c19mdXRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDEKK3N5c19zZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKK3N5c19wb2xsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQKK3N5c19zZXRpdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKK3N5c193cml0ZXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKK3N5c19sc2VlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKK3N5c19ydF9zaWdwcm9jbWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKK3N5c193YWl0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKK3N5c19pb2N0bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKK3N5c19zZXRfcm9idXN0X2xpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK3N5c19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKzU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK3N5c19hY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKy0tLS0KKworQmFzaWNhbGx5IG91ciB0YXNrIGlzIHRvIGtlZXAgYSBwZXItc3lzY2FsbCB0YWxseSB0aGF0IGdldHMgdXBkYXRlZAorZXZlcnkgdGltZSBhIHN5c3RlbSBjYWxsIG9jY3VycyBpbiB0aGUgc3lzdGVtLiAgT3VyIHNjcmlwdCB3aWxsIGRvCit0aGF0LCBidXQgZmlyc3Qgd2UgbmVlZCB0byByZWNvcmQgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBieQordGhhdCBzY3JpcHQuICBUaGVvcmV0aWNhbGx5LCB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygd2F5cyB3ZSBjb3VsZCBkbwordGhhdDoKKworLSB3ZSBjb3VsZCBlbmFibGUgZXZlcnkgZXZlbnQgdW5kZXIgdGhlIHRyYWNpbmcvZXZlbnRzL3N5c2NhbGxzCisgIGRpcmVjdG9yeSwgYnV0IHRoaXMgaXMgb3ZlciA2MDAgc3lzY2FsbHMsIHdlbGwgYmV5b25kIHRoZSBudW1iZXIKKyAgYWxsb3dhYmxlIGJ5IHBlcmYuICBUaGVzZSBpbmRpdmlkdWFsIHN5c2NhbGwgZXZlbnRzIHdpbGwgaG93ZXZlciBiZQorICB1c2VmdWwgaWYgd2Ugd2FudCB0byBsYXRlciB1c2UgdGhlIGd1aWRhbmNlIHdlIGdldCBmcm9tIHRoZQorICBnZW5lcmFsLXB1cnBvc2Ugc2NyaXB0cyB0byBkcmlsbCBkb3duIGFuZCBnZXQgbW9yZSBkZXRhaWwgYWJvdXQKKyAgaW5kaXZpZHVhbCBzeXNjYWxscyBvZiBpbnRlcmVzdC4KKworLSB3ZSBjYW4gZW5hYmxlIHRoZSBzeXNfZW50ZXIgYW5kL29yIHN5c19leGl0IHN5c2NhbGxzIGZvdW5kIHVuZGVyCisgIHRyYWNpbmcvZXZlbnRzL3Jhd19zeXNjYWxscy4gIFRoZXNlIGFyZSBjYWxsZWQgZm9yIGFsbCBzeXNjYWxsczsgdGhlCisgICdpZCcgZmllbGQgY2FuIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBpbmRpdmlkdWFsIHN5c2NhbGwKKyAgbnVtYmVycy4KKworRm9yIHRoaXMgc2NyaXB0LCB3ZSBvbmx5IG5lZWQgdG8ga25vdyB0aGF0IGEgc3lzY2FsbCB3YXMgZW50ZXJlZDsgd2UKK2Rvbid0IGNhcmUgaG93IGl0IGV4aXRlZCwgc28gd2UnbGwgdXNlICdwZXJmIHJlY29yZCcgdG8gcmVjb3JkIG9ubHkKK3RoZSBzeXNfZW50ZXIgZXZlbnRzOgorCistLS0tCisjIHBlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgcmF3X3N5c2NhbGxzOnN5c19lbnRlcgorCiteQ1sgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDEgdGltZXMgdG8gd3JpdGUgZGF0YSBdCitbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgNTYuNTQ1IE1CIHBlcmYuZGF0YSAofjI0NzA1MDMgc2FtcGxlcykgXQorLS0tLQorCitUaGUgb3B0aW9ucyBiYXNpY2FsbHkgc2F5IHRvIGNvbGxlY3QgZGF0YSBmb3IgZXZlcnkgc3lzY2FsbCBldmVudAorc3lzdGVtLXdpZGUgYW5kIG11bHRpcGxleCB0aGUgcGVyLWNwdSBvdXRwdXQgaW50byBhIHNpbmdsZSBzdHJlYW0uCitUaGF0IHNpbmdsZSBzdHJlYW0gd2lsbCBiZSByZWNvcmRlZCBpbiBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitjYWxsZWQgcGVyZi5kYXRhLgorCitPbmNlIHdlIGhhdmUgYSBwZXJmLmRhdGEgZmlsZSBjb250YWluaW5nIG91ciBkYXRhLCB3ZSBjYW4gdXNlIHRoZSAtZworJ3BlcmYgdHJhY2UnIG9wdGlvbiB0byBnZW5lcmF0ZSBhIFB5dGhvbiBzY3JpcHQgdGhhdCB3aWxsIGNvbnRhaW4gYQorY2FsbGJhY2sgaGFuZGxlciBmb3IgZWFjaCBldmVudCB0eXBlIGZvdW5kIGluIHRoZSBwZXJmLmRhdGEgdHJhY2UKK3N0cmVhbSAoZm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBTVEFSVEVSIFNDUklQVFMgc2VjdGlvbikuCisKKy0tLS0KKyMgcGVyZiB0cmFjZSAtZyBweXRob24KK2dlbmVyYXRlZCBQeXRob24gc2NyaXB0OiBwZXJmLXRyYWNlLnB5CisKK1RoZSBvdXRwdXQgZmlsZSBjcmVhdGVkIGFsc28gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIG5hbWVkCitwZXJmLXRyYWNlLnB5LiAgSGVyZSdzIHRoZSBmaWxlIGluIGl0cyBlbnRpcmV0eToKKworIyBwZXJmIHRyYWNlIGV2ZW50IGhhbmRsZXJzLCBnZW5lcmF0ZWQgYnkgcGVyZiB0cmFjZSAtZyBweXRob24KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisKKyMgVGhlIGNvbW1vbl8qIGV2ZW50IGhhbmRsZXIgZmllbGRzIGFyZSB0aGUgbW9zdCB1c2VmdWwgZmllbGRzIGNvbW1vbiB0bworIyBhbGwgZXZlbnRzLiAgVGhleSBkb24ndCBuZWNlc3NhcmlseSBjb3JyZXNwb25kIHRvIHRoZSAnY29tbW9uXyonIGZpZWxkcworIyBpbiB0aGUgZm9ybWF0IGZpbGVzLiAgVGhvc2UgZmllbGRzIG5vdCBhdmFpbGFibGUgYXMgaGFuZGxlciBwYXJhbXMgY2FuCisjIGJlIHJldHJpZXZlZCB1c2luZyBQeXRob24gZnVuY3Rpb25zIG9mIHRoZSBmb3JtIGNvbW1vbl8qKGNvbnRleHQpLgorIyBTZWUgdGhlIHBlcmYtdHJhY2UtcHl0aG9uIERvY3VtZW50YXRpb24gZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcHJpbnQgImluIHRyYWNlX2JlZ2luIgorCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnQgImluIHRyYWNlX2VuZCIKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIGFyZ3MpOgorCQlwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCisJCXByaW50ICJpZD0lZCwgYXJncz0lc1xuIiAlIFwKKwkJKGlkLCBhcmdzKSwKKworZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSkKKworZGVmIHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pOgorCXByaW50ICIlLTIwcyAlNXUgJTA1dS4lMDl1ICU4dSAlLTIwcyAiICUgXAorCShldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pLAorLS0tLQorCitBdCB0aGUgdG9wIGlzIGEgY29tbWVudCBibG9jayBmb2xsb3dlZCBieSBzb21lIGltcG9ydCBzdGF0ZW1lbnRzIGFuZCBhCitwYXRoIGFwcGVuZCB3aGljaCBldmVyeSBwZXJmIHRyYWNlIHNjcmlwdCBzaG91bGQgaW5jbHVkZS4KKworRm9sbG93aW5nIHRoYXQgYXJlIGEgY291cGxlIGdlbmVyYXRlZCBmdW5jdGlvbnMsIHRyYWNlX2JlZ2luKCkgYW5kCit0cmFjZV9lbmQoKSwgd2hpY2ggYXJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZQorc2NyaXB0IHJlc3BlY3RpdmVseSAoZm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBTQ1JJUFRfTEFZT1VUIHNlY3Rpb24KK2JlbG93KS4KKworRm9sbG93aW5nIHRob3NlIGFyZSB0aGUgJ2V2ZW50IGhhbmRsZXInIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgb25lIGZvcgorZXZlcnkgZXZlbnQgaW4gdGhlICdwZXJmIHJlY29yZCcgb3V0cHV0LiAgVGhlIGhhbmRsZXIgZnVuY3Rpb25zIHRha2UKK3RoZSBmb3JtIHN1YnN5c3RlbV9fZXZlbnRfbmFtZSwgYW5kIGNvbnRhaW4gbmFtZWQgcGFyYW1ldGVycywgb25lIGZvcgorZWFjaCBmaWVsZCBpbiB0aGUgZXZlbnQ7IGluIHRoaXMgY2FzZSwgdGhlcmUncyBvbmx5IG9uZSBldmVudCwKK3Jhd19zeXNjYWxsc19fc3lzX2VudGVyKCkuICAoc2VlIHRoZSBFVkVOVCBIQU5ETEVSUyBzZWN0aW9uIGJlbG93IGZvcgorbW9yZSBpbmZvIG9uIGV2ZW50IGhhbmRsZXJzKS4KKworVGhlIGZpbmFsIGNvdXBsZSBvZiBmdW5jdGlvbnMgYXJlLCBsaWtlIHRoZSBiZWdpbiBhbmQgZW5kIGZ1bmN0aW9ucywKK2dlbmVyYXRlZCBmb3IgZXZlcnkgc2NyaXB0LiAgVGhlIGZpcnN0LCB0cmFjZV91bmhhbmRsZWQoKSwgaXMgY2FsbGVkCitldmVyeSB0aW1lIHRoZSBzY3JpcHQgZmluZHMgYW4gZXZlbnQgaW4gdGhlIHBlcmYuZGF0YSBmaWxlIHRoYXQKK2RvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgZXZlbnQgaGFuZGxlciBpbiB0aGUgc2NyaXB0LiAgVGhpcyBjb3VsZAorbWVhbiBlaXRoZXIgdGhhdCB0aGUgcmVjb3JkIHN0ZXAgcmVjb3JkZWQgZXZlbnQgdHlwZXMgdGhhdCBpdCB3YXNuJ3QKK3JlYWxseSBpbnRlcmVzdGVkIGluLCBvciB0aGUgc2NyaXB0IHdhcyBydW4gYWdhaW5zdCBhIHRyYWNlIGZpbGUgdGhhdAorZG9lc24ndCBjb3JyZXNwb25kIHRvIHRoZSBzY3JpcHQuCisKK1RoZSBzY3JpcHQgZ2VuZXJhdGVkIGJ5IC1nIG9wdGlvbiBvcHRpb24gc2ltcGx5IHByaW50cyBhIGxpbmUgZm9yIGVhY2gKK2V2ZW50IGZvdW5kIGluIHRoZSB0cmFjZSBzdHJlYW0gaS5lLiBpdCBiYXNpY2FsbHkganVzdCBkdW1wcyB0aGUgZXZlbnQKK2FuZCBpdHMgcGFyYW1ldGVyIHZhbHVlcyB0byBzdGRvdXQuICBUaGUgcHJpbnRfaGVhZGVyKCkgZnVuY3Rpb24gaXMKK3NpbXBseSBhIHV0aWxpdHkgZnVuY3Rpb24gdXNlZCBmb3IgdGhhdCBwdXJwb3NlLiAgTGV0J3MgcmVuYW1lIHRoZQorc2NyaXB0IGFuZCBydW4gaXQgdG8gc2VlIHRoZSBkZWZhdWx0IG91dHB1dDoKKworLS0tLQorIyBtdiBwZXJmLXRyYWNlLnB5IHN5c2NhbGwtY291bnRzLnB5CisjIHBlcmYgdHJhY2UgLXMgc3lzY2FsbC1jb3VudHMucHkKKworcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NTgyMDgzICAgICA3NTA2IHBlcmYgICAgICAgICAgICAgICAgICBpZD0xLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NTk1NzY0ICAgICA3NTA2IHBlcmYgICAgICAgICAgICAgICAgICBpZD0xLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NjIwODYwICAgICA3NTA2IHBlcmYgICAgICAgICAgICAgICAgICBpZD0xLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzEwNDc4ICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD03OCwgYXJncz0KK3Jhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0NzcxOTIwNCAgICAgNjUzMyBucHZpZXdlci5iaW4gICAgICAgICAgaWQ9MTQyLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzU1NDQ1ICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0zLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3Nzc1NjAxICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0zLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzgxODIwICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0zLCBhcmdzPQorLgorLgorLgorLS0tLQorCitPZiBjb3Vyc2UsIGZvciB0aGlzIHNjcmlwdCwgd2UncmUgbm90IGludGVyZXN0ZWQgaW4gcHJpbnRpbmcgZXZlcnkKK3RyYWNlIGV2ZW50LCBidXQgcmF0aGVyIGFnZ3JlZ2F0aW5nIGl0IGluIGEgdXNlZnVsIHdheS4gIFNvIHdlJ2xsIGdldAorcmlkIG9mIGV2ZXJ5dGhpbmcgdG8gZG8gd2l0aCBwcmludGluZyBhcyB3ZWxsIGFzIHRoZSB0cmFjZV9iZWdpbigpIGFuZAordHJhY2VfdW5oYW5kbGVkKCkgZnVuY3Rpb25zLCB3aGljaCB3ZSB3b24ndCBiZSB1c2luZy4gIFRoYXQgbGVhdmVzIHVzCit3aXRoIHRoaXMgbWluaW1hbGlzdGljIHNrZWxldG9uOgorCistLS0tCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludCAiaW4gdHJhY2VfZW5kIgorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CistLS0tCisKK0luIHRyYWNlX2VuZCgpLCB3ZSdsbCBzaW1wbHkgcHJpbnQgdGhlIHJlc3VsdHMsIGJ1dCBmaXJzdCB3ZSBuZWVkIHRvCitnZW5lcmF0ZSBzb21lIHJlc3VsdHMgdG8gcHJpbnQuICBUbyBkbyB0aGF0IHdlIG5lZWQgdG8gaGF2ZSBvdXIKK3N5c19lbnRlcigpIGhhbmRsZXIgZG8gdGhlIG5lY2Vzc2FyeSB0YWxseWluZyB1bnRpbCBhbGwgZXZlbnRzIGhhdmUKK2JlZW4gY291bnRlZC4gIEEgaGFzaCB0YWJsZSBpbmRleGVkIGJ5IHN5c2NhbGwgaWQgaXMgYSBnb29kIHdheSB0bworc3RvcmUgdGhhdCBpbmZvcm1hdGlvbjsgZXZlcnkgdGltZSB0aGUgc3lzX2VudGVyKCkgaGFuZGxlciBpcyBjYWxsZWQsCit3ZSBzaW1wbHkgaW5jcmVtZW50IGEgY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaGFzaCBlbnRyeSBpbmRleGVkIGJ5Cit0aGF0IHN5c2NhbGwgaWQ6CisKKy0tLS0KKyAgc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKKyAgdHJ5OgorICAgIHN5c2NhbGxzW2lkXSArPSAxCisgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgc3lzY2FsbHNbaWRdID0gMQorLS0tLQorCitUaGUgc3lzY2FsbHMgJ2F1dG9kaWN0JyBvYmplY3QgaXMgYSBzcGVjaWFsIGtpbmQgb2YgUHl0aG9uIGRpY3Rpb25hcnkKKyhpbXBsZW1lbnRlZCBpbiBDb3JlLnB5KSB0aGF0IGltcGxlbWVudHMgUGVybCdzICdhdXRvdml2aWZ5aW5nJyBoYXNoZXMKK2luIFB5dGhvbiBpLmUuIHdpdGggYXV0b3ZpdmlmeWluZyBoYXNoZXMsIHlvdSBjYW4gYXNzaWduIG5lc3RlZCBoYXNoCit2YWx1ZXMgd2l0aG91dCBoYXZpbmcgdG8gZ28gdG8gdGhlIHRyb3VibGUgb2YgY3JlYXRpbmcgaW50ZXJtZWRpYXRlCitsZXZlbHMgaWYgdGhleSBkb24ndCBleGlzdCBlLmcgc3lzY2FsbHNbY29tbV1bcGlkXVtpZF0gPSAxIHdpbGwgY3JlYXRlCit0aGUgaW50ZXJtZWRpYXRlIGhhc2ggbGV2ZWxzIGFuZCBmaW5hbGx5IGFzc2lnbiB0aGUgdmFsdWUgMSB0byB0aGUKK2hhc2ggZW50cnkgZm9yICdpZCcgKGJlY2F1c2UgdGhlIHZhbHVlIGJlaW5nIGFzc2lnbmVkIGlzbid0IGEgaGFzaAorb2JqZWN0IGl0c2VsZiwgdGhlIGluaXRpYWwgdmFsdWUgaXMgYXNzaWduZWQgaW4gdGhlIFR5cGVFcnJvcgorZXhjZXB0aW9uLiAgV2VsbCwgdGhlcmUgbWF5IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGluIFB5dGhvbiBidXQKK3RoYXQncyB3aGF0IHdvcmtzIGZvciBub3cpLgorCitQdXR0aW5nIHRoYXQgY29kZSBpbnRvIHRoZSByYXdfc3lzY2FsbHNfX3N5c19lbnRlcigpIGhhbmRsZXIsIHdlCitlZmZlY3RpdmVseSBlbmQgdXAgd2l0aCBhIHNpbmdsZS1sZXZlbCBkaWN0aW9uYXJ5IGtleWVkIG9uIHN5c2NhbGwgaWQKK2FuZCBoYXZpbmcgdGhlIGNvdW50cyB3ZSd2ZSB0YWxsaWVkIGFzIHZhbHVlcy4KKworVGhlIHByaW50X3N5c2NhbGxfdG90YWxzKCkgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciB0aGUgZW50cmllcyBpbiB0aGUKK2RpY3Rpb25hcnkgYW5kIGRpc3BsYXlzIGEgbGluZSBmb3IgZWFjaCBlbnRyeSBjb250YWluaW5nIHRoZSBzeXNjYWxsCituYW1lICh0aGUgZGljdG9uYXJ5IGtleXMgY29udGFpbiB0aGUgc3lzY2FsbCBpZHMsIHdoaWNoIGFyZSBwYXNzZWQgdG8KK3RoZSBVdGlsIGZ1bmN0aW9uIHN5c2NhbGxfbmFtZSgpLCB3aGljaCB0cmFuc2xhdGVzIHRoZSByYXcgc3lzY2FsbAorbnVtYmVycyB0byB0aGUgY29ycmVzcG9uZGluZyBzeXNjYWxsIG5hbWUgc3RyaW5ncykuICBUaGUgb3V0cHV0IGlzCitkaXNwbGF5ZWQgYWZ0ZXIgYWxsIHRoZSBldmVudHMgaW4gdGhlIHRyYWNlIGhhdmUgYmVlbiBwcm9jZXNzZWQsIGJ5CitjYWxsaW5nIHRoZSBwcmludF9zeXNjYWxsX3RvdGFscygpIGZ1bmN0aW9uIGZyb20gdGhlIHRyYWNlX2VuZCgpCitoYW5kbGVyIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHNjcmlwdCBwcm9jZXNzaW5nLgorCitUaGUgZmluYWwgc2NyaXB0IHByb2R1Y2luZyB0aGUgb3V0cHV0IHNob3duIGFib3ZlIGlzIHNob3duIGluIGl0cworZW50aXJldHkgYmVsb3cgKHN5c2NhbGxfbmFtZSgpIGhlbHBlciBpcyBub3QgeWV0IGF2YWlsYWJsZSwgeW91IGNhbgorb25seSBkZWFsIHdpdGggaWQncyBmb3Igbm93KToKKworLS0tLQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorZnJvbSBVdGlsIGltcG9ydCAqCisKK3N5c2NhbGxzID0gYXV0b2RpY3QoKQorCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnRfc3lzY2FsbF90b3RhbHMoKQorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CisJdHJ5OgorCQlzeXNjYWxsc1tpZF0gKz0gMQorCWV4Y2VwdCBUeXBlRXJyb3I6CisJCXN5c2NhbGxzW2lkXSA9IDEKKworZGVmIHByaW50X3N5c2NhbGxfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHM6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImV2ZW50IiwgImNvdW50IiksCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tIiksCisKKyAgICBmb3IgaWQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHMuaXRlcml0ZW1zKCksIGtleSA9IGxhbWJkYShrLCB2KTogKHYsIGspLCBcCisJCQkJICByZXZlcnNlID0gVHJ1ZSk6CisJICAgIHByaW50ICIlLTQwcyAgJTEwZFxuIiAlIChzeXNjYWxsX25hbWUoaWQpLCB2YWwpLAorLS0tLQorCitUaGUgc2NyaXB0IGNhbiBiZSBydW4ganVzdCBhcyBiZWZvcmU6CisKKyAgIyBwZXJmIHRyYWNlIC1zIHN5c2NhbGwtY291bnRzLnB5CisKK1NvIHRob3NlIGFyZSB0aGUgZXNzZW50aWFsIHN0ZXBzIGluIHdyaXRpbmcgYW5kIHJ1bm5pbmcgYSBzY3JpcHQuICBUaGUKK3Byb2Nlc3MgY2FuIGJlIGdlbmVyYWxpemVkIHRvIGFueSB0cmFjZXBvaW50IG9yIHNldCBvZiB0cmFjZXBvaW50cworeW91J3JlIGludGVyZXN0ZWQgaW4gLSBiYXNpY2FsbHkgZmluZCB0aGUgdHJhY2Vwb2ludChzKSB5b3UncmUKK2ludGVyZXN0ZWQgaW4gYnkgbG9va2luZyBhdCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgZXZlbnRzIHNob3duIGJ5CisncGVyZiBsaXN0JyBhbmQvb3IgbG9vayBpbiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIGV2ZW50cyBmb3IKK2RldGFpbGVkIGV2ZW50IGFuZCBmaWVsZCBpbmZvLCByZWNvcmQgdGhlIGNvcnJlc3BvbmRpbmcgdHJhY2UgZGF0YQordXNpbmcgJ3BlcmYgcmVjb3JkJywgcGFzc2luZyBpdCB0aGUgbGlzdCBvZiBpbnRlcmVzdGluZyBldmVudHMsCitnZW5lcmF0ZSBhIHNrZWxldG9uIHNjcmlwdCB1c2luZyAncGVyZiB0cmFjZSAtZyBweXRob24nIGFuZCBtb2RpZnkgdGhlCitjb2RlIHRvIGFnZ3JlZ2F0ZSBhbmQgZGlzcGxheSBpdCBmb3IgeW91ciBwYXJ0aWN1bGFyIG5lZWRzLgorCitBZnRlciB5b3UndmUgZG9uZSB0aGF0IHlvdSBtYXkgZW5kIHVwIHdpdGggYSBnZW5lcmFsLXB1cnBvc2Ugc2NyaXB0Cit0aGF0IHlvdSB3YW50IHRvIGtlZXAgYXJvdW5kIGFuZCBoYXZlIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZS4gIEJ5Cit3cml0aW5nIGEgY291cGxlIG9mIHZlcnkgc2ltcGxlIHNoZWxsIHNjcmlwdHMgYW5kIHB1dHRpbmcgdGhlbSBpbiB0aGUKK3JpZ2h0IHBsYWNlLCB5b3UgY2FuIGhhdmUgeW91ciBzY3JpcHQgbGlzdGVkIGFsb25nc2lkZSB0aGUgb3RoZXIKK3NjcmlwdHMgbGlzdGVkIGJ5IHRoZSAncGVyZiB0cmFjZSAtbCcgY29tbWFuZCBlLmcuOgorCistLS0tCityb290QHRyb3BpY2FuYTp+IyBwZXJmIHRyYWNlIC1sCitMaXN0IG9mIGF2YWlsYWJsZSB0cmFjZSBzY3JpcHRzOgorICB3b3JrcXVldWUtc3RhdHMgICAgICAgICAgICAgICAgICAgICAgd29ya3F1ZXVlIHN0YXRzIChpbnMvZXhlL2NyZWF0ZS9kZXN0cm95KQorICB3YWtldXAtbGF0ZW5jeSAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgbWluL21heC9hdmcgd2FrZXVwIGxhdGVuY3kKKyAgcnctYnktZmlsZSA8Y29tbT4gICAgICAgICAgICAgICAgICAgIHIvdyBhY3Rpdml0eSBmb3IgYSBwcm9ncmFtLCBieSBmaWxlCisgIHJ3LWJ5LXBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSByL3cgYWN0aXZpdHkKKy0tLS0KKworQSBuaWNlIHNpZGUgZWZmZWN0IG9mIGRvaW5nIHRoaXMgaXMgdGhhdCB5b3UgYWxzbyB0aGVuIGNhcHR1cmUgdGhlCitwcm9iYWJseSBsZW5ndGh5ICdwZXJmIHJlY29yZCcgY29tbWFuZCBuZWVkZWQgdG8gcmVjb3JkIHRoZSBldmVudHMgZm9yCit0aGUgc2NyaXB0LgorCitUbyBoYXZlIHRoZSBzY3JpcHQgYXBwZWFyIGFzIGEgJ2J1aWx0LWluJyBzY3JpcHQsIHlvdSB3cml0ZSB0d28gc2ltcGxlCitzY3JpcHRzLCBvbmUgZm9yIHJlY29yZGluZyBhbmQgb25lIGZvciAncmVwb3J0aW5nJy4KKworVGhlICdyZWNvcmQnIHNjcmlwdCBpcyBhIHNoZWxsIHNjcmlwdCB3aXRoIHRoZSBzYW1lIGJhc2UgbmFtZSBhcyB5b3VyCitzY3JpcHQsIGJ1dCB3aXRoIC1yZWNvcmQgYXBwZW5kZWQuICBUaGUgc2hlbGwgc2NyaXB0IHNob3VsZCBiZSBwdXQKK2ludG8gdGhlIHBlcmYvc2NyaXB0cy9weXRob24vYmluIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLgorSW4gdGhhdCBzY3JpcHQsIHlvdSB3cml0ZSB0aGUgJ3BlcmYgcmVjb3JkJyBjb21tYW5kLWxpbmUgbmVlZGVkIGZvcgoreW91ciBzY3JpcHQ6CisKKy0tLS0KKyMgY2F0IGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkCisKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZW50ZXIKKy0tLS0KKworVGhlICdyZXBvcnQnIHNjcmlwdCBpcyBhbHNvIGEgc2hlbGwgc2NyaXB0IHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lIGFzCit5b3VyIHNjcmlwdCwgYnV0IHdpdGggLXJlcG9ydCBhcHBlbmRlZC4gIEl0IHNob3VsZCBhbHNvIGJlIGxvY2F0ZWQgaW4KK3RoZSBwZXJmL3NjcmlwdHMvcHl0aG9uL2JpbiBkaXJlY3RvcnkuICBJbiB0aGF0IHNjcmlwdCwgeW91IHdyaXRlIHRoZQorJ3BlcmYgdHJhY2UgLXMnIGNvbW1hbmQtbGluZSBuZWVkZWQgZm9yIHJ1bm5pbmcgeW91ciBzY3JpcHQ6CisKKy0tLS0KKyMgY2F0IGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVwb3J0CisKKyMhL2Jpbi9iYXNoCisjIGRlc2NyaXB0aW9uOiBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cworcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLnB5CistLS0tCisKK05vdGUgdGhhdCB0aGUgbG9jYXRpb24gb2YgdGhlIFB5dGhvbiBzY3JpcHQgZ2l2ZW4gaW4gdGhlIHNoZWxsIHNjcmlwdAoraXMgaW4gdGhlIGxpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uIGRpcmVjdG9yeSAtIHRoaXMgaXMgd2hlcmUKK3RoZSBzY3JpcHQgd2lsbCBiZSBjb3BpZWQgYnkgJ21ha2UgaW5zdGFsbCcgd2hlbiB5b3UgaW5zdGFsbCBwZXJmLgorRm9yIHRoZSBpbnN0YWxsYXRpb24gdG8gaW5zdGFsbCB5b3VyIHNjcmlwdCB0aGVyZSwgeW91ciBzY3JpcHQgbmVlZHMKK3RvIGJlIGxvY2F0ZWQgaW4gdGhlIHBlcmYvc2NyaXB0cy9weXRob24gZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwKK3NvdXJjZSB0cmVlOgorCistLS0tCisjIGxzIC1hbCBrZXJuZWwtc291cmNlL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24KKworcm9vdEB0cm9waWNhbmE6L2hvbWUvdHJ6L3NyYy90aXAjIGxzIC1hbCB0b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uCit0b3RhbCAzMgorZHJ3eHIteHIteCA0IHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjMwIC4KK2Ryd3hyLXhyLXggNCB0cnogdHJ6IDQwOTYgMjAxMC0wMS0yNiAyMjoyOSAuLgorZHJ3eHIteHIteCAyIHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjI5IGJpbgorLXJ3LXItLXItLSAxIHRyeiB0cnogMjU0OCAyMDEwLTAxLTI2IDIyOjI5IGNoZWNrLXBlcmYtdHJhY2UucHkKK2Ryd3hyLXhyLXggMyB0cnogdHJ6IDQwOTYgMjAxMC0wMS0yNiAyMjo0OSBQZXJmLVRyYWNlLVV0aWwKKy1ydy1yLS1yLS0gMSB0cnogdHJ6IDE0NjIgMjAxMC0wMS0yNiAyMjozMCBzeXNjYWxsLWNvdW50cy5weQorLS0tLQorCitPbmNlIHlvdSd2ZSBkb25lIHRoYXQgKGRvbid0IGZvcmdldCB0byBkbyBhIG5ldyAnbWFrZSBpbnN0YWxsJywKK290aGVyd2lzZSB5b3VyIHNjcmlwdCB3b24ndCBzaG93IHVwIGF0IHJ1bi10aW1lKSwgJ3BlcmYgdHJhY2UgLWwnCitzaG91bGQgc2hvdyBhIG5ldyBlbnRyeSBmb3IgeW91ciBzY3JpcHQ6CisKKy0tLS0KK3Jvb3RAdHJvcGljYW5hOn4jIHBlcmYgdHJhY2UgLWwKK0xpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHM6CisgIHdvcmtxdWV1ZS1zdGF0cyAgICAgICAgICAgICAgICAgICAgICB3b3JrcXVldWUgc3RhdHMgKGlucy9leGUvY3JlYXRlL2Rlc3Ryb3kpCisgIHdha2V1cC1sYXRlbmN5ICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBtaW4vbWF4L2F2ZyB3YWtldXAgbGF0ZW5jeQorICBydy1ieS1maWxlIDxjb21tPiAgICAgICAgICAgICAgICAgICAgci93IGFjdGl2aXR5IGZvciBhIHByb2dyYW0sIGJ5IGZpbGUKKyAgcnctYnktcGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHIvdyBhY3Rpdml0eQorICBzeXNjYWxsLWNvdW50cyAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgc3lzY2FsbCBjb3VudHMKKy0tLS0KKworWW91IGNhbiBub3cgcGVyZm9ybSB0aGUgcmVjb3JkIHN0ZXAgdmlhICdwZXJmIHRyYWNlIHJlY29yZCc6CisKKyAgIyBwZXJmIHRyYWNlIHJlY29yZCBzeXNjYWxsLWNvdW50cworCithbmQgZGlzcGxheSB0aGUgb3V0cHV0IHVzaW5nICdwZXJmIHRyYWNlIHJlcG9ydCc6CisKKyAgIyBwZXJmIHRyYWNlIHJlcG9ydCBzeXNjYWxsLWNvdW50cworCitTVEFSVEVSIFNDUklQVFMKKy0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHF1aWNrbHkgZ2V0IHN0YXJ0ZWQgd3JpdGluZyBhIHNjcmlwdCBmb3IgYSBwYXJ0aWN1bGFyIHNldCBvZgordHJhY2UgZGF0YSBieSBnZW5lcmF0aW5nIGEgc2tlbGV0b24gc2NyaXB0IHVzaW5nICdwZXJmIHRyYWNlIC1nCitweXRob24nIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBhbiBleGlzdGluZyBwZXJmLmRhdGEgdHJhY2UgZmlsZS4KK1RoYXQgd2lsbCBnZW5lcmF0ZSBhIHN0YXJ0ZXIgc2NyaXB0IGNvbnRhaW5pbmcgYSBoYW5kbGVyIGZvciBlYWNoIG9mCit0aGUgZXZlbnQgdHlwZXMgaW4gdGhlIHRyYWNlIGZpbGU7IGl0IHNpbXBseSBwcmludHMgZXZlcnkgYXZhaWxhYmxlCitmaWVsZCBmb3IgZWFjaCBldmVudCBpbiB0aGUgdHJhY2UgZmlsZS4KKworWW91IGNhbiBhbHNvIGxvb2sgYXQgdGhlIGV4aXN0aW5nIHNjcmlwdHMgaW4KK34vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24gZm9yIHR5cGljYWwgZXhhbXBsZXMgc2hvd2luZyBob3cgdG8KK2RvIGJhc2ljIHRoaW5ncyBsaWtlIGFnZ3JlZ2F0ZSBldmVudCBkYXRhLCBwcmludCByZXN1bHRzLCBldGMuICBBbHNvLAordGhlIGNoZWNrLXBlcmYtdHJhY2UucHkgc2NyaXB0LCB3aGlsZSBub3QgaW50ZXJlc3RpbmcgZm9yIGl0cyByZXN1bHRzLAorYXR0ZW1wdHMgdG8gZXhlcmNpc2UgYWxsIG9mIHRoZSBtYWluIHNjcmlwdGluZyBmZWF0dXJlcy4KKworRVZFTlQgSEFORExFUlMKKy0tLS0tLS0tLS0tLS0tCisKK1doZW4gcGVyZiB0cmFjZSBpcyBpbnZva2VkIHVzaW5nIGEgdHJhY2Ugc2NyaXB0LCBhIHVzZXItZGVmaW5lZAorJ2hhbmRsZXIgZnVuY3Rpb24nIGlzIGNhbGxlZCBmb3IgZWFjaCBldmVudCBpbiB0aGUgdHJhY2UuICBJZiB0aGVyZSdzCitubyBoYW5kbGVyIGZ1bmN0aW9uIGRlZmluZWQgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZSwgdGhlIGV2ZW50IGlzCitpZ25vcmVkIChvciBwYXNzZWQgdG8gYSAndHJhY2VfaGFuZGxlZCcgZnVuY3Rpb24sIHNlZSBiZWxvdykgYW5kIHRoZQorbmV4dCBldmVudCBpcyBwcm9jZXNzZWQuCisKK01vc3Qgb2YgdGhlIGV2ZW50J3MgZmllbGQgdmFsdWVzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZQoraGFuZGxlciBmdW5jdGlvbjsgc29tZSBvZiB0aGUgbGVzcyBjb21tb24gb25lcyBhcmVuJ3QgLSB0aG9zZSBhcmUKK2F2YWlsYWJsZSBhcyBjYWxscyBiYWNrIGludG8gdGhlIHBlcmYgZXhlY3V0YWJsZSAoc2VlIGJlbG93KS4KKworQXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBwZXJmIHJlY29yZCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlY29yZAorYWxsIHNjaGVkX3dha2V1cCBldmVudHMgaW4gdGhlIHN5c3RlbToKKworICMgcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSBzY2hlZDpzY2hlZF93YWtldXAKKworVHJhY2VzIG1lYW50IHRvIGJlIHByb2Nlc3NlZCB1c2luZyBhIHNjcmlwdCBzaG91bGQgYmUgcmVjb3JkZWQgd2l0aAordGhlIGFib3ZlIG9wdGlvbnM6IC1jIDEgc2F5cyB0byBzYW1wbGUgZXZlcnkgZXZlbnQsIC1hIHRvIGVuYWJsZQorc3lzdGVtLXdpZGUgY29sbGVjdGlvbiwgLU0gdG8gbXVsdGlwbGV4IHRoZSBvdXRwdXQsIGFuZCAtUiB0byBjb2xsZWN0CityYXcgc2FtcGxlcy4KKworVGhlIGZvcm1hdCBmaWxlIGZvciB0aGUgc2NoZWRfd2FrZXAgZXZlbnQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZpZWxkcworKHNlZSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9zY2hlZC9zY2hlZF93YWtldXAvZm9ybWF0KToKKworLS0tLQorIGZvcm1hdDoKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OworICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsKKyAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOworCisgICAgICAgIGZpZWxkOmNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKyAgICAgICAgZmllbGQ6cGlkX3QgcGlkOworICAgICAgICBmaWVsZDppbnQgcHJpbzsKKyAgICAgICAgZmllbGQ6aW50IHN1Y2Nlc3M7CisgICAgICAgIGZpZWxkOmludCB0YXJnZXRfY3B1OworLS0tLQorCitUaGUgaGFuZGxlciBmdW5jdGlvbiBmb3IgdGhpcyBldmVudCB3b3VsZCBiZSBkZWZpbmVkIGFzOgorCistLS0tCitkZWYgc2NoZWRfX3NjaGVkX3dha2V1cChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywKKyAgICAgICBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorICAgICAgIGNvbW0sIHBpZCwgcHJpbywgc3VjY2VzcywgdGFyZ2V0X2NwdSk6CisgICAgICAgcGFzcworLS0tLQorCitUaGUgaGFuZGxlciBmdW5jdGlvbiB0YWtlcyB0aGUgZm9ybSBzdWJzeXN0ZW1fX2V2ZW50X25hbWUuCisKK1RoZSBjb21tb25fKiBhcmd1bWVudHMgaW4gdGhlIGhhbmRsZXIncyBhcmd1bWVudCBsaXN0IGFyZSB0aGUgc2V0IG9mCithcmd1bWVudHMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyczsgc29tZSBvZiB0aGUgZmllbGRzIGNvcnJlc3BvbmQKK3RvIHRoZSBjb21tb25fKiBmaWVsZHMgaW4gdGhlIGZvcm1hdCBmaWxlLCBidXQgc29tZSBhcmUgc3ludGhlc2l6ZWQsCithbmQgc29tZSBvZiB0aGUgY29tbW9uXyogZmllbGRzIGFyZW4ndCBjb21tb24gZW5vdWdoIHRvIHRvIGJlIHBhc3NlZAordG8gZXZlcnkgZXZlbnQgYXMgYXJndW1lbnRzIGJ1dCBhcmUgYXZhaWxhYmxlIGFzIGxpYnJhcnkgZnVuY3Rpb25zLgorCitIZXJlJ3MgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIG9mIHRoZSBpbnZhcmlhbnQgZXZlbnQgYXJnczoKKworIGV2ZW50X25hbWUgCSAgCSAgICB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgYXMgdGV4dAorIGNvbnRleHQJCSAgICBhbiBvcGFxdWUgJ2Nvb2tpZScgdXNlZCBpbiBjYWxscyBiYWNrIGludG8gcGVyZgorIGNvbW1vbl9jcHUJCSAgICB0aGUgY3B1IHRoZSBldmVudCBvY2N1cnJlZCBvbgorIGNvbW1vbl9zZWNzCQkgICAgdGhlIHNlY3MgcG9ydGlvbiBvZiB0aGUgZXZlbnQgdGltZXN0YW1wCisgY29tbW9uX25zZWNzCQkgICAgdGhlIG5zZWNzIHBvcnRpb24gb2YgdGhlIGV2ZW50IHRpbWVzdGFtcAorIGNvbW1vbl9waWQJCSAgICB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHRhc2sKKyBjb21tb25fY29tbQkJICAgIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MKKworQWxsIG9mIHRoZSByZW1haW5pbmcgZmllbGRzIGluIHRoZSBldmVudCdzIGZvcm1hdCBmaWxlIGhhdmUKK2NvdW50ZXJwYXJ0cyBhcyBoYW5kbGVyIGZ1bmN0aW9uIGFyZ3VtZW50cyBvZiB0aGUgc2FtZSBuYW1lLCBhcyBjYW4gYmUKK3NlZW4gaW4gdGhlIGV4YW1wbGUgYWJvdmUuCisKK1RoZSBhYm92ZSBwcm92aWRlcyB0aGUgYmFzaWNzIG5lZWRlZCB0byBkaXJlY3RseSBhY2Nlc3MgZXZlcnkgZmllbGQgb2YKK2V2ZXJ5IGV2ZW50IGluIGEgdHJhY2UsIHdoaWNoIGNvdmVycyA5MCUgb2Ygd2hhdCB5b3UgbmVlZCB0byBrbm93IHRvCit3cml0ZSBhIHVzZWZ1bCB0cmFjZSBzY3JpcHQuICBUaGUgc2VjdGlvbnMgYmVsb3cgY292ZXIgdGhlIHJlc3QuCisKK1NDUklQVCBMQVlPVVQKKy0tLS0tLS0tLS0tLS0KKworRXZlcnkgcGVyZiB0cmFjZSBQeXRob24gc2NyaXB0IHNob3VsZCBzdGFydCBieSBzZXR0aW5nIHVwIGEgUHl0aG9uCittb2R1bGUgc2VhcmNoIHBhdGggYW5kICdpbXBvcnQnaW5nIGEgZmV3IHN1cHBvcnQgbW9kdWxlcyAoc2VlIG1vZHVsZQorZGVzY3JpcHRpb25zIGJlbG93KToKKworLS0tLQorIGltcG9ydCBvcworIGltcG9ydCBzeXMKKworIHN5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCSAgICAgICcvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworIGZyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCisgZnJvbSBDb3JlIGltcG9ydCAqCistLS0tCisKK1RoZSByZXN0IG9mIHRoZSBzY3JpcHQgY2FuIGNvbnRhaW4gaGFuZGxlciBmdW5jdGlvbnMgYW5kIHN1cHBvcnQKK2Z1bmN0aW9ucyBpbiBhbnkgb3JkZXIuCisKK0FzaWRlIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGRpc2N1c3NlZCBhYm92ZSwgZXZlcnkgc2NyaXB0CitjYW4gaW1wbGVtZW50IGEgc2V0IG9mIG9wdGlvbmFsIGZ1bmN0aW9uczoKKworKnRyYWNlX2JlZ2luKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGJlZm9yZSBhbnkgZXZlbnQgaXMgcHJvY2Vzc2VkIGFuZAorZ2l2ZXMgc2NyaXB0cyBhIGNoYW5jZSB0byBkbyBzZXR1cCB0YXNrczoKKworLS0tLQorZGVmIHRyYWNlX2JlZ2luOgorICAgIHBhc3MKKy0tLS0KKworKnRyYWNlX2VuZCosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBhZnRlciBhbGwgZXZlbnRzIGhhdmUgYmVlbgorIHByb2Nlc3NlZCBhbmQgZ2l2ZXMgc2NyaXB0cyBhIGNoYW5jZSB0byBkbyBlbmQtb2Ytc2NyaXB0IHRhc2tzLCBzdWNoCisgYXMgZGlzcGxheSByZXN1bHRzOgorCistLS0tCitkZWYgdHJhY2VfZW5kOgorICAgIHBhc3MKKy0tLS0KKworKnRyYWNlX3VuaGFuZGxlZCosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBhZnRlciBmb3IgYW55IGV2ZW50IHRoYXQKKyBkb2Vzbid0IGhhdmUgYSBoYW5kbGVyIGV4cGxpY2l0bHkgZGVmaW5lZCBmb3IgaXQuICBUaGUgc3RhbmRhcmQgc2V0Cisgb2YgY29tbW9uIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGludG8gaXQ6CisKKy0tLS0KK2RlZiB0cmFjZV91bmhhbmRsZWQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsCisgICAgICAgIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pOgorICAgIHBhc3MKKy0tLS0KKworVGhlIHJlbWFpbmluZyBzZWN0aW9ucyBwcm92aWRlIGRlc2NyaXB0aW9ucyBvZiBlYWNoIG9mIHRoZSBhdmFpbGFibGUKK2J1aWx0LWluIHBlcmYgdHJhY2UgUHl0aG9uIG1vZHVsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZnVuY3Rpb25zLgorCitBVkFJTEFCTEUgTU9EVUxFUyBBTkQgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGF2YWlsYWJsZQordmlhIHRoZSB2YXJpb3VzIHBlcmYgdHJhY2UgUHl0aG9uIG1vZHVsZXMuICBUbyB1c2UgdGhlIGZ1bmN0aW9ucyBhbmQKK3ZhcmlhYmxlcyBmcm9tIHRoZSBnaXZlbiBtb2R1bGUsIGFkZCB0aGUgY29ycmVzcG9uZGluZyAnZnJvbSBYWFhYCitpbXBvcnQnIGxpbmUgdG8geW91ciBwZXJmIHRyYWNlIHNjcmlwdC4KKworQ29yZS5weSBNb2R1bGUKK35+fn5+fn5+fn5+fn5+CisKK1RoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIHNvbWUgZXNzZW50aWFsIGZ1bmN0aW9ucyB0byB1c2VyIHNjcmlwdHMuCisKK1RoZSAqZmxhZ19zdHIqIGFuZCAqc3ltYm9sX3N0ciogZnVuY3Rpb25zIHByb3ZpZGUgaHVtYW4tcmVhZGFibGUKK3N0cmluZ3MgZm9yIGZsYWcgYW5kIHN5bWJvbGljIGZpZWxkcy4gIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIHN0cmluZ3MKK2FuZCB2YWx1ZXMgcGFyc2VkIGZyb20gdGhlICdwcmludCBmbXQnIGZpZWxkcyBvZiB0aGUgZXZlbnQgZm9ybWF0CitmaWxlczoKKworICBmbGFnX3N0cihldmVudF9uYW1lLCBmaWVsZF9uYW1lLCBmaWVsZF92YWx1ZSkgLSByZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW9uIGNvcnJlc3BvbmRpbmcgdG8gZmllbGRfdmFsdWUgZm9yIHRoZSBmbGFnIGZpZWxkIGZpZWxkX25hbWUgb2YgZXZlbnQgZXZlbnRfbmFtZQorICBzeW1ib2xfc3RyKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byBmaWVsZF92YWx1ZSBmb3IgdGhlIHN5bWJvbGljIGZpZWxkIGZpZWxkX25hbWUgb2YgZXZlbnQgZXZlbnRfbmFtZQorCitUaGUgKmF1dG9kaWN0KiBmdW5jdGlvbiByZXR1cm5zIGEgc3BlY2lhbCBzcGVjaWFsIGtpbmQgb2YgUHl0aG9uCitkaWN0aW9uYXJ5IHRoYXQgaW1wbGVtZW50cyBQZXJsJ3MgJ2F1dG92aXZpZnlpbmcnIGhhc2hlcyBpbiBQeXRob24KK2kuZS4gd2l0aCBhdXRvdml2aWZ5aW5nIGhhc2hlcywgeW91IGNhbiBhc3NpZ24gbmVzdGVkIGhhc2ggdmFsdWVzCit3aXRob3V0IGhhdmluZyB0byBnbyB0byB0aGUgdHJvdWJsZSBvZiBjcmVhdGluZyBpbnRlcm1lZGlhdGUgbGV2ZWxzIGlmCit0aGV5IGRvbid0IGV4aXN0LgorCisgIGF1dG9kaWN0KCkgLSByZXR1cm5zIGFuIGF1dG92aXZpZnlpbmcgZGljdGlvbmFyeSBpbnN0YW5jZQorCisKK3BlcmZfdHJhY2VfY29udGV4dCBNb2R1bGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU29tZSBvZiB0aGUgJ2NvbW1vbicgZmllbGRzIGluIHRoZSBldmVudCBmb3JtYXQgZmlsZSBhcmVuJ3QgYWxsIHRoYXQKK2NvbW1vbiwgYnV0IG5lZWQgdG8gYmUgbWFkZSBhY2Nlc3NpYmxlIHRvIHVzZXIgc2NyaXB0cyBub25ldGhlbGVzcy4KKworcGVyZl90cmFjZV9jb250ZXh0IGRlZmluZXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8KK2FjY2VzcyB0aGlzIGRhdGEgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgZXZlbnQuICBFYWNoIG9mIHRoZXNlCitmdW5jdGlvbnMgZXhwZWN0cyBhIGNvbnRleHQgdmFyaWFibGUsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZQorY29udGV4dCB2YXJpYWJsZSBwYXNzZWQgaW50byBldmVyeSBldmVudCBoYW5kbGVyIGFzIHRoZSBzZWNvbmQKK2FyZ3VtZW50LgorCisgY29tbW9uX3BjKGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fcHJlZW1wdCBjb3VudCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKyBjb21tb25fZmxhZ3MoY29udGV4dCkgLSByZXR1cm5zIGNvbW1vbl9mbGFncyBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKyBjb21tb25fbG9ja19kZXB0aChjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2xvY2tfZGVwdGggZm9yIHRoZSBjdXJyZW50IGV2ZW50CisKK1V0aWwucHkgTW9kdWxlCit+fn5+fn5+fn5+fn5+fgorCitWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCBwZXJmIHRyYWNlOgorCisgIG5zZWNzKHNlY3MsIG5zZWNzKSAtIHJldHVybnMgdG90YWwgbnNlY3MgZ2l2ZW4gc2Vjcy9uc2VjcyBwYWlyCisgIG5zZWNzX3NlY3MobnNlY3MpIC0gcmV0dXJucyB3aG9sZSBzZWNzIHBvcnRpb24gZ2l2ZW4gbnNlY3MKKyAgbnNlY3NfbnNlY3MobnNlY3MpIC0gcmV0dXJucyBuc2VjcyByZW1haW5kZXIgZ2l2ZW4gbnNlY3MKKyAgbnNlY3Nfc3RyKG5zZWNzKSAtIHJldHVybnMgcHJpbnRhYmxlIHN0cmluZyBpbiB0aGUgZm9ybSBzZWNzLm5zZWNzCisgIGF2Zyh0b3RhbCwgbikgLSByZXR1cm5zIGF2ZXJhZ2UgZ2l2ZW4gYSBzdW0gYW5kIGEgdG90YWwgbnVtYmVyIG9mIHZhbHVlcworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtdHJhY2VbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dAppbmRleCA2MGU1OTAwLi44ODc5Mjk5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CkBAIC0xOSw2ICsxOSwxMSBAQAogICAncGVyZiB0cmFjZScgdG8gc2VlIGEgZGV0YWlsZWQgdHJhY2Ugb2YgdGhlIHdvcmtsb2FkIHRoYXQgd2FzCiAgIHJlY29yZGVkLgogCisgIFlvdSBjYW4gYWxzbyBydW4gYSBzZXQgb2YgcHJlLWNhbm5lZCBzY3JpcHRzIHRoYXQgYWdncmVnYXRlIGFuZAorICBzdW1tYXJpemUgdGhlIHJhdyB0cmFjZSBkYXRhIGluIHZhcmlvdXMgd2F5cyAodGhlIGxpc3Qgb2Ygc2NyaXB0cyBpcworICBhdmFpbGFibGUgdmlhICdwZXJmIHRyYWNlIC1sJykuICBUaGUgZm9sbG93aW5nIHZhcmlhbnRzIGFsbG93IHlvdSB0bworICByZWNvcmQgYW5kIHJ1biB0aG9zZSBzY3JpcHRzOgorCiAgICdwZXJmIHRyYWNlIHJlY29yZCA8c2NyaXB0PicgdG8gcmVjb3JkIHRoZSBldmVudHMgcmVxdWlyZWQgZm9yICdwZXJmCiAgIHRyYWNlIHJlcG9ydCcuICA8c2NyaXB0PiBpcyB0aGUgbmFtZSBkaXNwbGF5ZWQgaW4gdGhlIG91dHB1dCBvZgogICAncGVyZiB0cmFjZSAtLWxpc3QnIGkuZS4gdGhlIGFjdHVhbCBzY3JpcHQgbmFtZSBtaW51cyBhbnkgbGFuZ3VhZ2UKQEAgLTMxLDYgKzM2LDkgQEAKICAgcmVjb3JkIDxzY3JpcHQ+JyBpcyB1c2VkIGFuZCBzaG91bGQgYmUgcHJlc2VudCBmb3IgdGhpcyBjb21tYW5kIHRvCiAgIHN1Y2NlZWQuCiAKKyAgU2VlIHRoZSAnU0VFIEFMU08nIHNlY3Rpb24gZm9yIGxpbmtzIHRvIGxhbmd1YWdlLXNwZWNpZmljCisgIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3cml0ZSBhbmQgcnVuIHlvdXIgb3duIHRyYWNlIHNjcmlwdHMuCisKIE9QVElPTlMKIC0tLS0tLS0KIC1EOjoKQEAgLTQ1LDkgKzUzLDExIEBACiAtLWxpc3Q9OjoKICAgICAgICAgRGlzcGxheSBhIGxpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHMuCiAKLS1zOjoKKy1zIFsnbGFuZyddOjoKIC0tc2NyaXB0PTo6CiAgICAgICAgIFByb2Nlc3MgdHJhY2UgZGF0YSB3aXRoIHRoZSBnaXZlbiBzY3JpcHQgKFtsYW5nXTpzY3JpcHRbLmV4dF0pLgorCUlmIHRoZSBzdHJpbmcgJ2xhbmcnIGlzIHNwZWNpZmllZCBpbiBwbGFjZSBvZiBhIHNjcmlwdCBuYW1lLCBhCisgICAgICAgIGxpc3Qgb2Ygc3VwcG9ydGVkIGxhbmd1YWdlcyB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkLgogCiAtZzo6CiAtLWdlbi1zY3JpcHQ9OjoKQEAgLTU2LDQgKzY2LDUgQEAKIAogU0VFIEFMU08KIC0tLS0tLS0tCi1saW5rcGVyZjpwZXJmLXJlY29yZFsxXSwgbGlua3BlcmY6cGVyZi10cmFjZS1wZXJsWzFdCitsaW5rcGVyZjpwZXJmLXJlY29yZFsxXSwgbGlua3BlcmY6cGVyZi10cmFjZS1wZXJsWzFdLAorbGlua3BlcmY6cGVyZi10cmFjZS1weXRob25bMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLnR4dAppbmRleCA2OWM4MzI1Li4wZWViMjQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYudHh0CkBAIC0xMiw3ICsxMiw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotUGVyZm9ybWFuY2UgY291bnRlcnMgZm9yIExpbnV4IGFyZSBhcmUgYSBuZXcga2VybmVsLWJhc2VkIHN1YnN5c3RlbQorUGVyZm9ybWFuY2UgY291bnRlcnMgZm9yIExpbnV4IGFyZSBhIG5ldyBrZXJuZWwtYmFzZWQgc3Vic3lzdGVtCiB0aGF0IHByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIGFsbCB0aGluZ3MgcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEl0CiBjb3ZlcnMgaGFyZHdhcmUgbGV2ZWwgKENQVS9QTVUsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgZmVhdHVyZXMKIGFuZCBzb2Z0d2FyZSBmZWF0dXJlcyAoc29mdHdhcmUgY291bnRlcnMsIHRyYWNlcG9pbnRzKSBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggMmU3ZmEzYS4uNTRhNWI1MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0yODYsMTEgKzI4Niw3IEBACiBTQ1JJUFRfU0ggPQogVEVTVF9QUk9HUkFNUyA9CiAKLSMKLSMgTm8gc2NyaXB0cyByaWdodCBub3c6Ci0jCi0KLSMgU0NSSVBUX1NIICs9IHBlcmYtYW0uc2gKK1NDUklQVF9TSCArPSBwZXJmLWFyY2hpdmUuc2gKIAogIwogIyBObyBQZXJsIHNjcmlwdHMgcmlnaHQgbm93OgpAQCAtMzE1LDkgKzMxMSw2IEBACiAjIExpc3QgYnVpbHQtaW4gY29tbWFuZCAkQyB3aG9zZSBpbXBsZW1lbnRhdGlvbiBjbWRfJEMoKSBpcyBub3QgaW4KICMgYnVpbHRpbi0kQy5vIGJ1dCBpcyBsaW5rZWQgaW4gYXMgcGFydCBvZiBzb21lIG90aGVyIGNvbW1hbmQuCiAjCi0jIE5vbmUgcmlnaHQgbm93OgotIwotIyBCVUlMVF9JTlMgKz0gcGVyZi1pbml0ICRYCiAKICMgd2hhdCAnYWxsJyB3aWxsIGJ1aWxkIGFuZCAnaW5zdGFsbCcgd2lsbCBpbnN0YWxsLCBpbiBwZXJmZXhlY2RpcgogQUxMX1BST0dSQU1TID0gJChQUk9HUkFNUykgJChTQ1JJUFRTKQpAQCAtMzQwLDYgKzMzMyw3IEBACiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9yYnRyZWUuaAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9saXN0LmgKK0xJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvaGFzaC5oCiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMzYzLDEyICszNTcsMTQgQEAKIExJQl9IICs9IHBlcmYuaAogTElCX0ggKz0gdXRpbC9jYWNoZS5oCiBMSUJfSCArPSB1dGlsL2NhbGxjaGFpbi5oCitMSUJfSCArPSB1dGlsL2J1aWxkLWlkLmgKIExJQl9IICs9IHV0aWwvZGVidWcuaAogTElCX0ggKz0gdXRpbC9kZWJ1Z2ZzLmgKIExJQl9IICs9IHV0aWwvZXZlbnQuaAogTElCX0ggKz0gdXRpbC9leGVjX2NtZC5oCiBMSUJfSCArPSB1dGlsL3R5cGVzLmgKIExJQl9IICs9IHV0aWwvbGV2ZW5zaHRlaW4uaAorTElCX0ggKz0gdXRpbC9tYXAuaAogTElCX0ggKz0gdXRpbC9wYXJzZS1vcHRpb25zLmgKIExJQl9IICs9IHV0aWwvcGFyc2UtZXZlbnRzLmgKIExJQl9IICs9IHV0aWwvcXVvdGUuaApAQCAtMzg5LDEyICszODUsMTIgQEAKIExJQl9IICs9IHV0aWwvaGlzdC5oCiBMSUJfSCArPSB1dGlsL3RocmVhZC5oCiBMSUJfSCArPSB1dGlsL3RyYWNlLWV2ZW50LmgKLUxJQl9IICs9IHV0aWwvdHJhY2UtZXZlbnQtcGVybC5oCiBMSUJfSCArPSB1dGlsL3Byb2JlLWZpbmRlci5oCiBMSUJfSCArPSB1dGlsL3Byb2JlLWV2ZW50LmgKIAogTElCX09CSlMgKz0gdXRpbC9hYnNwYXRoLm8KIExJQl9PQkpTICs9IHV0aWwvYWxpYXMubworTElCX09CSlMgKz0gdXRpbC9idWlsZC1pZC5vCiBMSUJfT0JKUyArPSB1dGlsL2NvbmZpZy5vCiBMSUJfT0JKUyArPSB1dGlsL2N0eXBlLm8KIExJQl9PQkpTICs9IHV0aWwvZGVidWdmcy5vCkBAIC00MzEsMTIgKzQyNywxMiBAQAogTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1wYXJzZS5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXJlYWQubwogTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1pbmZvLm8KLUxJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcGVybC5vCitMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXNjcmlwdGluZy5vCiBMSUJfT0JKUyArPSB1dGlsL3N2Z2hlbHBlci5vCiBMSUJfT0JKUyArPSB1dGlsL3NvcnQubwogTElCX09CSlMgKz0gdXRpbC9oaXN0Lm8KLUxJQl9PQkpTICs9IHV0aWwvZGF0YV9tYXAubwogTElCX09CSlMgKz0gdXRpbC9wcm9iZS1ldmVudC5vCitMSUJfT0JKUyArPSB1dGlsL3V0aWwubwogCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1hbm5vdGF0ZS5vCiAKQEAgLTQ1MSw2ICs0NDcsNyBAQAogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4taGVscC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1zY2hlZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1idWlsZGlkLWxpc3QubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tYnVpbGRpZC1jYWNoZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1saXN0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlY29yZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1yZXBvcnQubwpAQCAtNDYwLDYgKzQ1Nyw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi10cmFjZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1wcm9iZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1rbWVtLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLWxvY2subwogCiBQRVJGTElCUyA9ICQoTElCX0ZJTEUpCiAKQEAgLTUyMCw5ICs1MTgsMjMgQEAKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQRVJMCiBlbHNlCiAJQUxMX0xERkxBR1MgKz0gJChQRVJMX0VNQkVEX0xET1BUUykKKwlMSUJfT0JKUyArPSB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwubwogCUxJQl9PQkpTICs9IHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vCiBlbmRpZgogCitpZm5kZWYgTk9fTElCUFlUSE9OCitQWVRIT05fRU1CRURfTERPUFRTID0gYHB5dGhvbi1jb25maWcgLS1sZGZsYWdzIDI+L2Rldi9udWxsYAorUFlUSE9OX0VNQkVEX0NDT1BUUyA9IGBweXRob24tY29uZmlnIC0tY2ZsYWdzIDI+L2Rldi9udWxsYAorZW5kaWYKKworaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPFB5dGhvbi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgUHlfSW5pdGlhbGl6ZSgpOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoUFlUSE9OX0VNQkVEX0NDT1BUUykgLW8gL2Rldi9udWxsICQoUFlUSE9OX0VNQkVEX0xET1BUUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQWVRIT04KK2Vsc2UKKwlBTExfTERGTEFHUyArPSAkKFBZVEhPTl9FTUJFRF9MRE9QVFMpCisJTElCX09CSlMgKz0gdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24ubworCUxJQl9PQkpTICs9IHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KK2VuZGlmCisKIGlmZGVmIE5PX0RFTUFOR0xFCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fREVNQU5HTEUKIGVsc2UKQEAgLTg5NCwxMiArOTA2LDE4IEBACiB1dGlsL2ZpbmRfbmV4dF9iaXQubzogLi4vLi4vbGliL2ZpbmRfbmV4dF9iaXQuYyBQRVJGLUNGTEFHUwogCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC9maW5kX25leHRfYml0Lm8gLWMgJChBTExfQ0ZMQUdTKSAtREVUQ19QRVJGQ09ORklHPSciJChFVENfUEVSRkNPTkZJR19TUSkiJyAkPAogCi11dGlsL3RyYWNlLWV2ZW50LXBlcmwubzogdXRpbC90cmFjZS1ldmVudC1wZXJsLmMgUEVSRi1DRkxBR1MKLQkkKFFVSUVUX0NDKSQoQ0MpIC1vIHV0aWwvdHJhY2UtZXZlbnQtcGVybC5vIC1jICQoQUxMX0NGTEFHUykgJChQRVJMX0VNQkVEX0NDT1BUUykgLVduby1yZWR1bmRhbnQtZGVjbHMgLVduby1zdHJpY3QtcHJvdG90eXBlcyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1zaGFkb3cgJDwKK3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5vOiB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYyBQRVJGLUNGTEFHUworCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNoYWRvdyAkPAogCiBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubzogc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgUEVSRi1DRkxBR1MKIAkkKFFVSUVUX0NDKSQoQ0MpIC1vIHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vIC1jICQoQUxMX0NGTEFHUykgJChQRVJMX0VNQkVEX0NDT1BUUykgLVduby1yZWR1bmRhbnQtZGVjbHMgLVduby1zdHJpY3QtcHJvdG90eXBlcyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1uZXN0ZWQtZXh0ZXJucyAkPAogCit1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vOiB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vIC1jICQoQUxMX0NGTEFHUykgJChQWVRIT05fRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNoYWRvdyAkPAorCitzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vOiBzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyBzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vIC1jICQoQUxMX0NGTEFHUykgJChQWVRIT05fRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW5lc3RlZC1leHRlcm5zICQ8CisKIHBlcmYtJSRYOiAlLm8gJChQRVJGTElCUykKIAkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKIApAQCAtMTAwOSw5ICsxMDI3LDE2IEBACiAJJChJTlNUQUxMKSBwZXJmJFggJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCiAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCiAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9iaW4nCisJJChJTlNUQUxMKSBwZXJmLWFyY2hpdmUgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpJwogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJwogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsLyoucGwgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybCcKIAkkKElOU1RBTEwpIHNjcmlwdHMvcGVybC9iaW4vKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL2JpbicKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9iaW4nCisJJChJTlNUQUxMKSBzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJworCSQoSU5TVEFMTCkgc2NyaXB0cy9weXRob24vKi5weSAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24nCisJJChJTlNUQUxMKSBzY3JpcHRzL3B5dGhvbi9iaW4vKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24vYmluJworCiBpZmRlZiBCVUlMVF9JTlMKIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCiAJJChJTlNUQUxMKSAkKEJVSUxUX0lOUykgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpJwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCA1OTNmZjI1Li41ZWM1ZGU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNTMsMzIgKzUzLDIwIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpzeW1faGlzdF9maWx0ZXI7CiAKLXN0YXRpYyBpbnQgc3ltYm9sX2ZpbHRlcihzdHJ1Y3QgbWFwICptYXAgX191c2VkLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCitzdGF0aWMgaW50IHN5bV9fYWxsb2NfaGlzdChzdHJ1Y3Qgc3ltYm9sICpzZWxmKQogewotCWlmIChzeW1faGlzdF9maWx0ZXIgPT0gTlVMTCB8fAotCSAgICBzdHJjbXAoc3ltLT5uYW1lLCBzeW1faGlzdF9maWx0ZXIpID09IDApIHsKLQkJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7Ci0JCWNvbnN0IGludCBzaXplID0gKHNpemVvZigqcHJpdi0+aGlzdCkgKwotCQkJCSAgKHN5bS0+ZW5kIC0gc3ltLT5zdGFydCkgKiBzaXplb2YodTY0KSk7CisJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHNlbGYpOworCWNvbnN0IGludCBzaXplID0gKHNpemVvZigqcHJpdi0+aGlzdCkgKworCQkJICAoc2VsZi0+ZW5kIC0gc2VsZi0+c3RhcnQpICogc2l6ZW9mKHU2NCkpOwogCi0JCXByaXYtPmhpc3QgPSBtYWxsb2Moc2l6ZSk7Ci0JCWlmIChwcml2LT5oaXN0KQotCQkJbWVtc2V0KHByaXYtPmhpc3QsIDAsIHNpemUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyoKLQkgKiBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBmaWx0ZXIgaXQgb3V0LCBhcyB3ZSBkb24ndCB3YW50IHRvIGdvIHRocnUgc3ltYm9scwotCSAqIHdlJ3JlIG5vdCBpbnRlcmVzdGVkLCBhbmQgaWYgYSBEU08gZW5kcyB1cCB3aXRoIG5vIHN5bWJvbHMsIGRlbGV0ZSBpdCB0b28sCi0JICogYnV0IHJpZ2h0IG5vdyB0aGUga2VybmVsIGxvYWRpbmcgcm91dGluZXMgaW4gc3ltYm9sLmMgYmFpbCBvdXQgaWYgbm8gc3ltYm9scwotCSAqIGFyZSBmb3VuZCwgZml4IGl0IGxhdGVyLgotCSAqLwotCXJldHVybiAwOworCXByaXYtPmhpc3QgPSB6YWxsb2Moc2l6ZSk7CisJcmV0dXJuIHByaXYtPmhpc3QgPT0gTlVMTCA/IC0xIDogMDsKIH0KIAogLyoKICAqIGNvbGxlY3QgaGlzdG9ncmFtIGNvdW50cwogICovCi1zdGF0aWMgdm9pZCBoaXN0X2hpdChzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBpcCkKK3N0YXRpYyBpbnQgYW5ub3RhdGVfX2hpc3RfaGl0KHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGlwKQogewogCXVuc2lnbmVkIGludCBzeW1fc2l6ZSwgb2Zmc2V0OwogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CkBAIC04OCw4MyArNzYsMTI3IEBACiAJaGUtPmNvdW50Kys7CiAKIAlpZiAoIXN5bSB8fCAhaGUtPm1hcCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCXByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKLQlpZiAoIXByaXYtPmhpc3QpCi0JCXJldHVybjsKKwlpZiAocHJpdi0+aGlzdCA9PSBOVUxMICYmIHN5bV9fYWxsb2NfaGlzdChzeW0pIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzeW1fc2l6ZSA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAlvZmZzZXQgPSBpcCAtIHN5bS0+c3RhcnQ7CiAKLQlpZiAodmVyYm9zZSkKLQkJZnByaW50ZihzdGRlcnIsICIlczogaXA9JUx4XG4iLCBfX2Z1bmNfXywKLQkJCWhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIGlwKSk7CisJcHJfZGVidWczKCIlczogaXA9JSNMeFxuIiwgX19mdW5jX18sIGhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIGlwKSk7CiAKIAlpZiAob2Zmc2V0ID49IHN5bV9zaXplKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJaCA9IHByaXYtPmhpc3Q7CiAJaC0+c3VtKys7CiAJaC0+aXBbb2Zmc2V0XSsrOwogCi0JaWYgKHZlcmJvc2UgPj0gMykKLQkJcHJpbnRmKCIlcCAlczogY291bnQrKyBbaXA6ICVwLCAlMDhMeF0gPT4gJUxkXG4iLAotCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZyloZS0+c3ltLT5zdGFydCwKLQkJCWhlLT5zeW0tPm5hbWUsCi0JCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWlwLCBpcCAtIGhlLT5zeW0tPnN0YXJ0LAotCQkJaC0+aXBbb2Zmc2V0XSk7CisJcHJfZGVidWczKCIlI0x4ICVzOiBjb3VudCsrIFtpcDogJSNMeCwgJSNMeF0gPT4gJUxkXG4iLCBoZS0+c3ltLT5zdGFydCwKKwkJICBoZS0+c3ltLT5uYW1lLCBpcCwgaXAgLSBoZS0+c3ltLT5zdGFydCwgaC0+aXBbb2Zmc2V0XSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHU2NCBjb3VudCkKIHsKIAlib29sIGhpdDsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUgPSBfX3BlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2VsZiwgYWwsIE5VTEwsCi0JCQkJCQkJICAgICAgIGNvdW50LCAmaGl0KTsKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7CisKKwlpZiAoc3ltX2hpc3RfZmlsdGVyICE9IE5VTEwgJiYKKwkgICAgKGFsLT5zeW0gPT0gTlVMTCB8fCBzdHJjbXAoc3ltX2hpc3RfZmlsdGVyLCBhbC0+c3ltLT5uYW1lKSAhPSAwKSkgeworCQkvKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzeW1ib2wgbmFtZWQgc3ltX2hpc3RfZmlsdGVyICovCisJCWlmIChhbC0+c3ltICE9IE5VTEwpIHsKKwkJCXJiX2VyYXNlKCZhbC0+c3ltLT5yYl9ub2RlLAorCQkJCSAmYWwtPm1hcC0+ZHNvLT5zeW1ib2xzW2FsLT5tYXAtPnR5cGVdKTsKKwkJCXN5bWJvbF9fZGVsZXRlKGFsLT5zeW0pOworCQl9CisJCXJldHVybiAwOworCX0KKworCWhlID0gX19wZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlbGYsIGFsLCBOVUxMLCBjb3VudCwgJmhpdCk7CiAJaWYgKGhlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWhpc3RfaGl0KGhlLCBhbC0+YWRkcik7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gYW5ub3RhdGVfX2hpc3RfaGl0KGhlLCBhbC0+YWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlcFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZXZlbnQtPmlwLnBpZCwgKHZvaWQgKikobG9uZylldmVudC0+aXAuaXApOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICUjTHhcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC5pcCk7CiAKLQlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIHN5bWJvbF9maWx0ZXIpIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAotCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKKwlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIE5VTEwpIDwgMCkgeworCQlwcl93YXJuaW5nKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCSAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoIWFsLmZpbHRlcmVkICYmIHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCAxKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgIgotCQkJCSJza2lwcGluZyBldmVudFxuIik7CisJCXByX3dhcm5pbmcoInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgIgorCQkJICAgInNraXBwaW5nIGV2ZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2xpbmUoRklMRSAqZmlsZSwgc3RydWN0IGhpc3RfZW50cnkgKmhlLCB1NjQgbGVuKQorc3RydWN0IG9iamR1bXBfbGluZSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXM2NAkJIG9mZnNldDsKKwljaGFyCQkgKmxpbmU7Cit9OworCitzdGF0aWMgc3RydWN0IG9iamR1bXBfbGluZSAqb2JqZHVtcF9saW5lX19uZXcoczY0IG9mZnNldCwgY2hhciAqbGluZSkKK3sKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOworCisJaWYgKHNlbGYgIT0gTlVMTCkgeworCQlzZWxmLT5vZmZzZXQgPSBvZmZzZXQ7CisJCXNlbGYtPmxpbmUgPSBsaW5lOworCX0KKworCXJldHVybiBzZWxmOworfQorCitzdGF0aWMgdm9pZCBvYmpkdW1wX2xpbmVfX2ZyZWUoc3RydWN0IG9iamR1bXBfbGluZSAqc2VsZikKK3sKKwlmcmVlKHNlbGYtPmxpbmUpOworCWZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIG9iamR1bXBfX2FkZF9saW5lKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBvYmpkdW1wX2xpbmUgKmxpbmUpCit7CisJbGlzdF9hZGRfdGFpbCgmbGluZS0+bm9kZSwgaGVhZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZHVtcF9saW5lICpvYmpkdW1wX19nZXRfbmV4dF9pcF9saW5lKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJCQkgICAgICBzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3MpCit7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwb3MsIGhlYWQsIG5vZGUpCisJCWlmIChwb3MtPm9mZnNldCA+PSAwKQorCQkJcmV0dXJuIHBvczsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xpbmUoRklMRSAqZmlsZSwgc3RydWN0IGhpc3RfZW50cnkgKmhlLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CisJc3RydWN0IG9iamR1bXBfbGluZSAqb2JqZHVtcF9saW5lOwogCWNoYXIgKmxpbmUgPSBOVUxMLCAqdG1wLCAqdG1wMjsKLQlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9saW5lOwotCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2NvbG9yOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc2l6ZV90IGxpbmVfbGVuOwotCXU2NCBzdGFydDsKLQlzNjQgbGluZV9pcDsKLQlpbnQgcmV0OworCXM2NCBsaW5lX2lwLCBvZmZzZXQgPSAtMTsKIAljaGFyICpjOwogCiAJaWYgKGdldGxpbmUoJmxpbmUsICZsaW5lX2xlbiwgZmlsZSkgPCAwKQogCQlyZXR1cm4gLTE7CisKIAlpZiAoIWxpbmUpCiAJCXJldHVybiAtMTsKIApAQCAtMTczLDggKzIwNSw2IEBACiAJCSpjID0gMDsKIAogCWxpbmVfaXAgPSAtMTsKLQlvZmZzZXQgPSAwOwotCXJldCA9IC0yOwogCiAJLyoKIAkgKiBTdHJpcCBsZWFkaW5nIHNwYWNlczoKQEAgLTE5NSw5ICsyMjUsMzAgQEAKIAkJCWxpbmVfaXAgPSAtMTsKIAl9CiAKLQlzdGFydCA9IGhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIHN5bS0+c3RhcnQpOwotCiAJaWYgKGxpbmVfaXAgIT0gLTEpIHsKKwkJdTY0IHN0YXJ0ID0gbWFwX19yaXBfMm9iamR1bXAoaGUtPm1hcCwgc3ltLT5zdGFydCk7CisJCW9mZnNldCA9IGxpbmVfaXAgLSBzdGFydDsKKwl9CisKKwlvYmpkdW1wX2xpbmUgPSBvYmpkdW1wX2xpbmVfX25ldyhvZmZzZXQsIGxpbmUpOworCWlmIChvYmpkdW1wX2xpbmUgPT0gTlVMTCkgeworCQlmcmVlKGxpbmUpOworCQlyZXR1cm4gLTE7CisJfQorCW9iamR1bXBfX2FkZF9saW5lKGhlYWQsIG9iamR1bXBfbGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvYmpkdW1wX2xpbmVfX3ByaW50KHN0cnVjdCBvYmpkdW1wX2xpbmUgKnNlbGYsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCSAgICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBsZW4pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKKwlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9saW5lOworCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2NvbG9yOworCisJaWYgKHNlbGYtPm9mZnNldCAhPSAtMSkgewogCQljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKIAkJdW5zaWduZWQgaW50IGhpdHMgPSAwOwogCQlkb3VibGUgcGVyY2VudCA9IDAuMDsKQEAgLTIwNSwxNSArMjU2LDIyIEBACiAJCXN0cnVjdCBzeW1fcHJpdiAqcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOwogCQlzdHJ1Y3Qgc3ltX2V4dCAqc3ltX2V4dCA9IHByaXYtPmV4dDsKIAkJc3RydWN0IHN5bV9oaXN0ICpoID0gcHJpdi0+aGlzdDsKKwkJczY0IG9mZnNldCA9IHNlbGYtPm9mZnNldDsKKwkJc3RydWN0IG9iamR1bXBfbGluZSAqbmV4dCA9IG9iamR1bXBfX2dldF9uZXh0X2lwX2xpbmUoaGVhZCwgc2VsZik7CiAKLQkJb2Zmc2V0ID0gbGluZV9pcCAtIHN0YXJ0OwotCQlpZiAob2Zmc2V0IDwgbGVuKQotCQkJaGl0cyA9IGgtPmlwW29mZnNldF07CisJCXdoaWxlIChvZmZzZXQgPCAoczY0KWxlbiAmJgorCQkgICAgICAgKG5leHQgPT0gTlVMTCB8fCBvZmZzZXQgPCBuZXh0LT5vZmZzZXQpKSB7CisJCQlpZiAoc3ltX2V4dCkgeworCQkJCWlmIChwYXRoID09IE5VTEwpCisJCQkJCXBhdGggPSBzeW1fZXh0W29mZnNldF0ucGF0aDsKKwkJCQlwZXJjZW50ICs9IHN5bV9leHRbb2Zmc2V0XS5wZXJjZW50OworCQkJfSBlbHNlCisJCQkJaGl0cyArPSBoLT5pcFtvZmZzZXRdOwogCi0JCWlmIChvZmZzZXQgPCBsZW4gJiYgc3ltX2V4dCkgewotCQkJcGF0aCA9IHN5bV9leHRbb2Zmc2V0XS5wYXRoOwotCQkJcGVyY2VudCA9IHN5bV9leHRbb2Zmc2V0XS5wZXJjZW50OwotCQl9IGVsc2UgaWYgKGgtPnN1bSkKKwkJCSsrb2Zmc2V0OworCQl9CisKKwkJaWYgKHN5bV9leHQgPT0gTlVMTCAmJiBoLT5zdW0pCiAJCQlwZXJjZW50ID0gMTAwLjAgKiBoaXRzIC8gaC0+c3VtOwogCiAJCWNvbG9yID0gZ2V0X3BlcmNlbnRfY29sb3IocGVyY2VudCk7CkBAIC0yMzQsMTIgKzI5MiwxMiBAQAogCiAJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIiAlNy4yZiIsIHBlcmNlbnQpOwogCQlwcmludGYoIiA6CSIpOwotCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgUEVSRl9DT0xPUl9CTFVFLCAiJXNcbiIsIGxpbmUpOworCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgUEVSRl9DT0xPUl9CTFVFLCAiJXNcbiIsIHNlbGYtPmxpbmUpOwogCX0gZWxzZSB7Ci0JCWlmICghKmxpbmUpCisJCWlmICghKnNlbGYtPmxpbmUpCiAJCQlwcmludGYoIiAgICAgICAgIDpcbiIpOwogCQllbHNlCi0JCQlwcmludGYoIiAgICAgICAgIDoJJXNcbiIsIGxpbmUpOworCQkJcHJpbnRmKCIgICAgICAgICA6CSVzXG4iLCBzZWxmLT5saW5lKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM2NSw2ICs0MjMsMjAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGhpc3RfZW50cnlfX3ByaW50X2hpdHMoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc2VsZi0+c3ltOworCXN0cnVjdCBzeW1fcHJpdiAqcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOworCXN0cnVjdCBzeW1faGlzdCAqaCA9IHByaXYtPmhpc3Q7CisJdTY0IGxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydCwgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBsZW47ICsrb2Zmc2V0KQorCQlpZiAoaC0+aXBbb2Zmc2V0XSAhPSAwKQorCQkJcHJpbnRmKCIlKkx4OiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLAorCQkJICAgICAgIHN5bS0+c3RhcnQgKyBvZmZzZXQsIGgtPmlwW29mZnNldF0pOworCXByaW50ZigiJSpzOiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLCAiaC0+c3VtIiwgaC0+c3VtKTsKK30KKwogc3RhdGljIHZvaWQgYW5ub3RhdGVfc3ltKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKIHsKIAlzdHJ1Y3QgbWFwICptYXAgPSBoZS0+bWFwOwpAQCAtMzc0LDE1ICs0NDYsMTUgQEAKIAl1NjQgbGVuOwogCWNoYXIgY29tbWFuZFtQQVRIX01BWCoyXTsKIAlGSUxFICpmaWxlOworCUxJU1RfSEVBRChoZWFkKTsKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3MsICpuOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuOwogCi0JaWYgKHZlcmJvc2UpCi0JCWZwcmludGYoc3RkZXJyLCAiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSVMeCwgZW5kPSVMeFxuIiwKLQkJCV9fZnVuY19fLCBmaWxlbmFtZSwgc3ltLT5uYW1lLAotCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAotCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+ZW5kKSk7CisJcHJfZGVidWcoIiVzOiBmaWxlbmFtZT0lcywgc3ltPSVzLCBzdGFydD0lI0x4LCBlbmQ9JSNMeFxuIiwgX19mdW5jX18sCisJCSBmaWxlbmFtZSwgc3ltLT5uYW1lLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCisJCSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpKTsKIAogCWlmIChmdWxsX3BhdGhzKQogCQlkX2ZpbGVuYW1lID0gZmlsZW5hbWU7CkBAIC00MDUsNyArNDc3LDggQEAKIAkJICAgICAgIGRzbywgZHNvLT5sb25nX25hbWUsIHN5bSwgc3ltLT5uYW1lKTsKIAogCXNwcmludGYoY29tbWFuZCwgIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4IC0tc3RvcC1hZGRyZXNzPTB4JTAxNkx4IC1kUyAlc3xncmVwIC12ICVzIiwKLQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLAorCQltYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+c3RhcnQpLAorCQltYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwKIAkJZmlsZW5hbWUsIGZpbGVuYW1lKTsKIAogCWlmICh2ZXJib3NlID49IDMpCkBAIC00MTYsMTEgKzQ4OSwyMSBAQAogCQlyZXR1cm47CiAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKLQkJaWYgKHBhcnNlX2xpbmUoZmlsZSwgaGUsIGxlbikgPCAwKQorCQlpZiAocGFyc2VfbGluZShmaWxlLCBoZSwgJmhlYWQpIDwgMCkKIAkJCWJyZWFrOwogCX0KIAogCXBjbG9zZShmaWxlKTsKKworCWlmICh2ZXJib3NlKQorCQloaXN0X2VudHJ5X19wcmludF9oaXRzKGhlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZoZWFkLCBub2RlKSB7CisJCW9iamR1bXBfbGluZV9fcHJpbnQocG9zLCAmaGVhZCwgaGUsIGxlbik7CisJCWxpc3RfZGVsKCZwb3MtPm5vZGUpOworCQlvYmpkdW1wX2xpbmVfX2ZyZWUocG9zKTsKKwl9CisKIAlpZiAocHJpbnRfbGluZSkKIAkJZnJlZV9zb3VyY2VfbGluZShoZSwgbGVuKTsKIH0KQEAgLTQ1MSwxMCArNTM0LDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX21tYXBfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19tbWFwLAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfYW5ub3RhdGUodm9pZCkKQEAgLTU0Miw5ICs2MjUsOCBAQAogCXNldHVwX3BhZ2VyKCk7CiAKIAlpZiAoZmllbGRfc2VwICYmICpmaWVsZF9zZXAgPT0gJy4nKSB7Ci0JCWZwdXRzKCInLicgaXMgdGhlIG9ubHkgbm9uIHZhbGlkIC0tZmllbGQtc2VwYXJhdG9yIGFyZ3VtZW50XG4iLAotCQkJCXN0ZGVycik7Ci0JCWV4aXQoMTI5KTsKKwkJcHJfZXJyKCInLicgaXMgdGhlIG9ubHkgbm9uIHZhbGlkIC0tZmllbGQtc2VwYXJhdG9yIGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiBfX2NtZF9hbm5vdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhMDVmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBidWlsdGluLWJ1aWxkaWQtY2FjaGUuYworICoKKyAqIEJ1aWx0aW4gYnVpbGRpZC1jYWNoZSBjb21tYW5kOiBNYW5hZ2VzIGJ1aWxkLWlkIGNhY2hlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL3N0cmxpc3QuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqYWRkX25hbWVfbGlzdF9zdHIsICpyZW1vdmVfbmFtZV9saXN0X3N0cjsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsZGlkX2NhY2hlX3VzYWdlW10gPSB7CisJInBlcmYgYnVpbGRpZC1jYWNoZSBbPG9wdGlvbnM+XSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gYnVpbGRpZF9jYWNoZV9vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnYScsICJhZGQiLCAmYWRkX25hbWVfbGlzdF9zdHIsCisJCSAgICJmaWxlIGxpc3QiLCAiZmlsZShzKSB0byBhZGQiKSwKKwlPUFRfU1RSSU5HKCdyJywgInJlbW92ZSIsICZyZW1vdmVfbmFtZV9saXN0X3N0ciwgImZpbGUgbGlzdCIsCisJCSAgICAiZmlsZShzKSB0byByZW1vdmUiKSwKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsICJiZSBtb3JlIHZlcmJvc2UiKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCXU4IGJ1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOworCWludCBlcnI7CisKKwlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsICZidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKSB7CisJCXByX2RlYnVnKCJDb3VsZG4ndCByZWFkIGEgYnVpbGQtaWQgaW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLCBzYnVpbGRfaWQpOworCWVyciA9IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhzYnVpbGRfaWQsIGRlYnVnZGlyLCBmaWxlbmFtZSwgZmFsc2UpOworCWlmICh2ZXJib3NlKQorCQlwcl9pbmZvKCJBZGRpbmcgJXMgJXM6ICVzXG4iLCBzYnVpbGRfaWQsIGZpbGVuYW1lLAorCQkJZXJyID8gIkZBSUwiIDogIk9rIik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUgX191c2VkLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpkZWJ1Z2RpciBfX3VzZWQpCit7CisJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKworCWludCBlcnI7CisKKwlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsICZidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKSB7CisJCXByX2RlYnVnKCJDb3VsZG4ndCByZWFkIGEgYnVpbGQtaWQgaW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLCBzYnVpbGRfaWQpOworCWVyciA9IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhzYnVpbGRfaWQsIGRlYnVnZGlyKTsKKwlpZiAodmVyYm9zZSkKKwkJcHJfaW5mbygiUmVtb3ZpbmcgJXMgJXM6ICVzXG4iLCBzYnVpbGRfaWQsIGZpbGVuYW1lLAorCQkJZXJyID8gIkZBSUwiIDogIk9rIik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fY21kX2J1aWxkaWRfY2FjaGUodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RybGlzdCAqbGlzdDsKKwlzdHJ1Y3Qgc3RyX25vZGUgKnBvczsKKwljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMvJXMiLCBnZXRlbnYoIkhPTUUiKSwKKwkJIERFQlVHX0NBQ0hFX0RJUik7CisKKwlpZiAoYWRkX25hbWVfbGlzdF9zdHIpIHsKKwkJbGlzdCA9IHN0cmxpc3RfX25ldyh0cnVlLCBhZGRfbmFtZV9saXN0X3N0cik7CisJCWlmIChsaXN0KSB7CisJCQlzdHJsaXN0X19mb3JfZWFjaChwb3MsIGxpc3QpCisJCQkJaWYgKGJ1aWxkX2lkX2NhY2hlX19hZGRfZmlsZShwb3MtPnMsIGRlYnVnZGlyKSkgeworCQkJCQlpZiAoZXJybm8gPT0gRUVYSVNUKSB7CisJCQkJCQlwcl9kZWJ1ZygiJXMgYWxyZWFkeSBpbiB0aGUgY2FjaGVcbiIsCisJCQkJCQkJIHBvcy0+cyk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlwcl93YXJuaW5nKCJDb3VsZG4ndCBhZGQgJXM6ICVzXG4iLAorCQkJCQkJICAgcG9zLT5zLCBzdHJlcnJvcihlcnJubykpOworCQkJCX0KKworCQkJc3RybGlzdF9fZGVsZXRlKGxpc3QpOworCQl9CisJfQorCisJaWYgKHJlbW92ZV9uYW1lX2xpc3Rfc3RyKSB7CisJCWxpc3QgPSBzdHJsaXN0X19uZXcodHJ1ZSwgcmVtb3ZlX25hbWVfbGlzdF9zdHIpOworCQlpZiAobGlzdCkgeworCQkJc3RybGlzdF9fZm9yX2VhY2gocG9zLCBsaXN0KQorCQkJCWlmIChidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX2ZpbGUocG9zLT5zLCBkZWJ1Z2RpcikpIHsKKwkJCQkJaWYgKGVycm5vID09IEVOT0VOVCkgeworCQkJCQkJcHJfZGVidWcoIiVzIHdhc24ndCBpbiB0aGUgY2FjaGVcbiIsCisJCQkJCQkJIHBvcy0+cyk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlwcl93YXJuaW5nKCJDb3VsZG4ndCByZW1vdmUgJXM6ICVzXG4iLAorCQkJCQkJICAgcG9zLT5zLCBzdHJlcnJvcihlcnJubykpOworCQkJCX0KKworCQkJc3RybGlzdF9fZGVsZXRlKGxpc3QpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfYnVpbGRpZF9jYWNoZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbGRpZF9jYWNoZV9vcHRpb25zLAorCQkJICAgICBidWlsZGlkX2NhY2hlX3VzYWdlLCAwKTsKKworCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCisJCXJldHVybiAtMTsKKworCXNldHVwX3BhZ2VyKCk7CisJcmV0dXJuIF9fY21kX2J1aWxkaWRfY2FjaGUoKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwppbmRleCAxZTk5YWM4Li5kMDY3NWMwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCkBAIC04LDYgKzgsNyBAQAogICovCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgInBlcmYuaCIKKyNpbmNsdWRlICJ1dGlsL2J1aWxkLWlkLmgiCiAjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKQEAgLTE2LDYgKzE3LDcgQEAKIAogc3RhdGljIGNoYXIgY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIHN0YXRpYyBpbnQgZm9yY2U7CitzdGF0aWMgYm9vbCB3aXRoX2hpdHM7CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbGRpZF9saXN0X3VzYWdlW10gPSB7CiAJInBlcmYgYnVpbGRpZC1saXN0IFs8b3B0aW9ucz5dIiwKQEAgLTIzLDYgKzI1LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTEVBTignSCcsICJ3aXRoLWhpdHMiLCAmd2l0aF9oaXRzLCAiU2hvdyBvbmx5IERTT3Mgd2l0aCBoaXRzIiksCiAJT1BUX1NUUklORygnaScsICJpbnB1dCIsICZpbnB1dF9uYW1lLCAiZmlsZSIsCiAJCSAgICAiaW5wdXQgZmlsZSBuYW1lIiksCiAJT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAmZm9yY2UsICJkb24ndCBjb21wbGFpbiwgZG8gaXQiKSwKQEAgLTMxLDI2ICszNCw2IEBACiAJT1BUX0VORCgpCiB9OwogCi1zdGF0aWMgaW50IHBlcmZfZmlsZV9zZWN0aW9uX19wcm9jZXNzX2J1aWxkaWRzKHN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VsZiwKLQkJCQkJICAgICAgIGludCBmZWF0LCBpbnQgZmQpCi17Ci0JaWYgKGZlYXQgIT0gSEVBREVSX0JVSUxEX0lEKQotCQlyZXR1cm4gMDsKLQotCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSB7Ci0JCXByX3dhcm5pbmcoIkZhaWxlZCB0byBsc2VlayB0byAlTGQgb2Zmc2V0IGZvciBidWlsZGlkcyFcbiIsCi0JCQkgICBzZWxmLT5vZmZzZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhmZCwgc2VsZi0+b2Zmc2V0LCBzZWxmLT5zaXplKSkgewotCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gcmVhZCBidWlsZGlkcyFcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19jbWRfYnVpbGRpZF9saXN0KHZvaWQpCiB7CiAJaW50IGVyciA9IC0xOwpAQCAtNjAsMTAgKzQzLDEwIEBACiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JZXJyID0gcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoJnNlc3Npb24tPmhlYWRlciwgc2Vzc2lvbi0+ZmQsCi0JCQkJICAgICAgICAgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3NfYnVpbGRpZHMpOwotCWlmIChlcnIgPj0gMCkKLQkJZHNvc19fZnByaW50Zl9idWlsZGlkKHN0ZG91dCk7CisJaWYgKHdpdGhfaGl0cykKKwkJcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOworCisJZHNvc19fZnByaW50Zl9idWlsZGlkKHN0ZG91dCwgd2l0aF9oaXRzKTsKIAogCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwppbmRleCBiZDcxYjhjLi4xOGIzZjUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTQyLDggKzQyLDggQEAKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YSA9IHsgLnBlcmlvZCA9IDEsIH07CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlcFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZXZlbnQtPmlwLnBpZCwgKHZvaWQgKikobG9uZylldmVudC0+aXAuaXApOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICUjTHhcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC5pcCk7CiAKIAlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIE5VTEwpIDwgMCkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKQEAgLTUxLDEyICs1MSwxMiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKGFsLmZpbHRlcmVkKQorCWlmIChhbC5maWx0ZXJlZCB8fCBhbC5zeW0gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwogCi0JaWYgKGFsLnN5bSAmJiBwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlc3Npb24sICZhbCwgZGF0YS5wZXJpb2QpKSB7CisJaWYgKHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCBkYXRhLnBlcmlvZCkpIHsKIAkJcHJfd2FybmluZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCBza2lwcGluZyBldmVudFxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC02NiwxMiArNjYsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnByb2Nlc3Nfc2FtcGxlX2V2ZW50ID0gZGlmZl9fcHJvY2Vzc19zYW1wbGVfZXZlbnQsCi0JLnByb2Nlc3NfbW1hcF9ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKLQkucHJvY2Vzc19jb21tX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2V4aXRfZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCi0JLnByb2Nlc3NfZm9ya19ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19sb3N0X2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19sb3N0LAorCS5zYW1wbGUJPSBkaWZmX19wcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5leGl0CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkuZm9yawk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCisJLmxvc3QJPSBldmVudF9fcHJvY2Vzc19sb3N0LAogfTsKIAogc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19pbnNlcnRfaGlzdF9lbnRyeV9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpyb290LApAQCAtODIsMjkgKzgyLDE5IEBACiAJc3RydWN0IGhpc3RfZW50cnkgKml0ZXI7CiAKIAl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlpbnQgY21wOwogCQlwYXJlbnQgPSAqcDsKIAkJaXRlciA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCi0JCWNtcCA9IHN0cmNtcChoZS0+bWFwLT5kc28tPm5hbWUsIGl0ZXItPm1hcC0+ZHNvLT5uYW1lKTsKLQkJaWYgKGNtcCA+IDApCisJCWlmIChoaXN0X2VudHJ5X19jbXAoaGUsIGl0ZXIpIDwgMCkKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoY21wIDwgMCkKKwkJZWxzZQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKLQkJZWxzZSB7Ci0JCQljbXAgPSBzdHJjbXAoaGUtPnN5bS0+bmFtZSwgaXRlci0+c3ltLT5uYW1lKTsKLQkJCWlmIChjbXAgPiAwKQotCQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJCWVsc2UKLQkJCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCQl9CiAJfQogCiAJcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCByb290KTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19yZXNvcnRfYnlfbmFtZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19yZXNvcnRfaGlzdF9lbnRyaWVzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3NpdGlvbiA9IDE7CiAJc3RydWN0IHJiX3Jvb3QgdG1wID0gUkJfUk9PVDsKQEAgLTEyMiwyOSArMTEyLDI4IEBACiAJc2VsZi0+aGlzdHMgPSB0bXA7CiB9CiAKK3N0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fc2V0X2hpc3RfZW50cmllc19wb3NpdGlvbnMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3sKKwlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2VsZiwgc2VsZi0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKKwlwZXJmX3Nlc3Npb25fX3Jlc29ydF9oaXN0X2VudHJpZXMoc2VsZik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaGlzdF9lbnRyeSAqCi1wZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeV9ieV9uYW1lKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCi0JCQkJICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlKQorcGVyZl9zZXNzaW9uX19maW5kX2hpc3RfZW50cnkoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCSAgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHNlbGYtPmhpc3RzLnJiX25vZGU7CiAKIAl3aGlsZSAobikgewogCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaXRlciA9IHJiX2VudHJ5KG4sIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQkJaW50IGNtcCA9IHN0cmNtcChoZS0+bWFwLT5kc28tPm5hbWUsIGl0ZXItPm1hcC0+ZHNvLT5uYW1lKTsKKwkJaW50NjRfdCBjbXAgPSBoaXN0X2VudHJ5X19jbXAoaGUsIGl0ZXIpOwogCi0JCWlmIChjbXAgPiAwKQorCQlpZiAoY21wIDwgMCkKIAkJCW4gPSBuLT5yYl9sZWZ0OwotCQllbHNlIGlmIChjbXAgPCAwKQorCQllbHNlIGlmIChjbXAgPiAwKQogCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQllbHNlIHsKLQkJCWNtcCA9IHN0cmNtcChoZS0+c3ltLT5uYW1lLCBpdGVyLT5zeW0tPm5hbWUpOwotCQkJaWYgKGNtcCA+IDApCi0JCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCQllbHNlIGlmIChjbXAgPCAwKQotCQkJCW4gPSBuLT5yYl9yaWdodDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gaXRlcjsKLQkJfQorCQllbHNlIAorCQkJcmV0dXJuIGl0ZXI7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC0xNTUsMTEgKzE0NCw5IEBACiB7CiAJc3RydWN0IHJiX25vZGUgKm5kOwogCi0JcGVyZl9zZXNzaW9uX19yZXNvcnRfYnlfbmFtZShvbGRfc2Vzc2lvbik7Ci0KIAlmb3IgKG5kID0gcmJfZmlyc3QoJm5ld19zZXNzaW9uLT5oaXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBoaXN0X2VudHJ5ICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQlwb3MtPnBhaXIgPSBwZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeV9ieV9uYW1lKG9sZF9zZXNzaW9uLCBwb3MpOworCQlwb3MtPnBhaXIgPSBwZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeShvbGRfc2Vzc2lvbiwgcG9zKTsKIAl9CiB9CiAKQEAgLTE3Nyw5ICsxNjQsMTIgQEAKIAkJcmV0ID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uW2ldLCAmZXZlbnRfb3BzKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2RlbGV0ZTsKLQkJcGVyZl9zZXNzaW9uX19vdXRwdXRfcmVzb3J0KHNlc3Npb25baV0sIHNlc3Npb25baV0tPmV2ZW50c19zdGF0cy50b3RhbCk7CiAJfQogCisJcGVyZl9zZXNzaW9uX19vdXRwdXRfcmVzb3J0KHNlc3Npb25bMV0sIHNlc3Npb25bMV0tPmV2ZW50c19zdGF0cy50b3RhbCk7CisJaWYgKHNob3dfZGlzcGxhY2VtZW50KQorCQlwZXJmX3Nlc3Npb25fX3NldF9oaXN0X2VudHJpZXNfcG9zaXRpb25zKHNlc3Npb25bMF0pOworCiAJcGVyZl9zZXNzaW9uX19tYXRjaF9oaXN0cyhzZXNzaW9uWzBdLCBzZXNzaW9uWzFdKTsKIAlwZXJmX3Nlc3Npb25fX2ZwcmludGZfaGlzdHMoc2Vzc2lvblsxXSwgc2Vzc2lvblswXSwKIAkJCQkgICAgc2hvd19kaXNwbGFjZW1lbnQsIHN0ZG91dCk7CkBAIC0yMDQsNyArMTk0LDcgQEAKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAogCU9QVF9CT09MRUFOKCdtJywgIm1vZHVsZXMiLCAmc3ltYm9sX2NvbmYudXNlX21vZHVsZXMsCiAJCSAgICAibG9hZCBtb2R1bGUgc3ltYm9scyAtIFdBUk5JTkc6IHVzZSBvbmx5IHdpdGggLWsgYW5kIExJVkUga2VybmVsIiksCi0JT1BUX0JPT0xFQU4oJ1AnLCAiZnVsbC1wYXRocyIsICZldmVudF9vcHMuZnVsbF9wYXRocywKKwlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJnN5bWJvbF9jb25mLmZ1bGxfcGF0aHMsCiAJCSAgICAiRG9uJ3Qgc2hvcnRlbiB0aGUgcGF0aG5hbWVzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGN3ZCIpLAogCU9QVF9TVFJJTkcoJ2QnLCAiZHNvcyIsICZzeW1ib2xfY29uZi5kc29fbGlzdF9zdHIsICJkc29bLGRzby4uLl0iLAogCQkgICAib25seSBjb25zaWRlciBzeW1ib2xzIGluIHRoZXNlIGRzb3MiKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMgYi90b29scy9wZXJmL2J1aWx0aW4taGVscC5jCmluZGV4IDlmODEwYjEuLjIxNWI1ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYwpAQCAtMjg2LDggKzI4Niw3IEBACiAKIAlwdXRzKCIgVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBwZXJmIGNvbW1hbmRzIGFyZToiKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25fY21kcyk7IGkrKykgewotCQlwcmludGYoIiAgICVzICAgIiwgY29tbW9uX2NtZHNbaV0ubmFtZSk7Ci0JCW1wdXRfY2hhcignICcsIGxvbmdlc3QgLSBzdHJsZW4oY29tbW9uX2NtZHNbaV0ubmFtZSkpOworCQlwcmludGYoIiAgICUtKnMgICAiLCBsb25nZXN0LCBjb21tb25fY21kc1tpXS5uYW1lKTsKIAkJcHV0cyhjb21tb25fY21kc1tpXS5oZWxwKTsKIAl9CiB9CkBAIC0zMTQsOCArMzEzLDYgQEAKIAkJcmV0dXJuICJwZXJmIjsKIAllbHNlIGlmICghcHJlZml4Y21wKHBlcmZfY21kLCAicGVyZiIpKQogCQlyZXR1cm4gcGVyZl9jbWQ7Ci0JZWxzZSBpZiAoaXNfcGVyZl9jb21tYW5kKHBlcmZfY21kKSkKLQkJcmV0dXJuIHByZXBlbmQoInBlcmYtIiwgcGVyZl9jbWQpOwogCWVsc2UKIAkJcmV0dXJuIHByZXBlbmQoInBlcmYtIiwgcGVyZl9jbWQpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKaW5kZXggOTNjNjdiZi4uOTI0YTk1MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCkBAIC05MiwyMyArOTIsMTggQEAKIAlpZiAoIWRpcjEpCiAJCXJldHVybjsKIAotCXdoaWxlICh0cnVlKSB7Ci0JCWRlbnQxID0gcmVhZGRpcihkaXIxKTsKLQkJaWYgKCFkZW50MSkKLQkJCWJyZWFrOwotCi0JCWlmIChzc2NhbmYoZGVudDEtPmRfbmFtZSwgIm5vZGUldSIsICZtZW0pIDwgMSkKKwl3aGlsZSAoKGRlbnQxID0gcmVhZGRpcihkaXIxKSkgIT0gTlVMTCkgeworCQlpZiAoZGVudDEtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHNzY2FuZihkZW50MS0+ZF9uYW1lLCAibm9kZSV1IiwgJm1lbSkgPCAxKQogCQkJY29udGludWU7CiAKIAkJc25wcmludGYoYnVmLCBQQVRIX01BWCwgIiVzLyVzIiwgUEFUSF9TWVNfTk9ERSwgZGVudDEtPmRfbmFtZSk7CiAJCWRpcjIgPSBvcGVuZGlyKGJ1Zik7CiAJCWlmICghZGlyMikKIAkJCWNvbnRpbnVlOwotCQl3aGlsZSAodHJ1ZSkgewotCQkJZGVudDIgPSByZWFkZGlyKGRpcjIpOwotCQkJaWYgKCFkZW50MikKLQkJCQlicmVhazsKLQkJCWlmIChzc2NhbmYoZGVudDItPmRfbmFtZSwgImNwdSV1IiwgJmNwdSkgPCAxKQorCQl3aGlsZSAoKGRlbnQyID0gcmVhZGRpcihkaXIyKSkgIT0gTlVMTCkgeworCQkJaWYgKGRlbnQyLT5kX3R5cGUgIT0gRFRfTE5LIHx8CisJCQkgICAgc3NjYW5mKGRlbnQyLT5kX25hbWUsICJjcHUldSIsICZjcHUpIDwgMSkKIAkJCQljb250aW51ZTsKIAkJCWNwdW5vZGVfbWFwW2NwdV0gPSBtZW07CiAJCX0KQEAgLTMyMSwxMSArMzE2LDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CkBAIC0zNDIsMjIgKzMzNCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2soc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiTm8gdHJhY2Ugc2FtcGxlIHRvIHJlYWQuIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCAiCi0JCQkid2l0aG91dCAtUj8iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKLQkuc2FtcGxlX3R5cGVfY2hlY2sJPSBzYW1wbGVfdHlwZV9jaGVjaywKKwkuc2FtcGxlCT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAogfTsKIAogc3RhdGljIGRvdWJsZSBmcmFnbWVudGF0aW9uKHVuc2lnbmVkIGxvbmcgbl9yZXEsIHVuc2lnbmVkIGxvbmcgbl9hbGxvYykKQEAgLTM5MCw3ICszNjksNyBAQAogCQlpZiAoaXNfY2FsbGVyKSB7CiAJCQlhZGRyID0gZGF0YS0+Y2FsbF9zaXRlOwogCQkJaWYgKCFyYXdfaXApCi0JCQkJc3ltID0gbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbigmc2Vzc2lvbi0+a21hcHMsIHNlc3Npb24sIGFkZHIsIE5VTEwpOworCQkJCXN5bSA9IG1hcF9ncm91cHNfX2ZpbmRfZnVuY3Rpb24oJnNlc3Npb24tPmttYXBzLCBhZGRyLCBOVUxMKTsKIAkJfSBlbHNlCiAJCQlhZGRyID0gZGF0YS0+cHRyOwogCkBAIC01MDQsMTEgKzQ4MywxNCBAQAogCiBzdGF0aWMgaW50IF9fY21kX2ttZW0odm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAia21lbSByZWNvcmQiKSkKKwkJZ290byBvdXRfZGVsZXRlOworCiAJc2V0dXBfcGFnZXIoKTsKIAllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChlcnIgIT0gMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWFiMmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCkBAIC0wLDAgKzEsNjc4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBlcmYuaCIKKworI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCisjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKworI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWwvdHJhY2UtZXZlbnQuaCIKKworI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorCisvKiBiYXNlZCBvbiBrZXJuZWwvbG9ja2RlcC5jICovCisjZGVmaW5lIExPQ0tIQVNIX0JJVFMJCTEyCisjZGVmaW5lIExPQ0tIQVNIX1NJWkUJCSgxVUwgPDwgTE9DS0hBU0hfQklUUykKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbG9ja2hhc2hfdGFibGVbTE9DS0hBU0hfU0laRV07CisKKyNkZWZpbmUgX19sb2NraGFzaGZuKGtleSkJaGFzaF9sb25nKCh1bnNpZ25lZCBsb25nKWtleSwgTE9DS0hBU0hfQklUUykKKyNkZWZpbmUgbG9ja2hhc2hlbnRyeShrZXkpCShsb2NraGFzaF90YWJsZSArIF9fbG9ja2hhc2hmbigoa2V5KSkpCisKKyNkZWZpbmUgTE9DS19TVEFURV9VTkxPQ0tFRAkwCSAgICAgICAvKiBpbml0aWFsIHN0YXRlICovCisjZGVmaW5lIExPQ0tfU1RBVEVfTE9DS0VECTEKKworc3RydWN0IGxvY2tfc3RhdCB7CisJc3RydWN0IGxpc3RfaGVhZAloYXNoX2VudHJ5OworCXN0cnVjdCByYl9ub2RlCQlyYjsJCS8qIHVzZWQgZm9yIHNvcnRpbmcgKi8KKworCS8qCisJICogRklYTUU6IHJhd19maWVsZF92YWx1ZSgpIHJldHVybnMgdW5zaWduZWQgbG9uZyBsb25nLAorCSAqIHNvIGFkZHJlc3Mgb2YgbG9ja2RlcF9tYXAgc2hvdWxkIGJlIGRlYWxlZCBhcyA2NGJpdC4KKwkgKiBJcyB0aGVyZSBtb3JlIGJldHRlciBzb2x1dGlvbj8KKwkgKi8KKwl2b2lkCQkJKmFkZHI7CQkvKiBhZGRyZXNzIG9mIGxvY2tkZXBfbWFwLCB1c2VkIGFzIElEICovCisJY2hhcgkJCSpuYW1lOwkJLyogZm9yIHN0cmNweSgpLCB3ZSBjYW5ub3QgdXNlIGNvbnN0ICovCisKKwlpbnQJCQlzdGF0ZTsKKwl1NjQJCQlwcmV2X2V2ZW50X3RpbWU7IC8qIHRpbWVzdGFtcCBvZiBwcmV2aW91cyBldmVudCAqLworCisJdW5zaWduZWQgaW50CQlucl9hY3F1aXJlZDsKKwl1bnNpZ25lZCBpbnQJCW5yX2FjcXVpcmU7CisJdW5zaWduZWQgaW50CQlucl9jb250ZW5kZWQ7CisJdW5zaWduZWQgaW50CQlucl9yZWxlYXNlOworCisJLyogdGhlc2UgdGltZXMgYXJlIGluIG5hbm8gc2VjLiAqLworCXU2NAkJCXdhaXRfdGltZV90b3RhbDsKKwl1NjQJCQl3YWl0X3RpbWVfbWluOworCXU2NAkJCXdhaXRfdGltZV9tYXg7Cit9OworCisvKiBidWlsZCBzaW1wbGUga2V5IGZ1bmN0aW9uIG9uZSBpcyBiaWdnZXIgdGhhbiB0d28gKi8KKyNkZWZpbmUgU0lOR0xFX0tFWShtZW1iZXIpCQkJCQkJXAorCXN0YXRpYyBpbnQgbG9ja19zdGF0X2tleV8gIyMgbWVtYmVyKHN0cnVjdCBsb2NrX3N0YXQgKm9uZSwJXAorCQkJCQkgc3RydWN0IGxvY2tfc3RhdCAqdHdvKQkJXAorCXsJCQkJCQkJCVwKKwkJcmV0dXJuIG9uZS0+bWVtYmVyID4gdHdvLT5tZW1iZXI7CQkJXAorCX0KKworU0lOR0xFX0tFWShucl9hY3F1aXJlZCkKK1NJTkdMRV9LRVkobnJfY29udGVuZGVkKQorU0lOR0xFX0tFWSh3YWl0X3RpbWVfdG90YWwpCitTSU5HTEVfS0VZKHdhaXRfdGltZV9taW4pCitTSU5HTEVfS0VZKHdhaXRfdGltZV9tYXgpCisKK3N0cnVjdCBsb2NrX2tleSB7CisJLyoKKwkgKiBuYW1lOiB0aGUgdmFsdWUgZm9yIHNwZWNpZnkgYnkgdXNlcgorCSAqIHRoaXMgc2hvdWxkIGJlIHNpbXBsZXIgdGhhbiByYXcgbmFtZSBvZiBtZW1iZXIKKwkgKiBlLmcuIG5yX2FjcXVpcmVkIC0+IGFjcXVpcmVkLCB3YWl0X3RpbWVfdG90YWwgLT4gd2FpdF90b3RhbAorCSAqLworCWNvbnN0IGNoYXIJCSpuYW1lOworCWludAkJCSgqa2V5KShzdHJ1Y3QgbG9ja19zdGF0Kiwgc3RydWN0IGxvY2tfc3RhdCopOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIJCSpzb3J0X2tleSA9ICJhY3F1aXJlZCI7CisKK3N0YXRpYyBpbnQJCQkoKmNvbXBhcmUpKHN0cnVjdCBsb2NrX3N0YXQgKiwgc3RydWN0IGxvY2tfc3RhdCAqKTsKKworc3RhdGljIHN0cnVjdCByYl9yb290CQlyZXN1bHQ7CS8qIHBsYWNlIHRvIHN0b3JlIHNvcnRlZCBkYXRhICovCisKKyNkZWZpbmUgREVGX0tFWV9MT0NLKG5hbWUsIGZuX3N1ZmZpeCkJXAorCXsgI25hbWUsIGxvY2tfc3RhdF9rZXlfICMjIGZuX3N1ZmZpeCB9CitzdHJ1Y3QgbG9ja19rZXkga2V5c1tdID0geworCURFRl9LRVlfTE9DSyhhY3F1aXJlZCwgbnJfYWNxdWlyZWQpLAorCURFRl9LRVlfTE9DSyhjb250ZW5kZWQsIG5yX2NvbnRlbmRlZCksCisJREVGX0tFWV9MT0NLKHdhaXRfdG90YWwsIHdhaXRfdGltZV90b3RhbCksCisJREVGX0tFWV9MT0NLKHdhaXRfbWluLCB3YWl0X3RpbWVfbWluKSwKKwlERUZfS0VZX0xPQ0sod2FpdF9tYXgsIHdhaXRfdGltZV9tYXgpLAorCisJLyogZXh0cmEgY29tcGFyaXNvbnMgbXVjaCBjb21wbGljYXRlZCBzaG91bGQgYmUgaGVyZSAqLworCisJeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyB2b2lkIHNlbGVjdF9rZXkodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGtleXNbaV0ubmFtZTsgaSsrKSB7CisJCWlmICghc3RyY21wKGtleXNbaV0ubmFtZSwgc29ydF9rZXkpKSB7CisJCQljb21wYXJlID0ga2V5c1tpXS5rZXk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlkaWUoIlVua25vd24gY29tcGFyZSBrZXk6JXNcbiIsIHNvcnRfa2V5KTsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X3RvX3Jlc3VsdChzdHJ1Y3QgbG9ja19zdGF0ICpzdCwKKwkJCSAgICAgaW50ICgqYmlnZ2VyKShzdHJ1Y3QgbG9ja19zdGF0ICosIHN0cnVjdCBsb2NrX3N0YXQgKikpCit7CisJc3RydWN0IHJiX25vZGUgKipyYiA9ICZyZXN1bHQucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgbG9ja19zdGF0ICpwOworCisJd2hpbGUgKCpyYikgeworCQlwID0gY29udGFpbmVyX29mKCpyYiwgc3RydWN0IGxvY2tfc3RhdCwgcmIpOworCQlwYXJlbnQgPSAqcmI7CisKKwkJaWYgKGJpZ2dlcihzdCwgcCkpCisJCQlyYiA9ICYoKnJiKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcmIgPSAmKCpyYiktPnJiX3JpZ2h0OworCX0KKworCXJiX2xpbmtfbm9kZSgmc3QtPnJiLCBwYXJlbnQsIHJiKTsKKwlyYl9pbnNlcnRfY29sb3IoJnN0LT5yYiwgJnJlc3VsdCk7Cit9CisKKy8qIHJldHVybnMgbGVmdCBtb3N0IGVsZW1lbnQgb2YgcmVzdWx0LCBhbmQgZXJhc2UgaXQgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19zdGF0ICpwb3BfZnJvbV9yZXN1bHQodm9pZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHJlc3VsdC5yYl9ub2RlOworCisJaWYgKCFub2RlKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlIChub2RlLT5yYl9sZWZ0KQorCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKworCXJiX2VyYXNlKG5vZGUsICZyZXN1bHQpOworCXJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGxvY2tfc3RhdCwgcmIpOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfc3RhdCAqbG9ja19zdGF0X2ZpbmRuZXcodm9pZCAqYWRkciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9IGxvY2toYXNoZW50cnkoYWRkcik7CisJc3RydWN0IGxvY2tfc3RhdCAqcmV0LCAqbmV3OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXQsIGVudHJ5LCBoYXNoX2VudHJ5KSB7CisJCWlmIChyZXQtPmFkZHIgPT0gYWRkcikKKwkJCXJldHVybiByZXQ7CisJfQorCisJbmV3ID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgbG9ja19zdGF0KSk7CisJaWYgKCFuZXcpCisJCWdvdG8gYWxsb2NfZmFpbGVkOworCisJbmV3LT5hZGRyID0gYWRkcjsKKwluZXctPm5hbWUgPSB6YWxsb2Moc2l6ZW9mKGNoYXIpICogc3RybGVuKG5hbWUpICsgMSk7CisJaWYgKCFuZXctPm5hbWUpCisJCWdvdG8gYWxsb2NfZmFpbGVkOworCXN0cmNweShuZXctPm5hbWUsIG5hbWUpOworCisJLyogTE9DS19TVEFURV9VTkxPQ0tFRCA9PSAwIGlzbid0IGd1YXJhbnRlZWQgZm9yZXZlciAqLworCW5ldy0+c3RhdGUgPSBMT0NLX1NUQVRFX1VOTE9DS0VEOworCW5ldy0+d2FpdF90aW1lX21pbiA9IFVMTE9OR19NQVg7CisKKwlsaXN0X2FkZCgmbmV3LT5oYXNoX2VudHJ5LCBlbnRyeSk7CisJcmV0dXJuIG5ldzsKKworYWxsb2NfZmFpbGVkOgorCWRpZSgibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKK30KKworc3RhdGljIGNoYXIJCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOworCitzdGF0aWMgaW50CQkJcHJvZmlsZV9jcHUgPSAtMTsKKworc3RydWN0IHJhd19ldmVudF9zYW1wbGUgeworCXUzMgkJCXNpemU7CisJY2hhcgkJCWRhdGFbMF07Cit9OworCitzdHJ1Y3QgdHJhY2VfYWNxdWlyZV9ldmVudCB7CisJdm9pZAkJCSphZGRyOworCWNvbnN0IGNoYXIJCSpuYW1lOworfTsKKworc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfcmVsZWFzZV9ldmVudCB7CisJdm9pZAkJCSphZGRyOworCWNvbnN0IGNoYXIJCSpuYW1lOworfTsKKworc3RydWN0IHRyYWNlX2xvY2tfaGFuZGxlciB7CisJdm9pZCAoKmFjcXVpcmVfZXZlbnQpKHN0cnVjdCB0cmFjZV9hY3F1aXJlX2V2ZW50ICosCisJCQkgICAgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgICAgIGludCBjcHUsCisJCQkgICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCphY3F1aXJlZF9ldmVudCkoc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50ICosCisJCQkgICAgICAgc3RydWN0IGV2ZW50ICosCisJCQkgICAgICAgaW50IGNwdSwKKwkJCSAgICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqY29udGVuZGVkX2V2ZW50KShzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50ICosCisJCQkJc3RydWN0IGV2ZW50ICosCisJCQkJaW50IGNwdSwKKwkJCQl1NjQgdGltZXN0YW1wLAorCQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqcmVsZWFzZV9ldmVudCkoc3RydWN0IHRyYWNlX3JlbGVhc2VfZXZlbnQgKiwKKwkJCSAgICAgIHN0cnVjdCBldmVudCAqLAorCQkJICAgICAgaW50IGNwdSwKKwkJCSAgICAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworfTsKKworc3RhdGljIHZvaWQKK3JlcG9ydF9sb2NrX2FjcXVpcmVfZXZlbnQoc3RydWN0IHRyYWNlX2FjcXVpcmVfZXZlbnQgKmFjcXVpcmVfZXZlbnQsCisJCQlzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkJaW50IGNwdSBfX3VzZWQsCisJCQl1NjQgdGltZXN0YW1wLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcoYWNxdWlyZV9ldmVudC0+YWRkciwgYWNxdWlyZV9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCQlicmVhazsKKwl9CisKKwlzdC0+cHJldl9ldmVudF90aW1lID0gdGltZXN0YW1wOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0X2xvY2tfYWNxdWlyZWRfZXZlbnQoc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50ICphY3F1aXJlZF9ldmVudCwKKwkJCSBzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkJIGludCBjcHUgX191c2VkLAorCQkJIHU2NCB0aW1lc3RhbXAsCisJCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcoYWNxdWlyZWRfZXZlbnQtPmFkZHIsIGFjcXVpcmVkX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlzdC0+c3RhdGUgPSBMT0NLX1NUQVRFX0xPQ0tFRDsKKwkJc3QtPm5yX2FjcXVpcmVkKys7CisJCWJyZWFrOworCWNhc2UgTE9DS19TVEFURV9MT0NLRUQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQorCisJc3QtPnByZXZfZXZlbnRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworc3RhdGljIHZvaWQKK3JlcG9ydF9sb2NrX2NvbnRlbmRlZF9ldmVudChzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50ICpjb250ZW5kZWRfZXZlbnQsCisJCQkgIHN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCisJCQkgIGludCBjcHUgX191c2VkLAorCQkJICB1NjQgdGltZXN0YW1wLAorCQkJICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhjb250ZW5kZWRfZXZlbnQtPmFkZHIsIGNvbnRlbmRlZF9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJc3QtPm5yX2NvbnRlbmRlZCsrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUdfT04oMSk7CisJCWJyZWFrOworCX0KKworCXN0LT5wcmV2X2V2ZW50X3RpbWUgPSB0aW1lc3RhbXA7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRfbG9ja19yZWxlYXNlX2V2ZW50KHN0cnVjdCB0cmFjZV9yZWxlYXNlX2V2ZW50ICpyZWxlYXNlX2V2ZW50LAorCQkJc3RydWN0IGV2ZW50ICpfX2V2ZW50IF9fdXNlZCwKKwkJCWludCBjcHUgX191c2VkLAorCQkJdTY0IHRpbWVzdGFtcCwKKwkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisJdTY0IGhvbGRfdGltZTsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcocmVsZWFzZV9ldmVudC0+YWRkciwgcmVsZWFzZV9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJc3QtPnN0YXRlID0gTE9DS19TVEFURV9VTkxPQ0tFRDsKKwkJaG9sZF90aW1lID0gdGltZXN0YW1wIC0gc3QtPnByZXZfZXZlbnRfdGltZTsKKworCQlpZiAodGltZXN0YW1wIDwgc3QtPnByZXZfZXZlbnRfdGltZSkgeworCQkJLyogdGVycmlibHksIHRoaXMgY2FuIGhhcHBlbi4uLiAqLworCQkJZ290byBlbmQ7CisJCX0KKworCQlpZiAoc3QtPndhaXRfdGltZV9taW4gPiBob2xkX3RpbWUpCisJCQlzdC0+d2FpdF90aW1lX21pbiA9IGhvbGRfdGltZTsKKwkJaWYgKHN0LT53YWl0X3RpbWVfbWF4IDwgaG9sZF90aW1lKQorCQkJc3QtPndhaXRfdGltZV9tYXggPSBob2xkX3RpbWU7CisJCXN0LT53YWl0X3RpbWVfdG90YWwgKz0gaG9sZF90aW1lOworCisJCXN0LT5ucl9yZWxlYXNlKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQorCitlbmQ6CisJc3QtPnByZXZfZXZlbnRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworLyogbG9jayBvcmllbnRlZCBoYW5kbGVycyAqLworLyogVE9ETzogaGFuZGxlcnMgZm9yIENQVSBvcmllbnRlZCwgdGhyZWFkIG9yaWVudGVkICovCitzdGF0aWMgc3RydWN0IHRyYWNlX2xvY2tfaGFuZGxlciByZXBvcnRfbG9ja19vcHMgID0geworCS5hY3F1aXJlX2V2ZW50CQk9IHJlcG9ydF9sb2NrX2FjcXVpcmVfZXZlbnQsCisJLmFjcXVpcmVkX2V2ZW50CQk9IHJlcG9ydF9sb2NrX2FjcXVpcmVkX2V2ZW50LAorCS5jb250ZW5kZWRfZXZlbnQJPSByZXBvcnRfbG9ja19jb250ZW5kZWRfZXZlbnQsCisJLnJlbGVhc2VfZXZlbnQJCT0gcmVwb3J0X2xvY2tfcmVsZWFzZV9ldmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfbG9ja19oYW5kbGVyICp0cmFjZV9oYW5kbGVyOworCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX2FjcXVpcmVfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX2FjcXVpcmVfZXZlbnQgYWNxdWlyZV9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZhY3F1aXJlX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwlhY3F1aXJlX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCgmYWNxdWlyZV9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX2FjcXVpcmVkX2V2ZW50KHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgYWNxdWlyZWRfZXZlbnQ7CisJdTY0IHRtcDsJCS8qIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGNhc3RpbmcuLi4gKi8KKworCXRtcCA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImxvY2tkZXBfYWRkciIsIGRhdGEpOworCW1lbWNweSgmYWNxdWlyZWRfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCWFjcXVpcmVkX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+YWNxdWlyZWRfZXZlbnQoJmFjcXVpcmVkX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfY29udGVuZGVkX2V2ZW50KHZvaWQgKmRhdGEsCisJCQkgICAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX2NvbnRlbmRlZF9ldmVudCBjb250ZW5kZWRfZXZlbnQ7CisJdTY0IHRtcDsJCS8qIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGNhc3RpbmcuLi4gKi8KKworCXRtcCA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImxvY2tkZXBfYWRkciIsIGRhdGEpOworCW1lbWNweSgmY29udGVuZGVkX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwljb250ZW5kZWRfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5jb250ZW5kZWRfZXZlbnQoJmNvbnRlbmRlZF9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX3JlbGVhc2VfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX3JlbGVhc2VfZXZlbnQgcmVsZWFzZV9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZyZWxlYXNlX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwlyZWxlYXNlX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+cmVsZWFzZV9ldmVudCgmcmVsZWFzZV9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19yYXdfZXZlbnQodm9pZCAqZGF0YSwgaW50IGNwdSwKKwkJICB1NjQgdGltZXN0YW1wLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJc3RydWN0IGV2ZW50ICpldmVudDsKKwlpbnQgdHlwZTsKKworCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShkYXRhKTsKKwlldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfYWNxdWlyZSIpKQorCQlwcm9jZXNzX2xvY2tfYWNxdWlyZV9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJsb2NrX2FjcXVpcmVkIikpCisJCXByb2Nlc3NfbG9ja19hY3F1aXJlZF9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJsb2NrX2NvbnRlbmRlZCIpKQorCQlwcm9jZXNzX2xvY2tfY29udGVuZGVkX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfcmVsZWFzZSIpKQorCQlwcm9jZXNzX2xvY2tfcmVsZWFzZV9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhOworCisJYnplcm8oJmRhdGEsIHNpemVvZihzdHJ1Y3Qgc2FtcGxlX2RhdGEpKTsKKwlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOworCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBkYXRhLnBpZCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwpIHsKKwkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJIGV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKKworCWlmIChwcm9maWxlX2NwdSAhPSAtMSAmJiBwcm9maWxlX2NwdSAhPSAoaW50KSBkYXRhLmNwdSkKKwkJcmV0dXJuIDA7CisKKwlwcm9jZXNzX3Jhd19ldmVudChkYXRhLnJhd19kYXRhLCBkYXRhLmNwdSwgZGF0YS50aW1lLCB0aHJlYWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE86IHZhcmlvdXMgd2F5IHRvIHByaW50LCBjb2xvcmluZywgbmFubyBvciBtaWxsaSBzZWMgKi8KK3N0YXRpYyB2b2lkIHByaW50X3Jlc3VsdCh2b2lkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCWNoYXIgY3V0X25hbWVbMjBdOworCisJcHJpbnRmKCIlMThzICIsICJJRCIpOworCXByaW50ZigiJTIwcyAiLCAiTmFtZSIpOworCXByaW50ZigiJTEwcyAiLCAiYWNxdWlyZWQiKTsKKwlwcmludGYoIiUxMHMgIiwgImNvbnRlbmRlZCIpOworCisJcHJpbnRmKCIlMTVzICIsICJ0b3RhbCB3YWl0IChucykiKTsKKwlwcmludGYoIiUxNXMgIiwgIm1heCB3YWl0IChucykiKTsKKwlwcmludGYoIiUxNXMgIiwgIm1pbiB3YWl0IChucykiKTsKKworCXByaW50ZigiXG5cbiIpOworCisJd2hpbGUgKChzdCA9IHBvcF9mcm9tX3Jlc3VsdCgpKSkgeworCQliemVybyhjdXRfbmFtZSwgMjApOworCisJCXByaW50ZigiJXAgIiwgc3QtPmFkZHIpOworCisJCWlmIChzdHJsZW4oc3QtPm5hbWUpIDwgMTYpIHsKKwkJCS8qIG91dHB1dCByYXcgbmFtZSAqLworCQkJcHJpbnRmKCIlMjBzICIsIHN0LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXN0cm5jcHkoY3V0X25hbWUsIHN0LT5uYW1lLCAxNik7CisJCQljdXRfbmFtZVsxNl0gPSAnLic7CisJCQljdXRfbmFtZVsxN10gPSAnLic7CisJCQljdXRfbmFtZVsxOF0gPSAnLic7CisJCQljdXRfbmFtZVsxOV0gPSAnXDAnOworCQkJLyogY3V0IG9mZiBuYW1lIGZvciBzYXZpbmcgb3V0cHV0IHN0eWxlICovCisJCQlwcmludGYoIiUyMHMgIiwgY3V0X25hbWUpOworCQl9CisKKwkJcHJpbnRmKCIlMTB1ICIsIHN0LT5ucl9hY3F1aXJlZCk7CisJCXByaW50ZigiJTEwdSAiLCBzdC0+bnJfY29udGVuZGVkKTsKKworCQlwcmludGYoIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX3RvdGFsKTsKKwkJcHJpbnRmKCIlMTVsbHUgIiwgc3QtPndhaXRfdGltZV9tYXgpOworCQlwcmludGYoIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX21pbiA9PSBVTExPTkdfTUFYID8KKwkJICAgICAgIDAgOiBzdC0+d2FpdF90aW1lX21pbik7CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfbWFwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgTE9DS0hBU0hfU0laRTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3QsICZsb2NraGFzaF90YWJsZVtpXSwgaGFzaF9lbnRyeSkgeworCQkJcHJpbnRmKCIlcDogJXNcbiIsIHN0LT5hZGRyLCBzdC0+bmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZW9wcyA9IHsKKwkuc2FtcGxlCQkJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQkJCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uOworCitzdGF0aWMgaW50IHJlYWRfZXZlbnRzKHZvaWQpCit7CisJc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoIXNlc3Npb24pCisJCWRpZSgiSW5pdGlhbGl6aW5nIHBlcmYgc2Vzc2lvbiBmYWlsZWRcbiIpOworCisJcmV0dXJuIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmVvcHMpOworfQorCitzdGF0aWMgdm9pZCBzb3J0X3Jlc3VsdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJZm9yIChpID0gMDsgaSA8IExPQ0tIQVNIX1NJWkU7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0LCAmbG9ja2hhc2hfdGFibGVbaV0sIGhhc2hfZW50cnkpIHsKKwkJCWluc2VydF90b19yZXN1bHQoc3QsIGNvbXBhcmUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2NtZF9yZXBvcnQodm9pZCkKK3sKKwlzZXR1cF9wYWdlcigpOworCXNlbGVjdF9rZXkoKTsKKwlyZWFkX2V2ZW50cygpOworCXNvcnRfcmVzdWx0KCk7CisJcHJpbnRfcmVzdWx0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVwb3J0X3VzYWdlW10gPSB7CisJInBlcmYgbG9jayByZXBvcnQgWzxvcHRpb25zPl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIHJlcG9ydF9vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnaycsICJrZXkiLCAmc29ydF9rZXksICJhY3F1aXJlZCIsCisJCSAgICAia2V5IGZvciBzb3J0aW5nIiksCisJLyogVE9ETzogdHlwZSAqLworCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsb2NrX3VzYWdlW10gPSB7CisJInBlcmYgbG9jayBbPG9wdGlvbnM+XSB7cmVjb3JkfHRyYWNlfHJlcG9ydH0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvY2tfb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLCAiaW5wdXQgZmlsZSBuYW1lIiksCisJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLCAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpIiksCisJT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctdHJhY2UiLCAmZHVtcF90cmFjZSwgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmVjb3JkX2FyZ3NbXSA9IHsKKwkicmVjb3JkIiwKKwkiLWEiLAorCSItUiIsCisJIi1NIiwKKwkiLWYiLAorCSItbSIsICIxMDI0IiwKKwkiLWMiLCAiMSIsCisJIi1lIiwgImxvY2s6bG9ja19hY3F1aXJlOnIiLAorCSItZSIsICJsb2NrOmxvY2tfYWNxdWlyZWQ6ciIsCisJIi1lIiwgImxvY2s6bG9ja19jb250ZW5kZWQ6ciIsCisJIi1lIiwgImxvY2s6bG9ja19yZWxlYXNlOnIiLAorfTsKKworc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCByZWNfYXJnYywgaSwgajsKKwljb25zdCBjaGFyICoqcmVjX2FyZ3Y7CisKKwlyZWNfYXJnYyA9IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpICsgYXJnYyAtIDE7CisJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBzdHJkdXAocmVjb3JkX2FyZ3NbaV0pOworCisJZm9yIChqID0gMTsgaiA8ICh1bnNpZ25lZCBpbnQpYXJnYzsgaisrLCBpKyspCisJCXJlY19hcmd2W2ldID0gYXJndltqXTsKKworCUJVR19PTihpICE9IHJlY19hcmdjKTsKKworCXJldHVybiBjbWRfcmVjb3JkKGksIHJlY19hcmd2LCBOVUxMKTsKK30KKworaW50IGNtZF9sb2NrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXN5bWJvbF9faW5pdCgpOworCWZvciAoaSA9IDA7IGkgPCBMT0NLSEFTSF9TSVpFOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKGxvY2toYXNoX3RhYmxlICsgaSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBsb2NrX29wdGlvbnMsIGxvY2tfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWlmICghYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxvY2tfdXNhZ2UsIGxvY2tfb3B0aW9ucyk7CisKKwlpZiAoIXN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpKSB7CisJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJfSBlbHNlIGlmICghc3RybmNtcChhcmd2WzBdLCAicmVwb3J0IiwgNikpIHsKKwkJdHJhY2VfaGFuZGxlciA9ICZyZXBvcnRfbG9ja19vcHM7CisJCWlmIChhcmdjKSB7CisJCQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LAorCQkJCQkgICAgIHJlcG9ydF9vcHRpb25zLCByZXBvcnRfdXNhZ2UsIDApOworCQkJaWYgKGFyZ2MpCisJCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlcG9ydF91c2FnZSwgcmVwb3J0X29wdGlvbnMpOworCQl9CisJCV9fY21kX3JlcG9ydCgpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidHJhY2UiKSkgeworCQkvKiBBbGlhc2VkIHRvICdwZXJmIHRyYWNlJyAqLworCQlyZXR1cm4gY21kX3RyYWNlKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJtYXAiKSkgeworCQkvKiByZWN5Y2xpbmcgcmVwb3J0X2xvY2tfb3BzICovCisJCXRyYWNlX2hhbmRsZXIgPSAmcmVwb3J0X2xvY2tfb3BzOworCQlzZXR1cF9wYWdlcigpOworCQlyZWFkX2V2ZW50cygpOworCQlkdW1wX21hcCgpOworCX0gZWxzZSB7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhsb2NrX3VzYWdlLCBsb2NrX29wdGlvbnMpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwppbmRleCBjMWU2Nzc0Li5hZDQ3YmQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgInV0aWwvZGVidWdmcy5oIgogI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCiAjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKLSNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgkvKiBGb3IgZGVidWdmc19wYXRoICovCiAjaW5jbHVkZSAidXRpbC9wcm9iZS1maW5kZXIuaCIKQEAgLTU1LDExICs1NCwxMyBAQAogCWJvb2wgbmVlZF9kd2FyZjsKIAlib29sIGxpc3RfZXZlbnRzOwogCWJvb2wgZm9yY2VfYWRkOworCWJvb2wgc2hvd19saW5lczsKIAlpbnQgbnJfcHJvYmU7CiAJc3RydWN0IHByb2JlX3BvaW50IHByb2Jlc1tNQVhfUFJPQkVTXTsKIAlzdHJ1Y3Qgc3RybGlzdCAqZGVsbGlzdDsKLQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwc2Vzc2lvbjsKLQlzdHJ1Y3QgbWFwICprbWFwOworCXN0cnVjdCBtYXBfZ3JvdXBzIGttYXBfZ3JvdXBzOworCXN0cnVjdCBtYXAgKmttYXBzW01BUF9fTlJfVFlQRVNdOworCXN0cnVjdCBsaW5lX3JhbmdlIGxpbmVfcmFuZ2U7CiB9IHNlc3Npb247CiAKIApAQCAtMTIwLDggKzEyMSw4IEBACiBzdGF0aWMgdm9pZCBldmFsdWF0ZV9wcm9iZV9wb2ludChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlzeW0gPSBtYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc2Vzc2lvbi5rbWFwLCBwcC0+ZnVuY3Rpb24sCi0JCQkJICAgICAgIHNlc3Npb24ucHNlc3Npb24sIE5VTEwpOworCXN5bSA9IG1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzZXNzaW9uLmttYXBzW01BUF9fRlVOQ1RJT05dLAorCQkJCSAgICAgICBwcC0+ZnVuY3Rpb24sIE5VTEwpOwogCWlmICghc3ltKQogCQlkaWUoIktlcm5lbCBzeW1ib2wgXCclc1wnIG5vdCBmb3VuZCAtIHByb2JlIG5vdCBhZGRlZC4iLAogCQkgICAgcHAtPmZ1bmN0aW9uKTsKQEAgLTEzMCwxMiArMTMxLDIzIEBACiAjaWZuZGVmIE5PX0xJQkRXQVJGCiBzdGF0aWMgaW50IG9wZW5fdm1saW51eCh2b2lkKQogewotCWlmIChtYXBfX2xvYWQoc2Vzc2lvbi5rbWFwLCBzZXNzaW9uLnBzZXNzaW9uLCBOVUxMKSA8IDApIHsKKwlpZiAobWFwX19sb2FkKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0sIE5VTEwpIDwgMCkgewogCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxvYWQga2VybmVsIG1hcC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJfZGVidWcoIlRyeSB0byBvcGVuICVzXG4iLCBzZXNzaW9uLmttYXAtPmRzby0+bG9uZ19uYW1lKTsKLQlyZXR1cm4gb3BlbihzZXNzaW9uLmttYXAtPmRzby0+bG9uZ19uYW1lLCBPX1JET05MWSk7CisJcHJfZGVidWcoIlRyeSB0byBvcGVuICVzXG4iLAorCQkgc2Vzc2lvbi5rbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZHNvLT5sb25nX25hbWUpOworCXJldHVybiBvcGVuKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0tPmRzby0+bG9uZ19uYW1lLCBPX1JET05MWSk7Cit9CisKK3N0YXRpYyBpbnQgb3B0X3Nob3dfbGluZXMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwKKwkJCSAgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQoreworCWlmIChzdHIpCisJCXBhcnNlX2xpbmVfcmFuZ2VfZGVzYyhzdHIsICZzZXNzaW9uLmxpbmVfcmFuZ2UpOworCUlOSVRfTElTVF9IRUFEKCZzZXNzaW9uLmxpbmVfcmFuZ2UubGluZV9saXN0KTsKKwlzZXNzaW9uLnNob3dfbGluZXMgPSB0cnVlOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTE0NCw2ICsxNTYsNyBAQAogCSJwZXJmIHByb2JlIFs8b3B0aW9ucz5dIC0tYWRkICdQUk9CRURFRicgWy0tYWRkICdQUk9CRURFRicgLi4uXSIsCiAJInBlcmYgcHJvYmUgWzxvcHRpb25zPl0gLS1kZWwgJ1tHUk9VUDpdRVZFTlQnIC4uLiIsCiAJInBlcmYgcHJvYmUgLS1saXN0IiwKKwkicGVyZiBwcm9iZSAtLWxpbmUgJ0xJTkVERVNDJyIsCiAJTlVMTAogfTsKIApAQCAtMTgyLDkgKzE5NSwzMSBAQAogCQlvcHRfYWRkX3Byb2JlX2V2ZW50KSwKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZzZXNzaW9uLmZvcmNlX2FkZCwgImZvcmNpYmx5IGFkZCBldmVudHMiCiAJCSAgICAiIHdpdGggZXhpc3RpbmcgbmFtZSIpLAorI2lmbmRlZiBOT19MSUJEV0FSRgorCU9QVF9DQUxMQkFDSygnTCcsICJsaW5lIiwgTlVMTCwKKwkJICAgICAiRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdIiwKKwkJICAgICAiU2hvdyBzb3VyY2UgY29kZSBsaW5lcy4iLCBvcHRfc2hvd19saW5lcyksCisjZW5kaWYKIAlPUFRfRU5EKCkKIH07CiAKKy8qIEluaXRpYWxpemUgc3ltYm9sIG1hcHMgZm9yIHZtbGludXggKi8KK3N0YXRpYyB2b2lkIGluaXRfdm1saW51eCh2b2lkKQoreworCXN5bWJvbF9jb25mLnNvcnRfYnlfbmFtZSA9IHRydWU7CisJaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKQorCQlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gdHJ1ZTsKKwllbHNlCisJCXByX2RlYnVnKCJVc2Ugdm1saW51eDogJXNcbiIsIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSk7CisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJZGllKCJGYWlsZWQgdG8gaW5pdCBzeW1ib2wgbWFwLiIpOworCisJbWFwX2dyb3Vwc19faW5pdCgmc2Vzc2lvbi5rbWFwX2dyb3Vwcyk7CisJaWYgKG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcygmc2Vzc2lvbi5rbWFwX2dyb3VwcywKKwkJCQkJICAgc2Vzc2lvbi5rbWFwcykgPCAwKQorCQlkaWUoIkZhaWxlZCB0byBjcmVhdGUga2VybmVsIG1hcHMuIik7Cit9CisKIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewogCWludCBpLCByZXQ7CkBAIC0yMDMsNyArMjM4LDggQEAKIAkJcGFyc2VfcHJvYmVfZXZlbnRfYXJndihhcmdjLCBhcmd2KTsKIAl9CiAKLQlpZiAoKCFzZXNzaW9uLm5yX3Byb2JlICYmICFzZXNzaW9uLmRlbGxpc3QgJiYgIXNlc3Npb24ubGlzdF9ldmVudHMpKQorCWlmICgoIXNlc3Npb24ubnJfcHJvYmUgJiYgIXNlc3Npb24uZGVsbGlzdCAmJiAhc2Vzc2lvbi5saXN0X2V2ZW50cyAmJgorCSAgICAgIXNlc3Npb24uc2hvd19saW5lcykpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CiAKIAlpZiAoZGVidWdmc192YWxpZF9tb3VudHBvaW50KGRlYnVnZnNfcGF0aCkgPCAwKQpAQCAtMjE1LDEwICsyNTEsMzQgQEAKIAkJCQkgICAiIC0tYWRkLy0tZGVsLlxuIik7CiAJCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwogCQl9CisJCWlmIChzZXNzaW9uLnNob3dfbGluZXMpIHsKKwkJCXByX3dhcm5pbmcoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWxpbmUuXG4iKTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CisJCX0KIAkJc2hvd19wZXJmX3Byb2JlX2V2ZW50cygpOwogCQlyZXR1cm4gMDsKIAl9CiAKKyNpZm5kZWYgTk9fTElCRFdBUkYKKwlpZiAoc2Vzc2lvbi5zaG93X2xpbmVzKSB7CisJCWlmIChzZXNzaW9uLm5yX3Byb2JlICE9IDAgfHwgc2Vzc2lvbi5kZWxsaXN0KSB7CisJCQlwcl93YXJuaW5nKCIgIEVycm9yOiBEb24ndCB1c2UgLS1saW5lIHdpdGgiCisJCQkJICAgIiAtLWFkZC8tLWRlbC5cbiIpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKKwkJfQorCQlpbml0X3ZtbGludXgoKTsKKwkJZmQgPSBvcGVuX3ZtbGludXgoKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZSgiQ291bGQgbm90IG9wZW4gZGVidWdpbmZvIGZpbGUuIik7CisJCXJldCA9IGZpbmRfbGluZV9yYW5nZShmZCwgJnNlc3Npb24ubGluZV9yYW5nZSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWRpZSgiU291cmNlIGxpbmUgaXMgbm90IGZvdW5kLlxuIik7CisJCWNsb3NlKGZkKTsKKwkJc2hvd19saW5lX3JhbmdlKCZzZXNzaW9uLmxpbmVfcmFuZ2UpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwogCWlmIChzZXNzaW9uLmRlbGxpc3QpIHsKIAkJZGVsX3RyYWNlX2twcm9iZV9ldmVudHMoc2Vzc2lvbi5kZWxsaXN0KTsKIAkJc3RybGlzdF9fZGVsZXRlKHNlc3Npb24uZGVsbGlzdCk7CkBAIC0yMjYsMjAgKzI4Niw4IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBJbml0aWFsaXplIHN5bWJvbCBtYXBzIGZvciB2bWxpbnV4ICovCi0Jc3ltYm9sX2NvbmYuc29ydF9ieV9uYW1lID0gdHJ1ZTsKLQlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpCi0JCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlOwotCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCi0JCWRpZSgiRmFpbGVkIHRvIGluaXQgc3ltYm9sIG1hcC4iKTsKLQlzZXNzaW9uLnBzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoTlVMTCwgT19XUk9OTFksIGZhbHNlKTsKLQlpZiAoc2Vzc2lvbi5wc2Vzc2lvbiA9PSBOVUxMKQotCQlkaWUoIkZhaWxlZCB0byBpbml0IHBlcmZfc2Vzc2lvbi4iKTsKLQlzZXNzaW9uLmttYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlc3Npb24ucHNlc3Npb24tPmttYXBzLAotCQkJCQkJTUFQX19GVU5DVElPTiwKLQkJCQkJCSJba2VybmVsLmthbGxzeW1zXSIpOwotCWlmICghc2Vzc2lvbi5rbWFwKQotCQlkaWUoIkNvdWxkIG5vdCBmaW5kIGtlcm5lbCBtYXAuXG4iKTsKKwkvKiBBZGQgcHJvYmVzICovCisJaW5pdF92bWxpbnV4KCk7CiAKIAlpZiAoc2Vzc2lvbi5uZWVkX2R3YXJmKQogI2lmZGVmIE5PX0xJQkRXQVJGCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggMjY1NDI1My4uNzcxNTMzYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtNSwxMCArNSwxMyBAQAogICogKG9yIGEgQ1BVLCBvciBhIFBJRCkgaW50byB0aGUgcGVyZi5kYXRhIG91dHB1dCBmaWxlIC0gZm9yCiAgKiBsYXRlciBhbmFseXNpcyB2aWEgcGVyZiByZXBvcnQuCiAgKi8KKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKwogI2luY2x1ZGUgImJ1aWx0aW4uaCIKIAogI2luY2x1ZGUgInBlcmYuaCIKIAorI2luY2x1ZGUgInV0aWwvYnVpbGQtaWQuaCIKICNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgpAQCAtNjIsNiArNjUsNyBAQAogc3RhdGljIGludAkJCW5yX2NwdQkJCQk9ICAgICAgMDsKIAogc3RhdGljIGludAkJCWZpbGVfbmV3CQkJPSAgICAgIDE7CitzdGF0aWMgb2ZmX3QJCQlwb3N0X3Byb2Nlc3Npbmdfb2Zmc2V0OwogCiBzdGF0aWMgc3RydWN0IHBlcmZfc2Vzc2lvbgkqc2Vzc2lvbjsKIApAQCAtMTExLDIyICsxMTUsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlX2V2ZW50KGV2ZW50X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0JLyoKLQkqIEFkZCBpdCB0byB0aGUgbGlzdCBvZiBEU09zLCBzbyB0aGF0IHdoZW4gd2UgZmluaXNoIHRoaXMKLQkgKiByZWNvcmQgc2Vzc2lvbiB3ZSBjYW4gcGljayB0aGUgYXZhaWxhYmxlIGJ1aWxkLWlkcy4KLQkgKi8KLQlpZiAoYnVmLT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9NTUFQKQotCQlkc29zX19maW5kbmV3KGJ1Zi0+bW1hcC5maWxlbmFtZSk7Ci0KLQl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKLX0KLQogc3RhdGljIGludCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50KGV2ZW50X3QgKmV2ZW50LAogCQkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiBfX3VzZWQpCiB7Ci0Jd3JpdGVfZXZlbnQoZXZlbnQsIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CisJd3JpdGVfb3V0cHV0KGV2ZW50LCBldmVudC0+aGVhZGVyLnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzgsMTQgKzE3MCwxNCBAQAogCQlzaXplID0gbWQtPm1hc2sgKyAxIC0gKG9sZCAmIG1kLT5tYXNrKTsKIAkJb2xkICs9IHNpemU7CiAKLQkJd3JpdGVfZXZlbnQoYnVmLCBzaXplKTsKKwkJd3JpdGVfb3V0cHV0KGJ1Ziwgc2l6ZSk7CiAJfQogCiAJYnVmID0gJmRhdGFbb2xkICYgbWQtPm1hc2tdOwogCXNpemUgPSBoZWFkIC0gb2xkOwogCW9sZCArPSBzaXplOwogCi0Jd3JpdGVfZXZlbnQoYnVmLCBzaXplKTsKKwl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKIAogCW1kLT5wcmV2ID0gb2xkOwogCW1tYXBfd3JpdGVfdGFpbChtZCwgb2xkKTsKQEAgLTM5NSwxMCArMzg3LDIxIEBACiAJbnJfY3B1Kys7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY2Vzc19idWlsZGlkcyh2b2lkKQoreworCXU2NCBzaXplID0gbHNlZWsob3V0cHV0LCAwLCBTRUVLX0NVUik7CisKKwlzZXNzaW9uLT5mZCA9IG91dHB1dDsKKwlyZXR1cm4gX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sIHBvc3RfcHJvY2Vzc2luZ19vZmZzZXQsCisJCQkJCSAgICAgIHNpemUgLSBwb3N0X3Byb2Nlc3Npbmdfb2Zmc2V0LAorCQkJCQkgICAgICBzaXplLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOworfQorCiBzdGF0aWMgdm9pZCBhdGV4aXRfaGVhZGVyKHZvaWQpCiB7CiAJc2Vzc2lvbi0+aGVhZGVyLmRhdGFfc2l6ZSArPSBieXRlc193cml0dGVuOwogCisJcHJvY2Vzc19idWlsZGlkcygpOwogCXBlcmZfaGVhZGVyX193cml0ZSgmc2Vzc2lvbi0+aGVhZGVyLCBvdXRwdXQsIHRydWUpOwogfQogCkBAIC01NTEsOCArNTU0LDIzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCXBvc3RfcHJvY2Vzc2luZ19vZmZzZXQgPSBsc2VlayhvdXRwdXQsIDAsIFNFRUtfQ1VSKTsKKworCWVyciA9IGV2ZW50X19zeW50aGVzaXplX2tlcm5lbF9tbWFwKHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCisJCQkJCSAgICBzZXNzaW9uLCAiX3RleHQiKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCBrZXJuZWwgcmVmZXJlbmNlIHJlbG9jYXRpb24gc3ltYm9sLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCBrZXJuZWwgcmVmZXJlbmNlIHJlbG9jYXRpb24gc3ltYm9sLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKCFzeXN0ZW1fd2lkZSAmJiBwcm9maWxlX2NwdSA9PSAtMSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF9waWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCiAJCQkJCSBzZXNzaW9uKTsKIAllbHNlCiAJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZHMocHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwgc2Vzc2lvbik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggZGIxMGMwZS4uY2ZjNjU1ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtMzQsNiArMzQsOCBAQAogc3RhdGljIGNoYXIJCWNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CiAKIHN0YXRpYyBpbnQJCWZvcmNlOworc3RhdGljIGJvb2wJCWhpZGVfdW5yZXNvbHZlZDsKK3N0YXRpYyBib29sCQlkb250X3VzZV9jYWxsY2hhaW5zOwogCiBzdGF0aWMgaW50CQlzaG93X3RocmVhZHM7CiBzdGF0aWMgc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMJc2hvd190aHJlYWRzX3ZhbHVlczsKQEAgLTkxLDExICs5Myw4IEBACiAKIAlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwogCi0JZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCi0JCWV2ZW50LT5oZWFkZXIubWlzYywKLQkJZGF0YS5waWQsIGRhdGEudGlkLAotCQkodm9pZCAqKShsb25nKWRhdGEuaXAsCi0JCShsb25nIGxvbmcpZGF0YS5wZXJpb2QpOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGRcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGRhdGEucGlkLCBkYXRhLnRpZCwgZGF0YS5pcCwgZGF0YS5wZXJpb2QpOwogCiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSB7CiAJCXVuc2lnbmVkIGludCBpOwpAQCAtMTIxLDcgKzEyMCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoYWwuZmlsdGVyZWQpCisJaWYgKGFsLmZpbHRlcmVkIHx8IChoaWRlX3VucmVzb2x2ZWQgJiYgYWwuc3ltID09IE5VTEwpKQogCQlyZXR1cm4gMDsKIAogCWlmIChwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlc3Npb24sICZhbCwgZGF0YS5jYWxsY2hhaW4sIGRhdGEucGVyaW9kKSkgewpAQCAtMTU2LDE0ICsxNTUsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQorc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX3NldHVwX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7Ci0JaWYgKCEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKSB7CisJaWYgKCEoc2VsZi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKSB7CiAJCWlmIChzb3J0X19oYXNfcGFyZW50KSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgInNlbGVjdGVkIC0tc29ydCBwYXJlbnQsIGJ1dCBubyIKIAkJCQkJIiBjYWxsY2hhaW4gZGF0YS4gRGlkIHlvdSBjYWxsIgogCQkJCQkiIHBlcmYgcmVjb3JkIHdpdGhvdXQgLWc/XG4iKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgInNlbGVjdGVkIC1nIGJ1dCBubyBjYWxsY2hhaW4gZGF0YS4iCkBAIC0xNzEsMTIgKzE3MCwxMyBAQAogCQkJCQkiIC1nP1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQl9IGVsc2UgaWYgKGNhbGxjaGFpbl9wYXJhbS5tb2RlICE9IENIQUlOX05PTkUgJiYgIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKKwl9IGVsc2UgaWYgKCFkb250X3VzZV9jYWxsY2hhaW5zICYmIGNhbGxjaGFpbl9wYXJhbS5tb2RlICE9IENIQUlOX05PTkUgJiYKKwkJICAgIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKIAkJCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOwogCQkJaWYgKHJlZ2lzdGVyX2NhbGxjaGFpbl9wYXJhbSgmY2FsbGNoYWluX3BhcmFtKSA8IDApIHsKIAkJCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHJlZ2lzdGVyIGNhbGxjaGFpbiIKIAkJCQkJCSIgcGFyYW1zXG4iKTsKLQkJCQlyZXR1cm4gLTE7CisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJfQogCkBAIC0xODQsMjAgKzE4NCwxOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKLQkucHJvY2Vzc19tbWFwX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKLQkucHJvY2Vzc19leGl0X2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19mb3JrX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19sb3N0X2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfbG9zdCwKLQkucHJvY2Vzc19yZWFkX2V2ZW50CT0gcHJvY2Vzc19yZWFkX2V2ZW50LAotCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5leGl0CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkuZm9yawk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCisJLmxvc3QJPSBldmVudF9fcHJvY2Vzc19sb3N0LAorCS5yZWFkCT0gcHJvY2Vzc19yZWFkX2V2ZW50LAogfTsKIAotCiBzdGF0aWMgaW50IF9fY21kX3JlcG9ydCh2b2lkKQogewotCWludCByZXQ7CisJaW50IHJldCA9IC1FSU5WQUw7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbjsKIAogCXNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgZm9yY2UpOwpAQCAtMjA3LDYgKzIwNSwxMCBAQAogCWlmIChzaG93X3RocmVhZHMpCiAJCXBlcmZfcmVhZF92YWx1ZXNfaW5pdCgmc2hvd190aHJlYWRzX3ZhbHVlcyk7CiAKKwlyZXQgPSBwZXJmX3Nlc3Npb25fX3NldHVwX3NhbXBsZV90eXBlKHNlc3Npb24pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2RlbGV0ZTsKKwogCXJldCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGVsZXRlOwpAQCAtMjQzLDExICsyNDUsMTkgQEAKIAogc3RhdGljIGludAogcGFyc2VfY2FsbGNoYWluX29wdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLCBjb25zdCBjaGFyICphcmcsCi0JCSAgICBpbnQgdW5zZXQgX191c2VkKQorCQkgICAgaW50IHVuc2V0KQogewogCWNoYXIgKnRvazsKIAljaGFyICplbmRwdHI7CiAKKwkvKgorCSAqIC0tbm8tY2FsbC1ncmFwaAorCSAqLworCWlmICh1bnNldCkgeworCQlkb250X3VzZV9jYWxsY2hhaW5zID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IHRydWU7CiAKIAlpZiAoIWFyZykKQEAgLTI2OSw3ICsyNzksNyBAQAogCiAJZWxzZSBpZiAoIXN0cm5jbXAodG9rLCAibm9uZSIsIHN0cmxlbihhcmcpKSkgewogCQljYWxsY2hhaW5fcGFyYW0ubW9kZSA9IENIQUlOX05PTkU7Ci0JCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOworCQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gZmFsc2U7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzE5LDcgKzMyOSw3IEBACiAJCSAgICJwcmV0dHkgcHJpbnRpbmcgc3R5bGUga2V5OiBub3JtYWwgcmF3IiksCiAJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKIAkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJmV2ZW50X29wcy5mdWxsX3BhdGhzLAorCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmc3ltYm9sX2NvbmYuZnVsbF9wYXRocywKIAkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCiAJT1BUX1NUUklORygncCcsICJwYXJlbnQiLCAmcGFyZW50X3BhdHRlcm4sICJyZWdleCIsCiAJCSAgICJyZWdleCBmaWx0ZXIgdG8gaWRlbnRpZnkgcGFyZW50LCBzZWU6ICctLXNvcnQgcGFyZW50JyIpLApAQCAtMzQwLDYgKzM1MCw4IEBACiAJT1BUX1NUUklORygndCcsICJmaWVsZC1zZXBhcmF0b3IiLCAmc3ltYm9sX2NvbmYuZmllbGRfc2VwLCAic2VwYXJhdG9yIiwKIAkJICAgInNlcGFyYXRvciBmb3IgY29sdW1ucywgbm8gc3BhY2VzIHdpbGwgYmUgYWRkZWQgYmV0d2VlbiAiCiAJCSAgICJjb2x1bW5zICcuJyBpcyByZXNlcnZlZC4iKSwKKwlPUFRfQk9PTEVBTignVScsICJoaWRlLXVucmVzb2x2ZWQiLCAmaGlkZV91bnJlc29sdmVkLAorCQkgICAgIk9ubHkgZGlzcGxheSBlbnRyaWVzIHJlc29sdmVkIHRvIGEgc3ltYm9sIiksCiAJT1BUX0VORCgpCiB9OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCmluZGV4IDgwMjA5ZGYuLjRmNWEwM2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCkBAIC0xNjIxLDExICsxNjIxLDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZGF0YS5waWQpOwogCWlmICh0aHJlYWQgPT0gTlVMTCkgewpAQCAtMTY1MywzMyArMTY1MCwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2xvc3RfZXZlbnQJPSBwcm9jZXNzX2xvc3RfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5jb21tCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKKwkubG9zdAk9IHByb2Nlc3NfbG9zdF9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgcmVhZF9ldmVudHModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCWlmIChwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQorCQllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IGM3MGQ3MjAuLmU4Yzg1ZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAidXRpbC9ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogCiAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNzksNiArODAsOCBAQAogCiBzdGF0aWMgaW50CQkJZXZlbnRfc2NhbGVkW01BWF9DT1VOVEVSU107CiAKK3N0YXRpYyB2b2xhdGlsZSBpbnQgZG9uZSA9IDA7CisKIHN0cnVjdCBzdGF0cwogewogCWRvdWJsZSBuLCBtZWFuLCBNMjsKQEAgLTI0Nyw2MSArMjUwLDY0IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHQwLCB0MTsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgY291bnRlcjsKLQlpbnQgcGlkOworCWludCBwaWQgPSB0YXJnZXRfcGlkOwogCWludCBjaGlsZF9yZWFkeV9waXBlWzJdLCBnb19waXBlWzJdOworCWNvbnN0IGJvb2wgZm9ya3MgPSAodGFyZ2V0X3BpZCA9PSAtMSAmJiBhcmdjID4gMCk7CiAJY2hhciBidWY7CiAKIAlpZiAoIXN5c3RlbV93aWRlKQogCQlucl9jcHVzID0gMTsKIAotCWlmIChwaXBlKGNoaWxkX3JlYWR5X3BpcGUpIDwgMCB8fCBwaXBlKGdvX3BpcGUpIDwgMCkgeworCWlmIChmb3JrcyAmJiAocGlwZShjaGlsZF9yZWFkeV9waXBlKSA8IDAgfHwgcGlwZShnb19waXBlKSA8IDApKSB7CiAJCXBlcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBwaXBlcyIpOwogCQlleGl0KDEpOwogCX0KIAotCWlmICgocGlkID0gZm9yaygpKSA8IDApCi0JCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKKwlpZiAoZm9ya3MpIHsKKwkJaWYgKChwaWQgPSBmb3JrKCkpIDwgMCkKKwkJCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKIAotCWlmICghcGlkKSB7Ci0JCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMF0pOwotCQljbG9zZShnb19waXBlWzFdKTsKLQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisJCWlmICghcGlkKSB7CisJCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKKwkJCWNsb3NlKGdvX3BpcGVbMV0pOworCQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisKKwkJCS8qCisJCQkgKiBEbyBhIGR1bW15IGV4ZWN2cCB0byBnZXQgdGhlIFBMVCBlbnRyeSByZXNvbHZlZCwKKwkJCSAqIHNvIHdlIGF2b2lkIHRoZSByZXNvbHZlciBvdmVyaGVhZCBvbiB0aGUgcmVhbAorCQkJICogZXhlY3ZwIGNhbGwuCisJCQkgKi8KKwkJCWV4ZWN2cCgiIiwgKGNoYXIgKiopYXJndik7CisKKwkJCS8qCisJCQkgKiBUZWxsIHRoZSBwYXJlbnQgd2UncmUgcmVhZHkgdG8gZ28KKwkJCSAqLworCQkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVsxXSk7CisKKwkJCS8qCisJCQkgKiBXYWl0IHVudGlsIHRoZSBwYXJlbnQgdGVsbHMgdXMgdG8gZ28uCisJCQkgKi8KKwkJCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQkJCXBlcnJvcigidW5hYmxlIHRvIHJlYWQgcGlwZSIpOworCisJCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7CisKKwkJCXBlcnJvcihhcmd2WzBdKTsKKwkJCWV4aXQoLTEpOworCQl9CisKKwkJY2hpbGRfcGlkID0gcGlkOwogCiAJCS8qCi0JCSAqIERvIGEgZHVtbXkgZXhlY3ZwIHRvIGdldCB0aGUgUExUIGVudHJ5IHJlc29sdmVkLAotCQkgKiBzbyB3ZSBhdm9pZCB0aGUgcmVzb2x2ZXIgb3ZlcmhlYWQgb24gdGhlIHJlYWwKLQkJICogZXhlY3ZwIGNhbGwuCi0JCSAqLwotCQlleGVjdnAoIiIsIChjaGFyICoqKWFyZ3YpOwotCi0JCS8qCi0JCSAqIFRlbGwgdGhlIHBhcmVudCB3ZSdyZSByZWFkeSB0byBnbworCQkgKiBXYWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgcmVhZHkgdG8gZXhlYy4KIAkJICovCiAJCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMV0pOwotCi0JCS8qCi0JCSAqIFdhaXQgdW50aWwgdGhlIHBhcmVudCB0ZWxscyB1cyB0byBnby4KLQkJICovCi0JCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQljbG9zZShnb19waXBlWzBdKTsKKwkJaWYgKHJlYWQoY2hpbGRfcmVhZHlfcGlwZVswXSwgJmJ1ZiwgMSkgPT0gLTEpCiAJCQlwZXJyb3IoInVuYWJsZSB0byByZWFkIHBpcGUiKTsKLQotCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7Ci0KLQkJcGVycm9yKGFyZ3ZbMF0pOwotCQlleGl0KC0xKTsKKwkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7CiAJfQogCi0JY2hpbGRfcGlkID0gcGlkOwotCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgcmVhZHkgdG8gZXhlYy4KLQkgKi8KLQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzFdKTsKLQljbG9zZShnb19waXBlWzBdKTsKLQlpZiAocmVhZChjaGlsZF9yZWFkeV9waXBlWzBdLCAmYnVmLCAxKSA9PSAtMSkKLQkJcGVycm9yKCJ1bmFibGUgdG8gcmVhZCBwaXBlIik7Ci0JY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7Ci0KIAlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykKIAkJY3JlYXRlX3BlcmZfc3RhdF9jb3VudGVyKGNvdW50ZXIsIHBpZCk7CiAKQEAgLTMxMCw4ICszMTYsMTIgQEAKIAkgKi8KIAl0MCA9IHJkY2xvY2soKTsKIAotCWNsb3NlKGdvX3BpcGVbMV0pOwotCXdhaXQoJnN0YXR1cyk7CisJaWYgKGZvcmtzKSB7CisJCWNsb3NlKGdvX3BpcGVbMV0pOworCQl3YWl0KCZzdGF0dXMpOworCX0gZWxzZSB7CisJCXdoaWxlKCFkb25lKTsKKwl9CiAKIAl0MSA9IHJkY2xvY2soKTsKIApAQCAtNDE3LDEwICs0MjcsMTMgQEAKIAlmZmx1c2goc3Rkb3V0KTsKIAogCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciBcJyVzIiwgYXJndlswXSk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOworCWZwcmludGYoc3RkZXJyLCAiIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICIpOworCWlmKHRhcmdldF9waWQgPT0gLTEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJcJyVzIiwgYXJndlswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOworCX1lbHNlCisJCWZwcmludGYoc3RkZXJyLCAidGFzayBwaWQgXCclZCIsIHRhcmdldF9waWQpOwogCiAJZnByaW50ZihzdGRlcnIsICJcJyIpOwogCWlmIChydW5fY291bnQgPiAxKQpAQCAtNDQ1LDYgKzQ1OCw5IEBACiAKIHN0YXRpYyB2b2lkIHNraXBfc2lnbmFsKGludCBzaWdubykKIHsKKwlpZih0YXJnZXRfcGlkICE9IC0xKQorCQlkb25lID0gMTsKKwogCXNpZ25yID0gc2lnbm87CiB9CiAKQEAgLTQ2MSw3ICs0NzcsNyBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN0YXRfdXNhZ2VbXSA9IHsKLQkicGVyZiBzdGF0IFs8b3B0aW9ucz5dIDxjb21tYW5kPiIsCisJInBlcmYgc3RhdCBbPG9wdGlvbnM+XSBbPGNvbW1hbmQ+XSIsCiAJTlVMTAogfTsKIApAQCAtNDkyLDcgKzUwOCw3IEBACiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBzdGF0X3VzYWdlLAogCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKLQlpZiAoIWFyZ2MpCisJaWYgKCFhcmdjICYmIHRhcmdldF9waWQgPT0gLTEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKIAlpZiAocnVuX2NvdW50IDw9IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCAzZjhiYmNmLi4wZDRkOGZmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCkBAIC0xMDI5LDMzICsxMDI5LDI0IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0JaWYgKCEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTm8gdHJhY2Ugc2FtcGxlcyBmb3VuZCBpbiB0aGUgZmlsZS5cbiIKLQkJCQkiSGF2ZSB5b3UgdXNlZCAncGVyZiB0aW1lY2hhcnQgcmVjb3JkJyB0byByZWNvcmQgaXQ/XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gcHJvY2Vzc19jb21tX2V2ZW50LAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBwcm9jZXNzX2ZvcmtfZXZlbnQsCi0JLnByb2Nlc3NfZXhpdF9ldmVudAk9IHByb2Nlc3NfZXhpdF9ldmVudCwKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBxdWV1ZV9zYW1wbGVfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLmNvbW0JPSBwcm9jZXNzX2NvbW1fZXZlbnQsCisJLmZvcmsJPSBwcm9jZXNzX2ZvcmtfZXZlbnQsCisJLmV4aXQJPSBwcm9jZXNzX2V4aXRfZXZlbnQsCisJLnNhbXBsZQk9IHF1ZXVlX3NhbXBsZV9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfdGltZWNoYXJ0KHZvaWQpCiB7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAidGltZWNoYXJ0IHJlY29yZCIpKQorCQlnb3RvIG91dF9kZWxldGU7CisKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2RlbGV0ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCBkZGM1ODRiLi4zMWYyZTU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC05NCw2ICs5NCw3IEBACiAKIHN0YXRpYyBjaGFyCQkJKnN5bV9maWx0ZXIJCQk9ICAgTlVMTDsKIHN0cnVjdCBzeW1fZW50cnkJCSpzeW1fZmlsdGVyX2VudHJ5CQk9ICAgTlVMTDsKK3N0cnVjdCBzeW1fZW50cnkJCSpzeW1fZmlsdGVyX2VudHJ5X3NjaGVkCQk9ICAgTlVMTDsKIHN0YXRpYyBpbnQJCQlzeW1fcGNudF9maWx0ZXIJCQk9ICAgICAgNTsKIHN0YXRpYyBpbnQJCQlzeW1fY291bnRlcgkJCT0gICAgICAwOwogc3RhdGljIGludAkJCWRpc3BsYXlfd2VpZ2h0ZWQJCT0gICAgIC0xOwpAQCAtMjAxLDEwICsyMDIsOSBAQAogCWxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAogCXNwcmludGYoY29tbWFuZCwKLQkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4ICIKLQkJCSAiLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzIiwKLQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAotCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKKwkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPSUjMCpMeCAtLXN0b3AtYWRkcmVzcz0lIzAqTHggLWRTICVzIiwKKwkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5zdGFydCksCisJCUJJVFNfUEVSX0xPTkcgLyA0LCBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwgcGF0aCk7CiAKIAlmaWxlID0gcG9wZW4oY29tbWFuZCwgInIiKTsKIAlpZiAoIWZpbGUpCkBAIC0yMTUsNyArMjE1LDcgQEAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKIAkJc3RydWN0IHNvdXJjZV9saW5lICpzcmM7CiAJCXNpemVfdCBkdW1teSA9IDA7Ci0JCWNoYXIgKmM7CisJCWNoYXIgKmMsICpzZXA7CiAKIAkJc3JjID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc291cmNlX2xpbmUpKTsKIAkJYXNzZXJ0KHNyYyAhPSBOVUxMKTsKQEAgLTIzNCwxNCArMjM0LDExIEBACiAJCSpzb3VyY2UtPmxpbmVzX3RhaWwgPSBzcmM7CiAJCXNvdXJjZS0+bGluZXNfdGFpbCA9ICZzcmMtPm5leHQ7CiAKLQkJaWYgKHN0cmxlbihzcmMtPmxpbmUpPjggJiYgc3JjLT5saW5lWzhdID09ICc6JykgewotCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKLQkJfQotCQlpZiAoc3RybGVuKHNyYy0+bGluZSk+OCAmJiBzcmMtPmxpbmVbMTZdID09ICc6JykgewotCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKLQkJfQorCQlzcmMtPmVpcCA9IHN0cnRvdWxsKHNyYy0+bGluZSwgJnNlcCwgMTYpOworCQlpZiAoKnNlcCA9PSAnOicpCisJCQlzcmMtPmVpcCA9IG1hcF9fb2JqZHVtcF8yaXAobWFwLCBzcmMtPmVpcCk7CisJCWVsc2UgLyogdGhpcyBsaW5lIGhhcyBubyBpcCBpbmZvIChlLmcuIHNvdXJjZSBsaW5lKSAqLworCQkJc3JjLT5laXAgPSAwOwogCX0KIAlwY2xvc2UoZmlsZSk7CiBvdXRfYXNzaWduOgpAQCAtMjc2LDYgKzI3Myw5IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWZvciAobGluZSA9IHN5bWUtPnNyYy0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CisJCS8qIHNraXAgbGluZXMgd2l0aG91dCBJUCBpbmZvICovCisJCWlmIChsaW5lLT5laXAgPT0gMCkKKwkJCWNvbnRpbnVlOwogCQlpZiAobGluZS0+ZWlwID09IGlwKSB7CiAJCQlsaW5lLT5jb3VudFtjb3VudGVyXSsrOwogCQkJYnJlYWs7CkBAIC0yODcsMTcgKzI4NywyMCBAQAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwogfQogCisjZGVmaW5lIFBBVFRFUk5fTEVOCQkoQklUU19QRVJfTE9ORyAvIDQgKyAyKQorCiBzdGF0aWMgdm9pZCBsb29rdXBfc3ltX3NvdXJjZShzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOwogCXN0cnVjdCBzb3VyY2VfbGluZSAqbGluZTsKLQljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOworCWNoYXIgcGF0dGVybltQQVRURVJOX0xFTiArIDFdOwogCi0Jc3ByaW50ZihwYXR0ZXJuLCAiPCVzPjoiLCBzeW1ib2wtPm5hbWUpOworCXNwcmludGYocGF0dGVybiwgIiUwKkx4IDwiLCBCSVRTX1BFUl9MT05HIC8gNCwKKwkJbWFwX19yaXBfMm9iamR1bXAoc3ltZS0+bWFwLCBzeW1ib2wtPnN0YXJ0KSk7CiAKIAlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNyYy0+bG9jayk7CiAJZm9yIChsaW5lID0gc3ltZS0+c3JjLT5saW5lczsgbGluZTsgbGluZSA9IGxpbmUtPm5leHQpIHsKLQkJaWYgKHN0cnN0cihsaW5lLT5saW5lLCBwYXR0ZXJuKSkgeworCQlpZiAobWVtY21wKGxpbmUtPmxpbmUsIHBhdHRlcm4sIFBBVFRFUk5fTEVOKSA9PSAwKSB7CiAJCQlzeW1lLT5zcmMtPnNvdXJjZSA9IGxpbmU7CiAJCQlicmVhazsKIAkJfQpAQCAtNjY3LDcgKzY3MCw3IEBACiAJfQogCiAJaWYgKCFmb3VuZCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlNvcnJ5LCAlcyBpcyBub3QgYWN0aXZlLlxuIiwgc3ltX2ZpbHRlcik7CisJCWZwcmludGYoc3RkZXJyLCAiU29ycnksICVzIGlzIG5vdCBhY3RpdmUuXG4iLCBidWYpOwogCQlzbGVlcCgxKTsKIAkJcmV0dXJuOwogCX0gZWxzZQpAQCAtNjk1LDE3ICs2OTgsMTUgQEAKIAogCWZwcmludGYoc3Rkb3V0LCAiXHRbZl0gICAgIHByb2ZpbGUgZGlzcGxheSBmaWx0ZXIgKGNvdW50KS4gICAgXHQoJWQpXG4iLCBjb3VudF9maWx0ZXIpOwogCi0JaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSkgewotCQlmcHJpbnRmKHN0ZG91dCwgIlx0W0ZdICAgICBhbm5vdGF0ZSBkaXNwbGF5IGZpbHRlciAocGVyY2VudCkuIFx0KCVkJSUpXG4iLCBzeW1fcGNudF9maWx0ZXIpOwotCQlmcHJpbnRmKHN0ZG91dCwgIlx0W3NdICAgICBhbm5vdGF0ZSBzeW1ib2wuICAgICAgICAgICAgICAgICAgIFx0KCVzKVxuIiwgbmFtZT86ICJOVUxMIik7Ci0JCWZwcmludGYoc3Rkb3V0LCAiXHRbU10gICAgIHN0b3AgYW5ub3RhdGlvbi5cbiIpOwotCX0KKwlmcHJpbnRmKHN0ZG91dCwgIlx0W0ZdICAgICBhbm5vdGF0ZSBkaXNwbGF5IGZpbHRlciAocGVyY2VudCkuIFx0KCVkJSUpXG4iLCBzeW1fcGNudF9maWx0ZXIpOworCWZwcmludGYoc3Rkb3V0LCAiXHRbc10gICAgIGFubm90YXRlIHN5bWJvbC4gICAgICAgICAgICAgICAgICAgXHQoJXMpXG4iLCBuYW1lPzogIk5VTEwiKTsKKwlmcHJpbnRmKHN0ZG91dCwgIlx0W1NdICAgICBzdG9wIGFubm90YXRpb24uXG4iKTsKIAogCWlmIChucl9jb3VudGVycyA+IDEpCiAJCWZwcmludGYoc3Rkb3V0LCAiXHRbd10gICAgIHRvZ2dsZSBkaXNwbGF5IHdlaWdodGVkL2NvdW50W0Vdci4gXHQoJWQpXG4iLCBkaXNwbGF5X3dlaWdodGVkID8gMSA6IDApOwogCiAJZnByaW50ZihzdGRvdXQsCi0JCSJcdFtLXSAgICAgaGlkZSBrZXJuZWxfc3ltYm9scyBzeW1ib2xzLiAgICAgICAgICAgICBcdCglcylcbiIsCisJCSJcdFtLXSAgICAgaGlkZSBrZXJuZWxfc3ltYm9scyBzeW1ib2xzLiAgICAgXHQoJXMpXG4iLAogCQloaWRlX2tlcm5lbF9zeW1ib2xzID8gInllcyIgOiAibm8iKTsKIAlmcHJpbnRmKHN0ZG91dCwKIAkJIlx0W1VdICAgICBoaWRlIHVzZXIgc3ltYm9scy4gICAgICAgICAgICAgICBcdCglcylcbiIsCkBAIC03MjUsMTQgKzcyNiwxMyBAQAogCQljYXNlICdRJzoKIAkJY2FzZSAnSyc6CiAJCWNhc2UgJ1UnOgorCQljYXNlICdGJzoKKwkJY2FzZSAncyc6CisJCWNhc2UgJ1MnOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgJ0UnOgogCQljYXNlICd3JzoKIAkJCXJldHVybiBucl9jb3VudGVycyA+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+c2l6ZSkKLQkJZ290byBtb3JlOwotCi1kb25lOgotCWVyciA9IDA7Ci1vdXRfZXJyOgotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGVidWcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCmluZGV4IDI4ZDUyMGQuLjA5MDU2MDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwuaCIKIAogaW50IHZlcmJvc2UgPSAwOwogaW50IGR1bXBfdHJhY2UgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMKaW5kZXggMDZiNzNlZS4uYTg4ZmVmYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYworKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5jCkBAIC0xMDYsMTYgKzEwNiwxNCBAQAogCXJldHVybiAwOwogfQogCi0vKiBtb3VudCB0aGUgZGVidWdmcyBzb21ld2hlcmUgKi8KKy8qIG1vdW50IHRoZSBkZWJ1Z2ZzIHNvbWV3aGVyZSBpZiBpdCdzIG5vdCBtb3VudGVkICovCiAKLWludCBkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCitjaGFyICpkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCiB7Ci0JY2hhciBtb3VudGNtZFsxMjhdOwotCiAJLyogc2VlIGlmIGl0J3MgYWxyZWFkeSBtb3VudGVkICovCiAJaWYgKGRlYnVnZnNfZmluZF9tb3VudHBvaW50KCkpIHsKIAkJZGVidWdmc19wcmVtb3VudGVkID0gMTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiAJfQogCiAJLyogaWYgbm90IG1vdW50ZWQgYW5kIG5vIGFyZ3VtZW50ICovCkBAIC0xMjcsMTMgKzEyNSwxNCBAQAogCQkJbW91bnRwb2ludCA9ICIvc3lzL2tlcm5lbC9kZWJ1ZyI7CiAJfQogCisJaWYgKG1vdW50KE5VTEwsIG1vdW50cG9pbnQsICJkZWJ1Z2ZzIiwgMCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIHNhdmUgdGhlIG1vdW50cG9pbnQgKi8KIAlzdHJuY3B5KGRlYnVnZnNfbW91bnRwb2ludCwgbW91bnRwb2ludCwgc2l6ZW9mKGRlYnVnZnNfbW91bnRwb2ludCkpOworCWRlYnVnZnNfZm91bmQgPSAxOwogCi0JLyogbW91bnQgaXQgKi8KLQlzbnByaW50Zihtb3VudGNtZCwgc2l6ZW9mKG1vdW50Y21kKSwKLQkJICIvYmluL21vdW50IC10IGRlYnVnZnMgZGVidWdmcyAlcyIsIG1vdW50cG9pbnQpOwotCXJldHVybiBzeXN0ZW0obW91bnRjbWQpOworCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiB9CiAKIC8qIHVtb3VudCB0aGUgZGVidWdmcyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmgKaW5kZXggM2NkMTRmOS4uODNhMDI4NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaAorKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5oCkBAIC0xNSw3ICsxNSw3IEBACiBleHRlcm4gY29uc3QgY2hhciAqZGVidWdmc19maW5kX21vdW50cG9pbnQodm9pZCk7CiBleHRlcm4gaW50IGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChjb25zdCBjaGFyICpkZWJ1Z2ZzKTsKIGV4dGVybiBpbnQgZGVidWdmc192YWxpZF9lbnRyeShjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgZGVidWdmc19tb3VudChjb25zdCBjaGFyICptb3VudHBvaW50KTsKK2V4dGVybiBjaGFyICpkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3Vtb3VudCh2b2lkKTsKIGV4dGVybiBpbnQgZGVidWdmc193cml0ZShjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqdmFsdWUpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3JlYWQoY29uc3QgY2hhciAqZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCBiYjBmZDZkLi43MDVlYzYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtOCw4ICs4LDcgQEAKICNpbmNsdWRlICJ0aHJlYWQuaCIKIAogc3RhdGljIHBpZF90IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkX3QgcGlkLCBpbnQgZnVsbCwKLQkJCQkgICAgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKKwkJCQkgICAgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWV2ZW50X3QgZXY7CkBAIC05MSw4ICs5MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkX3QgcGlkLCBwaWRfdCB0Z2lkLAotCQkJCQkgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCisJCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwpAQCAtMTEyLDcgKzExMCwxMCBAQAogCXdoaWxlICgxKSB7CiAJCWNoYXIgYmZbQlVGU0laXSwgKnBiZiA9IGJmOwogCQlldmVudF90IGV2ID0gewotCQkJLmhlYWRlciA9IHsgLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQIH0sCisJCQkuaGVhZGVyID0geworCQkJCS50eXBlID0gUEVSRl9SRUNPUkRfTU1BUCwKKwkJCQkubWlzYyA9IDAsIC8qIEp1c3QgbGlrZSB0aGUga2VybmVsLCBzZWUga2VybmVsL3BlcmZfZXZlbnQuYyBfX3BlcmZfZXZlbnRfbW1hcCAqLworCQkJIH0sCiAJCX07CiAJCWludCBuOwogCQlzaXplX3Qgc2l6ZTsKQEAgLTE1Niw5ICsxNTcsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsCi0JCQkgICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+a21hcHMubWFwc1tNQVBfX0ZVTkNUSU9OXSk7CisJICAgICBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlldmVudF90IGV2OworCQlzaXplX3Qgc2l6ZTsKKwkJc3RydWN0IG1hcCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCisJCWlmIChwb3MtPmRzby0+a2VybmVsKQorCQkJY29udGludWU7CisKKwkJc2l6ZSA9IEFMSUdOKHBvcy0+ZHNvLT5sb25nX25hbWVfbGVuICsgMSwgc2l6ZW9mKHU2NCkpOworCQltZW1zZXQoJmV2LCAwLCBzaXplb2YoZXYpKTsKKwkJZXYubW1hcC5oZWFkZXIubWlzYyA9IDE7IC8qIGtlcm5lbCB1c2VzIDAgZm9yIHVzZXIgc3BhY2UgbWFwcywgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJZXYubW1hcC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX01NQVA7CisJCWV2Lm1tYXAuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKGV2Lm1tYXApIC0KKwkJCQkgICAgICAgIChzaXplb2YoZXYubW1hcC5maWxlbmFtZSkgLSBzaXplKSk7CisJCWV2Lm1tYXAuc3RhcnQgPSBwb3MtPnN0YXJ0OworCQlldi5tbWFwLmxlbiAgID0gcG9zLT5lbmQgLSBwb3MtPnN0YXJ0OworCisJCW1lbWNweShldi5tbWFwLmZpbGVuYW1lLCBwb3MtPmRzby0+bG9uZ19uYW1lLAorCQkgICAgICAgcG9zLT5kc28tPmxvbmdfbmFtZV9sZW4gKyAxKTsKKwkJcHJvY2VzcygmZXYsIHNlc3Npb24pOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXBpZF90IHRnaWQgPSBldmVudF9fc3ludGhlc2l6ZV9jb21tKHBpZCwgMSwgcHJvY2Vzcywgc2Vzc2lvbik7CkBAIC0xNjcsOCArMTk3LDcgQEAKIAlyZXR1cm4gZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkLCB0Z2lkLCBwcm9jZXNzLCBzZXNzaW9uKTsKIH0KIAotdm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKK3ZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlESVIgKnByb2M7CkBAIC0xODksNiArMjE4LDU5IEBACiAJY2xvc2VkaXIocHJvYyk7CiB9CiAKK3N0cnVjdCBwcm9jZXNzX3N5bWJvbF9hcmdzIHsKKwljb25zdCBjaGFyICpuYW1lOworCXU2NAkgICBzdGFydDsKK307CisKK3N0YXRpYyBpbnQgZmluZF9zeW1ib2xfY2Iodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyIHR5cGUsIHU2NCBzdGFydCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19zeW1ib2xfYXJncyAqYXJncyA9IGFyZzsKKworCS8qCisJICogTXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGF0IGxlYXN0IGFuIGFsaWFzLCBhcyBpbiBQQVJJU0M2NCwgd2hlcmUgIl90ZXh0IiBpcworCSAqIGFuICdBJyB0byB0aGUgc2FtZSBhZGRyZXNzIGFzICJfc3RleHQiLgorCSAqLworCWlmICghKHN5bWJvbF90eXBlX19pc19hKHR5cGUsIE1BUF9fRlVOQ1RJT04pIHx8CisJICAgICAgdHlwZSA9PSAnQScpIHx8IHN0cmNtcChuYW1lLCBhcmdzLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlhcmdzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiAxOworfQorCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJCSAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lKQoreworCXNpemVfdCBzaXplOworCWV2ZW50X3QgZXYgPSB7CisJCS5oZWFkZXIgPSB7CisJCQkudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAsCisJCQkubWlzYyA9IDEsIC8qIGtlcm5lbCB1c2VzIDAgZm9yIHVzZXIgc3BhY2UgbWFwcywgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJfSwKKwl9OworCS8qCisJICogV2Ugc2hvdWxkIGdldCB0aGlzIGZyb20gL3N5cy9rZXJuZWwvc2VjdGlvbnMvLnRleHQsIGJ1dCB0aWxsIHRoYXQgaXMKKwkgKiBhdmFpbGFibGUgdXNlIHRoaXMsIGFuZCBhZnRlciBpdCBpcyB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrIGZvciBvbGRlcgorCSAqIGtlcm5lbHMuCisJICovCisJc3RydWN0IHByb2Nlc3Nfc3ltYm9sX2FyZ3MgYXJncyA9IHsgLm5hbWUgPSBzeW1ib2xfbmFtZSwgfTsKKworCWlmIChrYWxsc3ltc19fcGFyc2UoIi9wcm9jL2thbGxzeW1zIiwgJmFyZ3MsIGZpbmRfc3ltYm9sX2NiKSA8PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXNpemUgPSBzbnByaW50Zihldi5tbWFwLmZpbGVuYW1lLCBzaXplb2YoZXYubW1hcC5maWxlbmFtZSksCisJCQkiW2tlcm5lbC5rYWxsc3ltcy4lc10iLCBzeW1ib2xfbmFtZSkgKyAxOworCXNpemUgPSBBTElHTihzaXplLCBzaXplb2YodTY0KSk7CisJZXYubW1hcC5oZWFkZXIuc2l6ZSA9IChzaXplb2YoZXYubW1hcCkgLSAoc2l6ZW9mKGV2Lm1tYXAuZmlsZW5hbWUpIC0gc2l6ZSkpOworCWV2Lm1tYXAucGdvZmYgPSBhcmdzLnN0YXJ0OworCWV2Lm1tYXAuc3RhcnQgPSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPnN0YXJ0OworCWV2Lm1tYXAubGVuICAgPSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCAtIGV2Lm1tYXAuc3RhcnQgOworCisJcmV0dXJuIHByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKK30KKwogc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmKQogewogCWNoYXIgKmNvbW0gPSBzZWxmLT5jb21tOwpAQCAtMjQwLDIyICszMjIsODggQEAKIAogaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+bW1hcC5waWQpOwotCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9fbmV3KCZzZWxmLT5tbWFwLCBNQVBfX0ZVTkNUSU9OLAotCQkJCSAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IG1hcCAqbWFwOwogCi0JZHVtcF9wcmludGYoIiAlZC8lZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCi0JCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsCi0JCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAuc3RhcnQsCi0JCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAubGVuLAotCQkgICAgKHZvaWQgKikobG9uZylzZWxmLT5tbWFwLnBnb2ZmLAotCQkgICAgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisJZHVtcF9wcmludGYoIiAlZC8lZDogWyUjTHgoJSNMeCkgQCAlI0x4XTogJXNcbiIsCisJCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsIHNlbGYtPm1tYXAuc3RhcnQsCisJCSAgICBzZWxmLT5tbWFwLmxlbiwgc2VsZi0+bW1hcC5wZ29mZiwgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisKKwlpZiAoc2VsZi0+bW1hcC5waWQgPT0gMCkgeworCQlzdGF0aWMgY29uc3QgY2hhciBrbW1hcF9wcmVmaXhbXSA9ICJba2VybmVsLmthbGxzeW1zLiI7CisKKwkJaWYgKHNlbGYtPm1tYXAuZmlsZW5hbWVbMF0gPT0gJy8nKSB7CisJCQljaGFyIHNob3J0X21vZHVsZV9uYW1lWzEwMjRdOworCQkJY2hhciAqbmFtZSA9IHN0cnJjaHIoc2VsZi0+bW1hcC5maWxlbmFtZSwgJy8nKSwgKmRvdDsKKworCQkJaWYgKG5hbWUgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQkrK25hbWU7IC8qIHNraXAgLyAqLworCQkJZG90ID0gc3RycmNocihuYW1lLCAnLicpOworCQkJaWYgKGRvdCA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CisKKwkJCXNucHJpbnRmKHNob3J0X21vZHVsZV9uYW1lLCBzaXplb2Yoc2hvcnRfbW9kdWxlX25hbWUpLAorCQkJCSAiWyUuKnNdIiwgKGludCkoZG90IC0gbmFtZSksIG5hbWUpOworCQkJc3RyeGZyY2hhcihzaG9ydF9tb2R1bGVfbmFtZSwgJy0nLCAnXycpOworCisJCQltYXAgPSBwZXJmX3Nlc3Npb25fX25ld19tb2R1bGVfbWFwKHNlc3Npb24sCisJCQkJCQkJICAgc2VsZi0+bW1hcC5zdGFydCwKKwkJCQkJCQkgICBzZWxmLT5tbWFwLmZpbGVuYW1lKTsKKwkJCWlmIChtYXAgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQluYW1lID0gc3RyZHVwKHNob3J0X21vZHVsZV9uYW1lKTsKKwkJCWlmIChuYW1lID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJbWFwLT5kc28tPnNob3J0X25hbWUgPSBuYW1lOworCQkJbWFwLT5lbmQgPSBtYXAtPnN0YXJ0ICsgc2VsZi0+bW1hcC5sZW47CisJCX0gZWxzZSBpZiAobWVtY21wKHNlbGYtPm1tYXAuZmlsZW5hbWUsIGttbWFwX3ByZWZpeCwKKwkJCQlzaXplb2Yoa21tYXBfcHJlZml4KSAtIDEpID09IDApIHsKKwkJCWNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lID0gKHNlbGYtPm1tYXAuZmlsZW5hbWUgKworCQkJCQkJICAgc2l6ZW9mKGttbWFwX3ByZWZpeCkgLSAxKTsKKwkJCS8qCisJCQkgKiBTaG91bGQgYmUgdGhlcmUgYWxyZWFkeSwgZnJvbSB0aGUgYnVpbGQtaWQgdGFibGUgaW4KKwkJCSAqIHRoZSBoZWFkZXIuCisJCQkgKi8KKwkJCXN0cnVjdCBkc28gKmtlcm5lbCA9IF9fZHNvc19fZmluZG5ldygmZHNvc19fa2VybmVsLAorCQkJCQkJCSAgICAgIltrZXJuZWwua2FsbHN5bXNdIik7CisJCQlpZiAoa2VybmVsID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJa2VybmVsLT5rZXJuZWwgPSAxOworCQkJaWYgKF9fcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc2Vzc2lvbiwga2VybmVsKSA8IDApCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5zdGFydCA9IHNlbGYtPm1tYXAuc3RhcnQ7CisJCQlzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCAgID0gc2VsZi0+bW1hcC5zdGFydCArIHNlbGYtPm1tYXAubGVuOworCQkJLyoKKwkJCSAqIEJlIGEgYml0IHBhcmFub2lkIGhlcmUsIHNvbWUgcGVyZi5kYXRhIGZpbGUgY2FtZSB3aXRoCisJCQkgKiBhIHplcm8gc2l6ZWQgc3ludGhlc2l6ZWQgTU1BUCBldmVudCBmb3IgdGhlIGtlcm5lbC4KKwkJCSAqLworCQkJaWYgKHNlc3Npb24tPnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZW5kID09IDApCisJCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5lbmQgPSB+MFVMOworCisJCQlwZXJmX3Nlc3Npb25fX3NldF9rYWxsc3ltc19yZWZfcmVsb2Nfc3ltKHNlc3Npb24sIHN5bWJvbF9uYW1lLAorCQkJCQkJCQkgc2VsZi0+bW1hcC5wZ29mZik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPm1tYXAucGlkKTsKKwltYXAgPSBtYXBfX25ldygmc2VsZi0+bW1hcCwgTUFQX19GVU5DVElPTiwKKwkJICAgICAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fCBtYXAgPT0gTlVMTCkKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOwotCWVsc2UKLQkJdGhyZWFkX19pbnNlcnRfbWFwKHRocmVhZCwgbWFwKTsKKwkJZ290byBvdXRfcHJvYmxlbTsKIAorCXRocmVhZF9faW5zZXJ0X21hcCh0aHJlYWQsIG1hcCk7CisJcmV0dXJuIDA7CisKK291dF9wcm9ibGVtOgorCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg0LDI2ICs0MzIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICpzZWxmLAotCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCi0JCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKLQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCi0JCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAorCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKIAlzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcgPSAmc2VsZi0+bWc7CiAKIAlhbC0+dGhyZWFkID0gc2VsZjsKIAlhbC0+YWRkciA9IGFkZHI7CiAKLQlpZiAoY3B1bW9kZSAmIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKSB7CisJaWYgKGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpIHsKIAkJYWwtPmxldmVsID0gJ2snOwogCQltZyA9ICZzZXNzaW9uLT5rbWFwczsKLQl9IGVsc2UgaWYgKGNwdW1vZGUgJiBQRVJGX1JFQ09SRF9NSVNDX1VTRVIpCisJfSBlbHNlIGlmIChjcHVtb2RlID09IFBFUkZfUkVDT1JEX01JU0NfVVNFUikKIAkJYWwtPmxldmVsID0gJy4nOwogCWVsc2UgewogCQlhbC0+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+dHlwZTsKIAogCQlpZiAodHlwZSAhPSBwcmV2X3R5cGUpCiAJCQlwcmludGYoIlxuIik7CkBAIC05MTksMTcgKzkyNywxOSBAQAogCQkJZm9yIChpID0gMDsgaSA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWDsgaSsrKSB7CiAJCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCiAJCQkJCWV2ZW50X2NhY2hlX25hbWUodHlwZSwgb3AsIGkpLAotCQkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzWzRdKTsKKwkJCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfSFdfQ0FDSEVdKTsKIAkJCX0KIAkJfQogCX0KIAogCXByaW50ZigiXG4iKTsKLQlwcmludGYoIiAgJS00MnMgW3JhdyBoYXJkd2FyZSBldmVudCBkZXNjcmlwdG9yXVxuIiwKLQkJInJOTk4iKTsKKwlwcmludGYoIiAgJS00MnMgWyVzXVxuIiwKKwkJInJOTk4iLCBldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9SQVddKTsKIAlwcmludGYoIlxuIik7CiAKLQlwcmludGYoIiAgJS00MnMgW2hhcmR3YXJlIGJyZWFrcG9pbnRdXG4iLCAibWVtOjxhZGRyPls6YWNjZXNzXSIpOworCXByaW50ZigiICAlLTQycyBbJXNdXG4iLAorCQkJIm1lbTo8YWRkcj5bOmFjY2Vzc10iLAorCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfQlJFQUtQT0lOVF0pOwogCXByaW50ZigiXG4iKTsKIAogCXByaW50X3RyYWNlcG9pbnRfZXZlbnRzKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IDI5NDY1ZDQuLjhmMDU2ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgogI2luY2x1ZGUgInBhcnNlLWV2ZW50cy5oIiAgLyogRm9yIGRlYnVnZnNfcGF0aCAqLwogI2luY2x1ZGUgInByb2JlLWV2ZW50LmgiCiAKQEAgLTYyLDYgKzY0LDQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCBwYXJzZV9saW5lX3JhbmdlX2Rlc2MoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpCit7CisJY29uc3QgY2hhciAqcHRyOworCWNoYXIgKnRtcDsKKwkvKgorCSAqIDxTeW50YXg+CisJICogU1JDOlNMTlsrTlVNfC1FTE5dCisJICogRlVOQ1s6U0xOWytOVU18LUVMTl1dCisJICovCisJcHRyID0gc3RyY2hyKGFyZywgJzonKTsKKwlpZiAocHRyKSB7CisJCWxyLT5zdGFydCA9ICh1bnNpZ25lZCBpbnQpc3RydG91bChwdHIgKyAxLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXAgPT0gJysnKQorCQkJbHItPmVuZCA9IGxyLT5zdGFydCArICh1bnNpZ25lZCBpbnQpc3RydG91bCh0bXAgKyAxLAorCQkJCQkJCQkgICAgJnRtcCwgMCk7CisJCWVsc2UgaWYgKCp0bXAgPT0gJy0nKQorCQkJbHItPmVuZCA9ICh1bnNpZ25lZCBpbnQpc3RydG91bCh0bXAgKyAxLCAmdG1wLCAwKTsKKwkJZWxzZQorCQkJbHItPmVuZCA9IDA7CisJCXByX2RlYnVnKCJMaW5lIHJhbmdlIGlzICV1IHRvICV1XG4iLCBsci0+c3RhcnQsIGxyLT5lbmQpOworCQlpZiAobHItPmVuZCAmJiBsci0+c3RhcnQgPiBsci0+ZW5kKQorCQkJc2VtYW50aWNfZXJyb3IoIlN0YXJ0IGxpbmUgbXVzdCBiZSBzbWFsbGVyIgorCQkJCSAgICAgICAiIHRoYW4gZW5kIGxpbmUuIik7CisJCWlmICgqdG1wICE9ICdcMCcpCisJCQlzZW1hbnRpY19lcnJvcigiVGFpbGluZyB3aXRoIGludmFsaWQgY2hhcmFjdGVyICclZCcuIiwKKwkJCQkgICAgICAgKnRtcCk7CisJCXRtcCA9IHN0cm5kdXAoYXJnLCAocHRyIC0gYXJnKSk7CisJfSBlbHNlCisJCXRtcCA9IHN0cmR1cChhcmcpOworCisJaWYgKHN0cmNocih0bXAsICcuJykpCisJCWxyLT5maWxlID0gdG1wOworCWVsc2UKKwkJbHItPmZ1bmN0aW9uID0gdG1wOworfQorCiAvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLwogc3RhdGljIGJvb2wgY2hlY2tfZXZlbnRfbmFtZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMjcyLDYgKzMxMCw3IEBACiAJaW50IHJldDsKIAogCXBwLT5wcm9iZXNbMF0gPSBidWYgPSB6YWxsb2MoTUFYX0NNRExFTik7CisJcHAtPmZvdW5kID0gMTsKIAlpZiAoIWJ1ZikKIAkJZGllKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGJ5IHphbGxvYy4iKTsKIAlpZiAocHAtPm9mZnNldCkgewpAQCAtMjk0LDYgKzMzMyw3IEBACiBlcnJvcjoKIAkJZnJlZShwcC0+cHJvYmVzWzBdKTsKIAkJcHAtPnByb2Jlc1swXSA9IE5VTEw7CisJCXBwLT5mb3VuZCA9IDA7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0zNjgsNyArNDA4LDcgQEAKIAlpZiAocmV0IDwgMCkgewogCQlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQkJZGllKCJrcHJvYmVfZXZlbnRzIGZpbGUgZG9lcyBub3QgZXhpc3QgLSIKLQkJCSAgICAiIHBsZWFzZSByZWJ1aWxkIHdpdGggQ09ORklHX0tQUk9CRV9UUkFDRVIuIik7CisJCQkgICAgIiBwbGVhc2UgcmVidWlsZCB3aXRoIENPTkZJR19LUFJPQkVfRVZFTlQuIik7CiAJCWVsc2UKIAkJCWRpZSgiQ291bGQgbm90IG9wZW4ga3Byb2JlX2V2ZW50cyBmaWxlOiAlcyIsCiAJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTQ1NSw2ICs0OTUsOSBAQAogCXN0cnVjdCBzdHJsaXN0ICpyYXdsaXN0OwogCXN0cnVjdCBzdHJfbm9kZSAqZW50OwogCisJc2V0dXBfcGFnZXIoKTsKKworCW1lbXNldCgmcHAsIDAsIHNpemVvZihwcCkpOwogCWZkID0gb3Blbl9rcHJvYmVfZXZlbnRzKE9fUkRPTkxZLCAwKTsKIAlyYXdsaXN0ID0gZ2V0X3RyYWNlX2twcm9iZV9ldmVudF9yYXdsaXN0KGZkKTsKIAljbG9zZShmZCk7CkBAIC02NzUsMyArNzE4LDY2IEBACiAJY2xvc2UoZmQpOwogfQogCisjZGVmaW5lIExJTkVCVUZfU0laRSAyNTYKKworc3RhdGljIHZvaWQgc2hvd19vbmVfbGluZShGSUxFICpmcCwgdW5zaWduZWQgaW50IGwsIGJvb2wgc2tpcCwgYm9vbCBzaG93X251bSkKK3sKKwljaGFyIGJ1ZltMSU5FQlVGX1NJWkVdOworCWNvbnN0IGNoYXIgKmNvbG9yID0gUEVSRl9DT0xPUl9CTFVFOworCisJaWYgKGZnZXRzKGJ1ZiwgTElORUJVRl9TSVpFLCBmcCkgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwlpZiAoIXNraXApIHsKKwkJaWYgKHNob3dfbnVtKQorCQkJZnByaW50ZihzdGRvdXQsICIlN3UgICVzIiwgbCwgYnVmKTsKKwkJZWxzZQorCQkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiICAgICAgICAgJXMiLCBidWYpOworCX0KKworCXdoaWxlIChzdHJsZW4oYnVmKSA9PSBMSU5FQlVGX1NJWkUgLSAxICYmCisJICAgICAgIGJ1ZltMSU5FQlVGX1NJWkUgLSAyXSAhPSAnXG4nKSB7CisJCWlmIChmZ2V0cyhidWYsIExJTkVCVUZfU0laRSwgZnApID09IE5VTEwpCisJCQlnb3RvIGVycm9yOworCQlpZiAoIXNraXApIHsKKwkJCWlmIChzaG93X251bSkKKwkJCQlmcHJpbnRmKHN0ZG91dCwgIiVzIiwgYnVmKTsKKwkJCWVsc2UKKwkJCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgY29sb3IsICIlcyIsIGJ1Zik7CisJCX0KKwl9CisJcmV0dXJuOworZXJyb3I6CisJaWYgKGZlb2YoZnApKQorCQlkaWUoIlNvdXJjZSBmaWxlIGlzIHNob3J0ZXIgdGhhbiBleHBlY3RlZC4iKTsKKwllbHNlCisJCWRpZSgiRmlsZSByZWFkIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3ZvaWQgc2hvd19saW5lX3JhbmdlKHN0cnVjdCBsaW5lX3JhbmdlICpscikKK3sKKwl1bnNpZ25lZCBpbnQgbCA9IDE7CisJc3RydWN0IGxpbmVfbm9kZSAqbG47CisJRklMRSAqZnA7CisKKwlzZXR1cF9wYWdlcigpOworCisJaWYgKGxyLT5mdW5jdGlvbikKKwkJZnByaW50ZihzdGRvdXQsICI8JXM6JWQ+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+ZW5kKQorCQkJCQlsZi5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJCQllbHNlCisJCQkJCWxmLmxub19lID0gbHItPmVuZDsKKwkJCQlmaW5kX2xpbmVfcmFuZ2VfYnlfbGluZSgmbGYpOworCQkJfQorCQkJLyogR2V0IHRoZSByZWFsIGZpbGUgcGF0aCAqLworCQkJaWYgKGxmLmZvdW5kKQorCQkJCWN1X2dldF9maWxlbmFtZShsZi5jdV9kaWUsIGxmLmZubywgJmxyLT5wYXRoKTsKKwkJfQorCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGxmLmN1X2RpZSwgRFdfRExBX0RJRSk7CisJfQorCXJldCA9IGR3YXJmX2ZpbmlzaChfX2R3X2RlYnVnLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCXJldHVybiBsZi5mb3VuZDsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCmluZGV4IGE0MDg2YWEuLjk3MmIzODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9QUk9CRV9GSU5ERVJfSAogI2RlZmluZSBfUFJPQkVfRklOREVSX0gKIAorI2luY2x1ZGUgInV0aWwuaCIKKwogI2RlZmluZSBNQVhfUEFUSF9MRU4JCSAyNTYKICNkZWZpbmUgTUFYX1BST0JFX0JVRkZFUgkxMDI0CiAjZGVmaW5lIE1BWF9QUk9CRVMJCSAxMjgKQEAgLTMyLDggKzM0LDI2IEBACiAJY2hhcgkJCSpwcm9iZXNbTUFYX1BST0JFU107CS8qIE91dHB1dCBidWZmZXJzICh3aWxsIGJlIGFsbG9jYXRlZCkqLwogfTsKIAorLyogTGluZSBudW1iZXIgY29udGFpbmVyICovCitzdHJ1Y3QgbGluZV9ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJdW5zaWduZWQgaW50CQlsaW5lOworfTsKKworLyogTGluZSByYW5nZSAqLworc3RydWN0IGxpbmVfcmFuZ2UgeworCWNoYXIJCQkqZmlsZTsJCQkvKiBGaWxlIG5hbWUgKi8KKwljaGFyCQkJKmZ1bmN0aW9uOwkJLyogRnVuY3Rpb24gbmFtZSAqLworCXVuc2lnbmVkIGludAkJc3RhcnQ7CQkJLyogU3RhcnQgbGluZSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQJCWVuZDsJCQkvKiBFbmQgbGluZSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQJCW9mZnNldDsJCQkvKiBTdGFydCBsaW5lIG9mZnNldCAqLworCWNoYXIJCQkqcGF0aDsJCQkvKiBSZWFsIHBhdGggbmFtZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGluZV9saXN0OwkJLyogVmlzaWJsZSBsaW5lcyAqLworfTsKKwogI2lmbmRlZiBOT19MSUJEV0FSRgogZXh0ZXJuIGludCBmaW5kX3Byb2JlcG9pbnQoaW50IGZkLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKK2V4dGVybiBpbnQgZmluZF9saW5lX3JhbmdlKGludCBmZCwgc3RydWN0IGxpbmVfcmFuZ2UgKmxyKTsKIAogLyogV29ya2Fyb3VuZCBmb3IgdW5kZWZpbmVkIF9NSVBTX1NaTE9ORyBidWcgaW4gbGliZHdhcmYuaDogKi8KICNpZm5kZWYgX01JUFNfU1pMT05HCkBAIC02MCw2ICs4MCwxOSBAQAogCWNoYXIJCQkqYnVmOwkJCS8qIEN1cnJlbnQgb3V0cHV0IGJ1ZmZlciAqLwogCWludAkJCWxlbjsJCQkvKiBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlciAqLwogfTsKKworc3RydWN0IGxpbmVfZmluZGVyIHsKKwlzdHJ1Y3QgbGluZV9yYW5nZQkqbHI7CQkJLyogVGFyZ2V0IGxpbmUgcmFuZ2UgKi8KKworCUR3YXJmX1Vuc2lnbmVkCQlmbm87CQkJLyogRmlsZSBudW1iZXIgKi8KKwlEd2FyZl9VbnNpZ25lZAkJbG5vX3M7CQkJLyogU3RhcnQgbGluZSBudW1iZXIgKi8KKwlEd2FyZl9VbnNpZ25lZAkJbG5vX2U7CQkJLyogRW5kIGxpbmUgbnVtYmVyICovCisJRHdhcmZfQWRkcgkJYWRkcl9zOwkJCS8qIFN0YXJ0IGFkZHJlc3MgKi8KKwlEd2FyZl9BZGRyCQlhZGRyX2U7CQkJLyogRW5kIGFkZHJlc3MgKi8KKwlEd2FyZl9EaWUJCWN1X2RpZTsJCQkvKiBDdXJyZW50IENVICovCisJaW50CQkJZm91bmQ7Cit9OworCiAjZW5kaWYgLyogTk9fTElCRFdBUkYgKi8KIAogI2VuZGlmIC8qX1BST0JFX0ZJTkRFUl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSB0b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jCnJlbmFtZSB0byB0b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jCmluZGV4IDZkNmQ3NmIuLjUzNzYzNzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwpAQCAtMjUsMTAgKzI1LDE2IEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCi0jaW5jbHVkZSAiLi4vcGVyZi5oIgotI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgotI2luY2x1ZGUgInRyYWNlLWV2ZW50LXBlcmwuaCIKKyNpbmNsdWRlICIuLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vdXRpbC5oIgorI2luY2x1ZGUgIi4uL3RyYWNlLWV2ZW50LmgiCisKKyNpbmNsdWRlIDxFWFRFUk4uaD4KKyNpbmNsdWRlIDxwZXJsLmg+CisKK3ZvaWQgYm9vdF9QZXJmX19UcmFjZV9fQ29udGV4dChwVEhYXyBDViAqY3YpOwordm9pZCBib290X0R5bmFMb2FkZXIocFRIWF8gQ1YgKmN2KTsKK3R5cGVkZWYgUGVybEludGVycHJldGVyICogSU5URVJQOwogCiB2b2lkIHhzX2luaXQocFRIWCk7CiAKQEAgLTQ5LDcgKzU1LDcgQEAKIAogc3RydWN0IGV2ZW50ICpldmVudHNbRlRSQUNFX01BWF9FVkVOVF07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworZXh0ZXJuIHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqc2NyaXB0aW5nX2NvbnRleHQ7CiAKIHN0YXRpYyBjaGFyICpjdXJfZmllbGRfbmFtZTsKIHN0YXRpYyBpbnQgemVyb19mbGFnX2F0b207CkBAIC0yMzksMzMgKzI0NSw2IEBACiAJcmV0dXJuIGV2ZW50OwogfQogCi1pbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKLXsKLQlpbnQgcGM7Ci0KLQlwYyA9IHBhcnNlX2NvbW1vbl9wYyhjb250ZXh0LT5ldmVudF9kYXRhKTsKLQotCXJldHVybiBwYzsKLX0KLQotaW50IGNvbW1vbl9mbGFncyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCi17Ci0JaW50IGZsYWdzOwotCi0JZmxhZ3MgPSBwYXJzZV9jb21tb25fZmxhZ3MoY29udGV4dC0+ZXZlbnRfZGF0YSk7Ci0KLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLWludCBjb21tb25fbG9ja19kZXB0aChzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCi17Ci0JaW50IGxvY2tfZGVwdGg7Ci0KLQlsb2NrX2RlcHRoID0gcGFyc2VfY29tbW9uX2xvY2tfZGVwdGgoY29udGV4dC0+ZXZlbnRfZGF0YSk7Ci0KLQlyZXR1cm4gbG9ja19kZXB0aDsKLX0KLQogc3RhdGljIHZvaWQgcGVybF9wcm9jZXNzX2V2ZW50KGludCBjcHUsIHZvaWQgKmRhdGEsCiAJCQkgICAgICAgaW50IHNpemUgX191bnVzZWQsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzLCBjaGFyICpjb21tKQpAQCAtNTg3LDc1ICs1NjYsMyBAQAogCS5wcm9jZXNzX2V2ZW50ID0gcGVybF9wcm9jZXNzX2V2ZW50LAogCS5nZW5lcmF0ZV9zY3JpcHQgPSBwZXJsX2dlbmVyYXRlX3NjcmlwdCwKIH07Ci0KLXN0YXRpYyB2b2lkIHByaW50X3Vuc3VwcG9ydGVkX21zZyh2b2lkKQotewotCWZwcmludGYoc3RkZXJyLCAiUGVybCBzY3JpcHRpbmcgbm90IHN1cHBvcnRlZC4iCi0JCSIgIEluc3RhbGwgbGlicGVybCBhbmQgcmVidWlsZCBwZXJmIHRvIGVuYWJsZSBpdC5cbiIKLQkJIkZvciBleGFtcGxlOlxuICAjIGFwdC1nZXQgaW5zdGFsbCBsaWJwZXJsLWRldiAodWJ1bnR1KSIKLQkJIlxuICAjIHl1bSBpbnN0YWxsIHBlcmwtRXh0VXRpbHMtRW1iZWQgKEZlZG9yYSkiCi0JCSJcbiAgZXRjLlxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgcGVybF9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqc2NyaXB0IF9fdW51c2VkLAotCQkJCQkgaW50IGFyZ2MgX191bnVzZWQsCi0JCQkJCSBjb25zdCBjaGFyICoqYXJndiBfX3VudXNlZCkKLXsKLQlwcmludF91bnN1cHBvcnRlZF9tc2coKTsKLQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBwZXJsX3N0b3Bfc2NyaXB0X3Vuc3VwcG9ydGVkKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc19ldmVudF91bnN1cHBvcnRlZChpbnQgY3B1IF9fdW51c2VkLAotCQkJCQkgICB2b2lkICpkYXRhIF9fdW51c2VkLAotCQkJCQkgICBpbnQgc2l6ZSBfX3VudXNlZCwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzIF9fdW51c2VkLAotCQkJCQkgICBjaGFyICpjb21tIF9fdW51c2VkKQotewotfQotCi1zdGF0aWMgaW50IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm91dGZpbGUgX191bnVzZWQpCi17Ci0JcHJpbnRfdW5zdXBwb3J0ZWRfbXNnKCk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0cnVjdCBzY3JpcHRpbmdfb3BzIHBlcmxfc2NyaXB0aW5nX3Vuc3VwcG9ydGVkX29wcyA9IHsKLQkubmFtZSA9ICJQZXJsIiwKLQkuc3RhcnRfc2NyaXB0ID0gcGVybF9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQsCi0JLnN0b3Bfc2NyaXB0ID0gcGVybF9zdG9wX3NjcmlwdF91bnN1cHBvcnRlZCwKLQkucHJvY2Vzc19ldmVudCA9IHBlcmxfcHJvY2Vzc19ldmVudF91bnN1cHBvcnRlZCwKLQkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQsCi19OwotCi1zdGF0aWMgdm9pZCByZWdpc3Rlcl9wZXJsX3NjcmlwdGluZyhzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqc2NyaXB0aW5nX29wcykKLXsKLQlpbnQgZXJyOwotCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJQZXJsIiwgc2NyaXB0aW5nX29wcyk7Ci0JaWYgKGVycikKLQkJZGllKCJlcnJvciByZWdpc3RlcmluZyBQZXJsIHNjcmlwdCBleHRlbnNpb24iKTsKLQotCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJwbCIsIHNjcmlwdGluZ19vcHMpOwotCWlmIChlcnIpCi0JCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgcGwgc2NyaXB0IGV4dGVuc2lvbiIpOwotCi0Jc2NyaXB0aW5nX2NvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCkpOwotfQotCi0jaWZkZWYgTk9fTElCUEVSTAotdm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKQotewotCXJlZ2lzdGVyX3Blcmxfc2NyaXB0aW5nKCZwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMpOwotfQotI2Vsc2UKLXZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKLXsKLQlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfb3BzKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTQxNGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMKQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgKiB0cmFjZS1ldmVudC1weXRob24uICBGZWVkIHRyYWNlIGV2ZW50cyB0byBhbiBlbWJlZGRlZCBQeXRob24gaW50ZXJwcmV0ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxQeXRob24uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiLi4vLi4vcGVyZi5oIgorI2luY2x1ZGUgIi4uL3V0aWwuaCIKKyNpbmNsdWRlICIuLi90cmFjZS1ldmVudC5oIgorCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpOworCisjZGVmaW5lIEZUUkFDRV9NQVhfRVZFTlQJCQkJXAorCSgoMSA8PCAoc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDgpKSAtIDEpCisKK3N0cnVjdCBldmVudCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOworCisjZGVmaW5lIE1BWF9GSUVMRFMJNjQKKyNkZWZpbmUgTl9DT01NT05fRklFTERTCTcKKworZXh0ZXJuIHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqc2NyaXB0aW5nX2NvbnRleHQ7CisKK3N0YXRpYyBjaGFyICpjdXJfZmllbGRfbmFtZTsKK3N0YXRpYyBpbnQgemVyb19mbGFnX2F0b207CisKK3N0YXRpYyBQeU9iamVjdCAqbWFpbl9tb2R1bGUsICptYWluX2RpY3Q7CisKK3N0YXRpYyB2b2lkIGhhbmRsZXJfY2FsbF9kaWUoY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lKQoreworCVB5RXJyX1ByaW50KCk7CisJUHlfRmF0YWxFcnJvcigicHJvYmxlbSBpbiBQeXRob24gdHJhY2UgZXZlbnQgaGFuZGxlciIpOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfdmFsdWUoZW51bSBwcmludF9hcmdfdHlwZSBmaWVsZF90eXBlLAorCQkJIGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkgY29uc3QgY2hhciAqZmllbGRfbmFtZSwKKwkJCSBjb25zdCBjaGFyICpmaWVsZF92YWx1ZSwKKwkJCSBjb25zdCBjaGFyICpmaWVsZF9zdHIpCit7CisJY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lID0gImRlZmluZV9mbGFnX3ZhbHVlIjsKKwlQeU9iamVjdCAqaGFuZGxlciwgKnQsICpyZXR2YWw7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOworCXVuc2lnbmVkIG4gPSAwOworCisJaWYgKGZpZWxkX3R5cGUgPT0gUFJJTlRfU1lNQk9MKQorCQloYW5kbGVyX25hbWUgPSAiZGVmaW5lX3N5bWJvbGljX3ZhbHVlIjsKKworCXQgPSBQeVR1cGxlX05ldyg0KTsKKwlpZiAoIXQpCisJCVB5X0ZhdGFsRXJyb3IoImNvdWxkbid0IGNyZWF0ZSBQeXRob24gdHVwbGUiKTsKKworCXZhbHVlID0gZXZhbF9mbGFnKGZpZWxkX3ZhbHVlKTsKKworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZXZfbmFtZSkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZmllbGRfbmFtZSkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKHZhbHVlKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhmaWVsZF9zdHIpKTsKKworCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsIGhhbmRsZXJfbmFtZSk7CisJaWYgKGhhbmRsZXIgJiYgUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkgeworCQlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIHQpOworCQlpZiAocmV0dmFsID09IE5VTEwpCisJCQloYW5kbGVyX2NhbGxfZGllKGhhbmRsZXJfbmFtZSk7CisJfQorCisJUHlfREVDUkVGKHQpOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfdmFsdWVzKGVudW0gcHJpbnRfYXJnX3R5cGUgZmllbGRfdHlwZSwKKwkJCSAgc3RydWN0IHByaW50X2ZsYWdfc3ltICpmaWVsZCwKKwkJCSAgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCSAgY29uc3QgY2hhciAqZmllbGRfbmFtZSkKK3sKKwlkZWZpbmVfdmFsdWUoZmllbGRfdHlwZSwgZXZfbmFtZSwgZmllbGRfbmFtZSwgZmllbGQtPnZhbHVlLAorCQkgICAgIGZpZWxkLT5zdHIpOworCisJaWYgKGZpZWxkLT5uZXh0KQorCQlkZWZpbmVfdmFsdWVzKGZpZWxkX3R5cGUsIGZpZWxkLT5uZXh0LCBldl9uYW1lLCBmaWVsZF9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX2ZpZWxkKGVudW0gcHJpbnRfYXJnX3R5cGUgZmllbGRfdHlwZSwKKwkJCSBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsCisJCQkgY29uc3QgY2hhciAqZGVsaW0pCit7CisJY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lID0gImRlZmluZV9mbGFnX2ZpZWxkIjsKKwlQeU9iamVjdCAqaGFuZGxlciwgKnQsICpyZXR2YWw7CisJdW5zaWduZWQgbiA9IDA7CisKKwlpZiAoZmllbGRfdHlwZSA9PSBQUklOVF9TWU1CT0wpCisJCWhhbmRsZXJfbmFtZSA9ICJkZWZpbmVfc3ltYm9saWNfZmllbGQiOworCisJaWYgKGZpZWxkX3R5cGUgPT0gUFJJTlRfRkxBR1MpCisJCXQgPSBQeVR1cGxlX05ldygzKTsKKwllbHNlCisJCXQgPSBQeVR1cGxlX05ldygyKTsKKwlpZiAoIXQpCisJCVB5X0ZhdGFsRXJyb3IoImNvdWxkbid0IGNyZWF0ZSBQeXRob24gdHVwbGUiKTsKKworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZXZfbmFtZSkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZmllbGRfbmFtZSkpOworCWlmIChmaWVsZF90eXBlID09IFBSSU5UX0ZMQUdTKQorCQlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGRlbGltKSk7CisKKwloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBoYW5kbGVyX25hbWUpOworCWlmIChoYW5kbGVyICYmIFB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpIHsKKwkJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCB0KTsKKwkJaWYgKHJldHZhbCA9PSBOVUxMKQorCQkJaGFuZGxlcl9jYWxsX2RpZShoYW5kbGVyX25hbWUpOworCX0KKworCVB5X0RFQ1JFRih0KTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX2V2ZW50X3N5bWJvbHMoc3RydWN0IGV2ZW50ICpldmVudCwKKwkJCQkgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCQkgc3RydWN0IHByaW50X2FyZyAqYXJncykKK3sKKwlzd2l0Y2ggKGFyZ3MtPnR5cGUpIHsKKwljYXNlIFBSSU5UX05VTEw6CisJCWJyZWFrOworCWNhc2UgUFJJTlRfQVRPTToKKwkJZGVmaW5lX3ZhbHVlKFBSSU5UX0ZMQUdTLCBldl9uYW1lLCBjdXJfZmllbGRfbmFtZSwgIjAiLAorCQkJICAgICBhcmdzLT5hdG9tLmF0b20pOworCQl6ZXJvX2ZsYWdfYXRvbSA9IDA7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfRklFTEQ6CisJCWlmIChjdXJfZmllbGRfbmFtZSkKKwkJCWZyZWUoY3VyX2ZpZWxkX25hbWUpOworCQljdXJfZmllbGRfbmFtZSA9IHN0cmR1cChhcmdzLT5maWVsZC5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9GTEFHUzoKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPmZsYWdzLmZpZWxkKTsKKwkJZGVmaW5lX2ZpZWxkKFBSSU5UX0ZMQUdTLCBldl9uYW1lLCBjdXJfZmllbGRfbmFtZSwKKwkJCSAgICAgYXJncy0+ZmxhZ3MuZGVsaW0pOworCQlkZWZpbmVfdmFsdWVzKFBSSU5UX0ZMQUdTLCBhcmdzLT5mbGFncy5mbGFncywgZXZfbmFtZSwKKwkJCSAgICAgIGN1cl9maWVsZF9uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9TWU1CT0w6CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5zeW1ib2wuZmllbGQpOworCQlkZWZpbmVfZmllbGQoUFJJTlRfU1lNQk9MLCBldl9uYW1lLCBjdXJfZmllbGRfbmFtZSwgTlVMTCk7CisJCWRlZmluZV92YWx1ZXMoUFJJTlRfU1lNQk9MLCBhcmdzLT5zeW1ib2wuc3ltYm9scywgZXZfbmFtZSwKKwkJCSAgICAgIGN1cl9maWVsZF9uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9TVFJJTkc6CisJCWJyZWFrOworCWNhc2UgUFJJTlRfVFlQRToKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPnR5cGVjYXN0Lml0ZW0pOworCQlicmVhazsKKwljYXNlIFBSSU5UX09QOgorCQlpZiAoc3RyY21wKGFyZ3MtPm9wLm9wLCAiOiIpID09IDApCisJCQl6ZXJvX2ZsYWdfYXRvbSA9IDE7CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5vcC5sZWZ0KTsKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm9wLnJpZ2h0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogd2Ugc2hvdWxkIHdhcm4uLi4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChhcmdzLT5uZXh0KQorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+bmV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV2ZW50ICpmaW5kX2NhY2hlX2V2ZW50KGludCB0eXBlKQoreworCXN0YXRpYyBjaGFyIGV2X25hbWVbMjU2XTsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCisJaWYgKGV2ZW50c1t0eXBlXSkKKwkJcmV0dXJuIGV2ZW50c1t0eXBlXTsKKworCWV2ZW50c1t0eXBlXSA9IGV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gTlVMTDsKKworCXNwcmludGYoZXZfbmFtZSwgIiVzX18lcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKKworCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBldmVudC0+cHJpbnRfZm10LmFyZ3MpOworCisJcmV0dXJuIGV2ZW50OworfQorCitzdGF0aWMgdm9pZCBweXRob25fcHJvY2Vzc19ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLAorCQkJCSBpbnQgc2l6ZSBfX3VudXNlZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzLCBjaGFyICpjb21tKQoreworCVB5T2JqZWN0ICpoYW5kbGVyLCAqcmV0dmFsLCAqY29udGV4dCwgKnQ7CisJc3RhdGljIGNoYXIgaGFuZGxlcl9uYW1lWzI1Nl07CisJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHMsIG5zOworCXN0cnVjdCBldmVudCAqZXZlbnQ7CisJdW5zaWduZWQgbiA9IDA7CisJaW50IHR5cGU7CisJaW50IHBpZDsKKworCXQgPSBQeVR1cGxlX05ldyhNQVhfRklFTERTKTsKKwlpZiAoIXQpCisJCVB5X0ZhdGFsRXJyb3IoImNvdWxkbid0IGNyZWF0ZSBQeXRob24gdHVwbGUiKTsKKworCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShkYXRhKTsKKworCWV2ZW50ID0gZmluZF9jYWNoZV9ldmVudCh0eXBlKTsKKwlpZiAoIWV2ZW50KQorCQlkaWUoInVnISBubyBldmVudCBmb3VuZCBmb3IgdHlwZSAlZCIsIHR5cGUpOworCisJcGlkID0gdHJhY2VfcGFyc2VfY29tbW9uX3BpZChkYXRhKTsKKworCXNwcmludGYoaGFuZGxlcl9uYW1lLCAiJXNfXyVzIiwgZXZlbnQtPnN5c3RlbSwgZXZlbnQtPm5hbWUpOworCisJcyA9IG5zZWNzIC8gTlNFQ1NfUEVSX1NFQzsKKwlucyA9IG5zZWNzIC0gcyAqIE5TRUNTX1BFUl9TRUM7CisKKwlzY3JpcHRpbmdfY29udGV4dC0+ZXZlbnRfZGF0YSA9IGRhdGE7CisKKwljb250ZXh0ID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHNjcmlwdGluZ19jb250ZXh0LCBOVUxMKTsKKworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoaGFuZGxlcl9uYW1lKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywKKwkJCVB5Q09iamVjdF9Gcm9tVm9pZFB0cihzY3JpcHRpbmdfY29udGV4dCwgTlVMTCkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKGNwdSkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKHMpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyhucykpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKHBpZCkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoY29tbSkpOworCisJZm9yIChmaWVsZCA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmaWVsZDsgZmllbGQgPSBmaWVsZC0+bmV4dCkgeworCQlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfU1RSSU5HKSB7CisJCQlpbnQgb2Zmc2V0OworCQkJaWYgKGZpZWxkLT5mbGFncyAmIEZJRUxEX0lTX0RZTkFNSUMpIHsKKwkJCQlvZmZzZXQgPSAqKGludCAqKShkYXRhICsgZmllbGQtPm9mZnNldCk7CisJCQkJb2Zmc2V0ICY9IDB4ZmZmZjsKKwkJCX0gZWxzZQorCQkJCW9mZnNldCA9IGZpZWxkLT5vZmZzZXQ7CisJCQlQeVR1cGxlX1NldEl0ZW0odCwgbisrLAorCQkJCVB5U3RyaW5nX0Zyb21TdHJpbmcoKGNoYXIgKilkYXRhICsgb2Zmc2V0KSk7CisJCX0gZWxzZSB7IC8qIEZJRUxEX0lTX05VTUVSSUMgKi8KKwkJCXZhbCA9IHJlYWRfc2l6ZShkYXRhICsgZmllbGQtPm9mZnNldCwgZmllbGQtPnNpemUpOworCQkJaWYgKGZpZWxkLT5mbGFncyAmIEZJRUxEX0lTX1NJR05FRCkgeworCQkJCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKHZhbCkpOworCQkJfSBlbHNlIHsKKwkJCQlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyh2YWwpKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChfUHlUdXBsZV9SZXNpemUoJnQsIG4pID09IC0xKQorCQlQeV9GYXRhbEVycm9yKCJlcnJvciByZXNpemluZyBQeXRob24gdHVwbGUiKTsKKworCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsIGhhbmRsZXJfbmFtZSk7CisJaWYgKGhhbmRsZXIgJiYgUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkgeworCQlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIHQpOworCQlpZiAocmV0dmFsID09IE5VTEwpCisJCQloYW5kbGVyX2NhbGxfZGllKGhhbmRsZXJfbmFtZSk7CisJfSBlbHNlIHsKKwkJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgInRyYWNlX3VuaGFuZGxlZCIpOworCQlpZiAoaGFuZGxlciAmJiBQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKSB7CisJCQlpZiAoX1B5VHVwbGVfUmVzaXplKCZ0LCBOX0NPTU1PTl9GSUVMRFMpID09IC0xKQorCQkJCVB5X0ZhdGFsRXJyb3IoImVycm9yIHJlc2l6aW5nIFB5dGhvbiB0dXBsZSIpOworCisJCQlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIHQpOworCQkJaWYgKHJldHZhbCA9PSBOVUxMKQorCQkJCWhhbmRsZXJfY2FsbF9kaWUoInRyYWNlX3VuaGFuZGxlZCIpOworCQl9CisJfQorCisJUHlfREVDUkVGKHQpOworfQorCitzdGF0aWMgaW50IHJ1bl9zdGFydF9zdWIodm9pZCkKK3sKKwlQeU9iamVjdCAqaGFuZGxlciwgKnJldHZhbDsKKwlpbnQgZXJyID0gMDsKKworCW1haW5fbW9kdWxlID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOworCWlmIChtYWluX21vZHVsZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJUHlfSU5DUkVGKG1haW5fbW9kdWxlKTsKKworCW1haW5fZGljdCA9IFB5TW9kdWxlX0dldERpY3QobWFpbl9tb2R1bGUpOworCWlmIChtYWluX2RpY3QgPT0gTlVMTCkgeworCQllcnIgPSAtMTsKKwkJZ290byBlcnJvcjsKKwl9CisJUHlfSU5DUkVGKG1haW5fZGljdCk7CisKKwloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCAidHJhY2VfYmVnaW4iKTsKKwlpZiAoaGFuZGxlciA9PSBOVUxMIHx8ICFQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgTlVMTCk7CisJaWYgKHJldHZhbCA9PSBOVUxMKQorCQloYW5kbGVyX2NhbGxfZGllKCJ0cmFjZV9iZWdpbiIpOworCisJUHlfREVDUkVGKHJldHZhbCk7CisJcmV0dXJuIGVycjsKK2Vycm9yOgorCVB5X1hERUNSRUYobWFpbl9kaWN0KTsKKwlQeV9YREVDUkVGKG1haW5fbW9kdWxlKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU3RhcnQgdHJhY2Ugc2NyaXB0CisgKi8KK3N0YXRpYyBpbnQgcHl0aG9uX3N0YXJ0X3NjcmlwdChjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICoqY29tbWFuZF9saW5lOworCWNoYXIgYnVmW1BBVEhfTUFYXTsKKwlpbnQgaSwgZXJyID0gMDsKKwlGSUxFICpmcDsKKworCWNvbW1hbmRfbGluZSA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworCWNvbW1hbmRfbGluZVswXSA9IHNjcmlwdDsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYyArIDE7IGkrKykKKwkJY29tbWFuZF9saW5lW2ldID0gYXJndltpIC0gMV07CisKKwlQeV9Jbml0aWFsaXplKCk7CisKKwlpbml0cGVyZl90cmFjZV9jb250ZXh0KCk7CisKKwlQeVN5c19TZXRBcmd2KGFyZ2MgKyAxLCAoY2hhciAqKiljb21tYW5kX2xpbmUpOworCisJZnAgPSBmb3BlbihzY3JpcHQsICJyIik7CisJaWYgKCFmcCkgeworCQlzcHJpbnRmKGJ1ZiwgIkNhbid0IG9wZW4gcHl0aG9uIHNjcmlwdCBcIiVzXCIiLCBzY3JpcHQpOworCQlwZXJyb3IoYnVmKTsKKwkJZXJyID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gUHlSdW5fU2ltcGxlRmlsZShmcCwgc2NyaXB0KTsKKwlpZiAoZXJyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgcnVubmluZyBweXRob24gc2NyaXB0ICVzXG4iLCBzY3JpcHQpOworCQlnb3RvIGVycm9yOworCX0KKworCWVyciA9IHJ1bl9zdGFydF9zdWIoKTsKKwlpZiAoZXJyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc3RhcnRpbmcgcHl0aG9uIHNjcmlwdCAlc1xuIiwgc2NyaXB0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlmcmVlKGNvbW1hbmRfbGluZSk7CisJZnByaW50ZihzdGRlcnIsICJwZXJmIHRyYWNlIHN0YXJ0ZWQgd2l0aCBQeXRob24gc2NyaXB0ICVzXG5cbiIsCisJCXNjcmlwdCk7CisKKwlyZXR1cm4gZXJyOworZXJyb3I6CisJUHlfRmluYWxpemUoKTsKKwlmcmVlKGNvbW1hbmRfbGluZSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU3RvcCB0cmFjZSBzY3JpcHQKKyAqLworc3RhdGljIGludCBweXRob25fc3RvcF9zY3JpcHQodm9pZCkKK3sKKwlQeU9iamVjdCAqaGFuZGxlciwgKnJldHZhbDsKKwlpbnQgZXJyID0gMDsKKworCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsICJ0cmFjZV9lbmQiKTsKKwlpZiAoaGFuZGxlciA9PSBOVUxMIHx8ICFQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgTlVMTCk7CisJaWYgKHJldHZhbCA9PSBOVUxMKQorCQloYW5kbGVyX2NhbGxfZGllKCJ0cmFjZV9lbmQiKTsKKwllbHNlCisJCVB5X0RFQ1JFRihyZXR2YWwpOworb3V0OgorCVB5X1hERUNSRUYobWFpbl9kaWN0KTsKKwlQeV9YREVDUkVGKG1haW5fbW9kdWxlKTsKKwlQeV9GaW5hbGl6ZSgpOworCisJZnByaW50ZihzdGRlcnIsICJcbnBlcmYgdHJhY2UgUHl0aG9uIHNjcmlwdCBzdG9wcGVkXG4iKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2dlbmVyYXRlX3NjcmlwdChjb25zdCBjaGFyICpvdXRmaWxlKQoreworCXN0cnVjdCBldmVudCAqZXZlbnQgPSBOVUxMOworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmY7CisJY2hhciBmbmFtZVtQQVRIX01BWF07CisJaW50IG5vdF9maXJzdCwgY291bnQ7CisJRklMRSAqb2ZwOworCisJc3ByaW50ZihmbmFtZSwgIiVzLnB5Iiwgb3V0ZmlsZSk7CisJb2ZwID0gZm9wZW4oZm5hbWUsICJ3Iik7CisJaWYgKG9mcCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgb3BlbiAlc1xuIiwgZm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCWZwcmludGYob2ZwLCAiIyBwZXJmIHRyYWNlIGV2ZW50IGhhbmRsZXJzLCAiCisJCSJnZW5lcmF0ZWQgYnkgcGVyZiB0cmFjZSAtZyBweXRob25cbiIpOworCisJZnByaW50ZihvZnAsICIjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCIKKwkJIiBMaWNlbnNlIHZlcnNpb24gMlxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCAiCisJCSJmaWVsZHMgY29tbW9uIHRvXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBhbGwgZXZlbnRzLiAgVGhleSBkb24ndCBuZWNlc3NhcmlseSBjb3JyZXNwb25kIHRvICIKKwkJInRoZSAnY29tbW9uXyonIGZpZWxkc1xuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgaW4gdGhlIGZvcm1hdCBmaWxlcy4gIFRob3NlIGZpZWxkcyBub3QgYXZhaWxhYmxlIGFzICIKKwkJImhhbmRsZXIgcGFyYW1zIGNhblxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgYmUgcmV0cmlldmVkIHVzaW5nIFB5dGhvbiBmdW5jdGlvbnMgb2YgdGhlIGZvcm0gIgorCQkiY29tbW9uXyooY29udGV4dCkuXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBTZWUgdGhlIHBlcmYtdHJhY2UtcHl0aG9uIERvY3VtZW50YXRpb24gZm9yIHRoZSBsaXN0ICIKKwkJIm9mIGF2YWlsYWJsZSBmdW5jdGlvbnMuXG5cbiIpOworCisJZnByaW50ZihvZnAsICJpbXBvcnQgb3NcbiIpOworCWZwcmludGYob2ZwLCAiaW1wb3J0IHN5c1xuXG4iKTsKKworCWZwcmludGYob2ZwLCAic3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcXFxuIik7CisJZnByaW50ZihvZnAsICJcdCcvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJylcbiIpOworCWZwcmludGYob2ZwLCAiXG5mcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKlxuIik7CisJZnByaW50ZihvZnAsICJmcm9tIENvcmUgaW1wb3J0ICpcblxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiZGVmIHRyYWNlX2JlZ2luKCk6XG4iKTsKKwlmcHJpbnRmKG9mcCwgIlx0cHJpbnQgXCJpbiB0cmFjZV9iZWdpblwiXG5cbiIpOworCisJZnByaW50ZihvZnAsICJkZWYgdHJhY2VfZW5kKCk6XG4iKTsKKwlmcHJpbnRmKG9mcCwgIlx0cHJpbnQgXCJpbiB0cmFjZV9lbmRcIlxuXG4iKTsKKworCXdoaWxlICgoZXZlbnQgPSB0cmFjZV9maW5kX25leHRfZXZlbnQoZXZlbnQpKSkgeworCQlmcHJpbnRmKG9mcCwgImRlZiAlc19fJXMoIiwgZXZlbnQtPnN5c3RlbSwgZXZlbnQtPm5hbWUpOworCQlmcHJpbnRmKG9mcCwgImV2ZW50X25hbWUsICIpOworCQlmcHJpbnRmKG9mcCwgImNvbnRleHQsICIpOworCQlmcHJpbnRmKG9mcCwgImNvbW1vbl9jcHUsXG4iKTsKKwkJZnByaW50ZihvZnAsICJcdGNvbW1vbl9zZWNzLCAiKTsKKwkJZnByaW50ZihvZnAsICJjb21tb25fbnNlY3MsICIpOworCQlmcHJpbnRmKG9mcCwgImNvbW1vbl9waWQsICIpOworCQlmcHJpbnRmKG9mcCwgImNvbW1vbl9jb21tLFxuXHQiKTsKKworCQlub3RfZmlyc3QgPSAwOworCQljb3VudCA9IDA7CisKKwkJZm9yIChmID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGY7IGYgPSBmLT5uZXh0KSB7CisJCQlpZiAobm90X2ZpcnN0KyspCisJCQkJZnByaW50ZihvZnAsICIsICIpOworCQkJaWYgKCsrY291bnQgJSA1ID09IDApCisJCQkJZnByaW50ZihvZnAsICJcblx0Iik7CisKKwkJCWZwcmludGYob2ZwLCAiJXMiLCBmLT5uYW1lKTsKKwkJfQorCQlmcHJpbnRmKG9mcCwgIik6XG4iKTsKKworCQlmcHJpbnRmKG9mcCwgIlx0XHRwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgIgorCQkJImNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsXG5cdFx0XHQiCisJCQkiY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pXG5cbiIpOworCisJCWZwcmludGYob2ZwLCAiXHRcdHByaW50IFwiIik7CisKKwkJbm90X2ZpcnN0ID0gMDsKKwkJY291bnQgPSAwOworCisJCWZvciAoZiA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmOyBmID0gZi0+bmV4dCkgeworCQkJaWYgKG5vdF9maXJzdCsrKQorCQkJCWZwcmludGYob2ZwLCAiLCAiKTsKKwkJCWlmIChjb3VudCAmJiBjb3VudCAlIDMgPT0gMCkgeworCQkJCWZwcmludGYob2ZwLCAiXCIgXFxcblx0XHRcIiIpOworCQkJfQorCQkJY291bnQrKzsKKworCQkJZnByaW50ZihvZnAsICIlcz0iLCBmLT5uYW1lKTsKKwkJCWlmIChmLT5mbGFncyAmIEZJRUxEX0lTX1NUUklORyB8fAorCQkJICAgIGYtPmZsYWdzICYgRklFTERfSVNfRkxBRyB8fAorCQkJICAgIGYtPmZsYWdzICYgRklFTERfSVNfU1lNQk9MSUMpCisJCQkJZnByaW50ZihvZnAsICIlJXMiKTsKKwkJCWVsc2UgaWYgKGYtPmZsYWdzICYgRklFTERfSVNfU0lHTkVEKQorCQkJCWZwcmludGYob2ZwLCAiJSVkIik7CisJCQllbHNlCisJCQkJZnByaW50ZihvZnAsICIlJXUiKTsKKwkJfQorCisJCWZwcmludGYob2ZwLCAiXFxuXCIgJSUgXFxcblx0XHQoIik7CisKKwkJbm90X2ZpcnN0ID0gMDsKKwkJY291bnQgPSAwOworCisJCWZvciAoZiA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmOyBmID0gZi0+bmV4dCkgeworCQkJaWYgKG5vdF9maXJzdCsrKQorCQkJCWZwcmludGYob2ZwLCAiLCAiKTsKKworCQkJaWYgKCsrY291bnQgJSA1ID09IDApCisJCQkJZnByaW50ZihvZnAsICJcblx0XHQiKTsKKworCQkJaWYgKGYtPmZsYWdzICYgRklFTERfSVNfRkxBRykgeworCQkJCWlmICgoY291bnQgLSAxKSAlIDUgIT0gMCkgeworCQkJCQlmcHJpbnRmKG9mcCwgIlxuXHRcdCIpOworCQkJCQljb3VudCA9IDQ7CisJCQkJfQorCQkJCWZwcmludGYob2ZwLCAiZmxhZ19zdHIoXCIiKTsKKwkJCQlmcHJpbnRmKG9mcCwgIiVzX18lc1wiLCAiLCBldmVudC0+c3lzdGVtLAorCQkJCQlldmVudC0+bmFtZSk7CisJCQkJZnByaW50ZihvZnAsICJcIiVzXCIsICVzKSIsIGYtPm5hbWUsCisJCQkJCWYtPm5hbWUpOworCQkJfSBlbHNlIGlmIChmLT5mbGFncyAmIEZJRUxEX0lTX1NZTUJPTElDKSB7CisJCQkJaWYgKChjb3VudCAtIDEpICUgNSAhPSAwKSB7CisJCQkJCWZwcmludGYob2ZwLCAiXG5cdFx0Iik7CisJCQkJCWNvdW50ID0gNDsKKwkJCQl9CisJCQkJZnByaW50ZihvZnAsICJzeW1ib2xfc3RyKFwiIik7CisJCQkJZnByaW50ZihvZnAsICIlc19fJXNcIiwgIiwgZXZlbnQtPnN5c3RlbSwKKwkJCQkJZXZlbnQtPm5hbWUpOworCQkJCWZwcmludGYob2ZwLCAiXCIlc1wiLCAlcykiLCBmLT5uYW1lLAorCQkJCQlmLT5uYW1lKTsKKwkJCX0gZWxzZQorCQkJCWZwcmludGYob2ZwLCAiJXMiLCBmLT5uYW1lKTsKKwkJfQorCisJCWZwcmludGYob2ZwLCAiKSxcblxuIik7CisJfQorCisJZnByaW50ZihvZnAsICJkZWYgdHJhY2VfdW5oYW5kbGVkKGV2ZW50X25hbWUsIGNvbnRleHQsICIKKwkJImNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsXG5cdFx0IgorCQkiY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pOlxuIik7CisKKwlmcHJpbnRmKG9mcCwgIlx0XHRwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgIgorCQkiY29tbW9uX3NlY3MsIGNvbW1vbl9uc2Vjcyxcblx0XHRjb21tb25fcGlkLCAiCisJCSJjb21tb25fY29tbSlcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgImRlZiBwcmludF9oZWFkZXIoIgorCQkiZXZlbnRfbmFtZSwgY3B1LCBzZWNzLCBuc2VjcywgcGlkLCBjb21tKTpcbiIKKwkJIlx0cHJpbnQgXCIlJS0yMHMgJSU1dSAlJTA1dS4lJTA5dSAlJTh1ICUlLTIwcyBcIiAlJSBcXFxuXHQiCisJCSIoZXZlbnRfbmFtZSwgY3B1LCBzZWNzLCBuc2VjcywgcGlkLCBjb21tKSxcbiIpOworCisJZmNsb3NlKG9mcCk7CisKKwlmcHJpbnRmKHN0ZGVyciwgImdlbmVyYXRlZCBQeXRob24gc2NyaXB0OiAlc1xuIiwgZm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHB5dGhvbl9zY3JpcHRpbmdfb3BzID0geworCS5uYW1lID0gIlB5dGhvbiIsCisJLnN0YXJ0X3NjcmlwdCA9IHB5dGhvbl9zdGFydF9zY3JpcHQsCisJLnN0b3Bfc2NyaXB0ID0gcHl0aG9uX3N0b3Bfc2NyaXB0LAorCS5wcm9jZXNzX2V2ZW50ID0gcHl0aG9uX3Byb2Nlc3NfZXZlbnQsCisJLmdlbmVyYXRlX3NjcmlwdCA9IHB5dGhvbl9nZW5lcmF0ZV9zY3JpcHQsCit9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggY2UzYTZjOC4uMGRlNzI1OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC0xLDUgKzEsOCBAQAorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKKyNpbmNsdWRlIDxieXRlc3dhcC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCkBAIC00OSw2ICs1MiwxMSBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3sKKwlyZXR1cm4gbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKCZzZWxmLT5rbWFwcywgc2VsZi0+dm1saW51eF9tYXBzKTsKK30KKwogc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uX19uZXcoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlLCBib29sIGZvcmNlKQogewogCXNpemVfdCBsZW4gPSBmaWxlbmFtZSA/IHN0cmxlbihmaWxlbmFtZSkgKyAxIDogMDsKQEAgLTY2LDEzICs3NCwyMiBAQAogCXNlbGYtPm1tYXBfd2luZG93ID0gMzI7CiAJc2VsZi0+Y3dkID0gTlVMTDsKIAlzZWxmLT5jd2RsZW4gPSAwOworCXNlbGYtPnVua25vd25fZXZlbnRzID0gMDsKIAltYXBfZ3JvdXBzX19pbml0KCZzZWxmLT5rbWFwcyk7CiAKLQlpZiAocGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc2VsZikgPCAwKQotCQlnb3RvIG91dF9kZWxldGU7CisJaWYgKG1vZGUgPT0gT19SRE9OTFkpIHsKKwkJaWYgKHBlcmZfc2Vzc2lvbl9fb3BlbihzZWxmLCBmb3JjZSkgPCAwKQorCQkJZ290byBvdXRfZGVsZXRlOworCX0gZWxzZSBpZiAobW9kZSA9PSBPX1dST05MWSkgeworCQkvKgorCQkgKiBJbiBPX1JET05MWSBtb2RlIHRoaXMgd2lsbCBiZSBwZXJmb3JtZWQgd2hlbiByZWFkaW5nIHRoZQorCQkgKiBrZXJuZWwgTU1BUCBldmVudCwgaW4gZXZlbnRfX3Byb2Nlc3NfbW1hcCgpLgorCQkgKi8KKwkJaWYgKHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHNlbGYpIDwgMCkKKwkJCWdvdG8gb3V0X2RlbGV0ZTsKKwl9CiAKLQlpZiAobW9kZSA9PSBPX1JET05MWSAmJiBwZXJmX3Nlc3Npb25fX29wZW4oc2VsZiwgZm9yY2UpIDwgMCkKLQkJZ290byBvdXRfZGVsZXRlOworCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKCZzZWxmLT5oZWFkZXIpOwogb3V0OgogCXJldHVybiBzZWxmOwogb3V0X2ZyZWU6CkBAIC0xNDgsMyArMTY1LDQwOSBAQAogCiAJcmV0dXJuIHN5bXM7CiB9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19ldmVudF9zdHViKGV2ZW50X3QgKmV2ZW50IF9fdXNlZCwKKwkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQoreworCWR1bXBfcHJpbnRmKCI6IHVuaGFuZGxlZCFcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKmhhbmRsZXIpCit7CisJaWYgKGhhbmRsZXItPnNhbXBsZSA9PSBOVUxMKQorCQloYW5kbGVyLT5zYW1wbGUgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPm1tYXAgPT0gTlVMTCkKKwkJaGFuZGxlci0+bW1hcCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+Y29tbSA9PSBOVUxMKQorCQloYW5kbGVyLT5jb21tID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5mb3JrID09IE5VTEwpCisJCWhhbmRsZXItPmZvcmsgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPmV4aXQgPT0gTlVMTCkKKwkJaGFuZGxlci0+ZXhpdCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+bG9zdCA9PSBOVUxMKQorCQloYW5kbGVyLT5sb3N0ID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5yZWFkID09IE5VTEwpCisJCWhhbmRsZXItPnJlYWQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPnRocm90dGxlID09IE5VTEwpCisJCWhhbmRsZXItPnRocm90dGxlID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT51bnRocm90dGxlID09IE5VTEwpCisJCWhhbmRsZXItPnVudGhyb3R0bGUgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpldmVudF9fbmFtZVtdID0geworCVswXQkJCSA9ICJUT1RBTCIsCisJW1BFUkZfUkVDT1JEX01NQVBdCSA9ICJNTUFQIiwKKwlbUEVSRl9SRUNPUkRfTE9TVF0JID0gIkxPU1QiLAorCVtQRVJGX1JFQ09SRF9DT01NXQkgPSAiQ09NTSIsCisJW1BFUkZfUkVDT1JEX0VYSVRdCSA9ICJFWElUIiwKKwlbUEVSRl9SRUNPUkRfVEhST1RUTEVdCSA9ICJUSFJPVFRMRSIsCisJW1BFUkZfUkVDT1JEX1VOVEhST1RUTEVdID0gIlVOVEhST1RUTEUiLAorCVtQRVJGX1JFQ09SRF9GT1JLXQkgPSAiRk9SSyIsCisJW1BFUkZfUkVDT1JEX1JFQURdCSA9ICJSRUFEIiwKKwlbUEVSRl9SRUNPUkRfU0FNUExFXQkgPSAiU0FNUExFIiwKK307CisKK3Vuc2lnbmVkIGxvbmcgZXZlbnRfX3RvdGFsW1BFUkZfUkVDT1JEX01BWF07CisKK3ZvaWQgZXZlbnRfX3ByaW50X3RvdGFscyh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBQRVJGX1JFQ09SRF9NQVg7ICsraSkKKwkJcHJfaW5mbygiJTEwcyBldmVudHM6ICUxMGxkXG4iLAorCQkJZXZlbnRfX25hbWVbaV0sIGV2ZW50X190b3RhbFtpXSk7Cit9CisKK3ZvaWQgbWVtX2Jzd2FwXzY0KHZvaWQgKnNyYywgaW50IGJ5dGVfc2l6ZSkKK3sKKwl1NjQgKm0gPSBzcmM7CisKKwl3aGlsZSAoYnl0ZV9zaXplID4gMCkgeworCQkqbSA9IGJzd2FwXzY0KCptKTsKKwkJYnl0ZV9zaXplIC09IHNpemVvZih1NjQpOworCQkrK207CisJfQorfQorCitzdGF0aWMgdm9pZCBldmVudF9fYWxsNjRfc3dhcChldmVudF90ICpzZWxmKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGRyID0gJnNlbGYtPmhlYWRlcjsKKwltZW1fYnN3YXBfNjQoaGRyICsgMSwgc2VsZi0+aGVhZGVyLnNpemUgLSBzaXplb2YoKmhkcikpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9fY29tbV9zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc2VsZi0+Y29tbS5waWQgPSBic3dhcF8zMihzZWxmLT5jb21tLnBpZCk7CisJc2VsZi0+Y29tbS50aWQgPSBic3dhcF8zMihzZWxmLT5jb21tLnRpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X19tbWFwX3N3YXAoZXZlbnRfdCAqc2VsZikKK3sKKwlzZWxmLT5tbWFwLnBpZAkgPSBic3dhcF8zMihzZWxmLT5tbWFwLnBpZCk7CisJc2VsZi0+bW1hcC50aWQJID0gYnN3YXBfMzIoc2VsZi0+bW1hcC50aWQpOworCXNlbGYtPm1tYXAuc3RhcnQgPSBic3dhcF82NChzZWxmLT5tbWFwLnN0YXJ0KTsKKwlzZWxmLT5tbWFwLmxlbgkgPSBic3dhcF82NChzZWxmLT5tbWFwLmxlbik7CisJc2VsZi0+bW1hcC5wZ29mZiA9IGJzd2FwXzY0KHNlbGYtPm1tYXAucGdvZmYpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9fdGFza19zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc2VsZi0+Zm9yay5waWQJPSBic3dhcF8zMihzZWxmLT5mb3JrLnBpZCk7CisJc2VsZi0+Zm9yay50aWQJPSBic3dhcF8zMihzZWxmLT5mb3JrLnRpZCk7CisJc2VsZi0+Zm9yay5wcGlkCT0gYnN3YXBfMzIoc2VsZi0+Zm9yay5wcGlkKTsKKwlzZWxmLT5mb3JrLnB0aWQJPSBic3dhcF8zMihzZWxmLT5mb3JrLnB0aWQpOworCXNlbGYtPmZvcmsudGltZQk9IGJzd2FwXzY0KHNlbGYtPmZvcmsudGltZSk7Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X19yZWFkX3N3YXAoZXZlbnRfdCAqc2VsZikKK3sKKwlzZWxmLT5yZWFkLnBpZAkJPSBic3dhcF8zMihzZWxmLT5yZWFkLnBpZCk7CisJc2VsZi0+cmVhZC50aWQJCT0gYnN3YXBfMzIoc2VsZi0+cmVhZC50aWQpOworCXNlbGYtPnJlYWQudmFsdWUJPSBic3dhcF82NChzZWxmLT5yZWFkLnZhbHVlKTsKKwlzZWxmLT5yZWFkLnRpbWVfZW5hYmxlZAk9IGJzd2FwXzY0KHNlbGYtPnJlYWQudGltZV9lbmFibGVkKTsKKwlzZWxmLT5yZWFkLnRpbWVfcnVubmluZwk9IGJzd2FwXzY0KHNlbGYtPnJlYWQudGltZV9ydW5uaW5nKTsKKwlzZWxmLT5yZWFkLmlkCQk9IGJzd2FwXzY0KHNlbGYtPnJlYWQuaWQpOworfQorCit0eXBlZGVmIHZvaWQgKCpldmVudF9fc3dhcF9vcCkoZXZlbnRfdCAqc2VsZik7CisKK3N0YXRpYyBldmVudF9fc3dhcF9vcCBldmVudF9fc3dhcF9vcHNbXSA9IHsKKwlbUEVSRl9SRUNPUkRfTU1BUF0gICA9IGV2ZW50X19tbWFwX3N3YXAsCisJW1BFUkZfUkVDT1JEX0NPTU1dICAgPSBldmVudF9fY29tbV9zd2FwLAorCVtQRVJGX1JFQ09SRF9GT1JLXSAgID0gZXZlbnRfX3Rhc2tfc3dhcCwKKwlbUEVSRl9SRUNPUkRfRVhJVF0gICA9IGV2ZW50X190YXNrX3N3YXAsCisJW1BFUkZfUkVDT1JEX0xPU1RdICAgPSBldmVudF9fYWxsNjRfc3dhcCwKKwlbUEVSRl9SRUNPUkRfUkVBRF0gICA9IGV2ZW50X19yZWFkX3N3YXAsCisJW1BFUkZfUkVDT1JEX1NBTVBMRV0gPSBldmVudF9fYWxsNjRfc3dhcCwKKwlbUEVSRl9SRUNPUkRfTUFYXSAgICA9IE5VTEwsCit9OworCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgICAgICBldmVudF90ICpldmVudCwKKwkJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsCisJCQkJICAgICAgIHU2NCBvZmZzZXQsIHU2NCBoZWFkKQoreworCXRyYWNlX2V2ZW50KGV2ZW50KTsKKworCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPCBQRVJGX1JFQ09SRF9NQVgpIHsKKwkJZHVtcF9wcmludGYoIiUjTHggWyUjeF06IFBFUkZfUkVDT1JEXyVzIiwKKwkJCSAgICBvZmZzZXQgKyBoZWFkLCBldmVudC0+aGVhZGVyLnNpemUsCisJCQkgICAgZXZlbnRfX25hbWVbZXZlbnQtPmhlYWRlci50eXBlXSk7CisJCSsrZXZlbnRfX3RvdGFsWzBdOworCQkrK2V2ZW50X190b3RhbFtldmVudC0+aGVhZGVyLnR5cGVdOworCX0KKworCWlmIChzZWxmLT5oZWFkZXIubmVlZHNfc3dhcCAmJiBldmVudF9fc3dhcF9vcHNbZXZlbnQtPmhlYWRlci50eXBlXSkKKwkJZXZlbnRfX3N3YXBfb3BzW2V2ZW50LT5oZWFkZXIudHlwZV0oZXZlbnQpOworCisJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKKwljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKKwkJcmV0dXJuIG9wcy0+c2FtcGxlKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX01NQVA6CisJCXJldHVybiBvcHMtPm1tYXAoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKKwkJcmV0dXJuIG9wcy0+Y29tbShldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgorCQlyZXR1cm4gb3BzLT5mb3JrKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX0VYSVQ6CisJCXJldHVybiBvcHMtPmV4aXQoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfTE9TVDoKKwkJcmV0dXJuIG9wcy0+bG9zdChldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9SRUFEOgorCQlyZXR1cm4gb3BzLT5yZWFkKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX1RIUk9UVExFOgorCQlyZXR1cm4gb3BzLT50aHJvdHRsZShldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9VTlRIUk9UVExFOgorCQlyZXR1cm4gb3BzLT51bnRocm90dGxlKGV2ZW50LCBzZWxmKTsKKwlkZWZhdWx0OgorCQlzZWxmLT51bmtub3duX2V2ZW50cysrOworCQlyZXR1cm4gLTE7CisJfQorfQorCit2b2lkIHBlcmZfZXZlbnRfaGVhZGVyX19ic3dhcChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKnNlbGYpCit7CisJc2VsZi0+dHlwZSA9IGJzd2FwXzMyKHNlbGYtPnR5cGUpOworCXNlbGYtPm1pc2MgPSBic3dhcF8xNihzZWxmLT5taXNjKTsKKwlzZWxmLT5zaXplID0gYnN3YXBfMTYoc2VsZi0+c2l6ZSk7Cit9CisKK2ludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLAorCQkJCWludCBpbnB1dCwgdTY0IG9mZnNldCwgdTY0IHNpemUpCit7CisJc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGJldjsKKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKKwl1NjQgbGltaXQgPSBvZmZzZXQgKyBzaXplOworCWludCBlcnIgPSAtMTsKKworCXdoaWxlIChvZmZzZXQgPCBsaW1pdCkgeworCQlzdHJ1Y3QgZHNvICpkc287CisJCXNzaXplX3QgbGVuOworCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmRzb3NfX3VzZXI7CisKKwkJaWYgKHJlYWQoaW5wdXQsICZiZXYsIHNpemVvZihiZXYpKSAhPSBzaXplb2YoYmV2KSkKKwkJCWdvdG8gb3V0OworCisJCWlmIChzZWxmLT5uZWVkc19zd2FwKQorCQkJcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKCZiZXYuaGVhZGVyKTsKKworCQlsZW4gPSBiZXYuaGVhZGVyLnNpemUgLSBzaXplb2YoYmV2KTsKKwkJaWYgKHJlYWQoaW5wdXQsIGZpbGVuYW1lLCBsZW4pICE9IGxlbikKKwkJCWdvdG8gb3V0OworCisJCWlmIChiZXYuaGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCkKKwkJCWhlYWQgPSAmZHNvc19fa2VybmVsOworCisJCWRzbyA9IF9fZHNvc19fZmluZG5ldyhoZWFkLCBmaWxlbmFtZSk7CisJCWlmIChkc28gIT0gTlVMTCkgeworCQkJZHNvX19zZXRfYnVpbGRfaWQoZHNvLCAmYmV2LmJ1aWxkX2lkKTsKKwkJCWlmIChoZWFkID09ICZkc29zX19rZXJuZWwgJiYgZmlsZW5hbWVbMF0gPT0gJ1snKQorCQkJCWRzby0+a2VybmVsID0gMTsKKwkJfQorCisJCW9mZnNldCArPSBiZXYuaGVhZGVyLnNpemU7CisJfQorCWVyciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCB0aHJlYWQgKnBlcmZfc2Vzc2lvbl9fcmVnaXN0ZXJfaWRsZV90aHJlYWQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2VsZiwgMCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwgfHwgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsICJzd2FwcGVyIikpIHsKKwkJcHJfZXJyKCJwcm9ibGVtIGluc2VydGluZyBpZGxlIHRhc2suXG4iKTsKKwkJdGhyZWFkID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gdGhyZWFkOworfQorCitpbnQgX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJICAgdTY0IGRhdGFfb2Zmc2V0LCB1NjQgZGF0YV9zaXplLAorCQkJCSAgIHU2NCBmaWxlX3NpemUsIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQoreworCWludCBlcnIsIG1tYXBfcHJvdCwgbW1hcF9mbGFnczsKKwl1NjQgaGVhZCwgc2hpZnQ7CisJdTY0IG9mZnNldCA9IDA7CisJc2l6ZV90CXBhZ2Vfc2l6ZTsKKwlldmVudF90ICpldmVudDsKKwl1aW50MzJfdCBzaXplOworCWNoYXIgKmJ1ZjsKKworCXBlcmZfZXZlbnRfb3BzX19maWxsX2RlZmF1bHRzKG9wcyk7CisKKwlwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisKKwloZWFkID0gZGF0YV9vZmZzZXQ7CisJc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CisJb2Zmc2V0ICs9IHNoaWZ0OworCWhlYWQgLT0gc2hpZnQ7CisKKwltbWFwX3Byb3QgID0gUFJPVF9SRUFEOworCW1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEOworCisJaWYgKHNlbGYtPmhlYWRlci5uZWVkc19zd2FwKSB7CisJCW1tYXBfcHJvdCAgfD0gUFJPVF9XUklURTsKKwkJbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFOworCX0KK3JlbWFwOgorCWJ1ZiA9IG1tYXAoTlVMTCwgcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3csIG1tYXBfcHJvdCwKKwkJICAgbW1hcF9mbGFncywgc2VsZi0+ZmQsIG9mZnNldCk7CisJaWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKSB7CisJCXByX2VycigiZmFpbGVkIHRvIG1tYXAgZmlsZVxuIik7CisJCWVyciA9IC1lcnJubzsKKwkJZ290byBvdXRfZXJyOworCX0KKworbW9yZToKKwlldmVudCA9IChldmVudF90ICopKGJ1ZiArIGhlYWQpOworCisJaWYgKHNlbGYtPmhlYWRlci5uZWVkc19zd2FwKQorCQlwZXJmX2V2ZW50X2hlYWRlcl9fYnN3YXAoJmV2ZW50LT5oZWFkZXIpOworCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CisJaWYgKHNpemUgPT0gMCkKKwkJc2l6ZSA9IDg7CisKKwlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdykgeworCQlpbnQgbXVubWFwX3JldDsKKworCQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKworCQltdW5tYXBfcmV0ID0gbXVubWFwKGJ1ZiwgcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3cpOworCQlhc3NlcnQobXVubWFwX3JldCA9PSAwKTsKKworCQlvZmZzZXQgKz0gc2hpZnQ7CisJCWhlYWQgLT0gc2hpZnQ7CisJCWdvdG8gcmVtYXA7CisJfQorCisJc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKKworCWR1bXBfcHJpbnRmKCJcbiUjTHggWyUjeF06IGV2ZW50OiAlZFxuIiwKKwkJICAgIG9mZnNldCArIGhlYWQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwgZXZlbnQtPmhlYWRlci50eXBlKTsKKworCWlmIChzaXplID09IDAgfHwKKwkgICAgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50KHNlbGYsIGV2ZW50LCBvcHMsIG9mZnNldCwgaGVhZCkgPCAwKSB7CisJCWR1bXBfcHJpbnRmKCIlI0x4IFslI3hdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKKwkJCSAgICBvZmZzZXQgKyBoZWFkLCBldmVudC0+aGVhZGVyLnNpemUsCisJCQkgICAgZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJLyoKKwkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKKwkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCisJCSAqLworCQlpZiAodW5saWtlbHkoaGVhZCAmIDcpKQorCQkJaGVhZCAmPSB+N1VMTDsKKworCQlzaXplID0gODsKKwl9CisKKwloZWFkICs9IHNpemU7CisKKwlpZiAob2Zmc2V0ICsgaGVhZCA+PSBkYXRhX29mZnNldCArIGRhdGFfc2l6ZSkKKwkJZ290byBkb25lOworCisJaWYgKG9mZnNldCArIGhlYWQgPCBmaWxlX3NpemUpCisJCWdvdG8gbW9yZTsKK2RvbmU6CisJZXJyID0gMDsKK291dF9lcnI6CisJcmV0dXJuIGVycjsKK30KKworaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMpCit7CisJaW50IGVycjsKKworCWlmIChwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHNlbGYpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFzeW1ib2xfY29uZi5mdWxsX3BhdGhzKSB7CisJCWNoYXIgYmZbUEFUSF9NQVhdOworCisJCWlmIChnZXRjd2QoYmYsIHNpemVvZihiZikpID09IE5VTEwpIHsKKwkJCWVyciA9IC1lcnJubzsKK291dF9nZXRjd2RfZXJyOgorCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJc2VsZi0+Y3dkID0gc3RyZHVwKGJmKTsKKwkJaWYgKHNlbGYtPmN3ZCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZ2V0Y3dkX2VycjsKKwkJfQorCQlzZWxmLT5jd2RsZW4gPSBzdHJsZW4oc2VsZi0+Y3dkKTsKKwl9CisKKwllcnIgPSBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2VsZiwgc2VsZi0+aGVhZGVyLmRhdGFfb2Zmc2V0LAorCQkJCQkgICAgIHNlbGYtPmhlYWRlci5kYXRhX3NpemUsCisJCQkJCSAgICAgc2VsZi0+c2l6ZSwgb3BzKTsKK291dF9lcnI6CisJcmV0dXJuIGVycjsKK30KKworYm9vbCBwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgY29uc3QgY2hhciAqbXNnKQoreworCWlmICghKHNlbGYtPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgeworCQlwcl9lcnIoIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgJ3BlcmYgJXMnP1xuIiwgbXNnKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitpbnQgcGVyZl9zZXNzaW9uX19zZXRfa2FsbHN5bXNfcmVmX3JlbG9jX3N5bShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lLAorCQkJCQkgICAgIHU2NCBhZGRyKQoreworCWNoYXIgKmJyYWNrZXQ7CisJZW51bSBtYXBfdHlwZSBpOworCisJc2VsZi0+cmVmX3JlbG9jX3N5bS5uYW1lID0gc3RyZHVwKHN5bWJvbF9uYW1lKTsKKwlpZiAoc2VsZi0+cmVmX3JlbG9jX3N5bS5uYW1lID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYnJhY2tldCA9IHN0cmNocihzZWxmLT5yZWZfcmVsb2Nfc3ltLm5hbWUsICddJyk7CisJaWYgKGJyYWNrZXQpCisJCSpicmFja2V0ID0gJ1wwJzsKKworCXNlbGYtPnJlZl9yZWxvY19zeW0uYWRkciA9IGFkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKSB7CisJCXN0cnVjdCBrbWFwICprbWFwID0gbWFwX19rbWFwKHNlbGYtPnZtbGludXhfbWFwc1tpXSk7CisJCWttYXAtPnJlZl9yZWxvY19zeW0gPSAmc2VsZi0+cmVmX3JlbG9jX3N5bTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBtYXBfX3JlbG9jX21hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgKyAoczY0KW1hcC0+cGdvZmY7Cit9CisKK3N0YXRpYyB1NjQgbWFwX19yZWxvY191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgLSAoczY0KW1hcC0+cGdvZmY7Cit9CisKK3ZvaWQgbWFwX19yZWxvY192bWxpbnV4KHN0cnVjdCBtYXAgKnNlbGYpCit7CisJc3RydWN0IGttYXAgKmttYXAgPSBtYXBfX2ttYXAoc2VsZik7CisJczY0IHJlbG9jOworCisJaWYgKCFrbWFwLT5yZWZfcmVsb2Nfc3ltIHx8ICFrbWFwLT5yZWZfcmVsb2Nfc3ltLT51bnJlbG9jYXRlZF9hZGRyKQorCQlyZXR1cm47CisKKwlyZWxvYyA9IChrbWFwLT5yZWZfcmVsb2Nfc3ltLT51bnJlbG9jYXRlZF9hZGRyIC0KKwkJIGttYXAtPnJlZl9yZWxvY19zeW0tPmFkZHIpOworCisJaWYgKCFyZWxvYykKKwkJcmV0dXJuOworCisJc2VsZi0+bWFwX2lwICAgPSBtYXBfX3JlbG9jX21hcF9pcDsKKwlzZWxmLT51bm1hcF9pcCA9IG1hcF9fcmVsb2NfdW5tYXBfaXA7CisJc2VsZi0+cGdvZmYgICAgPSByZWxvYzsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmggYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCmluZGV4IDMyZWFhMWIuLjMxOTUwZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaApAQCAtMywxMyArMywxMyBAQAogCiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJoZWFkZXIuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKICNpbmNsdWRlICJ0aHJlYWQuaCIKICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCIKIAogc3RydWN0IGlwX2NhbGxjaGFpbjsKIHN0cnVjdCB0aHJlYWQ7Ci1zdHJ1Y3Qgc3ltYm9sOwogCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uIHsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXIJaGVhZGVyOwpAQCAtMTgsMTAgKzE4LDEzIEBACiAJc3RydWN0IG1hcF9ncm91cHMJa21hcHM7CiAJc3RydWN0IHJiX3Jvb3QJCXRocmVhZHM7CiAJc3RydWN0IHRocmVhZAkJKmxhc3RfbWF0Y2g7CisJc3RydWN0IG1hcAkJKnZtbGludXhfbWFwc1tNQVBfX05SX1RZUEVTXTsKIAlzdHJ1Y3QgZXZlbnRzX3N0YXRzCWV2ZW50c19zdGF0czsKIAl1bnNpZ25lZCBsb25nCQlldmVudF90b3RhbFtQRVJGX1JFQ09SRF9NQVhdOworCXVuc2lnbmVkIGxvbmcJCXVua25vd25fZXZlbnRzOwogCXN0cnVjdCByYl9yb290CQloaXN0czsKIAl1NjQJCQlzYW1wbGVfdHlwZTsKKwlzdHJ1Y3QgcmVmX3JlbG9jX3N5bQlyZWZfcmVsb2Nfc3ltOwogCWludAkJCWZkOwogCWludAkJCWN3ZGxlbjsKIAljaGFyCQkJKmN3ZDsKQEAgLTMxLDIzICszNCwyNSBAQAogdHlwZWRlZiBpbnQgKCpldmVudF9vcCkoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKIHN0cnVjdCBwZXJmX2V2ZW50X29wcyB7Ci0JZXZlbnRfb3AJcHJvY2Vzc19zYW1wbGVfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19tbWFwX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfY29tbV9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX2ZvcmtfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19leGl0X2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfbG9zdF9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX3JlYWRfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc190aHJvdHRsZV9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQ7Ci0JaW50CQkoKnNhbXBsZV90eXBlX2NoZWNrKShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKLQl1bnNpZ25lZCBsb25nCXRvdGFsX3Vua25vd247Ci0JYm9vbAkJZnVsbF9wYXRoczsKKwlldmVudF9vcCBzYW1wbGUsCisJCSBtbWFwLAorCQkgY29tbSwKKwkJIGZvcmssCisJCSBleGl0LAorCQkgbG9zdCwKKwkJIHJlYWQsCisJCSB0aHJvdHRsZSwKKwkJIHVudGhyb3R0bGU7CiB9OwogCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwZXJmX3Nlc3Npb25fX25ldyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUsIGJvb2wgZm9yY2UpOwogdm9pZCBwZXJmX3Nlc3Npb25fX2RlbGV0ZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKTsKIAordm9pZCBwZXJmX2V2ZW50X2hlYWRlcl9fYnN3YXAoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpzZWxmKTsKKworaW50IF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgIHU2NCBkYXRhX29mZnNldCwgdTY0IGRhdGFfc2l6ZSwgdTY0IHNpemUsCisJCQkJICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMpOwogaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKIAkJCQkgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpldmVudF9vcHMpOwogCkBAIC01Niw2ICs2MSwyOCBAQAogCQkJCQkJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sCiAJCQkJCQlzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50KTsKIAotaW50IHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhpbnQgaW5wdXQsIHU2NCBvZmZzZXQsIHU2NCBmaWxlX3NpemUpOworYm9vbCBwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgY29uc3QgY2hhciAqbXNnKTsKIAoraW50IHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBpbnB1dCwKKwkJCQl1NjQgb2Zmc2V0LCB1NjQgZmlsZV9zaXplKTsKKworaW50IHBlcmZfc2Vzc2lvbl9fc2V0X2thbGxzeW1zX3JlZl9yZWxvY19zeW0oc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkJICAgICBjb25zdCBjaGFyICpzeW1ib2xfbmFtZSwKKwkJCQkJICAgICB1NjQgYWRkcik7CisKK3ZvaWQgbWVtX2Jzd2FwXzY0KHZvaWQgKnNyYywgaW50IGJ5dGVfc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkJCXN0cnVjdCBkc28gKmtlcm5lbCkKK3sKKwlyZXR1cm4gX19tYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoJnNlbGYtPmttYXBzLAorCQkJCQkJc2VsZi0+dm1saW51eF9tYXBzLCBrZXJuZWwpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXAgKgorCXBlcmZfc2Vzc2lvbl9fbmV3X21vZHVsZV9tYXAoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgICAgIHU2NCBzdGFydCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJcmV0dXJuIG1hcF9ncm91cHNfX25ld19tb2R1bGUoJnNlbGYtPmttYXBzLCBzdGFydCwgZmlsZW5hbWUpOworfQogI2VuZGlmIC8qIF9fUEVSRl9TRVNTSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwppbmRleCA1MzUyZDdkLi5jMzk3ZDRmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCkBAIC0yMjcsMTYgKzIyNyw3MyBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKiBHbG9iIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZyAqLworLyogQ2hhcmFjdGVyIGNsYXNzIG1hdGNoaW5nICovCitzdGF0aWMgYm9vbCBfX21hdGNoX2NoYXJjbGFzcyhjb25zdCBjaGFyICpwYXQsIGNoYXIgYywgY29uc3QgY2hhciAqKm5wYXQpCit7CisJYm9vbCBjb21wbGVtZW50ID0gZmFsc2UsIHJldCA9IHRydWU7CisKKwlpZiAoKnBhdCA9PSAnIScpIHsKKwkJY29tcGxlbWVudCA9IHRydWU7CisJCXBhdCsrOworCX0KKwlpZiAoKnBhdCsrID09IGMpCS8qIEZpcnN0IGNoYXJhY3RlciBpcyBzcGVjaWFsICovCisJCWdvdG8gZW5kOworCisJd2hpbGUgKCpwYXQgJiYgKnBhdCAhPSAnXScpIHsJLyogTWF0Y2hpbmcgKi8KKwkJaWYgKCpwYXQgPT0gJy0nICYmICoocGF0ICsgMSkgIT0gJ10nKSB7CS8qIFJhbmdlICovCisJCQlpZiAoKihwYXQgLSAxKSA8PSBjICYmIGMgPD0gKihwYXQgKyAxKSkKKwkJCQlnb3RvIGVuZDsKKwkJCWlmICgqKHBhdCAtIDEpID4gKihwYXQgKyAxKSkKKwkJCQlnb3RvIGVycm9yOworCQkJcGF0ICs9IDI7CisJCX0gZWxzZSBpZiAoKnBhdCsrID09IGMpCisJCQlnb3RvIGVuZDsKKwl9CisJaWYgKCEqcGF0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGZhbHNlOworCitlbmQ6CisJd2hpbGUgKCpwYXQgJiYgKnBhdCAhPSAnXScpCS8qIFNlYXJjaGluZyBjbG9zaW5nICovCisJCXBhdCsrOworCWlmICghKnBhdCkKKwkJZ290byBlcnJvcjsKKwkqbnBhdCA9IHBhdCArIDE7CisJcmV0dXJuIGNvbXBsZW1lbnQgPyAhcmV0IDogcmV0OworCitlcnJvcjoKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogc3RyZ2xvYm1hdGNoIC0gZ2xvYiBleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcKKyAqIEBzdHI6IHRoZSB0YXJnZXQgc3RyaW5nIHRvIG1hdGNoCisgKiBAcGF0OiB0aGUgcGF0dGVybiBzdHJpbmcgdG8gbWF0Y2gKKyAqCisgKiBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgQHN0ciBtYXRjaGVzIEBwYXQuIEBwYXQgY2FuIGluY2x1ZGVzIHdpbGRjYXJkcworICogKCcqJywnPycpIGFuZCBjaGFyYWN0ZXIgY2xhc3NlcyAoW0NIQVJTXSwgY29tcGxlbWVudGF0aW9uIGFuZCByYW5nZXMgYXJlCisgKiBhbHNvIHN1cHBvcnRlZCkuIEFsc28sIHRoaXMgc3VwcG9ydHMgZXNjYXBlIGNoYXJhY3RlciAoJ1wnKSB0byB1c2Ugc3BlY2lhbAorICogY2hhcmFjdGVycyBhcyBub3JtYWwgY2hhcmFjdGVyLgorICoKKyAqIE5vdGU6IGlmIEBwYXQgc3ludGF4IGlzIGJyb2tlbiwgdGhpcyBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAqLwogYm9vbCBzdHJnbG9ibWF0Y2goY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCiB7CiAJd2hpbGUgKCpzdHIgJiYgKnBhdCAmJiAqcGF0ICE9ICcqJykgewotCQlpZiAoKnBhdCA9PSAnPycpIHsKKwkJaWYgKCpwYXQgPT0gJz8nKSB7CS8qIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgKi8KIAkJCXN0cisrOwogCQkJcGF0Kys7Ci0JCX0gZWxzZQotCQkJaWYgKCpzdHIrKyAhPSAqcGF0KyspCisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICgqcGF0ID09ICdbJykJLyogQ2hhcmFjdGVyIGNsYXNzZXMvUmFuZ2VzICovCisJCQlpZiAoX19tYXRjaF9jaGFyY2xhc3MocGF0ICsgMSwgKnN0ciwgJnBhdCkpIHsKKwkJCQlzdHIrKzsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZQogCQkJCXJldHVybiBmYWxzZTsKKwkJZWxzZSBpZiAoKnBhdCA9PSAnXFwnKSAvKiBFc2NhcGVkIGNoYXIgbWF0Y2ggYXMgbm9ybWFsIGNoYXIgKi8KKwkJCXBhdCsrOworCQlpZiAoKnN0cisrICE9ICpwYXQrKykKKwkJCXJldHVybiBmYWxzZTsKIAl9CiAJLyogQ2hlY2sgd2lsZCBjYXJkICovCiAJaWYgKCpwYXQgPT0gJyonKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggYWI5Mjc2My4uMzIzYzBhZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiLi4vcGVyZi5oIgotI2luY2x1ZGUgInNlc3Npb24uaCIKICNpbmNsdWRlICJzb3J0LmgiCiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCkBAIC0yMiw2ICsyMSw3IEBACiBlbnVtIGRzb19vcmlnaW4gewogCURTT19fT1JJR19LRVJORUwgPSAwLAogCURTT19fT1JJR19KQVZBX0pJVCwKKwlEU09fX09SSUdfQlVJTERfSURfQ0FDSEUsCiAJRFNPX19PUklHX0ZFRE9SQSwKIAlEU09fX09SSUdfVUJVTlRVLAogCURTT19fT1JJR19CVUlMRElELApAQCAtMzMsNyArMzMsNyBAQAogc3RhdGljIHZvaWQgZHNvc19fYWRkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBkc28gKmRzbyk7CiBzdGF0aWMgc3RydWN0IG1hcCAqbWFwX19uZXcyKHU2NCBzdGFydCwgc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogc3RhdGljIGludCBkc29fX2xvYWRfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiBzdGF0aWMgaW50IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsKIHN0YXRpYyBjaGFyICoqdm1saW51eF9wYXRoOwogCkBAIC01MywxNyArNTMsMTIgQEAKIAlyZXR1cm4gc2VsZi0+c29ydGVkX2J5X25hbWUgJiAoMSA8PCB0eXBlKTsKIH0KIAotc3RhdGljIHZvaWQgZHNvX19zZXRfbG9hZGVkKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKLXsKLQlzZWxmLT5sb2FkZWQgfD0gKDEgPDwgdHlwZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGRzb19fc2V0X3NvcnRlZF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzZWxmLT5zb3J0ZWRfYnlfbmFtZSB8PSAoMSA8PCB0eXBlKTsKIH0KIAotc3RhdGljIGJvb2wgc3ltYm9sX3R5cGVfX2lzX2EoY2hhciBzeW1ib2xfdHlwZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSkKK2Jvb2wgc3ltYm9sX3R5cGVfX2lzX2EoY2hhciBzeW1ib2xfdHlwZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSkKIHsKIAlzd2l0Y2ggKG1hcF90eXBlKSB7CiAJY2FzZSBNQVBfX0ZVTkNUSU9OOgpAQCAtMTQyLDE0ICsxMzcsMTQgQEAKIAlzZWxmLT5zdGFydCA9IHN0YXJ0OwogCXNlbGYtPmVuZCAgID0gbGVuID8gc3RhcnQgKyBsZW4gLSAxIDogc3RhcnQ7CiAKLQlwcl9kZWJ1ZzMoIiVzOiAlcyAlI0x4LSUjTHhcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKKwlwcl9kZWJ1ZzQoIiVzOiAlcyAlI0x4LSUjTHhcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKIAogCW1lbWNweShzZWxmLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIAogCXJldHVybiBzZWxmOwogfQogCi1zdGF0aWMgdm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzZWxmKQordm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzZWxmKQogewogCWZyZWUoKCh2b2lkICopc2VsZikgLSBzeW1ib2xfY29uZi5wcml2X3NpemUpOwogfQpAQCAtMTYwLDcgKzE1NSw3IEBACiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5uYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGNoYXIgKm5hbWUpCit2b2lkIGRzb19fc2V0X2xvbmdfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBjaGFyICpuYW1lKQogewogCWlmIChuYW1lID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTE3NSw3ICsxNzAsNyBAQAogCiBzdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkc28gKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSArIHN0cmxlbihuYW1lKSArIDEpOworCXN0cnVjdCBkc28gKnNlbGYgPSB6YWxsb2Moc2l6ZW9mKCpzZWxmKSArIHN0cmxlbihuYW1lKSArIDEpOwogCiAJaWYgKHNlbGYgIT0gTlVMTCkgewogCQlpbnQgaTsKQEAgLTM0NCwxMCArMzM5LDEwIEBACiAJCQkJICAgICAmc2VsZi0+c3ltYm9sc1t0eXBlXSk7CiB9CiAKLWludCBidWlsZF9pZF9fc3ByaW50Zih1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpCitpbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKQogewogCWNoYXIgKmJpZCA9IGJmOwotCXU4ICpyYXcgPSBzZWxmOworCWNvbnN0IHU4ICpyYXcgPSBzZWxmOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CkBAIC0zNzIsNiArMzY3LDEwIEBACiAJc3RydWN0IHJiX25vZGUgKm5kOwogCXNpemVfdCByZXQgPSBmcHJpbnRmKGZwLCAiZHNvOiAlcyAoIiwgc2VsZi0+c2hvcnRfbmFtZSk7CiAKKwlpZiAoc2VsZi0+c2hvcnRfbmFtZSAhPSBzZWxmLT5sb25nX25hbWUpCisJCXJldCArPSBmcHJpbnRmKGZwLCAiJXMsICIsIHNlbGYtPmxvbmdfbmFtZSk7CisJcmV0ICs9IGZwcmludGYoZnAsICIlcywgJXNsb2FkZWQsICIsIG1hcF90eXBlX19uYW1lW3R5cGVdLAorCQkgICAgICAgc2VsZi0+bG9hZGVkID8gIiIgOiAiTk9UICIpOwogCXJldCArPSBkc29fX2ZwcmludGZfYnVpbGRpZChzZWxmLCBmcCk7CiAJcmV0ICs9IGZwcmludGYoZnAsICIpXG4iKTsKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPnN5bWJvbHNbdHlwZV0pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewpAQCAtMzgyLDI0ICszODEsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogTG9hZHMgdGhlIGZ1bmN0aW9uIGVudHJpZXMgaW4gL3Byb2Mva2FsbHN5bXMgaW50byBrZXJuZWxfbWFwLT5kc28sCi0gKiBzbyB0aGF0IHdlIGNhbiBpbiB0aGUgbmV4dCBzdGVwIHNldCB0aGUgc3ltYm9sIC0+ZW5kIGFkZHJlc3MgYW5kIHRoZW4KLSAqIGNhbGwga2VybmVsX21hcHNfX3NwbGl0X2thbGxzeW1zLgotICovCi1zdGF0aWMgaW50IGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQoraW50IGthbGxzeW1zX19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYXJnLAorCQkgICAgaW50ICgqcHJvY2Vzc19zeW1ib2wpKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCSAgICAgY2hhciB0eXBlLCB1NjQgc3RhcnQpKQogewogCWNoYXIgKmxpbmUgPSBOVUxMOwogCXNpemVfdCBuOwotCXN0cnVjdCByYl9yb290ICpyb290ID0gJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXTsKLQlGSUxFICpmaWxlID0gZm9wZW4oIi9wcm9jL2thbGxzeW1zIiwgInIiKTsKKwlpbnQgZXJyID0gMDsKKwlGSUxFICpmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CiAKIAlpZiAoZmlsZSA9PSBOVUxMKQogCQlnb3RvIG91dF9mYWlsdXJlOwogCiAJd2hpbGUgKCFmZW9mKGZpbGUpKSB7CiAJCXU2NCBzdGFydDsKLQkJc3RydWN0IHN5bWJvbCAqc3ltOwogCQlpbnQgbGluZV9sZW4sIGxlbjsKIAkJY2hhciBzeW1ib2xfdHlwZTsKIAkJY2hhciAqc3ltYm9sX25hbWU7CkBAIC00MjAsNDMgKzQxNSw3MiBAQAogCQkJY29udGludWU7CiAKIAkJc3ltYm9sX3R5cGUgPSB0b3VwcGVyKGxpbmVbbGVuXSk7Ci0JCWlmICghc3ltYm9sX3R5cGVfX2lzX2Eoc3ltYm9sX3R5cGUsIG1hcC0+dHlwZSkpCi0JCQljb250aW51ZTsKLQogCQlzeW1ib2xfbmFtZSA9IGxpbmUgKyBsZW4gKyAyOwotCQkvKgotCQkgKiBXaWxsIGZpeCB1cCB0aGUgZW5kIGxhdGVyLCB3aGVuIHdlIGhhdmUgYWxsIHN5bWJvbHMgc29ydGVkLgotCQkgKi8KLQkJc3ltID0gc3ltYm9sX19uZXcoc3RhcnQsIDAsIHN5bWJvbF9uYW1lKTsKIAotCQlpZiAoc3ltID09IE5VTEwpCi0JCQlnb3RvIG91dF9kZWxldGVfbGluZTsKLQkJLyoKLQkJICogV2Ugd2lsbCBwYXNzIHRoZSBzeW1ib2xzIHRvIHRoZSBmaWx0ZXIgbGF0ZXIsIGluCi0JCSAqIG1hcF9fc3BsaXRfa2FsbHN5bXMsIHdoZW4gd2UgaGF2ZSBzcGxpdCB0aGUgbWFwcyBwZXIgbW9kdWxlCi0JCSAqLwotCQlzeW1ib2xzX19pbnNlcnQocm9vdCwgc3ltKTsKKwkJZXJyID0gcHJvY2Vzc19zeW1ib2woYXJnLCBzeW1ib2xfbmFtZSwgc3ltYm9sX3R5cGUsIHN0YXJ0KTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOwogCX0KIAogCWZyZWUobGluZSk7CiAJZmNsb3NlKGZpbGUpOworCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gMDsKLQotb3V0X2RlbGV0ZV9saW5lOgotCWZyZWUobGluZSk7CiBvdXRfZmFpbHVyZToKIAlyZXR1cm4gLTE7CiB9CiAKK3N0cnVjdCBwcm9jZXNzX2thbGxzeW1zX2FyZ3MgeworCXN0cnVjdCBtYXAgKm1hcDsKKwlzdHJ1Y3QgZHNvICpkc287Cit9OworCitzdGF0aWMgaW50IG1hcF9fcHJvY2Vzc19rYWxsc3ltX3N5bWJvbCh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIGNoYXIgdHlwZSwgdTY0IHN0YXJ0KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvY2Vzc19rYWxsc3ltc19hcmdzICphID0gYXJnOworCXN0cnVjdCByYl9yb290ICpyb290ID0gJmEtPmRzby0+c3ltYm9sc1thLT5tYXAtPnR5cGVdOworCisJaWYgKCFzeW1ib2xfdHlwZV9faXNfYSh0eXBlLCBhLT5tYXAtPnR5cGUpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2lsbCBmaXggdXAgdGhlIGVuZCBsYXRlciwgd2hlbiB3ZSBoYXZlIGFsbCBzeW1ib2xzIHNvcnRlZC4KKwkgKi8KKwlzeW0gPSBzeW1ib2xfX25ldyhzdGFydCwgMCwgbmFtZSk7CisKKwlpZiAoc3ltID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCS8qCisJICogV2Ugd2lsbCBwYXNzIHRoZSBzeW1ib2xzIHRvIHRoZSBmaWx0ZXIgbGF0ZXIsIGluCisJICogbWFwX19zcGxpdF9rYWxsc3ltcywgd2hlbiB3ZSBoYXZlIHNwbGl0IHRoZSBtYXBzIHBlciBtb2R1bGUKKwkgKi8KKwlzeW1ib2xzX19pbnNlcnQocm9vdCwgc3ltKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExvYWRzIHRoZSBmdW5jdGlvbiBlbnRyaWVzIGluIC9wcm9jL2thbGxzeW1zIGludG8ga2VybmVsX21hcC0+ZHNvLAorICogc28gdGhhdCB3ZSBjYW4gaW4gdGhlIG5leHQgc3RlcCBzZXQgdGhlIHN5bWJvbCAtPmVuZCBhZGRyZXNzIGFuZCB0aGVuCisgKiBjYWxsIGtlcm5lbF9tYXBzX19zcGxpdF9rYWxsc3ltcy4KKyAqLworc3RhdGljIGludCBkc29fX2xvYWRfYWxsX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgc3RydWN0IG1hcCAqbWFwKQoreworCXN0cnVjdCBwcm9jZXNzX2thbGxzeW1zX2FyZ3MgYXJncyA9IHsgLm1hcCA9IG1hcCwgLmRzbyA9IHNlbGYsIH07CisJcmV0dXJuIGthbGxzeW1zX19wYXJzZShmaWxlbmFtZSwgJmFyZ3MsIG1hcF9fcHJvY2Vzc19rYWxsc3ltX3N5bWJvbCk7Cit9CisKIC8qCiAgKiBTcGxpdCB0aGUgc3ltYm9scyBpbnRvIG1hcHMsIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyBvdmVybGFwcywgaS5lLiB0aGUKICAqIGtlcm5lbCByYW5nZSBpcyBicm9rZW4gaW4gc2V2ZXJhbCBtYXBzLCBuYW1lZCBba2VybmVsXS5OLCBhcyB3ZSBkb24ndCBoYXZlCiAgKiB0aGUgb3JpZ2luYWwgRUxGIHNlY3Rpb24gbmFtZXMgdm1saW51eCBoYXZlLgogICovCiBzdGF0aWMgaW50IGRzb19fc3BsaXRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCisJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKKwlzdHJ1Y3QgbWFwX2dyb3VwcyAqa21hcHMgPSBtYXBfX2ttYXAobWFwKS0+a21hcHM7CiAJc3RydWN0IG1hcCAqY3Vycl9tYXAgPSBtYXA7CiAJc3RydWN0IHN5bWJvbCAqcG9zOwogCWludCBjb3VudCA9IDA7CkBAIC00NzcsMTMgKzUwMSwxNyBAQAogCiAJCQkqbW9kdWxlKysgPSAnXDAnOwogCi0JCQlpZiAoc3RyY21wKHNlbGYtPm5hbWUsIG1vZHVsZSkpIHsKLQkJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2Vzc2lvbi0+a21hcHMsIG1hcC0+dHlwZSwgbW9kdWxlKTsKKwkJCWlmIChzdHJjbXAoY3Vycl9tYXAtPmRzby0+c2hvcnRfbmFtZSwgbW9kdWxlKSkgeworCQkJCWN1cnJfbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKGttYXBzLCBtYXAtPnR5cGUsIG1vZHVsZSk7CiAJCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKIAkJCQkJcHJfZGVidWcoIi9wcm9jL3trYWxsc3ltcyxtb2R1bGVzfSAiCi0JCQkJCSAgICAgICAgICJpbmNvbnNpc3RlbmN5IVxuIik7CisJCQkJCSAgICAgICAgICJpbmNvbnNpc3RlbmN5IHdoaWxlIGxvb2tpbmcgIgorCQkJCQkJICJmb3IgXCIlc1wiIG1vZHVsZSFcbiIsIG1vZHVsZSk7CiAJCQkJCXJldHVybiAtMTsKIAkJCQl9CisKKwkJCQlpZiAoY3Vycl9tYXAtPmRzby0+bG9hZGVkKQorCQkJCQlnb3RvIGRpc2NhcmRfc3ltYm9sOwogCQkJfQogCQkJLyoKIAkJCSAqIFNvIHRoYXQgd2UgbG9vayBqdXN0IGxpa2Ugd2UgZ2V0IGZyb20gLmtvIGZpbGVzLApAQCAtNTAzLDEzICs1MzEsMTMgQEAKIAkJCQlyZXR1cm4gLTE7CiAKIAkJCWN1cnJfbWFwID0gbWFwX19uZXcyKHBvcy0+c3RhcnQsIGRzbywgbWFwLT50eXBlKTsKLQkJCWlmIChtYXAgPT0gTlVMTCkgeworCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKIAkJCQlkc29fX2RlbGV0ZShkc28pOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAogCQkJY3Vycl9tYXAtPm1hcF9pcCA9IGN1cnJfbWFwLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7Ci0JCQltYXBfZ3JvdXBzX19pbnNlcnQoJnNlc3Npb24tPmttYXBzLCBjdXJyX21hcCk7CisJCQltYXBfZ3JvdXBzX19pbnNlcnQoa21hcHMsIGN1cnJfbWFwKTsKIAkJCSsra2VybmVsX3JhbmdlOwogCQl9CiAKQEAgLTUyOCwxNyArNTU2LDE2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0KLXN0YXRpYyBpbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkgICAgICAgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCWlmIChkc29fX2xvYWRfYWxsX2thbGxzeW1zKHNlbGYsIG1hcCkgPCAwKQorCWlmIChkc29fX2xvYWRfYWxsX2thbGxzeW1zKHNlbGYsIGZpbGVuYW1lLCBtYXApIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJc3ltYm9sc19fZml4dXBfZW5kKCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0pOwogCXNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19LRVJORUw7CiAKLQlyZXR1cm4gZHNvX19zcGxpdF9rYWxsc3ltcyhzZWxmLCBtYXAsIHNlc3Npb24sIGZpbHRlcik7CisJcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoc2VsZiwgbWFwLCBmaWx0ZXIpOwogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF9wZXJmX21hcChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCkBAIC04NjQsMTAgKzg5MSwxMCBAQAogCX0KIH0KIAotc3RhdGljIGludCBkc29fX2xvYWRfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQsCi0JCQkgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IGtlcm5lbCwgaW50IGttb2R1bGUpCitzdGF0aWMgaW50IGRzb19fbG9hZF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBjb25zdCBjaGFyICpuYW1lLAorCQkJIGludCBmZCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IGttb2R1bGUpCiB7CisJc3RydWN0IGttYXAgKmttYXAgPSBzZWxmLT5rZXJuZWwgPyBtYXBfX2ttYXAobWFwKSA6IE5VTEw7CiAJc3RydWN0IG1hcCAqY3Vycl9tYXAgPSBtYXA7CiAJc3RydWN0IGRzbyAqY3Vycl9kc28gPSBzZWxmOwogCXNpemVfdCBkc29fbmFtZV9sZW4gPSBzdHJsZW4oc2VsZi0+c2hvcnRfbmFtZSk7CkBAIC05MjQsNyArOTUxLDcgQEAKIAlucl9zeW1zID0gc2hkci5zaF9zaXplIC8gc2hkci5zaF9lbnRzaXplOwogCiAJbWVtc2V0KCZzeW0sIDAsIHNpemVvZihzeW0pKTsKLQlpZiAoIWtlcm5lbCkgeworCWlmICghc2VsZi0+a2VybmVsKSB7CiAJCXNlbGYtPmFkanVzdF9zeW1ib2xzID0gKGVoZHIuZV90eXBlID09IEVUX0VYRUMgfHwKIAkJCQllbGZfc2VjdGlvbl9ieV9uYW1lKGVsZiwgJmVoZHIsICZzaGRyLAogCQkJCQkJICAgICAiLmdudS5wcmVsaW5rX3VuZG8iLApAQCAtOTMzLDExICs5NjAsMTUgQEAKIAogCWVsZl9zeW10YWJfX2Zvcl9lYWNoX3N5bWJvbChzeW1zLCBucl9zeW1zLCBpZHgsIHN5bSkgewogCQlzdHJ1Y3Qgc3ltYm9sICpmOwotCQljb25zdCBjaGFyICplbGZfbmFtZTsKKwkJY29uc3QgY2hhciAqZWxmX25hbWUgPSBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpOwogCQljaGFyICpkZW1hbmdsZWQgPSBOVUxMOwogCQlpbnQgaXNfbGFiZWwgPSBlbGZfc3ltX19pc19sYWJlbCgmc3ltKTsKIAkJY29uc3QgY2hhciAqc2VjdGlvbl9uYW1lOwogCisJCWlmIChrbWFwICYmIGttYXAtPnJlZl9yZWxvY19zeW0gJiYga21hcC0+cmVmX3JlbG9jX3N5bS0+bmFtZSAmJgorCQkgICAgc3RyY21wKGVsZl9uYW1lLCBrbWFwLT5yZWZfcmVsb2Nfc3ltLT5uYW1lKSA9PSAwKQorCQkJa21hcC0+cmVmX3JlbG9jX3N5bS0+dW5yZWxvY2F0ZWRfYWRkciA9IHN5bS5zdF92YWx1ZTsKKwogCQlpZiAoIWlzX2xhYmVsICYmICFlbGZfc3ltX19pc19hKCZzeW0sIG1hcC0+dHlwZSkpCiAJCQljb250aW51ZTsKIApAQCAtOTUwLDEwICs5ODEsOSBAQAogCQlpZiAoaXNfbGFiZWwgJiYgIWVsZl9zZWNfX2lzX2EoJnNoZHIsIHNlY3N0cnMsIG1hcC0+dHlwZSkpCiAJCQljb250aW51ZTsKIAotCQllbGZfbmFtZSA9IGVsZl9zeW1fX25hbWUoJnN5bSwgc3ltc3Rycyk7CiAJCXNlY3Rpb25fbmFtZSA9IGVsZl9zZWNfX25hbWUoJnNoZHIsIHNlY3N0cnMpOwogCi0JCWlmIChrZXJuZWwgfHwga21vZHVsZSkgeworCQlpZiAoc2VsZi0+a2VybmVsIHx8IGttb2R1bGUpIHsKIAkJCWNoYXIgZHNvX25hbWVbUEFUSF9NQVhdOwogCiAJCQlpZiAoc3RyY21wKHNlY3Rpb25fbmFtZSwKQEAgLTk2OSw3ICs5OTksNyBAQAogCQkJc25wcmludGYoZHNvX25hbWUsIHNpemVvZihkc29fbmFtZSksCiAJCQkJICIlcyVzIiwgc2VsZi0+c2hvcnRfbmFtZSwgc2VjdGlvbl9uYW1lKTsKIAotCQkJY3Vycl9tYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlc3Npb24tPmttYXBzLCBtYXAtPnR5cGUsIGRzb19uYW1lKTsKKwkJCWN1cnJfbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKGttYXAtPmttYXBzLCBtYXAtPnR5cGUsIGRzb19uYW1lKTsKIAkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CiAJCQkJdTY0IHN0YXJ0ID0gc3ltLnN0X3ZhbHVlOwogCkBAIC05ODAsNyArMTAxMCw3IEBACiAJCQkJaWYgKGN1cnJfZHNvID09IE5VTEwpCiAJCQkJCWdvdG8gb3V0X2VsZl9lbmQ7CiAJCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIoc3RhcnQsIGN1cnJfZHNvLAotCQkJCQkJICAgICBNQVBfX0ZVTkNUSU9OKTsKKwkJCQkJCSAgICAgbWFwLT50eXBlKTsKIAkJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewogCQkJCQlkc29fX2RlbGV0ZShjdXJyX2Rzbyk7CiAJCQkJCWdvdG8gb3V0X2VsZl9lbmQ7CkBAIC05ODgsOCArMTAxOCw5IEBACiAJCQkJY3Vycl9tYXAtPm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CiAJCQkJY3Vycl9tYXAtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKIAkJCQljdXJyX2Rzby0+b3JpZ2luID0gRFNPX19PUklHX0tFUk5FTDsKLQkJCQltYXBfZ3JvdXBzX19pbnNlcnQoJnNlc3Npb24tPmttYXBzLCBjdXJyX21hcCk7CisJCQkJbWFwX2dyb3Vwc19faW5zZXJ0KGttYXAtPmttYXBzLCBjdXJyX21hcCk7CiAJCQkJZHNvc19fYWRkKCZkc29zX19rZXJuZWwsIGN1cnJfZHNvKTsKKwkJCQlkc29fX3NldF9sb2FkZWQoY3Vycl9kc28sIG1hcC0+dHlwZSk7CiAJCQl9IGVsc2UKIAkJCQljdXJyX2RzbyA9IGN1cnJfbWFwLT5kc287CiAKQEAgLTk5Nyw5ICsxMDI4LDEwIEBACiAJCX0KIAogCQlpZiAoY3Vycl9kc28tPmFkanVzdF9zeW1ib2xzKSB7Ci0JCQlwcl9kZWJ1ZzIoImFkanVzdGluZyBzeW1ib2w6IHN0X3ZhbHVlOiAlTHggc2hfYWRkcjogIgotCQkJCSAgIiVMeCBzaF9vZmZzZXQ6ICVMeFxuIiwgKHU2NClzeW0uc3RfdmFsdWUsCi0JCQkJICAodTY0KXNoZHIuc2hfYWRkciwgKHU2NClzaGRyLnNoX29mZnNldCk7CisJCQlwcl9kZWJ1ZzQoIiVzOiBhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJSNMeCAiCisJCQkJICAic2hfYWRkcjogJSNMeCBzaF9vZmZzZXQ6ICUjTHhcbiIsIF9fZnVuY19fLAorCQkJCSAgKHU2NClzeW0uc3RfdmFsdWUsICh1NjQpc2hkci5zaF9hZGRyLAorCQkJCSAgKHU2NClzaGRyLnNoX29mZnNldCk7CiAJCQlzeW0uc3RfdmFsdWUgLT0gc2hkci5zaF9hZGRyIC0gc2hkci5zaF9vZmZzZXQ7CiAJCX0KIAkJLyoKQEAgLTEwMjcsOCArMTA1OSwxNiBAQAogCS8qCiAJICogRm9yIG1pc2Fubm90YXRlZCwgemVyb2VkLCBBU00gZnVuY3Rpb24gc2l6ZXMuCiAJICovCi0JaWYgKG5yID4gMCkKKwlpZiAobnIgPiAwKSB7CiAJCXN5bWJvbHNfX2ZpeHVwX2VuZCgmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdKTsKKwkJaWYgKGttYXApIHsKKwkJCS8qCisJCQkgKiBXZSBuZWVkIHRvIGZpeHVwIHRoaXMgaGVyZSB0b28gYmVjYXVzZSB3ZSBjcmVhdGUgbmV3CisJCQkgKiBtYXBzIGhlcmUsIGZvciB0aGluZ3MgbGlrZSB2c3lzY2FsbCBzZWN0aW9ucy4KKwkJCSAqLworCQkJX19tYXBfZ3JvdXBzX19maXh1cF9lbmQoa21hcC0+a21hcHMsIG1hcC0+dHlwZSk7CisJCX0KKwl9CiAJZXJyID0gbnI7CiBvdXRfZWxmX2VuZDoKIAllbGZfZW5kKGVsZik7CkBAIC0xMDQxLDI1ICsxMDgxLDI4IEBACiAJcmV0dXJuIG1lbWNtcChzZWxmLT5idWlsZF9pZCwgYnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCkpID09IDA7CiB9CiAKLXN0YXRpYyBib29sIF9fZHNvc19fcmVhZF9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3N0YXRpYyBib29sIF9fZHNvc19fcmVhZF9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB3aXRoX2hpdHMpCiB7CiAJYm9vbCBoYXZlX2J1aWxkX2lkID0gZmFsc2U7CiAJc3RydWN0IGRzbyAqcG9zOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpIHsKKwkJaWYgKHdpdGhfaGl0cyAmJiAhcG9zLT5oaXQpCisJCQljb250aW51ZTsKIAkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHBvcy0+bG9uZ19uYW1lLCBwb3MtPmJ1aWxkX2lkLAogCQkJCQkgICAgc2l6ZW9mKHBvcy0+YnVpbGRfaWQpKSA+IDApIHsKIAkJCWhhdmVfYnVpbGRfaWQJICA9IHRydWU7CiAJCQlwb3MtPmhhc19idWlsZF9pZCA9IHRydWU7CiAJCX0KKwl9CiAKIAlyZXR1cm4gaGF2ZV9idWlsZF9pZDsKIH0KIAotYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyh2b2lkKQorYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyhib29sIHdpdGhfaGl0cykKIHsKLQlib29sIGtidWlsZGlkcyA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCksCi0JICAgICB1YnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX191c2VyKTsKKwlib29sIGtidWlsZGlkcyA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCwgd2l0aF9oaXRzKSwKKwkgICAgIHVidWlsZGlkcyA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX3VzZXIsIHdpdGhfaGl0cyk7CiAJcmV0dXJuIGtidWlsZGlkcyB8fCB1YnVpbGRpZHM7CiB9CiAKQEAgLTExOTEsNiArMTIzNCw3IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgb3JpZ2luW10gPSB7CiAJCVtEU09fX09SSUdfS0VSTkVMXSA9ICAgJ2snLAogCQlbRFNPX19PUklHX0pBVkFfSklUXSA9ICdqJywKKwkJW0RTT19fT1JJR19CVUlMRF9JRF9DQUNIRV0gPSAnQicsCiAJCVtEU09fX09SSUdfRkVET1JBXSA9ICAgJ2YnLAogCQlbRFNPX19PUklHX1VCVU5UVV0gPSAgICd1JywKIAkJW0RTT19fT1JJR19CVUlMRElEXSA9ICAnYicsCkBAIC0xMjAzLDE5ICsxMjQ3LDE5IEBACiAJcmV0dXJuIG9yaWdpbltzZWxmLT5vcmlnaW5dOwogfQogCi1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoraW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IHNpemUgPSBQQVRIX01BWDsKIAljaGFyICpuYW1lOwogCXU4IGJ1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOworCWNoYXIgYnVpbGRfaWRfaGV4W0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CiAJaW50IHJldCA9IC0xOwogCWludCBmZDsKIAogCWRzb19fc2V0X2xvYWRlZChzZWxmLCBtYXAtPnR5cGUpOwogCiAJaWYgKHNlbGYtPmtlcm5lbCkKLQkJcmV0dXJuIGRzb19fbG9hZF9rZXJuZWxfc3ltKHNlbGYsIG1hcCwgc2Vzc2lvbiwgZmlsdGVyKTsKKwkJcmV0dXJuIGRzb19fbG9hZF9rZXJuZWxfc3ltKHNlbGYsIG1hcCwgZmlsdGVyKTsKIAogCW5hbWUgPSBtYWxsb2Moc2l6ZSk7CiAJaWYgKCFuYW1lKQpAQCAtMTIzMCw4ICsxMjc0LDE2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0Jc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0ZFRE9SQSAtIDE7CisJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFOwogCisJaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCQlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5idWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKKwkJCQkgIGJ1aWxkX2lkX2hleCk7CisJCXNucHJpbnRmKG5hbWUsIHNpemUsICIlcy8lcy8uYnVpbGQtaWQvJS4ycy8lcyIsCisJCQkgZ2V0ZW52KCJIT01FIiksIERFQlVHX0NBQ0hFX0RJUiwKKwkJCSBidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOworCQlnb3RvIG9wZW5fZmlsZTsKKwl9CiBtb3JlOgogCWRvIHsKIAkJc2VsZi0+b3JpZ2luKys7CkBAIC0xMjQ3LDggKzEyOTksNiBAQAogCQljYXNlIERTT19fT1JJR19CVUlMRElEOgogCQkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHNlbGYtPmxvbmdfbmFtZSwgYnVpbGRfaWQsCiAJCQkJCQkgICAgc2l6ZW9mKGJ1aWxkX2lkKSkpIHsKLQkJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwotCiAJCQkJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksCiAJCQkJCQkgIGJ1aWxkX2lkX2hleCk7CiAJCQkJc25wcmludGYobmFtZSwgc2l6ZSwKQEAgLTEyNzYsMTEgKzEzMjYsMTEgQEAKIAkJCWlmICghZHNvX19idWlsZF9pZF9lcXVhbChzZWxmLCBidWlsZF9pZCkpCiAJCQkJZ290byBtb3JlOwogCQl9Ci0KK29wZW5fZmlsZToKIAkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKIAl9IHdoaWxlIChmZCA8IDApOwogCi0JcmV0ID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIE5VTEwsIG5hbWUsIGZkLCBmaWx0ZXIsIDAsIDApOworCXJldCA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBuYW1lLCBmZCwgZmlsdGVyLCAwKTsKIAljbG9zZShmZCk7CiAKIAkvKgpAQCAtMTMwOSwxNCArMTM1OSwzNCBAQAogCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+bWFwc1t0eXBlXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBtYXAgKm1hcCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKIAotCQlpZiAobWFwLT5kc28gJiYgc3RyY21wKG1hcC0+ZHNvLT5uYW1lLCBuYW1lKSA9PSAwKQorCQlpZiAobWFwLT5kc28gJiYgc3RyY21wKG1hcC0+ZHNvLT5zaG9ydF9uYW1lLCBuYW1lKSA9PSAwKQogCQkJcmV0dXJuIG1hcDsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGhfZGlyKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGNoYXIgKmRpcm5hbWUpCitzdGF0aWMgaW50IGRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZikKK3sKKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKKwkvKgorCSAqIGtlcm5lbCBtb2R1bGUgc2hvcnQgbmFtZXMgYXJlIG9mIHRoZSBmb3JtICJbbW9kdWxlXSIgYW5kCisJICogd2UgbmVlZCBqdXN0ICJtb2R1bGUiIGhlcmUuCisJICovCisJY29uc3QgY2hhciAqbmFtZSA9IHNlbGYtPnNob3J0X25hbWUgKyAxOworCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksCisJCSAiL3N5cy9tb2R1bGUvJS4qcy9ub3Rlcy8ubm90ZS5nbnUuYnVpbGQtaWQiLAorCQkgKGludClzdHJsZW4obmFtZSAtIDEpLCBuYW1lKTsKKworCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZChmaWxlbmFtZSwgc2VsZi0+YnVpbGRfaWQsCisJCQkJIHNpemVvZihzZWxmLT5idWlsZF9pZCkpID09IDApCisJCXNlbGYtPmhhc19idWlsZF9pZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2RpcihzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgY2hhciAqZGlybmFtZSkKIHsKIAlzdHJ1Y3QgZGlyZW50ICpkZW50OwogCURJUiAqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKQEAgLTEzMzYsNyArMTQwNiw3IEBACiAKIAkJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwKIAkJCQkgZGlybmFtZSwgZGVudC0+ZF9uYW1lKTsKLQkJCWlmIChwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGhfZGlyKHNlbGYsIHBhdGgpIDwgMCkKKwkJCWlmIChtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBwYXRoKSA8IDApCiAJCQkJZ290byBmYWlsdXJlOwogCQl9IGVsc2UgewogCQkJY2hhciAqZG90ID0gc3RycmNocihkZW50LT5kX25hbWUsICcuJyksCkBAIC0xMzUwLDcgKzE0MjAsNyBAQAogCQkJCSAoaW50KShkb3QgLSBkZW50LT5kX25hbWUpLCBkZW50LT5kX25hbWUpOwogCiAJCQlzdHJ4ZnJjaGFyKGRzb19uYW1lLCAnLScsICdfJyk7Ci0JCQltYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlbGYtPmttYXBzLCBNQVBfX0ZVTkNUSU9OLCBkc29fbmFtZSk7CisJCQltYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc2VsZiwgTUFQX19GVU5DVElPTiwgZHNvX25hbWUpOwogCQkJaWYgKG1hcCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMzYxLDYgKzE0MzEsNyBAQAogCQkJaWYgKGxvbmdfbmFtZSA9PSBOVUxMKQogCQkJCWdvdG8gZmFpbHVyZTsKIAkJCWRzb19fc2V0X2xvbmdfbmFtZShtYXAtPmRzbywgbG9uZ19uYW1lKTsKKwkJCWRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQobWFwLT5kc28pOwogCQl9CiAJfQogCkBAIC0xMzcwLDcgKzE0NDEsNyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGgoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3N0YXRpYyBpbnQgbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKIHsKIAlzdHJ1Y3QgdXRzbmFtZSB1dHM7CiAJY2hhciBtb2R1bGVzX3BhdGhbUEFUSF9NQVhdOwpAQCAtMTM4MSw3ICsxNDUyLDcgQEAKIAlzbnByaW50Zihtb2R1bGVzX3BhdGgsIHNpemVvZihtb2R1bGVzX3BhdGgpLCAiL2xpYi9tb2R1bGVzLyVzL2tlcm5lbCIsCiAJCSB1dHMucmVsZWFzZSk7CiAKLQlyZXR1cm4gcGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBtb2R1bGVzX3BhdGgpOworCXJldHVybiBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBtb2R1bGVzX3BhdGgpOwogfQogCiAvKgpAQCAtMTM5MSw4ICsxNDYyLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQogewotCXN0cnVjdCBtYXAgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7Ci0KKwlzdHJ1Y3QgbWFwICpzZWxmID0gemFsbG9jKHNpemVvZigqc2VsZikgKworCQkJCSAgKGRzby0+a2VybmVsID8gc2l6ZW9mKHN0cnVjdCBrbWFwKSA6IDApKTsKIAlpZiAoc2VsZiAhPSBOVUxMKSB7CiAJCS8qCiAJCSAqIC0+ZW5kIHdpbGwgYmUgZmlsbGVkIGFmdGVyIHdlIGxvYWQgYWxsIHRoZSBzeW1ib2xzCkBAIC0xNDAzLDcgKzE0NzQsMjUgQEAKIAlyZXR1cm4gc2VsZjsKIH0KIAotc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9tb2R1bGVfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQorc3RydWN0IG1hcCAqbWFwX2dyb3Vwc19fbmV3X21vZHVsZShzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgdTY0IHN0YXJ0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBtYXAgKm1hcDsKKwlzdHJ1Y3QgZHNvICpkc28gPSBfX2Rzb3NfX2ZpbmRuZXcoJmRzb3NfX2tlcm5lbCwgZmlsZW5hbWUpOworCisJaWYgKGRzbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1hcCA9IG1hcF9fbmV3MihzdGFydCwgZHNvLCBNQVBfX0ZVTkNUSU9OKTsKKwlpZiAobWFwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfS01PRFVMRTsKKwltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgbWFwKTsKKwlyZXR1cm4gbWFwOworfQorCitzdGF0aWMgaW50IG1hcF9ncm91cHNfX2NyZWF0ZV9tb2R1bGVzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKQogewogCWNoYXIgKmxpbmUgPSBOVUxMOwogCXNpemVfdCBuOwpAQCAtMTQxNiw3ICsxNTA1LDYgQEAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKIAkJY2hhciBuYW1lW1BBVEhfTUFYXTsKIAkJdTY0IHN0YXJ0OwotCQlzdHJ1Y3QgZHNvICpkc287CiAJCWNoYXIgKnNlcDsKIAkJaW50IGxpbmVfbGVuOwogCkBAIC0xNDQyLDMyICsxNTMwLDE2IEBACiAJCSpzZXAgPSAnXDAnOwogCiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIlslc10iLCBsaW5lKTsKLQkJZHNvID0gZHNvX19uZXcobmFtZSk7Ci0KLQkJaWYgKGRzbyA9PSBOVUxMKQorCQltYXAgPSBtYXBfZ3JvdXBzX19uZXdfbW9kdWxlKHNlbGYsIHN0YXJ0LCBuYW1lKTsKKwkJaWYgKG1hcCA9PSBOVUxMKQogCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0KLQkJbWFwID0gbWFwX19uZXcyKHN0YXJ0LCBkc28sIE1BUF9fRlVOQ1RJT04pOwotCQlpZiAobWFwID09IE5VTEwpIHsKLQkJCWRzb19fZGVsZXRlKGRzbyk7Ci0JCQlnb3RvIG91dF9kZWxldGVfbGluZTsKLQkJfQotCi0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJCSAiL3N5cy9tb2R1bGUvJXMvbm90ZXMvLm5vdGUuZ251LmJ1aWxkLWlkIiwgbGluZSk7Ci0JCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZChuYW1lLCBkc28tPmJ1aWxkX2lkLAotCQkJCQkgc2l6ZW9mKGRzby0+YnVpbGRfaWQpKSA9PSAwKQotCQkJZHNvLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwotCi0JCWRzby0+b3JpZ2luID0gRFNPX19PUklHX0tNT0RVTEU7Ci0JCW1hcF9ncm91cHNfX2luc2VydCgmc2VsZi0+a21hcHMsIG1hcCk7Ci0JCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBkc28pOworCQlkc29fX2tlcm5lbF9tb2R1bGVfZ2V0X2J1aWxkX2lkKG1hcC0+ZHNvKTsKIAl9CiAKIAlmcmVlKGxpbmUpOwogCWZjbG9zZShmaWxlKTsKIAotCXJldHVybiBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGgoc2VsZik7CisJcmV0dXJuIG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGgoc2VsZik7CiAKIG91dF9kZWxldGVfbGluZToKIAlmcmVlKGxpbmUpOwpAQCAtMTQ3Niw3ICsxNTQ4LDYgQEAKIH0KIAogc3RhdGljIGludCBkc29fX2xvYWRfdm1saW51eChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkgICAgIGNvbnN0IGNoYXIgKnZtbGludXgsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IGVyciA9IC0xLCBmZDsKQEAgLTE1MTAsNTEgKzE1ODEsMTI0IEBACiAJCXJldHVybiAtMTsKIAogCWRzb19fc2V0X2xvYWRlZChzZWxmLCBtYXAtPnR5cGUpOwotCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBzZXNzaW9uLCBzZWxmLT5sb25nX25hbWUsIGZkLCBmaWx0ZXIsIDEsIDApOworCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCB2bWxpbnV4LCBmZCwgZmlsdGVyLCAwKTsKIAljbG9zZShmZCk7CiAKKwlpZiAoZXJyID4gMCkKKwkJcHJfZGVidWcoIlVzaW5nICVzIGZvciBzeW1ib2xzXG4iLCB2bWxpbnV4KTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBkc29fX2xvYWRfdm1saW51eF9wYXRoKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKKwkJCSAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlwcl9kZWJ1ZygiTG9va2luZyBhdCB0aGUgdm1saW51eF9wYXRoICglZCBlbnRyaWVzIGxvbmcpXG4iLAorCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzKTsKKworCWZvciAoaSA9IDA7IGkgPCB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7ICsraSkgeworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIHZtbGludXhfcGF0aFtpXSwgZmlsdGVyKTsKKwkJaWYgKGVyciA+IDApIHsKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLCBzdHJkdXAodm1saW51eF9wYXRoW2ldKSk7CisJCQlicmVhazsKKwkJfQorCX0KKwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgZXJyOwotCWJvb2wgaXNfa2FsbHN5bXM7CisJY29uc3QgY2hhciAqa2FsbHN5bXNfZmlsZW5hbWUgPSBOVUxMOworCWNoYXIgKmthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSA9IE5VTEw7CisJLyoKKwkgKiBTdGVwIDE6IGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIHZtbGludXggZmlsZW5hbWUsIHVzZSBpdCBhbmQgb25seQorCSAqIGl0LCByZXBvcnRpbmcgZXJyb3JzIHRvIHRoZSB1c2VyIGlmIGl0IGNhbm5vdCBiZSB1c2VkLgorCSAqCisJICogRm9yIGluc3RhbmNlLCB0cnkgdG8gYW5hbHlzZSBhbiBBUk0gcGVyZi5kYXRhIGZpbGUgX3dpdGhvdXRfIGEKKwkgKiBidWlsZC1pZCwgb3IgaWYgdGhlIHVzZXIgc3BlY2lmaWVzIHRoZSB3cm9uZyBwYXRoIHRvIHRoZSByaWdodAorCSAqIHZtbGludXggZmlsZSwgb2J2aW91c2x5IHdlIGNhbid0IGZhbGxiYWNrIHRvIGFub3RoZXIgdm1saW51eCAoYQorCSAqIHg4Nl84NiBvbmUsIG9uIHRoZSBtYWNoaW5lIHdoZXJlIGFuYWx5c2lzIGlzIGJlaW5nIHBlcmZvcm1lZCwgc2F5KSwKKwkgKiBvciB3b3JzZSwgL3Byb2Mva2FsbHN5bXMuCisJICoKKwkgKiBJZiB0aGUgc3BlY2lmaWVkIGZpbGUgX2hhc18gYSBidWlsZC1pZCBhbmQgdGhlcmUgaXMgYSBidWlsZC1pZAorCSAqIHNlY3Rpb24gaW4gdGhlIHBlcmYuZGF0YSBmaWxlLCB3ZSB3aWxsIHN0aWxsIGRvIHRoZSBleHBlY3RlZAorCSAqIHZhbGlkYXRpb24gaW4gZHNvX19sb2FkX3ZtbGludXggYW5kIHdpbGwgYmFpbCBvdXQgaWYgdGhleSBkb24ndAorCSAqIG1hdGNoLgorCSAqLworCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgIT0gTlVMTCkgeworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsCisJCQkJCXN5bWJvbF9jb25mLnZtbGludXhfbmFtZSwgZmlsdGVyKTsKKwkJZ290byBvdXRfdHJ5X2ZpeHVwOworCX0KIAogCWlmICh2bWxpbnV4X3BhdGggIT0gTlVMTCkgewotCQlpbnQgaTsKLQkJcHJfZGVidWcoIkxvb2tpbmcgYXQgdGhlIHZtbGludXhfcGF0aCAoJWQgZW50cmllcyBsb25nKVxuIiwKLQkJCSB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXMpOwotCQlmb3IgKGkgPSAwOyBpIDwgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOyArK2kpIHsKLQkJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgc2Vzc2lvbiwKLQkJCQkJCXZtbGludXhfcGF0aFtpXSwgZmlsdGVyKTsKLQkJCWlmIChlcnIgPiAwKSB7Ci0JCQkJcHJfZGVidWcoIlVzaW5nICVzIGZvciBzeW1ib2xzXG4iLAotCQkJCQkgdm1saW51eF9wYXRoW2ldKTsKLQkJCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwKLQkJCQkJCSAgIHN0cmR1cCh2bWxpbnV4X3BhdGhbaV0pKTsKLQkJCQlnb3RvIG91dF9maXh1cDsKKwkJZXJyID0gZHNvX19sb2FkX3ZtbGludXhfcGF0aChzZWxmLCBtYXAsIGZpbHRlcik7CisJCWlmIChlcnIgPiAwKQorCQkJZ290byBvdXRfZml4dXA7CisJfQorCisJLyoKKwkgKiBTYXkgdGhlIGtlcm5lbCBEU08gd2FzIGNyZWF0ZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBidWlsZC1pZCBoZWFkZXIgdGFibGUsCisJICogd2UgaGF2ZSBhIGJ1aWxkLWlkLCBzbyBjaGVjayBpZiBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgcnVubmluZyBrZXJuZWwsCisJICogdXNpbmcgaXQgaWYgaXQgaXMuCisJICovCisJaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCQl1OCBrYWxsc3ltc19idWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKKwkJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKworCQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoIi9zeXMva2VybmVsL25vdGVzIiwga2FsbHN5bXNfYnVpbGRfaWQsCisJCQkJCSBzaXplb2Yoa2FsbHN5bXNfYnVpbGRfaWQpKSA9PSAwKSB7CisJCQlpZiAoZHNvX19idWlsZF9pZF9lcXVhbChzZWxmLCBrYWxsc3ltc19idWlsZF9pZCkpIHsKKwkJCQlrYWxsc3ltc19maWxlbmFtZSA9ICIvcHJvYy9rYWxsc3ltcyI7CisJCQkJZ290byBkb19rYWxsc3ltczsKIAkJCX0KIAkJfQorCQkvKgorCQkgKiBOb3cgbG9vayBpZiB3ZSBoYXZlIGl0IG9uIHRoZSBidWlsZC1pZCBjYWNoZSBpbgorCQkgKiAkSE9NRS8uZGVidWcvW2tlcm5lbC5rYWxsc3ltc10uCisJCSAqLworCQlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5idWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKKwkJCQkgIHNidWlsZF9pZCk7CisKKwkJaWYgKGFzcHJpbnRmKCZrYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWUsCisJCQkgICAgICIlcy8uZGVidWcvW2tlcm5lbC5rYWxsc3ltc10vJXMiLAorCQkJICAgICBnZXRlbnYoIkhPTUUiKSwgc2J1aWxkX2lkKSA9PSAtMSkgeworCQkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3Iga2FsbHN5bXMgZmlsZSBsb29rdXBcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJa2FsbHN5bXNfZmlsZW5hbWUgPSBrYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWU7CisKKwkJaWYgKGFjY2VzcyhrYWxsc3ltc19maWxlbmFtZSwgRl9PSykpIHsKKwkJCXByX2VycigiTm8ga2FsbHN5bXMgb3Igdm1saW51eCB3aXRoIGJ1aWxkLWlkICVzICIKKwkJCSAgICAgICAid2FzIGZvdW5kXG4iLCBzYnVpbGRfaWQpOworCQkJZnJlZShrYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTGFzdCByZXNvcnQsIGlmIHdlIGRvbid0IGhhdmUgYSBidWlsZC1pZCBhbmQgY291bGRuJ3QgZmluZAorCQkgKiBhbnkgdm1saW51eCBmaWxlLCB0cnkgdGhlIHJ1bm5pbmcga2VybmVsIGthbGxzeW1zIHRhYmxlLgorCQkgKi8KKwkJa2FsbHN5bXNfZmlsZW5hbWUgPSAiL3Byb2Mva2FsbHN5bXMiOwogCX0KIAotCWlzX2thbGxzeW1zID0gc2VsZi0+bG9uZ19uYW1lWzBdID09ICdbJzsKLQlpZiAoaXNfa2FsbHN5bXMpCi0JCWdvdG8gZG9fa2FsbHN5bXM7Ci0KLQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIHNlc3Npb24sIHNlbGYtPmxvbmdfbmFtZSwgZmlsdGVyKTsKLQlpZiAoZXJyIDw9IDApIHsKLQkJcHJfaW5mbygiVGhlIGZpbGUgJXMgY2Fubm90IGJlIHVzZWQsICIKLQkJCSJ0cnlpbmcgdG8gdXNlIC9wcm9jL2thbGxzeW1zLi4uIiwgc2VsZi0+bG9uZ19uYW1lKTsKIGRvX2thbGxzeW1zOgotCQllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoc2VsZiwgbWFwLCBzZXNzaW9uLCBmaWx0ZXIpOwotCQlpZiAoZXJyID4gMCAmJiAhaXNfa2FsbHN5bXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBkc29fX3NldF9sb25nX25hbWUoc2VsZiwgc3RyZHVwKCJba2VybmVsLmthbGxzeW1zXSIpKTsKLQl9CisJZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKHNlbGYsIGthbGxzeW1zX2ZpbGVuYW1lLCBtYXAsIGZpbHRlcik7CisJaWYgKGVyciA+IDApCisJCXByX2RlYnVnKCJVc2luZyAlcyBmb3Igc3ltYm9sc1xuIiwga2FsbHN5bXNfZmlsZW5hbWUpOworCWZyZWUoa2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lKTsKIAorb3V0X3RyeV9maXh1cDoKIAlpZiAoZXJyID4gMCkgewogb3V0X2ZpeHVwOgorCQlpZiAoa2FsbHN5bXNfZmlsZW5hbWUgIT0gTlVMTCkKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLCBzdHJkdXAoIltrZXJuZWwua2FsbHN5bXNdIikpOwogCQltYXBfX2ZpeHVwX3N0YXJ0KG1hcCk7CiAJCW1hcF9fZml4dXBfZW5kKG1hcCk7CiAJfQpAQCAtMTU2NCw3ICsxNzA4LDYgQEAKIAogTElTVF9IRUFEKGRzb3NfX3VzZXIpOwogTElTVF9IRUFEKGRzb3NfX2tlcm5lbCk7Ci1zdHJ1Y3QgZHNvICp2ZHNvOwogCiBzdGF0aWMgdm9pZCBkc29zX19hZGQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRzbyAqZHNvKQogewpAQCAtMTU3NiwxOSArMTcxOSwxOSBAQAogCXN0cnVjdCBkc28gKnBvczsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQotCQlpZiAoc3RyY21wKHBvcy0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJaWYgKHN0cmNtcChwb3MtPmxvbmdfbmFtZSwgbmFtZSkgPT0gMCkKIAkJCXJldHVybiBwb3M7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCBkc28gKl9fZHNvc19fZmluZG5ldyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkc28gKmRzbyA9IGRzb3NfX2ZpbmQoJmRzb3NfX3VzZXIsIG5hbWUpOworCXN0cnVjdCBkc28gKmRzbyA9IGRzb3NfX2ZpbmQoaGVhZCwgbmFtZSk7CiAKIAlpZiAoIWRzbykgewogCQlkc28gPSBkc29fX25ldyhuYW1lKTsKIAkJaWYgKGRzbyAhPSBOVUxMKSB7Ci0JCQlkc29zX19hZGQoJmRzb3NfX3VzZXIsIGRzbyk7CisJCQlkc29zX19hZGQoaGVhZCwgZHNvKTsKIAkJCWRzb19fc2V0X2Jhc2VuYW1lKGRzbyk7CiAJCX0KIAl9CkBAIC0xNjEzLDc1ICsxNzU2LDc4IEBACiAJX19kc29zX19mcHJpbnRmKCZkc29zX191c2VyLCBmcCk7CiB9CiAKLXN0YXRpYyBzaXplX3QgX19kc29zX19mcHJpbnRmX2J1aWxkaWQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgRklMRSAqZnApCitzdGF0aWMgc2l6ZV90IF9fZHNvc19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIEZJTEUgKmZwLAorCQkJCSAgICAgIGJvb2wgd2l0aF9oaXRzKQogewogCXN0cnVjdCBkc28gKnBvczsKIAlzaXplX3QgcmV0ID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKSB7CisJCWlmICh3aXRoX2hpdHMgJiYgIXBvcy0+aGl0KQorCQkJY29udGludWU7CiAJCXJldCArPSBkc29fX2ZwcmludGZfYnVpbGRpZChwb3MsIGZwKTsKIAkJcmV0ICs9IGZwcmludGYoZnAsICIgJXNcbiIsIHBvcy0+bG9uZ19uYW1lKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotc2l6ZV90IGRzb3NfX2ZwcmludGZfYnVpbGRpZChGSUxFICpmcCkKK3NpemVfdCBkc29zX19mcHJpbnRmX2J1aWxkaWQoRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKQogewotCXJldHVybiAoX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJmRzb3NfX2tlcm5lbCwgZnApICsKLQkJX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJmRzb3NfX3VzZXIsIGZwKSk7CisJcmV0dXJuIChfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmZHNvc19fa2VybmVsLCBmcCwgd2l0aF9oaXRzKSArCisJCV9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZkc29zX191c2VyLCBmcCwgd2l0aF9oaXRzKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19jcmVhdGVfa2VybmVsKCBjb25zdCBjaGFyICp2bWxpbnV4KQorc3RydWN0IGRzbyAqZHNvX19uZXdfa2VybmVsKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGRzbyAqa2VybmVsID0gZHNvX19uZXcodm1saW51eCA/OiAiW2tlcm5lbC5rYWxsc3ltc10iKTsKKwlzdHJ1Y3QgZHNvICpzZWxmID0gZHNvX19uZXcobmFtZSA/OiAiW2tlcm5lbC5rYWxsc3ltc10iKTsKIAotCWlmIChrZXJuZWwgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlrZXJuZWwtPnNob3J0X25hbWUgPSAiW2tlcm5lbF0iOwotCWtlcm5lbC0+a2VybmVsCSAgID0gMTsKLQotCXZkc28gPSBkc29fX25ldygiW3Zkc29dIik7Ci0JaWYgKHZkc28gPT0gTlVMTCkKLQkJZ290byBvdXRfZGVsZXRlX2tlcm5lbF9kc287Ci0JZHNvX19zZXRfbG9hZGVkKHZkc28sIE1BUF9fRlVOQ1RJT04pOwotCi0JaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKCIvc3lzL2tlcm5lbC9ub3RlcyIsIGtlcm5lbC0+YnVpbGRfaWQsCi0JCQkJIHNpemVvZihrZXJuZWwtPmJ1aWxkX2lkKSkgPT0gMCkKLQkJa2VybmVsLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwotCi0JZHNvc19fYWRkKCZkc29zX19rZXJuZWwsIGtlcm5lbCk7Ci0JZHNvc19fYWRkKCZkc29zX191c2VyLCB2ZHNvKTsKLQotCXJldHVybiBrZXJuZWw7Ci0KLW91dF9kZWxldGVfa2VybmVsX2RzbzoKLQlkc29fX2RlbGV0ZShrZXJuZWwpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgY29uc3QgY2hhciAqdm1saW51eCkKLXsKLQlzdHJ1Y3QgbWFwICpmdW5jdGlvbnMsICp2YXJpYWJsZXM7Ci0Jc3RydWN0IGRzbyAqa2VybmVsID0gZHNvc19fY3JlYXRlX2tlcm5lbCh2bWxpbnV4KTsKLQotCWlmIChrZXJuZWwgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JZnVuY3Rpb25zID0gbWFwX19uZXcyKDAsIGtlcm5lbCwgTUFQX19GVU5DVElPTik7Ci0JaWYgKGZ1bmN0aW9ucyA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQl2YXJpYWJsZXMgPSBtYXBfX25ldzIoMCwga2VybmVsLCBNQVBfX1ZBUklBQkxFKTsKLQlpZiAodmFyaWFibGVzID09IE5VTEwpIHsKLQkJbWFwX19kZWxldGUoZnVuY3Rpb25zKTsKLQkJcmV0dXJuIC0xOworCWlmIChzZWxmICE9IE5VTEwpIHsKKwkJc2VsZi0+c2hvcnRfbmFtZSA9ICJba2VybmVsXSI7CisJCXNlbGYtPmtlcm5lbAkgPSAxOwogCX0KIAotCWZ1bmN0aW9ucy0+bWFwX2lwID0gZnVuY3Rpb25zLT51bm1hcF9pcCA9Ci0JCXZhcmlhYmxlcy0+bWFwX2lwID0gdmFyaWFibGVzLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7Ci0JbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIGZ1bmN0aW9ucyk7Ci0JbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIHZhcmlhYmxlcyk7CisJcmV0dXJuIHNlbGY7Cit9CisKK3ZvaWQgZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYpCit7CisJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKCIvc3lzL2tlcm5lbC9ub3RlcyIsIHNlbGYtPmJ1aWxkX2lkLAorCQkJCSBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpKSA9PSAwKQorCQlzZWxmLT5oYXNfYnVpbGRfaWQgPSB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IGRzbyAqZHNvc19fY3JlYXRlX2tlcm5lbChjb25zdCBjaGFyICp2bWxpbnV4KQoreworCXN0cnVjdCBkc28gKmtlcm5lbCA9IGRzb19fbmV3X2tlcm5lbCh2bWxpbnV4KTsKKworCWlmIChrZXJuZWwgIT0gTlVMTCkgeworCQlkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoa2VybmVsKTsKKwkJZHNvc19fYWRkKCZkc29zX19rZXJuZWwsIGtlcm5lbCk7CisJfQorCisJcmV0dXJuIGtlcm5lbDsKK30KKworaW50IF9fbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCSAgICAgc3RydWN0IG1hcCAqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdLAorCQkJCSAgICAgc3RydWN0IGRzbyAqa2VybmVsKQoreworCWVudW0gbWFwX3R5cGUgdHlwZTsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVBfX05SX1RZUEVTOyArK3R5cGUpIHsKKwkJc3RydWN0IGttYXAgKmttYXA7CisKKwkJdm1saW51eF9tYXBzW3R5cGVdID0gbWFwX19uZXcyKDAsIGtlcm5lbCwgdHlwZSk7CisJCWlmICh2bWxpbnV4X21hcHNbdHlwZV0gPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKworCQl2bWxpbnV4X21hcHNbdHlwZV0tPm1hcF9pcCA9CisJCQl2bWxpbnV4X21hcHNbdHlwZV0tPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKKworCQlrbWFwID0gbWFwX19rbWFwKHZtbGludXhfbWFwc1t0eXBlXSk7CisJCWttYXAtPmttYXBzID0gc2VsZjsKKwkJbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIHZtbGludXhfbWFwc1t0eXBlXSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzkxLDE5ICsxOTM3LDIyIEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK2ludCBtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJICAgc3RydWN0IG1hcCAqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdKQogewotCWlmIChtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoJnNlbGYtPmttYXBzLAotCQkJCQkgICBzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpIDwgMCkKKwlzdHJ1Y3QgZHNvICprZXJuZWwgPSBkc29zX19jcmVhdGVfa2VybmVsKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSk7CisKKwlpZiAoa2VybmVsID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAotCWlmIChzeW1ib2xfY29uZi51c2VfbW9kdWxlcyAmJgotCSAgICBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9tb2R1bGVfbWFwcyhzZWxmKSA8IDApCi0JCXByX2RlYnVnKCJGYWlsZWQgdG8gbG9hZCBsaXN0IG9mIG1vZHVsZXMgZm9yIHNlc3Npb24gJXMsICIKLQkJCSAiY29udGludWluZy4uLlxuIiwgc2VsZi0+ZmlsZW5hbWUpOworCWlmIChfX21hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmLCB2bWxpbnV4X21hcHMsIGtlcm5lbCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3ltYm9sX2NvbmYudXNlX21vZHVsZXMgJiYgbWFwX2dyb3Vwc19fY3JlYXRlX21vZHVsZXMoc2VsZikgPCAwKQorCQlwcl9kZWJ1ZygiUHJvYmxlbXMgY3JlYXRpbmcgbW9kdWxlIG1hcHMsIGNvbnRpbnVpbmcgYW55d2F5Li4uXG4iKTsKIAkvKgogCSAqIE5vdyB0aGF0IHdlIGhhdmUgYWxsIHRoZSBtYXBzIGNyZWF0ZWQsIGp1c3Qgc2V0IHRoZSAtPmVuZCBvZiB0aGVtOgogCSAqLwotCW1hcF9ncm91cHNfX2ZpeHVwX2VuZCgmc2VsZi0+a21hcHMpOworCW1hcF9ncm91cHNfX2ZpeHVwX2VuZChzZWxmKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAppbmRleCA4YWRlZDIzLi4yODBkYWRkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgImV2ZW50LmgiCiAKKyNkZWZpbmUgREVCVUdfQ0FDSEVfRElSICIuZGVidWciCisKICNpZmRlZiBIQVZFX0NQTFVTX0RFTUFOR0xFCiBleHRlcm4gY2hhciAqY3BsdXNfZGVtYW5nbGUoY29uc3QgY2hhciAqLCBpbnQpOwogCkBAIC00OSw2ICs1MSw4IEBACiAJY2hhcgkJbmFtZVswXTsKIH07CiAKK3ZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZik7CisKIHN0cnVjdCBzdHJsaXN0OwogCiBzdHJ1Y3Qgc3ltYm9sX2NvbmYgewpAQCAtNTgsNyArNjIsOCBAQAogCQkJc29ydF9ieV9uYW1lLAogCQkJc2hvd19ucl9zYW1wbGVzLAogCQkJdXNlX2NhbGxjaGFpbiwKLQkJCWV4Y2x1ZGVfb3RoZXI7CisJCQlleGNsdWRlX290aGVyLAorCQkJZnVsbF9wYXRoczsKIAljb25zdCBjaGFyCSp2bWxpbnV4X25hbWUsCiAJCQkqZmllbGRfc2VwOwogCWNoYXIgICAgICAgICAgICAqZHNvX2xpc3Rfc3RyLApAQCAtNzcsNiArODIsMTIgQEAKIAlyZXR1cm4gKCh2b2lkICopc2VsZikgLSBzeW1ib2xfY29uZi5wcml2X3NpemU7CiB9CiAKK3N0cnVjdCByZWZfcmVsb2Nfc3ltIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXU2NAkJYWRkcjsKKwl1NjQJCXVucmVsb2NhdGVkX2FkZHI7Cit9OworCiBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiB7CiAJc3RydWN0IHRocmVhZCAqdGhyZWFkOwogCXN0cnVjdCBtYXAgICAgKm1hcDsKQEAgLTk0LDYgKzEwNSw3IEBACiAJdTgJCSBzbGVuX2NhbGN1bGF0ZWQ6MTsKIAl1OAkJIGhhc19idWlsZF9pZDoxOwogCXU4CQkga2VybmVsOjE7CisJdTgJCSBoaXQ6MTsKIAl1bnNpZ25lZCBjaGFyCSBvcmlnaW47CiAJdTgJCSBzb3J0ZWRfYnlfbmFtZTsKIAl1OAkJIGxvYWRlZDsKQEAgLTEwNSwzNyArMTE3LDU1IEBACiB9OwogCiBzdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCBkc28gKmRzb19fbmV3X2tlcm5lbChjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgZHNvX19kZWxldGUoc3RydWN0IGRzbyAqc2VsZik7CiAKIGJvb2wgZHNvX19sb2FkZWQoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIGJvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgZHNvX19zZXRfbG9hZGVkKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK3sKKwlzZWxmLT5sb2FkZWQgfD0gKDEgPDwgdHlwZSk7Cit9CisKIHZvaWQgZHNvX19zb3J0X2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIAotc3RydWN0IHBlcmZfc2Vzc2lvbjsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRzb3NfX3VzZXIsIGRzb3NfX2tlcm5lbDsKIAotc3RydWN0IGRzbyAqZHNvc19fZmluZG5ldyhjb25zdCBjaGFyICpuYW1lKTsKLWludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworc3RydWN0IGRzbyAqX19kc29zX19maW5kbmV3KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gX19kc29zX19maW5kbmV3KCZkc29zX191c2VyLCBuYW1lKTsKK30KKworaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworaW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorCQkJICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgbWFwICptYXAsCisJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKIHZvaWQgZHNvc19fZnByaW50ZihGSUxFICpmcCk7Ci1zaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwKTsKK3NpemVfdCBkc29zX19mcHJpbnRmX2J1aWxkaWQoRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKTsKIAogc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKnNlbGYsIEZJTEUgKmZwKTsKIHNpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7CiBjaGFyIGRzb19fc3ltdGFiX29yaWdpbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKTsKK3ZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGNoYXIgKm5hbWUpOwogdm9pZCBkc29fX3NldF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmLCB2b2lkICpidWlsZF9pZCk7Cit2b2lkIGRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmKTsKIHN0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2woc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcik7CiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLAogCQkJCQljb25zdCBjaGFyICpuYW1lKTsKIAogaW50IGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpOwogaW50IHN5c2ZzX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpOwotYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyh2b2lkKTsKLWludCBidWlsZF9pZF9fc3ByaW50Zih1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpOworYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyhib29sIHdpdGhfaGl0cyk7CitpbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKTsKK2ludCBrYWxsc3ltc19fcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmFyZywKKwkJICAgIGludCAoKnByb2Nlc3Nfc3ltYm9sKSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgY2hhciB0eXBlLCB1NjQgc3RhcnQpKTsKIAogaW50IHN5bWJvbF9faW5pdCh2b2lkKTsKLWludCBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKTsKK2Jvb2wgc3ltYm9sX3R5cGVfX2lzX2EoY2hhciBzeW1ib2xfdHlwZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSk7CiAKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRzb3NfX3VzZXIsIGRzb3NfX2tlcm5lbDsKLWV4dGVybiBzdHJ1Y3QgZHNvICp2ZHNvOwogI2VuZGlmIC8qIF9fUEVSRl9TWU1CT0wgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwppbmRleCA0YTA4ZGNmLi4yMWI5MjE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCkBAIC0zMSwxMiArMzEsNDEgQEAKIAlyZXR1cm4gc2VsZjsKIH0KIAorc3RhdGljIHZvaWQgbWFwX2dyb3Vwc19fZmx1c2goc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpCit7CisJaW50IHR5cGU7CisKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgTUFQX19OUl9UWVBFUzsgdHlwZSsrKSB7CisJCXN0cnVjdCByYl9yb290ICpyb290ID0gJnNlbGYtPm1hcHNbdHlwZV07CisJCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3Qocm9vdCk7CisKKwkJd2hpbGUgKG5leHQpIHsKKwkJCXN0cnVjdCBtYXAgKnBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCQkJbmV4dCA9IHJiX25leHQoJnBvcy0+cmJfbm9kZSk7CisJCQlyYl9lcmFzZSgmcG9zLT5yYl9ub2RlLCByb290KTsKKwkJCS8qCisJCQkgKiBXZSBtYXkgaGF2ZSByZWZlcmVuY2VzIHRvIHRoaXMgbWFwLCBmb3IKKwkJCSAqIGluc3RhbmNlIGluIHNvbWUgaGlzdF9lbnRyeSBpbnN0YW5jZXMsIHNvCisJCQkgKiBqdXN0IG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlIGxpc3QuCisJCQkgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnBvcy0+bm9kZSwgJnNlbGYtPnJlbW92ZWRfbWFwc1twb3MtPnR5cGVdKTsKKwkJfQorCX0KK30KKwogaW50IHRocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSkKIHsKKwlpbnQgZXJyOworCiAJaWYgKHNlbGYtPmNvbW0pCiAJCWZyZWUoc2VsZi0+Y29tbSk7CiAJc2VsZi0+Y29tbSA9IHN0cmR1cChjb21tKTsKLQlyZXR1cm4gc2VsZi0+Y29tbSA/IDAgOiAtRU5PTUVNOworCWVyciA9IHNlbGYtPmNvbW0gPT0gTlVMTCA/IC1FTk9NRU0gOiAwOworCWlmICghZXJyKSB7CisJCXNlbGYtPmNvbW1fc2V0ID0gdHJ1ZTsKKwkJbWFwX2dyb3Vwc19fZmx1c2goJnNlbGYtPm1nKTsKKwl9CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHRocmVhZF9fY29tbV9sZW4oc3RydWN0IHRocmVhZCAqc2VsZikKQEAgLTUwLDExICs3OSw2IEBACiAJcmV0dXJuIHNlbGYtPmNvbW1fbGVuOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqbWFwX3R5cGVfX25hbWVbTUFQX19OUl9UWVBFU10gPSB7Ci0JW01BUF9fRlVOQ1RJT05dID0gIkZ1bmN0aW9ucyIsCi0JW01BUF9fVkFSSUFCTEVdID0gIlZhcmlhYmxlcyIsCi19OwotCiBzdGF0aWMgc2l6ZV90IF9fbWFwX2dyb3Vwc19fZnByaW50Zl9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAogCQkJCQkgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCkKIHsKQEAgLTI1NSwxMSArMjc5LDE0IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoc2VsZi0+Y29tbSkKLQkJZnJlZShzZWxmLT5jb21tKTsKLQlzZWxmLT5jb21tID0gc3RyZHVwKHBhcmVudC0+Y29tbSk7Ci0JaWYgKCFzZWxmLT5jb21tKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocGFyZW50LT5jb21tX3NldCkgeworCQlpZiAoc2VsZi0+Y29tbSkKKwkJCWZyZWUoc2VsZi0+Y29tbSk7CisJCXNlbGYtPmNvbW0gPSBzdHJkdXAocGFyZW50LT5jb21tKTsKKwkJaWYgKCFzZWxmLT5jb21tKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNlbGYtPmNvbW1fc2V0ID0gdHJ1ZTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKQogCQlpZiAobWFwX2dyb3Vwc19fY2xvbmUoJnNlbGYtPm1nLCAmcGFyZW50LT5tZywgaSkgPCAwKQpAQCAtMjgyLDE0ICszMDksMTMgQEAKIH0KIAogc3RydWN0IHN5bWJvbCAqbWFwX2dyb3Vwc19fZmluZF9zeW1ib2woc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCi0JCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJICAgICAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJICAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJc3RydWN0IG1hcCAqbWFwID0gbWFwX2dyb3Vwc19fZmluZChzZWxmLCB0eXBlLCBhZGRyKTsKIAogCWlmIChtYXAgIT0gTlVMTCkKLQkJcmV0dXJuIG1hcF9fZmluZF9zeW1ib2wobWFwLCBzZXNzaW9uLCBtYXAtPm1hcF9pcChtYXAsIGFkZHIpLCBmaWx0ZXIpOworCQlyZXR1cm4gbWFwX19maW5kX3N5bWJvbChtYXAsIG1hcC0+bWFwX2lwKG1hcCwgYWRkciksIGZpbHRlcik7CiAKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAppbmRleCBjMjA2ZjcyLi4wYTI4ZjM5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCkBAIC0xNSw2ICsxNSw3IEBACiAJc3RydWN0IG1hcF9ncm91cHMJbWc7CiAJcGlkX3QJCQlwaWQ7CiAJY2hhcgkJCXNob3J0bmFtZVszXTsKKwlib29sCQkJY29tbV9zZXQ7CiAJY2hhcgkJCSpjb21tOwogCWludAkJCWNvbW1fbGVuOwogfTsKQEAgLTQ4LDIzICs0OSwzNiBAQAogCXJldHVybiBzZWxmID8gbWFwX2dyb3Vwc19fZmluZCgmc2VsZi0+bWcsIHR5cGUsIGFkZHIpIDogTlVMTDsKIH0KIAordm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwKKwkJCSAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCisJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAorCQkJICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKTsKKwogdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICpzZWxmLAogCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCiAJCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCiAJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiBzdHJ1Y3Qgc3ltYm9sICptYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKLQkJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkgICAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bWJvbCAqCi1tYXBfZ3JvdXBzX19maW5kX2Z1bmN0aW9uKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJICB1NjQgYWRkciwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN5bWJvbCAqbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbihzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkJCSAgICAgICB1NjQgYWRkciwKKwkJCQkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCXJldHVybiBtYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzZWxmLCBzZXNzaW9uLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLCBmaWx0ZXIpOworCXJldHVybiBtYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzZWxmLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLCBmaWx0ZXIpOwogfQogCiBzdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCiAJCQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgX19tYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJICAgICBzdHJ1Y3QgbWFwICp2bWxpbnV4X21hcHNbTUFQX19OUl9UWVBFU10sCisJCQkJICAgICBzdHJ1Y3QgZHNvICprZXJuZWwpOworaW50IG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkgICBzdHJ1Y3QgbWFwICp2bWxpbnV4X21hcHNbTUFQX19OUl9UWVBFU10pOworCitzdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19uZXdfbW9kdWxlKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCB1NjQgc3RhcnQsCisJCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUpOwogI2VuZGlmCS8qIF9fUEVSRl9USFJFQURfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKaW5kZXggY2FjZTM1NS4uNWVhODk3MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KICNkZWZpbmUgX0dOVV9TT1VSQ0UKICNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxtbnRlbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMzcsNiArMzgsNyBAQAogCiAjaW5jbHVkZSAiLi4vcGVyZi5oIgogI2luY2x1ZGUgInRyYWNlLWV2ZW50LmgiCisjaW5jbHVkZSAiZGVidWdmcy5oIgogCiAjZGVmaW5lIFZFUlNJT04gIjAuNSIKIApAQCAtMTAxLDMyICsxMDMsMTIgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZGVidWdmcyh2b2lkKQogewotCXN0YXRpYyBjaGFyIGRlYnVnZnNbTUFYX1BBVEgrMV07Ci0Jc3RhdGljIGludCBkZWJ1Z2ZzX2ZvdW5kOwotCWNoYXIgdHlwZVsxMDBdOwotCUZJTEUgKmZwOworCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX21vdW50KE5VTEwpOwogCi0JaWYgKGRlYnVnZnNfZm91bmQpCi0JCXJldHVybiBkZWJ1Z2ZzOworCWlmICghcGF0aCkKKwkJZGllKCJZb3VyIGtlcm5lbCBub3Qgc3VwcG9ydCBkZWJ1Z2ZzIGZpbGVzeXN0ZW0iKTsKIAotCWlmICgoZnAgPSBmb3BlbigiL3Byb2MvbW91bnRzIiwiciIpKSA9PSBOVUxMKQotCQlkaWUoIkNhbid0IG9wZW4gL3Byb2MvbW91bnRzIGZvciByZWFkIik7Ci0KLQl3aGlsZSAoZnNjYW5mKGZwLCAiJSpzICUiCi0JCSAgICAgIFNUUihNQVhfUEFUSCkKLQkJICAgICAgInMgJTk5cyAlKnMgJSpkICUqZFxuIiwKLQkJICAgICAgZGVidWdmcywgdHlwZSkgPT0gMikgewotCQlpZiAoc3RyY21wKHR5cGUsICJkZWJ1Z2ZzIikgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQlmY2xvc2UoZnApOwotCi0JaWYgKHN0cmNtcCh0eXBlLCAiZGVidWdmcyIpICE9IDApCi0JCWRpZSgiZGVidWdmcyBub3QgbW91bnRlZCwgcGxlYXNlIG1vdW50Iik7Ci0KLQlkZWJ1Z2ZzX2ZvdW5kID0gMTsKLQotCXJldHVybiBkZWJ1Z2ZzOworCXJldHVybiBwYXRoOwogfQogCiAvKgpAQCAtMjcxLDYgKzI1Myw4IEBACiAJd3JpdGVfb3JfZGllKCJoZWFkZXJfcGFnZSIsIDEyKTsKIAl3cml0ZV9vcl9kaWUoJnNpemUsIDgpOwogCWNoZWNrX3NpemUgPSBjb3B5X2ZpbGVfZmQoZmQpOworCWNsb3NlKGZkKTsKKwogCWlmIChzaXplICE9IGNoZWNrX3NpemUpCiAJCWRpZSgid3Jvbmcgc2l6ZSBmb3IgJyVzJyBzaXplPSVsbGQgcmVhZD0lbGxkIiwKIAkJICAgIHBhdGgsIHNpemUsIGNoZWNrX3NpemUpOwpAQCAtMjg5LDYgKzI3Myw3IEBACiAJaWYgKHNpemUgIT0gY2hlY2tfc2l6ZSkKIAkJZGllKCJ3cm9uZyBzaXplIGZvciAnJXMnIiwgcGF0aCk7CiAJcHV0X3RyYWNpbmdfZmlsZShwYXRoKTsKKwljbG9zZShmZCk7CiB9CiAKIHN0YXRpYyBib29sIG5hbWVfaW5fdHBfbGlzdChjaGFyICpzeXMsIHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnRwcykKQEAgLTMxNyw3ICszMDIsOCBAQAogCQlkaWUoImNhbid0IHJlYWQgZGlyZWN0b3J5ICclcyciLCBzeXMpOwogCiAJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSkgewotCQlpZiAoc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CisJCWlmIChkZW50LT5kX3R5cGUgIT0gRFRfRElSIHx8CisJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDAgfHwKIAkJICAgICFuYW1lX2luX3RwX2xpc3QoZGVudC0+ZF9uYW1lLCB0cHMpKQogCQkJY29udGludWU7CkBAIC0zMzQsNyArMzIwLDggQEAKIAogCXJld2luZGRpcihkaXIpOwogCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkpIHsKLQkJaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAorCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSA9PSAwIHx8CiAJCSAgICAhbmFtZV9pbl90cF9saXN0KGRlbnQtPmRfbmFtZSwgdHBzKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzUzLDYgKzM0MCw3IEBACiAKIAkJZnJlZShmb3JtYXQpOwogCX0KKwljbG9zZWRpcihkaXIpOwogfQogCiBzdGF0aWMgdm9pZCByZWFkX2Z0cmFjZV9maWxlcyhzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cHMpCkBAIC0zOTQsMjYgKzM4MiwyMSBAQAogCQlkaWUoImNhbid0IHJlYWQgZGlyZWN0b3J5ICclcyciLCBwYXRoKTsKIAogCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkpIHsKLQkJaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAorCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiZnRyYWNlIikgPT0gMCB8fAogCQkgICAgIXN5c3RlbV9pbl90cF9saXN0KGRlbnQtPmRfbmFtZSwgdHBzKSkKIAkJCWNvbnRpbnVlOwotCQlzeXMgPSBtYWxsb2Nfb3JfZGllKHN0cmxlbihwYXRoKSArIHN0cmxlbihkZW50LT5kX25hbWUpICsgMik7Ci0JCXNwcmludGYoc3lzLCAiJXMvJXMiLCBwYXRoLCBkZW50LT5kX25hbWUpOwotCQlyZXQgPSBzdGF0KHN5cywgJnN0KTsKLQkJZnJlZShzeXMpOwotCQlpZiAocmV0IDwgMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCWNvdW50Kys7CisJCWNvdW50Kys7CiAJfQogCiAJd3JpdGVfb3JfZGllKCZjb3VudCwgNCk7CiAKIAlyZXdpbmRkaXIoZGlyKTsKIAl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgImZ0cmFjZSIpID09IDAgfHwKIAkJICAgICFzeXN0ZW1faW5fdHBfbGlzdChkZW50LT5kX25hbWUsIHRwcykpCkBAIC00MjIsMTQgKzQwNSwxMyBAQAogCQlzcHJpbnRmKHN5cywgIiVzLyVzIiwgcGF0aCwgZGVudC0+ZF9uYW1lKTsKIAkJcmV0ID0gc3RhdChzeXMsICZzdCk7CiAJCWlmIChyZXQgPj0gMCkgewotCQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKLQkJCQl3cml0ZV9vcl9kaWUoZGVudC0+ZF9uYW1lLCBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDEpOwotCQkJCWNvcHlfZXZlbnRfc3lzdGVtKHN5cywgdHBzKTsKLQkJCX0KKwkJCXdyaXRlX29yX2RpZShkZW50LT5kX25hbWUsIHN0cmxlbihkZW50LT5kX25hbWUpICsgMSk7CisJCQljb3B5X2V2ZW50X3N5c3RlbShzeXMsIHRwcyk7CiAJCX0KIAkJZnJlZShzeXMpOwogCX0KIAorCWNsb3NlZGlyKGRpcik7CiAJcHV0X3RyYWNpbmdfZmlsZShwYXRoKTsKIH0KIApAQCAtNTMzLDcgKzUxNSw3IEBACiAJd3JpdGVfb3JfZGllKGJ1ZiwgMSk7CiAKIAkvKiBzYXZlIHBhZ2Vfc2l6ZSAqLwotCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOwogCXdyaXRlX29yX2RpZSgmcGFnZV9zaXplLCA0KTsKIAogCXJlYWRfaGVhZGVyX2ZpbGVzKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCmluZGV4IGM1YzMyYmUuLjliM2MyMGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCkBAIC0xOTI1LDYgKzE5MjUsMTUgQEAKIAlpZiAoIWZpZWxkKQogCQlyZXR1cm4gTlVMTDsKIAorCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcpIHsKKwkJaW50IG9mZnNldDsKKworCQlvZmZzZXQgPSAqKGludCAqKShkYXRhICsgZmllbGQtPm9mZnNldCk7CisJCW9mZnNldCAmPSAweGZmZmY7CisKKwkJcmV0dXJuIGRhdGEgKyBvZmZzZXQ7CisJfQorCiAJcmV0dXJuIGRhdGEgKyBmaWVsZC0+b2Zmc2V0OwogfQogCkBAIC0zMjc3LDMgKzMyODYsMTggQEAKIAljcHVzID0gbnJfY3B1czsKIAlsb25nX3NpemUgPSBsb25nX3N6OwogfQorCitpbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcGFyc2VfY29tbW9uX3BjKGNvbnRleHQtPmV2ZW50X2RhdGEpOworfQorCitpbnQgY29tbW9uX2ZsYWdzKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcGFyc2VfY29tbW9uX2ZsYWdzKGNvbnRleHQtPmV2ZW50X2RhdGEpOworfQorCitpbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQoreworCXJldHVybiBwYXJzZV9jb21tb25fbG9ja19kZXB0aChjb250ZXh0LT5ldmVudF9kYXRhKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmggYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODhmYjI2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0jaWZuZGVmIF9fUEVSRl9UUkFDRV9FVkVOVF9QRVJMX0gKLSNkZWZpbmUgX19QRVJGX1RSQUNFX0VWRU5UX1BFUkxfSAotI2lmZGVmIE5PX0xJQlBFUkwKLXR5cGVkZWYgaW50IElOVEVSUDsKLSNkZWZpbmUgZFNQCi0jZGVmaW5lIEVOVEVSCi0jZGVmaW5lIFNBVkVUTVBTCi0jZGVmaW5lIFBVVEJBQ0sKLSNkZWZpbmUgU1BBR0FJTgotI2RlZmluZSBGUkVFVE1QUwotI2RlZmluZSBMRUFWRQotI2RlZmluZSBTUAotI2RlZmluZSBFUlJTVgotI2RlZmluZSBHX1NDQUxBUgkJKDApCi0jZGVmaW5lIEdfRElTQ0FSRAkJKDApCi0jZGVmaW5lIEdfTk9BUkdTCQkoMCkKLSNkZWZpbmUgUFVTSE1BUksoYSkKLSNkZWZpbmUgU3ZUUlVFKGEpCQkoMCkKLSNkZWZpbmUgWFBVU0hzKHMpCi0jZGVmaW5lIHN2XzJtb3J0YWwoYSkKLSNkZWZpbmUgbmV3U1ZwdihhLGIpCi0jZGVmaW5lIG5ld1NWdXYoYSkKLSNkZWZpbmUgbmV3U1ZpdihhKQotI2RlZmluZSBnZXRfY3YoYSxiKQkJKDApCi0jZGVmaW5lIGNhbGxfcHYoYSxiKQkJKDApCi0jZGVmaW5lIHBlcmxfYWxsb2MoKQkJKDApCi0jZGVmaW5lIHBlcmxfY29uc3RydWN0KGEpCSgwKQotI2RlZmluZSBwZXJsX3BhcnNlKGEsYixjLGQsZSkJKDApCi0jZGVmaW5lIHBlcmxfcnVuKGEpCQkoMCkKLSNkZWZpbmUgcGVybF9kZXN0cnVjdChhKQkoMCkKLSNkZWZpbmUgcGVybF9mcmVlKGEpCQkoMCkKLSNkZWZpbmUgcFRIWAkJCXZvaWQKLSNkZWZpbmUgQ1YJCQl2b2lkCi0jZGVmaW5lIGRYU1VCX1NZUwotI2RlZmluZSBwVEhYXwotc3RhdGljIGlubGluZSB2b2lkIG5ld1hTKGNvbnN0IGNoYXIgKmEsIHZvaWQgKmIsIGNvbnN0IGNoYXIgKmMpIHt9Ci1zdGF0aWMgdm9pZCBib290X1BlcmZfX1RyYWNlX19Db250ZXh0KHBUSFhfIENWICpjdikge30KLXN0YXRpYyB2b2lkIGJvb3RfRHluYUxvYWRlcihwVEhYXyBDViAqY3YpIHt9Ci0jZWxzZQotI2luY2x1ZGUgPEVYVEVSTi5oPgotI2luY2x1ZGUgPHBlcmwuaD4KLXZvaWQgYm9vdF9QZXJmX19UcmFjZV9fQ29udGV4dChwVEhYXyBDViAqY3YpOwotdm9pZCBib290X0R5bmFMb2FkZXIocFRIWF8gQ1YgKmN2KTsKLXR5cGVkZWYgUGVybEludGVycHJldGVyICogSU5URVJQOwotI2VuZGlmCi0KLXN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCB7Ci0Jdm9pZCAqZXZlbnRfZGF0YTsKLX07Ci0KLWludCBjb21tb25fcGMoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKLWludCBjb21tb25fZmxhZ3Moc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKLWludCBjb21tb25fbG9ja19kZXB0aChzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpOwotCi0jZW5kaWYgLyogX19QRVJGX1RSQUNFX0VWRU5UX1BFUkxfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKaW5kZXggMTc0NDQyMi4uN2NkMTE5MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKgogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAqLwotI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CiAKICNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtODMsNyArODMsNyBAQAogCWNoYXIgKnN0ciA9IE5VTEw7CiAJaW50IHNpemUgPSAwOwogCWludCBpOwotCWludCByOworCW9mZl90IHI7CiAKIAlmb3IgKDs7KSB7CiAJCXIgPSByZWFkKGlucHV0X2ZkLCBidWYsIEJVRlNJWik7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAogCS8qIG1vdmUgdGhlIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KIAlyID0gbHNlZWsoaW5wdXRfZmQsIC0ociAtIGkpLCBTRUVLX0NVUik7Ci0JaWYgKHIgPCAwKQorCWlmIChyID09IChvZmZfdCktMSkKIAkJZGllKCJsc2VlayIpOwogCiAJaWYgKHN0cikgewpAQCAtMjgyLDggKzI4Miw4IEBACiAKIHN0YXRpYyB2b2lkIGdldF9uZXh0X3BhZ2UoaW50IGNwdSkKIHsKLQlvZmY2NF90IHNhdmVfc2VlazsKLQlvZmY2NF90IHJldDsKKwlvZmZfdCBzYXZlX3NlZWs7CisJb2ZmX3QgcmV0OwogCiAJaWYgKCFjcHVfZGF0YVtjcHVdLnBhZ2UpCiAJCXJldHVybjsKQEAgLTI5OCwxNyArMjk4LDE3IEBACiAJCXVwZGF0ZV9jcHVfZGF0YV9pbmRleChjcHUpOwogCiAJCS8qIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIG1heSBleHBlY3QgdGhlIHBvaW50ZXIgdG8gbm90IG1vdmUgKi8KLQkJc2F2ZV9zZWVrID0gbHNlZWs2NChpbnB1dF9mZCwgMCwgU0VFS19DVVIpOworCQlzYXZlX3NlZWsgPSBsc2VlayhpbnB1dF9mZCwgMCwgU0VFS19DVVIpOwogCi0JCXJldCA9IGxzZWVrNjQoaW5wdXRfZmQsIGNwdV9kYXRhW2NwdV0ub2Zmc2V0LCBTRUVLX1NFVCk7Ci0JCWlmIChyZXQgPCAwKQorCQlyZXQgPSBsc2VlayhpbnB1dF9mZCwgY3B1X2RhdGFbY3B1XS5vZmZzZXQsIFNFRUtfU0VUKTsKKwkJaWYgKHJldCA9PSAob2ZmX3QpLTEpCiAJCQlkaWUoImZhaWxlZCB0byBsc2VlayIpOwogCQlyZXQgPSByZWFkKGlucHV0X2ZkLCBjcHVfZGF0YVtjcHVdLnBhZ2UsIHBhZ2Vfc2l6ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZGllKCJmYWlsZWQgdG8gcmVhZCBwYWdlIik7CiAKIAkJLyogcmVzZXQgdGhlIGZpbGUgcG9pbnRlciBiYWNrICovCi0JCWxzZWVrNjQoaW5wdXRfZmQsIHNhdmVfc2VlaywgU0VFS19TRVQpOworCQlsc2VlayhpbnB1dF9mZCwgc2F2ZV9zZWVrLCBTRUVLX1NFVCk7CiAKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1zY3JpcHRpbmcuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1zY3JpcHRpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWE5ODNhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXNjcmlwdGluZy5jCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogdHJhY2UtZXZlbnQtc2NyaXB0aW5nLiAgU2NyaXB0aW5nIGVuZ2luZSBjb21tb24gYW5kIGluaXRpYWxpemF0aW9uIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiLi4vcGVyZi5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgorCitzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCitzdGF0aWMgaW50IHN0b3Bfc2NyaXB0X3Vuc3VwcG9ydGVkKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQoaW50IGNwdSBfX3VudXNlZCwKKwkJCQkgICAgICB2b2lkICpkYXRhIF9fdW51c2VkLAorCQkJCSAgICAgIGludCBzaXplIF9fdW51c2VkLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcyBfX3VudXNlZCwKKwkJCQkgICAgICBjaGFyICpjb21tIF9fdW51c2VkKQoreworfQorCitzdGF0aWMgdm9pZCBwcmludF9weXRob25fdW5zdXBwb3J0ZWRfbXNnKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJQeXRob24gc2NyaXB0aW5nIG5vdCBzdXBwb3J0ZWQuIgorCQkiICBJbnN0YWxsIGxpYnB5dGhvbiBhbmQgcmVidWlsZCBwZXJmIHRvIGVuYWJsZSBpdC5cbiIKKwkJIkZvciBleGFtcGxlOlxuICAjIGFwdC1nZXQgaW5zdGFsbCBweXRob24tZGV2ICh1YnVudHUpIgorCQkiXG4gICMgeXVtIGluc3RhbGwgcHl0aG9uLWRldmVsIChGZWRvcmEpIgorCQkiXG4gIGV0Yy5cbiIpOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqc2NyaXB0IF9fdW51c2VkLAorCQkJCQkgICBpbnQgYXJnYyBfX3VudXNlZCwKKwkJCQkJICAgY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCit7CisJcHJpbnRfcHl0aG9uX3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqb3V0ZmlsZSBfX3VudXNlZCkKK3sKKwlwcmludF9weXRob25fdW5zdXBwb3J0ZWRfbXNnKCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHB5dGhvbl9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzID0geworCS5uYW1lID0gIlB5dGhvbiIsCisJLnN0YXJ0X3NjcmlwdCA9IHB5dGhvbl9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQsCisJLnN0b3Bfc2NyaXB0ID0gc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQsCisJLnByb2Nlc3NfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3Vuc3VwcG9ydGVkLAorCS5nZW5lcmF0ZV9zY3JpcHQgPSBweXRob25fZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkLAorfTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfcHl0aG9uX3NjcmlwdGluZyhzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqc2NyaXB0aW5nX29wcykKK3sKKwlpbnQgZXJyOworCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJQeXRob24iLCBzY3JpcHRpbmdfb3BzKTsKKwlpZiAoZXJyKQorCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIFB5dGhvbiBzY3JpcHQgZXh0ZW5zaW9uIik7CisKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicHkiLCBzY3JpcHRpbmdfb3BzKTsKKwlpZiAoZXJyKQorCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHB5IHNjcmlwdCBleHRlbnNpb24iKTsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKK30KKworI2lmZGVmIE5PX0xJQlBZVEhPTgordm9pZCBzZXR1cF9weXRob25fc2NyaXB0aW5nKHZvaWQpCit7CisJcmVnaXN0ZXJfcHl0aG9uX3NjcmlwdGluZygmcHl0aG9uX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMpOworfQorI2Vsc2UKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHB5dGhvbl9zY3JpcHRpbmdfb3BzOworCit2b2lkIHNldHVwX3B5dGhvbl9zY3JpcHRpbmcodm9pZCkKK3sKKwlyZWdpc3Rlcl9weXRob25fc2NyaXB0aW5nKCZweXRob25fc2NyaXB0aW5nX29wcyk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJpbnRfcGVybF91bnN1cHBvcnRlZF9tc2codm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlBlcmwgc2NyaXB0aW5nIG5vdCBzdXBwb3J0ZWQuIgorCQkiICBJbnN0YWxsIGxpYnBlcmwgYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCisJCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgbGlicGVybC1kZXYgKHVidW50dSkiCisJCSJcbiAgIyB5dW0gaW5zdGFsbCAncGVybChFeHRVdGlsczo6RW1iZWQpJyAoRmVkb3JhKSIKKwkJIlxuICBldGMuXG4iKTsKK30KKworc3RhdGljIGludCBwZXJsX3N0YXJ0X3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpzY3JpcHQgX191bnVzZWQsCisJCQkJCSBpbnQgYXJnYyBfX3VudXNlZCwKKwkJCQkJIGNvbnN0IGNoYXIgKiphcmd2IF9fdW51c2VkKQoreworCXByaW50X3BlcmxfdW5zdXBwb3J0ZWRfbXNnKCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcGVybF9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqb3V0ZmlsZSBfX3VudXNlZCkKK3sKKwlwcmludF9wZXJsX3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMgPSB7CisJLm5hbWUgPSAiUGVybCIsCisJLnN0YXJ0X3NjcmlwdCA9IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5zdG9wX3NjcmlwdCA9IHN0b3Bfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5wcm9jZXNzX2V2ZW50ID0gcHJvY2Vzc19ldmVudF91bnN1cHBvcnRlZCwKKwkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQsCit9OworCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9wZXJsX3NjcmlwdGluZyhzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqc2NyaXB0aW5nX29wcykKK3sKKwlpbnQgZXJyOworCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJQZXJsIiwgc2NyaXB0aW5nX29wcyk7CisJaWYgKGVycikKKwkJZGllKCJlcnJvciByZWdpc3RlcmluZyBQZXJsIHNjcmlwdCBleHRlbnNpb24iKTsKKworCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJwbCIsIHNjcmlwdGluZ19vcHMpOworCWlmIChlcnIpCisJCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgcGwgc2NyaXB0IGV4dGVuc2lvbiIpOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCkpOworfQorCisjaWZkZWYgTk9fTElCUEVSTAordm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKQoreworCXJlZ2lzdGVyX3Blcmxfc2NyaXB0aW5nKCZwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMpOworfQorI2Vsc2UKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHBlcmxfc2NyaXB0aW5nX29wczsKKwordm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKQoreworCXJlZ2lzdGVyX3Blcmxfc2NyaXB0aW5nKCZwZXJsX3NjcmlwdGluZ19vcHMpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCmluZGV4IDZhZDQwNTYuLmMzMjY5YjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCkBAIC0yNzksNyArMjc5LDE1IEBACiAKIGludCBzY3JpcHRfc3BlY19yZWdpc3Rlcihjb25zdCBjaGFyICpzcGVjLCBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqb3BzKTsKIAotZXh0ZXJuIHN0cnVjdCBzY3JpcHRpbmdfb3BzIHBlcmxfc2NyaXB0aW5nX29wczsKIHZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCk7Cit2b2lkIHNldHVwX3B5dGhvbl9zY3JpcHRpbmcodm9pZCk7CisKK3N0cnVjdCBzY3JpcHRpbmdfY29udGV4dCB7CisJdm9pZCAqZXZlbnRfZGF0YTsKK307CisKK2ludCBjb21tb25fcGMoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKK2ludCBjb21tb25fZmxhZ3Moc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKK2ludCBjb21tb25fbG9ja19kZXB0aChzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpOwogCiAjZW5kaWYgLyogX19QRVJGX1RSQUNFX0VWRU5UU19IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdXRpbC5jIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWI4OTBmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuYwpAQCAtMCwwICsxLDk0IEBACisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKK2ludCBta2Rpcl9wKGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBzdGF0IHN0OworCWludCBlcnI7CisJY2hhciAqZCA9IHBhdGg7CisKKwlpZiAoKmQgIT0gJy8nKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3RhdChwYXRoLCAmc3QpID09IDApCisJCXJldHVybiAwOworCisJd2hpbGUgKCorK2QgPT0gJy8nKTsKKworCXdoaWxlICgoZCA9IHN0cmNocihkLCAnLycpKSkgeworCQkqZCA9ICdcMCc7CisJCWVyciA9IHN0YXQocGF0aCwgJnN0KSAmJiBta2RpcihwYXRoLCBtb2RlKTsKKwkJKmQrKyA9ICcvJzsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwkJd2hpbGUgKCpkID09ICcvJykKKwkJCSsrZDsKKwl9CisJcmV0dXJuIChzdGF0KHBhdGgsICZzdCkgJiYgbWtkaXIocGF0aCwgbW9kZSkpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IHNsb3dfY29weWZpbGUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pCit7CisJaW50IGVyciA9IDA7CisJY2hhciAqbGluZSA9IE5VTEw7CisJc2l6ZV90IG47CisJRklMRSAqZnJvbV9mcCA9IGZvcGVuKGZyb20sICJyIiksICp0b19mcDsKKworCWlmIChmcm9tX2ZwID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJdG9fZnAgPSBmb3Blbih0bywgInciKTsKKwlpZiAodG9fZnAgPT0gTlVMTCkKKwkJZ290byBvdXRfZmNsb3NlX2Zyb207CisKKwl3aGlsZSAoZ2V0bGluZSgmbGluZSwgJm4sIGZyb21fZnApID4gMCkKKwkJaWYgKGZwdXRzKGxpbmUsIHRvX2ZwKSA9PSBFT0YpCisJCQlnb3RvIG91dF9mY2xvc2VfdG87CisJZXJyID0gMDsKK291dF9mY2xvc2VfdG86CisJZmNsb3NlKHRvX2ZwKTsKKwlmcmVlKGxpbmUpOworb3V0X2ZjbG9zZV9mcm9tOgorCWZjbG9zZShmcm9tX2ZwKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY29weWZpbGUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pCit7CisJaW50IGZyb21mZCwgdG9mZDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl2b2lkICphZGRyOworCWludCBlcnIgPSAtMTsKKworCWlmIChzdGF0KGZyb20sICZzdCkpCisJCWdvdG8gb3V0OworCisJaWYgKHN0LnN0X3NpemUgPT0gMCkgLyogL3Byb2M/IGRvIGl0IHNsb3dseS4uLiAqLworCQlyZXR1cm4gc2xvd19jb3B5ZmlsZShmcm9tLCB0byk7CisKKwlmcm9tZmQgPSBvcGVuKGZyb20sIE9fUkRPTkxZKTsKKwlpZiAoZnJvbWZkIDwgMCkKKwkJZ290byBvdXQ7CisKKwl0b2ZkID0gY3JlYXQodG8sIDA3NTUpOworCWlmICh0b2ZkIDwgMCkKKwkJZ290byBvdXRfY2xvc2VfZnJvbTsKKworCWFkZHIgPSBtbWFwKE5VTEwsIHN0LnN0X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZyb21mZCwgMCk7CisJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkKKwkJZ290byBvdXRfY2xvc2VfdG87CisKKwlpZiAod3JpdGUodG9mZCwgYWRkciwgc3Quc3Rfc2l6ZSkgPT0gc3Quc3Rfc2l6ZSkKKwkJZXJyID0gMDsKKworCW11bm1hcChhZGRyLCBzdC5zdF9zaXplKTsKK291dF9jbG9zZV90bzoKKwljbG9zZSh0b2ZkKTsKKwlpZiAoZXJyKQorCQl1bmxpbmsodG8pOworb3V0X2Nsb3NlX2Zyb206CisJY2xvc2UoZnJvbWZkKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKaW5kZXggYzY3M2Q4OC4uMGY1YjJhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCkBAIC00MDMsNCArNDAzLDcgQEAKICNlbmRpZgogI2VuZGlmCiAKK2ludCBta2Rpcl9wKGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKTsKK2ludCBjb3B5ZmlsZShjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0byk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCmluZGV4IDFjMTVlMzkuLmNmYTU1ZDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYworKysgYi90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKQEAgLTE2OSw2ICsxNjksNyBAQAogCQkJCWNvdW50ZXJ3aWR0aFtqXSwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CiAJCWZwcmludGYoZnAsICJcbiIpOwogCX0KKwlmcmVlKGNvdW50ZXJ3aWR0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfcmVhZF92YWx1ZXNfX2Rpc3BsYXlfcmF3KEZJTEUgKmZwLAo=